ブレイクイーブン関数

アイキャッチ

ブレイクイーブンで損失ゼロに

ある程度利益が出たら、損切りラインを仕掛け価格に移動して、損失ゼロにするブレイクイーブン機能を読者の方から作って欲しいと頼まれましたので早速作ってみました。

一般的なトレイリングストップ関数をベースに作ることができます。

最初に、オーダーの有無をチェックした上で、別EAの注文や待機注文は対象外なのでスキップするようにしています。

aMoveExecPipsだけ順行したら(利益が出たら)、仕掛け価格からaMoveStopPipsだけ順行した価格に損切り価格を変更します。aMoveStopPips=0にすれば、ブレイクイーブンになります。汎用性を持たせるために、パラメータ化しています。

ポイントは、何度もmodifyしないように、現在の損切り価格と変更しようとしている損切り価格が同じ場合はmodifyしないようにif文で制御することです。oStopLossとoPriceの比較の部分ですね。これを入れておかないと、「OrderModify error 1」が大量発生することになります。

OrderModify error 1
私の環境ではこれで問題なく動作するのですが、人によっては(FX業者によっては)、このコードでもOrderModify error 1が発生することがあるようです。NormalizeDoubleでMQL4内部の浮動小数点数の丸め誤差を排除しているはずなのに(詳しくはTrailingStop と OrderModify error 1 の微妙な関係。)、なぜ発生するのか理由がよく分かっていません。

サンプルEA

関数だけではイメージが沸きづらいと思いますので、サンプルEAを載せておきます。1本の足で1回だけエントリーする機能も混ざっていますが、ティックごとにエントリーするのを避けるためだけに入れていますので、無視してください。

スポンサードリンク

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

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

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

10件のコメント

  • きゃりー

    こんにちはー
    いつもブログで勉強させていただいています

    こちら、サンプルEAにブレイクイーブンの関数が見当たりませんん><
    お手数なのですが

    入れていただけると助かります

    • りゅーき

      分かりづらくて申し訳ありません。
      OrderHandle.mqhというインクルードファイルの中にbreakeven関数を記述しており、サンプルEAではそれを読む込む形式を取らせていただいております。
      外部ファイルに記載したくないということでしたら、お手数ですが、ご自身でインクルードファイルの記述を削除した上で、breakeven関数をサンプルEAに転記願います。

  • きゃりー

    ご丁寧に返信ありがとうございます!

    りゅーきさんは、プログラマーさんですか?

    毎度すばらしい関数ありがとうございます。

    • りゅーき

      ご理解いただき、誠にありがとうございます。
      私はシステムエンジニアです。本業が別にある兼業トレーダーというやつです。
      私の作成したプログラムが皆様のお役に立っているようで何よりです!
      これからも応援よろしくお願いします。

  • 新堂

    初めて拝見させていただきました。いろいろ参考にさせていただきます。私もシステムエンジニア兼業トレーダーです。
    どうぞよろしくお願いいたします。

    • りゅーき

      何かのお役に立てれば幸いです~。

  • たごさく

    教えてください。とても勉強になります。
    ブレークイーブンの機能は、トレーリングストップに盛り込むことはできるのでしょうか? あるいは、トレーリングストップ自体が
    ブレークイーブンを兼ねているのでしょうか?

    • りゅーき

      盛り込むというより併用することは可能です(併用する場合はカスタマイズがちょっと必要)。
      兼ねるような使い方も可能ですよ。
      結局のところ、どういう使い方をしたいか?次第です。

  • たごさく

    教えてください。階段型のトレーリングストップと
    このブレークイーブンを混ぜたものは作成可能でしょうか?

    • りゅーき

      可能ですよ。
      この組み合わせを欲しがる人が以前にも何人かいらっしゃいました。
      需要があるんですね。
      そのうち記事にしてみます。

コメントを残す



15 + 14 =