ここから本文です

MT4のMQL4について。

ltd********さん

2012/10/3108:38:48

MT4のMQL4について。

#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1 Purple
#property indicator_color2 Red
#property indicator_style2 STYLE_DOT
#property indicator_minimum 0
#property indicator_maximum 100
#property indicator_level1 20
#property indicator_level2 80

//指標バッファ
double BufMain[];
double BufSignal[];
double BufHigh[];
double BufLow[];

//パラメーター
extern int KPeriod = 13;
extern int DPeriod = 3;
extern int Slowing = 3;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//----指標バッファの割り当て
IndicatorBuffers(4);
SetIndexBuffer(0,BufMain);
SetIndexBuffer(1,BufSignal);
SetIndexBuffer(2,BufHigh);
SetIndexBuffer(3,BufLow);

//----指標ラベルの設定
string label
= "Stoch("+KPeriod+","+DPeriod+","+Slowing+")";
IndicatorShortName(label);
SetIndexLabel(0,"label");
SetIndexLabel(1,"Signal");

return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----

//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
int counted_bar =IndicatorCounted();
int limit = Bars-counted_bar;

if(counted_bar == 0) limit -=KPeriod;
for(int i=limit-1; i>=0; i--)
{
//Kの範囲の最高値
BufHigh[i] = High[iHighest(NULL,0,MODE_HIGH,KPeriod,i)];
//Kの範囲の最安値
BufLow[i] = Low[iLowest(NULL,0,MODE_LOW,KPeriod,i)];
}

if(counted_bar == 0) limit -= Slowing-1;
for(i=limit-1; i>=0; i--)
{
double sumlow = 0.0;
double sumhigh = 0.0;
for(int k=0; k<Slowing; k++)
{
//終値と最安値の差
sumlow += Close[i+k]-BufLow[i+k];
//最高値と最安値の差
sumhigh += BufHigh[i+k]-BufLow[i+k];
}
//sumhigh0の場合
if(sumhigh == 0.0) BufMain[i] = 50;
//ストキャスティックスの計算式
else BufMain[i] = sumlow/sumhigh*100;
}
if(counted_bar == 0) limit -= DPeriod-1;
for(i=limit-1;i>=0;i--)
{
//ストキャスティックスのSMA
BufSignal[i] = iMAOnArray(BufMain,0,DPeriod,0,MODE_SMA,i);
}

return(0);
}
//+------------------------------------------------------------------+

このストキャスティックスのコードに、レベル80以上からのデッドクロス、20以下からのゴールデンクロスを、ARROWシグナル表示させたい場合、どういったコードを追加すればよいのでしょうか。
よろしくお願いします。

画像のようなイメージです。

SetIndexBuffer,BufLow,ストキャスティックス,SetIndexLabel,limit-1,BufSignal,BufMain

閲覧数:
638
回答数:
1
お礼:
100枚

違反報告

ベストアンサーに選ばれた回答

fha********さん

2012/11/200:37:25

#property indicator_separate_window
#property indicator_buffers 4
#property indicator_color1 Purple
#property indicator_color2 Red
#property indicator_color3 Yellow
#property indicator_color4 Yellow
#property indicator_style2 STYLE_DOT
#property indicator_minimum 0
#property indicator_maximum 100
#property indicator_level1 20
#property indicator_level2 80

//指標バッファ
double BufMain[];
double BufSignal[];
double BufHigh[];
double BufLow[];
double BufBull[];
double BufBear[];

//パラメーター
extern int KPeriod = 13;
extern int DPeriod = 3;
extern int Slowing = 3;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//----指標バッファの割り当て
IndicatorBuffers(6);
SetIndexBuffer(0,BufMain);
SetIndexBuffer(1,BufSignal);
SetIndexBuffer(2,BufBull);
SetIndexBuffer(3,BufBear);
SetIndexBuffer(4,BufHigh);
SetIndexBuffer(5,BufLow);
SetIndexStyle(2,DRAW_ARROW);
SetIndexArrow(2,233);
SetIndexStyle(3,DRAW_ARROW);
SetIndexArrow(3,234);


//----指標ラベルの設定
string label
= "Stoch("+KPeriod+","+DPeriod+","+Slowing+")";
IndicatorShortName(label);
SetIndexLabel(0,"label");
SetIndexLabel(1,"Signal");

return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----

//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
int counted_bar =IndicatorCounted();
int limit = Bars-counted_bar;

if(counted_bar == 0) limit -=KPeriod;
for(int i=limit-1; i>=0; i--)
{
//Kの範囲の最高値
BufHigh[i] = High[iHighest(NULL,0,MODE_HIGH,KPeriod,i)];
//Kの範囲の最安値
BufLow[i] = Low[iLowest(NULL,0,MODE_LOW,KPeriod,i)];
}

if(counted_bar == 0) limit -= Slowing-1;
for(i=limit-1; i>=0; i--)
{
double sumlow = 0.0;
double sumhigh = 0.0;
for(int k=0; k<Slowing; k++)
{
//終値と最安値の差
sumlow += Close[i+k]-BufLow[i+k];
//最高値と最安値の差
sumhigh += BufHigh[i+k]-BufLow[i+k];
}
//sumhigh0の場合
if(sumhigh == 0.0) BufMain[i] = 50;
//ストキャスティックスの計算式
else BufMain[i] = sumlow/sumhigh*100;
}
if(counted_bar == 0) limit -= DPeriod-1;
for(i=limit-1;i>=0;i--)
{
//ストキャスティックスのSMA
BufSignal[i] = iMAOnArray(BufMain,0,DPeriod,0,MODE_SMA,i);
//シグナル判定
if(BufMain[i+1]<=20 && BufMain[i+1]<=BufSignal[i+1] && BufMain[i]>BufSignal[i]){
BufBull[i]=BufSignal[i]-5;
}else{
BufBull[i]=EMPTY_VALUE;
}
if(BufMain[i+1]>=80 && BufMain[i+1]>=BufSignal[i+1] && BufMain[i]<BufSignal[i]){
BufBear[i]=BufSignal[i]+5;
}else{
BufBear[i]=EMPTY_VALUE;
}
}
return(0);
}
//+------------------------------------------------------------------+

質問した人からのコメント

2012/11/2 11:39:35

降参 完璧でした!!ありがとうございます!!

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる