Author Archives: 發財橘子

尋找股價已跌破7千點時股價的股票~ getbaroffset函數使用示範

昨晚跟友人聊天時,他問我能不能用電腦挑出,有那些股票,現在股價已經跌破上一波指數在7000點時的股價,今天就來跟大家介紹一個函數: getbaroffset  ,用這個函數就可以找出任一個曆日距今是多少根bar,然後就可以找出當天各檔股票的價位。

首先我們先去找一下上一次加權指數在七千點時是那一天

從下面的K線圖來看,20150824這一天,指數最低跌到過7203點,這一天應該是這幾年來加權指數的最低點

所以我們就可以寫出一個選股腳本,來尋找目前股價比那一天還低的股票有那一些

腳本的寫法如下

input:days(20150824);
value1=getbaroffset(days);
if close<close[value1] then ret=1;
value2=((close[value1]/close)-1)*100;
outputfield(1,close[value1],2,"當時股價");
outputfield(2,value2,0,"跌幅%");

這裡頭用到一個函數叫作getbaroffset,這個函數是您輸入日期,它會回傳該日期到最近一個交易日是距離多少根bar

這個函數的腳本如下

Input: target(numeric);

variable: i(1);

if target >=date then
begin
 GetBarOffset = 0;
 return;
end;

while true
begin
 Value1 = date[i];
 if Value1 <= target then 
 begin
 GetBarOffset = i;
 return;
 end;
 i = i + 1; 
end;

根據這個腳本我跑出來一共有391檔股票已經跌破當時的價位,我把跌幅大的列在下面

 

2018092804 2018092803 2018092802

這些股票的股價是比大盤提前修正的,我朋友的意思是提前修正的會不會也提前落底。

如何尋找波段的操作標的?

我們總是希望股票都能買在波段行情的初升段,然後穩穩的抱它到整個波段行情結束。要做好這件事,有兩個功課,一個是怎麼找出會有波段行情的股票,另一個則是找到波段出場的機制。 後者大家比較常用的是跌破月線或季線就出場,或是主力密集賣超就出場,前者的作風就很多元了,有的從基本面著手,有的從籌碼出發,有的用技術指標,有的看法人動向。我今天想跟大家介紹,我以往在研究單位時,所設計的一套篩選方式,我用電腦(當年是TEJ加EXCEL),篩選出一些感覺股價可能有表現機會的標的,然後收盤後就去看訪這些公司,從這當中挑出可能的投資標的。

我的篩選方式依資料頻率分別如下

日資料

  • 三大法人之前沒有買進,近幾日開始密集買超的
  • 主力連續累計買超達到一定的金額且佔成交量達到一定的比例
  • 籌碼從散戶手中被集中到少數券商分公司的特定人手裡
  • 成交量比以往多一些些
  • 公司派的券商持續且積極的買進

週資料

  • 集保張數減少(這是以前的作法,現在應該是要看千張大戶的人數是否有增多)

月資料

  • 月營收YOY出現過往未曾出現過的增長
  • 月營收MOM穩定成長
  • 連續數月的月營收表現出以往未曾有過的增長態勢

季資料

  • 毛利率比以往表現的更好(代表產品組合有所改變或是售價變好或是直接成本變低)
  • 營業利益率連續多季成長(代表有什麼事情做對了)

除了上述的條件之外,我挑的股票還要具備以下的特徵

  • 每股營收超過一定水準。(因為這樣基本面的變化才能明顯反映在EPS上)
  • 股本不能太大(因為太大的股本,如果籌碼凌亂,股性往往比較牛皮)
  • 過去一段時間漲幅要低於一定水準(畢竟不想幫別人抬轎)

過去我還在從事操盤工作時,每週會用上述的標準,篩選出符合條件的標的,接下來就是約公司去實地訪談,看看是不是公司在基本面上有些變化,足以支持股價出現波段的漲幅。

現在有了XS,不用等到週會,我可以每天跑一次這些條件之後,列出一個清單,然後再去找找看有沒有人最近有寫報告,把報告拿來研究一下,覺得不錯的就列入觀察名單,放到策略雷達裡去跑。

我的做法是,透過XS選股平台,把上述的過濾條件轉換成選股條件,如下圖

2018092701

其中有用到四個選股腳本,分別把腳本列在下面

籌碼被收集的中型股

input:period(10);
value1=GetField("分公司賣出家數")[1];
value2=GetField("分公司買進家數")[1]; 

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

籌碼從散戶手裡被收集

input:ratio(200); setinputname(1,"控盤者買張除以散戶買張的比例(%)");
input:volLimit(2000); setinputname(2,"成交量下限(張)");

settotalbar(3);

value1=GetField("控盤者買張");
value2=GetField("散戶買張");
value3=value1/value2 * 100;

if volume > volLimit and value3 > ratio and value3[1] > ratio
then ret=1;

投信初介入

input: day(30, "投信交易期間");

if GetSymbolField("TSE.TW","收盤價") > average(GetSymbolField("TSE.TW","收盤價"),10)
and Average(Volume[1], 100) >= 1000
then begin
 
 value1 = summation(GetField("投信買賣超")[1], day); 
 value2 = summation(volume[2], day);
 
 
 condition1 = value1 < value2 * 0.02;
 //先前投信不怎麼買這檔股票
 
 condition2 = GetField("投信買賣超")>= volume[1] * 0.15;
 //投信開始較大買超
 
 condition3 = H > H[1];
 //買了股價有往上攻
 
 condition4 = C > C[1];
 //今天收盤有往上走
 
 condition5=close<close[10]*1.05;
 
 RET = condition1 and condition2 and condition3 and condition4 and condition5;
 
end;

千張大戶暴增

setbarfreq("W");
settotalbar(3);

value1=GetField("大戶持股人數","W",param:=1000);
value2=GetField("散戶持股人數","W",param:=400);

if value1>value1[1]
and value2<value2[1]
then ret=1;

outputfield(1,value1,0,"本週大戶人數");
outputfield(2,value1[1],0,"上週大戶人數");
outputfield(3,value1-value1[1],0,"大戶增加數");
outputfield(4,value2,0,"本週散戶人數");
outputfield(5,value2[1],0,"上週散戶人數");
outputfield(6,value2-value2[1],0,"散戶減少數");

我用這個選股腳本回測過去三年,持有三十天後出場,回測報告如下

2018092702

在過去三年裡共曾經有252檔股票符合上述的選股法,平均一年有80多檔,持有30天後有57%的機率可以獲利出場,平均報酬率是5.51%。

例如以下的個股,都曾經出現在波段選股的名單裡

2018092704 2018092703

透過這樣的方式,我去挑選那些我覺得有波段行情的個股,各位不妨加減一些條件,作出您專屬的波段選股方式。

當然選出來的股票如果能跟以往一樣,再去實地訪查會更好。

以上是我挑選波段個股的方式,茲作為拋磚引玉的起點,祝大家都能掌握到自己的波段個股。

 

 

累計營收年增率開始出現異於以往的股票

當累計營收年增率開始跟以前不一樣時,代表公司營運有異於往常的改變,我們可以從這樣的改變中去找到轉機股。

我寫了一個腳本來找出這樣的股票

腳本如下:

value1=GetField("累計營收年增率","M");
input: r1(4),r2(12);
setinputname(1,"短天期");
setinputname(2,"長天期");
if average(value1,r1) cross over average(value1,r2)+5
and value1>10
then ret=1;

 

這個腳本目的如果要找出累計營收移動平均線出現黃金交叉的股票,短天期參數要用3或4皆可,重點在於找出累計營收年增率開始出現異於以往的股票

以雄獅為例,它的月營收累計年增率是在2015年一月出現3個月移動平均比12個月移動平均高出5%

 

071402

股價從一月營收公佈的二月初起,開始起漲

071403

 

這方法,小弟用起來頗不錯,推薦給大家,也祝福大家可以透過這樣的思考過程及實證,找出屬於自己,最有效的月營收選股策略。

空頭真的要來了嗎?~從高盛牛市熊市指標談起

bloomberg週一發了一則消息,說高盛牛市熊市指標已經創下1969年以來的新高(連結在此),剛好最近新興市場股匯市接二連三的出現崩跌走勢,山雨欲來風滿樓,開始有朋友憂心忡忡的問我,空頭市場這次是真的要來了嗎? 今天我想從高盛牛熊市指標的設計理念談起,來檢視空頭真的來了嗎?

高盛的熊市指標,包括了整體市場的估值,失業率,通貨膨脹率,債券收益曲線及ISM採購經理人指數。

失業率下降代表著勞動市場的緊張,這會讓市場預期通貨膨脹率會往上走,這種預期會讓央行的政策收緊,進而造成實體經濟的放緩,讓市場的估值變得高估。空頭市場主要是因為長期的多頭市場,造成股價在樂觀氣氛中被炒高,因而造成估值處於高位,這時如果因為景氣放緩造成對於未來樂觀的心態消失,市場的估值就會變的過高,於是產生了明顯的修正。

再進一步細分,高盛把空頭市場的成因,分成三種,週期性(通常與經濟週期相關,最為常見)、事件驅動型(由外部事件衝擊引發,如戰爭或原油價格衝擊)和結構性(由結構性失衡以及金融泡沫引發),下圖是高盛所做的一個分類

2018091201

在這個表格裡,高盛列出空頭市場出現之前,不同的空頭市場,有著利率上昇,外部因素,股價大漲,經濟不均衡,生產力提高,景氣過熱及新經濟帶動的樂觀預期等等的不同特徵,在空頭市場開始之後,則會出現經濟衰退,企業業績下滑,股市震盪及利率下跌等現象。

高盛發現,週期性和事件驅動熊市平均下跌30%左右,而結構性熊市通常面臨50-60%的跌幅。此外,不同類型的熊市其壽命長短也有差異,事件驅動、週期性和結構性熊市的時長平均來看,分別為6個月、2年以及3-4年。

 

根據上述的分析,我們來觀察上面提到的各項指標

一,通貨膨脹率

USACPI

物價確實處於高檔

二,失業率

失業率

確實是處於歷史低水位區

三,ISM採購經理人指數

ISM

目前景氣還是非常的好,但高點一再向下修正中

四,美國長期公債殖利率

收益率

債券收益率是處於上昇趨勢但並沒有持續創高

根據上述的數據,我們看到下面這張高盛牛熊市指標時

2018091202

大致可以得到的結論是,當前股市的估值確實很高,就業情況非常好,通膨的壓力也是有的,但還沒有看到 FED過度調高利率所帶來的景氣衰退,收益率也還沒有高到市場的資金會全面性的從股市流向債市。

所以除非有突發事件如戰爭造成的事件驅動型空頭市場,不然從週期性來看,目前要警惕的是景氣是否會開始逐漸進入衰退造成企業獲利預期下調,進而讓當前股票的估值顯得過高,另一個角度是,目前的情況作多股票的超額利潤可能不會太大,所以是應該警戒,但有沒有到要一路長空? 則是見仁見智了。

 

一條公式選股術的回測報告

鏡週刊這一期介紹了一位教授,他用一條公式來挑股票,每年賺15%,我試著用XS來寫出這個選股公司,分享給大家。

這篇文章的連結如下

連結在此

這位淡江大 土木工程系的葉怡成教授,發展了一個叫GVI(Growth Value Index)的指數,

GVI=(B/P)×(1+ROE)^5

這個指數的意思是用淨值/股價去乘上(1+股東權益報酬率)的5次方,這個數字當然是愈大愈好。

教授認為,可以從市值超過兩百億的股票裡去篩選出GVI排名前20名的公司,然後做成投資組合,之後再根據最新的數據做再配置。

根據這樣的公式,我寫了一個函數的腳本如下

value1=GetField("股價淨值比","D");
value2=GetField("股東權益報酬率","Q");
value3=GetField("總市值(億)","D");
if value3>=200 then 
GVI=1/value1*(1+value2/100)*(1+value2/100)*(1+value2/100)*(1+value2/100)*(1+value2/100)
else GVI=0;

把這個GVI在選股時作為排行的函數

20180910

最新的排行結果如下

20180910

不過這裡要說的是,用這個方式挑股票時,要過濾掉那些因為業外獲利造成的假象,以及ROE正在變差的股票,不然像宏達電,南電這樣的公司也是會被納進來的

所以我就再加上營業利益率要大於零的條件,把腳本重新改寫如下

value1=GetField("股價淨值比","D");
value2=GetField("股東權益報酬率","Q");
value3=GetField("總市值(億)","D");
value4=GetField("營業利益率","Q");
if value3>=200 and value4>0 then 
GVI=1/value1*(1+value2/100)*(1+value2/100)*(1+value2/100)*(1+value2/100)*(1+value2/100)
else GVI=0;

改成這個腳本後挑出來的20檔股票名單如下

2018091001

我把這腳本拿去回測,持有期間是220天,過去10年的回測數據如下:

gvi

年平均投資報酬率有10%,不過倒也不是每年的年報酬率都是正的,大盤不好的時候拉回的幅度也是不小。

我試著把前二十檔改成十檔,回測報告如下

2018091002

勝率及平均年報酬率都增加,只是最大區間虧損還是太大了

 

 

 

籌碼大數據之券商分點特定個股買賣差金額

在籌碼大數據這個功能裡,進階個股籌碼分析中,有一個籌碼分析的功能,在這個功能中,我們透過數據,顯示一段期間內,各種不同勢力對一檔個股的買賣超數據,讓使用者了解籌碼的流向,其中,我們把每個券商分公司針對單一個股的交易金額,分成五個級距,然後把不同級距的買張及賣張作合計,分別呈現不同交易金額的勢力,對該個股的買賣超狀況。

以台積電為例,昨天的多空勢力分析表格如下

2018083002

透過這個表格,我們發現,最近一日,單一分公司交易金額在一億以下的四個級距,都是賣超,但超過一億的分公司,反而是大買超,表示台積電昨天的籌碼是從散戶手裡流向大戶手裡。

我們可以觀察這兩個不同級距長期的買賣超情況如下圖

2018083001

然後我們就會發現,當大戶在賣超而小戶買超時,台積電的股價呈現下跌趨勢,反觀大戶買超而小戶賣超時,台積電便展開其上漲走勢。

這個數據由於每天更新一次,所以我們便可以在第一時間,了解到一檔股票最近一個交易日,籌碼的流動方向,比集保庫存裡的股東結構更及時。

籌碼大數據裡的高手券商的設計理念與應用

在籌碼大數據這個模組中,有一個高手券商的選單,這個功能是想要找出散在各券商分公司的民間高手,然後找到值得追蹤的對象,知道這些股市常勝軍最近在買什麼? 以做為選股時的參考。

高手券商的定義是根據使用者設定的計算期間及交易金額,把券商分公司假設成一個單一的個體,然後把這個分公司在設定期間,符合交易金額以上的,非前100大權值股的交易,都過濾出來,然後去計算這些交易的次數,平均持有天數,勝率及平均報酬率。

以下圖為例,在過去一年,交易金額超過三百萬,且交易標的濾掉前100大權值股之後,全市場勝率最高的券商分公司如下圖

高手券商一

這些券商分點裡都隱藏著真正的高手,單日交易一檔個股的金額可以超過三百萬,且在一整年下來,勝率超過七成。

接下來我們可以根據他們的持有天數,勝率及平均報酬率,找出你想追蹤的券商,把它們存成自訂的券商群組。

做法是在券商名稱按滑鼠右鍵,會有加入自選券商的選項,按下後會跳出如下的視窗

高手券商二

例如我個人喜歡追那些平均持有天數超過十天,且勝率及平均報酬率有一定水準,交易次數適中的券商,我就設了一個券商組合叫波段高手,然後把符合條件的券商都加到波段高手這個券商組合中

這麼一來,我每天在看券商進出股票分析這個功能時,就可以如下圖般,知道波段高手們可能在進出什麼樣的標的了

高手券商三

又或者 ,可以透過高手券商選單中的高手券商股票進出,知道現在這些高手券商在買進什麼標的

高手券商四

不過這裡在應用時要留意,不要去追那些隔日沖型的高手券商,因為當你看到他買超時,可能就是他準備要賣出的時候了。

以上是高手券商的設計理念及應用方式的基本介紹。

 

籌碼分析中的券商分公司買賣數據目前在XS上的應用

不少XS的使用者提出來希望可以把券商分公司的買賣數據,拿來寫成腳本,例如可以盯住幾個隔日沖特定券商分點的標的,或是盯住幾家法人及代操大戶有在進出的分公司。這部份我們還在研究如果用簡單的語法來解析這些數據,短期內還是無法滿足各位的需求,在此僅能跟大家說聲抱歉。

目前跟券商分公司相關,可以拿來在XS上寫腳本的欄位主要是下圖幾個

2018062001

 

我自己寫的腳本中我覺得還不錯用的,大致有幾個

//跑全部股票 停損停利都是7%

value1=GetField("分公司買進家數");
value2=GetField("分公司賣出家數");
value3=value2-value1;
value4=countif(value3>40,10);
//計算買進家數與賣出家數的差距夠大的天數
if value4>6 
and GetSymbolField("tse.tw","收盤價","D")
>average(GetSymbolField("tse.tw","收盤價","D"),10)
and close[30]>close*1.1

then ret=1;

這個出的股票不多,但勝率不錯,如果想要出多一點訊號,把條件放寬一些也是可以的

 

另外雲 端策略中心裡有個腳本我把它改成下面這個,

// 作多, 持有期別: 20
//
input:period(20);
value1=GetField("分公司賣出家數")[1];
value2=GetField("分公司買進家數")[1]; 
 
 if linearregslope(value1,period)>0
 //賣出的家數愈來愈多
 and linearregslope(value2,period)<0
 //買進的家數愈來愈少 
 and value1>200
 and average(volume,5)>=10000
 
 then ret=1;

雖然勝率不是很突出,但一些飆股會挑到,例如下面這兩檔

2016082002

2016082003

所以我會把挑出來的股票再用其他的盤中sensor去跑,挑出真的要動的股票

再次跟大家說聲抱歉。

 

 

 

移動停利的腳本寫法

有網友問到如何撰寫移動停利的腳本,我以RSI低檔回昇的進場腳本為例,請優秀的同仁寫出對應的停利腳本作為出場腳本,跟大家說明如何用停利腳本來作回測。

首先,RSI低檔回昇的腳本如下

if rsi(close,12) cross over 20
then ret=1;

那麼這個進場腳本的移動停利腳本寫法可以如下

input:ratio(10);
//設定回檔幅度

//用condition1來代表進場的觸發條件
condition1=false;

if rsi(close,12) cross over 20
then condition1=true;

value1=barslast(condition1);
//計算上一次觸發到現在共歷經幾根bar
value2=highest(high,value1);
//計算觸發後到目前為止的最高價

if close*(1+ratio/100)<value2
then condition2=true
else condition2=false;
value3=barslast(condition2);
if value3 cross under value1 then ret=1;
//觸發移動停利

這當中用condition1代表進場的條件,用barslast來計算符合進場條件後至今共有幾根bar,再拿這數字去找出條件成立後的最高點,接下來就是計算最新價跟這最高價之間是否差了一成以上,如果是的話就是出場條件成立。如果股價往上走,這個自觸發後以來的最高價就會一直走高,也就達到移動停利的目的。

接下來就可以把這個腳本加在回測的出場設定中  如下圖

2018061901

這樣就可以在回測中做到移動停利了。

大家可以把自己的進場腳本設為condition1的條件,其餘的,follow這個出場腳本的寫法就可以作出特定進場策略的移動停利腳本了。

 

以週轉率為例,介紹自訂函數及其應用

網友希望可以訂出一個選股條件,這個條件是個股的近五日平均週轉率要高於二十日平均週轉率。

首先,因著週轉率的公式是成交張數除以發行張數,我們可以先自訂一個叫turnoverrate的函數,它的腳本如下

input:period(numericsimple);
value1=GetField("普通股股本","Q")*10000;
value2=average(volume,period);
if value1<>0
then value3=value2/value1*100;
turnoverrate=value3;

要寫自訂函數的眉角有幾個

1.要先確定新增腳本時勾選的是函數腳本

2.一開始命名就要取好函數的名稱,例如我是取turnoverrate

3.在設參數的時候必須宣告參數的資料型態,例如這裡用period來代表計算天期的參數,天期的參數是一個絕對的整數值,所以就用numericsimple。

4.計算出來的週轉率值再用trunoverrate=xx這樣的方式來指定該數值就是函數值

有了這個函數,上述的選股條件就很好寫了

if turnoverrate(5)>turnoverrate(20)
then ret=1;
outputfield(1,turnoverrate(5),1,"5日平均週轉率");
outputfield(2,turnoverrate(20),1,"20日平均週轉率");

用這個條件剛剛挑出來的股票如下圖

2018052301

這樣就可以把週轉率列為選股條件之一了。