兩年來,介紹了不少的交易策略,有客戶問我,能不能找出某策略對某一檔股票特別管用? 這陣子我正在學習如何把人工智慧用到交易策略裡,這當中有用到一個很有名的機率理論: 貝氏定理,這個理論正好可以拿來計算某策略對某股票的勝率,今天我就舉外資買超超過兩百張作為一個例子,運用貝氏定理,計算那一檔股票在外資買超的隔天,上漲的機率較大。
在學貝氏定理的時候,教科書教我們,如果有夠多的樣本,可以統計出人們得感冒的機率,人們咳嗽的機率,人們咳嗽且感冒的機率,那就可以算出人們如果咳嗽的話,得到感冒的機率有多大?
我以外資前一日買超跟隔天股價收高作例子,來呈現貝氏定理的概念
當我們可以算出近N日來有那些天收高,算出近N日有那天的前一天外資買超,也算出近N日那些收高的日子裡有多少天的前一天外資買超,那麼根據貝氏定理,就可以算出如果前一天外資買超,那麼當天收高的機率有多高?
於是我寫了以下的腳本
input:n(500,"樣本數"); settotalbar(n); value1=GetField("外資買賣超","D"); variable:x1(0),y(0),c1(0),c2(0),c3(0); if value1[1]>200 then begin x1=1; c1=c1+1; //外資買超的次數 end else x1=0; if close>open then begin y=1; c2=c2+1; //上漲的次數 end else y=0; if value1[1]>200 and close>open then c3=c3+1; //上漲且外資買超的次數 value2=c1/n; //外資買超的機率 value3=c2/n; //上漲的機率 value4=c3/c2;//收紅且外資買超的機率 value5=value4*value3/value2; if countif(value1[1]>200,n)>20 then ret=1; outputfield(1,value5*100,0,"外資前一日買超隔天收高的機率"); outputfield(2,c1,0,"上漲次數"); outputfield(3,c2,"外資買超次數"); outputfield(4,c3,0,"上漲且外資買超");
拿這個腳本去跑那些有一定的天數外資曾買超過的股票(我這裡是設20 天),然後根據其收高的機率排序,有如下圖:
接下來我們就來印證看看這十檔股票是不是真的在外資買超的隔天會收高
我寫了一個警示腳本如下:
value1=GetField("外資買賣超","D"); if value1[1]>200 then ret=1;
拿這個腳本去回測,用上面這十檔跑過去一年,一天就出場,交易成本設成0,回測的結果如下:
回測報告顯示,如果只拿這十檔股票,在外資買超後進場,確實會賺錢,但其實這樣的結果不會太意外,因為我們用了過去500根當樣本去算機率,這500根也包括了回測時用的最近這一年的200多根。
所以如果要透過貝氏定理來找出某策略很適用的個股標的,有三個數字要很要求
- 樣本數一定要夠長
- 符合策略條件的次數要夠多
- 貝氏理論算出來的預測機率要夠高
這樣的方法還蠻適合用來找出那些股票適合那些常出訊號的交易策略,對於那些買進訊號不常出現的策略,因為可以用來計算的樣本不夠多,可能就不合用了。
在實際應用上,建議再放到模擬交易裡去跑一跑,看看是不是像回測的數字這麼好。