共计 2136 个字符,预计需要花费 6 分钟才能阅读完成。
数据获取与清洗
量化交易的第一步是获取可靠的金融数据。这里我们使用 Tushare Pro 作为数据源,它提供了丰富的 A 股市场数据。

- API 鉴权配置
Tushare Pro 需要 token 验证,最佳实践是将 token 存储在环境变量中:
import os
import tushare as ts
# 从环境变量读取 token
ts.set_token(os.getenv('TUSHARE_TOKEN'))
pro = ts.pro_api()
- 基础行情数据获取
获取日线行情数据时,需要特别注意:
# 获取沪深 300 成分股 2022 年日线数据
df = pro.daily(ts_code='000300.SH', start_date='20220101', end_date='20221231')
# 必须添加的时区处理
df['trade_date'] = pd.to_datetime(df['trade_date']).dt.tz_localize('Asia/Shanghai')
-
数据清洗陷阱
-
停牌股票处理:需要过滤成交量为 0 的记录
- 异常值处理:股价突然涨跌停需要特殊标记
- 复权处理:必须使用后复权价格进行计算
特征工程构建
好的特征决定了模型的上限。以下是构建有效特征的典型流程:
- 基础特征生成
# 计算 5 日收益率
df['return_5d'] = df['close'].pct_change(5)
# 布林带指标
df['ma20'] = df['close'].rolling(20).mean()
df['upper_band'] = df['ma20'] + 2*df['close'].rolling(20).std()
- 避免未来信息泄露
关键防御点:所有特征必须使用.shift() 滞后处理
# 错误写法:使用了未来数据
df['signal'] = (df['close'] > df['ma20']).astype(int)
# 正确写法:滞后一期
df['signal'] = (df['close'].shift(1) > df['ma20'].shift(1)).astype(int)
- 过拟合特征检测
常见过拟合特征:
– 过于复杂的非线性组合
– 与目标变量存在偶然相关性
– 在特定时间段表现优异但无经济意义
策略建模与回测
均值回归策略实现
使用 Scikit-learn 构建简单策略:
from sklearn.linear_model import LinearRegression
# 特征矩阵
X = df[['return_5d', 'volatility_20d']].dropna()
# 目标变量:下期收益率
y = df['close'].pct_change().shift(-1).dropna()
# 确保时间对齐
X, y = X.align(y, join='inner')
# 滚动训练测试
model = LinearRegression()
for train_idx, test_idx in TimeSeriesSplit(n_splits=5).split(X):
model.fit(X.iloc[train_idx], y.iloc[train_idx])
pred = model.predict(X.iloc[test_idx])
Backtrader 回测配置
关键配置要点:
import backtrader as bt
class MeanReversionStrategy(bt.Strategy):
def __init__(self):
self.sma = bt.indicators.SimpleMovingAverage(self.data.close, period=20)
def next(self):
if not self.position:
if self.data.close[0] < self.sma[0]*0.95:
self.buy()
else:
if self.data.close[0] > self.sma[0]*1.05:
self.sell()
# 注意设置时区
data = bt.feeds.PandasData(dataname=df, tz='Asia/Shanghai')
结果评估与优化
- 回测可视化
import matplotlib.pyplot as plt
plt.figure(figsize=(12,6))
plt.plot(cerebro.broker.get_value(), label='Strategy')
plt.plot(benchmark, label='HS300')
plt.legend()
plt.show()
-
压力测试方法
-
极端行情测试(如 2015 年股灾)
- 参数敏感性分析
-
滑点测试(至少考虑 0.1% 的交易成本)
-
策略评估指标
-
年化收益率 > 15%
- 最大回撤 < 20%
- 夏普比率 > 1.5
传统分析与量化策略对比
| 维度 | 传统技术分析 | 量化策略 |
|---|---|---|
| 决策依据 | 图表形态 | 统计显著性 |
| 执行方式 | 人工判断 | 自动化交易 |
| 验证方法 | 历史案例 | 严格回测 |
| 风险控制 | 经验法则 | 数学建模 |
实盘部署建议
- 渐进式上线 :先使用模拟盘运行 1 个月
- 监控机制 :设置每日最大亏损报警
- 定期再训练 :模型至少每季度更新一次
从数据获取到策略部署的完整闭环中,最关键的是保持策略的简单性和可解释性。记住:市场上 80% 的量化策略失败不是因为不够复杂,而是过度拟合了历史数据。建议新手从单因子策略开始,逐步增加复杂度。
正文完
