mql5/Experts/Advisors/DualEA/Include/GateLearningSystem.mqh
Princeec13 123a9cbe6b
2026-02-05 23:31:20 -05:00

100 satır
3,2 KiB
MQL5

//+------------------------------------------------------------------+
//| GateLearningSystem.mqh - Gate Learning and Auto-Tuning |
//| Manages gate threshold learning and adaptive adjustments |
//+------------------------------------------------------------------+
#ifndef GATELEARNINGSYSTEM_MQH
#define GATELEARNINGSYSTEM_MQH
#include "CGateBase.mqh"
//+------------------------------------------------------------------+
//| Gate Learning System Class |
//+------------------------------------------------------------------+
class CGateLearningSystem
{
private:
bool m_autoAdjust;
double m_learningRate;
int m_minSamples;
int m_sampleCounts[8];
double m_successRates[8];
public:
// Constructor
CGateLearningSystem(bool autoAdjust = true, double learningRate = 0.05)
{
m_autoAdjust = autoAdjust;
m_learningRate = learningRate;
m_minSamples = 20;
for (int i = 0; i < 8; i++)
{
m_sampleCounts[i] = 0;
m_successRates[i] = 0.5;
}
}
// Destructor
~CGateLearningSystem() {}
// Record gate outcome for learning
void RecordOutcome(int gateIndex, bool passed, double profitLoss = 0)
{
if (gateIndex < 0 || gateIndex >= 8) return;
m_sampleCounts[gateIndex]++;
// Update success rate with exponential moving average
double alpha = m_learningRate;
if (passed && profitLoss > 0)
m_successRates[gateIndex] = (1 - alpha) * m_successRates[gateIndex] + alpha * 1.0;
else if (!passed)
m_successRates[gateIndex] = (1 - alpha) * m_successRates[gateIndex] + alpha * 0.0;
}
// Get recommended threshold adjustment for a gate
double GetThresholdAdjustment(int gateIndex)
{
if (gateIndex < 0 || gateIndex >= 8) return 0.0;
if (m_sampleCounts[gateIndex] < m_minSamples) return 0.0;
// Adjust threshold based on success rate
double targetRate = 0.6; // Target 60% pass rate
double currentRate = m_successRates[gateIndex];
// If too strict, lower threshold; if too loose, raise threshold
return (currentRate - targetRate) * 0.1;
}
// Print learning report
void PrintReport()
{
Print("=== Gate Learning Report ===");
for (int i = 0; i < 8; i++)
{
Print(StringFormat("Gate %d: samples=%d, success_rate=%.2f%%, adjustment=%.4f",
i + 1, m_sampleCounts[i], m_successRates[i] * 100,
GetThresholdAdjustment(i)));
}
}
// Save learning data
void SaveLearningData()
{
// Stub - would save to file in full implementation
}
// Enable/disable auto-adjustment
void SetAutoAdjust(bool enabled) { m_autoAdjust = enabled; }
bool GetAutoAdjust() const { return m_autoAdjust; }
// Set learning rate
void SetLearningRate(double rate) { m_learningRate = rate; }
double GetLearningRate() const { return m_learningRate; }
// Set minimum samples before adjustment
void SetMinSamples(int samples) { m_minSamples = samples; }
int GetMinSamples() const { return m_minSamples; }
};
#endif // GATELEARNINGSYSTEM_MQH