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

アイキャッチ

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

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

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

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

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

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

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

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

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

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

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

サンプルEA

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

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

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

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

6件のコメント

  • 匿名

    こんばんは。
    いつもお世話になっています。

    ちょっと不思議に思ったんですが

    if(currentBars == gPrvBars){
    gPrvBars = currentBars;
    return;
    }

    ここの処理、もしcurrentBars と gPrvBars 値が一緒なら、
    次の行で gPrvBars にcurrentBars の値を入れる意味がなくないですか?

    お手数をおかけしますが、解説していただけると助かります。

    • りゅーき

      おっしゃる通り、上記コードに関しては「gPrvBars = currentBars;」の1行は不要ですね。

      ただ、エントリーフィルター等でOnTick()を強制的にreturnする時には「gPrvBars = currentBars;」を入れておかないと、前回の足の本数を正しく管理できないため、ミス防止の意味を込めて、私はいつもreturnの前には無条件で「gPrvBars = currentBars;」を入れています。

      その名残だと思っていただければ幸いです。

  • 匿名

    なるほど。そうだったんですね。
    解説ありがとうございました。

  • 匿名

    こんにちは
    OnInit()中で、gPrvBars = Bars;一回だけ実行されます。
    EA稼働の一回目だけ、if(currentBars == gPrvBars)が成立します。
    それ以後は、ずっと条件を成立しません。
    下記のようにすべきではないでしょうか?

    if(currentBars == gPrvBars){
    return;
    }else{
    gPrvBars = currentBars;
    }

    • りゅーき

      キモの部分を見て、そう思われたのだと推察いたします。
      実は、「最後に、OnTick()内でreturnを記述している直前に以下を追加して完成です。現在の足の本数を前回の足の本数として格納しています。」が
      }else{
      gPrvBars = currentBars;
      に相当します。ですので、匿名さんの方法でも良いと思います。
      むしろ、匿名さんの方法のほうが良いコードかもしれませんね。

  • 匿名

    ご回答ありがとうございます。
    勉強になりました。

コメントを残す



two + seventeen =