Handle Zerodha API order rejections gracefully
This commit is contained in:
parent
102f145553
commit
6147a2e3e5
@ -373,7 +373,7 @@ class LiveZerodhaBroker(Broker):
|
||||
user_id: str | None = None,
|
||||
run_id: str | None = None,
|
||||
):
|
||||
from app.services.zerodha_service import KiteTokenError, place_order
|
||||
from app.services.zerodha_service import KiteApiError, KiteTokenError, place_order
|
||||
|
||||
if user_id is not None:
|
||||
self.user_id = user_id
|
||||
@ -402,6 +402,7 @@ class LiveZerodhaBroker(Broker):
|
||||
session = self._session()
|
||||
tradingsymbol, exchange = self._normalize_symbol(symbol)
|
||||
tag = self._make_tag(logical_time, symbol, side)
|
||||
rejected_timestamp = _format_utc_ts(logical_time or datetime.utcnow().replace(tzinfo=timezone.utc))
|
||||
|
||||
try:
|
||||
placed = place_order(
|
||||
@ -420,6 +421,31 @@ class LiveZerodhaBroker(Broker):
|
||||
)
|
||||
except KiteTokenError as exc:
|
||||
self._raise_auth_expired(exc)
|
||||
except KiteApiError as exc:
|
||||
return {
|
||||
"id": _deterministic_id(
|
||||
"live_rej",
|
||||
[
|
||||
symbol,
|
||||
side,
|
||||
_stable_num(quantity),
|
||||
_stable_num(requested_price or 0.0),
|
||||
getattr(exc, "error_type", "kite_error"),
|
||||
],
|
||||
),
|
||||
"symbol": symbol,
|
||||
"side": side,
|
||||
"qty": qty,
|
||||
"requested_qty": qty,
|
||||
"filled_qty": 0,
|
||||
"price": float(requested_price or 0.0),
|
||||
"requested_price": float(requested_price or 0.0),
|
||||
"average_price": 0.0,
|
||||
"status": "REJECTED",
|
||||
"timestamp": rejected_timestamp,
|
||||
"status_message": getattr(exc, "message", str(exc)),
|
||||
"error_type": getattr(exc, "error_type", None),
|
||||
}
|
||||
|
||||
order_id = placed.get("order_id")
|
||||
if not order_id:
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user