2016年11月17日 星期四

★股票程式交易SOP:單策略多商品(含程式碼)

     說到策略,最簡單就是把期貨那一套搬過來,但其實股票的交易策略遠比大家想得容易寫,雖然說每一檔股票的「股性」有所不同 (例如金融類股牛皮又盤整期長、營建類股漲的時候又快又急),實在很難寫出單一策略去貫穿所有商品而且檔檔獲利。但是如果不要求檔檔獲利,只求寫出一個策略能打敗8成的商品,這卻不是難事,因為多頭的特性,很容易讓多數股票連續上漲。程式碼如下,在20日移動平均線(月線)上只要突破最近50天的高點就作多,跌破50天則多單出場:


Inputs: len(20),Entrylen(50),Exitlen(50),Money(200000);
Vars:NShare(1);
NShare=intportion(Money/(close*1000));
Condition1=close>Averagefc(close,len);
if Condition1 then buy NShare shares next bar at highest(High,Entrylen) stop;
if Marketposition>0 then sell next bar at lowest(Low,Exitlen) stop;



      在回測上,期貨跟股票是不一樣的,期貨只要注意換月價差及滑價就可以了,而個股則會有現金增減資、除權息的跳空缺口,所以無法達到很精確的回測。但是其實我只要確保實際交易的績效會好過回測,我就可以接受,所以原則上我採用的方式是粗糙的回測,但會確保回測模式很保守。回測時我會做一些假設(目的是創造出保守的回測)


  1. 多單如果因為除權息或增資的缺口而停損出場,就當作是停損。(比實際交易保守)
  2. 雖然是交易台股前一百檔權值股,幾乎不會滑價,但還是設手續費及證交稅為來回0.7% ,現在券商給出的手續費普遍低於5折,來回也不用0.5%。
  3. 去除回測中因為減資而向上跳空產生較大停利的假象(例如2014年4月期間南亞科這檔股票減資所導致回測失真)。
  4. 只作多不做空,因為作空的難度比較高,券源也因券商有所不同。
  5. 台指權值股雖然每年都會有微幅調整,但基本上變動的商品低,所以回測就用目前台指權值股前100名進行回測,實際交易時建議每年跟著變動 。


利用MC進行投組測試(單策略 vs 台指前100)

     回測時間就設定為2005年1月到2016年,測試結果如下,首先我們可以看到一個現象,那就是只要是多頭,隨便買股票都有能力可以賺到,唯一的例外是2016年只漲台積電及台塑等重量牛皮股,賺的錢被很多假突破的股票脫累,即便如此,我回測到今年11月的結果,仍有小賺。

台指前100檔權值股回測 (單位:千元)
年度損益分析(單位:千元)


   一定會有人會問為什麼我要測台灣100權值股,而不去測週轉率高且多頭排列的熱門股,原因有兩個,第一個原因是我想用最保守的方式進行回測,當投資組合裡面有一堆超級難漲的大型股票(例如第一金、彰銀、華南金等牛皮股)時,回測起來還能長期賺錢,那麼策略的可靠度可能會較高;第二個原因則是選股要花很多時間,所以乾脆減少變動,如果每年才增減幾檔股票的投資,我想對於不想花腦筋的人是個不錯的選擇。


     有了基本策略之後,接下來再自己加一些非技術面的濾網,去縮小股票池,例如我剔除股本超過500億的個股,這些股票除非有大趨勢,不然連漲特性會很差,尤其是那些財報普通的官股銀行,公司派不敢炒股,金主也不會去碰,因為炒作成本太高。去除這些牛皮股後,回測如下,可以看到獲利大增40%,回檔也更小了

台指前100權值股回測,股本<500億  (單位:千元)


年度損益分析(單位:千元)



後記:

1. 我是用很笨的策略去測試股票的厚尾,讀者可以自行修改成策,不管交易股票或是股票期貨都一樣適用。
2. 投資股票最重要的不是策略強不強,而是資金利用率,能想辦法把資金利用率調到最高,才是贏家。例如2008年股票有8個月的空頭,股票訊號完全沒有觸發,所以讓很多資金停在銀行中沒有利用到,雖然說當時沒有賺錢已經是市場上的贏家了,但是如果空頭切換做期貨、多頭回來做股票,也是提高資金利用率的方式。


7 留言:

LEO 提到...

原來有這個方法,學到了,謝謝WEN大

匿名 提到...

WEN大謝謝您的分享!請問要怎麼估算需要放多少資金去跑一個投資組合呢?像你的例子是20萬*100=2000萬,是這樣算嗎?

WEN 提到...

因為是現股,沒有槓桿,所以可以參考回測報表中"帳戶所需金額",除此之外,如果使用這種方式交易的話,你只會留比平均持倉資金再多一點的資金,因為股票交易是T+2,今天買進的股票,2天後才會扣款,所以只要確定有足夠的錢,超過帳戶資金,再進行補足即可。

匿名 提到...

我則會選數十支最爛或熊股作回測,如果結果跑贏或勝過買入待有的結果則視為好策略。

WEN 提到...

不用測也知道會勝過買入持有,因為你選的是最爛的熊股。因為有均線濾網,這些股票根本很少進場(自然會勝過買入持有熊股)。

匿名 提到...

那要看你用順勢還是波動策略了,即是用均線(順勢策略)也有機會差於買入持有。進出多少不衡量勝算的可能,只反映策略本質而已...

Pat 提到...

謝謝WEN大的分享。
用Cmoney回測同一個邏輯2008年的dd有到-50%,
實務上似乎不是可行。

張貼留言

如果有私人問題想請教,請透過網站右方『與站長聯絡』之表單,謝謝!

----------------------------------------------------------------------------------------------------
網站聲明(Disclaimer)
本教學網站內所提供之程式碼(包括函數、指標、訊號)屬開放程式碼,用意在於讓使用者學習程式語法之撰寫,使用者可以任意修改語法內容並調整參數。本網站所有之內容(包括文章、影片、歷史紀錄、程式碼、教材)限用於個人學習使用,請勿轉寄、濫用,嚴禁私自串接帳戶交易。
-------------------------------------------------------------------------------------------------