alexliou 發表於 16-3-15 14:21

淺談資料

本帖最後由 alexliou 於 16-3-15 15:24 編輯

一般人講到程式交易就先想到策略, 但要做回測先要有歷史資料,
談策略的帖子很多,但談資料的卻很少, 本文就來談談資料吧

由於期貨合約是有到期日的
只有一定期間的壽命
要建構歷史資料
就需要把不同到期日的期貨合約之交易資訊拼接在一起
組合成連續期貨數據

台指期交易量最大的合約是最近這個月到期的合約(當月期貨)
要把許多個當月資料組合成連續月資料
方法有多種: 無調整 , 後向調整(backward-adjusted), 前向調整(forward-adjusted), 比例調整, 永續調整等

先看看不調整的

(無調整)簡單連續月
當月合約到期後, 直接把次一月份到期的契約接上, 不作任何調整. 例如, 三月份契約於3/16到期後, 3/17直接把四月份合約的價格接上, 目前凱衛和國內期貨商都是提供這種資料. 這種做法很簡單, 但造成了價格不連續性, 用這種資料作回測,回測結果會出現不存在的利潤或損失, 藍色投機客這篇文章有很透徹的剖析
http://www.programtrading.tw/viewtopic.php?f=2&t=65

要克服這個問題, 台灣大多數交易人採取在到期日平倉的做法, 以消除這種windfall profits and losses
但價格的不連續會也會扭曲一些技術指標的值
比如說KD已經在高檔鈍化在除權息旺季逆價差可能100~200點
一個換月鈍化現象立刻消失

而到期日即平倉的做法也會造成策略的不連續性

簡單連續月資料的好處是易於取得且你交易所用的資料就是回測的資料

alexliou 發表於 16-3-15 14:46

後向調整(Backward Adjusted)

後向調整的做法是先選擇一個換月點, 在這一時點,
以新月份合約的價格為基準, 將換月價差加回到所有舊合約的價格上
以消除因換月所造成的價格不連續性

例如, 在同一時點(換月點),
新月份的價格是100, 舊月份的價格是98, 換月價差是2點,
把這2點加回(所有)舊合約價格, 如此一來, 舊合約價格在換倉點也變成100, 價格不連續就消除了
如果這時你做個一買一賣的動作, 買進賣出價格都是100, no gain no loss, 原先虛假的兩點利潤消失了

我認為後向調整法是較佳的方法,但它也有幾個問題:
1. 過去的價格可能變成負數
MC在價格為負時, 所有的訊號都不運作.
台指期若作後向調整, 2003年上半年就會出現指數為負的狀況.
等於是回測最遠頂多到2003上半年, 再長期一點的測試就沒辦法作了

2. 會扭曲使用比例的策略之回測結果
由於歷史價格被改變, 原先8000點的5%是400,
假設後向調整之後8000點調整成5000點, 5%變成250,
回測結果一定不同.

3.與歷史高/低點比較的策略可能也不適用於後向調整的資料(但通道突破策略我仍偏好使用調整後的資料).

若要克服2.與3.的問題, 可以把未經調整的資料放在Data2,
當需要歷史資料的實際價格時去reference Data2 即可.

至於要如何製作Backward Adjusted Data Series呢?
可以使用MC 所提供的Custom Future功能, 製作方法可參考
http://www.coco-in.net/forum.php?mod=viewthread&tid=16794&highlight=back%2Badjusted
http://rane1220.pixnet.net/blog/post/103682878
但這個方法要把每個月份的合約資料留起來, 有點麻煩

或是由外部軟體來產生,我比較偏好這個方法
COCO版友tts提供的很好用,可產生ASCII檔, 再Import至QM裡
http://www.coco-in.net/thread-12861-1-1.html
改版後功能更豐富了
比較遺憾的是換倉日無法選擇, 固定是到期日那天的13:30
但正好MC專業版內建的換倉機制也是這樣   兩個挺配的

但要把調整後的資料跟凱衛或DDE傳進來的資料做串接
並據此下單
在設定上還要下一番功夫

alexliou 發表於 16-3-15 15:05


前向調整(Forward Adjusted)

前向調整的概念和後向調整的概念相同,
只不過它是以舊合約價格為基準點,
把換月價差加到新合約價格上.

好處是歷史價格不會變負的, 可以做很長期的回測.
做出來的結果和用Backward Adjusted資料是一樣的(策略未使用比例).

缺點是其最新價格和現在實際價格不同, 無法據此交易

以上這三種資料, 我自己都會保存, 以配合不同的回測/交易目的

至於其他調整法在實務上很難implement或很少使用,就不談了

kdy0214 發表於 16-3-15 14:34

雖然是以前的資料了,
但還是感謝a大分享

alexliou 發表於 16-3-17 05:50

本帖最後由 alexliou 於 16-3-17 06:00 編輯

近日AlphaGo以4比1打得韓國棋王灰頭土臉, 讓我覺得這類型的資料也值得介紹一下

人工資料(SyntheticData)
What? 人工資料? 又不是真的資料, 不會拿來交易, 有甚麼用?
回測的結果是根據歷史資料做出來的,
而歷史不會重複(至少不會以完全一樣的型態.價格重複一段長的時間),
回測績效好, 不能保證實戰也能成功,
為了驗證策略的有效性, 我們需要一套行為模式與真實資料類似的資料,
產生這種人工資料, 比較常用的是這兩個方法

1. 蒙地卡羅法
這個方法把歷史資料(漲跌點數或報酬率)分成等長的段落(最小可分割到每Bar),
然後隨機組合重新排序, 變成一套新的資料序列.
使用這種資料回測, 對所有根據真實資料而發展的策略都是嚴格考驗.

策略經理人雙周報(四)資金管理一文   有提到如何把此法用在金準備度測試(也就是MDD)
它主要的問題是: 實戰中, 通常較大幅度的下跌發生在前面一段漲升波已累積不小漲幅之後,
故意去把這兩段期間打斷,可能反造成扭曲.
這就是該文中所說"績效並非隨機有前後相關性"
但他還是贊成用此法來做資金準備

comewish 大大則有篇帖子說他反對將蒙地卡羅法運用在MDD估計上
http://www.coco-in.net/thread-9984-1-1.html

2. 數學模型亂數法
此法根據數學模型產生亂數來模擬實際價格走勢.
數學模型甚至可以把"報酬不完全是常態分配", "x%的時間走趨勢,y%的時間走盤整"等...變數考慮進去.
Santa Fe Instiute 的人工股市(Artifitial Stock Market)就是一例.

如果可以用數學模型產生資料,
而且讓你分不出這是電腦產生的還是實際的,
會衍生出許多有趣的話題

a) 線是主力畫的:
市場上一直有人認為, 有黑手在控制漲跌, K線根本主力畫的,
從人工資料的角度言, 這不是不可能,
有人以數學模型產生K線, 並照這個方式走,
線圖看起來很天然, 把大家耍得團團轉.

b)策略機器人對戰 :
假設有兩台電腦對戰, 第一台電腦用數學模型產生線圖以為它可以呼嚨其他player,
但第二台電腦察覺線圖不是隨機的,而且發現了產生資料的方法, 那麼第二台電腦永遠會贏.

c)多個策略機器人互戰 :
通常有實力影響價格的player 不只一個,
他們各自透過其買賣行為自覺地或不自覺的影響價格,
在這種況下, 策略該如何因應?
姜林老師在其"程式交易 方法與實務運用"一書中 P.626-P.633有cover到此一話題.

版友賭神咖啡客常發文主張程式交易無用論,
他認為散戶陽春型的程式交易, 外資主力用更先進的程式交易來算計, 正好殺你個片甲不留.
從人工資料(智慧)角度思考, 不是沒有道理.


songmoney 發表於 21-9-29 15:48

爬文爬到這篇,alexliou 把「換倉調整」講解得非常詳細!
網路上大都只講了要 back adjusted,這篇優缺點,可能遇到的問題都提出來了!
再次感謝分享~

rc76 發表於 23-10-25 10:31

請問alexliou大大是怎麼保存不同adjustment的數據呢? 是存成ascii擋嗎?
頁: [1]
查看完整版本: 淺談資料