Помнится я устанавливал сдвиг вправо посредством SetIndexShift , соответственно при расчёте индексов добавлял обратный сдвиг.
То есть если SetIndexShift( 0, 100), то Buf [0] на графике отобразится на -100
баре, тогда, к примеру, значение для отрисовки на текущем баре
будет Buf [100]. То есть при расчёте привычный Buf [pos] нужно заменять
на Buf [pos+100]. Пишу по памяти, то есть с точностью до знака и до плюс
минус 1 по индексам :).
Помнится я устанавливал сдвиг вправо посредством SetIndexShift , соответственно при расчёте индексов добавлял обратный сдвиг.
То есть если SetIndexShift( 0, 100), то Buf [0] на графике отобразится на -100
баре, тогда, к примеру, значение для отрисовки на текущем баре
будет Buf [100]. То есть при расчёте привычный Buf [pos] нужно заменять
на Buf [pos+100]. Пишу по памяти, то есть с точностью до знака и до плюс
минус 1 по индексам :).
Уточню еще раз, что мне нужно. На графике отрисовываются бары, самый крайний - правый отражает текущее состояние цены и имеет индекс =0. Мне нужно продолжить график вправо относительно этого последнего бара в ту часть где, по идее индексы должны иметь уже отрицательное значение, -1, -2, и т.д., есть ли такая возможность?
Нужно просто в свойствах графических элементов указывать требуемое
вам время справа и тогда графические объекты будут рисоваться
и справа:
|
Нужно просто в свойствах графических элементов указывать требуемое вам время справа и тогда графические объекты будут рисоваться и справа:
Вот код:
//+------------------------------------------------------------------+ //| ForecastSample.mq4 | //| Candid | //| likh@yandex.ru | //+------------------------------------------------------------------+ #property copyright "Candid" #property link "likh@yandex.ru" #property indicator_chart_window //---- input parameters extern int EMAPeriod=55; extern int Horizon=50; bool FirstPass; double PR,mPR; int FBar; int pos; double Buf[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- indicators SetIndexShift(0,Horizon); SetIndexBuffer(0,Buf); SetIndexStyle(0,DRAW_LINE,EMPTY,2); FirstPass = true; //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { if (FirstPass) { FirstPass = false; PR = 2.0/(EMAPeriod+1); mPR = 1-PR; FBar = Bars-Horizon-1; Buf[FBar+Horizon] = Close[FBar]; } int counted_bars=IndicatorCounted(); FBar = Bars-counted_bars-1; if (FBar > 1) FBar = Bars-Horizon-2; for (pos=FBar; pos >= -Horizon; pos--) { if (pos >= 0) Buf[pos+Horizon] = Close[pos]*PR + Buf[pos+Horizon+1]*mPR; else Buf[pos+Horizon] = Buf[pos+Horizon+1]+Point; } //---- //---- return(0); } //+------------------------------------------------------------------+
А вот к нему картинка:
Оказалось проще специально написать пример. Этот индикатор на имеющихся барах рисует EMA, а на следующих Horizon барах прибавляет к предыдущему значению Point. В методических целях :).
Комментариев не делал, лучше на вопросы отвечу. Если будут, конечно.
Долго редактировал предыдущий пост :). Только теперь он готов.
И еще вопрос, при использовании функций
maxidx=ArrayMaximum(iHigh("GОLD",PERIOD_M1,i),5,i);
minidx=ArrayMinimum(iLow("GОLD",PERIOD_M1,i),5,i);
Comment(maxidx," ",minidx); получаются отрицательные индексы maxidx=-1, minidx=-1, в чем ошибка?
И еще вопрос, при использовании функций
maxidx=ArrayMaximum(iHigh("GОLD",PERIOD_M1,i),5,i);
minidx=ArrayMinimum(iLow("GОLD",PERIOD_M1,i),5,i);
Comment(maxidx," ",minidx); получаются отрицательные индексы maxidx=-1, minidx=-1, в чем ошибка?
Всем большое спасибо!
lna01 - функция не успевает обработаться, на первом же шаге программа встает, и индексы =-1.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
При нанесении на график прогнозируемых значений не очень удобно их сравнивать другими линиями на графике, если они смещены влево. Если это смещение на 1-2 бара, то еще терпимо, а если на разные значения и до 10 баров, то в пересечениях разных линей уже трудно ориентироваться.
И еще вопрос, при использовании функций
maxidx=ArrayMaximum(iHigh("GОLD",PERIOD_M1,i),5,i);
minidx=ArrayMinimum(iLow("GОLD",PERIOD_M1,i),5,i);
Comment(maxidx," ",minidx); получаются отрицательные индексы maxidx=-1, minidx=-1, в чем ошибка?