MT4 BBandWidthRatioについて
下記(1)番は、MT4 BBandWidthRatio.mq4のプログラムですが、通貨ペア別、時間足別に上限値を(下限値は0でいいのですが)変更しないと動きが、バラバラです。(変更したとしても、そのときどきで反応がいまいち)(2)番は、アメリカのCMS社VTTrader Bollinger Bandwidthですが、どの通貨ペア、どの時間足でも設定は同じで、綺麗に反応します。(トレンドが出た際に右肩上がり) MT4でこの(2)番の動きをさせるには、どうプログラムを変更したら可能なのでしょうか。相当難問なので、かなりプログラムに詳しい方でないと分からないと思いますが、どなたか分かる方、教えてください。
(1)番
#property copyright "Maji"
#property link "None"
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 Red
//---- input parameters
extern int BB_Period=18;
extern double Deviation=2.0;
double buf1[];
//double buf2[];
//double buf3[];
//double buf4[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
SetIndexStyle(0, DRAW_LINE, EMPTY, 2);
IndicatorDigits(MarketInfo(Symbol(), MODE_DIGITS));
SetIndexDrawBegin(0,BB_Period);
SetIndexLabel(0,"BBandWidthRatio");
SetIndexBuffer(0, buf1);
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);
i=Bars-BB_Period;
if(counted_bars>BB_Period) i=Bars-counted_bars-1;
if (Bars<=BB_Period) return;
for (i=Bars-BB_Period; 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];
buf1[i] = 2*(Deviation*sko)/MA;
}
return(0);
}
//+------------------------------------------------------------------+
(2)番
ラベルの内容
Bollinger Bandwidth (%Pr%,%tPr%,%ma%,%D%,%bulgeper%,%squeezeper%)
Bw = %Bandwidth%, Bulge = %Bulge%, Squeeze = %Squeeze%
入力タブの内容
Pr 名前:Pr
表示名:Bollinger Bands Price
タイプ:Price
デフォルト:close
tPr 名前:tPr
表示名:Bollinger Bands Periods
タイプ:integer
デフォルト:20
ma 名前:ma
表示名:Bollinger Bands MA Type
タイプ:MA type
デフォルト:simple(EMA変更可能)
D 名前:D
表示名:Bollinger Bands Standard Deviations
タイプ:float
デフォルト:2
bulgeper 名前:bulgeper
表示名:Bandwidth Bulge Periods
タイプ:integer
デフォルト:150
squeezeper名前:squeezeper
表示名:Bandwidth Squeeze Periods
タイプ:integer
デフォルト:150
出力タブの内容
Bandwidth, Bulge, Squeeze の線の色、幅、ラインタイプの設定
スクリプトタブの内容
MB:= Mov(Pr,tPr,ma);
UB:= BBands(Pr,tPr,ma,D,0);
LB:= BBands(Pr,tPr,ma,D,1);
Bandwidth:= (UB-LB)/MB;
Bulge:= hhv(Bandwidth,bulgeper);
Squeeze:= llv(Bandwidth,squeezeper);
以上
VTTraderのプログラムはインジケーターの詳細で必要と思われる場所を抜粋して記載しました
お礼
Saitarさん ありがとうございます! 出来ました! 以前はただドラッグで入っていたので仕様がが変わったのかと思いました^^; 本当に助かりました。 ありがとうございました!