Add dual exit modes: fixed USDT or premium multiple.
Net PnL (after estimated close fees) drives auto close; Plan/Settings expose the choice. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -15,6 +15,9 @@ router = APIRouter(prefix="/api/settings", tags=["settings"])
|
||||
KEYS = (
|
||||
"fee_rate",
|
||||
"exit_move_pct",
|
||||
"exit_mode",
|
||||
"net_profit_target",
|
||||
"premium_exit_multiple",
|
||||
"rest_seconds",
|
||||
"initial_equity",
|
||||
"leverage",
|
||||
@@ -29,6 +32,9 @@ KEYS = (
|
||||
class StrategySettingsBody(BaseModel):
|
||||
fee_rate: float | None = Field(default=None, ge=0, le=0.05)
|
||||
exit_move_pct: float | None = Field(default=None, ge=0.1, le=50)
|
||||
exit_mode: str | None = Field(default=None, pattern="^(fixed_usdt|premium_multiple)$")
|
||||
net_profit_target: float | None = Field(default=None, ge=0.1, le=1_000_000)
|
||||
premium_exit_multiple: float | None = Field(default=None, ge=0.1, le=100)
|
||||
rest_seconds: int | None = Field(default=None, ge=0, le=3600)
|
||||
initial_equity: float | None = Field(default=None, ge=1000)
|
||||
leverage: float | None = Field(default=None, ge=1, le=125)
|
||||
@@ -42,11 +48,23 @@ class StrategySettingsBody(BaseModel):
|
||||
def _read_settings() -> dict:
|
||||
db = get_db()
|
||||
s = get_settings()
|
||||
mode = str(db.get_setting("exit_mode", s.exit_mode) or s.exit_mode)
|
||||
if mode not in ("fixed_usdt", "premium_multiple"):
|
||||
mode = "fixed_usdt"
|
||||
return {
|
||||
"fee_rate": float(db.get_setting("fee_rate", str(s.fee_rate)) or s.fee_rate),
|
||||
"exit_move_pct": float(
|
||||
db.get_setting("exit_move_pct", str(s.exit_move_pct)) or s.exit_move_pct
|
||||
),
|
||||
"exit_mode": mode,
|
||||
"net_profit_target": float(
|
||||
db.get_setting("net_profit_target", str(s.net_profit_target))
|
||||
or s.net_profit_target
|
||||
),
|
||||
"premium_exit_multiple": float(
|
||||
db.get_setting("premium_exit_multiple", str(s.premium_exit_multiple))
|
||||
or s.premium_exit_multiple
|
||||
),
|
||||
"rest_seconds": int(
|
||||
float(db.get_setting("rest_seconds", str(s.rest_seconds)) or s.rest_seconds)
|
||||
),
|
||||
|
||||
Reference in New Issue
Block a user