龙听期货论坛's Archiver

龙听 发表于 2020-5-11 17:16

做最壞的打算--評估績效再創新高所需時間

務實的程式交易者都知道,策略的好壞不在於它多能賺錢,而是它在如何挺過艱困時期,另外還有一個現實問題,就是當策略開始實單交易,先遇到賺錢行情還是虧錢行情差很大—即使最終總損益是一樣。


下圖是一個策略的損益曲線,綠色的點是大家的最愛,代表淨值(獲利)創新高,在兩個綠點間的日子就是策略吃DD、掙扎或者是理解成沒有盈利的期間,這個期間越短越好,代表策略以越快的速度再度產出。因此我們檢視策略的優劣,績效再創新高所需時間也是值得研究的項目。
[attach]18635[/attach]

把下面這段程式碼直接複製到策略程式碼下方,即可在輸出區輸出相關數據(專業版MC可直接輸出到檔案):
=============================================

[code]
vars:MaxCapital(100000),totaltr(0),BarNumofMaxP(0),BarCount(0),count(0),SumBarNumofMaxP(0),MaxBarCount(0);

totaltr=totaltrades;

if totaltr>totaltr[1] then begin
MaxCapital=maxlist(netprofit+1000000,MaxCapital);
if MaxCapital>MaxCapital[1] then begin
  BarNumofMaxP=barnumber;
  BarCount=BarNumofMaxP-BarNumofMaxP[1];
  count=count+1;
  SumBarNumofMaxP=BarCount+SumBarNumofMaxP;
  MaxBarCount=maxlist(MaxBarCount,BarCount);
  
  messagelog(NumToStr(date+19000000,0),",",NumToStr(time,0),",",NumToStr(MaxCapital,0),",",
  NumToStr(totaltr,0),",",NumToStr(BarNumofMaxP,0),",",NumToStr(BarCount,0));
end;
end;


if LastBarOnChart then begin
BarNumofMaxP=barnumber;
BarCount=BarNumofMaxP-BarNumofMaxP[1];
count=count+1;
SumBarNumofMaxP=BarCount+SumBarNumofMaxP;
MaxBarCount=maxlist(MaxBarCount,BarCount);
messagelog(NumToStr(date+19000000,0),",",NumToStr(time,0),",",NumToStr(MaxCapital,0),",",
NumToStr(totaltr,0),",",NumToStr(BarNumofMaxP,0),",",NumToStr(BarCount,0));
messagelog("The average struggle time(numbar of bars) is ",NumToStr(SumBarNumofMaxP/count,0));
messagelog("The worst struggle time(numbar of bars) is ",NumToStr(MaxBarCount,0));
end;
[/code]

=============================================

輸出統計資料在輸出區,如下圖所示:

[attach]18636[/attach]

簡單解說一下程式碼與用法:

1.MaxCapital(100000):預設值為100000元,是因為MC計算績效,預設資本為100000元,如果你改過預設值就要同步調整,連下面這行程式碼也要改:MaxCapital=maxlist(netprofit+1000000,MaxCapital);

2.最後這段LastBarOnChart程式碼是要把尚未創新高的現在進行式也計入,這樣統計才會正確。以上面這個例子來講,策略目前正經歷最長的吃DD期間。

3.最後也把平均創新高所需期間以及最大創新高所需期間算出來並輸出,以K棒數表示,本例來講分別是351根K棒以及4383根K棒,可再自行換算成時間,例如台指全天盤,19根60分K為一個交易日,則本利平均再創新高所需期間為18.5個交易日。

4.程式也輸出每一個淨值創新高(綠點)的相關資料,可匯入EXCEL(教學)進行進一步統計分析,例如計算中位數可能比平均值有意義。

快速結論:

程式是無血無淚的,但交易人要承受虧損之痛、資金壓力,最難的是還不知道要熬多久。評估淨值創新高的期間,跟評估MDD一樣,都是做最壞的打算,交易人可提前評估當遇到艱困期時能否挺得過來,盡可能做好準備!不然,一進場就吃DD,信心快速崩盤…很多程式交易都是沒能度過漫漫長夜迎來黎明,從而妄斷此法行不通,這個我稱之為”不倖存者偏誤”。

页: [1]