Как имитировать приход нового тика

 

При торговле не малоликвидных инструментах, приход нового тика на новом баре бывает через несколько секунд.

Мне необходимо, чтобы на новом баре, как бы имитировался новый тик, так как советник запускается после тика.

Думал помудрить с таймером, но как-то не очень мне кажется хорошее решение. К примеру будет потеря связи и время для обновления таймера съедет(или все-таки можно сделать, чтобы таймер обновлялся при появлении нового бара один раз?)

Вообщем нужно, чтобы после нового бара => шла проверка алгоритма, не дожидаясь прихода тика.

 

А известный способ:

MT4InternalMsg = RegisterWindowMessageW("MetaTrader4_Internal_Message");
if(MT4InternalMsg != 0) PostMessageW(hwnd, MT4InternalMsg, 2, 1);

не работает? Так некоторые скрипты заставляют терминал "подумать", что пришел новый тик.

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

Если наступило время нового бара, а новых тиков нет, то какой смысл генерировать тик - котировки-то не поменялись.

 
Stanislav Korotky:

А известный способ:

не работает? Так некоторые скрипты заставляют терминал "подумать", что пришел новый тик.

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

Если наступило время нового бара, а новых тиков нет, то какой смысл генерировать тик - котировки-то не поменялись.


Да, Вы правы не совсем корректно выразился, время нового бара(Time[1] + Period()*60). 

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

А что за функции пользовательские, в справочнике такие не нашел? Быстро ли будет работать такая конструкция?

 
forexman77:

Да, Вы правы не совсем корректно выразился, время нового бара(Time[1] + Period()*60). 

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

А что за функции пользовательские, в справочнике такие не нашел? Быстро ли будет работать такая конструкция?

Если я правильно догадываюсь, это будет применяться в торговле БО у гранд...

Мне кажется работать это не будет. Ну, допустим, что послал приказ открыть ордер в xx:00:00 а первый тик будет спусти 10 секунд. Так и сделка будет по первой котировке в xx:00:10

 
Alexey Viktorov:

Если я правильно догадываюсь, это будет применяться в торговле БО у гранд...

Мне кажется работать это не будет. Ну, допустим, что послал приказ открыть ордер в xx:00:00 а первый тик будет спусти 10 секунд. Так и сделка будет по первой котировке в xx:00:10


Можете в личку название написать, не понятно что такое БО гранд...

Мне кажется не совсем так. Бота запустил под присмотром, была такая ситуация, что прошло несколько секунд, а сделка не открывается(робот по новому бару работает) и когда появился

первый тик цена гэпанула и сделка открылась по плохой цене. В другом случае руками открылся не дожидаясь. Все это касается форекс у меня в терминале есть стакан котировок, правда боту это ничего не даст.

 
forexman77:

Можете в личку название написать, не понятно что такое БО гранд...

Мне кажется не совсем так. Бота запустил под присмотром, была такая ситуация, что прошло несколько секунд, а сделка не открывается(робот по новому бару работает) и когда появился

первый тик цена гэпанула и сделка открылась по плохой цене. В другом случае руками открылся не дожидаясь. Все это касается форекс у меня в терминале есть стакан котировок, правда боту это ничего не даст.

Значит я не правильно догадался. Ничего секретного.

БО - бинарные опционы.

Гранд - брокер Grand Capital

 
forexman77:

При торговле не малоликвидных инструментах, приход нового тика на новом баре бывает через несколько секунд.

Мне необходимо, чтобы на новом баре, как бы имитировался новый тик, так как советник запускается после тика.

Думал помудрить с таймером, но как-то не очень мне кажется хорошее решение. К примеру будет потеря связи и время для обновления таймера съедет(или все-таки можно сделать, чтобы таймер обновлялся при появлении нового бара один раз?)

Вообщем нужно, чтобы после нового бара => шла проверка алгоритма, не дожидаясь прихода тика.

С таймером будет проще всего.

Еще можно попробовать ChartSetSymbolPeriod( NULL, 0 ), но его тоже нужно будет вызывать по таймеру из другого советника.

Если советник анализирует сформированные бары, нужно будет и его подпилить, чтобы он анализировал бар №1, если новый бар появился в первую же секунду, или бар №0, если советник был вызван, а бара еще нет.

 
forexman77:

Да, Вы правы не совсем корректно выразился, время нового бара(Time[1] + Period()*60). 

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

А что за функции пользовательские, в справочнике такие не нашел? Быстро ли будет работать такая конструкция?

Это не пользовательские функции - это импорт из виндовой DLL:

#include <WinUser32.mqh>

#import "user32.dll"
int RegisterWindowMessageW(string lpString);
#import

Но в вашем случае ("нужно, чтобы после [планового времени] нового бара => шла проверка алгоритма, не дожидаясь прихода тика"), думаю таймер - самое оптимальное. Делаете его на 1 секунду, в обработчике OnTimer проверяете локальное время. Когда оно пересекает границу ожидающегося бара (например, для H1 было 9:59:59, стало 10:00:01) - запускаете свой алгоритм. Локальное время должно быть синхронизировано по секундам с серверным! Или потребуется дополнительно в OnInit высчитывать эту разницу и учитывать при сравнении. Серверное время использовать в процессе нельзя, потому что оно обновляется с приходом нового тика ;-).

 
Stanislav Korotky:

Локальное время должно быть синхронизировано по секундам с серверным! Или потребуется дополнительно в OnInit высчитывать эту разницу и учитывать при сравнении. Серверное время использовать в процессе нельзя, потому что оно обновляется с приходом нового тика ;-).

Лехко можно обойтись без локального времени и его синхронизации через ОС

- серверное время робот хранит в глобальной переменной (т.е. доступной и в OnTimer и в OnTick)

- OnTimer прибавляет к нему секунду (т.е. всегда есть текущее время независимо от тиков), а OnTick переписывает значение полностью на первом тике каждого нового бара (т.е. синхронизирует это время с сервером)

Это легко реализовать