feat: Complete pyramiding/position stacking implementation (ALL 7 phases)

Phase 1: Configuration
- Added pyramiding config to trading.ts interface and defaults
- Added 6 ENV variables: ENABLE_PYRAMIDING, BASE_LEVERAGE, STACK_LEVERAGE,
  MAX_LEVERAGE_TOTAL, MAX_PYRAMID_LEVELS, STACKING_WINDOW_MINUTES

Phase 2: Database Schema
- Added 5 Trade fields: pyramidLevel, parentTradeId, stackedAt,
  totalLeverageAtEntry, isStackedPosition
- Added index on parentTradeId for pyramid group queries

Phase 3: Execute Endpoint
- Added findExistingPyramidBase() - finds active base trade within window
- Added canAddPyramidLevel() - validates pyramid conditions
- Stores pyramid metadata on new trades

Phase 4: Position Manager Core
- Added pyramidGroups Map for trade ID grouping
- Added addToPyramidGroup() - groups stacked trades by parent
- Added closeAllPyramidLevels() - unified exit for all levels
- Added getTotalPyramidLeverage() - calculates combined leverage
- All exit triggers now close entire pyramid group

Phase 5: Telegram Notifications
- Added sendPyramidStackNotification() - notifies on stack entry
- Added sendPyramidCloseNotification() - notifies on unified exit

Phase 6: Testing (25 tests, ALL PASSING)
- Pyramid Detection: 5 tests
- Pyramid Group Tracking: 4 tests
- Unified Exit: 4 tests
- Leverage Calculation: 4 tests
- Notification Context: 2 tests
- Edge Cases: 6 tests

Phase 7: Documentation
- Updated .github/copilot-instructions.md with full implementation details
- Updated docs/PYRAMIDING_IMPLEMENTATION_PLAN.md status to COMPLETE

Parameters: 4h window, 7x base/stack leverage, 14x max total, 2 max levels
Data-driven: 100% win rate for signals ≤72 bars apart in backtesting
This commit is contained in:
mindesbunister
2026-01-09 13:53:05 +01:00
parent b2ff3026c6
commit 96d1667ae6
17 changed files with 2384 additions and 56 deletions

25
.env
View File

@@ -168,6 +168,31 @@ MAX_DAILY_DRAWDOWN=-1000
# Maximum number of trades allowed per hour (prevents overtrading)
MAX_TRADES_PER_HOUR=20
# ================================
# PYRAMIDING / POSITION STACKING
# ================================
# Stack positions when confirmation signals arrive within time window
# Data-driven: Signals ≤72 bars (6h) apart have 100% win rate
# Enable pyramiding feature
ENABLE_PYRAMIDING=true
# Leverage for first/base entry (e.g., 7x)
BASE_LEVERAGE=7
# Leverage for additional stack entries (e.g., 7x)
STACK_LEVERAGE=7
# Maximum combined leverage across all pyramid levels (e.g., 14x)
MAX_LEVERAGE_TOTAL=14
# Maximum pyramid levels (e.g., 2 = base + 1 stack)
MAX_PYRAMID_LEVELS=2
# Time window for stacking in minutes (e.g., 240 = 4 hours)
# Conservative setting vs 6h (360min) optimal from backtest
STACKING_WINDOW_MINUTES=240
# Minimum time between trades in minutes (cooldown period)
# Example: 10 = 10 minutes between trades
MIN_TIME_BETWEEN_TRADES=1