高级自定义运行
run_paper.py 和 run_live.py 适合快速启动。需要精细控制行情源、选股器、策略、组合优化、风控、持久化或实盘 broker 时,可以直接组装 trading service。
手动运行模拟盘
下面示例创建两个模拟盘 session:一个使用海龟策略作为基准,一个使用 RSI 策略做对照。MarketDataService 默认使用 TuShare 历史行情,同时会在交易日合并当日行情,并在进入执行层前统一为 trading schema。
from jh_quant.trading import ( MultiSessionService, PersistenceCoordinator, SQLiteOrderRecorder, RSIStrategyConfig, TurtleStrategyConfig, build_session_config, create_market_data_service, run_trading_app,)
symbols = ["688256.SH", "688012.SH", "688981.SH", "688041.SH"]
market_data = create_market_data_service( backend="tushare", default_symbols=symbols,)
persistence = PersistenceCoordinator( recorder=SQLiteOrderRecorder(db_path="trading-paper.db"))
base_config = ( build_session_config() .with_session( execution_mode="paper", clock_mode="live", frequency="1d", price_lookback_days=180, auto_start=True, ) .with_selection(name="static", params={"symbols": symbols}))
turtle_config = ( base_config .with_session(session_id="paper-turtle") .with_strategy(name="turtle", alias="turtle", weight=1.0, params=TurtleStrategyConfig()) .build())
rsi_config = ( build_session_config() .with_session( session_id="paper-rsi", execution_mode="paper", clock_mode="live", frequency="1d", price_lookback_days=180, auto_start=True, ) .with_selection(name="static", params={"symbols": symbols}) .with_strategy(name="rsi", alias="rsi", weight=1.0, params=RSIStrategyConfig()) .build())
manager = MultiSessionService(market_data_provider=market_data, persistence=persistence)manager.create_session(config=turtle_config, initial_capital=100_000)manager.create_session(config=rsi_config, initial_capital=100_000)
run_trading_app(manager=manager, host="127.0.0.1", port=8000)启动后访问:
http://127.0.0.1:8000/healthhttp://127.0.0.1:8000/sessionshttp://127.0.0.1:8000/sessions/{session_id}/runtime
关键配置
with_session() 控制运行模式:
execution_mode="paper":模拟盘。execution_mode="live":实盘,需要 broker。clock_mode="live":按真实时间运行。clock_mode="backfill":补跑历史窗口,需要backfill_start。frequency:调度频率,例如"1d"。price_lookback_days:策略计算信号需要回看的行情天数。auto_start=True:创建 session 后自动启动调度器。
with_selection() 控制股票池:
.with_selection( name="static", params={"symbols": ["688256.SH", "688012.SH"]},)with_strategy() 或 add_strategy() 控制策略组合:
config = ( build_session_config() .with_strategy(name="turtle", weight=0.6, params=TurtleStrategyConfig()) .add_strategy(name="rsi", weight=0.4, params=RSIStrategyConfig()) .build())with_risk_rule() 和 add_risk_rule() 可添加执行前风控:
config = ( build_session_config() .with_risk_rule(name="max_position_weight", params={"max_weight": 0.2}) .add_risk_rule(name="min_cash_ratio", params={"min_cash_ratio": 0.05}) .build())手动运行实盘
实盘需要显式配置 broker。当前常见场景是 MiniQMT / XtQuant:
from jh_quant.trading import ( MomentumStrategyConfig, build_session_config, create_market_data_service, run_trading_app, MultiSessionService,)
symbols = ["688256.SH", "688012.SH", "688981.SH"]
market_data = create_market_data_service( backend="tushare", default_symbols=symbols,)
broker_params = { "account_id": "YOUR_ACCOUNT_ID", "account_type": "STOCK", "path": r"C:\miniQMT\userdata_mini",}
live_config = ( build_session_config() .with_session( session_id="live-momentum", execution_mode="live", clock_mode="live", frequency="1d", cron_expression="0 14 * * 1-5", price_lookback_days=240, auto_start=False, ) .with_selection(name="static", params={"symbols": symbols}) .with_broker(name="xtquant", params=broker_params, alias="miniqmt-live") .with_strategy(name="momentum", alias="momentum", weight=1.0, params=MomentumStrategyConfig()) .build())
manager = MultiSessionService(market_data_provider=market_data)manager.create_session(config=live_config, initial_capital=1_000_000)
run_trading_app(manager=manager, host="127.0.0.1", port=8000)实盘建议先保持 auto_start=False,通过 API 或 Dashboard 检查配置、行情、账户连接后再启动。
Dashboard
bootstrap 模式会在开启 API 后自动调用 display_trading()。手动模式下可以自己启动:
from jh_quant.dashboard import display_trading
display_trading(host="127.0.0.1", port=8000, refresh_interval_ms=15000)Dashboard 依赖 API 端口,默认连接 http://127.0.0.1:8000。