2025-10-03 01:38:36 -04:00
|
|
|
//+------------------------------------------------------------------+
|
2026-02-05 23:31:20 -05:00
|
|
|
//| GateLearningSystem.mqh - Gate Learning and Auto-Tuning |
|
|
|
|
|
//| Manages gate threshold learning and adaptive adjustments |
|
2025-10-03 01:38:36 -04:00
|
|
|
//+------------------------------------------------------------------+
|
2026-02-05 23:31:20 -05:00
|
|
|
#ifndef GATELEARNINGSYSTEM_MQH
|
|
|
|
|
#define GATELEARNINGSYSTEM_MQH
|
2025-10-03 01:38:36 -04:00
|
|
|
|
2026-02-05 23:31:20 -05:00
|
|
|
#include "CGateBase.mqh"
|
2025-10-03 01:38:36 -04:00
|
|
|
|
|
|
|
|
//+------------------------------------------------------------------+
|
2026-02-05 23:31:20 -05:00
|
|
|
//| Gate Learning System Class |
|
2025-10-03 01:38:36 -04:00
|
|
|
//+------------------------------------------------------------------+
|
|
|
|
|
class CGateLearningSystem
|
|
|
|
|
{
|
|
|
|
|
private:
|
2026-02-05 23:31:20 -05:00
|
|
|
bool m_autoAdjust;
|
|
|
|
|
double m_learningRate;
|
|
|
|
|
int m_minSamples;
|
|
|
|
|
int m_sampleCounts[8];
|
|
|
|
|
double m_successRates[8];
|
2026-02-04 14:28:59 -05:00
|
|
|
|
2026-02-05 23:31:20 -05:00
|
|
|
public:
|
|
|
|
|
// Constructor
|
|
|
|
|
CGateLearningSystem(bool autoAdjust = true, double learningRate = 0.05)
|
2025-10-03 01:38:36 -04:00
|
|
|
{
|
2026-02-05 23:31:20 -05:00
|
|
|
m_autoAdjust = autoAdjust;
|
|
|
|
|
m_learningRate = learningRate;
|
|
|
|
|
m_minSamples = 20;
|
|
|
|
|
|
|
|
|
|
for (int i = 0; i < 8; i++)
|
2025-10-03 01:38:36 -04:00
|
|
|
{
|
2026-02-05 23:31:20 -05:00
|
|
|
m_sampleCounts[i] = 0;
|
|
|
|
|
m_successRates[i] = 0.5;
|
2025-10-03 01:38:36 -04:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2026-02-05 23:31:20 -05:00
|
|
|
// Destructor
|
|
|
|
|
~CGateLearningSystem() {}
|
2026-02-04 14:28:59 -05:00
|
|
|
|
2026-02-05 23:31:20 -05:00
|
|
|
// Record gate outcome for learning
|
|
|
|
|
void RecordOutcome(int gateIndex, bool passed, double profitLoss = 0)
|
2026-02-04 14:28:59 -05:00
|
|
|
{
|
2026-02-05 23:31:20 -05:00
|
|
|
if (gateIndex < 0 || gateIndex >= 8) return;
|
2026-02-04 14:28:59 -05:00
|
|
|
|
2026-02-05 23:31:20 -05:00
|
|
|
m_sampleCounts[gateIndex]++;
|
2026-02-04 14:28:59 -05:00
|
|
|
|
2026-02-05 23:31:20 -05:00
|
|
|
// 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;
|
2026-02-04 14:28:59 -05:00
|
|
|
}
|
2026-02-05 23:31:20 -05:00
|
|
|
|
|
|
|
|
// Get recommended threshold adjustment for a gate
|
|
|
|
|
double GetThresholdAdjustment(int gateIndex)
|
2025-10-03 01:38:36 -04:00
|
|
|
{
|
2026-02-05 23:31:20 -05:00
|
|
|
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;
|
2025-10-03 01:38:36 -04:00
|
|
|
}
|
2026-02-05 23:31:20 -05:00
|
|
|
|
|
|
|
|
// Print learning report
|
|
|
|
|
void PrintReport()
|
2025-10-03 01:38:36 -04:00
|
|
|
{
|
2026-02-05 23:31:20 -05:00
|
|
|
Print("=== Gate Learning Report ===");
|
|
|
|
|
for (int i = 0; i < 8; i++)
|
2025-10-03 01:38:36 -04:00
|
|
|
{
|
2026-02-05 23:31:20 -05:00
|
|
|
Print(StringFormat("Gate %d: samples=%d, success_rate=%.2f%%, adjustment=%.4f",
|
|
|
|
|
i + 1, m_sampleCounts[i], m_successRates[i] * 100,
|
|
|
|
|
GetThresholdAdjustment(i)));
|
2025-10-03 01:38:36 -04:00
|
|
|
}
|
|
|
|
|
}
|
2026-02-05 23:31:20 -05:00
|
|
|
|
|
|
|
|
// Save learning data
|
|
|
|
|
void SaveLearningData()
|
2025-10-03 01:38:36 -04:00
|
|
|
{
|
2026-02-05 23:31:20 -05:00
|
|
|
// Stub - would save to file in full implementation
|
2025-10-03 01:38:36 -04:00
|
|
|
}
|
2026-02-05 23:31:20 -05:00
|
|
|
|
|
|
|
|
// 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; }
|
2025-10-03 01:38:36 -04:00
|
|
|
};
|
|
|
|
|
|
2026-02-05 23:31:20 -05:00
|
|
|
#endif // GATELEARNINGSYSTEM_MQH
|