This commit is contained in:
2025-01-18 12:16:28 +03:30
parent 9cdd5b4c7d
commit e74f64c51e
10 changed files with 2111 additions and 1003 deletions
+12 -48
View File
@@ -414,67 +414,31 @@ bool DetectX121SMCXPZSiganlSetup(
//
// Consolidation ...
ENUM_X_DIRECTION consolidationMarketDir;
bool hasConsolidationMarketDir = consolidationCycleHelper
.DetectMarketStructure(consolidationMarketDir);
//
bool hasConsolidationBullishTrend =
hasConsolidationMarketDir &&
IsBullish(consolidationMarketDir);
if (decisionXConditions.isTrendSwirchedToBearish)
{
Print("Trend Switced To Bearish ...");
}
//
bool hasConsolidationBearishTrend =
hasConsolidationMarketDir &&
IsBearish(consolidationMarketDir);
bool hasConsolidationBullishTrend = consolidationXConditions.isTrendBullish;
bool hasConsolidationBearishTrend = consolidationXConditions.isTrendBearish;
//
// Verification ...
ENUM_X_DIRECTION verificationMarketDir;
bool hasVerificationMarketDir = verificationCycleHelper
.DetectMarketStructure(verificationMarketDir);
//
bool hasVerificationBullishTrend =
hasVerificationMarketDir &&
IsBullish(verificationMarketDir);
//
bool hasVerificationBearishTrend =
hasVerificationMarketDir &&
IsBearish(verificationMarketDir);
bool hasVerificationBullishTrend = verificationXConditions.isTrendBullish;
bool hasVerificationBearishTrend = verificationXConditions.isTrendBearish;
//
// Analyse ...
ENUM_X_DIRECTION analyseMarketDir;
bool hasAnalyseMarketDir = analyseCycleHelper
.DetectMarketStructure(analyseMarketDir);
//
bool hasAnalyseBullishTrend =
hasAnalyseMarketDir &&
IsBullish(analyseMarketDir);
//
bool hasAnalyseBearishTrend =
hasAnalyseMarketDir &&
IsBearish(analyseMarketDir);
bool hasAnalyseBullishTrend = analyseXConditions.isTrendBullish;
bool hasAnalyseBearishTrend = analyseXConditions.isTrendBearish;
//
// Decision ...
ENUM_X_DIRECTION decisionMarketDir;
bool hasDecisionMarketDir = decisionCycleHelper
.DetectMarketStructure(decisionMarketDir);
//
bool hasDecisionBullishTrend =
hasDecisionMarketDir &&
IsBullish(decisionMarketDir);
//
bool hasDecisionBearishTrend =
hasDecisionMarketDir &&
IsBearish(decisionMarketDir);
bool hasDecisionBullishTrend = decisionXConditions.isTrendBullish;
bool hasDecisionBearishTrend = decisionXConditions.isTrendBearish;
//
// Detect Bar State ...
+368 -60
View File
@@ -33,7 +33,8 @@ enum ENUM_X121_SMC_XRSPVI_CONDITIONS
X121_SMC_XRSPVI_CONDITION_1,
X121_SMC_XRSPVI_CONDITION_2,
X121_SMC_XRSPVI_CONDITION_3,
X121_SMC_XRSPVI_CONDITION_4
X121_SMC_XRSPVI_CONDITION_4,
X121_SMC_XRSPVI_CONDITION_5,
};
//
@@ -70,6 +71,7 @@ struct X121SMCStrategyXRSPVISignalConditions
bool isPriceZoneValidForVale;
//
XPVPivot pivotZone;
XConsolidationZone consolidationZone;
//
@@ -194,6 +196,7 @@ struct X121SMCStrategyXRSPVISignalConditions
point = 0;
//
pivotZone.Clean();
priceZone.Clean();
consolidationZone.Clean();
isPriceZoneValidForPeak = false;
@@ -214,6 +217,13 @@ X121SMCStrategyXRSPVISignalConditions mXRSPVIConditionsCollection[];
//
// Extension Functions ...
//
double X121SMCXRSPVIPivotPeak;
double X121SMCXRSPVIPivotVale;
datetime X121SMCXRSPVIPivotEnd;
datetime X121SMCXRSPVIPivotStart;
ENUM_XPV_PIVOTS X121SMCXRSPVIPivotType = XPV_NONE;
//
// Detect Setup Conditions ...
bool DetectX121SMCXRSPVISiganlSetup(
@@ -435,67 +445,25 @@ bool DetectX121SMCXRSPVISiganlSetup(
//
// Consolidation ...
ENUM_X_DIRECTION consolidationMarketDir;
bool hasConsolidationMarketDir = consolidationCycleHelper
.DetectMarketStructure(consolidationMarketDir);
//
bool hasConsolidationBullishTrend =
hasConsolidationMarketDir &&
IsBullish(consolidationMarketDir);
//
bool hasConsolidationBearishTrend =
hasConsolidationMarketDir &&
IsBearish(consolidationMarketDir);
bool hasConsolidationBullishTrend = consolidationXConditions.isTrendBullish;
bool hasConsolidationBearishTrend = consolidationXConditions.isTrendBearish;
//
// Verification ...
ENUM_X_DIRECTION verificationMarketDir;
bool hasVerificationMarketDir = verificationCycleHelper
.DetectMarketStructure(verificationMarketDir);
//
bool hasVerificationBullishTrend =
hasVerificationMarketDir &&
IsBullish(verificationMarketDir);
//
bool hasVerificationBearishTrend =
hasVerificationMarketDir &&
IsBearish(verificationMarketDir);
bool hasVerificationBullishTrend = verificationXConditions.isTrendBullish;
bool hasVerificationBearishTrend = verificationXConditions.isTrendBearish;
//
// Analyse ...
ENUM_X_DIRECTION analyseMarketDir;
bool hasAnalyseMarketDir = analyseCycleHelper
.DetectMarketStructure(analyseMarketDir);
//
bool hasAnalyseBullishTrend =
hasAnalyseMarketDir &&
IsBullish(analyseMarketDir);
//
bool hasAnalyseBearishTrend =
hasAnalyseMarketDir &&
IsBearish(analyseMarketDir);
bool hasAnalyseBullishTrend = analyseXConditions.isTrendBullish;
bool hasAnalyseBearishTrend = analyseXConditions.isTrendBearish;
//
// Decision ...
ENUM_X_DIRECTION decisionMarketDir;
bool hasDecisionMarketDir = decisionCycleHelper
.DetectMarketStructure(decisionMarketDir);
//
bool hasDecisionBullishTrend =
hasDecisionMarketDir &&
IsBullish(decisionMarketDir);
//
bool hasDecisionBearishTrend =
hasDecisionMarketDir &&
IsBearish(decisionMarketDir);
bool hasDecisionBullishTrend = decisionXConditions.isTrendBullish;
bool hasDecisionBearishTrend = decisionXConditions.isTrendBearish;
//
// Detect Bar State ...
@@ -614,6 +582,8 @@ bool DetectX121SMCXRSPVISiganlSetup(
bool isDecisionPriceZoneBearish = false;
bool isDecisionPriceZoneValidForPeak = false;
bool isDecisionPriceZoneValidForVale = false;
//
if (hasDecisionPriceZone)
{
//
@@ -660,6 +630,8 @@ bool DetectX121SMCXRSPVISiganlSetup(
bool isAnalysePriceZoneBearish = false;
bool isAnalysePriceZoneValidForPeak = false;
bool isAnalysePriceZoneValidForVale = false;
//
if (hasAnalysePriceZone)
{
//
@@ -706,6 +678,8 @@ bool DetectX121SMCXRSPVISiganlSetup(
bool isVerificationPriceZoneBearish = false;
bool isVerificationPriceZoneValidForPeak = false;
bool isVerificationPriceZoneValidForVale = false;
//
if (hasVerificationPriceZone)
{
//
@@ -890,6 +864,314 @@ bool DetectX121SMCXRSPVISiganlSetup(
//
;
//
// Detect PV Pivot ...
//
bool isPivotPeakZoneRejected = false;
bool isPivotPeakZoneBreakedUp = false;
bool isPivotPeakZoneBreakedDown = false;
bool isPivotValeZoneRejected = false;
bool isPivotValeZoneBreakedUp = false;
bool isPivotValeZoneBreakedDown = false;
bool hasPivot = conditions.pivotZone.IsValid();
if (!hasPivot)
{
//
hasPivot = IsValid(X121SMCXRSPVIPivotStart);
if (!hasPivot)
{
//
bool isNewVale = decisionXConditions.isNewVale;
bool isNewValeOverLast = decisionXConditions.isNewValeOverLast;
bool isNewValeUnderLast = decisionXConditions.isNewValeUnderLast;
bool isSameVales = decisionXConditions.valesBuffer[1] ==
decisionXConditions.valesBuffer[2] &&
decisionXConditions.valesBuffer[2] ==
decisionXConditions.valesBuffer[3];
bool isSameCycleVales = decisionXConditions.valesBuffer[1] ==
analyseXConditions.valesBuffer[1] &&
analyseXConditions.valesBuffer[1] ==
verificationXConditions.valesBuffer[1];
//
bool isNewPeak = decisionXConditions.isNewPeak;
bool isNewPeakOverLast = decisionXConditions.isNewPeakOverLast;
bool isNewPeakUnderLast = decisionXConditions.isNewPeakUnderLast;
bool isSamePeaks = decisionXConditions.peaksBuffer[1] ==
decisionXConditions.peaksBuffer[2] &&
decisionXConditions.peaksBuffer[2] ==
decisionXConditions.peaksBuffer[3];
bool isSameCyclePeaks = decisionXConditions.peaksBuffer[1] ==
analyseXConditions.peaksBuffer[1] &&
analyseXConditions.peaksBuffer[1] ==
verificationXConditions.peaksBuffer[1];
//
bool isValeStart =
// isSameVales;
isSameVales &&
isSameCycleVales;
bool isPeakStart =
// isSamePeaks;
isSamePeaks &&
isSameCyclePeaks;
//
bool isStart = isPeakStart ||
isValeStart;
if (isStart)
{
//
X121SMCXRSPVIPivotStart = cTime;
X121SMCXRSPVIPivotType =
isPeakStart
? XPV_PEAK
: XPV_VALE;
//
X121SMCXRSPVIPivotPeak = decisionXConditions.peaksBuffer[1];
X121SMCXRSPVIPivotVale = decisionXConditions.valesBuffer[1];
}
//
hasPivot = IsValid(X121SMCXRSPVIPivotStart);
//
// Create XPVPivot instance ...
if (hasPivot)
{
//
conditions.pivotZone.symbol = symbol;
conditions.pivotZone.period = period;
//
conditions.pivotZone.to = cTime;
conditions.pivotZone.repetition = 3;
//
conditions.pivotZone.upper = X121SMCXRSPVIPivotPeak;
conditions.pivotZone.lower = X121SMCXRSPVIPivotVale;
//
conditions.pivotZone.type = X121SMCXRSPVIPivotType;
conditions.pivotZone.from = X121SMCXRSPVIPivotStart;
}
}
}
//
if (hasPivot)
{
//
bool isBreaked = X121SMCXRSPVIPivotType == XPV_PEAK
? decisionXConditions.isBreakedUpPrevPeak
: decisionXConditions.isBreakedDownPrevVale;
//
if (!isBreaked)
{
//
X121SMCXRSPVIPivotPeak = decisionXConditions.peaksBuffer[1];
X121SMCXRSPVIPivotVale = decisionXConditions.valesBuffer[1];
//
conditions.pivotZone.to = cTime;
conditions.pivotZone.repetition++;
conditions.pivotZone.upper = X121SMCXRSPVIPivotPeak;
conditions.pivotZone.lower = X121SMCXRSPVIPivotVale;
}
else
{
//
X121SMCXRSPVIPivotEnd = cTime;
conditions.pivotZone.to = cTime;
}
//
// Fill Pivot State ...
//
XPOIState analysePivotState;
DetectPivotPOIs(
conditions.pivotZone,
analyseState,
analysePivotState //
);
//
XPOIState decisionPivotState;
DetectPivotPOIs(
conditions.pivotZone,
decisionState,
decisionPivotState //
);
//
// Combine two State ...
XPOIState combinedPivotState;
XPOIState iStates[];
AddRef(
analysePivotState,
iStates //
);
AddRef(
decisionPivotState,
iStates //
);
CombineStates(
combinedPivotState,
iStates //
);
combinedPivotState = decisionPivotState;
//
ArrayFree(iStates);
//
combinedPivotState.time = decisionPivotState.time;
combinedPivotState.symbol = decisionPivotState.symbol;
combinedPivotState.period = decisionPivotState.period;
//
// Hold Only Areas Which on Upper or Lower bondary of Pivot Zone ...
FilterPivotState(
conditions.pivotZone,
combinedPivotState //
);
//
conditions.pivotZone.state = combinedPivotState;
//
double peakUpper = 0;
double peakLower = 0;
double valeUpper = 0;
double valeLower = 0;
//
datetime peakTo = NULL;
datetime valeTo = NULL;
datetime peakFrom = NULL;
datetime valeFrom = NULL;
//
bool hasBoxData = DetectPivotStateBoxData(
conditions.pivotZone,
peakUpper,
peakLower,
peakFrom,
peakTo,
valeUpper,
valeLower,
valeFrom,
valeTo //
);
//
// Calculate Pivot Tick Zones ...
//
int ticksLevels = decisionCycleHelper
.mPOIDetector
.TicksRangeZoneLevel();
int ticksRange = decisionCycleHelper
.mPOIDetector
.TicksRangeZoneRange();
//
CalculatePivotTickZone(
conditions.pivotZone,
ticksLevels,
ticksRange //
);
//
isPivotPeakZoneRejected =
hasBoxData &&
(
//
IsBarReject(
peakLower,
X_DIRECTION_BEARISH,
cBar //
)
//
||
//
IsBarReject(
peakUpper,
X_DIRECTION_BEARISH,
cBar //
)
//
);
isPivotPeakZoneBreakedUp =
hasBoxData &&
IsBarBreak(
peakUpper,
X_DIRECTION_BULLISH,
cBar //
);
isPivotPeakZoneBreakedDown =
hasBoxData &&
IsBarBreak(
peakLower,
X_DIRECTION_BEARISH,
cBar //
);
//
isPivotValeZoneRejected =
hasBoxData &&
(
//
IsBarReject(
valeLower,
X_DIRECTION_BULLISH,
cBar //
)
//
||
//
IsBarReject(
valeUpper,
X_DIRECTION_BULLISH,
cBar //
)
//
);
isPivotValeZoneBreakedUp =
hasBoxData &&
IsBarBreak(
valeUpper,
X_DIRECTION_BULLISH,
cBar //
);
isPivotValeZoneBreakedDown =
hasBoxData &&
IsBarBreak(
valeLower,
X_DIRECTION_BEARISH,
cBar //
);
}
//
bool isPivotEnded = IsValid(X121SMCXRSPVIPivotEnd);
if (isPivotEnded)
{
//
X121SMCXRSPVIPivotPeak = 0;
X121SMCXRSPVIPivotVale = 0;
X121SMCXRSPVIPivotEnd = NULL;
X121SMCXRSPVIPivotStart = NULL;
X121SMCXRSPVIPivotType = XPV_NONE;
//
conditions.pivotZone.Clean();
}
//
// Summarize Conditions ...
@@ -1109,7 +1391,7 @@ bool DetectX121SMCXRSPVISiganlSetup(
//
// Manipulate Conditions Pivot ...
//
double pivot = decisionXConditions.sarBuffer[1];
pivot = (decisionXConditions.sarBuffer[1] + decisionXConditions.strBuffer[1]) / 2;
@@ -1191,19 +1473,45 @@ bool DetectX121SMCXRSPVISiganlSetup(
: pzPeak;
}
//
//
//
//
bool isCond5Bullish =
//
hasDecisionBullishTrend &&
isPivotValeZoneRejected
//
;
//
bool isCond5Bearish =
//
hasDecisionBearishTrend &&
isPivotPeakZoneRejected
//
;
//
bool hasCond5Conditions = isCond5Bullish ||
isCond5Bearish;
//
isBullish =
isCond1Bullish ||
isCond2Bullish ||
isCond3Bullish ||
isCond4Bullish;
isCond5Bullish &&
(isCond1Bullish ||
isCond2Bullish ||
isCond3Bullish ||
isCond4Bullish);
//
isBearish =
isCond1Bearish ||
isCond2Bearish ||
isCond3Bearish ||
isCond4Bearish;
isCond5Bearish &&
(isCond1Bearish ||
isCond2Bearish ||
isCond3Bearish ||
isCond4Bearish);
//
result = isBullish ||
@@ -412,68 +412,26 @@ bool DetectX121SMCXSTRPVSiganlSetup(
//
// Consolidation ...
ENUM_X_DIRECTION consolidationMarketDir;
bool hasConsolidationMarketDir = consolidationCycleHelper
.DetectMarketStructure(consolidationMarketDir);
//
bool hasConsolidationBullishTrend =
hasConsolidationMarketDir &&
IsBullish(consolidationMarketDir);
//
bool hasConsolidationBearishTrend =
hasConsolidationMarketDir &&
IsBearish(consolidationMarketDir);
bool hasConsolidationBullishTrend = consolidationXConditions.isTrendBullish;
bool hasConsolidationBearishTrend = consolidationXConditions.isTrendBearish;
//
// Verification ...
ENUM_X_DIRECTION verificationMarketDir;
bool hasVerificationMarketDir = verificationCycleHelper
.DetectMarketStructure(verificationMarketDir);
//
bool hasVerificationBullishTrend =
hasVerificationMarketDir &&
IsBullish(verificationMarketDir);
//
bool hasVerificationBearishTrend =
hasVerificationMarketDir &&
IsBearish(verificationMarketDir);
bool hasVerificationBullishTrend = verificationXConditions.isTrendBullish;
bool hasVerificationBearishTrend = verificationXConditions.isTrendBearish;
//
// Analyse ...
ENUM_X_DIRECTION analyseMarketDir;
bool hasAnalyseMarketDir = analyseCycleHelper
.DetectMarketStructure(analyseMarketDir);
//
bool hasAnalyseBullishTrend =
hasAnalyseMarketDir &&
IsBullish(analyseMarketDir);
//
bool hasAnalyseBearishTrend =
hasAnalyseMarketDir &&
IsBearish(analyseMarketDir);
bool hasAnalyseBullishTrend = analyseXConditions.isTrendBullish;
bool hasAnalyseBearishTrend = analyseXConditions.isTrendBearish;
//
// Decision ...
ENUM_X_DIRECTION decisionMarketDir;
bool hasDecisionMarketDir = decisionCycleHelper
.DetectMarketStructure(decisionMarketDir);
//
bool hasDecisionBullishTrend =
hasDecisionMarketDir &&
IsBullish(decisionMarketDir);
//
bool hasDecisionBearishTrend =
hasDecisionMarketDir &&
IsBearish(decisionMarketDir);
bool hasDecisionBullishTrend = decisionXConditions.isTrendBullish;
bool hasDecisionBearishTrend = decisionXConditions.isTrendBearish;
//
// Detect Bar State ...