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

54 lines
3.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# sanguo_portfolio 实盘启动手册 (AllWeather 全天候轮动)
**状态**:代码就绪,等交易日首跑(周六休市)。回测验证结论见 `portfolio_backtest_result.md`T9 完成后补)。
## 前置确认(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
```bat
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),仅自洽验证