Author Archives: 發財橘子

程式交易在基金投資上的應用之14~突破中長線的糾結均線

糾結均線突破,是市場耳熟能詳的一個交易策略,它的概念是當短中長期持股者的成本都接近時,一旦股價突破,代表空頭完敗,新的力量帶動了多頭行情。把它用在基金操作上,回測的效果也不錯。

糾結均線突破的腳本如下

input: shortlength(10,"短期均線期數");
input: midlength(20,"中期均線期數");
input: Longlength(40,"長期均線期數");
 input: Percent(2,"均線糾結區間%");
input: Volpercent(20,"放量幅度%");//帶量突破的量是超過最長期的均量多少%
variable: shortaverage(0);
variable: midaverage(0);
variable: Longaverage(0);
variable:yearaverage(0);

if volume > average(volume,Longlength) * (1 + volpercent * 0.01)and volume>1000 then
begin
 shortaverage = average(close,shortlength);
 midaverage = average(close,midlength);
 Longaverage = average(close,Longlength);
 
 value2= maxlist(shortaverage,midaverage,Longaverage );
 value3= minlist(shortaverage,midaverage,Longaverage );
 if Close crosses over value2
 and (value2-value3)*100 < Percent*Close 
 and GetSymbolField("tse.tw","收盤價","W")
>average(GetSymbolField("tse.tw","收盤價","W"),13)
 then ret=1;
 
end;

這腳本加了兩個濾網,一個是成交量也要超過均量一定的百分比,另一個則是空頭市場不使用本策略,我用單一國家ETF及全球產業ETF回測,持有20天後出場,回測報告如下

081501

雖然勝率還不到三戰兩勝,但從累計獲利曲線上來看,一直維持著大漲小回的走勢,七年的總交易次數有341次,平均一個月進場機會約四次,是屬於極具可操作性的策略。

程式交易在基金投資上的應用之13~尋找剛轉彎才剛開始加速的市場

在尋找基金波段操作策略時,從賽車來的靈感是,如果剛轉彎後開始加速,根據慣性定律,只要沒有踫到更大的阻礙,車子會開始沿著這個方向飆一陣子。所以如果去尋找跌勢終止,漲勢剛開始加速的市場,應該也是一個可行的方向。根據這個原理,寫出來的腳本,回測的效果不差。

漲勢加速是什麼概念?

就像下面這張圖

漲勢加速

要怎麼在股價從粉紅色變成橘色時被能夠讓電腦通知我們呢? 最簡單的作法就是算出上漲的角度,當角度愈來愈陡時就代表漲勢加速。

angle的說明

上漲的角度怎麼算?

XS裡有個內建函數Angle,它的語法如下:

計算任意二個日期的走勢角度。
回傳數值=Angle(日期1,日期2)
傳入二個參數:
– 第一個參數是日期1。
– 第二個參數是日期2,需大於日期1。

我們來看一下這個函數的語法

input:Date1(numeric),Date2(numeric);
variable:Date1Bar(0),Date2Bar(0),Date1Price(0),Date2Price(0),_Slope(0);
Date1Bar = getbaroffset(date1); Date1Price =Open[Date1Bar];
Date2Bar = getbaroffset(date2); Date2Price =Close[Date2Bar];
if Date1Bar > Date2Bar then
 _Slope = (Date2Price/Date1Price-1)*100 / (Date1Bar-Date2Bar);
Angle = arcTangent(_Slope);

如果用圖形來看,可以參考下圖

從這個算法來看,angle是正的代表上漲,是負的代表下跌,絕對值愈大表示上漲跌的角度愈大,愈接近零代表處於橫向盤整。

接下來就可以把這個函數應用到漲勢加速上

我寫了一個腳本如下

value1=angle(date[7],date);
value2=average(value1,5);
value3=average(value1,20);
if value2[4]<10
and value2[4]>0
and value2>20
and value2<50
and tselsindex(10,6)=1
and value3<10
then ret=1;

這個腳本的概念就是價位從原本的下跌或盤整變成上漲且上漲的角度在變陡中,我拿它來回測加權指數,雖然出現的次數不多,但勝率超過八成

081101

拿這個腳本,把過濾條件改成以下的腳本,

value1=angle(date[7],date);
value2=average(value1,5);
value3=average(value1,20);
if value2[4]<10
and value2[4]>0
and value2>20
and value2<50
and value3<10
and GetSymbolField("tse.tw","收盤價","W")
>average(GetSymbolField("tse.tw","收盤價","W"),13)
then ret=1;

去操作32個全球產業及單一國家ETF,進場後持有四十天,回測的勝率也接近65%。

081102

 

程式交易在基金投資上的應用之12 BBand

BBand這個指標蠻多人愛用,我試著拿來用在基金波段操作上,效果也不錯。

首先還是跟大家介紹BBand的算法,請先看以下的程式碼

Input: price(numericseries), length(numericsimple), _band(numericsimple);

BollingerBand = Average(price, length) + _band * StandardDev(price, length, 1);

從這兩行code可以了解,bband就是一段區間的移動平均線加上同區間的N個標準差。

接下來就跟大家介紹我寫的波段操作腳本

input:length(20);
variable:up1(0),down1(0),mid1(0),bbandwidth(0);
up1 = bollingerband(Close, Length, 1);
down1 = bollingerband(Close, Length, -1 );
mid1 = (up1 + down1) / 2;

bbandwidth = 100 * (up1 - down1) / mid1;

if bbandwidth crosses above 1 
and GetSymbolField("tse.tw","收盤價","W")
>average(GetSymbolField("tse.tw","收盤價","W"),13)
then ret=1;

這個腳本的概念是在多頭市場當上下Band縮到極致開始放大時,就是波段的進場點。以下圖為例,台灣50在今年四月就出現過這樣的進場訊號。

081001

 

我拿這個腳本去回測我挑出來的32個單一國家及全球型單一產業的ETF,出場點設為進場後20天,回測報告如下

081002

從2010年到現在,共出現103個交易的機會,其中有64次可以獲利出場,最大連續虧損是一成左右,還在可以接受的範圍。

以最近出現訊號的印度為例

081003

BBandwith從底部回升的概念就是在尋找upband與downband之間的差距縮到極致之後的回昇。這種情沿通常是出現在區間修正或盤整結束的時候。

這個交易策略如果能夠輔以更敏銳的出場訊號,應該可以成為更好的交易策略。

 

 

 

 

程式交易在基金投資上的應用之11~KST趨勢確認策略

先前跟大家介紹了這麼多尋找基金買點的策略,我的經驗是,多頭市場抄底是王道,因為多頭市場資金會不斷地留在市場中,尋找下一個標的,這時候跌多了的市場,一旦止穩,往往就能吸引不願追高的資金進駐,特別是在比價的心理下,往往這樣的標的會有補漲行情。今天跟大家介紹的這個KST趨勢確認策略,也是具有這樣的效果。

 

KST趨勢確認指標,是把短中長期的變動率ROC給與不同權重,然後加總而成,寫成指標,腳本如下:

variable:kst(0);
value1=average(rateofchange(close,12),10);
value2=average(rateofchange(close,20),10);
value3=average(rateofchange(close,30),8);
value4=average(rateofchange(close,40),15);
kst=value1+value2*2+value3*3+value4*4;
plot1(kst,"KST確認指標");

這腳本跟加權指數對照圖如下:

2017080201

從這張圖我們可以發現,確認指標在接近50處反轉是大盤由多翻空的訊號,從-50回升則是由空翻多的多頭反攻號角,所以我就把這個指標改寫成一個交易策略如下

variable:kst(0);
 
value1=average(rateofchange(close,12),10);
value2=average(rateofchange(close,20),10);
value3=average(rateofchange(close,30),8);
value4=average(rateofchange(close,40),15);
 
kst=value1+value2*2+value3*3+value4*4;

if kst cross over -50
and GetSymbolField("tse.tw","收盤價","W")
>average(GetSymbolField("tse.tw","收盤價","W"),13)
then ret=1;

這個策略如果拿來回測單一市場及全球產業ETF,出場點設為進場後40個交易日,那麼三年的回測報告如下

2018080202

一年的回測報告如下

2018080203

可以看得出來,不管是一年還是三年,都大致能保持三戰兩勝的績效。

這個策略平均一個月會出兩次的交易機會, 因為KST要跌到-50以下的情況,在大多頭市場並不多見,所以是用在多頭市場抄底特定類型基金的策略。

程式交易在基金投資上的應用之十~多頭鎚子

基金投資要挑那個市場? 很多機器人理專的演算法,在股票的部份,是直接配全球股票型+美國股票型+新興市場股票型就打完收工,這樣的好處是簡單且全面。過去這九篇我介紹的這些程式,是想在股票型基金的配置裡,找到一些方法,可以找到勝率更高的戰術配置方法,讓基金的投資組合裡,有一些試著再把績效拉高一點的標的,今天介紹的這個方法,是K線酒田戰法中,尋找止跌現象的型態~多頭槌子。 這個方法如果回測過往八年,有著三戰兩勝的勝率,而且這個策略輸錢的時候大多是股票大空頭市場的時候,在多頭市場,挑中的標的,都有很高的勝率。

要形成多頭槌子,如下圖,要具備三個條件

多頭槌子

我根據這樣的原則,寫了以下的腳本

if close*1.1<close[30]//近30根K跌逾一成
 and high<close*1.005//幾乎收最高
 and close>open//陽線
 and(open-low)>=2*(close-open)//下影線是實體的兩倍
 then ret=1;

我把這個腳本拿去回測那些全球產業型及單一國家型的ETF,進場後持有40天,回測的結果如下

2017073103

從這個回測報告中可以發現,這腳本能不能用,跟全球股市的榮枯有很大的關係,空頭市場的時候,這個策略是會虧大錢的,但如果是多頭市場,這個策略是真的可以買在低點。

以下圖為例

2017073104

全球電信ETF出現多頭槌子之後,很快的就止跌回昇了。

所以這個策略可以用來在多頭市場中,尋找特定標的市場的低點,然後把符合條件的基金作為戰術配置,在股票投資的配比中,加入這樣的基金,然後透過不斷地抄底的方式,提高績效,增加資金運用效率,以前這麼做很辛苦,要看很多的K線圖,現在有了程式,透過電腦的運算,系統可以每天直接把符合條件的標的送到眼前,甚至直接加入配置,也可以自動把符合獲利了結出場條件的標的賣出。

程式對於機械式配置的貢獻就在於,可以讓基金投資金者,一樣不必花太多力氣作功課,但是可以把一些較高勝率的交易策略,拿來執行戰術配置,讓投資組合中的股票型基金,可以比只持有全球股票型或其他區域型基金,擁有更好的績效。