566 lines
12 KiB
Plaintext
566 lines
12 KiB
Plaintext
///////////////////////////////////////////////////////
|
||
//
|
||
// SaherElm IT Center MQL5 Library
|
||
// -------------------------------------------------
|
||
// Name: XCXFIMAEALib ...
|
||
// Description: XFIMAEA Library ...
|
||
//
|
||
//
|
||
// Maintainer:
|
||
// ------------
|
||
// Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com)
|
||
//
|
||
//////////////////////////////////////////////////////
|
||
//
|
||
// Global Properties ...
|
||
#property library
|
||
#property copyright "Copyright 2023, SaherElm IT Center"
|
||
#property link "https://saherelm.ir"
|
||
#property version "1.00"
|
||
#property description "SaherElm XFIMAEA Library"
|
||
#property strict
|
||
|
||
//
|
||
// Imports ...
|
||
#include "../../Classes/x-saherelm.x-cobject.class.mq5"
|
||
#include "../../Helpers/x-saherelm.xfima.helper.mq5"
|
||
#include "../../Libraries/x-saherelm.x-pivot.analysis.lib.mq5"
|
||
|
||
//
|
||
// Definitions ...
|
||
|
||
/**
|
||
* XFIMA Base Market Structure ...
|
||
* AnalyseMarket result ...
|
||
**/
|
||
struct XFIMAMarketStructure
|
||
{
|
||
//
|
||
XOHCL bar; // Spacified Start Bar for Analysing ...
|
||
XPatternAnalysis barAnalysis; // Structure Bar Pattern Analysis ...
|
||
|
||
//
|
||
XPivotAnalysis pvAnalysis; // PV Pivot Analysis Result ...
|
||
XPivotAnalysis zgAnalysis; // ZG Pivot Analysis Result ...
|
||
|
||
//
|
||
XPatternAnalysis barsAnalysis[]; // Anaysed Bars ...
|
||
|
||
//
|
||
// Constructor ...
|
||
XFIMAMarketStructure()
|
||
{
|
||
Clean();
|
||
}
|
||
|
||
//
|
||
// Tools ...
|
||
|
||
/**
|
||
* Cleanup ...
|
||
*/
|
||
void Clean()
|
||
{
|
||
//
|
||
bar.Clean();
|
||
barAnalysis.Clean();
|
||
|
||
//
|
||
pvAnalysis.Clean();
|
||
zgAnalysis.Clean();
|
||
XClean(barsAnalysis);
|
||
|
||
//
|
||
ZeroMemory(this);
|
||
}
|
||
|
||
/**
|
||
* Validate ...
|
||
*
|
||
* @return ( bool )
|
||
*/
|
||
bool IsValid()
|
||
{
|
||
//
|
||
bool result = false;
|
||
|
||
//
|
||
result = bar.IsValid() &&
|
||
barAnalysis.IsValid();
|
||
|
||
//
|
||
return result;
|
||
}
|
||
|
||
//
|
||
// Collectors ...
|
||
|
||
/**
|
||
* Collect Required Zones from Structure ...
|
||
*
|
||
* @param dest: XBoxZone, reference collection to holds result ...
|
||
* @param forDir: ENUM_X_DIRECTION, Specified Collectiong ones Direction ...
|
||
* @param containsOB: bool, Contains OB Zones ...
|
||
* @param containsFVG: bool, Contains FVG Zones ...
|
||
*
|
||
* @return ( int )
|
||
*/
|
||
int CollectZones(
|
||
XBoxZone &dest[],
|
||
ENUM_X_DIRECTION forDir = X_DIRECTION_NONE,
|
||
bool containsOB = false,
|
||
bool containsFVG = false //
|
||
)
|
||
{
|
||
//
|
||
int result = 0;
|
||
|
||
//
|
||
// Prepare ...
|
||
XClean(dest);
|
||
|
||
//
|
||
// Validate ...
|
||
bool has = IsValid();
|
||
if (!has)
|
||
{
|
||
return result;
|
||
}
|
||
|
||
//
|
||
bool canCollectBullish =
|
||
IsXBullish(forDir) ||
|
||
!HasDirection(forDir);
|
||
|
||
//
|
||
bool canCollectBearish =
|
||
IsXBearish(forDir) ||
|
||
!HasDirection(forDir);
|
||
|
||
//
|
||
int count = 0;
|
||
XBoxZone tmpBox;
|
||
|
||
//
|
||
// Check Analysis ...
|
||
|
||
//
|
||
// XPV ...
|
||
has = pvAnalysis.IsValid();
|
||
if (has)
|
||
{
|
||
//
|
||
// Support ...
|
||
tmpBox.Clean();
|
||
has = pvAnalysis.HasSupportBox(tmpBox);
|
||
if (has && canCollectBullish)
|
||
{
|
||
//
|
||
AddIfNotExists(
|
||
tmpBox,
|
||
dest //
|
||
);
|
||
}
|
||
|
||
//
|
||
// Resistance ...
|
||
tmpBox.Clean();
|
||
has = pvAnalysis.HasResistanceBox(tmpBox);
|
||
if (has && canCollectBearish)
|
||
{
|
||
//
|
||
AddIfNotExists(
|
||
tmpBox,
|
||
dest //
|
||
);
|
||
}
|
||
}
|
||
|
||
//
|
||
// XZG ...
|
||
has = zgAnalysis.IsValid();
|
||
if (has)
|
||
{
|
||
//
|
||
// Support ...
|
||
tmpBox.Clean();
|
||
has = zgAnalysis.HasSupportBox(tmpBox);
|
||
if (has && canCollectBullish)
|
||
{
|
||
//
|
||
AddIfNotExists(
|
||
tmpBox,
|
||
dest //
|
||
);
|
||
}
|
||
|
||
//
|
||
// Resistance ...
|
||
tmpBox.Clean();
|
||
has = zgAnalysis.HasResistanceBox(tmpBox);
|
||
if (has && canCollectBearish)
|
||
{
|
||
//
|
||
AddIfNotExists(
|
||
tmpBox,
|
||
dest //
|
||
);
|
||
}
|
||
}
|
||
|
||
//
|
||
// Bar Patterns ...
|
||
has = HasChild(barsAnalysis);
|
||
if (has)
|
||
{
|
||
//
|
||
count = ArraySize(barsAnalysis);
|
||
for (int i = 0; i < count; i++)
|
||
{
|
||
//
|
||
// Support ...
|
||
has = barsAnalysis[i].IsSupport();
|
||
if (has && canCollectBullish)
|
||
{
|
||
//
|
||
AddIfNotExists(
|
||
barsAnalysis[i].support,
|
||
dest //
|
||
);
|
||
}
|
||
|
||
//
|
||
// Resistance ...
|
||
has = barsAnalysis[i].IsResistance();
|
||
if (has && canCollectBearish)
|
||
{
|
||
//
|
||
AddIfNotExists(
|
||
barsAnalysis[i].resistance,
|
||
dest //
|
||
);
|
||
}
|
||
|
||
//
|
||
// OB ...
|
||
if (containsOB)
|
||
{
|
||
//
|
||
has = barsAnalysis[i].IsOB();
|
||
if (has)
|
||
{
|
||
//
|
||
has = (canCollectBullish && barsAnalysis[i].ob.IsBullish()) ||
|
||
(canCollectBearish && barsAnalysis[i].ob.IsBearish());
|
||
if (has)
|
||
{
|
||
//
|
||
AddIfNotExists(
|
||
barsAnalysis[i].ob,
|
||
dest //
|
||
);
|
||
}
|
||
}
|
||
}
|
||
|
||
//
|
||
// FVG ...
|
||
if (containsFVG)
|
||
{
|
||
has = barsAnalysis[i].IsFVG();
|
||
if (has)
|
||
{
|
||
//
|
||
has = (canCollectBullish && barsAnalysis[i].fvg.IsBullish()) ||
|
||
(canCollectBearish && barsAnalysis[i].fvg.IsBearish());
|
||
if (has)
|
||
{
|
||
//
|
||
AddIfNotExists(
|
||
barsAnalysis[i].fvg,
|
||
dest //
|
||
);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
//
|
||
result = ArraySize(dest);
|
||
has = IsValidSize(result);
|
||
if (has)
|
||
{
|
||
//
|
||
// Update To Time ...
|
||
// and also we Can Validate Zones Here ...
|
||
datetime cTime = TimeCurrent();
|
||
for (int i = 0; i < result; i++)
|
||
{
|
||
dest[i].to = cTime;
|
||
}
|
||
}
|
||
|
||
//
|
||
// Cleanup ...
|
||
tmpBox.Clean();
|
||
|
||
//
|
||
return result;
|
||
}
|
||
|
||
//
|
||
};
|
||
|
||
struct XFIMAMarketStructureConfig
|
||
{
|
||
//
|
||
// Props ...
|
||
|
||
//
|
||
// Detector Flags ...
|
||
|
||
//
|
||
bool analysePVPivots; // Analyse PV Pivots ...
|
||
bool analyseZGPivots; // Analyse ZG Pivots ...
|
||
|
||
//
|
||
bool analyseBarPatterns; // Analyse Bar Patterns ...
|
||
|
||
//
|
||
// Detector Configs ...
|
||
|
||
//
|
||
int loopback; // Max Allowed Looping Back Length ...
|
||
int requiredPivots; // Required Extracted Pivots for Analysis ...
|
||
|
||
//
|
||
int pvPivotsValidationLength; // PV Pivots Validation Length ...
|
||
double maCrossValidationDiffMultiplier; // a Point Distance to Validate MA Crosses ...
|
||
|
||
//
|
||
XPatternAnalysisConfig barsAnalysisConfig; // Bars Analyser Config ...
|
||
|
||
//
|
||
// Constructor ...
|
||
XFIMAMarketStructureConfig()
|
||
{
|
||
Clean();
|
||
}
|
||
|
||
//
|
||
// Tools ...
|
||
|
||
/**
|
||
* This function fulfills the will of the developer
|
||
*/
|
||
void Clean()
|
||
{
|
||
//
|
||
// Detector Flags ...
|
||
analysePVPivots = false;
|
||
analyseZGPivots = false;
|
||
analyseBarPatterns = false;
|
||
|
||
//
|
||
// Configure Detectors ...
|
||
loopback = 0;
|
||
requiredPivots = 0;
|
||
pvPivotsValidationLength = 0;
|
||
maCrossValidationDiffMultiplier = 0;
|
||
|
||
//
|
||
barsAnalysisConfig.Clean();
|
||
|
||
//
|
||
ZeroMemory(this);
|
||
}
|
||
|
||
/**
|
||
* Default Configurations ...
|
||
*/
|
||
void Default()
|
||
{
|
||
//
|
||
// Detector Flags ...
|
||
analysePVPivots = true;
|
||
analyseZGPivots = true;
|
||
analyseBarPatterns = true;
|
||
|
||
//
|
||
// Configure Detectors ...
|
||
loopback = 200;
|
||
requiredPivots = 10;
|
||
pvPivotsValidationLength = 5;
|
||
maCrossValidationDiffMultiplier = 4;
|
||
|
||
//
|
||
barsAnalysisConfig.Default();
|
||
barsAnalysisConfig.FullPattern();
|
||
}
|
||
|
||
/**
|
||
* No Draw Abilioty ...
|
||
*/
|
||
void Off()
|
||
{
|
||
//
|
||
// Detector Flags ...
|
||
analysePVPivots = false;
|
||
analyseZGPivots = false;
|
||
analyseBarPatterns = false;
|
||
}
|
||
|
||
/**
|
||
* Full Draw Abilioty ...
|
||
*/
|
||
void Full()
|
||
{
|
||
//
|
||
// Detector Flags ...
|
||
analysePVPivots = true;
|
||
analyseZGPivots = true;
|
||
analyseBarPatterns = true;
|
||
}
|
||
|
||
//
|
||
};
|
||
|
||
/**
|
||
* Configure Market Structure Drawer ...
|
||
**/
|
||
struct XFIMAMarketStructureDrawerConfig
|
||
{
|
||
//
|
||
// Props ...
|
||
|
||
//
|
||
bool drawPVAnalysis;
|
||
bool drawZGAnalysis;
|
||
bool drawBarsAnalysis;
|
||
|
||
//
|
||
XPOIDrawConfig drawConfig;
|
||
XPivotAnalysisDrawConfig pivotAnalysisDrawConfig;
|
||
XPatternAnalysisDrawConfig barAnalysisDrawConfig;
|
||
|
||
//
|
||
// Constructor ...
|
||
XFIMAMarketStructureDrawerConfig()
|
||
{
|
||
Clean();
|
||
}
|
||
|
||
//
|
||
// Tools ...
|
||
|
||
/**
|
||
* This function fulfills the will of the developer
|
||
*/
|
||
void Clean()
|
||
{
|
||
//
|
||
// Drawing Flags ...
|
||
|
||
//
|
||
drawPVAnalysis = false;
|
||
drawZGAnalysis = false;
|
||
drawBarsAnalysis = false;
|
||
|
||
//
|
||
// Drawing Configs ...
|
||
drawConfig.Clean();
|
||
barAnalysisDrawConfig.Clean();
|
||
pivotAnalysisDrawConfig.Clean();
|
||
|
||
//
|
||
ZeroMemory(this);
|
||
}
|
||
|
||
/**
|
||
* Default Configurations ...
|
||
*/
|
||
void Default()
|
||
{
|
||
//
|
||
// Drawing Flags ...
|
||
|
||
//
|
||
drawPVAnalysis = true;
|
||
drawZGAnalysis = true;
|
||
drawBarsAnalysis = true;
|
||
|
||
//
|
||
// Drawing Configs ...
|
||
drawConfig.Default();
|
||
pivotAnalysisDrawConfig.Default();
|
||
|
||
//
|
||
barAnalysisDrawConfig.Default();
|
||
barAnalysisDrawConfig.Full();
|
||
XClean(barAnalysisDrawConfig.allowedDrawZones);
|
||
Add(
|
||
X_BAR_PATTERN_SUPPORT,
|
||
barAnalysisDrawConfig.allowedDrawZones);
|
||
Add(
|
||
X_BAR_PATTERN_RESISTANCE,
|
||
barAnalysisDrawConfig.allowedDrawZones);
|
||
}
|
||
|
||
/**
|
||
* No Draw Abilioty ...
|
||
*/
|
||
void Off()
|
||
{
|
||
//
|
||
// Drawing Flags ...
|
||
|
||
//
|
||
drawPVAnalysis = false;
|
||
drawZGAnalysis = false;
|
||
drawBarsAnalysis = false;
|
||
|
||
//
|
||
// Drawing Configs ...
|
||
barAnalysisDrawConfig.Off();
|
||
pivotAnalysisDrawConfig.Off();
|
||
}
|
||
|
||
/**
|
||
* Full Draw Abilioty ...
|
||
*/
|
||
void Full()
|
||
{
|
||
//
|
||
// Drawing Flags ...
|
||
|
||
//
|
||
drawPVAnalysis = false;
|
||
drawZGAnalysis = false;
|
||
drawBarsAnalysis = false;
|
||
|
||
//
|
||
// Drawing Configs ...
|
||
barAnalysisDrawConfig.Full();
|
||
pivotAnalysisDrawConfig.Full();
|
||
}
|
||
|
||
void ApplyDrawConfig()
|
||
{
|
||
//
|
||
barAnalysisDrawConfig.drawConfig = drawConfig;
|
||
barAnalysisDrawConfig.ConfigureQuarterDraws();
|
||
pivotAnalysisDrawConfig.drawConfig = drawConfig;
|
||
}
|
||
|
||
void ApplyDrawConfig(XPOIDrawConfig &_drawConfig)
|
||
{
|
||
//
|
||
drawConfig = _drawConfig;
|
||
ApplyDrawConfig();
|
||
}
|
||
|
||
//
|
||
};
|
||
|
||
// |