Помогите с CopyTicksRange

 

Если не задавать в приведенном ниже коде начальную (Т0) и конечную(T1) временную точку копирования тиков (значение по умолчанию 0, т.е. "с начала времен"), то копирование происходит (R и ticks_number (по-существу одно и то же) принимают предельное значение по-умолчанию), как только задаю T0 и T1 - R=0. Не могу понять, где в коде ошибка. Прошу помощи, заранее спасибо.

Код:

void OnStart()
{
MqlTick ticks[]; //array for ticks collection
ulong T0=GetTickCount()-1000;
ulong T1=GetTickCount();
int R=CopyTicksRange(Symbol(),ticks,COPY_TICKS_ALL,T0,T1);
int ticks_number=ArraySize(ticks);
//ArrayPrint(ticks);
Print("Er",GetLastError());
//Print(ticks_number,ticks[4].time,"CT",GetTickCount());
Print(ticks_number," ",R);
//Print(IntegerToString(ticks_number)," ",IntegerToString(R));

}
 
Dr_G:

Если не задавать в приведенном ниже коде начальную (Т0) и конечную(T1) временную точку копирования тиков (значение по умолчанию 0, т.е. "с начала времен"), то копирование происходит (R и ticks_number (по-существу одно и то же) принимают предельное значение по-умолчанию), как только задаю T0 и T1 - R=0. Не могу понять, где в коде ошибка. Прошу помощи, заранее спасибо.

Код:

GetTickCount() - это из другой оперы, никакого отношения к количеству тиков не имеет. Вместо T0 и T1 нужно указать начальную и конечную даты, преобразованные в миллисекунды и затем приведенные к ulong:

datetime dtFrom = D'2018.01.01';
ulong T0 = ulong(dtFrom * 1000);
ulong T1 = ulong(TimeCurrent() * 1000);
 
Ihor Herasko:

GetTickCount() - это из другой оперы, никакого отношения к количеству тиков не имеет. Вместо T0 и T1 нужно указать начальную и конечную даты, преобразованные к милисекундам и затем приведенные к ulong:

Огромное спасибо!!!

 

еще такой вопрос, хочу получить все тики за определенное время(1 секунду), есть такой код:

ulong s_time = TimeCurrent() - 35;
   MqlTick arr[];
   ArraySetAsSeries(arr, true);
   int s = 0;
   if((s = CopyTicksRange(_Symbol, arr, COPY_TICKS_INFO, s_time * 1000, (s_time + 1) * 1000)) <= 0) return 0;

в строчке (ulong s_time = TimeCurrent() - 35), 35 это переменная, она может меняться, но он не всегда работает s = 0, хотя в терминале тики идут, в чем может быть беда!

 
Dmitry Melnichenko:

еще такой вопрос, хочу получить все тики за определенное время(1 секунду), есть такой код:

в строчке (ulong s_time = TimeCurrent() - 35), 35 это переменная, она может меняться, но он не всегда работает s = 0, хотя в терминале тики идут, в чем может быть беда!

0 - это не ошибка, а количество полученных тиков. То есть за указанную секунду тиков попросту не было. Такое часто бывает. Ошибка будет, если s < 0. Тогда нужно использовать GetLastError() и разбирать ее результат.

Причина обращения: