This commit is contained in:
2025-03-30 02:46:12 +03:30
parent ac95a26e24
commit eaddb8aa72
5 changed files with 375 additions and 80 deletions
@@ -2661,7 +2661,7 @@ struct X121SMCStrategyConditionParser
//
// Rejected Boxes ...
bool HasRejectedBocXConditions(
bool HasRejectedBoxConditions(
ENUM_X_CYCLES cycle,
XSignalBox &box,
ENUM_X_DIRECTION &dir,
@@ -2952,7 +2952,7 @@ struct X121SMCStrategyConditionParser
//
// Activated Boxes ...
bool HasActivatedBocXConditions(
bool HasActivatedBoxConditions(
ENUM_X_CYCLES cycle,
XSignalBox &box,
ENUM_X_DIRECTION &dir,
@@ -3267,7 +3267,7 @@ struct X121SMCStrategyConditionParser
//
// Breaked Boxes ...
bool HasBreakedBocXConditions(
bool HasBreakedBoxConditions(
ENUM_X_CYCLES cycle,
XSignalBox &box,
ENUM_X_DIRECTION &dir,
@@ -4501,16 +4501,16 @@ struct X121SMCStrategyConditionParser
//
bool isBullishTKZone =
isIchIsBullish &&
cBar.low < cXConditions.tenkanSenBuffer[cIndex] &&
cBar.low > cXConditions.kijunSenBuffer[cIndex] &&
cBar.low < cXConditions.tenkanSenBuffer[cIDX] &&
cBar.low > cXConditions.kijunSenBuffer[cIDX] &&
cBar.low < pBar.low &&
zBar.open > cBar.low;
//
bool isBearishTKZone =
isIchIsBearish &&
cBar.high > cXConditions.tenkanSenBuffer[cIndex] &&
cBar.high < cXConditions.kijunSenBuffer[cIndex] &&
cBar.high > cXConditions.tenkanSenBuffer[cIDX] &&
cBar.high < cXConditions.kijunSenBuffer[cIDX] &&
cBar.high > pBar.high &&
zBar.open < cBar.high;
@@ -4563,14 +4563,17 @@ struct X121SMCStrategyConditionParser
box.period = cBar.period;
//
pivot = isBullish
? cBar.low - (points * 5)
: cBar.high + (points * 5);
double points = GetPoints(box.symbol);
//
point = GetEntry(
double pivot = isBullish
? cBar.low - (points * 5)
: cBar.high + (points * 5);
//
double point = GetEntry(
cBar.symbol,
signalBoxDir //
dir //
);
//
@@ -4591,12 +4594,306 @@ struct X121SMCStrategyConditionParser
{
//
}
}
//
// Check All Conditions ...
result =
box.IsValid() &&
HasDirection(dir) &&
(isBullish ||
isBearish);
//
// Cleanup Resources ...
zBar.Clean();
cBar.Clean();
pBar.Clean();
pPBar.Clean();
cState.Clean();
cConditions.Clean();
cConditions.Clean();
ZeroMemory(cHelper);
cStateEvents.Clean();
cXConditions.Clean();
//
return result;
}
//
bool HasXSTRConditions(
ENUM_X_CYCLES cycle,
XBoxZone &box,
ENUM_X_DIRECTION &dir,
X121SMCStrategySignalProviderData &provider,
int barIndex = 0 //
)
{
//
bool result = false;
//
box.Clean();
dir = X_DIRECTION_NONE;
//
// Fil Selected Data ...
XPOIState cState;
X121Conditions cXConditions;
XPOIStateEvents cStateEvents;
XC121SMCCycleHelper *cHelper;
X121SMCCycleConditions cConditions;
result = provider.SelectCycle(
cycle,
cState,
cStateEvents,
cXConditions,
cHelper,
cConditions //
);
if (!result)
{
//
cState.Clean();
ZeroMemory(cHelper);
cConditions.Clean();
cXConditions.Clean();
cStateEvents.Clean();
//
Print("Signal ...");
result = false;
isBearish = false;
isBullish = false;
return result;
}
Parse(cXConditions);
//
// Normalize Args ...
//
if (barIndex < 0)
{
barIndex = 0;
}
//
int idx = -1;
int count = 0;
bool has = false;
//
int zIDX = barIndex;
int cIDX = zIDX + 1;
int pIDX = cIDX + 1;
int ppIDX = pIDX + 1;
//
bool isBullish = false;
bool isBearish = false;
//
XOHCL zBar;
XOHCL cBar;
XOHCL pBar;
XOHCL pPBar;
//
// Initial Bars ...
result = zBar.Init(
cState.symbol,
cState.period,
barIndex //
);
result =
result &&
zBar.GetPreviousBar(cBar);
result =
result &&
cBar.GetPreviousBar(pBar);
result =
result &&
pBar.GetPreviousBar(pPBar);
if (!result)
{
//
zBar.Clean();
cBar.Clean();
pBar.Clean();
cState.Clean();
ZeroMemory(cHelper);
cConditions.Clean();
cXConditions.Clean();
//
return result;
}
//
// Checking Conditions ...
//
// XDELTA ...
//
bool isDeltaSwitchedToBullish =
(cXConditions.isDeltaCrossedOverMa &&
cXConditions.isDeltaSwitchedToBullish);
bool isDeltaBullish =
(cXConditions.isDeltaOverMa &&
cXConditions.isDeltaBullish);
bool isDeltaIsBullish =
isDeltaBullish ||
isDeltaSwitchedToBullish;
//
bool isDeltaSwitchedToBearish =
(cXConditions.isDeltaCrossedUnderMa &&
cXConditions.isDeltaSwitchedToBearish);
bool isDeltaBearish =
(cXConditions.isDeltaUnderMa &&
cXConditions.isDeltaBearish);
bool isDeltaIsBearish =
isDeltaBearish ||
isDeltaSwitchedToBearish;
//
// XVOLUME ...
//
bool isVolumeSwitchedToBullish =
(cXConditions.isVolumeSwitchedToBullish &&
cXConditions.isBullishVolumeSwitchedToIncreased);
bool isVolumeBullish =
(cXConditions.isBullishVolumeIncreased &&
cXConditions.isBullishVolumeMaOverBearishVolumeMa);
bool isVolumeIsBullish =
isVolumeBullish ||
isVolumeSwitchedToBullish;
//
bool isVolumeSwitchedToBearish =
(cXConditions.isVolumeSwitchedToBearish &&
cXConditions.isBearishVolumeSwitchedToIncreased);
bool isVolumeBearish =
(cXConditions.isBullishVolumeMaUnderBearishVolumeMa &&
cXConditions.isBearishVolumeIncreased);
bool isVolumeIsBearish =
isVolumeBearish ||
isVolumeSwitchedToBearish;
//
// XSTR ...
bool isStrIsBullish =
(cXConditions.isStrBullish ||
cXConditions.isStrSwitchedToBullish);
bool isStrIsBearish =
(cXConditions.isStrBearish ||
cXConditions.isStrSwitchedToBearish);
//
// XFastMa ...
//
bool isFastMaOverStr =
(cXConditions.x3maFastBuffer[cIDX] > cXConditions.strBuffer[cIDX]);
//
bool isFastMaUnderStr =
(cXConditions.x3maFastBuffer[cIDX] < cXConditions.strBuffer[cIDX]);
//
bool isFastMaBullishReject =
cBar.low < pBar.low &&
cBar.low > cXConditions.strBuffer[cIDX] &&
cBar.low < cXConditions.x3maFastBuffer[cIDX] &&
cBar.GetDown() > cXConditions.x3maFastBuffer[cIDX];
//
bool isFastMaBearishReject =
cBar.high > pBar.high &&
cBar.high < cXConditions.strBuffer[cIDX] &&
cBar.high > cXConditions.x3maFastBuffer[cIDX] &&
cBar.GetUp() < cXConditions.x3maFastBuffer[cIDX];
//
// Summarize Conditions ...
//
isBullish =
//
// false
isStrIsBullish &&
isFastMaOverStr &&
// isDeltaIsBullish &&
// isVolumeIsBullish &&
isFastMaBullishReject
//
//
;
//
isBearish =
//
// false
isStrIsBearish &&
isFastMaUnderStr &&
// isDeltaIsBearish &&
// isVolumeIsBearish &&
isFastMaBearishReject
//
;
//
// Filling Requirements ...
result =
isBullish ||
isBearish;
if (result)
{
//
dir =
isBullish
? X_DIRECTION_BULLISH
: X_DIRECTION_BEARISH;
//
box.dir = dir;
box.from = pPBar.time;
box.to = TimeCurrent();
box.symbol = cBar.symbol;
box.period = cBar.period;
//
double points = GetPoints(box.symbol);
//
double pivot = cXConditions.strBuffer[cIDX];
// isBullish
// ? cBar.low - (points * 5)
// : cBar.high + (points * 5);
//
double point = GetEntry(
cBar.symbol,
dir //
);
//
box.upper =
isBullish
? point
: pivot;
//
box.lower =
isBullish
? pivot
: point;
//
bool drawBoxes = true;
if (drawBoxes)
{
//
}
}
//
@@ -24,11 +24,11 @@
#include "../Classes/x-121.smc.market.cycle.helper.class.mq5"
#include "../Libraries/x-121.smc.guard.lib.mq5"
#include "../Libraries/x-121.smc.lib.mq5"
#include "./x-121.smc.xich.signal.lib.mq5"
#include "./x-121.smc.xind.signal.lib.mq5"
//
// Definition ...
class XCX121SMCXICHSignalDetector : public XCBase
class XCX121SMCXINDSignalDetector : public XCBase
{
//
public:
@@ -36,12 +36,12 @@ class XCX121SMCXICHSignalDetector : public XCBase
// Props ...
bool useGuards;
double rfRewar;
X121SMCStrategyXICHSignalConditions mConditions;
X121SMCStrategyXICHSignalConditions mConditionsCollection[];
X121SMCStrategyXINDSignalConditions mConditions;
X121SMCStrategyXINDSignalConditions mConditionsCollection[];
//
// Constructor(s) ...
XCX121SMCXICHSignalDetector(
XCX121SMCXINDSignalDetector(
string _symbol,
ENUM_TIMEFRAMES _period //
)
@@ -54,7 +54,7 @@ class XCX121SMCXICHSignalDetector : public XCBase
//
// Deconstructor ...
~XCX121SMCXICHSignalDetector()
~XCX121SMCXINDSignalDetector()
{
DeInit();
}
@@ -199,7 +199,7 @@ class XCX121SMCXICHSignalDetector : public XCBase
XBoxZone signalBox;
bool hasSignalBox = false;
ENUM_X_DIRECTION signalBoxDir = X_DIRECTION_NONE;
ENUM_X121SMC_XICH_PROVIDERS signalProvider = X121SMC_XICH_PROVIDER_NONE;
ENUM_X121SMC_XIND_PROVIDERS signalProvider = X121SMC_XIND_PROVIDER_NONE;
//
//
@@ -208,8 +208,8 @@ class XCX121SMCXICHSignalDetector : public XCBase
//
// Provider XTkKumo ...
X121SMCStrategyConditionParser cParser;
hasSignalBox = cParser.HasXICHConditions(
X_CYCLE_ANALYSE,
hasSignalBox = cParser.HasXSTRConditions(
X_CYCLE_DECISION,
signalBox,
signalBoxDir,
provider,
@@ -217,7 +217,7 @@ class XCX121SMCXICHSignalDetector : public XCBase
);
if (hasSignalBox)
{
signalProvider = X121SMC_XICH_PROVIDER_XTKKUMO;
signalProvider = X121SMC_XIND_PROVIDER_XSTR;
}
//
@@ -298,20 +298,17 @@ class XCX121SMCXICHSignalDetector : public XCBase
//
// Select and Provide SL Based on ...
double iAtr = 0;
if (signalProvider == X121SMC_XICH_PROVIDER_XTKKUMO)
if (signalProvider == X121SMC_XIND_PROVIDER_XSTR)
{
//
iAtr = provider.decisionXConditions.atrBuffer[1];
iAtr *= 0;
iAtr *= 0.5;
//
// Fix rf Reward ...
rfRewar = 1.5;
rfRewar = 2;
}
//
Print("XICH ", ToString(signalBoxDir), " Signal Provided: ", EnumToString(signalProvider));
//
// Select Condition SL ...
@@ -411,7 +408,7 @@ class XCX121SMCXICHSignalDetector : public XCBase
// Detect Trigger Conditions ...
bool DetectSignalTrigger(
//
X121SMCStrategyXICHSignalConditions &conditions,
X121SMCStrategyXINDSignalConditions &conditions,
//
X121SMCStrategySignalProviderData &provider,
//
@@ -534,7 +531,7 @@ class XCX121SMCXICHSignalDetector : public XCBase
//
// Set Provider for Common Guards ...
string signalProvider = ToString(X121SMC_XICH_PROVIDER_XTKKUMO);
string signalProvider = ToString(X121SMC_XIND_PROVIDER_XTKKUMO);
//
int zIndex = 0;
@@ -1077,7 +1074,7 @@ class XCX121SMCXICHSignalDetector : public XCBase
{
//
// Copy Original Items ...
X121SMCStrategyXICHSignalConditions tmpItems[];
X121SMCStrategyXINDSignalConditions tmpItems[];
Copy(
mConditionsCollection,
tmpItems //
@@ -1091,7 +1088,7 @@ class XCX121SMCXICHSignalDetector : public XCBase
for (int i = 0; i < count; i++)
{
//
X121SMCStrategyXICHSignalConditions iItem = tmpItems[i];
X121SMCStrategyXINDSignalConditions iItem = tmpItems[i];
//
bool canRemove = mConditions.dir == iItem.dir &&
@@ -28,10 +28,11 @@
//
// Provided Signals Enumeration ...
enum ENUM_X121SMC_XICH_PROVIDERS
enum ENUM_X121SMC_XIND_PROVIDERS
{
X121SMC_XICH_PROVIDER_NONE,
X121SMC_XICH_PROVIDER_XTKKUMO,
X121SMC_XIND_PROVIDER_NONE,
X121SMC_XIND_PROVIDER_XSTR,
X121SMC_XIND_PROVIDER_XTKKUMO,
};
//
@@ -39,7 +40,7 @@ enum ENUM_X121SMC_XICH_PROVIDERS
//
// XICH Signal Conditions ...
struct X121SMCStrategyXICHSignalConditions
struct X121SMCStrategyXINDSignalConditions
{
//
// Props ...
@@ -70,11 +71,11 @@ struct X121SMCStrategyXICHSignalConditions
XBoxZone signalBox;
//
ENUM_X121SMC_XICH_PROVIDERS provider;
ENUM_X121SMC_XIND_PROVIDERS provider;
//
// Constructor ...
X121SMCStrategyXICHSignalConditions()
X121SMCStrategyXINDSignalConditions()
{
Clean();
}
@@ -198,7 +199,7 @@ struct X121SMCStrategyXICHSignalConditions
signalBox.Clean();
//
provider = X121SMC_XICH_PROVIDER_NONE;
provider = X121SMC_XIND_PROVIDER_NONE;
}
//
@@ -2185,7 +2185,7 @@ struct X121SMCStrategyXWZWorkingZone
}
//
cPraser.Clean();
cParser.Clean();
//
return result;
+36 -36
View File
@@ -27,7 +27,7 @@
#include "../Classes/x-121.smc.market.cycle.helper.class.mq5"
//
#include "../Signals/x-121.smc.xich.signal.class.mq5"
#include "../Signals/x-121.smc.xind.signal.class.mq5"
#include "../Signals/x-121.smc.xwz.signal.class.mq5"
//
@@ -43,11 +43,11 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy
//
// Props ...
bool useXWZSignal;
bool useXICHSignal;
bool useXINDSignal;
bool useXWZSignalGuard;
bool useXICHSignalGuard;
bool useXINDSignalGuard;
XCX121SMCXWZSignalDetector *mXWZSignalDetector;
XCX121SMCXICHSignalDetector *mXICHSignalDetector;
XCX121SMCXINDSignalDetector *mXINDSignalDetector;
X121SMCStrategySignalProviderData cycleProvider;
//
@@ -70,7 +70,7 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy
);
//
mXICHSignalDetector = new XCX121SMCXICHSignalDetector(
mXINDSignalDetector = new XCX121SMCXINDSignalDetector(
_symbol,
_period //
);
@@ -131,7 +131,7 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy
//
ZeroMemory(mXWZSignalDetector);
ZeroMemory(mXICHSignalDetector);
ZeroMemory(mXINDSignalDetector);
//
cycleProvider.Destroy();
@@ -214,7 +214,7 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy
//
bool hasXWZSignal = false;
bool hasXICHSignal = false;
bool hasXINDSignal = false;
//
X121SMCStrategyXWZSignalConditions mXWZConditions;
@@ -229,15 +229,15 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy
}
//
X121SMCStrategyXICHSignalConditions mXICHConditions;
if (useXICHSignal && !hasSignal)
X121SMCStrategyXINDSignalConditions mXICHConditions;
if (useXINDSignal && !hasSignal)
{
//
hasXICHSignal = DetectXICHSignal(
hasXINDSignal = DetectXINDSignal(
conditions,
mXICHConditions //
);
hasSignal = hasXICHSignal;
hasSignal = hasXINDSignal;
}
//
@@ -481,12 +481,12 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy
//
// XICH Guard Detection ...
if (useXICHSignal &&
useXICHSignalGuard)
if (useXINDSignal &&
useXINDSignalGuard)
{
//
X121SMCGuard xichGuards[];
bool hasGuard = mXICHSignalDetector.DetectGuards(
bool hasGuard = mXINDSignalDetector.DetectGuards(
xichGuards,
positions,
cycleProvider //
@@ -730,9 +730,9 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy
//
// XICH Signal ...
bool DetectXICHSignal(
bool DetectXINDSignal(
X121SMCStrategyConditions &conditions,
X121SMCStrategyXICHSignalConditions &xICHConditions //
X121SMCStrategyXINDSignalConditions &xICHConditions //
)
{
//
@@ -761,35 +761,35 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy
//
// Detect Setup Conditions ...
datetime setupTime = mXICHSignalDetector.mConditions.setupTime;
bool isSetuped = mXICHSignalDetector.mConditions.IsSetuped();
ENUM_X_DIRECTION setupDir = mXICHSignalDetector.mConditions.dir;
datetime setupTime = mXINDSignalDetector.mConditions.setupTime;
bool isSetuped = mXINDSignalDetector.mConditions.IsSetuped();
ENUM_X_DIRECTION setupDir = mXINDSignalDetector.mConditions.dir;
if (!isSetuped)
{
//
// Detect Signal Setup ...
isSetuped = mXICHSignalDetector.DetectSignalSetup(
isSetuped = mXINDSignalDetector.DetectSignalSetup(
cycleProvider //
);
//
setupDir = mXICHSignalDetector.mConditions.dir;
setupTime = mXICHSignalDetector.mConditions.setupTime;
setupDir = mXINDSignalDetector.mConditions.dir;
setupTime = mXINDSignalDetector.mConditions.setupTime;
//
if (isSetuped)
{
//
int items = mXICHSignalDetector
int items = mXINDSignalDetector
.AddConditionsIfNotExists();
//
mXICHSignalDetector.mConditions.Clean();
mXINDSignalDetector.mConditions.Clean();
}
}
//
int conditionsCount = ArraySize(mXICHSignalDetector.mConditionsCollection);
int conditionsCount = ArraySize(mXINDSignalDetector.mConditionsCollection);
result = IsValidSize(conditionsCount);
if (!result)
{
@@ -799,12 +799,12 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy
//
// Looking For Conditions ...
int selectedIndex = 0;
X121SMCStrategyXICHSignalConditions mTmpConditions[];
X121SMCStrategyXINDSignalConditions mTmpConditions[];
Copy(
mXICHSignalDetector.mConditionsCollection,
mXINDSignalDetector.mConditionsCollection,
mTmpConditions //
);
X121SMCStrategyXICHSignalConditions mConditions;
X121SMCStrategyXINDSignalConditions mConditions;
for (int i = 0; i < conditionsCount; i++)
{
//
@@ -815,7 +815,7 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy
{
//
// Detect Signal Trigger ...
canTrigger = mXICHSignalDetector
canTrigger = mXINDSignalDetector
.DetectSignalTrigger(
mTmpConditions[i],
cycleProvider //
@@ -831,7 +831,7 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy
{
//
ArrayRemove(
mXICHSignalDetector.mConditionsCollection,
mXINDSignalDetector.mConditionsCollection,
i,
1 //
);
@@ -864,7 +864,7 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy
//
// Remove Selected Index from Main Collection ...
ArrayRemove(
mXICHSignalDetector.mConditionsCollection,
mXINDSignalDetector.mConditionsCollection,
selectedIndex,
1 //
);
@@ -921,8 +921,8 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy
useXWZSignalGuard = false;
//
useXICHSignal = true;
useXICHSignalGuard = false;
useXINDSignal = true;
useXINDSignalGuard = false;
//
string symbol = GetSymbol();
@@ -1034,7 +1034,7 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy
x121Inputs.xpvInputs.showVales = showAll || true;
x121Inputs.xpvInputs.showSupports = showAll || false;
x121Inputs.xpvInputs.showResistances = showAll || false;
x121Inputs.xpvInputs.showGoldenZones = showAll || false;
x121Inputs.xpvInputs.showGoldenZones = showAll || true;
//
// XHK ...
@@ -1090,8 +1090,8 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy
//
// XICH ...
x121Inputs.xichInputs.showTenkanSen = showAll || true;
x121Inputs.xichInputs.showKijunSen = showAll || true;
x121Inputs.xichInputs.showTenkanSen = showAll || false;
x121Inputs.xichInputs.showKijunSen = showAll || false;
x121Inputs.xichInputs.showChikouSpan = showAll || false;
x121Inputs.xichInputs.showSenkouSpanA = showAll || false;
x121Inputs.xichInputs.showSenkouSpanB = showAll || false;