add some new conditions to XPV and also implement usage of XRL in setup class ...

This commit is contained in:
2024-07-01 14:27:18 +03:30
parent 0add5e2e16
commit 852de5889d
3 changed files with 244 additions and 4 deletions
+51 -1
View File
@@ -28,6 +28,7 @@
#include "../Classes/x-saherelm.xalert.class.mq5" #include "../Classes/x-saherelm.xalert.class.mq5"
// //
#include "../Helpers/x-saherelm.xrl.helper.mq5"
#include "../Helpers/x-saherelm.xmc.helper.mq5" #include "../Helpers/x-saherelm.xmc.helper.mq5"
#include "../Helpers/x-saherelm.xpv.helper.mq5" #include "../Helpers/x-saherelm.xpv.helper.mq5"
#include "../Helpers/x-saherelm.xtd.helper.mq5" #include "../Helpers/x-saherelm.xtd.helper.mq5"
@@ -230,6 +231,7 @@ struct X121SetupInputs
// //
// Helpers Inputs ... // Helpers Inputs ...
XRLInputs rlInputs; // XRL Inputs
XMCInputs mcInputs; // XMC Inputs XMCInputs mcInputs; // XMC Inputs
XPVInputs pvInputs; // XPV Inputs XPVInputs pvInputs; // XPV Inputs
XTDInputs tdInputs; // XTD Inputs XTDInputs tdInputs; // XTD Inputs
@@ -271,6 +273,7 @@ struct X121SetupInputs
bool Init( bool Init(
string _symbol, // Symbol string _symbol, // Symbol
ENUM_TIMEFRAMES _period, // Time Frame ENUM_TIMEFRAMES _period, // Time Frame
XRLInputs &_rlInputs, // XRL Inputs
XMCInputs &_mcInputs, // XMC Inputs XMCInputs &_mcInputs, // XMC Inputs
XPVInputs &_pvInputs, // XPV Inputs XPVInputs &_pvInputs, // XPV Inputs
XTDInputs &_tdInputs, // XTD Inputs XTDInputs &_tdInputs, // XTD Inputs
@@ -334,6 +337,7 @@ struct X121SetupInputs
period = NULL; period = NULL;
// //
rlInputs.Clean();
mcInputs.Clean(); mcInputs.Clean();
pvInputs.Clean(); pvInputs.Clean();
tdInputs.Clean(); tdInputs.Clean();
@@ -359,6 +363,7 @@ struct X121SetupInputs
void Default() void Default()
{ {
// //
rlInputs.Default();
mcInputs.Default(); mcInputs.Default();
pvInputs.Default(); pvInputs.Default();
tdInputs.Default(); tdInputs.Default();
@@ -398,6 +403,13 @@ struct X121SetupInputs
return result; return result;
} }
//
result = rlInputs.IsValid();
if (!result)
{
return result;
}
// //
result = tdInputs.IsValid(); result = tdInputs.IsValid();
if (!result) if (!result)
@@ -541,6 +553,7 @@ struct X121SetupConditions
// //
// Conditions ... // Conditions ...
XRLConditions rlConditions;
XMCConditions mcConditions; XMCConditions mcConditions;
XPVConditions pvConditions; XPVConditions pvConditions;
XTDConditions tdConditions; XTDConditions tdConditions;
@@ -585,6 +598,7 @@ struct X121SetupConditions
Clean(macdSignal); Clean(macdSignal);
// //
rlConditions.Clean();
mcConditions.Clean(); mcConditions.Clean();
tdConditions.Clean(); tdConditions.Clean();
hkConditions.Clean(); hkConditions.Clean();
@@ -617,6 +631,14 @@ struct X121SetupConditions
double tempBullishScore = 0; double tempBullishScore = 0;
double tempBearishScore = 0; double tempBearishScore = 0;
//
rlConditions.GenerateScore(
tempBullishScore,
tempBearishScore //
);
bullishScore += tempBullishScore;
bearishScore += tempBearishScore;
// //
mcConditions.GenerateScore( mcConditions.GenerateScore(
tempBullishScore, tempBullishScore,
@@ -796,6 +818,7 @@ struct X121SetupConditions
// //
string pvSummary = pvConditions.GenerateSummary(false, true, false, ignoreFalseConditions); string pvSummary = pvConditions.GenerateSummary(false, true, false, ignoreFalseConditions);
string rlSummary = rlConditions.GenerateSummary(false, true, false, ignoreFalseConditions);
string mcSummary = mcConditions.GenerateSummary(false, true, false, ignoreFalseConditions); string mcSummary = mcConditions.GenerateSummary(false, true, false, ignoreFalseConditions);
string tdSummary = tdConditions.GenerateSummary(false, true, false, ignoreFalseConditions); string tdSummary = tdConditions.GenerateSummary(false, true, false, ignoreFalseConditions);
string hkSummary = hkConditions.GenerateSummary(false, true, false, ignoreFalseConditions); string hkSummary = hkConditions.GenerateSummary(false, true, false, ignoreFalseConditions);
@@ -817,6 +840,7 @@ struct X121SetupConditions
string conditionsStr = string conditionsStr =
// //
pvSummary + separator + pvSummary + separator +
rlSummary + separator +
mcSummary + separator + mcSummary + separator +
tdSummary + separator + tdSummary + separator +
hkSummary + separator + hkSummary + separator +
@@ -2131,7 +2155,7 @@ struct X121SignalGenerator
// XICH ... // XICH ...
conditions.ichConditions.isClosedOverKijunSen && conditions.ichConditions.isClosedOverKijunSen &&
(conditions.ichConditions.isTenkanSenOverKijunSen || (conditions.ichConditions.isTenkanSenOverKijunSen ||
conditions.ichConditions.isTenkanSenCrossedOverKijunSen) conditions.ichConditions.isTenkanSenCrossedOverKijunSen)
// //
) )
// //
@@ -3860,6 +3884,7 @@ class XSCX121Setup : public XSCBaseAlert
public: public:
// //
// Props ... // Props ...
XSCXRLHelper *rlHelper;
XSCXMCHelper *mcHelper; XSCXMCHelper *mcHelper;
XSCXPVHelper *pvHelper; XSCXPVHelper *pvHelper;
XSCXTDHelper *tdHelper; XSCXTDHelper *tdHelper;
@@ -3888,6 +3913,7 @@ public:
void ~XSCX121Setup() void ~XSCX121Setup()
{ {
// //
delete rlHelper;
delete mcHelper; delete mcHelper;
delete pvHelper; delete pvHelper;
delete tdHelper; delete tdHelper;
@@ -3959,6 +3985,19 @@ public:
return result; return result;
} }
//
// XRL ...
rlHelper = new XSCXRLHelper();
result = rlHelper.Init(
inputs.symbol,
inputs.period,
inputs.rlInputs //
);
if (!result)
{
return result;
}
// //
// XSLN ... // XSLN ...
slnHelper = new XSCXSLNHelper(); slnHelper = new XSCXSLNHelper();
@@ -4216,6 +4255,17 @@ public:
conditions.period = GetPeriod(); conditions.period = GetPeriod();
conditions.time = TimeCurrent(); conditions.time = TimeCurrent();
//
result = rlHelper.GetConditions(
conditions.rlConditions,
barIndex,
loopback //
);
if (!result)
{
return result;
}
// //
result = hdtHelper.GetConditions( result = hdtHelper.GetConditions(
conditions.htdConditions, conditions.htdConditions,
+8 -2
View File
@@ -63,8 +63,8 @@ input group "Risk Management";
input double x121EAVolume = 0.01; // Static Volume input double x121EAVolume = 0.01; // Static Volume
input double x121EATPPoint = 1000; // TP Point input double x121EATPPoint = 1000; // TP Point
input double x121EASLPoint = 1000; // SL Point input double x121EASLPoint = 1000; // SL Point
input bool x121EAIgnoreSL = false; // Ignore Calculated SL input bool x121EAIgnoreSL = false; // Ignore Calculated SL
input bool x121EAIgnoreTP = false; // Ignore Calculated TP input bool x121EAIgnoreTP = false; // Ignore Calculated TP
input bool x121EACloseOnOpposit = false; // Close all Positions on Opposit input bool x121EACloseOnOpposit = false; // Close all Positions on Opposit
input int x121EAMaxAllowedTrades = 0; // Max Allowed Positions Per Symbol input int x121EAMaxAllowedTrades = 0; // Max Allowed Positions Per Symbol
input bool x121EAUseMaxAllowedPerDirection = true; // Use Max Allowed Positions Per Direction input bool x121EAUseMaxAllowedPerDirection = true; // Use Max Allowed Positions Per Direction
@@ -434,6 +434,12 @@ bool InitialEA()
// //
void X121PreConfigureStyles(X121SetupInputs &inputs) void X121PreConfigureStyles(X121SetupInputs &inputs)
{ {
//
// XRL ...
inputs.rlInputs.showFast = false;
inputs.rlInputs.showSlow = false;
inputs.rlInputs.showVerifier = false;
// //
// XHTD ... // XHTD ...
inputs.htdInputs.show = false; inputs.htdInputs.show = false;
+185 -1
View File
@@ -391,6 +391,37 @@ struct XPVConditions
bool isHCHHSwitchedToBearish; bool isHCHHSwitchedToBearish;
bool isHCLLSwitchedToBeraish; bool isHCLLSwitchedToBeraish;
//
// Fibonachi Conditions ...
//
bool isCloseOverFib1;
bool isCloseOverFib2;
bool isCloseOverFib3;
bool isCloseOverFib4;
bool isCloseOverFib5;
//
bool isCloseUnderFib1;
bool isCloseUnderFib2;
bool isCloseUnderFib3;
bool isCloseUnderFib4;
bool isCloseUnderFib5;
//
bool isCloseCrossedOverFib1;
bool isCloseCrossedOverFib2;
bool isCloseCrossedOverFib3;
bool isCloseCrossedOverFib4;
bool isCloseCrossedOverFib5;
//
bool isCloseCrossedUnderFib1;
bool isCloseCrossedUnderFib2;
bool isCloseCrossedUnderFib3;
bool isCloseCrossedUnderFib4;
bool isCloseCrossedUnderFib5;
// //
void Clean() void Clean()
{ {
@@ -442,6 +473,26 @@ struct XPVConditions
isFiboIncreased = false; isFiboIncreased = false;
isFiboDecreased = false; isFiboDecreased = false;
isFiboSectionChanged = false; isFiboSectionChanged = false;
isCloseOverFib1 = false;
isCloseOverFib2 = false;
isCloseOverFib3 = false;
isCloseOverFib4 = false;
isCloseOverFib5 = false;
isCloseUnderFib1 = false;
isCloseUnderFib2 = false;
isCloseUnderFib3 = false;
isCloseUnderFib4 = false;
isCloseUnderFib5 = false;
isCloseCrossedOverFib1 = false;
isCloseCrossedOverFib2 = false;
isCloseCrossedOverFib3 = false;
isCloseCrossedOverFib4 = false;
isCloseCrossedOverFib5 = false;
isCloseCrossedUnderFib1 = false;
isCloseCrossedUnderFib2 = false;
isCloseCrossedUnderFib3 = false;
isCloseCrossedUnderFib4 = false;
isCloseCrossedUnderFib5 = false;
isSCBullish = false; isSCBullish = false;
isSCHHBullish = false; isSCHHBullish = false;
isSCLLBullish = false; isSCLLBullish = false;
@@ -793,6 +844,26 @@ struct XPVConditions
ToString("isFiboIncreased", isFiboIncreased, ignoreFalseConditions, separator) + ToString("isFiboIncreased", isFiboIncreased, ignoreFalseConditions, separator) +
ToString("isFiboDecreased", isFiboDecreased, ignoreFalseConditions, separator) + ToString("isFiboDecreased", isFiboDecreased, ignoreFalseConditions, separator) +
ToString("isFiboSectionChanged", isFiboSectionChanged, ignoreFalseConditions, separator) + ToString("isFiboSectionChanged", isFiboSectionChanged, ignoreFalseConditions, separator) +
ToString("isCloseOverFib1", isCloseOverFib1, ignoreFalseConditions, separator) +
ToString("isCloseOverFib2", isCloseOverFib2, ignoreFalseConditions, separator) +
ToString("isCloseOverFib3", isCloseOverFib3, ignoreFalseConditions, separator) +
ToString("isCloseOverFib4", isCloseOverFib4, ignoreFalseConditions, separator) +
ToString("isCloseOverFib5", isCloseOverFib5, ignoreFalseConditions, separator) +
ToString("isCloseUnderFib1", isCloseUnderFib1, ignoreFalseConditions, separator) +
ToString("isCloseUnderFib2", isCloseUnderFib2, ignoreFalseConditions, separator) +
ToString("isCloseUnderFib3", isCloseUnderFib3, ignoreFalseConditions, separator) +
ToString("isCloseUnderFib4", isCloseUnderFib4, ignoreFalseConditions, separator) +
ToString("isCloseUnderFib5", isCloseUnderFib5, ignoreFalseConditions, separator) +
ToString("isCloseCrossedOverFib1", isCloseCrossedOverFib1, ignoreFalseConditions, separator) +
ToString("isCloseCrossedOverFib2", isCloseCrossedOverFib2, ignoreFalseConditions, separator) +
ToString("isCloseCrossedOverFib3", isCloseCrossedOverFib3, ignoreFalseConditions, separator) +
ToString("isCloseCrossedOverFib4", isCloseCrossedOverFib4, ignoreFalseConditions, separator) +
ToString("isCloseCrossedOverFib5", isCloseCrossedOverFib5, ignoreFalseConditions, separator) +
ToString("isCloseCrossedUnderFib1", isCloseCrossedUnderFib1, ignoreFalseConditions, separator) +
ToString("isCloseCrossedUnderFib2", isCloseCrossedUnderFib2, ignoreFalseConditions, separator) +
ToString("isCloseCrossedUnderFib3", isCloseCrossedUnderFib3, ignoreFalseConditions, separator) +
ToString("isCloseCrossedUnderFib4", isCloseCrossedUnderFib4, ignoreFalseConditions, separator) +
ToString("isCloseCrossedUnderFib5", isCloseCrossedUnderFib5, ignoreFalseConditions, separator) +
ToString("isSCBullish", isSCBullish, ignoreFalseConditions, separator) + ToString("isSCBullish", isSCBullish, ignoreFalseConditions, separator) +
ToString("isSCHHBullish", isSCHHBullish, ignoreFalseConditions, separator) + ToString("isSCHHBullish", isSCHHBullish, ignoreFalseConditions, separator) +
ToString("isSCLLBullish", isSCLLBullish, ignoreFalseConditions, separator) + ToString("isSCLLBullish", isSCLLBullish, ignoreFalseConditions, separator) +
@@ -841,6 +912,7 @@ struct XPVConditions
ToString("isHCSwitchedToBearish", isHCSwitchedToBearish, ignoreFalseConditions, separator) + ToString("isHCSwitchedToBearish", isHCSwitchedToBearish, ignoreFalseConditions, separator) +
ToString("isHCHHSwitchedToBearish", isHCHHSwitchedToBearish, ignoreFalseConditions, separator) + ToString("isHCHHSwitchedToBearish", isHCHHSwitchedToBearish, ignoreFalseConditions, separator) +
ToString("isHCLLSwitchedToBeraish", isHCLLSwitchedToBeraish, ignoreFalseConditions, separator) + ToString("isHCLLSwitchedToBeraish", isHCLLSwitchedToBeraish, ignoreFalseConditions, separator) +
//
"" ""
// //
; ;
@@ -2711,6 +2783,97 @@ public:
// //
; ;
//
// Define Bars For Calculations ...
//
XOHCL cBar;
result = cBar.Init(
mSymbol,
mPeriod,
cIndex //
);
if (!result)
{
return result;
}
//
XOHCL pBar;
result = pBar.Init(
mSymbol,
mPeriod,
pIndex //
);
if (!result)
{
return result;
}
//
bool isCloseOverFib1 = cBar.close > conditions.fib1s[cIndex];
bool isCloseOverFib1Prev = pBar.close > conditions.fib1s[pIndex];
//
bool isCloseOverFib2 = cBar.close > conditions.fib2s[cIndex];
bool isCloseOverFib2Prev = pBar.close > conditions.fib2s[pIndex];
//
bool isCloseOverFib3 = cBar.close > conditions.fib3s[cIndex];
bool isCloseOverFib3Prev = pBar.close > conditions.fib3s[pIndex];
//
bool isCloseOverFib4 = cBar.close > conditions.fib4s[cIndex];
bool isCloseOverFib4Prev = pBar.close > conditions.fib4s[pIndex];
//
bool isCloseOverFib5 = cBar.close > conditions.fib5s[cIndex];
bool isCloseOverFib5Prev = pBar.close > conditions.fib5s[pIndex];
//
bool isCloseUnderFib1 = cBar.close < conditions.fib1s[cIndex];
bool isCloseUnderFib1Prev = pBar.close < conditions.fib1s[pIndex];
//
bool isCloseUnderFib2 = cBar.close < conditions.fib2s[cIndex];
bool isCloseUnderFib2Prev = pBar.close < conditions.fib2s[pIndex];
//
bool isCloseUnderFib3 = cBar.close < conditions.fib3s[cIndex];
bool isCloseUnderFib3Prev = pBar.close < conditions.fib3s[pIndex];
//
bool isCloseUnderFib4 = cBar.close < conditions.fib4s[cIndex];
bool isCloseUnderFib4Prev = pBar.close < conditions.fib4s[pIndex];
//
bool isCloseUnderFib5 = cBar.close < conditions.fib5s[cIndex];
bool isCloseUnderFib5Prev = pBar.close < conditions.fib5s[pIndex];
//
bool isCloseCrossedOverFib1 = isCloseOverFib1 &&
!isCloseOverFib1Prev;
bool isCloseCrossedOverFib2 = isCloseOverFib2 &&
!isCloseOverFib2Prev;
bool isCloseCrossedOverFib3 = isCloseOverFib3 &&
!isCloseOverFib3Prev;
bool isCloseCrossedOverFib4 = isCloseOverFib4 &&
!isCloseOverFib4Prev;
bool isCloseCrossedOverFib5 = isCloseOverFib5 &&
!isCloseOverFib5Prev;
//
bool isCloseCrossedUnderFib1 = isCloseUnderFib1 &&
!isCloseUnderFib1Prev;
bool isCloseCrossedUnderFib2 = isCloseUnderFib2 &&
!isCloseUnderFib2Prev;
bool isCloseCrossedUnderFib3 = isCloseUnderFib3 &&
!isCloseUnderFib3Prev;
bool isCloseCrossedUnderFib4 = isCloseUnderFib4 &&
!isCloseUnderFib4Prev;
bool isCloseCrossedUnderFib5 = isCloseUnderFib5 &&
!isCloseUnderFib5Prev;
// //
conditions.isNewPeak = isNewPeak; conditions.isNewPeak = isNewPeak;
conditions.isNewPeakOverLast = isNewPeakOverLast; conditions.isNewPeakOverLast = isNewPeakOverLast;
@@ -2721,6 +2884,26 @@ public:
conditions.isFiboIncreased = isFiboIncreased; conditions.isFiboIncreased = isFiboIncreased;
conditions.isFiboDecreased = isFiboDecreased; conditions.isFiboDecreased = isFiboDecreased;
conditions.isFiboSectionChanged = isFiboSectionChanged; conditions.isFiboSectionChanged = isFiboSectionChanged;
conditions.isCloseOverFib1 = isCloseOverFib1;
conditions.isCloseOverFib2 = isCloseOverFib2;
conditions.isCloseOverFib3 = isCloseOverFib3;
conditions.isCloseOverFib4 = isCloseOverFib4;
conditions.isCloseOverFib5 = isCloseOverFib5;
conditions.isCloseUnderFib1 = isCloseUnderFib1;
conditions.isCloseUnderFib2 = isCloseUnderFib2;
conditions.isCloseUnderFib3 = isCloseUnderFib3;
conditions.isCloseUnderFib4 = isCloseUnderFib4;
conditions.isCloseUnderFib5 = isCloseUnderFib5;
conditions.isCloseCrossedOverFib1 = isCloseCrossedOverFib1;
conditions.isCloseCrossedOverFib2 = isCloseCrossedOverFib2;
conditions.isCloseCrossedOverFib3 = isCloseCrossedOverFib3;
conditions.isCloseCrossedOverFib4 = isCloseCrossedOverFib4;
conditions.isCloseCrossedOverFib5 = isCloseCrossedOverFib5;
conditions.isCloseCrossedUnderFib1 = isCloseCrossedUnderFib1;
conditions.isCloseCrossedUnderFib2 = isCloseCrossedUnderFib2;
conditions.isCloseCrossedUnderFib3 = isCloseCrossedUnderFib3;
conditions.isCloseCrossedUnderFib4 = isCloseCrossedUnderFib4;
conditions.isCloseCrossedUnderFib5 = isCloseCrossedUnderFib5;
conditions.isSCBullish = isSCBullish; conditions.isSCBullish = isSCBullish;
conditions.isSCHHBullish = isSCHHBullish; conditions.isSCHHBullish = isSCHHBullish;
conditions.isSCLLBullish = isSCLLBullish; conditions.isSCLLBullish = isSCLLBullish;
@@ -2812,7 +2995,8 @@ private:
{ {
// //
int totalBars = CountBars(); int totalBars = CountBars();
if (totalBars > 1000) { if (totalBars > 1000)
{
totalBars = 1000; totalBars = 1000;
} }