Files
crypto_monitor/docs/daily-open-limit.md
dekun 24a86a710c feat: add per-account daily open hard limit across all exchanges
Enforce optional DAILY_OPEN_HARD_LIMIT in precheck_risk and can_trade, keep AI alerts at DAILY_OPEN_ALERT_THRESHOLD, and document env setup for all four instances.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-09 15:46:18 +08:00

2.6 KiB
Raw Permalink Blame History

单日开仓次数限制(四所统一)

各交易实例(Binance / OKX / Gate / Gate_bot)在 .env 中独立配置,互不影响。

交易日口径

  • 北京时间 TRADING_DAY_RESET_HOUR(默认 8:00)切分交易日,与统计、顶栏「交易日」一致。
  • 次日恢复:过了切日时刻后 session_date 变为新日期,计数自动归零,无需清库。

计数口径

每成功新建一条 order_monitors 记录计 1 次,包括:

  • 人工「实盘下单」
  • 关键位自动开仓
  • 其他写入 order_monitors 的成功开仓

平仓后再开仍算新的一单。当日总次数到硬上限后 当天不再允许新开(即使已空仓)。

环境变量

在「交易执行 / 人工风控」段配置:

# 【单日开仓 AI 提醒】本交易日开仓次数达到该值时,企业微信推送 AI 克制提醒(不拦单)
DAILY_OPEN_ALERT_THRESHOLD=5

# 【单日开仓硬上限】本交易日开仓次数 >= 该值后,禁止一切新开仓直至下一交易日;0=不启用
DAILY_OPEN_HARD_LIMIT=0

配置示例

# 保守户:3 次提醒,5 次封死
DAILY_OPEN_ALERT_THRESHOLD=3
DAILY_OPEN_HARD_LIMIT=5

# 仅提醒、不封(与旧版行为接近)
DAILY_OPEN_ALERT_THRESHOLD=5
DAILY_OPEN_HARD_LIMIT=0

# 严格户:到 3 次即封
DAILY_OPEN_ALERT_THRESHOLD=2
DAILY_OPEN_HARD_LIMIT=3

建议 DAILY_OPEN_ALERT_THRESHOLD <= DAILY_OPEN_HARD_LIMIT(硬上限为 0 时除外)。

程序行为

次数 行为
未达提醒阈值 正常开仓
达到 DAILY_OPEN_ALERT_THRESHOLD 成功开仓后 AI 企业微信提醒
达到 DAILY_OPEN_HARD_LIMIT>0 precheck_risk 拒绝人工/关键位开仓;顶栏 can_trade=false

硬限制与以下规则 同时生效(取交集):

  • TRADING_DAY_RESET_OPEN_GUARD_ENABLED:切日前禁止新开
  • MAX_ACTIVE_POSITIONS:同时持仓上限
  • Gate_botprecheck_trend_pullback_start 同样校验单日硬上限

页面与接口

  • 顶栏 / api/account_snapshot 返回 opens_todaydaily_open_hard_limitdaily_open_alert_threshold
  • 达硬上限时提示:本交易日开仓 N/M 已达上限,次日 8:00 后恢复M 为配置的硬上限)。

部署

修改各实例 .env 后重启对应 pm2 进程,例如:

pm2 restart crypto_binance crypto_okx crypto_gate crypto_gate_bot

实现位置

  • 共享逻辑:daily_open_limit_lib.py
  • 四所 app.pyprecheck_riskcan_tradeapi/account_snapshot、开仓成功后的 AI 提醒文案
  • 单元测试:tests/test_daily_open_limit_lib.py