Open Source, Open Future!
  menu
118 文章
ღゝ◡╹)ノ❤️

第1篇:量化交易系统从零到一

DeepSeek 最近热度很高,我和大家一样,对背后的研发团队也十分好奇。一番了解后才发现,它竟是出自幻方量化之手。顺着这条线索,我又了解到量化交易这个领域。

作为技术人,遇到感兴趣的领域,第一反应就是亲手实践。于是我从零搭建了一套股票量化交易系统,完整跑了遍数据获取、特征工程、预测建模、运筹优化、回测等全流程。虽然成品远不能与幻方这类专业机构相提并论,但至少把整个技术链路跑通了,也算理解了量化系统是怎么运作的。

本文作为整个系列的开篇,主要介绍项目的整体架构、技术选型以及最终实现效果。后续还会推出 5 篇详细的技术文章,逐一拆解各个模块的具体实现。

一、为什么选择量化交易

数据好搞

A股数据有API接口(Tushare),不用自己爬数据。这点很重要,很多想做项目的时候都卡在数据获取这一步。

技术有意思

不是简单的分类或回归,涉及时间序列预测、特征工程、运筹优化、回测验证,技术栈挺全面的。而且这些技术其实很通用,做完量化也能用到其他场景。

效果可量化

有明确的评价指标(准确率、收益率、夏普比率),做完能清楚地看到效果好不好。不像有些项目,做完了也不知道到底有没有用。

有挑战性

真正做起来才发现,数据清洗、特征构建、避免过拟合、优化决策,每个环节都有坑。比想象中难多了,但也更有意思。

二、系统整体架构

整个系统分5层,自底向上构建:

┌─────────────────────────────────┐
│  5. 回测验证                     │  验证策略效果
│     - 夏普比率 0.47              │
│     - 年化收益 12.15%            │
├─────────────────────────────────┤
│  4. 运筹优化 (核心)              │  决策买什么、买多少
│     - OR-Tools 线性规划          │
│     - 整数规划、二次规划          │
├─────────────────────────────────┤
│  3. 预测模型                     │  预测涨跌
│     - LightGBM                   │
│     - 方向准确率 58%             │
├─────────────────────────────────┤
│  2. 特征工程                     │  提取信息
│     - 39个技术指标               │
│     - 6大类特征                  │
├─────────────────────────────────┤
│  1. 数据获取                     │  原始数据
│     - Tushare                    │
│     - 沪深300+中证500,10年数据  │
└─────────────────────────────────┘

为什么是这个顺序?因为每一层都依赖下面一层:

  • 没有数据,后面都做不了
  • 没有特征,模型没法学习
  • 没有预测,不知道该买什么
  • 没有优化,不知道该买多少
  • 没有回测,不知道能不能赚钱

就像盖房子,必须先打地基。

2.1 数据流转过程

数据在各层之间是这样流转的:

第1层:原始数据

股票代码:600519(贵州茅台)
日期:2022-01-05
开盘价:1850元
收盘价:1829元
成交量:28396手

第2层:特征数据

return_1d: -1.47%(今天跌了1.47%)
ma_20: 1800元(20日均线)
rsi: 65(相对强弱指标)
macd: 0.5(趋势指标)
... 共39个特征

第3层:预测结果

茅台:预测明天涨2.5%
五粮液:预测明天涨1.8%
中国平安:预测明天跌0.5%
招行:预测明天涨1.2%
平安银行:预测明天涨0.3%

第4层:优化决策

在10万预算下,OR-Tools计算:
茅台:投资3万(涨幅最高)
五粮液:投资2.5万
招行:投资2万
平安银行:投资1.5万
中国平安:不投资(预测下跌)
总计:9万(留1万现金)

第5层:回测结果

年化收益率:12.15%
夏普比率:0.47
最大回撤:-12.21%
胜率:57.89%

这就是整个系统的数据流。

三、技术栈选型

3.1 数据源:为什么选Tushare

调研了几个数据源:

  • Wind/彭博:专业金融数据库,数据质量最高。但太贵了,个人用不起。
  • Yahoo Finance:免费,数据也全。但国内访问经常超时,不太稳定。
  • Akshare:开源免费,接口简单。但是爬虫性质的接口,稳定性一般,批量下载容易被限流。
  • Tushare Pro:需要积分,但接口是真正的API,稳定性比Akshare好得多。前复权数据一次调用直接拿到,不需要自己手动计算。

最终选了Tushare,主要是稳定+数据质量高。

3.2 预测模型:为什么选LightGBM

一开始其实想用LSTM的,毕竟是时间序列,LSTM看起来更合适。但试了之后发现:

数据形式问题

虽然这是时间序列数据,但我的特征工程已经把时序信息编码成了表格特征(滞后值、滚动窗口、技术指标等)。在这种表格数据上,LightGBM这类树模型天然有优势,而LSTM需要原始序列才能发挥能力。

训练速度

LightGBM训练6秒,LSTM需要34秒。日频策略需要每天收盘后快速更新模型,速度差距会被放大。

可解释性

LightGBM能看特征重要性,LSTM是个黑盒。

效果对比

实际测试了LightGBM、XGBoost和LSTM三个模型:

  • LSTM的RankIC最高(0.0415)
  • XGBoost次之(0.0377)
  • LightGBM第三(0.0362)

0.0053的RankIC差距,在日频股票预测里不算大。

虽然LSTM效果最好,但综合考虑效果、速度、工程成本三个维度,最终选了LightGBM:

  • 效果差距可接受(换算到收益约差1.5-2.5%年化)
  • 速度快6倍(6秒 vs 34秒)
  • 部署简单,无需深度学习框架
  • 可解释性强,便于调试和维护

我的场景是日频、需要快速迭代、追求工程简单,所以选了LightGBM。

如果你的情况不同

  • 追求极致效果且不在意训练时间 → 选LSTM
  • 不需要频繁更新模型,看重稳定性 → 选XGBoost
  • 需要快速迭代,平衡效果和速度 → 选LightGBM(我的选择)

3.3 运筹优化:为什么选OR-Tools

做过一些调研:

PuLP:支持整数约束,但对复杂约束支持不够好,速度一般。

CVXPY:很强大,支持凸优化,但学习曲线陡峭。

Gurobi:业界标杆,速度极快。但商业许可证非常贵,个人项目用不起。

OR-Tools:Google 出品,免费、开源,支持线性规划、整数规划、约束规划等。最关键的是,这玩意在工业界用得很广,物流、排班、资源调度都在用。

最终选了OR-Tools。

四、各模块简介

这里简单介绍下每个模块,后面会有详细文章。

4.1 模块1:数据获取与清洗

核心问题:怎么获取高质量的数据?

我用Tushare下载了沪深300和中证500成分股(共800只)10年的历史数据(2015-2024)。然后做了三层清洗:

  1. 删除缺失值
  2. 过滤停牌数据(成交量为0的)
  3. 删除异常涨跌幅(超过30%的)

这块踩了不少坑,比如停牌数据不过滤的话,会导致技术指标计算错误。

4.2 模块2:特征工程

核心问题:怎么从原始价格变成模型能理解的特征?

我构建了6大类特征:

  • 收益率(1日、5日、10日、20日)
  • 移动平均线(MA5、MA20、MA60等)
  • 动量指标(RSI、MACD)
  • 波动率
  • 价格位置
  • 滞后特征

总共39个特征。这里有个技术点是要用 groupby按股票分组计算,不然茅台的均线会用到五粮液的数据。

4.3 模块3:预测模型

核心问题:怎么预测股票涨跌?

用LightGBM训练了价格预测模型,预测明天的涨跌幅。

关键技术点:

  • 时间序列交叉验证(不能随机打乱)
  • 避免数据泄露(用shift(-1)获取未来值作为标签)
  • 参数调优

4.4 模块4:运筹优化

核心问题:在预算和约束条件下,怎么决策买哪些股票、各买多少?

这是整个项目的核心。我用OR-Tools实现了线性规划:

# 决策变量:每只股票投资金额
x = [solver.NumVar(0, max_limit, f'x_{i}') for i in range(n)]

# 目标:最大化收益
max: sum(x[i] * expected_return[i])

# 约束
s.t. sum(x) <= 100000  # 预算约束
     x[i] <= 30000      # 单只上限

优化后,夏普比率提升明显。

4.5 模块5:回测系统

核心问题:怎么验证策略是不是真的能赚钱?

写了个简单的回测框架,模拟实际交易过程。关键指标:

  • 年化收益率:12.15%
  • 夏普比率:0.47
  • 最大回撤:-12.21%

五、最终效果

5.1 数据规模

  • 沪深300 + 中证500,共800只股票
  • 10年历史数据(2015-2024)
  • 总计约158万条记录
  • 39个特征

5.2 模型性能

  • RankIC:0.037(超过0.03有效阈值)
  • ICIR:0.24(信号持续稳定)
  • Q5-Q1年化价差:69.5%(区分强弱股票能力显著)
  • 7个季度IC全部为正

5.3 优化效果

使用OR-Tools优化后:

  • 夏普比率:0.47
  • 年化收益率:12.15%
  • 最大回撤:-12.21%

六、写在最后

最大的收获是理解了量化交易的技术链路。之前只是听说过"量化很赚钱"、"算法交易"这些概念,但具体怎么做的完全不清楚。现在从数据到决策,整个流程都走了一遍,算是真正理解了。

还有就是发现技术真的是通用的。一开始还担心做量化会不会太偏门,后来发现预测就是预测,优化就是优化,换个场景照样能用。尤其是OR-Tools这个工具,真的挺强大,值得深入学习。

如果你也对量化交易或者预测优化感兴趣,希望这个系列对你有帮助。


系列文章目录