Author Archives: 發財橘子

學程式交易語法的終南捷徑

隨著當沖交易佔成交量比重的節節高昇,愈來愈多的交易者試著透過程式交易來賺取電光火石間的差價,但在學會基本的變數,參數等概念之後,往往不知從何開始寫出第一個自己的程式,人家說從無到有很難,從模仿中創新比較容易,所以XS的編輯器裡有內容大量的參考腳本,透過複製,貼上就可以有大量的腳本可以開始修改成自己的交易策略。

包括指標,選股,警示,函數,都有大量的內建腳本可以供參考,這些腳本都放在編輯器左欄”系統”這個目錄底下(如下圖)

腳本樣本區

並且根據腳本的屬性分門別類的放在不同的子目錄底下

腳本目錄

例如以目前最紅的當沖策略來說,在編輯器左欄上方點選”警示”這個頁籤,出現上圖最左邊的樹狀子目錄時,按下當沖交易型這個子目錄,就會出現像下圖這樣所有32個當沖交易的參考腳本都會列出來,看上那一個,快點兩下,腳本就會呈現在編輯區裡了

當沖腳本

接下來在編輯的選項裡選”全選” ,”複製”,”貼上”就可以把這個腳本貼到自己新增的腳本裡,然後就可以隨您修改了。

模仿是創新的開始,有現成的程式碼可以參考,千萬別客氣。

 

關於跳空的三個策略

初學程式交易時,寫不了浩然壯闊的大作,僅能用開,高,低,收,成交量這五個欄位,東拼西湊,期能有所收穫。彼時,光跳空相關的策略,就寫了不少,自己覺得效果不錯的,有三個,今天就來跟大家介紹這三個跟跳空有關的策略。

第一個策略叫跳空後的補空,概念如下

1.前一日跳空上漲2%以上

2.今天補空2%以上

3.100日均量超過500張

腳本如下:

if open[1]>close[2]*1.02
and open[1]=low[1]
//前一日跳空
then begin
if close*1.02<=open[1]
//補空2%
and average(volume,100)>500
then ret=1;
end;

 

第二個策略是加速趕底式的跳空

條件如下

1.前20個交易日下跌超過一成

2.前一日下跌

3.開盤跳空重挫5%

腳本

if close[1]<close[2]
and open*1.05<close[1]
and close[20]>close*1.1
then ret=1;

第三個策略是個股隨大盤跳空大跌

條件如下

1.前一日下跌

2.開盤跳空大跌超過5%

3.當天大盤也跳空下跌

腳本
if close[1]<close[2]
and open*1.05<close[1]
and GetSymbolField(“tse.tw”,”開盤價”)
<GetSymbolField(“tse.tw”,”收盤價”)[1]
then ret=1;

 

這三個跳空的腳本,寫起來都很短 ,介紹給大家。

開發彼此無相關的複合策略

書上市後,好像在辦人生交友回顧會,以前的老戰友看完書,考了我一題: 你覺得用技術面,籌碼面,還是基本面寫交易策略比較有用?? 是用1分鐘線有用?還是日線有用? 還是從頭到尾用週線就好?(老戰友是週線應用天王),我的腦海裡想起一首伍佰的歌:”台灣製造”,裡頭有一句歌詞叫作

“攏乎咱摻摻做伙”

摻摻作伙

沒錯,根據機率學,如果彼此沒什麼相關性的交易策略,都出現買進訊號,那麼這時候進場買進的勝率,應該要更高才對。

以昨天的雲端策略中心出的訊號為例

3317

昨天一開盤,多次到頂而破這個從技術面出發的策略,出了好幾個訊號,但只有尼克森也同時符合主力默默收集籌碼後攻堅這個籌碼面的交易策略,結果尼克森是所有昨天多次到頂而破跳出來的股票裡,走勢最強的。

再例如,我之前就有聽說過,有個老師最拿手的一招,就是挑出主力買超且BBand出現買進訊號的股票。

我單獨寫了一個bband的進場腳本

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

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

if linearregslope(up1,10)[1]<0
and linearregslope(down1,10)[1]>0
and bbandwidth[1]*1.1<average(bbandwidth,20)[1]
and close crosses over mid1
and close crosses over highest(high[1],2)
then ret=1;

用這腳本去跑過去一年的所有股票,回測報告如下,

112101

勝率是48.21%,如果我加上主力前一日買超大於800張這樣的籌碼面條件,腳本如下

condition1=false;
condition2=false;

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

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

if linearregslope(up1,10)[1]<0
and linearregslope(down1,10)[1]>0
and bbandwidth[1]*1.1<average(bbandwidth,20)[1]
and close crosses over mid1
and close crosses over highest(high[1],2)
then condition1=true;

value1=GetField("主力買賣超張數");
if value1[1]>800
and volume>=average(volume,20)*1.3
then condition2=true;
if condition1 and condition2 then ret=1;

這時同區間回測出來的交易次數只剩下11次,但其中8次賺錢,勝率超過72%

112102

這一年的數據來看,BBAND的買進訊號,如果考慮到前一晚主力有大買超,勝率會比較高。不過這個策略如果回測的時間拉長,其實勝率也就五成上下,應該是沒有市場傳的那麼神勇。這也是自己寫腳本自己回測的好處,任何聽到的策略,都可以實地測看看。

如果要說技術面與籌碼面整合的不錯的交易策略,小弟倒是可以提供一個,先來看腳本

//全部股票,出場設20天
input:period(20);
value1=GetField("分公司賣出家數")[1];
value2=GetField("分公司買進家數")[1]; 

if linearregslope(value1,period)>0
//賣出的家數愈來愈多
and linearregslope(value2,period)<0
//買進的家數愈來愈少
and
 close*1.05<close[period]
//但這段期間股價在跌
and 
close*1.03<close[1]
//今天又跌超過3%
and close*1.5<close[100]
and tselsindex(10,6)=1
then ret=1;

從這腳本就可以看出,我們是在尋找那種股價在近百日大跌五成但近十日主力卻逆向在收集籌碼的股票,把這個腳本去回測過去五年的所有股票,20天後出場,勝率超過六成,如果持有超過四十天,勝率更超過65%。

大跌後的主力收集回測報告

這個策略是在尋找那些股價大跌後,主力有沒有重新回補的股票,例如下面這張圖

112103

這個策略實際操作起來,是靠大賺來頂勝率沒有非常高的缺點,如果能輔以基本面的研究,過濾那些基本面有疑慮的股票,應該可以做的更好。

以上大致是我摻摻作伙的操作方式,大抵上就是把技術面跟籌碼面的策略一起考慮進來,濾出來的股票再從基本面去double check。

摻摻作伙,我覺得還行,盍興乎來!!

 

 

個股儀表板step by step

每個人總有不只一個的進場標準,如何讓多個標準協同作業? 大家都有不同的自由心證法,透過程式語法,我們可以把不同的進場標準在K線圖中標示出來,從圖上進場點的標示分佈及密度來作決策。

有些程式交易者,認為交易愈簡單愈好,所以找出一個進場的標準就夠了,剩下的交給交易紀律及資金管理即可,加上其他的濾網往往僅是為了回測的最佳化,甚至可能過度最佳化。

我個人的經驗則是,如果有幾個彼些不相關的進場標準,都同時或相繼出現交易訊號,其可信度是會提高的,最常舉的例子是當我們感冒的時候,可能發燒,喉嚨痛,流鼻涕,咳嗽,全身無力,冒冷汗,如果只是發燒,或只是咳嗽,那麼不一定是感冒,但如果上面的症狀都相繼發作,那麼感冒的機率就大增了。

 

基於這樣的思考,我在三週學會程式交易這本書的實戰篇裡,提出了一個”個股儀表板”的概念,透過自訂指標的程式撰寫,在個股的K線圖上,把不同的進場訊號標示出來,讓我們可以隨時檢視,那些股票相繼且密集的出現進場訊號。

 

我在書裡舉了以下的例子

{
指標說明
個股儀表板演化的交易策略
收錄於「三週學會程式交易:打造你的第一筆自動化交易」 330頁 https://www.ipci.com.tw/books_in.php?book_id=724 } condition1=false; condition2=false; condition3=false; condition4=false; condition5=false; condition6=false; condition7=false; condition8=false; condition9=false; condition10=false; switch(close) begin case >150: value5=low*0.9; case <50 : value5=low*0.98; default: value5=low*0.95; end; //==========日KD黃金交叉================ input: _TEXT1("===============","KD參數"); input: Length_D(9,"日KD期間"); variable:rsv_d(0),kk_d(0),dd_d(0),c5(0); stochastic(Length_D, 3, 3, rsv_d, kk_d, dd_d); c5=barslast(kk_d crosses over dd_d); if c5=0 and c5[1]>20 then condition1=true; if condition1 then plot1(value5,"月KD高檔鈍化且日KD黃金交叉"); //============內外盤量比差==================== variable:c3(0); value6=GetField("內盤量");//單位:元 value7=GetField("外盤量");//單位:元 if volume<>0 then begin value8=value7/volume*100;//外盤量比 value9=value6/volume*100;//內盤量比 end; value10=average(value8,5); value11=average(value9,5); value7=value10-value11+5; c3=barslast(value7 crosses over 0); if c3=0 and c3[1]>20 then condition2=true; if condition2 then plot2(value5*0.99,"內外盤量比差"); //===========淨力指標============== input: _TEXT2("===============","淨力指標參數"); input:period2(10,"長期參數"); variable:c4(0); value12=summation(high-close,period2);//上檔賣壓 value13=summation(close-open,period2); //多空實績 value14=summation(close-low,period2);//下檔支撐 value15=summation(open-close[1],period2);//隔夜力道 if close<>0 then value16=(value13+value14+value15-value12)/close*100; c4=barslast(value16 crosses over -4); if c4=0 and c4[1]>20 then condition3=true; if condition3 then plot3(value5*0.98,"淨力指標"); //===========多頭起漲前的籌碼收集================ variable:c2(0); value1=GetField("分公司買進家數"); value2=GetField("分公司賣出家數"); value3=value2-value1; value4=countif(value3>20,10); c2=barslast(value4>6); if c2=0 and c2[1]>20 then condition4=true; if condition4=true then plot4(value5*0.97,"籌碼收集"); //===========法人同步買超==================== variable: v1(0),v2(0),v3(0),c1(0); v1=GetField("外資買賣超"); v2=GetField("投信買賣超"); v3=GetField("自營商買賣超"); c1= barslast(maxlist2(v1,v2,v3)>100); if c1=0 and c1[1]>20 then condition5=true; if condition5=true then plot5(value5*0.96,"法人同步買超"); //========DIF-MACD 翻正============= input: _TEXT3("===============","MACD參數"); input: FastLength(12,"DIF短天數"), SlowLength(26, "DIF長天數"), MACDLength(9, "MACD天數"); variable: difValue(0), macdValue(0), oscValue(0); MACD(weightedclose(), FastLength, SlowLength,MACDLength, difValue, macdValue, oscValue); variable:c6(0); c6=barslast(oscValue Crosses Above 0); if c6=0 and c6[1]>20 then condition6=true; if condition6 then plot6(value5*0.95,"DIF-MACD 翻正"); //========資金流向====================== variable: m1(0),ma1(0),c7(0); m1=GetField("資金流向"); ma1=average(m1,20)*1.5; c7=barslast(m1 crosses over ma1 and close>close[1]); if c7=0 and c7[1]>20 then condition7=true; if condition7 then plot7(value5*0.94,"資金流向"); //=========總成交次數================ variable: t1(0),mat1(0),c8(0); t1=GetField("總成交次數","D"); mat1=average(t1,20)*1.5; c8=barslast(t1 crosses over mat1 and close>close[1]); if c8=0 and c8[1]>20 then condition8=true; if condition8 then plot8(value5*0.93,"成交次數"); //=========強弱指標================== variable:s1(0),c9(0); s1=GetField("強弱指標","D"); c9=barslast(trueall(s1>0,3)); if c9=0 and c9[1]>20 then condition9=true; if condition9 then plot9(value5*0.92,"強弱指標"); //============開盤委買================ variable:b1(0),mab1(0),c10(0); b1=GetField("主力買張"); mab1=average(b1,10); c10=barslast(b1 crosses over mab1); if c10=0 and c10[1]>10 then condition10=true; if condition10 then plot10(value5*0.91,"主力買張");

用這個腳本畫出來的圖如下圖

個股儀表板

這個程式它的步驟有幾個

一,把每一個進場標準都視為一個condition,有多少個標準就設多少個,每一個condition的default值都是false。

二,依不同價位設置進場點的標示位置,

三,開始根據進場標準,在condition從false變成true時把進場標示標在當根K棒的底下,用Barslast來過濾同一個訊號必須是20天來第一次出現的

 

根據這些步驟,舉一個更容易理解的例子,如果把移動平均線黃金交叉,動能指標突破零,9K突破9D,以及6日RSI突破12日RSI,DIF-MACD轉正視為五個不同的進場標準,那麼包含這四個進場標準的個股儀表板就可以像下面這個腳本的寫法

//把每一個進場標準都視為一個condition,
//有多少個標準就設多少個,
//每一個condition的default值都是false。
condition1=false;
condition2=false;
condition3=false;
condition4=false;
condition5=false;
//依不同價位設置進場點的標示位置
switch(close)
begin
 case >150: value5=low*0.9;
 case <50 : value5=low*0.98;
 default: value5=low*0.95;
end;
//開始根據進場標準,
//在condition從false變成true時
//把進場標示標在當根K棒的底下。
//用Barslast來過濾同一個訊號必須是20天來第一次出現的

//==========日KD黃金交叉================
input: _TEXT1("===============","KD參數");
input: Length_D(9,"日KD期間");

variable:rsv_d(0),kk_d(0),dd_d(0),c1(0);

stochastic(Length_D, 3, 3, rsv_d, kk_d, dd_d);
c1=barslast(kk_d crosses over dd_d);
if c1=0 and c1[1]>20 then 
 condition1=true;
if condition1 then
 plot1(value5,"月KD高檔鈍化且日KD黃金交叉");

//========DIF-MACD 翻正=============
input: _TEXT3("===============","MACD參數");
input: FastLength(12,"DIF短天數"), SlowLength(26, "DIF長天數"), MACDLength(9, "MACD天數");
variable: difValue(0), macdValue(0), oscValue(0);
MACD(weightedclose(), FastLength, SlowLength,MACDLength, difValue, macdValue, oscValue);
variable:c2(0);
c2=barslast(oscValue Crosses Above 0);
if c2=0 and c2[1]>20 then
 condition2=true;
if condition2 then
 plot2(value5*0.99,"DIF-MACD 翻正");

//========移動平均線黃金交叉======================
variable: c3(0);
c3=barslast(average(close,5)cross over average(close,20));
if c3=0 and c3[1]>20 then
 condition3=true;
if condition3 then
 plot3(value5*0.98,"移動平均線黃金交叉");
 
//=========RSI黃金交叉================
variable: c4(0);

c4=barslast(RSI(close,6) crosses over rsi(close,12));
if c4=0 and c4[1]>20 then
 condition4=true;
if condition4 then 
 plot4(value5*0.97,"RSI黃金交叉");
 
//=========動能指標==================
variable:c5(0);
c5=barslast( momentum(close,10) crosses over 0);
if c5=0 and c5[1]>20 then
 condition5=true;
if condition5 then
 plot5(value5*0.96,"動能指標");

這樣的腳本可以畫出下面這樣的圖

121

透過這樣的視覺化作法,就可以把您私房的進場標準,一一標示在K線圖上,這樣就隨時可以檢視自選股符合那些您自設的進場標準了。

 

試著用程式來描述型態之一 見底強勢回昇

老市場看圖看久了,累積了不少江湖智慧,給他一張圖,他能說出很多故事,但每天一檔一檔股票地找有故事的圖,挺累人,接下來這系列,我試著把一些老市場教過我的看圖技巧,轉換成交易語法,讓電腦來幫我們找出符合描述條件的圖。

首先,先跟大家介紹的是下面的這個抄底型態

 

見底型態一

這張圖歸納起來,描述的概念有以下幾點

1.股價一再破底,低點愈來愈低。

2.跌到最低點後出現急拉,且高點突破上一波低點,並且漲幅超過前一波反彈高點的一半

3.拉回跌破前一波低點後立即以長紅棒再次突破前一波低點,此時是進場訊號

4.股價如果持續上漲且突破前一波高點,即為確認訊號

根據上述的條件,我寫的腳本如下

input:period(25);
var:h1(0),h2(0),low1(0),low2(0),low3(0),hb1(0),hb2(0),lowb1(0)
,lowb2(0),lowb3(0);
low1=lowest(close,period);//最低點
h1=highest(close,period);//最高點
lowb1=lowestbar(close,period);//最低點所在的bar
hb1=highestbar(close,period);//最高點所在的bar
low2=swinglow(close,period,3,3,2);//第二低點
lowb2=swinglowbar(close,period,3,3,2);//第二低點所在的bar
low3=swinglow(close,period,3,3,3);//第三低點
lowb3=swinglowbar(close,period,3,3,3);//第三低點所在的bar
h2=swinghigh(close,period,3,3,2);//第二高點
hb2=swinghighbar(close,period,3,3,2);//第二高點所在的位置
value1=h1-low1;//計算最後一波下跌的長度
value2=h2-low1;//計算第一波回昇的長度
if lowb2=nthmaxlist(1,hb1,hb2,lowb1,lowb2,lowb3)
and hb1=nthmaxlist(2,hb1,hb2,lowb1,lowb2,lowb3)
and lowb1=nthmaxlist(3,hb1,hb2,lowb1,lowb2,lowb3)
and hb2=nthmaxlist(4,hb1,hb2,lowb1,lowb2,lowb3)
//設定各高低點的相對位置
and close[60]>value1*1.2
//波段大跌2成以上
and value2>value1*0.5
//回昇第一波要大於左頂到最低點的一半
and h2>low2
//回昇第一波的高點要大於左底
and close cross over low2
then ret=1;

寫出來的腳本,可以出像下面這樣的股票

樣圖

拿這個腳本去回測過去七年所有的股票,出場點設為進場後20天,結果一共出現了80次的交易訊號,但其中不到四成會賺錢,顯示這不是常出訊號的型態,也不是一個放諸四海皆準的策略,但如果拿高股利或高ROE的股票去回測,七年倒是出現七次交易訊號,其中有五次可以獲利出場。

這種抄底型的策略還是比較合適用在績優股,但只有七個樣本,顯然我的條件設的太嚴了一點,大家或許用這個腳本再去調整成對您更有意義的腳本

 

 

 

 

葛拉罕留下來的投資智慧

昨天看到這篇文章

https://www.hkcompanysearch.com/post/35406920/

看到巴菲特的老師,82歲的葛拉罕接受媒體訪問的中譯文

在訪談中,葛拉罕提出了兩條挑股票的標準

1.總市值低於過去一年獲利的七倍

2.一個公司擁有的應該兩倍於它所欠下的。

我試著寫了一個選股腳本,在台股裡,挑符合這兩個腳本的股票

我寫的腳本如下

value1=GetField("本期稅後淨利","Q")+GetField("本期稅後淨利","Q")[1]
+GetField("本期稅後淨利","Q")[2]+GetField("本期稅後淨利","Q")[3];
//單位:百萬
value2=GetField("負債總額","Q");
value3=GetField("資產總額","Q");
value4=GetField("總市值","D");//單位:億

if value4<value1*7/100
and value3>value2*2
then ret=1;
outputfield(1,value1/100,0,"近四季獲利(億)");
outputfield(2,value1/100*7,0,"獲利的七倍(億)");
outputfield(3,value4,0,"總市值");
outputfield(4,value2,0,"負債");
outputfield(5,value3,0,"資產");

挑出來的股票如下表

100201

 

選股腳本:Z日均量低於N而連M日量大於K

坊間選股工具很多,不過可供選擇的選股條件大多老生常談,例如XX 指標黃金交叉之類的,由於大盤最近開始進到小型股常有表現的百家爭鳴階段,接下來幾天想跟大家分享一些很容易寫,可以常常被拿來作為選股條件之一的常用選股腳本,這些腳本可以用OR或AND串在一起,織成一張選股網,找到一些值得進一步研究的小型股。

今天首先跟大家介紹的是最近一段時間沒有啥量,但近N日開始出量的股票。

我寫的選股腳本如下:

input:z(20,"均量計算天期");
input:n(2000,"均量上限");
input:m(2,"近幾日天期數");
input:k(4000,"近幾日量下限");

if average(volume,z)[m-1]<n
and trueall(volume>k,m)
then ret=1;

這個腳本可以找出過去20天的移動平均量都不到2000張,近2日每天都超過4000張的股票,要找小型股的時候,這是一個不錯的方法,例如最近大漲的幾檔小型股,起漲時都符合這樣的條件

2017082901

至於要連續幾天沒有量? 還是量要縮到什麼程度才叫量縮? 要連續幾天出量? 要成交量超過多少才算出量? 我都把它設成參數,讓使用者自己來決定。

未來這一系列介紹的選股腳本,都會是類似這樣,簡單,有多個參數可以調整,使用者只要把它複制到自己的XS選股裡就可以使用了。 如果各位希望DIY出什麼選股策略,也可以留言,我會試著寫出來。

 

xqlite banner

 

價值衡量九式之九

衡量股票估值的方法,之前介紹了一些,最後一節就來介紹把這些方法全部放在一起衡量的選股腳本要怎麼寫。

周星馳有部電影叫武狀元蘇乞兒,最後他跟大魔頭決戰時,悟出了把降龍十八掌的前十七式合在一起打就是第十八式

2017070602

我用同樣的想法,把先前曾介紹過的價值型估值方法全部整合在一個腳本上,挑出符合最多價值衡量條件的股票。

腳本的寫法如下:

input:m1("不符合"),m2("符合");
var:s1(""),s2(""),s3(""),s4(""),s5("");
var:count(0);
condition1=false;
condition2=false;
condition3=false;
condition4=false;
condition5=false;
count=0;

//用最近三個月營收推估的獲利殖利率高於一定水準
value1=GetField("營業利益","Q");//單位:百萬
value2=GetField("月營收","M");//單位:億
value3=GetField("營業利益率","Q");
value4=GETFIELD("月營收","M")
+GETFIELD("月營收","M")[1]
+GETFIELD("月營收","M")[2];
//近三個月營收
value5=value4*value3/100;
//用最近一期營益率去估算的最近一季營業利益
value6=GetField("營業利益","Q")
+GetField("營業利益","Q")[1]
+GetField("營業利益","Q")[2]+value5*100;
//前三季營業利益加上最近一季預估營業利益
value8=GetField("最新股本");//單位億
value9=value6/(value8*100)*10;
//估算出來的EPS
value10=value9/close*100;
//eps/股價*100: 預估殖利率
input:r1(7,"殖利率下限");
if value10>r1 and value3>0 and close>10
then begin
condition1=true ;
s1=m2;
count=count+1;
end 
else
s1=m1;
 
//本業推估本益比低於N

input:epsl(15,"預估本益比上限");

value11= GetField("營業利益","Q")
+GetField("營業利益","Q")[1]
+GetField("營業利益","Q")[2]
+GetField("營業利益","Q")[3];
value12= GetField("最新股本");//單位億;
value13= value11/(value12*10);//每股預估EPS
if close/value13<=epsl
then begin
condition2=true ;
s2=m2;
count=count+1;
end 
else
s2=m1;

//流動資產減負債超過市值N成
input:ratio(80,"佔總市值百分比%");
if (GetField("流動資產","Q")-GetField("負債總額","Q"))/100>GetField("總市值","D")*ratio/100
then begin
condition3=true ;
s3=m2;
count=count+1;
end 
else
s3=m1;

//股價低於N年平均股利的N倍

input:N1(16,"股利的倍數");
 
value15=(GetField("股利合計","Y")
+GetField("股利合計","Y")[1]
+GetField("股利合計","Y")[2]
+GetField("股利合計","Y")[3]
+GetField("股利合計","Y")[4])/5;
if close<value15*N1
then begin
condition4=true ;
s4=m2;
count=count+1;
end 
else
s4=m1;
 
//高自由現金流總市值比
input:ratio1(10,"近四季自由現金流總合佔總市值最低比率單位:%");
if (GetField("來自營運之現金流量","Q")+GetField("來自營運之現金流量","Q")[1]+
GetField("來自營運之現金流量","Q")[2]+GetField("來自營運之現金流量","Q")[3]-
GetField("資本支出金額","Q")-GetField("資本支出金額","Q")[1]
-GetField("資本支出金額","Q")[2]-GetField("資本支出金額","Q")[3])
>GetField("總市值","D")*100*ratio1/100
then begin
condition5=true ;
s5=m2;
count=count+1;
end 
else
s5=m1;


if count>1
then ret=1;
outputfield(1,count,0,"符合條件數");
outputfield(2,value9,1,"預估EPS");
outputfield(3,s1,0,"高預估殖利率股");
outputfield(4,s2,0,"本業推估本益比低");
outputfield(5,s3,0,"流動性淨資產接近市值");
outputfield(6,s4,0,"以歷年平均股利計算之高殖利率股");
outputfield(7,s5,0,"高自由現金流總市值比");

衡量的標準都設成參數,大家可以依自己的標準重設,我把條件設的更嚴之後,挑出來符合較多條件的股票如下:

2017070601

價值型投資的介紹至此告一段落,正所謂戲法人人會變,巧妙各自不同,這些腳本的介紹,重點在讓大家了解有那些派別的不同思維,有那些可以拿來運算的欄位,以及有那些腳本撰寫時可以使用的寫法,真正要如何在 xs上實行您的價值型投資準則,還有賴各位捲起袖子來把這些參考的腳本改成您個人的獨特見解。

 

xqlite banner

價值衡量九式之八

前面七式分別用了 PB,PE,PS,自由現金流量,現金股利,營業利益等數字來作為計算的標準,最後兩式用的是雞尾酒衡量法,也就是把這些數據一起納入考量。

以下的腳本挑出來的股票一共要符合以下幾個選股條件

1.本益比低於15

2.股價淨值比小於2

3.股利殖利率小於3%

4.最近一季營收比上一季成長

5.最近一季營業利益比前一季大

符合以上五個條件的選股腳本

if GetField("本益比","D") < 15 and
 GetField("股價淨值比","D") <2 and
 GetField("殖利率","D") > 3 and
 GetField("營收成長率","Q") >0 and
 GetField("營業利益","Q") >GetField("營業利益","Q")[1] 
 
 then ret=1;

這樣挑出來的股票有92檔,如果把條件再設的嚴苛一點,PB要小於1.5,股利殖利率要大於5且去年稅後淨利超過五億台幣,那麼符合條件的就只剩下27檔,名單如下

2017070501

正常來說,這些股票的估值變的這麼便宜,往往跟產業及公司營運前景不樂觀有關,但同樣的邏輯,如果營運出現谷底回昇的情況,這些股票會是估值回昇最強勁的族群。

xqlite banner

 

 

價值衡量九式之七

今天跟大家介紹的估值作法,是找到那些過去五年營業利益達到一定水準且趨勢往上走的公司,假設未來五年營業利益能 維持現狀,然後把最近一年的營業利益乘以五,加上淨值,再來跟目前的股價相比。 我承認這個方法還蠻土法煉鋼,毫無理論基礎,但這是我多年來常用的方法,目的是在找出那些可能被遺忘而超跌的股票。

要找出這樣的股票,要分兩個腳本,一個是用年線,找出過去五年營業利益超過兩億且呈上昇趨勢的股票

input:lm(200,"年營業利益下限");
value1=GetField("營業利益","Y");//百萬
if 
GetField("營業利益","Y")>lm and 
GetField("營業利益","Y")[1]>lm and 
GetField("營業利益","Y")[2]>lm and
GetField("營業利益","Y")[3]>lm and 
GetField("營業利益","Y")[4]>lm and 
//週去五年都賺超過一億
linearregslope(value1,5)>0
//五年的營業利益趨勢往上
then ret=1;

另一個腳本則是拿最近一年的營業利益為基礎,來算估值

input:ratio(30,"折價比例%");
value1=GetField("營業利益","Y");//百萬
value2=GetField("每股淨值(元)","Y");
value3=GetField("普通股股本","Y");//單位:億
value4=value1*5/100/value3*10;
//用最近一年營業利益乘以五當未來五年的獲利
//算出未來五年的每股淨值增加值]
value5=value2+value4;
//以目前的每股淨值加上上述數字即是公司內含價值
//(不考慮折舊的issue)
if close*(1+ratio/100)<value5
then ret=1;
outputfield(1,value5,1,"內含價值");
outputfield(2,close,2,"目前股價");
outputfield(3,1-close/value5,"折溢價情況");

然後再把這兩個腳本在選股策略中用AND合在一起

20170704

 

這樣就可以選出過去五年本業獲利穩定且呈上昇趨勢,然後估值又較低的公司。

xqlite banner