dualea/Experts/Advisors/DualEA/Tests/Test_GateSafetyContract.mq5
40 lines
1.6 KiB
MQL5
Princeec13
2026-10-28 00:31:51 -04:00
#property strict
#include "../Include/EnhancedEfficientGateSystem.mqh"
int failures=0,checks=0;
void Check(bool ok,string label) { checks++; if(!ok) { failures++; Print("[GATE-SAFETY FAIL] ",label); } }
int OnInit()
{
CEfficientGateManagerEnhanced manager;
manager.Initialize(false);
TradingSignal signal;
signal.Init();
signal.id="gate-safety";
signal.strategy="test";
signal.symbol=_Symbol;
signal.timeframe=_Period;
signal.price=SymbolInfoDouble(_Symbol,SYMBOL_ASK);
signal.sl=signal.price-100*_Point;
signal.tp=signal.price+200*_Point;
signal.volume=0.01;
signal.confidence=0.01;
CSignalDecision decision;
string reason;
for(int mode=0;mode<=4;mode++)
{
manager.SetMode((EGateProcessingMode)mode);
signal.confidence=0.01;
bool passed=manager.ProcessSignalEnhanced(signal,decision,reason);
Check(!passed,"Low-confidence risk failure blocks every processing mode");
Check(!decision.gate_results[0],"G1 result records failure");
Check(decision.gate_timestamps[0]>0,"G1 actually evaluated");
Check(reason!="","Blocking reason retained");
Check(decision.original_volume==0.01 && decision.signal_id==signal.id,"Original fields retained");
}
signal.volume=0;
Check(!manager.ProcessSignalEnhanced(signal,decision,reason),"Explicit zero volume rejected");
manager.Shutdown();
PrintFormat("[GATE-SAFETY RESULT] checks=%d failures=%d",checks,failures);
return failures==0 ? INIT_SUCCEEDED : INIT_FAILED;
}
void OnTick() {}
double OnTester() { return failures==0 ? checks : -failures; }