MT5 インディケータの作り方 その13

indicator

前回の続きですね。

ArrayMaximum、ArrayMinimum関数

ArrayMaximum関数は期間内の配列の中の最高値のインデックスを返します。

int ArrayMaximum(high,i,AroonPeriod)
int (ArrayMinimum(low,i,AroonPeriod)

第一パラメータは検索される配列、第二パラメータは開始位置、第三パラメータは検索範される要素数になります。
ArrayMaximumは配列highをhigh[i]からhigh「AroonPeriod+i-1]までの間での最高値のインデックスを返すといおことです。
ここでもわかりやすくするために、iを0AroonPeriodを14としてみます。するとArrayMaximum(high,0,14)になります。
forループでiを一つ進めてみると、今度はhigh[1]からhigh[14]となります。以降iがforループの終わりに達するまで順に
計算していくのですが、どこまで計算すればいいか?これもrates_totalを100などどしてイメージします。

rates_totalが100だとしたら配列の最後はhigh[99]です。したがって、high[86]からhigh[99]まで計算します。
high[87]から先は、rates_totalの範囲をこえてしまいますので、forループもhigh[86]まででとまるようにしなければ
なりません。つまりi<87となるようにしなければなりません。rate_totalが100、AroonPeriodを14としているので、
rates_total-AroonPeriod = 86です。したがってrates_total – AroonPeriod + 1までforループを回す必要があります。
これがlimitの最初の値になります。

if(prev_calculated==0)
limit=rates_total-AroonPeriod+1;

prev_calculatedが0でないときは、最新バーだけ計算すればいいのですからprev_calculatedが0でないときは

limit=rates_total-prev_calculated+1;

になります。新しいバーができた瞬間だけhigh[0],high[1]の2つ、それ以外はひgh「0」のみの計算がされることになります。

OnDeinitは関数するハンドルもないので、このインディケータでは必要ありません。それではコンパイルでエラーにならないことを確認して
チャートに適用してみてくださいね。

最後に全体のコードです。

ブログランキング・にほんブログ村へ

コメント

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