Возможно ли продолжить график вправо от 0 индекса

 
Возможно ли продолжить график вправо от 0 индекса принажатой кнопке "смещение графика"?
При нанесении на график прогнозируемых значений не очень удобно их сравнивать другими линиями на графике, если они смещены влево. Если это смещение на 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, в чем ошибка?
 
ниче не понял
 

Помнится я устанавливал сдвиг вправо посредством SetIndexShift , соответственно при расчёте индексов добавлял обратный сдвиг.
То есть если SetIndexShift( 0, 100), то Buf [0] на графике отобразится на -100 баре, тогда, к примеру, значение для отрисовки на текущем баре будет Buf [100]. То есть при расчёте привычный Buf [pos] нужно заменять на Buf [pos+100]. Пишу по памяти, то есть с точностью до знака и до плюс минус 1 по индексам :).

 
lna01:

Помнится я устанавливал сдвиг вправо посредством SetIndexShift , соответственно при расчёте индексов добавлял обратный сдвиг.
То есть если SetIndexShift( 0, 100), то Buf [0] на графике отобразится на -100 баре, тогда, к примеру, значение для отрисовки на текущем баре будет Buf [100]. То есть при расчёте привычный Buf [pos] нужно заменять на Buf [pos+100]. Пишу по памяти, то есть с точностью до знака и до плюс минус 1 по индексам :).

Я не совсем понял ответ на мой вопрос, можно привести более подробный с примером из программы.
Уточню еще раз, что мне нужно. На графике отрисовываются бары, самый крайний - правый отражает текущее состояние цены и имеет индекс =0. Мне нужно продолжить график вправо относительно этого последнего бара в ту часть где, по идее индексы должны иметь уже отрицательное значение, -1, -2, и т.д., есть ли такая возможность?
 

Нужно просто в свойствах графических элементов указывать требуемое вам время справа и тогда графические объекты будут рисоваться и справа:

bool ObjectCreate(
string name, int type, int window, datetime time1, double price1, datetime time2=0, double price2=0, datetime time3=0, double price3=0)

Если вы зададите координаты time1, time2 или же time3 соответсвующими по времени правой части графика (в будущем времени), то и объект будет построен справа (в будущем).

 
solandr:

Нужно просто в свойствах графических элементов указывать требуемое вам время справа и тогда графические объекты будут рисоваться и справа:

Время для таких точек в будущем я вычисляю так: time=Time[0]+N*Period()*60; где N - количество баров в будущее.
 
Talex:
Время для таких точек в будущем я вычисляю так: time=Time[0]+N*Period()*60; где N - количество баров в будущее.
Я точно также.
 

Вот код:

//+------------------------------------------------------------------+
//|                                               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. В методических целях :).
Комментариев не делал, лучше на вопросы отвечу. Если будут, конечно.  
 

Долго редактировал предыдущий пост :). Только теперь он готов.

 
Piligrimm писал (а):
И еще вопрос, при использовании функций
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, в чем ошибка?
ИМХО по поводу этой части: Можно предположить, что в функциях возникает какая-то нештатная ситуация. Если она обрабатывается, то дополнительную информацию можно получить с помощью GetLastError . Если нет, то нужно либо детально разбираться со значениями переменных в момент ошибки, либо бить челом разработчикам.
 
lna01:
Piligrimm писал (а):
И еще вопрос, при использовании функций
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, в чем ошибка?
ИМХО по поводу этой части: Можно предположить, что в функциях возникает какая-то нештатная ситуация. Если она обрабатывается, то дополнительную информацию можно получить с помощью GetLastError . Если нет, то нужно либо детально разбираться со значениями переменных в момент ошибки, либо бить челом разработчикам.

Всем большое спасибо!
lna01 - функция не успевает обработаться, на первом же шаге программа встает, и индексы =-1.
Причина обращения: