Как сместить МА по вертикали или как в МА "впихнуть" сумму нескольких ценовых значений - страница 4

 
Vladimir Karputov:
Я дал Вам рабочий код. Используйте его ( изменяйте номер версии тольҡо после правок).
Ваш код в окне данных есть, но на графике не рисуется почему-то. Даже сейчас.
 

Платформа и не должна двигаться - она железобетонная, к платформе прибывают поезда.

А вот в MetaTrader 5  есть замечательная возможность тестировать на исторических данных.  

 
Sighn:
Ваш код в окне данных есть, но на графике не рисуется почему-то. Даже сейчас.
Враки 😀. Уменьшите масштаб отображения графика и будет чудо.
 
Vladimir Karputov:
Враки 😀. Уменьшите масштаб отображения графика и будет чудо.
Да))), вы правы. уменьшил масштаб и действительно появился индикатор. только масштаб пришлось изменить до самого минимума, чтобы появились линии. Что-то не то. разница от "open" до линии не 30, а 334))
 
Sighn:
Да))), вы правы. уменьшил масштаб и действительно появился индикатор. только масштаб пришлось изменить до самого минимума, чтобы появились линии. Что-то не то. разница от "open" до линии не 30, а 334))

Всё правильно, Вы в настройках указали 30 пунктов - это в шкале измерений "четырёхзнака". А так как график у Вас пятизначный, то указанное значение пересчитано в "пятизнак" и получили 300.   

 
Vladimir Karputov:

Всё правильно, Вы в настройках указали 30 пунктов - это в шкале измерений "четырёхзнака". А так как график у Вас пятизначный, то указанное значение пересчитано в "пятизнак" и получили 300.   

Спасибо вам!!!
 
Vladimir Karputov:

У Вас всё-равно неэкономный расчёт - Вы просчитываете на всю глубину. Вот экономный пересчёт: при prev_calculated==0 (это бывает при первом старте или при подкачке истории) рассчитываем на всю глубину - от limit=="0" до "rates_total". При последующих заходах в OnCalculate() limit=prev_calculated-1 - то есть будет всё время перечитывать только текущий бар или два бара, когда появится новый бар:

//+------------------------------------------------------------------+
//|                                                         Line.mq5 |
//|                                            Copyright 2016, Вован |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, Вован"
#property link      "https://www.mql5.com"
#property version   "1.001"
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_plots   2
//--- plot Line1
#property indicator_label1  "Line1"
#property indicator_type1   DRAW_LINE
#property indicator_color1  clrGreen
#property indicator_style1  STYLE_SOLID
#property indicator_width1  2
//--- plot Line2
#property indicator_label2  "Line2"
#property indicator_type2   DRAW_LINE
#property indicator_color2  clrRed
#property indicator_style2  STYLE_SOLID
#property indicator_width2  2
//--- input parameters
input ushort   Y=30;
double         ExtY=0.0;
//--- indicator buffers
double         Line1Buffer[];
double         Line2Buffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,Line1Buffer,INDICATOR_DATA);
   SetIndexBuffer(1,Line2Buffer,INDICATOR_DATA);
//---
   ExtY=Y*Point(); // tuning

//---
   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=0;
   if(prev_calculated==0)                 // the first start or the history has been changed
     {
      for(int i=limit;i<rates_total;i++)  // calculation on all depth of history
        {
         Line1Buffer[i]=open[i]+ExtY;
         Line2Buffer[i]=open[i]-ExtY;
        }
     }
   else
     {
      limit=prev_calculated-1;            // economical recalculation of bars
      for(int i=limit;i<rates_total;i++)
        {
         Line1Buffer[i]=open[i]+ExtY;
         Line2Buffer[i]=open[i]-ExtY;
        }
     }

   Comment("rates_total=",rates_total,"\n",
           "limit=",limit);
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
//| Indicator deinitialization function                              |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   Comment("");
  }
//+------------------------------------------------------------------+

Про стрелочки чуть позже, а пока для прочтения: 

спасибо, полезная инфа

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