Проблема с использованием CopyRates в MQL4 - страница 2

 
Alexey Volchanskiy:
George Merts  об этом и писал "Я уж не говорю, что далеко не во всех ДЦ вобще хранится столько данных... ". А если самому накачать истории с другого источника и передать клиенту вместе с историей? А он уже будет свежачок подкачивать при подключении.
Да нет, меня вполне устраивает получение того, что есть на сервере ДЦ. Просто до сих пор было не понятно, почему не дает больше истории, и косяк виделся где-то в MQL - значит, с косяком надо было бороться.
 

Нет, что-то Метаквоты перемудрили...

Взял тестовый терминал. Стер всю историю.

        MqlRates Data[];
        ArraySetAsSeries(Data, true);
        int iMaxBars = TerminalInfoInteger(TERMINAL_MAXBARS);

        long lBarsCount;
        datetime dtFirstDate, dtServerFirstDate;
        int iSize = sizeof(MqlRates);

        string sSymbol = "USDCHF";
        lBarsCount = SeriesInfoInteger(sSymbol, PERIOD_M1, SERIES_BARS_COUNT);
        dtFirstDate = (datetime)SeriesInfoInteger(sSymbol, PERIOD_M1, SERIES_FIRSTDATE);
        dtServerFirstDate = (datetime)SeriesInfoInteger(sSymbol, PERIOD_M1, SERIES_SERVER_FIRSTDATE);

        Print("SERIES_BARS_COUNT for ", sSymbol, ": ", lBarsCount);
        Print("SERIES_FIRSTDATE for ", sSymbol, ": ", dtFirstDate);
        Print("SERIES_SERVER_FIRSTDATE for ", sSymbol, ": ", dtServerFirstDate);

        int iTotalBars = (int)lBarsCount;
        int iCount = 0;
                while ( iCount < iMaxBars )
                {
                        //iCount = CopyRates("EURUSD", PERIOD_M1, 0, iMaxBars, Data);
                        //iCount = CopyRates("USDCHF", PERIOD_M1, D'2015.05.20 00:00', 1, Data);
                        iCount = CopyRates(sSymbol, PERIOD_M1, iTotalBars, 10, Data);
                                if ( iCount != -1 )
                                {
                                        iTotalBars += iCount;
                                        Print("Loaded ", iTotalBars, " bars");
                                }
                                else
                                        Print("Can't get data");
                        Sleep(500);
                }

Получаем:

2015.09.06 18:42:46.861    SpeedTest EURUSD,M5: SERIES_SERVER_FIRSTDATE for USDCHF: 1970.01.01 00:00:00
2015.09.06 18:42:46.638    SpeedTest EURUSD,M5: SERIES_FIRSTDATE for USDCHF: 1970.01.01 00:00:00
2015.09.06 18:42:46.475    SpeedTest EURUSD,M5: SERIES_BARS_COUNT for USDCHF: 0

Подключение к серверу в порядке, но в ответ на SeriesInfoInteger получаем ноль. Замечательно.

Дальше - веселее. Начинает выполняться цикл, в котором я прошу всего 10 баров. И знаете, что получаю от Метаквотсов? Правильно, 10 баров. Но только до тех пор, пока не наберется 2048 баров:

2015.09.06 18:48:10.560    SpeedTest EURUSD,M5: Can't get data
2015.09.06 18:48:10.060    SpeedTest EURUSD,M5: Can't get data
2015.09.06 18:48:09.560    SpeedTest EURUSD,M5: Can't get data
2015.09.06 18:48:09.060    SpeedTest EURUSD,M5: Can't get data
2015.09.06 18:48:08.559    SpeedTest EURUSD,M5: Can't get data
2015.09.06 18:48:08.059    SpeedTest EURUSD,M5: Can't get data
2015.09.06 18:48:07.559    SpeedTest EURUSD,M5: Can't get data
2015.09.06 18:48:07.059    SpeedTest EURUSD,M5: Loaded 2048 bars
2015.09.06 18:48:06.559    SpeedTest EURUSD,M5: Loaded 2040 bars
2015.09.06 18:48:06.059    SpeedTest EURUSD,M5: Loaded 2030 bars
2015.09.06 18:48:05.559    SpeedTest EURUSD,M5: Loaded 2020 bars
2015.09.06 18:48:05.059    SpeedTest EURUSD,M5: Loaded 2010 bars
2015.09.06 18:48:04.559    SpeedTest EURUSD,M5: Loaded 2000 bars
2015.09.06 18:48:04.059    SpeedTest EURUSD,M5: Loaded 1990 bars
2015.09.06 18:48:03.559    SpeedTest EURUSD,M5: Loaded 1980 bars

А если открыть график M1 и полистать - пожалуйста, загружаются все новые данные.

 

Я не вникал в ваш код, но знаю что мой работал нормально. Попробуйте его.

И, как правильно заметили, история может быть короткой на сервере брокера. Значит, ее и выкачать неоткуда. 

 
Andrey Khatimlianskii:

Я не вникал в ваш код, но знаю что мой работал нормально. Попробуйте его.

И, как правильно заметили, история может быть короткой на сервере брокера. Значит, ее и выкачать неоткуда. 

   проблема в том что сейчас МТ4 865  историю не качает ни под каким соусом
 
Rustamzhan Salidzhanov:
   проблема в том что сейчас МТ4 865  историю не качает ни под каким соусом
Это для 4-ки? Так в ней брокера и не особо собирают историю, мне кажется. Все на хистори-цент уповают. Или нет?
 

Не, ну во-первых история на сервере 2048 баров минутки - это уже просто неприлично.

Во-вторых, при пролистывании истории в терминале все подгружается успешно.

А вот программно попросить через CopyRates - не получается.

 

Да, кстати, забыл с самого начала сказать.

Это я в MT4 build 840 гоняю.

 
Получил ответ от сервис-деска: в MQL4 не существует способа инициации загрузки истории с сервера. При этом были ошибки в документации, которые создавали впечатление, что оно будет работать точно так же, как в MQL5.
 
В мт4 нет, в отличии от мт5, возможности загрузки истории. Эта тема кстати обсуждалась уже миллион раз и постоянно возникает, и я не очень давно тоже её поднимал. С этим приходится мириться либо использовать костыли вроде эмуляции нажатия кнопочки хоум и прочий шлак.
 
В продуктах для маркета это не катит.