Order reject notification (TERMINAL close rejection → force-close).
Emitted ONLY when the close gate resolved into the "rejected" verdict — the broker
adapter threw OrderRejectedError. The engine force-closes its state with the
original closeReason; the real exchange position is the adapter's/operator's to
reconcile. Transient close failures never fire here. Live-only.
Source: orderRejectSubject (OrderRejectContract).
type: "order_reject.close"
Discriminator for type-safe union
id: string
Unique notification identifier
timestamp: number
Unix timestamp in milliseconds when the gate rejected
backtest: boolean
Always false: rejections are live-only (kept for cross-channel filter uniformity)
symbol: string
Trading pair symbol (e.g., "BTCUSDT")
strategyName: string
Strategy name that generated this signal
exchangeName: string
Exchange name that refused the order
signalId: string
Unique signal identifier (UUID v4) — equals the adapter's clientOrderId
orderType: "schedule" | "active"
Which order was rejected (from OrderRejectContract.type). Closes always go through the position order, so this is always "active".
attempt: number
Number of consecutive failed gate attempts that preceded this terminal one (0 = rejected on the first attempt)
message: string
Human-readable rejection reason (the OrderRejectedError message from the broker adapter)
currentPrice: number
Market price at the moment of rejection (VWAP)
pnl: IStrategyPnL
PNL snapshot of the position at the moment of this event
peakProfit: IStrategyPnL
Peak profit achieved during the life of this position up to the moment this public signal was created
maxDrawdown: IStrategyPnL
Maximum drawdown experienced during the life of this position up to the moment this public signal was created
pnlPercentage: number
Profit/loss as percentage
pnlPriceOpen: number
Entry price from PNL calculation
pnlPriceClose: number
Exit price from PNL calculation
pnlCost: number
Absolute profit/loss in USD
pnlEntries: number
Total invested capital in USD
peakProfitPriceOpen: number
Peak price reached in profit direction during the life of this position
peakProfitPriceClose: number
Exit price for PNL calculation at the moment of peak profit
peakProfitCost: number
Absolute profit/loss in USD at the moment the position reached its peak profit during the life of this position
peakProfitPercentage: number
Profit/loss as percentage at the moment the position reached its peak profit during the life of this position
peakProfitEntries: number
Number of entries executed at the moment the position reached its peak profit during the life of this position
maxDrawdownPriceOpen: number
Maximum drawdown price reached in loss direction during the life of this position
maxDrawdownPriceClose: number
Exit price for PNL calculation at the moment of max drawdown
maxDrawdownCost: number
Absolute profit/loss in USD at the moment the position reached its maximum drawdown during the life of this position
maxDrawdownPercentage: number
Profit/loss as percentage at the moment the position reached its maximum drawdown during the life of this position
maxDrawdownEntries: number
Number of entries executed at the moment the position reached its maximum drawdown during the life of this position
position: "long" | "short"
Trade direction: "long" (buy) or "short" (sell)
priceOpen: number
Effective entry price at close
priceTakeProfit: number
Effective take profit price at close
priceStopLoss: number
Effective stop loss price at close
originalPriceTakeProfit: number
Original take profit price before any trailing adjustments
originalPriceStopLoss: number
Original stop loss price before any trailing adjustments
originalPriceOpen: number
Original entry price before any DCA averaging
cost: number
Cost of the initial position entry in USD (from signal.cost)
totalEntries: number
Total number of DCA entries (_entry.length). 1 = no averaging.
totalPartials: number
Total number of partial closes executed (_partial.length). 0 = no partial closes done.
scheduledAt: number
Signal creation timestamp in milliseconds
pendingAt: number
Position activation timestamp in milliseconds
closeReason: string
The closeReason the engine force-closes with (take_profit | stop_loss | time_expired | closed)
note: string
Optional human-readable description of signal reason
createdAt: number
Unix timestamp in milliseconds when the notification was created