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のプログラムはインジケーターの詳細で必要と思われる場所を抜粋して記載しました
お礼
ご返事遅れてすみません。 自分でもかなり探していたので助かりました。 改造できるようになるようがんばります。 ありがとうございました。