Compare commits

...

3 Commits

Author SHA1 Message Date
mindesbunister
6b7082eef3 docs: add Common Pitfall #21 for CreateTradeParams interface sync 2025-11-12 10:02:05 +01:00
mindesbunister
7f9dcc00e2 feat: add indicatorVersion to CreateTradeParams interface and createTrade function 2025-11-12 08:29:40 +01:00
mindesbunister
2c6295367c feat: add indicatorVersion tracking to backend
Added indicatorVersion field to track which TradingView indicator version
generated each signal (v5, v6, etc.)

Changes:
- Updated ExecuteTradeRequest interface to include indicatorVersion field
- Added indicatorVersion to both createTrade() calls with default 'v5' fallback
- Field already exists in Prisma schema (indicatorVersion String?)
- Defaults to 'v5' for backward compatibility with old alerts

This enables comparison of indicator performance:
- v5: Original Money Line indicator
- v6: Improved version with 100-bar price position filter

Works alongside existing signalQualityVersion (v4) which tracks backend
scoring algorithm changes. Two separate version fields:
1. indicatorVersion = TradingView Pine Script version (v5/v6)
2. signalQualityVersion = Backend scoring logic version (v4)

Frontend can now filter/compare trades by indicator version in analytics.
2025-11-12 08:22:06 +01:00
3 changed files with 12 additions and 0 deletions

View File

@@ -674,6 +674,13 @@ trade.realizedPnL += actualRealizedPnL // NOT: result.realizedPnL from SDK
- **ActiveTrade interface:** Must include `atrAtEntry?: number` field for calculation
- See `ATR_TRAILING_STOP_FIX.md` for full details and database analysis
21. **CreateTradeParams interface sync:** When adding new database fields to Trade model, MUST update `CreateTradeParams` interface in `lib/database/trades.ts`:
- Interface defines what parameters `createTrade()` accepts
- Must add new field to interface (e.g., `indicatorVersion?: string`)
- Must add field to Prisma create data object in `createTrade()` function
- TypeScript build will fail if endpoint passes field not in interface
- Example: indicatorVersion tracking required 3-file update (execute route.ts, CreateTradeParams interface, createTrade function)
## File Conventions
- **API routes:** `app/api/[feature]/[action]/route.ts` (Next.js 15 App Router)

View File

@@ -27,6 +27,7 @@ export interface ExecuteTradeRequest {
rsi?: number
volumeRatio?: number
pricePosition?: number
indicatorVersion?: string // Pine Script version (v5, v6, etc.)
}
export interface ExecuteTradeResponse {
@@ -357,6 +358,7 @@ export async function POST(request: NextRequest): Promise<NextResponse<ExecuteTr
volumeAtEntry: body.volumeRatio,
pricePositionAtEntry: body.pricePosition,
signalQualityScore: qualityResult.score,
indicatorVersion: body.indicatorVersion || 'v5', // Default to v5 for backward compatibility
// Phantom-specific fields
status: 'phantom',
isPhantom: true,
@@ -576,6 +578,7 @@ export async function POST(request: NextRequest): Promise<NextResponse<ExecuteTr
volumeAtEntry: body.volumeRatio,
pricePositionAtEntry: body.pricePosition,
signalQualityScore: qualityResult.score,
indicatorVersion: body.indicatorVersion || 'v5', // Default to v5 for backward compatibility
})
console.log(`💾 Trade saved with quality score: ${qualityResult.score}/100`)

View File

@@ -52,6 +52,7 @@ export interface CreateTradeParams {
volumeAtEntry?: number
pricePositionAtEntry?: number
signalQualityScore?: number
indicatorVersion?: string // TradingView Pine Script version (v5, v6, etc.)
// Phantom trade fields
status?: string
isPhantom?: boolean
@@ -143,6 +144,7 @@ export async function createTrade(params: CreateTradeParams) {
volumeAtEntry: params.volumeAtEntry,
pricePositionAtEntry: params.pricePositionAtEntry,
signalQualityScore: params.signalQualityScore,
indicatorVersion: params.indicatorVersion,
// Phantom trade fields
isPhantom: params.isPhantom || false,
expectedSizeUSD: params.expectedSizeUSD,