研報點評
該研報以CAPM為其金融邏輯對全市場進行擇時,其預測邏輯為:全市場風險溢價具有持續性(動量),短期市場收益率雖然有波動,但是中期來看,一般會集聚地保持正溢價一段時間,然後切換。對此,只要估計出前期市場期望溢價是否為正,即可買入。本文邏輯較為通順,但是也較為簡單,採用了比較「炫的」beta與收益率是否有正相關(spearman係數)來衡量,直白來看,類似過去N日市場平均收益率是否大於0,大於0即買入。但是本文的角度和平滑方法值得思考,具有啟發意義。資本資產定價模型 (Capital Asset Pricing Model, CAPM) 是基於風險資產期望收益均衡基礎上的預測模型,它起源於馬科維茨 (Markowitz, 1952) 提出的現代投資組合理論(Modern Portfolio Theory, MPT) 。在這一理論的基礎上,夏普(W. Sharpe,1964),林特納(J. Lintner, 1965)和莫辛(J. Mossin, 1966)等經濟學家通過假設投資者均採用馬科維茨模型進行投資行為從而達到市場均衡,推導出單個資產或資產組合的預期收益率公式如下:
在資本資產定價模型的收益率公式中,如果貝塔是固定的,那資本的收益率主要取決於市場的收益率,所以市場上漲高貝塔行業漲幅更大,市場下跌同樣高貝塔行業會下跌更多。藉助於這一點,可以嘗試逆向推斷市場的漲跌,當行業漲幅與其貝塔狀態基本一致的時候說明市場是上漲的,相反的時候說明市場是下跌的。
讀取中信一級行業和萬德全A周度行情數據
clear,clc%% 讀取數據[~, ~, raw] = xlsread('C:\Users\maszr\Desktop\beta擇時\行業行情數據.xlsx','周度','B3:AE654');ret_mat = reshape([raw{:}],size(raw));clearvars raw;[~, ~, industry] = xlsread('C:\Users\maszr\Desktop\beta擇時\行業行情數據.xlsx','周度','B1:AE2');industry(cellfun(@(x) ~isempty(x) && isnumeric(x) && isnan(x),industry)) = {''};[~, ~, datelist] = xlsread('C:\Users\maszr\Desktop\beta擇時\行業行情數據.xlsx','周度','A3:A654');datelist(cellfun(@(x) ~isempty(x) && isnumeric(x) && isnan(x),datelist)) = {''};datelist = str2num(datestr(datelist,'yyyymmdd'));save('data','datelist','industry','ret_mat')
利用導出的市場指數數據,參照原文採用行業周收益率數據進行回測,行業為中信一級行業,基準為萬德全A。下面為beta計算和滾動全樣本beta計算程序。
滾動計算中信各行業beta
%% 滾動計算betaclear,clcload dataN = 100; % 滾動計算Beta周期beta_mat = zeros(length(datelist),length(ret_mat(1,:))-1);for i=1:length(ret_mat)-N beta_mat(i+N,:) = cal_beta(ret_mat(i:i+N-1,1),ret_mat(i:i+N-1,2:end)); % 在這一步,我對beta滯後了一階,因此後面不用滯後了endbeta_mat = beta_mat(N+1:end,:);datelist = datelist(N+1:end,:);ret_mat = ret_mat(N+1:end,:);
滾動計算beta程序
function beta = cal_beta(y, x)ret_mat = [y,x];beta = diag(cov(ret_mat))';beta = beta(2:end)/beta(1);end
參照原文,我們把各個行業的beta數據拿出來進行分析,下面為分析程序,生成29個行業的行業beta,橫截面beta排名,該行業歷史平均beta。
行業Beta、橫截面Rank(Beta)、平均beta
function figplot(y1,y2,y3,datelist,name)% 生成x軸指標num = length(datelist);x_tick_label_loc = 1:floor(num/5):num;x_tick_label = num2cell(datelist(x_tick_label_loc));for i=1:length(x_tick_label_loc) temp = cell2mat(x_tick_label(i)); temp = num2str(temp); x_tick_label{i} = temp;end% 繪圖1figure1 = figure;axes1 = axes('Parent',figure1);plot(1:num,y1,'--','Parent',axes1);% 繪圖2axes2 = axes('Parent',figure1,'YAxisLocation','right',... 'ColorOrder',[0 0.5 0;1 0 0;0 0.75 0.75;0.75 0 0.75;0.75 0.75 0;0.25 0.25 0.25;0 0 1],... 'Color','none');hold(axes2,'all');plot1 = plot(1:num,[ones(num,1)*y2,y3],'Parent',axes2);set(axes1, 'XTick',x_tick_label_loc);set(axes1, 'XTickLabel', x_tick_label);set(axes2, 'XTick',x_tick_label_loc);set(axes2, 'XTickLabel', x_tick_label);xlim(axes1,[0 num]);xlim(axes2,[0 num]);title(name);strcat([name,'.jpg'])saveas(gcf,strcat([name{1},'.jpg']))end%% 滾動計算betaclear,clcload dataN = 100; % 滾動計算Beta周期beta_mat = zeros(length(datelist),length(ret_mat(1,:))-1);for i=1:length(ret_mat)-Nbeta_mat(i+N,:) = cal_beta(ret_mat(i:i+N-1,1),ret_mat(i:i+N-1,2:end)); % 在這一步,我對beta滯後了一階,因此後面不用滯後了endbeta_mat = beta_mat(N+1:end,:);datelist = datelist(N+1:end,:);ret_mat = ret_mat(N+1:end,:);%% rank排序[~,idx] = sort(beta_mat,2);[~,idx] = sort(idx,2);
各行各業均不同程度地受到國內外宏觀經濟因素的影響,但所受影響的程度有異。景氣程度與宏觀經濟環境高度相關,並隨之呈現周期性循環的行業被稱為周期型行業。其特點是產品需求、原材料價格等呈現周期性波動。典型行業如汽車、鋼鐵、煤炭等。這一類型行業的表現與市場表現聯動緊密,通常具有較高的貝塔。與之相反的行業類型被稱為防禦型行業。這種行業的需求較周期型行業穩定,彈性相對較小,產業的景氣程度受宏觀經濟的影響也相對較小。典型行業如食品、醫療、公用事業等。這一類型行業通常具有較低的貝塔。
儘管每個行業內不同公司的貝塔往往差異巨大, 行業的貝塔也並非一成不變,但長期、綜合來看,各個行業的特徵屬性與其貝塔的關係是基本穩定的。
綜合行業時變beta
餐飲旅遊、傳媒、電力及公用事業、電力設備
電子元器件、房地產、紡織服裝、非銀行金融
鋼鐵、國防軍工、機械、基礎化工
計算機、家電、建材、建築
交通運輸、煤炭、農林牧漁、汽車
輕工製造、商貿零售、石油石化、食品飲料
通信、醫藥、銀行、有色金屬
小結總體來看,基於CAPM擇時在金融邏輯上比較完善,但是實際中可能需要大量的調整和摸索,受限於篇幅,下部分研報會對具體實證結果進行復現。