Add one-expiry-per-day open rhythm gate (default on).

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
dekun
2026-08-01 16:39:32 +08:00
parent 22c42a19a0
commit f1da2778ef
11 changed files with 166 additions and 2 deletions
+25
View File
@@ -82,6 +82,9 @@ class StrategyEngine:
)
rest_sec = self.ledger.get_setting_int("rest_seconds", s.rest_seconds)
skip_weekends = self.ledger.get_setting_bool("skip_weekends", s.skip_weekends)
one_expiry_per_day = self.ledger.get_setting_bool(
"one_expiry_per_day", s.one_expiry_per_day
)
leverage = self.ledger.get_setting_float("leverage", s.leverage)
perp_mm = str(
self.ledger.get_setting_str("perp_margin_mode", s.perp_margin_mode)
@@ -213,6 +216,7 @@ class StrategyEngine:
"rest_left_sec": rest_left,
"rest_seconds": rest_sec,
"skip_weekends": skip_weekends,
"one_expiry_per_day": one_expiry_per_day,
"exit_mode": exit_mode,
"net_profit_target": net_target,
"premium_exit_multiple": prem_mult,
@@ -824,6 +828,27 @@ class StrategyEngine:
self._set_state(phase="wait_signal")
pick = await get_session().pick_for_open_async()
one_expiry_per_day = self.ledger.get_setting_bool(
"one_expiry_per_day", s.one_expiry_per_day
)
if pick is not None and one_expiry_per_day:
from .clock import (
expiry_blocked_by_one_per_day,
used_expiry_ymds_for_day,
)
used = used_expiry_ymds_for_day(self.db)
if expiry_blocked_by_one_per_day(
pick.pair.expiry_ymd, used, enabled=True
):
self._set_state(
phase="idle",
last_error=(
f"同到期日一天只开一次:今日已用过 {pick.pair.expiry_ymd}"
"请等下一到期日"
),
)
return
if pick is None:
try:
from .open_capacity import assess_open_capacity, funds_gate_blocks