live/deribit: position_usd legge il segno da direction, non dal solo size (#17)
Il gateway manda size/size_currency in assoluto e il segno a parte in direction: letta com'era, uno short risultava un long e close()/ensure_disaster_sl decidevano lato ordine e prezzo dello stop dal segno sbagliato. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
+13
-2
@@ -236,11 +236,22 @@ class DeribitRead:
|
||||
return out.get("positions", []) if isinstance(out, dict) else []
|
||||
|
||||
def position_usd(self, instrument: str) -> float:
|
||||
"""Size netta (USD notional, segno = direzione) della posizione su `instrument`. 0 se flat."""
|
||||
"""Size netta (USD notional, segno = direzione) della posizione su `instrument`. 0 se flat.
|
||||
|
||||
⚠️ Il gateway manda `size`/`size_currency` in ASSOLUTO e il segno a parte in `direction`
|
||||
(#17): letta com'era, uno short risultava un long, e close()/ensure_disaster_sl decidevano
|
||||
lato ordine e prezzo dello stop dal segno sbagliato. `direction` assente o `"zero"` -> ci si
|
||||
fida di `size` cosi' com'e' (compatibile con un gateway che un giorno mandasse gia' il segno)."""
|
||||
cur = _CONTRACT[instrument]["settle"]
|
||||
for p in self.positions(cur):
|
||||
if p.get("instrument_name") == instrument or p.get("instrument") == instrument:
|
||||
return float(p.get("size") or p.get("size_currency") or 0.0)
|
||||
s = float(p.get("size") or p.get("size_currency") or 0.0)
|
||||
direction = str(p.get("direction") or "").lower()
|
||||
if direction in ("sell", "short"):
|
||||
return -abs(s)
|
||||
if direction in ("buy", "long"):
|
||||
return abs(s)
|
||||
return s
|
||||
return 0.0
|
||||
|
||||
def trade_history(self, instrument: str, limit: int = 20) -> list[dict]:
|
||||
|
||||
Reference in New Issue
Block a user