Отрисовка линии индикатора правее нулевого бара MT4. Возможно? РЕШЕНО!

 

Есть два массива разного размера. Первый N - размер , второй N + y.

Есть ли возможность отобразить вторую линию вперёд на y значений ? MQl4

Смещение линии не годится.

 

если речь идет о отрисовке индикаторными буферами, то только штатной SetIndexShift

https://docs.mql4.com/ru/customind/setindexshift


индексация в индикаторном буфере остается прежней, а отрисовка будет смещена, набросал пример:

#property copyright "IgorM"
#property link      "https://www.mql5.com/ru/users/igorm"
#property version   "1.00"
#property strict
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_plots   2
//--- plot Label1
#property indicator_label1  "CLOSE"
#property indicator_type1   DRAW_LINE
#property indicator_color1  clrRed
#property indicator_style1  STYLE_SOLID
#property indicator_width1  2
//--- plot Label2
#property indicator_label2  "SHIFT"
#property indicator_type2   DRAW_LINE
#property indicator_color2  clrYellow
#property indicator_style2  STYLE_SOLID
#property indicator_width2  2
//--- indicator buffers
double         Label1Buffer[];
double         Label2Buffer[];
input int Indicator_Shift = 5;   //Indicator Shift
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
{
//--- indicator buffers mapping
   SetIndexBuffer(0, Label1Buffer);
   SetIndexBuffer(1, Label2Buffer);
   SetIndexShift(1, Indicator_Shift);
//---
   return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| 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 limit = rates_total - prev_calculated + 1;
   if(prev_calculated == 0 || limit > 1) limit = rates_total - 1;
   for(int i = limit; i >= 0; i--)
   {
      Label2Buffer[i] = Label1Buffer[i] = close[i];
   }
//--- return value of prev_calculated for next call
   return(rates_total);
}
//+------------------------------------------------------------------+


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

 
Igor Makanu:

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


Такое у меня реализовано.

 
Igor Makanu:

если речь идет о отрисовке индикаторными буферами, то только штатной SetIndexShift


Смещение не годится. Оно смещает всё что есть в массиве , а мне нужно выравнять два разных по размеру массива по левому краю с начальной точки , при этом второй должен продолжить линии правее нулевого бара.


п.с. хотя нужно подумать, понял вроде как сделать.

 
Evgeniy Chumakov:


Смещение не годится. Оно смещает всё что есть в массиве

не смещает сам массив, а только отрисовка будет смещена

Вам просто нужно при расчете отрисовки делать смещение в индексах массива

 
Igor Makanu:

не смещает сам массив, а только отрисовка будет смещена

Вам просто нужно при расчете отрисовки делать смещение в индексах массива

Да всё разобрался. Просто нужно ещё было сделать два цикла для рисования первой линии и второй что длиннее.

Тема закрыта.

Сносите ветку!

Причина обращения: