システムトレード熱血教室

トレードの授業料を減らす教室開講です。

2011年06月

ニンジャスクリプト入門:多重時間軸編その1

周知の通り、エントリー時間軸だけを凝視してれば良いというわけではないです。

長期→中期→短期→エントリー時間軸と、長い足から見るのが教科書的な方法とされています。


ここでは、複数時間軸でのストラテジー作成方法を学んでいきましょう。


Add()メソッドにより、任意の時間軸を追加していきます。

protected override void Initialize()

{

Add(PeriodType.Minute, 60);

Add(PeriodType.Day, 1);
}


時間軸別に発注条件を設定します。

protected override void OnBarUpdate()
{

// デフォルトのバーでの条件

if (BarsInProgress == 0)

{

if (Close[0] > Open[0])// Do something

}


// 一番目に追加したバーでの条件:60分

if (BarsInProgress == 1)
{
if (Close[0] > Open[0])
}


/ 二番目に追加したバーでの条件:日足
if (BarsInProgress == 2)
{
if (Close[0] > Open[0])
}

}


以上で、完成です。

次回は同じ要領で、別の書き方を紹介します。


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


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


ニンジャスクリプト入門:標準化編

さて、前回の続きです。

ここでは、入力データを正規分布と仮定した場合の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 システムトレード派へ


ニンジャスクリプト入門:正規化編

チャートで売買してる人の中には、側面に表示されている縦軸を無視して、いつも同じポジションサイズで売買してる人がいます。

また、縦軸をきちんと認識していても、値幅での比較には自ずと限界があります。


そこで、前日比の変動値幅を、前日比の対数変動率に正規化する必要があります。

ここでは値動きを対数変動率に変えるプログラムを書いてみます。

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

#region Variables
private int period = 1
#endregion


描画用の追加、バーの太さ2の青色の棒グラフです。

色やバーの種類を変えたい場合は、Blueを選択し、Ctrl + スペースキーのショートカットキーで、自動補完が出来ます。

protected override void Initialize()
{
Add(new Plot(new Pen(Color.Blue, 2), PlotStyle.Bar, "前日比リターン"));
}


本体部分です。

CurrentBar:データをロードして、現在何本目のバーに当たるかを返します。

Input :プロパティで選択されたデータの種類(通常はClose[0])を返します。

ここで、数学関数の登場です。Math.Log(本日/前日)で対数変動率の完成です。

protected override void OnBarUpdate()
{
int barsAgo = Math.Min(CurrentBar, period);  
Value1.Set(Math.Log((Input[0]) / Input[barsAgo]));
}


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

#region Properties
[Browsable(false)]
[XmlIgnore()]
public DataSeries Value1
{
get { return Values[0]; }
}
[Description("")]
[GridCategory("Parameters")]
public int Period
{
get { return period; }
set { period = Math.Max(1, value); }
}
#endregion


累積リターンの出し方は以下。

チャート画面かマーケットアナライザーからインディケータ -> SUM -> Inputseries -> Logreturn で出せます。 

 

しかし、これではデータの大小の比較時に分かりにくさがあります。

そして次回は、前日比の対数変動率を標準化するプログラム、Zスコア指標を書いてみたいと思います。  


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


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


条件演算子

前回の記事で、ifelse文で条件分岐しましたが、更に簡素化する書き方を紹介します。

/*数学関数による小数点第2位以下での切り捨て。
if~else文で条件分岐
一枚あたりに合わせる為に通貨属性は十分の一に。*/

if (Instrument.MasterInstrument.InstrumentType == InstrumentType.Currency)
{
N = Math.Floor(N) / 10;
}
else
{
N = Math.Floor(N);
}


演算子

c ? x :

意味

ctrueならばx

falseならばyを返します

N = (Instrument.MasterInstrument.InstrumentType == InstrumentType.Currency) ? Math.Floor(N) /  10 : Math.Floor(N);


これで、書き換え終了です、益々ストラテジー・インディケータ開発に精が出る事でしょう。

次回は、正規化に関するプログラムから指標最適化まで数回に分けて行います。


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


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


ニンジャスクリプト入門:ポジションサイジング編

本日は、大手CTAでも使われている、長らく門外不出だったNの概念を用いてポジションサイジングのプログラムを作ってみましょう。

詳しくは、上のリンクの書籍を読んで詳しく勉強してください。

まず、お決まりの変数宣言です。以下のように宣言します。

#region Variables
// Wizard generated variables
private int accountSize = 50000; // アカウント金額,5万ドルで設定。
private int atrPeriod = 20; // ATRの日数
// User defined variables (add any user defined variables below)
#endregion

チャート描写用のAddメソッドで追加します。

Overlayをしないタイプの指標なのでFALSE、移動平均などはTRUEです。  

protected override void Initialize()
{

//チャート描写用のAdd

Add(new Plot(Color.FromKnownColor(KnownColor.Orange), PlotStyle.Line, "Size"));

Overlay = false;

}


Nの概念の本体部分です。任意日ATRの金額変動の算出や、保有可能枚数を算出。

protected override void OnBarUpdate()
{
// Use this method for calculating your indicator values. Assign a value to each
// plot below by replacing 'Close[0]' with your own formula.


//アカウントの1%500$
int AccountSize1 = accountSize / 100;

//ATR(任意日)での金額換算での変動
double N;
N = ATR(atrPeriod)[0] * Instrument.MasterInstrument.PointValue;

/*数学関数による 小数点第2位以下での切り捨て。

if~else文で条件分岐

一枚あたりに合わせる為に通貨属性は十分の一に。*/
if (Instrument.MasterInstrument.InstrumentType == InstrumentType.Currency)
{
N = Math.Floor(N) / 10;
}
else
{
N = Math.Floor(N);
}

//保有可能ポジション
double UnitSize;
UnitSize = AccountSize1 / N;
UnitSize = Math.Round(UnitSize,0,MidpointRounding.AwayFromZero);//四捨五入

//チャートに描写する。
Size.Set(UnitSize);
}


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

#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 Size
{
get { return Values[0]; }
}
[Description("")]
[GridCategory("Parameters")]
public int AccountSize
{
get { return accountSize; }
set { accountSize = Math.Max(1, value); }
}
[Description("")]
[GridCategory("Parameters")]
public int ATRPeriod
{
get { return atrPeriod; }
set { atrPeriod = Math.Max(1, value); }
}

#endregion


当指標は、MarketAnalyzerやチャートでの参照も可能です。

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



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


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


~ SSRN ~
それは、アカデミックの入り口
職業:裁量ディーラー兼システムトレーダー(ハイブリッドトレーダー)


国内商品系プロップハウスの裁量兼システムの 現役ディーラー による海外トレーディングソフト解説書。
脱素人トレーダーゑの道


BNPパリバ証券 のクオンツによる各種スペシフィック・リターン解説書、超レア。



大和証券キャピタル・マーケッツ の有名クオンツによるマルチファクターモデル解説、株式マーケットニュートラルやペアトレードにも言及、廃刊プレミア。



投信や年金運用の 東大卒 有名ファンドマネージャーによるスペシフィック・リターンリバーサル等の解説や株式運用の手引き。



東大理系卒 の現役クオンツによる VBAプログラムによる検証方法やクオンツアプローチの実践方法の解説、希少的セミナー。



同上クオンツによる株式マーケットニュートラルやペアトレードのセミナー。



同上クオンツによるCTAトレンドフォローのセミナー。 style=
livedoor プロフィール
タグクラウド
QRコード
QRコード
  • ライブドアブログ