last ...
This commit is contained in:
@@ -1107,6 +1107,50 @@ if (has)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// //
|
||||||
|
// // Here We Apply Custom Detecting ...
|
||||||
|
// detectorConfig.OffDetectors();
|
||||||
|
// detectorConfig.detectSupport = true;
|
||||||
|
// detectorConfig.detectResistance= true;
|
||||||
|
// detectorConfig.detectSignalKeyBarPattern = true;
|
||||||
|
|
||||||
|
// //
|
||||||
|
// // Initial Bar for Analysis ...
|
||||||
|
// // at Signal Time ...
|
||||||
|
// XOHCL signalBar;
|
||||||
|
// bool isInited = signalBar.Init(
|
||||||
|
// signal.symbol,
|
||||||
|
// signal.period,
|
||||||
|
// signal.time //
|
||||||
|
// );
|
||||||
|
|
||||||
|
// //
|
||||||
|
// // Analyse Market ...
|
||||||
|
// fima1Signaller.poiDetector.AnalyseMarket(
|
||||||
|
// signalBar,
|
||||||
|
// marketStructure,
|
||||||
|
// detectorConfig //
|
||||||
|
// );
|
||||||
|
// CArrayObj *iObjects;
|
||||||
|
// int drawnsCount = fima2Signaller.poiDrawer.DrawMarketStructure(
|
||||||
|
// marketStructure,
|
||||||
|
// marketStructureDrawerConfig,
|
||||||
|
// iObjects //
|
||||||
|
// );
|
||||||
|
// if (IsValidSize(drawnsCount))
|
||||||
|
// {
|
||||||
|
// //
|
||||||
|
// AddObjects(
|
||||||
|
// iObjects,
|
||||||
|
// eaDraws //
|
||||||
|
// );
|
||||||
|
// }
|
||||||
|
|
||||||
|
|
||||||
/////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -464,6 +464,7 @@ void OnTick()
|
|||||||
_Period,
|
_Period,
|
||||||
0 //
|
0 //
|
||||||
);
|
);
|
||||||
|
|
||||||
//
|
//
|
||||||
// Here We Apply Custom Detecting ...
|
// Here We Apply Custom Detecting ...
|
||||||
detectorConfig.OffDetectors();
|
detectorConfig.OffDetectors();
|
||||||
@@ -495,6 +496,7 @@ void OnTick()
|
|||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
|
// TODO: Remove this ...
|
||||||
XOHCL pBar;
|
XOHCL pBar;
|
||||||
bool has = cBar.GetPreviousBar(pBar);
|
bool has = cBar.GetPreviousBar(pBar);
|
||||||
if (marketStructure.isPTest)
|
if (marketStructure.isPTest)
|
||||||
@@ -692,6 +694,9 @@ void OnSignalTriggered(XSignal &signal)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
return;
|
||||||
|
|
||||||
//
|
//
|
||||||
// Draw Signal Vertical Line ...
|
// Draw Signal Vertical Line ...
|
||||||
|
|
||||||
@@ -719,45 +724,6 @@ void OnSignalTriggered(XSignal &signal)
|
|||||||
eaDraws.Add(iObj);
|
eaDraws.Add(iObj);
|
||||||
}
|
}
|
||||||
|
|
||||||
// //
|
|
||||||
// // Here We Apply Custom Detecting ...
|
|
||||||
// detectorConfig.OffDetectors();
|
|
||||||
// detectorConfig.detectSupport = true;
|
|
||||||
// detectorConfig.detectResistance= true;
|
|
||||||
// detectorConfig.detectSignalKeyBarPattern = true;
|
|
||||||
|
|
||||||
// //
|
|
||||||
// // Initial Bar for Analysis ...
|
|
||||||
// // at Signal Time ...
|
|
||||||
// XOHCL signalBar;
|
|
||||||
// bool isInited = signalBar.Init(
|
|
||||||
// signal.symbol,
|
|
||||||
// signal.period,
|
|
||||||
// signal.time //
|
|
||||||
// );
|
|
||||||
|
|
||||||
// //
|
|
||||||
// // Analyse Market ...
|
|
||||||
// fima1Signaller.poiDetector.AnalyseMarket(
|
|
||||||
// signalBar,
|
|
||||||
// marketStructure,
|
|
||||||
// detectorConfig //
|
|
||||||
// );
|
|
||||||
// CArrayObj *iObjects;
|
|
||||||
// int drawnsCount = fima2Signaller.poiDrawer.DrawMarketStructure(
|
|
||||||
// marketStructure,
|
|
||||||
// marketStructureDrawerConfig,
|
|
||||||
// iObjects //
|
|
||||||
// );
|
|
||||||
// if (IsValidSize(drawnsCount))
|
|
||||||
// {
|
|
||||||
// //
|
|
||||||
// AddObjects(
|
|
||||||
// iObjects,
|
|
||||||
// eaDraws //
|
|
||||||
// );
|
|
||||||
// }
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// Alert Issued Signal ...
|
// Alert Issued Signal ...
|
||||||
string message = signal.GetMessage();
|
string message = signal.GetMessage();
|
||||||
|
|||||||
@@ -1504,6 +1504,86 @@ struct XOHCL
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Same Checkers ...
|
||||||
|
|
||||||
|
//
|
||||||
|
bool IsSameAs(XOHCL &item)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
bool result = false;
|
||||||
|
|
||||||
|
//
|
||||||
|
result = IsValid() &&
|
||||||
|
item.IsValid() &&
|
||||||
|
IsSameTime(item) &&
|
||||||
|
IsSameMarket(item);
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
bool IsSameTime(XOHCL &item)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
bool result = false;
|
||||||
|
|
||||||
|
//
|
||||||
|
result = IsValid() &&
|
||||||
|
item.IsValid() &&
|
||||||
|
time == item.time;
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
bool IsSameSymbol(XOHCL &item)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
bool result = false;
|
||||||
|
|
||||||
|
//
|
||||||
|
result = IsValid() &&
|
||||||
|
item.IsValid() &&
|
||||||
|
symbol == item.symbol;
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
bool IsSamePeriod(XOHCL &item)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
bool result = false;
|
||||||
|
|
||||||
|
//
|
||||||
|
result = IsValid() &&
|
||||||
|
item.IsValid() &&
|
||||||
|
period == item.period;
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
bool IsSameMarket(XOHCL &item)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
bool result = false;
|
||||||
|
|
||||||
|
//
|
||||||
|
result = IsValid() &&
|
||||||
|
item.IsValid() &&
|
||||||
|
IsSameSymbol(item) &&
|
||||||
|
IsSamePeriod(item);
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Other ...
|
// Other ...
|
||||||
string GetTag(string prefix = "")
|
string GetTag(string prefix = "")
|
||||||
|
|||||||
@@ -2596,6 +2596,56 @@ bool ExtractResistances(
|
|||||||
//+------------------------------------------------------------------+
|
//+------------------------------------------------------------------+
|
||||||
//| Find Index |
|
//| Find Index |
|
||||||
//+------------------------------------------------------------------+
|
//+------------------------------------------------------------------+
|
||||||
|
/**
|
||||||
|
* Find Specified Item index in a Collection ...
|
||||||
|
*
|
||||||
|
* @param index: int, reference to Hold Index if Exists ...
|
||||||
|
* @param item: Specified item to Detect ...
|
||||||
|
* @param source: Collection to Search for item ...
|
||||||
|
*
|
||||||
|
* @return ( bool )
|
||||||
|
*/
|
||||||
|
bool FindIndex(
|
||||||
|
int &index,
|
||||||
|
XOHCL &item,
|
||||||
|
XOHCL &source[] //
|
||||||
|
)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
bool result = false;
|
||||||
|
|
||||||
|
//
|
||||||
|
index = -1;
|
||||||
|
|
||||||
|
//
|
||||||
|
int count = ArraySize(source);
|
||||||
|
result = item.IsValid() &&
|
||||||
|
IsValidSize(count);
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
for (int i = 0; i < count; i++)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
bool isSame = item.IsSameAs(source[i]);
|
||||||
|
if (isSame)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
index = i;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
result = IsValidIndex(index);
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Find Specified Item index in a Collection ...
|
* Find Specified Item index in a Collection ...
|
||||||
*
|
*
|
||||||
@@ -2750,6 +2800,54 @@ bool FindIndex(
|
|||||||
//+------------------------------------------------------------------+
|
//+------------------------------------------------------------------+
|
||||||
//| Remove |
|
//| Remove |
|
||||||
//+------------------------------------------------------------------+
|
//+------------------------------------------------------------------+
|
||||||
|
/**
|
||||||
|
* Remove Specified Item from a Collection ...
|
||||||
|
*
|
||||||
|
* @param item: Specified Item ...
|
||||||
|
* @param source: Specified Collection for Remove item from it ...
|
||||||
|
*
|
||||||
|
* @return ( bool )
|
||||||
|
*/
|
||||||
|
bool Remove(
|
||||||
|
XOHCL &item,
|
||||||
|
XOHCL &source[] //
|
||||||
|
)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
bool result = false;
|
||||||
|
|
||||||
|
//
|
||||||
|
result =
|
||||||
|
item.IsValid() &&
|
||||||
|
HasChild(source);
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
int idx = -1;
|
||||||
|
result = FindIndex(
|
||||||
|
idx,
|
||||||
|
item,
|
||||||
|
source //
|
||||||
|
);
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
result = ArrayRemove(
|
||||||
|
source,
|
||||||
|
idx,
|
||||||
|
1 //
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Remove Specified Item from a Collection ...
|
* Remove Specified Item from a Collection ...
|
||||||
*
|
*
|
||||||
@@ -2894,6 +2992,67 @@ bool Remove(
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove Specified items from a Collection ...
|
||||||
|
*
|
||||||
|
* @param items: Specified Items to Remove ...
|
||||||
|
* @param sources: Sepcified Collection for Removing items from it ...
|
||||||
|
*
|
||||||
|
* @return ( int )
|
||||||
|
*/
|
||||||
|
int Removes(
|
||||||
|
XOHCL &items[],
|
||||||
|
XOHCL &sources[] //
|
||||||
|
)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
int result = 0;
|
||||||
|
|
||||||
|
//
|
||||||
|
bool has = HasChild(items) &&
|
||||||
|
HasChild(sources);
|
||||||
|
if (!has)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
int idx = -1;
|
||||||
|
has = false;
|
||||||
|
int count = ArraySize(items);
|
||||||
|
for (int i = 0; i < count; i++)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// Detect Item Index in Collection ...
|
||||||
|
has = FindIndex(
|
||||||
|
idx,
|
||||||
|
items[i],
|
||||||
|
sources //
|
||||||
|
);
|
||||||
|
if (has)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// Remove Detected Index from Collection ...
|
||||||
|
has = ArrayRemove(
|
||||||
|
sources,
|
||||||
|
idx,
|
||||||
|
1 //
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
if (has)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// Count Removed Items ...
|
||||||
|
result++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Remove Specified items from a Collection ...
|
* Remove Specified items from a Collection ...
|
||||||
*
|
*
|
||||||
@@ -3081,6 +3240,69 @@ int Removes(
|
|||||||
//+------------------------------------------------------------------+
|
//+------------------------------------------------------------------+
|
||||||
//| Add If Not Exists |
|
//| Add If Not Exists |
|
||||||
//+------------------------------------------------------------------+
|
//+------------------------------------------------------------------+
|
||||||
|
/**
|
||||||
|
* Add Specified Item to Specified Collection, if not Exists ...
|
||||||
|
*
|
||||||
|
* @param item: Item to Add ...
|
||||||
|
* @param sources: Collection to Add item ...
|
||||||
|
* @param maxAllowed: int, Max Allowed Collection Size ...
|
||||||
|
*
|
||||||
|
* @return ( bool )
|
||||||
|
*/
|
||||||
|
bool AddIfNotExists(
|
||||||
|
XOHCL &item,
|
||||||
|
XOHCL &sources[],
|
||||||
|
int maxAllowed = 0 //
|
||||||
|
)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
bool result = false;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Validate Args ...
|
||||||
|
result = item.IsValid();
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Check Item Exists or not ...
|
||||||
|
int idx = -1;
|
||||||
|
bool isExists = FindIndex(
|
||||||
|
idx,
|
||||||
|
item,
|
||||||
|
sources //
|
||||||
|
);
|
||||||
|
result = !isExists;
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
AddRef(
|
||||||
|
item,
|
||||||
|
sources //
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Handle Cleanup Collection
|
||||||
|
// if Max Reached ...
|
||||||
|
if (result &&
|
||||||
|
maxAllowed > 0)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
CleanupArray(
|
||||||
|
sources,
|
||||||
|
maxAllowed //
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add Specified Item to Specified Collection, if not Exists ...
|
* Add Specified Item to Specified Collection, if not Exists ...
|
||||||
*
|
*
|
||||||
@@ -3674,7 +3896,7 @@ bool ToResistanceBox(
|
|||||||
* @param bar: Specified Bar ...
|
* @param bar: Specified Bar ...
|
||||||
* @param zone: Specified Zone ...
|
* @param zone: Specified Zone ...
|
||||||
* @param forceBarEdge: bool, flag to Check Breaktion by high ot low ...
|
* @param forceBarEdge: bool, flag to Check Breaktion by high ot low ...
|
||||||
*
|
*
|
||||||
* @return ( bool )
|
* @return ( bool )
|
||||||
*/
|
*/
|
||||||
bool IsBreaked(
|
bool IsBreaked(
|
||||||
@@ -3717,6 +3939,118 @@ bool IsBreaked(
|
|||||||
//
|
//
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check Specified Zone is Tested by Specified Bar or not ...
|
||||||
|
*
|
||||||
|
* @param bar: Specified Bar ...
|
||||||
|
* @param zone: Specified Zone ...
|
||||||
|
*
|
||||||
|
* @return ( bool )
|
||||||
|
*/
|
||||||
|
bool IsTested(
|
||||||
|
XOHCL &bar,
|
||||||
|
XBoxZone &zone //
|
||||||
|
)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
bool result = false;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Validate ...
|
||||||
|
result = bar.IsValid() &&
|
||||||
|
zone.IsValid();
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Check Break ...
|
||||||
|
result =
|
||||||
|
zone.IsBullish()
|
||||||
|
? bar.low < zone.upper
|
||||||
|
: bar.high > zone.lower;
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Collect all Bars which Breakes Specified Zone ...
|
||||||
|
*
|
||||||
|
* @param zone: reference to Specified Zone ...
|
||||||
|
* @param dest: reference Collection to hold result ...
|
||||||
|
*
|
||||||
|
* @return ( int )
|
||||||
|
*/
|
||||||
|
int GetBreakerBars(
|
||||||
|
XBoxZone &zone,
|
||||||
|
XOHCL &dest[] //
|
||||||
|
)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
int result = 0;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Validate ...
|
||||||
|
bool has = zone.IsValid();
|
||||||
|
if (!has)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Prepare ...
|
||||||
|
SpecifiedClean(dest);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Do Action ...
|
||||||
|
XOHCL iBar;
|
||||||
|
int start = zone.ToIndex();
|
||||||
|
int end = zone.FromIndex();
|
||||||
|
for (int i = start; i < end; i++)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// Initialize indexed Bar ...
|
||||||
|
has = iBar.Init(
|
||||||
|
zone.symbol,
|
||||||
|
zone.period,
|
||||||
|
i //
|
||||||
|
);
|
||||||
|
if (!has)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
has = IsBreaked(
|
||||||
|
iBar,
|
||||||
|
zone,
|
||||||
|
false // Breakes by Close ...
|
||||||
|
);
|
||||||
|
if (has)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
AddIfNotExists(
|
||||||
|
iBar,
|
||||||
|
dest //
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
iBar.Clean();
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
result = ArraySize(dest);
|
||||||
|
|
||||||
|
//
|
||||||
|
iBar.Clean();
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
//+------------------------------------------------------------------+
|
//+------------------------------------------------------------------+
|
||||||
|
|
||||||
//
|
//
|
||||||
@@ -1082,6 +1082,67 @@ class XCXFIMAPOIDetector : public XCMarketPatternDetector
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Detect Recently Tested Zones ...
|
||||||
|
if ((config.detectSupport ||
|
||||||
|
config.detectResistance) &&
|
||||||
|
config.recentlyTestedZonesMaxLookup > 0)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
XOHCL iBar;
|
||||||
|
int idx = -1;
|
||||||
|
bool has = false;
|
||||||
|
|
||||||
|
//
|
||||||
|
int start = forBar.Index() + 1;
|
||||||
|
int end = start + config.recentlyTestedZonesMaxLookup;
|
||||||
|
for (int i = start; i < end; i++) {
|
||||||
|
//
|
||||||
|
// Initialize Indexed Bar ...
|
||||||
|
has = forBar.BarAt(i, iBar);
|
||||||
|
if (!has) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Selecting Support and Resistances ...
|
||||||
|
|
||||||
|
//
|
||||||
|
// Supports ...
|
||||||
|
idx = GetYoungestBefore(iBar.time, supports);
|
||||||
|
has = IsValidIndex(idx);
|
||||||
|
if (has) {
|
||||||
|
//
|
||||||
|
// Check Testing ...
|
||||||
|
has = IsTested(iBar, supports[idx]);
|
||||||
|
if (has) {
|
||||||
|
//
|
||||||
|
AddIfNotExists(
|
||||||
|
supports[idx],
|
||||||
|
structure.recentlyTestedZones //
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Resistances ...
|
||||||
|
idx = GetYoungestBefore(iBar.time, resistances);
|
||||||
|
has = IsValidIndex(idx);
|
||||||
|
if (has) {
|
||||||
|
//
|
||||||
|
// Check Testing ...
|
||||||
|
has = IsTested(iBar, resistances[idx]);
|
||||||
|
if (has) {
|
||||||
|
//
|
||||||
|
AddIfNotExists(
|
||||||
|
resistances[idx],
|
||||||
|
structure.recentlyTestedZones //
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Checkup for FakeBreaked Zones ...
|
// Checkup for FakeBreaked Zones ...
|
||||||
if (config.detectSupport ||
|
if (config.detectSupport ||
|
||||||
@@ -1091,9 +1152,13 @@ class XCXFIMAPOIDetector : public XCMarketPatternDetector
|
|||||||
// Retrieve Previous Bar ...
|
// Retrieve Previous Bar ...
|
||||||
int idx = -1;
|
int idx = -1;
|
||||||
XOHCL pForBar;
|
XOHCL pForBar;
|
||||||
|
XOHCL breakerBar;
|
||||||
XBoxZone pSupport;
|
XBoxZone pSupport;
|
||||||
XOHCL pBreakerBar;
|
XOHCL pBreakerBar;
|
||||||
XBoxZone pResistance;
|
XBoxZone pResistance;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Selecting Previously Touched Support / Resistance ...
|
||||||
has = forBar.GetPreviousBar(pForBar);
|
has = forBar.GetPreviousBar(pForBar);
|
||||||
if (has)
|
if (has)
|
||||||
{
|
{
|
||||||
@@ -1128,43 +1193,90 @@ class XCXFIMAPOIDetector : public XCMarketPatternDetector
|
|||||||
{
|
{
|
||||||
pResistance = resistances[idx];
|
pResistance = resistances[idx];
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Check at least a zone Exists ...
|
||||||
|
// Selecting pTestedZone ...
|
||||||
|
has = pSupport.IsValid() ||
|
||||||
|
pResistance.IsValid();
|
||||||
|
if (has)
|
||||||
|
{
|
||||||
//
|
//
|
||||||
// Check at least a zone Exists ...
|
// Support ...
|
||||||
has = pSupport.IsValid() ||
|
has = pSupport.IsValid();
|
||||||
pResistance.IsValid();
|
|
||||||
if (has)
|
if (has)
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
// Support ...
|
structure.isPTest = true;
|
||||||
has = pSupport.IsValid();
|
structure.pTestedZone = pSupport;
|
||||||
if (has)
|
}
|
||||||
{
|
|
||||||
//
|
|
||||||
structure.isPTest = true;
|
|
||||||
structure.pTestedZone = pSupport;
|
|
||||||
// has = FindBreakerBar();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// Resistance ...
|
||||||
|
has = pResistance.IsValid();
|
||||||
|
if (has)
|
||||||
|
{
|
||||||
//
|
//
|
||||||
// Resistance ...
|
structure.isPTest = true;
|
||||||
has = pResistance.IsValid();
|
structure.pTestedZone = pResistance;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Check pTestedZone Existance ...
|
||||||
|
has = structure.isPTest &&
|
||||||
|
structure.pTestedZone.IsValid();
|
||||||
|
if (has)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// Get Breaker Bars ...
|
||||||
|
XOHCL breakerBars[];
|
||||||
|
int breakerBarsCount = GetBreakerBars(
|
||||||
|
structure.pTestedZone,
|
||||||
|
breakerBars //
|
||||||
|
);
|
||||||
|
has = IsValidSize(breakerBarsCount);
|
||||||
|
if (has)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
idx = GetYoungestBar(breakerBars);
|
||||||
|
has = IsValidIndex(idx);
|
||||||
if (has)
|
if (has)
|
||||||
{
|
{
|
||||||
//
|
breakerBar = breakerBars[idx];
|
||||||
structure.isPTest = true;
|
|
||||||
structure.pTestedZone = pResistance;
|
|
||||||
// has = FindBreakerBar();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Cleanup Resources ...
|
SpecifiedClean(breakerBars);
|
||||||
pForBar.Clean();
|
|
||||||
pSupport.Clean();
|
|
||||||
pBreakerBar.Clean();
|
|
||||||
pResistance.Clean();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Check Zone Breaker Bar Exists ...
|
||||||
|
// Validate Zone Fake Breake Langth ...
|
||||||
|
has = breakerBar.IsValid();
|
||||||
|
if (has)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// Validate Breake Length ...
|
||||||
|
has = (breakerBar.Index() - pForBar.Index()) <= config.supportAndResistanceBreakeValidationLength;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Cleanup Resources ...
|
||||||
|
//
|
||||||
|
if (!has)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
structure.isPTest = false;
|
||||||
|
structure.pTestedZone.Clean();
|
||||||
|
}
|
||||||
|
pForBar.Clean();
|
||||||
|
pSupport.Clean();
|
||||||
|
breakerBar.Clean();
|
||||||
|
pBreakerBar.Clean();
|
||||||
|
pResistance.Clean();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -85,6 +85,7 @@ struct XFIMAPatternDetectorConfig
|
|||||||
|
|
||||||
//
|
//
|
||||||
// Support and Resistance ...
|
// Support and Resistance ...
|
||||||
|
int recentlyTestedZonesMaxLookup;
|
||||||
int supportAndResistanceValidationLength;
|
int supportAndResistanceValidationLength;
|
||||||
int minAllowdSupportAndResistanceStrength;
|
int minAllowdSupportAndResistanceStrength;
|
||||||
int supportAndResistanceMaxAllowedLoopback;
|
int supportAndResistanceMaxAllowedLoopback;
|
||||||
@@ -162,6 +163,7 @@ struct XFIMAPatternDetectorConfig
|
|||||||
fvgLoopback = 0;
|
fvgLoopback = 0;
|
||||||
trendingNumberOfSwings = 0;
|
trendingNumberOfSwings = 0;
|
||||||
trendingSwingShoulders = 0;
|
trendingSwingShoulders = 0;
|
||||||
|
recentlyTestedZonesMaxLookup = 0;
|
||||||
supportAndResistanceValidationLength = 0;
|
supportAndResistanceValidationLength = 0;
|
||||||
minAllowdSupportAndResistanceStrength = 0;
|
minAllowdSupportAndResistanceStrength = 0;
|
||||||
supportAndResistanceMaxAllowedLoopback = 0;
|
supportAndResistanceMaxAllowedLoopback = 0;
|
||||||
@@ -235,6 +237,7 @@ struct XFIMAPatternDetectorConfig
|
|||||||
|
|
||||||
//
|
//
|
||||||
// Support and Resistance ...
|
// Support and Resistance ...
|
||||||
|
recentlyTestedZonesMaxLookup = 100;
|
||||||
supportAndResistanceValidationLength = 100;
|
supportAndResistanceValidationLength = 100;
|
||||||
minAllowdSupportAndResistanceStrength = 1;
|
minAllowdSupportAndResistanceStrength = 1;
|
||||||
supportAndResistanceMaxAllowedLoopback = 1500;
|
supportAndResistanceMaxAllowedLoopback = 1500;
|
||||||
@@ -385,8 +388,9 @@ struct XFIMAMarketStructure
|
|||||||
//
|
//
|
||||||
// TODO: For Test ...
|
// TODO: For Test ...
|
||||||
bool isPTest;
|
bool isPTest;
|
||||||
|
XOHCL pBreakerBar;
|
||||||
XBoxZone pTestedZone;
|
XBoxZone pTestedZone;
|
||||||
XBoxZone recentlyTestedZone;
|
XBoxZone recentlyTestedZones[];
|
||||||
|
|
||||||
//
|
//
|
||||||
// Analysis ...
|
// Analysis ...
|
||||||
@@ -469,6 +473,7 @@ struct XFIMAMarketStructure
|
|||||||
|
|
||||||
//
|
//
|
||||||
SpecifiedClean(trendSwings);
|
SpecifiedClean(trendSwings);
|
||||||
|
SpecifiedClean(recentlyTestedZones);
|
||||||
|
|
||||||
//
|
//
|
||||||
ZeroMemory(this);
|
ZeroMemory(this);
|
||||||
|
|||||||
Reference in New Issue
Block a user