【研報復現】國泰君安——191個短週期量價特徵因子選股系列一
本系列由
點寬DigQuant量化人才俱樂部
獨家釋出
原文傳送門:
國泰君安191短週期因子之一——因子體系介紹
前言
本次報告將開啟對國泰君安金工劉富兵團隊報告《基於短週期價量特徵的多因子選股體系——數量化專題之九十三》的單因子回測。該報告集中測試了股票市場191個短週期的alpha因子,與此前市面上WorldQuant101和廣發證券“技術因子海量挖掘”等報告一樣,是一篇值得去實踐的研報。目前中低頻的alpha因子衰退嚴重,變成了一場追逐風格變換的遊戲,而短週期因子的alpha仍有很大機會,因為其容量不大,沒有大資金介入。本系列報告將遵循以下模板,每次彙報3個因子。
方法概述
1、股票池選擇:
中證500(目前無中證500歷史成分,因此暫用當前500成分)。中證500是滬深300之後市值最大的500只股票,具備良好的定投特性:
中證500的成分構造比滬深300更合理,投資滬深300等於投資了大部分的銀行、保險等權重股,而對中證500的影響較小。
滬深300市值過大,中證500市值較為適合,而同時又避免了投資更小市值股票的風險。
滬深300是高估的中證500。
2、換倉:
因為是短週期因子,其有效IC大部分處於1-5天,因此每5日換倉一次較為合理。
回測換倉邏輯與程式碼
% 股票交易
targetList
=
traderGetTargetList
();
% 獲取標的資訊。
TLen
=
length
(
targetList
);
% 資產數量,不對沖
dSignal
=
traderGetRegUserIndi
(
g_idxSignal
,
2
);
% 獲取交易訊號
[
map
,
~
,
~
]=
traderGetAccountPositionV2
(
1
,
1
:
TLen
);
% 股票頭寸
[
~
,
MarketCap
,
~
,
~
,
~
]
=
traderGetAccountInfoV2
(
1
);
% 現在賬戶持有的現金和股票市值
capitalPerShare
=
MarketCap
/
assetNum
;
% 每隻股票買的錢數,不對沖
stockList
=
1
:
assetNum
;
% 可買股票池
% ——————————————————調倉———————————————————
for
i
=
1
:
TLen
dataDay
=
traderGetRegKData
(
g_idxKDay
(
i
,:),
1
,
false
);
% 取當日資料
if
isnan
(
dataDay
)
dataDay
=[];
end
% 資料長度足夠;資料非空;當日的成交量不為0;當日高收不同——去除停牌,漲跌停情況
if
isempty
(
dataDay
)
||
dataDay
(
6
,
end
)
==
0
||
(
dataDay
(
3
,
end
)
-
dataDay
(
4
,
end
))
==
0
continue
;
end
if
(
map
(
i
)
~=
0
)
&&
(
~
ismember
(
dSignal
(
i
,
end
),
stockList
))
% 上期持有,這期不持有
traderPositionToV2
(
1
,
i
,
0
,
0
,
‘market’
,
‘close’
);
elseif
ismember
(
dSignal
(
i
,
end
),
stockList
)
% 這期持有的,這期調倉
stockNum
=
100
*
floor
(
capitalPerShare
/
dataDay
(
5
,
end
)
/
100
);
% 每隻股票買的股數
traderPositionToV2
(
1
,
i
,
stockNum
,
0
,
‘market’
,
‘close’
);
end
end
3、持倉數:
每期持倉中證500的10%,大約50只。
4、分時間段測試:
不同因子需要得到其在不同市場狀況的表現,因此我們將市場分為4段:
熊市-市場陰跌:2011-01-01至2013-07-31
牛市-市場急漲:2013-08-01至2015-04-30
熊市-市場急跌:2015-05-01至2016-06-30
牛市-市場慢牛:2016-07-01至2017-09-30
因子彙總
下述為本期3個短週期alpha表現結果(20160701_20170930最近慢牛區間表現)。3顆星表明因子表現較好,2顆星表明因子具備一定價值,1顆星表明因子不具備操作可行性。
因子間比較
下表為3個市場下因子的分別表現情況。
各區間因子收益特徵
➢ 回測軟體:Auto-Trader Pro
(AT 量能策略研究終端 以 MATLAB 研究平臺為依託,甚至可以把交易思路延生到機器學習,神經網路,輿情分析等更復雜的領域。依託 Matlab 強大的數理研究及強大的金融工具箱,策略師不再需要依賴程式設計師的程式設計能力,而將研究成果直接轉化為程式化策略。)
編號:Alpha001
因子公式
因子含義
刻畫成交量變化排名與日內收益率排名的偏離程度,表現為成交量變化排名上升,日內收益率排名下降;成交量變化排名下降,日內收益率排名上升。
分時段因子表現
根據由左至右由上至下的為1-4種市場情況因子表現。
alpha001各市場表現
因子程式碼
function
value
=
getSignal
(
cellPar,bpPFCell
)
%% 引數宣告
idxK
=
cellPar
{
1
};
% 橫軸為日期,縱軸為資產數量
%% 因子計算
[
tradeNum
,
~
]=
size
(
idxK
);
% 資產數量
regKMatrix
=
traderGetRegKData
(
idxK
,
7
,
false
,
bpPFCell
);
% -1 * CORR(RANK(DELTA(LOG(VOLUME), 1)), RANK((CLOSE - OPEN) / OPEN), 6)
volume
=
regKMatrix
(
6
:
8
:
tradeNum
*
8
,:);
mid1
=
log
(
volume
);
mid2
=
diff
(
mid1
,
1
,
2
);
mid3
=
my_sort
(
mid2
);
close
=
regKMatrix
(
5
:
8
:
tradeNum
*
8
,:);
open
=
regKMatrix
(
2
:
8
:
tradeNum
*
8
,:);
mid4
=
(
close
-
open
)
。/
open
;
mid5
=
my_sort
(
mid4
);
value1
=
diag
(
corr
(
mid3
(:,:)
‘
,
mid5
(:,
2
:
7
)
’
));
value
=
my_sort
(
value1
);
nan_idx
=
sum
(
isnan
(
volume
),
2
);
% 存在停牌以及該K線停牌的股票
value
(
find
(
nan_idx
~=
0
))
=
nan
;
% 該股票因子值為nan
end
策略連結
【國泰君安】191短週期因子系列——alpha001
編號:Alpha002
因子公式
因子含義
刻畫多空失衡變動情況,用(CLOSE - LOW) - (HIGH - CLOSE)) / (HIGH - LOW)表示多空力量不平衡度。
分時段因子表現
根據由左至右由上至下的為1-4種市場情況因子表現。
alpha002各市場表現
因子程式碼
function
value
=
getSignal
(
cellPar,bpPFCell
)
%% 引數宣告
idxK
=
cellPar
{
1
};
% 橫軸為日期,縱軸為資產數量
%% 因子計算
[
tradeNum
,
~
]=
size
(
idxK
);
% 資產數量
regKMatrix
=
traderGetRegKData
(
idxK
,
2
,
false
,
bpPFCell
);
% (-1 * DELTA((((CLOSE - LOW) - (HIGH - CLOSE)) / (HIGH - LOW)), 1))
close
=
regKMatrix
(
5
:
8
:
tradeNum
*
8
,:);
low
=
regKMatrix
(
4
:
8
:
tradeNum
*
8
,:);
high
=
regKMatrix
(
3
:
8
:
tradeNum
*
8
,:);
mid1
=
diff
(((
close
-
low
)
-
(
high
-
close
))
。/
(
high
-
low
),
1
,
2
);
value
=
my_sort
(
mid1
);
nan_idx
=
sum
(
isnan
(
close
),
2
);
% 存在停牌以及該K線停牌的股票
value
(
find
(
nan_idx
~=
0
))
=
nan
;
% 該股票因子值為nan
end
策略連結
【國泰君安】191短週期因子系列——alpha002
編號:Alpha003
因子公式
因子含義
刻畫多空失衡變動情況,用(CLOSE - LOW) - (HIGH - CLOSE)) / (HIGH - LOW)表示多空力量不平衡度。
分時段因子表現
根據由左至右由上至下的為1-4種市場情況因子表現。
alpha003各市場表現
因子程式碼
function
value
=
getSignal
(
cellPar,bpPFCell
)
%% 引數宣告
idxK
=
cellPar
{
1
};
% 橫軸為日期,縱軸為資產數量
%% 因子計算
[
tradeNum
,
~
]=
size
(
idxK
);
% 資產數量
regKMatrix
=
traderGetRegKData
(
idxK
,
7
,
false
,
bpPFCell
);
% SUM((CLOSE=DELAY(CLOSE,1)?0:CLOSE-(CLOSE>DELAY(CLOSE,1)?MIN(LOW,DELAY(CLOSE,1)):MAX(HIGH,DELAY(CLOSE,1)))),6)
close
=
regKMatrix
(
5
:
8
:
tradeNum
*
8
,:);
mid1
=
close
(:,
2
:
7
)
==
close
(:,
1
:
6
);
mid2
=
close
(:,
2
:
7
);
mid2
(
mid1
)
=
0
;
mid3
=
close
(:,
2
:
7
)
>
close
(:,
1
:
6
);
mid4
=
close
(:,
2
:
7
)
<
=
close
(:,
1
:
6
);
low
=
regKMatrix
(
4
:
8
:
tradeNum
*
8
,:);
high
=
regKMatrix
(
3
:
8
:
tradeNum
*
8
,:);
mid5
=
mid3
。*
low
(:,
2
:
7
)
+
mid4
。*
high
(:,
2
:
7
);
mid6
=
sum
(
mid2
-
mid5
,
2
);
value
=
my_sort
(
mid6
);
nan_idx
=
sum
(
isnan
(
close
),
2
);
% 存在停牌以及該K線停牌的股票
value
(
find
(
nan_idx
~=
0
))
=
nan
;
% 該股票因子值為nan
end
策略連結
【國泰君安】191短週期因子系列——alpha003
原文傳送門:
國泰君安191短週期因子之一——因子體系介紹