Скачать MetaTrader 5

ФОРТС. Вопросы по исполнению - страница 103

TheXpert
17261
TheXpert  
prostotrader:

Как Вы думаете, это долго?

если в очереди событий советника может быть только одно событие OnTradeTransaction (как у таймера) то скорость вашего кода неважна.

если нет, в зависимости от того синхронно или асинхронно вы работаете с ордерами.
prostotrader
4863
prostotrader  
Комбинатор:

если в очереди событий советника может быть только одно событие OnTradeTransaction (как у таймера) то скорость вашего кода неважна.

если нет, в зависимости от того синхронно или асинхронно вы работаете с ордерами.

Ассинхронно, но их одновременно может быть не более 30

Кстати, а вот ещё (а с 10-10 до 14-00 почему-то всё отлично работало)

2018.02.28 14:07:59.505 Trades  'xxxxx': cancel order #84736275 buy limit 3.00 LKOH-9.18 at 37312
2018.02.28 14:08:09.071 Trades  'xxxxx': accepted cancel order #84736275 buy limit 3.00 LKOH-9.18 at 37312
2018.02.28 14:08:09.107 Trades  'xxxxx': cancel #84736275 buy limit 3.00 LKOH-9.18 at market done in 9602.694 ms

2018.02.28 14:00:32.653 trader (FEES-3.18,M1)   CheckTradingTime: Сейчас 2018.02.28 14:00, если есть необходимость, можно закрыть терминал.
2018.02.28 14:08:00.522 trader (LKOH-6.18,M1)   ProcessOrders: Билет buy ордера = 84736275 Cост. ордера = ORD_DO_CANCEL
2018.02.28 14:08:01.543 trader (LKOH-6.18,M1)   ProcessOrders: Билет buy ордера = 84736275 Cост. ордера = ORD_DO_CANCEL
2018.02.28 14:08:02.553 trader (LKOH-6.18,M1)   ProcessOrders: Билет buy ордера = 84736275 Cост. ордера = ORD_DO_CANCEL
2018.02.28 14:08:03.565 trader (LKOH-6.18,M1)   ProcessOrders: Билет buy ордера = 84736275 Cост. ордера = ORD_DO_CANCEL
2018.02.28 14:08:04.593 trader (LKOH-6.18,M1)   ProcessOrders: Билет buy ордера = 84736275 Cост. ордера = ORD_DO_CANCEL
2018.02.28 14:08:05.625 trader (LKOH-6.18,M1)   ProcessOrders: Билет buy ордера = 84736275 Cост. ордера = ORD_DO_CANCEL
2018.02.28 14:08:06.654 trader (LKOH-6.18,M1)   ProcessOrders: Билет buy ордера = 84736275 Cост. ордера = ORD_DO_CANCEL
2018.02.28 14:08:07.667 trader (LKOH-6.18,M1)   ProcessOrders: Билет buy ордера = 84736275 Cост. ордера = ORD_DO_CANCEL
2018.02.28 14:08:08.680 trader (LKOH-6.18,M1)   ProcessOrders: Билет buy ордера = 84736275 Cост. ордера = ORD_DO_CANCEL

Но здесь дождались ответа сервера :)

prostotrader
4863
prostotrader  

А вот Вам не кажется странным, что последний раз я писал здесь

prostotrader 2017.04.17 19:10 #932   EN
Билд 1571, реал, Открывашка

Непонятные задержки продолжаются (execution in 2106.116 ms) ...

Это апрель 2017 г., вышел новый билд 1571

И, сейчас 1755, только тогда было 2 секунды, а сейчас....

Чего же я тогда молчал столько (а к советникам даже не прикосался ) аж целых 9 месяцев!

Добавлено

Кол-во инструментов на ФОРТС не изменилось, Открывашка добавила 5 новых серверов МТ5,

объёмы торгов уменьшились, а проблема не только осталась, но и "выросла".

prostotrader
4863
prostotrader  

Да и сам терминал не отправит более 60 ордеров в секунду

2018.02.28 15:30:15.089 DelayTest (RTS-3.18,M1) PlaceOrder: Ордер не отправлен! Порядковый номер: 60 Причина: 10024
2018.02.28 15:30:15.090 DelayTest (RTS-3.18,M1) PlaceOrder: Ордер не отправлен! Порядковый номер: 61 Причина: 10024
2018.02.28 15:30:15.090 DelayTest (RTS-3.18,M1) PlaceOrder: Ордер не отправлен! Порядковый номер: 62 Причина: 10024
2018.02.28 15:30:15.090 DelayTest (RTS-3.18,M1) PlaceOrder: Ордер не отправлен! Порядковый номер: 63 Причина: 10024
2018.02.28 15:30:15.090 DelayTest (RTS-3.18,M1) PlaceOrder: Ордер не отправлен! Порядковый номер: 64 Причина: 10024
2018.02.28 15:30:15.090 DelayTest (RTS-3.18,M1) PlaceOrder: Ордер не отправлен! Порядковый номер: 65 Причина: 10024
2018.02.28 15:30:15.090 DelayTest (RTS-3.18,M1) PlaceOrder: Ордер не отправлен! Порядковый номер: 66 Причина: 10024
2018.02.28 15:30:15.090 DelayTest (RTS-3.18,M1) PlaceOrder: Ордер не отправлен! Порядковый номер: 67 Причина: 10024
2018.02.28 15:30:15.090 DelayTest (RTS-3.18,M1) PlaceOrder: Ордер не отправлен! Порядковый номер: 68 Причина: 10024
2018.02.28 15:30:15.090 DelayTest (RTS-3.18,M1) PlaceOrder: Ордер не отправлен! Порядковый номер: 69 Причина: 10024
2018.02.28 15:30:15.090 DelayTest (RTS-3.18,M1) PlaceOrder: Ордер не отправлен! Порядковый номер: 70 Причина: 10024
2018.02.28 15:30:15.090 DelayTest (RTS-3.18,M1) PlaceOrder: Ордер не отправлен! Порядковый номер: 71 Причина: 10024
2018.02.28 15:30:15.090 DelayTest (RTS-3.18,M1) PlaceOrder: Ордер не отправлен! Порядковый номер: 72 Причина: 10024
2018.02.28 15:30:15.090 DelayTest (RTS-3.18,M1) PlaceOrder: Ордер не отправлен! Порядковый номер: 73 Причина: 10024
2018.02.28 15:30:15.090 DelayTest (RTS-3.18,M1) PlaceOrder: Ордер не отправлен! Порядковый номер: 74 Причина: 10024
2018.02.28 15:30:15.090 DelayTest (RTS-3.18,M1) PlaceOrder: Ордер не отправлен! Порядковый номер: 75 Причина: 10024
2018.02.28 15:30:15.090 DelayTest (RTS-3.18,M1) PlaceOrder: Ордер не отправлен! Порядковый номер: 76 Причина: 10024
2018.02.28 15:30:15.090 DelayTest (RTS-3.18,M1) PlaceOrder: Ордер не отправлен! Порядковый номер: 77 Причина: 10024
2018.02.28 15:30:15.090 DelayTest (RTS-3.18,M1) PlaceOrder: Ордер не отправлен! Порядковый номер: 78 Причина: 10024
2018.02.28 15:30:15.090 DelayTest (RTS-3.18,M1) PlaceOrder: Ордер не отправлен! Порядковый номер: 79 Причина: 10024
2018.02.28 15:30:15.090 DelayTest (RTS-3.18,M1) PlaceOrder: Ордер не отправлен! Порядковый номер: 80 Причина: 10024
2018.02.28 15:30:15.090 DelayTest (RTS-3.18,M1) PlaceOrder: Ордер не отправлен! Порядковый номер: 81 Причина: 10024
2018.02.28 15:30:15.090 DelayTest (RTS-3.18,M1) PlaceOrder: Ордер не отправлен! Порядковый номер: 82 Причина: 10024
2018.02.28 15:30:15.090 DelayTest (RTS-3.18,M1) PlaceOrder: Ордер не отправлен! Порядковый номер: 83 Причина: 10024
2018.02.28 15:30:15.090 DelayTest (RTS-3.18,M1) PlaceOrder: Ордер не отправлен! Порядковый номер: 84 Причина: 10024
2018.02.28 15:30:15.090 DelayTest (RTS-3.18,M1) PlaceOrder: Ордер не отправлен! Порядковый номер: 85 Причина: 10024
2018.02.28 15:30:15.090 DelayTest (RTS-3.18,M1) PlaceOrder: Ордер не отправлен! Порядковый номер: 86 Причина: 10024
2018.02.28 15:30:15.090 DelayTest (RTS-3.18,M1) PlaceOrder: Ордер не отправлен! Порядковый номер: 87 Причина: 10024
2018.02.28 15:30:15.090 DelayTest (RTS-3.18,M1) PlaceOrder: Ордер не отправлен! Порядковый номер: 88 Причина: 10024
2018.02.28 15:30:15.090 DelayTest (RTS-3.18,M1) PlaceOrder: Ордер не отправлен! Порядковый номер: 89 Причина: 10024
2018.02.28 15:30:15.090 DelayTest (RTS-3.18,M1) PlaceOrder: Ордер не отправлен! Порядковый номер: 90 Причина: 10024
2018.02.28 15:30:15.090 DelayTest (RTS-3.18,M1) PlaceOrder: Ордер не отправлен! Порядковый номер: 91 Причина: 10024
2018.02.28 15:30:15.090 DelayTest (RTS-3.18,M1) PlaceOrder: Ордер не отправлен! Порядковый номер: 92 Причина: 10024
2018.02.28 15:30:15.090 DelayTest (RTS-3.18,M1) PlaceOrder: Ордер не отправлен! Порядковый номер: 93 Причина: 10024
2018.02.28 15:30:15.090 DelayTest (RTS-3.18,M1) PlaceOrder: Ордер не отправлен! Порядковый номер: 94 Причина: 10024
2018.02.28 15:30:15.090 DelayTest (RTS-3.18,M1) PlaceOrder: Ордер не отправлен! Порядковый номер: 95 Причина: 10024
2018.02.28 15:30:15.090 DelayTest (RTS-3.18,M1) PlaceOrder: Ордер не отправлен! Порядковый номер: 96 Причина: 10024
2018.02.28 15:30:15.090 DelayTest (RTS-3.18,M1) PlaceOrder: Ордер не отправлен! Порядковый номер: 97 Причина: 10024
2018.02.28 15:30:15.090 DelayTest (RTS-3.18,M1) PlaceOrder: Ордер не отправлен! Порядковый номер: 98 Причина: 10024
2018.02.28 15:30:15.090 DelayTest (RTS-3.18,M1) PlaceOrder: Ордер не отправлен! Порядковый номер: 99 Причина: 10024
2018.02.28 15:30:15.111 DelayTest (RTS-3.18,M1) OnTradeTransaction: Ордер установлен. Билет = 73495897
2018.02.28 15:30:15.111 DelayTest (RTS-3.18,M1) OnTradeTransaction: Ордер установлен. Билет = 73495898
2018.02.28 15:30:15.111 DelayTest (RTS-3.18,M1) OnTradeTransaction: Ордер установлен. Билет = 73495899
2018.02.28 15:30:15.111 DelayTest (RTS-3.18,M1) OnTradeTransaction: Ордер установлен. Билет = 73495900
2018.02.28 15:30:15.111 DelayTest (RTS-3.18,M1) OnTradeTransaction: Ордер установлен. Билет = 73495901
2018.02.28 15:30:15.111 DelayTest (RTS-3.18,M1) OnTradeTransaction: Ордер установлен. Билет = 73495902
2018.02.28 15:30:15.111 DelayTest (RTS-3.18,M1) OnTradeTransaction: Ордер установлен. Билет = 73495903
2018.02.28 15:30:15.111 DelayTest (RTS-3.18,M1) OnTradeTransaction: Ордер установлен. Билет = 73495904
2018.02.28 15:30:15.111 DelayTest (RTS-3.18,M1) OnTradeTransaction: Ордер установлен. Билет = 73495905
2018.02.28 15:30:15.113 DelayTest (RTS-3.18,M1) OnTradeTransaction: Ордер установлен. Билет = 73495906
2018.02.28 15:30:15.113 DelayTest (RTS-3.18,M1) OnTradeTransaction: Ордер установлен. Билет = 73495907
2018.02.28 15:30:15.113 DelayTest (RTS-3.18,M1) OnTradeTransaction: Ордер установлен. Билет = 73495908
2018.02.28 15:30:15.114 DelayTest (RTS-3.18,M1) OnTradeTransaction: Ордер установлен. Билет = 73495909
2018.02.28 15:30:15.114 DelayTest (RTS-3.18,M1) OnTradeTransaction: Ордер установлен. Билет = 73495910
2018.02.28 15:30:15.114 DelayTest (RTS-3.18,M1) OnTradeTransaction: Ордер установлен. Билет = 73495911
2018.02.28 15:30:15.114 DelayTest (RTS-3.18,M1) OnTradeTransaction: Ордер установлен. Билет = 73495912
2018.02.28 15:30:15.120 DelayTest (RTS-3.18,M1) OnTradeTransaction: Ордер установлен. Билет = 73495913
2018.02.28 15:30:15.120 DelayTest (RTS-3.18,M1) OnTradeTransaction: Ордер установлен. Билет = 73495914
2018.02.28 15:30:15.121 DelayTest (RTS-3.18,M1) OnTradeTransaction: Ордер установлен. Билет = 73495915
2018.02.28 15:30:15.121 DelayTest (RTS-3.18,M1) OnTradeTransaction: Ордер установлен. Билет = 73495916
2018.02.28 15:30:15.121 DelayTest (RTS-3.18,M1) OnTradeTransaction: Ордер установлен. Билет = 73495917
2018.02.28 15:30:15.121 DelayTest (RTS-3.18,M1) OnTradeTransaction: Ордер установлен. Билет = 73495918
2018.02.28 15:30:15.121 DelayTest (RTS-3.18,M1) OnTradeTransaction: Ордер установлен. Билет = 73495919
2018.02.28 15:30:15.121 DelayTest (RTS-3.18,M1) OnTradeTransaction: Ордер установлен. Билет = 73495920
2018.02.28 15:30:15.121 DelayTest (RTS-3.18,M1) OnTradeTransaction: Ордер установлен. Билет = 73495921
2018.02.28 15:30:15.121 DelayTest (RTS-3.18,M1) OnTradeTransaction: Ордер установлен. Билет = 73495922
2018.02.28 15:30:15.126 DelayTest (RTS-3.18,M1) OnTradeTransaction: Ордер установлен. Билет = 73495923
2018.02.28 15:30:15.126 DelayTest (RTS-3.18,M1) OnTradeTransaction: Ордер установлен. Билет = 73495924
2018.02.28 15:30:15.126 DelayTest (RTS-3.18,M1) OnTradeTransaction: Ордер установлен. Билет = 73495925
2018.02.28 15:30:15.126 DelayTest (RTS-3.18,M1) OnTradeTransaction: Ордер установлен. Билет = 73495926
2018.02.28 15:30:15.126 DelayTest (RTS-3.18,M1) OnTradeTransaction: Ордер установлен. Билет = 73495927
2018.02.28 15:30:15.127 DelayTest (RTS-3.18,M1) OnTradeTransaction: Ордер установлен. Билет = 73495928
2018.02.28 15:30:15.127 DelayTest (RTS-3.18,M1) OnTradeTransaction: Ордер установлен. Билет = 73495929
2018.02.28 15:30:15.127 DelayTest (RTS-3.18,M1) OnTradeTransaction: Ордер установлен. Билет = 73495930
2018.02.28 15:30:15.127 DelayTest (RTS-3.18,M1) OnTradeTransaction: Ордер установлен. Билет = 73495931
2018.02.28 15:30:15.133 DelayTest (RTS-3.18,M1) OnTradeTransaction: Ордер установлен. Билет = 73495932
2018.02.28 15:30:15.133 DelayTest (RTS-3.18,M1) OnTradeTransaction: Ордер установлен. Билет = 73495933
2018.02.28 15:30:15.133 DelayTest (RTS-3.18,M1) OnTradeTransaction: Ордер установлен. Билет = 73495934
2018.02.28 15:30:15.133 DelayTest (RTS-3.18,M1) OnTradeTransaction: Ордер установлен. Билет = 73495935
2018.02.28 15:30:15.133 DelayTest (RTS-3.18,M1) OnTradeTransaction: Ордер установлен. Билет = 73495936
2018.02.28 15:30:15.133 DelayTest (RTS-3.18,M1) OnTradeTransaction: Ордер установлен. Билет = 73495937
2018.02.28 15:30:15.133 DelayTest (RTS-3.18,M1) OnTradeTransaction: Ордер установлен. Билет = 73495938
2018.02.28 15:30:15.144 DelayTest (RTS-3.18,M1) OnTradeTransaction: Ордер удалён. Билет = 73495897
2018.02.28 15:30:15.144 DelayTest (RTS-3.18,M1) OnTradeTransaction: Ордер удалён. Билет = 73495898
2018.02.28 15:30:15.144 DelayTest (RTS-3.18,M1) OnTradeTransaction: Ордер удалён. Билет = 73495899
2018.02.28 15:30:15.144 DelayTest (RTS-3.18,M1) OnTradeTransaction: Ордер удалён. Билет = 73495900
2018.02.28 15:30:15.144 DelayTest (RTS-3.18,M1) OnTradeTransaction: Ордер удалён. Билет = 73495902
2018.02.28 15:30:15.144 DelayTest (RTS-3.18,M1) OnTradeTransaction: Ордер удалён. Билет = 73495903
2018.02.28 15:30:15.144 DelayTest (RTS-3.18,M1) OnTradeTransaction: Ордер удалён. Билет = 73495901
2018.02.28 15:30:15.146 DelayTest (RTS-3.18,M1) OnTradeTransaction: Ордер удалён. Билет = 73495904
2018.02.28 15:30:15.146 DelayTest (RTS-3.18,M1) OnTradeTransaction: Ордер удалён. Билет = 73495905
2018.02.28 15:30:15.146 DelayTest (RTS-3.18,M1) OnTradeTransaction: Ордер удалён. Билет = 73495906
2018.02.28 15:30:15.146 DelayTest (RTS-3.18,M1) OnTradeTransaction: Ордер удалён. Билет = 73495907
2018.02.28 15:30:15.146 DelayTest (RTS-3.18,M1) OnTradeTransaction: Ордер удалён. Билет = 73495908
2018.02.28 15:30:15.146 DelayTest (RTS-3.18,M1) OnTradeTransaction: Ордер удалён. Билет = 73495909
2018.02.28 15:30:15.146 DelayTest (RTS-3.18,M1) OnTradeTransaction: Ордер удалён. Билет = 73495910
2018.02.28 15:30:15.146 DelayTest (RTS-3.18,M1) OnTradeTransaction: Ордер удалён. Билет = 73495911
2018.02.28 15:30:15.147 DelayTest (RTS-3.18,M1) OnTradeTransaction: Ордер удалён. Билет = 73495912
2018.02.28 15:30:15.151 DelayTest (RTS-3.18,M1) OnTradeTransaction: Ордер удалён. Билет = 73495913
2018.02.28 15:30:15.151 DelayTest (RTS-3.18,M1) OnTradeTransaction: Ордер удалён. Билет = 73495914
2018.02.28 15:30:15.151 DelayTest (RTS-3.18,M1) OnTradeTransaction: Ордер удалён. Билет = 73495915
2018.02.28 15:30:15.151 DelayTest (RTS-3.18,M1) OnTradeTransaction: Ордер удалён. Билет = 73495916
2018.02.28 15:30:15.151 DelayTest (RTS-3.18,M1) OnTradeTransaction: Ордер удалён. Билет = 73495917
2018.02.28 15:30:15.151 DelayTest (RTS-3.18,M1) OnTradeTransaction: Ордер удалён. Билет = 73495918
2018.02.28 15:30:15.153 DelayTest (RTS-3.18,M1) OnTradeTransaction: Ордер удалён. Билет = 73495919
2018.02.28 15:30:15.153 DelayTest (RTS-3.18,M1) OnTradeTransaction: Ордер удалён. Билет = 73495920
2018.02.28 15:30:15.153 DelayTest (RTS-3.18,M1) OnTradeTransaction: Ордер удалён. Билет = 73495921
2018.02.28 15:30:15.153 DelayTest (RTS-3.18,M1) OnTradeTransaction: Ордер удалён. Билет = 73495922
2018.02.28 15:30:15.159 DelayTest (RTS-3.18,M1) OnTradeTransaction: Ордер удалён. Билет = 73495923
2018.02.28 15:30:15.159 DelayTest (RTS-3.18,M1) OnTradeTransaction: Ордер удалён. Билет = 73495924
2018.02.28 15:30:15.160 DelayTest (RTS-3.18,M1) OnTradeTransaction: Ордер удалён. Билет = 73495925
2018.02.28 15:30:15.160 DelayTest (RTS-3.18,M1) OnTradeTransaction: Ордер удалён. Билет = 73495926
2018.02.28 15:30:15.160 DelayTest (RTS-3.18,M1) OnTradeTransaction: Ордер удалён. Билет = 73495927
2018.02.28 15:30:15.160 DelayTest (RTS-3.18,M1) OnTradeTransaction: Ордер удалён. Билет = 73495928
2018.02.28 15:30:15.160 DelayTest (RTS-3.18,M1) OnTradeTransaction: Ордер удалён. Билет = 73495929
2018.02.28 15:30:15.160 DelayTest (RTS-3.18,M1) OnTradeTransaction: Ордер удалён. Билет = 73495930
2018.02.28 15:30:15.160 DelayTest (RTS-3.18,M1) OnTradeTransaction: Ордер удалён. Билет = 73495931
2018.02.28 15:30:15.162 DelayTest (RTS-3.18,M1) OnTradeTransaction: Ордер удалён. Билет = 73495932
2018.02.28 15:30:15.164 DelayTest (RTS-3.18,M1) OnTradeTransaction: Ордер удалён. Билет = 73495933
2018.02.28 15:30:15.164 DelayTest (RTS-3.18,M1) OnTradeTransaction: Ордер удалён. Билет = 73495934
2018.02.28 15:30:15.164 DelayTest (RTS-3.18,M1) OnTradeTransaction: Ордер удалён. Билет = 73495935
2018.02.28 15:30:15.164 DelayTest (RTS-3.18,M1) OnTradeTransaction: Ордер удалён. Билет = 73495936
2018.02.28 15:30:15.167 DelayTest (RTS-3.18,M1) OnTradeTransaction: Ордер удалён. Билет = 73495937
2018.02.28 15:30:15.167 DelayTest (RTS-3.18,M1) OnTradeTransaction: Ордер удалён. Билет = 73495938

prostotrader
4863
prostotrader  

САм код

//+------------------------------------------------------------------+
//|                                                    DelayTest.mq5 |
//|                                      Copyright 2017 prostotrader |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017 prostotrader"
#property link      "https://www.mql5.com"
#property version   "1.00"
//
#define max_orders 100  
//
struct MY_ORDERS
  {
   uint              req_id[max_orders];
   ulong             ticket[max_orders];
   ulong             magic[max_orders];
  };
MY_ORDERS my_orders;
ulong st_magic=9988776655;
//+------------------------------------------------------------------+
//| Expert remove order function                                     |
//+------------------------------------------------------------------+
void RemoveOrder(const ulong a_ticket,const int idx)
  {
   my_orders.req_id[idx]=0;
   MqlTradeRequest request = {0};
   MqlTradeResult  result  = {0};
   request.action= TRADE_ACTION_REMOVE;
   request.order = a_ticket;
   if(OrderSendAsync(request,result))
     {
      my_orders.req_id[idx]=result.request_id;
     }
   else
     {
      Print(__FUNCTION__,": Ордер не отправлен! Билет = ",a_ticket," Причина: ",result.retcode);
     }
  }
//+------------------------------------------------------------------+
//| Expert place order function                                      |
//+------------------------------------------------------------------+
void PlaceOrder(double price,int idx,ulong magic)
  {
   MqlTradeRequest request = {0};
   MqlTradeResult  result  = {0};
   my_orders.ticket[idx] = 0;
   my_orders.req_id[idx] = 0;
   my_orders.magic[idx]=magic;
   request.action = TRADE_ACTION_PENDING;
   request.magic  = magic;
   request.symbol = Symbol();
   request.volume = 1;
   request.price  = price;
   request.type=ORDER_TYPE_SELL_LIMIT;
   request.comment="Отложенный ордер...";
   request.type_filling=ORDER_FILLING_RETURN;
   request.type_time=ORDER_TIME_DAY;
   if(OrderSendAsync(request,result))
     {
      my_orders.req_id[idx]=result.request_id;
      magic++;
     }
   else
     {
      Print(__FUNCTION__,": Ордер не отправлен! Порядковый номер: ", idx, " Причина: ",result.retcode);
     }
  }
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   double step=SymbolInfoDouble(Symbol(),SYMBOL_TRADE_TICK_SIZE);
   double max_price=SymbolInfoDouble(Symbol(),SYMBOL_SESSION_PRICE_LIMIT_MAX);
   for(int i=0; i<max_orders;i++)
     {
      PlaceOrder(max_price,i,st_magic);
      max_price-=step;
     }
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   for(int i=0; i<max_orders;i++)
     {
      if(my_orders.ticket[i]>0)
        {
         RemoveOrder(my_orders.ticket[i],i);
        }
     }
  }
//+------------------------------------------------------------------+
//| TradeTransaction function                                        |
//+------------------------------------------------------------------+
void OnTradeTransaction(const MqlTradeTransaction &trans,
                        const MqlTradeRequest &request,
                        const MqlTradeResult &result)
  {
//    Print("Trans type: ", EnumToString(trans.type), "; Order satte: ", EnumToString(trans.order_state));
   switch(trans.type)
     {
      case TRADE_TRANSACTION_REQUEST:
         for(int i=0; i<max_orders;i++)
           {
            if((my_orders.req_id[i]==result.request_id) && (my_orders.req_id[i]>0))
              {
               my_orders.ticket[i]=result.order;
               break;
              }
           }
         break;
      case TRADE_TRANSACTION_HISTORY_ADD:
         for(int i=0; i<max_orders;i++)
           {
            if((my_orders.ticket[i]==trans.order) && (my_orders.ticket[i]>0))
              {
               my_orders.ticket[i]=0;
               Print(__FUNCTION__,": Ордер удалён. Билет = ",trans.order);
               break;
              }
           }
         break;
      case TRADE_TRANSACTION_ORDER_UPDATE:
         switch(trans.order_state)
           {
            case ORDER_STATE_PLACED:
               for(int i=0; i<max_orders;i++)
                 {
                  if((my_orders.ticket[i]==trans.order) && (my_orders.ticket[i]>0))
                    {
                     RemoveOrder(my_orders.ticket[i],i);
                     Print(__FUNCTION__,": Ордер установлен. Билет = ",trans.order);
                     break;
                    }
                 }
               break;
           }
         break;
     }
  }
//+------------------------------------------------------------------+
fxsaber
12239
fxsaber  
prostotrader:

У меня 4000 транзакций в день, каждая транзакция минимум 5-6 раз "дёргает" OnTradeTransaction

Кто будет разбираться в этих "портянках" :) Ведь к ним нужны логи и терминала к тому же, плюс логи Сервера МТ5.

Если логи будут занимать гигабайты - и в них буду разбираться. Логи сервера не нужны.


Всем, кто утверждает, что в OnTradeTransaction что-то не приходит, крайне рекомендую запустить этот советник

// Советник записывает подробно каждый OnTradeTransaction в файл.

// Время последнего тика символа
long GetSymbolTime( const string Symb )
{
  MqlTick Tick;
  
  return(SymbolInfoTick(Symb, Tick) ? Tick.time_msc : 0);
}

// Время последнего тика Обзора рынка
long GetMarketWatchTime( void )
{
  long Res = 0;
  
  for (int i = SymbolsTotal(true) - 1; i >= 0; i--)
  {
    const long TmpTime = GetSymbolTime(SymbolName(i, true));
    
    if (TmpTime > Res)
      Res = TmpTime;
  }
  
  return(Res);
}

// Текущее время на торговом сервере без учета пинга
long GetCurrenTime( void )
{
  static ulong StartTime = GetMicrosecondCount();
  static long PrevTime = 0;
  
  const long TmpTime = GetMarketWatchTime();
  
  if (TmpTime > PrevTime)
  {
    PrevTime = TmpTime;
    
    StartTime = GetMicrosecondCount();
  }
  
  return(PrevTime + (long)((GetMicrosecondCount() - StartTime) / 1000));
}

string TimeToString( const long Value )
{
  return((string)(datetime)(Value / 1000) + "." + (string)IntegerToString(Value % 1000, 3, '0'));
}

class FILE
{
public:
  const string Name;
  const int handle;

#define _H(A) if (this.handle != INVALID_HANDLE) A
  
  FILE( const string FileName ) : Name(FileName), handle(FileOpen(this.Name, FILE_READ | FILE_WRITE | FILE_IS_TEXT))
  {
    _H(FileSeek(this.handle, 0, SEEK_END));
  }
  
  ~FILE() { _H(FileClose(this.handle)); }
  
  uint Write( const string Str ) const
  {
    return(FileWrite(this.handle, Str));
  }  
};

void OnTradeTransaction ( const MqlTradeTransaction &Trans, const MqlTradeRequest &Request, const MqlTradeResult &Result )
{ 
  static FILE File(__FUNCTION__ + ".txt");
  
  File.Write(TimeToString(GetCurrenTime()) + "\n" + ToString(Trans) + ToString(Request) + ToString(Result));
}

#define TOSTRING(A)  #A + " = " + (string)(A) + "\n"
#define TOSTRING2(A) #A + " = " + EnumToString(A) + " (" + (string)(A) + ")\n"

string ToString( const MqlTradeTransaction &Trans )
{
  return(TOSTRING(Trans.deal) + TOSTRING(Trans.order) + TOSTRING(Trans.symbol) +
         TOSTRING2(Trans.type) + TOSTRING2(Trans.order_type) + TOSTRING2(Trans.order_state) +
         TOSTRING2(Trans.deal_type) + TOSTRING2(Trans.time_type) +
         TOSTRING(Trans.time_expiration) + TOSTRING(Trans.price) + TOSTRING(Trans.price_trigger) + 
         TOSTRING(Trans.price_sl) + TOSTRING(Trans.price_tp) + TOSTRING(Trans.volume) + 
         TOSTRING(Trans.position) + TOSTRING(Trans.position_by));
}

string ToString( const MqlTradeRequest &Request )
{
  return(TOSTRING2(Request.action) + TOSTRING(Request.magic) + TOSTRING(Request.order) +
         TOSTRING(Request.symbol) + TOSTRING(Request.volume) + TOSTRING(Request.price) + 
         TOSTRING(Request.stoplimit) + TOSTRING(Request.sl) +  TOSTRING(Request.tp) + 
         TOSTRING(Request.deviation) + TOSTRING2(Request.type) + TOSTRING2(Request.type_filling) +
         TOSTRING2(Request.type_time) + TOSTRING(Request.expiration) + TOSTRING(Request.comment) +
         TOSTRING(Request.position) + TOSTRING(Request.position_by));
}

string ToString( const MqlTradeResult &Result )
{
  return(TOSTRING(Result.retcode) + TOSTRING(Result.deal) + TOSTRING(Result.order) +
         TOSTRING(Result.volume) + TOSTRING(Result.price) + TOSTRING(Result.bid) +  
         TOSTRING(Result.ask) + TOSTRING(Result.comment) + TOSTRING(Result.request_id) +  
         TOSTRING(Result.retcode_external));
}


Результат в файле будет выглядеть так

2018.02.28 14:28:27.907
Trans.deal = 0
Trans.order = 213465763
Trans.symbol = EURUSD
Trans.type = TRADE_TRANSACTION_ORDER_ADD (0)
Trans.order_type = ORDER_TYPE_SELL (1)
Trans.order_state = ORDER_STATE_STARTED (0)
Trans.deal_type = DEAL_TYPE_BUY (0)
Trans.time_type = ORDER_TIME_GTC (0)
Trans.time_expiration = 1970.01.01 00:00:00
Trans.price = 1.22178
Trans.price_trigger = 0.0
Trans.price_sl = 0.0
Trans.price_tp = 0.0
Trans.volume = 1.0
Trans.position = 0
Trans.position_by = 0
Request.action = ENUM_TRADE_REQUEST_ACTIONS::0 (0)
Request.magic = 0
Request.order = 0
Request.symbol = 
Request.volume = 0.0
Request.price = 0.0
Request.stoplimit = 0.0
Request.sl = 0.0
Request.tp = 0.0
Request.deviation = 0
Request.type = ORDER_TYPE_BUY (0)
Request.type_filling = ORDER_FILLING_FOK (0)
Request.type_time = ORDER_TIME_GTC (0)
Request.expiration = 1970.01.01 00:00:00
Request.comment = 
Request.position = 0
Request.position_by = 0
Result.retcode = 0
Result.deal = 0
Result.order = 0
Result.volume = 0.0
Result.price = 0.0
Result.bid = 0.0
Result.ask = 0.0
Result.comment = 
Result.request_id = 0
Result.retcode_external = 0

2018.02.28 14:28:27.913
Trans.deal = 196986814
Trans.order = 213465763
Trans.symbol = EURUSD
Trans.type = TRADE_TRANSACTION_DEAL_ADD (6)
....

Если даже такого лога нет, то любые утверждения на тему OnTradeTransaction - говорильня, не более.


ЗЫ Время не идеально считается в данном случае, но не стал усложнять выдранное из другого контекста решение.

Файлы:
prostotrader
4863
prostotrader  
fxsaber:

Если логи будут занимать гигабайты - и в них буду разбираться. Логи сервера не нужны.


Всем, кто утверждает, что в OnTradeTransaction что-то не приходит, крайне рекомендую запустить этот советник


Результат в файле будет выглядеть так

Если даже такого лога нет, то любые утверждения на тему OnTradeTransaction - говорильня, не более.


ЗЫ Время не идеально считается в данном случае, но не стал усложнять выдранное из другого контекста решение.

Зачем такой "огород" городить?

Достаточно будет:

void OnTradeTransaction(const MqlTradeTransaction &trans,
                        const MqlTradeRequest &request,
                        const MqlTradeResult &result)
  {
    Print("Trans type: ", EnumToString(trans.type), "; Order satte: ", EnumToString(trans.order_state), " Order ticket: ", trans.order);
}
fxsaber
12239
fxsaber  
prostotrader:

Зачем такой "огород" городить?

Достаточно будет:

Недостаточно.

Aleksey Vyazmikin
12119
Aleksey Vyazmikin  

Открытие руками, тормоза подтверждаются

2018.03.14 10:01:29.516 Trades  '289': exchange sell 10.00 Si-3.18 at market
2018.03.14 10:01:40.680 Trades  '289': accepted exchange sell 10.00 Si-3.18 at market
2018.03.14 10:01:40.692 Trades  '289': exchange sell 10.00 Si-3.18 at market placed for execution
2018.03.14 10:01:40.781 Trades  '289': order #85223736 sell 10.00 / 10.00 Si-3.18 at market done in 11265.537 ms
2018.03.14 10:01:40.782 Trades  '289': deal #47039430 sell 3.00 Si-3.18 at 57027 done (based on order #85223736)
2018.03.14 10:01:40.786 Trades  '289': deal #47039431 sell 2.00 Si-3.18 at 57026 done (based on order #85223736)
2018.03.14 10:01:40.787 Trades  '289': deal #47039432 sell 3.00 Si-3.18 at 57026 done (based on order #85223736)
2018.03.14 10:01:40.790 Trades  '289': deal #47039433 sell 1.00 Si-3.18 at 57026 done (based on order #85223736)
2018.03.14 10:01:40.795 Trades  '289': deal #47039434 sell 1.00 Si-3.18 at 57025 done (based on order #85223736)

И главное, кто заплатит за это безобразие...

prostotrader
4863
prostotrader  
Aleksey Vyazmikin:

Открытие руками, тормоза подтверждаются

И главное, кто заплатит за это безобразие...

Напишите брокеру, приложив этот лог.

Мы не платим разработчику, поэтому и спрашивать с них сложно, да и в лицинзионном соглашении

написано (как и всё ПО) что никто ни за что не отвечает.