// select the closed order first and then do this:double sl_diff = MathAbs(OrderClosePrice() - OrderTakeProfit()),
tp_diff = MathAbs(OrderClosePrice() - OrderStopLoss());
if ( sl_diff > tp_diff )
Print("order closed at tp");
elsePrint("order closed at sl");
// I assume here that an equality of sl_diff and tp_diff is impossible...?
それは可能です。EAがクローズした注文に関する情報を持続させる - 「範囲内」にあるがEAがクローズしていない注文をOrder Historyプールで継続的にチェックする - 利益の兆候をチェックして、ブローカーがSLまたはTPを起動したかどうかを判断する 以下のことを行うロジックを構築する必要があるでしょう。 CB
この方法は、ほとんどのMT4ブローカープラットフォームで問題なく使用できますが、私はそれがMBTF MT4ブローカーデモプラットフォームで動作しないことがわかった。MBTF MT4プラットフォームは、クライアント(手動またはEA)によるクローズド・オーダーにコメントを記録しません。このようなブローカープラットフォームでは、1つの注文がサーバーまたはクライアントのどちらによって閉じられたかを判断することは不可能です。
この問題を解決するために、MetaQuotesはOrderCloseReason()のようなAPIを追加する必要があると思います。
うーん...。何か見落としているのかもしれませんが、下記だけでは不十分なケースはありますか?
しかし、ここであなたはそれを行う方法を解決することができます。
[...] やはり、MetaQuotesはこの問題を解決するためにOrderCloseReason()のようなAPIを追加するべきだと思うのです。
MT5がリリースされた今、それは実現しそうにありません。せいぜいMT4のバグフィックスが出るくらいでしょうか...。新機能はないだろうけど...。
スレッド全体を読んでください。この方法は、注文が手動で閉じられたり、エキスパートによって閉じられた(tp/slによってではなく)状況を考慮していない、それゆえ、それは 限定.それを行う方法は、CBが提案したものを介して行われます...ここでショートカットはありません。
あなたは正しいスレッド全体を読んでいないが、それはEAまたは手動で閉じている場合、ユーザーはこれを知るための方法を持っている唯一の問題は、それがTPまたはSTによって閉鎖されているかどうかを見つけることです。
ここで、あなたのコードが必要になります。
スレッド全体を読んだわけではありませんが、EAによってクローズされた場合、または手動でユーザーがこれを知る方法を持っている場合、唯一の問題は、それがTPまたはSTによってクローズされているかどうかを見つけることです
これは、あなたのコードで来るところです。