个人交易系统开发与设计(一)

一. 整体架构总览

采用C++高性能核心+Python策略层的混合架构,遵循经典的「数据 → 策略 → 回测/实盘」分层设计。

quantTrading/
├── src/          # C++ 核心库(计算密集型)→ 编译为 quant_core_py 扩展
│   ├── core/         # 基础类型 (Tick/Bar/Order/Signal)
│   ├── indicators/   # 技术指标 (SMA/EMA/MACD/RSI/BOLL/ATR) + 注册表
│   ├── factor/       # 多因子引擎 (DAG 计算图)
│   ├── risk/         # 风控 (仓位/止损/回撤)
│   └── python_bridge/ # pybind11 绑定 → Python 可调用
├── quant/        # Python 框架层
│   ├── data/         # 数据源(akshare) + Parquet 存储 + 交易日历
│   ├── engine/       # 回测引擎/模拟券商/投资组合/绩效报告
│   ├── strategies/   # 策略基类 + demo/advanced 策略
│   ├── signal/       # 实盘信号生产与导出
│   └── utils/        # 结构化日志
├── scripts/      # CLI 入口(下载/回测/优化/实盘)
├── config/       # YAML 配置
└── tests/        # C++(gtest) + Python(pytest) 测试


核心设计决策:性能关键路径放在 C++,策略灵活层放在 Python,通过 pybind11 桥接。 
这也是量化系统的常见最佳实践——技术指标、因子计算、风控都是纯数值运算,用 C++ 可
以获得数十倍性能提升,而策略逻辑需要频繁迭代,用 Python 便于快速实验。

二. C++ 高性能核心


2.1 技术指标(indicators/)

每个指标都是「批量计算 + 增量更新」双模式,这是流式行情下的关键设计。以 SMA 为例:

void SMA::update(double price) {
    if (count_ < period_) {
        buffer_[head_] = price;
        sum_ += price;
        ...

环形缓冲区(head_ 指针取模):增量模式只需 O(1) 时间更新,无需重算整个窗口。
滑动求和(sum_ += price; sum_ -= prices[i-period_+1]):批量计算用增量式
求和替代每次全窗口求和,把 O(n·k) 降到 O(n)。
registry.h 用单例 + 工厂函数 + 类型擦除实现插件式指标注册:
class IndicatorRegistry {
public:
    using FactoryFunc = std::function<std::unique_ptr<IndicatorBase>
(const std::string& params)>;
    static IndicatorRegistry& instance();
    ...
#define REGISTER_INDICATOR(name, factory) ...


2.2 因子引擎(factor/engine.h)

采用**计算图(DAG)**模式:

FactorNode 是抽象计算节点,派生 Momentum/Reversal/Volatility/VolumeRatio 等因子。
FactorEngine 统一管理输入数据与因子,compute_all() 批量执行,支持拓扑排序预留。
因子的可组合性为后续扩展复杂因子提供了清晰接口。

2.3 风控(risk/risk_manager.h)

设计了完整的风控规则链:仓位限制、单笔金额、日交易次数、连续止损暂停、个股止损、总回撤控制。
通过 RiskVerdict 枚举表达拒绝原因,RiskManager 聚合各规则,支持开仓前/盘中/收盘后三阶段检
查——这是实盘系统必备的安全网。

2.4 pybind11 桥接(python_bridge/)

将 C++ 类型与枚举暴露给 Python,PYBIND11_MODULE(quant_core_py, m) 作为入口。策略层可直接 
from quant_core_py import SMA, Bollinger, FactorEngine。

三. Python 框架层(quant/)


3.1. 数据层(data/)

BaseDataSource 抽象接口:定义 stock_list / daily_bar / trade_calendar,akshare_source 
是其实现。面向接口编程使将来替换数据源(如 Tushare、聚宽)无需改动上层。
ParquetStore:按 {code}.parquet 单文件存日线,追加合并去重逻辑保证增量更新幂等;
同时支持 Level2 数据按日期分文件存储。
TradingCalendar:交易日历,用 set 做 O(1) 判断,周末判断做兜底,并支持本地 CSV 缓存。


3.2. 回测引擎(engine/)

这是系统最核心的部分,采用事件驱动架构,四个模块职责分明:

模块              职责
broker.py    模拟券商:委托撮合、费用计算、滑点
portfolio.py    投资组合:现金/持仓/交易日志/每日净值
backtest.py    事件循环:推送行情→收集信号→撮合
reporter.py    绩效指标与图表
BacktestEngine.run() 的核心流程:


对每一天 date:
  收集所有股票的当日 K 线 → bars_today
  对每只股票调用 strategy.on_bar() 收集信号
  对每条信号下单 → broker.execute() 撮合(含滑点、限价判断)
  portfolio.update() 结算 → record_daily() 记录净值
broker.py 细致地模拟了真实交易:市价/限价单、滑点(百分比或固定跳数)、佣金(有最低5元)、
印花税(仅卖出)。portfolio.py 用加权平均成本法计算持仓成本,并生成每日快照。

reporter.py 计算总收益、年化、最大回撤、夏普比率、卡玛比率、胜率等核心指标,并输出资金曲线+
月度收益热力图。

3.3. 策略层(strategies/)


base.py 的 Strategy 定义了策略契约:on_init 初始化 + on_bar/on_tick 返回
交易信号。

demo 策略(教学示例):双均线交叉 ma_cross(金叉买/死叉卖)、布林带回归 
bollinger_revert(触下轨买/触上轨卖)、网格交易 grid_trade(多层网格低买高卖)。

advanced 策略:截面动量 momentum(买过去 N 日涨幅 Top 20%)、多因子选股 
factor_portfolio(调用 C++ 因子引擎算分,z-score 标准化后加权选 Top N)、策略
组合器 portfolio_combiner。注意 ma_cross 策略直接调用 C++ 的 SMA 类做批量预计算,
很好地展示了 C++/Python 混合调用的实战用法。

3.4. 实盘信号(signal/)

producer.py 定时跑策略生成信号,exporter.py 将信号写成 JSON 文件供 QMT(券商量化终端)
读取执行——实现了「信号生成与执行解耦」。

四. 脚本与配置

scripts/ 是整套系统的 CLI 入口,形成完整工作流:
1. download_data.py   → 从 akshare 下载行情到本地 Parquet
2. run_backtest.py    → 运行回测,输出绩效报告和图表
3. param_optimize.py  → 网格搜索参数(itertools.product 穷举组合)
4. start_live.py      → 实盘信号生成,导出供 QMT 读取
config/*.yaml 集中管理股票池、策略参数、风控阈值、执行模式,实现配置与代码分离。

五.值得学习的亮点

C++/Python 混合架构:把纯计算(指标/因子/风控)下沉到 C++,策略逻辑留在 Python,
兼顾性能与灵活性,是生产级量化系统的标准做法。
指标双模式设计:批量 + 增量更新 + 环形缓冲区,O(1) 流式更新。
插件式注册表:REGISTER_INDICATOR 宏自动注册,零侵入扩展。
配置驱动实盘:通过 YAML 启停策略、调参、设风控,无需改代码。
三层风控:开仓前/盘中/收盘后分阶段风控,保证实盘安全。


六.可改进方向(仅供参考)

portfolio.py 通过遍历 broker.orders 反查佣金,可用 order_id 建立索引优化。
producer.produce() 目前把所有策略输出都归为 hold,未真正输出买卖动作,实盘逻
辑有待完善。portfolio_combiner 的 combine_signals() 目前只记录日志未返回合成
信号,尚未完成。回测引擎每根 bar 用 DataFrame 过滤查找,日频可接受,但 tick 级
别需优化。如需我深入讲解某个模块(如回测撮合细节、因子引擎的 C++ 实现,或如何扩展
一个新策略),可以告诉我。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值