Lifecycle and event callbacks for action handlers.
Provides hooks for initialization, disposal, and event handling. All callbacks are optional and support both sync and async execution.
Use cases:
onInit: (actionName: string, strategyName: string, frameName: string, backtest: boolean) => void | Promise<void>
Called when action handler is initialized.
Use for:
onDispose: (actionName: string, strategyName: string, frameName: string, backtest: boolean) => void | Promise<void>
Called when action handler is disposed.
Use for:
onSignal: (event: IStrategyTickResult, actionName: string, strategyName: string, frameName: string, backtest: boolean) => void | Promise<void>
Called on signal events from all modes (live + backtest).
Triggered by: StrategyConnectionService via signalEmitter Frequency: Every tick/candle when strategy is evaluated
onSignalLive: (event: IStrategyTickResult, actionName: string, strategyName: string, frameName: string, backtest: boolean) => void | Promise<void>
Called on signal events from live trading only.
Triggered by: StrategyConnectionService via signalLiveEmitter Frequency: Every tick in live mode
onSignalBacktest: (event: IStrategyTickResult, actionName: string, strategyName: string, frameName: string, backtest: boolean) => void | Promise<void>
Called on signal events from backtest only.
Triggered by: StrategyConnectionService via signalBacktestEmitter Frequency: Every candle in backtest mode
onBreakevenAvailable: (event: BreakevenContract, actionName: string, strategyName: string, frameName: string, backtest: boolean) => void | Promise<void>
Called when breakeven is triggered (stop-loss moved to entry price).
Triggered by: BreakevenConnectionService via breakevenSubject Frequency: Once per signal when breakeven threshold is reached
onPartialProfitAvailable: (event: PartialProfitContract, actionName: string, strategyName: string, frameName: string, backtest: boolean) => void | Promise<void>
Called when partial profit level is reached (10%, 20%, 30%, etc).
Triggered by: PartialConnectionService via partialProfitSubject Frequency: Once per profit level per signal (deduplicated)
onPartialLossAvailable: (event: PartialLossContract, actionName: string, strategyName: string, frameName: string, backtest: boolean) => void | Promise<void>
Called when partial loss level is reached (-10%, -20%, -30%, etc).
Triggered by: PartialConnectionService via partialLossSubject Frequency: Once per loss level per signal (deduplicated)
onPingScheduled: (event: SchedulePingContract, actionName: string, strategyName: string, frameName: string, backtest: boolean) => void | Promise<void>
Called during scheduled signal monitoring (every minute while waiting for activation).
Triggered by: StrategyConnectionService via schedulePingSubject Frequency: Every minute while scheduled signal is waiting
onPingActive: (event: ActivePingContract, actionName: string, strategyName: string, frameName: string, backtest: boolean) => void | Promise<void>
Called during active pending signal monitoring (every minute while position is active).
Triggered by: StrategyConnectionService via activePingSubject Frequency: Every minute while pending signal is active
onRiskRejection: (event: RiskContract, actionName: string, strategyName: string, frameName: string, backtest: boolean) => void | Promise<void>
Called when signal is rejected by risk management.
Triggered by: RiskConnectionService via riskSubject Frequency: Only when signal fails risk validation (not emitted for allowed signals)
onSignalSync: (event: SignalSyncContract, actionName: string, strategyName: string, frameName: string, backtest: boolean) => void | Promise<void>
Called when framework attempts to open or close a position via limit order. Return false (or throw) to reject the operation — framework will retry on next tick.
NOTE: Unlike other callbacks, exceptions from this method are NOT swallowed. They propagate up to CREATE_SYNC_FN which catches them and returns false. Throw to reject the operation — framework will retry on next tick.