Files
trading_bot_v4/docs/bugs/CRITICAL_ISSUES_FOUND.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

109 lines
2.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Trading Bot v4 - Critical Issues Found & Fixes
## Issue Summary
Three critical issues discovered:
1. **5-minute chart triggered instead of 15-minute** - TradingView alert format issue
2. **SL orders not cancelled after winning trade** - Race condition + order calculation bug
3. **No runner position (20% should remain)** - TP2 size calculation bug
---
## Issue 1: Wrong Timeframe Triggered
### Problem
- Trade executed on 5-minute chart signal
- n8n workflow has correct filter for "15" timeframe
- Filter checks: `timeframe === "15"`
### Root Cause
- n8n extracts timeframe with regex: `/\.P\s+(\d+)/`
- Looks for ".P 5" or ".P 15" in TradingView message
- Defaults to '15' if no match found
### Solution
**Check your TradingView alert message format:**
Your alert should include the timeframe like this:
```
SOL buy .P 15
```
The ".P 15" tells n8n it's a 15-minute chart. If you're sending:
```
SOL buy .P 5
```
Then n8n will reject it (correctly filtering out 5-minute signals).
**Verify n8n is receiving correct format by checking n8n execution logs.**
---
## Issue 2: SL Orders Not Cancelled
### Problem
- After winning trade, 2 SL orders remain on Drift ($198.39 and $195.77)
- Bot detected "position closed externally" but found "no orders to cancel"
### Root Cause
**Race Condition in `/api/trading/execute`:**
Current order of operations:
1. Open position ✅
2. Add to Position Manager (starts monitoring immediately) ⚠️
3. Place exit orders (TP1, TP2, SL) ⏰
If TP hits very fast (< 2-3 seconds):
- Position Manager detects "external closure" while orders are still being placed
- Tries to cancel orders that don't exist yet
- Orders finish placing AFTER position is gone → orphaned orders
### Solution
**Reorder operations: Place exit orders BEFORE starting monitoring**
---
## Issue 3: No Runner Position
### Problem
- Config: `TAKE_PROFIT_2_SIZE_PERCENT=80` (should leave 20% runner)
- Expected: TP1 closes 75% → TP2 closes 80% of remaining → 5% runner remains
- Actual: Position 100% closed, no runner
### Root Cause
**BUG in `/home/icke/traderv4/lib/drift/orders.ts` lines 232-233:**
```typescript
const tp1USD = (options.positionSizeUSD * options.tp1SizePercent) / 100
const tp2USD = (options.positionSizeUSD * options.tp2SizePercent) / 100
```
Both TP1 and TP2 are calculated as **percentages of ORIGINAL position**, not remaining!
**With your settings (TP1=75%, TP2=80%, position=$80):**
- TP1: 75% × $80 = $60 ✅
- TP2: 80% × $80 = $64 ❌ (should be 80% × $20 remaining = $16)
- Total: $60 + $64 = $124 (exceeds position size!)
Drift caps at 100%, so entire position closes.
### Solution
**Fix TP2 calculation to use remaining size after TP1**
---
## Recommended Fixes
### Fix 1: TradingView Alert Format
Update your TradingView alert to include ".P 15":
```
{{ticker}} {{strategy.order.action}} .P 15
```
### Fix 2 & 3: Code Changes
See next files for implementation...