程式交易的各種疑難雜症


一、什麼是程式交易

這標頭很廢話,文章內容也很廢話,但是我覺得有一些很重要的觀念是新手必須知道的(雖然以我的年資好像沒資格寫這類的文章)

程式交易或農場一點稱之為智能交易,國外稱之為演算法交易(AlgoTrading)

在演算法交易中,最基本的就是條件式演算法

也就是說你的程式裡面寫了一些條件,例如由下向上穿過近五根K棒高點就買進,然後停損停利兩百點

高竿一點的可能就會用一些數學的演算法,例如模糊理論、決策樹、類神經網路等方式實踐演算法交易

但是,他一點也不智能

所謂的智能就是程式會自動去學習,然後自己避開可能會虧損的情況

但是就現今的演算法交易而言他是做不到這件事的

即使你用機器學習演算法也一樣

因此,對於現在很多廠商為了推行程式交易而說這東西是智能,我實在是很不以為然


二、有什麼是程式交易做不到的

程式交易並非萬能

他寫不出M頭W底,也很難寫出形態學(三角收斂之類的)

另外承上所說,他無法自動增加條件避開會虧損的情況(當然你可以自己增加條件)

頂尖的主觀交易者比起來他也無法賺到那麼多的錢

他更無法幫你擺脫所有人性的缺點,例如不守紀律,自動拉高甚至關掉停損停利點

所以如果你對程式交易有這些迷思,奉勸你還是早點洗洗睡比較好


三、所以我說那個優點呢?

數落了這麼多程式交易的缺點,他總該有些優點的

程式交易雖然不像主觀可以賺那麼多,但是透過正確的程式交易他還是有可能幫助你穩定獲利的

透過正確的程式設計,你可以知道你的策略的獲利程度以及可能的最大虧損

藉由這樣的方式,你可以在市場上省下許多學費

比起主觀交易,程式交易需要比較多一點硬體投資

除了跑最佳化所需要的硬體,你可能還需要一台24小時幫你盯盤的電腦

這樣一來即使在上班時間你還是可以進行交易

四、程式交易該準備什麼?

你需要一台桌機,一條夠穩的網路,還有根據你的商品準備對應的平台

當然你可以自己用券商API寫一套武器,但是相信我,光是Debug就夠你受的了

因此用現成的平台問題可能會少一點

另外如果是下外匯保證金,你可能會需要一台24小時開機的電腦

若想省下硬體費用,可以選擇使用VPS,因為你開的券商可能是在海外,若使用國內的電腦可能會導致Ping很高

五、如何避免寫出錯誤的程式

在交易的程式設計上,我們應該盡可能的減少使用參數或是邏輯

越複雜的邏輯或參數,越容易使程式overfitting

因此在設計的過程中,一定要設定樣本內與樣本外

設計過程只看樣本內,樣本外做為參考績效

如果你願意,甚至可以將設計過成弄得更嚴苛,將資料分成三等份

不過樣本內的樣本依然最好要包含多頭與空頭市場

今年上完機器學習,我覺得程式交易的設計跟機器學習Model某些方面很像(詳見機器學習的如何選擇模型篇)

我們可以把市場想像成目標函數,而我們寫的策略或是投資組合的loss就是績效*(-1)

在設計上,我們要努力降低loss(提升績效),並且盡可能避免使用過多的參數或條件以減少overfitting的機率

換言之,你當然可以在設計上使用一拖拉庫的指標語法,但是這樣overfitting的機會就會非常高

另外,以這個觀點來說,每一個策略都是一個函數,而你的model就是投資組合

使用越多的函數你的loss越容易降低,同時在OOS(樣本外)的loss也越容易跟IS(樣本內)相同

若這個model能夠適用更多的市場(樣本),那麼他的失效機率就會越低

總結

在交易的程式設計上,我們應該盡可能的減少使用參數或是邏輯