forked from animatedread/Warrior_EA
49 lines
3.1 KiB
MQL5
49 lines
3.1 KiB
MQL5
//+------------------------------------------------------------------+
|
|
//| Warrior_EA |
|
|
//| AnimateDread |
|
|
//| |
|
|
//+------------------------------------------------------------------+
|
|
// Money management classes (CExpertMoney) are invoked by the standard library's
|
|
// CExpert with a fixed (price, sl) signature - they have no pointer back to the
|
|
// signal filter that computed those levels. CExpertSignalCustom::OpenParams()
|
|
// refreshes these globals right before Money.CheckOpenLong/Short() is called for
|
|
// the same trade, so Money classes can read a same-tick confidence value without
|
|
// requiring an intrusive change to the wizard framework's call chain.
|
|
double g_AISignedConfidence = 0.0; // -1..1, sign = direction, magnitude = AI confidence; 0 if no AI filter
|
|
double g_DBConfidence = 0.0; // 0..1, historical time-based win rate of the active pattern set
|
|
// source takes CONFIDENCE_SOURCE's underlying int values (0=CONF_AI, 1=CONF_DB, 2=CONF_BLENDED).
|
|
// Declared as int rather than the enum type so this header has no dependency on the include
|
|
// order of Enumerations\InputEnums.mqh (this file is pulled in from class headers that are
|
|
// included before Inputs.mqh in Warrior_EA.mq5).
|
|
// reward:risk ratio of the specific trade OpenParams() just sized (b in the Kelly-criterion
|
|
// formula CMoneyIntelligent::AdjustRiskAmount() uses) - refreshed on the same same-tick
|
|
// contract as the two confidence globals above; always > 0 when populated, since OpenParams()
|
|
// already rejects any setup below Min_Risk_Reward_Ratio before Money is ever consulted.
|
|
double g_TradeRewardRiskRatio = 0.0;
|
|
// Live per-tick signed AI confidence (-1..1, sign = predicted direction, magnitude = confidence),
|
|
// refreshed every tick/timer from the active AI signal's SignedAIConfidence() in
|
|
// CExpertSignalAIBase::ScheduleTrainingIfNeeded() - independent of the OpenParams() same-tick
|
|
// contract above, because an ALREADY-OPEN position generates no OpenParams() calls yet the
|
|
// intelligent trailing (Trailing\TrailingIntelligent.mqh) still needs a current read while holding.
|
|
// This is written by the active AI signal once per tick; 0.0 means no AI filter is active/converged yet.
|
|
double g_LiveAISignedConfidence = 0.0;
|
|
//+------------------------------------------------------------------+
|
|
//| Combine AI/DB confidence into a single 0..1 magnitude |
|
|
//+------------------------------------------------------------------+
|
|
double CombinedConfidence(int source)
|
|
{
|
|
double aiMag = MathIsValidNumber(g_AISignedConfidence) ? MathAbs(g_AISignedConfidence) : 0.0;
|
|
double dbMag = MathIsValidNumber(g_DBConfidence) ? g_DBConfidence : 0.0;
|
|
aiMag = MathMax(0.0, MathMin(aiMag, 1.0));
|
|
dbMag = MathMax(0.0, MathMin(dbMag, 1.0));
|
|
switch(source)
|
|
{
|
|
case 1: // CONF_DB
|
|
return dbMag;
|
|
case 2: // CONF_BLENDED
|
|
return (aiMag + dbMag) / 2.0;
|
|
default: // CONF_AI
|
|
return aiMag;
|
|
}
|
|
}
|
|
//+------------------------------------------------------------------+
|