1本の足で1回だけ仕掛ける機能

足(バー)作成直後のみ仕掛ける方法

確定した足をエントリーの条件にしているEA等では、1本の足(バー)で1回しか仕掛けたくないことがありますよね。新しい足が作成されてエントリー条件が変更されるまで、永遠と仕掛けてしまいますので。そんな時に役に立つのが1本の足で1回だけ仕掛ける機能です。

この機能を使うことで、こうした無駄な仕掛けを排除することが可能になります。

というわけで、1本の足で1回だけ仕掛ける機能を紹介します。意外とシンプルです。

まずは、extern変数に以下を追加します。

extern string Note02_9          = "--- entry only once per 1 bar --------------------------------";
extern bool   UseEntryPer1Bar   = true;

UseEntryPer1Barをtrueにすれば、この機能が有効になります。続いて、グローバル変数に以下を追加します。

// 1本の足で1回だけ仕掛ける
int    gPrvBars       = 0;

前回の値動き時の足(バー)の本数を格納しておくための変数です。そして、OnInit()に以下を追加します。

  gPrvBars = Bars;

BarsはMQL4の定義済み変数と呼ばれるもので、現在のチャートの足の本数を返してくれます。さらに、OnTick()の冒頭に以下を追加します。

  int currentBars = Bars;

また、仕掛けの前に、以下を追加します。これがキモになります。

  // -----------------------------------------------------------------
  // 仕掛けフィルター(1本の足で1回だけ仕掛ける)
  // -----------------------------------------------------------------
  if(UseEntryPer1Bar){
    // 新しい足を生成した時ではない場合は、仕掛けない
    if(currentBars == gPrvBars){
      gPrvBars = currentBars;
      return;
    }
  }

現在の足の本数と前回の足の本数を比較し、一致していれば新しい足は作成されていないと判断できるため、これ以上処理が進まないようにreturnしています。新しい足が作成された瞬間のOnTick()では、currentBarsがgPrvBarsより1だけ大きな値になります。だから一致しなくなるんですね。

最後に、OnTick()内でreturnを記述している直前に以下を追加して完成です。現在の足の本数を前回の足の本数として格納しています。

  gPrvBars = currentBars;

サンプルEA

五月雨の説明でイメージが沸きづらいと思いますので、サンプルEAを載せておきます。そろそろサンプルEAが膨大な量になってきましたね…。

「1本の足で1回だけ仕掛ける機能」のSample.mq4
サイズ: 4.0KB
バージョン: 1.0
公開:2019年10月16日

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

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

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

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

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

アイキャッチ

>

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

CTR IMG