//+------------------------------------------------------------------+ //| TrendlinesDay.mq5 | //| Copyright © 2006, nsi2000 | //| http://www.expert-mt4.nm.ru | //+------------------------------------------------------------------+ //---- Copyright #property copyright "Copyright © 2006, nsi2000" //---- link to the website of the author #property link "http://www.expert-mt4.nm.ru" //---- indicator description #property description "" //---- Indicator version #property version "1.00" //---- Drawing the indicator in the main window #property indicator_chart_window //--- buffers are not used for indicator calculation and drawing #property indicator_buffers 0 //--- no graphical constructions #property indicator_plots 0 //+----------------------------------------------+ //| Declaring constants | //+----------------------------------------------+ #define RESET 0 // the constant for getting the command for the indicator recalculation back to the terminal //+----------------------------------------------+ //| Indicator input parameters | //+----------------------------------------------+ input uint nPeriod=10; input uint Limit=350; input color UpChannelColor=clrTeal; input color DnChannelColor=clrRed; //+----------------------------------------------+ //--- declaration of the integer variables for the start of data calculation int min_rates_total,barshift; //+------------------------------------------------------------------+ //| Trend line creation | //+------------------------------------------------------------------+ void CreateTline(long chart_id, // Chart ID string name, // object name int nwin, // window index datetime time1, // price level time 1 double price1, // price level 1 datetime time2, // price level time 2 double price2, // price level 2 color Color, // line color int style, // line style int width, // line width string text) // text { //--- ObjectCreate(chart_id,name,OBJ_TREND,nwin,time1,price1,time2,price2); ObjectSetInteger(chart_id,name,OBJPROP_COLOR,Color); ObjectSetInteger(chart_id,name,OBJPROP_STYLE,style); ObjectSetInteger(chart_id,name,OBJPROP_WIDTH,width); ObjectSetString(chart_id,name,OBJPROP_TEXT,text); ObjectSetInteger(chart_id,name,OBJPROP_BACK,true); ObjectSetInteger(chart_id,name,OBJPROP_RAY_RIGHT,true); //--- } //+------------------------------------------------------------------+ //| Resetting a trend line | //+------------------------------------------------------------------+ void SetTline(long chart_id, // Chart ID string name, // object name int nwin, // window index datetime time1, // price level time 1 double price1, // price level 1 datetime time2, // price level time 2 double price2, // price level 2 color Color, // line color int style, // line style int width, // line width string text) // text { //--- if(ObjectFind(chart_id,name)==-1) CreateTline(chart_id,name,nwin,time1,price1,time2,price2,Color,style,width,text); else { ObjectSetString(chart_id,name,OBJPROP_TEXT,text); ObjectMove(chart_id,name,0,time1,price1); ObjectMove(chart_id,name,1,time2,price2); } //--- } //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ void OnInit() { //--- initialization of variables of the start of data calculation min_rates_total=int(Limit+1); barshift=int((nPeriod-1)/2); //--- initializations of a variable for the indicator short name string shortname="trendlinesDay"; //--- Creation of the name to be displayed in a separate sub-window and in a pop up help IndicatorSetString(INDICATOR_SHORTNAME,shortname); //--- Determining the accuracy of displaying the indicator values IndicatorSetInteger(INDICATOR_DIGITS,_Digits+1); //--- initialization end } //+------------------------------------------------------------------+ //| DelObj | //+------------------------------------------------------------------+ void DelObj() { //--- ObjectDelete(0,"Upper CHN"); ObjectDelete(0,"Lower CHN"); //--- } //+------------------------------------------------------------------+ //| Custom indicator deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- DelObj(); //--- ChartRedraw(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, // number of bars in history at the current tick const int prev_calculated,// amount of history in bars at the previous tick const datetime &Time[], const double &Open[], const double &High[], const double &Low[], const double &Close[], const long &Tick_Volume[], const long &Volume[], const int &Spread[]) { //--- checking if the number of bars is enough for the calculation if(rates_total0; nCurBar--) { int barX=nCurBar+barshift; double LL=Low[ArrayMinimum(Low,nCurBar,nPeriod)]; double HH=High[ArrayMaximum(High,nCurBar,nPeriod)]; if(Low[barX]==LL) { s2=s1; s1=Low[barX]; st2=st1; st1=barX; } if(High[barX]==HH) { r2=r1; r1=High[barX]; rt2=rt1; rt1=barX; } } SetTline(0,"Upper CHN",0,Time[rt2],r2,Time[rt1],r1,UpChannelColor,STYLE_SOLID,2,"Upper CHN"); SetTline(0,"Lower CHN",0,Time[st2],s2,Time[st1],s1,DnChannelColor,STYLE_SOLID,2,"Lower CHN"); //--- return(rates_total); } //+------------------------------------------------------------------+