Revise strategy: TTM+ATM+leverage option pick, % exit, perp leverage/margin.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
dekun
2026-07-25 08:38:03 +08:00
parent 7db4c9c8a3
commit 3957a83761
16 changed files with 532 additions and 261 deletions
+19 -9
View File
@@ -14,10 +14,12 @@ router = APIRouter(prefix="/api/settings", tags=["settings"])
KEYS = (
"fee_rate",
"exit_move_points",
"exit_move_pct",
"rest_seconds",
"max_rounds",
"initial_equity",
"leverage",
"min_option_hours",
"min_option_leverage",
"perp_qty_eth",
"option_qty_eth",
)
@@ -25,10 +27,12 @@ KEYS = (
class StrategySettingsBody(BaseModel):
fee_rate: float | None = Field(default=None, ge=0, le=0.05)
exit_move_points: float | None = Field(default=None, ge=1, le=500)
exit_move_pct: float | None = Field(default=None, ge=0.1, le=50)
rest_seconds: int | None = Field(default=None, ge=0, le=3600)
max_rounds: int | None = Field(default=None, ge=1, le=20)
initial_equity: float | None = Field(default=None, ge=1000)
leverage: float | None = Field(default=None, ge=1, le=125)
min_option_hours: float | None = Field(default=None, ge=1, le=720)
min_option_leverage: float | None = Field(default=None, ge=1, le=10000)
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)
@@ -38,18 +42,24 @@ def _read_settings() -> dict:
s = get_settings()
return {
"fee_rate": float(db.get_setting("fee_rate", str(s.fee_rate)) or s.fee_rate),
"exit_move_points": float(
db.get_setting("exit_move_points", str(s.exit_move_points)) or s.exit_move_points
"exit_move_pct": float(
db.get_setting("exit_move_pct", str(s.exit_move_pct)) or s.exit_move_pct
),
"rest_seconds": int(
float(db.get_setting("rest_seconds", str(s.rest_seconds)) or s.rest_seconds)
),
"max_rounds": int(
float(db.get_setting("max_rounds", str(s.max_rounds)) or s.max_rounds)
),
"initial_equity": float(
db.get_setting("initial_equity", str(s.initial_equity)) or s.initial_equity
),
"leverage": float(db.get_setting("leverage", str(s.leverage)) or s.leverage),
"min_option_hours": float(
db.get_setting("min_option_hours", str(s.min_option_hours))
or s.min_option_hours
),
"min_option_leverage": float(
db.get_setting("min_option_leverage", str(s.min_option_leverage))
or s.min_option_leverage
),
"perp_qty_eth": float(
db.get_setting("perp_qty_eth", str(s.perp_qty_eth)) or s.perp_qty_eth
),