При работе с тиками возникают непонятки...

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Vladimir Suschenko
3142
Vladimir Suschenko  

При попытках использовать тиковую историю возникают некоторые непонятные моменты. 
Вот один из них. Предположим, что я не знаю количество тиков истории и хочу скачать все доступные тиковые данные. цепляю на график (в данном случае EURUSD) советник с фрагментом кода:

//---
   MqlTick TICKs[];
   ArrayFree(TICKs);
   int TICKsCopied=CopyTicks(_Symbol,TICKs,COPY_TICKS_ALL,1,150000000);
   if(TICKsCopied>0)
     {
      Alert("TICKsCopied = ",TICKsCopied);
     }
//---

 В результате его работы получаю сообщение о копировании 108725043 тиков. При этом терминал съедает (по данным в диспетчере задач)  5574196КБ оперативной памяти.

Если код слегка изменить:

//---
   MqlTick TICKs[];
   ArrayFree(TICKs);
   int TICKsCopied=CopyTicks(_Symbol,TICKs,COPY_TICKS_ALL,0,150000000);
   if(TICKsCopied>0)
     {
      Alert("TICKsCopied = ",TICKsCopied);
     }
//---

то в результате его работы будет сообщение о таком же количестве 108725043 скопированных тиков, но терминал при этом будет съедать уже 7321552КБ оперативной памяти.

Если же требуемое количество тиков для копирования указать точно, то варианты фрагментов кода

int TICKsCopied=CopyTicks(_Symbol,TICKs,COPY_TICKS_ALL,0,108725043);

 и

int TICKsCopied=CopyTicks(_Symbol,TICKs,COPY_TICKS_ALL,1,108725043);

будут работать одинаково.
Чем это вызвано?

Alexey Volchanskiy
27266
Alexey Volchanskiy  
Vladimir Suschenko:

При попытках использовать тиковую историю возникают некоторые нпонятные моменты. 
Вот один из них. Предположим, что я не знаю количество тиков истории и хочу скачать все доступные тиковые данные. цепляю на график (в данном случае EURUSD) советник с фрагментом кода:

 В результате его работы получаю сообщение о копировании 108725043 тиков. При этом терминал съедает (по данным в диспетчере задач)  5574196КБ оперативной памяти.

Если код слегка изменить:

то в результате его работы будет сообщение о таком же количестве 108725043 скопированных тиков, но терминал при этом будет съедать уже 7321552КБ оперативной памяти.

Если же требуемое количество тиков для копирования указать точно, то варианты фрагментов кода

 и

будут работать одинаково.
Чем это вызвано?

Сегодня днем попробую, а не пробовали запустить один и тот же код 2-3 раза подряд?
Vladimir Suschenko
3142
Vladimir Suschenko  
Alexey Volchanskiy:
Сегодня днем попробую, а не пробовали запустить один и тот же код 2-3 раза подряд?

Пробовал, и несколько раз подряд, и в разной очерёдности.

Vladimir Suschenko
3142
Vladimir Suschenko  
Ещё одна непонятка при работе с тиками....
В документации структура запроса на копирование тиков указана так:
int  CopyTicks( 
   string           symbol_name,           // имя символа 
   MqlTick&         ticks_array[],         // массив для приема тиков 
   uint             flags=COPY_TICKS_ALL,  // флаг, определяющий тип получаемых тиков 
   ulong            from=0,                // дата, начиная с которой запрашиваются тики 
   uint             count=0                // количество последних тиков, которые необходимо получить 
   );
где
 "from
[in]  Дата, начиная с которой запрашиваются тики. Указывается в миллисекундах с 01.01.1970. Если параметр from=0, то отдаются последние count тиков.
"

А по факту получается, что скопировать какое-либо число (N) тиков возможно только в двух случаях - если сделать запрос на копирование последних N тиков или N тиков от начала имеющейся тиковой истории. В данный момент с сервера можно получить тики с момента 1324252808 в указанном формате даты, что соответствует дате 2011.12.19  00:00. При попытке указать любую другую начальную дату запроса тиков, копирование всё равно будет производиться с даты 1324252808.
Alexey Viktorov
25864
Alexey Viktorov  
Vladimir Suschenko:
Ещё одна непонятка при работе с тиками....
В документации структура запроса на копирование тиков указана так:
где
 "from
[in]  Дата, начиная с которой запрашиваются тики. Указывается в миллисекундах с 01.01.1970. Если параметр from=0, то отдаются последние count тиков.
"

А по факту получается, что скопировать какое-либо число (N) тиков возможно только в двух случаях - если сделать запрос на копирование последних N тиков или N тиков от начала имеющейся тиковой истории. В данный момент с сервера можно получить тики с момента 1324252808 в указанном формате даты, что соответствует дате 2011.12.19  00:00. При попытке указать любую другую начальную дату запроса тиков, копирование всё равно будет производиться с даты 1324252808.

Попробуй указать время как должно быть.

int TICKsCopied = CopyTicks(_Symbol, TICKs, COPY_TICKS_ALL, (TimeCurrent()-20)*1000, 100);

Если TimeCurrent() время в секундах с 01.01.1970 то в миллисекундах будет умноженное на 1000. Следовательно вышеприведённый вариант копирует тики за последние 20 секунд.

Vladimir Suschenko
3142
Vladimir Suschenko  
Alexey Viktorov:

Попробуй указать время как должно быть.

Если TimeCurrent() время в секундах с 01.01.1970 то в миллисекундах будет умноженное на 1000. Следовательно вышеприведённый вариант копирует тики за последние 20 секунд.

Спасибо, сработало, ввело в заблуждение, что отсчёт времени идёт в милисекундах, а отображение в секундах.
Vladimir Skorina
474
Vladimir Skorina  
Всем привет! Подскажите как в mt4 получить тики. Нет такой функции CopyTick в mt4. Чем ее можно заменить? Может кто знает дайте ссылку где найти можно.
Vladimir Karputov
Модератор
182106
Vladimir Karputov  
Vladimir Skorina:
Всем привет! Подскажите как в mt4 получить тики. Нет такой функции CopyTick в mt4. Чем ее можно заменить? Может кто знает дайте ссылку где найти можно.
Работа с реальными тикам есть в MQL5. Хотите тики - работайте в MQL5.
Stanislav Korotky
25912
Stanislav Korotky  
Vladimir Skorina:
Всем привет! Подскажите как в mt4 получить тики. Нет такой функции CopyTick в mt4. Чем ее можно заменить? Может кто знает дайте ссылку где найти можно.
В МТ4 в онлайне собирать тики нужно самому. Для просмотра истории или теста Вы можете скачать тиковую историю и подсунуть её в качестве нестандартного или стандартного таймфрейма.
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий