前一篇我們提到量化交易就是藉由觀察分析過去的歷史資料得出某些可能能夠獲利的型態,並且交由電腦回測並更進一步進行自動交易,那麼要辦到這件事情勢必得撰寫程式語言讓電腦知道要執行的任務是甚麼。
那麼很多人會開始卻步「我不會寫程式怎麼辦?」確實學習寫程式語言是一道門檻但天下沒有白吃的午餐,有些人可能會去購買別人已經寫好的交易程式來執行,這些交易程式沒有說不好,它們確實有可能可以幫助你賺到錢,但很難能夠一直有效,且每一支交易程式都有它的生命週期,雖然我們很難去評估一個交易程式的生命週期有多長,但可以確定的是如果市場上有許多人跟你執行一樣的交易程式那麼你就不會賺到錢,想當然如果一個交易程式被放上網路販售應該也會有很多人去購買這個交易程式並執行,因此如果你不會自己去修改交易程式甚至是自行研發新的交易程式,那麼你在這個市場上起跑點就先輸別人了。
那麼該如何學習一門程式語言呢?這裡建議一開始可以去網路上找自已有興趣的指標腳本,會選指標腳本是因為指標可以直接畫在圖上,你可以馬上看到修改後的變化,照著上面抄一遍並且理解它,接下來嘗試修改看看觀察指標在你修改之後有什麼變化,最後照著自已的想法寫一次。
其實現在有許多平台、程式語言針對交易這一塊有直覺的語法及對應的套件已經降低了許多的學習門檻,就算不是本科系沒學過任何程式語言,如果花時間去學習這個技能並掌握還是有機會能夠透過量化交易的技巧來幫助提升績效。
目前市面上主流進行量化交易台股的方式有兩個平台(Multichart、XQ)及一個程式語言(Python),下面會介紹這三個方式各自的優缺點供大家參考。
1.Multichart
使用Multichart這類交易平台的最大好處就是不用像python這些程式語言一樣所有功能都需要自行開發,交易介面、即時報價、下單、回測、歷史資料都已經包辦好,熟悉平台的使用方式後,你只需要專注於交易策略的開發上。
Multichart使用的程式語言是PowerLanguage,這是一個已經針對交易進行過語法優化,讓程式寫起來非常精簡可以讓學習成本大大的降低,例如:
// 今天的收盤價大於昨天最高價設為condition1
condition1 = close > high[1];
// 如果condition1的條件符合,那麼就在圖上標出今天收盤價
if condition1 then plot1(close);
// 定義變數ma10, ma20
vars: ma10(0), ma20(0);
// 計算10期收盤價簡單移動平均
ma10 = average(close, 10);
// 計算20期收盤價簡單移動平均
ma20 = average(close, 20);
// 如果ma10突破ma20,以市價買入
if ma10 cross over ma20 then buy next bar at market;
// 如果ma10跌破ma20,以市價賣出(平倉)
if ma10 cross below ma20 then sellshort next bar at market;
除此之外Multichart也是一個功能強大的看盤軟體,除了技術指標外也能直接在圖表上畫圖並進行圖表交易,會撰寫PowerLanguage的話更可以開發自已看盤要使用的技術指標。
總的來說Multichart可以說是目前市面上要交易台股最強大的交易平台,但缺點就是收費不算便宜。Multichart交易台股主要有兩種版本,凱衛代理中文專業版、券商版下圖1進行各版本比較。
2.XQ
XQ為台灣嘉實資訊所開發的交易平台與Multichart相似,交易所需的主要功能都有,撰寫交易策略的語言XScript也與Multichart類似基本上兩者的語法可以互通,只需修改部份的語法就可以在另一個平台使用,以上面Multichart的例子來舉例,讀者可以自行去跟PowerLanguage做比較可以發現跟Multichart大同小異,這也是使用XQ的優勢之一。
// 今天的收盤價大於昨天最高價設為condition1
condition1 = close > high[1];
// 如果condition1的條件符合,那麼就在圖上標出今天收盤價
if condition1 then plot1(close);
// 定義變數ma10, ma20
var: ma10(0), ma20(0);
// 計算10期收盤價簡單移動平均
ma10 = average(close, 10);
// 計算20期收盤價簡單移動平均
ma20 = average(close, 20);
// 如果ma10突破ma20,以市價買入
if ma10 cross over ma20 then setposition(1, market);
// 如果ma10跌破ma20,以市價平倉
if ma10 cross below ma20 then setposition(0, market);
使用XQ的好處基本上與Multichart一樣可以進行交易策略回測、自動交易、當一個功能強大的看盤軟體、自動選股等但Multichart的最佳化演算及dll外掛這些好用的功能XQ目前沒有支援,再來就是相對於Multichart,XQ的回測、選股功能筆者目前使用起來並不穩定,實際交易的功能除了一些問題,例如下午1:25後就不會送單如果是執行當沖策略就需要多多注意,其他就沒有什麼太大的問題。
筆者目前是選擇XQ來進行交易,原因是因為介面操作較Multichart容易許多,雖然有些功能不太穩定但多多注意好一些小問題提前把它排除後實際交易是沒有太大問題的,再來他的最大優勢就是收費並不會太貴並且大多數功能都能夠免費體驗。因此僅管XQ目前自由度及穩定度有些缺點,但對於一般的使用者來說是很適合的平台。以下圖2、3為XQ各模組功能比較,這裡只列出一般要進行現貨、期權交易比較會使用到的功能模組。
3.Python
如果要直接用程式語言進行交易,而不透過交易平台的話python還是目前很好的選擇,你當然可以使用其他程式語言例如R、C、golang、javascript、etc…,但是python的套件庫是最為齊全的,包含將數據可視化、繪製K線、技術指標等等的功能都有相對的套件可以使用,學習曲線是最為平滑的,而各大券商也幾乎都會優先提供python的程式範例及api供使用。
使用程式語言進行量化交易的話通常是為了取得最大的靈活性、自由度,因為任何的功能你都可以自由新增、修改成適合你自已的樣子,但缺點就是入門的門檻就相對很高,前面提到的交易平台的功能比如回測、選股、下單、自動交易、線圖甚至是即時價格資訊都必需要自行開發,但是相對於交易平台你能夠優化的空間就非常大,這種方式就適合有一定程式開發程度且追求效能、靈活性且有一定技術能力的人。