當XS遇到AI~ 從特徵值的選取開始

By | 2017-10-26

第一檔用人工智慧操盤的ETF AIEQ.US上市後,受到媒體的瘋狂吹捧,說這檔ETF輕鬆就打敗華爾街,結果從本週一起,這檔ETF就像吃了瀉藥一樣,跌破掛牌價,感覺用AI來操盤好像沒有那麼容易,但去年績效最好的前十大避險基金,又有八檔是量化型基金,好像運用電腦及數據分析來操作才是王道,到底要怎麼正確看待AI在投資操作上的應用?  我想透過一系列的實際例子來跟大家分享,今天是第一篇,先跟大家談談程式交易跟AI的前世今生。

首先,先請大家看一個我曾分享過的指標腳本

input:day(20);
input:ratio(30);
variable:count(0),x(0);
value1=GetField("總成交次數","D");
value2=average(value1,day);
value3=GetField("強弱指標");
value5=GetField("外盤均量");
value6=average(value5,day);
value7=GetField("主動買力");
value8=average(value7,day);
value9=GetField("開盤委買");
value10=average(value9,day);
value11=GetField("資金流向");
value12=average(value11,day);
value13=countif(value3>1,day);
value14=average(value13,day);//比大盤強天數
value16=GetField("法人買張");

count=0;
if value1>value2*(1+ratio/100)
then count=count+1;
if value13>value14*(1+ratio/100)//比大盤強的天數
then count=count+1;
if value5>value6*(1+ratio/100)
then count=count+1;
if value7>value8*(1+ratio/100)
then count=count+1;
if value9>value10*(1+ratio/100)
then count=count+1;
if truerange> average(truerange,20)//真實波動區間
then count=count+1;
if truerange<>0
then begin
if close<=open
then
value15=(close-low)/truerange*100
else
value15=(open-low)/truerange*100;//計算承接的力道
end;
if value15>average(value15,day)*(1+ratio/100)
then count=count+1;
if volume<>0
then value17=value16/volume*100;//法人買張佔成交量比例

if value17>average(value17,10)*(1+ratio/100)
then count=count+1;

if value11>average(value11,10)*(1+ratio/100)
then count=count+1;
x=0;
value18=summationif(close>=close[1]*1.02,x,5);
if value18>=2 
then count=count+1;//N日來漲幅較大的天數



value19=GetField("融資買進張數");
value20=GetField("融券買進張數");
value21=(value19+value20);
value22=average(value21,day);
if value21<value22*0.9 //散戶作多指標
then count=count+1;

plot1(average(count,5),"股性綜合分數指標");
plot2(3);

這個指標跟個股的對照圖如下

102601

在這個腳本裡,我的作法是

1.先挑出一些我覺得會影響股價的特徵值,把這些數據叫出來

2.把這些數據取20 日平均。

3.當最新一筆數字比20日平均值高出一定的比例時,就加一分

4.統計每一天這些特徵值合計得多少分

5.透過經驗法則,把這個指標寫成交易策略,然後透過回測去找出勝率最高的參數及適用的商品。

以上是一個常規的程式交易模型的開發過程。整個過程就像下面這張圖

程式交易的分析模式圖

在程式裡,我們安排在什麼情況下,該項特徵值的計分可以從 0分變成1分,其次是每一個特徵值在合計分數裡,是一樣重要的,所以加總分時沒有特別那個項目被加權,最後再把總分透過一個激發函數,決定當總分怎麼變化時,預測市場會上漲。

接下來我們的作法是透過回測,去調各種參數,然後找出勝率最高的參數及應用的商品。

這麼多年來,程式交易咱們都是這麼做的。

 

那麼人工智慧跟程式交易的差別在那呢?

人工智慧的作法是反過來,拿歷史資料來當樣本,去運算什麼參數組合下,預測的精準度最高,這樣的好處是,我們只要找出有意義的特徵值,那個特徵值要如何計分,這些特徵值合在一起時,權重如何拿捏,都是拿歷史資料來找出預測精準度最高的值。

 

程式交易與人工智慧模型的差別就在這裡,可以讓,程式交易是人工智慧模型的先期準備步驟,我們透過程式交易找出有意義的特徵值,這些特徵值要如何協同作出對未來行情的預測,程式交易是給定參數後,跑回測去算勝率,人工智慧則是透過不斷的微調參數後找出預測精準度最高的那一組參數。

以上大致是這兩者間求最佳參數的不同過程,接下來後面我再跟大家舉例人工智慧如何解上面這道題。