add symbol protector and move all Signal Executing mechanism including parsers into eaTradeHandler ...
This commit is contained in:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user