//+------------------------------------------------------------------+ //| MA Signal.mq4 | //| Copyright 2016, cmillion@narod.ru | //| http://cmillion.ru | //+------------------------------------------------------------------+ #property copyright "Copyright 2016, cmillion@narod.ru" #property link "http://cmillion.ru" #property version "1.00" #property strict #property indicator_chart_window #property indicator_buffers 5 #property indicator_color1 clrBlue #property indicator_color2 clrAqua #property indicator_color3 clrGreen #property indicator_color4 clrBlue #property indicator_color5 clrRed #property description "стрелка при пересечении 2х средних, при условии что 3я средняя растет/падает и находится над/под пересекающимися средними." #property description "лонг: 5 МА пересекает снизу 20 МА, а 50 МА в период с т-1 на т выросла в величине. В тоже время 5 МА и 20 МА находятся выше 50 МА (показатель тренда). " //+------------------------------------------------------------------+ extern int MA_1 = 5; //пмриод 1 МА extern int shift_1 = 0; //Сдвиг 1 МА относительно ценового графика. input ENUM_MA_METHOD method_1 = MODE_SMMA; //Методы скользящих 1 МА input ENUM_APPLIED_PRICE applied_price_1 = PRICE_OPEN; //Используемая цена 1 МА. extern int MA_2 = 20; extern int shift_2 = 0; //Сдвиг 2 МА относительно ценового графика. input ENUM_MA_METHOD method_2 = MODE_SMMA; //Методы скользящих 2 МА input ENUM_APPLIED_PRICE applied_price_2 = PRICE_OPEN; //Используемая цена 2 МА. extern int MA_3 = 50; extern int shift_3 = 0; //Сдвиг 3 МА относительно ценового графика. input ENUM_MA_METHOD method_3 = MODE_SMMA; //Методы скользящих 3 МА input ENUM_APPLIED_PRICE applied_price_3 = PRICE_OPEN; //Используемая цена 3 МА. double MA1[]; double MA2[]; double MA3[]; double SignalBufferRed[]; double SignalBufferBlue[]; //+------------------------------------------------------------------+ int OnInit() { IndicatorBuffers(5); SetIndexStyle(0,DRAW_LINE); SetIndexStyle(1,DRAW_LINE); SetIndexStyle(2,DRAW_LINE); SetIndexStyle(3,DRAW_ARROW,0,2); SetIndexArrow(3,233); SetIndexStyle(4,DRAW_ARROW,0,2); SetIndexArrow(4,234); SetIndexBuffer(0,MA1); SetIndexBuffer(1,MA2); SetIndexBuffer(2,MA3); SetIndexBuffer(3,SignalBufferBlue); SetIndexBuffer(4,SignalBufferRed); IndicatorShortName(StringConcatenate("MA (",MA_1,",",MA_2,",",MA_3,")")); SetIndexLabel(0,"MA_1"); SetIndexLabel(1,"MA_2"); SetIndexLabel(2,"MA_3"); 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); for(i=0; iMA2[i] && MA2[i]>MA3[i] && MA3[i]>MA3[i+1]) SignalBufferBlue[i]=open[i]; if (MA1[i+1]>MA2[i+1] && MA1[i]