This commit is contained in:
2024-12-14 23:40:06 +03:30
parent 5d0431893c
commit 2290e174d8
5 changed files with 4535 additions and 3288 deletions
@@ -1601,6 +1601,67 @@ class XCBarAnalyser : public XCBase
return result; return result;
} }
/**
* Check Fibonacci Level 382 Pressure ...
*
* @param bar: XOHCL instance ...
* @param dir: ENUM_X_DIRECTION member ...
*
* @return ( bool )
*/
bool HasFiboPressure(
XOHCL &bar,
ENUM_X_DIRECTION &dir //
)
{
//
bool result = false;
//
dir = X_DIRECTION_NONE;
//
result = bar.IsValid();
if (!result)
{
return result;
}
//
double bearishFib382 = GetFibonacciLevel(
bar.high,
bar.low,
0.382,
1 //
);
double bullishFib382 = GetFibonacciLevel(
bar.high,
bar.low,
0.382,
-1 //
);
//
bool isBullish = bar.GetDown() > bearishFib382;
bool isBearish = bar.GetUp() < bullishFib382;
//
result = isBullish ||
isBearish;
if (!result)
{
return result;
}
//
dir = isBullish
? X_DIRECTION_BULLISH
: X_DIRECTION_BEARISH;
//
return result;
}
// //
// Support and Resistance Zones ... // Support and Resistance Zones ...
+426 -47
View File
@@ -69,7 +69,6 @@
} }
} }
/////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////
// Conditions Parsing ... // Conditions Parsing ...
/////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////
@@ -168,8 +167,6 @@
XCSwing *m1SwingHigh; XCSwing *m1SwingHigh;
XCSwing *m1SwingLow; XCSwing *m1SwingLow;
// //
// Clean Method ... // Clean Method ...
@@ -268,7 +265,6 @@
// Tools Functions ... // Tools Functions ...
// //
// //
// Custom Tools ... // Custom Tools ...
@@ -365,7 +361,6 @@
// //
// Strategy Class Calling on Conditions Detections ... // Strategy Class Calling on Conditions Detections ...
// //
// Detect Market Structures ... // Detect Market Structures ...
@@ -811,12 +806,10 @@
// //
// DrawState(_5MState); // DrawState(_5MState);
// //
// //
// Strategy Class Tools Functions ... // Strategy Class Tools Functions ...
/** /**
* Detect Specified States Market Structure ... * Detect Specified States Market Structure ...
* *
@@ -1042,11 +1035,8 @@
return result; return result;
} }
//////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////
// //
// Detect Order Blocks ... // Detect Order Blocks ...
// int obsCount = 0; // int obsCount = 0;
@@ -1247,11 +1237,8 @@
// // Find an Order Block ... // // Find an Order Block ...
// bool isBearishOrderBlockRejected = false; // bool isBearishOrderBlockRejected = false;
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
// //
RedrawOrderFlow(); RedrawOrderFlow();
@@ -1271,8 +1258,6 @@
hasPullBack && hasPullBack &&
pullBackDir == X_DIRECTION_BEARISH; pullBackDir == X_DIRECTION_BEARISH;
// //
bool isInDiscount = bool isInDiscount =
bid < pivotMid && bid < pivotMid &&
@@ -1317,8 +1302,6 @@
return result; return result;
} }
// //
// Check 3MA and 3VWAP State ... // Check 3MA and 3VWAP State ...
@@ -1513,8 +1496,6 @@
// //
; ;
// // // //
// hasLong = // hasLong =
// // // //
@@ -1537,9 +1518,6 @@
// // // //
// ; // ;
////////////////////// //////////////////////
// //
@@ -1572,7 +1550,6 @@
return result; return result;
} }
///////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////
// // // //
@@ -1673,7 +1650,6 @@
// // // //
// m1MPOI.Init(); // m1MPOI.Init();
//////////////////////////////// ////////////////////////////////
// delete m1DPOI; // delete m1DPOI;
@@ -1684,10 +1660,8 @@
// delete m5MPOI; // delete m5MPOI;
// delete m1MPOI; // delete m1MPOI;
/////////////////////////////////// ///////////////////////////////////
// //
// Point Of Interests ... // Point Of Interests ...
XCPOIDetector *mTriggerPOIDetector; XCPOIDetector *mTriggerPOIDetector;
@@ -1717,8 +1691,6 @@
// XPOIState _1MState; // XPOIState _1MState;
// XPOIState _CombineState; // XPOIState _CombineState;
/////////////////////////////////////////// ///////////////////////////////////////////
// //
@@ -1803,7 +1775,6 @@
// _States // // _States //
// ); // );
//////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////
// //
@@ -1840,7 +1811,6 @@
selectedSL = conditions.xpvConditions.peaks[cIndex]; selectedSL = conditions.xpvConditions.peaks[cIndex];
} }
///////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////////////
// mOrderFlow[pivotIDX].state.ticksZone = // mOrderFlow[pivotIDX].state.ticksZone =
@@ -2077,7 +2047,6 @@
// } // }
// } // }
////////////////////////////////// //////////////////////////////////
/** /**
@@ -2149,10 +2118,8 @@
// //
} }
//////////////////////////////////////// ////////////////////////////////////////
bool canContinue = true; bool canContinue = true;
while (canContinue) while (canContinue)
{ {
@@ -2262,11 +2229,8 @@
bearOB = mBearOB; bearOB = mBearOB;
} }
//////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////
// //
// Detect an Order Block in Vision ... // Detect an Order Block in Vision ...
if (conditions.visionBullOB == NULL || if (conditions.visionBullOB == NULL ||
@@ -2592,10 +2556,8 @@
// conditions.sl = conditions.triggerConditions.xchsarConditions.cSars[0]; // conditions.sl = conditions.triggerConditions.xchsarConditions.cSars[0];
// } // }
////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////
// //
bool isSamePeaks = bool isSamePeaks =
// //
@@ -2607,7 +2569,8 @@
// conditions.consolidationConditions.x121Conditions.peaksBuffer[0] == conditions.visionConditions.x121Conditions.peaksBuffer[0] // conditions.consolidationConditions.x121Conditions.peaksBuffer[0] == conditions.visionConditions.x121Conditions.peaksBuffer[0]
// //
; ;
if (isSamePeaks) { if (isSamePeaks)
{
Print("isSamePeaks"); Print("isSamePeaks");
} }
@@ -2622,14 +2585,13 @@
// conditions.consolidationConditions.x121Conditions.valesBuffer[0] == conditions.visionConditions.x121Conditions.valesBuffer[0] // conditions.consolidationConditions.x121Conditions.valesBuffer[0] == conditions.visionConditions.x121Conditions.valesBuffer[0]
// //
; ;
if (isSameVales) { if (isSameVales)
{
Print("isSameVales"); Print("isSameVales");
} }
////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////
// //
// Detect Valid Supply and Demand Zones ... // Detect Valid Supply and Demand Zones ...
XCSupplyZone *supplyZone; XCSupplyZone *supplyZone;
@@ -2678,10 +2640,8 @@
// //
Print("Supply and Demand Zone Created ..."); Print("Supply and Demand Zone Created ...");
////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////
// //
int consolidationsCount = mTriggerCycleHelper.CountConsolidationZones(); int consolidationsCount = mTriggerCycleHelper.CountConsolidationZones();
result = IsValidSize(consolidationsCount); result = IsValidSize(consolidationsCount);
@@ -2787,10 +2747,8 @@
// //
Print("BID Inside Zone ..."); Print("BID Inside Zone ...");
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
bool DetectCandlestic( bool DetectCandlestic(
ENUM_X_DIRECTION &dir, ENUM_X_DIRECTION &dir,
X121SMCStrategyConditions &conditions // X121SMCStrategyConditions &conditions //
@@ -2976,6 +2934,427 @@
return result; return result;
} }
///////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////
/**
* Detect Nearest Supply/Demand Zones ...
*
* @param bar: XOHCL instance, Start Bar ...
*
* @return ( bool )
*/
bool DetectValisSupplyZone(
XOHCL &bar,
XCSupplyZone *&supplyZone,
XCDemandZone *&demandZone //
)
{
//
bool result = false;
//
result = bar.IsValid();
if (!result)
{
return result;
}
//
int index = bar.Index();
//
double bid = GetBid(bar.symbol);
double ask = GetAsk(bar.symbol);
//
// Retrieve X121 Cnditions ...
int conditionsLoopback = 10;
X121Conditions x121Conditions;
result = mX121Helper.GetConditions(
x121Conditions,
index,
conditionsLoopback //
);
if (!result)
{
return result;
}
int validPeaksCount = ArraySize(x121Conditions.validPeaksBuffer);
int validValesCount = ArraySize(x121Conditions.validValesBuffer);
//
XPOIState state;
ENUM_XPOI_EVENTS events[];
mPOIDetector.Update(events);
mPOIDetector.GetState(state);
result = state.IsValid() &&
state.HasChild();
if (!result)
{
return result;
}
//
// Supply Zones ...
XCSupplyZone *supplies[];
int suppliesCount = state.CountSupplyZones();
//
// Select Bar Validated Supply Zones ...
if (IsValidSize(suppliesCount))
{
//
for (int i = 0; i < suppliesCount; i++)
{
//
XCSupplyZone *iZone = state.supplyZones[i];
//
// Check Zone is Valid For Bar ...
bool isValid = bar.high < iZone.Lower() &&
ask < iZone.Lower() &&
bid < iZone.Lower();
if (isValid)
{
//
Add(
iZone,
supplies //
);
}
}
}
suppliesCount = ArraySize(supplies);
//
// Select Valid Peaks Filtered Supplies ...
if (IsValidSize(suppliesCount))
{
//
// Check Valid Peaks ...
XCSupplyZone *tmp[];
if (IsValidSize(validPeaksCount))
{
//
for (int i = 0; i < suppliesCount; i++)
{
//
XCSupplyZone *iZone = supplies[i];
//
for (int j = 0; j < validPeaksCount; j++)
{
//
double value = x121Conditions.validPeaksBuffer[j];
//
// Check Valid Peaks in Zone ...
bool isZoneContainsValidValue =
value >= iZone.Lower() &&
value <= iZone.Upper();
if (isZoneContainsValidValue)
{
//
Add(
iZone,
tmp //
);
}
}
}
}
//
Clean(supplies);
Copy(
tmp,
supplies //
);
}
suppliesCount = ArraySize(supplies);
//
// Select Nearest Supply Zone ...
if (IsValidSize(suppliesCount))
{
//
// Check Nearest Supplies ...
for (int i = 0; i < suppliesCount; i++)
{
//
XCSupplyZone *iZone = supplies[i];
if (supplyZone == NULL)
{
supplyZone = iZone;
}
else
{
//
bool canChange =
iZone.Lower() < supplyZone.Lower();
if (canChange)
{
supplyZone = iZone;
}
}
}
}
//
// Demand Zones ...
XCDemandZone *demands[];
int demandsCount = state.CountDemandZones();
//
// Select Bar Validated Demand Zones ...
if (IsValidSize(demandsCount))
{
//
for (int i = 0; i < demandsCount; i++)
{
//
XCDemandZone *iZone = state.demandZones[i];
//
// Check Zone is Valid For Bar ...
bool isValid = bar.low > iZone.Upper() &&
ask > iZone.Upper() &&
bid > iZone.Upper();
if (isValid)
{
//
Add(
iZone,
demands //
);
}
}
}
demandsCount = ArraySize(demands);
//
// Select Valid Vales Filtered Demands ...
if (IsValidSize(demandsCount))
{
//
// Check Valid Vales ...
XCDemandZone *tmp[];
if (IsValidSize(validValesCount))
{
//
for (int i = 0; i < demandsCount; i++)
{
//
XCDemandZone *iZone = demands[i];
//
for (int j = 0; j < validValesCount; j++)
{
//
double value = x121Conditions.validValesBuffer[j];
//
// Check Valid Peaks in Zone ...
bool isZoneContainsValidValue =
value >= iZone.Lower() &&
value <= iZone.Upper();
if (isZoneContainsValidValue)
{
//
Add(
iZone,
tmp //
);
}
}
}
}
//
Clean(demands);
Copy(
tmp,
demands //
);
}
demandsCount = ArraySize(demands);
//
// Select Nearest Demand Zone ...
if (IsValidSize(demandsCount))
{
//
// Check Nearest Demands ...
for (int i = 0; i < demandsCount; i++)
{
//
XCDemandZone *iZone = demands[i];
if (demandZone == NULL)
{
demandZone = iZone;
}
else
{
//
bool canChange =
iZone.Upper() > demandZone.Upper();
if (canChange)
{
demandZone = iZone;
}
}
}
}
//
// Validate Founded Zones ...
result = (supplyZone != NULL &&
supplyZone.IsValid()) &&
(demandZone != NULL &&
demandZone.IsValid());
//
return result;
}
////////////////////////////////////////////////////////////////////
//
CustomStateDrawing(
conditions.consolidationConditions.state,
false, //
X_DIRECTION_NONE,
false, // ignoreSwingHighs
false, // ignoreSwingLows
false, // ignoreSupportZones
false, // ignoreResistanceZones
false, // ignoreSupplyZones
false, // ignoreDemandZones
true, // ignoreBullishOrderBlocks
true, // ignoreBearishOrderBlocks
true, // ignoreBullishFairValueGaps
true, // ignoreBearishFairValueGaps
true, // ignoreBullishRejectionBars
true, // ignoreBearishRejectionBars
true, // ignoreBullishMomentumBars
true // ignoreBearishMomentumBars
);
//
// TODO: Remove ...
// Draw ...
if (hasVisionSupplyZone && visionSupplyZone != NULL)
{
//
visionSupplyZone.To(TimeCurrent());
XCSupplyZoneObject *iObj;
bool isCreated = mPOIDrawer.CreateSupplyZone(
visionSupplyZone,
iObj //
);
if (isCreated)
{
//
iObj.ZoneWidth(4);
iObj.ZoneColor(clrMagenta);
AddObjectIfNotExists(iObj);
}
}
//
// TODO: Remove ...
// Draw ...
if (hasVisionDemandZone && visionDemandZone != NULL)
{
//
visionDemandZone.To(TimeCurrent());
XCDemandZoneObject *iObj;
bool isCreated = mPOIDrawer.CreateDemandZone(
visionDemandZone,
iObj //
);
if (isCreated)
{
//
iObj.ZoneWidth(4);
iObj.ZoneColor(clrAqua);
AddObjectIfNotExists(iObj);
}
}
//
if (result)
{
ClearDraws();
}
//
// TODO: Remove this ...
// Draw ...
if (hasConsolidationSupportZone &&
consolidationSupportZone != NULL)
{
//
consolidationSupportZone.To(TimeCurrent());
XCSupportZoneObject *iObj;
bool isCreated = mPOIDrawer.CreateSupportZone(
consolidationSupportZone,
iObj //
);
if (isCreated)
{
AddObjectIfNotExists(iObj);
}
}
//
// TODO: Remove this ...
// Draw ...
if (hasConsolidationResistanceZone &&
consolidationResistanceZone != NULL)
{
//
consolidationResistanceZone.To(TimeCurrent());
XCResistanceZoneObject *iObj;
bool isCreated = mPOIDrawer.CreateResistanceZone(
consolidationResistanceZone,
iObj //
);
if (isCreated)
{
AddObjectIfNotExists(iObj);
}
}
////////////////////////////////////////////////////////////////////////////////////
//
XCSwing *swingLow = NULL;
XCSwing *swingHigh = NULL;
bool isSwingLowRejected = false;
bool isSwingHighRejected = false;
int swingLowsCount = decisionConditions.state.CountSwingLows();
int swingHighsCount = decisionConditions.state.CountSwingHighs();
if (IsValidSize(swingLowsCount))
{
swingLow = decisionConditions.state.swingLows[swingLowsCount - 1];
}
if (IsValidSize(swingHighsCount))
{
swingHigh = decisionConditions.state.swingHighs[swingHighsCount - 1];
}
//
isSwingLowRejected = swingLow != NULL &&
swingLow.IsValid() &&
decisionCBar.low > swingLow.GetValue();
//
isSwingHighRejected = swingHigh != NULL &&
swingHigh.IsValid() &&
decisionCBar.high < swingHigh.GetValue();
///////////////////////////////////////////////////////////////////////////////////////////
@@ -463,287 +463,6 @@ class XC121SMCCycleHelper : public XCBase
// //
// Tools ... // Tools ...
/**
* Detect Nearest Supply/Demand Zones ...
*
* @param bar: XOHCL instance, Start Bar ...
*
* @return ( bool )
*/
bool DetectValisSupplyZone(
XOHCL &bar,
XCSupplyZone *&supplyZone,
XCDemandZone *&demandZone //
)
{
//
bool result = false;
//
result = bar.IsValid();
if (!result)
{
return result;
}
//
int index = bar.Index();
//
double bid = GetBid(bar.symbol);
double ask = GetAsk(bar.symbol);
//
// Retrieve X121 Cnditions ...
int conditionsLoopback = 10;
X121Conditions x121Conditions;
result = mX121Helper.GetConditions(
x121Conditions,
index,
conditionsLoopback //
);
if (!result)
{
return result;
}
int validPeaksCount = ArraySize(x121Conditions.validPeaksBuffer);
int validValesCount = ArraySize(x121Conditions.validValesBuffer);
//
XPOIState state;
ENUM_XPOI_EVENTS events[];
mPOIDetector.Update(events);
mPOIDetector.GetState(state);
result = state.IsValid() &&
state.HasChild();
if (!result)
{
return result;
}
//
// Supply Zones ...
XCSupplyZone *supplies[];
int suppliesCount = state.CountSupplyZones();
//
// Select Bar Validated Supply Zones ...
if (IsValidSize(suppliesCount))
{
//
for (int i = 0; i < suppliesCount; i++)
{
//
XCSupplyZone *iZone = state.supplyZones[i];
//
// Check Zone is Valid For Bar ...
bool isValid = bar.high < iZone.Lower() &&
ask < iZone.Lower() &&
bid < iZone.Lower();
if (isValid)
{
//
Add(
iZone,
supplies //
);
}
}
}
suppliesCount = ArraySize(supplies);
//
// Select Valid Peaks Filtered Supplies ...
if (IsValidSize(suppliesCount))
{
//
// Check Valid Peaks ...
XCSupplyZone *tmp[];
if (IsValidSize(validPeaksCount))
{
//
for (int i = 0; i < suppliesCount; i++)
{
//
XCSupplyZone *iZone = supplies[i];
//
for (int j = 0; j < validPeaksCount; j++)
{
//
double value = x121Conditions.validPeaksBuffer[j];
//
// Check Valid Peaks in Zone ...
bool isZoneContainsValidValue =
value >= iZone.Lower() &&
value <= iZone.Upper();
if (isZoneContainsValidValue)
{
//
Add(
iZone,
tmp //
);
}
}
}
}
//
Clean(supplies);
Copy(
tmp,
supplies //
);
}
suppliesCount = ArraySize(supplies);
//
// Select Nearest Supply Zone ...
if (IsValidSize(suppliesCount))
{
//
// Check Nearest Supplies ...
for (int i = 0; i < suppliesCount; i++)
{
//
XCSupplyZone *iZone = supplies[i];
if (supplyZone == NULL)
{
supplyZone = iZone;
}
else
{
//
bool canChange =
iZone.Lower() < supplyZone.Lower();
if (canChange)
{
supplyZone = iZone;
}
}
}
}
//
// Demand Zones ...
XCDemandZone *demands[];
int demandsCount = state.CountDemandZones();
//
// Select Bar Validated Demand Zones ...
if (IsValidSize(demandsCount))
{
//
for (int i = 0; i < demandsCount; i++)
{
//
XCDemandZone *iZone = state.demandZones[i];
//
// Check Zone is Valid For Bar ...
bool isValid = bar.low > iZone.Upper() &&
ask > iZone.Upper() &&
bid > iZone.Upper();
if (isValid)
{
//
Add(
iZone,
demands //
);
}
}
}
demandsCount = ArraySize(demands);
//
// Select Valid Vales Filtered Demands ...
if (IsValidSize(demandsCount))
{
//
// Check Valid Vales ...
XCDemandZone *tmp[];
if (IsValidSize(validValesCount))
{
//
for (int i = 0; i < demandsCount; i++)
{
//
XCDemandZone *iZone = demands[i];
//
for (int j = 0; j < validValesCount; j++)
{
//
double value = x121Conditions.validValesBuffer[j];
//
// Check Valid Peaks in Zone ...
bool isZoneContainsValidValue =
value >= iZone.Lower() &&
value <= iZone.Upper();
if (isZoneContainsValidValue)
{
//
Add(
iZone,
tmp //
);
}
}
}
}
//
Clean(demands);
Copy(
tmp,
demands //
);
}
demandsCount = ArraySize(demands);
//
// Select Nearest Demand Zone ...
if (IsValidSize(demandsCount))
{
//
// Check Nearest Demands ...
for (int i = 0; i < demandsCount; i++)
{
//
XCDemandZone *iZone = demands[i];
if (demandZone == NULL)
{
demandZone = iZone;
}
else
{
//
bool canChange =
iZone.Upper() > demandZone.Upper();
if (canChange)
{
demandZone = iZone;
}
}
}
}
//
// Validate Founded Zones ...
result = (supplyZone != NULL &&
supplyZone.IsValid()) &&
(demandZone != NULL &&
demandZone.IsValid());
//
return result;
}
/** /**
* Detect XPV Based POI(s) ... * Detect XPV Based POI(s) ...
* *
+194 -2
View File
@@ -470,7 +470,8 @@ struct XPVPivotPoint
/** /**
* Cleanup ... * Cleanup ...
*/ */
void Clean() { void Clean()
{
// //
value = 0; value = 0;
repetition = 0; repetition = 0;
@@ -482,7 +483,8 @@ struct XPVPivotPoint
* *
* @return ( bool ) * @return ( bool )
*/ */
bool IsValid() { bool IsValid()
{
// //
bool result = false; bool result = false;
@@ -1965,5 +1967,195 @@ ENUM_X_121_SMC_PROVIDERS ParseProvider(string value)
// //
// Custom Providers Conditions ... // Custom Providers Conditions ...
struct XTestProiderConditions
{
//
// Props ...
//
string symbol;
ENUM_TIMEFRAMES period;
//
double sl;
ENUM_X_POSITION_TYPES type;
//
// Setup Props ...
//
bool isNewPeak;
bool isNewVale;
//
bool hasVisionSupplyZone;
XCSupplyZone *visionSupplyZone;
//
bool hasVisionDemandZone;
XCDemandZone *visionDemandZone;
//
bool hasConsolidationSupportZone;
XCSupportZone *consolidationSupportZone;
//
bool hasConsolidationResistanceZone;
XCResistanceZone *consolidationResistanceZone;
//
double peak;
double vale;
//
bool hasSamePeaks;
bool hasSameVales;
//
datetime setupTime;
datetime triggerTime;
//
// Trigger Props ...
//
// Constructor ...
XTestProiderConditions()
{
Clean();
}
//
// Tools ...
/**
* Cleaning Up ...
*/
void Clean()
{
//
sl = 0;
peak = 0;
vale = 0;
//
isNewPeak = false;
isNewVale = false;
hasSamePeaks = false;
hasSameVales = false;
hasVisionSupplyZone = false;
hasVisionDemandZone = false;
hasConsolidationSupportZone = false;
hasConsolidationResistanceZone = false;
//
type = X_POSITION_TYPE_NONE;
//
symbol = NULL;
period = NULL;
triggerTime = NULL;
setupTime = NULL;
visionSupplyZone = NULL;
visionDemandZone = NULL;
consolidationSupportZone = NULL;
consolidationResistanceZone = NULL;
}
/**
* Check Condition is Setting Up ...
*
* @param dir: ENUM_X_DIRECTION member, Setting Up Direction ...
*
* @return ( bool )
*/
bool IsSetuped(
ENUM_X_DIRECTION &dir //
)
{
//
bool result = false;
//
dir = X_DIRECTION_NONE;
//
result = IsValid(setupTime);
if (!result)
{
return result;
}
//
bool isBullish =
//
isNewVale &&
hasSamePeaks &&
hasSameVales &&
hasVisionDemandZone &&
visionDemandZone != NULL &&
visionDemandZone.IsValid()
//
;
//
bool isBearish =
//
isNewPeak &&
hasSamePeaks &&
hasSameVales &&
hasVisionSupplyZone &&
visionSupplyZone != NULL &&
visionSupplyZone.IsValid()
//
;
//
result =
isBullish ||
isBearish;
if (!result)
{
return result;
}
//
dir =
isBullish
? X_DIRECTION_BULLISH
: X_DIRECTION_BEARISH;
//
return result;
}
/**
* Detect How we Can Trigger Signal ...
*
* @return ( bool )
*/
bool CanTrigger()
{
//
bool result = false;
//
result =
//
sl > 0 &&
IsValid(symbol) &&
IsValid(period) &&
IsValid(triggerTime) &&
type != X_POSITION_TYPE_ALL &&
type != X_POSITION_TYPE_NONE
//
;
//
return result;
}
//
};
// //
File diff suppressed because it is too large Load Diff