量价背离因子在股票市场中的应用
创作时间:
作者:
@小白创作中心
量价背离因子在股票市场中的应用
引用
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只股票。
持仓调整:每五个交易日换仓。
在首次回测结果中,通过分析策略的持仓可以发现,小盘股交易量较大,存在较高风险。因此,可以尝试做个优化,将股票池限定为大市值股票,采取量价背离,进一步提升收益、降低回撤风险。
对修改后的回测结果进行分析,优化后的策略不仅有效地提升了收益率,还显著降低了最大回撤,表现出更高的稳健性与持续性。
策略源码
热门推荐
米饭VS面条:热量差异及控制方法全解析
大模型性能测试全指标、计算方法及优化指南
P106双显卡能兼容Win11吗?如何正确设置?
AI写简历真的靠谱吗?揭秘AI生成简历的利与弊
如何衡量客户满意度。6个步骤和关键指标
数字信任的底层逻辑:密码学核心技术与现实应用
浅谈:正式英语与非正式英语
培育新质基因 服务首都发展
春大葱种植技术要领
股票市场的参与者有哪些类型?他们的投资策略有何差异?
如何选择适合你的RDP软件?一篇详尽的指南
机箱风扇怎么装?注意找准安装方向
日本十大神药之一,大正感冒药为什么这么“灵”?
新股申购数量如何确定?这种确定方式的影响因素有哪些?
青少年儿童视力问题科普及护眼讲解
巴西龟的日常饮食需求及饲养技巧(合理安排每餐食物量,确保巴西龟健康成长)
如何在需求梳理中区分业务需求和技术需求
熬夜的代价:肌肤警报——长痘的真相与自救指南
甲亢哥与大张伟:一场因歌而起的跨文化“风暴”
什么是人工智能芯片?
冰粉秘制攻略:清凉一夏,消暑佳品配料全解
25周年|用世界级健康的空气驱动实现低碳繁荣
《无尽冬日》与《羊了个羊》的霸榜现象是如何产生的
美国癫痫治疗专家及前沿进展
GPU是什么?GPU和CPU的区别对比
USB转网口驱动信息的查看和配置
搬家流程解析:从准备到入住的详细步骤
演员何润东:妻子是百货柜员,我们的爱情不是建立在金钱上
做心脏彩超前有什么注意事项和饮食
公司减资的法定程序