Как получить параметры Open,Low,High,Close в МQL5? - страница 10

 
//+------------------------------------------------------------------+
//|                                                            1.mq5 |
//|                        Copyright 2019, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2019, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property indicator_chart_window
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   
//---
   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 q = rates_total;
   static datetime w = 0;
   
   if(w != time[q-1])
    { 
     w = time[q-1];
     Print("-------------------------------------------------------------------------------");
     Print("  time[q-1]  ",time[q-1],"  time[q-2]  ",time[q-2],"  time[q-3]  ",time[q-3],"  time[q-4]  ",time[q-4],"  time[q-5]  ",time[q-5]);
     Print("  open[q-1]  ",open[q-1],"  open[q-2]  ",open[q-2],"  open[q-3]  ",open[q-3],"  open[q-4]  ",open[q-4],"  open[q-5]  ",open[q-5]);
     Print("  high[q-1]  ",high[q-1],"  high[q-2]  ",high[q-2],"  high[q-3]  ",high[q-3],"  high[q-4]  ",high[q-4],"  high[q-5]  ",high[q-5]);
     Print("  low[q-1]  ",low[q-1],"  low[q-2]  ",low[q-2],"  low[q-3]  ",low[q-3],"  low[q-4]  ",low[q-4],"  low[q-5]  ",low[q-5]);
     Print("  close[q-1]  ",close[q-1],"  close[q-2]  ",close[q-2],"  close[q-3]  ",close[q-3],"  close[q-4]  ",close[q-4],"  close[q-5]  ",close[q-5]);
    }
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+

Интересно, почему у бара с индексом [rates_total - 1]  все значения open, close, high, low всегда равны? Разве индекс open[rates_total - 1] не соответствует индексу 1 в таймсерии? То есть, все равно что Open[1], Close[1],... в МТ4.

Хотя, может индекс [rates_total - 1]  соответствует индексу 0 в таймсерии? Тогда это значит, что [rates_total - 1]  это текущий бар и поскольку он еще не сформировался, параметры OCHL у него равны?

 
Реter Konow:

Интересно, почему у бара с индексом [rates_total - 1]  все значения open, close, high, low всегда равны? Разве индекс open[rates_total - 1] не соответствует индексу 1 в таймсерии? То есть, все равно что Open[1], Close[1],... в МТ4.

Хотя, может индекс [rates_total - 1]  соответствует индексу 0 в таймсерии? Тогда это значит, что [rates_total - 1]  это текущий бар и поскольку он еще не сформировался, параметры OCHL у него равны?

По-умолчанию в индикаторах MQL5 вот такая индексация (на примере индекса "0" и "rates_total-1")

/*
   time[0]              -> D'2018.01.02 00:00:00'
   time[rates_total-1]  -> D'2018.12.31 22:00:00'
*/

Как видите самый правый бар на графике имеет индекс "rates_total-1". А вот индекс "0" будет соответствовать самому левому бару на графике.

 
Vladimir Karputov:

По-умолчанию в индикаторах MQL5 вот такая индексация (на примере индекса "0" и "rates_total-1")

Как видите самый правый бар на графике имеет индекс "rates_total-1". А вот индекс "0" будет соответствовать самому левому бару на графике.

Самый правый, - то есть текущий? Тот что не сформировался?

В общем, как я понял, rates_total-1 указывает на текущий бар, и поскольку он не сформировался, параметры OHCL у него в таймериях равны.

 
Реter Konow:
Самый правый, - то есть текущий? Тот что не сформировался?

Посмотрите на любой график - самый правый бар НА ГРАФИКЕ - это текущий бар, который находится в процессе формирования (то есть в любой момент все его цены и объём могут быть изменены).

 
Vladimir Karputov:

Посмотрите на любой график - самый правый бар НА ГРАФИКЕ - это текущий бар, который находится в процессе формирования (то есть в любой момент все его цены и объём могут быть изменены).

Да, я это понимаю. Просто не знал, что у него все значения в таймсериях равны до того, как он получит индекс 1. То есть, перестанет быть текущим.
 
Реter Konow:
Да, я это понимаю. Просто удивился, что у него все значения равны до того, как он получит индекс 1 в таймсерии. То есть, перестанет быть текущим.

Какой ещё индекс один? Самый правый бар на графике в индикаторах MQL5 имеет индекс "rates_total-1".

 
Vladimir Karputov:

Какой ещё индекс один? Самый правый бар на графике в индикаторах MQL5 имеет индекс "rates_total-1".

Вы не понимаете, о чем я говорю. rates_total-1 ЭТО ТЕКУЩИЙ БАР. Я это знаю. НО. ЗНАЧЕНИЯ OCHL  В ТАЙМСЕРИЯХ У НЕГО РАВНЫ. Проверьте код который я выложил. Именно этого я не знал.
 
Реter Konow:
Вы не понимаете, о чем я говорю. rates_total-1 ЭТО ТЕКУЩИЙ БАР. Я это знаю. НО. ЗНАЧЕНИЯ OCHL  В ТАЙМСЕРИЯХ У НЕГО РАВНЫ. Проверьте код который я выложил. Именно этого я не знал.
Ваш код берет значения только в момент открытия бара
 
Реter Konow:
Вы не понимаете, о чем я говорю. rates_total-1 ЭТО ТЕКУЩИЙ БАР. Я это знаю. НО. ЗНАЧЕНИЯ OCHL  В ТАЙМСЕРИЯХ У НЕГО РАВНЫ. Проверьте код который я выложил. Именно этого я не знал.

У текущего бара (самого правого на графике) цены OHLC будут РАВНЫ в момент рождения бара - это ведь азы: бар только родился и у него все цены одинаковые. С приходом новых тиков у текущего бара (самого правого на графике) цены начнут изменятся.


Это надеюсь понятно? В момент рождения и бара его OHLC равны.

 
Andrey Barinov:
Ваш код берет значения только в момент открытия бара

Ай, поспешили, человек сам должен был это понять ...