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_1_Token = "X121SMCXTWPV_1";
const string X121SMCXTWPV_Method_2_Token = "X121SMCXTWPV_2"; const string X121SMCXTWPV_Method_2_Token = "X121SMCXTWPV_2";
const string X121SMCXTWPV_Method_3_Token = "X121SMCXTWPV_3";
// //
enum ENUM_X_X121SMC_XTWPV_METHODS 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_UNKNOWN,
X_X121SMC_XTWPV_METHOD_1, X_X121SMC_XTWPV_METHOD_1,
X_X121SMC_XTWPV_METHOD_2, X_X121SMC_XTWPV_METHOD_2,
X_X121SMC_XTWPV_METHOD_3,
}; };
// //
@@ -488,6 +490,18 @@ bool DetectX121SMCXTWPVSiganlSetup(
return result; return result;
} }
//
XOHCL pBar;
result = pBar.Init(
symbol,
period,
pIndex //
);
if (!result)
{
return result;
}
// //
double ask = GetAsk(symbol); double ask = GetAsk(symbol);
double bid = GetBid(symbol); double bid = GetBid(symbol);
@@ -626,6 +640,40 @@ bool DetectX121SMCXTWPVSiganlSetup(
// //
// Setup Conditions ... // 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 ... // Detect Market Trend ...
// ENUM_X_DIRECTION trend; // ENUM_X_DIRECTION trend;
@@ -655,21 +703,6 @@ bool DetectX121SMCXTWPVSiganlSetup(
// //
// Retrieve Active Pivots ... // 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; XPVPivot peakPivot;
bool hasPeakPivot = helper bool hasPeakPivot = helper
@@ -725,6 +758,7 @@ bool DetectX121SMCXTWPVSiganlSetup(
helper.FillPivotState(conditions.pivot); helper.FillPivotState(conditions.pivot);
// //
// Check Pivot Renewation ...
bool hasNewPivot = bool hasNewPivot =
// //
(hasPeakPivot && (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]; double peak = helperConditions.x121Conditions.peaksBuffer[1];
@@ -766,35 +906,166 @@ bool DetectX121SMCXTWPVSiganlSetup(
bool isNewValeUnderLast = helperConditions.x121Conditions.isNewValeUnderLast; bool isNewValeUnderLast = helperConditions.x121Conditions.isNewValeUnderLast;
// //
result = isNewPeak || double triggerPeak = triggerConditions.x121Conditions.peaksBuffer[1];
isNewVale; double triggerVale = triggerConditions.x121Conditions.valesBuffer[1];
if (!result)
//
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( bool isBreakedDonLower =
helperCBar.high, //
helperCBar.low, false
GetFiboLevelValue(X_FIBO_LEVEL_382), //
-1 // ;
);
// //
double bearishFib = GetFibonacciLevel( bool isEngulfedDonUpper =
helperCBar.high, //
helperCBar.low, false
GetFiboLevelValue(X_FIBO_LEVEL_382), //
1 // ;
);
// //
bool isBearishFiboPassed = bullishFib <= conditions.pivot.lower; bool isEngulfedDonLower =
bool isBullishFiboPassed = bearishFib >= conditions.pivot.upper; //
false
//
;
//
// Method 1 ...
// //
// Bullish Conditions 1 ... // Bullish Conditions 1 ...
@@ -839,49 +1110,10 @@ bool DetectX121SMCXTWPVSiganlSetup(
} }
// //
// Detect a Zone Which Price Inside it ... // Method 2 ...
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);
// //
// Bullish Conditions 2 ...
bool bullishConditions2 = bool bullishConditions2 =
// //
false false
@@ -899,6 +1131,7 @@ bool DetectX121SMCXTWPVSiganlSetup(
} }
// //
// Bearish Conditions 2 ...
bool bearishConditions2 = bool bearishConditions2 =
// //
false false
@@ -915,6 +1148,37 @@ bool DetectX121SMCXTWPVSiganlSetup(
conditions.method = ToString(X_X121SMC_XTWPV_METHOD_2); 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 ... // Summary Conditions ...
@@ -922,7 +1186,8 @@ bool DetectX121SMCXTWPVSiganlSetup(
isBullish = isBullish =
// //
bullishConditions1 || bullishConditions1 ||
bullishConditions2 bullishConditions2 ||
bullishConditions3
// //
; ;
@@ -930,7 +1195,8 @@ bool DetectX121SMCXTWPVSiganlSetup(
isBearish = isBearish =
// //
bearishConditions1 || bearishConditions1 ||
bearishConditions2 bearishConditions2 ||
bearishConditions3
// //
; ;
+44 -44
View File
@@ -716,52 +716,52 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy
hasPriceInsideZone; hasPriceInsideZone;
if (canDraw) if (canDraw)
{ {
// // //
ClearDraws(); // ClearDraws();
// // //
// Draw Pivot Zone ... // // Draw Pivot Zone ...
if (hasPivot) // if (hasPivot)
{ // {
// // //
XCBaseObject *drawnObjects[]; // XCBaseObject *drawnObjects[];
int drawnObjectsCount = DrawXTWPVPivotZone( // int drawnObjectsCount = DrawXTWPVPivotZone(
mXTWPVConditions, // mXTWPVConditions,
mPOIDrawer, // mPOIDrawer,
drawnObjects, // drawnObjects,
true, // Draw State ... // true, // Draw State ...
true, // Draw Ticks Zone ... // true, // Draw Ticks Zone ...
true, // Ignore SwingHighs ... // true, // Ignore SwingHighs ...
true, // Ignore SwingLows ... // true, // Ignore SwingLows ...
true, // Ignore SupportZones ... // true, // Ignore SupportZones ...
true, // Ignore ResistanceZones ... // true, // Ignore ResistanceZones ...
true, // Ignore SupplyZones ... // true, // Ignore SupplyZones ...
true, // Ignore DemandZones ... // true, // Ignore DemandZones ...
true, // Ignore BullishOrderBlocks ... // true, // Ignore BullishOrderBlocks ...
true, // Ignore BearishOrderBlocks ... // true, // Ignore BearishOrderBlocks ...
true, // Ignore BullishFairValueGaps ... // true, // Ignore BullishFairValueGaps ...
true, // Ignore BearishFairValueGaps ... // true, // Ignore BearishFairValueGaps ...
true, // Ignore BullishRejectionBars ... // true, // Ignore BullishRejectionBars ...
true, // Ignore BearishRejectionBars ... // true, // Ignore BearishRejectionBars ...
true, // Ignore BullishMomentumBars ... // true, // Ignore BullishMomentumBars ...
true // Ignore BearishMomentumBars ... // true // Ignore BearishMomentumBars ...
); // );
AddObjectsIfNotExists(drawnObjects); // AddObjectsIfNotExists(drawnObjects);
} // }
// // //
// Draw Price Inside Zones ... // // Draw Price Inside Zones ...
if (hasPriceInsideZone) // if (hasPriceInsideZone)
{ // {
// // //
XCBaseObject *drawnObjects[]; // XCBaseObject *drawnObjects[];
int drawnObjectsCount = DrawTWPVPriceInsideZones( // int drawnObjectsCount = DrawTWPVPriceInsideZones(
mXTWPVConditions, // mXTWPVConditions,
mPOIDrawer, // mPOIDrawer,
drawnObjects // // drawnObjects //
); // );
AddObjectsIfNotExists(drawnObjects); // AddObjectsIfNotExists(drawnObjects);
} // }
} }
// //