Update AI instructions with latest fixes

Added sections:
- Recent Critical Fixes (2024-11-10): Runner system + anti-chop filter V2
- JavaScript || vs ?? operator gotcha (#21)
- Range-bound chop detection details (#22)
- Updated anti-chop filter description with backtest results
This commit is contained in:
mindesbunister
2025-11-10 15:43:48 +01:00
parent 988fdb9ea4
commit 2e47731e8e

View File

@@ -30,6 +30,31 @@
**Manual Trading via Telegram:** Send plain-text messages like `long sol`, `short eth`, `long btc` to open positions instantly (bypasses n8n, calls `/api/trading/execute` directly with preset healthy metrics).
## Recent Critical Fixes (2024-11-10)
### Runner System - Three Cascading Bugs Fixed
The TP2-as-runner feature was broken by three separate bugs:
1. **P&L Calculation Bug (65x inflation)** - `lib/drift/orders.ts`, `lib/trading/position-manager.ts`
- Calculated P&L on notional ($2,100) instead of collateral ($210)
- Database showed +$1,345, reality was -$806 loss
- Fix: `collateralUSD = notional / leverage`, calculate P&L on collateral
2. **Post-TP1 Logic Bug** - `lib/trading/position-manager.ts` lines 1010-1030
- Placed TP order at TP2 price after TP1 hit (closed position instead of trailing)
- Fix: Check `if (config.takeProfit2SizePercent === 0)` to skip TP orders
3. **JavaScript || Operator Bug** - `app/api/trading/execute/route.ts`, `test/route.ts`
- `config.takeProfit2SizePercent || 100` treated 0 as falsy → returned 100
- Fix: Use `??` (nullish coalescing) instead of `||` for numeric defaults
### Anti-Chop Filter V2 - Range-Bound Detection
- **Problem:** Flip-flop trades in sideways markets (stopped out in 8-24 seconds)
- **Fix:** -25 points when price position <40% AND ADX <25 (both conditions)
- **Location:** `lib/trading/signal-quality.ts` lines 145-165
- **Impact:** Win rate 43.8% → 55.6%, profit per trade +86%
- **Backtest:** Would have blocked all 3 flip-flop trades from today
## Critical Components
### 1. Signal Quality Scoring (`lib/trading/signal-quality.ts`)
@@ -51,7 +76,10 @@ scoreSignalQuality({
**Price position penalties (all timeframes):**
- Long at 90-95%+ range: -15 to -30 points (chasing highs)
- Short at <5-10% range: -15 to -30 points (chasing lows)
- Prevents flip-flop losses from entering range extremes
- **ANTI-CHOP (v2024-11-10):** Price position <40% + ADX <25 = -25 points (RANGE-BOUND CHOP)
- Prevents flip-flop losses from entering range extremes
- Targets sideways markets where price is low in range but trend is weak
- Backtest: 43.8% → 55.6% win rate, 86% higher profit per trade
**Key behaviors:**
- Returns score 0-100 and detailed breakdown object
@@ -436,6 +464,28 @@ trade.realizedPnL += actualRealizedPnL // NOT: result.realizedPnL from SDK
- Applies to all aggregations: SUM(), AVG(), ROUND() - all return Decimal types
- Example: `/api/analytics/version-comparison` converts all numeric fields
21. **JavaScript || vs ?? operators CRITICAL:** When setting default values for numeric config, ALWAYS use `??` (nullish coalescing):
```typescript
// WRONG - treats 0 as falsy:
tp2SizePercent: config.takeProfit2SizePercent || 100 // 0 becomes 100!
// CORRECT - only null/undefined are nullish:
tp2SizePercent: config.takeProfit2SizePercent ?? 100 // 0 stays 0
```
- `||` treats `0`, `false`, `""`, `null`, `undefined` as falsy
- `??` only treats `null` and `undefined` as nullish
- Critical for runner system: `TAKE_PROFIT_2_SIZE_PERCENT=0` must be respected
- This bug caused TP2 orders to be placed at 100% despite config setting 0
- Applies to ALL numeric config values where 0 is valid (TP sizes, leverage, thresholds)
22. **Range-bound chop detection:** The anti-chop filter V2 (implemented 2024-11-10) prevents flip-flop losses:
- Detection: Price position <40% of range + ADX <25 = weak range-bound market
- Penalty: -25 points to signal quality score
- Why: Trades entering early in range with weak trend get whipsawed in seconds
- Evidence: Backtest showed 5 flip-flop trades (8-24 second holds) all had this pattern
- Result: Win rate improved from 43.8% to 55.6%, profit per trade +86%
- Implementation: `lib/trading/signal-quality.ts` checks both conditions before price position scoring
## File Conventions
- **API routes:** `app/api/[feature]/[action]/route.ts` (Next.js 15 App Router)