特定の時間の別の時間足のバーの取得

Eyecatch MetaTrader 4 プログラム中級編

 今回の記事は、「特定の時間の別の時間足のバーの取得」です。

 例えば、1時間足のチャートで10本前のバーの21日移動平均線と同じ時間の30分足のチャートの21日移動平均線を取得したいとします。

 30分足のチャート場合は10本前は10時間前ではなく5時間前なので、10時間前の20本前の21日移動平均線を取得しなければなりません。

 今回は簡単に計算で出せましたが色んな時間足を使う場合ややこしくなると思います。

 そこでもっと簡単に出来るようにiBarShift関数を使います。

iBarShift関数

int iBarShift( string symbol, int timeframe, datetime time, bool exact=false) 

 引数は通貨ペア、時間足、調べる時間をいれます。最後のexactはtrueなら調べる時間にバーが存在しなければ一番近いバーの数値を、falseなら-1が入ります。バーが存在する場合はどちらも変わりありません。

 この関数は指定した通貨ペア、時間足のチャートで指定した時間のバーが何処にあるかを出してくれます。

 例えば、戻り値が20なら20個前のバーになります。

 では、実際の使い方です。

datetime a_time;
int b_bars_shift;
double b_ma_rate;

a_time = iTime(NULL,60,10);

b_bars_shift = iBarShift(NULL,30,a_time,true);

b_ma_rate = iMA(NULL,30,21,0,MODE_SMA,PRICE_CLOSE,b_bars_shift);

 上記の説明をしていきます。

 まず、a_timeに1時間足のチャートの10本前のバーの時間を入れます。

 次にb_bars_shiftにiBarShift関数を使用してa_timeの時の30分足のチャートのバーの数値を入れます。

 最後にb_ma_Rateに30分足のチャートのb_bars_shift分前のバーの21日移動平均線を入れます。

 これで今回の内容は終了です。

 今回のiBarShift関数を使用すればマルチタイム型のインジケーターの作成も出来ます。

 興味がある方は応用して制作して見てください。

注意

内容には注意を払っていますが、保障は出来ません。
実際に運用する場合は、自己責任でお願いします。 

タイトルとURLをコピーしました