Author Archives: 發財橘子

月報酬率等績效圖的寫法

大多頭市場流行定存股是很自然,我的定存股挑法跟市場上常設定的條件不大一樣,我只挑內銷且具有國外競爭者難以替代地位的公司。今天來跟大家分享我的概念跟邏輯。

大家挑定存股通常是挑股利穩定的,我挑的邏輯加一條,一定要幾乎百分之百內銷,而且國內外的競爭者很難切進來的,這種有點像是台灣拳王的概念,我挑至的公司一共七檔

分別是卜蜂,一零四,裕融,中保,中菲,和泰車及好樂迪。

先來看看過去十年這七檔如果各買一張的話,績效會是怎麼樣

(以下用的是還原月線圖)

2018011701

十年來淨值漲了不只四倍

單月報酬的分佈如下

2018011702

大致上除了2008雷曼風暴之外,單月要虧到10%的情況只出現一個月

如果以十二個月報酬的移動平均來看

2018011703

基本上除了次貸風暴的時間以外,最長的年報酬是負的期間只有九個月,意思是擺一整年從來沒有年報酬是負的

最後看一下最大連續虧損

2018011704

一樣,除了次貸風暴之外, 連續最大虧損就是近兩成

 

我把計算的程式碼寫在下面,大家可以拿去改一改測試一下,自己挑定存股組合,過去十年績效會如何?(程式如果寫錯要提醒我)

value1=GetSymbolField("1215.tw","收盤價");//卜蜂
value2=GetSymbolField("3130.tw","收盤價");//一零四
value3=GetSymbolField("9941.tw","收盤價");//裕融
value4=GetSymbolField("9917.tw","收盤價");//中保
value5=GetSymbolField("5403.tw","收盤價");//中菲
value6=GetSymbolField("2207.tw","收盤價");//和泰車
value7=GetSymbolField("9943.tw","收盤價");//好樂迪
value8=value1+value2+value3+value4+value5+value6+value7;
if value8[1]<>0 then 
value9=(value8-value8[1])/value8[1]*100;
value10=average(value9,12);
if value9<0 and value9[1]>0
then value11=value9
else if value9<0 and value9[1]<0
then value11=value9+value11[1]
else value11=0;
//plot1(value8,"淨值走勢圖");
//plot2(value9,"單月報酬");
//plot3(value10,"12個月報酬移動平均");
plot4(value11,"MDD");

最後plot的部份一次只能畫一條,其他的用雙斜線先躲起來。

 

 

 

找出盤中有大單的腳本寫法

前天有人客寄來下面這張圖,問我要挑這種股票腳本怎麼寫?

 

 

2018011601

我了解了一下人客的想法,他想要找的股票,是那種股本不算大,以精材為例,股本是27億,然後每天成交金額也一般般的股票。客人說,如果這種股票,突然出現幾筆單筆上千萬的外盤買進金額,應該是有故事,值得留意。

可惜我功力不好,問了公司那些聰明的腦袋才寫出以下的腳本

input:v1(500,"單筆買進金額下限");
input: LaTime(2,"大單筆數");
input:TXT("須逐筆洗價","使用限制");
variable: intrabarpersist Xtime(0);//計數器
variable: intrabarpersist V2(0);
variable: intrabarpersist XDate(0);

v2=q_TickVolume;//單量
value2=q_BidAskFlag;//外盤標誌為1
value3=v2*close/10;
settotalbar(3);

if Date > XDate then Xtime =0; //開盤那根要歸0次數
XDate = Date;

if value3 >= v1 and value2=1 then Xtime+=1; //量夠大就加1次

if Xtime > LaTime then 
begin
 ret=1;
 Xtime=0;
end;

這個腳本用的是日線,但必須逐筆洗價,至於多少的成交值才算大單,要多少筆大單才觸發,我都設成參數,大家可以自己設定。

 

 

讓機器人投票的選股模型初探

去年10月,第一檔用人工智慧操盤的ETF上市,這檔基金號稱是在IBM的華生平台上建構選股量化模型,我試著去了解這個ETF的投資邏輯,加上先前研究過的一些自動化選股系統,在此跟大家分享一些我的心得。

這檔代碼AIEQ.US的ETF,它是把各種數據及文字匯入系統後,研判那些股票會因為經濟情勢,投資趨向,最新公佈的數據及消息而受益,挑選受益程度最大的前30-70檔股票作為投資組合,值得留意的是,大部份挑中的股票市值都在10億美金上下,其中有幾檔漲幅頗驚人。

下圖是這檔ETF自上市以來的績效圖

2018011605

從績效來看,除了第一個月之外,後面績效開始追趕了上來,目前已追上S&P500的漲幅。

我的理解是,AIEQ是模仿不同產業分析師的分析模型,透過不同的演算法,用最新的各項數據去預估這家公司未來的目標價位,然後再透過投票表決系統,把眾多模型都看好的股票,放到投資組合當中。

我試著用XS的選股系統來表達這樣的概念。

如果我們把不同的選股法,當做一個投票者,那麼如果同時有很多個選股法,那麼同時符合最大選股標準的股票,就是投票時得到最多票數的標的。

作法上就像是把不同的選股腳本,通通放到同一個選股策略中,然後用”OR”來設定彼此的關係。

2018011604

把各種不同的選股腳本都放進來,用OR連結起來(目前XS  Support同時可以拿來聯集的選股條件是30 個)。

拿這樣的選股策略,把所有的股票通通拿進去選,執行之後,挑出來的股票欄位裡,有一欄叫”符合條件數”,按一下就可以排序,找出符合最多選股腳本的股票了。

2018011603

以上是我初步模擬AI選股的心得,當然AI的腳本與投票系統比這樣流程要複雜的多,不過萬丈高樓平地起,作為個人投資者,透過這樣的方式,也是可以完成自己的選股投票系統。

 

 

財務數字是領先還是落後指標?

財務數字是領先還是落後指標? 貴公司提供那麼多的財務面選股條件,會不會都是落後資訊?

上面這一行是一位網友的提問,我知道財報無用論是市場還蠻多人的見解,我認識的大戶們也確實有不少是看盤辦事,買股票連那家公司作啥的都不知道,但巴菲特又偏偏把大部份的時間花在看財報上,所以我比較傾向財報不是沒有用,是看你怎麼用?

財報對我而言,有三個重要的功能

第一個,透過財報,我可以知道一家公司目前是處於企業生命週期的那一個階段?

第二個,透過財報,我可以知道一家公司在同業間是不是有競爭力?

第三個,透過財報,我可以知道一家公司在經營上是不是奸奸鬼鬼?

知道了這三件事之後,我會去觀察一檔股票月營收的變化,然後想辦法找出那些公司有一定的競爭力,企業生命週期可能進入少康中興,或是從谷底翻昇的景氣循環股,這些股票股價相對成長股會相對偏低,但如果景氣翻揚,長線的報酬率會很迷人。

我舉這兩年幾檔經典的案例來說明。

第一檔是玉晶光。這家公司一直是僅次於大立光的鏡片供應商,2011到2012年景氣好的時候,  EPS曾經在10元上下,從2013年起,接了蘋果單,但良率一直起不來,所以每年都虧錢,股價也從400塊跌到50元,這是一家曾經表現很好的公司,進到一段艱困的時段裡,要東山再起,就是靠良率能不能提昇到轉虧為盈,如果純粹從財報來看,連續四年都虧大錢,2015年還虧超過一個資本額,但股價還有50元,如果從本益比來看,股價偏高。 但市場其實是在等待它能不能重返榮耀,而觀察的指標就是月營收。

從月營收來看,玉晶光在2016年2月的3.2億谷底,到了9月曾經成長到7.3億元, 第三季也開始正式轉虧為盈

從這些數字大抵可以判斷,玉晶光的良率起來了。

這檔股票符合產業有競爭力,前一段時間在調整,月營收數字回昇這三個原則,股價也在當年的十一月,一個月從50元漲到100元,但其實在那之前,營收已經連續成長達七個月。

2018011003

 

第二個例子是金居,這家公司是做銅箔的,是PCB的上游,2010年股本20億的時候,一年曾經賺了快五億,但接下來銅箔供過於求,2011到2015連續虧了四年。

這樣一 家公司,到了2015年第四季,本業轉虧為盈,然後2016年第一季淡季不淡,接著營收持續每個月都成長。

這家公司開始符合曾經不錯,一段時間艱困,但營收開始回昇的情況。

 

2018011001

 

我運用財報的方式,大抵就是這麼的模式,從歷史數據抓曾經擁有不錯競爭力,但現在處於艱困期的公司,當它開始月營收出現好轉的數字,就開始去探究這是短期現象,還是重返榮耀的起點。

要怎麼找到這些公司呢?

我寫了一個腳本如下

value1=GetField("每股稅後淨利(元)","Y");
if trueany(value1>3,8)
and trueall(value1<0.7,4)
and trueany(value1<0,4)
then ret=1;

這個腳本是找到過去八年eps曾經有一年超過三元,過去四年每年eps都小於0.7元且至少有一年虧錢的股票,把符合這些條件的股票再去對應他們近月營收的表現,就可以找出重返榮耀的候選人,再從季報表去觀察毛利是否回昇,以及近幾月營收的表現,就可以找到值得近一步做功課的股票。

 

以上大致是我個人的做法。

 

 

權值股多頭排列家數指標

昨天說到我那老大哥有一個觀察,他認為如果當天盤面上前三十檔權值股,大多數是多頭排列,他就作多,反之則不進場,於是我寫了一個自訂指標,用來計算前三十檔權值股,有多少檔是多頭排列。拿這個指標來決定今天的多空方向,我個人的觀察是,還真是有些兒的道理。

我寫的指標腳本如下,大家請直接複製貼上即可,不過如果權值股有變的時候記得要換一下

value1=GetSymbolField("2330.tw","收盤價");
value2=GetSymbolField("2317.tw","收盤價");
value3=GetSymbolField("6505.tw","收盤價");
value4=GetSymbolField("2412.tw","收盤價");
value5=GetSymbolField("2882.tw","收盤價");
value6=GetSymbolField("1301.tw","收盤價");
value7=GetSymbolField("1303.tw","收盤價");
value8=GetSymbolField("1326.tw","收盤價");
value9=GetSymbolField("3008.tw","收盤價");
value10=GetSymbolField("2881.tw","收盤價");
value11=GetSymbolField("2454.tw","收盤價");
value12=GetSymbolField("2891.tw","收盤價");
value13=GetSymbolField("2002.tw","收盤價");
value14=GetSymbolField("1216.tw","收盤價");
value15=GetSymbolField("2311.tw","收盤價");
value16=GetSymbolField("2886.tw","收盤價");
value17=GetSymbolField("2912.tw","收盤價");
value18=GetSymbolField("2474.tw","收盤價");
value19=GetSymbolField("2382.tw","收盤價");
value20=GetSymbolField("2408.tw","收盤價");
value21=GetSymbolField("2892.tw","收盤價");
value22=GetSymbolField("5880.tw","收盤價");
value23=GetSymbolField("2357.tw","收盤價");
value24=GetSymbolField("2884.tw","收盤價");
value25=GetSymbolField("2207.tw","收盤價");
value26=GetSymbolField("4938.tw","收盤價");
value27=GetSymbolField("2880.tw","收盤價");
value28=GetSymbolField("2303.tw","收盤價");
value29=GetSymbolField("2105.tw","收盤價");
value30=GetSymbolField("2885.tw","收盤價");

variable:count(0);
input:period(20);
count=0;
if value1>average(value1,period) then count=count+1;
if value2>average(value2,period) then count=count+1;
if value3>average(value3,period) then count=count+1;
if value4>average(value4,period) then count=count+1;
if value5>average(value5,period) then count=count+1;
if value6>average(value6,period) then count=count+1;
if value7>average(value7,period) then count=count+1;
if value8>average(value8,period) then count=count+1;
if value9>average(value9,period) then count=count+1;
if value10>average(value10,period) then count=count+1;
if value11>average(value11,period) then count=count+1;
if value12>average(value12,period) then count=count+1;
if value13>average(value13,period) then count=count+1;
if value14>average(value14,period) then count=count+1;
if value15>average(value15,period) then count=count+1;
if value16>average(value16,period) then count=count+1;
if value17>average(value17,period) then count=count+1;
if value18>average(value18,period) then count=count+1;
if value19>average(value19,period) then count=count+1;
if value20>average(value20,period) then count=count+1;
if value21>average(value21,period) then count=count+1;
if value22>average(value22,period) then count=count+1;
if value23>average(value23,period) then count=count+1;
if value24>average(value24,period) then count=count+1;
if value25>average(value25,period) then count=count+1;
if value26>average(value26,period) then count=count+1;
if value27>average(value27,period) then count=count+1;
if value28>average(value28,period) then count=count+1;
if value29>average(value29,period) then count=count+1;
if value30>average(value30,period) then count=count+1;

plot1(count-15);

畫出來的圖如下

2018010501

這個想法拿來作為短線多空的方向是不錯,直接拿來作期指交易,回測的情況不優,需要更細緻的寫法,未來若有新的發現,再跟大家報告

大漲後大戶落跑

昨天跟大家聊了2017年飆股的長相,我們可以試著把 5 0億股本以下,股價低於60元,具有利基的轉機股列為觀察名單,如果這些股票開始出現買進訊號我們就進場,但接下來的問題是,我們好像常常搭上一列往高雄的列車,但總是在板橋就下車了,今天我想跟大家來介紹一個每週觀察一次的指標:大戶持股人數,用這個指標來研判一檔飆股是否已經進入大戶把籌碼散給小散戶的多頭末昇段。

關於大戶持股人數的定義,請參考以上的Link

大戶持股的說明

我根據這個數據,寫出的腳本如下

value1=GetField("大戶持股人數","W",param:=1000);
value2=GetField("散戶持股人數","W");
if value1<value1[1]
and value2>value2[1]
and value1[1]-value1>=4
and close> lowest(close,100)*1.5
then ret=1;

拿這個腳本作空,回測過去三年的所有股票,停損停利都設為5%,回測報告如下:

2018010301

勝率有達到三戰兩勝的標準。

顯示一旦大戶持股人數出顯明顯減少,代表原來的大量持股者已經獲利了結出場了。這時才是長線多頭行情可能結束的訊號。

以晶電為例,請參考下圖

2018010303

圖上很清楚的看到,千張大戶的人數是隨著晶電的多頭行情而一路增加,一直到整個行情結束時,清楚看到千張大戶人數的明顯急遽下降。

其實這個腳本拿來空頭市場作短線空頭策略也是蠻好用的。例如各位看下圖

2018010302

可以看那些股票有千張大戶落跑,當然也可以觀察有那些股票大戶在買散戶在賣,只要把上面的腳本改一下就行

value1=GetField("大戶持股人數","W",param:=1000);
value2=GetField("散戶持股人數","W");
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,"上週散戶人數");

上週挑出來千張大戶數增,散戶數減少的股票如下

2018010304

大家可以一檔一檔拿來印證一下。

最後提醒大家,這個資料是一週公佈一次,所以每週第一個交易日跑一次就可以了

 

尋找投信的新歡

一檔股票大漲的過程中,投信往往扮演一定的角色,如果我們可以在比較早的時候就發現某檔股票開始有投信在佈局,馬上把它列入觀察名單,那麼當該股票出現一些買進訊號時,就比較會勇於進場。

如何挑出投信才開始佈局的股票呢?

我用以下三個選股條件組成投信新歡的選股策略

2017122801

這三個條件可以挑出之前很少基金持有,但近幾日開始很積極在買的非大型股,不過這邊要強調的是,股票基金持有檔數一個月才公佈一次,所以選出來的股票,可能上個月沒幾檔基金持有,但這個月已經開始有不少檔進場,所以必須再參考一下近日的投信買賣超數字。

但大致上,這個簡單的選股策略是挑得出投信新歡的。

例如用前天的資料,這個選股策略選出下面四檔股票

2017122802

昨天跑出來的股票,則除了上面四檔之外又增加了集盛及達邁兩檔

2017122801

投信新歡不一 定就是會大漲的股票,但至少是一個值得再進一步follow的線索,如果怕買到投信被主力收買拿來出貨用的標的,那麼也可以濾掉那些波段漲幅大,低成交量的股票,畢竟主力會找投信出貨,一般是拉上來沒人跟只好出這招,特別是現在管的那麼嚴,會挺而走險應該是真的出不掉了。

投信年底作帳標的要怎麼挑?

只剩兩個交易日今年就結束了,昨天被網友問到年底投信有沒有作帳行情? 如何找出投信作帳會拉抬的股票?  我試著用XS條列式的選股條件,來設計挑出這類股票的選股策略,我的邏輯是挑那些只有少數基金有且張數不少的中小型股,而且持有這檔股票的投信股票型基金及代操的規模要夠大,這樣才比較有可能是投信年底作帳的可能標的。

年底會不會有投信的作帳行情,要先看投信績效排名的競爭情況,底下這張圖是目前台股一般股票型基金績效在前在的名單

2017122605

目前大家排名的差距不大,是有翻盤的可能,所以拉抬自家才有的特定股票來作帳的可能性是有的。

會挑那些股票來作帳呢?  我設的選股條件如下:

2017122602

這些條件會挑出只有少數基金持股,且張數不小的中小型股,其中比較特別的是XS  Support了股票基金持有檔數這個選股欄位,這個欄會是計算有幾檔基金持有該檔股票,透過這個欄位,我們可以挑出那些股票是少數基金在重押,下面就是電腦挑出來的股票

2017122601

接下來就可以進到個股分析中,一檔一檔看看買這些特定股票的是那幾個基金,例如持有達邁跟欣銓的基金名稱如下

2017122603

 

2017122604

透過這個方法,大致就可以找出年底投信可能作帳的股票了。

我的經驗是,如果真的要作帳,大約在12月20 日前後就得完成規劃,接下來都是在執行先前的規劃,到了最後兩個交易日,差太多的應該就會放手,以今年來看,我就覺得作帳行情其實應該差不多了,不過這種挑少數基金大量持有的選股方法,有值得進一步深入研究的地方,有機會再跟大家來討論這個議題。

 

重獲市場垂青的低價股

要怎麼判斷一檔低價股開始重新獲利市場的青睞? 例如像底下達運這樣的走勢呢?

2017121202

我的老市場朋友給了我兩條不算複雜的規則

規則一: 資金明顯回流到這檔股票

規則二: 連續多日主力買超

就這麼簡單嗎?

哦! 還有一個是盤不能太差

意思是大盤不太差時如果低價股出現資金明顯回流且主力連續多日買超,就該留意。

問題來了,資金要回流到什麼程度才算呢?

於是我寫了以下的腳本,回測了幾個不同的比例,最後發現,如果資金流向的比例是過去60天移動平均的四倍,回測出來的勝率最高,以下是我寫的腳本

//所有股票
//進場後20天出場

value1=GetField("資金流向");
value2=GetField("主力買賣超張數");

if value1 crosses over average(value1,60)*4
//資金流向明顯回昇
and trueall(value2>200,5)
//過去五日主力都買超超過兩百張
and tselsindex(10,6)=1
//大盤外資買多於賣
and close<40
//股價不高於40元
then ret=1;

回測報告如下

2017121301

大家也可以用這個簡單的腳本作基礎,調整資金回流的比例,然後再加上其他技術面的條件,可能會有更好的結果。

綜合抄底策略

近期的股價修正,讓抄底策略開始有了用武之地,之前跟大家提過,在股價修正四成之後,有不少抄底型的交易策略勝率會大幅攀昇,今天跟大家介紹的方法是,把不同的抄底策略全部綜合在一個腳本中,只要股價修正超過四成之後,符合其中任何一種現象,都會觸發訊號。

自從有了XS之後,我應該寫超過500個腳本,回測下來,跌幅超過四成後的各種訊號,勝率真的比較高。

例如到昨天收盤價為止,近百日跌幅超過四成,成交量超過五百張且股價高於十元的股票如下圖

2017120201

這些股票反彈起來,有不少還真的是又兇又猛。

並不是所有跌四成的股票都能買,之前跟大家分享過幾個抄底策略,如果下跌四成後又出現這些現象,進場作多的勝率往往超過六成。我把這些策略綜合在一個腳本中,希望可以節省各位的時間,

我寫的腳本如下

if close*1.4<highest(close,60)then begin
variable:count(0);
count=0;
//之前無長紅,最近兩根長紅
input:ratio(5,"長紅的漲幅下限");
if countif(close[5]>=close[6]*(1+ratio/100),60)=0
and countif(close>=close[1]*(1+ratio/100),5)>=2
then count=count+1;

//均線糾結後上漲
input: s1(5,"短期均線期數");
input: s2(10,"中期均線期數");
input: s3(20,"長期均線期數");
input: Percent(2,"均線糾結區間%");
input: Volpercent(25,"放量幅度%");
//帶量突破的量是超過最長期的均量多少%
variable: shortaverage(0);
variable: midaverage(0);
variable: Longaverage(0);

if volume > average(volume,s3) * (1 + volpercent * 0.01)
//放量25%
and lowest(volume,s3)<1000
//區間最低量小於一千張
and volume>2000
//今日成交量突破2000張
then begin
shortaverage = average(close,s1);
midaverage = average(close,s2);
Longaverage = average(close,s3);
value1= absvalue(shortaverage -midaverage);
value2= absvalue(midaverage -Longaverage);
value3= absvalue(Longaverage -shortaverage);
value4= maxlist(value1,value2,value3);
if value4*100 < Percent*Close
and linearregangle(value4,5)<10
then count=count+1;
end;
//低檔五連陽
if trueall(close>open,5) 
then count=count+1;
//急拉
value11=barslast(close>=close[1]*1.07);
if value11[1]>50
//超過50天沒有單日上漲超過7%
and value11=0
//今天上漲超過7%
and average(volume,100)>500
and volume>1000
then count=count+1;
//連續跳空上漲

if countif(open > close[1],5)>=3
//過去五天有三天以上開盤比前一天收盤高
and average(volume,5)>2000
//五日均量大於2000張
then count=count+1;

//連續多日價量回溫
input:period(5,"回溫期數");
value21=GetField("資金流向");
value22=GetField("強弱指標","D");
if countif(value21>value21[1]and value22>0,period)>= 4
and volume>average(volume,20)*1.3
then count=count+1;

//主力回頭收集
input:period1(20);
value31=GetField("分公司賣出家數")[1];
value32=GetField("分公司買進家數")[1]; 
if linearregslope(value31,period1)>0
//賣出的家數愈來愈多
and linearregslope(value32,period1)<0
//買進的家數愈來愈少
and 
close*1.03<close[1]
//今天又跌超過3%
 
then count=count+1;


if count>=1 then ret=1;
end;

我拿這個腳本去回測,並且對照單一腳本在沒有選股,沒有大盤濾網下的回測數據,作成以下的這張表

抄底策略統計表

以上是跑所有股票,回測過去兩年,二十天後出場的回測數據比較。

這個綜合的策略,交易次數夠多,勝率也夠高,除了在大空頭市場之外,表現非常的平穩。

抄底策略不只這幾個,例如我先前介紹過的大跌後的吊人線等,各位可以把收集得到,勝率夠高的策略都用同樣的寫法放在一起,這是小弟我認為最靠譜的交易策略了。

這種抄底策略的另一個好處是,停損點很好設,破底就停損。