中控增加条件单委托
This commit is contained in:
@@ -43,7 +43,7 @@ HUB_BRIDGE_TOKEN = (os.getenv("HUB_BRIDGE_TOKEN") or os.getenv("CONTROL_TOKEN")
|
||||
_trust_raw = (os.getenv("HUB_TRUST_LAN", "true") or "").strip().lower()
|
||||
HUB_TRUST_LAN = _trust_raw not in ("0", "false", "no", "off")
|
||||
DIR = Path(__file__).resolve().parent
|
||||
HUB_BUILD = "20260524-open-orders"
|
||||
HUB_BUILD = "20260525-tpsl-ui"
|
||||
|
||||
|
||||
def _is_local(host: str | None) -> bool:
|
||||
@@ -401,6 +401,14 @@ class CancelSymbolOrdersBody(BaseModel):
|
||||
scope: str = "all"
|
||||
|
||||
|
||||
class PlaceTpslBody(BaseModel):
|
||||
symbol: str
|
||||
side: str
|
||||
stop_loss: float
|
||||
take_profit: float
|
||||
contracts: float | None = None
|
||||
|
||||
|
||||
@app.post("/api/orders/{exchange_id}/cancel")
|
||||
async def api_cancel_order(exchange_id: str, body: CancelOrderBody):
|
||||
ex = _find_exchange(exchange_id)
|
||||
@@ -486,6 +494,37 @@ async def api_close_position(exchange_id: str, body: ClosePositionBody):
|
||||
}
|
||||
|
||||
|
||||
@app.post("/api/orders/{exchange_id}/place-tpsl")
|
||||
async def api_place_tpsl(exchange_id: str, body: PlaceTpslBody):
|
||||
ex = _find_exchange(exchange_id)
|
||||
if not ex or not ex.get("enabled"):
|
||||
raise HTTPException(status_code=404, detail="账户未启用")
|
||||
url = f"{ex['agent_url'].rstrip('/')}/orders/place-tpsl"
|
||||
async with httpx.AsyncClient() as client:
|
||||
r = await client.post(
|
||||
url,
|
||||
headers=_agent_headers(),
|
||||
json={
|
||||
"symbol": body.symbol,
|
||||
"side": body.side,
|
||||
"stop_loss": body.stop_loss,
|
||||
"take_profit": body.take_profit,
|
||||
"contracts": body.contracts,
|
||||
},
|
||||
timeout=120.0,
|
||||
)
|
||||
try:
|
||||
payload = r.json()
|
||||
except Exception:
|
||||
payload = {"raw": (r.text or "")[:2000]}
|
||||
return {
|
||||
"exchange": ex,
|
||||
"status_code": r.status_code,
|
||||
"payload": payload,
|
||||
"ok": bool(isinstance(payload, dict) and payload.get("ok")),
|
||||
}
|
||||
|
||||
|
||||
@app.post("/api/close/{exchange_id}")
|
||||
async def api_close_exchange(exchange_id: str):
|
||||
ex = _find_exchange(exchange_id)
|
||||
|
||||
Reference in New Issue
Block a user