40 lines
1.6 KiB
MQL5
#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; }
|