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
|