OrderCommentでポジションがSLあるいはTPで決済されたかが分かる

アイキャッチ

直近の決済ポジションがSLだったらとかに有効

EAを作っていると、直近の決済ポジションがSLだったらこうしてほしいみたいなケースが時々あります。

決済ポジションの状態を参照するには、OrdersTotal関数ではなくOrdersHistoryTotal関数を使うわけですが、SLやTPで決済されたかどうかを正確に判定できる方法はないもんかとずっと悩んでおりました。

そんなある日、とあるEAを作っていた時にOrderComment関数を使うシーンがありまして、OrderCommentが吐き出すログを見てあることに気づきました。

SLに引っかかった時は[sl]、TPに引っかかった時は[tp]という文字列がコメントの最後に自動付与されることに。

目からウロコが落ちました。久々の感動です。

この性質を使えば、ポジションがSLあるいはTPで決済されたかどうかを識別できますよ!

例えば、こんなコードです。

StringFind関数は対象の文字列に指定の文字列が含まれているかどうかを判定するための関数です。

0以上であれば存在していることを表します。

なお、*****にはマジックナンバーのextern変数かinput変数が入ります。

スポンサードリンク

ブログランキングに参加中!

ポチっとクリック頂けると励みになります♪
(クリックしてもランキング一覧が表示されるだけですが、それでOKです)

にほんブログ村 為替ブログ FX システムトレード派へ

2件のコメント

  • たごさく

    お世話になっております。
    この場合は orderhistoryの全データをforで回して、
    その中にslの文字があった場合は、***のコードを実行するようになりますか?例えば、これは、直前にクローズしたロットのみならず、もっと昔にクローズしたロットもslでクローズしたものも
    含まれるのでしょうか?

    • りゅーき

      2つの質問はどちらもYESになります。
      直近の決済ポジションからループし、目当てのものを見つけたらループをbreakで終了させる使い方はよくやる手です。
      古いのを取りたくないなら、決済時刻でフィルタリングしてもいいかもしれません。

コメントを残す



four × 2 =