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

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

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

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

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

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

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

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

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

for(int i = OrdersHistoryTotal() - 1; i >= 0; i--){
  if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY) == false){
    break;
  }

  if(OrderSymbol() != Symbol() || OrderMagicNumber() != *****){
    continue;
  }

  // コメントに[sl]という文字列が存在していたら、SL決済と判断
  if(StringFind(OrderComment(), "[sl]") >= 0){
    // 何らかの処理
  }
}

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

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

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

MT4の無料プログラミング講座

メルマガ登録して、MT4のプログラミング講座を無料で受けちゃおう!

超豪華プレゼントも盛りだくさん♪

MT4プログラミングを習得すると、オリジナルEA運用、作成代行、商品販売等、複数の収入源を手に入れられるよ。副業に最適だね!

↓↓↓ 詳細はこちら ↓↓↓

アイキャッチ

>

エターナル・パートナーPRO ~MT4裁量トレード支援ツール~ 「MT4は裁量トレーダーに優しくない」そう思ったことありませんか?もっと快適にトレードするための強力な売買ツールが必要だと考え、開発したのが「エターナル・パートナーPRO」です。元々は自分自身のために開発したツールですので、手抜き無しのガチものです。既に200名近い方に手に取っていただき、喜びの声が続々と届いております。ぜひご覧ください!

CTR IMG