Необходимо в код внедрить логику моментального отслеживания ордера, который был закрыт сам по TP, а не принудительно.
Была идея каждую итерацию таймера (1 сек) пробегать по всем закрытым ордерам и искать последний закрытый ордер у которого
OrderClosePrice() >= OrderTakeProfit().
Какие у вас есть предложения?
бегать не каждую секунду (секунда это слишком редко, и забег трудоёмкий)
а каждый тик проверять : если изменился баланс или маржа, то проверить какого чёрта они поменялись
ps и не надо лазить в историю - все свои ордера и позиции можно и нужно помнить
бегать не каждую секунду (секунда это слишком редко, и забег трудоёмкий)
а каждый тик проверять : если изменился баланс или маржа, то проверить какого чёрта они поменялись
Не будет проблемой, если советник сам открывает ордера и в целом почnи вся функциональность onTimer, а проверку изменения баланса делать onTick?
И как я проверяю баланс?
Если у меня все принудительно закрытые ордера идут в минус, следовательно баланс уменьшается, а я должен проверить ситуацию, когда баланс стал больше, я правильно понимаю?
Необходимо в код внедрить логику моментального отслеживания ордера, который был закрыт сам по TP, а не принудительно.
Была идея каждую итерацию таймера (1 сек) пробегать по всем закрытым ордерам и искать последний закрытый ордер у которого
OrderClosePrice() >= OrderTakeProfit().
Какие у вас есть предложения?
- Устанавливать период сканирования истории счета нет смысла, т. к. для закрытия ордера нужен тик. Поэтому, если запускать советник на символе ордера, то вполне достаточно события OnTick().
- Не всегда цена закрытия, которая больше Take Profit (если речь о buy-ордерах), свидетельствует о срабатывании Take Profit. Может быть и такая ситуация: ордер не был закрыт сервером автоматически (ошибка на сервере), а пользователь/советник отдает приказ на закрытие ордера. Поэтому более достоверный способ определения причины закрытия ордера - парсинг поля комментария.
Не будет проблемой, если советник сам открывает ордера и в целом почnи вся функциональность onTimer, а проверку изменения баланса делать onTick?
И как я проверяю баланс?
Если у меня все принудительно закрытые ордера идут в минус, следовательно баланс уменьшается, а я должен проверить ситуацию, когда баланс стал больше, я правильно понимаю?
проверяйте в ontimer, в чем проблема ...
изменение баланса и/или маржи говорит что чьл-то произошло..открылась или закрылоась поза, сработала отложка, тейк или стоп...
проверить один-два показателя и по изменению выяснить прочии нюансы, гораздо быстрее и менее ресурсоёмко чем постоянно крутить любимый цикл с OrderSelect
проверяйте в ontimer, в чем проблема ...
изменение баланса и/или маржи говорит что чьл-то произошло..открылась или закрылоась поза, сработала отложка, тейк или стоп...
проверить один-два показателя и по изменению выяснить прочии нюансы, гораздо быстрее и менее ресурсоёмко чем постоянно крутить любимый цикл с OrderSelect
Цикл крутить не нужно, достаточно проверить OrdersHistoryTotal().
А как мне поможет анализ открытых позиций, если ордер после достижения tp становится закрытым?
проверяйте в ontimer, в чем проблема ...
изменение баланса и/или маржи говорит что чьл-то произошло..открылась или закрылоась поза, сработала отложка, тейк или стоп...
проверить один-два показателя и по изменению выяснить прочии нюансы, гораздо быстрее и менее ресурсоёмко чем постоянно крутить любимый цикл с OrderSelect
А ну так я и изначально планировал в onTimer, как и описал в вопросе. Ответили, что каждая секунда будет редко.
Не воспроизводится.
void OnStart() { ulong ulCnt = GetMicrosecondCount(); double fBalance = AccountBalance(); Print("Balance: ", GetMicrosecondCount() - ulCnt); ulCnt = GetMicrosecondCount(); int nOT = OrdersHistoryTotal(); Print("Orders: ", GetMicrosecondCount() - ulCnt); }
Вывод:
0 17:43:19.374 Test GBPUSD,M1: initialized 0 17:43:19.375 Test GBPUSD,M1: Balance: 9 0 17:43:19.375 Test GBPUSD,M1: Orders: 8 0 17:43:19.375 Test GBPUSD,M1: uninit reason 0
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Была идея каждую итерацию таймера (1 сек) пробегать по всем закрытым ордерам и искать последний закрытый ордер у которого
OrderClosePrice() >= OrderTakeProfit().
Какие у вас есть предложения?