//+------------------------------------------------------------------+ //| Live lines.mq4 | //| | //| | //+------------------------------------------------------------------+ #property copyright "2015, Anton Gorin" #property link "https://www.mql5.com/ru/users/owis2/publications" #property version "1.0" #property strict #property indicator_separate_window #property indicator_buffers 1 #property indicator_plots 1 //--- plot Price #property indicator_label1 "Price" #property indicator_type1 DRAW_SECTION #property indicator_color1 clrRed #property indicator_style1 STYLE_SOLID #property indicator_width1 1 //--- indicator buffers double PriceBuffer[]; datetime LastTime; int Step; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- indicator buffers mapping SetIndexBuffer(0,PriceBuffer); string Name; switch(_Period) { case PERIOD_M1: Step=5; Name="M5"; break; case PERIOD_M5: Step=3; Name="M15"; break; case PERIOD_M15: Step=2; Name="M30"; break; case PERIOD_M30: Step=2; Name="H1"; break; case PERIOD_H1: Step=4; Name="H4"; break; case PERIOD_H4: Step=6; Name="D1"; break; case PERIOD_D1: Step=5; Name="W"; break; case PERIOD_W1: Step=4; Name="MN"; break; case PERIOD_MN1: Step=3; Name="MN3"; break; } SetIndexEmptyValue(0,0.0); IndicatorShortName("Live lines ("+Name+")"); //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, const int prev_calculated, 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[]) { //--- if(iTime(_Symbol,PERIOD_M1,0)==LastTime) return rates_total; LastTime=iTime(_Symbol,PERIOD_M1,0); int Total=WindowFirstVisibleBar()+Step; if(Total>=Bars) Total=Bars-1; for(int i=0;i<=Total;i+=Step) PriceBuffer[i]=iClose(_Symbol,PERIOD_M1,i*_Period); //--- return value of prev_calculated for next call return(rates_total); } //+------------------------------------------------------------------+