This commit is contained in:
2024-12-23 19:18:55 +03:30
parent 72430436bb
commit 7c4cfd4321
9 changed files with 7465 additions and 428 deletions
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,831 @@
///////////////////////////////////////////////////////
//
// SaherElm IT Center MQL5 X121 SMC Signal Class
// -------------------------------------------------
// Name:
// Description: provide all Signalling functions ...
//
//
// 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-121.smc.market.cycle.helper.class.mq5"
#include "../Libraries/x-121.smc.lib.mq5"
//
// Definitions ...
struct X121SMCStrategyTestSignalConditions
{
//
// Props ...
//
string symbol;
ENUM_TIMEFRAMES period;
//
double sl;
ENUM_X_DIRECTION dir;
ENUM_X_POSITION_TYPES type;
//
// Setup Props ...
//
datetime setupTime;
datetime triggerTime;
//
XPVPivot pivot;
//
// Trigger Props ...
//
// Constructor ...
X121SMCStrategyTestSignalConditions()
{
Clean();
}
//
// Tools ...
/**
* Cleaning Up ...
*/
void Clean()
{
//
sl = 0;
//
dir = X_DIRECTION_NONE;
type = X_POSITION_TYPE_NONE;
//
symbol = NULL;
period = NULL;
setupTime = NULL;
triggerTime = NULL;
//
pivot.Clean();
}
/**
* Check Condition is Setting Up ...
*
* @param dir: ENUM_X_DIRECTION member, Setting Up Direction ...
*
* @return ( bool )
*/
bool IsSetuped()
{
//
bool result = false;
//
result = IsValid(setupTime) &&
HasDirection(dir);
if (!result)
{
return result;
}
//
return result;
}
/**
* Detect How we Can Trigger Signal ...
*
* @return ( bool )
*/
bool CanTrigger()
{
//
bool result = false;
//
result =
//
sl > 0 &&
IsValid(symbol) &&
IsValid(period) &&
IsValid(triggerTime) &&
type != X_POSITION_TYPE_ALL &&
type != X_POSITION_TYPE_NONE
//
;
//
return result;
}
//
// Extensions ...
//
};
//
// Extension Functions ...
//
// Detect Setup Conditions ...
bool DetectX121SMCTestSiganlSetup(
string _symbol,
ENUM_TIMEFRAMES _period,
//
X121SMCStrategyTestSignalConditions &conditions,
//
XC121SMCCycleHelper *triggerCycleHelper,
XC121SMCCycleHelper *decisionCycleHelper,
XC121SMCCycleHelper *analyseCycleHelper,
XC121SMCCycleHelper *verificationCycleHelper,
XC121SMCCycleHelper *consolidationCycleHelper,
XC121SMCCycleHelper *visionCycleHelper
//
)
{
//
bool result = false;
//
bool isBullish = false;
bool isBearish = false;
//
int zIndex = 0;
int cIndex = zIndex + 1;
int pIndex = cIndex + 1;
int ppIndex = pIndex + 1;
//
int loopback = 10;
//
string symbol = _symbol;
ENUM_TIMEFRAMES period = _period;
//
conditions.symbol = symbol;
conditions.period = period;
//
XOHCL zBar;
result = zBar.Init(
symbol,
period,
zIndex //
);
if (!result)
{
return result;
}
//
XOHCL cBar;
result = cBar.Init(
symbol,
period,
cIndex //
);
if (!result)
{
return result;
}
//
double ask = GetAsk(symbol);
double bid = GetBid(symbol);
datetime cTime = TimeCurrent();
//
double ll = cBar.FindLowest(9, MODE_LOW);
double hh = cBar.FindHighest(9, MODE_HIGH);
//
int zoneValidationDivider = 10;
int validPivotRepetition = triggerCycleHelper.mX121Helper
.GetDonChainLength();
//
double selectedSL = 0;
//
// Cycles Conditions ...
//
// Trigger ...
ENUM_XPOI_EVENTS triggerPoiEvents[];
ENUM_X_CYCLE_EVENTS triggerCycleEvents[];
X121SMCCycleConditions triggerConditions;
result = triggerCycleHelper.GetConditions(
triggerCycleEvents,
triggerPoiEvents,
triggerConditions,
zIndex,
loopback //
);
if (!result)
{
return result;
}
//
// Decision ...
ENUM_XPOI_EVENTS decisionPoiEvents[];
ENUM_X_CYCLE_EVENTS decisionCycleEvents[];
X121SMCCycleConditions decisionConditions;
result = decisionCycleHelper.GetConditions(
decisionCycleEvents,
decisionPoiEvents,
decisionConditions,
zIndex,
loopback //
);
if (!result)
{
return result;
}
//
// Analyse ...
ENUM_XPOI_EVENTS analysePoiEvents[];
ENUM_X_CYCLE_EVENTS analyseCycleEvents[];
X121SMCCycleConditions analyseConditions;
result = analyseCycleHelper.GetConditions(
analyseCycleEvents,
analysePoiEvents,
analyseConditions,
zIndex,
loopback //
);
if (!result)
{
return result;
}
//
// Verification ...
ENUM_XPOI_EVENTS verificationPoiEvents[];
ENUM_X_CYCLE_EVENTS verificationCycleEvents[];
X121SMCCycleConditions verificationConditions;
result = verificationCycleHelper.GetConditions(
verificationCycleEvents,
verificationPoiEvents,
verificationConditions,
zIndex,
loopback //
);
if (!result)
{
return result;
}
//
// Consolidation ...
ENUM_XPOI_EVENTS consolidationPoiEvents[];
ENUM_X_CYCLE_EVENTS consolidationCycleEvents[];
X121SMCCycleConditions consolidationConditions;
result = consolidationCycleHelper.GetConditions(
consolidationCycleEvents,
consolidationPoiEvents,
consolidationConditions,
zIndex,
loopback //
);
if (!result)
{
return result;
}
//
// Vision ...
ENUM_XPOI_EVENTS visionPoiEvents[];
ENUM_X_CYCLE_EVENTS visionCycleEvents[];
X121SMCCycleConditions visionConditions;
result = visionCycleHelper.GetConditions(
visionCycleEvents,
visionPoiEvents,
visionConditions,
zIndex,
loopback //
);
if (!result)
{
return result;
}
//
// Cycles POI States ...
XPOIState triggerState = triggerConditions.state;
XPOIState decisionState = decisionConditions.state;
XPOIState analyseState = analyseConditions.state;
XPOIState verificationState = verificationConditions.state;
XPOIState consolidationState = consolidationConditions.state;
XPOIState visionState = visionConditions.state;
//
// Detect new Peak or new Vale ...
//
bool isNewPeak = triggerConditions.x121Conditions.isNewPeak;
double peak = triggerConditions.x121Conditions.peaksBuffer[1];
bool isNewPeakOverLast = triggerConditions.x121Conditions.isNewPeakOverLast;
bool isNewPeakUnderLast = triggerConditions.x121Conditions.isNewPeakUnderLast;
//
bool isNewVale = triggerConditions.x121Conditions.isNewVale;
double vale = triggerConditions.x121Conditions.valesBuffer[1];
bool isNewValeOverLast = triggerConditions.x121Conditions.isNewValeOverLast;
bool isNewValeUnderLast = triggerConditions.x121Conditions.isNewValeUnderLast;
//
result = isNewPeak ||
isNewVale;
if (!result)
{
return result;
}
//
// Detect Pivot ...
bool hasPivot = conditions.pivot.IsValid();
if (!hasPivot)
{
//
XPVPivot pivot;
hasPivot = triggerCycleHelper.DetectPivot(
pivot,
cBar //
);
result = hasPivot;
if (!result)
{
return result;
}
//
conditions.pivot = pivot;
}
//
// Check Order Block ...
// TODO: Later ...
// bool hasOrderBlock = conditions.HasOrderBlock();
// if (hasOrderBlock)
// {
// //
// DetectX121SMCTestSiganlOrderBlock(
// zBar,
// consolidationState,
// conditions //
// );
// }
//
bool isMarketBullish =
//
// VWap State ...
decisionConditions.x121Conditions.isVWapBullishState &&
analyseConditions.x121Conditions.isVWapBullishState &&
verificationConditions.x121Conditions.isVWapBullishState
//
&&
//
// VWap Order ...
decisionConditions.x121Conditions.isVWapBullishOrdered &&
analyseConditions.x121Conditions.isVWapBullishOrdered &&
verificationConditions.x121Conditions.isVWapBullishOrdered
//
&&
//
// Sar ...
decisionConditions.x121Conditions.isSarBullish &&
analyseConditions.x121Conditions.isSarBullish &&
verificationConditions.x121Conditions.isSarBullish
//
;
//
bool isMarketBearish =
//
// VWap State ...
decisionConditions.x121Conditions.isVWapBearishState &&
analyseConditions.x121Conditions.isVWapBearishState &&
verificationConditions.x121Conditions.isVWapBearishState
//
&&
//
// VWap Order ...
decisionConditions.x121Conditions.isVWapBearishOrdered &&
analyseConditions.x121Conditions.isVWapBearishOrdered &&
verificationConditions.x121Conditions.isVWapBearishOrdered
//
&&
//
// Sar ...
decisionConditions.x121Conditions.isSarBearish &&
analyseConditions.x121Conditions.isSarBearish &&
verificationConditions.x121Conditions.isSarBearish
//
;
//
// Step 1
// Detect Market Direction ...
isBullish = isMarketBullish;
isBearish = isMarketBearish;
//
result = isBullish ||
isBearish;
if (!result)
{
return result;
}
//
// Step 2
// VWap Switches or Sar Switches ...
//
bool isSarBullish = triggerConditions.x121Conditions.isSarBullish;
bool isSarBearish = triggerConditions.x121Conditions.isSarBearish;
//
bool isSarSwitchedToBullish = triggerConditions.x121Conditions.isSarSwitchedToBullish;
bool isSarSwitchedToBearish = triggerConditions.x121Conditions.isSarSwitchedToBearish;
//
bool isVWapBullishState = triggerConditions.x121Conditions.isVWapBullishState;
bool isVWapBearishState = triggerConditions.x121Conditions.isVWapBearishState;
//
bool isVWapSwitchedToBullishState = triggerConditions.x121Conditions.isVWapSwitchedToBullishState;
bool isVWapSwitchedToBearishState = triggerConditions.x121Conditions.isVWapSwitchedToBearishState;
//
bool isVWapBullishOrdered = triggerConditions.x121Conditions.isVWapBullishOrdered;
bool isVWapBearishOrdered = triggerConditions.x121Conditions.isVWapBearishOrdered;
//
bool isVWapSwitchedToBullishOrdered = triggerConditions.x121Conditions.isVWapSwitchedToBullishOrdered;
bool isVWapSwitchedToBearishOrdered = triggerConditions.x121Conditions.isVWapSwitchedToBearishOrdered;
//
//
//
//
bool isSarStartedBullishStructure =
//
isSarSwitchedToBullish &&
isVWapBullishState &&
isVWapBullishOrdered
//
;
//
bool isSarStartedBearishStructure =
//
isSarSwitchedToBearish &&
isVWapBearishState &&
isVWapBearishOrdered
//
;
//
//
//
//
bool isVWapStateStartedBullishStructure =
//
isVWapSwitchedToBullishState &&
isSarBullish &&
isVWapBullishOrdered
//
;
//
bool isVWapStateStartedBearishStructure =
//
isVWapSwitchedToBearishState &&
isSarBearish &&
isVWapBearishOrdered
//
;
//
//
//
//
bool isVWapOrderStartedBullishStructure =
//
isVWapSwitchedToBullishOrdered &&
isSarBullish &&
isVWapBullishState
//
;
//
bool isVWapOrderStartedBearishStructure =
//
isVWapSwitchedToBearishOrdered &&
isSarBearish &&
isVWapBearishState
//
;
//
//
//
//
isBullish =
//
isBullish
//
&&
//
(
//
isSarStartedBullishStructure ||
isVWapStateStartedBullishStructure ||
isVWapOrderStartedBullishStructure
//
)
//
;
//
isBearish =
//
isBearish
//
&&
//
(
//
isSarStartedBearishStructure ||
isVWapStateStartedBearishStructure ||
isVWapOrderStartedBearishStructure
//
)
//
;
//
result = isBullish ||
isBearish;
if (!result)
{
return result;
}
//
conditions.setupTime = cTime;
conditions.dir =
isBullish
? X_DIRECTION_BULLISH
: X_DIRECTION_BEARISH;
//
return result;
}
//
// Detect Trigger Conditions ...
bool DetectX121SMCTestSiganlTrigger(
//
X121SMCStrategyTestSignalConditions &conditions,
//
string _symbol,
ENUM_TIMEFRAMES _period,
//
XC121SMCCycleHelper *triggerCycleHelper,
XC121SMCCycleHelper *decisionCycleHelper,
XC121SMCCycleHelper *analyseCycleHelper,
XC121SMCCycleHelper *verificationCycleHelper,
XC121SMCCycleHelper *consolidationCycleHelper,
XC121SMCCycleHelper *visionCycleHelper
//
)
{
//
bool result = false;
//
result = conditions.IsSetuped();
if (!result)
{
return result;
}
//
ENUM_X_DIRECTION setupDir = conditions.dir;
//
bool isBullish = false;
bool isBearish = false;
//
int zIndex = 0;
int cIndex = zIndex + 1;
int pIndex = cIndex + 1;
int ppIndex = pIndex + 1;
//
int loopback = 10;
//
ENUM_X_121_SMC_PROVIDERS provider = X_121_SMC_PROVIDER_SMPV;
string providerStr = ToString(provider);
//
string symbol = _symbol;
ENUM_TIMEFRAMES period = _period;
//
XOHCL zBar;
result = zBar.Init(
symbol,
period,
zIndex //
);
if (!result)
{
return result;
}
//
XOHCL cBar;
result = cBar.Init(
symbol,
period,
cIndex //
);
if (!result)
{
return result;
}
//
double ask = GetAsk(symbol);
double bid = GetBid(symbol);
datetime cTime = TimeCurrent();
//
double ll = cBar.FindLowest(9, MODE_LOW);
double hh = cBar.FindHighest(9, MODE_HIGH);
//
int zoneValidationDivider = 10;
int validPivotRepetition = triggerCycleHelper.mX121Helper
.GetDonChainLength();
//
double selectedSL = 0;
//
// Cycles Conditions ...
//
// Trigger ...
ENUM_XPOI_EVENTS triggerPoiEvents[];
ENUM_X_CYCLE_EVENTS triggerCycleEvents[];
X121SMCCycleConditions triggerConditions;
result = triggerCycleHelper.GetConditions(
triggerCycleEvents,
triggerPoiEvents,
triggerConditions,
zIndex,
loopback //
);
if (!result)
{
return result;
}
//
// Decision ...
ENUM_XPOI_EVENTS decisionPoiEvents[];
ENUM_X_CYCLE_EVENTS decisionCycleEvents[];
X121SMCCycleConditions decisionConditions;
result = decisionCycleHelper.GetConditions(
decisionCycleEvents,
decisionPoiEvents,
decisionConditions,
zIndex,
loopback //
);
if (!result)
{
return result;
}
//
// Analyse ...
ENUM_XPOI_EVENTS analysePoiEvents[];
ENUM_X_CYCLE_EVENTS analyseCycleEvents[];
X121SMCCycleConditions analyseConditions;
result = analyseCycleHelper.GetConditions(
analyseCycleEvents,
analysePoiEvents,
analyseConditions,
zIndex,
loopback //
);
if (!result)
{
return result;
}
//
// Verification ...
ENUM_XPOI_EVENTS verificationPoiEvents[];
ENUM_X_CYCLE_EVENTS verificationCycleEvents[];
X121SMCCycleConditions verificationConditions;
result = verificationCycleHelper.GetConditions(
verificationCycleEvents,
verificationPoiEvents,
verificationConditions,
zIndex,
loopback //
);
if (!result)
{
return result;
}
//
// Consolidation ...
ENUM_XPOI_EVENTS consolidationPoiEvents[];
ENUM_X_CYCLE_EVENTS consolidationCycleEvents[];
X121SMCCycleConditions consolidationConditions;
result = consolidationCycleHelper.GetConditions(
consolidationCycleEvents,
consolidationPoiEvents,
consolidationConditions,
zIndex,
loopback //
);
if (!result)
{
return result;
}
//
// Vision ...
ENUM_XPOI_EVENTS visionPoiEvents[];
ENUM_X_CYCLE_EVENTS visionCycleEvents[];
X121SMCCycleConditions visionConditions;
result = visionCycleHelper.GetConditions(
visionCycleEvents,
visionPoiEvents,
visionConditions,
zIndex,
loopback //
);
if (!result)
{
return result;
}
//
// Cycles POI States ...
XPOIState triggerState = triggerConditions.state;
XPOIState decisionState = decisionConditions.state;
XPOIState analyseState = analyseConditions.state;
XPOIState verificationState = verificationConditions.state;
XPOIState consolidationState = consolidationConditions.state;
XPOIState visionState = visionConditions.state;
//
result = false;
//
return result;
}
//
// Tools Functions ...
//
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,787 @@
///////////////////////////////////////////////////////
//
// SaherElm IT Center MQL5 X121 SMC Signal Class
// -------------------------------------------------
// Name:
// Description: provide all Signalling functions ...
//
//
// 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-121.smc.market.cycle.helper.class.mq5"
#include "../Libraries/x-121.smc.lib.mq5"
//
// Definitions ...
struct X121SMCStrategyTestSignalConditions
{
//
// Props ...
//
string symbol;
ENUM_TIMEFRAMES period;
//
double sl;
ENUM_X_DIRECTION dir;
ENUM_X_POSITION_TYPES type;
//
// Setup Props ...
//
datetime setupTime;
datetime triggerTime;
//
XPVPivot pivot;
//
// Trigger Props ...
//
// Constructor ...
X121SMCStrategyTestSignalConditions()
{
Clean();
}
//
// Tools ...
/**
* Cleaning Up ...
*/
void Clean()
{
//
sl = 0;
//
dir = X_DIRECTION_NONE;
type = X_POSITION_TYPE_NONE;
//
symbol = NULL;
period = NULL;
setupTime = NULL;
triggerTime = NULL;
//
pivot.Clean();
}
/**
* Check Condition is Setting Up ...
*
* @param dir: ENUM_X_DIRECTION member, Setting Up Direction ...
*
* @return ( bool )
*/
bool IsSetuped()
{
//
bool result = false;
//
result = IsValid(setupTime) &&
HasDirection(dir);
if (!result)
{
return result;
}
//
return result;
}
/**
* Detect How we Can Trigger Signal ...
*
* @return ( bool )
*/
bool CanTrigger()
{
//
bool result = false;
//
result =
//
sl > 0 &&
IsValid(symbol) &&
IsValid(period) &&
IsValid(triggerTime) &&
type != X_POSITION_TYPE_ALL &&
type != X_POSITION_TYPE_NONE
//
;
//
return result;
}
//
// Extensions ...
//
};
//
// Extension Functions ...
//
// Detect Setup Conditions ...
bool DetectX121SMCTestSiganlSetup(
string _symbol,
ENUM_TIMEFRAMES _period,
//
X121SMCStrategyTestSignalConditions &conditions,
//
XC121SMCCycleHelper *triggerCycleHelper,
XC121SMCCycleHelper *decisionCycleHelper,
XC121SMCCycleHelper *analyseCycleHelper,
XC121SMCCycleHelper *verificationCycleHelper,
XC121SMCCycleHelper *consolidationCycleHelper,
XC121SMCCycleHelper *visionCycleHelper
//
)
{
//
bool result = false;
//
bool isBullish = false;
bool isBearish = false;
//
int zIndex = 0;
int cIndex = zIndex + 1;
int pIndex = cIndex + 1;
int ppIndex = pIndex + 1;
//
int loopback = 10;
//
string symbol = _symbol;
ENUM_TIMEFRAMES period = _period;
//
conditions.symbol = symbol;
conditions.period = period;
//
XOHCL zBar;
result = zBar.Init(
symbol,
period,
zIndex //
);
if (!result)
{
return result;
}
//
XOHCL cBar;
result = cBar.Init(
symbol,
period,
cIndex //
);
if (!result)
{
return result;
}
//
double ask = GetAsk(symbol);
double bid = GetBid(symbol);
datetime cTime = TimeCurrent();
//
double ll = cBar.FindLowest(9, MODE_LOW);
double hh = cBar.FindHighest(9, MODE_HIGH);
//
int zoneValidationDivider = 10;
int validPivotRepetition = triggerCycleHelper.mX121Helper
.GetDonChainLength();
//
double selectedSL = 0;
//
// Cycles Conditions ...
//
// Trigger ...
ENUM_XPOI_EVENTS triggerPoiEvents[];
ENUM_X_CYCLE_EVENTS triggerCycleEvents[];
X121SMCCycleConditions triggerConditions;
result = triggerCycleHelper.GetConditions(
triggerCycleEvents,
triggerPoiEvents,
triggerConditions,
zIndex,
loopback //
);
if (!result)
{
return result;
}
//
// Decision ...
ENUM_XPOI_EVENTS decisionPoiEvents[];
ENUM_X_CYCLE_EVENTS decisionCycleEvents[];
X121SMCCycleConditions decisionConditions;
result = decisionCycleHelper.GetConditions(
decisionCycleEvents,
decisionPoiEvents,
decisionConditions,
zIndex,
loopback //
);
if (!result)
{
return result;
}
//
// Analyse ...
ENUM_XPOI_EVENTS analysePoiEvents[];
ENUM_X_CYCLE_EVENTS analyseCycleEvents[];
X121SMCCycleConditions analyseConditions;
result = analyseCycleHelper.GetConditions(
analyseCycleEvents,
analysePoiEvents,
analyseConditions,
zIndex,
loopback //
);
if (!result)
{
return result;
}
//
// Verification ...
ENUM_XPOI_EVENTS verificationPoiEvents[];
ENUM_X_CYCLE_EVENTS verificationCycleEvents[];
X121SMCCycleConditions verificationConditions;
result = verificationCycleHelper.GetConditions(
verificationCycleEvents,
verificationPoiEvents,
verificationConditions,
zIndex,
loopback //
);
if (!result)
{
return result;
}
//
// Consolidation ...
ENUM_XPOI_EVENTS consolidationPoiEvents[];
ENUM_X_CYCLE_EVENTS consolidationCycleEvents[];
X121SMCCycleConditions consolidationConditions;
result = consolidationCycleHelper.GetConditions(
consolidationCycleEvents,
consolidationPoiEvents,
consolidationConditions,
zIndex,
loopback //
);
if (!result)
{
return result;
}
//
// Vision ...
ENUM_XPOI_EVENTS visionPoiEvents[];
ENUM_X_CYCLE_EVENTS visionCycleEvents[];
X121SMCCycleConditions visionConditions;
result = visionCycleHelper.GetConditions(
visionCycleEvents,
visionPoiEvents,
visionConditions,
zIndex,
loopback //
);
if (!result)
{
return result;
}
//
// Cycles POI States ...
XPOIState triggerState = triggerConditions.state;
XPOIState decisionState = decisionConditions.state;
XPOIState analyseState = analyseConditions.state;
XPOIState verificationState = verificationConditions.state;
XPOIState consolidationState = consolidationConditions.state;
XPOIState visionState = visionConditions.state;
//
// Check Order Block ...
// TODO: Later ...
// bool hasOrderBlock = conditions.HasOrderBlock();
// if (hasOrderBlock)
// {
// //
// DetectX121SMCTestSiganlOrderBlock(
// zBar,
// consolidationState,
// conditions //
// );
// }
//
bool isMarketBullish =
//
// VWap State ...
decisionConditions.x121Conditions.isVWapBullishState &&
analyseConditions.x121Conditions.isVWapBullishState &&
verificationConditions.x121Conditions.isVWapBullishState
//
&&
//
// VWap Order ...
decisionConditions.x121Conditions.isVWapBullishOrdered &&
analyseConditions.x121Conditions.isVWapBullishOrdered &&
verificationConditions.x121Conditions.isVWapBullishOrdered
//
&&
//
// Sar ...
decisionConditions.x121Conditions.isSarBullish &&
analyseConditions.x121Conditions.isSarBullish &&
verificationConditions.x121Conditions.isSarBullish
//
;
//
bool isMarketBearish =
//
// VWap State ...
decisionConditions.x121Conditions.isVWapBearishState &&
analyseConditions.x121Conditions.isVWapBearishState &&
verificationConditions.x121Conditions.isVWapBearishState
//
&&
//
// VWap Order ...
decisionConditions.x121Conditions.isVWapBearishOrdered &&
analyseConditions.x121Conditions.isVWapBearishOrdered &&
verificationConditions.x121Conditions.isVWapBearishOrdered
//
&&
//
// Sar ...
decisionConditions.x121Conditions.isSarBearish &&
analyseConditions.x121Conditions.isSarBearish &&
verificationConditions.x121Conditions.isSarBearish
//
;
//
// Step 1
// Detect Market Direction ...
isBullish = isMarketBullish;
isBearish = isMarketBearish;
//
result = isBullish ||
isBearish;
if (!result)
{
return result;
}
//
// Step 2
// VWap Switches or Sar Switches ...
//
bool isSarBullish = triggerConditions.x121Conditions.isSarBullish;
bool isSarBearish = triggerConditions.x121Conditions.isSarBearish;
//
bool isSarSwitchedToBullish = triggerConditions.x121Conditions.isSarSwitchedToBullish;
bool isSarSwitchedToBearish = triggerConditions.x121Conditions.isSarSwitchedToBearish;
//
bool isVWapBullishState = triggerConditions.x121Conditions.isVWapBullishState;
bool isVWapBearishState = triggerConditions.x121Conditions.isVWapBearishState;
//
bool isVWapSwitchedToBullishState = triggerConditions.x121Conditions.isVWapSwitchedToBullishState;
bool isVWapSwitchedToBearishState = triggerConditions.x121Conditions.isVWapSwitchedToBearishState;
//
bool isVWapBullishOrdered = triggerConditions.x121Conditions.isVWapBullishOrdered;
bool isVWapBearishOrdered = triggerConditions.x121Conditions.isVWapBearishOrdered;
//
bool isVWapSwitchedToBullishOrdered = triggerConditions.x121Conditions.isVWapSwitchedToBullishOrdered;
bool isVWapSwitchedToBearishOrdered = triggerConditions.x121Conditions.isVWapSwitchedToBearishOrdered;
//
//
//
//
bool isSarStartedBullishStructure =
//
isSarSwitchedToBullish &&
isVWapBullishState &&
isVWapBullishOrdered
//
;
//
bool isSarStartedBearishStructure =
//
isSarSwitchedToBearish &&
isVWapBearishState &&
isVWapBearishOrdered
//
;
//
//
//
//
bool isVWapStateStartedBullishStructure =
//
isVWapSwitchedToBullishState &&
isSarBullish &&
isVWapBullishOrdered
//
;
//
bool isVWapStateStartedBearishStructure =
//
isVWapSwitchedToBearishState &&
isSarBearish &&
isVWapBearishOrdered
//
;
//
//
//
//
bool isVWapOrderStartedBullishStructure =
//
isVWapSwitchedToBullishOrdered &&
isSarBullish &&
isVWapBullishState
//
;
//
bool isVWapOrderStartedBearishStructure =
//
isVWapSwitchedToBearishOrdered &&
isSarBearish &&
isVWapBearishState
//
;
//
//
//
//
isBullish =
//
isBullish
//
&&
//
(
//
isSarStartedBullishStructure ||
isVWapStateStartedBullishStructure ||
isVWapOrderStartedBullishStructure
//
)
//
;
//
isBearish =
//
isBearish
//
&&
//
(
//
isSarStartedBearishStructure ||
isVWapStateStartedBearishStructure ||
isVWapOrderStartedBearishStructure
//
)
//
;
//
result = isBullish ||
isBearish;
if (!result)
{
return result;
}
//
conditions.setupTime = cTime;
conditions.dir =
isBullish
? X_DIRECTION_BULLISH
: X_DIRECTION_BEARISH;
//
return result;
}
//
// Detect Trigger Conditions ...
bool DetectX121SMCTestSiganlTrigger(
//
X121SMCStrategyTestSignalConditions &conditions,
//
string _symbol,
ENUM_TIMEFRAMES _period,
//
XC121SMCCycleHelper *triggerCycleHelper,
XC121SMCCycleHelper *decisionCycleHelper,
XC121SMCCycleHelper *analyseCycleHelper,
XC121SMCCycleHelper *verificationCycleHelper,
XC121SMCCycleHelper *consolidationCycleHelper,
XC121SMCCycleHelper *visionCycleHelper
//
)
{
//
bool result = false;
//
result = conditions.IsSetuped();
if (!result)
{
return result;
}
//
ENUM_X_DIRECTION setupDir = conditions.dir;
//
bool isBullish = false;
bool isBearish = false;
//
int zIndex = 0;
int cIndex = zIndex + 1;
int pIndex = cIndex + 1;
int ppIndex = pIndex + 1;
//
int loopback = 10;
//
ENUM_X_121_SMC_PROVIDERS provider = X_121_SMC_PROVIDER_SMPV;
string providerStr = ToString(provider);
//
string symbol = _symbol;
ENUM_TIMEFRAMES period = _period;
//
XOHCL zBar;
result = zBar.Init(
symbol,
period,
zIndex //
);
if (!result)
{
return result;
}
//
XOHCL cBar;
result = cBar.Init(
symbol,
period,
cIndex //
);
if (!result)
{
return result;
}
//
double ask = GetAsk(symbol);
double bid = GetBid(symbol);
datetime cTime = TimeCurrent();
//
double ll = cBar.FindLowest(9, MODE_LOW);
double hh = cBar.FindHighest(9, MODE_HIGH);
//
int zoneValidationDivider = 10;
int validPivotRepetition = triggerCycleHelper.mX121Helper
.GetDonChainLength();
//
double selectedSL = 0;
//
// Cycles Conditions ...
//
// Trigger ...
ENUM_XPOI_EVENTS triggerPoiEvents[];
ENUM_X_CYCLE_EVENTS triggerCycleEvents[];
X121SMCCycleConditions triggerConditions;
result = triggerCycleHelper.GetConditions(
triggerCycleEvents,
triggerPoiEvents,
triggerConditions,
zIndex,
loopback //
);
if (!result)
{
return result;
}
//
// Decision ...
ENUM_XPOI_EVENTS decisionPoiEvents[];
ENUM_X_CYCLE_EVENTS decisionCycleEvents[];
X121SMCCycleConditions decisionConditions;
result = decisionCycleHelper.GetConditions(
decisionCycleEvents,
decisionPoiEvents,
decisionConditions,
zIndex,
loopback //
);
if (!result)
{
return result;
}
//
// Analyse ...
ENUM_XPOI_EVENTS analysePoiEvents[];
ENUM_X_CYCLE_EVENTS analyseCycleEvents[];
X121SMCCycleConditions analyseConditions;
result = analyseCycleHelper.GetConditions(
analyseCycleEvents,
analysePoiEvents,
analyseConditions,
zIndex,
loopback //
);
if (!result)
{
return result;
}
//
// Verification ...
ENUM_XPOI_EVENTS verificationPoiEvents[];
ENUM_X_CYCLE_EVENTS verificationCycleEvents[];
X121SMCCycleConditions verificationConditions;
result = verificationCycleHelper.GetConditions(
verificationCycleEvents,
verificationPoiEvents,
verificationConditions,
zIndex,
loopback //
);
if (!result)
{
return result;
}
//
// Consolidation ...
ENUM_XPOI_EVENTS consolidationPoiEvents[];
ENUM_X_CYCLE_EVENTS consolidationCycleEvents[];
X121SMCCycleConditions consolidationConditions;
result = consolidationCycleHelper.GetConditions(
consolidationCycleEvents,
consolidationPoiEvents,
consolidationConditions,
zIndex,
loopback //
);
if (!result)
{
return result;
}
//
// Vision ...
ENUM_XPOI_EVENTS visionPoiEvents[];
ENUM_X_CYCLE_EVENTS visionCycleEvents[];
X121SMCCycleConditions visionConditions;
result = visionCycleHelper.GetConditions(
visionCycleEvents,
visionPoiEvents,
visionConditions,
zIndex,
loopback //
);
if (!result)
{
return result;
}
//
// Cycles POI States ...
XPOIState triggerState = triggerConditions.state;
XPOIState decisionState = decisionConditions.state;
XPOIState analyseState = analyseConditions.state;
XPOIState verificationState = verificationConditions.state;
XPOIState consolidationState = consolidationConditions.state;
XPOIState visionState = visionConditions.state;
//
result = false;
//
return result;
}
//
// Tools Functions ...
//
+1 -1
View File
@@ -44,7 +44,7 @@ input string eaSymbols = "EURUSDb,GBPUSDb,USDJPYb,USDCHFb"; // Trading Symbols
// //
// Volume ... // Volume ...
input group "Volume"; input group "Volume";
input double eaR2R = 2; // Risk to Reward Ratio input double eaR2R = 3.0; // Risk to Reward Ratio
input bool eaUseDynamicVolume = false; // Use Dynamic Volume input bool eaUseDynamicVolume = false; // Use Dynamic Volume
input double eaDynamicVolumeStep = 0.01; // Increase Volume Step input double eaDynamicVolumeStep = 0.01; // Increase Volume Step
input double eaDynamicVolumeBalanceFactor = 200; // Balance Factor for Generate Dynamic Volume input double eaDynamicVolumeBalanceFactor = 200; // Balance Factor for Generate Dynamic Volume
+40
View File
@@ -275,6 +275,46 @@ class XCZone : public XCBasePOI
return mLower; return mLower;
} }
/**
* Retrieve Zone Range ...
*
* @return ( double )
*/
double Range()
{
//
double result = 0;
//
double upper = Upper();
double lower = Lower();
//
if (upper > 0 && lower > 0 && upper > lower)
{
result = upper - lower;
}
//
return result;
}
double RangePercent()
{
//
double result = 0;
//
double range = Range();
if (range > 0)
{
result = range / 100;
}
//
return result;
}
// //
// Virtuals ... // Virtuals ...
@@ -1941,145 +1941,67 @@ class XC121SMCCycleHelper : public XCBase
} }
} }
// // //
// Calculate Pivots ... // // Calculate Pivots ...
if (isNewPeak || isNewVale) // if (isNewPeak || isNewVale)
{ // {
// // //
mActivePivot.symbol = symbol; // if (!mActivePivot.IsValid())
mActivePivot.period = period; // {
// //
// mActivePivot.symbol = symbol;
// mActivePivot.period = period;
// // //
if (!IsValid(mActivePivot.from)) // mActivePivot.upper = peak;
{ // mActivePivot.lower = vale;
//
mActivePivot.from = cTime;
// // //
Add( // mActivePivot.from = cTime;
PIVOT_STARTED, // mActivePivot.to = cTime;
events //
);
}
mActivePivot.to = cTime;
// // //
if (mActivePivot.upper <= 0) // mActivePivot.type =
{ // isNewPeak
// // ? XPV_VALE
if (isNewPeakUnderLast) // : XPV_PEAK;
{ // mActivePivot.repetition++;
mActivePivot.upper = conditions.x121Conditions.peaksBuffer[1];
}
else
{
mActivePivot.upper = conditions.x121Conditions.peaksBuffer[1];
}
}
// // //
if (mActivePivot.lower <= 0) // Add(
{ // PIVOT_STARTED,
// // events //
if (isNewValeOverLast) // );
{ // }
mActivePivot.lower = conditions.x121Conditions.valesBuffer[1]; // else
} // {
else // //
{ // mActivePivot.to = cTime;
mActivePivot.lower = conditions.x121Conditions.valesBuffer[1];
}
}
// // //
mActivePivot.type = // mActivePivot.repetition++;
isNewPeak
? XPV_VALE
: XPV_PEAK;
mActivePivot.repetition++;
// // //
if (mActivePivot.to > mActivePivot.from) // if (mActivePivot.to > mActivePivot.from)
{ // {
// // FillPivotState(mActivePivot);
FillPivotState(mActivePivot); // }
// // //
// Check Active Pivot has State and Ticks Zone ... // // Check Ticks Zone is Valid ...
if (mActivePivot.state.IsValid() && // bool isTicksZoneValid =
mActivePivot.state.ticksZone != NULL && // //
mActivePivot.state.ticksZone.IsValid()) // mActivePivot.state.IsValid() &&
{ // mActivePivot.state.ticksZone != NULL &&
// // mActivePivot.state.ticksZone.IsValid()
// Here We Have to Calculate Ticks Level Volume and Percents ... // //
// Liquidity ... // ;
// if (isTicksZoneValid) {
// // //
// Select Current TickZone which Price is Inside ... // Print("Has Valid Ticks Zone ...");
int cTZoneIDX = -1; // }
int count = mActivePivot.state.ticksZone.Count(); // }
if (IsValidSize(count)) // }
{
//
for (int i = 0; i < count; i++)
{
//
XCTickZone *iTZ = mActivePivot.state.ticksZone.GetZone(i);
//
double pivot =
isNewPeak
? peak
: vale;
bool isPivotInsideZone =
pivot >= iTZ.low &&
pivot <= iTZ.high;
if (isPivotInsideZone)
{
//
cTZoneIDX = i;
break;
}
//
bool isBarInside =
changeBar.low >= iTZ.low &&
changeBar.high <= iTZ.high;
// if (isBarInside)
// {
// //
// cTZoneIDX = i;
// break;
// }
}
//
// Last Zone ...
// We Can Break Active Zone ...
if (IsValidIndex(cTZoneIDX) && cTZoneIDX == count - 1)
{
//
Print("ZoneIndex: ", cTZoneIDX);
//
AddRef(
mActivePivot,
mPivots //
);
//
Add(
PIVOT_ENDED,
events //
);
//
mActivePivot.Clean();
}
}
}
}
}
} }
// //
File diff suppressed because it is too large Load Diff
@@ -487,6 +487,23 @@ class XCX121SMCTestStrategy : public XCX121SMCBaseStrategy
} }
conditions.visionConditions.state = mVisionState; conditions.visionConditions.state = mVisionState;
// //
// XPVPivot triggerPivot;
// mTriggerCycleHelper.GetActivePivot(triggerPivot);
// result = triggerPivot.IsValid();
// if (!result)
// {
// return result;
// }
// //
// ClearDraws();
// DrawPivot(
// triggerPivot,
// true, // Draw State ...
// true // Filter By Price ...
// );
// //
return result; return result;
} }
@@ -520,123 +537,127 @@ class XCX121SMCTestStrategy : public XCX121SMCBaseStrategy
string providerStr = ToString(provider); string providerStr = ToString(provider);
// //
XPVPivot triggerPivot; // Detect Setup Conditions ...
mTriggerCycleHelper.GetActivePivot(triggerPivot); datetime setupTime = mTestConditions.setupTime;
result = triggerPivot.IsValid(); bool isSetuped = mTestConditions.IsSetuped();
ENUM_X_DIRECTION setupDir = mTestConditions.dir;
if (!isSetuped)
{
//
// Detect Signal Setup ...
isSetuped = DetectX121SMCTestSiganlSetup(
symbol,
period,
mTestConditions,
mTriggerCycleHelper,
mDecisionCycleHelper,
mAnalyseCycleHelper,
mVerificationCycleHelper,
mConsolidationCycleHelper,
mVisionCycleHelper //
);
//
result = isSetuped;
if (!result)
{
return result;
}
//
setupDir = mTestConditions.dir;
setupTime = mTestConditions.setupTime;
}
//
// Draw Conditions Active FVG ...
if (isSetuped)
{
//
XCFVG *iFVG = mTestConditions.activeFVG;
if (iFVG != NULL && iFVG.IsValid())
{
//
ClearDraws();
iFVG.To(cTime);
if (IsBullish(setupDir) && iFVG.IsBullish())
{
//
XCBullishFairValueGapObject *iObj;
bool isCreated = mPOIDrawer.CreateBullishFairValueGap(
iFVG,
iObj //
);
if (isCreated)
{
AddObjectIfNotExists(iObj);
}
}
else if (IsBearish(setupDir) && iFVG.IsBearish())
{
//
XCBearishFairValueGapObject *iObj;
bool isCreated = mPOIDrawer.CreateBearishFairValueGap(
iFVG,
iObj //
);
if (isCreated)
{
AddObjectIfNotExists(iObj);
}
}
}
}
//
// Detect Trigger Conditions ...
bool canTrigger = mTestConditions.CanTrigger();
datetime triggerTime = mTestConditions.triggerTime;
if (!canTrigger)
{
//
// Detect Signal Trigger ...
canTrigger = DetectX121SMCTestSiganlTrigger(
mTestConditions,
symbol,
period,
mTriggerCycleHelper,
mDecisionCycleHelper,
mAnalyseCycleHelper,
mVerificationCycleHelper,
mConsolidationCycleHelper,
mVisionCycleHelper //
);
//
result = canTrigger;
if (!result)
{
return result;
}
//
triggerTime = mTestConditions.triggerTime;
}
//
// Check Signal Direction ...
//
isBullish = IsBullish(setupDir);
isBearish = IsBearish(setupDir);
result = isBullish ||
isBearish;
if (!result) if (!result)
{ {
return result; return result;
} }
// //
ClearDraws(); // Issues Signal on Conditions ...
DrawPivot( conditions.signalDir = setupDir;
triggerPivot, conditions.provider = providerStr;
true, // Draw State ... conditions.sl = mTestConditions.sl;
true // Filter By Price ...
);
//
// Detect Setup Conditions ...
// datetime setupTime = mTestConditions.setupTime;
// bool isSetuped = mTestConditions.IsSetuped();
// ENUM_X_DIRECTION setupDir = mTestConditions.dir;
// if (!isSetuped)
// {
// //
// // Detect Signal Setup ...
// isSetuped = DetectX121SMCTestSiganlSetup(
// symbol,
// period,
// mTestConditions,
// mTriggerCycleHelper,
// mDecisionCycleHelper,
// mAnalyseCycleHelper,
// mVerificationCycleHelper,
// mConsolidationCycleHelper,
// mVisionCycleHelper //
// );
// //
// result = isSetuped;
// if (!result)
// {
// return result;
// }
// //
// setupTime = mTestConditions.setupTime;
// }
// //
// ClearDraws();
// CustomStateDrawing(
// mTriggerState,
// true // Filter By Price ...
// );
//
// Detect Trigger Conditions ...
// bool canTrigger = mTestConditions.CanTrigger();
// datetime triggerTime = mTestConditions.triggerTime;
// result = canTrigger;
// if (!canTrigger)
// {
// //
// // Detect Signal Trigger ...
// canTrigger = DetectX121SMCTestSiganlTrigger(
// mTestConditions,
// symbol,
// period,
// mTriggerCycleHelper,
// mDecisionCycleHelper,
// mAnalyseCycleHelper,
// mVerificationCycleHelper,
// mConsolidationCycleHelper,
// mVisionCycleHelper //
// );
// //
// result = canTrigger;
// if (!result)
// {
// return result;
// }
// //
// triggerTime = mTestConditions.triggerTime;
// }
//
// Check Signal Direction ...
// //
// isBullish = IsBullish(setupDir);
// isBearish = IsBearish(setupDir);
//
// result = isBullish ||
// isBearish;
// if (!result)
// {
// return result;
// }
// //
// if (cTime - setupTime > 2400)
// {
// //
// ClearDraws();
// //
// mTestConditions.Clean();
// }
// //
// // Issues Signal on Conditions ...
// conditions.signalDir = setupDir;
// conditions.provider = providerStr;
// conditions.sl = mTestConditions.sl;
// //
mTestConditions.Clean(); mTestConditions.Clean();