last works ...

This commit is contained in:
2025-10-05 23:39:29 +03:30
parent 03d215c9fa
commit 2b48fa569e
4 changed files with 320 additions and 140 deletions
+73 -129
View File
@@ -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 ...
+227
View File
@@ -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 ...