Для перемещения графика нужно использовать функцию ChartNavigate(). Для управления автопрокруткой - ChartSetInteger().
А как посчитать нужное количество баров для функции ChartNavigate?
Функиция iBarShift() или Bars (там есть одна из перегрузок, которая тоже подойдет).
Функция Bars как-то странно работает.
Почему shift == 0?
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:
И ещё совет - иногда полезно сначала в календарь посмотреть и увидеть что указанные даты - это выходные:
Про выходные я уже сообразил. :)
Пока себе наваял что-то такое
Почему то думал, что график визуально начнётся с указанной даты, а он ею заканчивается. В смысле, дата 2021.06.04 оказывается в конце, а не в начале графика, как ожидалось мной.
Ваш код посмотрю, спасибо!
Пока себе наваял что-то такое
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 оказывается в конце, а не в начале графика, как ожидалось мной.
Ваш код посмотрю, спасибо!
Пожалуйста вставляйте код правильно: при редактировании сообщения нажмите кнопку и во всплывающее окно вставьте свой код (пример я отредактировал в сообщении #4).
Про выходные я уже сообразил. :)
Пока себе наваял что-то такое
***
Почему то думал, что график визуально начнётся с указанной даты, а он ею заканчивается. В смысле, дата 2021.06.04 оказывается в конце, а не в начале графика, как ожидалось мной.
Ваш код посмотрю, спасибо!
MQL5.community - Памятка пользователя
- www.mql5.com
Вы недавно зарегистрировались и у вас возникли вопросы: Как вставить картинку в сообщение на форуме, как красиво оформить исходный код MQL5, где находятся ваши Личные сообщения? В этой статье мы подготовили для вас несколько практических советов, которые помогут быстрее освоиться на сайте MQL5.community и позволят в полной мере воспользоваться доступными функциональными возможностями.
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Как программно переместить график на определённую дату? Было бы вообще чудесно задать как начальную, так и конечную даты графика, если это возможно (допустим с 01.01.2020 по 02.01.2020).
И, заодно, отключить автопрокрутку.