Тестируем 'CopyTicks' - страница 45

 

Обнаружил потерю флагов TICK_FLAG_BUY, TICK_FLAG_SELL в структуре MQLTick при копировании тиков из пользовательского символа функцией CopyTicks(...).

Из символа RTS-6.20 экспортировал тики за этот год в файл CSV. Создал символ MyRTS-6.20 методом копирования из RTS-6.20. Загрузил в него тики из этого CSV файла. Получил вроде бы дубликат. С его графиком все хорошо.

А вот CopyTicks(...)...




Использовал скрипт fxsaber-а

Файлы:
 
Sealdo Сергей:

Обнаружил потерю флагов TICK_FLAG_BUY, TICK_FLAG_SELL в структуре MQLTick при копировании тиков из пользовательского символа функцией CopyTicks(...).

Из символа RTS-6.20 экспортировал тики за этот год в файл CSV. Создал символ MyRTS-6.20 методом копирования из RTS-6.20. Загрузил в него тики из этого CSV файла. Получил вроде бы дубликат. С его графиком все хорошо.

Исправлено в бете 2414.

Теперь экспортируются в CSV и импортируются с колонкой флагов.

 

У меня еще тупой вопросик: МТ определяет направление сделок (прописывая в MqlTick.flags BUY/SELL) по анализу тиковых данных сам, или направление сделки он получает от источника данных?

 
Sealdo Сергей:

У меня еще тупой вопросик: МТ определяет направление сделок (прописывая в MqlTick.flags BUY/SELL) по анализу тиковых данных сам, или направление сделки он получает от источника данных?

От источника.

Все зависит от датафида, который может и сам проставлять флаги.

 
MetaQuotes:

От источника.

Все зависит от датафида, который может и сам проставлять флаги.

Что бы не зависеть от источника, лучше организовать локальную логику определения флага.

(Last == Ask ? TICK_FLAG_BUY : TICK_FLAG_SELL);

Таким образом любой датафид будет съедобен, не важно есть у него направление сделок или нет. 
Тем самым будет решена проблема тестера стратегий для биржевого исполнения.
Это означает, что можно будет расширить структуру тиковой истории для биржевых инструментов.
Расширив структуру тиковой истории, появится возможность организации биржевого исполнения в тестере стратегий.
Нужен биржевой реальный тестер!

 

При такой программной логике, думаю, будет немало ошибок >>>


 
Sealdo Сергей:

При такой программной логике, думаю, будет немало ошибок >>>

Каких именно ошибок?
Мне кажется как раз и решит эту проблему, неправильной отрисовки сделок как у вас на скрине, которые не соответствуют вообще офферам и бидам.
Кстати такую же проблему отрисовки наблюдал давно в ТсЛаб, мне кажется это явление из-за того, что это разные каналы данных.
Трейды идут в своем сокете, оффер/бид в другом сокете. Трейды должны быть на линиях оффер/бид и не как не иначе.
Как раз локальное сравнение 

(Last == Ask ? TICK_FLAG_BUY : TICK_FLAG_SELL)

будет синхронизировать оба канала данных, прошедшие сделки и оффер/бид, и возможно исключит этот приведённый вами дефект.

Тут есть ещё неопределённое состояние встречных сделок N/A. 
Для них тоже нужно учесть состояние флагов.

Проверил на СМЕ инструменте.
Как раз встречные сделки N/A отрисовываются не по оффер/бид.
Но они отрисовываются внутри спреда (зелёный кружок), что правильно.
Остальные сделки строго по оффер/бид идут.
У вас инструмент с Мос. Биржи, возможно это и есть встречные сделки которые не попадают в спред, но почему то они вне спреда, что не правильно.
Значит это не встречные сделки, а направленные которые имеют направление.
И как я понял из других обсуждений, стакан терминала МТ5 не отображает встречные заявки на Мос. Бирже.
Может в этом проблема некорректной отрисовки прошедших сделок.


 
Всем привет!! Подкажите, возможно ли в мт5 загрузить историю котировок? 2й деньищу инфу, но не могу найти
 
Igorz2006:
Всем привет!! Подкажите, возможно ли в мт5 загрузить историю котировок? 2й деньищу инфу, но не могу найти

Получение тиков:

CopyTicks

Получает в массив тики в формате MqlTick

CopyTicksRange

Получает в массив тики в указанном диапазоне дат

Документация по MQL5: Доступ к таймсериям и индикаторам / CopyTicks
Документация по MQL5: Доступ к таймсериям и индикаторам / CopyTicks
  • www.mql5.com
[in]  Количество запрашиваемых тиков. Если параметры from и count не указаны, то в массив ticks_array[] будут записаны все доступные последние тики, но не более 2000. Первый вызов CopyTicks() инициирует синхронизацию базы тиков, хранящихся на жёстком диске по данному символу. Если тиков в локальной базе не хватает, то недостающие тики...
 
Спасибо, буду разбираться
Причина обращения: