last ...
This commit is contained in:
@@ -4051,7 +4051,8 @@ bool SpecifiedHasChild(T &buffer[])
|
||||
template <typename T>
|
||||
bool Remove(
|
||||
T item,
|
||||
T &buffer[])
|
||||
T &buffer[] //
|
||||
)
|
||||
{
|
||||
//
|
||||
bool result = false;
|
||||
|
||||
@@ -1410,7 +1410,7 @@ struct XPatternAnalysis
|
||||
bool result = false;
|
||||
|
||||
//
|
||||
result = HasPattern(X_BAR_PATTERN_HIGH);
|
||||
result = HasPattern(X_BAR_PATTERN_LOW);
|
||||
|
||||
//
|
||||
return result;
|
||||
@@ -1637,7 +1637,8 @@ struct XPatternAnalysis
|
||||
XPivot &_pivot,
|
||||
XBoxZone &_zone,
|
||||
ENUM_X_PRICE _peakPriceType = X_PRICE_HIGH,
|
||||
ENUM_X_PRICE _valePriceType = X_PRICE_LOW //
|
||||
ENUM_X_PRICE _valePriceType = X_PRICE_LOW,
|
||||
datetime _toTime = NULL //
|
||||
)
|
||||
{
|
||||
//
|
||||
@@ -1659,7 +1660,8 @@ struct XPatternAnalysis
|
||||
XPivot &_pivot,
|
||||
XBoxZone &_zone,
|
||||
ENUM_X_PRICE _peakPriceType = X_PRICE_HIGH,
|
||||
ENUM_X_PRICE _valePriceType = X_PRICE_LOW //
|
||||
ENUM_X_PRICE _valePriceType = X_PRICE_LOW,
|
||||
datetime _toTime = NULL //
|
||||
)
|
||||
{
|
||||
//
|
||||
@@ -1681,7 +1683,8 @@ struct XPatternAnalysis
|
||||
XPivot &_pivot,
|
||||
XBoxZone &_zone,
|
||||
ENUM_X_PRICE _peakPriceType = X_PRICE_HIGH,
|
||||
ENUM_X_PRICE _valePriceType = X_PRICE_LOW //
|
||||
ENUM_X_PRICE _valePriceType = X_PRICE_LOW,
|
||||
datetime _toTime = NULL //
|
||||
)
|
||||
{
|
||||
//
|
||||
@@ -1703,7 +1706,8 @@ struct XPatternAnalysis
|
||||
XPivot &_pivot,
|
||||
XBoxZone &_zone,
|
||||
ENUM_X_PRICE _peakPriceType = X_PRICE_HIGH,
|
||||
ENUM_X_PRICE _valePriceType = X_PRICE_LOW //
|
||||
ENUM_X_PRICE _valePriceType = X_PRICE_LOW,
|
||||
datetime _toTime = NULL //
|
||||
)
|
||||
{
|
||||
//
|
||||
@@ -1726,7 +1730,8 @@ struct XPatternAnalysis
|
||||
XBoxZone &_zone,
|
||||
ENUM_X_DIRECTION _patternDir = X_DIRECTION_NONE,
|
||||
ENUM_X_PRICE _peakPriceType = X_PRICE_HIGH,
|
||||
ENUM_X_PRICE _valePriceType = X_PRICE_LOW //
|
||||
ENUM_X_PRICE _valePriceType = X_PRICE_LOW,
|
||||
datetime _toTime = NULL //
|
||||
)
|
||||
{
|
||||
//
|
||||
@@ -1748,7 +1753,8 @@ struct XPatternAnalysis
|
||||
XBoxZone &_zone,
|
||||
ENUM_X_DIRECTION _patternDir = X_DIRECTION_NONE,
|
||||
ENUM_X_PRICE _peakPriceType = X_PRICE_HIGH,
|
||||
ENUM_X_PRICE _valePriceType = X_PRICE_LOW //
|
||||
ENUM_X_PRICE _valePriceType = X_PRICE_LOW,
|
||||
datetime _toTime = NULL //
|
||||
)
|
||||
{
|
||||
//
|
||||
@@ -1770,7 +1776,8 @@ struct XPatternAnalysis
|
||||
XBoxZone &_zone,
|
||||
ENUM_X_DIRECTION _patternDir = X_DIRECTION_NONE,
|
||||
ENUM_X_PRICE _peakPriceType = X_PRICE_HIGH,
|
||||
ENUM_X_PRICE _valePriceType = X_PRICE_LOW //
|
||||
ENUM_X_PRICE _valePriceType = X_PRICE_LOW,
|
||||
datetime _toTime = NULL //
|
||||
)
|
||||
{
|
||||
//
|
||||
@@ -1792,7 +1799,8 @@ struct XPatternAnalysis
|
||||
XBoxZone &_zone,
|
||||
ENUM_X_DIRECTION _patternDir = X_DIRECTION_NONE,
|
||||
ENUM_X_PRICE _peakPriceType = X_PRICE_HIGH,
|
||||
ENUM_X_PRICE _valePriceType = X_PRICE_LOW //
|
||||
ENUM_X_PRICE _valePriceType = X_PRICE_LOW,
|
||||
datetime _toTime = NULL //
|
||||
)
|
||||
{
|
||||
//
|
||||
@@ -1814,7 +1822,8 @@ struct XPatternAnalysis
|
||||
XBoxZone &_zone,
|
||||
ENUM_X_DIRECTION _patternDir = X_DIRECTION_NONE,
|
||||
ENUM_X_PRICE _peakPriceType = X_PRICE_HIGH,
|
||||
ENUM_X_PRICE _valePriceType = X_PRICE_LOW //
|
||||
ENUM_X_PRICE _valePriceType = X_PRICE_LOW,
|
||||
datetime _toTime = NULL //
|
||||
)
|
||||
{
|
||||
//
|
||||
@@ -1836,7 +1845,8 @@ struct XPatternAnalysis
|
||||
XBoxZone &_zone,
|
||||
ENUM_X_DIRECTION _patternDir = X_DIRECTION_NONE,
|
||||
ENUM_X_PRICE _peakPriceType = X_PRICE_HIGH,
|
||||
ENUM_X_PRICE _valePriceType = X_PRICE_LOW //
|
||||
ENUM_X_PRICE _valePriceType = X_PRICE_LOW,
|
||||
datetime _toTime = NULL //
|
||||
)
|
||||
{
|
||||
//
|
||||
@@ -1858,7 +1868,8 @@ struct XPatternAnalysis
|
||||
XBoxZone &_zone,
|
||||
ENUM_X_DIRECTION _patternDir = X_DIRECTION_NONE,
|
||||
ENUM_X_PRICE _peakPriceType = X_PRICE_HIGH,
|
||||
ENUM_X_PRICE _valePriceType = X_PRICE_LOW //
|
||||
ENUM_X_PRICE _valePriceType = X_PRICE_LOW,
|
||||
datetime _toTime = NULL //
|
||||
)
|
||||
{
|
||||
//
|
||||
@@ -1880,7 +1891,8 @@ struct XPatternAnalysis
|
||||
XBoxZone &_zone,
|
||||
ENUM_X_DIRECTION _patternDir = X_DIRECTION_NONE,
|
||||
ENUM_X_PRICE _peakPriceType = X_PRICE_HIGH,
|
||||
ENUM_X_PRICE _valePriceType = X_PRICE_LOW //
|
||||
ENUM_X_PRICE _valePriceType = X_PRICE_LOW,
|
||||
datetime _toTime = NULL //
|
||||
)
|
||||
{
|
||||
//
|
||||
@@ -1902,7 +1914,8 @@ struct XPatternAnalysis
|
||||
XBoxZone &_zone,
|
||||
ENUM_X_DIRECTION _patternDir = X_DIRECTION_NONE,
|
||||
ENUM_X_PRICE _peakPriceType = X_PRICE_HIGH,
|
||||
ENUM_X_PRICE _valePriceType = X_PRICE_LOW //
|
||||
ENUM_X_PRICE _valePriceType = X_PRICE_LOW,
|
||||
datetime _toTime = NULL //
|
||||
)
|
||||
{
|
||||
//
|
||||
@@ -1924,7 +1937,8 @@ struct XPatternAnalysis
|
||||
XBoxZone &_zone,
|
||||
ENUM_X_DIRECTION _patternDir = X_DIRECTION_NONE,
|
||||
ENUM_X_PRICE _peakPriceType = X_PRICE_HIGH,
|
||||
ENUM_X_PRICE _valePriceType = X_PRICE_LOW //
|
||||
ENUM_X_PRICE _valePriceType = X_PRICE_LOW,
|
||||
datetime _toTime = NULL //
|
||||
)
|
||||
{
|
||||
//
|
||||
@@ -1946,7 +1960,8 @@ struct XPatternAnalysis
|
||||
XBoxZone &_zone,
|
||||
ENUM_X_DIRECTION _patternDir = X_DIRECTION_NONE,
|
||||
ENUM_X_PRICE _peakPriceType = X_PRICE_HIGH,
|
||||
ENUM_X_PRICE _valePriceType = X_PRICE_LOW //
|
||||
ENUM_X_PRICE _valePriceType = X_PRICE_LOW,
|
||||
datetime _toTime = NULL //
|
||||
)
|
||||
{
|
||||
//
|
||||
@@ -2057,6 +2072,7 @@ struct XPatternAnalysis
|
||||
* @param _patternDir: ENUM_X_DIRECTION, Specified Pattern Direction ...
|
||||
* @param _peakPriceType: ENUM_X_PRICE, Specified Peak Price Type ...
|
||||
* @param _valePriceType: ENUM_X_PRICE, Specified Vale Price Type ...
|
||||
* @param _toTime: datetime, Specified Time to Update Pivot and Zones ...
|
||||
*
|
||||
* @return ( bool )
|
||||
*/
|
||||
@@ -2067,7 +2083,8 @@ struct XPatternAnalysis
|
||||
ENUM_X_BAR_PATTERN _pattern,
|
||||
ENUM_X_DIRECTION _patternDir = X_DIRECTION_NONE,
|
||||
ENUM_X_PRICE _peakPriceType = X_PRICE_HIGH,
|
||||
ENUM_X_PRICE _valePriceType = X_PRICE_LOW //
|
||||
ENUM_X_PRICE _valePriceType = X_PRICE_LOW,
|
||||
datetime _toTime = NULL //
|
||||
)
|
||||
{
|
||||
//
|
||||
@@ -2089,6 +2106,7 @@ struct XPatternAnalysis
|
||||
{
|
||||
_valePriceType = X_PRICE_LOW;
|
||||
}
|
||||
_toTime = NormalizeTime(_toTime);
|
||||
|
||||
//
|
||||
// Validate ...
|
||||
@@ -2131,6 +2149,10 @@ struct XPatternAnalysis
|
||||
_peakPriceType,
|
||||
_valePriceType //
|
||||
);
|
||||
if (result)
|
||||
{
|
||||
_zone.to = _toTime;
|
||||
}
|
||||
|
||||
//
|
||||
// Use Custom Data if Pattern Staisfied ...
|
||||
@@ -2281,4 +2303,135 @@ struct XPatternAnalysis
|
||||
//
|
||||
};
|
||||
|
||||
struct XPatternAnalysisDrawConfig
|
||||
{
|
||||
//
|
||||
// Props ...
|
||||
ENUM_X_BAR_PATTERN allowedDraws[]; // Allowed Draw Patterns
|
||||
ENUM_X_BAR_PATTERN allowedDrawZones[]; // Allowed Draw Pattern Zones
|
||||
ENUM_X_BAR_PATTERN allowedDrawPivots[]; // Allowed Draw Pattern Pivots
|
||||
|
||||
//
|
||||
// Constructor ...
|
||||
XPatternAnalysisDrawConfig()
|
||||
{
|
||||
Clean();
|
||||
}
|
||||
|
||||
//
|
||||
// Tools ...
|
||||
|
||||
/**
|
||||
* Cleanup ...
|
||||
*/
|
||||
void Clean()
|
||||
{
|
||||
//
|
||||
XClean(allowedDraws);
|
||||
XClean(allowedDrawZones);
|
||||
XClean(allowedDrawPivots);
|
||||
}
|
||||
|
||||
/**
|
||||
* Default Drawing Config ...
|
||||
*/
|
||||
void Default()
|
||||
{
|
||||
//
|
||||
FullDraw();
|
||||
|
||||
//
|
||||
// Remove Unused From Zones ...
|
||||
Remove(X_BAR_PATTERN_PINNED, allowedDrawZones);
|
||||
Remove(X_BAR_PATTERN_MOMENTUM, allowedDrawZones);
|
||||
Remove(X_BAR_PATTERN_ENGULFED, allowedDrawZones);
|
||||
Remove(X_BAR_PATTERN_TRUE_GAPED, allowedDrawZones);
|
||||
|
||||
//
|
||||
// Remove Unused From Pivots ...
|
||||
Remove(X_BAR_PATTERN_OB, allowedDrawPivots);
|
||||
Remove(X_BAR_PATTERN_FVG, allowedDrawPivots);
|
||||
Remove(X_BAR_PATTERN_SUPPORT, allowedDrawPivots);
|
||||
Remove(X_BAR_PATTERN_RESISTANCE, allowedDrawPivots);
|
||||
}
|
||||
|
||||
/**
|
||||
* Configure Full Draws ...
|
||||
*/
|
||||
void FullDraw()
|
||||
{
|
||||
//
|
||||
GetAllBarPatters(allowedDraws);
|
||||
GetAllBarPatters(allowedDrawZones);
|
||||
GetAllBarPatters(allowedDrawPivots);
|
||||
}
|
||||
|
||||
//
|
||||
// Checkers ...
|
||||
|
||||
/**
|
||||
* Check Can Draw Specified Pattern ...
|
||||
*
|
||||
* @param pattern: ENUM_X_BAR_PATTERN, Specified Pattern ...
|
||||
*
|
||||
* @return ( bool )
|
||||
*/
|
||||
bool CanDraw(ENUM_X_BAR_PATTERN pattern)
|
||||
{
|
||||
//
|
||||
bool result = false;
|
||||
|
||||
//
|
||||
result = HasChild(allowedDraws) &&
|
||||
Contains(pattern, allowedDraws);
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check Can Draw Specified Pattern's Zone ...
|
||||
*
|
||||
* @param pattern: ENUM_X_BAR_PATTERN, Specified Pattern ...
|
||||
*
|
||||
* @return ( bool )
|
||||
*/
|
||||
bool CanDrawZone(ENUM_X_BAR_PATTERN pattern)
|
||||
{
|
||||
//
|
||||
bool result = false;
|
||||
|
||||
//
|
||||
result =
|
||||
CanDraw(pattern) &&
|
||||
HasChild(allowedDrawZones) &&
|
||||
Contains(pattern, allowedDrawZones);
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check Can Draw Specified Pattern's Pivot ...
|
||||
*
|
||||
* @param pattern: ENUM_X_BAR_PATTERN, Specified Pattern ...
|
||||
*
|
||||
* @return ( bool )
|
||||
*/
|
||||
bool CanDrawPivot(ENUM_X_BAR_PATTERN pattern)
|
||||
{
|
||||
//
|
||||
bool result = false;
|
||||
|
||||
//
|
||||
result =
|
||||
CanDraw(pattern) &&
|
||||
HasChild(allowedDrawPivots) &&
|
||||
Contains(pattern, allowedDrawPivots);
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
};
|
||||
|
||||
//
|
||||
@@ -4433,32 +4433,64 @@ bool ToFVGBox(
|
||||
bool ToSupportBox(
|
||||
XOHCL &bar,
|
||||
XBoxZone &box,
|
||||
datetime toTime = NULL //
|
||||
datetime toTime = NULL,
|
||||
int validationLength = 0 //
|
||||
)
|
||||
{
|
||||
//
|
||||
bool result = false;
|
||||
|
||||
//
|
||||
// Prepare ...
|
||||
box.Clean();
|
||||
toTime = NormalizeTime(toTime);
|
||||
|
||||
//
|
||||
// Normalize ...
|
||||
toTime = NormalizeTime(toTime);
|
||||
validationLength = NormalizeInt(validationLength, 0);
|
||||
|
||||
//
|
||||
// Validate ...
|
||||
result = bar.IsValid();
|
||||
if (!result)
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
XOHCL breaker;
|
||||
result = GetBreakerBar(
|
||||
bar,
|
||||
breaker,
|
||||
X_PRICE_LOW,
|
||||
X_PRICE_DOWN,
|
||||
X_DIRECTION_BEARISH,
|
||||
500 //
|
||||
);
|
||||
if (!result)
|
||||
{
|
||||
breaker.Clean();
|
||||
}
|
||||
|
||||
//
|
||||
box.to = toTime;
|
||||
box.from = bar.time;
|
||||
box.at = bar.time;
|
||||
box.from =
|
||||
breaker.IsValid()
|
||||
? breaker.time
|
||||
: validationLength <= 0
|
||||
? bar.time
|
||||
: GetBarTime(
|
||||
bar.symbol,
|
||||
bar.period,
|
||||
bar.Index() + validationLength //
|
||||
);
|
||||
box.lower = bar.low;
|
||||
box.symbol = bar.symbol;
|
||||
box.period = bar.period;
|
||||
box.upper = bar.GetDown();
|
||||
box.dir = X_DIRECTION_BULLISH;
|
||||
box.type = "Support";
|
||||
box.type = ToXString(X_BAR_PATTERN_SUPPORT);
|
||||
|
||||
//
|
||||
result = box.IsValid();
|
||||
@@ -4483,32 +4515,65 @@ bool ToSupportBox(
|
||||
bool ToResistanceBox(
|
||||
XOHCL &bar,
|
||||
XBoxZone &box,
|
||||
datetime toTime = NULL //
|
||||
datetime toTime = NULL,
|
||||
int validationLength = 0 //
|
||||
)
|
||||
{
|
||||
//
|
||||
bool result = false;
|
||||
|
||||
//
|
||||
// Prepare ...
|
||||
box.Clean();
|
||||
toTime = NormalizeTime(toTime);
|
||||
|
||||
//
|
||||
// Normalize ...
|
||||
toTime = NormalizeTime(toTime);
|
||||
validationLength = NormalizeInt(validationLength, 0);
|
||||
|
||||
//
|
||||
// Validate ...
|
||||
result = bar.IsValid();
|
||||
if (!result)
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
XOHCL breaker;
|
||||
result = GetBreakerBar(
|
||||
bar,
|
||||
breaker,
|
||||
X_PRICE_HIGH,
|
||||
X_PRICE_UP,
|
||||
X_DIRECTION_BULLISH,
|
||||
500 //
|
||||
);
|
||||
if (!result)
|
||||
{
|
||||
breaker.Clean();
|
||||
}
|
||||
|
||||
//
|
||||
box.to = toTime;
|
||||
box.from = bar.time;
|
||||
box.at = bar.time;
|
||||
box.from =
|
||||
breaker.IsValid()
|
||||
? breaker.time
|
||||
: validationLength <= 0
|
||||
? bar.time
|
||||
: GetBarTime(
|
||||
bar.symbol,
|
||||
bar.period,
|
||||
bar.Index() + validationLength //
|
||||
);
|
||||
box.upper = bar.high;
|
||||
box.symbol = bar.symbol;
|
||||
box.period = bar.period;
|
||||
box.lower = bar.GetUp();
|
||||
box.dir = X_DIRECTION_BEARISH;
|
||||
box.type = "Resistance";
|
||||
box.type = ToXString(X_BAR_PATTERN_RESISTANCE);
|
||||
;
|
||||
|
||||
//
|
||||
result = box.IsValid();
|
||||
|
||||
@@ -252,6 +252,39 @@ ENUM_X_BAR_PATTERN ToBarPattern(string value)
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get All Available Valid Bar Patterns ...
|
||||
*
|
||||
* @param dest: ENUM_X_BAR_PATTERN, reference collection to fill ...
|
||||
*
|
||||
* @return ( int )
|
||||
*/
|
||||
int GetAllBarPatters(ENUM_X_BAR_PATTERN &dest[])
|
||||
{
|
||||
//
|
||||
XClean(dest);
|
||||
|
||||
//
|
||||
Add(X_BAR_PATTERN_HIGH, dest);
|
||||
Add(X_BAR_PATTERN_LOW, dest);
|
||||
Add(X_BAR_PATTERN_MOMENTUM, dest);
|
||||
Add(X_BAR_PATTERN_ENGULFED, dest);
|
||||
Add(X_BAR_PATTERN_TRUE_GAPED, dest);
|
||||
Add(X_BAR_PATTERN_PINNED, dest);
|
||||
Add(X_BAR_PATTERN_STAR, dest);
|
||||
Add(X_BAR_PATTERN_PIERCING, dest);
|
||||
Add(X_BAR_PATTERN_RISING, dest);
|
||||
Add(X_BAR_PATTERN_FLAG, dest);
|
||||
Add(X_BAR_PATTERN_SIGNALKEY, dest);
|
||||
Add(X_BAR_PATTERN_OB, dest);
|
||||
Add(X_BAR_PATTERN_FVG, dest);
|
||||
Add(X_BAR_PATTERN_SUPPORT, dest);
|
||||
Add(X_BAR_PATTERN_RESISTANCE, dest);
|
||||
|
||||
//
|
||||
return ArraySize(dest);
|
||||
}
|
||||
|
||||
//
|
||||
// Structures ...
|
||||
|
||||
|
||||
Reference in New Issue
Block a user