MT5: как переместить график в определённую дату?

 
Доброго времени суток!
Как программно переместить график на определённую дату? Было бы вообще чудесно задать как начальную, так и конечную даты графика, если это возможно (допустим с 01.01.2020 по 02.01.2020).
И, заодно, отключить автопрокрутку.
 
Для перемещения графика нужно использовать функцию ChartNavigate(). Для управления автопрокруткой - ChartSetInteger().
 
А как посчитать нужное количество баров для функции ChartNavigate?
 
SimpleUser:
А как посчитать нужное количество баров для функции ChartNavigate?

Функиция iBarShift() или Bars (там есть одна из перегрузок, которая тоже подойдет).

 
Функция Bars как-то странно работает.
   datetime dt1=D'2020.03.21 00:00';
   datetime dt2=D'2020.03.22 00:00';
   int shift=Bars("EURUSD",PERIOD_H1,dt1,dt2);
   Print(shift);

Почему shift == 0?
 
Начните читать справку наконец
 
SimpleUser:

Для проверки лучше вот такой код:

//+------------------------------------------------------------------+
//|                                                     Script 1.mq5 |
//|                        Copyright 2020, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property script_show_inputs
//--- input parameters
input string            InpSymbolName  = "EURUSD";             // symbol name
input ENUM_TIMEFRAMES   InpTimeFrame   = PERIOD_H1;            // period
input datetime          InpStartTime   = D'2020.03.21 00:00';  // start date and time
input datetime          InpStopTime    = D'2020.03.22 00:00';  // end date and time
//---
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   int bars=Bars(InpSymbolName,InpTimeFrame,InpStartTime,InpStopTime);
   if(bars>0)
     {
      Print("Number of bars in the terminal history for the symbol-period at the moment = ",bars);
     }
   else // no available bars
     {
      //--- data on the symbol might be not synchronized with data on the server
      bool synchronized=false;
      //--- loop counter
      int attempts=0;
      // make 5 attempts to wait for synchronization
      while(attempts<5)
        {
         if(SeriesInfoInteger(InpSymbolName,InpTimeFrame,SERIES_SYNCHRONIZED))
           {
            //--- synchronization done, exit
            synchronized=true;
            break;
           }
         //--- increase the counter
         attempts++;
         //--- wait 10 milliseconds till the next iteration
         Sleep(10);
        }
      Print("attempts: ",IntegerToString(attempts));
      //--- exit the loop after synchronization
      if(synchronized)
        {
         int bars_new=Bars(InpSymbolName,InpTimeFrame,InpStartTime,InpStopTime);
         Print("synchronized: ",(synchronized)?"true":"else",", attempts: ",IntegerToString(attempts));
         Print("Number of bars in the terminal history for the symbol-period at the moment = ",bars);
         Print("Number of bars_new in the terminal history for the symbol-period at the moment = ",bars_new);
         Print("The first date in the terminal history for the symbol-period at the moment = ",
               (datetime)SeriesInfoInteger(InpSymbolName,InpTimeFrame,SERIES_FIRSTDATE));
         Print("The first date in the history for the symbol on the server = ",
               (datetime)SeriesInfoInteger(InpSymbolName,InpTimeFrame,SERIES_SERVER_FIRSTDATE));
        }
      //--- synchronization of data didn't happen
      else
        {
         Print("Failed to get number of bars for ",InpSymbolName);
        }
     }
  }
//+------------------------------------------------------------------+
Файлы:
Script_1.mq5  7 kb
 
SimpleUser:

И ещё совет - иногда полезно сначала в календарь посмотреть и увидеть что указанные даты - это выходные:

 
Про выходные я уже сообразил. :)
Пока себе наваял что-то такое
   datetime need_dt = D'2021.06.04 00:00';
   datetime current_dt;
   
   MqlDateTime str1;
   TimeCurrent(str1);
   
   current_dt = StructToTime(str1);
   Print(current_dt);
   
   int shift=Bars("EURUSD", PERIOD_H1, need_dt, current_dt);
   Print("new shift ", shift);
   
   ChartSetInteger(0, CHART_AUTOSCROLL, false); //отключить автопрокрутку
   ChartNavigate(0, CHART_CURRENT_POS, -shift);

Почему то думал, что график визуально начнётся с указанной даты, а он ею заканчивается. В смысле, дата 2021.06.04 оказывается в конце, а не в начале графика, как ожидалось мной.
Ваш код посмотрю, спасибо!
 
SimpleUser:
Про выходные я уже сообразил. :)
Пока себе наваял что-то такое
***
Почему то думал, что график визуально начнётся с указанной даты, а он ею заканчивается. В смысле, дата 2021.06.04 оказывается в конце, а не в начале графика, как ожидалось мной.
Ваш код посмотрю, спасибо!
Пожалуйста вставляйте код правильно: при редактировании сообщения нажмите кнопку   Code и во всплывающее окно вставьте свой код (пример я отредактировал в сообщении ).
MQL5.community - Памятка пользователя
MQL5.community - Памятка пользователя
  • www.mql5.com
Вы недавно зарегистрировались и у вас возникли вопросы: Как вставить картинку в сообщение на форуме, как красиво оформить исходный код MQL5, где находятся ваши Личные сообщения? В этой статье мы подготовили для вас несколько практических советов, которые помогут быстрее освоиться на сайте MQL5.community и позволят в полной мере воспользоваться доступными функциональными возможностями.