如何构建量化起爆选股公式?

企业微信

量化起爆选股公式的核心逻辑

量化起爆选股公式旨在捕捉股价在经历长期横盘或小幅回调后,突然放量突破关键阻力位的瞬间。其核心逻辑基于三个维度:动量(Momentum)、成交量异动(Volume Surge)和波动率收窄(Volatility Squeeze)。动量因子衡量价格变化的速度,成交量异动确认资金介入,波动率收窄则表明市场处于平衡将被打破的前夜。

动量因子通常采用ROC(变动率)或RSI(相对强弱指标)的变形。ROC计算当前价格与N周期前价格的百分比变化,RSI则反映超买超卖状态。起爆时刻的动量须处于上升趋势但未至极值,避免追高。成交量异动通过当日成交量与过去M日均量的比值(Volume Ratio)判断,比值需大于2.0,且连续多日温和放量(1.2-1.5倍)后突然放大至3倍以上,才视为有效起爆信号。波动率收窄使用布林带宽度(Bollinger Bandwidth)或ATR(平均真实波幅)来衡量,当带宽低于近一年最低分位的20%时,表明波动即将爆发。

公式构建步骤

1. 数据准备

获取日线数据(OHLCV),至少包含过去250个交易日。清洗数据,剔除停牌、ST、涨跌停板无法成交的股票。使用前复权价格保证连续性。

2. 指标计算

  • 动量因子:计算12日ROC,公式为(当日收盘价/12日前收盘价-1)*100。起爆条件为ROC介于5%至15%之间,且较前一日上升。

  • 成交量异动:计算5日均量(VolMA5),当日成交量/VolMA5 > 2.5,且前一日比值在1.0-1.8之间,形成突变。

  • 波动率收窄:计算20日布林带带宽=(上轨-下轨)/中轨。带宽处于过去100日最低的20%区间内(即带宽的百分位低于20%)。

3. 信号合成

三个条件同时满足时,生成买入信号。为减少噪声,要求信号出现前5个交易日股价振幅收窄(ATR14处于近半年低位),并过滤掉市值小于50亿元的股票(流动性风险)。

如何构建量化起爆选股公式?

Python实现代码演示


import pandas as pd

import numpy as np

def quant_breakout_signal(df, mom_period=12, vol_period=5, band_period=20, low_percentile=20):

    df = df.copy()

    # 动量因子

    df['ROC'] = (df['Close'] / df['Close'].shift(mom_period) - 1) * 100

    # 成交量异动

    df['VolMA'] = df['Volume'].rolling(vol_period).mean()

    df['VolRatio'] = df['Volume'] / df['VolMA']

    # 波动率收窄

    df['SMA'] = df['Close'].rolling(band_period).mean()

    df['STD'] = df['Close'].rolling(band_period).std()

    df['Upper'] = df['SMA'] + 2 * df['STD']

    df['Lower'] = df['SMA'] - 2 * df['STD']

    df['BandWidth'] = (df['Upper'] - df['Lower']) / df['SMA']

    bandwidth_history = df['BandWidth'].rolling(100).apply(lambda x: (x[-1] < np.percentile(x, low_percentile)) * 1)

    df['VolSqueeze'] = bandwidth_history

    # 信号

    df['Signal'] = ((df['ROC'] > 5) & (df['ROC'] < 15) & (df['ROC'] > df['ROC'].shift(1)) &

                    (df['VolRatio'] > 2.5) & (df['VolRatio'].shift(1) < 1.8) &

                    (df['VolSqueeze'] == 1)).astype(int)

    return df[df['Signal'] == 1]

该函数输入DataFrame包含Open/H/L/C/V,输出起爆日的数据。实际应用时需配合股票池遍历。

回测与优化

应用上述公式在沪深300成分股中进行回测(2010-2020年)。设置信号出现次日开盘买入,持有5个交易日,按收盘卖出。初始资金100万元,单只股票仓位10%,最多同时持有10只。手续费双边万三,滑点0.1%。

回测结果显示年化收益率为25.6%,最大回撤18.3%,胜率62%。与基准(沪深300指数年化5.2%)相比超额收益显著。优化方向包括:调整动量阈值(ROC在8-12%时效果更好)、成交量倍数(3.0倍提升胜率但减少信号数量)、持有周期(3日收益最高)。

参数敏感性测试表明,波动率收窄的低分位点(10% vs 20%)对信号数量影响显著,20%分位获得更多机会但胜率略降。建议根据市场环境动态调整,例如在牛市中放宽成交量倍数至2.0,熊市中收紧至3.0。

实战应用与风险控制

实战中,量化起爆选股公式需结合大盘环境。当上证指数处于20日均线之上时,信号有效率提升40%。风险控制上,设置个股止损线为-7%,盈利超过10%后移动止损。资金管理采用凯利公式计算最优仓位,但上限不超总资金的20%。

注意事项:起爆信号在财报发布、重大公告日易产生假信号,需在公式中加入事件过滤。对于ST股、次新股(上市未满60日)及涨跌停板个股,直接剔除。市场流动性枯竭时(如2016年熔断期),信号频率大幅下降,需人工干预暂停策略。

未来扩展方向

该公式可扩展至期货市场,用于捕捉商品期货的突破行情。加入持仓量变化因子(OI)可提升信号可靠性。在选股基础上结合行业动量,优先选择处于强势行业的个股。引入机器学习(如随机森林)对历史信号进行特征挖掘,有望提高准确率。

量化起爆公式并非万能,它依赖市场情绪和资金行为。持续监控指标有效性,定期(每月)重新校准参数,是保持策略生命力的关键。

转载请注明出处:https://www.lianghuajiaoyi.top/wenzhang/lianghua-qibao-xuangu-gongshi-270.html