MT4 MQL 自作インジの問題点がわからない…
自作インジをiいくつか作って、そのうちいくつかに動かしているとたまにバグ?が出るモノがあるのですがどうしてそうなるのか問題点がわからないです。
MT4 MQL 上級者の方ならわかるかとおもうのですが…
理由と修正点を教えてください。
以下MQL 例
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 DodgerBlue
#property indicator_minimum 0
#property indicator_maximum 100
#property indicator_level1 30
#property indicator_level2 70
//指標バッファ
double BufRSI[];
double TRDBuf[];
double haBuf[];
double haBuf2[];
//パラメーター
extern int RSI_Period = 14;
extern int up = 85;
extern int down = 15;
extern int haup = 70;
extern int hadown = 30;
//+------------------------------------------------------------------+
//| 初期化関数 |
//+------------------------------------------------------------------+
int init()
{
//指標バッファの割り当て
IndicatorBuffers(4);
SetIndexBuffer(1,BufRSI);
SetIndexBuffer(0,TRDBuf);
SetIndexBuffer(2,haBuf);
SetIndexBuffer(3,haBuf2);
return(0);
}
//+------------------------------------------------------------------+
//| 指標処理関数 |
//+------------------------------------------------------------------+
int start()
{
int limit = Bars-IndicatorCounted();
if(limit == Bars) limit -= RSI_Period-1;
for(int i=limit-1; i>=0; i--)
{
BufRSI[i]=iRSI(NULL,0,RSI_Period,PRICE_CLOSE,i);
}
if(limit == Bars) limit -= RSI_Period-1;
for(i=limit-1; i>=0; i--)
{
if (BufRSI[i+1]<haup && BufRSI[i+1]>hadown)
{
if(BufRSI[i]>haup) haBuf[i]=Close[i];
if(BufRSI[i]<hadown) haBuf2[i]=Close[i];
if(haBuf[i]<haBuf2[i]) int han=up; else han=down;
TRDBuf[i] = han ;
}
else TRDBuf[i] = down;
}
return(0);
}
これはRSI(14)が70未満から70より上になったときに haBuf[i] に終値をいれておき
RSI(14)が30より上から30未満になったときに haBuf2[i] に終値をいれて
haBuf[i]<haBuf2[i] だったら TRDBuf[i] を up (= 85) 違ったら down (= 15)と表示させるものです。
動かしているとたまに TRDBuf[i] が up (= 85) になるのですがプロパティーを開いて 何も変更せずにOKを押したら up (= 85) になっていたところが down (=15) になり何もなかったことになります。
(もしくは、up (= 85)がでてからまったく同じ条件のインジをいれたら新しく入れたほうは up (= 85)になっていない。)
しかもこのバグ?が起こるときと起こらないときがあります。
この問題の原因がまったくわからないのですが知識のある方ご教授お願いします。
お礼
回答ありがとうございます ゴールデンクロスでサインを出すものは多く見られますが、 ゼロラインのように定数とのクロスでサインを出してくれるのはなさそうですね・・・