RSI-Stoch-MA-EA/Masteraicoordinator.mqh
SahrJohn 26ea936918
2026-01-22 04:48:51 -06:00

241 行
无行尾
7.1 KiB
MQL5

//+------------------------------------------------------------------+
//| MasterAICoordinator.mqh |
//| Integration Layer: Neural Network + Your Systems |
//| FIXED - Uses proper variable scoping |
//+------------------------------------------------------------------+
#property copyright "QuarterTheory x VIZION"
#property version "3.00"
#property strict
// Only include Neural Network
#include "NeuralNet.mqh"
//================ SIGNAL STRUCTURE ==================//
struct MasterSignal
{
int master_direction;
double master_confidence;
string structure_type;
bool should_trade;
string reasoning;
// Pattern counts for your main EA
int pattern_warns;
int pattern_praise;
};
//================ GLOBALS ==================//
MasterSignal g_MasterSignal;
bool g_MasterAIInit = false;
bool g_UseNN = false;
int g_AISignalCount = 0;
//+------------------------------------------------------------------+
//| Initialize Master AI |
//+------------------------------------------------------------------+
bool InitializeMasterAI()
{
if(Use_NeuralNet)
{
bool nn_ok = InitializeNeuralNet();
if(nn_ok)
{
g_UseNN = true;
Print("✅ Neural Network initialized");
Print(" Server: ", NN_ServerURL);
}
else
{
Print("⚠️ NN init failed");
g_UseNN = false;
}
}
g_MasterAIInit = true;
Print("✅ Master AI Ready (NN + Structure)");
return true;
}
//+------------------------------------------------------------------+
//| Update Master AI |
//+------------------------------------------------------------------+
void UpdateMasterAI()
{
if(!g_MasterAIInit) return;
// Get YOUR existing warns/praise from external scope
int warns = 0;
int praise = 0;
// Try to access your globals (they're in GlobalVariables.mqh)
// These are set by your DetectWarnings() and DetectPraiseSignals()
warns = Warning_Confluence_Count;
praise = Praise_Count;
// Get YOUR market state
bool is_bull = (Current_Bias == BIAS_BULL);
bool is_bear = (Current_Bias == BIAS_BEAR);
bool is_trending = (Current_Family == FAMILY_TRENDING);
int strength = 50;
if(Current_Strength == STRENGTH_STRONG)
strength = 80;
else if(Current_Strength == STRENGTH_CONFIRMED)
strength = 60;
if(g_UseNN)
{
UpdateNeuralNetSignal();
}
double buy = 0;
double sell = 0;
if(is_bull && is_trending) buy += 30;
if(is_bear && is_trending) sell += 30;
if(praise >= 2)
{
if(is_bull && is_trending) buy += 20;
if(is_bear && is_trending) sell += 20;
}
if(warns >= 2)
{
if(is_bull && is_trending) sell += 15;
if(is_bear && is_trending) buy += 15;
}
if(is_bull && is_trending) buy += strength * 0.2;
if(is_bear && is_trending) sell += strength * 0.2;
if(g_UseNN && NN_IsUsable())
{
double risk_adj = 1.0 - (NN_RiskScore / 200.0);
double eff_conf = (NN_Confidence / 100.0) * risk_adj;
if(NN_Bias > 0)
buy += 40 * eff_conf;
else if(NN_Bias < 0)
sell += 40 * eff_conf;
}
g_MasterSignal.master_direction = 0;
g_MasterSignal.master_confidence = 0;
g_MasterSignal.should_trade = false;
g_MasterSignal.pattern_warns = warns;
g_MasterSignal.pattern_praise = praise;
if(is_bull && is_trending)
g_MasterSignal.structure_type = "Uptrend";
else if(is_bear && is_trending)
g_MasterSignal.structure_type = "Downtrend";
else
g_MasterSignal.structure_type = "Ranging";
if(buy > sell && buy >= 50)
{
g_MasterSignal.master_direction = 1;
g_MasterSignal.master_confidence = MathMin(buy, 100);
g_MasterSignal.should_trade = true;
}
else if(sell > buy && sell >= 50)
{
g_MasterSignal.master_direction = -1;
g_MasterSignal.master_confidence = MathMin(sell, 100);
g_MasterSignal.should_trade = true;
}
if(g_MasterSignal.should_trade)
{
string r = "";
if(is_bull) r += "Bull, ";
else if(is_bear) r += "Bear, ";
if(praise > 0) r += IntegerToString(praise) + "P, ";
if(warns > 0) r += IntegerToString(warns) + "W, ";
if(g_UseNN && NN_IsUsable())
{
if(NN_Bias > 0) r += "NN+";
else if(NN_Bias < 0) r += "NN-";
r += "(" + DoubleToString(NN_Confidence, 0) + "%)";
}
g_MasterSignal.reasoning = r;
if(g_MasterSignal.master_confidence >= 70)
{
Print("🎯 MASTER AI: ", g_MasterSignal.master_direction > 0 ? "BUY" : "SELL");
Print(" Conf: ", DoubleToString(g_MasterSignal.master_confidence, 1), "%");
Print(" ", r);
}
}
g_AISignalCount++;
}
MasterSignal GetMasterSignal() { return g_MasterSignal; }
int GetMasterDirection() { return g_MasterSignal.master_direction; }
double GetMasterConfidence() { return g_MasterSignal.master_confidence; }
bool ShouldTakeMasterSignal() { return g_MasterSignal.should_trade; }
double GetRecommendedLotMultiplier()
{
if(g_MasterSignal.master_confidence >= 80) return 2.0;
else if(g_MasterSignal.master_confidence >= 65) return 1.5;
else return 1.0;
}
int GetRecommendedSL()
{
if(g_MasterSignal.master_confidence >= 80) return 100;
else if(g_MasterSignal.master_confidence >= 65) return 150;
else return 200;
}
int GetRecommendedTP()
{
if(g_MasterSignal.master_confidence >= 80) return 5000;
else if(g_MasterSignal.master_confidence >= 65) return 4000;
else return 3000;
}
string GetMasterReasoning() { return g_MasterSignal.reasoning; }
bool ValidateTradeWithMasterAI()
{
if(!g_MasterSignal.should_trade) return false;
if(g_MasterSignal.master_confidence < 60) return false;
if(NN_BlockOnDisagree && g_UseNN && NN_IsUsable())
{
if(g_MasterSignal.master_direction > 0 && NN_Bias < 0) return false;
if(g_MasterSignal.master_direction < 0 && NN_Bias > 0) return false;
}
return true;
}
double CalculateMasterLotSize(double base) { return base * GetRecommendedLotMultiplier(); }
void GetMasterSLTP(int &sl, int &tp)
{
sl = GetRecommendedSL();
tp = GetRecommendedTP();
}
string GetMasterStats()
{
string s = "Master AI:\n Signals: " + IntegerToString(g_AISignalCount);
if(g_UseNN) s += "\n NN: " + IntegerToString(NN_Bias) + " | " + DoubleToString(NN_Confidence, 1) + "%";
return s;
}
void SetUseNeuralNetwork(bool use) { g_UseNN = use; }
void SetUseOpenAI(bool use) {}
void SetRequireAIValidation(bool require) {}
void CleanupMasterAI() { Print("🧹 Master AI cleanup"); Print(GetMasterStats()); }
bool IsNNHealthy() { return (g_UseNN && NN_IsUsable()); }
string GetNNStatus()
{
if(!Use_NeuralNet) return "Off";
if(!g_UseNN) return "Failed";
if(!NN_IsUsable()) return "Low";
return "OK";
}
int GetTotalWarnCount() { return 0; }
int GetTotalPraiseCount() { return 0; }
void InitializePatternCoordinator() {}
void UpdatePatternCoordinator() {}
void CleanupPatternCoordinator() {}