Author Archives: 發財橘子

異同離差乖離率(DBCD)在單一國家股票型基金的應用

投資這個領域,有句千古名言:行情總在絕望中誕生,在半信半疑中成長,在憧憬中成熟,在希望中毀滅, 別人恐懼時要貪婪,別人貪婪時反而要恐懼。那麼如何去衡量貪焚與恐懼呢? 今天跟大家介紹的異同離差乖離率(DBCD)蠻適合來作為衡量的依據,特別是在衡量單一國家股票市場時,還蠻好用。

異同離差乖離率(DBCD),它的計算方式是先算出短天期跟長天期的乖離率,再用長天期乖離率去減短天期乖離率,然後再算這個數字的移動平均值。計算的方式如下

input:length1(10),length2(20),length3(14);
value1=bias(length1);
value2=bias(length2);
value3=value2-value1;
value4=average(value3,length3);
plot1(value4);

上面的腳本用了bias這個函數,我們從bias這個函數的計算方式來探討DBCD這個指標的涵意

// Bias function (for 乖離率相關指標)
//
input: length(numericsimple);

value1 = Average(close, length);
Bias = (close - value1) * 100 / value1;

 

們可以從上面的腳本看到,乖離率代表最近的收盤價到不同天期移動平均線的距離比率,所以當DBCD這個值是正的,代表價值在上漲,漲的愈陡,這個值愈大,如果這個值在下跌,代表價格在下跌,跌的愈兇,DBCD這個值負的愈大。

033102

 

我們運用這個指標來研究幾個單一國家市場目前的情況

 

033101

台股看起來,前一陣子是有點歡樂,目前正處於冷靜期,昨天外資的大手筆,能不能讓冷靜下來的情緒再被點燃,那就再看看,但至少現在絕對不是那麼長線別人恐懼我該貪婪的點。

033103

這兩天有ETF掛牌的印度,仍屬於尚未過於激情的緩昇走勢中

 

033104

跟電子股息息相關的Nasdaq指數則前陣子好像太過歡樂需要冷靜一下

 

透過這個指標,全球主要市場何處超跌,何處過於歡樂,我們都可以一目了然。

 

 

 

 

 

 

 

這個盤接下來到底會不會大跌? ~ 建構專屬的大盤儀表板

大盤這幾日似乎又進入無趨勢狀態,多空看法分歧,今天我想跟大家分享我自己的大盤儀表板,這個儀表板是我在未來操作上,究竟要偏多還是偏空的依據。

去年4/28,指數最高看到10014點,然後去年8/24,最低看到7203,跌了快3000點,接下來反彈到8871點,之後又跌了1000點,然後再收復失土,指數現在又在8700點上下100點遊走,朋友都說這位置很尷尬,上去一千點就賣,下去一千點就買,在這裡就不知如何是好。

我試著用我的大盤儀表板來跟大家討論這個問題。

我在看大盤時,最核心的是先看大咖站在那一邊? 所謂的大咖主要是大股東,外資,投信及市場大戶。

首先我們來看外資,我用的腳本如下:這是去計算過去五天外資的累計買賣超及佔成交量的比例。

input: Length(5); setinputname(1,"計算天數");
input:TXT("僅適用日線以上"); setinputname(2,"使用限制");

variable: _buyTotal(0), volTotal(0);

_buyTotal = summation(GetField("外資買賣超"), Length);
volTotal = summation(Volume, Length);

Plot1(_buyTotal, "累計買賣超");
Plot2(_buyTotal * 100 / volTotal, "比例%");

根據這個腳本所畫出來的圖,目前的情況如下

032901

使用這個指標,我過去的經驗現在可以拿來用的有兩點

1.外資持續買超時這盤不大會大跌

2.但如果外資累計買超佔成交量比例達到1成以上,代表其他人開始站賣方,這種情況如果沒有很快被改善,只要外資一縮手,這盤就作頭,只要外資一番空,這盤就下去。

以這個指標來看,目前作頭的風險不低,但只要外資還買超,那就還是盤而不是跌。

接下來看投信的動向,我使用的腳本如下:跟外資一樣,是去計算過去五天投信累計買賣超及佔成交量的比例。

input: Length(5); setinputname(1,"計算天數");
input:TXT("僅適用日線以上"); setinputname(2,"使用限制");

variable: _buyTotal(0), volTotal(0);

_buyTotal = summation(GetField("投信買賣超"), Length);
volTotal = summation(Volume, Length);

Plot1(_buyTotal, "累計買賣超");
Plot2(_buyTotal * 100 / volTotal, "比例%");

投信的操作風格跟外資比較不一樣,投信的作法上比較bottom up,個別股票未來業績是否能有大成長,是投信會不會進場買股票的主要考量。

所以我們觀察這個指標時,它的應用原則是:

投信長時間佔在賣方,代表基本面沒有很好,相反的,如果投信持續買超,那就代表企業的基本面要開始翻多了。

目前這個指標的情況如下圖

 


032902

可以看得出來投信對企業獲利能力的信心不如今年年初,開始站在賣方,不過由於投信的成交量佔大盤比重不高,如果外資還在偏多,投信的賣壓只能當警訊,不必然就此翻空。

第三個我常拿來研究大盤走勢的指標是噪音指標

它的算法是以一段時間的漲幅作分母,以這段時間每天的最高減最低合計值當分子,兩者相除,再把算出來的值作移動平均,它的腳本如下:

input:n1(5); setinputname(1,"計算天期"); 
input:n2(5); setinputname(2,"移動平均天期");
 
value1=absvalue(close-close[n1-1]); 
value2=summation(range,n1); 
if value1 <> 0 then 
begin
 value3 = value2 / value1; 
 value4 = average(value3,n2); 
end;
 
plot1(value4,"噪音指標");

從這個運算的公式,我們可以發現,當股價沿著趨勢走的時候,這個噪音指標的值不會大,但如果陷入盤整時,分母會變小,這數值就會變大。

所以我們可以拿這指標跟趨勢型的指標搭配一起看,一般來說,趨勢反轉前,就像一部高速行駛的汽車要轉彎,一定會發出很大的噪音,如果趨勢指標出現反轉的訊號,而噪音指標也出現上昇的情況,那麼反轉的機率就更高了。

這個指標可以在辨識趨勢是否成形時,拿來作為一個確認的工具,也可以拿來判斷是否進入盤整。

032903從這個指標來看,之前大盤的轉彎已經完成,目前是處於下降趨勢中。

第四個指標是Aroon 指標

它的主要用途是來判斷趨勢的新生,方向與強度。

Aroon 指標的計算公式 :

這個技術指標中包括兩根線:Aroon-up和Aroon-down。

以計算週期為25日為例 :

Aroon-up=((25-價格創出25日最高價到今天的天數)/25)*100

Aroon-down= ((25-價格創出25日最低價到今天的天數)/25)*100

從以上的公式可以看出這兩根線都是在0-100之間來回運動的

我們把上述的公式改寫成以下的腳本

input:length(25); setinputname(1, "計算週期");
 
variable: aroon_up(0), aroon_down(0), aroon_oscillator(0); 

aroon_up = (length-nthhighestbar(1,high,length))/length*100; 
aroon_down = (length-nthlowestbar(1,low,length))/length*100; 
aroon_oscillator=aroon_up-aroon_down; 

plot1(aroon_up,"aroon_up"); 
plot2(aroon_down,"aroon_down"); 
plot3(aroon_oscillator,"aroon_oscillator"); 

然後畫出的圖如下: 032904

Aroon 指標的使用方法大致上有三點 :

1、新趨勢的產生:當Aroon-up上穿Aroon-down,新的上升趨勢產生;當Aroon-down上穿Aroon-up,新的下降趨勢產生。

2、趨勢的方向:Aroon-up在上,且大於70就是上升趨勢;Aroon-down在上並且大於70就是下降趨勢。

3、判斷趨勢強度:當Aroon-up與Aroon-down分開距離越大,趨勢越強勁。當這兩條線距離很近,平行移動,或小於50甚至30時,就是沒有方向的盤整期。

以目前台股的情況來看,應該說是多頭趨勢已然結束,但空頭趨勢目前還尚未成形,但如果指標再跌,空頭趨勢就會確立。

第五個指標則是 力度指標(Force Index)

force index的腳本如下:

input:length(10),length1(30);
variable:fis(0),fil(0);
fis=average(volume*(close-close[1]),length);
fil=average(volume*(close-close[1]),length1);
plot1(fis);
plot2(fil);
plot3(fis-fil);

這個指標是用每天上漲下跌的幅度去乘以成交量然後計算長短天期的平均線

它的應用原則如下:

1、以長週期Force Index 判斷長期趨勢,若長週期Force Index 在 0 軸以下,則趨勢是持續向下,若遇短週期Force Index 向上穿越0 軸 ,則為多頭信號。

2、以長週期Force Index 判斷長期趨勢,若長週期Force Index 在 0 軸以上,則趨勢是持續向上,若遇短週期Force Index 向下穿越0 軸 ,則為空頭信號。

目前的force index與加權指數的對應圖如下:

032905

根據上述的原則,大盤在三月中那根長黑就已經出現空頭信號,目前長期趨勢仍未完全翻空。

 

根據這五個指標,基本結論就是,如果這兩天再跌,則大趨勢就由多翻空了,主要的救世主是外資,如果外資也站在賣方,那就宜空不宜多了。

 

 

 

 

借券相關欄位在交易策略上的應用

借券相關的統計數字,是一個窺視外資與大股東動向的管道,在使用籌碼分析相關欄位建構交易策略時,這些欄位有一定的參考價值。

什麼是借券呢? 顧名思義,就是把別人的股票借過來運用,時間到了再還人家。

為什麼要借券呢? 大約有幾種用途

1。證券市場賣出。簡單講就是看壞先借來賣出,等跌下來,股價便宜了,再補回來。

2。返還借券或證券權益補償。 借券有約定到期日,到期,可以直接借新的還舊的。

3。融券賣出之現券償還。

4。 認購(售)權證,股票選擇權或其他具有 股權性質金融商品之履約。這是發行權證的證券商會做的事。

5。因應ETF之實物申購或買回。

目前有兩個管道可以借券。

第一個是證交所借券系統,這個系統佔的比例非常高,要進到這個系統當出借人或借券人,都必須是特定機構法人。

第二個是透過券商/證金公司辦理證券借貸業務,其中能當出借人的,必須是辦理借券業務之證券商/證金公司本 身,借券人則是與證券商訂立 委託買賣契約逾三個月以上的投資人就可以。

每天每檔股票借券的相關統計數據,交易所都會公佈,目前交易所每天公佈的借券相關欄位,其中有六個,我們可以拿來撰寫腳本時使用,這六個欄位如下表:

 1. 借券張數
 2. 還券張數
 3. 借券賣出餘額
 4. 借券賣出張數
 5. 借券賣出庫存異動張數
 6. 借券餘額張數

首先,我們得先分清楚借券跟借券賣出是不一樣的,前者 是把股票借來,後者是把股票借過來而且把它賣掉,借過來不一定會賣掉,有可能是為了還券或是履約之用。

交易所其中幾個欄位有作說明,說明如下:

  1. 「借券成交」數量係指當日投資人透過證交所借券中心或向證券商、證金公司借入之證券數量。
  2. 「借券餘額」係指所借入證券尚未返還之數額;即本日「借券成交」數量加計累計至前一日尚未返還之數額再減除本日還券數量後之數額。
  3. 「借券賣出」數量係指當日投資人將已借入之證券在證券市場賣出之數量。
  4. 「借券賣出餘額」係指本日「借券賣出」數量加計累計至前一日尚未回補之數額再減除本日借券賣出回補數量後之數額。

至於借券賣出庫存異動張數則包括了「履約股數」及「還券股數」,比借券賣出餘額多了考量履約股數的部份,至於什麼是履約股數,主要是包含權證履約、可轉債履約及ETF轉換。

每當股票借券的上限,交易所是採總量管制,其規則如下:

1。每日盤中借券賣出委託數量不得超過該 種有價證券最近30個營業日日平均成 交量之20% (採盤中即時控管)

2。借券賣出餘額不得超過該種有價證券上 市(櫃)股份或受益權單位數之10%

3。融券賣出餘額與借券賣出餘額合併計算 不得超過該種有價證券上市(櫃)股份或 受益權單位數之25%。

 

以這六個借券欄位為基礎,我試著根據草根經驗,制定了幾個籌碼相關的自訂指標

1.放空佔成交均量倍數。

以往我們要衡量軋空的力道,都是看融券餘額,但現在應該要再考慮到借券賣出餘額,所以我就試著用(融券餘額+借券賣出餘額)/20日成交量移動平均*100來算出放空佔成交均量倍數,我的想法是,如果這個數字達到一定程度的個股,基本面出現好轉時,空單回補的力量,會是股價上揚的一大助力。 這個指標的腳本如下:

value1=GetField("借券餘額張數","D");
value2=GetField("融券餘額張數","D");
if volume<>0
then 
value3=(value1+value2)/average(volume,20)*100;
plot1(value3,"放空佔成交均量倍數");

參考的畫面如下:
032402
我們從上圖可以發現,當放空佔成交均量倍數到了高點之後,一旦股價止跌回昇, 空單會快速回補,並且轉成股價上漲的助力。

2.借券賣出張數減外資賣張。

由於外資賣張包括了手上持股的賣出以及借券放空的賣出,所以在正常情況下,在大部份情況下,外資賣張都會大於借券賣出張數,但如果反過來呢?

如果借券賣出張數比外資賣張大呢?

那就代表去做借券賣出這件事的人不是外資,那會是誰呢?

為了找出這樣的股票,我寫了一個選股腳本叫作借券賣出張數減外資賣張。

因為這樣的公司不多,所以我用選股腳本來挑

value1=GetField("借券賣出張數","D");
value2=GetField("外資賣張");
value3=value1-value2;
if value3>0
then ret=1;

outputfield(1,value1,0,"借券賣出張數");
outputfield(2,value2,0,"外資賣張");
outputfield(3,value3,0,"借券賣出減外資賣張");

挑出來的股票,我再仔細看看其他賣超的券商分公司,有沒有跟大股東的痕跡? 如果有,那麼我就會去追查大股東借券賣股票的背後故事。

3.借券賣出佔借券比例

借券賣出餘額張數佔借券餘額張數之間的比例,應該可以視為外資等大咖借券之後馬上放空的積極程度。

所以我就寫了一個自訂指標的腳本如下:

value1=GetField("借券賣出餘額張數","D");
value2=GetField("借券餘額張數","D");

value3=value2-value1;
plot1(value3,"借券而尚未賣出餘額");

 

然後我就發現一個很有趣的現象,

“在股價下挫的過程中,借券而尚未賣出的餘額會慢慢墊高,一旦多空反轉,這個餘額就會迅速下滑。”  代表有些外資借來準備空,如果覺得跌的差不多無利可圖了,就不借著等彈上來的空點了。

032403

4.還券張數。

還券張數是另一個觀察外資多空態度的角度。還的多代表心態上沒那麼空了,但心態沒那麼空也有可能是賺飽了獲利了結,所以當我們看到股價先前沒有再大跌,而還券張數比平常多很多,那就代表外資可能準備翻多了,如果先前是有段大跌,那麼這時候還券就算明顯增加,只能說是外資賺夠了在回補,不必然是要翻多了。

我寫了一個自訂指標來呈現還券張數的變化

input:period1(5,"短天期別");
input:period2(20,"長天期別");

value2=GetField("還券張數","D");
value3=average(value2,period1);
value4=average(value2,period2);
plot1(value3,"短期平均線");
plot2(value4,"長期平均線");
plot3(value3-value4,"差額");

我們可以從下面這張圖看到外資的還券行為,是有上述的那樣的現象

 

032404

5.借券賣出張數。

概念跟還券張數差不多,只不過一個是做多,一個是作空。

同樣的邏輯,借券賣出如果暴增而股價不跌,那往往就是股價即將止跌的現象。

這個自訂指標腳本跟還券張數很類似

input:period1(5,"短天期別");
input:period2(20,"長天期別");

value2=GetField("借券賣出張數","D");
value3=average(value2,period1);
value4=average(value2,period2);
plot1(value3,"短期平均線");
plot2(value4,"長期平均線");
plot3(value3-value4,"差額");

只是getfield的欄位不一樣,圖形的例子如下:

032405

 

如果把上面這兩個指標放在一起看,就更能看出有人獲利了結有人開新空單之間的相互關係。

032406

 

借券相關的欄位有助於我們了解外資的情況,未來若看到更多這方面的應用,再跟大家分享。

 

 

 

籌碼面可以拿來運算的欄位及其相關應用

在被問到台灣原生的程式語法平台跟Mutichart,Tradestation,HTS有什麼不一樣的地方時,籌碼相關的應用是我常常提到的一個亮點,籌碼分析的應用基本上分成內外盤,委買委賣,買進賣出分公司家數,法人,資券以及每筆成交張數等幾個方面的相關欄位,以下就根據不同的資料型態,一一來報告這些台股籌碼特殊欄位,如何被應用到程式交易裡。

首先,先整理一下,在自訂指標,策略雷達及選股時,可以使用的籌碼分類大致如下圖:

籌碼分類

詳細的欄位如下表:

 

應用 分類 欄位名稱 單位 計算規則
自訂指標 外資 外資買賣超
外資買賣超張數
外資買張
外資賣張
外資持股
外資持股比例 %
投信 投信買賣超
投信買賣超張數
投信買張
投信賣張
投信持股
投信持股比例 %
自營商 自營商買賣超
自營商買賣超張數
自營商買張
自營商賣張
自營商持股
自營商持股比例 %
法人 法人買賣超
法人買賣超張數
法人買張
法人賣張
法人持股
法人持股比例 %
主力 主力買張 前十五大買超或賣超券商的買超或賣超張數
主力賣張
主力買賣超張數
主力持股
散戶 散戶買張 券商分公司單一價格買或賣成交值小於50萬的合計張數
散戶賣張
散戶買賣超張數
實戶 實戶買張 券商分公司單一價格買進成交值大於等於50萬且小於100萬的合計張數
實戶賣張
實戶買賣超張數
控盤者 控盤者買張 券商分公司單一價格買進成交值大於100萬的合計張數。
控盤者賣張
控盤者買賣超張數
融資 融資買進張數
融資賣出張數
融資增減張數
融資餘額張數
融資使用率 %
現金償還張數
融券 融券買進張數
融券賣出張數
現券償還張數
融券增減張數
融券餘額張數
融券使用率 %
當沖相關 資券互抵張數
現股當沖張數
現股當沖買進金額
現股當沖賣出金額
當日沖銷張數 現股當沖+資券互抵
借券 借券張數
還券張數
借券賣出餘額
借券賣出張數
借券賣出庫存異動
借券餘額張數
內外盤 內盤均量
外盤均量
券商進出表 買家數 買進張數或賣出張數大於零且另一方為零的券商分公司家數
賣家數
分公司買進家數 買進張數或賣出張數大於零的券商分公司家數
分公司賣出家數
分公司淨買超金額家數
分公司淨賣超金額家數
分公司交易家數
買進公司家數 買進張數或賣出張數大於零的整體券商家數
賣出公司家數
籌碼應用 券資比 %
控盤者成本線
主動買力
主動賣力
主動性交易比重 %
實質買盤比 %
實質賣盤比 %
收集派發指標 分公司賣出家數-分公司買進家數
選股專用 董監 董監持股佔股本比例 %
董監持股
董監事就任日期
股本形成 現金增資佔股本比例 %
盈餘轉增資佔股本比例 %
公積及其他佔股本比例 %
信用交易 融資餘額佔股本比例 %
融券餘額佔股本比例 %
融券最後回補日 日期
集保張數 集保張數 萬張
集保張數佔發行張數比 %
特殊日期 新股上市日 日期
現增新股上市日 日期
減資日期 日期
減資最後過戶日 日期
籌碼應用 籌碼鎖定率 % 主力買超/(發行張數-董監持股張數)
自營商 自營商自行買賣買張
自營商自行買賣賣張
自營商自行買賣買賣超
自營商避險買張
自營商避險賣張
自營商避險買賣超
報價欄位 開盤 開盤委買
開盤委賣
委託單 委比 % (總委買-總委賣)/(總委買+總委賣)
總委買
總委賣
委買
委賣
委買1
委買2
委買3
委買4
委買5
委賣1
委賣2
委賣3
委賣4
委賣5
委買賣差

這麼多的欄位,要如何在設計腳本時拿來使用呢?

作法上跟取得其他欄位的方法是一致的,都是運用getfield這個語法,例如我們如果想要拿”控盤者成本線”這個欄位來畫圖,腳本可以這麼寫:

value1=GetField("分公司買進家數");
value2=GetField("分公司賣出家數");
value3=GetField("分公司交易家數");

plot1(value1,"分公司買進家數");
plot2(value2,"分公司賣出家數");
plot3(value3,"分公司交易家數");

這樣一來就可以把這些籌碼相關的欄位變成自設指標畫在圖上了。

這麼多的籌碼欄位,應該如何應用呢? 底下這張圖可以做個參考。基本上,大股東及法人站在買方,後市看好的機率大些,反之則下跌的機率較高。

籌碼圖

那麼要如何分辨今天大股東及法人是站在買方或賣方呢?

未來幾天,我們來陸續介紹各種這些籌碼欄位的運用方法,來分辨大股東及法人,主力是站在買方還是賣方

今天,先來介紹的這個方法,是結合法人進出表及分公司進出表兩個不同的公佈數字,很單純地就只看每一天的買盤來源:

籌碼一

我設計的腳本如下:

input:period(5,"短移動平均線天期");
input:period1(20,"長移動平均線天期");
value1=GetField("主力買張");
value2=GetField("實戶買張");
value3=GetField("散戶買張");
value4=GetField("控盤者買張");
value5=GetField("法人買張");
value6=value1+value2+value3+value4+value5;
//合計的買張數當分母,這有可能超出成交量
value7=value1+value4+value5;
//主力+法人+控盤者的買張合計作為大戶的買張
if value6<>0
then value8=value7/value6*100;
//計算大戶買張佔各方勢力買張的比例
value9=average(value8,period)-average(value8,period1);
if value9>0
then 
begin
value10=value9;
value11=0;
end
else
begin 
value11=value9;
value10=0;
end;
plot1(value10);
plot2(value11);

我稱這個指標為買張大戶散戶分佈線,我把最近大家比較關注的股票用這個指標來呈現目前大戶法人主力是站在買方還是賣方?

032202

032203

032204

從上面這幾張圖就可以發現,我們其實透過散戶與大戶佔買張比例的變化,可以清楚的看到當大戶比重持續上昇時,籌碼被收集後股價都較有表現的機會,反之則都屬於偏空或盤整的格局。

從這個例子我們就可以發現,當我們把所有可以拿來作運算的籌碼欄位都攤開來時,擷取其中一些欄位,加以運算,往往就可以自行創造出一些有意義且具有參考價值的指標,再從指標的共同特徵中進一步撰寫出創新的交易策略,把籌碼分析裡的龐大數據轉換成可以拿來決定交易策略的工具,這樣創造出來的策略,再和其他透過價量等數據所創造出來的交易策略結合,目標就是希望創造出勝率更高的交易策略,這種使用更多客觀數據來作交易決策的方法,就是孫子兵法中的”多算勝,少算不勝”的道理吧。

032205

 

 

 

好公司的特徵

看到一篇寫的很好的文章,推薦給朋友們

http://www.stockfeel.com.tw/%E5%BE%9E%E9%96%B1%E8%AE%80%E5%84%AA%E8%B3%AA%E5%85%AC%E5%8F%B8%E9%96%8B%E5%A7%8B%EF%BC%8C%E7%B7%B4%E7%BF%92%E4%BB%A5%E4%B8%8D%E5%90%8C%E8%A7%92%E5%BA%A6%E6%80%9D%E8%80%83%E4%BA%8B%E6%83%85/

這篇文章來自stockfeel這個網站,這裡的文章寫的真的不錯,能對我們的投資思考有所啟發。

這篇文章的主軸是,就算覺得股價太貴不想買,但還是可以研讀一下那些成功公司的財報,了解這些公司成長的過程,找到一些蛛絲馬跡,再把這些蛛絲馬跡,應用在那些正準備冒出頭的公司上,讓我們可以在新興好公司才剛冒出頭時,就挑到他們。

從這篇文章裡,我學到了一些尋找明日之星的方法。

1。找擁有定價能力(pricing power),高投資報酬率的公司。

2。尋找那些費用在下降,但營收在成長的公司,來自營運的現金流量在成長的公司。

3。尋找有規模經濟的商業模式,並且比別人提早看到未來會勝出的公司。

 

我試著用一些簡單的選股標準來尋找符合上述條件的股票

1。毛利率穩定。擁有定價能力的公司,毛利率應該丕至於持續下滑。

2。ROE達一定水準。高投資報酬率的公司,ROE不會太差。

3。來自營運的現金流量穩定成長中。

4。營收成長,但營業費用在減少。

我先試著尋找那些毛利率沒啥掉的公司,所以我寫了一個腳本如下:

value1=GetField("營業毛利率","Q");
input:ratio(10,"毛利率單季衰退幅度上限");
input:period(10,"計算的期間,單位是季");

if trueall(value1>value1[1]*(1-ratio/100),period)
then ret=1;

如果再加上連續兩年來自營運之現金流量成長的條件,符合的股票只剩下68檔,名單如下:

032101

若是我換另一個角度,去尋找那些營收上昇且費用在降低的股票,於是我就寫了一個腳本如下:

value1=GetField("營業收入淨額","Q");//單位百萬
value2=GetField("營業費用","Q");//單位百萬
input:period(5,"計算的季別");
input:count(2,"符合條件之最低次數");

if countif(value1>value1[1]and value2<value2[1],period)>=count
then ret=1;

這個腳本如果參數是設過去七季有三季以上營收成長費用衰退時,共挑出了72檔股票,名單如下:

032102

如果把這兩個條件合在一起,腳本可以這麼寫

value1=GetField("營業毛利率","Q");
value2=GetField("營業收入淨額","Q");//單位百萬
value3=GetField("營業費用","Q");//單位百萬
input:ratio(10,"毛利率單季衰退幅度上限");
input:period1(10,"計算的期間,單位是季");
input:period2(5,"計算的季別");
input:count(2,"符合條件之最低次數");

if trueall(value1>value1[1]*(1-ratio/100),period1)
and 
countif(value2>value2[1]and value3<value3[1],period2)>=count
then ret=1;

這樣挑出來的股票共有十八檔,名單如下:

032103

透過這樣的方式可以節省不少一檔檔挑個股的時間,不過像有沒有經濟規模這種篩選條件,就有賴於仔細去了解該公司所處產業才能知曉的。

 

Anyway,讀到一篇好文章,是幸福,用好文章寫出選股程式,是更大的幸福,寫完後可以分享給大家參考,是大大的幸福。

 

 

設定交易策略一定要記得不能逆天而行

我認識的市場大咖分兩種

我用一張圖來表示

032001

第一種連去歐洲玩,都會打國際電話回來問我NB能不能裝XQ

第二種則是有行情就很活躍,一天打好幾通電話來,沒行情的時候,只能從FB上知道他一下子在大陸,一下子在京都,一下子在意大利。

就我的觀察,第一種的績效不見得優於第二種。

當XS的回測功能出來時,我就想要來印證一下,到底那一種操作的風格能賺到錢。

我先拿他們都很愛作的有量的股票來作為回測的標的,我把台灣100+中型100+電子100的成份股拿來做為測試的股票,由於三個指數成份股有重疊,所以加起來共是190檔。

接下來我用他們都很愛用的操作策略: 開盤五分鐘線三連陽

input:TXT("僅適用60分鐘線以內"); setinputname(1,"使用限制");

if barfreq = "Min" and barinterval <= 60 and
 (time[2] = 84500 or time[2] = 90000) and
 Close > Close[1] and Close[1] > Close[2] and
 Close[2] > Open[2] 
then ret=1;

如果我把這個腳本拿去回測三年的資料,回測的結果如下:

全測結果

真的是家裡再有錢都不夠輸。一共交易了3312次,一次交易成本千分之五,光全部的交易成本就佔了1600%,就算勝率其實沒太差,有49.49%,但還是討不到什麼便宜

 

如果我只在加權指數站穩月線時才用這個策略去交易,最近一段回測的結果如下:

多頭

 

一個多月投資報酬率達到37.5%,且勝率拉高到66.88%,如果停利放大到5%,停損縮小到2%,那麼勝率會降到51%,但總報酬率會擴大到71%

 

跟大家舉這個例子,是想跟大家提醒,我們走向程式交易這條路,千萬不要有那種一隻程式要春夏秋冬都適用,打遍天下無敵手的念頭,而且要有大勢,選股,決定交易時機各用不同程式的基本思維,唯有如此,才能真的找到財富自由的那一條路。

 

 

尋找那些創過去五年同月份營收新高的股票

當月營收公佈時,我們會知道跟去年同期相比的年增率,也知道跟上個月相比的月增率,可是如果我們要找那些比較長線可能有轉機的公司,我們應該找出那些當月營收創過去五年同月份營收新高的公司。

怎麼找出這樣的公司呢? 我寫了一個選股的腳本如下:

array: numarray[5](0);
variable:x(0);
for x=1 to 5
numarray[x]=GetField("月營收","M")[(x-1)*12];
if numarray[1]=highestarray(numarray[1],5) then
ret=1;

在這個腳本中,我第一次用到陣列來寫腳本,主要是用陣列來定義最近一個月營收與過去四年同月份的營收,然後找出這五個值當中最高的就是最近這一個的股票。

用這個腳本來跑最近公佈的月營收數字,會發現二月份營收創過去五年二月營收新高的股票共有261檔,名單如下:

031801

 

上面的每一檔股票,他們的歷年月營收一到十二月走勢圖,都像下面這一張圖一樣,最近一個月的營收是創五年來的新高

031802

 

 

在這麼多檔股票中,如果我們擔心這個月營收的好表現是因為上個月出貨不及遞延到這個月造成的,那麼我們可以把條件限制的更嚴,挑那些最近兩個月的營收都創下當月五年來新高的股票,那麼腳本就可以略為修改成以下的樣子

array: numarray[5](0);
variable:x(0);
for x=1 to 5
numarray[x]=GetField("月營收","M")[(x-1)*12];
if trueall(numarray[1]=highestarray(numarray[1],5),2) then
ret=1;

透過這兩個腳本,我們就可以在第一時間找到那些可能已經脫胎換股的公司。

 

 

現股當沖腳本的奧義

去年 6月1日起單日漲跌幅限制從7%放大到10%,今年2月1日起,可以進行現股當沖的標的,開放到只要有信用交易就可以,所以可以現股當沖的股票,上市櫃加起來有1432檔,涵蓋了超過90%的上市櫃股票。這種制度上的變化,讓個股當沖交易成為一個比以前更值得研究的領域。不過由於現股當沖的交易成本,不考慮退佣的話是0.585%,就算有退佣,也差不多到千分之四到千分之五之間,所以要長期以現股當沖來累積財富,勢必要有一套尋找當日波動幅度大股票,並且在股價波動的起始點就進場的策略,今天想跟大家報告的,就是我對這個領域的研究心得。

 

我的研究方法分成幾個部份

一,先找出自去年六月一日以來,所有有信用交易股票,每日震盪幅度的總合,然後透過排序,去尋找那些股票波動幅度比較大。透過這個方法,先濾掉那些大牛股。

二,把濾掉大牛股之後的股票,找出它們這幾個月來曾經漲停的日子,然後去分析當日的波動型態

三,尋找這些當日漲停個股的共同特徵,寫成交易策略

四,透過回溯測試,修正交易策略

 

經過了這陣子的測試之後,我想要分享的當沖交易策略有三個,

第一個開高後不拉回

input:Ratio(2.5); setinputname(1,"開高幅度%");
 input:aRatio(1); setinputname(2,"拉回度%上限");
 input:TXT("僅適用於15分鐘以內"); setinputname(3,"使用限制"); 
if barfreq ="Min" and barinterval <=15 
and time <= 091500 
and q_DailyOpen > q_RefPrice *(1+Ratio/100)
 and q_Last > q_DailyHigh* (1- aRatio/100) 
then ret=1;

 以下是這類股票的示意圖 盤整後開高不拉回

 

 

第二個則是橫向盤整後的旱地拔葱

if barfreq <> "Min" or barinterval <> 1 then RaiseRuntimeError("請設定頻率為1分鐘");
variable:KBarOfDay(0); if Date<> Date[1] then KBarOfDay = 1 else KBarOfDay+=1;


input:P1(60); setinputname(1,"狹幅盤整計算期間(分鐘)");

if high = q_DailyHigh and {來到今日最高價}
 KBarOfDay > 30 and {今日至少有30根K棒交易}
 TrueAll( AbsValue(Close[1]/Close[2]-1) < 0.005,KBarOfDay-1) and{必需只有小波動}
 AbsValue( Close[1]/Close[KBarOfDay-1]-1 ) < 0.02 {開盤到前分收K不超過2%}
then ret=1;

以下是這類股票的示意圖

火箭後拉回

第三個則是階段式向上

input:TXT1("僅適用1分鐘線"); setinputname(1,"使用限制");
input:TXT2("只於9:10判斷"); setinputname(2,"使用說明");

if barfreq = "Min" and barinterval = 1 and time =91000 and
 TrueAll(close >Close[1] ,10) then ret=1;





以下是這個腳本的示意圖

階梯式向上

這三個腳本先前都介紹過,如果用1500檔股票去洗,出來的股票上漲的機率並不是那麼高,但我在研究那些失敗的股票後發現,當個股盤中出現上述三種走勢之後,最後無法順利收高的股票,往往有三種共同的特徵

1.先前成交量不大,意思是一個小咖咖的起心動念,就足以造成交易策略的訊號被觸發。等到小咖咖買完了,我們再進場,剛好套到最高點。

2.前幾天已有明顯上漲,今天再拉高馬上踫到獲利了結賣壓。

3.大盤偏空,指數出現較大的下挫,覆巢之下,個股很難收高。

於是我用以下的腳本來選股

input:b1(1.5,"三日漲幅上限");
if volume*close>=30000
and close<=close[2]*(1+b1/100)
then ret=1;

這個選股腳本要挑的股票必須符合兩個條件

1。前一日成交值超過3000萬

2。過去三個交易日漲幅很小。

並且把選出來的股票,只有在大盤週線在月線之上才開始啟動上述三個交易策略,讓符合上述三種情況的個股,在盤中送出訊號給我。

這是到目前為止,比較有機會有差價的先買後賣當沖策略腳本,我會繼續測試,有新的方向再跟大家報告。

 

交易策略的形成過程~以多次到頂而破

這次AlphaGO的三勝一敗,讓人工智慧,再次回到聚光燈下。

我在開發交易策略的過程裡,深深體會人與機器之間那種1+1>2的力量,我認為人們運用機器大量運算,測試,不斷地學習改進,是找出有價值交易策略的一條更行之道。

把程式交易視為毒蛇猛獸,跟把人工智慧視為機器統治人類的前兆一樣,無法改變及面對機器運算能力持續進步的趨勢。

善用機器愈來愈強大的運算能力,可以讓人們收集整理分析及決策的力量,也跟著變大。

今天我想舉一個交易策略的形成過程作例子,說明機器的強大運算能力,可以協助我們做到什麼地步。

我經常跟大家分享的一個交易策略叫多次到頂而破。

一開始是我師父讓我把創新高的股票用Excel整理出來,每天送給他,後來我發現,不是每檔創新高的,接下來就一定會創新高,但那些衝了幾次都沒衝過去的高點,一旦衝過去了,後面都還會漲,所以我就寫了一個多次到頂而破的交易策略,腳本如下:

input:day(100);
input:band1(4);
setinputname(1,"計算區間");
setinputname(2,"三高點之高低價差");
value1=nthhighest(1,high[1],day);
value2=nthhighest(3,high[1],day);
value4=nthhighestbar(1,high,day);
value5=nthhighestbar(3,high,day);
value6=nthhighestbar(5,high,day);
value7=absvalue(value4-value6);
value8=absvalue(value5-value6);
value9=absvalue(value4-value5);
condition1=false;
if value7>3 and value8>3 and value9>3
then condition1=true;
value3=(value1-value2)/value2;

if value3<=band1/100
and close crosses above value1
and volume>2000
and condition1
then ret=1;

這個腳本是去找過去100根Bar中的最高三個點,而且高點之間差距都超過三根bar,且三個高點最高與最低差不超過4%

結果挑出來的股票例如昨天是跳出志聖2467與帛漢3299,跟我心理想的多次到頂而破有不少的差距,我心中的是像下面這張圖的樣子

031301

 

後來這個腳本後來經過我同事的修改,變成以下的腳本

input:HitTimes(3); setinputname(1,"設定觸頂次數");
input:RangeRatio(1); setinputname(2,"設定頭部區範圍寬度%");
input:Length(20); setinputname(3,"計算期數");

settotalbar(300);
setbarback(50);

variable: theHigh(0); theHigh = Highest(High[1],Length); //找到過去其間的最高點
variable: HighLowerBound(0); HighLowerBound = theHigh *(100-RangeRatio)/100; // 設為瓶頸區間上界
variable: TouchRangeTimes(0); //期間中進入瓶頸區間的低點次數,每跟K棒要歸0
 
//回算在此區間中 進去瓶頸區的次數 
TouchRangeTimes = CountIF(High[1] > HighLowerBound, Length);
 
if TouchRangeTimes >= HitTimes and ( q_ask> theHigh or close > theHigh) then ret=1;

這個腳本就是XS雲端策略中心裡的多次到頂而破的腳本。

不過透過這個腳本挑出來的股票,勝率還是很不穩定。

 

後來,我看到底下這本書

大漲的訊號

書中有特別強調,要挑這些創新高的股票時,應該要留意其基本面是很穩固的,創新高代表的是更上一層樓的意思,因此我就不再把1500檔股票去拿去跑這個腳本,也是改成用過去五年每年ESP都超過0.5元的選股條件先把1500檔縮小範圍,然後再去跑,這樣目標族群就從1500檔縮小到484檔

031401

 

透過這樣的過濾條件,在多頭市場這個腳本的勝率已經令我滿意,但在空頭市場還是當會追高後被套,於是我再設定,只有在加權指數週線在月線之上時,這個策略才開始執行。

到這裡,我算是完成了一個令我覺得還OK的交易策略。

回顧整個交易策略的演進,其實就像是下圖一般,不斷演進的過程,

策略的形成

 

這個過程裡,最大的敵人其實就是懶惰,我常被反應照某個腳本去賭會輸錢,然後呢? 其實該做的是找出那個腳本輸錢的股票具有什麼特色? 進一步根據這些特色去調整腳本,看是加濾網,還是調整腳本,最不該做的事情是: 放棄。

 

我認為,放棄電腦強大的運算能力,想靠經驗及直覺在市場上討生活的人,會像末代武士一樣,刀法很厲害,但別人都用槍。

 

 

 

 

 

尋找五星級的CEO

昨天介紹了一篇寫的非常好,關於Outsiders這本書的讀書心得(連結在下面),從反敗為勝的艾科卡到後來的基業長青,A到A+等等著作,美國作家非常喜歡探討什麼樣的CEO可以帶領公司持續的成長。

當我們長期投資一檔股票時,總會期待遇上一個一百分的CEO,就像Outsiders這本書裡的那些CEO,可以創造比指數高出二十倍以上的投資報酬率。

這些書裡描繪的都是美國企業的CEO,我在1990年代,約有十年的時間,擔任過記者,研究員等工作,對於台灣的CEO們,有過一些面對面觀察的機會,在我決定是否投資一家公司時,CEO確實是一個很重要的考量因素,今天試著跟大家討論,什麼樣的CEO,值得我們長期追隨。

 

在Outsiders這本書裡,作者觀察到,厲害的CEO,關鍵在於資本分配(Capital allocation)的能力,也就是取得資金,創造盈餘及分配資金的能力,底下是寫下這本書讀書心得的作者整理這些CEO們的共同特質

1.數學很好,擅長機率,理性分析各種投資機會,
適時捨棄手上的爛牌,難得看到好牌,勇敢下大注,就跟打Poker一樣。
2.低調、節儉,刪除任何不必要的花費,想盡辦法遞延所得稅 或 合法節稅。
3.組織扁平,充分授權最優秀的人才。
4.不盲從主流觀點,敢在董事會上獨排眾議。
5.不浪費時間與華爾街打交道,只做真正對公司有幫助的事。
6.專注在現金流,而非帳面獲利。
7.與一線營運保持距離,把時間花在挖掘其他好機會。

8.除非公司之後能產生很多現金,不然隨時保持充足的銀彈,等待好機會下大注。

 

在台灣,若要尋找類似的八個條件,也許可以試著用同樣的方法,找到那些公司投資報酬率比加權指數好非常多的股票,然後去研究他們的CEO,不過我想反過來列出,有那些特徵的,不會是值得我們用新台幣長期追隨的CEO,畢竟在台灣,能把一家公司經營到可以上市上櫃,全台灣也不過就一千五百多人,這些人不會是等閒之輩,所以用捨去法會比用正面篩選條件更符合台灣本地的情況。

早期,主機板從386到486時代,華碩,精英,技嘉,微星,都曾經是我研究的對象,四家公司到目前也都還活著,但活的完完全全不一樣,施祟棠與徐祥,葉培城,蔣東濬他們的人格特質,是如何影響這四家公司在過去二十多年來的發展?

同樣的研究與思考,也發生在加工絲業,化纖業,PCB廠,LED廠,光碟片廠,晶圓封裝測試,以及連鎖餐飲業等各行各業。

在我研究的過程中,我發現,

1.有的CEO創業的過程很拼,但公司上市後,賺了大錢,開始進入上流社會,從刻苦耐勞轉變成奢華人生,生活的重心已不在本業。

2.有的CEO把資本市場當成淘金礦場,買機器拿回扣,利用公司的各項消息趁機炒股,我還見過很誇張的,公司的一些支出被規定要跟他自己開的公司購買。

3.有的CEO志大才疏,趁著股市狂飆時,拿了一堆錢進到公司後,開始瘋狂大採購,什麼新興行業都投資,就算跟自己的本業八竿子打不著。

4.有的CEO把力氣放在鞏固自己的位置,而不是為公司尋找其他的成長動能,造成公司研發及資深同仁被大量挖角。

5.有的CEO是大財團的第二代,第三代,除了深陷家族複雜控股關係的泥沼中之外,還常活在上一代戰功彪炳的陰影中。

 

基於以上的觀察,以下是我自己列出來的,關於尋找台灣五星級CEO的一些基本的標準

1.在大金額資本支出之後的三年內,年度營業額出現明顯的成長。因為這代表投資的眼光不會太差。

2.在公司擴充的過程中,股東權益報酬率並沒有被稀釋。代表沒有盲目控充。

3.公司的營業費用率低於同業。代表沒有浪費與人謀不贓。

4.CEO對其從事的行業一生相許,樂在其中。這樣才不會賺到錢就不再競競業業。

5.在公司高本益比時進行籌資,以最低的資金成本取得擴張用的資金。這代表對於資本運用的時機有精準的判斷

6.長期維持穩定的營運現金流入。這代表的是長期營運的績效

7.研發費用與資本支出佔公司營收比重一直維持在一定水準。代表不斷在尋找下一個成長的點

這七個條件有些能量化,有些很難量化,我試著擬了一個選股法如下:

 

031001

 

根據這組選股條件,目前台股中共有107檔符合,名單如下:

031002

 

以上這107檔是通過量化條件的股票,至於非量化的部份,比方說是否過著奢華生活之類的,就有賴大家自己的留意了

 

希望大家都能找到屬於自己的五顆星企業

祝   週末愉快