Ошибки, баги, вопросы - страница 3515

 
Carl Schreiber #:

Простите, но я не вижу причин, почему сервер, который отправляет данные на OTT, не отправляет полные данные!!!

Транзакция в таблицы live/history orders/deals/positions приходят не одновременно с приходом в советник. Более того, OnTradeTransaction внутри Терминала (скрытый, не советника) может иметь задержки обработки пришедшей информации. А советник, получивший то же сообщение, отработать без задержек. Верно и в обратную сторону.


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

 
fxsaber #:

Транзакция в таблицы live/history orders/deals/positions приходят не одновременно с приходом в советник. Более того, OnTradeTransaction внутри Терминала (скрытый, не советника) может иметь задержки обработки пришедшей информации. А советник, получивший то же сообщение, отработать без задержек. Верно и в обратную сторону.


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

And if everything gets random and mixed up because of this, what sense does OnTradeTransaction (OTT) make?
I know this is a thread race problem, but parallel processing does not explain the missing information: Request{} = Result{} = {Zero} ??

How is the EA supposed to find its order now? The MagicNumber is missing in MqlTradeTransaction. Symbol is missing in MqlTradeResult. ...
Very often two of the three structures OTT's are not filled in (=all zero).
TRhe MQ-rule of 1 second? For many EAs? When does the EA know that everything has arrived to go on if OTT is called again and again due to the other EAs?
Tell me a valid, programmable rule! I don't see one, and that in a financial software for professional use. It's a runaway.
Would it be so difficult(?) to at least(!) always(!) send MqlTradeRequest as the EA has filled it out(!)?

И если из-за этого все перемешивается, то какой смысл имеет OnTradeTransaction (OTT)?
Я знаю, что это проблема гонки потоков, но параллельная обработка не объясняет отсутствие информации: Request{} = Result{} = {Zero} ?

Как советник теперь должен найти свой ордер? MagicNumber отсутствует в MqlTradeTransaction. Символ отсутствует в MqlTradeResult. ...
Очень часто две из трех структур OTT не заполнены (=все нули).
TRhe MQ-правило 1 секунды? Для многих советников? Когда советник понимает, что все готово к продолжению работы, если OTT вызывается снова и снова из-за других советников?
Назовите мне действующее, программируемое правило! Я не вижу ни одного, и это в финансовом программном обеспечении для профессионального использования. Это бегство.
Неужели так сложно(?) хотя бы(!) всегда(!) отправлять MqlTradeRequest, когда советник его заполнил(!)?

 
Carl Schreiber #:

Как советник теперь должен найти свой ордер?

https://www.mql5.com/ru/forum/463563
Асинхронная обработка отсылки ордеров. - Вводите флаги. Проверьте на завершено нет
Асинхронная обработка отсылки ордеров. - Вводите флаги. Проверьте на завершено нет
  • 2024.03.05
  • Aleksandr Dziuba
  • www.mql5.com
Как проверяете к примеру что ордер на модификацию в работ. то можно заранее выставлять отложку далеко от текущей цены через OrderSend. Затем в OntradeTransaction проверял бы что транзакция закончилась. Некий bool - как признак что операция вообще принята
 
Carl Schreiber #:

Как советник теперь должен найти свой ордер? MagicNumber отсутствует в MqlTradeTransaction. Символ отсутствует в MqlTradeResult. ...
Очень часто две из трех структур OTT не заполнены (=все нули).

Неужели так сложно(?) хотя бы(!) всегда(!) отправлять MqlTradeRequest, когда советник его заполнил(!)?

Согласен. Заполнение  MqlTradeTransaction весьма запутанно(не продумано).

MqlTradeTransaction  работает.

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

 

Вот журнал OTT-вызовов лимитного ордера на покупку, который становится лимитным ордером и закрывается TP.

В 17:00 OTT с транзакцией X:PLACED[1], а затем X:STARTED[0]

В 19:57 срабатывает стоп => ТОЛЬКО ОДИН вызов ОТТ: X:PLACED[1]

В 12:20 срабатывает лимит (отложенный ордер становится открытой позицией OTT вызывается 3 раза: X:STARTED[0], X:FILLED[4], X:FILLED[4]

В 15:42 срабатывает ТП => 3 вызова ОТТ: X:STARTED[0], X:FILLED[4], X:FILLED[4]

Как ОТТ может заранее знать, сколько раз он будет вызываться дополнительно после первого звонка??

Это с 19:57 единственный вызов сработавшего отложенного ордера:
p#0(x) означает pos.ID=0 и «эту» позицию нельзя выбрать (x), => ОК, правильно
o#2(x) означает order.ID=2 и этот порядок можно выбрать (x) => ??????
должен быть(!!) либо открытый стоп-лимитный ордер, либо лимитный ордер!!

Вот мой журнал;

Here is the log of OTT calls of a buy stop limit order that becomes a limit order and is closed by TP.

At 17:00 OTT with trans X:PLACED[1] and then X:STARTED[0]

At 19:57 the stop is triggered => ONLY ONE call of OTT: X:PLACED[1]

At 12:20 the limit is triggered (pend. order becomes an open position OTT is called 3 times: X:STARTED[0], X:FILLED[4], X:FILLED[4]

At 15:42 TP is triggered => 3 calls of OTT: X:STARTED[0], X:FILLED[4], X:FILLED[4]

How can OTT in advance know how many times it will be called additionally after the first call ??

This from 19:57 the only call of the triggered pending order:
  p#0(x) means pos.ID=0 and "this" position is not selectable (x), => OK, correct   
  o#2(x) means order.ID=2 and this order is selectable (x)  => ??????
              there must be(!!) either an open stop limit order or a limit order !!

  m>0< means no mag number available

Here my log;

2024.03.27 18:15:50.703 EURUSD,Daily: history begins from 2021.01.04 00:00
2024.03.27 18:15:50.769 EURUSD : real ticks begin from 2011.12.19 00:00:00

02 17:00:00   buy stop limit 0.05 EURUSD at 1.13122 (1.12800) sl: 1.12586 tp: 1.13300 (1.13048 / 1.13048)

02 17:00:00   =====================================
02 17:00:00   ETE_Trade.mqh[1858] Err[4003] ERR_INVALID_PARAMETER nOTT:1  nPos:0  nOrd:0 at 17:00:00
02 17:00:00      p#0(x) o#2(x) d#0 m>0< pB:0  POS:0 tP:0 arr:0 lst:0+0  ORD:1 tO:0 arr:0 lst:1+0
02 17:00:00      REQ A:QUEST_ACTIONS::0[0]  O:BUY[0]   RES S:NOT_SET[0]   o#:0 d#:0
02 17:00:00      TRA T:ORDER_ADD[0]  X:BUY_STOP_LIMIT[6]  D:TYPE_BUY[0]  X:PLACED[1]   ping:0
02 17:00:00   =====================================

02 17:00:00   =====================================
02 17:00:00   ETE_Trade.mqh[1858] nOTT:2  nPos:0  nOrd:0 at 17:00:00
02 17:00:00      p#0(x) o#2(x) d#0 m>1006< pB:0  POS:0 tP:0 arr:0 lst:0+0  ORD:1 tO:1 arr:1 lst:1+0
02 17:00:00      REQ A:PENDING[5]  O:BUY_STOP_LIMIT[6]   RES S:DONE[10009]   o#:2 d#:0
02 17:00:00      TRA T:REQUEST[10]  X:BUY[0]  D:TYPE_BUY[0]  X:STARTED[0]   ping:0
02 17:00:00   =====================================
02 17:00:00   

02 19:57:27   order [#2 buy stop limit 0.05 EURUSD at 1.13122 (1.12800)] triggered
02 19:57:27   =====================================
02 19:57:27   ETE_Trade.mqh[1858] Err[4003] ERR_INVALID_PARAMETER nOTT:3  nPos:0  nOrd:0 at 19:57:27
02 19:57:27      p#0(x) o#2(x) d#0 m>0< pB:0  POS:0 tP:0 arr:0 lst:0+0  ORD:1 tO:1 arr:1 lst:0+0
02 19:57:27      REQ A:QUEST_ACTIONS::0[0]  O:BUY[0]   RES S:NOT_SET[0]   o#:0 d#:0
02 19:57:27      TRA T:ORDER_UPDATE[1]  X:BUY_LIMIT[2]  D:TYPE_BUY[0]  X:PLACED[1]   ping:0
02 19:57:27   =====================================

03 12:20:31   order [#2 buy limit 0.05 EURUSD at 1.12800] triggered
03 12:20:31   deal #2 buy 0.05 EURUSD at 1.12799 done (based on order #2)
03 12:20:31   deal performed [#2 buy 0.05 EURUSD at 1.12799]
03 12:20:31   order performed buy 0.05 at 1.12799 [#2 buy limit 0.05 EURUSD at 1.12800]

03 12:20:31   =====================================
03 12:20:31   ETE_Trade.mqh[1858] Err[4003] ERR_INVALID_PARAMETER nOTT:4  nPos:0  nOrd:0 at 12:20:31
03 12:20:31      p#2(o) o#2(x) d#2 m>1006< pB:0  POS:1 tP:0 arr:0 lst:0+0  ORD:0 tO:1 arr:1 lst:0+0
03 12:20:31      REQ A:QUEST_ACTIONS::0[0]  O:BUY[0]   RES S:NOT_SET[0]   o#:0 d#:0
03 12:20:31      TRA T:DEAL_ADD[6]  X:BUY[0]  D:TYPE_BUY[0]  X:STARTED[0]   ping:0
03 12:20:31   =====================================
03 12:20:31   

03 12:20:32   
03 12:20:32   =====================================
03 12:20:32   ETE_Trade.mqh[1858] Err[4003] ERR_INVALID_PARAMETER nOTT:5  nPos:0  nOrd:0 at 12:20:32
03 12:20:32      p#2(o) o#2(x) d#0 m>1006< pB:0  POS:1 tP:1 arr:1 lst:0+0  ORD:0 tO:0 arr:1 lst:0+0
03 12:20:32      REQ A:QUEST_ACTIONS::0[0]  O:BUY[0]   RES S:NOT_SET[0]   o#:0 d#:0
03 12:20:32      TRA T:ORDER_DELETE[2]  X:BUY_LIMIT[2]  D:TYPE_BUY[0]  X:FILLED[4]   ping:0
03 12:20:32   =====================================
03 12:20:32   

03 12:20:32   =====================================
03 12:20:32   ETE_Trade.mqh[1858] Err[4003] ERR_INVALID_PARAMETER nOTT:6  nPos:0  nOrd:0 at 12:20:32
03 12:20:32      p#2(o) o#2(x) d#0 m>1006< pB:0  POS:1 tP:1 arr:1 lst:0+0  ORD:0 tO:0 arr:1 lst:0+0
03 12:20:32      REQ A:QUEST_ACTIONS::0[0]  O:BUY[0]   RES S:NOT_SET[0]   o#:0 d#:0
03 12:20:32      TRA T:HISTORY_ADD[3]  X:BUY_LIMIT[2]  D:TYPE_BUY[0]  X:FILLED[4]   ping:0
03 12:20:32   =====================================

03 15:42:43   take profit triggered #2 buy 0.05 EURUSD 1.12799 sl: 1.12586 tp: 1.13300 [#3 sell 0.05 EURUSD at 1.13300]
03 15:42:43   deal #3 sell 0.05 EURUSD at 1.13310 done (based on order #3)
03 15:42:43   deal performed [#3 sell 0.05 EURUSD at 1.13310]
03 15:42:43   order performed sell 0.05 at 1.13310 [#3 sell 0.05 EURUSD at 1.13300]

03 15:42:43   =====================================
03 15:42:43   ETE_Trade.mqh[1858] Err[4003] ERR_INVALID_PARAMETER nOTT:7  nPos:0  nOrd:0 at 15:42:43
03 15:42:43      p#2(x) o#3(x) d#3 m>0< pB:0  POS:0 tP:1 arr:1 lst:0+0  ORD:0 tO:0 arr:1 lst:0+0
03 15:42:43      REQ A:QUEST_ACTIONS::0[0]  O:BUY[0]   RES S:NOT_SET[0]   o#:0 d#:0
03 15:42:43      TRA T:DEAL_ADD[6]  X:BUY[0]  D:TYPE_SELL[1]  X:STARTED[0]   ping:0
03 15:42:43   =====================================
03 15:42:43   

03 15:42:43   =====================================
03 15:42:43   ETE_Trade.mqh[1858] Err[4003] ERR_INVALID_PARAMETER nOTT:8  nPos:0  nOrd:0 at 15:42:43
03 15:42:43      p#2(x) o#3(x) d#0 m>0< pB:0  POS:0 tP:0 arr:1 lst:0+0  ORD:0 tO:0 arr:2 lst:0+0
03 15:42:43      REQ A:QUEST_ACTIONS::0[0]  O:BUY[0]   RES S:NOT_SET[0]   o#:0 d#:0
03 15:42:43      TRA T:ORDER_DELETE[2]  X:SELL[1]  D:TYPE_BUY[0]  X:FILLED[4]   ping:0
03 15:42:43   =====================================
03 15:42:43   

03 15:42:43   =====================================
03 15:42:43   ETE_Trade.mqh[1858] Err[4003] ERR_INVALID_PARAMETER nOTT:9  nPos:0  nOrd:0 at 15:42:43
03 15:42:43      p#2(x) o#3(x) d#0 m>0< pB:0  POS:0 tP:0 arr:1 lst:0+0  ORD:0 tO:0 arr:2 lst:0+0
03 15:42:43      REQ A:QUEST_ACTIONS::0[0]  O:BUY[0]   RES S:NOT_SET[0]   o#:0 d#:0
03 15:42:43      TRA T:HISTORY_ADD[3]  X:SELL[1]  D:TYPE_BUY[0]  X:FILLED[4]   ping:0
03 15:42:43   =====================================
03 15:42:43   
04 14:00:00   
04 14:00:00   *********** ETE-EA ### END OF EA ### Kill-Order given at/after: 2022.02.04 14:30:00    ************************

How can OTT be used to get the information about what has happened to which orders and/or positions of an EA, if other EAs with other symbols even the same symbol are trading as well ??

BTW: Here: "nOTT:9" I counted the numbers of calls of OTT:  9 times, for 1) sending a buy stop limit, being noticed for the 2 triggers 2+3) and the exit at TP 4) which makes only 4 calls that would need!

Как можно использовать OTT для получения информации о том, что произошло с ордерами и/или позициями советника, если другие советники с другими символами, даже с тем же самым символом, также торгуют?

BTW: Здесь: "nOTT:9" Я подсчитал количество вызовов OTT: 9 раз, для 1) отправки лимита buy stop, будучи замеченным для 2 триггеров 2+3) и выхода на TP 4), что составляет всего 4 вызова, которые должны были бы!

 
Carl Schreiber #:

Вот журнал OTT-вызовов лимитного ордера на покупку, который становится лимитным ордером и закрывается TP.

Мне сложно представить человека, который будет читать дальше этого предложения.

Нужно менять форму подачи сообщений, иначе просто потеряете свое время.

 
fxsaber #:

Мне сложно представить человека, который будет читать дальше этого предложения.

Нужно менять форму подачи сообщений, иначе просто потеряете свое время.

Как еще я могу показать проблематичный способ, с помощью которого функция OnTradeTransaction предстает перед нами, трейдерами? Слишком много звонков с отсутствующей информацией!

How else can I show the problematic way in which the OnTradeTransaction function presents itself to us traders? Too many calls with missing information!

 

На странице пользователя в разделе Все сообщения из превью сообщений, похоже, фильтруются некоторые символы (в частности, "<"), что портит сообщение.

Полное сообщение в топике

Его превью на странице Все сообщения


 
Позиция закрылась по стоплосу, притом что цена не доходила до стопа, это вообще как возможно?
Файлы:
 
Вячеслав #:
Позиция закрылась по стоплосу, притом что цена не доходила до стопа, это вообще как возможно?

Расширение спреда на ролловере. Посмотрите Ask-цену в тиковой истории.


Некоторые специально отключают стопы на время ролловера. Посмотрите историю спреда.