This commit is contained in:
2024-12-30 05:11:11 +03:30
parent 4094a92949
commit 1868587608
2 changed files with 388 additions and 122 deletions
+344 -78
View File
@@ -27,6 +27,7 @@
//
const string X121SMCXTWPV_Method_1_Token = "X121SMCXTWPV_1";
const string X121SMCXTWPV_Method_2_Token = "X121SMCXTWPV_2";
const string X121SMCXTWPV_Method_3_Token = "X121SMCXTWPV_3";
//
enum ENUM_X_X121SMC_XTWPV_METHODS
@@ -34,6 +35,7 @@ enum ENUM_X_X121SMC_XTWPV_METHODS
X_X121SMC_XTWPV_METHOD_UNKNOWN,
X_X121SMC_XTWPV_METHOD_1,
X_X121SMC_XTWPV_METHOD_2,
X_X121SMC_XTWPV_METHOD_3,
};
//
@@ -488,6 +490,18 @@ bool DetectX121SMCXTWPVSiganlSetup(
return result;
}
//
XOHCL pBar;
result = pBar.Init(
symbol,
period,
pIndex //
);
if (!result)
{
return result;
}
//
double ask = GetAsk(symbol);
double bid = GetBid(symbol);
@@ -626,6 +640,40 @@ bool DetectX121SMCXTWPVSiganlSetup(
//
// Setup Conditions ...
//
// Select Sources ...
XC121SMCCycleHelper *helper = analyseCycleHelper;
X121SMCCycleConditions helperConditions = analyseConditions;
XPOIState helperState = analyseState;
//
// Instance Helper CBar ...
XOHCL helperCBar;
result = helper.GetBar(
cBar,
helperCBar //
);
if (!result)
{
return result;
}
//
double bullishFib = GetFibonacciLevel(
helperCBar.high,
helperCBar.low,
GetFiboLevelValue(X_FIBO_LEVEL_382),
-1 //
);
//
double bearishFib = GetFibonacciLevel(
helperCBar.high,
helperCBar.low,
GetFiboLevelValue(X_FIBO_LEVEL_382),
1 //
);
//
// Detect Market Trend ...
// ENUM_X_DIRECTION trend;
@@ -655,21 +703,6 @@ bool DetectX121SMCXTWPVSiganlSetup(
//
// Retrieve Active Pivots ...
//
// Select Source Cycle Helper ...
XC121SMCCycleHelper *helper = analyseCycleHelper;
X121SMCCycleConditions helperConditions = analyseConditions;
XPOIState helperState = analyseState;
XOHCL helperCBar;
result = helper.GetBar(
cBar,
helperCBar //
);
if (!result)
{
return result;
}
//
XPVPivot peakPivot;
bool hasPeakPivot = helper
@@ -725,6 +758,7 @@ bool DetectX121SMCXTWPVSiganlSetup(
helper.FillPivotState(conditions.pivot);
//
// Check Pivot Renewation ...
bool hasNewPivot =
//
(hasPeakPivot &&
@@ -743,7 +777,113 @@ bool DetectX121SMCXTWPVSiganlSetup(
}
//
// Waits for new Peaks or Vales ...
// XOHCL Conditions ...
//
// Fibo Pressure ...
ENUM_X_DIRECTION pBarFiboPressureDir;
bool pBarHasFiboPressure = triggerCycleHelper
.mBarAnalyser
.HasFiboPressure(
pBar,
pBarFiboPressureDir //
);
bool isPBarHasBullishFiboPressure =
pBarHasFiboPressure &&
IsBullish(pBarFiboPressureDir);
bool isPBarHasBearishFiboPressure =
pBarHasFiboPressure &&
IsBearish(pBarFiboPressureDir);
//
// Rejection ...
ENUM_X_DIRECTION pBarRejectionDir;
bool isPBarRejected = triggerCycleHelper
.mBarAnalyser
.IsRejectionBar(
pBar,
pBarRejectionDir,
0 //
);
bool isPBarBullishRejected =
isPBarRejected &&
IsBullish(pBarRejectionDir);
bool isPBarBearishRejected =
isPBarRejected &&
IsBearish(pBarRejectionDir);
//
// Momentum ...
ENUM_X_DIRECTION cBarMomentumDir;
bool isCBarMomentumBar = triggerCycleHelper
.mBarAnalyser
.IsMomentumBar(
cBar,
cBarMomentumDir,
0 //
);
bool isCBarBullishMomentumBar =
isCBarMomentumBar &&
IsBullish(cBarMomentumDir);
bool isCBarBearishMomentumBar =
isCBarMomentumBar &&
IsBearish(cBarMomentumDir);
//
// Engulfing ...
ENUM_X_DIRECTION cBarEngulfDir;
bool isCBarEngulfed = triggerCycleHelper
.mBarAnalyser
.IsEngulfBar(
cBar,
cBarEngulfDir,
0 //
);
bool isCBarBullishEngulfed =
isCBarEngulfed &&
IsBullish(cBarEngulfDir);
bool isCBarBearishEngulfed =
isCBarEngulfed &&
IsBearish(cBarEngulfDir);
//
// Helper cBar Conditions ...
bool isBearishFiboPassed = bullishFib <= conditions.pivot.lower;
bool isBullishFiboPassed = bearishFib >= conditions.pivot.upper;
//
// Detect a Zone Which Price Inside it ...
// Helper (Optional) ...
conditions.CleanPriceInsideZones();
bool hasPriceInsideZones = conditions.HasPriceInsideZones();
int priceInsideZonesCount = conditions.CountPriceInsideZones();
if (!hasPriceInsideZones)
{
//
hasPriceInsideZones = DetectPriceInsideZones(
verificationState,
cBar,
priceInsideZonesCount,
conditions.hasSupportZone,
conditions.supportZone,
conditions.hasResistanceZone,
conditions.resistanceZone,
conditions.hasSupplyZone,
conditions.supplyZone,
conditions.hasDemandZone,
conditions.demandZone,
conditions.hasOrderBlock,
conditions.orderBlock,
conditions.hasFairValueGap,
conditions.fairValueGap //
);
//
priceInsideZonesCount = conditions.CountPriceInsideZones();
}
//
// PV Conditions ...
//
double peak = helperConditions.x121Conditions.peaksBuffer[1];
@@ -766,35 +906,166 @@ bool DetectX121SMCXTWPVSiganlSetup(
bool isNewValeUnderLast = helperConditions.x121Conditions.isNewValeUnderLast;
//
result = isNewPeak ||
isNewVale;
if (!result)
double triggerPeak = triggerConditions.x121Conditions.peaksBuffer[1];
double triggerVale = triggerConditions.x121Conditions.valesBuffer[1];
//
int condition2MinPVDiffPoint = 30;
bool isPeakDiffPointPassed = peakDiff >= (condition2MinPVDiffPoint * points);
bool isValeDiffPointPassed = valeDiff >= (condition2MinPVDiffPoint * points);
//
// DONCHAIN Conditions ...
//
double donCloseUpper = helperConditions.x121Conditions.donCloseUpperBuffer[1];
double donCloseLower = helperConditions.x121Conditions.donCloseLowerBuffer[1];
//
double donOpenUpper = helperConditions.x121Conditions.donOpenUpperBuffer[1];
double donOpenLower = helperConditions.x121Conditions.donOpenLowerBuffer[1];
//
// OPEN ...
double triggerDonOpenUpper = triggerConditions.x121Conditions.donOpenUpperBuffer[1];
double triggerDonOpenLower = triggerConditions.x121Conditions.donOpenLowerBuffer[1];
double triggerDonOpenUpperPrev = triggerConditions.x121Conditions.donOpenUpperBuffer[2];
double triggerDonOpenLowerPrev = triggerConditions.x121Conditions.donOpenLowerBuffer[2];
//
// HIGH ...
double triggerDonHighUpper = triggerConditions.x121Conditions.donHighUpperBuffer[1];
double triggerDonHighLower = triggerConditions.x121Conditions.donHighLowerBuffer[1];
double triggerDonHighUpperPrev = triggerConditions.x121Conditions.donHighUpperBuffer[2];
double triggerDonHighLowerPrev = triggerConditions.x121Conditions.donHighLowerBuffer[2];
//
// CLOSE ...
double triggerDonCloseUpper = triggerConditions.x121Conditions.donCloseUpperBuffer[1];
double triggerDonCloseLower = triggerConditions.x121Conditions.donCloseLowerBuffer[1];
double triggerDonCloseUpperPrev = triggerConditions.x121Conditions.donCloseUpperBuffer[2];
double triggerDonCloseLowerPrev = triggerConditions.x121Conditions.donCloseLowerBuffer[2];
//
// LOW ...
double triggerDonLowUpper = triggerConditions.x121Conditions.donLowUpperBuffer[1];
double triggerDonLowLower = triggerConditions.x121Conditions.donLowLowerBuffer[1];
double triggerDonLowUpperPrev = triggerConditions.x121Conditions.donLowUpperBuffer[2];
double triggerDonLowLowerPrev = triggerConditions.x121Conditions.donLowLowerBuffer[2];
//
// Calculate PBar Rejected Don Upper and Lower ...
//
bool isPBarRejectDonLowUpper = pBar.high > triggerDonLowUpperPrev;
bool isPBarRejectDonOpenUpper = pBar.high > triggerDonOpenUpperPrev;
bool isPBarRejectDonCloseUpper = pBar.high > triggerDonCloseUpperPrev;
bool isPBarRejectedDonUpper = isPBarRejectDonLowUpper ||
isPBarRejectDonOpenUpper ||
isPBarRejectDonCloseUpper;
//
bool isPBarRejectDonHighLower = pBar.low < triggerDonHighLowerPrev;
bool isPBarRejectDonOpenLower = pBar.low < triggerDonOpenLowerPrev;
bool isPBarRejectDonCloseLower = pBar.low < triggerDonCloseLowerPrev;
bool isPBarRejectedDonLower = isPBarRejectDonHighLower ||
isPBarRejectDonOpenLower ||
isPBarRejectDonCloseLower;
//
// Calculate PBar Breaked Don Upper and Lower ...
//
bool isPBarBreakdDonLowUpper = pBar.GetUp() > triggerDonLowUpperPrev &&
pBar.GetDown() < triggerDonLowUpperPrev;
bool isPBarBreakdDonOpenUpper = pBar.GetUp() > triggerDonOpenUpperPrev &&
pBar.GetDown() < triggerDonOpenUpperPrev;
bool isPBarBreakdDonCloseUpper = pBar.GetUp() > triggerDonCloseUpperPrev &&
pBar.GetDown() < triggerDonCloseUpperPrev;
bool isPBarBreakedDonUpper = isPBarBreakdDonLowUpper ||
isPBarBreakdDonOpenUpper ||
isPBarBreakdDonCloseUpper;
//
bool isPBarBreakdDonHighLower = pBar.GetUp() > triggerDonHighLowerPrev &&
pBar.GetDown() < triggerDonHighLowerPrev;
bool isPBarBreakdDonOpenLower = pBar.GetUp() > triggerDonOpenLowerPrev &&
pBar.GetDown() < triggerDonOpenLowerPrev;
bool isPBarBreakdDonCloseLower = pBar.GetUp() > triggerDonCloseLowerPrev &&
pBar.GetDown() < triggerDonCloseLowerPrev;
bool isPBarBreakedDonLower = isPBarBreakdDonHighLower ||
isPBarBreakdDonOpenLower ||
isPBarBreakdDonCloseLower;
//
bool isRejectDonUpper =
//
// PBar ...
isPBarBearishRejected &&
isPBarRejectedDonUpper &&
//
// CBar ...
isCBarBearishMomentumBar &&
cBar.close < triggerDonLowUpper &&
//
triggerPeak == triggerDonHighUpper &&
true
//
;
//
bool isRejectDonLower =
//
// PBar ...
isPBarBullishRejected &&
isPBarRejectedDonLower &&
//
// CBar ...
isCBarBullishMomentumBar &&
cBar.close > triggerDonHighLower &&
//
triggerVale == triggerDonLowLower &&
true
//
;
//
if (isRejectDonUpper ||
isRejectDonLower)
{
return result;
Print("Don Rejected ...");
}
//
// Calculate Conditions ...
bool isBreakedDonUpper =
//
false
//
;
//
double bullishFib = GetFibonacciLevel(
helperCBar.high,
helperCBar.low,
GetFiboLevelValue(X_FIBO_LEVEL_382),
-1 //
);
bool isBreakedDonLower =
//
false
//
;
//
double bearishFib = GetFibonacciLevel(
helperCBar.high,
helperCBar.low,
GetFiboLevelValue(X_FIBO_LEVEL_382),
1 //
);
bool isEngulfedDonUpper =
//
false
//
;
//
bool isBearishFiboPassed = bullishFib <= conditions.pivot.lower;
bool isBullishFiboPassed = bearishFib >= conditions.pivot.upper;
bool isEngulfedDonLower =
//
false
//
;
//
// Method 1 ...
//
// Bullish Conditions 1 ...
@@ -839,49 +1110,10 @@ bool DetectX121SMCXTWPVSiganlSetup(
}
//
// Detect a Zone Which Price Inside it ...
conditions.CleanPriceInsideZones();
bool hasPriceInsideZones = conditions.HasPriceInsideZones();
int priceInsideZonesCount = conditions.CountPriceInsideZones();
if (!hasPriceInsideZones)
{
//
hasPriceInsideZones = DetectPriceInsideZones(
verificationState,
cBar,
priceInsideZonesCount,
conditions.hasSupportZone,
conditions.supportZone,
conditions.hasResistanceZone,
conditions.resistanceZone,
conditions.hasSupplyZone,
conditions.supplyZone,
conditions.hasDemandZone,
conditions.demandZone,
conditions.hasOrderBlock,
conditions.orderBlock,
conditions.hasFairValueGap,
conditions.fairValueGap //
);
//
priceInsideZonesCount = conditions.CountPriceInsideZones();
}
//
double donCloseUpper = helperConditions.x121Conditions.donCloseUpperBuffer[1];
double donCloseLower = helperConditions.x121Conditions.donCloseLowerBuffer[1];
//
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);
// Method 2 ...
//
// Bullish Conditions 2 ...
bool bullishConditions2 =
//
false
@@ -899,6 +1131,7 @@ bool DetectX121SMCXTWPVSiganlSetup(
}
//
// Bearish Conditions 2 ...
bool bearishConditions2 =
//
false
@@ -915,6 +1148,37 @@ bool DetectX121SMCXTWPVSiganlSetup(
conditions.method = ToString(X_X121SMC_XTWPV_METHOD_2);
}
//
// Method 3 ...
//
// Bullish Conditions 3 ...
bool bullishConditions3 =
//
false
//
;
if (bullishConditions3)
{
//
conditions.point = vale;
conditions.method = ToString(X_X121SMC_XTWPV_METHOD_3);
}
//
// Bearish Conditions 3 ...
bool bearishConditions3 =
//
false
//
;
if (bearishConditions3)
{
//
conditions.point = peak;
conditions.method = ToString(X_X121SMC_XTWPV_METHOD_3);
}
//
// Summary Conditions ...
@@ -922,7 +1186,8 @@ bool DetectX121SMCXTWPVSiganlSetup(
isBullish =
//
bullishConditions1 ||
bullishConditions2
bullishConditions2 ||
bullishConditions3
//
;
@@ -930,7 +1195,8 @@ bool DetectX121SMCXTWPVSiganlSetup(
isBearish =
//
bearishConditions1 ||
bearishConditions2
bearishConditions2 ||
bearishConditions3
//
;
+44 -44
View File
@@ -716,52 +716,52 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy
hasPriceInsideZone;
if (canDraw)
{
//
ClearDraws();
// //
// ClearDraws();
//
// Draw Pivot Zone ...
if (hasPivot)
{
//
XCBaseObject *drawnObjects[];
int drawnObjectsCount = DrawXTWPVPivotZone(
mXTWPVConditions,
mPOIDrawer,
drawnObjects,
true, // Draw State ...
true, // Draw Ticks Zone ...
true, // Ignore SwingHighs ...
true, // Ignore SwingLows ...
true, // Ignore SupportZones ...
true, // Ignore ResistanceZones ...
true, // Ignore SupplyZones ...
true, // Ignore DemandZones ...
true, // Ignore BullishOrderBlocks ...
true, // Ignore BearishOrderBlocks ...
true, // Ignore BullishFairValueGaps ...
true, // Ignore BearishFairValueGaps ...
true, // Ignore BullishRejectionBars ...
true, // Ignore BearishRejectionBars ...
true, // Ignore BullishMomentumBars ...
true // Ignore BearishMomentumBars ...
);
AddObjectsIfNotExists(drawnObjects);
}
// //
// // Draw Pivot Zone ...
// if (hasPivot)
// {
// //
// XCBaseObject *drawnObjects[];
// int drawnObjectsCount = DrawXTWPVPivotZone(
// mXTWPVConditions,
// mPOIDrawer,
// drawnObjects,
// true, // Draw State ...
// true, // Draw Ticks Zone ...
// true, // Ignore SwingHighs ...
// true, // Ignore SwingLows ...
// true, // Ignore SupportZones ...
// true, // Ignore ResistanceZones ...
// true, // Ignore SupplyZones ...
// true, // Ignore DemandZones ...
// true, // Ignore BullishOrderBlocks ...
// true, // Ignore BearishOrderBlocks ...
// true, // Ignore BullishFairValueGaps ...
// true, // Ignore BearishFairValueGaps ...
// true, // Ignore BullishRejectionBars ...
// true, // Ignore BearishRejectionBars ...
// true, // Ignore BullishMomentumBars ...
// true // Ignore BearishMomentumBars ...
// );
// AddObjectsIfNotExists(drawnObjects);
// }
//
// Draw Price Inside Zones ...
if (hasPriceInsideZone)
{
//
XCBaseObject *drawnObjects[];
int drawnObjectsCount = DrawTWPVPriceInsideZones(
mXTWPVConditions,
mPOIDrawer,
drawnObjects //
);
AddObjectsIfNotExists(drawnObjects);
}
// //
// // Draw Price Inside Zones ...
// if (hasPriceInsideZone)
// {
// //
// XCBaseObject *drawnObjects[];
// int drawnObjectsCount = DrawTWPVPriceInsideZones(
// mXTWPVConditions,
// mPOIDrawer,
// drawnObjects //
// );
// AddObjectsIfNotExists(drawnObjects);
// }
}
//