Alpha-Online
系统手册

5. 交易执行层 ADS

将目标持仓落地为实际交易与记账;模拟盘与实盘共用抽象接口;全程状态可恢复、可对账。

作用:把目标持仓落地为真实交易 / 记账;模拟盘与实盘共用抽象接口;全程可恢复、可对账。

源码地图

文件关键对象作用
src/execution/base.pyExecutionEngine(ABC) / Order / compute_trades策略与执行解耦的抽象层
src/execution/paper_trader.pyPaperTrader.run_daily / execute_rebalance模拟盘:SQLite 持久化、幂等续跑、NAV 恢复
src/execution/alpaca_trader.pyAlpacaTrader.execute_rebalance / _wait_for_orders / _compute_slippage实盘:真实权益、订单轮询、滑点
src/execution/recorder.pyrecord_* / turnover_from_orders按真实权益幂等落库
src/execution/run_daily.pymain / should_rebalance每日信号 → 交易入口;N 日调仓节流

已知问题与修复

重启后持仓状态丢失(#30)

服务重启后 PaperTrader 仅恢复净值、未恢复持仓明细 → 误判为空仓 → 触发全仓买入,换手率异常。解法:Delta 状态对齐,宕机后通过「目标持仓 − 实际持仓」自动补平。见 事故档案 · 重启后状态丢失

碎股与粉尘持仓(#28)

$25,000 分 10 份买高价股(如 AVGO)时存在离散化误差;权重 <0.1% 的「粉尘持仓」持续推高交易成本 → 优化清仓逻辑。见 事故档案 · 碎股与粉尘持仓

总仓 >100%(#27)

AlpacaTrader 总敞口计算错误导致权重异常 → 权重计算始终基于真实 account.equity

量化要点

调仓频率必须与回测一致

默认 REBALANCE_FREQ=5回测与实盘的调仓频率不一致是模拟盘亏损的主因,而非因子失效。事故档案 · 调仓频率不一致导致摩擦放大

  • 停牌标的市价单会被 Reject,已用 try-except 兜底,不影响其余标的。

当前状态

模拟盘上线;实盘在 #40 整改后补齐「真实落库 + 真实滑点 + 5 日调仓节流」(commit 05eab94)。

缺口 / TODO

  • 风控未接入执行(#34)。
  • 切实盘前模拟盘须「无人值守、零报错」连跑 ≥4 周。

上一层:4. 截面回测引擎 · 下一层:6. 工程基建

On this page