last works ...
This commit is contained in:
@@ -176,11 +176,11 @@ bool StrategyXHasSignal(
|
||||
}
|
||||
|
||||
// =======================================
|
||||
// Signaller 1:
|
||||
// Signallers:
|
||||
// =======================================
|
||||
|
||||
/**
|
||||
* Check Bar Has Signal Based on Strategy 1 ...
|
||||
* Check Bar Has Signal Based on Strategy 3 ...
|
||||
*
|
||||
* @param bar: XOHCL, reference to Bar ...
|
||||
* @param zone: XBoxZone, reference to holds affected zone ...
|
||||
@@ -216,6 +216,298 @@ bool Strategy1HasSignal(
|
||||
//
|
||||
// Define Requirements ...
|
||||
|
||||
//
|
||||
XOHCL pBar;
|
||||
bool isBullish = false;
|
||||
bool isBearish = false;
|
||||
|
||||
//
|
||||
// Read PBar ...
|
||||
result = bar.GetPreviousBar(pBar);
|
||||
if (!result)
|
||||
{
|
||||
//
|
||||
pBar.Clean();
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
// Reading Conditions ...
|
||||
int pullBackStartBar = -1;
|
||||
bool isPullBack = result &&
|
||||
poiDetector.IsPullbackPattern(
|
||||
pBar,
|
||||
zone,
|
||||
dir,
|
||||
2,
|
||||
false // Force Break ...
|
||||
);
|
||||
bool isPullbackBullish = isPullBack &&
|
||||
IsXBullish(dir);
|
||||
bool isPullbackBearish = isPullBack &&
|
||||
IsXBearish(dir);
|
||||
if (isPullBack)
|
||||
{
|
||||
pullBackStartBar = zone.FromIndex();
|
||||
}
|
||||
|
||||
//
|
||||
// Reading HK Bond ...
|
||||
|
||||
//
|
||||
double pHKBondUpper = fimaHelper.GetHKBondUpper(pBar.Index());
|
||||
double pHKBondLower = fimaHelper.GetHKBondLower(pBar.Index());
|
||||
int overHKBondUpperCount = fimaHelper.CountOverHKBondUpper(pullBackStartBar, X_PRICE_LOW);
|
||||
int underHKBondLowerCount = fimaHelper.CountUnderHKBondLower(pullBackStartBar, X_PRICE_HIGH);
|
||||
|
||||
//
|
||||
// Reading PV Requirements ...
|
||||
|
||||
//
|
||||
int lastPeakOverLastIDX = -1;
|
||||
int lastValeUnderLastIDX = -1;
|
||||
double pPeak = fimaHelper.GetPeak(pBar.Index());
|
||||
double pVale = fimaHelper.GetVale(pBar.Index());
|
||||
int samePeaks = fimaHelper.CountSamePeaks(pBar.Index());
|
||||
int sameVales = fimaHelper.CountSameVales(pBar.Index());
|
||||
fimaHelper.FindLastPeakOverLast(lastPeakOverLastIDX, pBar.Index());
|
||||
fimaHelper.FindLastValeUnderLast(lastValeUnderLastIDX, pBar.Index());
|
||||
|
||||
//
|
||||
// Reading pBar Patterns ...
|
||||
XPatternAnalysis pBarAnalysis;
|
||||
poiDetector.AnalyseBarPatterns(
|
||||
pBar,
|
||||
pBarAnalysis,
|
||||
structureConfig.barsAnalysisConfig //
|
||||
);
|
||||
|
||||
//
|
||||
// Check Bar Patterns ...
|
||||
bool isPBarHasBullishPatterns =
|
||||
(bar.close > pBar.low ||
|
||||
bar.open > pBar.low) &&
|
||||
(
|
||||
//
|
||||
pBarAnalysis.IsPinned(X_DIRECTION_BULLISH) ||
|
||||
pBarAnalysis.IsEngulfed(X_DIRECTION_BULLISH) ||
|
||||
pBarAnalysis.IsMomentum(X_DIRECTION_BULLISH) ||
|
||||
pBarAnalysis.IsPiercing(X_DIRECTION_BULLISH) ||
|
||||
pBarAnalysis.IsSignalKey(X_DIRECTION_BULLISH)
|
||||
//
|
||||
);
|
||||
bool isPBarHasBearishPatterns =
|
||||
(bar.close < pBar.high ||
|
||||
bar.open < pBar.high) &&
|
||||
(
|
||||
//
|
||||
pBarAnalysis.IsPinned(X_DIRECTION_BEARISH) ||
|
||||
pBarAnalysis.IsEngulfed(X_DIRECTION_BEARISH) ||
|
||||
pBarAnalysis.IsMomentum(X_DIRECTION_BEARISH) ||
|
||||
pBarAnalysis.IsPiercing(X_DIRECTION_BEARISH) ||
|
||||
pBarAnalysis.IsSignalKey(X_DIRECTION_BEARISH)
|
||||
//
|
||||
);
|
||||
|
||||
//
|
||||
// Check PBar Close Over Under Fast Ma ...
|
||||
bool isPBarCloseOverFast = pBar.close > fimaHelper.GetMAFast(pBar.Index());
|
||||
bool isPBarCloseUnderFast = pBar.close < fimaHelper.GetMAFast(pBar.Index());
|
||||
|
||||
//
|
||||
// Try To Find Affected Zone ...
|
||||
|
||||
//
|
||||
// Collecting Zones ...
|
||||
XBoxZone zones[];
|
||||
XBoxZone affectedZones[];
|
||||
XBoxZone affectedZonesBullish[];
|
||||
XBoxZone affectedZonesBearish[];
|
||||
int zonesCount = poiDetector.CollectZones(
|
||||
pBar,
|
||||
zones, //
|
||||
5, // Zones Loopback ...
|
||||
3 // Zones Validation Length ...
|
||||
// Required Zones ...
|
||||
// Loopback ...
|
||||
);
|
||||
int affectedZonesCount = ExtractAffectedZones(
|
||||
pBar,
|
||||
zones,
|
||||
affectedZones //
|
||||
);
|
||||
int affectedZonesBullishCount = ExtractByDirection(
|
||||
affectedZonesBullish,
|
||||
affectedZones,
|
||||
X_DIRECTION_BULLISH //
|
||||
);
|
||||
int affectedZonesBearishCount = ExtractByDirection(
|
||||
affectedZonesBearish,
|
||||
affectedZones,
|
||||
X_DIRECTION_BEARISH //
|
||||
);
|
||||
|
||||
//
|
||||
int insideBullishIDX = -1;
|
||||
int insideBearishIDX = -1;
|
||||
bool hasBullishInside =
|
||||
pBar.IsBullish() &&
|
||||
HasInside(
|
||||
insideBullishIDX,
|
||||
pBar,
|
||||
affectedZonesBullish //
|
||||
);
|
||||
bool hasBearishInside =
|
||||
pBar.IsBearish() &&
|
||||
HasInside(
|
||||
insideBearishIDX,
|
||||
pBar,
|
||||
affectedZonesBearish //
|
||||
);
|
||||
|
||||
//
|
||||
// Do ...
|
||||
|
||||
//
|
||||
isBullish =
|
||||
//
|
||||
hasBullishInside &&
|
||||
isPullbackBullish &&
|
||||
isPBarHasBullishPatterns &&
|
||||
fimaHelper.IsSarBullish(pBar.Index()) &&
|
||||
(pVale >= affectedZonesBullish[insideBullishIDX].lower &&
|
||||
pVale <= affectedZonesBullish[insideBullishIDX].upper)
|
||||
//
|
||||
;
|
||||
|
||||
//
|
||||
isBearish =
|
||||
//
|
||||
hasBearishInside &&
|
||||
isPullbackBearish &&
|
||||
isPBarHasBearishPatterns &&
|
||||
fimaHelper.IsSarBearish(pBar.Index()) &&
|
||||
(pPeak >= affectedZonesBearish[insideBearishIDX].lower &&
|
||||
pPeak <= affectedZonesBearish[insideBearishIDX].upper)
|
||||
//
|
||||
;
|
||||
|
||||
//
|
||||
// Validate ...
|
||||
result = isBullish ||
|
||||
isBearish;
|
||||
if (result)
|
||||
{
|
||||
//
|
||||
if (isBullish)
|
||||
{
|
||||
//
|
||||
poiDrawer.DrawZone(
|
||||
affectedZonesBullish[insideBullishIDX],
|
||||
structureDrawConfig.drawConfig //
|
||||
);
|
||||
}
|
||||
else
|
||||
{
|
||||
//
|
||||
poiDrawer.DrawZone(
|
||||
affectedZonesBearish[insideBearishIDX],
|
||||
structureDrawConfig.drawConfig //
|
||||
);
|
||||
}
|
||||
|
||||
//
|
||||
dir =
|
||||
isBullish
|
||||
? X_DIRECTION_BULLISH
|
||||
: X_DIRECTION_BEARISH;
|
||||
|
||||
//
|
||||
result = HasDirection(dir);
|
||||
}
|
||||
|
||||
//
|
||||
// Prepare Zone ...
|
||||
if (result)
|
||||
{
|
||||
//
|
||||
zone.Clean();
|
||||
if (isBullish)
|
||||
{
|
||||
zone = affectedZonesBullish[insideBullishIDX];
|
||||
}
|
||||
else
|
||||
{
|
||||
zone = affectedZonesBearish[insideBearishIDX];
|
||||
}
|
||||
|
||||
//
|
||||
result = zone.IsValid();
|
||||
}
|
||||
|
||||
//
|
||||
// Prepare Targets ...
|
||||
if (result)
|
||||
{
|
||||
}
|
||||
|
||||
//
|
||||
// Cleanup ...
|
||||
if (!result)
|
||||
{
|
||||
//
|
||||
zone.Clean();
|
||||
XClean(targets);
|
||||
dir = X_DIRECTION_NONE;
|
||||
}
|
||||
pBar.Clean();
|
||||
XClean(zones);
|
||||
pBarAnalysis.Clean();
|
||||
XClean(affectedZones);
|
||||
XClean(affectedZonesBullish);
|
||||
XClean(affectedZonesBearish);
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check Bar Has Signal Based on Strategy 3 ...
|
||||
*
|
||||
* @param bar: XOHCL, reference to Bar ...
|
||||
* @param zone: XBoxZone, reference to holds affected zone ...
|
||||
* @param targets: XTarget, reference to detected Signal's Targets collections ...
|
||||
* @param dir: ENUM_X_DIRECTION, detected Signal's direction ...
|
||||
*
|
||||
* @return ( bool )
|
||||
*/
|
||||
bool Strategy2HasSignal(
|
||||
XOHCL &bar,
|
||||
XBoxZone &zone,
|
||||
XTarget &targets[],
|
||||
ENUM_X_DIRECTION &dir //
|
||||
)
|
||||
{
|
||||
//
|
||||
bool result = false;
|
||||
|
||||
//
|
||||
// Prepare ...
|
||||
zone.Clean();
|
||||
XClean(targets);
|
||||
dir = X_DIRECTION_NONE;
|
||||
|
||||
//
|
||||
// Validate ...
|
||||
result = bar.IsValid();
|
||||
if (!result)
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
// Define Requirements ...
|
||||
|
||||
//
|
||||
XOHCL pBar;
|
||||
XOHCL p2Bar;
|
||||
@@ -495,307 +787,6 @@ bool Strategy1HasSignal(
|
||||
return result;
|
||||
}
|
||||
|
||||
// =======================================
|
||||
// Signaller 2:
|
||||
// =======================================
|
||||
|
||||
/**
|
||||
* Check Bar Has Signal Based on Strategy 1 ...
|
||||
*
|
||||
* @param bar: XOHCL, reference to Bar ...
|
||||
* @param zone: XBoxZone, reference to holds affected zone ...
|
||||
* @param targets: XTarget, reference to detected Signal's Targets collections ...
|
||||
* @param dir: ENUM_X_DIRECTION, detected Signal's direction ...
|
||||
*
|
||||
* @return ( bool )
|
||||
*/
|
||||
bool Strategy2HasSignal(
|
||||
XOHCL &bar,
|
||||
XBoxZone &zone,
|
||||
XTarget &targets[],
|
||||
ENUM_X_DIRECTION &dir //
|
||||
)
|
||||
{
|
||||
//
|
||||
bool result = false;
|
||||
|
||||
//
|
||||
// Prepare ...
|
||||
zone.Clean();
|
||||
XClean(targets);
|
||||
dir = X_DIRECTION_NONE;
|
||||
|
||||
//
|
||||
// Validate ...
|
||||
result = bar.IsValid();
|
||||
if (!result)
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
// Define Requirements ...
|
||||
|
||||
//
|
||||
XOHCL pBar;
|
||||
bool isBullish = false;
|
||||
bool isBearish = false;
|
||||
|
||||
//
|
||||
// Read PBar ...
|
||||
result = bar.GetPreviousBar(pBar);
|
||||
if (!result)
|
||||
{
|
||||
//
|
||||
pBar.Clean();
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
// Reading Conditions ...
|
||||
int pullBackStartBar = -1;
|
||||
bool isPullBack = result &&
|
||||
poiDetector.IsPullbackPattern(
|
||||
pBar,
|
||||
zone,
|
||||
dir,
|
||||
2,
|
||||
false // Force Break ...
|
||||
);
|
||||
bool isPullbackBullish = isPullBack &&
|
||||
IsXBullish(dir);
|
||||
bool isPullbackBearish = isPullBack &&
|
||||
IsXBearish(dir);
|
||||
if (isPullBack)
|
||||
{
|
||||
pullBackStartBar = zone.FromIndex();
|
||||
}
|
||||
|
||||
//
|
||||
// Reading HK Bond ...
|
||||
|
||||
//
|
||||
double pHKBondUpper = fimaHelper.GetHKBondUpper(pBar.Index());
|
||||
double pHKBondLower = fimaHelper.GetHKBondLower(pBar.Index());
|
||||
int overHKBondUpperCount = fimaHelper.CountOverHKBondUpper(pullBackStartBar, X_PRICE_LOW);
|
||||
int underHKBondLowerCount = fimaHelper.CountUnderHKBondLower(pullBackStartBar, X_PRICE_HIGH);
|
||||
|
||||
//
|
||||
// Reading PV Requirements ...
|
||||
|
||||
//
|
||||
int lastPeakOverLastIDX = -1;
|
||||
int lastValeUnderLastIDX = -1;
|
||||
double pPeak = fimaHelper.GetPeak(pBar.Index());
|
||||
double pVale = fimaHelper.GetVale(pBar.Index());
|
||||
int samePeaks = fimaHelper.CountSamePeaks(pBar.Index());
|
||||
int sameVales = fimaHelper.CountSameVales(pBar.Index());
|
||||
fimaHelper.FindLastPeakOverLast(lastPeakOverLastIDX, pBar.Index());
|
||||
fimaHelper.FindLastValeUnderLast(lastValeUnderLastIDX, pBar.Index());
|
||||
|
||||
//
|
||||
// Reading pBar Patterns ...
|
||||
XPatternAnalysis pBarAnalysis;
|
||||
poiDetector.AnalyseBarPatterns(
|
||||
pBar,
|
||||
pBarAnalysis,
|
||||
structureConfig.barsAnalysisConfig //
|
||||
);
|
||||
|
||||
//
|
||||
// Check Bar Patterns ...
|
||||
bool isPBarHasBullishPatterns =
|
||||
(bar.close > pBar.low ||
|
||||
bar.open > pBar.low) &&
|
||||
(
|
||||
//
|
||||
pBarAnalysis.IsPinned(X_DIRECTION_BULLISH) ||
|
||||
pBarAnalysis.IsEngulfed(X_DIRECTION_BULLISH) ||
|
||||
pBarAnalysis.IsMomentum(X_DIRECTION_BULLISH) ||
|
||||
pBarAnalysis.IsPiercing(X_DIRECTION_BULLISH) ||
|
||||
pBarAnalysis.IsSignalKey(X_DIRECTION_BULLISH)
|
||||
//
|
||||
);
|
||||
bool isPBarHasBearishPatterns =
|
||||
(bar.close < pBar.high ||
|
||||
bar.open < pBar.high) &&
|
||||
(
|
||||
//
|
||||
pBarAnalysis.IsPinned(X_DIRECTION_BEARISH) ||
|
||||
pBarAnalysis.IsEngulfed(X_DIRECTION_BEARISH) ||
|
||||
pBarAnalysis.IsMomentum(X_DIRECTION_BEARISH) ||
|
||||
pBarAnalysis.IsPiercing(X_DIRECTION_BEARISH) ||
|
||||
pBarAnalysis.IsSignalKey(X_DIRECTION_BEARISH)
|
||||
//
|
||||
);
|
||||
|
||||
//
|
||||
// Check PBar Close Over Under Fast Ma ...
|
||||
bool isPBarCloseOverFast = pBar.close > fimaHelper.GetMAFast(pBar.Index());
|
||||
bool isPBarCloseUnderFast = pBar.close < fimaHelper.GetMAFast(pBar.Index());
|
||||
|
||||
//
|
||||
// Try To Find Affected Zone ...
|
||||
|
||||
//
|
||||
// Collecting Zones ...
|
||||
XBoxZone zones[];
|
||||
XBoxZone affectedZones[];
|
||||
XBoxZone affectedZonesBullish[];
|
||||
XBoxZone affectedZonesBearish[];
|
||||
int zonesCount = poiDetector.CollectZones(
|
||||
pBar,
|
||||
zones, //
|
||||
5, // Zones Loopback ...
|
||||
3 // Zones Validation Length ...
|
||||
// Required Zones ...
|
||||
// Loopback ...
|
||||
);
|
||||
int affectedZonesCount = ExtractAffectedZones(
|
||||
pBar,
|
||||
zones,
|
||||
affectedZones //
|
||||
);
|
||||
int affectedZonesBullishCount = ExtractByDirection(
|
||||
affectedZonesBullish,
|
||||
affectedZones,
|
||||
X_DIRECTION_BULLISH //
|
||||
);
|
||||
int affectedZonesBearishCount = ExtractByDirection(
|
||||
affectedZonesBearish,
|
||||
affectedZones,
|
||||
X_DIRECTION_BEARISH //
|
||||
);
|
||||
|
||||
//
|
||||
int insideBullishIDX = -1;
|
||||
int insideBearishIDX = -1;
|
||||
bool hasBullishInside =
|
||||
pBar.IsBullish() &&
|
||||
HasInside(
|
||||
insideBullishIDX,
|
||||
pBar,
|
||||
affectedZonesBullish //
|
||||
);
|
||||
bool hasBearishInside =
|
||||
pBar.IsBearish() &&
|
||||
HasInside(
|
||||
insideBearishIDX,
|
||||
pBar,
|
||||
affectedZonesBearish //
|
||||
);
|
||||
|
||||
//
|
||||
// Do ...
|
||||
|
||||
//
|
||||
isBullish =
|
||||
//
|
||||
hasBullishInside &&
|
||||
isPullbackBullish &&
|
||||
isPBarHasBullishPatterns &&
|
||||
fimaHelper.IsSarBullish(pBar.Index()) &&
|
||||
(pVale >= affectedZonesBullish[insideBullishIDX].lower &&
|
||||
pVale <= affectedZonesBullish[insideBullishIDX].upper)
|
||||
//
|
||||
;
|
||||
|
||||
//
|
||||
isBearish =
|
||||
//
|
||||
hasBearishInside &&
|
||||
isPullbackBearish &&
|
||||
isPBarHasBearishPatterns &&
|
||||
fimaHelper.IsSarBearish(pBar.Index()) &&
|
||||
(pPeak >= affectedZonesBearish[insideBearishIDX].lower &&
|
||||
pPeak <= affectedZonesBearish[insideBearishIDX].upper)
|
||||
//
|
||||
;
|
||||
|
||||
//
|
||||
// Validate ...
|
||||
result = isBullish ||
|
||||
isBearish;
|
||||
if (result)
|
||||
{
|
||||
//
|
||||
if (isBullish)
|
||||
{
|
||||
//
|
||||
poiDrawer.DrawZone(
|
||||
affectedZonesBullish[insideBullishIDX],
|
||||
structureDrawConfig.drawConfig //
|
||||
);
|
||||
}
|
||||
else
|
||||
{
|
||||
//
|
||||
poiDrawer.DrawZone(
|
||||
affectedZonesBearish[insideBearishIDX],
|
||||
structureDrawConfig.drawConfig //
|
||||
);
|
||||
}
|
||||
|
||||
//
|
||||
dir =
|
||||
isBullish
|
||||
? X_DIRECTION_BULLISH
|
||||
: X_DIRECTION_BEARISH;
|
||||
|
||||
//
|
||||
result = HasDirection(dir);
|
||||
}
|
||||
|
||||
//
|
||||
// Prepare Zone ...
|
||||
if (result)
|
||||
{
|
||||
//
|
||||
zone.Clean();
|
||||
if (isBullish)
|
||||
{
|
||||
zone = affectedZonesBullish[insideBullishIDX];
|
||||
}
|
||||
else
|
||||
{
|
||||
zone = affectedZonesBearish[insideBearishIDX];
|
||||
}
|
||||
|
||||
//
|
||||
result = zone.IsValid();
|
||||
}
|
||||
|
||||
//
|
||||
// Prepare Targets ...
|
||||
if (result)
|
||||
{
|
||||
}
|
||||
|
||||
//
|
||||
// Cleanup ...
|
||||
if (!result)
|
||||
{
|
||||
//
|
||||
zone.Clean();
|
||||
XClean(targets);
|
||||
dir = X_DIRECTION_NONE;
|
||||
}
|
||||
pBar.Clean();
|
||||
XClean(zones);
|
||||
pBarAnalysis.Clean();
|
||||
XClean(affectedZones);
|
||||
XClean(affectedZonesBullish);
|
||||
XClean(affectedZonesBearish);
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
// =======================================
|
||||
// Signaller 4:
|
||||
// CONSOLIDATION Zones ...
|
||||
// =======================================
|
||||
|
||||
/**
|
||||
* Check Bar Has Signal Based on Strategy 4 ...
|
||||
*
|
||||
@@ -806,7 +797,7 @@ bool Strategy2HasSignal(
|
||||
*
|
||||
* @return ( bool )
|
||||
*/
|
||||
bool Strategy4HasSignal(
|
||||
bool Strategy3HasSignal(
|
||||
XOHCL &bar,
|
||||
XBoxZone &zone,
|
||||
XTarget &targets[],
|
||||
@@ -854,131 +845,135 @@ bool Strategy4HasSignal(
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
// Reading pBar Patterns ...
|
||||
XPatternAnalysis pBarAnalysis;
|
||||
poiDetector.AnalyseBarPatterns(
|
||||
pBar,
|
||||
pBarAnalysis,
|
||||
structureConfig.barsAnalysisConfig //
|
||||
);
|
||||
|
||||
//
|
||||
// Do ...
|
||||
// XFIMA Consolidation ...
|
||||
|
||||
//
|
||||
bool isConsolidation = poiDetector.IsConsolidationPattern(
|
||||
pBar,
|
||||
bool isConsolidation = fimaHelper.HasPVConsolidationZone(
|
||||
zone,
|
||||
dir //
|
||||
pBar.Index(),
|
||||
true, // Force PV Break ...
|
||||
true // Force Has Sar Switch ...
|
||||
);
|
||||
|
||||
//
|
||||
// Validating Consolidation Zone ...
|
||||
int lastPeakOverLast = -1;
|
||||
int lastValeUnderLast = -1;
|
||||
isBullish =
|
||||
isConsolidation &&
|
||||
zone.IsBullish();
|
||||
|
||||
//
|
||||
// Bullish Consolidation ...
|
||||
bool isConsolidationBullish =
|
||||
isBearish =
|
||||
isConsolidation &&
|
||||
IsXBullish(dir) &&
|
||||
fimaHelper.FindLastPeakOverLast(
|
||||
lastPeakOverLast,
|
||||
zone.ToIndex(),
|
||||
zone.FromIndex() - zone.ToIndex() //
|
||||
) &&
|
||||
fimaHelper.IsSarBullish(pBar.Index());
|
||||
|
||||
//
|
||||
// Bearish Consolidation ...
|
||||
bool isConsolidationBearish =
|
||||
isConsolidation &&
|
||||
IsXBearish(dir) &&
|
||||
fimaHelper.FindLastValeUnderLast(
|
||||
lastValeUnderLast,
|
||||
zone.ToIndex(),
|
||||
zone.FromIndex() - zone.ToIndex() //
|
||||
) &&
|
||||
fimaHelper.IsSarBearish(pBar.Index());
|
||||
zone.IsBearish();
|
||||
|
||||
//
|
||||
// Validate based on Bars Patterns ...
|
||||
|
||||
//
|
||||
// Bullish ...
|
||||
bool isPBarHasBullishPatterns =
|
||||
(bar.close > pBar.low ||
|
||||
bar.open > pBar.low) &&
|
||||
(
|
||||
//
|
||||
pBarAnalysis.IsPinned(X_DIRECTION_BULLISH) ||
|
||||
pBarAnalysis.IsEngulfed(X_DIRECTION_BULLISH) ||
|
||||
pBarAnalysis.IsMomentum(X_DIRECTION_BULLISH) ||
|
||||
pBarAnalysis.IsPiercing(X_DIRECTION_BULLISH) ||
|
||||
pBarAnalysis.IsSignalKey(X_DIRECTION_BULLISH)
|
||||
//
|
||||
);
|
||||
|
||||
//
|
||||
// Bearish ...
|
||||
bool isPBarHasBearishPatterns =
|
||||
(bar.close < pBar.high ||
|
||||
bar.open < pBar.high) &&
|
||||
(
|
||||
//
|
||||
pBarAnalysis.IsPinned(X_DIRECTION_BEARISH) ||
|
||||
pBarAnalysis.IsEngulfed(X_DIRECTION_BEARISH) ||
|
||||
pBarAnalysis.IsMomentum(X_DIRECTION_BEARISH) ||
|
||||
pBarAnalysis.IsPiercing(X_DIRECTION_BEARISH) ||
|
||||
pBarAnalysis.IsSignalKey(X_DIRECTION_BEARISH)
|
||||
//
|
||||
);
|
||||
|
||||
//
|
||||
isConsolidationBullish =
|
||||
isConsolidationBullish &&
|
||||
isPBarHasBullishPatterns;
|
||||
|
||||
//
|
||||
isConsolidationBearish =
|
||||
isConsolidationBearish &&
|
||||
isPBarHasBearishPatterns;
|
||||
|
||||
//
|
||||
// Validate Based on Same Peaks and Vales ...
|
||||
|
||||
//
|
||||
int samePVValidationLength = 3;
|
||||
int samePeaks = fimaHelper.CountSamePeaks(pBar.Index(), (zone.FromIndex() - zone.ToIndex()));
|
||||
int sameVales = fimaHelper.CountSameVales(pBar.Index(), (zone.FromIndex() - zone.ToIndex()));
|
||||
|
||||
//
|
||||
bool isPeakValid = samePeaks >= samePVValidationLength;
|
||||
bool isValeValid = sameVales >= samePVValidationLength;
|
||||
bool isPVValid = isPeakValid ||
|
||||
isValeValid;
|
||||
|
||||
//
|
||||
isConsolidationBullish =
|
||||
isConsolidationBullish &&
|
||||
isPVValid;
|
||||
|
||||
//
|
||||
isConsolidationBearish =
|
||||
isConsolidationBearish &&
|
||||
isPVValid;
|
||||
|
||||
//
|
||||
// Validation Consolidation ...
|
||||
isConsolidation =
|
||||
isConsolidationBullish ||
|
||||
isConsolidationBearish;
|
||||
|
||||
//
|
||||
if (isConsolidation)
|
||||
bool validateByBarPatterns = true;
|
||||
if (validateByBarPatterns)
|
||||
{
|
||||
//
|
||||
// Reading pBar Patterns ...
|
||||
XPatternAnalysis pBarAnalysis;
|
||||
poiDetector.AnalyseBarPatterns(
|
||||
pBar,
|
||||
pBarAnalysis,
|
||||
structureConfig.barsAnalysisConfig //
|
||||
);
|
||||
|
||||
//
|
||||
// Bullish ...
|
||||
bool isPBarHasBullishPatterns =
|
||||
(bar.close > pBar.low ||
|
||||
bar.open > pBar.low) &&
|
||||
(
|
||||
//
|
||||
pBarAnalysis.IsPinned(X_DIRECTION_BULLISH) ||
|
||||
pBarAnalysis.IsEngulfed(X_DIRECTION_BULLISH) ||
|
||||
pBarAnalysis.IsMomentum(X_DIRECTION_BULLISH) ||
|
||||
pBarAnalysis.IsPiercing(X_DIRECTION_BULLISH) ||
|
||||
pBarAnalysis.IsSignalKey(X_DIRECTION_BULLISH)
|
||||
//
|
||||
);
|
||||
|
||||
//
|
||||
// Bearish ...
|
||||
bool isPBarHasBearishPatterns =
|
||||
(bar.close < pBar.high ||
|
||||
bar.open < pBar.high) &&
|
||||
(
|
||||
//
|
||||
pBarAnalysis.IsPinned(X_DIRECTION_BEARISH) ||
|
||||
pBarAnalysis.IsEngulfed(X_DIRECTION_BEARISH) ||
|
||||
pBarAnalysis.IsMomentum(X_DIRECTION_BEARISH) ||
|
||||
pBarAnalysis.IsPiercing(X_DIRECTION_BEARISH) ||
|
||||
pBarAnalysis.IsSignalKey(X_DIRECTION_BEARISH)
|
||||
//
|
||||
);
|
||||
|
||||
//
|
||||
isBullish =
|
||||
isBullish &&
|
||||
isPBarHasBullishPatterns &&
|
||||
!isPBarHasBearishPatterns;
|
||||
|
||||
//
|
||||
isBearish =
|
||||
isBearish &&
|
||||
isPBarHasBearishPatterns &&
|
||||
!isPBarHasBullishPatterns;
|
||||
|
||||
//
|
||||
// Summarize Result ...
|
||||
result = isBullish ||
|
||||
isBearish;
|
||||
}
|
||||
|
||||
//
|
||||
// Checking PullBack ...
|
||||
bool validateByPullback = false;
|
||||
if (validateByPullback)
|
||||
{
|
||||
//
|
||||
XBoxZone pullback;
|
||||
ENUM_X_DIRECTION pullbackDir;
|
||||
bool isPullBack = result &&
|
||||
poiDetector.IsPullbackPattern(
|
||||
pBar,
|
||||
pullback,
|
||||
pullbackDir,
|
||||
2,
|
||||
false // Force Break ...
|
||||
);
|
||||
bool isPullbackBullish = isPullBack &&
|
||||
IsXBullish(pullbackDir);
|
||||
bool isPullbackBearish = isPullBack &&
|
||||
IsXBearish(pullbackDir);
|
||||
|
||||
//
|
||||
isBullish =
|
||||
isBullish &&
|
||||
isPullbackBullish;
|
||||
|
||||
//
|
||||
isBearish =
|
||||
isBearish &&
|
||||
isPullbackBearish;
|
||||
|
||||
//
|
||||
// Summarize Result ...
|
||||
result = isBullish ||
|
||||
isBearish;
|
||||
}
|
||||
|
||||
//
|
||||
// Validate ...
|
||||
result = isBullish ||
|
||||
isBearish;
|
||||
if (result)
|
||||
{
|
||||
//
|
||||
dir = zone.dir;
|
||||
zone.to = bar.time;
|
||||
XPOIDrawConfig iConfig = structureDrawConfig.drawConfig;
|
||||
iConfig.zonesWidth = 3;
|
||||
@@ -988,48 +983,18 @@ bool Strategy4HasSignal(
|
||||
Print("Consolidation");
|
||||
}
|
||||
|
||||
//
|
||||
isBullish =
|
||||
//
|
||||
false
|
||||
//
|
||||
;
|
||||
|
||||
//
|
||||
isBearish =
|
||||
//
|
||||
false
|
||||
//
|
||||
;
|
||||
|
||||
//
|
||||
// Validate ...
|
||||
result = isBullish ||
|
||||
isBearish;
|
||||
if (result)
|
||||
{
|
||||
//
|
||||
dir =
|
||||
isBullish
|
||||
? X_DIRECTION_BULLISH
|
||||
: X_DIRECTION_BEARISH;
|
||||
|
||||
//
|
||||
result = HasDirection(dir);
|
||||
}
|
||||
|
||||
//
|
||||
// Prepare Zone ...
|
||||
if (result)
|
||||
{
|
||||
//
|
||||
zone.Clean();
|
||||
result = ToBox(
|
||||
p2Bar,
|
||||
zone,
|
||||
dir,
|
||||
X_BAR_PATTERN_PINNED //
|
||||
);
|
||||
// zone.Clean();
|
||||
// result = ToBox(
|
||||
// p2Bar,
|
||||
// zone,
|
||||
// dir,
|
||||
// X_BAR_PATTERN_PINNED //
|
||||
// );
|
||||
|
||||
//
|
||||
// Manage Stops ...
|
||||
|
||||
Reference in New Issue
Block a user