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,
|
user_id: str | None = None,
|
||||||
run_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:
|
if user_id is not None:
|
||||||
self.user_id = user_id
|
self.user_id = user_id
|
||||||
@ -402,6 +402,7 @@ class LiveZerodhaBroker(Broker):
|
|||||||
session = self._session()
|
session = self._session()
|
||||||
tradingsymbol, exchange = self._normalize_symbol(symbol)
|
tradingsymbol, exchange = self._normalize_symbol(symbol)
|
||||||
tag = self._make_tag(logical_time, symbol, side)
|
tag = self._make_tag(logical_time, symbol, side)
|
||||||
|
rejected_timestamp = _format_utc_ts(logical_time or datetime.utcnow().replace(tzinfo=timezone.utc))
|
||||||
|
|
||||||
try:
|
try:
|
||||||
placed = place_order(
|
placed = place_order(
|
||||||
@ -420,6 +421,31 @@ class LiveZerodhaBroker(Broker):
|
|||||||
)
|
)
|
||||||
except KiteTokenError as exc:
|
except KiteTokenError as exc:
|
||||||
self._raise_auth_expired(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")
|
order_id = placed.get("order_id")
|
||||||
if not order_id:
|
if not order_id:
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user