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

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日

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

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

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

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

CTR IMG