MT4 BBandWidthRatio(VT系)
fhat6014様
この質問の前にADXのMTF化の質問をしているのですが、貴殿に以前紹介頂いた、BBandWidthRatioのVT系のインジケータもMTF化できるのでしょうか?現在、紹介頂いたサイトからインジケータが削除されているため、プログラムを記載させて頂きます。可能であれば、教えていただけないでしょうか。
#property indicator_separate_window
#property indicator_buffers 3
#property indicator_color1 Purple
#property indicator_color2 Blue
#property indicator_color3 Red
#property indicator_style2 STYLE_DOT
#property indicator_style3 STYLE_DOT
#property indicator_minimum 0
//---- input parameters
extern int BB_Period=18;
extern double Deviation=2.0;
extern int Bulgeper=150;
extern int Squeezeper=150;
double buf1[];
//double buf2[];
//double buf3[];
//double buf4[];
double bufBulgeper[];
double bufSqueezeper[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
IndicatorDigits(MarketInfo(Symbol(), MODE_DIGITS));
SetIndexDrawBegin(0,BB_Period);
SetIndexLabel(0,"BBandWidthRatio");
SetIndexBuffer(0, buf1);
SetIndexDrawBegin(1,BB_Period);
SetIndexLabel(1,"Bulgeper");
SetIndexBuffer(1, bufBulgeper);
SetIndexDrawBegin(2,BB_Period);
SetIndexLabel(2,"Squeezeper");
SetIndexBuffer(2, bufSqueezeper);
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
int i, j;
double ave, sko, sum;
int counted_bars=IndicatorCounted();
double MA, Up, Dn;
if(Bars<=BB_Period) return(0);
if(BB_Period==0) return(0);
int limit = Bars - counted_bars;
for (i=limit-1; i>=0; i--)
{
// buf2[i] = iMA(NULL,0,BB_Period,0,MODE_SMA,PRICE_CLOSE,i);
MA = iMA(NULL,0,BB_Period,0,MODE_SMA,PRICE_CLOSE,i);
sum = 0;
for (j=0; j<BB_Period; j++) sum+=Close[i+j];
ave = sum / BB_Period;
sum = 0;
for (j=0; j<BB_Period; j++) sum+=(Close[i+j]-ave)*(Close[i+j]-ave);
sko = MathSqrt(sum / BB_Period);
// buf4[i] = buf2[i]+(Deviation*sko);
// buf3[i] = buf2[i]-(Deviation*sko);
Up = MA+(Deviation*sko);
Dn = MA-(Deviation*sko);
// buf1[i] = 2*(Deviation*sko)/buf2[i];
if( MA != 0 ){
buf1[i] = 2*(Deviation*sko)/MA;
bufBulgeper[i] = buf1[ArrayMaximum(buf1,Bulgeper,i)];
bufSqueezeper[i] = buf1[ArrayMinimum(buf1,Squeezeper,i)];
}
}
return(0);
}