OnTradeTransaction - ページ 5

 
Anatoli Kazharski:
ええ、そんなもんです。ただ、まだそのようなテストはしていません。

試してみてください...

によって追加されました。

case TRADE_TRANSACTION_DEAL_ADD:
  if (trans.order != my_order_ticket)
  {
    if(trans.symbol==Symbol())
    {
      if(проверяем магик)
      {    
        //Сработал SL или TP
      }
    }
  }
break;
 
prostotrader:

この方法の何が問題なのでしょうか?

case TRADE_TRANSACTION_DEAL_ADD:
  if (trans.order != my_order_ticket)
  {
   //Сработал SL или TP
  }
break;

なぜなら、最後に判明したSLとTPの位置が取引価格と 一致しない場合があり、比較するものがなくなってしまうからです。

そして、自分のコードは公開しないのに、他人のコードは嬉しそうに見ている...。

これは、必ずしもうまくいくとは限りません。

int    G_LastTicket  = 0;   //Последний известный тикет
double G_LastSLlevel = 0.0; //Последний известный уровень SL
double G_LastTPlevel = 0.0; //Последний известный уровень TP
//——————————————————————————————————————————————————————————————————————————————
void  OnTradeTransaction (const MqlTradeTransaction &trans,   // структура торговой транзакции
                          const MqlTradeRequest     &request, // структура запроса
                          const MqlTradeResult      &result)  // структура ответа
{
  if(trans.type == TRADE_TRANSACTION_DEAL_ADD)
  {
    if(PositionsAny (G_Symbol))
    {
      G_LastSLlevel = GetSLlevel (G_Symbol);
      G_LastTPlevel = GetTPlevel (G_Symbol);
      Print ("SLlevel: " + G_LastSLlevel);
      Print ("TPlevel: " + G_LastTPlevel);
    }
    
    if(trans.deal != G_LastTicket)
    {
      if(trans.price == G_LastSLlevel)
        Print ("Сработал SL");
        
      if(trans.price == G_LastTPlevel)
        Print ("Сработал TP");
    }
  }
}
 
prostotrader:
試してみてください...
今度、必ず試してみます。ありがとうございます。今は他の業務で忙しいので。
 
prostotrader:

この方法の何が問題なのでしょうか?

my_order_ticketを 格納する必要があります。
 
fxsaber:
my_order_ticketを 保持する必要があります。

自分が何を言っているのか分かっているのだろうか?

my_order_ticket - この注文は、 あなたが持っている 場合、住む場所があります。

そして、あなたはそれを守る義務があります。

 
fxsaber:
my_order_ticketを 格納する必要があります。
それだけではありません
 
Anatoli Kazharski:
今度、試してみますね。ありがとうございます(苦笑)。今は他の業務で忙しいので。
コードを使って頑張ってください
 
Andrey Dik:
それだけではありません

はい、実際にはOnTradeTransactionが生成するものと比較しながら、実際の環境そのものを維持・保存することが提案されています。

これでは解決にならない。

 
fxsaber:

はい、実際にはOnTradeTransactionが生成するものと比較しながら、実際の環境そのものを維持・保存することが提案されています。

これでは解決にならない。

あなたがこの話題についていけてないだけです。:)

元のトピックスターターが書いています。

"OnTradeTransaction()でSL/TPがトリガーされたことを知るにはどうしたらいいですか?"

何を解決すべきなのか?

を条件に、位置そのもの以外は全く記憶せず、確認しないことも可能でした。

他の注文は操作しなかったのか

case TRADE_TRANSACTION_DEAL_ADD:
  if (!PositionSelect(Symbol())
  {
   //Сработал SL или TP

  }
break;
 
prostotrader:

あなたがこの話題についていけてないだけです。:)

元のトピックスターターが書いています。

むしろ不用意なのはあなたの方で、私はトピックスターターでは ありません。

また、このようなコードを表示する必要があります。

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

まあ、何が問題なのか - 誰がそれを必要とし、それを自分で仕上げ、それを好きではない - ジョバがある!そうなんですか?