24シリーズを数回に渡って記事にしてきましたが、パフォーマンス比較
の一例と使用したソースコードをちょっと便利にしたソースコードを載せ
ておきます。ソースコードはMultichartsのPower Language専用です。
パフォーマンスの処理はしませんが、途中までの内容を再現したExcel
ファイルが欲しい方はコメントにて「Excel版希望」とコメントしてください
ね (^-^)/
参考1 : 重要な24という数字
参考2 : 続 24は重要な値か?
参考3 : 続々 24は重要な値か?
【パフォーマンス比較の一例】
参考2で扱った失敗したシミュレーションと参考3で扱った本来のシミュレーション
におけるパフォーマンスの違いを詳細化したものを載せますね o(^▽^)o
銘柄はUSDJPYでカウント値は3を採用します。
期間は1年程度で5分足をベースとしたシミュレーションです!
まず失敗版と本来版のシグナルの出力状況を画像で比較してみます。
失敗版シグナル出力状況
失敗版はカウント値3を超えてドテンするまでポジションを保有してますが、
本来版はカウント値3毎に決済して条件に沿って再度ポジションを保有して
います。赤線はカウント値0毎に取得する価格となり、指標部分のギザギザ
水色線はカウント状況になります。緑線はカウント値の上限(3)です。
次にパフォーマンス状況を載せます。
成功版ってのは間違いで『本来版』ですね (;^_^A
一見、本来版の方がパフォーマンスが低下しているような感じがしますが
最大ドローダウンと次に示すエクイティカーブから必ずしも低下しているわ
けではないことがわかります。
けど、最初の基点から単純に設定したカウント値毎に売買を行う
だけでプラスのリターンになることが多いっての面白いものです。
テクニカルの組み合わせを色々と考えるよりも、こちらの方が単純
かつ効果がありそうな気がしませんか?
【Power Languageソースコード】
まずはインディケーターのソースコードを載せます。こちらは参照バー
をAutoから適当な参照バー数に変えておいてください。じゃないとシグナル
と連動しないかもしれないです。
入力変数 : FirstNumber ⇒ 基点となるバーナンバー
入力変数 : Count ⇒ カウント値
入力変数 : PlotNum
⇒ 0がカウント値0毎に終値を取得するライン(チャート部分に出力してください)
⇒ 1がカウント状況を示すライン(指標部分に出力してください)
Inputs:FirstNumber(70473),Count(24),PlotNum(1);
Vars:PriceLine(0),LineCount(0),HighLow(0),LastPline(0);
If currentbar=FirstNumber-MaxBarsBack then begin
PriceLine=close;
LineCount=0;
If PriceLine>close[Count] then HighLow=1
else If PriceLine<close[Count] then HighLow=-1
else HighLow=0;
end;
If currentbar>FirstNumber-MaxBarsBack then begin
If LineCount[1]=Count then LineCount=0 else LineCount=LineCount[1]+1;
If LineCount=0 then begin
PriceLine=close;
LastPline=PriceLine[1];
If PriceLine>PriceLine[1] then HighLow=1
else If PriceLine<PriceLine[1] then HighLow=-1
else HighLow=0;
end;
end;
If PlotNum=0 then begin
If currentbar>=FirstNumber-MaxBarsBack then begin
Plot1(PriceLine,"PriceLine",Red,default,2);
end else
Plot1(close,"PriceLine",Red,default,1);
end;
If PlotNum=1 then begin
If currentbar>=FirstNumber-MaxBarsBack then begin
Plot2(LineCount,"LineCount",Cyan,default,2);
Plot3(Count,"24-Line",Green,default,2);
end else
Plot2(LineCount,"LineCount",Cyan,default,1);
Plot3(Count,"24-Line",Green,default,2);
end;
次にシグナルのソースコードを載せておきます。失敗版は参考2で
載せてあるので下記ソースコードは本来版のものとなります。
入力変数 : FirstNumber ⇒ 基点となるバーナンバー
入力変数 : Count ⇒ カウント値
Inputs:FirstNumber(70473),Count(24);
Vars:PriceLine(0),LineCount(0),HighLow(0),LastPline(0);
If currentbar=FirstNumber-MaxBarsBack then begin
PriceLine=close;
LineCount=0;
If PriceLine>close[Count] then HighLow=1
else If PriceLine<close[Count] then HighLow=-1
else HighLow=0;
end;
If currentbar>FirstNumber-MaxBarsBack then begin
If LineCount[1]=Count then LineCount=0 else LineCount=LineCount[1]+1;
If LineCount=0 then begin
PriceLine=close;
LastPline=PriceLine[1];
If PriceLine>PriceLine[1] then HighLow=1
else If PriceLine<PriceLine[1] then HighLow=-1
else HighLow=0;
end;
end;
If marketposition=1 and LineCount=Count then sell ("24-LE") this bar on close;
If marketposition=-1 and LineCount=Count then buytocover ("24-SE") this bar on close;
If LineCount=0 and HighLow=1 then sellshort ("24-Short") this bar on close;
If LineCount=0 and HighLow=-1 then buy ("24-Long") this bar on close;