「お昼の放送」の思い出

メタエディターのプログラミングについて教えて下さい。
メタエディター4でボリンジャーバンドの%Bを表示させたいため、
以下のようなプログラミングをしたのですが、うまくいきません。
わかる方、教えていただけないでしょうか?

#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 DodgerBlue

// 指標バッファ
double BufWidth[];

// 外部パラメータ
extern int BandsPeriod = 20;
extern int BandsDeviation = 2;

// 初期化関数
int init()
{
// 指標バッファの割り当て
SetIndexBuffer(0, BufWidth);

// 指標ラベルの設定
string label = "BBWidth("+BandsPeriod+")";
IndicatorShortName(label);
SetIndexLabel(0, label);

return(0);
}

// スタート関数
int start()
{
int limit = Bars-IndicatorCounted();

for(int i=limit-1; i>=0; i--)
{
double BufUpper = iBands(NULL, 0, BandsPeriod, BandsDeviation, 0, PRICE_CLOSE, MODE_UPPER, i);
double BufLower = iBands(NULL, 0, BandsPeriod, BandsDeviation, 0, PRICE_CLOSE, MODE_LOWER, i);
BufWidth[i] = (Close[i]-BufLower)/(BufUpper-BufLower)*100;

}

return(0);
}

A 回答 (1件)

ゼロ除算によるエラーだと思います。



この場合for文は最も古いバーから処理を開始します。
このもっとも古いバーには指標を算出するための過去のデータがありません。
そのためiBands関数が0を返しエラーを引き起こしているのだと思います。

if(BufUpper-BufLower > 0)
BufWidth[i] = (Close[i]-BufLower)/(BufUpper-BufLower)*100;
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!