電子信箱 service [at] bituzi.com
幣圖誌首頁 facebook粉絲團 google plus google plus


拿分K資料做當沖策略回測,你累了嗎?




下圖是一個當沖策略從2010年以後的的損益累積圖,總損益為3342點,總交易次數1043次,平均毎筆獲利3.2點,最大連續虧損509點,這樣的結果你滿意嗎?



看損益累計圖似乎還不錯,獲利不斷的創新高(紅X),連續虧損也在一個合理範圍內 (下面綠色區域)。但注意到,平均毎筆交易只獲利3.2點 (已扣5點滑價手續費),似乎覺得有點少。

真是如此嗎? 我們計算一下,平均每次賺3.2點,也就是640元。假設一口期貨保證金10萬元 (事實上應該小於10萬),每天可獲利0.64%

當然,我們不可能單純用一口保證金去做。最大連續虧損509點告訴你用10萬做一口會遭遇到相當大的破產風險。保守計算,假設用50萬做一口大台 (如此槓桿也接近4倍),按照每天賺3.2點的績效,一年約250個交易日可賺16萬,年化報酬率約32%,

這樣的績效,我想沒人會否認不優異!

然而,你有沒有想過,台指期每天指數波動大約100點上下,每秒的波動大約在1~2點上下,快市時每秒波動甚至可到5點甚至10點以上。

如果你是用手動下單,不管你下單手法多麼敏捷,你如何能夠在訊號發生後,瞬間( < 0.2秒) 完成下單動作,而不經歷1~2點的波動? (也許快速鍵可以,但還是容易有誤差)

如果你無法完成上述瞬間的下單動作,而每秒的波動又在上下1~2點間,偏偏你圖的又是每次交易平均3.2點的獲利,你不覺得這個策略是一個風險極高的當沖策略嗎?

好在是這個策略先扣掉5點的滑價跟手續費了。也就是每次交易雖然平均只賺3.2點,事實上是賺了3.2+5=8.2點:包括1點的手續費,新倉平倉上下2點的滑價 (有時高估有時低估)。

這也是為何當沖策略最好用程式交易的原因,讓電腦自動下單,完整確實的執行觸價後"瞬間成交"這件事。 然而,你以為這樣就萬事太平了嗎? 當我們辛辛苦苦地做完回測,發現確實能夠獲利拿來使用時,可能還有一件讓事情讓你崩潰。

有沒有想過你的回測結果可能是錯誤的?

下圖是統計2010年~ 2015年3月每分鐘波動統計圖。可以發現,這段時間每分鐘的 "高點-低點" 大約在1~5點之間,最常發生是在2、3、4點,其次是1點、5點。


而我們通常用來回測的歷史資料是正是分K資料,也就是我們有歷史行情每分鐘的開高收低,這會造成回測上一個很大的問題。

舉例來說,用分K策略點執行30點的固定停損,這樣的設定屬於"觸價停損",也就是一旦盤中有觸碰到停損價位,程式就自動執行下單,也許成交在下一個tick;若是發生快市滑價,也許成交在下2~3個價位以後。

可惜的是,用分K資料回測,當第 I 分鐘X秒 (0<X<60) 發生觸價,你該用第I分鐘的什麼價位去執行停損,記得你的分K資料只有第I分鐘的 "開"、"高"、"收"、"低",你只有這四個數字可以使用。

兩種方式你可以選擇,一種是用第I分鐘的最差價位去計算,所謂最差價位,可能是用最低價(多單停損)去計算,可能是用最高價(空單停損)去計算。

另一種方式,你可以用下一分鐘的開盤價去計算,也就是第I+1分鐘的開盤價。總之,邏輯都是在 "實際可執行策略" 或是 "保守預估績效" 的的情況下去回測。

當然,你無法用第 I分鐘的"最佳價位"去執行停損,那樣會佔去探多便宜。不要以為這小小的 "1分鐘內的誤差" 微不足道,下面我們來做個實驗:

上述的策略,如果我們在第I分鐘觸價停損,我們用第I分鐘的最差價位去執行停損。損益累計圖如下。


總損益: -3105 
總交易次數: 1043 
平均每筆損益: -2.976989 
獲利次數: 433 
勝率: 41.51486 % 
平均賺: 38.03002 
平均賠: -32.08525 
最大連續虧損: 3416 

有沒有很誇張? 損益績效圖從一個穩定向上看似很棒的策略,變成一路賠到底的損益績效圖,爛到連綠色的最大虧損我都不敢畫出來。

如果我們改成 "第I分鐘觸價停損,在第I+1分鐘的開盤價執行平倉",則結果稍微好一點,但還是慘兮兮。


總損益: -900
總交易次數: 1043
平均每筆損益: -0.8628955
獲利次數: 433
勝率: 41.51486 %
平均賺: 38.03002
平均賠: -28.47049
最大連續虧損: 1677 

如果將程式回策動個"小手腳":在第I分鐘觸價停損,我們卻提早一點點就 "預知" 這件事,在第I分鐘的開盤就先行平倉 (也就是提早知道X秒)。則績效如下:



總損益: 3342
總交易次數: 1043
平均每筆損益: 3.204219
獲利次數: 437
勝率: 41.89837 %
平均賺: 37.71854
平均賠: -21.68482
最大連續虧損: 509

ㄟ~ 有沒有發現,這就是本文一開始呈現的策略績效。換句話說,這個策略本身回測成果並非如此,別以為預知不到1分鐘 (X秒) 影響不大,事實證明,預知越多時間,影響越大。也就是績效會愈好,下面是提早整整1分鐘的結果:

假設我們可預測下一分鐘會觸價停損,也就是我們在第I-1分鐘的開盤就直接執平倉,則績效如下:


總損益: 5339
總交易次數: 1043
平均每筆損益: 5.118888
獲利次數: 448
勝率: 42.95302 %
平均賺: 37
平均賠: -18.88571
最大連續虧損: 350

看到沒有,我們偷到的"預知1分鐘",足以撼動整體策略績效,現在你還敢用分K做當沖策略回測嗎?

用分K資料如何做當沖回測?

當然一個可行的方法,是你就直接用觸發價當作進場價,停損(利)價當做出場平倉價,但記得要扣掉手續費與滑價5點。也就是你若設定固定停損30點,直接用停損價位扣掉滑價5點。換句話說,每次交易停損後,都是賠35點。下圖是損益圖與績效。


 總損益: -454
 總交易次數: 1205
 平均每筆損益: -0.3767635
 獲利次數: 495
 勝率: 41.07884 %
 平均賺: 40.83434
 平均賠: -29.10845
 最大連續虧損: 1592

這樣做的結果會比較符合實際交易的結果,但誤差仍然是存在。畢竟不是每次都剛好滑價5點(時高時低),這點用分K做回測,任憑你再神通廣大也難以預估。

0 意見: