2017年11月9日 星期四

Backtect Report 回測報告

今天我們繼續看看在回測報告上可以看到甚麼有用的數據。

除了昨天我們看到的總回報、贏輸次數、平均每次交易回報等等統計外,我們還可以在圖表上看到策略的表現。

第一個圖是組合的資金曲線,我們看到原來這策略在2007年時曾升到25,000以上(本金10,000),但之後無以為繼,表現平平。

第二個圖是Maximum Drawdown,即最大回撤。它告訴我們組合從高位至低位最多回落了多少。這個策略從高位最多回落了60%以上,在風險管理上,絕對是不合格。









































然後,第三個圖是策略在每年及每月的回報統計,可以幫助我們分析策略會不會在甚麼月份做得較好,或哪個年份做得較差,或是有沒有以前做得好,但最近變差了的情況。一般來說,大家都希望一個策略的回報能平均分佈就最好了,表示回報在不同市況都能穩定。







































這裡我們看到除了2008年大跌之外,2012 - 2014年連續三年都是負數。到底是什麼原因呢?找出原因就可以幫助我們優化策略,或最起碼對策略在甚麼市況會做得不好有個心理準備。由於2012 - 2014都是上落市,對於跟勢交易比較不利,容易左一巴右一巴。

第四個圖是每單交易回報的分佈圖,也就是可以一眼看到上次說過的,趨勢策略的回報,是由很多次「小敗」,和少量的「大勝」組成。

之後Trade這裡就是每單交易的明細,沒什麼特別。







































Formula也就是這個策略的程式碼。感覺這些都是Reference,就是告訴你前面報告中的回報表現是怎麼做出來的。



Settings:這裡我們看到有很多設定可以調教,比如說佣金,這裡我們忽略了不計,但它對真實交易回報的影響其實很大,算上佣金的話,相信這個策略的表現會很不理想。

另外,也可以設定買入、和賣出的價錢,現在策略是用收市價交易,也是合理的。但假如是一些較短線的策略,則變得不合理了。



Symbols:就是在哪個(哪些)產品上交易。這次我們只在HSI上測試。



最後是Monte Carlo分析,這裡是比較複雜的概念,還是留待以後再討論吧。






































總結一下,Amibroker 的 backtest 可以很方便地讓我們知道一個策略的績效是怎樣,以及它的盈虧分佈等等的風險特性。我們常常會想到一些交易策略,但到底實際上是否行得通?贏錢還是輸錢?是靠很多次小勝來獲得回報?還是靠一兩次的大勝?做Backtest,跟科學課做實驗十分相似。

2017年11月7日 星期二

Backtest 回溯測試

今天要來試試Backtest的功能怎麼用,而且也來順便測試一下一些傳統的策略到底有沒有用吧!

我們依舊使用上次的策略,收市價升穿250天線時買入,跌穿250天線時賣出。這是簡單的跟隨趨勢策略,以250天線作為長線趨勢的方向,並以收市價升/跌穿作為轉勢的觸發信號。當然我們不會預期這麼簡單的方法會有效,但作為測試,它勝在夠簡單易明。

這次我們也是先在一隻產品上測試,之後再試一籃子的股票。一開始我決定選最有代表性的恆生指數來做測試



這一次測試時段長一點,由2000年開始至今。



開始回測!



沒有結果,出了點問題......






看來回測還需要寫下沽空和平倉的條件,如果我們不作沽空,則要到回測設定裡調整。既然如此,我們就把沽空和平倉的條件都寫吧。

沒有加新的條件,賣出時同時反手沽空,平倉時同時後手買入。即是在任何時間中,都有倉位,不是正在Long,就是正在Short。



這次結果出來了,一大堆買賣的交易紀錄。



每一行是一次完整買賣的盈虧統計,以第一行為例,是一筆Short的交易,10/5/2000沽,兩日後平倉,輸了4%。

第二筆是Long的交易,又輸了5%。

細看一下,原來本金是10,000,第一次交易輸了後,第二次只剩9572去交易。所以說這個回測中,每次交易都是訓身把全部資金投進去的。我想這些本金,或是每次投入資金多少,應該是可以設定的。以後再慢慢找出來逐一測試。

那到底這個策略的表現如何呢?可以在Report這裡看到。



我們看到,在這期間的回報是49%,如果單純 Buy and hold的回報是65%,可說是唔做好過做,出出入入效果更差。但睇真D,原來主要是Short trade的部份輸錢,單計Long Trade係贏97%,比Buy and Hold 好得多。






































這個Report中還有很多不同的數據,比如說它把交易分成兩組,Winner 和 Loser。

我們可以看到這個策略中Loser比Winner多很多。比如在Long trade中,只有12次獲利交易,另外43次都是輸的。可是總括來說回報還是正數,為什麼呢?

原來是因為每次贏的時候都贏得比較多,平均有7.81%,而輸的時候都輸得比較少,平均有1.57%。結果,拉上補下,就贏得了97.5%。

這種輸多贏少(次數),但贏的時候贏得多,輸的時候輸得少(百份比)的表現,是很典型的趨勢策略特徵。之前都是從書中看到的結論,今天終於自己親手驗證了。

這個Report還有很長的部份,我們明天再續。






2017年11月6日 星期一

Scan 找出買賣信號

今日要試的是scan功能。

Scanexploration一樣,都是把符合條件的股票選出來。不同的是,scan可分別設定buy, sell兩個情況的條件。因此股票被選出來時,我們可以知道,到底是根據買入或是賣出信號已被選出的。

讓我們來用一個簡單的買賣系統來測試一下。條件是這樣的:當股價在250天線之上時買入,股價就250先線之下時賣出。








 
一開始我們只看在某一隻股票上出現的買賣信號,比如用0001做例子。因此,在Apply to選*Current,就會只找出目前圖片上的股票的買賣信號。時間就跟上次一樣,由1月開始到現在。


結果出現了一大堆買賣信號,1月到2月尾每天都是sell2月尾開始每天都是buy,很明顯是有問題的。




































想了一想,其實應該是在股價升穿250天線時買入,股價跌穿250天綫時賣出。修改了公式後,再試一次。終於得出比較正常的結果。總共有兩次買入及一次賣出的信號。



在圖表上看,的確是股價升穿和跌穿250天綫的日子和。



然後,我發現原來可以在圖表上顯示出有買入賣出信號的日子。



可以看到綠色箭嘴表示買入,紅色箭嘴表示賣出(雖然有點小)。這樣可以方便我們確定,買賣信號出現的位置,是否和我們想像的一樣。



接下來,我嘗試把公式套用至一籃子的股票。結果也是正常的,每只股票出現自己各自的買賣信號。



既然有了買賣信號,那即是代表可以進行回測,統計一下根據信號作出買賣的表現如何。


明天我們將會測試backtest的功能。

2017年11月3日 星期五

Exploration 選股功能

今天開始,正式進入分析過程。

由於Amibroker功能太多,首要任務,是分清楚不同功能的實際作用到底是什麼。

第一個我搞清楚的,就是exploration。基本上可以簡單理解為選股功能,只要設定好條件,就會篩選出符合條件的股票。

1. 先在編程視窗設定好選股條件,比如收市價在200天線之上。公式很簡單,就是 C >   MA(C, 200),Filter就是用於Exploration的指令。



















2. 然後設定選股範圍(早前我已把港股ticker整理,放進同一個market)


  
3. 再設定時間,我先試試   1 recent bar



簡單的設定,已經可以得出結果。

結果是有814只股票符合條件。



我好奇from to-date到底是什麼意思。結果出來,這些日子中,每天符合條件的股票都會被選出。大家可以看到,同一隻股票,不停地重複出來,但是日期是不同的。



這樣的話,我想主要還是會用 1 recent bar吧。

這樣基本上,選股需要設定什麼都清楚了。剩下來最重要的部分,就是寫好選股的條件。


編寫選股條件,就是把投資邏輯變成電腦能理解的語言。這部分工程量浩大,還是先把功能都瞭解好,再一次過重點學習。

2017年11月1日 星期三

做分析先要有DATA

俾錢買咗軟件之後,做好一切安裝登記的工作,就好似攞到新玩具一樣咁興奮。

進入程式後,它的畫面是這樣的:
內置了幾十隻美股的數據,但只是去到2016年。當我輸入港股的號碼時,則出現這個畫面

















沒有任何東西顯示出來。

現在我大概能理解,Amibroker只是一套分析軟件,沒有數據的話,就是一個沒用的空殼。

由於我的電腦技術不是很強,要自己想辦法找數據實在很困難,所以我決定多花99美元,買下它的數據下載工具Amiquote

這個Amiquote可以幫助從各個網站,如Yahoo, Google Finance下載End of Day (EOD)交易數據。由於現時仍未摸熟軟件的操作,所以暫時不會考慮使用需要付費的實時數據(Real Time Data)

我在Amibroker的這裡打開了Amiquote:



然後它自動下載了現存幾十隻美股的最新數據。



Amibroker內的股價圖也立即更新了。














現在我需要做的,就是加入港股的ticker

起初以為要一個一個打進去,但想想沒理由這麼笨的。最後發現原來,Amiquote可以打開CSV檔,只要上網把整個港股的號碼名單下載下來就可以。

由於yahoo finance中,港股的號碼是用.hk作結尾,如騰訊(0700)0700.hk。所以要在excel內做一番功夫,最後才能saveCSV檔,才能用Amiquote打開。

整理ticker格式的excel,主要是用Concatenate這個Function來做














最後,開另一個Excel檔,把xxxx.HK這行copy and paste過去,再save成CSV檔。






























在Amiquote內打開這個檔案(要在File Type選All Files才看得到):




























把下載日期改成2000年(Yahoo的港股數據最早只到這裡),就可把過去十多年的股價數據都下載進Amibroker的database了。




搞了大半天,終於搞好了。明天應可開始玩玩各種功能。


200天EMA (二)

上次我指出恆指在明年第一季將會回落至200天EMA水平,理據是什麼? 其實主要是運用中值回歸(Mean Reversion)的概念。由1990年至今,恆指未曾試過有一年,指數是完全沒有掂到200天EMA的。換句話說,不論是牛市或熊市,每個日曆年,恆指都會至少一次回到200天...