OnTradeTransaction(): нет Magic number, нет комментария, и & either-or символы?

 

Привет,

Я что-то делаю не так?

    Чтобы узнать, к какому типу относятся вызовы OnTradeTransaction(), я хотел бы использовать магическое число. Единственный (почему единственный?) тип, который предоставляет магическое число - это request - НО в OnTradeTransaction() request.magic всегда 0?
    Кроме того, даже комментарий пустой?
    Кроме того, либо в request, либо в trans символ заполнен - это особенность или лажа => SYM = StringLen(request.symbol)>1 ? request.symbol : trans.symbol?
    Когда я вручную открываю и/или закрываю позицию вызывается OnTradeTransaction(), но когда я вручную меняю SL и/или TP открытой позиции никакой реакции нет?

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


2022.12.29 10:06:59.427 Test OnTradeTransaction 02 (CADCHF,H1)  160  cadchf 152  penSTP Buy  Mag: 152  BUY Stop no SL & TP
2022.12.29 10:06:59.464 Test OnTradeTransaction 02 (CADCHF,H1)  265  CADCHF mag: >0<  cmmt: ><  New Event trans.typ: TRADE_TRANSACTION_ORDER_UPDATE  deal_typ: DEAL_TYPE_BUY  order_state: ORDER_STATE_PLACED  order_typ: ORDER_TYPE_BUY_STOP  order: 50311719794  pos: 0
2022.12.29 10:07:20.765 Test OnTradeTransaction 02 (CADCHF,H1)  265  CADCHF mag: >0<  cmmt: ><  New Event trans.typ: TRADE_TRANSACTION_ORDER_UPDATE  deal_typ: DEAL_TYPE_BUY  order_state: ORDER_STATE_PLACED  order_typ: ORDER_TYPE_BUY_STOP  order: 50311719794  pos: 0
2022.12.29 10:07:20.766 Test OnTradeTransaction 02 (CADCHF,H1)  265  CADCHF mag: >0<  cmmt: ><  New Event trans.typ: TRADE_TRANSACTION_ORDER_DELETE  deal_typ: DEAL_TYPE_BUY  order_state: ORDER_STATE_FILLED  order_typ: ORDER_TYPE_BUY_STOP  order: 50311719794  pos: 50311719794
2022.12.29 10:07:20.766 Test OnTradeTransaction 02 (CADCHF,H1)  265  CADCHF mag: >0<  cmmt: ><  New Event trans.typ: TRADE_TRANSACTION_HISTORY_ADD  deal_typ: DEAL_TYPE_BUY  order_state: ORDER_STATE_FILLED  order_typ: ORDER_TYPE_BUY_STOP  order: 50311719794  pos: 50311719794

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

ТОЛЬКО ДЛЯ ДЕМО-СЧЕТОВ!!!



Совершение сделок - Торговые операции - Справка по MetaTrader 5
  • www.metatrader5.com
Торговая деятельность в платформе связана с формированием и отсылкой рыночных и отложенных ордеров для исполнения брокером, а также с управлением...
Файлы:
 
Carl Schreiber:

Привет,

Я что-то делаю не так?

    Чтобы узнать, к какому типу относятся вызовы OnTradeTransaction(), я хотел бы использовать магическое число. Единственный (почему единственный?) тип, который предоставляет магическое число - это request - НО в OnTradeTransaction() request.magic всегда 0?
    Кроме того, даже комментарий пустой?
    Кроме того, либо в request, либо в trans символ заполнен - это особенность или лажа => SYM = StringLen(request.symbol)>1 ? request.symbol : trans.symbol?
    Когда я вручную открываю и/или закрываю позицию вызывается OnTradeTransaction(), но когда я вручную меняю SL и/или TP открытой позиции никакой реакции нет?

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


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

ТОЛЬКО ДЛЯ ДЕМО-СЧЕТОВ!!!

Два варианта получения магика

//--- Из сделки
  if(trans.type == TRADE_TRANSACTION_DEAL_ADD)
   {
    if(HistoryDealSelect(trans.deal))
      Print(HistoryDealGetInteger(trans.deal, DEAL_MAGIC));
   }
//---  Из ордера
  if(trans.type == TRADE_TRANSACTION_ORDER_ADD)
   {
    if(HistoryOrderSelect(trans.order))
      Print(HistoryOrderGetInteger(trans.order, ORDER_MAGIC));
   }
 
Carl Schreiber:

...Чтобы узнать, к какому типу относятся вызовы OnTradeTransaction(), я хотел бы использовать магическое число. Единственный (почему единственный?) тип, который предоставляет магическое число - это request - НО в OnTradeTransaction() request.magic всегда 0?

Из Документации:

request

[in]  Переменная типа MqlTradeRequest с описанием торгового запроса, породившего транзакцию. Содержит значения только для транзакции типа TRADE_TRANSACTION_REQUEST.

void OnTradeTransaction(const MqlTradeTransaction& trans,
                        const MqlTradeRequest& request,
                        const MqlTradeResult& result)
  {
   ENUM_TRADE_TRANSACTION_TYPE type=trans.type;
   if(type==TRADE_TRANSACTION_REQUEST)
     {
      // Dahin! Dahin möcht ich mit dir, o mein Geliebter, ziehn...
     }


Попробовал  Test OnTradeTransaction 02.mq5. Часто не срабатывает OrderSendAsync():

CS      0       13:03:46.609    Test_OnTradeTransaction_02__1 (EURUSD,H1)       79  eurusd 70  Market Buy  Mag: 70
CS      0       13:03:46.609    Test_OnTradeTransaction_02__1 (EURUSD,H1)       81  OrderSend error 4756 res.order 10021

Котировок нету. Может из-за праздников... наверное по-хорошему нужно цены обновлять принудительно перед отправкой запроса...

Посмотрел сюда:

Hinweis

Wenn die Funktion wird verwendet, um Informationen über den letzten Tick zu bekommen, ist es besser SymbolInfoTick() zu verwenden. Es ist möglich, dass seit Verbinden des Terminals an das Handelskonto keine Preise des Symbols empfangen worden. In einem solchen Fall wird der Wert nicht bestimmt.

In den meisten Fällen reicht es aus, SymbolInfoTick() zu verwenden. Mit dieser Funktion können Sie durch einen einzelnen Anruf Werte von Ask, Bid, Last, Volume und Zeit der des letzten Ticks zu bekommen.

Die Funktion bietet Informationen über die Höhe der erhobenen Marge, je nach Art und Richtung des Auftrags SymbolInfoMarginRate().

 
Alexey Viktorov #:

Два варианта получения магика

Почему вы должны проходить эту лишнюю милю? Я надеялся/ожидал, что смогу избежать именно такого объезда, поскольку все будет доступно.

 
Denis Kirichenko # :

Из Документации :

request

[in]  Переменная типа  MqlTradeRequest  с описанием торгового запроса, породившего транзакцию. Содержит значения только для транзакции типа  TRADE_TRANSACTION_REQUEST .

Если вы видите здесь (https://www.mql5.com/ru/forum/438778#comment_44041215), то в запросе нет ни символа, ни комментария, ни магического числа . Последние два нужны не серверу, а нам, трейдерам.

:(

OnTradeTransaction(): no Magic number, no comment, and & either-or symbols?
OnTradeTransaction(): no Magic number, no comment, and & either-or symbols?
  • 2022.12.29
  • www.mql5.com
Hi, am I doing something wrong? To know where the calls of OnTradeTransaction() belong to I would like to use the magic number. The only (why only...
 
Carl Schreiber #:

Почему вы должны проходить эту лишнюю милю? Я надеялся/ожидал, что смогу избежать именно такого объезда, поскольку все будет доступно.

Это всего 1/4 мили. Если вам нужно знать направление сделки IN или OUT

    if(trans.symbol == _Symbol && HistoryDealSelect(trans.deal) && HistoryDealGetInteger(trans.deal, DEAL_ENTRY) == DEAL_ENTRY_IN)

то без выбора сделки вам не обойтись.

Или вам надо определить как закрылась позиция, по стопу, по тейку или советником, или ещё как-то… Другого варианта я не знаю, только через сделку.

 
Denis Kirichenko #:

Из Документации:


Попробовал  Test OnTradeTransaction 02.mq5. Часто не срабатывает OrderSendAsync():

Котировок нету. Может из-за праздников... наверное по-хорошему нужно цены обновлять принудительно перед отправкой запроса...

Посмотрел сюда:

На мой взгляд ненадёжный и запутанный вариант.

Допустим пришёл тип TRADE_TRANSACTION_REQUEST увидели магик… Где его хранить? В локальной переменной? Так она при следующем типе транзакции обнулится. В переменной глобального уровня или статической переменной? А когда её следует обнулить? Ведь иметь в переменной устаревшее значение, на мой взгляд опасно. Описывать варианты возможных проблем не хочется, да и в двух словах не получится. 

 
Alexey Viktorov #:

Это всего 1/4 мили. Если вам нужно знать направление сделки IN или OUT

то без выбора сделки вам не обойтись.

Или вам надо определить как закрылась позиция, по стопу, по тейку или советником, или ещё как-то… Другого варианта я не знаю, только через сделку.

Но это фактически означает, что функция, которая описана с таким трудом (https://www.mql5.com/ru/docs/event_handlers/ontradetransaction), на самом деле бесполезна - едва ли ее можно использовать.

:(

Из-за мелочей!!!
Документация по MQL5: Обработка событий / OnTradeTransaction
Документация по MQL5: Обработка событий / OnTradeTransaction
  • www.mql5.com
OnTradeTransaction - Обработка событий - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Carl Schreiber #:

Но это фактически означает, что функция, которая описана с таким трудом (https://www.mql5.com/ru/docs/event_handlers/ontradetransaction), на самом деле бесполезна - едва ли ее можно использовать.

:(

Из-за мелочей!!!

Даже не знаю как вам ответить, чтобы не обидеть.

Если я не умею играть на скрипке, то она мне бесполезна. А без функции OnTradeTransaction() я не могу обойтись. Мне от неё польза очень большая.

 
Alexey Viktorov #:

Даже не знаю как вам ответить, чтобы не обидеть.

Если я не умею играть на скрипке, то она мне бесполезна. А без функции OnTradeTransaction() я не могу обойтись. Мне от неё польза очень большая.

Я действительно умею (мог бы) играть на скрипке, и я не обижен, только разочарован и удивлен, что существующая структура предлагается так небрежно и неполно.
Я не думал, что такое возможно.
 
Alexey Viktorov #:

Это всего 1/4 мили. Если вам нужно знать направление сделки IN или OUT

то без выбора сделки вам не обойтись.

Или вам надо определить как закрылась позиция, по стопу, по тейку или советником, или ещё как-то… Другого варианта я не знаю, только через сделку.

Но и сделка не является хорошим решением! Вот пример вручную открытой позиции на продажу: в качестве сделки - покупка????