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

 
Carl Schreiber #:

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

Почему вы думаете не для всех?

Эта функция вызывается даже тогда, когда позиция закрывается по SL или TP.

Я надеюсь вы писали на mql4. Вот как можно было отследить закрытие ордера по SL? На каждом тике выбирать его по тикету и проверять его OrderCloseTime()… В m1l5 нет такой необходимости. Если позиция закрылась, отрабатывает функция  OnTradeTransaction() и в ней можно получить все свойства и принять решение в зависимости как позиция закрылась.

Я не проверял, но думаю, что пополнение счёта тоже вызовет  OnTradeTransaction()

 
Ну :(

Написано (https://www.mql5.com/ru/docs/runtime/event_fire#tradetransaction), что он вызывается, когда:

    обработка торгового запроса;
    изменение открытых ордеров;
    изменение истории ордеров;
    изменение истории сделок;
    изменение позиций.

Но когда я меняю SL и TP на открытой позиции (ручная покупка), функция НЕ вызывается. Поэтому нельзя с уверенностью сказать, что OnTradeTransaction() вызывается всегда, нельзя также предположить четкий порядок вызовов, и, кроме того, нельзя с уверенностью сказать, что свойство не установлено (=0) или установлено также =0.
Что я могу сделать с такой функцией?
Для безопасного управления деньгами я должен избегать этой функции.
Документация по MQL5: Программы MQL5 / События клиентского терминала
Документация по MQL5: Программы MQL5 / События клиентского терминала
  • www.mql5.com
События клиентского терминала - Программы MQL5 - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Carl Schreiber #:
Ну :(

Написано (https://www.mql5.com/ru/docs/runtime/event_fire#tradetransaction), что он вызывается, когда:

    обработка торгового запроса;
    изменение открытых ордеров;
    изменение истории ордеров;
    изменение истории сделок;
    изменение позиций.

Но когда я меняю SL и TP на открытой позиции (ручная покупка), функция НЕ вызывается. Поэтому нельзя с уверенностью сказать, что OnTradeTransaction() вызывается всегда, нельзя также предположить четкий порядок вызовов, и, кроме того, нельзя с уверенностью сказать, что свойство не установлено (=0) или установлено также =0.
Что я могу сделать с такой функцией?
Для безопасного управления деньгами я должен избегать этой функции.

Внимательней читайте документацию.

TRADE_TRANSACTION_POSITION

Изменение позиции, не связанное с исполнением сделки. Данный тип транзакции свидетельствует именно о том, что позиция была изменена на стороне торгового сервера. У позиции может быть изменен объем, цена открытия, а также уровни Stop Loss и Take Profit. Информация об изменениях передается в структуре MqlTradeTransaction через обработчик OnTradeTransaction. Изменение позиции (добавление, изменение или ликвидация) в результате совершения сделки не влечет за собой появление транзакции TRADE_TRANSACTION_POSITION.

/*********************TradeTransaction function**********************/
void OnTradeTransaction(const MqlTradeTransaction& trans,
                        const MqlTradeRequest& request,
                        const MqlTradeResult& result)
 {
  if(trans.type == TRADE_TRANSACTION_POSITION)
   {
    if(PositionSelectByTicket(trans.position))
     {
      Print(PositionGetDouble(POSITION_SL));
      Print(PositionGetDouble(POSITION_TP));
     }
   }
 }/*******************************************************************/
 
Denis Kirichenko #:

Ещё и последовательность транзакций не гарантирована ))

Последовательность транзакций и их наличие.

OrderSend возвращает неправильный тикет
OrderSend возвращает неправильный тикет
  • 2023.01.17
  • www.mql5.com
После прочтения свежей темы задумался о теоретической возможности там сказанного, когда OrderSend на разных терминалах одного счета получили один и...
Причина обращения: