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

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

NinjaTrader

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

前回の続き、複数時間軸でのストラテジー作成方法その2です。  


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

protected override void Initialize()

{

Add(PeriodType.Minute, 60);

Add(PeriodType.Day, 1);
}


Close[0]→Closes[0][0]に変わり以下の要領で  

protected override void OnBarUpdate()
{

//デフォルトバー

if (Closes[0][0] > Opens[0][0]);

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

if (Closes[1][0] > Opens[1][0]);

/ 二番目に追加したバーでの条件:日足

if (Closes[2][0] > Opens[2][0]);



また、インディケータ追加の場合は、パラメータの前にBarsArray[1]を挿入

double n = NPositionSize(50000, 20).Size[0] ;  
    ↓ ↓ ↓ ↓

// 一番目に追加した時間軸でのインディケータ:60分 

double n = NPositionSize(BarsArray[1], 50000, 20).Size[0] ;


以上で、完成です。

次回は複数銘柄連携の方法を学んでみましょう。


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


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


ニンジャスクリプト入門:多重時間軸編その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 システムトレード派へ


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


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


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



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



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



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



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



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