さて、前回の続きです。

ここでは、入力データを正規分布と仮定した場合のZスコアを算出します。

プログラム名は”ZScore”です 、まずは、変数の宣言。

#region Variables
// Wizard generated variables
private double sDLine = 2.0;
private int  zPeriod = 200;
private double myzscore;
private DataSeries zPlot;
// User defined variables (add any user defined variables below)
#endregion


描画用のプロット追加です。

protected override void Initialize()
{
Add(new Plot(new Pen(Color.Blue, 2), PlotStyle.Bar, "ZScore"));
Add(new Line(Color.Gray, 0, "Zero"));
Add(new Line(Color.Red, sDLine, "+Sigma1"));
Add(new Line(Color.Red, - sDLine, "-Sigma1"));
Add(new Line(Color.Red, sDLine + 2, "+Sigma2"));
Add(new Line(Color.Red, - sDLine - 2, "-Sigma2"));

zPlot = new DataSeries(this);
}


Zスコアの本体部分です。

protected override void OnBarUpdate()
{
double avg,sigma;
avg=SMA(Close, zPeriod)[0];
sigma=StdDev(Close, zPeriod)[0];
myzscore = ( (Close[0] - avg) / sigma );
zPlot.Set(myzscore);

Value.Set(zPlot[0]);
}


以下、プロパティ変数です。

#region Properties
[Browsable(false)] // this line prevents the data series from being displayed in the indicator properties dialog, do not remove
[XmlIgnore()] // this line ensures that the indicator can be saved/recovered as part of a chart template, do not remove
public DataSeries ZPlot
{
get { return zPlot; }
}
[Description("標準偏差ライン")]
[GridCategory("Parameters")]
public double SDLine
{
get { return sDLine; }
set { sDLine= value; }
}

[Description("ZScore")]
[GridCategory("Parameters")]
public int ZPeriod
{
get { return zPeriod; }
set { zPeriod = value; }
}
#endregion


前回作った対数変動率をZスコアに代入します。

チャート画面かマーケットアナライザーからインディケータ -> ZScore -> Inputseries -> Logreturn 。

これで、価格変化幅を正規分布としているインチキ指標、ボリンジャーバンドは必要なくなりました。


標準化する手順で、未来のデータを含み全期間を見る事がありますが、ストラテジーに落とし込む際には、過去N日のローリングベースでの物の使用をおすすめします。


本日はこれにて閉講です。


東大理系卒の人気クオンツによる戦略とノウハウDVD


↓ブログランキングご協力お願いします!
シストレナビ 人気ブログランキングへ にほんブログ村 為替ブログ FX システムトレード派へ