Files
TR_Agent/DOCUMENTAZIONE_AGENTI.md
T

9.7 KiB

Multi-Agent Trading System - Interaction and Market Logic Documentation

Agent Interaction Flow

Overview

The multi-agent system operates through a structured interaction flow where each agent contributes to the final trading decision. This flow is divided into three main phases:

  1. Analysis Phase: Each agent analyzes market data and produces individual signals
  2. Interaction Phase: Agents communicate and combine their signals
  3. Orchestration Phase: The orchestrator makes the final trading decision

Detailed Interaction Flow

Phase 1: Analysis

Each agent independently analyzes the market data during the Analyze() method call:

  1. Hurst Agent (RegimeDetector):

    • Calculates Hurst exponent using DFA/R/S analysis
    • Updates SHARED_regimeH and SHARED_regimeZ
    • Period dynamically adjusted based on data length
  2. ADX Agent (RegimeADX):

    • Calculates ADX using native MT5 function
    • Normalizes ADX to z-score
    • Updates SHARED_adxZ and SHARED_adxRaw
  3. MA Agent (MAAgent):

    • Calculates price-to-MA ratio
    • Computes slope of MA
    • Combines signals using variance weighting
    • Updates lastZScore (local, not shared)
  4. Momentum Agent (MomentumAgent):

    • Calculates momentum and acceleration
    • Computes z-scores for both
    • Combines signals using variance weighting
    • Updates lastZScore (local, not shared)
  5. Consensus Agent (RegimeConsensus):

    • Called by orchestrator during Interact() phase
    • Combines Hurst and ADX signals
    • Calculates agreement between agents
    • Updates SHARED_regimeConsensus, SHARED_regimeAgreement
    • Detects trading patterns
    • Updates SHARED_patternCode, SHARED_patternName
  6. Pattern Hunter Agent (PatternHunter):

    • Called by orchestrator during Interact() phase
    • Analyzes historical patterns
    • Updates lastZScore (local, not shared)

Phase 2: Orchestration

The orchestrator combines agent signals using a sophisticated softmax gating mechanism:

  1. Signal Collection:

    • Collects z-scores from all agents
    • Filters out disabled agents
  2. Softmax Gating:

    • Calculates mean and variance of agent z-scores
    • Temperature parameter: temp = √(zVar) / √(agentCount)
    • Higher variance = higher temperature = more mixing
    • Lower variance = lower temperature = more selective
  3. Combined Signal:

    • Applies softmax to get weighted agent contributions
    • Applies tanh to normalize to [-1, 1]
    • Updates combinedZ and combinedZStats

Phase 3: Market Decision

  1. Entry Signal:

    • Combined z-score compared to minActionableZ
    • minActionableZ = combinedZStats.Std() (empirical)
    • Fallback: 0.5 (when stats not ready)
  2. Position Sizing:

    • Base lot: AdaptiveBaseLot()
    • Adjusted by entry z-score magnitude
    • Capped by broker limits
  3. Risk Management:

    • SL: AdaptiveSL() = returnStats.Std()
    • TP: AdaptiveTP() = AdaptiveSL() * RR ratio
    • RR ratio: 1.0 / (1.0 - winRate)

Market Entry/Exit Logic

Entry Conditions

The system enters a trade when:

  1. Signal Strength:

    • |combinedZ| > minActionableZ
    • minActionableZ = combinedZStats.Ready() ? combinedZStats.Std() : 0.5
    • This ensures we only trade when the signal is statistically significant
  2. Position Direction:

    • dir = 1 if combinedZ > thr
    • dir = -1 if combinedZ < -thr
    • thr = (overrideMinZ > 0) ? overrideMinZ : AdaptiveMinZ()
  3. Lot Size Calculation:

    riskFrac = wr * (1.0 - MathMin(maxDrawdown, 0.5)) * (0.5 + sharpeBonus * 0.5)
    riskFrac = MathMax(0.002, MathMin(0.02, riskFrac))
    lot = balance * riskFrac / 100000.0
    lot = lot * MathAbs(fs.zScore)  // Scale by signal strength
    

Exit Conditions

Take Profit (TP)

  • Trigger: Price reaches TP level
  • TP Level: entryPrice + (atr * tpMult) (long) or entryPrice - (atr * tpMult) (short)
  • tpMult: AdaptiveTP() / atr

Stop Loss (SL)

  • Trigger: Price reaches SL level
  • SL Level: entryPrice - (atr * slMult) (long) or entryPrice + (atr * slMult) (short)
  • slMult: AdaptiveSL() / atr

Opposite Signal

  • Trigger: New trade signal in opposite direction
  • Logic: Close existing position before opening new one
  • Implementation: Check CountPositions() before opening new trade

Time-based Exit

  • Maximum Trades: 20 trades per session
  • Rollback Convergence: If weights stabilize for minTrades, system marks as converged

Risk Management Details

Drawdown Tracking

double eq = AccountInfoDouble(ACCOUNT_EQUITY);
if(eq > peakEquity) peakEquity = eq;
double dd = (peakEquity > 0) ? (peakEquity - eq) / peakEquity : 0;
if(dd > maxDrawdown) maxDrawdown = dd;

Weight Adaptation

if(combinedZStats.Ready() && returnStats.Count() > 0) {
   double rv = returnStats.Std();
   weightAlpha = rv / (1.0 + rv);
   weightAlpha = MathMax(minAlpha, weightAlpha);
   agents[i].weight = MathMax(weightMin, rho);
}

Sharpe Bonus Calculation

double sharpeBonus = MathMax(0, MathMin(1, rollingSharpe * 0.5));

Market Hours and Session Management

Trading Hours

  • Symbol-specific: Respects each symbol's trading hours
  • No weekend trading: No trades on weekends
  • Session limits: Maximum 20 trades per trading session

State Management

  • Model persistence: Saves state at intervals
  • Warm-up: Uses historical data for initial statistics
  • Recovery: Loads saved state on startup

Detailed Agent Interaction Examples

Example 1: Hurst and ADX Interaction

  1. Hurst Agent Output:

    • SHARED_regimeH = 0.6 (trending market)
    • SHARED_regimeZ = 0.8 (strong bullish signal)
  2. ADX Agent Output:

    • SHARED_adxZ = 0.7 (strong trend)
    • SHARED_adxRaw = 35.0 (strong trend strength)
  3. Consensus Agent Processing:

    • hurstZ = 0.8, adxZ = 0.7
    • hStd = 0.5, aStd = 0.5
    • combinedScale = √(0.5² + 0.5²) = 0.707
    • agreement = 1.0 - (0.1 / 0.707) = 0.86
    • SHARED_regimeConsensus = tanh((0.8 + 0.7) / 2 * 0.86) = 0.94
    • Pattern: strong_trend (pCode = 1)

Example 2: Pattern Hunter Interaction

  1. Pattern Hunter Inputs:

    • hurst = 0.8, adx = 0.7, ma = 0.3, mom = 0.9
    • tH = 0.5, tA = 0.5, tM = 0.4, tM2 = 0.6
  2. Pattern Detection:

    • maMomAgree = (0.3 * 0.9 > 0.4 * 0.6) = true
    • regimeTrend = (0.8 + 0.7) > 0.707 = true
    • momAccel = (0.9 > 0.3 + 0.4 * 0.15) && (0.3 > 0.3 + 0.4 * 0.15) = true
    • Pattern: trend_accel (pCode = 8)
    • pZ = (0.3 + 0.9) / comboNorm = 1.2 / 0.707 = 1.70
    • patternStrength = 1.0 - exp(-1.70) = 0.82

Example : Market Entry

  1. Combined Signal:

    • combinedZ = 0.94 (from consensus)
    • minActionableZ = 0.5 (from combinedZStats)
    • Entry: |0.94| > 0.5
  2. Position Sizing:

    • balance = 10000
    • winRate = 0.6, maxDrawdown = 0.2, sharpeBonus = 0.8
    • riskFrac = 0.6 * (1 - 0.2) * (0.5 + 0.8 * 0.5) = 0.6 * 0.8 * 0.9 = 0.432
    • riskFrac = MathMax(0.002, MathMin(0.02, 0.432)) = 0.02
    • lot = 10000 * 0.02 / 100000 = 0.2
    • lot = 0.2 * MathAbs(0.94) = 0.188
  3. SL/TP:

    • ATR = 0.02
    • SL = entryPrice - 0.02 * 1.5 = entryPrice - 0.03
    • TP = entryPrice + 0.02 * 2.5 = entryPrice + 0.05

Error Handling and Recovery

Data Issues

  1. Insufficient Data:

    • Wait for minimum samples before using statistics
    • Use fallback values when data insufficient
  2. Division by Zero:

    • Use DATA_EPS() for safe division
    • Check for zero variance before calculations
  3. Invalid Values:

    • Validate all input data
      • Use reasonable defaults for invalid values

Recovery Mechanisms

  1. Model Reload:

    • Automatic reload on startup if save file exists
    • Graceful degradation if save file corrupted
  2. State Reset:

    • Reset all statistics on error
    • Log errors for debugging

Performance Monitoring

Key Metrics

  1. Trading Performance:

    • Win rate
    • Average win/loss ratio
    • Maximum drawdown
    • Sharpe ratio
  2. System Performance:

    • Agent weight convergence
    • Signal strength statistics
    • Processing time
    • Memory usage

Health Monitoring

  1. Orchestrator Health:

    • PrintAgentStatus(): Shows all agent signals and weights
    • LogHealth(): Shows rolling performance metrics
    • LogBarHistory(): Stores historical signals
  2. Agent Health:

    • Each agent has SignalInfo() method
    • Shows agent name, z-score, and statistics
    • Helps identify underperforming agents

Future Enhancements

  1. Advanced Features:

    • Multi-timeframe analysis
    • Machine learning for pattern recognition
    • Natural language processing for news sentiment
  2. Risk Management:

    • Dynamic position sizing based on volatility
    • Correlation-based risk limits
    • Market regime-specific risk adjustments
  3. Monitoring:

    • Real-time performance dashboards
    • Automated alert system
    • Performance benchmarking

Conclusion

This documentation provides a comprehensive understanding of the multi-agent trading system's architecture, interaction patterns, and market logic. The system combines multiple analytical approaches to create a robust, data-driven trading strategy that adapts to changing market conditions.

Key strengths:

  • Diversification: Multiple analytical approaches reduce reliance on single indicators
  • Adaptability: All parameters are data-driven and adaptive
  • Robustness: Consensus-based decision making with lateral communication
  • Transparency: Clear documentation of all agent interactions and logic

The system is designed to be both powerful and maintainable, with clear separation of concerns between different analytical components.