This commit is contained in:
2025-02-26 19:19:50 +03:30
parent 959ef1fee4
commit 476bcaece8
5 changed files with 2501 additions and 89 deletions
+316 -22
View File
@@ -22,6 +22,7 @@
//
// Imports ...
#include "../Helpers/x-saherelm.x121.x3ma.helper.mq5"
#include "../Helpers/x-saherelm.x121.xatr.helper.mq5"
#include "../Helpers/x-saherelm.x121.xche.helper.mq5"
#include "../Helpers/x-saherelm.x121.xdon.helper.mq5"
@@ -44,6 +45,7 @@ struct X121Inputs
X121XSTRInputs xstrInputs;
X121XCHEInputs xcheInputs;
X121XDONInputs xdonInputs;
X121X3MAInputs x3maInputs;
X121XVWAPInputs xvwapInputs;
X121XTRENDInputs xtrendInputs;
@@ -197,6 +199,7 @@ struct X121Conditions
double strDownBuffer[];
double vwapMidBuffer[];
double upTrendBuffer[];
double x3maMidBuffer[];
double le1StartBuffer[];
double se1StartBuffer[];
double le2StartBuffer[];
@@ -208,6 +211,8 @@ struct X121Conditions
double vwapFastBuffer[];
double vwapSlowBuffer[];
double xhkSMLowBuffer[];
double x3maFastBuffer[];
double x3maSlowBuffer[];
double downTrendBuffer[];
double vwapPriceBuffer[];
double xhkRawLowBuffer[];
@@ -227,10 +232,13 @@ struct X121Conditions
double donOpenLowerBuffer[];
double donHighUpperBuffer[];
double donHighLowerBuffer[];
double x3maMidStateBuffer[];
double vwapFastStateBuffer[];
double vwapSlowStateBuffer[];
double donCloseUpperBuffer[];
double donCloseLowerBuffer[];
double x3maFastStateBuffer[];
double x3maSlowStateBuffer[];
//
double rsiSlope;
@@ -394,6 +402,31 @@ struct X121Conditions
bool isVWapSwitchedToBullishOrdered;
bool isVWapSwitchedToBearishOrdered;
//
bool isX3MaMidBullish;
bool isX3MaMidBearish;
bool isX3MaFastBullish;
bool isX3MaFastBearish;
bool isX3MaMidNeutural;
bool isX3MaSlowBullish;
bool isX3MaSlowBearish;
bool isX3MaFastOverMid;
bool isX3MaMidOverSlow;
bool isX3MaFastNeutural;
bool isX3MaSlowNeutural;
bool isX3MaFastUnderMid;
bool isX3MaMidUnderSlow;
bool isX3MaBullishState;
bool isX3MaBearishState;
bool isX3MaNeuturalState;
bool isX3MaBullishOrdered;
bool isX3MaBearishOrdered;
bool isX3MaSwitchedToBullishState;
bool isX3MaSwitchedToBearishState;
bool isX3MaSwitchedToNeuturalState;
bool isX3MaSwitchedToBullishOrdered;
bool isX3MaSwitchedToBearishOrdered;
//
bool isSMHKBullish;
bool isRawHKBullish;
@@ -643,6 +676,7 @@ struct X121Conditions
Clean(strDownBuffer);
Clean(vwapMidBuffer);
Clean(upTrendBuffer);
Clean(x3maMidBuffer);
Clean(le1StartBuffer);
Clean(se1StartBuffer);
Clean(le2StartBuffer);
@@ -654,6 +688,8 @@ struct X121Conditions
Clean(vwapFastBuffer);
Clean(vwapSlowBuffer);
Clean(xhkSMLowBuffer);
Clean(x3maFastBuffer);
Clean(x3maSlowBuffer);
Clean(downTrendBuffer);
Clean(vwapPriceBuffer);
Clean(xhkRawLowBuffer);
@@ -673,10 +709,13 @@ struct X121Conditions
Clean(donOpenLowerBuffer);
Clean(donHighUpperBuffer);
Clean(donHighLowerBuffer);
Clean(x3maMidStateBuffer);
Clean(vwapFastStateBuffer);
Clean(vwapSlowStateBuffer);
Clean(donCloseUpperBuffer);
Clean(donCloseLowerBuffer);
Clean(x3maFastStateBuffer);
Clean(x3maSlowStateBuffer);
//
ArraySetAsSeries(maBuffer, true);
@@ -710,6 +749,7 @@ struct X121Conditions
ArraySetAsSeries(strDownBuffer, true);
ArraySetAsSeries(vwapMidBuffer, true);
ArraySetAsSeries(upTrendBuffer, true);
ArraySetAsSeries(x3maMidBuffer, true);
ArraySetAsSeries(le1StartBuffer, true);
ArraySetAsSeries(se1StartBuffer, true);
ArraySetAsSeries(le2StartBuffer, true);
@@ -721,6 +761,8 @@ struct X121Conditions
ArraySetAsSeries(vwapFastBuffer, true);
ArraySetAsSeries(vwapSlowBuffer, true);
ArraySetAsSeries(xhkSMLowBuffer, true);
ArraySetAsSeries(x3maFastBuffer, true);
ArraySetAsSeries(x3maSlowBuffer, true);
ArraySetAsSeries(downTrendBuffer, true);
ArraySetAsSeries(vwapPriceBuffer, true);
ArraySetAsSeries(xhkRawLowBuffer, true);
@@ -740,10 +782,13 @@ struct X121Conditions
ArraySetAsSeries(donOpenLowerBuffer, true);
ArraySetAsSeries(donHighUpperBuffer, true);
ArraySetAsSeries(donHighLowerBuffer, true);
ArraySetAsSeries(x3maMidStateBuffer, true);
ArraySetAsSeries(vwapFastStateBuffer, true);
ArraySetAsSeries(vwapSlowStateBuffer, true);
ArraySetAsSeries(donCloseUpperBuffer, true);
ArraySetAsSeries(donCloseLowerBuffer, true);
ArraySetAsSeries(x3maFastStateBuffer, true);
ArraySetAsSeries(x3maSlowStateBuffer, true);
//
cheMin = 0;
@@ -891,48 +936,56 @@ struct X121Conditions
//
// VWAP ...
//
isVWapFastBullish = false;
isVWapFastBearish = false;
isVWapFastNeutural = false;
//
isVWapMidBullish = false;
isVWapMidBearish = false;
isVWapMidNeutural = false;
//
isVWapSlowBullish = false;
isVWapSlowBearish = false;
isVWapSlowNeutural = false;
//
isVWapFastBullish = false;
isVWapFastBearish = false;
isVWapFastOverMid = false;
isVWapMidOverSlow = false;
//
isVWapFastNeutural = false;
isVWapSlowNeutural = false;
isVWapFastUnderMid = false;
isVWapMidUnderSlow = false;
//
isVWapBullishState = false;
isVWapBearishState = false;
isVWapNeuturalState = false;
//
isVWapBullishOrdered = false;
isVWapBearishOrdered = false;
//
isVWapSwitchedToBullishState = false;
isVWapSwitchedToBearishState = false;
//
isVWapSwitchedToNeuturalState = false;
isVWapSwitchedToBullishOrdered = false;
isVWapSwitchedToBearishOrdered = false;
//
// X3MA ...
isX3MaMidBullish = false;
isX3MaMidBearish = false;
isX3MaFastBullish = false;
isX3MaFastBearish = false;
isX3MaMidNeutural = false;
isX3MaSlowBullish = false;
isX3MaSlowBearish = false;
isX3MaFastOverMid = false;
isX3MaMidOverSlow = false;
isX3MaFastNeutural = false;
isX3MaSlowNeutural = false;
isX3MaFastUnderMid = false;
isX3MaMidUnderSlow = false;
isX3MaBullishState = false;
isX3MaBearishState = false;
isX3MaNeuturalState = false;
isX3MaBullishOrdered = false;
isX3MaBearishOrdered = false;
isX3MaSwitchedToBullishState = false;
isX3MaSwitchedToBearishState = false;
isX3MaSwitchedToNeuturalState = false;
isX3MaSwitchedToBullishOrdered = false;
isX3MaSwitchedToBearishOrdered = false;
//
// CHE ...
@@ -1474,6 +1527,97 @@ struct X121Conditions
}
}
//
// X3MA ...
//
if (isX3MaBullishState)
{
bullishScore += score;
}
if (isX3MaBullishOrdered)
{
bullishScore += score;
}
if (isX3MaSwitchedToBullishState)
{
bullishScore += highScore;
}
if (isX3MaSwitchedToBullishOrdered)
{
bullishScore += highScore;
}
if (!isX3MaBullishState &&
!isX3MaSwitchedToBullishState)
{
//
if (isX3MaFastBullish)
{
bullishScore += minScore;
}
if (isX3MaSlowBullish)
{
bullishScore += minScore;
}
}
if (!isX3MaBullishOrdered &&
!isX3MaSwitchedToBullishOrdered)
{
//
if (isX3MaFastOverMid)
{
bullishScore += minScore;
}
if (isX3MaMidOverSlow)
{
bullishScore += minScore;
}
}
//
if (isX3MaBearishState)
{
bearishScore += score;
}
if (isX3MaBearishOrdered)
{
bearishScore += score;
}
if (isX3MaSwitchedToBearishState)
{
bearishScore += highScore;
}
if (isX3MaSwitchedToBearishOrdered)
{
bearishScore += highScore;
}
if (!isX3MaBearishState &&
!isX3MaSwitchedToBearishState)
{
//
if (isX3MaFastBearish)
{
bearishScore += minScore;
}
if (isX3MaSlowBearish)
{
bearishScore += minScore;
}
}
if (!isX3MaBearishOrdered &&
!isX3MaSwitchedToBearishOrdered)
{
//
if (isX3MaFastUnderMid)
{
bearishScore += minScore;
}
if (isX3MaMidUnderSlow)
{
bearishScore += minScore;
}
}
//
// XSMHK ...
@@ -1705,6 +1849,33 @@ struct X121Conditions
ToString("isVWapSwitchedToNeuturalState", isVWapSwitchedToNeuturalState, ignoreFalseConditions, separator) +
//
"-----------------------" + separator +
"X3MA ..." + separator +
"-----------------------" + separator +
ToString("isX3MaMidBullish", isX3MaMidBullish, ignoreFalseConditions, separator) +
ToString("isX3MaMidBearish", isX3MaMidBearish, ignoreFalseConditions, separator) +
ToString("isX3MaFastBullish", isX3MaFastBullish, ignoreFalseConditions, separator) +
ToString("isX3MaFastBearish", isX3MaFastBearish, ignoreFalseConditions, separator) +
ToString("isX3MaMidNeutural", isX3MaMidNeutural, ignoreFalseConditions, separator) +
ToString("isX3MaSlowBullish", isX3MaSlowBullish, ignoreFalseConditions, separator) +
ToString("isX3MaSlowBearish", isX3MaSlowBearish, ignoreFalseConditions, separator) +
ToString("isX3MaFastOverMid", isX3MaFastOverMid, ignoreFalseConditions, separator) +
ToString("isX3MaMidOverSlow", isX3MaMidOverSlow, ignoreFalseConditions, separator) +
ToString("isX3MaFastNeutural", isX3MaFastNeutural, ignoreFalseConditions, separator) +
ToString("isX3MaSlowNeutural", isX3MaSlowNeutural, ignoreFalseConditions, separator) +
ToString("isX3MaFastUnderMid", isX3MaFastUnderMid, ignoreFalseConditions, separator) +
ToString("isX3MaMidUnderSlow", isX3MaMidUnderSlow, ignoreFalseConditions, separator) +
ToString("isX3MaBullishState", isX3MaBullishState, ignoreFalseConditions, separator) +
ToString("isX3MaBearishState", isX3MaBearishState, ignoreFalseConditions, separator) +
ToString("isX3MaNeuturalState", isX3MaNeuturalState, ignoreFalseConditions, separator) +
ToString("isX3MaBullishOrdered", isX3MaBullishOrdered, ignoreFalseConditions, separator) +
ToString("isX3MaBearishOrdered", isX3MaBearishOrdered, ignoreFalseConditions, separator) +
ToString("isX3MaSwitchedToBullishState", isX3MaSwitchedToBullishState, ignoreFalseConditions, separator) +
ToString("isX3MaSwitchedToBearishState", isX3MaSwitchedToBearishState, ignoreFalseConditions, separator) +
ToString("isX3MaSwitchedToNeuturalState", isX3MaSwitchedToNeuturalState, ignoreFalseConditions, separator) +
ToString("isX3MaSwitchedToBullishOrdered", isX3MaSwitchedToBullishOrdered, ignoreFalseConditions, separator) +
ToString("isX3MaSwitchedToBearishOrdered", isX3MaSwitchedToBearishOrdered, ignoreFalseConditions, separator) +
//
"-----------------------" + separator +
"CHE ..." + separator +
"-----------------------" + separator +
ToString("isChe1Bullish", isChe1Bullish, ignoreFalseConditions, separator) +
@@ -1913,6 +2084,7 @@ class XCX121Helper : public XCBase
XCX121XSTRHelper *xstrHelper;
XCX121XCHEHelper *xcheHelper;
XCX121XDONHelper *xdonHelper;
XCX121X3MAHelper *x3maHelper;
XCX121XVWAPHelper *xvwapHelper;
XCX121XTRENDHelper *xtrendHelper;
@@ -1933,6 +2105,7 @@ class XCX121Helper : public XCBase
delete xstrHelper;
delete xcheHelper;
delete xdonHelper;
delete x3maHelper;
delete xvwapHelper;
delete xtrendHelper;
@@ -1943,6 +2116,7 @@ class XCX121Helper : public XCBase
ZeroMemory(xstrHelper);
ZeroMemory(xcheHelper);
ZeroMemory(xdonHelper);
ZeroMemory(x3maHelper);
ZeroMemory(xvwapHelper);
ZeroMemory(xtrendHelper);
}
@@ -2005,6 +2179,7 @@ class XCX121Helper : public XCBase
xstrInputs = inputs.xstrInputs;
xcheInputs = inputs.xcheInputs;
xdonInputs = inputs.xdonInputs;
x3maInputs = inputs.x3maInputs;
xvwapInputs = inputs.xvwapInputs;
xtrendInputs = inputs.xtrendInputs;
@@ -2089,6 +2264,19 @@ class XCX121Helper : public XCBase
return result;
}
//
// X3MA ...
x3maHelper = new XCX121X3MAHelper();
result = x3maHelper.Init(
symbol,
period,
x3maInputs //
);
if (!result)
{
return result;
}
//
// XVWAP ...
xvwapHelper = new XCX121XVWAPHelper();
@@ -2273,6 +2461,28 @@ class XCX121Helper : public XCBase
return result;
}
//
// X3MA ...
bool Get3MAConditions(
X121X3MAConditions &conditions, //
int barIndex = 0, //
int loopback = 5 //
)
{
//
bool result = false;
//
result = x3maHelper.GetConditions(
conditions,
barIndex,
loopback //
);
//
return result;
}
//
// XVWAP ...
bool GetVWAPConditions(
@@ -2475,6 +2685,19 @@ class XCX121Helper : public XCBase
return result;
}
//
// X3MA ...
X121X3MAConditions x3maConditions;
result = Get3MAConditions(
x3maConditions,
barIndex,
loopback //
);
if (!result)
{
return result;
}
//
// XVWAP ...
X121XVWAPConditions xvwapConditions;
@@ -3031,6 +3254,76 @@ class XCX121Helper : public XCBase
conditions.isRejectedDonCloseUpper = xdonConditions.isRejectedDonCloseUpper;
conditions.isRejectedDonCloseLower = xdonConditions.isRejectedDonCloseLower;
//
// X3MA ...
//
// Buffers ...
//
Copy(
x3maConditions.x3maFastBuffer,
conditions.x3maFastBuffer //
);
//
Copy(
x3maConditions.x3maMidBuffer,
conditions.x3maMidBuffer //
);
//
Copy(
x3maConditions.x3maSlowBuffer,
conditions.x3maSlowBuffer //
);
//
Copy(
x3maConditions.x3maFastStateBuffer,
conditions.x3maFastStateBuffer //
);
//
Copy(
x3maConditions.x3maMidStateBuffer,
conditions.x3maMidStateBuffer //
);
//
Copy(
x3maConditions.x3maSlowStateBuffer,
conditions.x3maSlowStateBuffer //
);
//
// Conditions ...
//
conditions.isX3MaMidBullish = x3maConditions.isX3MaMidBullish;
conditions.isX3MaMidBearish = x3maConditions.isX3MaMidBearish;
conditions.isX3MaFastBullish = x3maConditions.isX3MaFastBullish;
conditions.isX3MaFastBearish = x3maConditions.isX3MaFastBearish;
conditions.isX3MaMidNeutural = x3maConditions.isX3MaMidNeutural;
conditions.isX3MaSlowBullish = x3maConditions.isX3MaSlowBullish;
conditions.isX3MaSlowBearish = x3maConditions.isX3MaSlowBearish;
conditions.isX3MaFastOverMid = x3maConditions.isX3MaFastOverMid;
conditions.isX3MaMidOverSlow = x3maConditions.isX3MaMidOverSlow;
conditions.isX3MaFastNeutural = x3maConditions.isX3MaFastNeutural;
conditions.isX3MaSlowNeutural = x3maConditions.isX3MaSlowNeutural;
conditions.isX3MaFastUnderMid = x3maConditions.isX3MaFastUnderMid;
conditions.isX3MaMidUnderSlow = x3maConditions.isX3MaMidUnderSlow;
conditions.isX3MaBullishState = x3maConditions.isX3MaBullishState;
conditions.isX3MaBearishState = x3maConditions.isX3MaBearishState;
conditions.isX3MaNeuturalState = x3maConditions.isX3MaNeuturalState;
conditions.isX3MaBullishOrdered = x3maConditions.isX3MaBullishOrdered;
conditions.isX3MaBearishOrdered = x3maConditions.isX3MaBearishOrdered;
conditions.isX3MaSwitchedToBullishState = x3maConditions.isX3MaSwitchedToBullishState;
conditions.isX3MaSwitchedToBearishState = x3maConditions.isX3MaSwitchedToBearishState;
conditions.isX3MaSwitchedToNeuturalState = x3maConditions.isX3MaSwitchedToNeuturalState;
conditions.isX3MaSwitchedToBullishOrdered = x3maConditions.isX3MaSwitchedToBullishOrdered;
conditions.isX3MaSwitchedToBearishOrdered = x3maConditions.isX3MaSwitchedToBearishOrdered;
//
// XVWAP ...
@@ -3740,6 +4033,7 @@ class XCX121Helper : public XCBase
X121XDONInputs xdonInputs;
X121XSTRInputs xstrInputs;
X121XCHEInputs xcheInputs;
X121X3MAInputs x3maInputs;
X121XVWAPInputs xvwapInputs;
X121XTRENDInputs xtrendInputs;
File diff suppressed because it is too large Load Diff