EAを作成する場合に、たとえば、「エントリーした後、バーが〇〇本経過したら決済する」というロジックはよく使われます。
いろいろなやり方がありますが、Barsを使って、エントリー時のバーの数をプログラム上で記憶させることによって決済のタイミングを図る方法が一般的です。
しかし、このBarsの返す値が一体どんな値なのかを正確に知っていないと、大変なことになります。
この点、メタトレーダーのリファレンスによると、Barsの返す値は、
"Number of bars in the current chart."
とあり、「現在のチャートの中のバーの数」としか書いてありません。
この数が、状況によって具体的にどんな数になるのかをちょっと調べてみたところ、以下のことがわかりました。
たとえば、下の画像のように、
「チャートの最大バー数」を5000本と指定したとします。
この場合、新しいバーが誕生しても、その数が5000本を超えてしまうと、古いバーから順番にチャート内から削除されて、Barsの返す値は5000本で止まったままになってしまうため、それ以降は、EAが正常に稼働しなくなってしまいます。
なので、上の画像の「チャートの最大バー数」は、最大値にしておく必要があります。
最大値にする方法は、「9999999999…」と入力します。すると、
上の画像のように、自動的に最大値が設定されます。
しかし、「チャートの最大バー数」を最大値に設定した場合には、逆に気をつけなければいけないことがあります。
たとえば、チャート内のバーの実際の数が1000本くらいしかインストールされていなかったとします。この場合、チャートを古い方へスクロールすると、ご承知のように、チャート内のバーの実際の数も、1001、1002、1003、…と、どんどんインストールされて増えていきます。これをEA稼働中にやってしまうと、Brasの値もそれにつれてどんどん増えていくため、経過したバーの本数をEAが正常にカウントできなくなってしまいます。
そうならないようにするためには、あらかじめ最古のバーまでスクロールをすべて完了しておくのがよいでしょう。
結局、Barsを使ってバーの数を記憶しながら稼働するタイプのEAを使う場合に、あらかじめやっておくべきことは、
①「チャートの最大バーの数」を最大値にしておくこと
②「Fn」キー+「Home(←)」キーを押して、チャートの最古のバーまでスクロールを完了しておくこと
ということになります。
ご参考までに…。
コメントをお書きください