ブログタイトルを「FX自動売買システム開発部」から「autoFX」に変更しました!

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変数が入ります。

MQL4プログラミングの最新記事8件

>完全放ったらかしEA 「AutoEndlessCatchRange」

完全放ったらかしEA 「AutoEndlessCatchRange」

「本業が忙しい!」「でも資産運用したい!」そんなあなたに最適なEAです。兼業トレーダーの方はチャートを毎日みて分析してトレードする時間はなかなか確保できないものです。トレードは本EAに任せて、本業やプライベートの時間をもっと増やしませんか?元々は自分自身のために開発したEAですので、手抜き無しのガチものです。

CTR IMG