FXボーグ | テクニカル実験室

テクニカル分析を使った自動売買プログラムの開発に挑戦!

スポンサーリンク

Zorroで簡単なストラテジーを作る。

Zorroの勉強に簡単なストラテジーを作ってみました。プログラムは「LITE-C」という言語で書きます。これは非プログラマ向けに作られた言語らしく、より簡単に記述できるように工夫されています。

まずはEMAの交差による売買ロジックを実装してみました。 

f:id:fxborg:20161020033726p:plain

USDJPY日足(2005ー2016) 

プログラムを記述するにはトップ画面の「Edit ボタン」をクリックします。

f:id:fxborg:20161020095523p:plain

エディターが立ち上がるので、新しいファイルを作成して以下のプログラムを入力します。


#include <profile.c>
function run()
{
	//+----------------------------------------------+
	//| Settings                                     |
	//+----------------------------------------------+
	// simulation period 2010-2016
	StartDate = 2010; // テスト開始日
	EndDate = 2016;   // テスト終了日
	Commission=0;     // 売買手数料
	Spread=0.01;      // スプレッド
	
	PlotWidth = 1200;  // チャートの幅
	PlotHeight1 = 400; // チャートの高さ
	set(LOGFILE); // 売買記録

	//+----------------------------------------------+
	//| Trading Logic                                |
	//+----------------------------------------------+
	vars Price = series(price());
	vars ret =   series(Price[0]-Price[1]);
	vars ema32 = series(EMA(Price,32));
	vars ema128 = series(EMA(Price,128));
	// 標準偏差(25)
	vars sd = series(StdDev(ret,25));
// 2つのEMA間の差 vars rawdata = series(2.0*(ema32[0]-ema128[0])/sd[0]);
// ±20の範囲に収める vars ewmac = series(max(-20.0,min(20,rawdata[0]))); // Exit if(TradeIsOpen) { if(ewmac[0]>-5.0 && ewmac[1]<=-5.0) exitShort(); else if(ewmac[0]<5.0 && ewmac[1]>=5.0)exitLong(); } // Entry if(!TradeIsOpen) { if(ewmac[0]>10.0 && ewmac[1]<=10.0) enterLong(); else if(ewmac[0]<-10.0 && ewmac[1]>=-10.0)enterShort(); } set(PLOTNOW); plot("EWMAC",ewmac,NEW,RED); }

プルグラムの内容

トレードロジックはrun関数に記述します。このrun関数はバーの最後に1度だけ実行されます。まずはバックテスト時の設定を記述します。

StartDate = 2010; // テスト開始日
EndDate = 2016; // テスト終了日
Commission=0; // 売買手数料
Spread=0.01; // スプレッド

 次にEMAを2つ作成します。

vars Price = series(price());
vars ret = series(Price[0]-Price[1]);
vars ema32 = series(EMA(Price,32));
vars ema128 = series(EMA(Price,128));

 さらにEMAの交差をボラティリティで標準化し±20に収めます。

// 標準偏差(25)
vars sd = series(StdDev(ret,25));
// 2つのEMA間の差
vars rawdata = series(2.0*(ema32[0]-ema128[0])/sd[0]);
// ±20の範囲に収める
vars ewmac = series(max(-20.0,min(20,rawdata[0])));

 いよいよ売買ルールを記述します。

// Exit
if(TradeIsOpen)
{
 if(ewmac[0]>-5.0 && ewmac[1]<=-5.0) exitShort();

 else if(ewmac[0]<5.0 && ewmac[1]>=5.0)exitLong();
}
// Entry
if(!TradeIsOpen)
{
 if(ewmac[0]>10.0 && ewmac[1]<=10.0) enterLong();
 else if(ewmac[0]<-10.0 && ewmac[1]>=-10.0)enterShort();
}

最後にインジケーターを表示します。

set(PLOTNOW);
plot("EWMAC",ewmac,NEW,RED);

バックテストの実行

プログラムを保存したら、「Scriptプルダウン」から選べるになります。

「TESTボタン」をクリックするとバックテストが始まります。

f:id:fxborg:20161020035308p:plain

バックテストの結果とチャートが表示されます。

f:id:fxborg:20161020035742p:plain

f:id:fxborg:20161020033726p:plain

最後に

今回は、Zorroで簡単なストラテジーを作成しました。「LITE-C」自体はあまり好みの言語ではないですが、一通りの機能は揃っているようです。ポートフォリオなども組めるようなので引き続き調査していこうと思います。