Скачать MetaTrader 5

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

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Скачай документацию одним файлом. Это просто!
Vladimir Suschenko
2835
Vladimir Suschenko 2016.04.09 01:40 

При попытках использовать тиковую историю возникают некоторые непонятные моменты. 
Вот один из них. Предположим, что я не знаю количество тиков истории и хочу скачать все доступные тиковые данные. цепляю на график (в данном случае 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
16755
Alexey Volchanskiy 2016.04.09 02:28  
Vladimir Suschenko:

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

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

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

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

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

 и

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

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

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

Vladimir Suschenko
2835
Vladimir Suschenko 2016.04.11 01:09  
Ещё одна непонятка при работе с тиками....
В документации структура запроса на копирование тиков указана так:
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
6755
Alexey Viktorov 2016.04.11 07:55  
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
2835
Vladimir Suschenko 2016.04.11 16:13  
Alexey Viktorov:

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

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

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