Files
trading_bot_v4/docs/bugs/FIXES_APPLIED.md
mindesbunister 4c36fa2bc3 docs: Major documentation reorganization + ENV variable reference
**Documentation Structure:**
- Created docs/ subdirectory organization (analysis/, architecture/, bugs/,
  cluster/, deployments/, roadmaps/, setup/, archived/)
- Moved 68 root markdown files to appropriate categories
- Root directory now clean (only README.md remains)
- Total: 83 markdown files now organized by purpose

**New Content:**
- Added comprehensive Environment Variable Reference to copilot-instructions.md
- 100+ ENV variables documented with types, defaults, purpose, notes
- Organized by category: Required (Drift/RPC/Pyth), Trading Config (quality/
  leverage/sizing), ATR System, Runner System, Risk Limits, Notifications, etc.
- Includes usage examples (correct vs wrong patterns)

**File Distribution:**
- docs/analysis/ - Performance analyses, blocked signals, profit projections
- docs/architecture/ - Adaptive leverage, ATR trailing, indicator tracking
- docs/bugs/ - CRITICAL_*.md, FIXES_*.md bug reports (7 files)
- docs/cluster/ - EPYC setup, distributed computing docs (3 files)
- docs/deployments/ - *_COMPLETE.md, DEPLOYMENT_*.md status (12 files)
- docs/roadmaps/ - All *ROADMAP*.md strategic planning files (7 files)
- docs/setup/ - TradingView guides, signal quality, n8n setup (8 files)
- docs/archived/2025_pre_nov/ - Obsolete verification checklist (1 file)

**Key Improvements:**
- ENV variable reference: Single source of truth for all configuration
- Common Pitfalls #68-71: Already complete, verified during audit
- Better findability: Category-based navigation vs 68 files in root
- Preserves history: All files git mv (rename), not copy/delete
- Zero broken functionality: Only documentation moved, no code changes

**Verification:**
- 83 markdown files now in docs/ subdirectories
- Root directory cleaned: 68 files → 0 files (except README.md)
- Git history preserved for all moved files
- Container running: trading-bot-v4 (no restart needed)

**Next Steps:**
- Create README.md files in each docs subdirectory
- Add navigation index
- Update main README.md with new structure
- Consolidate duplicate deployment docs
- Archive truly obsolete files (old SQL backups)

See: docs/analysis/CLEANUP_PLAN.md for complete reorganization strategy
2025-12-04 08:29:59 +01:00

4.7 KiB

Fixes Applied - Trading Bot v4

Summary of Changes

Fixed 3 critical bugs discovered in your trading bot:

  1. TP2 Runner Calculation Bug - Now correctly calculates TP2 as percentage of REMAINING position
  2. Race Condition Fix - Exit orders now placed BEFORE Position Manager starts monitoring
  3. ⚠️ TradingView Timeframe - Needs verification of alert format

Fix 1: TP2 Runner Position Bug

File: lib/drift/orders.ts

Problem:

// BEFORE (WRONG):
const tp1USD = (options.positionSizeUSD * options.tp1SizePercent) / 100  // 75% of $80 = $60
const tp2USD = (options.positionSizeUSD * options.tp2SizePercent) / 100  // 80% of $80 = $64 ❌
// Total: $124 (exceeds position!) → Drift closes 100%, no runner

Fixed:

// AFTER (CORRECT):
const tp1USD = (options.positionSizeUSD * options.tp1SizePercent) / 100       // 75% of $80 = $60
const remainingAfterTP1 = options.positionSizeUSD - tp1USD                    // $80 - $60 = $20
const tp2USD = (remainingAfterTP1 * options.tp2SizePercent) / 100            // 80% of $20 = $16 ✅
// Remaining: $20 - $16 = $4 (5% runner!) ✅

Result:

  • With TAKE_PROFIT_2_SIZE_PERCENT=80:
    • TP1 closes 75% ($60)
    • TP2 closes 80% of remaining ($16)
    • 5% runner remains ($4) for trailing stop!

Added logging to verify:

📊 Exit order sizes:
   TP1: 75% of $80.00 = $60.00
   Remaining after TP1: $20.00
   TP2: 80% of remaining = $16.00
   Runner (if any): $4.00

Fix 2: Race Condition - Orphaned SL Orders

File: app/api/trading/execute/route.ts

Problem:

Old Flow:
1. Open position
2. Add to Position Manager → starts monitoring immediately
3. Place exit orders (TP1, TP2, SL)

If TP hits fast (< 2-3 seconds):
- Position Manager detects "external closure"
- Tries to cancel orders (finds none yet)
- Orders finish placing AFTER position gone
- Result: Orphaned SL orders on Drift!

Fixed:

New Flow:
1. Open position
2. Place exit orders (TP1, TP2, SL) ← FIRST
3. Add to Position Manager → starts monitoring

Now:
- All orders exist before monitoring starts
- If TP hits fast, Position Manager can cancel remaining orders
- No orphaned orders!

Issue 3: TradingView Timeframe Filter

Status: Needs Your Action

The n8n workflow correctly filters for 15-minute timeframe:

{
  "conditions": {
    "string": [{
      "value1": "={{ $json.timeframe }}",
      "operation": "equals",
      "value2": "15"
    }]
  }
}

The timeframe is extracted from your TradingView alert with regex:

/\.P\s+(\d+)/    // Looks for ".P 15" or ".P 5" in message

Action Required:

Check your TradingView alert message format.

It should look like:

{{ticker}} {{strategy.order.action}} .P 15

Examples:

  • Correct: SOL buy .P 15 (will be accepted)
  • Wrong: SOL buy .P 5 (will be rejected)
  • ⚠️ Missing: SOL buy (defaults to 15, but not explicit)

To verify:

  1. Open your TradingView chart
  2. Go to Alerts
  3. Check the alert message format
  4. Ensure it includes ".P 15" for 15-minute timeframe

Testing the Fixes

Test 1: Runner Position

  1. Place a test trade (or wait for next signal)
  2. Watch position in Drift
  3. TP1 should hit → 75% closes
  4. TP2 should hit → 80% of remaining closes
  5. 5% runner should remain for trailing stop

Expected in Drift:

  • After TP1: 0.25 SOL remaining (from 1.0 SOL)
  • After TP2: 0.05 SOL remaining (runner)

Test 2: No Orphaned Orders

  1. Place test trade
  2. If TP hits quickly, check Drift "Orders" tab
  3. Should show: No open orders after position fully closes
  4. Previously: 2 SL orders remained after win

Test 3: Timeframe Filter

  1. Send 5-minute alert from TradingView (with ".P 5")
  2. Check n8n execution → Should be rejected by filter
  3. Send 15-minute alert (with ".P 15")
  4. Should be accepted and execute trade

Build & Deploy

# Build (in progress)
docker compose build trading-bot

# Restart
docker compose up -d --force-recreate trading-bot

# Verify
docker logs -f trading-bot-v4

Look for new log message:

📊 Exit order sizes:
   TP1: 75% of $XX.XX = $XX.XX
   Remaining after TP1: $XX.XX
   TP2: 80% of remaining = $XX.XX
   Runner (if any): $XX.XX

Summary

Issue Status Impact
TP2 Runner Calculation Fixed 5% runner will now remain as intended
Orphaned SL Orders Fixed Orders placed before monitoring starts
5min vs 15min Filter ⚠️ Verify Check TradingView alert includes ".P 15"

Next Steps:

  1. Deploy fixes (build running)
  2. Verify TradingView alert format
  3. Test with next trade signal
  4. Monitor for runner position and clean order cancellation