量价背离因子在股票市场中的应用
创作时间:
作者:
@小白创作中心
量价背离因子在股票市场中的应用
引用
1
来源
1.
https://bigquant.com/wiki/doc/Hn333yYkfS
量价背离因子
量价背离是指股价与成交量的变化出现了“分歧”。当股价或指数在上升时,成交量减少,通常表示市场可能在隐约传递不好的信号。可以用“成交量加权价格”(VWAP)与成交量(VOLUME)的负相关性表示这种股市“冷场”现象。
因子构建&分析
- 数据构建:调用VWAP和Volume数据,将其转换为因子。
alpha_test = {
"alpha_class":"test",
"alpha_name":"teat_0001",
"alpha_name_chinese":"价量相关性波动性因子",
"alpha_sql":"""
SELECT date, instrument,
m_corr(wap_11_vwap_buy, volume, 30) AS factor
FROM cn_stock_wap
INNER JOIN cn_stock_prefactors USING (date, instrument)
""",
"alpha_desc":" ",
"group_num":10,
"instruments":"全市场",
"benchmark":"中证500",
"data_process":True,
"is_bigvip":False,
"is_featured":False,
}
- 因子排序与分组:将因子值从小到大排序,将数据分为10组,其中0组为因子值最小的一组,9组为因子值最大的一组。
def cut(df, group_num=10):
df = df.drop_duplicates('factor')
df['group'] = pd.qcut(df['factor'], q=group_num, labels=False, duplicates='drop')
df = df.dropna(subset=['group'], how='any')
df['group'] = df['group'].apply(int).apply(str)
return df
- 因子处理:对因子进行取极值、标准化、中性化操作。
data_alpha_process AS (
SELECT
date,
instrument,
factor,
clip(factor, c_avg(factor) - 3 * c_std(factor), c_avg(factor) + 3 * c_std(factor)) AS clipped_factor,
c_normalize(clipped_factor) AS normalized_factor,
c_neutralize(normalized_factor, sw2021_level1, LOG(total_market_cap)) AS neutralized_factor,
FROM data_alpha_origin JOIN cn_stock_factors_base USING (date, instrument)
WHERE 1=1
AND {pool_dict[pool_class]}
AND amount > 0
AND st_status = 0
AND trading_days > 252
AND (instrument LIKE '%SH' OR instrument LIKE '%SZ')
QUALIFY COLUMNS(*) IS NOT NULL
ORDER BY date, instrument
)
- 分组分析:根据分组结果,统计各组的累计收益,观察不同因子值下的收益表现。
def get_group_cumret(self):
# 获取基准收益率
def get_bm_ret():
bm_dict = {
"中证500":"000905.SH",
"中证1000":"000852.SH",
"沪深300":"000300.SH",
}
sql = f"""
SELECT
date,instrument, (close - m_Lag(close,1)) / m_LAG(close, 1) as benchmark_ret
FROM cn_stock_index_bar1d
WHERE date BETWEEN DATE '{self.sd}' - INTERVAL 10 DAY AND '{self.ed}'
AND instrument = '{bm_dict[self.params['benchmark']]}'
"""
bm_ret = dai.query(sql).df()
return bm_ret
# 基准收益率
bm_ret = get_bm_ret()
bm_ret = bm_ret.set_index('date')
# 分组收益率
groupret_data = self.group_data[['date','group','daily_ret']].groupby(['date','group'], group_keys=False).apply(lambda x:np.nanmean(x)).reset_index()
groupret_data.rename(columns={0:'g_ret'}, inplace=True)
groupret_pivotdata = groupret_data.pivot(index='date', values='g_ret', columns='group')
groupret_pivotdata['ls'] = groupret_pivotdata[str(self.params['group_num']-1)] - groupret_pivotdata['0']
groupret_pivotdata['bm'] = bm_ret['benchmark_ret']
groupret_pivotdata = groupret_pivotdata.shift(1)
# 分组累计收益率
groupcumret_pivotdata = groupret_pivotdata.cumsum()
# 返回分组收益率与分组累计收益率
return groupret_pivotdata, groupcumret_pivotdata
如图所示,第0-3组的因子累计收益率最高。数据显示:因子值越小,其累计收益越大。这表明,在该因子条件下,量价背离现象对市场走势具有一定的预测能力。
策略构建
基于以上的因子分析,可以构建一个简单的策略。
股票筛选:按照因子值进行升序排序,每天选取因子值最小的前50只股票。
持仓调整:每五个交易日换仓。
在首次回测结果中,通过分析策略的持仓可以发现,小盘股交易量较大,存在较高风险。因此,可以尝试做个优化,将股票池限定为大市值股票,采取量价背离,进一步提升收益、降低回撤风险。
对修改后的回测结果进行分析,优化后的策略不仅有效地提升了收益率,还显著降低了最大回撤,表现出更高的稳健性与持续性。
策略源码
热门推荐
用MCSKIN3D打造你的《我的世界》武器皮肤!
大波应景美食来袭!贵州人过年都吃啥?
飞天奖风波后的殷桃:从大满贯视后到公众焦点
空调的电辅热是什么?如何在冬季高效使用
道口烧鸡与沟帮子熏鸡:卤水文化的前世今生
《舌尖上的中国》教你做完美卤水
避坑!SCI论文被拒后如何翻盘?再投稿时避免这些误区!
电视的节能模式和普通模式有什么区别,我该如何选择?
如何通过设置优化电视节能效果,比如调整屏幕亮度或关闭某些功能
JAMA子刊:中国医学科学院团队揭示LDL-C与心血管疾病风险及死亡率关联
论文写作指南:如何让你的创新点脱颖而出?
郭芙陆无双撕逼大战,谁更让人讨厌?
木耳:人体清道夫的百变料理法
科技赋能木耳产业:什邡种植户的转型升级之路
2025年春节放假8天!你准备好了吗?
宜昌老黄陵庙焕发新活力 夜游项目即将登场
点痦子一般多久能恢复好
SCI论文投稿后,都会经历哪些审稿流程?
韭菜炒鱿鱼怎么炒好吃又嫩?
韭菜炒鱿鱼的10种做法,鱿鱼鲜嫩多汁,做法简单又美味
银行卡挂失后,你的钱还能取吗?
中国银行:银行卡挂失补卡全攻略
ECHO项目:社区癫痫急救培训的新趋势
妙佑医疗国际在癫痫治疗领域取得重大突破
青少年癫痫患者的心理调适指南
国际癫痫关爱日:学校如何普及癫痫知识?
坝上冬季摄影攻略:春节必打卡!
首个“非遗春节”来啦!这些暖冬目的地年味最浓
春节打卡:阆中古城&夫子庙秦淮河
副主任医师职称评审条件?