add symbol protector and move all Signal Executing mechanism including parsers into eaTradeHandler ...
This commit is contained in:
Binary file not shown.
@@ -29,7 +29,6 @@
|
|||||||
#include "../Helpers/x-saherelm.xct.helper.mq5"
|
#include "../Helpers/x-saherelm.xct.helper.mq5"
|
||||||
|
|
||||||
//
|
//
|
||||||
#include "../Parsers/x-saherelm.x121.parser.mq5"
|
|
||||||
#include "../Strategies/x-saherelm.x121.strategy.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 int eaMaxAllowedShorts = 1; // Max Allowed Short Positions
|
||||||
input string eaEnableSignallingAt = "03:30"; // Auto Enable Signalling Time
|
input string eaEnableSignallingAt = "03:30"; // Auto Enable Signalling Time
|
||||||
input string eaDisableSignallingAt = "22:30"; // Auto Disable 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
|
input double eaMaxDrawdownPercentForOpenTrades = 10; // Max Drawdown Percent for Open Trades
|
||||||
|
|
||||||
//
|
//
|
||||||
@@ -188,19 +189,11 @@ XTimeTracker eaTimeTracker;
|
|||||||
// Trade Handler Instance Class ...
|
// Trade Handler Instance Class ...
|
||||||
X121SCTradeHandler *eaTradeHandler;
|
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 = "";
|
string mTag = "";
|
||||||
|
|
||||||
//
|
//
|
||||||
double eaR2R = 1.5;
|
double eaR2R = 1.5;
|
||||||
datetime lastSignalOn = NULL;
|
|
||||||
bool eaUseFixedTPSLPoints = true;
|
bool eaUseFixedTPSLPoints = true;
|
||||||
|
|
||||||
//
|
//
|
||||||
@@ -580,6 +573,8 @@ bool InitEA()
|
|||||||
eaTradeHandler.MaxAllowedLongs(eaMaxAllowedLongs);
|
eaTradeHandler.MaxAllowedLongs(eaMaxAllowedLongs);
|
||||||
eaTradeHandler.MaxAllowedShorts(eaMaxAllowedShorts);
|
eaTradeHandler.MaxAllowedShorts(eaMaxAllowedShorts);
|
||||||
eaTradeHandler.UseMaxAllowedTradesPerSymbol(eaUseMaxAllowedTradesPerSymbol);
|
eaTradeHandler.UseMaxAllowedTradesPerSymbol(eaUseMaxAllowedTradesPerSymbol);
|
||||||
|
eaTradeHandler.NumberOfSLForPauseSignalling(eaNumberOfSLForPauseSignalling);
|
||||||
|
eaTradeHandler.SignallingPauseDelayInMinute(eaSignallingPauseDelayInMinute);
|
||||||
eaTradeHandler.MaxDrawdownPercentForOpenTrades(eaMaxDrawdownPercentForOpenTrades);
|
eaTradeHandler.MaxDrawdownPercentForOpenTrades(eaMaxDrawdownPercentForOpenTrades);
|
||||||
|
|
||||||
//
|
//
|
||||||
@@ -1219,66 +1214,24 @@ void OnSignalRecieved(
|
|||||||
return;
|
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 ...
|
// Execute Signal Using Trade Handler ...
|
||||||
ENUM_X_SIGNAL_EXECUTION_RESULT state;
|
ENUM_X_SIGNAL_EXECUTION_RESULT state;
|
||||||
bool isExecuted = eaTradeHandler.ExecuteSignal(
|
bool isExecuted = eaTradeHandler.ExecuteSignal(
|
||||||
signal,
|
signal,
|
||||||
state //
|
state,
|
||||||
|
conditions //
|
||||||
);
|
);
|
||||||
|
|
||||||
//
|
|
||||||
if (isExecuted)
|
|
||||||
{
|
|
||||||
lastSignalOn = currentTime;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Handle StopLoss Triggered Positions ...
|
// Handle StopLoss Triggered Positions ...
|
||||||
void OnStopLossTriggered(const XDeal &deal)
|
void OnStopLossTriggered(const XDeal &deal)
|
||||||
{
|
{
|
||||||
|
//
|
||||||
|
eaTradeHandler.HandleSL(
|
||||||
|
deal.positionId);
|
||||||
|
|
||||||
//
|
//
|
||||||
// Finish ...
|
// Finish ...
|
||||||
eaTradeHandler.Finish(deal);
|
eaTradeHandler.Finish(deal);
|
||||||
@@ -1291,6 +1244,10 @@ void OnStopLossTriggered(const XDeal &deal)
|
|||||||
// Handle Take Profit Triggered Positions ...
|
// Handle Take Profit Triggered Positions ...
|
||||||
void OnTakeProfitTriggered(const XDeal &deal)
|
void OnTakeProfitTriggered(const XDeal &deal)
|
||||||
{
|
{
|
||||||
|
//
|
||||||
|
eaTradeHandler.HandleTP(
|
||||||
|
deal.positionId);
|
||||||
|
|
||||||
//
|
//
|
||||||
// Finish ...
|
// Finish ...
|
||||||
eaTradeHandler.Finish(deal);
|
eaTradeHandler.Finish(deal);
|
||||||
|
|||||||
Reference in New Issue
Block a user