Что у меня не так с CopyTicksRange?

 

Прошу посмотреть код, есть такая проблема:

1. CopyTicks отрабатывает отлично

2024.03.14 01:37:50.207 LoadTicks (GBPUSD,H1) Seconds = 432000

2024.03.14 01:37:50.207 LoadTicks (GBPUSD,H1) Use CopyTicks

2024.03.14 01:37:54.180 LoadTicks (GBPUSD,H1) GBPUSD: received 10000 ticks in 3969 ms

2. CopyTicksRange с неуказанными начальной и конечной датой качают диапазон 9+ лет.

3.  CopyTicksRange с заданными начальной и конечной датой не качают.

2024.03.14 01:38:27.931 LoadTicks (GBPUSD,H1) Seconds = 432000

2024.03.14 01:38:27.931 LoadTicks (GBPUSD,H1) Use CopyTicksRange

2024.03.14 01:38:27.931 LoadTicks (GBPUSD,H1) GBPUSD: received 0 ticks in 0 ms

---------------

Скрипт в аттаче

#property script_show_inputs
input string sStartTime = "2024.03.04 00:00:00";
input string sEndTime = "2024.03.09 00:00:00";
input int    getticks = 10000; // сколько тиков требуется для CopyTicks, для использования CopyTicksRange задать ноль.
void OnStart()
{
    int     attempts = 0;   // счетчик попыток
    bool    success = false; // флаг успешного выполнения копирования тиков
    MqlTick tick_array[];   // массив для приема тиков
    int received = -1;
    while(attempts < 3)
    {
        //--- замерим время старта перед получением тиков
        uint start = GetTickCount();
        datetime dtStart = StringToTime(sStartTime);
        datetime dtEnd = 0;
        if(sEndTime == NULL)
            dtEnd = TimeCurrent();
        else
            dtEnd = StringToTime(sEndTime);  
        Print("Seconds = ", (ulong)(dtEnd - dtStart));
        if(getticks > 0)
        {
            Print("Use CopyTicks");
            received = CopyTicks(_Symbol, tick_array, COPY_TICKS_ALL, (ulong)dtStart, getticks);
        }
        else    
        {
            Print("Use CopyTicksRange");
            received = CopyTicksRange(_Symbol, tick_array, COPY_TICKS_ALL, (ulong)dtStart, (ulong)dtEnd); // не работает    
//            received = CopyTicksRange(_Symbol, tick_array, COPY_TICKS_ALL); // так работает, качает за 9лет     
        }
        if(received != -1)
        {
            //--- выведем информацию о количестве тиков и затраченном времени времени
            PrintFormat("%s: received %d ticks in %d ms", _Symbol, received, GetTickCount() - start);
            //--- если тиковая история синхронизирована, то код ошибки равен нулю
            if(GetLastError() == 0)
            {
                success = true;
                break;
            }
            else
                PrintFormat("%s: Ticks are not synchronized yet, %d ticks received for %d ms. Error=%d",
                            _Symbol, received, GetTickCount() - start, _LastError);
        }
        Print("Attempt failed");
        attempts++;
        //--- пауза в 1 секунду в ожидании завершения синхронизации тиковой базы
        Sleep(1000);
    }
//--- не удалось получить запрошенные тики от самого начала истории с трех попыток
    if(!success)
    {
        PrintFormat("Ошибка! Не удалось получить тики по %s с трех попыток", _Symbol);
        return;
    }
}    

Файлы:
LoadTicks.mq5  6 kb
 
Alexey Volchanskiy:

2. CopyTicksRange с неуказанными начальной и конечной датой качают диапазон 9+ лет.

3.  CopyTicksRange с заданными начальной и конечной датой не качают.

Там же начальную и конечную дату указывать нужно в миллисекундах, то есть то, что у вас нужно умножить на тысячу.
 
Aleksandr Slavskii #:
Там же начальную и конечную дату указывать нужно в миллисекундах, то есть то, что у вас нужно умножить на тысячу.

От черт! Ночью писал и пропустил мимо ушей. Спасибо, заработало!

 
Alexey Volchanskiy #:

От черт! Ночью писал и пропустил мимо ушей. Спасибо, заработало!

Ночью уши при себе держать нужно

 
Alexey Volchanskiy #:
пропустил мимо ушей
Это не так страшно, как пропустить между ушей.
;)