# 账户冷静期 / 日冻结风控 四所实例(币安 / OKX / Gate / Gate 趋势)共用 `account_risk_lib.py`。 **仅用户主动平仓**计入风控;交易所止盈/止损、空仓同步、改保本/改委托等**不触发**冷静期。 ## 状态展示 实例页顶、中控监控卡片账户名旁: | 状态 | 含义 | |------|------| | 正常 | 可新开仓 | | 1h冻结 | 冷静期中(通常为复盘后缩短的 1 小时) | | 4h冻结 | 冷静期中(默认 4 小时) | | 日冻结 | 当日禁止一切新开仓 | ## 什么算「手动平仓」(计入风控) 以下操作通过 `close_source` 登记为 **用户主动平仓**: | 来源标识 | 操作 | |----------|------| | `user_instance` | 实例页删单/手动平仓(`del_order`) | | `user_hub` | 中控「平仓」「全平」「紧急全平」 | | `user_trend_stop` | 趋势计划 **「结束计划」**(手动结束) | **不算**手动平仓(不触发风控): - 趋势 **「保本移交下单监控」** - 中控/实例修改委托、挂止盈止损、移动保本 - 交易所止盈/止损/条件单成交 - 后台 `reconcile_external_closes` 空仓同步(即使记账为「外部平仓」) - 监控轮询自动止盈/止损/保本 ## 触发规则 | 事件 | 行为 | |------|------| | 第 1 次用户主动平仓 | 默认 **4h** 冷静期 | | 第 2 次用户主动平仓(同一交易日) | **日冻结** | | 复盘勾选任意情绪标签 | **日冻结** | | 复盘:离场=手动平仓 且说明非空 | 将当前冷静期降为 **1h**(须处于手动平仓冷静期中;有 pending 关联交易记录时同样生效) | 情绪标签:怕踏空、报复开仓、盈利飘了、拿不住单、扛单、重仓违规。 **复盘缩短 1h 说明**: - 复盘表单须选 **离场触发 = 手动平仓**,并在 **离场补充** 填写说明(不是下方「备注」栏)。 - 或在交易记录 **核对修改** 中:结果填 **手动平仓**,**备注** 填写说明(勾选「核对修改」后点按钮)。 - 中控全平/实例手动平仓后,只要账户仍在 4h 冷静期内,完成上述任一种即可降为 1h。 - 若在平仓后超过 1h 才复盘,则从复盘保存时刻起再计 1h(不会延长原 4h 窗口)。 - 保存后需 **重启对应实例**(`pm2 restart crypto_gate` 等)并刷新页面,状态才会更新。 ## 环境变量 ```env RISK_CONTROL_ENABLED=true RISK_COOLING_HOURS_MANUAL=4 RISK_COOLING_HOURS_MANUAL_JOURNAL=1 RISK_MANUAL_CLOSE_DAILY_LIMIT=2 RISK_MOOD_ISSUES_DAILY_FREEZE=true ``` `RISK_COOLING_HOURS_EXTERNAL` 已废弃(外部平仓不再触发风控)。 ## API | 接口 | 说明 | |------|------| | `GET /api/account_snapshot` | 返回 `risk_status` | | `GET /api/account_risk_status` | hub_bridge,供中控拉取 | | `POST /api/hub/account-risk/user-close` | 中控登记用户平仓,`body: { source, count }` | ## 相关代码 - `account_risk_lib.py` — 状态机与 `on_user_initiated_close` - `hub_bridge.py` — `/api/hub/account-risk/user-close` - `manual_trading_hub/hub.py` — 中控平仓成功后调用 user-close - `strategy_trend_register.py` — `stop_trend_pullback` 结束计划时登记风控 - `tests/test_account_risk_lib.py`