
量化交易策略的制定过程
量化交易策略的制定不是灵感一现的产物,而是一套严谨的工程流程。从数据到实盘,每一步都需量化验证。以下拆解核心环节。
数据获取与清洗
策略的根基是数据。股票市场需要获取日线、分钟线、财务指标、行业分类等数据。期货市场则关注主力合约、展期规则、基差、持仓量。数据源可以是Wind、Tushare、聚宽、米筐或交易所直连。

原始数据常含缺失值、异常值、停牌标记。清洗规则要明确:前复权处理、剔除上市不足60日的股票、期货合约换月时拼接价格。缺失值采用前向填充或线性插值,异常值用3倍标准差或MAD法截断。
数据存储推荐使用Parquet或HDF5格式,读取速度远优于CSV。对于高频策略,还需考虑tick数据的时区对齐和去重。
因子挖掘与信号生成
因子是策略的DNA。股票因子分为价值、成长、质量、动量、波动率、流动性六大类。期货因子侧重展期收益率、基差动量、持仓变化、波动率结构。
单因子测试用IC值、RankIC、分层回测。IC均值大于0.03且IR大于0.5的因子值得保留。多因子合成采用等权、IC加权或机器学习模型。注意因子正交化,避免共线性。
信号生成规则要明确:当因子值突破过去20日布林带上轨时做多,跌破下轨时做空。对于期货,可结合期限结构:当近月贴水远月时做多近月。
模型构建与参数优化
股票多因子模型常用线性回归、随机森林、LightGBM。期货时序模型用ARIMA、LSTM或Transformer。模型输出预测收益率或涨跌概率。
参数优化避免过拟合。采用滚动窗口优化,训练集3年,验证集1年,测试集半年。网格搜索或贝叶斯优化寻找最优参数。关键参数如均线周期、止损比例、持仓周期。
约束条件:单票最大权重不超过5%,行业暴露偏离不超过2%,期货保证金占用不超过30%。
回测框架与绩效评估
回测引擎要模拟真实交易:滑点、手续费、冲击成本、涨跌停无法成交。股票滑点设为0.1%,期货滑点设为0.2%。手续费按万三计算。
绩效指标:年化收益、最大回撤、夏普比率、卡玛比率、胜率、盈亏比。优秀策略夏普大于1.5,卡玛大于2。回测曲线要平稳,避免某一年暴赚。
样本外测试至关重要。将数据分为训练段、验证段、测试段。仅当测试段夏普大于1.0才考虑实盘。
风险管理与资金分配
风险管理决定策略存活。股票组合最大回撤控制在15%以内,期货控制在20%以内。动态止损:当亏损达到2倍ATR时平仓。
资金分配采用凯利公式或固定比例。单策略占用资金不超过总资金的20%。多策略之间相关性低于0.3。
期货需注意保证金追缴风险。预留30%现金应对极端行情。股票需分散行业,单行业不超过20%。
实盘执行与迭代
实盘初期用小资金验证。监控滑点、成交率、信号延迟。若实盘与回测偏差超过20%,暂停策略。
定期更新因子。每季度重新测试因子IC,剔除失效因子。每年重新训练模型。市场结构变化时调整参数。
记录交易日志,包含信号时间、成交价格、盈亏原因。每周复盘,找出执行漏洞。
代码示例:双均线策略回测框架
import pandas as pd
import numpy as np
def dual_ma_strategy(data, fast=5, slow=20):
data['fast_ma'] = data['close'].rolling(fast).mean()
data['slow_ma'] = data['close'].rolling(slow).mean()
data['signal'] = 0
data.loc[data['fast_ma'] > data['slow_ma'], 'signal'] = 1
data.loc[data['fast_ma'] < data['slow_ma'], 'signal'] = -1
data['position'] = data['signal'].shift(1)
data['returns'] = data['close'].pct_change()
data['strategy_returns'] = data['position'] * data['returns']
return data
def performance(data):
total_return = (1 + data['strategy_returns']).prod() - 1
sharpe = data['strategy_returns'].mean() / data['strategy_returns'].std() * np.sqrt(252)
max_drawdown = (data['strategy_returns'].cumsum().cummax() - data['strategy_returns'].cumsum()).max()
return total_return, sharpe, max_drawdown
以上流程覆盖从数据到实盘的完整链条。每个环节都需要反复迭代,不能跳过任何验证。
常见陷阱与规避方法
未来函数:使用当日收盘价计算信号,却用当日开盘价成交。必须用shift(1)。
幸存者偏差:只使用当前存在的股票回测,忽略退市股。需加入退市股票数据。
过度拟合:参数过多导致回测完美但实盘亏损。限制参数数量,使用正则化。
滑点低估:回测假设零滑点。实盘需加入至少0.1%滑点。
杠杆失控:期货天然杠杆,仓位过重导致爆仓。单笔风险不超过总资金2%。
流动性风险:小盘股或远月期货合约成交稀疏。限制单日成交量占比不超过1%。
策略制定没有终点。市场在变,因子在衰减,模型需持续进化。坚持流程化、纪律化,才能长期生存。