Author Archives: 發財橘子

細產業整體來自營運的現金流量的意義

一個產業,整體來自營運的現金流量,代表這個產業整體的永續力,也代表這個產業創造現金的能力,長期追蹤這個數字,可以了解這個產業目前所處的狀態。

要追蹤這個數字,在XQ中自訂指標的腳本如下

Group: _group();//宣告群組
var: _i(0), _size(0);
_group = GetSymbolGroup("成份股");//指定群組的商品
// 檢查是否有資料
_size = GroupSize(_group);
if _size = 0 then return;
// 迴圈運算前,初始化變數
value1 = 0;
value2 = 0;
value3=0;
// 迴圈計算每一檔成份股數值
for _i = 1 to _size begin //大迴圈會跑遍每一檔成份股
if CheckSymbolField(_group[_i], "Close") then begin //確認股票當天有資料
// 實際要計算的內容===開始===
// STEP 1 換期時數值歸零
if GetSymbolFieldDate(_group[_i], "來自營運之現金流量", "Q") > value1 then begin //如果成份股有人提前公佈數值,目前計算的都歸零
value1 = GetSymbolFieldDate(_group[_i], "來自營運之現金流量", "Q");
value2 = 0;
value3 = 0;
end;
// STEP 2 同樣期別時,數值計算
if GetSymbolFieldDate(_group[_i], "來自營運之現金流量", "Q") = value1 then begin //依最新的資料期別進行統計
value2 = value2 + 1;
value3 = value3 + GetSymbolField(_group[_i], "來自營運之現金流量", "Q");
end;
// 實際要計算的內容===結束===
end; 
end;
// 要繪製的指標
// 
plot(1, value3, "整體來自營運之現金流量");

 

以下是一些這個指標跟細產業股價指數的對照圖

 

從平均殖利率找細產業超買與超賣區

一個相對成熟的行業,市場對它的估值有一定的標準,這個標準,會體現在整體的殖利率上。整體殖利率高到一定程度,會進入超賣區,股價進入築底區,相反的,整體殖利率太低,資金會離開,尋找CP值更高的行業。

用來追踨細產業殖利率長期走勢的自訂指標,腳本如下

Group: _group();
var: _i(0), _size(0);

var: _Health(0);

_group = GetSymbolGroup("成份股");

// 檢查是否有資料
// 
_size = GroupSize(_group);
if _size = 0 then return;

// 迴圈運算前,初始化變數
//

value1 = 0;
value2 = 0;
value3=0;
// 迴圈計算每一檔成份股數值
// 
for _i = 1 to _size begin //大迴圈會跑遍每一檔成份股
if CheckSymbolField(_group[_i], "Close") then begin //確認股票當天有資料

// 實際要計算的內容===開始===
//getSymbolFielDDate("請填入正確的商品ID", "殖利率", "D")

// STEP 1 換期時數值歸零
if GetSymbolFieldDate(_group[_i], "殖利率", "D") > value1 then begin //如果成份股有人提前公佈數值,目前計算的都歸零
value1 = GetSymbolFieldDate(_group[_i], "殖利率", "D");
value2 = 0;
value3 = 0;
end;

// STEP 2 同樣期別時,數值計算
if GetSymbolFieldDate(_group[_i], "殖利率", "D") = value1 then begin //依最新的資料期別進行統計
value2 = value2 + 1;
value3 = value3 + GetSymbolField(_group[_i], "殖利率", "D");
end;
value4=value3/value2;




// 實際要計算的內容===結束===
//

end; 
end;

// 要繪製的指標
// 
plot(1, value4, "平均殖利率");

 

以下是一些細產業的相關圖形,供大家參考

不同的行業市場給的合理平均殖利率會不一樣,景氣循環股跟內需型股,這個指標會較具參考意義

 

從細產業整體營業利益看產業目前的狀態

一個細產業所有成份股的本業獲利加總,很能說明這個產業目前的發展情況,當整體產業是在虧錢,通常會加速淘汰賽,往往是另一波產業新格局的起點。當一個產業整體獲利創長期以來的新高,代表這個產業有了新應用,新市場。

下面這個腳本是用Group語法寫出來的自訂指標腳本,

Group: _group();//宣告群組
var: _i(0), _size(0);
_group = GetSymbolGroup("成份股");//指定群組的商品
// 檢查是否有資料
_size = GroupSize(_group);
if _size = 0 then return;
// 迴圈運算前,初始化變數
value1 = 0;
value2 = 0;
value3=0;
// 迴圈計算每一檔成份股數值
for _i = 1 to _size begin //大迴圈會跑遍每一檔成份股
if CheckSymbolField(_group[_i], "Close") then begin //確認股票當天有資料
// 實際要計算的內容===開始===
// STEP 1 換期時數值歸零
if GetSymbolFieldDate(_group[_i], "營業利益", "Q") > value1 then begin //如果成份股有人提前公佈數值,目前計算的都歸零
value1 = GetSymbolFieldDate(_group[_i], "營業利益", "Q");
value2 = 0;
value3 = 0;
end;
// STEP 2 同樣期別時,數值計算
if GetSymbolFieldDate(_group[_i], "營業利益", "Q") = value1 then begin //依最新的資料期別進行統計
value2 = value2 + 1;
value3 = value3 + GetSymbolField(_group[_i], "營業利益", "Q");
value4=average(value3,4);
end;
// 實際要計算的內容===結束===
end; 
end;
// 要繪製的指標
// 
plot(1, value3, "整體營業利益");
plot(2,value4,"4季移動平均");

 

應用在細產業指標上,可以畫出每個細產業指標的整體營收。

以下是一些細產業跟整體營收的對照圖,供參考

 

研發費用與產業輪動的關係

產業整體的研發費用,代表細產業的競爭狀態,持續堆高的研發費用,是一種淘汰賽,市佔率大的公司有利,研發費用也代表一個產業的景氣更迭,長期維持一定程度研發費用的產業,如果連續兩季研發費用創新高,往往代表產業有了應用,這常常是產業開始走向新方向的訊號。

產業整體研發費用的自訂指標,樣本如下

Group: _group();//宣告群組
var: _i(0), _size(0);
_group = GetSymbolGroup("成份股");//指定群組的商品
// 檢查是否有資料
_size = GroupSize(_group);
if _size = 0 then return;
// 迴圈運算前,初始化變數
value1 = 0;
value2 = 0;
value3=0;
// 迴圈計算每一檔成份股數值
for _i = 1 to _size begin //大迴圈會跑遍每一檔成份股
if CheckSymbolField(_group[_i], "Close") then begin //確認股票當天有資料
// 實際要計算的內容===開始===
// STEP 1 換期時數值歸零
if GetSymbolFieldDate(_group[_i], "研發費用", "Q") > value1 then begin //如果成份股有人提前公佈數值,目前計算的都歸零
value1 = GetSymbolFieldDate(_group[_i], "研發費用", "Q");
value2 = 0;
value3 = 0;
end;

// STEP 2 同樣期別時,數值計算
if GetSymbolFieldDate(_group[_i], "研發費用", "Q") = value1 then begin //依最新的資料期別進行統計
value2 = value2 + 1;
value3 = value3 + GetSymbolField(_group[_i], "研發費用", "Q");
end;
// 實際要計算的內容===結束===
end; 
end;
// 要繪製的指標
// 
plot(1, value3, "整體研發費用");

 

 

研發費用是季資料,所以要跟季線搭在一起對照著看,如下圖

這是很典型研發費用一直在加碼進行淘汰賽的行業

這是研發費用突然創長期新高後產業有了新方向的Sample

 

對產業景氣更敏感的偵測工具: 產業整體營收月增率

產業整體營收月增率,如果連續數月上昇,代表整體景氣很明確的處於復甦狀態,連續數月下跌,代表整體產業進入衰退期,大部份的時候,月營收月增率總是漲漲跌跌,所以連續性的上漲或下跌,就變的很值得注意。

整體產業月營收的畫指標腳本樣本如下

input: _calcType(1, "計算方式", inputkind:=Dict(["加權平均",1],["簡單平均",2]), quickedit:=true);
Group: _group();
var: _i(0), _size(0), _lastestMonth(0);

var: _sumEarning(0), _earningCount(0), _avgEarning(0);
var: _sumWeightedEarning(0),_sumCapital(0);

_group = GetSymbolGroup("成份股");

// 檢查是否有資料
// 
_size = GroupSize(_group);
if _size = 0 then return;

// 迴圈運算前,初始化變數
// 
_sumEarning = 0;
_sumWeightedEarning = 0;
_sumCapital = 0;
_lastestMonth = 0;
_earningCount = 0;

// 迴圈計算每一檔成份股數值
// 
for _i = 1 to _size begin //大迴圈會跑遍每一檔成份股
if CheckSymbolField(_group[_i], "Close") then begin //確認股票當天有資料

// 實際要計算的內容===開始===
//

// STEP 1 換期時數值歸零
if GetSymbolFieldDate(_group[_i], "月營收月增率", "M") > _lastestMonth then begin //如果成份股有人提前公佈數值,目前計算的都歸零
_lastestMonth = GetSymbolFieldDate(_group[_i], "月營收月增率", "M");
_earningCount = 0;
_sumEarning = 0;
_sumWeightedEarning = 0;
_sumCapital = 0;
end;

// STEP 2 同樣期別時,數值計算
if GetSymbolFieldDate(_group[_i], "月營收月增率", "M") = _lastestMonth then begin //依最新的資料期別進行統計
_earningCount = _earningCount + 1;
_sumEarning = _sumEarning + GetSymbolField(_group[_i], "月營收月增率", "M");
_sumCapital = _sumCapital + GetSymbolField(_group[_i], "股本(億)", "D");
_sumWeightedEarning = _sumWeightedEarning + GetSymbolField(_group[_i], "股本(億)", "D") * GetSymbolField(_group[_i], "月營收月增率", "M");
end;

// 實際要計算的內容===結束===
//

end; 
end;

if _calcType = 2 then
_avgEarning = _sumEarning / _earningCount
else
_avgEarning = _sumWeightedEarning / _sumCapital;

// 要繪製的指標
// 
plot(1, _avgEarning, "月營收月增率");

 

把這個腳本應用到細產業指標裡,呈現的畫面如下圖

這個指標對景氣循環股是有其參考價值

 

 

 

用細產業合計月營收年增率來抓景氣方向

同一個細行業合計月營收年增率,長期追蹤,可以看出一個產業,目前處於那一個景氣循環的階段,甚或是產業生命週期的那一個階段,其股價敏感度,比合計營收的長期走勢圖還高。

計算一個細產業的月營收年增率的寫法,sample如下

input: _calcType(1, "計算方式", inputkind:=Dict(["加權平均",1],["簡單平均",2]), quickedit:=true);
Group: _group();
var: _i(0), _size(0), _lastestMonth(0);

var: _sumEarning(0), _earningCount(0), _avgEarning(0);
var: _sumWeightedEarning(0),_sumCapital(0);

_group = GetSymbolGroup("成份股");

// 檢查是否有資料
// 
_size = GroupSize(_group);
if _size = 0 then return;

// 迴圈運算前,初始化變數
// 
_sumEarning = 0;
_sumWeightedEarning = 0;
_sumCapital = 0;
_lastestMonth = 0;
_earningCount = 0;

// 迴圈計算每一檔成份股數值
// 
for _i = 1 to _size begin //大迴圈會跑遍每一檔成份股
if CheckSymbolField(_group[_i], "Close") then begin //確認股票當天有資料

// 實際要計算的內容===開始===
//

// STEP 1 換期時數值歸零
if GetSymbolFieldDate(_group[_i], "月營收年增率", "M") > _lastestMonth then begin //如果成份股有人提前公佈數值,目前計算的都歸零
_lastestMonth = GetSymbolFieldDate(_group[_i], "月營收年增率", "M");
_earningCount = 0;
_sumEarning = 0;
_sumWeightedEarning = 0;
_sumCapital = 0;
end;

// STEP 2 同樣期別時,數值計算
if GetSymbolFieldDate(_group[_i], "月營收年增率", "M") = _lastestMonth then begin //依最新的資料期別進行統計
_earningCount = _earningCount + 1;
_sumEarning = _sumEarning + GetSymbolField(_group[_i], "月營收年增率", "M");
_sumCapital = _sumCapital + GetSymbolField(_group[_i], "股本(億)", "D");
_sumWeightedEarning = _sumWeightedEarning + GetSymbolField(_group[_i], "股本(億)", "D") * GetSymbolField(_group[_i], "月營收年增率", "M");
end;

// 實際要計算的內容===結束===
//

end; 
end;

if _calcType = 2 then
_avgEarning = _sumEarning / _earningCount
else
_avgEarning = _sumWeightedEarning / _sumCapital;

// 要繪製的指標
// 
plot(1, _avgEarning, "月營收年增率");

 

在這裡有用到calcType這個語法,來切換營收指標的計算是用股本加權平均還是簡單平均

這個指標用在景氣循環股,可以掌握整個產業是否已開始復甦

以上圖的平板鋼為例,月營收連續多個月回升之後,股價會有所反映

上圖是用加權平均,從這張圖來看,記憶體似乎可以密切觀察

用細產業平均本益比看行業景氣位置

特定行業成份股的平均本益比,代表市場如何看待這個產業的未來。 前景一片看好,本益比就高,對前景很悲觀,本益比會偏低,當整體本益比開始出現反轉時,往往就是市場對該產業看法反轉的時候。

以銅箔基板產業為例,如下圖

當市場對這個行業維持一般看法時,本益比都差不多維持在20以下,一旦突破20,往往代表市場對該行業轉趨樂觀。 相反的,如果股價創新高,但本益比其實是往下走,代表市場對其未來前景並沒有那麼的樂觀。

下面是細行業本益比的腳本,供大家參考

Group: _group();
var: _i(0), _size(0);

_group = GetSymbolGroup("成份股");

// 檢查是否有資料
// 
_size = GroupSize(_group);
if _size = 0 then return;

// 迴圈運算前,初始化變數
//

value1 = 0;
value2 = 0;
value3=0;
// 迴圈計算每一檔成份股數值
// 
for _i = 1 to _size begin //大迴圈會跑遍每一檔成份股
if CheckSymbolField(_group[_i], "Close") then begin //確認股票當天有資料

// 實際要計算的內容===開始===
//getSymbolFieldDate("請填入正確的商品ID", "本益比", "D")

// STEP 1 換期時數值歸零
if GetSymbolFieldDate(_group[_i], "本益比", "D") > value1 then begin //如果成份股有人提前公佈數值,目前計算的都歸零
value1 = GetSymbolFieldDate(_group[_i], "本益比", "D");
value2 = 0;
value3 = 0;
end;

// STEP 2 同樣期別時,數值計算
if GetSymbolFieldDate(_group[_i], "本益比", "D") = value1 then begin //依最新的資料期別進行統計
value2 = value2 + 1;
value3 = value3 + GetSymbolField(_group[_i], "本益比", "D");
end;
value4=value3/value2;

// 實際要計算的內容===結束===
//

end; 
end;

// 要繪製的指標
// 
plot(1, value4, "平均本益比");

 

大家可以自行比對其他細行業指標跟本益比的長期走勢,會有自己的心得

整體資本支出對產業未來前景的預測力

資本支出對於特定行業的長期景氣,有一定的預測能力,我們可以透過XQ 的自訂指標,畫出細產業價格與資本支出的長期對照圖。

腳本一樣是從先前其他類以的自訂指標,例如整體存貨的腳本,直接複製,然後把欄位名稱改成資本支出金額即可

 

Group: _group();//宣告群組
var: _i(0), _size(0);
var: _Health(0);
_group = GetSymbolGroup("成份股");//指定群組的商品
// 檢查是否有資料
_size = GroupSize(_group);
if _size = 0 then return;
// 迴圈運算前,初始化變數
value1 = 0;
value2 = 0;
value3=0;
// 迴圈計算每一檔成份股數值
for _i = 1 to _size begin //大迴圈會跑遍每一檔成份股
if CheckSymbolField(_group[_i], "Close") then begin //確認股票當天有資料
// 實際要計算的內容===開始===
// STEP 1 換期時數值歸零
if GetSymbolFieldDate(_group[_i], "資本支出金額", "Q") > value1 then begin //如果成份股有人提前公佈數值,目前計算的都歸零
value1 = GetSymbolFieldDate(_group[_i], "資本支出金額", "Q");
value2 = 0;
value3 = 0;
end;

// STEP 2 同樣期別時,數值計算
if GetSymbolFieldDate(_group[_i], "資本支出金額", "Q") = value1 then begin //依最新的資料期別進行統計
value2 = value2 + 1;
value3 = value3 + GetSymbolField(_group[_i], "資本支出金額", "Q");
end;
// 實際要計算的內容===結束===
end; 
end;
// 要繪製的指標
// 
plot(1, value3, "整體資本支出金額");

這個腳本應用在產業時要特定注意,如果這個細產業,台灣佔比不高,海外同業資本支出金額可能對產業影響更大,這個指標就未必具有參考意義

 

像重電業及電線電纜這種行業就非常明顯,業者集體擴大資本支出往往代表的是市場需求的變化,而隨著資本支出的成果轉變成營收時,也容易帶動股價的上漲。

 

另外像被動元件族群,台灣佔全球市佔高,集體資本支出,在長期低迷後的連續成長,通常就代表業者對產業未來轉趨樂觀

資本支出跟預收款一樣,往往代表未來的營收變化,都是值得參考的數據

 

從產業整體庫存的變化,看產業輪動會輪到那個細產業

把整個細行業成份股的庫存全部加總,作成一個指標,跟細產業指標一起對照著看,對了解產業輪動的脈絡,有些幫助。

這個整體庫存指標的寫法,參考腳本如下

Group: _group();//宣告群組
var: _i(0), _size(0);
var: _Health(0);
_group = GetSymbolGroup("成份股");//指定群組的商品
// 檢查是否有資料
_size = GroupSize(_group);
if _size = 0 then return;
// 迴圈運算前,初始化變數
value1 = 0;
value2 = 0;
value3=0;
// 迴圈計算每一檔成份股數值
for _i = 1 to _size begin //大迴圈會跑遍每一檔成份股
if CheckSymbolField(_group[_i], "Close") then begin //確認股票當天有資料
// 實際要計算的內容===開始===
// STEP 1 換期時數值歸零
if GetSymbolFieldDate(_group[_i], "存貨", "Q") > value1 then begin //如果成份股有人提前公佈數值,目前計算的都歸零
value1 = GetSymbolFieldDate(_group[_i], "存貨", "Q");
value2 = 0;
value3 = 0;
end;

// STEP 2 同樣期別時,數值計算
if GetSymbolFieldDate(_group[_i], "存貨", "Q") = value1 then begin //依最新的資料期別進行統計
value2 = value2 + 1;
value3 = value3 + GetSymbolField(_group[_i], "存貨", "Q");
end;
// 實際要計算的內容===結束===
end; 
end;
// 要繪製的指標
// 
plot(1, value3, "整體存貨");

 

 

我是把預收款的腳本,複制貼上後,用IDE取代的功能,把預收款這三個字全部取代成存貨,就完成這個腳本的撰寫。

這張圖用在景氣循環股最有參考價值

 

所謂的景氣循環股,通常指的是一個廠蓋下去要花好幾年,且通常是連續性生產,停工的損失很大,然後各家生產的商品具高度替代性,像塑化原料,鋼鐵等都是這一類。

這種產業的特色是當景氣快要從底部翻昇時,下游會開始多補庫存,這時候整體庫存會下降,所以如果細產業價格大跌後庫存開始縮減就可以開始留意

相反的,如果股價漲高後,庫存在高點開始持平或減少,代表下游撐不住,需求減少,這時候就是離開的時候了。

至於非產業股,主要是看長期過剩的產業,其庫存是否降至長期的低水位區,下面就是最近很熱門的玻纖布產業的整體庫存與產業股價走勢的對照圖

像是最近自行車業表示庫存問題已有明顯改善,我們也可以用這個圖來檢驗業者的說法對不對

由於存貨這個欄位也是財報才有的,一樣是一季公佈一次,所以類似的這些指標,都只是在協助我們了解一個細產業的大方向,至於交易的時點就可能需要其他的數據來協助研判了

從整體預收款的變化,尋找細產業多空反轉點

有些研究員會從預收款去預判接下來公司的營收興衰,我試著把細產業成份股的預收款都加總起來,跟細產業指標作對照,在一些細產業,這樣的觀察方式,有其參考價值。

計算細產業總體預收款的指標腳本,跟總營收類似

 

Group: _group();//宣告群組
var: _i(0), _size(0);
var: _Health(0);
_group = GetSymbolGroup("成份股");//指定群組的商品
// 檢查是否有資料
_size = GroupSize(_group);
if _size = 0 then return;
// 迴圈運算前,初始化變數
value1 = 0;
value2 = 0;
value3=0;
// 迴圈計算每一檔成份股數值
for _i = 1 to _size begin //大迴圈會跑遍每一檔成份股
if CheckSymbolField(_group[_i], "Close") then begin //確認股票當天有資料
// 實際要計算的內容===開始===
// STEP 1 換期時數值歸零
if GetSymbolFieldDate(_group[_i], "預收款項", "Q") > value1 then begin //如果成份股有人提前公佈數值,目前計算的都歸零
value1 = GetSymbolFieldDate(_group[_i], "預收款項", "Q");
value2 = 0;
value3 = 0;
end;

// STEP 2 同樣期別時,數值計算
if GetSymbolFieldDate(_group[_i], "預收款項", "Q") = value1 then begin //依最新的資料期別進行統計
value2 = value2 + 1;
value3 = value3 + GetSymbolField(_group[_i], "預收款項", "Q");
end;
// 實際要計算的內容===結束===
end; 
end;
// 要繪製的指標
// 
plot(1, value3, "預收款指標");

寫法上,一樣是先確定預收款欄位是否都有資料,上面這一段在group語法的應用上,都必須有這麼一段流程,建議大家可以copy下來,之後要寫類似的腳本,都可以複製,不用自己再寫一遍。

這個預收款指標,應用在會先收到頭期款或訂約金的行業,是可以拿來預估接下來幾個月的營業額。

例如像營建業這種有預售屋交易方式的產業,從預收款指標的確可以看出,未來營建景氣的端倪 。

上圖中可以看得出來,營建股的整體預收款成長率在2024年第二季之後,已經減緩許多,不像2019年到2023年中這四年,幾乎是每季創新高。

跟營建業不同的是重電業,雖然去年創高點後,重電業的股價一度漲多回檔,但這行業的整體預收款到今年第二季都還一直在創新高

因為財報一季公佈一次,所以財報大部份的數字,都已反映在股價上,像預收款這樣的數字,是因為它往往代表未來一季到二季的業績走向,所以還有些參考價值,再舉資安股為例

資安股過去就算股價盤整,它的整體預收款都還是持續在成長,但最近兩季,整體預收款是衰退的,這一方面反映在股價的大幅波動上,另一方面,長期持有資安的朋友,必須更密切留意接下來相關個股的基本面變化。

我自己在使用這個指標的時候,最喜歡找那些股價一般般,但預收款連續數季成長的行業

像造船業就是很明顯從2019年起預收款就開始成長,但股價要等到2020年才開始走多頭

另外如果預收款創新高也具有參考意義

像是半導體封測材料業,2024年第二季創了歷史新高,就是一個產業有新格局的起點

用Group這個語法來寫細產業相關指標,是一件可以多多嚐試的方向,財務報告欄位通常代表的是過去,對未來的股價未必有預測能力,但如果把觀照的時間拉長,從這些指標,有機會觀察到那些行業即將否極泰來,那些則需要居高思危。