//+------------------------------------------------------------------+ #property copyright "Copyright 2017, cmillion@narod.ru" #property link "http://cmillion.ru" #property version "1.00" #property strict #property indicator_chart_window #property indicator_buffers 2 #property indicator_color1 clrBlue #property indicator_color2 clrRed #property description "Индикатор выдает сигнал при совпадении свечей с нескольких ТФ" //+------------------------------------------------------------------+ double SignalBufferRed[]; double SignalBufferBlue[]; datetime TimeAlert=0; int tf0,tf1,tf2,tf3,tf4,tf5; int S=0; //+------------------------------------------------------------------+ int OnInit() { IndicatorBuffers(2); SetIndexStyle(0,DRAW_ARROW,0,1); SetIndexArrow(0,233); SetIndexStyle(1,DRAW_ARROW,0,1); SetIndexArrow(1,234); SetIndexBuffer(0,SignalBufferBlue); SetIndexBuffer(1,SignalBufferRed); tf0=Period(); tf1=next_period(tf0+1); tf2=next_period(tf1+1); tf3=next_period(tf2+1); tf4=next_period(tf3+1); tf5=next_period(tf4+1); return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ 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[]) { int i,limit; limit=rates_total-prev_calculated-1; if(rates_total<1) return(0); double d=(high[1]-low[1]+high[2]-low[2])/2; for(i=limit; i>=0; i--) { if(S<1 && open[i]-1 && open[i]>close[i] && iOpen(NULL,tf1,iBarShift(NULL,tf1,time[i],false))>iClose(NULL,tf1,iBarShift(NULL,tf1,time[i],false)) && iOpen(NULL,tf2,iBarShift(NULL,tf2,time[i],false))>iClose(NULL,tf2,iBarShift(NULL,tf2,time[i],false)) && iOpen(NULL,tf3,iBarShift(NULL,tf3,time[i],false))>iClose(NULL,tf3,iBarShift(NULL,tf3,time[i],false)) && iOpen(NULL,tf4,iBarShift(NULL,tf4,time[i],false))>iClose(NULL,tf4,iBarShift(NULL,tf4,time[i],false)) && iOpen(NULL,tf5,iBarShift(NULL,tf5,time[i],false))>iClose(NULL,tf5,iBarShift(NULL,tf5,time[i],false))) { SignalBufferRed[i]=high[i]+d; if(i==1 && TimeAlert!=time[i]) Alert(Symbol()," сигнал на продажу"); TimeAlert=time[i]; S=-1; } } return(rates_total); } //+------------------------------------------------------------------+ int next_period(int per) { if(per > 10080) return(43200); if(per > 1440) return(10080); if(per > 240) return(1440); if(per > 60) return(240); if(per > 30) return(60); if(per > 15) return(30); if(per > 5) return(15); if(per > 1) return(5); if(per == 1) return(1); return(Period()); } //+------------------------------------------------------------------+