Signal closed notification. Emitted when a trading position is closed (TP/SL hit).
type: "signal.closed"
Discriminator for type-safe union
id: string
Unique notification identifier
timestamp: number
Unix timestamp in milliseconds when signal was closed (closeTimestamp)
backtest: boolean
Whether this notification is from backtest mode (true) or live mode (false)
symbol: string
Trading pair symbol (e.g., "BTCUSDT")
strategyName: string
Strategy name that generated this signal
exchangeName: string
Exchange name where signal was executed
signalId: string
Unique signal identifier (UUID v4)
position: "long" | "short"
Trade direction: "long" (buy) or "short" (sell)
priceOpen: number
Entry price for the position
priceClose: number
Exit price when position was closed
priceTakeProfit: number
Take profit target price
priceStopLoss: number
Stop loss exit price
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 at signal creation (unchanged by DCA averaging)
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.
pnlPercentage: number
Profit/loss as percentage (e.g., 1.5 for +1.5%, -2.3 for -2.3%)
pnl: IStrategyPnL
Final PNL at signal close (from data.pnl)
pnlPriceOpen: number
Entry price from PNL calculation (effective price adjusted with slippage and fees)
pnlPriceClose: number
Exit price from PNL calculation (adjusted with slippage and fees)
pnlCost: number
Absolute profit/loss in USD
pnlEntries: number
Total invested capital in USD
closeReason: string
Why signal closed (time_expired | take_profit | stop_loss | closed)
duration: number
Duration of position in minutes (from pendingAt to closeTimestamp)
note: string
Optional human-readable description of signal reason
scheduledAt: number
Signal creation timestamp in milliseconds (when signal was first created/scheduled)
pendingAt: number
Pending timestamp in milliseconds (when position became pending/active at priceOpen)
createdAt: number
Unix timestamp in milliseconds when the tick result was created (from candle timestamp in backtest or execution context when in live)