決策樹在程式交易上的應用

By | 2016-04-19

 

我每天都會把當天漲停的股票看一遍,觀察這些股票有沒有什麼樣的共同特徵? 後來我發現,這些股票當中,我比較買的下手的,基本上有一些同通點,於是,我試著用決策樹的思考流程,寫成一個策略腳本。

決策樹是專業經理人們,在作決策時,常用的工具,其目的在於找出要達到目標(股票漲停),所該選擇機率最高的決策路徑,在這個路徑上,有多個選擇的節點,在每個節點,必須作出對的選擇,才能最後得到最佳的方案。

舉個例子,大陸有個女生在決定是否與相親對象見面時,作了以下的決策樹

041902

這就是很典型的決策樹。

套用這樣的思考方式,我想要尋找的股票,我先畫出一個決策樹如下:

041901

我的思考如下:

1.我發現比較漲得兇的股本都不大,有個好消息,往往能貢獻較高EPS,所以我先設定最後我要的股票,股本要小於50億元。

2.要吸引市場追價,基本面要有一定的想像空間,所以我希望的基本面是最近一個月營收mom或yoy兩位數成長,或是毛利率成長。

3.我希望它的走勢

A.比大盤強

B.資金流入

4.我希望它在盤中

A.K棒中長紅

B.成交量超過千張

C.創盤中新高

根據上述的思考,我把它改寫成以下的腳本:

value1=q_CurrentCapitalin100Million;//股本:單位億元
value2=q_GrossMarginRate;//毛利率
value3=GetField("資金流向");
value4=GetField("強弱指標");
value5=GetField("投信買賣超");
value6=q_RevenueYoY;//營收年增率
value7=q_RevenueGrowth;//營收月增率
if value1<50//股本小於50億
then begin
if value6>9 //營收年增率兩位數成長
or value7>9//營收月增率兩位數成長
or value2>value2[1]//毛利率成長
then begin
if value4>0//比大盤強
and value3>average(value3,10)//資金淨入
then begin
if close>close[1]*1.02//K棒中長紅
then begin
if volume>1000//成交量大於1000張
then begin
if close=high//創盤中新高
then ret=1;
end;
end;
end;
end;
end;

 

在這個腳本裡,我用了大量的 if ……………then begin…………..end;

也用了and 跟or

透過這些關係運算子及流程控制元素,就可以完成一個決策樹。

各位不妨也試試自己先畫出一個決策樹,然後再根據上述的寫法,完成自己專屬的選股及交易策略