Files
sanguo_vnpy_v2/sanguo_api/schemas.py
T
claude_dev 8d55e414fa fix(backtest): A股适配层—定寸/做空拦截/真实费用/口径统一(Phase1+2)
审计发现包装层系统性失真(2 CRITICAL+7 HIGH),vnpy底座可信但A股场景未适配:
- C1 定寸: engine.size=N(满仓手数),策略volume=1手=N股,开平对称(pos归零)
- C2 做空拦截: SHORT+OPEN拒单,long-only,SHORT+CLOSE平多允许
- H3 A股费用: AShareDailyResult重算(佣金保底5元/印花税卖方/过户费沪市)
- H4 收益口径: simple return从balance算(不再用vnpy log return喂empyrical)
- H5+口径: benchmark ffill对齐不缩样本; sizing_shares_per_lot暴露
- H7 退化检测: 零成交/空数据标degenerate不静默done
- H8 task_id: optimize/factor用uuid4(原id()内存地址)
- 静默except改warning

验证: 容器内真实vnpy DoubleMa 600000 2022-2024, total_return 1e-6→42.3%,
end_balance 100万→142万, SHORT+OPEN成交0笔, N=7800股/手.
22 backtest测试全绿(含集成测试), API健康200.
2026-07-12 23:39:45 +08:00

40 lines
958 B
Python

"""
Pydantic schemas for FastAPI request/response models
"""
from pydantic import BaseModel
class CtaBacktestRequest(BaseModel):
"""CTA backtest request schema"""
symbol: str
strategy: str
params: dict = {}
start: str
end: str
benchmark: str = "hs300"
capital: float = 1_000_000
position_pct: float = 0.95
# A 股费用参数(可选,前端先不暴露,给默认值)
commission_rate: float = 0.00025 # 万 2.5
min_commission: float = 5.0 # 最低 5 元
stamp_duty_rate: float = 0.0005 # 卖方 0.05%
transfer_fee_rate: float = 0.00001 # 沪市 0.001%
class OptimizeRequest(BaseModel):
"""Optimization request schema"""
symbol: str
strategy: str
grid: dict
start: str
end: str
max_workers: int = 2
class FactorAnalysisRequest(BaseModel):
"""Factor analysis request schema"""
symbols: list[str]
factor_names: list[str]
start: str
end: str