Files
managing-apps/TODO.md
2025-11-14 03:18:11 +07:00

9.6 KiB

TradingBox Unit Tests - Business Logic Issues Analysis

Test Results Summary

Total Tests: 162

  • Passed: 142 (TradingMetricsTests: 42/42, ProfitLossTests: 21/21 FIXED)
  • Failed: 20 (MoneyManagement: 8, SignalProcessing: 9, TraderAnalysis: 3)

Failed Test Categories & Potential Business Logic Issues

1. Volume Calculations (TradingMetricsTests) FIXED + ENHANCED

Originally Failed Tests:

  • GetTotalVolumeTraded_WithSinglePosition_CalculatesCorrectVolume
  • GetTotalVolumeTraded_WithMultiplePositions_SumsAllVolumes

Issue: Test expectations didn't match actual implementation behavior.

Business Logic Fix:

  • Modified GetTotalVolumeTraded() to use IsValidForMetrics() filter before calculating volume
  • Now correctly excludes New, Canceled, and Rejected positions from volume calculations
  • Only counts Filled (open), Finished (closed), and Flipped positions

Test Enhancements:

  • Added comprehensive Theory test for GetVolumeForPosition covering all position statuses
  • Improved GetTotalFees test with realistic GMX fee structure documentation
  • All 42 TradingMetricsTests now passing with comprehensive coverage

2. Fee Calculations (TradingMetricsTests) FIXED

Originally Failed Tests:

  • GetTotalFees_WithValidPositions_SumsAllFees
  • CalculateOpeningUiFees_WithDifferentSizes_CalculatesProportionally

Issue: Test expectations used incorrect UI fee rate.

Resolution:

  • Updated test expectations to match actual Constants.GMX.Config.UiFeeRate = 0.00075m (0.075%)
  • Fee calculations now work correctly with proper position setup
  • Tests expect proportional calculations: positionSize * 0.00075m

3. P&L Calculations (TradingMetricsTests) FIXED

Originally Failed Tests:

  • GetTotalRealizedPnL_WithValidPositions_SumsRealizedPnL
  • GetTotalNetPnL_WithValidPositions_SumsNetPnL

Issue: Test positions didn't have proper ProfitAndLoss objects.

Resolution:

  • Added ProfitAndLoss objects to test positions with Realized and Net properties
  • Used finished positions that meet IsValidForMetrics() criteria
  • P&L calculations now work correctly with proper position setup

Possible Business Logic Problem:

// ProfitAndLoss objects may not be properly initialized in test positions
// Missing: position.ProfitAndLoss = new ProfitAndLoss(orders, direction);

Impact: Core trading performance metrics are not working correctly.

4. Win Rate Calculations (TradingMetricsTests) FIXED

Originally Failed Tests:

  • GetWinRate_WithMixedStatuses_CalculatesOnlyForValidPositions

Issue: Win rate incorrectly included open positions with unrealized P&L.

Business Logic Fix:

  • Updated TradingBox.GetWinRate() to only consider PositionStatus.Finished positions
  • Win rate should only count closed positions, not open positions with unrealized P&L
  • Other metrics (P&L, fees, volume) correctly use IsValidForMetrics() to include both open and closed positions

Resolution:

  • Modified GetWinRate method: if (position.Status == PositionStatus.Finished) instead of if (position.IsValidForMetrics())
  • IsValidForMetrics() includes: Filled (open), Finished (closed), and Flipped positions
  • Win rate is special - only considers completed trades (Finished status)
  • Updated test to expect only closed positions in win rate calculation
  • Win rate: 1 win out of 2 closed positions = 50% (integer division)

Important Distinction:

  • General Metrics (P&L, fees, volume): Use IsValidForMetrics() to include open + closed positions
  • Win Rate: Use Status == Finished to include ONLY closed positions

Impact: Win rate is a key performance indicator for trading strategies and should reflect completed trades only.

5. Money Management Calculations (MoneyManagementTests)

Failed Tests:

  • GetBestMoneyManagement_WithSinglePosition_CalculatesOptimalSLTP
  • GetBestMoneyManagement_WithShortPosition_CalculatesCorrectSLTP
  • GetBestSltpForPosition_WithLongPosition_CalculatesCorrectPercentages
  • GetBestSltpForPosition_WithShortPosition_CalculatesCorrectPercentages
  • GetBestSltpForPosition_WithFlatCandles_ReturnsMinimalValues
  • GetBestSltpForPosition_WithNoCandlesAfterPosition_ReturnsZeros

Issue: SL/TP optimization calculations return incorrect percentage values.

Possible Business Logic Problem:

  • Candle data processing may not handle test scenarios correctly
  • Price movement calculations may be incorrect
  • Minimum/maximum price detection logic may have bugs

Impact: Risk management calculations are fundamental to trading strategy success.

6. Signal Processing Tests (SignalProcessingTests)

Failed Tests: 9 out of 20

  • GetSignal_WithNullScenario_ReturnsNull
  • GetSignal_WithEmptyCandles_ReturnsNull
  • GetSignal_WithLoopbackPeriod_LimitsCandleRange
  • GetSignal_WithPreCalculatedIndicators_UsesProvidedValues
  • ComputeSignals_WithContextSignalsBlocking_ReturnsNull
  • ComputeSignals_WithNoneConfidence_ReturnsNull
  • ComputeSignals_WithLowConfidence_ReturnsNull
  • ComputeSignals_WithUnanimousLongDirection_ReturnsLongSignal
  • CalculateAverageConfidence_WithVariousInputs_ReturnsExpectedResult

Issue: Tests assume specific signal processing behavior that doesn't match implementation. LightIndicator parameters not properly set.

Possible Business Logic Problem:

// LightIndicator constructor requires proper initialization in ScenarioHelpers.BuildIndicator()
// Tests expect null signals for low confidence, but implementation returns signals
// Confidence averaging: Medium + High = High (not Medium as expected)
// Signal generation occurs even when tests expect null - logic may be too permissive

Impact: Signal processing logic may not properly filter weak signals or handle confidence calculations correctly.

Business Logic Issues Identified

Critical Issues (High Priority) MOSTLY RESOLVED

  1. Volume Calculations: FIXED - All TradingMetrics volume calculations working correctly
  2. Fee Calculations: FIXED - All TradingMetrics fee calculations working correctly
  3. P&L Calculations: FIXED - All TradingMetrics P&L calculations working correctly
  4. Win Rate Calculations: FIXED - Win rate now correctly excludes open positions

High Priority - Next Focus

  1. Money Management Optimization: SL/TP calculations have incorrect logic (8 failing tests)
  2. Signal Processing Logic: Confidence filtering and signal generation may be too permissive (9 failing tests)
  3. Trader Analysis: Trader evaluation logic issues (3 failing tests)

Resolved Issues

  1. Profit/Loss Tests: FIXED (21/21 passing) - Win rate now correctly considers only Finished positions

Immediate Actions MOSTLY COMPLETED

  1. Volume Calculations: FIXED - All TradingMetrics volume calculations working correctly
  2. Fee Calculations: FIXED - All TradingMetrics fee calculations working correctly
  3. P&L Calculations: FIXED - All TradingMetrics P&L calculations working correctly
  4. Win Rate Logic: FIXED - Win rate now correctly excludes open positions

Next Priority Actions - Money Management Tests

  1. Debug Money Management Logic: Fix SL/TP optimization calculations (8 failing tests)
  2. Fix GetBestSltpForPosition(): Correct price movement calculations and candle processing
  3. Fix GetBestMoneyManagement(): Ensure proper averaging of SL/TP values
  4. Debug Candle Range Logic: Verify next position limiting works correctly

Investigation Steps for Money Management

  1. Debug GetBestSltpForPosition() - Check candle filtering logic with next position
  2. Debug Price Movement Calculations - Verify min/max price detection for SL/TP
  3. Debug Percentage Calculations - Ensure GetPercentageFromEntry() works correctly
  4. Debug Averaging Logic - Check how multiple positions are averaged

Test Updates Needed

  1. Update Fee Expectations: Align test expectations with actual UI fee rates
  2. Fix Position Setup: Ensure test positions have proper ProfitAndLoss objects
  3. Review Volume Expectations: Confirm whether single or double volume is correct
  4. Update Money Management Tests: Align with actual SL/TP calculation logic
  5. Fix Signal Processing Tests: Update expectations to match actual confidence filtering behavior
  6. Fix LightIndicator Test Setup: Ensure proper indicator parameter initialization

Risk Assessment

  • High Risk: Volume, Fee, P&L calculations are core trading metrics
  • Medium Risk: Win rate and signal processing affect strategy evaluation
  • Low Risk: Money management optimization affects risk control

Next Steps

  1. HIGH PRIORITY: Fix Money Management tests (8 failing) - SL/TP optimization is core trading logic
  2. Debug and fix Signal Processing tests (9 failing) - confidence filtering and signal generation
  3. Fix Trader Analysis tests (3 failing) - trader evaluation logic
  4. COMPLETED: ProfitLoss tests fixed - Win rate now correctly considers only Finished positions
  5. Add integration tests to verify end-to-end calculations
  6. Consider adding more comprehensive test scenarios

Current Status

  • TradingMetricsTests: 42/42 passing - comprehensive trading metrics coverage with all position statuses
  • ProfitLossTests: 21/21 passing - All P&L and win rate tests fixed
  • 🔄 MoneyManagementTests: Next priority - 8 failing tests need investigation
  • SignalProcessingTests: 9 failing tests - confidence filtering issues
  • TraderAnalysisTests: 3 failing tests - evaluation logic issues

Generated from unit test results analysis - Tests reveal potential business logic issues in TradingBox implementation