add some new conditions to XPV and also implement usage of XRL in setup class ...
This commit is contained in:
@@ -28,6 +28,7 @@
|
||||
#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.xpv.helper.mq5"
|
||||
#include "../Helpers/x-saherelm.xtd.helper.mq5"
|
||||
@@ -230,6 +231,7 @@ struct X121SetupInputs
|
||||
|
||||
//
|
||||
// Helpers Inputs ...
|
||||
XRLInputs rlInputs; // XRL Inputs
|
||||
XMCInputs mcInputs; // XMC Inputs
|
||||
XPVInputs pvInputs; // XPV Inputs
|
||||
XTDInputs tdInputs; // XTD Inputs
|
||||
@@ -271,6 +273,7 @@ struct X121SetupInputs
|
||||
bool Init(
|
||||
string _symbol, // Symbol
|
||||
ENUM_TIMEFRAMES _period, // Time Frame
|
||||
XRLInputs &_rlInputs, // XRL Inputs
|
||||
XMCInputs &_mcInputs, // XMC Inputs
|
||||
XPVInputs &_pvInputs, // XPV Inputs
|
||||
XTDInputs &_tdInputs, // XTD Inputs
|
||||
@@ -334,6 +337,7 @@ struct X121SetupInputs
|
||||
period = NULL;
|
||||
|
||||
//
|
||||
rlInputs.Clean();
|
||||
mcInputs.Clean();
|
||||
pvInputs.Clean();
|
||||
tdInputs.Clean();
|
||||
@@ -359,6 +363,7 @@ struct X121SetupInputs
|
||||
void Default()
|
||||
{
|
||||
//
|
||||
rlInputs.Default();
|
||||
mcInputs.Default();
|
||||
pvInputs.Default();
|
||||
tdInputs.Default();
|
||||
@@ -398,6 +403,13 @@ struct X121SetupInputs
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
result = rlInputs.IsValid();
|
||||
if (!result)
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
result = tdInputs.IsValid();
|
||||
if (!result)
|
||||
@@ -541,6 +553,7 @@ struct X121SetupConditions
|
||||
|
||||
//
|
||||
// Conditions ...
|
||||
XRLConditions rlConditions;
|
||||
XMCConditions mcConditions;
|
||||
XPVConditions pvConditions;
|
||||
XTDConditions tdConditions;
|
||||
@@ -585,6 +598,7 @@ struct X121SetupConditions
|
||||
Clean(macdSignal);
|
||||
|
||||
//
|
||||
rlConditions.Clean();
|
||||
mcConditions.Clean();
|
||||
tdConditions.Clean();
|
||||
hkConditions.Clean();
|
||||
@@ -617,6 +631,14 @@ struct X121SetupConditions
|
||||
double tempBullishScore = 0;
|
||||
double tempBearishScore = 0;
|
||||
|
||||
//
|
||||
rlConditions.GenerateScore(
|
||||
tempBullishScore,
|
||||
tempBearishScore //
|
||||
);
|
||||
bullishScore += tempBullishScore;
|
||||
bearishScore += tempBearishScore;
|
||||
|
||||
//
|
||||
mcConditions.GenerateScore(
|
||||
tempBullishScore,
|
||||
@@ -796,6 +818,7 @@ struct X121SetupConditions
|
||||
|
||||
//
|
||||
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 tdSummary = tdConditions.GenerateSummary(false, true, false, ignoreFalseConditions);
|
||||
string hkSummary = hkConditions.GenerateSummary(false, true, false, ignoreFalseConditions);
|
||||
@@ -817,6 +840,7 @@ struct X121SetupConditions
|
||||
string conditionsStr =
|
||||
//
|
||||
pvSummary + separator +
|
||||
rlSummary + separator +
|
||||
mcSummary + separator +
|
||||
tdSummary + separator +
|
||||
hkSummary + separator +
|
||||
@@ -2131,7 +2155,7 @@ struct X121SignalGenerator
|
||||
// XICH ...
|
||||
conditions.ichConditions.isClosedOverKijunSen &&
|
||||
(conditions.ichConditions.isTenkanSenOverKijunSen ||
|
||||
conditions.ichConditions.isTenkanSenCrossedOverKijunSen)
|
||||
conditions.ichConditions.isTenkanSenCrossedOverKijunSen)
|
||||
//
|
||||
)
|
||||
//
|
||||
@@ -3860,6 +3884,7 @@ class XSCX121Setup : public XSCBaseAlert
|
||||
public:
|
||||
//
|
||||
// Props ...
|
||||
XSCXRLHelper *rlHelper;
|
||||
XSCXMCHelper *mcHelper;
|
||||
XSCXPVHelper *pvHelper;
|
||||
XSCXTDHelper *tdHelper;
|
||||
@@ -3888,6 +3913,7 @@ public:
|
||||
void ~XSCX121Setup()
|
||||
{
|
||||
//
|
||||
delete rlHelper;
|
||||
delete mcHelper;
|
||||
delete pvHelper;
|
||||
delete tdHelper;
|
||||
@@ -3959,6 +3985,19 @@ public:
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
// XRL ...
|
||||
rlHelper = new XSCXRLHelper();
|
||||
result = rlHelper.Init(
|
||||
inputs.symbol,
|
||||
inputs.period,
|
||||
inputs.rlInputs //
|
||||
);
|
||||
if (!result)
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
// XSLN ...
|
||||
slnHelper = new XSCXSLNHelper();
|
||||
@@ -4216,6 +4255,17 @@ public:
|
||||
conditions.period = GetPeriod();
|
||||
conditions.time = TimeCurrent();
|
||||
|
||||
//
|
||||
result = rlHelper.GetConditions(
|
||||
conditions.rlConditions,
|
||||
barIndex,
|
||||
loopback //
|
||||
);
|
||||
if (!result)
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
result = hdtHelper.GetConditions(
|
||||
conditions.htdConditions,
|
||||
|
||||
@@ -63,8 +63,8 @@ input group "Risk Management";
|
||||
input double x121EAVolume = 0.01; // Static Volume
|
||||
input double x121EATPPoint = 1000; // TP Point
|
||||
input double x121EASLPoint = 1000; // SL Point
|
||||
input bool x121EAIgnoreSL = false; // Ignore Calculated SL
|
||||
input bool x121EAIgnoreTP = false; // Ignore Calculated TP
|
||||
input bool x121EAIgnoreSL = false; // Ignore Calculated SL
|
||||
input bool x121EAIgnoreTP = false; // Ignore Calculated TP
|
||||
input bool x121EACloseOnOpposit = false; // Close all Positions on Opposit
|
||||
input int x121EAMaxAllowedTrades = 0; // Max Allowed Positions Per Symbol
|
||||
input bool x121EAUseMaxAllowedPerDirection = true; // Use Max Allowed Positions Per Direction
|
||||
@@ -434,6 +434,12 @@ bool InitialEA()
|
||||
//
|
||||
void X121PreConfigureStyles(X121SetupInputs &inputs)
|
||||
{
|
||||
//
|
||||
// XRL ...
|
||||
inputs.rlInputs.showFast = false;
|
||||
inputs.rlInputs.showSlow = false;
|
||||
inputs.rlInputs.showVerifier = false;
|
||||
|
||||
//
|
||||
// XHTD ...
|
||||
inputs.htdInputs.show = false;
|
||||
|
||||
@@ -391,6 +391,37 @@ struct XPVConditions
|
||||
bool isHCHHSwitchedToBearish;
|
||||
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()
|
||||
{
|
||||
@@ -442,6 +473,26 @@ struct XPVConditions
|
||||
isFiboIncreased = false;
|
||||
isFiboDecreased = 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;
|
||||
isSCHHBullish = false;
|
||||
isSCLLBullish = false;
|
||||
@@ -793,6 +844,26 @@ struct XPVConditions
|
||||
ToString("isFiboIncreased", isFiboIncreased, ignoreFalseConditions, separator) +
|
||||
ToString("isFiboDecreased", isFiboDecreased, 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("isSCHHBullish", isSCHHBullish, ignoreFalseConditions, separator) +
|
||||
ToString("isSCLLBullish", isSCLLBullish, ignoreFalseConditions, separator) +
|
||||
@@ -841,6 +912,7 @@ struct XPVConditions
|
||||
ToString("isHCSwitchedToBearish", isHCSwitchedToBearish, ignoreFalseConditions, separator) +
|
||||
ToString("isHCHHSwitchedToBearish", isHCHHSwitchedToBearish, 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.isNewPeakOverLast = isNewPeakOverLast;
|
||||
@@ -2721,6 +2884,26 @@ public:
|
||||
conditions.isFiboIncreased = isFiboIncreased;
|
||||
conditions.isFiboDecreased = isFiboDecreased;
|
||||
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.isSCHHBullish = isSCHHBullish;
|
||||
conditions.isSCLLBullish = isSCLLBullish;
|
||||
@@ -2812,7 +2995,8 @@ private:
|
||||
{
|
||||
//
|
||||
int totalBars = CountBars();
|
||||
if (totalBars > 1000) {
|
||||
if (totalBars > 1000)
|
||||
{
|
||||
totalBars = 1000;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user