カスタム指標オートスケールと歴史のグラフ化

私はMetaEditorでカスタムインディケータをいくつか書きましたが、Y軸オートスケールを作る方法を見つけることができないようです…インディケータ出力値が変わるにつれて手動でスケールを変えるためにプログラムに戻らなければなりません…以下は私のコードです。このインジケーターをY軸に自動スケールさせるためには何を変更しますか?また、インディケータをロードすると、ロードした時点のデータのみがグラフに表示されます。他のインディケータは、価格の履歴がある限りずっと前に戻って線を引いています。

**注:下のインジケーターは、上部と下部のボリンジャーバンドの間の帯域幅をプロットするように設計されています。**

ありがとう、
ライアン

/ ———————————————— ——————
// | 20 2.0 Bollinger Bandsのバンド幅
// |著作権?2006、Ghostrider Capital LLC。 |
// | ryanjmcgregor@tds.net | < br /> // ———————————————– ——————-
#property copyright "著作権?2006、Ghostrider Capital LLC。"
#property link "ryanjmcgregor@tds.net&quot;

#property indicator_separate_window
#property indicator_buffers 4
#property indicator_color1 DodgerBlue
#property indicator_maximum .01
#property indicator_minimum 0

// —-インジケータパラメータ
extern int BandsPeriod = 20。
extern int BandsShift = 0。
extern double BandsDeviations = 2.0。
// —-バッファ
// —- Moving、Upper、およびLowerは、Band Width 20を描画するためのカウント用です。
double BandWidth20Buffer [];
double MovingBuffer [];
double UpperBuffer [];
double LowerBuffer [];

// ———————————————– ——- ————
// |カスタム指標初期化機能|
// ———————————————– ——————-
int init()
{
// —-指標
SetIndexStyle(0、DRAW_LINE、STYLE_SOLID、2、DodgerBlue);
SetIndexBuffer(0、BandWidth20Buffer);
SetIndexLabel(0、 "バンド幅20");

SetIndexBuffer(1、MovingBuffer);

SetIndexBuffer(2、UpperBuffer);

SetIndexBuffer(3、LowerBuffer);

// —- 4つの指標バッファマッピング
SetIndexDrawBegin(0、BandsPeriod BandsShift);
SetIndexDrawBegin(1、BandsPeriod BandsShift);
SetIndexDrawBegin(2、BandsPeriod BandsShift);
SetIndexDrawBegin(3、BandsPeriod BandsShift);
IndicatorDigits(MarketInfo(Symbol()、MODE_DIGITS) 2);
IndicatorShortName( "バンド幅20 2.0 BB");
// —-
(0)を返します。
}
// ———————————————– ——————-
// |ボリンジャーバンド
// ———————————————– ——————-
int start()
{
int i、k、counting_bars = IndicatorCounted();
二重偏差
二重合計、oldval、newres、上限、下限、中央。

// —-
if(Bars <= BandsPeriod)が(0)を返す。
// —-初期ゼロ
if(counts_bars <1)
for(i = 1; i <= BandsPeriod; i )
{
MovingBuffer [Bars-i] = EMPTY_VALUE;
UpperBuffer [Bars-i] = EMPTY_VALUE;
LowerBuffer [Bars-i] = EMPTY_VALUE;
Ban dWidth60Buffer [Bars-i] = EMPTY_VALUE;
}
// —-
int limit = Bars-counting_bars;
if(counted_bars> 0)++を制限する。
for(i = 0; i <limit; i )
MovingBuffer [i] = iMA(NULL、0、BandsPeriod、BandsShift、MODE_SMA、PRICE_CLOSE、i)。

// —-
i = Bars-BandsPeriod 1。
if(counted_bars> BandsPeriod − 1)i = Bars − counted_bars − 1。
while(i> = 0)
{
sum = 0.0;
k = i BandsPeriod-1;
oldval = MovingBuffer [i];
while(k> = i)
{
newres = Close [k] -oldval;
sum = newres * newres;
k–;
}
偏差= BandsDeviations * MathSqrt(sum / BandsPeriod);
UpperBuffer [i] = oldval 偏差。 錫 弥纈濯聿纈 梔 闌糜瘡粤蛛蜿郢 錫 昭碣 昭碣 式バンド幅=(上 – 下)/ミドルバンド移動sma
BandWidth20Buffer [i] =(UpperBuffer [i] -LowerBuffer [i])/ MovingBuffer [i];

私 – ;
}
// —-
(0)を返します。
}
// ———————————————– ——————-


あなたのソースを公開するためにMQLボタンを使ってください



146: https://www.mql5.com/en/forum/100655


Originally posted 2019-08-02 19:26:32.

Translate »