Phase 1: Add MAE/MFE tracking and analytics schema

- Added 20+ analytics fields to Trade model (MAE/MFE, fill tracking, timing, market context, slippage)
- Implemented real-time MAE/MFE tracking in Position Manager (updates every 5s)
- Enhanced database schema with comprehensive trade analytics
- Updated all API endpoints to initialize MAE/MFE fields
- Modified updateTradeState() to persist MAE/MFE in configSnapshot

Database changes:
- maxFavorableExcursion/maxAdverseExcursion track best/worst profit %
- maxFavorablePrice/maxAdversePrice track exact price levels
- Fill tracking: tp1Filled, tp2Filled, softSlFilled, hardSlFilled
- Timing metrics: timeToTp1, timeToTp2, timeToSl
- Market context: atrAtEntry, adxAtEntry, volumeAtEntry, fundingRateAtEntry, basisAtEntry
- Slippage tracking: expectedEntryPrice, entrySlippagePct, expectedExitPrice, exitSlippagePct

Position Manager changes:
- Track MAE/MFE on every price check (2s interval)
- Throttled database updates (5s interval) via updateTradeMetrics()
- Persist MAE/MFE in trade state snapshots for recovery

Next: Phase 2 (market context capture) or Phase 3 (analytics API)
This commit is contained in:
mindesbunister
2025-10-29 20:34:03 +01:00
parent d4d2883af6
commit 65e6a8efed
7 changed files with 136 additions and 0 deletions

View File

@@ -56,6 +56,10 @@ export interface UpdateTradeStateParams {
unrealizedPnL: number
peakPnL: number
lastPrice: number
maxFavorableExcursion?: number
maxAdverseExcursion?: number
maxFavorablePrice?: number
maxAdversePrice?: number
}
export interface UpdateTradeExitParams {
@@ -184,6 +188,10 @@ export async function updateTradeState(params: UpdateTradeStateParams) {
unrealizedPnL: params.unrealizedPnL,
peakPnL: params.peakPnL,
lastPrice: params.lastPrice,
maxFavorableExcursion: params.maxFavorableExcursion,
maxAdverseExcursion: params.maxAdverseExcursion,
maxFavorablePrice: params.maxFavorablePrice,
maxAdversePrice: params.maxAdversePrice,
lastUpdate: new Date().toISOString(),
}
}