Как отследить момент закрытия ордера и получить к нему доступ

 

К сожалению в MQL4 нет пока отслеживания события типа OnOrderClose, поэтому приходится как-то решать это вручную.

Сейчас робот на каждом тике просматривает историю ордеров и проверяет последний закрытый этого символа и с соответствующим комментарием. 

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

можно запоминать через глобальные переменные, но это чревато потерей инфы при внеурочном отключении терминала.


Наверняка уже кто-то умнее меня сталкивался с этой проблемой, поделитесь, пожалуйста )

 
Andrey Egorov:

К сожалению в MQL4 нет пока отслеживания события типа OnOrderClose, поэтому приходится как-то решать это вручную.

Сейчас робот на каждом тике просматривает историю ордеров и проверяет последний закрытый этого символа и с соответствующим комментарием. 

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

можно запоминать через глобальные переменные, но это чревато потерей инфы при внеурочном отключении терминала.


Наверняка уже кто-то умнее меня сталкивался с этой проблемой, поделитесь, пожалуйста )

int total;

void OnTick()
 {
 if(total!=OrdersTotal()) {
  OnTrade();
  total=OrdersTotal();
 }

void OnTrade()
 {
  
 }
 
Vitaly Muzichenko:


Спасибо )

на счету параленъльно работает несколько роботов и они могут тоже делать ордера и менять OrdersTotal()

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

 
Andrey Egorov:


Спасибо )

на счету параленъльно работает несколько роботов и они могут тоже делать ордера и менять OrdersTotal()

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

При первом запуске терминала считываете информацию, и заносите её в переменную и с ней работаете. Как только изменилось состояние счёта Открытие/Закрытие, у вас единоразово снова пробежит цикл, и обновит информацию в переменной.

Таким образом ничего не будет работать на каждом тике

 
Vitaly Muzichenko:

При первом запуске терминала считываете информацию, и заносите её в переменную и с ней работаете. Как только изменилось состояние счёта Открытие/Закрытие, у вас единоразово снова пробежит цикл, и обновит информацию в переменной.

Таким образом ничего не будет работать на каждом тике

спасибо еще раз

побежал прикручивать )

напишу если что 

 
Andrey Egorov:

спасибо еще раз

побежал прикручивать )

напишу если что 

Ещё вариант которым пользуюсь сам.

При открытии ордера его тикет заносится в массив. В зависимости от алгоритма, на каждом тике или на каждом баре в цикле по элементам массива проверяется OrderCloseTime(); каждого ордера, если > 0 значит ордер закрыт. Соответственно выполняются определённые действия и перезаполняется массив.

 
Alexey Viktorov:

Ещё вариант которым пользуюсь сам.

При открытии ордера его тикет заносится в массив. В зависимости от алгоритма, на каждом тике или на каждом баре в цикле по элементам массива проверяется OrderCloseTime(); каждого ордера, если > 0 значит ордер закрыт. Соответственно выполняются определённые действия и перезаполняется массив.

Ну и зачем так писать. Обратитесь во фриланс, вам напишут нормальные проверки за недорого.
 
Vitaly Muzichenko:
Ну и зачем так писать. Обратитесь во фриланс, вам напишут нормальные проверки за недорого.
Прежде чем отвечать, тем более такое, не мешало-бы хорошо подумать...
 
Alexey Viktorov:
Прежде чем отвечать, тем более такое, не мешало-бы хорошо подумать...
Я просто хорошо прочитал сообщение, и думать не пришлось. Это-же круто, на каждом тике проверять массивы. Пойду и себе так сделаю...
 
Vitaly Muzichenko:
Я просто хорошо прочитал сообщение, и думать не пришлось. Это-же круто, на каждом тике проверять массивы. Пойду и себе так сделаю...

А ты считаешь что массив из 3-8 элементов проверить дольше и сложней чем историю ордеров??? Обрати внимание, не массивЫ, а всего один массив.

Ответ-то был на вопрос

Andrey Egorov:

К сожалению в MQL4 нет пока отслеживания события типа OnOrderClose, поэтому приходится как-то решать это вручную.

Сейчас робот на каждом тике просматривает историю ордеров и проверяет последний закрытый этого символа и с соответствующим комментарием. 

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

можно запоминать через глобальные переменные, но это чревато потерей инфы при внеурочном отключении терминала.


Наверняка уже кто-то умнее меня сталкивался с этой проблемой, поделитесь, пожалуйста )

 
Alexey Viktorov:

А ты считаешь что массив из 3-8 элементов проверить дольше и сложней чем историю ордеров??? Обрати внимание, не массивЫ, а всего один массив.

Ответ-то был на вопрос

Попрошу мне не ТЫкать, мы с вами не знакомы!
Причина обращения: