Brian 様
ありがとうございます。おかげ様で解決することができました。
時系列配列と通常の配列の違いということで、その認識がなかったことに原因がありました。
リンク先の記事にも書かれていましたが「初心者が必ず引っ掛かる問題」まさにそうでした。
通常配列を時系列配列に設定して、以下のようなコードにしてみました。
コード:
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 LightSeaGreen
//指標バッファ
double BufJudge[];
//パラメーター
extern int FastEMA = 12;
extern int SlowEMA = 26;
extern int SignalEMA = 9;
//+------------------------------------------------------------------+
//| 初期化関数 |
//+------------------------------------------------------------------+
int init()
{
//指標バッファの割り当て
SetIndexBuffer(0,BufJudge);
//指標スタイルの設定
SetIndexStyle(0,DRAW_HISTOGRAM, STYLE_SOLID, 3);
return(0);
}
//+------------------------------------------------------------------+
//| 指標処理関数 |
//+------------------------------------------------------------------+
int start()
{
double vMACD[];
double vSignal[];
ArrayResize(vMACD,Bars);
ArrayResize(vSignal,Bars);
ArraySetAsSeries(vMACD,true);
ArraySetAsSeries(vSignal,true);
int limit = Bars-IndicatorCounted();
for(int i=limit-1; i>=0; i--)
{
if(i == Bars-1) {
vMACD[i] = 0;
} else {
vMACD[i] = iMA(NULL,0,FastEMA,0,MODE_EMA,PRICE_CLOSE,i)
-iMA(NULL,0,SlowEMA,0,MODE_EMA,PRICE_CLOSE,i); //MACDの計算
}
}
if(limit == Bars) limit -= SignalEMA-1;
for(i=limit-1; i>=0; i--)
{
vSignal[i] = iMAOnArray(vMACD,0,SignalEMA,0,MODE_EMA,i); //シグナルの計算
BufJudge[i] = vMACD[i] - vSignal[i];
}
return(0);
}
//+------------------------------------------------------------------+
一つ山を越えることができて、ほっとしています。
ありがとうござました。