last ...
This commit is contained in:
File diff suppressed because it is too large
Load Diff
@@ -453,11 +453,15 @@ void OnTick()
|
||||
}
|
||||
|
||||
//
|
||||
// fima1Signaller.OnTick();
|
||||
fima2Signaller.OnTick();
|
||||
// Bar Index ...
|
||||
int barIndex = 1;
|
||||
|
||||
//
|
||||
AnalyseMarket(1);
|
||||
// fima1Signaller.OnTick(barIndex);
|
||||
fima2Signaller.OnTick(barIndex);
|
||||
|
||||
//
|
||||
// AnalyseMarket(barIndex);
|
||||
}
|
||||
|
||||
//
|
||||
@@ -613,7 +617,7 @@ void OnSignalTriggered(XSignal &signal)
|
||||
|
||||
//
|
||||
// TODO: Fix this ...
|
||||
return;
|
||||
// return;
|
||||
|
||||
//
|
||||
// Draw Signal on Chart ...
|
||||
@@ -627,6 +631,12 @@ void OnSignalTriggered(XSignal &signal)
|
||||
//
|
||||
if (has)
|
||||
{
|
||||
//
|
||||
ENUM_X_SIGNAL_EXECUTION_RESULT result;
|
||||
eaExpert.eaTrader.ExecuteSignal(
|
||||
signal,
|
||||
result //
|
||||
);
|
||||
Print("Signal Issued: ", signal.GetObjectID());
|
||||
}
|
||||
|
||||
@@ -923,8 +933,8 @@ void AnalyseMarket(int barIndex = 0)
|
||||
);
|
||||
|
||||
//
|
||||
// XFIMASIgballer2First(bar);
|
||||
HandleLookupSignal(bar);
|
||||
XFIMASIgballer2First(bar);
|
||||
// HandleLookupSignal(bar);
|
||||
|
||||
//
|
||||
bar.Clean();
|
||||
|
||||
@@ -83,6 +83,10 @@ bool IsValid(string value)
|
||||
//
|
||||
return result;
|
||||
}
|
||||
bool IsXValid(string value)
|
||||
{
|
||||
return IsValid(value);
|
||||
}
|
||||
bool IsSpecifiedValid(string value)
|
||||
{
|
||||
return IsValid(value);
|
||||
@@ -106,6 +110,10 @@ bool IsValid(datetime value)
|
||||
//
|
||||
return result;
|
||||
}
|
||||
bool IsXValid(datetime value)
|
||||
{
|
||||
return IsValid(value);
|
||||
}
|
||||
bool IsSpecifiedValid(datetime value)
|
||||
{
|
||||
return IsValid(value);
|
||||
@@ -133,6 +141,11 @@ bool IsValid(ENUM_TIMEFRAMES value)
|
||||
//
|
||||
return result;
|
||||
}
|
||||
bool IsXValid(ENUM_TIMEFRAMES value)
|
||||
{
|
||||
//
|
||||
return IsValid(value);
|
||||
}
|
||||
bool IsSpecifiedValid(ENUM_TIMEFRAMES value)
|
||||
{
|
||||
//
|
||||
@@ -171,6 +184,16 @@ bool IsValid(
|
||||
//
|
||||
return result;
|
||||
}
|
||||
bool IsXValid(
|
||||
ENUM_X_PERIOD_METHOD mMethod,
|
||||
ENUM_TIMEFRAMES mPeriod //
|
||||
)
|
||||
{
|
||||
return IsValid(
|
||||
mMethod,
|
||||
mPeriod //
|
||||
);
|
||||
}
|
||||
bool IsSpecifiedValid(
|
||||
ENUM_X_PERIOD_METHOD mMethod,
|
||||
ENUM_TIMEFRAMES mPeriod //
|
||||
|
||||
@@ -346,6 +346,10 @@ bool IsValid(ENUM_X_BOUNDARY_PRICE value)
|
||||
//
|
||||
return result;
|
||||
}
|
||||
bool IsXValid(ENUM_X_BOUNDARY_PRICE value)
|
||||
{
|
||||
return IsValid(value);
|
||||
}
|
||||
bool IsSpecifiedValid(ENUM_X_BOUNDARY_PRICE value)
|
||||
{
|
||||
return IsValid(value);
|
||||
@@ -417,6 +421,10 @@ bool IsValid(ENUM_X_DIRECTION value)
|
||||
//
|
||||
return result;
|
||||
}
|
||||
bool IsXValid(ENUM_X_DIRECTION value)
|
||||
{
|
||||
return IsValid(value);
|
||||
}
|
||||
bool IsSpecifiedValid(ENUM_X_DIRECTION value)
|
||||
{
|
||||
return IsValid(value);
|
||||
@@ -460,6 +468,17 @@ bool IsBullish(ENUM_X_DIRECTION value)
|
||||
//
|
||||
return result;
|
||||
}
|
||||
bool IsXBullish(ENUM_X_DIRECTION value)
|
||||
{
|
||||
//
|
||||
bool result = false;
|
||||
|
||||
//
|
||||
result = value == X_DIRECTION_BULLISH;
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
bool IsSpecifiedBullish(ENUM_X_DIRECTION value)
|
||||
{
|
||||
//
|
||||
@@ -490,6 +509,17 @@ bool IsBearish(ENUM_X_DIRECTION value)
|
||||
//
|
||||
return result;
|
||||
}
|
||||
bool IsXBearish(ENUM_X_DIRECTION value)
|
||||
{
|
||||
//
|
||||
bool result = false;
|
||||
|
||||
//
|
||||
result = value == X_DIRECTION_BEARISH;
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
bool IsSpecifiedBearish(ENUM_X_DIRECTION value)
|
||||
{
|
||||
//
|
||||
@@ -943,6 +973,10 @@ bool IsValid(ENUM_X_MARKET_CYCLES value)
|
||||
//
|
||||
return result;
|
||||
}
|
||||
bool IsXValid(ENUM_X_MARKET_CYCLES value)
|
||||
{
|
||||
return IsValid(value);
|
||||
}
|
||||
bool IsSpecifiedValid(ENUM_X_MARKET_CYCLES value)
|
||||
{
|
||||
return IsValid(value);
|
||||
|
||||
@@ -617,7 +617,7 @@ class XCXFIMAStrategy2Signaller : public XCXFIMABaseSignaller
|
||||
XBoxZone iZone;
|
||||
int count = 0;
|
||||
bool has = false;
|
||||
int cIdx = barIndex + 1;
|
||||
int cIdx = 0;
|
||||
int pIdx = cIdx + 1;
|
||||
string iName = NULL;
|
||||
XBoxZone supports[];
|
||||
@@ -625,10 +625,12 @@ class XCXFIMAStrategy2Signaller : public XCXFIMABaseSignaller
|
||||
bool isBullish = false;
|
||||
bool isBearish = false;
|
||||
double iPrice = EMPTY_VALUE;
|
||||
double iPriceEdge = EMPTY_VALUE;
|
||||
XFIMAMarketStructure structure;
|
||||
XFIMAConditions fimaConditions;
|
||||
ENUM_X_PRICE iPriceType = X_PRICE_NONE;
|
||||
ENUM_X_DIRECTION iDir = X_DIRECTION_NONE;
|
||||
ENUM_X_PRICE iPriceEdgeType = X_PRICE_NONE;
|
||||
|
||||
//
|
||||
XPivot pvPivots[];
|
||||
@@ -647,7 +649,7 @@ class XCXFIMAStrategy2Signaller : public XCXFIMABaseSignaller
|
||||
has = bar.Init(
|
||||
symbol,
|
||||
period,
|
||||
cIdx //
|
||||
barIndex //
|
||||
);
|
||||
if (!has)
|
||||
{
|
||||
@@ -681,118 +683,6 @@ class XCXFIMAStrategy2Signaller : public XCXFIMABaseSignaller
|
||||
analyserConfig //
|
||||
);
|
||||
|
||||
//
|
||||
// Check Required Pattern Exists ...
|
||||
bool hasPinnedBar = HasDirection(structure.pinnedDir);
|
||||
bool hasEngulfedBar = HasDirection(structure.engulfedDir);
|
||||
bool hasFlagPattern = HasDirection(structure.flagPatternDir);
|
||||
bool hasStarPattern = HasDirection(structure.starPatternDir);
|
||||
bool hasRisingPattern = HasDirection(structure.risingPatternDir);
|
||||
bool hasPiercingPattern = HasDirection(structure.piercingPatternDir);
|
||||
bool hasSignalKeyBar = HasDirection(structure.signalKeyBarPatternDir);
|
||||
|
||||
//
|
||||
// Check Bar Pattern Exists ...
|
||||
has = hasPinnedBar ||
|
||||
hasEngulfedBar ||
|
||||
hasFlagPattern ||
|
||||
hasStarPattern ||
|
||||
hasSignalKeyBar ||
|
||||
hasRisingPattern ||
|
||||
hasPiercingPattern;
|
||||
|
||||
//
|
||||
// Select Pattern Direction and Price and Price Type ...
|
||||
if (has)
|
||||
{
|
||||
//
|
||||
if (hasPinnedBar)
|
||||
{
|
||||
//
|
||||
iDir = structure.pinnedDir;
|
||||
iName = "XPinned_" + ToXString(iDir) + ToXString(TimeToSeconds(bar.time));
|
||||
}
|
||||
else if (hasEngulfedBar)
|
||||
{
|
||||
//
|
||||
iDir = structure.engulfedDir;
|
||||
iName = "XEngulfed_" + ToXString(iDir) + ToXString(TimeToSeconds(bar.time));
|
||||
}
|
||||
else if (hasFlagPattern)
|
||||
{
|
||||
//
|
||||
iDir = structure.flagPatternDir;
|
||||
iName = "XFlag_" + ToXString(iDir) + ToXString(TimeToSeconds(bar.time));
|
||||
}
|
||||
else if (hasStarPattern)
|
||||
{
|
||||
//
|
||||
iDir = structure.starPatternDir;
|
||||
iName = "XStar_" + ToXString(iDir) + ToXString(TimeToSeconds(bar.time));
|
||||
}
|
||||
else if (hasSignalKeyBar)
|
||||
{
|
||||
//
|
||||
iDir = structure.risingPatternDir;
|
||||
iName = "XRising_" + ToXString(iDir) + ToXString(TimeToSeconds(bar.time));
|
||||
}
|
||||
else if (hasRisingPattern)
|
||||
{
|
||||
//
|
||||
iDir = structure.piercingPatternDir;
|
||||
iName = "XPiercing_" + ToXString(iDir) + ToXString(TimeToSeconds(bar.time));
|
||||
}
|
||||
else if (hasPiercingPattern)
|
||||
{
|
||||
//
|
||||
iDir = structure.signalKeyBarPatternDir;
|
||||
iName = "XSignalKey_" + ToXString(iDir) + ToXString(TimeToSeconds(bar.time));
|
||||
}
|
||||
|
||||
//
|
||||
isBullish = IsSpecifiedBullish(iDir);
|
||||
isBearish = IsSpecifiedBearish(iDir);
|
||||
|
||||
//
|
||||
// Retrieve Price Type for Validate ...
|
||||
iPriceType = isBullish
|
||||
? X_PRICE_LOW
|
||||
: X_PRICE_HIGH;
|
||||
iPrice = bar.GetPrice(iPriceType);
|
||||
|
||||
//
|
||||
has = HasDirection(iDir);
|
||||
}
|
||||
|
||||
//
|
||||
// Chekc Bullish or Bearish Starter Conditions Exists ...
|
||||
has =
|
||||
isBullish ||
|
||||
isBearish;
|
||||
if (has)
|
||||
{
|
||||
//
|
||||
// Do Conditions Validating ...
|
||||
|
||||
//
|
||||
// Retrieve MA Band for Validation ...
|
||||
double iMABandUpper = fimaHelper.GetMABandUpper(barIndex);
|
||||
double iMABandLower = fimaHelper.GetMABandLower(barIndex);
|
||||
|
||||
//
|
||||
// Validate ...
|
||||
has = isBullish
|
||||
? iPrice < iMABandLower
|
||||
: iPrice > iMABandUpper;
|
||||
if (!has)
|
||||
{
|
||||
//
|
||||
isBullish = false;
|
||||
isBearish = false;
|
||||
iDir = X_DIRECTION_NONE;
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Collect Support and Resistance Zones and Validate by them ...
|
||||
|
||||
@@ -813,26 +703,6 @@ class XCXFIMAStrategy2Signaller : public XCXFIMABaseSignaller
|
||||
supportBox,
|
||||
supports //
|
||||
);
|
||||
// has = poiDrawer.DrawBox(
|
||||
// supportBox,
|
||||
// iSupportObj,
|
||||
// true, // Ignore At ...
|
||||
// supportBox.type // Name ...
|
||||
// );
|
||||
// if (has)
|
||||
// {
|
||||
// //
|
||||
// XPOIStyle iStyle;
|
||||
// poiDrawer.GetBoxStyle(
|
||||
// iStyle,
|
||||
// supportBox.dir //
|
||||
// );
|
||||
// poiDrawer.ApplyBoxStyle(
|
||||
// iSupportObj,
|
||||
// iStyle //
|
||||
// );
|
||||
// iStyle.Clean();
|
||||
// }
|
||||
}
|
||||
|
||||
//
|
||||
@@ -847,26 +717,6 @@ class XCXFIMAStrategy2Signaller : public XCXFIMABaseSignaller
|
||||
resistanceBox,
|
||||
supports //
|
||||
);
|
||||
// has = poiDrawer.DrawBox(
|
||||
// resistanceBox,
|
||||
// iResistanceObj,
|
||||
// true, // Ignore At ...
|
||||
// resistanceBox.type // Name ...
|
||||
// );
|
||||
// if (has)
|
||||
// {
|
||||
// //
|
||||
// XPOIStyle iStyle;
|
||||
// poiDrawer.GetBoxStyle(
|
||||
// iStyle,
|
||||
// resistanceBox.dir //
|
||||
// );
|
||||
// poiDrawer.ApplyBoxStyle(
|
||||
// iResistanceObj,
|
||||
// iStyle //
|
||||
// );
|
||||
// iStyle.Clean();
|
||||
// }
|
||||
}
|
||||
|
||||
//
|
||||
@@ -1296,15 +1146,6 @@ class XCXFIMAStrategy2Signaller : public XCXFIMABaseSignaller
|
||||
structure.support,
|
||||
supports //
|
||||
);
|
||||
|
||||
// //
|
||||
// XCBoxObject *iObj;
|
||||
// has = fima2Signaller.poiDrawer.DrawBox(
|
||||
// structure.support,
|
||||
// iObj);
|
||||
// if (has)
|
||||
// {
|
||||
// }
|
||||
}
|
||||
|
||||
//
|
||||
@@ -1317,53 +1158,99 @@ class XCXFIMAStrategy2Signaller : public XCXFIMABaseSignaller
|
||||
structure.resistance,
|
||||
resistances //
|
||||
);
|
||||
|
||||
// //
|
||||
// XCBoxObject *iObj;
|
||||
// has = fima2Signaller.poiDrawer.DrawBox(
|
||||
// structure.resistance,
|
||||
// iObj);
|
||||
// if (has)
|
||||
// {
|
||||
// }
|
||||
}
|
||||
|
||||
//
|
||||
// Validate Positions Support and Resistance Zone ...
|
||||
int insideZoneIDX = -1;
|
||||
has = has &&
|
||||
(isBullish
|
||||
? HasInside(
|
||||
insideZoneIDX,
|
||||
bar,
|
||||
supports //
|
||||
)
|
||||
: HasInside(
|
||||
insideZoneIDX,
|
||||
bar,
|
||||
resistances //
|
||||
));
|
||||
// Check Required Pattern Exists ...
|
||||
bool hasPinnedBar = HasDirection(structure.pinnedDir);
|
||||
bool hasEngulfedBar = HasDirection(structure.engulfedDir);
|
||||
bool hasFlagPattern = HasDirection(structure.flagPatternDir);
|
||||
bool hasStarPattern = HasDirection(structure.starPatternDir);
|
||||
bool hasRisingPattern = HasDirection(structure.risingPatternDir);
|
||||
bool hasPiercingPattern = HasDirection(structure.piercingPatternDir);
|
||||
bool hasSignalKeyBar = HasDirection(structure.signalKeyBarPatternDir);
|
||||
|
||||
//
|
||||
// Validate Selected Inside Zone ...
|
||||
// whith Bars Edge ...
|
||||
has = IsValidIndex(insideZoneIDX);
|
||||
// Check Bar Pattern Exists ...
|
||||
// and Select Pattern Direction and Price and Price Type ...
|
||||
has = hasPinnedBar ||
|
||||
hasEngulfedBar ||
|
||||
hasFlagPattern ||
|
||||
hasStarPattern ||
|
||||
hasSignalKeyBar ||
|
||||
hasRisingPattern ||
|
||||
hasPiercingPattern;
|
||||
if (has)
|
||||
{
|
||||
//
|
||||
if (isBullish)
|
||||
if (hasPinnedBar)
|
||||
{
|
||||
iZone = supports[insideZoneIDX];
|
||||
//
|
||||
iDir = structure.pinnedDir;
|
||||
iName = "XPinned_" + ToXString(iDir) + ToXString(TimeToSeconds(bar.time));
|
||||
}
|
||||
else
|
||||
else if (hasEngulfedBar)
|
||||
{
|
||||
iZone = resistances[insideZoneIDX];
|
||||
//
|
||||
iDir = structure.engulfedDir;
|
||||
iName = "XEngulfed_" + ToXString(iDir) + ToXString(TimeToSeconds(bar.time));
|
||||
}
|
||||
else if (hasFlagPattern)
|
||||
{
|
||||
//
|
||||
iDir = structure.flagPatternDir;
|
||||
iName = "XFlag_" + ToXString(iDir) + ToXString(TimeToSeconds(bar.time));
|
||||
}
|
||||
else if (hasStarPattern)
|
||||
{
|
||||
//
|
||||
iDir = structure.starPatternDir;
|
||||
iName = "XStar_" + ToXString(iDir) + ToXString(TimeToSeconds(bar.time));
|
||||
}
|
||||
else if (hasSignalKeyBar)
|
||||
{
|
||||
//
|
||||
iDir = structure.risingPatternDir;
|
||||
iName = "XRising_" + ToXString(iDir) + ToXString(TimeToSeconds(bar.time));
|
||||
}
|
||||
else if (hasRisingPattern)
|
||||
{
|
||||
//
|
||||
iDir = structure.piercingPatternDir;
|
||||
iName = "XPiercing_" + ToXString(iDir) + ToXString(TimeToSeconds(bar.time));
|
||||
}
|
||||
else if (hasPiercingPattern)
|
||||
{
|
||||
//
|
||||
iDir = structure.signalKeyBarPatternDir;
|
||||
iName = "XSignalKey_" + ToXString(iDir) + ToXString(TimeToSeconds(bar.time));
|
||||
}
|
||||
|
||||
//
|
||||
has = isBullish
|
||||
? bar.high > supports[insideZoneIDX].upper
|
||||
: bar.low < resistances[insideZoneIDX].lower;
|
||||
isBullish = IsSpecifiedBullish(iDir);
|
||||
isBearish = IsSpecifiedBearish(iDir);
|
||||
|
||||
//
|
||||
// Retrieve Price Type for Validate ...
|
||||
iPriceType = isBullish
|
||||
? X_PRICE_DOWN
|
||||
: X_PRICE_UP;
|
||||
iPriceEdgeType = isBullish
|
||||
? X_PRICE_LOW
|
||||
: X_PRICE_HIGH;
|
||||
|
||||
//
|
||||
iPrice = bar.GetPrice(iPriceType);
|
||||
iPriceEdge = bar.GetPrice(iPriceEdgeType);
|
||||
|
||||
//
|
||||
// Validate Calculations ...
|
||||
has = HasDirection(iDir) &&
|
||||
(isBullish ||
|
||||
isBearish) &&
|
||||
NotEmptyZero(iPrice) &&
|
||||
NotEmptyZero(iPriceEdge) &&
|
||||
iPrice != iPriceEdge;
|
||||
if (!has)
|
||||
{
|
||||
//
|
||||
@@ -1372,21 +1259,24 @@ class XCXFIMAStrategy2Signaller : public XCXFIMABaseSignaller
|
||||
iDir = X_DIRECTION_NONE;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
//
|
||||
isBullish = false;
|
||||
isBearish = false;
|
||||
iDir = X_DIRECTION_NONE;
|
||||
}
|
||||
|
||||
//
|
||||
// Checking Liquidities ...
|
||||
// Strategy 1 ...
|
||||
has = Strategy1HasSignal(
|
||||
bar,
|
||||
iZone,
|
||||
iName,
|
||||
supports,
|
||||
resistances,
|
||||
iDir,
|
||||
structure,
|
||||
fimaConditions //
|
||||
);
|
||||
|
||||
//
|
||||
// Do all Draws Here ...
|
||||
bool canDraw = false;
|
||||
if (canDraw)
|
||||
bool canDraw = true;
|
||||
if (canDraw && has)
|
||||
{
|
||||
//
|
||||
int iWidth = 2;
|
||||
@@ -1548,7 +1438,7 @@ class XCXFIMAStrategy2Signaller : public XCXFIMABaseSignaller
|
||||
has = poiDrawer.DrawBarArrow(
|
||||
bar,
|
||||
iPatternObj,
|
||||
iPriceType,
|
||||
iPriceEdgeType,
|
||||
iCode,
|
||||
iClr,
|
||||
iWidth,
|
||||
@@ -1561,8 +1451,6 @@ class XCXFIMAStrategy2Signaller : public XCXFIMABaseSignaller
|
||||
}
|
||||
|
||||
//
|
||||
// Check Signal Founded ...
|
||||
has = HasDirection(iDir);
|
||||
if (has)
|
||||
{
|
||||
//
|
||||
@@ -1638,6 +1526,270 @@ class XCXFIMAStrategy2Signaller : public XCXFIMABaseSignaller
|
||||
//
|
||||
// Props ...
|
||||
|
||||
//
|
||||
// Implementing Strategies ...
|
||||
|
||||
/**
|
||||
* Validate a Pattern based on MA Band ...
|
||||
*
|
||||
* @param bar: XOHCL, reference to Pattern Bar ...
|
||||
* @param patternName: string, detected pattern's name ...
|
||||
* @param patternDir: ENUM_X_DIRECTION, detected pattern's direction ...
|
||||
* @param fimaConditions: XFIMAConditions, reference to Bar Specified XFIMA Conditions ...
|
||||
*
|
||||
* @return ( bool )
|
||||
*/
|
||||
bool ValidatePatternBasedOnMABand(
|
||||
XOHCL &bar,
|
||||
string patternName,
|
||||
ENUM_X_DIRECTION patternDir,
|
||||
XFIMAConditions &fimaConditions //
|
||||
)
|
||||
{
|
||||
//
|
||||
bool result = false;
|
||||
|
||||
//
|
||||
// Validate ...
|
||||
result = bar.IsValid() &&
|
||||
IsXValid(patternName) &&
|
||||
HasDirection(patternDir);
|
||||
if (!result)
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
// Define Requirements ...
|
||||
bool isBullish = false;
|
||||
bool isBearish = false;
|
||||
double iPrice = EMPTY_VALUE;
|
||||
double iPriceEdge = EMPTY_VALUE;
|
||||
ENUM_X_PRICE iPriceType = X_PRICE_NONE;
|
||||
ENUM_X_PRICE iPriceEdgeType = X_PRICE_NONE;
|
||||
|
||||
//
|
||||
// Calculating Price and Price Types ...
|
||||
|
||||
//
|
||||
isBullish = IsXBullish(patternDir);
|
||||
isBearish = IsXBearish(patternDir);
|
||||
|
||||
//
|
||||
iPriceType = isBullish
|
||||
? X_PRICE_DOWN
|
||||
: X_PRICE_UP;
|
||||
|
||||
//
|
||||
iPriceEdgeType = isBullish
|
||||
? X_PRICE_LOW
|
||||
: X_PRICE_HIGH;
|
||||
|
||||
//
|
||||
iPrice = bar.GetPrice(iPriceType);
|
||||
iPriceEdge = bar.GetPrice(iPriceEdgeType);
|
||||
|
||||
//
|
||||
// Validate ...
|
||||
result =
|
||||
NotEmptyZero(iPrice) &&
|
||||
IsXValid(iPriceType) &&
|
||||
NotEmptyZero(iPriceEdge) &&
|
||||
IsXValid(iPriceEdgeType) &&
|
||||
((isBullish && !isBearish) ||
|
||||
(isBearish && !isBullish));
|
||||
if (!result)
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
// Validate Pattern based on MA Band ...
|
||||
|
||||
//
|
||||
// Retrieve MA Band for Validation ...
|
||||
double iMABandUpper = fimaConditions.maBandUpperBuffer[0];
|
||||
double iMABandLower = fimaConditions.maBandLowerBuffer[0];
|
||||
|
||||
//
|
||||
// Validate by Edge Price ...
|
||||
result =
|
||||
NotEmptyZero(iMABandUpper) &&
|
||||
NotEmptyZero(iMABandLower) &&
|
||||
(isBullish
|
||||
? iPriceEdge < iMABandLower
|
||||
: iPriceEdge > iMABandUpper);
|
||||
if (!result)
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check Pattern Has Signal Based on Strategy 1 ...
|
||||
*
|
||||
* @param bar: XOHCL, reference to Pattern Bar ...
|
||||
* @param iZone: XBoxZone, reference to holds affected zone ...
|
||||
* @param patternName: string, detected pattern's name ...
|
||||
* @param supports: XBoxZone, array reference to Provide Exists Supports ...
|
||||
* @param resistances: XBoxZone, array reference to Provide Exists Resistances ...
|
||||
* @param patternDir: ENUM_X_DIRECTION, detected pattern's direction ...
|
||||
* @param structure: XFIMAMarketStructure, refrence to Provides Market Structure ...
|
||||
* @param fimaConditions: XFIMAConditions, reference to Bar Specified XFIMA Conditions ...
|
||||
*
|
||||
* @return ( bool )
|
||||
*/
|
||||
bool Strategy1HasSignal(
|
||||
XOHCL &bar,
|
||||
XBoxZone &iZone,
|
||||
string patternName,
|
||||
XBoxZone &supports[],
|
||||
XBoxZone &resistances[],
|
||||
ENUM_X_DIRECTION patternDir,
|
||||
XFIMAMarketStructure &structure,
|
||||
XFIMAConditions &fimaConditions //
|
||||
)
|
||||
{
|
||||
//
|
||||
bool result = false;
|
||||
|
||||
//
|
||||
// Prepare ...
|
||||
iZone.Clean();
|
||||
|
||||
//
|
||||
// Validate ...
|
||||
result = bar.IsValid() &&
|
||||
IsXValid(patternName) &&
|
||||
HasDirection(patternDir);
|
||||
if (!result)
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
// Validate Pattern Based on MA Band ...
|
||||
result = ValidatePatternBasedOnMABand(
|
||||
bar,
|
||||
patternName,
|
||||
patternDir,
|
||||
fimaConditions //
|
||||
);
|
||||
if (!result)
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
// Check Affected Zone ...
|
||||
// Select a Support or Resistance ...
|
||||
int insideZoneIDX = -1;
|
||||
result =
|
||||
(IsXBullish(patternDir)
|
||||
? HasInside(
|
||||
insideZoneIDX,
|
||||
bar,
|
||||
supports //
|
||||
)
|
||||
: IsXBearish(patternDir)
|
||||
? HasInside(
|
||||
insideZoneIDX,
|
||||
bar,
|
||||
resistances //
|
||||
)
|
||||
: false //
|
||||
);
|
||||
if (!result)
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
// Filling Affected Zone ...
|
||||
// and Validate it ...
|
||||
if (IsXBullish(patternDir))
|
||||
{
|
||||
iZone = supports[insideZoneIDX];
|
||||
}
|
||||
else if (IsXBearish(patternDir))
|
||||
{
|
||||
iZone = resistances[insideZoneIDX];
|
||||
}
|
||||
result = iZone.IsValid();
|
||||
if (!result)
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
// Validate affected Zone based on Pattern's Bar ...
|
||||
result = IsXBullish(patternDir)
|
||||
? bar.high > iZone.upper
|
||||
: IsXBearish(patternDir)
|
||||
? bar.low < iZone.lower
|
||||
: false;
|
||||
//
|
||||
// Cleanup Resources ...
|
||||
if (!result)
|
||||
{
|
||||
iZone.Clean();
|
||||
}
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check Pattern Has Signal Based on Strategy 1 ...
|
||||
*
|
||||
* @param bar: XOHCL, reference to Pattern Bar ...
|
||||
* @param iZone: XBoxZone, reference to holds affected zone ...
|
||||
* @param patternName: string, detected pattern's name ...
|
||||
* @param supports: XBoxZone, array reference to Provide Exists Supports ...
|
||||
* @param resistances: XBoxZone, array reference to Provide Exists Resistances ...
|
||||
* @param patternDir: ENUM_X_DIRECTION, detected pattern's direction ...
|
||||
* @param fimaConditions: XFIMAConditions, reference to Bar Specified XFIMA Conditions ...
|
||||
* @param fimaMarketStructure: XFIMAMarketStructure, refrence to Provides Market Structure ...
|
||||
*
|
||||
* @return ( bool )
|
||||
*/
|
||||
bool Strategy2HasSignal(
|
||||
XOHCL &bar,
|
||||
XBoxZone &iZone,
|
||||
string patternName,
|
||||
XBoxZone &supports[],
|
||||
XBoxZone &resistances[],
|
||||
ENUM_X_DIRECTION patternDir,
|
||||
XFIMAMarketStructure &structure,
|
||||
XFIMAConditions &fimaConditions,
|
||||
XFIMAMarketStructure &fimaMarketStructure //
|
||||
)
|
||||
{
|
||||
//
|
||||
bool result = false;
|
||||
|
||||
//
|
||||
// Prepare ...
|
||||
|
||||
//
|
||||
// Validate ...
|
||||
|
||||
//
|
||||
// Do Detection ...
|
||||
|
||||
//
|
||||
// Validate result ...
|
||||
|
||||
//
|
||||
// Cleanup Resources ...
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user