OnTradeTransaction - страница 6

 
prostotrader:

Можно вовсе ничего не помнить

Согласен, что это будет работать (в случае, если полная заливка)
void OnTradeTransaction ( const MqlTradeTransaction &Trans, const MqlTradeRequest &Request, const MqlTradeResult &Result )
{
  if ((Trans.type == TRADE_TRANSACTION_DEAL_ADD) && (Trans.position > 0) && !PositionSelectByTicket(Trans.position))
    Print("Position #" + (string)Trans.position + " - triggered SL/TP.");
}

Но, вроде, разговор стал вестись несколько шире.
 
Andrey Dik:

Это Вы весьма невнимательны, я не топик-стартер.

Вы бы ещё такой код показали:

//——————————————————————————————————————————————————————————————————————————————
void  OnTradeTransaction (const MqlTradeTransaction &trans,   // структура торговой транзакции
                          const MqlTradeRequest     &request, // структура запроса
                          const MqlTradeResult      &result)  // структура ответа
{
  
}  

Ну а что такого - кому надо допишет сам, не нравится - есть джоба! Так что ли?

Я достаточно потратил времени, чтобы ответить на Ваш вопрос.

Если бы Ваш вопрос не был таким "абстрактным", то возможно ответ был бы более конкретным.

А именно:

1. ФОРТС или ФОРЕКС 

2. Какой тип Вы используете netting или hedgie

3. Используются ли другие ордера во время жизни позиции 

Поэтому каков вопрос - такой ответ 

 
fxsaber:
Согласен, что это будет работать (в случае, если полная заливка)
void OnTradeTransaction ( const MqlTradeTransaction &Trans, const MqlTradeRequest &Request, const MqlTradeResult &Result )
{
  if ((Trans.type == TRADE_TRANSACTION_DEAL_ADD) && (Trans.position > 0) && !PositionSelectByTicket(Trans.position))
    Print("Position #" + (string)Trans.position + " - triggered SL/TP.");
}

Но, вроде, разговор стал вестись несколько шире.

Что-то я не припомню, что для ST/TP можно установить объём.

Еесли нет (ща проверю), то позиция закроется ПОЛНОСТЬЮ или SL или TP 

 
prostotrader:

Что-то я не припомню, что ждя ST/TP можно установить объём, если нет,

то позиция закроется ПОЛНОСТЬЮ или SL или TP 

Ликвидности может просто не хватить.
 
fxsaber:
Ликвидности может просто не хватить.
Ага, и Брокер может выключить электричество :)....
 
prostotrader:
Ага, и Брокер может выключить электричество :)....
Берем малоликвидный инструмент и всего делов.
 
fxsaber:
Берем малоликвидный инструмент и всего делов.

Вот поэтому-то я и рекомендовал использовать отложенные ордера

Добавлено

Многое зависит от рынка и инструмента... 

 

Для точной идентификации по какому ордеру пришёл ответ в событие OnTradeTransaction все события кроме первого события по ордеру подписаны тикетом.

Первое событие подписано и тикетом и request_id. request_id пользователь получает сразу после отправки ордера от функции OrderSendAsinc. Таким образом происходит связывание конкретной итерации OrderSendAsinc и результатов получаемых в OnTradeTransaction. 

Тикета в OrderSendAsync может и не быть и скорее всего не будет если ордерами стрелять по цать штук в сек (retcode 10008 в лучшем случае и псё).

 
dmipec:

Тикета в OrderSendAsync может и не быть и скорее всего не будет если ордерами стрелять по цать штук в сек (retcode 10008 в лучшем случае и псё).

Ну, не цать, в всего лишь 30 в сек. на стандартном логине.

Если все правильно написано, то ордер(а) обязвтельно будет.

 
Vasiliy Sokolov:

Вместо того, что бы анализировать события, необходимо анализировать состояние торгового окружения, и только если торговое окружение изменилось принимать нужные решения. OnTransaction можно использовать только в очень ограниченных случаях, и как правило в своей работе лучше обходится вообще без него. Посмотрите на MetaTrader 4, в нем нет OnTransaction и все прекрасно обходятся без него.

Согласен. Но, к сожалению, в MT5, в отличие от MT4, торговое окружение может не соответствовать реальности. Например, при исполнении отложенного ордера на несколько миллисекунд его может нигде не быть. И здесь даже OnTradeTransaction не поможет.