Files
sanguo_vnpy_v2/sanguo_portfolio/__init__.py
T
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

33 lines
1.2 KiB
Python

"""sanguo_portfolio:聚宽全天候轮动策略搬到 BulletTrade 框架。
子模块:
- ``factors`` 纯函数估值/ROIC 因子(无外部依赖)
- ``filters`` ST/停牌/科创北交/次新/涨跌停 过滤(无外部依赖)
- ``providers`` SanguoMiniQmtProvider(继承 bullet-trade MiniQMTProvider)
- ``strategies`` AllWeatherStrategy(聚宽 post48819 翻译)
ENV GUARD(bullet-trade 0.9.2 坑):
- ``import bullet_trade`` 时 default provider 是 jqdata,会强制 ``import jqdatasdk``,
本地/服务器都没装(用户铁律不用 jqdata 付费)。
- 在任何 ``import bullet_trade`` **之前**设 ``DEFAULT_DATA_PROVIDER=miniqmt``,
default provider 切到 MiniQMTProvider,跳过 jqdatasdk。
- 实际数据走 ``set_data_provider(SanguoMiniQmtProvider(...))`` 覆盖。
"""
import os
# 默认 provider 切 miniqmt,避开 jqdatasdk 硬 import(必须早于任何 bullet_trade import)
os.environ.setdefault("DEFAULT_DATA_PROVIDER", "miniqmt")
from . import factors, filters
from .providers import SanguoMiniQmtProvider
from .strategies import AllWeatherConfig, AllWeatherStrategy, BrokerFacade
__all__ = [
"factors",
"filters",
"SanguoMiniQmtProvider",
"AllWeatherStrategy",
"AllWeatherConfig",
"BrokerFacade",
]