トレーディングシステム入門:中編

指標を算出するための準備

作った戦略(システム)のバックテストを行うためには、TradeStationにあるバックテストの結果「Performance Report」では不足なため、自分で指標を算出する必要がある。
そのため戦略のプログラムの最後にコードを追加する。
これによりバックテスト後にCSVファイルとして結果が出力される。
さらにこの結果をExcelに取り込み、さらなる指標を算出する。

繰り返しの掲載になるが、
指標のための追加コードは本書61,62ページにあり、ここではすこし変更してある。

指標算出コード1

{ *********** calculate performance ****************** }
Vars:
 FName(“”), TotTr(0), Prof(0), CumProf(1),
 ETop(1), TopBar(0), TopInt(0), BotBar(0), BotInt(0),
 EBot(1), EDraw(1), TradeStr2(“”);
if CurrentBar = 1 then begin
 FName = “C:\Temp\” + LeftStr(GetSymbolName,2) + “.csv”;
 FileDelete(FName);
 TradeStr2 = “E Date” + “,” + “Position” + “,” + “E Price” + “,” +
           ”X Date” + “,” + “X Price” + “,” + “Profit” + “,” +
           ”Cum.prof.” + “,” + “E-Top” + “,” + “E-Bottom” + “,” +
           ”Flat time” + “,” + “Run up” + “,” + “Drawdown” + “,” +
           ”PointValue” + NewLine;
 FileAppend(FName,TradeStr2);
end;
TotTr = TotalTrades;
if TotTr > TotTr[1] then begin
 Prof = 1 + PositionProfit(1)/(EntryPrice(1)*BigPointValue);
CumProf = CumProf * Prof;
 ETop = MaxList(ETop,CumProf);
 if ETop > ETop[1] then begin
  TopBar = CurrentBar;
  EBot = Etop;
 end;
 EBot = MinList(EBot,CumProf);
 if EBot < EBot[1] then BotBar = CurrentBar;  TopInt = CurrentBar – TopBar;  BotInt = CurrentBar – BotBar;  EDraw = CumProf / Etop;  TradeStr2 = NumToStr(EntryDate(1),0) + "," +            NumToStr(MarketPosition(1),0) + "," +            NumToStr(EntryPrice(1),2) + "," +            NumToStr(ExitDate(1),0) + "," +            NumToStr(ExitPrice(1),2) + "," +            NumToStr((Prof - 1)*100,2) + "," +            NumToStr((CumProf - 1)*100,2) + "," +            NumToStr((ETop - 1)*100,2) + "," +            NumToStr((EBot - 1)*100,2) + "," +            NumToStr(TopInt,0) + "," +            NumToStr(BotInt,0) + "," +            NumToStr((EDraw - 1)*100,2) + "," +            NumToStr(PointValue,2) + NewLine;  FileAppend(FName,TradeStr2); end; { ********************************************* }

豆知識

TotalTradesとは過去におこなったトレードの回数の合計

PositionProfit(1)とは(現在もっているポジションではなく)1つ前のポジションの損益の金額

EntryPrice(1)とは(現在もっているポジションではなく)1つ前のポジションのEntryした時のプライス

BigPointValueとはチャート上の1ポイント分のプライスをドル(金額)に換算した値。

if TotTr > TotTr[1] then begin
 Prof = 1 + PositionProfit(1)/(EntryPrice(1)*BigPointValue);

これは、新たなトレードがはじまった時点で、「前回のトレードが決済したときの金額」を「前回のトレードがEntryした時の金額」で割った値、を計算している。
しかしこの後指標”Profit”としては(Profit – 1)*100の計算値を出力している。
これは

PositionProfit(1)/(EntryPrice(1)*BigPointValue) * 100%

ということであり、「前回のトレードの損益の金額をEntryした時の金額で割りパーセントに換算したもの」を意味する。

この指標算出コード1 をstrategyのEasyLanguageプログラムの最後に追加することでバックテスト時にCドライブのTempフォルダ内にExcel対応のファイルができる。T
empフォルダがない場合は自分でフォルダを作る。
そうでないとExcel対応のファイルができない。
もちろんTempフォルダ以外に出力することもできる。

次に、できた(出力された)ファイルをExcelまたはExcel互換ソフトで開く。
今回はフリーウェア”OpenOffice”のCalcを使って作業を行った。

本書62-65ページの説明をもとに、各指標の計算式をセルに入力していき表2.1と同じものを作成する。
本書の説明と表2.1と一致しない表現がいくつかあるので注意が必要だ。