Files
sanguo_vnpy_v2/docs/portfolio_live_runbook.md
claude_dev a68cf4905e feat(portfolio): sanguo_portfolio 组合策略框架(BulletTrade+miniQMT,不用jqdatasdk)
把聚宽"全天候轮动"(post48819)搬到 BulletTrade。融合=pip+扩展点注入
(SanguoMiniQmtProvider 继承 MiniQMTProvider 只 override get_fundamentals,
set_data_provider 公开 API 注入, BulletTrade 源码 0 改动)。

- providers: SanguoMiniQmtProvider 补 get_fundamentals(PershareIndex+自算PE/PS/PB/PCF/市值/ROIC)
- strategies/all_weather: 4选股函数+大小盘轮动+ETF兜底+涨停止损(聚宽风格翻译)
- factors(估值/ROIC自算) + filters(ST/涨跌停/次新/停牌)
- 88/88 测试 Mac+VPS 双过; VPS 回测 pipeline 跑通(修9bug:Capital单位/日期格式/百分数口径/11字段alias)
- 实盘 runner_live+runbook 就绪等交易日; DEFAULT_DATA_PROVIDER=miniqmt env 不装 jqdatasdk
- 文档: sanguo_portfolio_plan / portfolio_backtest_result / portfolio_live_runbook
2026-07-18 19:08:18 +08:00

3.1 KiB
Raw Permalink Blame History

sanguo_portfolio 实盘启动手册 (AllWeather 全天候轮动)

状态:代码就绪,等交易日首跑(周六休市)。回测验证结论见 portfolio_backtest_result.mdT9 完成后补)。

前置确认(VPS 49.232.102.198

  • miniQMT 客户端运行中(userdata_mini = C:\国金QMT交易端模拟\userdata_mini),交易账号已登录
  • bullet-trade 0.9.2 已装(VPS),jqdatasdk 未装(走 env 路径)
  • sanguo_portfolio/ 已同步到 VPST9 agent 同步过,若 runner_live.py 有更新重新 scp
  • xtquant 可用(miniQMT 提供)

启动(VPS Windows cmd

cd C:\sanguo_vnpy_v2  (或 VPS 项目根)
set DEFAULT_DATA_PROVIDER=miniqmt
set MINIQMT_MARKET=SH
set SANGUO_QMT_ACCOUNT=66639661
set SANGUO_QMT_PATH=C:\国金QMT交易端模拟\userdata_mini
python -m sanguo_portfolio.runner_live
  • DEFAULT_DATA_PROVIDER=miniqmt 必设(避免 bullet-trade 模块加载强制 import jqdatasdk
  • SANGUO_QMT_ACCOUNT 必设(runner_live 缺它拒绝启动,防误下单)
  • 初始资金 1,000,000(小仓位起步,runner_live 硬编码,首跑后按需调)

触发时点(BulletTrade scheduler 驱动)

时间 函数 动作
09:05 prepare_stock_list 记昨日涨停股、刷新持仓列表
月初第1交易日 09:30 monthly_adjustment 大小盘轮动择时 + 4 选股函数选 3-9 只 + ETF 兜底 + 调仓
14:00 stop_loss 昨日涨停今日打开卖 / 亏损 8% 止损 / 补跌加仓

观察点(首跑重点盯)

  1. QmtBroker connect:日志 QmtBroker 装配 account=... 后应见连接成功;若 LiveEngine 未自动 connect,首跑需在 run_live 显式 broker.connect()(已知风险点,首跑验证)
  2. 字段名provider 取 PershareIndex/Balance 实际字段名(T9 回测校准过 alias,若 VPS 实盘仍报 KeyError,对照 portfolio_backtest_result.md 字段校准表)
  3. 首笔调仓:月初 monthly_adjustment 触发,看 target_list 是否合理(3-9 只 + 可能 ETF),order_target_value 下单手数对不对(A股×100)
  4. 涨跌停过滤:涨停买不进/跌停卖不出是否正确跳过

风控

  • 小仓位 1e6 起步(全天候策略最多持 9 只股票 + ETF)
  • 涨停止损 + 8% 止损内置(stop_loss
  • T+1 自动扣减(BulletTrade A股适配)
  • 首跑建议:非月初启动,先观察 prepare/stop_loss 触发不调仓;月初再验证 monthly_adjustment

等交易日

今天(2026-07-18 周六)休市,真实成交做不了。代码已就绪,周一(7/20)开盘后首跑。首跑先小仓位 + 非月初观察 scheduler,确认连通后再等月初验证完整调仓。

回测验证结论

T9 agent 完成后,从 portfolio_backtest_result.md 摘要:策略是否跑通、选股名单合理性、字段校准结果、聚宽数值对账缺基准标注)

已知限制

  • PE/PB/PS/PCF 单期×4 近似 TTM(对账聚宽有偏差,精确 TTM 留 v2)
  • ROIC 用单期 oper_profitvs 聚宽 roic_ttm
  • jq query ORM 仅支持 ==/>/</between/in_/order_by/limit 子集
  • 聚宽数值对账缺基准(用户不续费 jqdata),仅自洽验证