last ...
This commit is contained in:
@@ -5108,6 +5108,116 @@ int RemoveBreakedZones(
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove Filled Zones ...
|
||||
*
|
||||
* @param source: XBoxZone, collection reference to Provide Data Source ...
|
||||
* @param zoneRangeFilledFactor: double, Filling Factor ...
|
||||
*
|
||||
* @return ( int )
|
||||
*/
|
||||
int RemoveFilledZones(
|
||||
XBoxZone &source[],
|
||||
double zoneRangeFilledFactor = 0.8 //
|
||||
)
|
||||
{
|
||||
//
|
||||
int result = 0;
|
||||
|
||||
//
|
||||
// Validate ...
|
||||
bool has = HasChild(source);
|
||||
if (!has)
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
XBoxZone iTMP;
|
||||
XBoxZone tmp[];
|
||||
Copy(source, tmp);
|
||||
XClean(source);
|
||||
while (HasChild(tmp))
|
||||
{
|
||||
//
|
||||
iTMP.Clean();
|
||||
iTMP = tmp[0];
|
||||
ArrayRemove(tmp, 0, 1);
|
||||
|
||||
//
|
||||
has = IsFilled(iTMP, zoneRangeFilledFactor);
|
||||
if (!has)
|
||||
{
|
||||
AddIfNotExists(iTMP, source);
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
result = ArraySize(source);
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check a Zone is Filled or Not ...
|
||||
*
|
||||
* @param zone: XBoxZone, reference to Specified Zone ...
|
||||
* @param zoneRangeFilledFactor: double, Filling Factor ...
|
||||
*
|
||||
* @return ( bool )
|
||||
*/
|
||||
bool IsFilled(
|
||||
XBoxZone &zone,
|
||||
double zoneRangeFilledFactor = 0.8 //
|
||||
)
|
||||
{
|
||||
//
|
||||
bool result = false;
|
||||
|
||||
//
|
||||
// Validate ...
|
||||
result = zone.IsValid() &&
|
||||
zoneRangeFilledFactor > 0 &&
|
||||
zoneRangeFilledFactor < 1;
|
||||
if (!result)
|
||||
{
|
||||
//
|
||||
result = true;
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
XOHCL iBar;
|
||||
int toIDX = zone.ToIndex();
|
||||
int fromIDX = zone.FromIndex();
|
||||
double zoneRangeFactor = zone.GetRange() / 100;
|
||||
double useValue = zone.lower + (zoneRangeFactor * zoneRangeFilledFactor);
|
||||
for (int i = toIDX; i < fromIDX; i++)
|
||||
{
|
||||
//
|
||||
// Initialize Indexed Bar ...
|
||||
iBar.Clean();
|
||||
result = iBar.Init(zone.symbol, zone.period, i);
|
||||
result =
|
||||
result &&
|
||||
(zone.IsBullish()
|
||||
? iBar.GetPrice(X_PRICE_LOW) <= useValue
|
||||
: iBar.GetPrice(X_PRICE_HIGH) >= useValue);
|
||||
if (result)
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Cleanup ...
|
||||
iBar.Clean();
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check Specified Zone is Breaked by Specified Bar or not ...
|
||||
*
|
||||
|
||||
@@ -318,6 +318,40 @@ int GetAllBarPatters(ENUM_X_BAR_PATTERN &dest[])
|
||||
return ArraySize(dest);
|
||||
}
|
||||
|
||||
/**
|
||||
* Fill Required Candlestick Patters ...
|
||||
*
|
||||
* @param dest: ENUM_X_BAR_PATTERN, collection reference to Fill ...
|
||||
*
|
||||
* @return ( int )
|
||||
*/
|
||||
int GetCandlestickPatterns(ENUM_X_BAR_PATTERN &dest[])
|
||||
{
|
||||
//
|
||||
int result = 0;
|
||||
|
||||
//
|
||||
// Prepare ...
|
||||
XClean(dest);
|
||||
|
||||
//
|
||||
Add(X_BAR_PATTERN_STAR, dest);
|
||||
Add(X_BAR_PATTERN_FLAG, dest);
|
||||
Add(X_BAR_PATTERN_PINNED, dest);
|
||||
Add(X_BAR_PATTERN_RISING, dest);
|
||||
Add(X_BAR_PATTERN_MOMENTUM, dest);
|
||||
Add(X_BAR_PATTERN_ENGULFED, dest);
|
||||
Add(X_BAR_PATTERN_PIERCING, dest);
|
||||
Add(X_BAR_PATTERN_SIGNALKEY, dest);
|
||||
Add(X_BAR_PATTERN_TRUE_GAPED, dest);
|
||||
|
||||
//
|
||||
result = ArraySize(dest);
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
// Structures ...
|
||||
|
||||
|
||||
Reference in New Issue
Block a user