足(バー)作成直後のみ仕掛ける方法
確定した足をエントリーの条件にしているEA等では、1本の足(バー)で1回しか仕掛けたくないことがありますよね。新しい足が作成されてエントリー条件が変更されるまで、永遠と仕掛けてしまいますので。そんな時に役に立つのが1本の足で1回だけ仕掛ける機能です。
この機能を使うことで、こうした無駄な仕掛けを排除することが可能になります。
というわけで、1本の足で1回だけ仕掛ける機能を紹介します。意外とシンプルです。
まずは、extern変数に以下を追加します。
1 | extern string Note02_9 = "--- entry only once per 1 bar --------------------------------" ; |
2 | extern bool UseEntryPer1Bar = true ; |
UseEntryPer1Barをtrueにすれば、この機能が有効になります。続いて、グローバル変数に以下を追加します。
前回の値動き時の足(バー)の本数を格納しておくための変数です。そして、OnInit()に以下を追加します。
BarsはMQL4の定義済み変数と呼ばれるもので、現在のチャートの足の本数を返してくれます。さらに、OnTick()の冒頭に以下を追加します。
また、仕掛けの前に、以下を追加します。これがキモになります。
06 | if (currentBars == gPrvBars){ |
07 | gPrvBars = currentBars; |
現在の足の本数と前回の足の本数を比較し、一致していれば新しい足は作成されていないと判断できるため、これ以上処理が進まないようにreturnしています。新しい足が作成された瞬間のOnTick()では、currentBarsがgPrvBarsより1だけ大きな値になります。だから一致しなくなるんですね。
最後に、OnTick()内でreturnを記述している直前に以下を追加して完成です。現在の足の本数を前回の足の本数として格納しています。
サンプルEA
五月雨の説明でイメージが沸きづらいと思いますので、サンプルEAを載せておきます。そろそろサンプルEAが膨大な量になってきましたね…。
「1本の足で1回だけ仕掛ける機能」のSample.mq4
サイズ: 4.0KB
バージョン: 1.0
公開:2019年10月16日