This commit is contained in:
2024-12-30 03:08:21 +03:30
parent b5003968bc
commit 4094a92949
9 changed files with 833 additions and 267 deletions
+324 -12
View File
@@ -24,6 +24,74 @@
#include "../Classes/x-121.smc.market.cycle.helper.class.mq5"
#include "../Libraries/x-121.smc.lib.mq5"
//
const string X121SMCXTWPV_Method_1_Token = "X121SMCXTWPV_1";
const string X121SMCXTWPV_Method_2_Token = "X121SMCXTWPV_2";
//
enum ENUM_X_X121SMC_XTWPV_METHODS
{
X_X121SMC_XTWPV_METHOD_UNKNOWN,
X_X121SMC_XTWPV_METHOD_1,
X_X121SMC_XTWPV_METHOD_2,
};
//
string ToString(ENUM_X_X121SMC_XTWPV_METHODS value)
{
//
string result = NULL;
//
if (value == X_X121SMC_XTWPV_METHOD_UNKNOWN)
{
return result;
}
//
switch (value)
{
//
case X_X121SMC_XTWPV_METHOD_1:
result = "Method_1";
break;
//
case X_X121SMC_XTWPV_METHOD_2:
result = "Method_2";
break;
}
//
return result;
}
//
ENUM_X_X121SMC_XTWPV_METHODS ParseMethod(string value)
{
//
ENUM_X_X121SMC_XTWPV_METHODS result = X_X121SMC_XTWPV_METHOD_UNKNOWN;
//
if (!IsValid(value))
{
return result;
}
//
if (Contains(X121SMCXTWPV_Method_1_Token, value))
{
result = X_X121SMC_XTWPV_METHOD_1;
}
else if (Contains(X121SMCXTWPV_Method_2_Token, value))
{
result = X_X121SMC_XTWPV_METHOD_2;
}
//
return result;
}
//
// Definitions ...
struct X121SMCStrategyXTWPVSignalConditions
@@ -52,6 +120,9 @@ struct X121SMCStrategyXTWPVSignalConditions
double point;
XPVPivot pivot;
//
string method;
//
bool hasSupportZone;
bool hasResistanceZone;
@@ -184,6 +255,9 @@ struct X121SMCStrategyXTWPVSignalConditions
point = 0;
pivot.Clean();
//
method = NULL;
//
CleanPriceInsideZones();
}
@@ -418,10 +492,14 @@ bool DetectX121SMCXTWPVSiganlSetup(
double ask = GetAsk(symbol);
double bid = GetBid(symbol);
datetime cTime = TimeCurrent();
double points = GetPoints(symbol);
//
double ll = cBar.FindLowest(9, MODE_LOW);
double hh = cBar.FindHighest(9, MODE_HIGH);
int swingLoopback = 9;
double ll = cBar.FindLowest(swingLoopback, MODE_LOW);
double hh = cBar.FindHighest(swingLoopback, MODE_HIGH);
double llDown = cBar.FindLowesttDown(swingLoopback);
double hhUp = cBar.FindHighestUp(swingLoopback);
//
int zoneValidationDivider = 10;
@@ -564,6 +642,16 @@ bool DetectX121SMCXTWPVSiganlSetup(
// return result;
// }
//
// Detect Trend Based On Peaks and Vales ...
ENUM_X_DIRECTION trend;
bool hasTrend = analyseCycleHelper
.HasPVDirection(trend);
bool hasBullishTrend = hasTrend &&
IsBullish(trend);
bool hasBearishTrend = hasTrend &&
IsBearish(trend);
//
// Retrieve Active Pivots ...
@@ -659,12 +747,20 @@ bool DetectX121SMCXTWPVSiganlSetup(
//
double peak = helperConditions.x121Conditions.peaksBuffer[1];
double peakPrev = helperConditions.x121Conditions.peaksBuffer[2];
double peakDiff = MathAbs(peakPrev - peak);
//
bool isNewPeak = helperConditions.x121Conditions.isNewPeak;
bool isNewPeakOverLast = helperConditions.x121Conditions.isNewPeakOverLast;
bool isNewPeakUnderLast = helperConditions.x121Conditions.isNewPeakUnderLast;
//
double vale = helperConditions.x121Conditions.valesBuffer[1];
double valePrev = helperConditions.x121Conditions.valesBuffer[2];
double valeDiff = MathAbs(valePrev - vale);
//
bool isNewVale = helperConditions.x121Conditions.isNewVale;
bool isNewValeOverLast = helperConditions.x121Conditions.isNewValeOverLast;
bool isNewValeUnderLast = helperConditions.x121Conditions.isNewValeUnderLast;
@@ -680,12 +776,6 @@ bool DetectX121SMCXTWPVSiganlSetup(
//
// Calculate Conditions ...
//
// Bullish ...
//
// Bearish ...
//
double bullishFib = GetFibonacciLevel(
helperCBar.high,
@@ -704,11 +794,35 @@ bool DetectX121SMCXTWPVSiganlSetup(
//
bool isBearishFiboPassed = bullishFib <= conditions.pivot.lower;
bool isBullishFiboPassed = bearishFib >= conditions.pivot.upper;
//
// Bullish Conditions 1 ...
bool bullishConditions1 =
//
// false
hasBullishTrend &&
isNewPeakOverLast &&
isBullishFiboPassed &&
helperCBar.IsBullish() &&
conditions.pivot.upper < peak &&
conditions.pivot.upper < helperCBar.GetUp() &&
conditions.pivot.upper > helperCBar.GetDown()
//
;
if (bullishConditions1)
{
//
conditions.point = conditions.pivot.upper;
conditions.method = ToString(X_X121SMC_XTWPV_METHOD_1);
}
//
// Bearish Conditions 1 ...
bool bearishConditions1 =
//
// false
hasBearishTrend &&
isNewValeUnderLast &&
isBearishFiboPassed &&
helperCBar.IsBearish() &&
@@ -719,7 +833,9 @@ bool DetectX121SMCXTWPVSiganlSetup(
;
if (bearishConditions1)
{
//
conditions.point = conditions.pivot.lower;
conditions.method = ToString(X_X121SMC_XTWPV_METHOD_1);
}
//
@@ -760,16 +876,43 @@ bool DetectX121SMCXTWPVSiganlSetup(
double donOpenUpper = helperConditions.x121Conditions.donOpenUpperBuffer[1];
double donOpenLower = helperConditions.x121Conditions.donOpenLowerBuffer[1];
//
int condition2MinPVDiffPoint = 30;
bool isPeakDiffPointPassed = peakDiff >= (condition2MinPVDiffPoint * points);
bool isValeDiffPointPassed = valeDiff >= (condition2MinPVDiffPoint * points);
//
bool bullishConditions2 =
//
false
// hasBullishTrend &&
// isNewValeOverLast &&
// donCloseLower > vale &&
// isValeDiffPointPassed
//
;
if (bullishConditions2)
{
//
conditions.point = vale;
conditions.method = ToString(X_X121SMC_XTWPV_METHOD_2);
}
//
bool bearishConditions2 =
//
isNewPeakUnderLast &&
donCloseUpper > peak
false
// hasBearishTrend &&
// isNewPeakUnderLast &&
// donCloseUpper > peak &&
// isPeakDiffPointPassed
//
;
if (bearishConditions2)
{
//
conditions.point = peak;
conditions.method = ToString(X_X121SMC_XTWPV_METHOD_2);
}
//
@@ -778,7 +921,8 @@ bool DetectX121SMCXTWPVSiganlSetup(
//
isBullish =
//
false
bullishConditions1 ||
bullishConditions2
//
;
@@ -798,6 +942,18 @@ bool DetectX121SMCXTWPVSiganlSetup(
return result;
}
//
if (isBullish)
{
Print("Bullish ...");
}
//
if (isBearish)
{
Print("Bearish ...");
}
//
conditions.setupTime = cTime;
conditions.dir =
@@ -1212,6 +1368,59 @@ bool DetectX121SMCXTWPVSiganlTrigger(
bool hasBullishPriceInsideZone = conditions.HasBullishPriceInsideZone();
bool hasBearishPriceInsideZone = conditions.HasBearishPriceInsideZone();
//
if (
isBullish &&
isBasedOnVale &&
hasPriceInsideZones &&
hasBullishPriceInsideZone //
)
{
//
// Demand ...
if (conditions.hasDemandZone)
{
//
Add(
conditions.demandZone.Lower(),
sls //
);
}
//
// Support ...
if (conditions.hasSupportZone)
{
//
Add(
conditions.supportZone.Lower(),
sls //
);
}
//
// Order Block ...
if (conditions.hasOrderBlock)
{
//
Add(
conditions.orderBlock.Lower(),
sls //
);
}
//
// Fair Value Gap ...
if (conditions.hasFairValueGap)
{
//
Add(
conditions.fairValueGap.Lower(),
sls //
);
}
}
//
if (
isBearish &&
@@ -1285,6 +1494,18 @@ bool DetectX121SMCXTWPVSiganlTrigger(
: entry - targetDelta;
}
//
if (isBullish)
{
Print("Bullish ...");
}
//
if (isBearish)
{
Print("Bearish ...");
}
//
conditions.sl = sl;
conditions.target = target;
@@ -1297,6 +1518,97 @@ bool DetectX121SMCXTWPVSiganlTrigger(
return result;
}
/**
* Draw Conditions Pivot Zone ...
*
* @param conditions: X121SMCStrategyXTWPVSignalConditions instance Reference ...
* @param drawer: XCPOIDrawer pointer ...
* @param drawnObjects: XCBaseObject instance Reference Collection ...
* @param drawState: Boolean ...
* @param drawTicksZone: Boolean ...
* @param ignoreSwingHighs: Boolean ...
* @param ignoreSwingLows: Boolean ...
* @param ignoreSupportZones: Boolean ...
* @param ignoreResistanceZones: Boolean ...
* @param ignoreSupplyZones: Boolean ...
* @param ignoreDemandZones: Boolean ...
* @param ignoreBullishOrderBlocks: Boolean ...
* @param ignoreBearishOrderBlocks: Boolean ...
* @param ignoreBullishFairValueGaps: Boolean ...
* @param ignoreBearishFairValueGaps: Boolean ...
* @param ignoreBullishRejectionBars: Boolean ...
* @param ignoreBearishRejectionBars: Boolean ...
* @param ignoreBullishMomentumBars: Boolean ...
* @param ignoreBearishMomentumBars: Boolean ...
*
* @return ( int )
*/
int DrawXTWPVPivotZone(
X121SMCStrategyXTWPVSignalConditions &conditions,
XCPOIDrawer *drawer,
XCBaseObject *&drawnObjects[],
bool drawState = false,
bool drawTicksZone = false,
bool ignoreSwingHighs = false,
bool ignoreSwingLows = false,
bool ignoreSupportZones = false,
bool ignoreResistanceZones = false,
bool ignoreSupplyZones = false,
bool ignoreDemandZones = false,
bool ignoreBullishOrderBlocks = false,
bool ignoreBearishOrderBlocks = false,
bool ignoreBullishFairValueGaps = false,
bool ignoreBearishFairValueGaps = false,
bool ignoreBullishRejectionBars = false,
bool ignoreBearishRejectionBars = false,
bool ignoreBullishMomentumBars = false,
bool ignoreBearishMomentumBars = false //
)
{
//
int result = 0;
//
Clean(drawnObjects);
//
if (drawer == NULL ||
!conditions.HasPivot())
{
return result;
}
//
drawer.DrawPivot(
//
conditions.pivot,
drawnObjects,
//
drawState,
drawTicksZone,
ignoreSwingHighs,
ignoreSwingLows,
ignoreSupportZones,
ignoreResistanceZones,
ignoreSupplyZones,
ignoreDemandZones,
ignoreBullishOrderBlocks,
ignoreBearishOrderBlocks,
ignoreBullishFairValueGaps,
ignoreBearishFairValueGaps,
ignoreBullishRejectionBars,
ignoreBearishRejectionBars,
ignoreBullishMomentumBars,
ignoreBearishMomentumBars //
);
//
result = ArraySize(drawnObjects);
//
return result;
}
/**
* Drw Conditions Price Inside Zones ...
*
@@ -1306,7 +1618,7 @@ bool DetectX121SMCXTWPVSiganlTrigger(
*
* @return ( int )
*/
int DrawPriceInsideZones(
int DrawTWPVPriceInsideZones(
X121SMCStrategyXTWPVSignalConditions &conditions,
XCPOIDrawer *drawer,
XCBaseObject *&drawnObjects[] //