Add fixed-direction switch for perp/option open side.

When enabled, lock perp long→buy Put or short→buy Call with ITM/ATM only; off keeps ATM/ask rules.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
dekun
2026-07-29 19:18:12 +08:00
parent 55109e82d3
commit 0ee1d8be5d
16 changed files with 427 additions and 46 deletions
+23
View File
@@ -41,6 +41,8 @@ KEYS = (
"min_option_leverage",
"atm_open_offset_enabled",
"max_atm_open_offset",
"fixed_direction_enabled",
"fixed_perp_side",
"close_bid_mark_max_pct",
"perp_qty_eth",
"option_qty_eth",
@@ -63,6 +65,8 @@ class StrategySettingsBody(BaseModel):
min_option_leverage: float | None = Field(default=None, ge=1, le=10000)
atm_open_offset_enabled: bool | None = None
max_atm_open_offset: float | None = Field(default=None, ge=0, le=100)
fixed_direction_enabled: bool | None = None
fixed_perp_side: str | None = Field(default=None, pattern="^(long|short)$")
close_bid_mark_max_pct: float | None = Field(default=None, ge=1, le=100)
perp_qty_eth: float | None = Field(default=None, ge=0.01, le=100)
option_qty_eth: float | None = Field(default=None, ge=0.01, le=100)
@@ -131,6 +135,25 @@ def _read_settings() -> dict:
db.get_setting("max_atm_open_offset", str(s.max_atm_open_offset))
or s.max_atm_open_offset
),
"fixed_direction_enabled": _as_bool(
db.get_setting(
"fixed_direction_enabled", str(s.fixed_direction_enabled)
),
s.fixed_direction_enabled,
),
"fixed_perp_side": (
side
if (
side := str(
db.get_setting("fixed_perp_side", s.fixed_perp_side)
or s.fixed_perp_side
)
.strip()
.lower()
)
in ("long", "short")
else "long"
),
"close_bid_mark_max_pct": float(
db.get_setting("close_bid_mark_max_pct", str(s.close_bid_mark_max_pct))
or s.close_bid_mark_max_pct