cleanup and backup old styles and try toimplement new POI Detector ...
This commit is contained in:
@@ -1,856 +0,0 @@
|
||||
///////////////////////////////////////////////////////
|
||||
//
|
||||
// SaherElm IT Center MQL5 Seriallize Library
|
||||
// ---------------------------------------
|
||||
// Name: X121SMCLib
|
||||
// Description: All models related to X121SMC ...
|
||||
//
|
||||
//
|
||||
// Maintainer:
|
||||
// ------------
|
||||
// Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com)
|
||||
//
|
||||
//////////////////////////////////////////////////////
|
||||
//
|
||||
// Global Properties ...
|
||||
#property library
|
||||
#property copyright "Copyright 2023, SaherElm IT Center"
|
||||
#property link "https://www.saherelm.ir"
|
||||
#property version "1.00"
|
||||
#property strict
|
||||
|
||||
//
|
||||
// Imports ...
|
||||
#include "../../Classes/x-saherelm.base.class.mq5"
|
||||
#include "../../Libraries/x-saherelm.common.lib.mq5"
|
||||
#include "../../Libraries/x-saherelm.x-poi.lib.mq5"
|
||||
#include "../../Libraries/x-saherelm.xtrade.lib.mq5"
|
||||
|
||||
//
|
||||
// Definitions ...
|
||||
|
||||
//
|
||||
// Specific Identifier(s) of XStrategy ...
|
||||
string X121SMCStrategyToken = "X121SMC";
|
||||
string X121SMCOBStrategyToken = "X121SMCOB";
|
||||
string X121SMCSUPDEMStrategyToken = "X121SMCSUPDEM";
|
||||
string X121SMCConditionsToken = "X121SMCConditions";
|
||||
string X121SMCMarketStructureToken = "X121SMCMarketStructure";
|
||||
|
||||
//
|
||||
// Condition Structure ...
|
||||
struct X121SMCStrategyConditions
|
||||
{
|
||||
//
|
||||
// Props ...
|
||||
|
||||
//
|
||||
// Common ...
|
||||
string symbol;
|
||||
ENUM_TIMEFRAMES period;
|
||||
datetime time;
|
||||
|
||||
//
|
||||
// Conditions ...
|
||||
|
||||
//
|
||||
XOHCL swingHigh;
|
||||
XZone supplyZone;
|
||||
XZone bearishFVG;
|
||||
XOHCL resistance;
|
||||
XZone bearishOrderBlock;
|
||||
XOHCL bullishMomentumBar;
|
||||
XOHCL bullishRejectionBar;
|
||||
|
||||
//
|
||||
XZone demandZones[];
|
||||
XZone bearishFVGs[];
|
||||
XZone bearishOrderBlocks[];
|
||||
XOHCL swingHighs[];
|
||||
XOHCL resistances[];
|
||||
XOHCL bearishMomentumBars[];
|
||||
XOHCL bearishRejectionBars[];
|
||||
|
||||
//
|
||||
XOHCL support;
|
||||
XOHCL swingLow;
|
||||
XZone demandZone;
|
||||
XZone bullishFVG;
|
||||
XZone bullishOrderBlock;
|
||||
XOHCL bearishMomentumBar;
|
||||
XOHCL bearishRejectionBar;
|
||||
|
||||
//
|
||||
XZone supplyZones[];
|
||||
XZone bullishFVGs[];
|
||||
XZone bullishOrderBlocks[];
|
||||
XOHCL supports[];
|
||||
XOHCL swingLows[];
|
||||
XOHCL bullishMomentumBars[];
|
||||
XOHCL bullishRejectionBars[];
|
||||
|
||||
//
|
||||
// Constructor ...
|
||||
void XStrategyConditions()
|
||||
{
|
||||
Clean();
|
||||
}
|
||||
|
||||
//
|
||||
// Tools ...
|
||||
|
||||
/**
|
||||
* Cleanup ...
|
||||
*/
|
||||
void Clean()
|
||||
{
|
||||
//
|
||||
symbol = NULL;
|
||||
period = NULL;
|
||||
time = NULL;
|
||||
|
||||
//
|
||||
CleanDemand();
|
||||
CleanSupply();
|
||||
}
|
||||
|
||||
/**
|
||||
* Cleanup Demand Related ...
|
||||
*/
|
||||
void CleanDemand()
|
||||
{
|
||||
//
|
||||
support.Clean();
|
||||
swingLow.Clean();
|
||||
demandZone.Clean();
|
||||
bullishFVG.Clean();
|
||||
bullishOrderBlock.Clean();
|
||||
bullishMomentumBar.Clean();
|
||||
bullishRejectionBar.Clean();
|
||||
|
||||
//
|
||||
Clean(supports);
|
||||
Clean(swingLows);
|
||||
Clean(supplyZones);
|
||||
Clean(bullishFVGs);
|
||||
Clean(bullishOrderBlocks);
|
||||
Clean(bullishMomentumBars);
|
||||
Clean(bullishRejectionBars);
|
||||
}
|
||||
|
||||
/**
|
||||
* Cleanup Supply Related ...
|
||||
*/
|
||||
void CleanSupply()
|
||||
{
|
||||
//
|
||||
swingHigh.Clean();
|
||||
supplyZone.Clean();
|
||||
bearishFVG.Clean();
|
||||
resistance.Clean();
|
||||
bearishOrderBlock.Clean();
|
||||
bearishMomentumBar.Clean();
|
||||
bearishRejectionBar.Clean();
|
||||
|
||||
//
|
||||
Clean(swingHighs);
|
||||
Clean(demandZones);
|
||||
Clean(bearishFVGs);
|
||||
Clean(resistances);
|
||||
Clean(bearishOrderBlocks);
|
||||
Clean(bearishMomentumBars);
|
||||
Clean(bearishRejectionBars);
|
||||
}
|
||||
|
||||
/**
|
||||
* Validate Demand ...
|
||||
*
|
||||
* @return ( bool )
|
||||
*/
|
||||
bool ValidateDemand()
|
||||
{
|
||||
//
|
||||
bool result = false;
|
||||
|
||||
//
|
||||
result = IsValid();
|
||||
if (!result)
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
result =
|
||||
//
|
||||
support.IsValid() &&
|
||||
swingLow.IsValid() &&
|
||||
demandZone.IsValid() &&
|
||||
bullishFVG.IsValid() &&
|
||||
bullishOrderBlock.IsValid() &&
|
||||
bullishMomentumBar.IsValid() &&
|
||||
bullishRejectionBar.IsValid() &&
|
||||
//
|
||||
(ArraySize(supports) > 0 ||
|
||||
ArraySize(swingLows) > 0 ||
|
||||
ArraySize(supplyZones) > 0 ||
|
||||
ArraySize(bullishFVGs) > 0 ||
|
||||
ArraySize(bullishOrderBlocks) > 0 ||
|
||||
ArraySize(bullishMomentumBars) > 0 ||
|
||||
ArraySize(bullishRejectionBars) > 0)
|
||||
//
|
||||
;
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Validate Supply ...
|
||||
*
|
||||
* @return ( bool )
|
||||
*/
|
||||
bool ValidateSupply()
|
||||
{
|
||||
//
|
||||
bool result = false;
|
||||
|
||||
//
|
||||
result = IsValid();
|
||||
if (!result)
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
result =
|
||||
//
|
||||
swingHigh.IsValid() &&
|
||||
supplyZone.IsValid() &&
|
||||
bearishFVG.IsValid() &&
|
||||
resistance.IsValid() &&
|
||||
bearishOrderBlock.IsValid() &&
|
||||
bearishMomentumBar.IsValid() &&
|
||||
bearishRejectionBar.IsValid() &&
|
||||
//
|
||||
(ArraySize(swingHighs) > 0 ||
|
||||
ArraySize(demandZones) > 0 ||
|
||||
ArraySize(bearishFVGs) > 0 ||
|
||||
ArraySize(resistances) > 0 ||
|
||||
ArraySize(bearishOrderBlocks) > 0 ||
|
||||
ArraySize(bearishMomentumBars) > 0 ||
|
||||
ArraySize(bearishRejectionBars) > 0)
|
||||
//
|
||||
;
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
// Validate ...
|
||||
bool IsValid()
|
||||
{
|
||||
//
|
||||
bool result = false;
|
||||
|
||||
//
|
||||
result =
|
||||
//
|
||||
IsValid(time) &&
|
||||
IsValid(symbol) &&
|
||||
IsValid(period)
|
||||
//
|
||||
;
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
// Generate Provided Scores ...
|
||||
void GenerateScore(
|
||||
double &bullishScore,
|
||||
double &bearishScore //
|
||||
)
|
||||
{
|
||||
//
|
||||
bullishScore = 0;
|
||||
bearishScore = 0;
|
||||
|
||||
//
|
||||
if (!IsValid())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
//
|
||||
double bullScore = 0;
|
||||
double bearScore = 0;
|
||||
|
||||
//
|
||||
// Generate Helpers Conitions Scores ...
|
||||
}
|
||||
|
||||
//
|
||||
// Generate Summary ...
|
||||
string GenerateSummary(
|
||||
bool onlyCommons = false,
|
||||
bool onlyConditions = false,
|
||||
bool includeScores = true,
|
||||
bool ignoreFalseConditions = true,
|
||||
string separator = "\n" //
|
||||
)
|
||||
{
|
||||
//
|
||||
string result = NULL;
|
||||
|
||||
//
|
||||
double bullishScore = 0;
|
||||
double bearishScore = 0;
|
||||
GenerateScore(
|
||||
bullishScore,
|
||||
bearishScore //
|
||||
);
|
||||
|
||||
//
|
||||
string commonStr = GenerateSpecifiedCommonSummary(
|
||||
this,
|
||||
separator,
|
||||
includeScores,
|
||||
true //
|
||||
);
|
||||
|
||||
//
|
||||
// Generate Helpers Conditions Strings ...
|
||||
|
||||
//
|
||||
// Combine Helpers Conditions Strings ...
|
||||
string conditionsStr =
|
||||
//
|
||||
"" + separator +
|
||||
""
|
||||
//
|
||||
;
|
||||
|
||||
//
|
||||
result =
|
||||
//
|
||||
"[" + GetTag() + "]" + separator +
|
||||
"----------" + separator +
|
||||
(onlyConditions
|
||||
? ""
|
||||
: commonStr) +
|
||||
" " + separator +
|
||||
(onlyCommons
|
||||
? ""
|
||||
: conditionsStr) +
|
||||
""
|
||||
//
|
||||
;
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
string GetTag(
|
||||
bool fullTag = false //
|
||||
)
|
||||
{
|
||||
//
|
||||
string result = NULL;
|
||||
|
||||
//
|
||||
if (!IsValid())
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
if (fullTag)
|
||||
{
|
||||
//
|
||||
result =
|
||||
//
|
||||
symbol + "," +
|
||||
ToString(period) + "," +
|
||||
ToFormatString(time) + "_" +
|
||||
demandZone.GetTag() + "," +
|
||||
supplyZone.GetTag() + "_" +
|
||||
bullishOrderBlock.GetTag() + "," +
|
||||
bearishOrderBlock.GetTag()
|
||||
//
|
||||
;
|
||||
|
||||
//
|
||||
result = X121SMCConditionsToken + "_" + ToMD5(result);
|
||||
}
|
||||
else
|
||||
{
|
||||
result = X121SMCConditionsToken;
|
||||
}
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
};
|
||||
|
||||
//
|
||||
// Market Structure Models ...
|
||||
struct X121SMCMarketStructure
|
||||
{
|
||||
//
|
||||
XZone demandZone;
|
||||
XZone supplyZone;
|
||||
|
||||
//
|
||||
XZone bullishOrderBlock;
|
||||
XZone bearishOrderBlock;
|
||||
|
||||
//
|
||||
XZone demandZones[];
|
||||
XZone supplyZones[];
|
||||
|
||||
//
|
||||
XZone bearishOrderBlocks[];
|
||||
XZone bearishFVGs[];
|
||||
|
||||
//
|
||||
XOHCL swingHighs[];
|
||||
XOHCL resistances[];
|
||||
XOHCL bearishMomentumBars[];
|
||||
XOHCL bearishRejectionBars[];
|
||||
|
||||
//
|
||||
XZone bullishOrderBlocks[];
|
||||
XZone bullishFVGs[];
|
||||
|
||||
//
|
||||
XOHCL supports[];
|
||||
XOHCL swingLows[];
|
||||
XOHCL bullishMomentumBars[];
|
||||
XOHCL bullishRejectionBars[];
|
||||
|
||||
//
|
||||
void Clean()
|
||||
{
|
||||
//
|
||||
demandZone.Clean();
|
||||
supplyZone.Clean();
|
||||
|
||||
//
|
||||
Clean(supports);
|
||||
Clean(swingLows);
|
||||
Clean(swingHighs);
|
||||
Clean(demandZones);
|
||||
Clean(supplyZones);
|
||||
Clean(bearishFVGs);
|
||||
Clean(resistances);
|
||||
Clean(bullishFVGs);
|
||||
Clean(bearishOrderBlocks);
|
||||
Clean(bullishOrderBlocks);
|
||||
Clean(bearishMomentumBars);
|
||||
Clean(bearishRejectionBars);
|
||||
Clean(bullishMomentumBars);
|
||||
Clean(bullishRejectionBars);
|
||||
}
|
||||
|
||||
//
|
||||
string GetTag()
|
||||
{
|
||||
//
|
||||
string result = NULL;
|
||||
|
||||
//
|
||||
result =
|
||||
//
|
||||
demandZone.GetTag() + "," +
|
||||
supplyZone.GetTag() + "_" +
|
||||
bullishOrderBlock.GetTag() + "," +
|
||||
bearishOrderBlock.GetTag()
|
||||
//
|
||||
;
|
||||
result = X121SMCMarketStructureToken + "_" + ToMD5(X121SMCMarketStructureToken);
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
};
|
||||
|
||||
//
|
||||
// On Signal Event Handler ...
|
||||
typedef void (*TOnX121SMCSignal)(
|
||||
XSignal &signal,
|
||||
X121SMCStrategyConditions &conditions //
|
||||
);
|
||||
|
||||
//
|
||||
struct XRange
|
||||
{
|
||||
//
|
||||
string symbol;
|
||||
ENUM_TIMEFRAMES period;
|
||||
|
||||
//
|
||||
double upper;
|
||||
double lower;
|
||||
|
||||
//
|
||||
datetime from;
|
||||
datetime to;
|
||||
|
||||
//
|
||||
void XRange()
|
||||
{
|
||||
Clean();
|
||||
}
|
||||
|
||||
//
|
||||
// Tools ...
|
||||
|
||||
/**
|
||||
* Initial ...
|
||||
*
|
||||
* @param _symbol: String ...
|
||||
* @param _period: ENUM_TIMEFRAMES member ...
|
||||
* @param _upper: Double ...
|
||||
* @param _lower: Double ...
|
||||
* @param _from: DateTime ...
|
||||
* @param _to: DateTime ...
|
||||
*
|
||||
* @return ( bool )
|
||||
*/
|
||||
bool Init(
|
||||
string _symbol,
|
||||
ENUM_TIMEFRAMES _period,
|
||||
double _upper,
|
||||
double _lower,
|
||||
datetime _from,
|
||||
datetime _to //
|
||||
)
|
||||
{
|
||||
//
|
||||
bool result = false;
|
||||
|
||||
//
|
||||
result =
|
||||
//
|
||||
IsValid(_symbol) &&
|
||||
IsValid(_period) &&
|
||||
IsValid(_from) &&
|
||||
IsValid(_to) &&
|
||||
_upper > 0 &&
|
||||
_lower > 0 &&
|
||||
_to > _from
|
||||
//
|
||||
;
|
||||
|
||||
//
|
||||
symbol = _symbol;
|
||||
period = _period;
|
||||
|
||||
//
|
||||
upper = _upper;
|
||||
lower = _lower;
|
||||
|
||||
//
|
||||
from = _from;
|
||||
to = _to;
|
||||
|
||||
//
|
||||
result = IsValid();
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Cleanup ...
|
||||
*/
|
||||
void Clean()
|
||||
{
|
||||
//
|
||||
symbol = NULL;
|
||||
period = NULL;
|
||||
|
||||
//
|
||||
upper = 0;
|
||||
lower = 0;
|
||||
|
||||
//
|
||||
from = NULL;
|
||||
to = NULL;
|
||||
}
|
||||
|
||||
/**
|
||||
* Validate ...
|
||||
*
|
||||
* @return ( bool )
|
||||
*/
|
||||
bool IsValid()
|
||||
{
|
||||
//
|
||||
bool result = false;
|
||||
|
||||
//
|
||||
result =
|
||||
//
|
||||
IsValid(symbol) &&
|
||||
IsValid(period) &&
|
||||
IsValid(from) &&
|
||||
IsValid(to) &&
|
||||
upper > 0 &&
|
||||
lower > 0 &&
|
||||
to > from
|
||||
//
|
||||
;
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Generate Unique Tag ...
|
||||
*
|
||||
* @return ( string )
|
||||
*/
|
||||
string GetTag()
|
||||
{
|
||||
//
|
||||
string result = NULL;
|
||||
|
||||
//
|
||||
string hash =
|
||||
ToString(upper) + "," +
|
||||
ToString(lower) +
|
||||
ToFormatString(from);
|
||||
hash = ToMD5(hash);
|
||||
|
||||
//
|
||||
result =
|
||||
//
|
||||
"XRNG_" + symbol + "_" +
|
||||
ToString(period) + "_" +
|
||||
hash
|
||||
//
|
||||
;
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Generate Tooltip ...
|
||||
*
|
||||
* @return ( string )
|
||||
*/
|
||||
string GetTooltip()
|
||||
{
|
||||
//
|
||||
string result = NULL;
|
||||
|
||||
//
|
||||
result =
|
||||
//
|
||||
"XRNG" + "\n" +
|
||||
symbol + "\n" +
|
||||
ToString(period) + "\n" +
|
||||
ToString(from) + "\n" +
|
||||
ToString(to)
|
||||
//
|
||||
;
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
};
|
||||
|
||||
//
|
||||
struct XRangeStructure
|
||||
{
|
||||
//
|
||||
XRange range;
|
||||
|
||||
//
|
||||
XZone demandZones[];
|
||||
XZone supplyZones[];
|
||||
|
||||
//
|
||||
XZone bearishOrderBlocks[];
|
||||
XZone bearishFVGs[];
|
||||
|
||||
//
|
||||
XOHCL swingHighs[];
|
||||
XOHCL resistances[];
|
||||
XOHCL bearishMomentumBars[];
|
||||
XOHCL bearishRejectionBars[];
|
||||
|
||||
//
|
||||
XZone bullishOrderBlocks[];
|
||||
XZone bullishFVGs[];
|
||||
|
||||
//
|
||||
XOHCL supports[];
|
||||
XOHCL swingLows[];
|
||||
XOHCL bullishMomentumBars[];
|
||||
XOHCL bullishRejectionBars[];
|
||||
|
||||
//
|
||||
// Constructor ...
|
||||
void XRangeStructure()
|
||||
{
|
||||
Clean();
|
||||
}
|
||||
|
||||
//
|
||||
// Tools ...
|
||||
|
||||
/**
|
||||
* Cleanup ...
|
||||
*/
|
||||
void Clean()
|
||||
{
|
||||
//
|
||||
range.Clean();
|
||||
|
||||
//
|
||||
Clean(supports);
|
||||
Clean(swingLows);
|
||||
Clean(swingHighs);
|
||||
Clean(demandZones);
|
||||
Clean(supplyZones);
|
||||
Clean(bearishFVGs);
|
||||
Clean(resistances);
|
||||
Clean(bullishFVGs);
|
||||
Clean(bearishOrderBlocks);
|
||||
Clean(bullishOrderBlocks);
|
||||
Clean(bearishMomentumBars);
|
||||
Clean(bearishRejectionBars);
|
||||
Clean(bullishMomentumBars);
|
||||
Clean(bullishRejectionBars);
|
||||
}
|
||||
|
||||
/**
|
||||
* Validate ...
|
||||
*
|
||||
* @return ( bool )
|
||||
*/
|
||||
bool IsValid()
|
||||
{
|
||||
//
|
||||
bool result = false;
|
||||
|
||||
//
|
||||
result = range.IsValid();
|
||||
if (!result)
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
result =
|
||||
//
|
||||
ArraySize(supports) > 0 ||
|
||||
ArraySize(swingLows) > 0 ||
|
||||
ArraySize(swingHighs) > 0 ||
|
||||
ArraySize(demandZones) > 0 ||
|
||||
ArraySize(supplyZones) > 0 ||
|
||||
ArraySize(bearishFVGs) > 0 ||
|
||||
ArraySize(resistances) > 0 ||
|
||||
ArraySize(bullishFVGs) > 0 ||
|
||||
ArraySize(bearishOrderBlocks) > 0 ||
|
||||
ArraySize(bullishOrderBlocks) > 0 ||
|
||||
ArraySize(bearishMomentumBars) > 0 ||
|
||||
ArraySize(bearishRejectionBars) > 0 ||
|
||||
ArraySize(bullishMomentumBars) > 0 ||
|
||||
ArraySize(bullishRejectionBars) > 0
|
||||
//
|
||||
;
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Generate Tag ...
|
||||
*
|
||||
* @return ( string )
|
||||
*/
|
||||
string GetTag()
|
||||
{
|
||||
//
|
||||
string result = NULL;
|
||||
|
||||
//
|
||||
string hash = range.GetTag();
|
||||
hash = ToMD5(hash);
|
||||
|
||||
//
|
||||
result = X121SMCMarketStructureToken + "_" + hash;
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Check a Zone is Between to other Zones ...
|
||||
*
|
||||
* @param source: XZone instance ...
|
||||
* @param upper: XZone instance ...
|
||||
* @param lower: XZone instance ...
|
||||
*
|
||||
* @return ( bool )
|
||||
*/
|
||||
bool IsBetween(
|
||||
XZone &source,
|
||||
XRange &range //
|
||||
)
|
||||
{
|
||||
//
|
||||
bool result = false;
|
||||
|
||||
//
|
||||
result = source.IsValid() &&
|
||||
range.IsValid();
|
||||
if (!result)
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
result = source.upper <= range.upper &&
|
||||
source.lower >= range.lower;
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
bool IsBetween(
|
||||
XOHCL &source,
|
||||
XRange &range //
|
||||
)
|
||||
{
|
||||
//
|
||||
bool result = false;
|
||||
|
||||
//
|
||||
result = source.IsValid() &&
|
||||
range.IsValid();
|
||||
if (!result)
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
result = source.high <= range.upper &&
|
||||
source.low >= range.lower;
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
Reference in New Issue
Block a user