last works ...
This commit is contained in:
@@ -4073,7 +4073,8 @@ class XCXFIMAHelper : public XCBaseHelper
|
||||
bool isBearish = false;
|
||||
double iMin = EMPTY_VALUE;
|
||||
double iMax = EMPTY_VALUE;
|
||||
ENUM_X_DIRECTION iDir = X_DIRECTION_NONE;
|
||||
bool isCond1Bullish = false;
|
||||
bool isCond1Bearish = false;
|
||||
for (int i = 0; i < decisionBarsCount; i++)
|
||||
{
|
||||
//
|
||||
@@ -4092,15 +4093,21 @@ class XCXFIMAHelper : public XCBaseHelper
|
||||
//
|
||||
// Validate ...
|
||||
|
||||
//
|
||||
isCond1Bullish = decisionBars[i].IsBullish();
|
||||
|
||||
//
|
||||
isCond1Bearish = decisionBars[i].IsBearish();
|
||||
|
||||
//
|
||||
isBullish =
|
||||
isBullish &&
|
||||
decisionBars[i].IsBullish();
|
||||
(isCond1Bullish);
|
||||
|
||||
//
|
||||
isBearish =
|
||||
isBearish &&
|
||||
decisionBars[i].IsBearish();
|
||||
(isCond1Bearish);
|
||||
|
||||
//
|
||||
if (forceTouchBoundary)
|
||||
@@ -4119,24 +4126,9 @@ class XCXFIMAHelper : public XCBaseHelper
|
||||
}
|
||||
|
||||
//
|
||||
has = (isBullish && !isBearish) ||
|
||||
(isBearish && !isBullish);
|
||||
if (!has)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
//
|
||||
iDir =
|
||||
isBullish
|
||||
? X_DIRECTION_BULLISH
|
||||
: X_DIRECTION_BEARISH;
|
||||
|
||||
//
|
||||
// Validate For Dir ...
|
||||
has = !HasDirection(forDir)
|
||||
? HasDirection(iDir)
|
||||
: iDir == forDir;
|
||||
has =
|
||||
isBullish ||
|
||||
isBearish;
|
||||
if (has)
|
||||
{
|
||||
//
|
||||
@@ -4147,7 +4139,7 @@ class XCXFIMAHelper : public XCBaseHelper
|
||||
|
||||
//
|
||||
Add(
|
||||
iDir,
|
||||
decisionBarDirs[i],
|
||||
dirs //
|
||||
);
|
||||
}
|
||||
@@ -4225,56 +4217,78 @@ class XCXFIMAHelper : public XCBaseHelper
|
||||
bool isBearish = false;
|
||||
double iMin = EMPTY_VALUE;
|
||||
double iMax = EMPTY_VALUE;
|
||||
ENUM_X_DIRECTION iDir = X_DIRECTION_NONE;
|
||||
bool isCond1Bullish = false;
|
||||
bool isCond1Bearish = false;
|
||||
for (int i = 0; i < decisionBarsCount; i++)
|
||||
{
|
||||
//
|
||||
// Read Boundary Values ...
|
||||
has = GetBoundaryValues(iMin, iMax, i);
|
||||
// Read Indexed Bars Boundaries ...
|
||||
has = GetBoundaryValues(iMin, iMax, decisionBars[i].Index());
|
||||
if (!has)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
//
|
||||
// Validate ...
|
||||
// Make Direction Opposit ...
|
||||
decisionBarDirs[i] = Opposit(decisionBarDirs[i]);
|
||||
|
||||
//
|
||||
isBullish = IsXBullish(decisionBarDirs[i]);
|
||||
isBearish = IsXBearish(decisionBarDirs[i]);
|
||||
|
||||
//
|
||||
// Check Bar Validations ...
|
||||
|
||||
//
|
||||
// Cond 1 ...
|
||||
|
||||
//
|
||||
isCond1Bullish =
|
||||
decisionBars[i].IsBearish() &&
|
||||
(decisionBars[i].low >= iMax ||
|
||||
(decisionBars[i].low <= iMax &&
|
||||
decisionBars[i].GetUp() >= iMax));
|
||||
|
||||
//
|
||||
isCond1Bearish =
|
||||
decisionBars[i].IsBullish() &&
|
||||
(decisionBars[i].high <= iMin ||
|
||||
(decisionBars[i].high >= iMin &&
|
||||
decisionBars[i].GetDown() <= iMin));
|
||||
|
||||
//
|
||||
isBullish =
|
||||
decisionBars[i].high > iMax &&
|
||||
IsXBearish(decisionBarDirs[i]);
|
||||
// &&
|
||||
// decisionBars[i].IsBullish();
|
||||
isBullish &&
|
||||
(isCond1Bullish);
|
||||
|
||||
//
|
||||
isBearish =
|
||||
decisionBars[i].low < iMin &&
|
||||
IsXBullish(decisionBarDirs[i]);
|
||||
// &&
|
||||
// decisionBars[i].IsBearish();
|
||||
isBearish &&
|
||||
(isCond1Bearish);
|
||||
|
||||
//
|
||||
// Check Direction ...
|
||||
has =
|
||||
isBullish ||
|
||||
!isBearish;
|
||||
// has = (isBullish && !isBearish) ||
|
||||
// (isBearish && !isBullish);
|
||||
if (!has)
|
||||
if (forceTouchBoundary)
|
||||
{
|
||||
continue;
|
||||
//
|
||||
isBullish =
|
||||
isBullish &&
|
||||
(decisionBars[i].low >= iMax ||
|
||||
(decisionBars[i].low <= iMax &&
|
||||
decisionBars[i].GetUp() >= iMax));
|
||||
|
||||
//
|
||||
isBearish =
|
||||
isBearish &&
|
||||
(decisionBars[i].high <= iMin ||
|
||||
(decisionBars[i].high >= iMin &&
|
||||
decisionBars[i].GetDown() <= iMin));
|
||||
}
|
||||
|
||||
//
|
||||
iDir = isBullish
|
||||
? X_DIRECTION_BULLISH
|
||||
: X_DIRECTION_BEARISH;
|
||||
|
||||
//
|
||||
// Validate For Dir ...
|
||||
has = !HasDirection(forDir)
|
||||
? HasDirection(iDir)
|
||||
: iDir == forDir;
|
||||
has =
|
||||
isBullish ||
|
||||
isBearish;
|
||||
if (has)
|
||||
{
|
||||
//
|
||||
@@ -4285,90 +4299,14 @@ class XCXFIMAHelper : public XCBaseHelper
|
||||
|
||||
//
|
||||
Add(
|
||||
iDir,
|
||||
decisionBarDirs[i],
|
||||
dirs //
|
||||
);
|
||||
}
|
||||
|
||||
// //
|
||||
// isBullish =
|
||||
// (decisionBars[i].low > iMax ||
|
||||
// decisionBars[i].GetDown() > iMax) &&
|
||||
// IsXBearish(decisionBarDirs[i]) &&
|
||||
// decisionBars[i].IsBullish();
|
||||
|
||||
// //
|
||||
// isBearish =
|
||||
// (decisionBars[i].high < iMin ||
|
||||
// decisionBars[i].GetUp() < iMin) &&
|
||||
// IsXBullish(decisionBarDirs[i]) &&
|
||||
// decisionBars[i].IsBearish();
|
||||
|
||||
// //
|
||||
// if (forceTouchBoundary)
|
||||
// {
|
||||
// //
|
||||
// isBullish =
|
||||
// isBullish &&
|
||||
// decisionBars[i].low < iMax &&
|
||||
// decisionBars[i].GetUp() > iMax;
|
||||
|
||||
// //
|
||||
// isBearish =
|
||||
// isBearish &&
|
||||
// decisionBars[i].high > iMin &&
|
||||
// decisionBars[i].GetDown() < iMin;
|
||||
// }
|
||||
|
||||
// //
|
||||
// has = (isBullish && !isBearish) ||
|
||||
// (isBearish && !isBullish);
|
||||
// if (!has)
|
||||
// {
|
||||
// continue;
|
||||
// }
|
||||
|
||||
// //
|
||||
// iDir =
|
||||
// isBullish
|
||||
// ? X_DIRECTION_BULLISH
|
||||
// : X_DIRECTION_BEARISH;
|
||||
|
||||
// //
|
||||
// // Validate For Dir ...
|
||||
// has = !HasDirection(forDir)
|
||||
// ? HasDirection(iDir)
|
||||
// : iDir == forDir;
|
||||
// if (has)
|
||||
// {
|
||||
// //
|
||||
// AddRef(
|
||||
// decisionBars[i],
|
||||
// bars //
|
||||
// );
|
||||
|
||||
// //
|
||||
// Add(
|
||||
// iDir,
|
||||
// dirs //
|
||||
// );
|
||||
// }
|
||||
|
||||
//
|
||||
AddRef(
|
||||
decisionBars[i],
|
||||
bars //
|
||||
);
|
||||
|
||||
//
|
||||
Add(
|
||||
decisionBarDirs[i],
|
||||
dirs //
|
||||
);
|
||||
}
|
||||
|
||||
//
|
||||
result = ArraySize(bars);
|
||||
result = MathMin(ArraySize(bars), ArraySize(dirs));
|
||||
|
||||
//
|
||||
// Cleanup Resources ...
|
||||
@@ -4379,6 +4317,12 @@ class XCXFIMAHelper : public XCBaseHelper
|
||||
return result;
|
||||
}
|
||||
|
||||
int DetectXFIMAPOIBarPatterns(
|
||||
XOHCL &bars[],
|
||||
XOHCL &dirs[],
|
||||
int barIndex = 0,
|
||||
)
|
||||
|
||||
//
|
||||
// Values Retrievers ...
|
||||
|
||||
|
||||
@@ -3985,6 +3985,7 @@ bool ToBox(
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
// Flags for Patterns ...
|
||||
|
||||
|
||||
@@ -28,6 +28,233 @@
|
||||
//
|
||||
// Definitions ...
|
||||
|
||||
/**
|
||||
* All Available Market Patterns ...
|
||||
**/
|
||||
enum ENUM_X_BAR_PATTERN
|
||||
{
|
||||
X_BAR_PATTERN_NONE = 0,
|
||||
X_BAR_PATTERN_HIGH = 1,
|
||||
X_BAR_PATTERN_LOW = 2,
|
||||
X_BAR_PATTERN_MOMENTUM = 3,
|
||||
X_BAR_PATTERN_ENGULFED = 4,
|
||||
X_BAR_PATTERN_TRUE_GAPPED = 5,
|
||||
X_BAR_PATTERN_PINNED = 6,
|
||||
X_BAR_PATTERN_STAR = 7,
|
||||
X_BAR_PATTERN_PIERCING = 8,
|
||||
X_BAR_PATTERN_RISING = 9,
|
||||
X_BAR_PATTERN_FLAG = 10,
|
||||
X_BAR_PATTERN_SIGNALKEY = 11,
|
||||
X_BAR_PATTERN_OB = 12,
|
||||
X_BAR_PATTERN_FVG = 13,
|
||||
X_BAR_PATTERN_SUPPORT = 14,
|
||||
X_BAR_PATTERN_RESISTANCE = 15,
|
||||
};
|
||||
|
||||
/**
|
||||
* Validate an ENUM member ...
|
||||
*
|
||||
* @param value: ENUM_X_BAR_PATTERN ...
|
||||
*
|
||||
* @return ( bool )
|
||||
*/
|
||||
bool IsXValid(ENUM_X_BAR_PATTERN value)
|
||||
{
|
||||
return value != X_BAR_PATTERN_NONE;
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts a Pattern ENUM to String Representation ...
|
||||
*
|
||||
* @param value: ENUM_X_BAR_PATTERN, member ...
|
||||
*
|
||||
* @return ( string )
|
||||
*/
|
||||
string ToXString(ENUM_X_BAR_PATTERN value)
|
||||
{
|
||||
//
|
||||
string result = NULL;
|
||||
|
||||
//
|
||||
switch (value)
|
||||
{
|
||||
//
|
||||
case X_BAR_PATTERN_NONE:
|
||||
result = "X_NONE";
|
||||
break;
|
||||
|
||||
//
|
||||
case X_BAR_PATTERN_HIGH:
|
||||
result = "XHIGH";
|
||||
break;
|
||||
|
||||
//
|
||||
case X_BAR_PATTERN_LOW:
|
||||
result = "XLOW";
|
||||
break;
|
||||
|
||||
//
|
||||
case X_BAR_PATTERN_MOMENTUM:
|
||||
result = "XMOMENTUM";
|
||||
break;
|
||||
|
||||
//
|
||||
case X_BAR_PATTERN_ENGULFED:
|
||||
result = "XENGULFED";
|
||||
break;
|
||||
|
||||
//
|
||||
case X_BAR_PATTERN_TRUE_GAPPED:
|
||||
result = "XGAPPED";
|
||||
break;
|
||||
|
||||
//
|
||||
case X_BAR_PATTERN_PINNED:
|
||||
result = "XPINNED";
|
||||
break;
|
||||
|
||||
//
|
||||
case X_BAR_PATTERN_STAR:
|
||||
result = "XSTAR";
|
||||
break;
|
||||
|
||||
//
|
||||
case X_BAR_PATTERN_PIERCING:
|
||||
result = "XPIERCING";
|
||||
break;
|
||||
|
||||
//
|
||||
case X_BAR_PATTERN_RISING:
|
||||
result = "XRISING";
|
||||
break;
|
||||
|
||||
//
|
||||
case X_BAR_PATTERN_FLAG:
|
||||
result = "XFLAG";
|
||||
break;
|
||||
|
||||
//
|
||||
case X_BAR_PATTERN_SIGNALKEY:
|
||||
result = "XSIGNALKEY";
|
||||
break;
|
||||
|
||||
//
|
||||
case X_BAR_PATTERN_OB:
|
||||
result = "XOB";
|
||||
break;
|
||||
|
||||
//
|
||||
case X_BAR_PATTERN_FVG:
|
||||
result = "XFVG";
|
||||
break;
|
||||
|
||||
//
|
||||
case X_BAR_PATTERN_SUPPORT:
|
||||
result = "XSUPPORT";
|
||||
break;
|
||||
|
||||
//
|
||||
case X_BAR_PATTERN_RESISTANCE:
|
||||
result = "XRESISTANCE";
|
||||
break;
|
||||
}
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Parse an String Representation to it's Corresponding Bar Pattern ENUM ...
|
||||
*
|
||||
* @param value: string, provided pattern's string ...
|
||||
*
|
||||
* @return ( ENUM_X_BAR_PATTERN )
|
||||
*/
|
||||
ENUM_X_BAR_PATTERN ToBarPattern(string value)
|
||||
{
|
||||
//
|
||||
ENUM_X_BAR_PATTERN result = X_BAR_PATTERN_NONE;
|
||||
|
||||
//
|
||||
// Validate ...
|
||||
if (!IsXValid(value))
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
if (value == ToXString(X_BAR_PATTERN_NONE))
|
||||
{
|
||||
result = X_BAR_PATTERN_NONE;
|
||||
}
|
||||
else if (value == ToXString(X_BAR_PATTERN_HIGH))
|
||||
{
|
||||
result = X_BAR_PATTERN_HIGH;
|
||||
}
|
||||
else if (value == ToXString(X_BAR_PATTERN_LOW))
|
||||
{
|
||||
result = X_BAR_PATTERN_LOW;
|
||||
}
|
||||
else if (value == ToXString(X_BAR_PATTERN_MOMENTUM))
|
||||
{
|
||||
result = X_BAR_PATTERN_MOMENTUM;
|
||||
}
|
||||
else if (value == ToXString(X_BAR_PATTERN_ENGULFED))
|
||||
{
|
||||
result = X_BAR_PATTERN_ENGULFED;
|
||||
}
|
||||
else if (value == ToXString(X_BAR_PATTERN_TRUE_GAPPED))
|
||||
{
|
||||
result = X_BAR_PATTERN_TRUE_GAPPED;
|
||||
}
|
||||
else if (value == ToXString(X_BAR_PATTERN_PINNED))
|
||||
{
|
||||
result = X_BAR_PATTERN_PINNED;
|
||||
}
|
||||
else if (value == ToXString(X_BAR_PATTERN_STAR))
|
||||
{
|
||||
result = X_BAR_PATTERN_STAR;
|
||||
}
|
||||
else if (value == ToXString(X_BAR_PATTERN_PIERCING))
|
||||
{
|
||||
result = X_BAR_PATTERN_PIERCING;
|
||||
}
|
||||
else if (value == ToXString(X_BAR_PATTERN_RISING))
|
||||
{
|
||||
result = X_BAR_PATTERN_RISING;
|
||||
}
|
||||
else if (value == ToXString(X_BAR_PATTERN_FLAG))
|
||||
{
|
||||
result = X_BAR_PATTERN_FLAG;
|
||||
}
|
||||
else if (value == ToXString(X_BAR_PATTERN_SIGNALKEY))
|
||||
{
|
||||
result = X_BAR_PATTERN_SIGNALKEY;
|
||||
}
|
||||
else if (value == ToXString(X_BAR_PATTERN_OB))
|
||||
{
|
||||
result = X_BAR_PATTERN_OB;
|
||||
}
|
||||
else if (value == ToXString(X_BAR_PATTERN_FVG))
|
||||
{
|
||||
result = X_BAR_PATTERN_FVG;
|
||||
}
|
||||
else if (value == ToXString(X_BAR_PATTERN_SUPPORT))
|
||||
{
|
||||
result = X_BAR_PATTERN_SUPPORT;
|
||||
}
|
||||
else if (value == ToXString(X_BAR_PATTERN_RESISTANCE))
|
||||
{
|
||||
result = X_BAR_PATTERN_RESISTANCE;
|
||||
}
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
// Structures ...
|
||||
|
||||
/**
|
||||
* Represent a Pivot ...
|
||||
**/
|
||||
|
||||
@@ -726,8 +726,24 @@ class XCXFIMAStrategy1Signaller : public XCXFIMABaseSignaller
|
||||
//
|
||||
// Detect DecisionBars ...
|
||||
XOHCL decisionBars[];
|
||||
int decisionBarsCount = 0;
|
||||
ENUM_X_DIRECTION decisionBarDirs[];
|
||||
int decisionBarsCount = fimaHelper.DetectXFIMAContinuationalPOIBars(
|
||||
// decisionBarsCount = fimaHelper.DetectXFIMAPOIBars(
|
||||
// decisionBars,
|
||||
// decisionBarDirs,
|
||||
// iBar.Index(),
|
||||
// X_DIRECTION_ALL, // For Dir ...
|
||||
// 300 // Required Number of Bars ...
|
||||
// );
|
||||
// decisionBarsCount = fimaHelper.DetectXFIMAReversalPOIBars(
|
||||
// decisionBars,
|
||||
// decisionBarDirs,
|
||||
// iBar.Index(),
|
||||
// true, // Force Touch Boundary ...
|
||||
// X_DIRECTION_ALL, // For Dir ...
|
||||
// 300 // Required Number of Bars ...
|
||||
// );
|
||||
decisionBarsCount = fimaHelper.DetectXFIMAContinuationalPOIBars(
|
||||
decisionBars,
|
||||
decisionBarDirs,
|
||||
iBar.Index(),
|
||||
@@ -735,14 +751,6 @@ class XCXFIMAStrategy1Signaller : public XCXFIMABaseSignaller
|
||||
X_DIRECTION_ALL, // For Dir ...
|
||||
300 // Required Number of Bars ...
|
||||
);
|
||||
// int decisionBarsCount = fimaHelper.DetectXFIMAPOIBars(
|
||||
// decisionBars,
|
||||
// decisionBarDirs,
|
||||
// iBar.Index(),
|
||||
// true,
|
||||
// X_DIRECTION_ALL, // For Dir ...
|
||||
// 300 // Required Number of Bars ...
|
||||
// );
|
||||
|
||||
//
|
||||
has = IsValidSize(decisionBarsCount);
|
||||
@@ -758,9 +766,9 @@ class XCXFIMAStrategy1Signaller : public XCXFIMABaseSignaller
|
||||
iObj,
|
||||
IsXBullish(decisionBarDirs[i]) ? X_PRICE_LOW : X_PRICE_HIGH,
|
||||
159,
|
||||
IsXBullish(decisionBarDirs[i]) ? clrYellow : clrDarkOrange,
|
||||
IsXBullish(decisionBarDirs[i]) ? clrAqua : clrMagenta,
|
||||
5,
|
||||
IsXBullish(decisionBarDirs[i]) ? ANCHOR_BOTTOM : ANCHOR_TOP,
|
||||
IsXBullish(decisionBarDirs[i]) ? ANCHOR_TOP : ANCHOR_BOTTOM,
|
||||
"XOHCL_" + ToXString(TimeToSeconds(decisionBars[i].time)),
|
||||
true, // Ignore Bar Tag ...
|
||||
5 // Threshold ...
|
||||
|
||||
Reference in New Issue
Block a user