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

 

Итак, хочу получить массив котировок по нескольким парам с помощью CopyRates, причем прошу максимально возможное число (1 млн настроено в терминале).

По одним валютам - пожалуйста, по другим - нет, упорно возвращает небольшое количество данных.

void TryToLoadData(Currency& a_Components[iComp])
{
        int iMaxBars = TerminalInfoInteger(TERMINAL_MAXBARS);
                for (int i = 0; i < iComp; i++)
                {
                                if ( ArraySize(a_Components[i].Data) != iMaxBars )
                                        CopyRates(a_Components[i].sSymbol, PERIOD_CURRENT, 0, iMaxBars, a_Components[i].Data);
                }

#ifdef __DEBUG__
/**/            for (int i = 0; i < iComp; i++)
/**/                    Print("For ", a_Components[i].sSymbol, " loaded ", ArraySize(a_Components[i].Data), " bars");
#endif
}


2015.09.05 23:53:29.454    DollarIndex Expert EURUSD,M1: For USDCHF loaded 91087 bars
2015.09.05 23:53:29.454    DollarIndex Expert EURUSD,M1: For USDSEK loaded 101426 bars
2015.09.05 23:53:29.454    DollarIndex Expert EURUSD,M1: For USDCAD loaded 93234 bars
2015.09.05 23:53:29.454    DollarIndex Expert EURUSD,M1: For GBPUSD loaded 1000000 bars
2015.09.05 23:53:29.454    DollarIndex Expert EURUSD,M1: For USDJPY loaded 1000000 bars
2015.09.05 23:53:29.454    DollarIndex Expert EURUSD,M1: For EURUSD loaded 1000000 bars
2015.09.05 23:53:24.446    DollarIndex Expert EURUSD,M1: For USDCHF loaded 91087 bars
2015.09.05 23:53:24.446    DollarIndex Expert EURUSD,M1: For USDSEK loaded 101426 bars
2015.09.05 23:53:24.446    DollarIndex Expert EURUSD,M1: For USDCAD loaded 93234 bars
2015.09.05 23:53:24.446    DollarIndex Expert EURUSD,M1: For GBPUSD loaded 1000000 bars
2015.09.05 23:53:24.446    DollarIndex Expert EURUSD,M1: For USDJPY loaded 1000000 bars
2015.09.05 23:53:24.446    DollarIndex Expert EURUSD,M1: For EURUSD loaded 1000000 bars
2015.09.05 23:53:19.443    DollarIndex Expert EURUSD,M1: For USDCHF loaded 91087 bars
2015.09.05 23:53:19.443    DollarIndex Expert EURUSD,M1: For USDSEK loaded 101426 bars
2015.09.05 23:53:19.443    DollarIndex Expert EURUSD,M1: For USDCAD loaded 93234 bars
2015.09.05 23:53:19.443    DollarIndex Expert EURUSD,M1: For GBPUSD loaded 1000000 bars
2015.09.05 23:53:19.443    DollarIndex Expert EURUSD,M1: For USDJPY loaded 1000000 bars
2015.09.05 23:53:19.443    DollarIndex Expert EURUSD,M1: For EURUSD loaded 1000000 bars


Что не так делаю? На первый взгляд, поведение CopyRates не соответствует документации - ничего не пытается подгрузить, все время возвращает одно и то же количество данных...

 
Alexander Dubovik:

Итак, хочу получить массив котировок по нескольким парам с помощью CopyRates, причем прошу максимально возможное число (1 млн настроено в терминале).

Во-во. А потом разработчики объясняют, что-де "не хватает памяти". Конечно, если по всем парам запрашивать по миллиону котировок - может не хватить 32-разрядного адресного пространства...

Народ, объясните мне, зачем вам так много котировок ?

Я уж не говорю, что далеко не во всех ДЦ вобще хранится столько данных... Не нужны они никому, только граалеписателям, которые думают, что имея ВСЕ котировки надут "серебрянную пулю", и напишут советника, который будет всегда на любых парах приносить много прибыли.

 
George Merts:

Народ, объясните мне, зачем вам так много котировок ?

Я уж не говорю, что далеко не во всех ДЦ вобще хранится столько данных... Не нужны они никому, только граалеписателям, которые думают, что имея ВСЕ котировки надут "серебрянную пулю", и напишут советника, который будет всегда на любых парах приносить много прибыли.

В принципе, на ECN счетах это около 2.5-3 лет для М1, не так и много. Это нужно для маркета. Пишется советник, потом 2 недели оптимизируется на этом периоде, потом с оптимальными настройками прогоняется тест и вуаля!!! чудесная кривая роста депо вылетает из монитора и пробивает потолок! Как вы думаете, почему почти ни у кого в маркете нет реального мониторинга или сигнала, одни волшебные графики? И почему на реале дай бог хоть какой-то скромный плюс будет?
 

Господа, давайте порассуждаем еще про глобальное изменение климата и про  снижение рождаемости.

Я задал вполне конкретный вопрос. В документации на CopyRates сказано, что если данные не готовы - вернет только часть, а по недостающему будет инициирована загрузка, и очень скоро они будут доступны. Я запрашиваю дозволенное количество, а в ответ иногда получаю в 10 раз меньше. Причем больше данных по этим "отказным" инструментам не удается заполучить даже путем пролистывания минутного графика в терминале.

 
Alexander Dubovik:

Господа, давайте порассуждаем еще про глобальное изменение климата и про  снижение рождаемости.

Я задал вполне конкретный вопрос. В документации на CopyRates сказано, что если данные не готовы - вернет только часть, а по недостающему будет инициирована загрузка, и очень скоро они будут доступны. Я запрашиваю дозволенное количество, а в ответ иногда получаю в 10 раз меньше. Причем больше данных по этим "отказным" инструментам не удается заполучить даже путем пролистывания минутного графика в терминале.

Вроде George Merts четко назвал две возможные причины. Насчет разрядности операционки вы так и не ответили. Не устраивают ответы - напишите в сервисдеск, там больше знают. Я вижу, у вас две закачки с одинаковым количеством баров. Есть повод спросить в сервисдеке - почему так происходит. Как вариант, поставьте Tickstory Lite и скачайте с Дукаса минутки.

2015.09.05 23:53:29.454    DollarIndex Expert EURUSD,M1: For USDSEK loaded 101426 bars

2015.09.05 23:53:19.443    DollarIndex Expert EURUSD,M1: For USDSEK loaded 101426 bars

 
Alexey Volchanskiy:

Вроде четко назвал две возможные причины. Насчет разрядности операционки вы так и не ответили. Не устраивают ответы - напишите в сервисдеск, там больше знают. Я вижу, у вас две закачки с одинаковым количеством баров. Есть повод спросить в сервисдеке - почему так происходит. Как вариант, поставьте Tickstory Lite и скачайте с Дукаса минутки.

2015.09.05 23:53:29.454    DollarIndex Expert EURUSD,M1: For USDSEK loaded 101426 bars

2015.09.05 23:53:19.443    DollarIndex Expert EURUSD,M1: For USDSEK loaded 101426 bars


1. Никаких предположений о причинах в Вашем предыдущем сообщении я не вижу. Вижу только отвлеченные рассуждения о волшебных советниках, показывающих фантастические результаты на истории по причине переоптимизации.

2. Памяти предостаточно. Если бы упиралось в потолок памяти - были бы проблемы не только в терминале, а Windows тоже работать бы не смог нормально.

3. Закачек с одинаковым количеством баров на самом деле не две, а оно всегда так. Пробовал на несколько часов оставить - ничего не изменилось, по "отказным" пАрам всегда одинаковое количество баров.

 
Alexander Dubovik:


1. Никаких предположений о причинах в Вашем предыдущем сообщении я не вижу. Вижу только отвлеченные рассуждения о волшебных советниках, показывающих фантастические результаты на истории по причине переоптимизации.

2. Памяти предостаточно. Если бы упиралось в потолок памяти - были бы проблемы не только в терминале, а Windows тоже работать бы не смог нормально.

3. Закачек с одинаковым количеством баров на самом деле не две, а оно всегда так. Пробовал на несколько часов оставить - ничего не изменилось, по "отказным" пАрам всегда одинаковое количество баров.

1. Это я забыл имя вставить, потом поправил. "Вроде George Merts четко назвал две возможные причины."

2. Так вам шашечки или ехать? Если нужны котировки, скачайте в другом месте. Сейчас проверил, TickStory качает с 2012.09.05 по 2015.09.05 пару USDSEK со скоростью день за 2 сек. Потом конвертируете данные в минутки и импортируете из терминала.

 
Я-то может и закачаю. Но я не для себя стараюсь, а заставлять клиента такие пляски вытворять - это не правильно.
 
Alexander Dubovik:
Я-то может и закачаю. Но я не для себя стараюсь, а заставлять клиента такие пляски вытворять - это не правильно.

Это верно. Щас у себя проверю. Кстати, эта строчка, скорее всего, даст неправильный результат. Размер динамического массива выделяется блоками и будет больше, чем количество закачанных баров. Хотя, не знаю, как там MQ сделали. Я бы сохранял значение, возвращаемое CopyRates

Print("For ", a_Components[i].sSymbol, " loaded ", ArraySize(a_Components[i].Data), " bars");
 

Во-первых не обязательно блоками - запрашивающий изменение размера может сразу знать, сколько он хочет.

Во-вторых, ArraySize должен показать размер независимо от блоков.

В-третьих, если бы это было так, то не получались бы вот такие строчки в журнале:

2015.09.06 12:52:52.145    DollarIndex Expert EURUSD,M1: For GBPUSD loaded 1000000 bars
2015.09.06 12:52:52.145    DollarIndex Expert EURUSD,M1: For USDJPY loaded 1000000 bars
2015.09.06 12:52:52.145    DollarIndex Expert EURUSD,M1: For EURUSD loaded 1000000 bars


По трем парам попросил миллион - получил миллион. А по еще трем попросил миллион - получил в 10 раз меньше:

2015.09.06 12:52:52.145    DollarIndex Expert EURUSD,M1: For USDCHF loaded 91087 bars
2015.09.06 12:52:52.145    DollarIndex Expert EURUSD,M1: For USDSEK loaded 101426 bars
2015.09.06 12:52:52.145    DollarIndex Expert EURUSD,M1: For USDCAD loaded 93234 bars


Кстати, похоже, я понял, почему не работает: на сервере моего ДЦ нету такого количества данных по минуткам по этим парам.

        lBarsCount = SeriesInfoInteger("USDCHF", PERIOD_M1, SERIES_BARS_COUNT);
        dtFirstDate = (datetime)SeriesInfoInteger("USDCHF", PERIOD_M1, SERIES_FIRSTDATE);
        dtServerFirstDate = (datetime)SeriesInfoInteger("USDCHF", PERIOD_M1, SERIES_SERVER_FIRSTDATE);
        dtTerminalFirstDate = (datetime)SeriesInfoInteger("USDCHF", PERIOD_M1, SERIES_TERMINAL_FIRSTDATE);
        lSynchronized = (datetime)SeriesInfoInteger("USDCHF", PERIOD_M1, SERIES_SYNCHRONIZED);

        Print("SERIES_BARS_COUNT: ", lBarsCount);
        Print("SERIES_FIRSTDATE: ", dtFirstDate);
        Print("SERIES_SERVER_FIRSTDATE: ", dtServerFirstDate);
        Print("SERIES_TERMINAL_FIRSTDATE: ", dtTerminalFirstDate);
        Print("SERIES_SYNCHRONIZED: ", lSynchronized);

В итоге получаем:

2015.09.06 16:25:58.698    SpeedTest EURUSD,M1: SERIES_SYNCHRONIZED: 0
2015.09.06 16:25:58.249    SpeedTest EURUSD,M1: SERIES_TERMINAL_FIRSTDATE: 1970.01.01 00:00:00
2015.09.06 16:25:58.082    SpeedTest EURUSD,M1: SERIES_SERVER_FIRSTDATE: 2015.06.19 04:21:00
2015.09.06 16:25:57.911    SpeedTest EURUSD,M1: SERIES_FIRSTDATE: 2015.05.21 03:22:00
2015.09.06 16:25:57.748    SpeedTest EURUSD,M1: SERIES_BARS_COUNT: 91087

Выходит, у меня в терминале по этой паре более глубокая история, чем на сервере.

 
Alexander Dubovik:

Кстати, похоже, я понял, почему не работает: на сервере моего ДЦ нету такого количества данных по минуткам по этим парам.

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