Volume[0]を使うだけで良かった良くなかった
※2019/11/6追記
コメントで指摘いただいた件、2019/11/5 16時~2019/11/6 3時(サーバ時間)の約半日かけてTradeviewのILCデモサーバーでEURUSDの1分足を調査したところ、足切替り619回のうち、なんと162回(26%!!)もVolume[0]が1からではなく2以上でスタートしていました。中には30からスタートなんていう時もありましたし、足の切り替わりでもないのにVolumeが減るということも1回だけありました(おいおい)。足切り替わりの4回に1回は失敗するようでは、とても実用に耐えられないレベルですね。結局のところ、改善版の記事がベストということになってしまいました。残念です。朝倉さん、貴重なご指摘ありがとうございました。
1本の足で1回だけ仕掛ける機能や1本の足で1回だけ仕掛ける機能 改善版で取り上げてきた1本の足で1回だけ仕掛ける機能シリーズ。
ついに最もシンプルなコードを発見しました。ソースはMT4に標準で付属しているMoving Average.mq4です。
1本の足で1回だけ仕掛けるには、現在のティックがちょうど足生成時(確定時あるいは切替り時と言い換えても可)かどうかを判定することがポイントになります。
過去の方法では何かしらごにょごにょしないといけなかったのですが、実はMT4に存在するVolume[0]を使えば良かったのです。
そうすれば1行で済みます。具体的にはこんな感じです。
// 足生成時ではないので処理を中断 if(Volume[0] > 1) return; // この後ろにエントリーに関するロジックを記述
Volume[]はその足におけるティックの数を返してくれます。
Volume[0]の場合、現在の足のティック数ということですね。
それが1ということは足ができたばかりということです。
足生成時のみ何かしたい、それ以外の時のみ何かしたいといったときに有効です。
Moving Average.mq4はサンプルEAとしては品質がよろしくありませんが、そんなものでも学びがあるんですね。
時々は他人の書いたプログラムを見てみように書いた通り、他人様のコードに触れることは良い勉強になります。