add symbol protector and move all Signal Executing mechanism including parsers into eaTradeHandler ...

This commit is contained in:
2024-10-16 09:42:52 +03:30
parent 844b27a2dc
commit a9f35d3a3a
2 changed files with 14 additions and 57 deletions
+14 -57
View File
@@ -29,7 +29,6 @@
#include "../Helpers/x-saherelm.xct.helper.mq5"
//
#include "../Parsers/x-saherelm.x121.parser.mq5"
#include "../Strategies/x-saherelm.x121.strategy.mq5"
//
@@ -82,6 +81,8 @@ input int eaMaxAllowedLongs = 1; // Max Allowed Long Positio
input int eaMaxAllowedShorts = 1; // Max Allowed Short Positions
input string eaEnableSignallingAt = "03:30"; // Auto Enable Signalling Time
input string eaDisableSignallingAt = "22:30"; // Auto Disable Signalling Time
input int eaNumberOfSLForPauseSignalling = 2; // Number of SL For Pause Signalling Per Symbol/Type
input int eaSignallingPauseDelayInMinute = 120; // Signalling Pause Delay In Minute
input double eaMaxDrawdownPercentForOpenTrades = 10; // Max Drawdown Percent for Open Trades
//
@@ -188,19 +189,11 @@ XTimeTracker eaTimeTracker;
// Trade Handler Instance Class ...
X121SCTradeHandler *eaTradeHandler;
//
// Since Signal Filtering done based on
// Strategy and it's not related to Public
// TradeHandler for Seperation of Concern issue,
// we do this here ...
X121StartegyConditionsParser x121Parser;
//
string mTag = "";
//
double eaR2R = 1.5;
datetime lastSignalOn = NULL;
bool eaUseFixedTPSLPoints = true;
//
@@ -580,6 +573,8 @@ bool InitEA()
eaTradeHandler.MaxAllowedLongs(eaMaxAllowedLongs);
eaTradeHandler.MaxAllowedShorts(eaMaxAllowedShorts);
eaTradeHandler.UseMaxAllowedTradesPerSymbol(eaUseMaxAllowedTradesPerSymbol);
eaTradeHandler.NumberOfSLForPauseSignalling(eaNumberOfSLForPauseSignalling);
eaTradeHandler.SignallingPauseDelayInMinute(eaSignallingPauseDelayInMinute);
eaTradeHandler.MaxDrawdownPercentForOpenTrades(eaMaxDrawdownPercentForOpenTrades);
//
@@ -1219,66 +1214,24 @@ void OnSignalRecieved(
return;
}
//
bool isFiltered = x121Parser.IsFiltered(
signal,
conditions //
);
if (isFiltered)
{
//
eaTradeHandler.RemoveSignal(signal);
return;
}
//
// Attach Conditions Summary to Signal ...
string conditionsSummary = conditions.GenerateSummary(
false,
false,
true,
false //
);
//
signal.conditions = x121Parser.GenerateSignalConditions(
signal,
conditions //
);
//
// Check Signal Delay ...
datetime currentTime = TimeCurrent();
int delay = eaDelayBarBetweenTwoSignal;
bool isDelayPassed = delay <= 0
? true
: !IsValid(lastSignalOn)
? true
: MathAbs(TimeToSeconds(currentTime)) - MathAbs(TimeToSeconds(lastSignalOn)) >= ulong(delay * PeriodSeconds(_Period));
if (!isDelayPassed)
{
return;
}
//
// Execute Signal Using Trade Handler ...
ENUM_X_SIGNAL_EXECUTION_RESULT state;
bool isExecuted = eaTradeHandler.ExecuteSignal(
signal,
state //
state,
conditions //
);
//
if (isExecuted)
{
lastSignalOn = currentTime;
}
}
//
// Handle StopLoss Triggered Positions ...
void OnStopLossTriggered(const XDeal &deal)
{
//
eaTradeHandler.HandleSL(
deal.positionId);
//
// Finish ...
eaTradeHandler.Finish(deal);
@@ -1291,6 +1244,10 @@ void OnStopLossTriggered(const XDeal &deal)
// Handle Take Profit Triggered Positions ...
void OnTakeProfitTriggered(const XDeal &deal)
{
//
eaTradeHandler.HandleTP(
deal.positionId);
//
// Finish ...
eaTradeHandler.Finish(deal);