Author Archives: 發財橘子

當沖佔成交易多少比重後短線明顯過熱?

被問到一個很有趣的問題:當沖佔交易比重如果太高,股價是不是比較容易回檔?

於是我寫了以下的腳本,回測看看

腳本如下

value1=GetField("當日沖銷張數");
if volume<>0
then value2=value1/volume*100;
input:deadline(70);
if value2>=deadline
 then ret=1;

回測報告如下

當沖比重回測報告

這裡我回測的是全部的股票,停損停利均設為5%,結果在223個符合條件的交易中,有136個最終可以停利出場,機率是六成左右。

如果我把成交量不到1000張的股票濾掉,腳本變成如下

value1=GetField("當日沖銷張數");
if volume<>0
then value2=value1/volume*100;
input:deadline(70);
if value2>=deadline
and volume>1000
 then ret=1;

回測的期間改成從去年四月十二日當沖稅減半公佈之後,回測的結果如下

2018020201

在78次的交易裡,有52次可以獲利出場,勝率達到三佔兩勝的66%,別忘了在這段期間指數可是大多頭市場,顯然成交量超過一千張的股票如果當沖佔七成以上,作多就要非常小心了。

 

 

雲帶型指標的制作方法

一目均衡表這個指標裡有個雲帶,跟K線搭在一起,在視覺上確實有不錯的效果,今天跟大家分享類似這樣的雲帶怎麼在XS自訂指標裡畫出來。

雲帶的概念是兩條線之間的區域,這裡舉的例子,是用月線及季線來作這兩條線,畫出雲帶。腳本如下

value1=average(close,20);//月線
value2=average(close,60);//季線
if value1>=value2
then begin
plot1(value1);
plot2(value2);
end else begin
plot3(value2);
plot4(value1);
end;

在這裡一個plot四條線,其中兩條畫成底色,所以肉眼只看到兩條線,在主圖疊圖時繪圖樣式請設定如下圖

2018013001

根據這樣的設定,畫出來的圖呈現如下

2018013003 2018013002

這樣畫的好處是,可以透過雲帶的顏色及柱狀面積的變化,一方面了解多空態勢,另一方面也可以了解趨勢的力道。

 

 

0050溢價是底部指標嗎?

昨天說的那位高人除了發明了四大法人之外,也教我說,如果0050溢價的話,代表有人對未來非常樂觀,在大跌時出現這種樂觀想法的,一般都不會是散戶,應該是所謂的政府相關基金,所以我就寫了一個腳本來計算0050的溢價,

腳本如下:

value1=GetSymbolField("0050.tw","收盤價");
value2=GetSymbolField("0050n.tw","收盤價");
value3=value1-value2;
plot1(value3,"0050溢價");

其中0050n是0500的估計淨值,我用這個指標來跟加權指數對照如下

0050溢價

還真的有其值得參考之處。

我好想跟送這位高手一個”惠我良多“的牌子

從官股券商在0050的動向觀察政府的多空心態

昨天踫到一個高人,跟我說以後看股票不要只看三大法人的進出,要看四大法人,除了外資,投信及自營商之外,還要加上勞退,退撫等政府相關的基金。 以前我都覺得政府基金的操盤人很菜腳,特別是阿扁剛上台的時候,不知道用了什麼肉腳,明明資金外逃很嚴動,網路又泡沫,政府基金卻在那邊撐盤,一直到撐不住了才放手,結果這位高手很神秘的跟我說,現在很不一樣喔! 那要如何留意這些政府相關基金的動向呢?  高手教我一招:留官股券商在0050的買賣超情況。

回家後我開始作功課,大家請看下面這兩張圖

2018012302

2018012303

我們似乎可以發現,政府相關基金有著急跌進場的特性,我們常說下跌的刀子不能接,要等到跳到地上鏘一聲才進場,然後從上面這張圖來看,官股在0050的買超情況,多少可以代表政府相關基金操盤人設定的底部位置。

最後這張是最近的情況

2018012301

往後要留意第四大法人的多空動向喔!!

 

轉強天數指標的應用

當我們應用個股儀表板找出個股是否出現買進訊號時,要如何提高預測的精準度呢?  在看過大量的個股儀表板圖形後,我發現,如果股價是長期相對弱勢,但在個股儀表板出現不只一個買進訊號之前,股價就開始抗跌或比大盤強,那麼買進訊號的正確度會提高不少。今天就是來跟大家討論這樣的觀察。

請大家先看這張圖,在這張圖裡我們可以發現,當個股儀表板密集出現買進訊號之前,如果個股雖然在盤整,但其實表現的比大盤強,搭配起來就是一個更精準的買進訊號。

相對走強且出訊號

首先,先複習一下個股儀表板的腳本

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: Length_D(9, "日KD期間");
input: Length_M(5, "周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,"內外盤量比差");

//===========淨力指標==============
variable:c4(0);
input:period2(10,"長期參數");

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: FastLength(12), SlowLength(26), MACDLength(9);
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,"主力買張");


從這腳本我們可以了解,個股儀表板的目的,在於透過不同的資料欄位,標示出個股可能值得買進的訊號,但這些訊號如果是在多頭末昇段時,也可能會出現,這時候我們可以搭配轉強天數指標來一起看,如果轉強天數指標是從低檔穩定在上昇,就更值得留意。

我自己的轉強天數指標是這麼寫的

input:period(20);
value1=GetField("強弱指標","D");
//個股漲跌幅減加權指數漲跌幅
value2=GetField("資金流向");
value3=countif(value1>0 and value2>value2[1],period);
plot1(value3);

想法是計算過去一段時間比大盤強且佔大盤成交量比重也比前一天高的天數。

這兩個指標一起搭起來看,可以找到那些埋伏一段時間後開始要發動攻勢的股票

以下是最近很強的股票過去在起漲點時,這兩個指標的搭配情況

撼訊 世紀鋼 環球晶 日馳

以上是我在用個股儀表板時偶然發現的現象 ,野人獻曝一下

 

 

月報酬率等績效圖的寫法

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

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

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

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

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

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

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