2013年6月26日 星期三

資料庫如何造成回測的差異


程式交易小學堂─期貨投機事業的王道
近期,藍玉與法意間的糾紛在檢察官給出不起訴處分後,法意提出幾項聲明來證明檢察官不查或似有偏袒的證據。我想剛好藉這個事件,我們可以對回測報表的產生基礎有多一些的認識───影響回測報表醫治性,最大的可能原因往往是資料庫不一致。

讓我們對資料庫可能造成回測報表差異的這個狀況做一個模擬,來對照一下法意所提出的聲明到底有沒有這個可能,還是純粹是法意自己在瞎扯加牽拖?畢竟不該一面倒認為法意就是壞人嘛~

首先,我們先定好在同一部電腦上,使用同一版本的 MultiCharts 同一個策略程式(不修改)的前提下來做這個麼模擬,避免更多的變因造成牽扯不清。

用來模擬的策略訊號程式碼如下,簡單的兩條均線做大小比較而已:
if Average(C,30) > Average(C,60) then
  buy ("B") next bar market
else
  sellshort ("S") next bar market;




接著,我先把日常所使用由凱衛提供報價服務的台指近月歷史資料匯出,用來製造另一個做為對照的資料庫:


把製造要用來對照的資料庫,命名為 TEST_TXF,並且匯入剛剛從 TXF1 的資料。有興趣的人可以依樣畫葫蘆。到這個步驟,我們可以得到兩個資料內容一樣的商品資料:TXF1 與 TEST_TXF,不同的資料庫但一樣的內容。


再來,開啟兩個圖表分別使用這兩個商品資料,設為一樣的時間週期(300秒),因為凱衛的分線資料有採兩種歸分規則,為避免台灣分線與國際分線的差異而產生另外的變因,我們使用秒線,讓 MultiCharts 取用 Ticks 資料來堆K棒。此時,我們可以看到一樣的策略訊號、一樣的時間週期、不同的資料庫(相同內容),可以得到一致的回測報表。

到以上這個步驟可以推導出,只要使用相同內容的資料庫,也沒有因為使用不同版本的 MultiCharts,在同一個策略訊號之下,其實就算是放在不同的電腦上,也應該要得到一致的回測報表。除非,兩部電腦 Run 的是不同的策略訊號(修改策略程式碼規則或是參數調整)。

再來,因為法意提出資料庫的自動回補更新云云說法,所以,我們來看看如果資料庫真的有差異的話,會是怎樣?我故意把 TEST_TXF 的內容刪去任選的幾天(2010/10/12~2010/10/14)資料。


比對一下 TEST_TXF 被刪去三天的資料後,對回測會有怎樣的影響?這麼做的理由是,其實如果我們的歷史資料來源有錯漏的話(這不是新鮮事),經過所謂的資料補正之後,的確是很有可能讓資料庫產生變動的。看看以年為單位的回測。


兩個不同的資料庫,一樣的策略訊號,差異僅產生在資料內容不同的那個年份。再往細部一點去看以月為單位的回測報表。兩個 DataBase 所造成的差異也僅在資料不同的月份。


就我自己多年的程式交易上策略開發與測試的經驗,如果僅僅是資料庫異動所造成的差異,通常只會有很短期間的影響,不會有前後不同時間也被影響的狀況。當然,如果策略訊號的結構摻有以策略本身前面的交易成果為後續動作判斷因素的規則,另當別論。但也只會往後影響,而不會往前影響。

所以,就法意的聲明來說,因為資料庫的差異造成回測報表的不同,且為法意的無心之過,有沒有這個可能性?有!我們不該完全排除這個可能性




但是,從網友取自法意網頁上(如上),兩個有差異的回測報表來看,除了月份報表有三個月的差異外,從年度報表也見到竟然只有 1998 年這年的有一致。

說實在的,以我個人的觀點,於藍玉所 Po 出的不起訴處分書上所云:「被告所辯,尚非無稽,堪以採信」,檢查官倒不見得是一時不查,甚或是有主觀不公的嫌疑。

至於真相是否就是法意自己以前取得的歷史資料品質不佳,或是自動回補資料產生什麼異動(法意也是受害人?)?坦白講,只有法意他們自己知道了。我只想提出一個模擬實驗給大家做參考。

熱門文章