Fix running status color; add ETH qty settings with Chinese labels.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
dekun
2026-07-24 17:24:27 +08:00
parent b6d9877538
commit 5125c6702b
7 changed files with 102 additions and 47 deletions
+36 -33
View File
@@ -12,7 +12,15 @@ from .auth import require_user
router = APIRouter(prefix="/api/settings", tags=["settings"])
KEYS = ("fee_rate", "exit_move_points", "rest_seconds", "max_rounds", "initial_equity")
KEYS = (
"fee_rate",
"exit_move_points",
"rest_seconds",
"max_rounds",
"initial_equity",
"perp_qty_eth",
"option_qty_eth",
)
class StrategySettingsBody(BaseModel):
@@ -21,42 +29,13 @@ class StrategySettingsBody(BaseModel):
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)
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)
@router.get("/strategy")
async def get_strategy_settings(_user: Annotated[str, Depends(require_user)]) -> dict:
def _read_settings() -> dict:
db = get_db()
s = get_settings()
out = {
"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
),
"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
),
"ledger": Ledger(db).snapshot(),
}
return out
@router.put("/strategy")
async def put_strategy_settings(
body: StrategySettingsBody,
_user: Annotated[str, Depends(require_user)],
) -> dict:
db = get_db()
data = body.model_dump(exclude_none=True)
for k, v in data.items():
if k in KEYS:
db.set_setting(k, str(v))
s = get_settings()
return {
"fee_rate": float(db.get_setting("fee_rate", str(s.fee_rate)) or s.fee_rate),
"exit_move_points": float(
@@ -71,5 +50,29 @@ async def put_strategy_settings(
"initial_equity": float(
db.get_setting("initial_equity", str(s.initial_equity)) or s.initial_equity
),
"perp_qty_eth": float(
db.get_setting("perp_qty_eth", str(s.perp_qty_eth)) or s.perp_qty_eth
),
"option_qty_eth": float(
db.get_setting("option_qty_eth", str(s.option_qty_eth)) or s.option_qty_eth
),
"ledger": Ledger(db).snapshot(),
}
@router.get("/strategy")
async def get_strategy_settings(_user: Annotated[str, Depends(require_user)]) -> dict:
return _read_settings()
@router.put("/strategy")
async def put_strategy_settings(
body: StrategySettingsBody,
_user: Annotated[str, Depends(require_user)],
) -> dict:
db = get_db()
data = body.model_dump(exclude_none=True)
for k, v in data.items():
if k in KEYS:
db.set_setting(k, str(v))
return _read_settings()