tradingSystem/config/settings.py

116 lines
6.7 KiB
Python
Raw 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.

# -*- 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_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()