feat(kevin): reconcile Alpaca bracket auto-closes + order status
Bracket stop-loss/take-profit legs fill at Alpaca without passing through the executor, so those closes (and their P&L) were invisible locally. - broker: add get_order(nested) + list_orders to BaseBroker/AlpacaBroker (+ SimulatedBroker); BrokerOrder carries child legs - Trade gains broker_order_id (migration f6a7b8c9d0e1); executor stamps the entry order id - new api_gateway trade-reconcile loop: books a closing SELL + realized P&L when a bracket leg fills (idempotent on the leg order id), syncs PENDING->terminal status, logs drift; runs alongside portfolio_sync [ci skip] Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
parent
52b3c76482
commit
82dc622544
13 changed files with 1049 additions and 8 deletions
|
|
@ -13,6 +13,7 @@ from datetime import datetime, timezone
|
|||
from shared.broker.base import BaseBroker
|
||||
from shared.schemas.trading import (
|
||||
AccountInfo,
|
||||
BrokerOrder,
|
||||
OrderRequest,
|
||||
OrderResult,
|
||||
OrderSide,
|
||||
|
|
@ -197,6 +198,27 @@ class SimulatedBroker(BaseBroker):
|
|||
timestamp=datetime.now(tz=timezone.utc),
|
||||
)
|
||||
|
||||
async def get_order(
|
||||
self, order_id: str, *, nested: bool = True
|
||||
) -> BrokerOrder | None:
|
||||
"""Return a leg-less FILLED order — simulation has no bracket legs."""
|
||||
return BrokerOrder(
|
||||
order_id=order_id,
|
||||
ticker="",
|
||||
side=OrderSide.BUY,
|
||||
qty=0,
|
||||
filled_price=0.0,
|
||||
status=OrderStatus.FILLED,
|
||||
timestamp=datetime.now(tz=timezone.utc),
|
||||
legs=[],
|
||||
)
|
||||
|
||||
async def list_orders(
|
||||
self, *, status: str = "all", limit: int = 100
|
||||
) -> list[OrderResult]:
|
||||
"""No standing-order book in simulation — return nothing."""
|
||||
return []
|
||||
|
||||
# ------------------------------------------------------------------
|
||||
# Extra backtest-only methods
|
||||
# ------------------------------------------------------------------
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue