MQL4はC言語に近いので、プログラムをやったことがある人が参入すると
FX固有の問題にぶつかります。その1つとしては時間足、あるいはローソク足という概念を無視してロジックを作成すると時間足が終わるまでエントリーを繰り返してしまうということです。
始値でのみ
始値でのみロジックの計算をしてエントリーする、その後次のローソク足までは停止させると軽くなり、同じローソク足の時間内に計算を繰り返し、かつ注文を大量に出すことはなくなります。
Bars
int Bars
Barsは現在チャートのバーの総数なので時間足が進むとカウントアップします
同じ時間足内、ローソク足では総数は変わらないということを利用します。
Barsを以下のように使うと簡単に解決できます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
int nowbar; int OnInit() { ... nowbar = Bars; ... } void OnTick() { if(nowbar == Bars){ return; } else{ nowbar = Bars; } ... } |
Volume[ ]関数
Volume[ ]関数を使う方法があります
これは現在のBarのtick出来高を格納されるのでバーの最初では1になるということを利用しています。
例えば、これはMT4にあるMoving Average.mq4のある箇所ですが、Volume[ ]が例として使われています。
1 2 3 4 5 6 7 8 |
void CheckForOpen() { double ma; int res; //--- go trading only for first tiks of new bar if(Volume[0] > 1) return; ... } |
ただ、これは1以上の値が返ってくる可能性があるということで、あまりお勧めできないわけで
Barsを使うのが穏当です。