This commit is contained in:
2025-03-26 05:25:00 +03:30
parent a5511f2f69
commit 8278d132dd
10 changed files with 3686 additions and 30 deletions
+292 -4
View File
@@ -28,6 +28,7 @@
#include "../Helpers/x-saherelm.x121.xche.helper.mq5"
#include "../Helpers/x-saherelm.x121.xdon.helper.mq5"
#include "../Helpers/x-saherelm.x121.xhk.helper.mq5"
#include "../Helpers/x-saherelm.x121.xich.helper.mq5"
#include "../Helpers/x-saherelm.x121.xmas.helper.mq5"
#include "../Helpers/x-saherelm.x121.xpv.helper.mq5"
#include "../Helpers/x-saherelm.x121.xstr.helper.mq5"
@@ -43,6 +44,7 @@ struct X121Inputs
X121XCCInputs xccInputs;
X121XPVInputs xpvInputs;
X121XHKInputs xhkInputs;
X121XICHInputs xichInputs;
X121XMASInputs xmasInputs;
X121XATRInputs xatrInputs;
X121XSTRInputs xstrInputs;
@@ -70,6 +72,7 @@ struct X121Inputs
xccInputs.Clean();
xpvInputs.Clean();
xhkInputs.Clean();
xichInputs.Clean();
xmasInputs.Clean();
xatrInputs.Clean();
xstrInputs.Clean();
@@ -90,6 +93,7 @@ struct X121Inputs
xccInputs.Default();
xpvInputs.Default();
xhkInputs.Default();
xichInputs.Default();
xmasInputs.Default();
xatrInputs.Default();
xstrInputs.Default();
@@ -115,6 +119,7 @@ struct X121Inputs
xccInputs.IsValid() &&
xpvInputs.IsValid() &&
xhkInputs.IsValid() &&
xichInputs.IsValid() &&
xmasInputs.IsValid() &&
xatrInputs.IsValid() &&
xstrInputs.IsValid() &&
@@ -146,6 +151,7 @@ struct X121Inputs
int xstrMax = xstrInputs.Max();
int xcheMax = xcheInputs.Max();
int xdonMax = xdonInputs.Max();
int xichMax = xichInputs.Max();
int xvwapMax = xvwapInputs.Max();
//
@@ -155,6 +161,7 @@ struct X121Inputs
result = MathMax(result, xstrMax);
result = MathMax(result, xcheMax);
result = MathMax(result, xdonMax);
result = MathMax(result, xichMax);
result = MathMax(result, xvwapMax);
//
@@ -203,12 +210,13 @@ struct X121Conditions
double strUpBuffer[];
double downTBuffer[];
double masMidBuffer[];
double masUpperBuffer[];
double masLowerBuffer[];
double strDownBuffer[];
double vwapMidBuffer[];
double upTrendBuffer[];
double x3maMidBuffer[];
double masUpperBuffer[];
double masLowerBuffer[];
double kijunSenBuffer[];
double le1StartBuffer[];
double se1StartBuffer[];
double le2StartBuffer[];
@@ -223,6 +231,7 @@ struct X121Conditions
double x3maFastBuffer[];
double x3maSlowBuffer[];
double supportsBuffer[];
double tenkanSenBuffer[];
double downTrendBuffer[];
double vwapPriceBuffer[];
double xhkRawLowBuffer[];
@@ -232,6 +241,9 @@ struct X121Conditions
double xhkRawHighBuffer[];
double xhkSMCloseBuffer[];
double vwapVolumeBuffer[];
double chikouSpanBuffer[];
double senkouSpanABuffer[];
double senkouSpanBBuffer[];
double peaksGoldenBuffer[];
double valesGoldenBuffer[];
double xhkRawCloseBuffer[];
@@ -405,6 +417,19 @@ struct X121Conditions
bool isRawHKSwitchedToBearish;
bool isRawHKSwitchedToBullish;
//
// XICH ...
//
bool isSenkouSpanAOverB;
bool isSenkouSpanAUnderB;
bool isTenkanSenOverKijunSen;
bool isTenkanSenUnderKijunSen;
bool isSenkouSpanACrossedOverB;
bool isSenkouSpanACrossedUnderB;
bool isTenkanSenCrossedOverKijunSen;
bool isTenkanSenCrossedUnderKijunSen;
//
// Complex Conditions ...
@@ -568,15 +593,20 @@ struct X121Conditions
Clean(x3maFastBuffer);
Clean(x3maSlowBuffer);
Clean(supportsBuffer);
Clean(kijunSenBuffer);
Clean(tenkanSenBuffer);
Clean(downTrendBuffer);
Clean(vwapPriceBuffer);
Clean(xhkRawLowBuffer);
Clean(xhkSMOpenBuffer);
Clean(xhkSMHighBuffer);
Clean(chikouSpanBuffer);
Clean(xhkRawOpenBuffer);
Clean(xhkRawHighBuffer);
Clean(xhkSMCloseBuffer);
Clean(vwapVolumeBuffer);
Clean(senkouSpanABuffer);
Clean(senkouSpanBBuffer);
Clean(peaksGoldenBuffer);
Clean(valesGoldenBuffer);
Clean(xhkRawCloseBuffer);
@@ -649,15 +679,20 @@ struct X121Conditions
ArraySetAsSeries(x3maFastBuffer, true);
ArraySetAsSeries(x3maSlowBuffer, true);
ArraySetAsSeries(supportsBuffer, true);
ArraySetAsSeries(kijunSenBuffer, true);
ArraySetAsSeries(tenkanSenBuffer, true);
ArraySetAsSeries(downTrendBuffer, true);
ArraySetAsSeries(vwapPriceBuffer, true);
ArraySetAsSeries(xhkRawLowBuffer, true);
ArraySetAsSeries(xhkSMOpenBuffer, true);
ArraySetAsSeries(xhkSMHighBuffer, true);
ArraySetAsSeries(chikouSpanBuffer, true);
ArraySetAsSeries(xhkRawOpenBuffer, true);
ArraySetAsSeries(xhkRawHighBuffer, true);
ArraySetAsSeries(xhkSMCloseBuffer, true);
ArraySetAsSeries(vwapVolumeBuffer, true);
ArraySetAsSeries(senkouSpanABuffer, true);
ArraySetAsSeries(senkouSpanBBuffer, true);
ArraySetAsSeries(peaksGoldenBuffer, true);
ArraySetAsSeries(valesGoldenBuffer, true);
ArraySetAsSeries(xhkRawCloseBuffer, true);
@@ -867,6 +902,17 @@ struct X121Conditions
isSMHKSwitchedToBullish = false;
isRawHKSwitchedToBullish = false;
//
// XICH ...
isSenkouSpanAOverB = false;
isSenkouSpanAUnderB = false;
isTenkanSenOverKijunSen = false;
isTenkanSenUnderKijunSen = false;
isSenkouSpanACrossedOverB = false;
isSenkouSpanACrossedUnderB = false;
isTenkanSenCrossedOverKijunSen = false;
isTenkanSenCrossedUnderKijunSen = false;
//
// Complex Conditions ...
@@ -1396,6 +1442,41 @@ struct X121Conditions
bearishScore += highScore;
}
//
// XICH ...
if (isSenkouSpanAOverB)
{
bullishScore += minScore;
}
if (isTenkanSenOverKijunSen)
{
bullishScore += minScore;
}
if (isSenkouSpanACrossedOverB)
{
bullishScore += highScore;
}
if (isTenkanSenCrossedOverKijunSen)
{
bullishScore += highScore;
}
if (isSenkouSpanAUnderB)
{
bearishScore += minScore;
}
if (isTenkanSenUnderKijunSen)
{
bearishScore += minScore;
}
if (isSenkouSpanACrossedUnderB)
{
bearishScore += highScore;
}
if (isTenkanSenCrossedUnderKijunSen)
{
bearishScore += highScore;
}
//
// Complex Conditions ...
@@ -1896,6 +1977,18 @@ struct X121Conditions
ToString("isRawHKSwitchedToBullish", isRawHKSwitchedToBullish, ignoreFalseConditions, separator) +
//
"-----------------------" + separator +
"XICH ..." + separator +
"-----------------------" + separator +
ToString("isTenkanSenOverKijunSen", isTenkanSenOverKijunSen, ignoreFalseConditions, separator) +
ToString("isTenkanSenUnderKijunSen", isTenkanSenUnderKijunSen, ignoreFalseConditions, separator) +
ToString("isTenkanSenCrossedOverKijunSen", isTenkanSenCrossedOverKijunSen, ignoreFalseConditions, separator) +
ToString("isTenkanSenCrossedUnderKijunSen", isTenkanSenCrossedUnderKijunSen, ignoreFalseConditions, separator) +
ToString("isSenkouSpanAOverB", isSenkouSpanAOverB, ignoreFalseConditions, separator) +
ToString("isSenkouSpanAUnderB", isSenkouSpanAUnderB, ignoreFalseConditions, separator) +
ToString("isSenkouSpanACrossedOverB", isSenkouSpanACrossedOverB, ignoreFalseConditions, separator) +
ToString("isSenkouSpanACrossedUnderB", isSenkouSpanACrossedUnderB, ignoreFalseConditions, separator) +
//
"-----------------------" + separator +
"Slopes ..." + separator +
"-----------------------" + separator +
ToString("isRsiSlopeBullish", isRsiSlopeBullish, ignoreFalseConditions, separator) +
@@ -1919,7 +2012,6 @@ struct X121Conditions
ToString("isSarIncreased", isSarIncreased, ignoreFalseConditions, separator) +
ToString("isSarDecreased", isSarDecreased, ignoreFalseConditions, separator) +
ToString("isSarEqualsToPeak", isSarEqualsToPeak, ignoreFalseConditions, separator) +
ToString("isStrEqualsToPeak", isStrEqualsToPeak, ignoreFalseConditions, separator) +
ToString("isStrEqualsToVale", isStrEqualsToVale, ignoreFalseConditions, separator) +
ToString("isPeakOverAtrUpper", isPeakOverAtrUpper, ignoreFalseConditions, separator) +
@@ -2025,6 +2117,7 @@ class XCX121Helper : public XCBase
XCX121XCCHelper *xccHelper;
XCX121XPVHelper *xpvHelper;
XCX121XHKHelper *xhkHelper;
XCX121XICHHelper *xichHelper;
XCX121XMASHelper *xmasHelper;
XCX121XATRHelper *xatrHelper;
XCX121XSTRHelper *xstrHelper;
@@ -2048,6 +2141,7 @@ class XCX121Helper : public XCBase
xccInputs.Clean();
xpvInputs.Clean();
xhkInputs.Clean();
xichInputs.Clean();
xmasInputs.Clean();
xatrInputs.Clean();
xdonInputs.Clean();
@@ -2060,6 +2154,7 @@ class XCX121Helper : public XCBase
delete xccHelper;
delete xpvHelper;
delete xhkHelper;
delete xichHelper;
delete xmasHelper;
delete xatrHelper;
delete xstrHelper;
@@ -2072,6 +2167,7 @@ class XCX121Helper : public XCBase
ZeroMemory(xccHelper);
ZeroMemory(xpvHelper);
ZeroMemory(xhkHelper);
ZeroMemory(xichHelper);
ZeroMemory(xmasHelper);
ZeroMemory(xatrHelper);
ZeroMemory(xstrHelper);
@@ -2136,6 +2232,7 @@ class XCX121Helper : public XCBase
xccInputs = inputs.xccInputs;
xpvInputs = inputs.xpvInputs;
xhkInputs = inputs.xhkInputs;
xichInputs = inputs.xichInputs;
xmasInputs = inputs.xmasInputs;
xatrInputs = inputs.xatrInputs;
xstrInputs = inputs.xstrInputs;
@@ -2212,6 +2309,19 @@ class XCX121Helper : public XCBase
return result;
}
//
// XICH ...
xichHelper = new XCX121XICHHelper();
result = xichHelper.Init(
symbol,
period,
xichInputs //
);
if (!result)
{
return result;
}
//
// XSTR ...
xstrHelper = new XCX121XSTRHelper();
@@ -2369,6 +2479,28 @@ class XCX121Helper : public XCBase
return result;
}
//
// XICH ...
bool GetICHConditions(
X121XICHConditions &conditions, //
int barIndex = 0, //
int loopback = 5 //
)
{
//
bool result = false;
//
result = xichHelper.GetConditions(
conditions,
barIndex,
loopback //
);
//
return result;
}
//
// XATR ...
bool GetATRConditions(
@@ -2507,6 +2639,7 @@ class XCX121Helper : public XCBase
//
xpvHelper.Free();
xhkHelper.Free();
xichHelper.Free();
xmasHelper.Free();
xatrHelper.Free();
xstrHelper.Free();
@@ -2591,6 +2724,10 @@ class XCX121Helper : public XCBase
);
if (!result)
{
//
xpvConditions.Clean();
//
return result;
}
@@ -2604,6 +2741,30 @@ class XCX121Helper : public XCBase
);
if (!result)
{
//
xpvConditions.Clean();
xhkConditions.Clean();
//
return result;
}
//
// XICH ...
X121XICHConditions xichConditions;
result = GetICHConditions(
xichConditions,
barIndex,
loopback //
);
if (!result)
{
//
xpvConditions.Clean();
xhkConditions.Clean();
xichConditions.Clean();
//
return result;
}
@@ -2617,6 +2778,13 @@ class XCX121Helper : public XCBase
);
if (!result)
{
//
xpvConditions.Clean();
xhkConditions.Clean();
xichConditions.Clean();
xmasConditions.Clean();
//
return result;
}
@@ -2630,6 +2798,14 @@ class XCX121Helper : public XCBase
);
if (!result)
{
//
xpvConditions.Clean();
xhkConditions.Clean();
xichConditions.Clean();
xmasConditions.Clean();
xatrConditions.Clean();
//
return result;
}
@@ -2643,6 +2819,15 @@ class XCX121Helper : public XCBase
);
if (!result)
{
//
xpvConditions.Clean();
xhkConditions.Clean();
xichConditions.Clean();
xmasConditions.Clean();
xatrConditions.Clean();
xstrConditions.Clean();
//
return result;
}
@@ -2656,6 +2841,16 @@ class XCX121Helper : public XCBase
);
if (!result)
{
//
xpvConditions.Clean();
xhkConditions.Clean();
xichConditions.Clean();
xmasConditions.Clean();
xatrConditions.Clean();
xstrConditions.Clean();
xcheConditions.Clean();
//
return result;
}
@@ -2669,6 +2864,17 @@ class XCX121Helper : public XCBase
);
if (!result)
{
//
xpvConditions.Clean();
xhkConditions.Clean();
xichConditions.Clean();
xmasConditions.Clean();
xatrConditions.Clean();
xstrConditions.Clean();
xcheConditions.Clean();
xdonConditions.Clean();
//
return result;
}
@@ -2682,6 +2888,18 @@ class XCX121Helper : public XCBase
);
if (!result)
{
//
xpvConditions.Clean();
xhkConditions.Clean();
xichConditions.Clean();
xmasConditions.Clean();
xatrConditions.Clean();
xstrConditions.Clean();
xcheConditions.Clean();
xdonConditions.Clean();
x3maConditions.Clean();
//
return result;
}
@@ -2695,6 +2913,19 @@ class XCX121Helper : public XCBase
);
if (!result)
{
//
xpvConditions.Clean();
xhkConditions.Clean();
xichConditions.Clean();
xmasConditions.Clean();
xatrConditions.Clean();
xstrConditions.Clean();
xcheConditions.Clean();
xdonConditions.Clean();
x3maConditions.Clean();
xvwapConditions.Clean();
//
return result;
}
@@ -3340,6 +3571,61 @@ class XCX121Helper : public XCBase
conditions.isVWapSwitchedToBullishOrdered = xvwapConditions.isVWapSwitchedToBullishOrdered;
conditions.isVWapSwitchedToBearishOrdered = xvwapConditions.isVWapSwitchedToBearishOrdered;
//
// XICH ...
//
// Buffers ...
//
Copy(
xichConditions.kijunSenBuffer,
conditions.kijunSenBuffer //
);
//
Copy(
xichConditions.tenkanSenBuffer,
conditions.tenkanSenBuffer //
);
//
Copy(
xichConditions.chikouSpanBuffer,
conditions.chikouSpanBuffer //
);
//
Copy(
xichConditions.senkouSpanABuffer,
conditions.senkouSpanABuffer //
);
//
Copy(
xichConditions.senkouSpanBBuffer,
conditions.senkouSpanBBuffer //
);
//
// Conditions ...
//
conditions.isTenkanSenOverKijunSen = xichConditions.isTenkanSenOverKijunSen;
conditions.isTenkanSenUnderKijunSen = xichConditions.isTenkanSenUnderKijunSen;
//
conditions.isTenkanSenCrossedOverKijunSen = xichConditions.isTenkanSenCrossedOverKijunSen;
conditions.isTenkanSenCrossedUnderKijunSen = xichConditions.isTenkanSenCrossedUnderKijunSen;
//
conditions.isSenkouSpanAOverB = xichConditions.isSenkouSpanAOverB;
conditions.isSenkouSpanAUnderB = xichConditions.isSenkouSpanAUnderB;
//
conditions.isSenkouSpanACrossedOverB = xichConditions.isSenkouSpanACrossedOverB;
conditions.isSenkouSpanACrossedUnderB = xichConditions.isSenkouSpanACrossedUnderB;
//
// Slopes ...
@@ -3563,7 +3849,6 @@ class XCX121Helper : public XCBase
double cheMin = GetMin(ches);
double cheMax = GetMax(ches);
//
bool isSarCrossedUnderPeak =
conditions.sarBuffer[cIDX] < conditions.peaksBuffer[cIDX] &&
@@ -3808,9 +4093,11 @@ class XCX121Helper : public XCBase
conditions.isStrLowerCrossedUnderDonLowLower = isStrLowerCrossedUnderDonLowLower;
conditions.isStrUpperCrossedUnderDonHighUpper = isStrUpperCrossedUnderDonHighUpper;
//
//
xpvConditions.Clean();
xhkConditions.Clean();
xichConditions.Clean();
xmasConditions.Clean();
xatrConditions.Clean();
xstrConditions.Clean();
@@ -3844,6 +4131,7 @@ class XCX121Helper : public XCBase
X121XCCInputs xccInputs;
X121XPVInputs xpvInputs;
X121XHKInputs xhkInputs;
X121XICHInputs xichInputs;
X121XMASInputs xmasInputs;
X121XATRInputs xatrInputs;
X121XDONInputs xdonInputs;
File diff suppressed because it is too large Load Diff