Добрый день Всем! Что то никто не проявил интерес, думаю надо развернуть код: //+------------------------------------------------------------------+ //| iMaxMinTrends.mq4 | //| A.Lopatin & V.Bocharov 2016 | //| diver.stv@gmail.com | //+------------------------------------------------------------------+ #property copyright "A.Lopatin & V.Bocharov 2016" #property link "diver.stv@gmail.com" #property version "1.01" #property strict #property indicator_chart_window #property indicator_buffers 8 #property indicator_plots 8 //--- plot DayHi #property indicator_label1 "DayHi" #property indicator_type1 DRAW_LINE #property indicator_color1 clrWhite #property indicator_style1 STYLE_SOLID #property indicator_width1 4 //--- plot DayLow #property indicator_label2 "DayLow" #property indicator_type2 DRAW_LINE #property indicator_color2 clrWhite #property indicator_style2 STYLE_SOLID #property indicator_width2 4 //--- plot WeekHi #property indicator_label3 "WeekHi" #property indicator_type3 DRAW_LINE #property indicator_color3 clrYellow #property indicator_style3 STYLE_SOLID #property indicator_width3 2 //--- plot WeekLow #property indicator_label4 "WeekLow" #property indicator_type4 DRAW_LINE #property indicator_color4 clrYellow #property indicator_style4 STYLE_SOLID #property indicator_width4 2 //--- plot MonthHi #property indicator_label5 "MonthHi" #property indicator_type5 DRAW_LINE #property indicator_color5 clrAqua #property indicator_style5 STYLE_SOLID #property indicator_width5 2 //--- plot MonthLow #property indicator_label6 "MonthLow" #property indicator_type6 DRAW_LINE #property indicator_color6 clrAqua #property indicator_style6 STYLE_SOLID #property indicator_width6 2 //--- plot YearHi #property indicator_label7 "YearHi" #property indicator_type7 DRAW_LINE #property indicator_color7 clrRed #property indicator_style7 STYLE_SOLID #property indicator_width7 2 //--- plot YearLow #property indicator_label8 "YearLow" #property indicator_type8 DRAW_LINE #property indicator_color8 clrRed #property indicator_style8 STYLE_SOLID #property indicator_width8 2 struct ChartPoint { double price; datetime time; ChartPoint() : price(0.0), time(0) { }; ChartPoint(const double y, const datetime x) : price(y), time(x) { }; ChartPoint(const ChartPoint &r): price(r.price), time(r.time) {}; void operator= (const ChartPoint &r) { price = r.price; time = r.time; }; ~ChartPoint() {}; }; /* --- Color and width settings for the trend lines --- */ input color MonthLinesColor = clrAqua; input int MonthLinesWidth = 1; input color WeekLinesColor = clrRed; input int WeekLinesWidth = 1; input color YearLinesColor = clrYellow; input int YearLinesWidth = 1; //--- indicator buffers double DayHiBuffer[]; double DayLowBuffer[]; double WeekHiBuffer[]; double WeekLowBuffer[]; double MonthHiBuffer[]; double MonthLowBuffer[]; double YearHiBuffer[]; double YearLowBuffer[]; // --- string names for the trend lines const string up_week_line = "UpperWeekLine", lower_week_line = "LowerWeekLine", up_month_line = "UpperMonthLine", lower_month_line = "LowerMonthLine", up_year_line = "UpperYearLine", lower_year_line = "LowerYearLine"; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- indicator buffers mapping SetIndexBuffer(0,DayHiBuffer); SetIndexBuffer(1,DayLowBuffer); SetIndexBuffer(2,WeekHiBuffer); SetIndexBuffer(3,WeekLowBuffer); SetIndexBuffer(4,MonthHiBuffer); SetIndexBuffer(5,MonthLowBuffer); SetIndexBuffer(6,YearHiBuffer); SetIndexBuffer(7,YearLowBuffer); SetIndexEmptyValue(0, 0.0); SetIndexEmptyValue(1, 0.0); SetIndexEmptyValue(2, 0.0); SetIndexEmptyValue(3, 0.0); SetIndexEmptyValue(4, 0.0); SetIndexEmptyValue(5, 0.0); SetIndexEmptyValue(6, 0.0); SetIndexEmptyValue(7, 0.0); //--- return(INIT_SUCCEEDED); } void OnDeinit(const int reason) { // --- Delete lines at deinitialization ObjectDelete(up_week_line); ObjectDelete(lower_week_line); ObjectDelete(up_month_line); ObjectDelete(lower_month_line); ObjectDelete(up_year_line); ObjectDelete(lower_year_line); } //+------------------------------------------------------------------+ //| 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[]) { int i = 1, ti = iTime(Symbol(),1440,0), index = iBarShift(Symbol(), 0, ti), up_bar1 = iHighest (Symbol(),0,MODE_HIGH, index,1), low_bar1 = iLowest (Symbol(),0,MODE_LOW, index,1), up_bar2 = 0, low_bar2 = 0; double hi_price = High[up_bar1]; // get day high value double low_price = Low [low_bar1]; // get day low value // --- fill buffers 0.0 ArrayInitialize(DayHiBuffer, 0.0); ArrayInitialize(DayLowBuffer, 0.0); ArrayInitialize(WeekHiBuffer, 0.0); ArrayInitialize(WeekLowBuffer, 0.0); ArrayInitialize(MonthHiBuffer, 0.0); ArrayInitialize(MonthLowBuffer, 0.0); ArrayInitialize(YearHiBuffer, 0.0); ArrayInitialize(YearLowBuffer, 0.0); // --- fill buffer day high/low values from 1st closed bar to open time of a day for(i = 1;i < index;i++) { DayHiBuffer[i] = hi_price; DayLowBuffer[i] = low_price; } // --- get time, bar index for a open time of a week and high/low price ti = iTime(Symbol(),1440,1); index = iBarShift(Symbol(), 0, ti); up_bar2 = iHighest (Symbol(),0,MODE_HIGH, index,1); low_bar2 = iLowest(Symbol(),0,MODE_LOW, index,1); hi_price = High[up_bar2]; low_price = Low [low_bar2]; // --- fill buffer week high/low values from 1st closed bar to open time of a week for(i = 1;i < index;i++) { WeekHiBuffer[i] = hi_price; WeekLowBuffer[i] = low_price; } // --- draw 2 lines from day to week for high/low if( up_bar1 > 0 && up_bar2 > 0 && up_bar1 != up_bar2 && PeriodSeconds() < 1440*60 ) DrawLine(up_week_line, OBJ_TREND, Time[up_bar2], High[up_bar2], Time[up_bar1], High[up_bar1], WeekLinesColor, WeekLinesWidth); if( low_bar1 > 0 && low_bar2 > 0 && low_bar1 != low_bar2 && PeriodSeconds() < 1440*60 ) DrawLine(lower_week_line, OBJ_TREND, Time[low_bar2], Low[low_bar2], Time[low_bar1], Low[low_bar1], WeekLinesColor, WeekLinesWidth); ti = iTime(Symbol(),43200,0); index = iBarShift(Symbol(), 0, ti); up_bar1 = iHighest (Symbol(),0,MODE_HIGH, index,1); low_bar1 = iLowest (Symbol(),0,MODE_LOW, index,1); hi_price = High[up_bar1]; low_price = Low [low_bar1]; for(i = 1;i < index;i++) { MonthHiBuffer[i] = hi_price; MonthLowBuffer[i] = low_price; } if( up_bar1 > 0 && up_bar2 > 0 && up_bar1 != up_bar2 && PeriodSeconds() < 10080*60 ) DrawLine(up_month_line, OBJ_TREND, Time[up_bar1], High[up_bar1], Time[up_bar2], High[up_bar2], MonthLinesColor, MonthLinesWidth); if( low_bar1 > 0 && low_bar2 > 0 && low_bar1 != low_bar2 && PeriodSeconds() < 10080*60 ) DrawLine(lower_month_line, OBJ_TREND, Time[low_bar1], Low[low_bar1], Time[low_bar2], Low[low_bar2], MonthLinesColor, MonthLinesWidth); ti = iTime(Symbol(),518400,0); index = iBarShift(Symbol(), 0, ti); up_bar2 = iHighest (Symbol(),0,MODE_HIGH, index,1); low_bar2 = iLowest (Symbol(),0,MODE_LOW, index,1); hi_price = High[up_bar2]; low_price = Low [low_bar2]; for(i = 1;i < index;i++) { YearHiBuffer[i] = hi_price; YearLowBuffer[i] = low_price; } if( up_bar1 > 0 && up_bar2 > 0 && up_bar1 != up_bar2 && PeriodSeconds() < 43200*60 ) DrawLine(up_year_line, OBJ_TREND, Time[up_bar2], High[up_bar2], Time[up_bar1], High[up_bar1], YearLinesColor, YearLinesWidth); if( low_bar1 > 0 && low_bar2 > 0 && low_bar1 != low_bar2 && PeriodSeconds() < 43200*60 ) DrawLine(lower_year_line, OBJ_TREND, Time[low_bar2], Low[low_bar2], Time[low_bar1], Low[low_bar1], YearLinesColor, YearLinesWidth); return(rates_total); } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ //| The function draws trend line | //+------------------------------------------------------------------+ void DrawLine(string name,int type,datetime time1,double price1,datetime time2,double price2,color line_color,int line_width=1,int line_style=STYLE_SOLID) { if(ObjectFind(name)==-1) { ObjectCreate(name,type,0,time1,price1,time2,price2); ObjectSet(name,OBJPROP_COLOR,line_color); ObjectSet(name,OBJPROP_WIDTH,line_width); ObjectSet(name,OBJPROP_STYLE,line_style); } else { ObjectSet(name,OBJPROP_TIME1,time1); ObjectSet(name,OBJPROP_PRICE1,price1); ObjectSet(name,OBJPROP_TIME2,time2); ObjectSet(name,OBJPROP_PRICE2,price2); ObjectSet(name,OBJPROP_COLOR,line_color); ObjectSet(name,OBJPROP_STYLE,line_style); ObjectSet(name,OBJPROP_WIDTH,line_width); } }
bar:
оке!
Сразу с ходу, в чем могла собака порыться))
ti = iTime(Symbol(),1440,0),
index = iBarShift(Symbol(), 0, ti),
Эта тема закрывается! Прошу администрацию закрыть эту тему.
Вот эту строчку:
ti = iTime(Symbol(),43200,0); index = iBarShift(Symbol(), 0, ti);
Заменить на:
ti = iTime(Symbol(),43200,0); index = iBarShift(Symbol(), 0, ti); if(iTime(Symbol(),43200,index)<ti)index--;
То есть добавит еще одну строку.
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Добрый день Всем!
У меня есть индикатор iMaxMinTrends (он выложен в CodeBase) написанный по моей задумке Алексеем Лопатиным, который куда то пропал. Так вот в нём дневные и недельные уровни верхних и нижних цен перезапускаются нормально с открытием новой недели и дня и с изменением цен, а вот месячные уровни почему то перезапустились немного раньше, как сегодня не 2 октября в понедельник, а 29 сентября в пятницу. Про годовые уровни вообще молчу, их уровни вообще стоят с начала торговли валютой. Что нужно переделать в коде, чтобы верхние и нижние годовые уровни цен открывались в начале этого года, а не в прошлом и так же месячные уровни в начале месяца и изменялись с изменением уровней цен. Индикатор прикладываю.