118 lines
6.9 KiB
Python
118 lines
6.9 KiB
Python
# -*- coding: utf-8 -*-
|
||
"""
|
||
tradingSystem (PMS) 配置
|
||
========================
|
||
纪律 (沿袭 bionic_trader 踩坑经验):
|
||
1. 所有配置字段必须在 Settings 类中显式声明 —— pydantic 的 extra="ignore" 会静默忽略
|
||
未声明的环境变量, 这是历史头号坑。新增配置必须同时加字段。
|
||
2. 基础设施键名与 bionic_trader 对齐 (PROXY_DB_URL / SIGNAL_REDIS_* / SOURCE_DB_EXT_DSN
|
||
/ DB_MYSQL_URL), 同一份 .env 可服务两个系统。
|
||
3. 业务参数在此处只是「初值」: 页面修改后持久化到 pms_runtime_param 表,
|
||
运行时经 ParamStore 读取 (表值优先于本文件)。禁止在业务代码里直接
|
||
读 settings 取业务参数 —— 统一走 ParamStore, 保证页面调参即时生效。
|
||
"""
|
||
from pydantic_settings import BaseSettings, SettingsConfigDict
|
||
|
||
|
||
class Settings(BaseSettings):
|
||
model_config = SettingsConfigDict(env_file=".env", env_file_encoding="utf-8", extra="ignore")
|
||
|
||
# =========================================================
|
||
# 一、基础设施 (键名对齐 bionic_trader, 同一 .env 可共用)
|
||
# =========================================================
|
||
PROXY_DB_URL: str = "mysql+pymysql://user:pass@192.168.16.153:3307/my_quant_db"
|
||
# 153 代理: pms_* 全部表 + trading_position / trading_order / trading_buy_plan /
|
||
# strategy_daily_results (决策系统结论) —— 严格单表访问, 代理禁多表联查
|
||
SOURCE_DB_EXT_DSN: str = "mysql+pymysql://user:pass@192.168.16.150:3306/factordb_mysql"
|
||
# 因子库直连。**PMS 当前不使用**: 因子分表 gp_stock_factor_pro_YYYYMM 经
|
||
# ShardingSphere 动态分配物理落点, 直连单台会在分片变动的月份漏表, 必须走
|
||
# PROXY_DB_URL 逐表单查 (沿用 bionic_trader 的踩坑结论)。保留本键仅为与 bionic
|
||
# 的 .env 对齐, 连不通不影响任何功能。
|
||
DB_MYSQL_URL: str = "mysql+pymysql://user:pass@192.168.18.199:3306/db_gp_cj"
|
||
# 大盘指数 zs_day_data (页面区制提示用, 非约束)
|
||
|
||
SIGNAL_REDIS_HOST: str = "192.168.18.208"
|
||
SIGNAL_REDIS_PORT: int = 6379
|
||
SIGNAL_REDIS_PASSWORD: str = ""
|
||
SIGNAL_REDIS_DB_INTRADAY: int = 2 # 决策系统盘中信号流 (PMS 订阅消化)
|
||
SIGNAL_REDIS_DB_ACTIONS: int = 3 # 决策系统风控 SELL 流 (PMS 订阅消化)
|
||
SIGNAL_REDIS_DB_QUOTES: int = 13 # 实时分钟行情 (择时/扫描)
|
||
SIGNAL_REDIS_SOCKET_TIMEOUT: int = 5
|
||
|
||
PMS_REDIS_URL: str = "redis://:pass@192.168.16.150:6379/8"
|
||
# PMS 自己的 Celery 总线, 独立 db=8 (决策系统用 db7, 物理同机逻辑隔离)
|
||
|
||
PMS_WEB_HOST: str = "0.0.0.0" # 管理页面 (FastAPI + 单页)
|
||
PMS_WEB_PORT: int = 38100
|
||
|
||
# =========================================================
|
||
# 二、业务参数「初值」(运行时以 pms_runtime_param 表为准, 页面可调)
|
||
# =========================================================
|
||
# --- 资金与总体 (对应参数命令) ---
|
||
PMS_TOTAL_SCALE: float = 2_000_000 # 总操作规模 (元)
|
||
PMS_PORTFOLIO_CAP: float = 0.60 # 总仓上限 (占规模)
|
||
PMS_STOCK_CAP: float = 0.08 # 单股上限
|
||
PMS_STOCK_TARGET_DEFAULT: float = 0.06 # 默认单股目标仓位
|
||
PMS_MAX_NAMES: int = 15 # 最大持仓数
|
||
PMS_CASH_RESERVE: float = 0.0 # 预留现金比例 (永不动用)
|
||
PMS_AUTONOMY: str = "propose_only" # full / propose_only / off
|
||
|
||
# --- 批次与安全垫 ---
|
||
PMS_BATCH_SPLIT: str = "0.5,0.25,0.25" # 底仓/回踩补足/盈利加仓
|
||
PMS_CUSHION_SOLID: float = 0.03 # 安全垫厚垫线 (解锁加仓)
|
||
PMS_TRIM_PEAK: float = 0.06 # 保垫减仓: 垫子峰值门槛
|
||
PMS_TRIM_GIVEBACK: float = 0.5 # 保垫减仓: 回吐比例门槛
|
||
PMS_DCA_TRIGGERS: str = "-0.08,-0.15" # 补仓评估档
|
||
PMS_DCA_DEEP_CONFIRM: float = -0.15 # 此档及更深永远需用户确认
|
||
PMS_DCA_MAX_RATIO: float = 0.5 # 补仓上限 (占底仓)
|
||
PMS_NO_CHASE_MA5: float = 0.06 # 距 MA5 超此幅度不追买
|
||
PMS_BUILD_WINDOW_TDAYS: int = 10 # 建仓期窗口 (交易日)
|
||
PMS_FILL_MAX_LOSS: float = -0.03 # 浮亏深于此不走回踩补足 (转补仓域)
|
||
PMS_WEAK_NEG_DAYS: int = 5 # 降仓「清弱票」判定: 安全垫连续为负 N 日 (设计 §3.2)
|
||
PMS_PROPOSAL_TTL_HOURS: int = 24 # 自主提议待确认有效期 (超时置 EXPIRED)
|
||
|
||
# --- 行业约束 (硬拦截; 数据源接口化) ---
|
||
PMS_SECTOR_SOURCE: str = "" # "" = 停用并页面提示 / custom_table / gp_stock_category
|
||
PMS_SECTOR_MAX_NAMES: int = 4
|
||
PMS_SECTOR_MAX_RATIO: float = 0.40 # 占总仓
|
||
|
||
# --- 择时执行 (内置实现B; 决策系统接通后切实现A) ---
|
||
PMS_EXEC_WINDOW_TDAYS: int = 3 # 任务命令默认执行窗口
|
||
PMS_SELL_AVOID_OPEN_MIN: int = 30 # 卖出避开开盘 N 分钟
|
||
PMS_BUY_HALT_DAYUP: float = 0.05 # 当日涨幅超此停止买入
|
||
PMS_EOD_FORCE_TIME: str = "14:45" # 当日配额兜底时点
|
||
PMS_EOD_FORCE_DISCOUNT: float = 0.998 # 兜底限价 = 现价 × 此系数 (卖出)
|
||
PMS_MIN_LOT_MERGE: bool = True # 一手检查: 批次自动合并
|
||
PMS_DISPATCH_EXPIRE_MIN: int = 30 # 指令下发后未被接受的过期时间
|
||
PMS_DISPATCH_MODE: str = "shadow" # 下发通道: shadow(影子,默认) / plan_x / channel_y
|
||
PMS_EXEC_SLICES: int = 1 # 当日配额分几笔出手 (设计「分笔卖出配额」)
|
||
|
||
# --- 风险披露与刹车 ---
|
||
PMS_RISK_WARN_ENTRY: float = 0.01 # 单笔敞口告警线 (占规模)
|
||
PMS_RISK_WARN_PORTFOLIO: float = 0.06 # 组合敞口告警线
|
||
PMS_BRAKE_DRAWDOWN: float = 0.05 # 组合刹车: 高水位回撤
|
||
PMS_BRAKE_DAYS: int = 3 # 刹车持续交易日
|
||
PMS_STOP_ATR_MULT: float = 2.0 # 自算止损参考: 成本 - N×ATR
|
||
PMS_REF_STALE_TDAYS: int = 3 # 决策系统结论日龄超此转自算兜底
|
||
|
||
# --- 研判闸 (委托决策系统) ---
|
||
PMS_JUDGE_ENABLED: bool = True
|
||
PMS_JUDGE_ACTIONS: str = "FILL,ADD,DCA,SWITCH"
|
||
PMS_JUDGE_TIMEOUT: int = 90 # 超时 → 降级 propose_only
|
||
|
||
# --- T0 做T (命令授权制) ---
|
||
PMS_T0_RATIO_MAX: float = 0.333 # T仓硬上限 (占持仓)
|
||
PMS_T0_PULLBACK_PCT: float = 0.03 # 正T: 距当日高点回落触发
|
||
PMS_T0_RALLY_PCT: float = 0.05 # 反T: 日内涨幅触发
|
||
PMS_T0_ROUND_TARGET: float = 0.015 # 单次T目标价差
|
||
PMS_T0_CLOSE_TIME: str = "14:50" # 强制平回时点
|
||
PMS_T0_STOCK_DAY_LOSS: float = 0.003 # 单票当日T亏熔断 (占规模)
|
||
PMS_T0_GLOBAL_DAY_LOSS: float = 0.01 # 全局当日T亏熔断
|
||
|
||
# --- 对账与回放 ---
|
||
PMS_REPLAY_INTERVAL_MIN: int = 5
|
||
PMS_RECON_ALARM_DAYS: int = 3 # 连续不一致 N 日升级 ERROR
|
||
|
||
|
||
settings = Settings()
|