diff --git a/lib/database/trades.ts b/lib/database/trades.ts index 8798869..2ef5416 100644 --- a/lib/database/trades.ts +++ b/lib/database/trades.ts @@ -77,6 +77,11 @@ export interface UpdateTradeExitParams { holdTimeSeconds: number maxDrawdown?: number maxGain?: number + // MAE/MFE final values + maxFavorableExcursion?: number + maxAdverseExcursion?: number + maxFavorablePrice?: number + maxAdversePrice?: number } export async function createTrade(params: CreateTradeParams) { @@ -165,6 +170,11 @@ export async function updateTradeExit(params: UpdateTradeExitParams) { holdTimeSeconds: params.holdTimeSeconds, maxDrawdown: params.maxDrawdown, maxGain: params.maxGain, + // Save final MAE/MFE values + maxFavorableExcursion: params.maxFavorableExcursion, + maxAdverseExcursion: params.maxAdverseExcursion, + maxFavorablePrice: params.maxFavorablePrice, + maxAdversePrice: params.maxAdversePrice, status: 'closed', }, }) diff --git a/lib/trading/position-manager.ts b/lib/trading/position-manager.ts index 1c72c6d..a78f1c0 100644 --- a/lib/trading/position-manager.ts +++ b/lib/trading/position-manager.ts @@ -348,8 +348,13 @@ export class PositionManager { holdTimeSeconds, maxDrawdown: 0, maxGain: trade.peakPnL, + // Save final MAE/MFE values + maxFavorableExcursion: trade.maxFavorableExcursion, + maxAdverseExcursion: trade.maxAdverseExcursion, + maxFavorablePrice: trade.maxFavorablePrice, + maxAdversePrice: trade.maxAdversePrice, }) - console.log(`💾 External closure recorded: ${exitReason} at $${currentPrice} | P&L: $${realizedPnL.toFixed(2)}`) + console.log(`💾 External closure recorded: ${exitReason} at $${currentPrice} | P&L: $${realizedPnL.toFixed(2)} | MFE: ${trade.maxFavorableExcursion.toFixed(2)}% | MAE: ${trade.maxAdverseExcursion.toFixed(2)}%`) } catch (dbError) { console.error('❌ Failed to save external closure:', dbError) } @@ -616,8 +621,13 @@ export class PositionManager { holdTimeSeconds, maxDrawdown: 0, // TODO: Track this maxGain: trade.peakPnL, + // Save final MAE/MFE values + maxFavorableExcursion: trade.maxFavorableExcursion, + maxAdverseExcursion: trade.maxAdverseExcursion, + maxFavorablePrice: trade.maxFavorablePrice, + maxAdversePrice: trade.maxAdversePrice, }) - console.log('💾 Trade saved to database') + console.log('💾 Trade saved to database with MAE: ' + trade.maxAdverseExcursion.toFixed(2) + '% | MFE: ' + trade.maxFavorableExcursion.toFixed(2) + '%') } catch (dbError) { console.error('❌ Failed to save trade exit to database:', dbError) // Don't fail the close if database fails