Files
MQL5Data/X121SMCEA/Libraries/x-121.smc.lib.mq5
T
2024-11-04 01:36:42 +03:30

469 lines
9.2 KiB
Plaintext

///////////////////////////////////////////////////////
//
// 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 ...
//
XZone supplyZone;
XZone bearishOrderBlock;
XZone bearishFVG;
//
XZone bearishOrderBlocks[];
XZone bearishFVGs[];
//
XOHCL swingHighs[];
XOHCL resistances[];
XOHCL bearishMomentumBars[];
XOHCL bearishRejectionBars[];
//
XZone demandZone;
XZone bullishOrderBlock;
XZone bullishFVG;
//
XZone bullishOrderBlocks[];
XZone bullishFVGs[];
//
XOHCL supports[];
XOHCL swingLows[];
XOHCL bullishMomentumBars[];
XOHCL bullishRejectionBars[];
//
// Constructor ...
void XStrategyConditions()
{
Clean();
}
//
// Tools ...
//
// Cleanup ...
void Clean()
{
//
symbol = NULL;
period = NULL;
time = NULL;
//
supplyZone.Clean();
bearishFVG.Clean();
bearishOrderBlock.Clean();
//
Clean(bearishFVGs);
Clean(bearishOrderBlocks);
//
demandZone.Clean();
bullishFVG.Clean();
bullishOrderBlock.Clean();
//
Clean(bullishFVGs);
Clean(bullishOrderBlocks);
//
Clean(swingHighs);
Clean(resistances);
Clean(bearishMomentumBars);
Clean(bearishRejectionBars);
//
Clean(swingLows);
Clean(supports);
Clean(bullishMomentumBars);
Clean(bullishRejectionBars);
}
void CleanDemand()
{
//
demandZone.Clean();
bullishFVG.Clean();
bullishOrderBlock.Clean();
//
Clean(supports);
Clean(swingLows);
Clean(bullishFVGs);
Clean(bullishOrderBlocks);
Clean(bullishMomentumBars);
Clean(bullishRejectionBars);
}
void CleanSupply()
{
//
supplyZone.Clean();
bearishFVG.Clean();
bearishOrderBlock.Clean();
//
Clean(swingHighs);
Clean(resistances);
Clean(bearishFVGs);
Clean(bearishOrderBlocks);
Clean(bearishMomentumBars);
Clean(bearishRejectionBars);
}
bool ValidateSupply()
{
//
bool result = false;
//
result = IsValid();
if (!result)
{
return result;
}
//
result =
//
supplyZone.IsValid() &&
bearishFVG.IsValid() &&
bearishOrderBlock.IsValid() &&
(ArraySize(swingHighs) > 0 ||
ArraySize(bearishFVGs) > 0 ||
ArraySize(resistances) > 0 ||
ArraySize(bearishOrderBlocks) > 0 ||
ArraySize(bearishMomentumBars) > 0 ||
ArraySize(bearishRejectionBars) > 0)
//
;
//
return result;
}
bool ValidateDemand()
{
//
bool result = false;
//
result = IsValid();
if (!result)
{
return result;
}
//
result =
//
demandZone.IsValid() &&
bullishFVG.IsValid() &&
bullishOrderBlock.IsValid() &&
(ArraySize(supports) > 0 ||
ArraySize(swingLows) > 0 ||
ArraySize(bullishFVGs) > 0 ||
ArraySize(bullishOrderBlocks) > 0 ||
ArraySize(bullishMomentumBars) > 0 ||
ArraySize(bullishRejectionBars) > 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 //
);