Files
MQL5Data/Documents/BKP/1/tmp.codes.mq5
T

598 lines
16 KiB
Plaintext

//
double cPZoneUpper = 0;
double cPZoneLower = 0;
datetime cPZoneFrom = NULL;
datetime cPZoneTo = NULL;
result = consolidationPriceZone.GetBoxData(
X_DIRECTION_ALL,
cPZoneUpper,
cPZoneLower,
cPZoneFrom,
cPZoneTo //
);
if (!result)
{
return result;
}
//
double aPZoneUpper = 0;
double aPZoneLower = 0;
datetime aPZoneFrom = NULL;
datetime aPZoneTo = NULL;
result = analysePriceZone.GetBoxData(
X_DIRECTION_ALL,
aPZoneUpper,
aPZoneLower,
aPZoneFrom,
aPZoneTo //
);
if (!result)
{
return result;
}
//
// RSI ...
double rsi = decisionConditions.x121Conditions.rsiBuffer[1];
//
bool isRSIOverBought = decisionConditions.x121Conditions.isRSIOverBought;
bool isRSICrossedOverOverBought = decisionConditions.x121Conditions.isRSICrossedOverOverBought;
bool isRSICrossedUnderOverBought = decisionConditions.x121Conditions.isRSICrossedUnderOverBought;
//
bool isRSIOverSold = decisionConditions.x121Conditions.isRSIOverSold;
bool isRSICrossedOverOverSold = decisionConditions.x121Conditions.isRSICrossedOverOverSold;
bool isRSICrossedUnderOverSold = decisionConditions.x121Conditions.isRSICrossedUnderOverSold;
//
// PV ...
double peak = decisionConditions.x121Conditions.peaksBuffer[1];
double vale = decisionConditions.x121Conditions.valesBuffer[1];
//
bool isNewPeak = decisionConditions.x121Conditions.isNewPeak;
bool isNewPeakOverLast = decisionConditions.x121Conditions.isNewPeakOverLast;
bool isNewPeakUnderLast = decisionConditions.x121Conditions.isNewPeakUnderLast;
//
bool isNewVale = decisionConditions.x121Conditions.isNewVale;
bool isNewValeOverLast = decisionConditions.x121Conditions.isNewValeOverLast;
bool isNewValeUnderLast = decisionConditions.x121Conditions.isNewValeUnderLast;
//
// STR ...
double str = decisionConditions.x121Conditions.strBuffer[1];
//
bool isStrBullish = decisionConditions.x121Conditions.isStrBullish;
bool isStrBearish = decisionConditions.x121Conditions.isStrBearish;
//
bool isStrSwitchedToBullish = decisionConditions.x121Conditions.isStrSwitchedToBullish;
bool isStrSwitchedToBearish = decisionConditions.x121Conditions.isStrSwitchedToBearish;
//
// ATR ...
double atr = decisionConditions.x121Conditions.atrBuffer[1];
double atrUpper = decisionConditions.x121Conditions.atrUpperBuffer[1];
double atrLower = decisionConditions.x121Conditions.atrLowerBuffer[1];
//
bool isCloseOverATRUpper = decisionConditions.x121Conditions.isCloseOverATRUpper;
bool isCloseOverATRLower = decisionConditions.x121Conditions.isCloseOverATRLower;
//
bool isCloseUnderATRUpper = decisionConditions.x121Conditions.isCloseUnderATRUpper;
bool isCloseUnderATRLower = decisionConditions.x121Conditions.isCloseUnderATRLower;
//
bool isRejectUpATRUpper = decisionConditions.x121Conditions.isRejectUpATRUpper;
bool isRejectDownATRUpper = decisionConditions.x121Conditions.isRejectDownATRUpper;
//
bool isRejectUpATRLower = decisionConditions.x121Conditions.isRejectUpATRLower;
bool isRejectDownATRLower = decisionConditions.x121Conditions.isRejectDownATRLower;
//
bool isBreakUpATRUpper = decisionConditions.x121Conditions.isBreakUpATRUpper;
bool isBreakDownATRUpper = decisionConditions.x121Conditions.isBreakDownATRUpper;
//
bool isBreakUpATRLower = decisionConditions.x121Conditions.isBreakUpATRLower;
bool isBreakDownATRLower = decisionConditions.x121Conditions.isBreakDownATRLower;
//
// SAR ...
double sar = decisionConditions.x121Conditions.sarBuffer[1];
//
bool isSarBullish = decisionConditions.x121Conditions.isSarBullish;
bool isSarBearish = decisionConditions.x121Conditions.isSarBearish;
//
bool isSarSwitchedToBullish = decisionConditions.x121Conditions.isSarSwitchedToBullish;
bool isSarSwitchedToBearish = decisionConditions.x121Conditions.isSarSwitchedToBearish;
//
// DON ...
//
double donOpenUpper = decisionConditions.x121Conditions.donOpenUpperBuffer[1];
double donOpenLower = decisionConditions.x121Conditions.donOpenLowerBuffer[1];
double donHighUpper = decisionConditions.x121Conditions.donHighUpperBuffer[1];
double donHighLower = decisionConditions.x121Conditions.donHighLowerBuffer[1];
double donLowUpper = decisionConditions.x121Conditions.donLowUpperBuffer[1];
double donLowLower = decisionConditions.x121Conditions.donLowLowerBuffer[1];
double donCloseUpper = decisionConditions.x121Conditions.donCloseUpperBuffer[1];
double donCloseLower = decisionConditions.x121Conditions.donCloseLowerBuffer[1];
//
bool isRejectDonOpenUpper = decisionConditions.x121Conditions.isRejectDonOpenUpper;
bool isRejectDonHighUpper = decisionConditions.x121Conditions.isRejectDonHighUpper;
bool isRejectDonLowUpper = decisionConditions.x121Conditions.isRejectDonLowUpper;
bool isRejectDonCloseUpper = decisionConditions.x121Conditions.isRejectDonCloseUpper;
//
bool isRejectDonOpenLower = decisionConditions.x121Conditions.isRejectDonOpenLower;
bool isRejectDonHighLower = decisionConditions.x121Conditions.isRejectDonHighLower;
bool isRejectDonLowLower = decisionConditions.x121Conditions.isRejectDonLowLower;
bool isRejectDonCloseLower = decisionConditions.x121Conditions.isRejectDonCloseLower;
//
bool isBreakDonOpenUpper = decisionConditions.x121Conditions.isBreakDonOpenUpper;
bool isBreakDonHighUpper = decisionConditions.x121Conditions.isBreakDonHighUpper;
bool isBreakDonLowUpper = decisionConditions.x121Conditions.isBreakDonLowUpper;
bool isBreakDonCloseUpper = decisionConditions.x121Conditions.isBreakDonCloseUpper;
//
bool isBreakDonOpenLower = decisionConditions.x121Conditions.isBreakDonOpenLower;
bool isBreakDonHighLower = decisionConditions.x121Conditions.isBreakDonHighLower;
bool isBreakDonLowLower = decisionConditions.x121Conditions.isBreakDonLowLower;
bool isBreakDonCloseLower = decisionConditions.x121Conditions.isBreakDonCloseLower;
//
// VWAP ...
//
// COMPLEX ...
// Complex Conditions ...
//
bool isNewPeakOverATRUpper =
isNewPeak &&
peak > atrUpper;
//
bool isNewValeUnderATRLower =
isNewVale &&
vale < atrLower;
//
bool isDonHighUpperEqualsToPeak =
donHighUpper == peak;
//
bool isDonLowLowerEqualsToVale =
donLowLower == vale;
//
bool isBullishSign = (
//
triggerConditions.x121Conditions.isBreakUpATRLower ||
triggerConditions.x121Conditions.isRejectUpATRLower ||
triggerConditions.x121Conditions.isBreakDonHighLower ||
triggerConditions.x121Conditions.isRejectDonHighLower ||
triggerConditions.x121Conditions.isBreakDonCloseLower ||
triggerConditions.x121Conditions.isRejectDonCloseLower
//
);
bool isBearishSign = (
//
triggerConditions.x121Conditions.isBreakDownATRUpper ||
triggerConditions.x121Conditions.isRejectDownATRUpper ||
triggerConditions.x121Conditions.isBreakDonLowUpper ||
triggerConditions.x121Conditions.isRejectDonLowUpper ||
triggerConditions.x121Conditions.isBreakDonCloseUpper ||
triggerConditions.x121Conditions.isRejectDonCloseUpper
//
);
//
// Check RSI in Over Bought or Over Sold ...
//
bool isRSICrossedOverOverSold = consolidationConditions.x121Conditions.isRSICrossedOverOverSold;
bool isRSICrossedUnderOverBought = consolidationConditions.x121Conditions.isRSICrossedUnderOverBought;
//
result = isRSICrossedOverOverSold ||
isRSICrossedUnderOverBought;
if (!result)
{
return result;
}
///////////////////////////////////////////////
/**
* Draw X121 SMC Conditions ...
*
* @param conditions: X121SMCStrategyConditions instance Reference ...
* @param drawMarketStructure: Boolean ...
* @param drawPriceZones: Boolean ...
* @param drawDecisionZones: Boolean ...
*
* @return ( int )
*/
int DrawX121SMCStrategyConditions(
X121SMCStrategyConditions &conditions,
XCBaseObject *&drawnObjects[],
XCPOIDrawer *drawer,
bool drawMarketStructure = true,
bool drawPriceZones = true,
bool drawDecisionZones = true,
bool drawOnlyPriceZonesBoundary = true //
)
{
//
int result = 0;
//
Clean(drawnObjects);
//
if (drawer == NULL ||
!conditions.IsValid() ||
!HasDirection(conditions.signalDir))
{
return result;
}
//
bool isBullish = IsBullish(conditions.signalDir);
// //
// bool hasPriceZones = conditions.priceZones.IsValid();
// if (hasPriceZones &&
// drawPriceZones)
// {
// //
// XCBaseObject *objects[];
// int objectsCount = drawer.DrawPriceZone(
// conditions.priceZones,
// objects,
// conditions.signalDir,
// drawOnlyPriceZonesBoundary //
// );
// if (IsValidSize(objectsCount))
// {
// //
// Copy(
// objects,
// drawnObjects,
// false //
// );
// }
// }
// //
// bool hasDecisionZones = conditions.decisionZones.IsValid();
// if (hasDecisionZones &&
// drawDecisionZones)
// {
// //
// XCBaseObject *objects[];
// int objectsCount = drawer.DrawPriceZone(
// conditions.decisionZones,
// objects,
// conditions.signalDir,
// drawOnlyPriceZonesBoundary //
// );
// if (IsValidSize(objectsCount))
// {
// //
// Copy(
// objects,
// drawnObjects,
// false //
// );
// }
// }
// //
// bool hasMarketStructure = conditions.marketStructure.IsValid();
// if (hasMarketStructure &&
// drawMarketStructure)
// {
// //
// XCBaseObject *objects[];
// int objectsCount = drawer.DrawMarketStructure(
// conditions.marketStructure,
// objects //
// );
// if (IsValidSize(objectsCount))
// {
// //
// Copy(
// objects,
// drawnObjects,
// false //
// );
// }
// }
//
result = ArraySize(drawnObjects);
//
return result;
}
////////////////////////////////////////////////
// //
// isCBarBearishFormed &&
// (isPivotToDownRejected ||
// isPivotToDownBreaked) &&
// conditions.pivotZone.IsVale() &&
// //
// // SAR ...
// isSarBearishFormed &&
// // //
// // // STR ...
// // !(decisionXConditions.isStrBullish) &&
// // //
// // // VWAP ...
// // !(decisionXConditions.isVWapBullishState ||
// // decisionXConditions.isVWapBullishOrdered) &&
// //
// //
// isCBarBullishFormed &&
// (isPivotToUpRejected ||
// isPivotToUpBreaked) &&
// conditions.pivotZone.IsPeak() &&
// //
// // SAR ...
// isSarBullishFormed &&
// // //
// // // STR ...
// // !(decisionXConditions.isStrBearish) &&
// // //
// // // VWAP ...
// // !(decisionXConditions.isVWapBearishState ||
// // decisionXConditions.isVWapBearishOrdered) &&
// //
/////////////////////////////////////////////////////////////////////
visionXConditions.isBreakedUpPrevCheMax &&
visionXConditions.isCheSwitchedToBullish
visionXConditions.isCheSwitchedToBearish &&
visionXConditions.isBreakedDownPrevCheMin
//////////////////////////////////////////////////////////////////////
//
bool hasOrderBlock = hasBullishOrderBlocks ||
hasBearishOrderBlocks;
if (hasOrderBlock)
{
//
Print("Detect Order Block ...");
//
XCBaseObject *drawnObjects[];
//
if (hasBullishOrderBlocks)
{
//
for (int i = 0; i < bullishOrderBlocksCount; i++)
{
//
XCOrderBlock *iOb = bullishOBs[i];
//
XCBullishOrderBlockObject *iObObj;
bool isCreated = triggerCycleHelper
.mPOIDetector
.mDrawer
.CreateBullishOrderBlock(
iOb,
iObObj //
);
if (isCreated)
{
//
Add(
(XCBaseObject *)iObObj,
drawnObjects //
);
}
}
}
//
if (hasBearishOrderBlocks)
{
//
for (int i = 0; i < bearishOrderBlocksCount; i++)
{
//
XCOrderBlock *iOb = bearishOBs[i];
//
XCBearishOrderBlockObject *iObObj;
bool isCreated = triggerCycleHelper
.mPOIDetector
.mDrawer
.CreateBearishOrderBlock(
iOb,
iObObj //
);
if (isCreated)
{
//
Add(
(XCBaseObject *)iObObj,
drawnObjects //
);
}
}
}
//
int drawnCount = ArraySize(drawnObjects);
if (IsValidSize(drawnCount))
{
Print("");
}
}
//////////////////////////////////////////////////////////////////////
//
// Summarize Conditions ...
//
bool isCondition1Bullish =
//
// Vision ...
(
//
false
//
)
//
&&
//
// Consolidation ...
(
//
true
//
)
//
&&
//
// Verification ...
(
//
true
//
)
//
&&
//
// Analyse ...
(
//
true
//
)
//
&&
//
// Decision ...
(
//
true
//
)
//
;
//
bool isCondition1Bearish =
//
// Vision ...
(
//
false
//
)
//
&&
//
// Consolidation ...
(
//
true
//
)
//
&&
//
// Verification ...
(
//
true
//
)
//
&&
//
// Analyse ...
(
//
true
//
)
//
&&
//
// Decision ...
(
//
true
//
)
//
;
//
bool hasCondition1 = isCondition1Bullish ||
isCondition1Bearish;
if (hasCondition1)
{
//
ENUM_X_DIRECTION pzDir =
isCondition1Bullish
? X_DIRECTION_BULLISH
: X_DIRECTION_BEARISH;
//
double point = GetEntry(
conditions.symbol,
pzDir //
);
//
// Manipulate Conditions Point ...
//
conditions.point = point;
//
// Manipulate Conditions Pivot ...
//
// conditions.pivot =
// isCondition1Bullish
// ? conditions.pivotZone.upper
// : conditions.pivotZone.lower;
}