cleanup workspace ...
This commit is contained in:
File diff suppressed because it is too large
Load Diff
@@ -1,831 +0,0 @@
|
|||||||
///////////////////////////////////////////////////////
|
|
||||||
//
|
|
||||||
// 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
@@ -1,75 +0,0 @@
|
|||||||
//
|
|
||||||
// Decision ...
|
|
||||||
|
|
||||||
//
|
|
||||||
// Peak ...
|
|
||||||
bool isDecisionNewPeak = decisionConditions.x121Conditions.isNewPeak;
|
|
||||||
bool isDecisionNewPeakOverLast = decisionConditions.x121Conditions.isNewPeakOverLast;
|
|
||||||
bool isDecisionNewPeakUnderLast = decisionConditions.x121Conditions.isNewPeakUnderLast;
|
|
||||||
double decisionPeak = decisionConditions.x121Conditions.peaksBuffer[1];
|
|
||||||
XPVPivotPoint decisionPeakPivots[];
|
|
||||||
XPVPivotPoint decisionLastPeakPivot;
|
|
||||||
XPVPivotPoint decisionPrevPeakPivot;
|
|
||||||
int decisionPeakPivotsCount = decisionCycleHelper
|
|
||||||
.FillPeakPivotPoints(decisionPeakPivots);
|
|
||||||
bool hasDecisionPeak = decisionPeakPivotsCount >= 2;
|
|
||||||
if (hasDecisionPeak)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
decisionLastPeakPivot = decisionPeakPivots[decisionPeakPivotsCount - 1];
|
|
||||||
decisionPrevPeakPivot = decisionPeakPivots[decisionPeakPivotsCount - 2];
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// Vale ...
|
|
||||||
bool isDecisionNewVale = decisionConditions.x121Conditions.isNewVale;
|
|
||||||
bool isDecisionNewValeOverLast = decisionConditions.x121Conditions.isNewValeOverLast;
|
|
||||||
bool isDecisionNewValeUnderLast = decisionConditions.x121Conditions.isNewValeUnderLast;
|
|
||||||
double decisionVale = decisionConditions.x121Conditions.valesBuffer[1];
|
|
||||||
XPVPivotPoint decisionValePivots[];
|
|
||||||
XPVPivotPoint decisionLastValePivot;
|
|
||||||
XPVPivotPoint decisionPrevValePivot;
|
|
||||||
int decisionValePivotsCount = decisionCycleHelper
|
|
||||||
.FillValePivotPoints(decisionValePivots);
|
|
||||||
bool hasDecisionVale = decisionValePivotsCount >= 2;
|
|
||||||
if (hasDecisionVale)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
decisionLastValePivot = decisionValePivots[decisionValePivotsCount - 1];
|
|
||||||
decisionPrevValePivot = decisionValePivots[decisionValePivotsCount - 2];
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
bool isDecisionBullish =
|
|
||||||
//
|
|
||||||
hasDecisionVale &&
|
|
||||||
isDecisionNewVale &&
|
|
||||||
isDecisionNewValeUnderLast &&
|
|
||||||
decisionLastValePivot.value > decisionPrevValePivot.value
|
|
||||||
//
|
|
||||||
;
|
|
||||||
|
|
||||||
//
|
|
||||||
bool isDecisionBearish =
|
|
||||||
//
|
|
||||||
false &&
|
|
||||||
hasDecisionPeak &&
|
|
||||||
decisionLastPeakPivot.value
|
|
||||||
//
|
|
||||||
;
|
|
||||||
|
|
||||||
//
|
|
||||||
if (isDecisionBullish ||
|
|
||||||
isDecisionBearish)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
conditions.pivot =
|
|
||||||
isDecisionBullish
|
|
||||||
? decisionVale
|
|
||||||
: decisionPeak;
|
|
||||||
conditions.dir =
|
|
||||||
isDecisionBullish
|
|
||||||
? X_DIRECTION_BULLISH
|
|
||||||
: X_DIRECTION_BEARISH;
|
|
||||||
conditions.cycle = X_CYCLE_DECISION;
|
|
||||||
}
|
|
||||||
@@ -1,830 +0,0 @@
|
|||||||
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////
|
|
||||||
//
|
|
||||||
// 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;
|
|
||||||
|
|
||||||
//
|
|
||||||
// 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;
|
|
||||||
|
|
||||||
//
|
|
||||||
ExtensionClean();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 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;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Calculate Setup Age ...
|
|
||||||
*
|
|
||||||
* @return ( int )
|
|
||||||
*/
|
|
||||||
int GetSetupAge()
|
|
||||||
{
|
|
||||||
//
|
|
||||||
int result = 0;
|
|
||||||
|
|
||||||
//
|
|
||||||
if (!IsSetuped())
|
|
||||||
{
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
result = (int)(TimeCurrent() - setupTime) / PeriodSeconds(period);
|
|
||||||
|
|
||||||
//
|
|
||||||
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 ...
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Clean Additional Properties ...
|
|
||||||
*/
|
|
||||||
void ExtensionClean()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
};
|
|
||||||
|
|
||||||
//
|
|
||||||
// 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;
|
|
||||||
|
|
||||||
//
|
|
||||||
// Setup Conditions ...
|
|
||||||
|
|
||||||
//
|
|
||||||
isBullish =
|
|
||||||
//
|
|
||||||
false
|
|
||||||
//
|
|
||||||
;
|
|
||||||
|
|
||||||
//
|
|
||||||
isBearish =
|
|
||||||
//
|
|
||||||
false
|
|
||||||
//
|
|
||||||
;
|
|
||||||
|
|
||||||
//
|
|
||||||
result = isBullish ||
|
|
||||||
isBearish;
|
|
||||||
if (!result)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
// Clean Conditions for Regenerate ...
|
|
||||||
|
|
||||||
//
|
|
||||||
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,
|
|
||||||
//
|
|
||||||
int maxAllowedSetupAge = 60 //
|
|
||||||
//
|
|
||||||
)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
bool result = false;
|
|
||||||
|
|
||||||
//
|
|
||||||
result = conditions.IsSetuped();
|
|
||||||
if (!result)
|
|
||||||
{
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
datetime setupTime = conditions.setupTime;
|
|
||||||
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;
|
|
||||||
|
|
||||||
//
|
|
||||||
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;
|
|
||||||
|
|
||||||
//
|
|
||||||
// Trigger Conditions ...
|
|
||||||
|
|
||||||
//
|
|
||||||
isBullish =
|
|
||||||
//
|
|
||||||
false
|
|
||||||
//
|
|
||||||
;
|
|
||||||
|
|
||||||
//
|
|
||||||
isBearish =
|
|
||||||
//
|
|
||||||
false
|
|
||||||
//
|
|
||||||
;
|
|
||||||
|
|
||||||
//
|
|
||||||
result = isBullish ||
|
|
||||||
isBearish;
|
|
||||||
if (!result)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
// Cleanup Setup Conditions ...
|
|
||||||
|
|
||||||
//
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
conditions.triggerTime = cTime;
|
|
||||||
conditions.sl = isBullish
|
|
||||||
? 0
|
|
||||||
: 0;
|
|
||||||
conditions.type = isBullish
|
|
||||||
? X_POSITION_TYPE_LONG
|
|
||||||
: X_POSITION_TYPE_SHORT;
|
|
||||||
|
|
||||||
//
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
|
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
|
|
||||||
//
|
|
||||||
// Test Signal ...
|
|
||||||
X121SMCStrategyTestSignalConditions mTestConditions;
|
|
||||||
bool DetectTestSignal(
|
|
||||||
X121SMCStrategyConditions &conditions //
|
|
||||||
)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
bool result = false;
|
|
||||||
|
|
||||||
//
|
|
||||||
bool isBullish = false;
|
|
||||||
bool isBearish = false;
|
|
||||||
|
|
||||||
//
|
|
||||||
string symbol = GetSymbol();
|
|
||||||
ENUM_TIMEFRAMES period = GetPeriod();
|
|
||||||
|
|
||||||
//
|
|
||||||
datetime cTime = TimeCurrent();
|
|
||||||
|
|
||||||
//
|
|
||||||
ENUM_X_121_SMC_PROVIDERS provider = X_121_SMC_PROVIDER_XTEST;
|
|
||||||
string providerStr = ToString(provider);
|
|
||||||
|
|
||||||
//
|
|
||||||
// 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 //
|
|
||||||
);
|
|
||||||
|
|
||||||
//
|
|
||||||
setupDir = mTestConditions.dir;
|
|
||||||
setupTime = mTestConditions.setupTime;
|
|
||||||
}
|
|
||||||
|
|
||||||
// ClearDraws();
|
|
||||||
// ENUM_X_DIRECTION activeZoneDir;
|
|
||||||
// bool hasTicksZone = mTestConditions.HasTicksZone();
|
|
||||||
// bool hasActiveZone = mTestConditions.HasActiveZone(activeZoneDir);
|
|
||||||
// if (hasActiveZone)
|
|
||||||
// {
|
|
||||||
// //
|
|
||||||
// if (IsBullish(activeZoneDir))
|
|
||||||
// {
|
|
||||||
// //
|
|
||||||
// mTestConditions.activeDemandZone.To(cTime);
|
|
||||||
// XCDemandZoneObject *iObj;
|
|
||||||
// bool isCreated = mPOIDrawer.CreateDemandZone(
|
|
||||||
// mTestConditions.activeDemandZone,
|
|
||||||
// iObj //
|
|
||||||
// );
|
|
||||||
// if (isCreated)
|
|
||||||
// {
|
|
||||||
// AddObjectIfNotExists(iObj);
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// else
|
|
||||||
// {
|
|
||||||
// //
|
|
||||||
// mTestConditions.activeSupplyZone.To(cTime);
|
|
||||||
// XCSupplyZoneObject *iObj;
|
|
||||||
// bool isCreated = mPOIDrawer.CreateSupplyZone(
|
|
||||||
// mTestConditions.activeSupplyZone,
|
|
||||||
// iObj //
|
|
||||||
// );
|
|
||||||
// if (isCreated)
|
|
||||||
// {
|
|
||||||
// AddObjectIfNotExists(iObj);
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// if (hasTicksZone)
|
|
||||||
// {
|
|
||||||
// //
|
|
||||||
// XCTicksZoneObject *iObj;
|
|
||||||
// bool isCreated = mPOIDrawer.CreateTicksZone(
|
|
||||||
// mTestConditions.ticksZone,
|
|
||||||
// iObj //
|
|
||||||
// );
|
|
||||||
// if (isCreated)
|
|
||||||
// {
|
|
||||||
// AddObjectIfNotExists(iObj);
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
//
|
|
||||||
result = isSetuped;
|
|
||||||
if (!result)
|
|
||||||
{
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// 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)
|
|
||||||
{
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// Issues Signal on Conditions ...
|
|
||||||
conditions.signalDir = setupDir;
|
|
||||||
conditions.provider = providerStr;
|
|
||||||
conditions.sl = mTestConditions.sl;
|
|
||||||
|
|
||||||
//
|
|
||||||
mTestConditions.Clean();
|
|
||||||
|
|
||||||
//
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -1,911 +0,0 @@
|
|||||||
/////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
//
|
|
||||||
// Detect Signal Conditions ...
|
|
||||||
bool hasSignal = false;
|
|
||||||
|
|
||||||
//
|
|
||||||
bool useTestSignal = false;
|
|
||||||
bool useXPVOBSignal = false;
|
|
||||||
bool useXPVDPSignal = false;
|
|
||||||
bool useXVWPBSignal = false;
|
|
||||||
bool useXTWPVSignal = true;
|
|
||||||
bool useXPVSUPDEMSignal = false;
|
|
||||||
|
|
||||||
//
|
|
||||||
bool hasTestSignal = false;
|
|
||||||
bool hasXPVOBSignal = false;
|
|
||||||
bool hasXPVDPSignal = false;
|
|
||||||
bool hasXVWPBSignal = false;
|
|
||||||
bool hasXTWPVSignal = false;
|
|
||||||
bool hasXPVSUPDEMSignal = false;
|
|
||||||
|
|
||||||
//
|
|
||||||
// Test Signal ...
|
|
||||||
if (useTestSignal && !hasSignal)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
hasTestSignal = DetectTestSignal(conditions);
|
|
||||||
hasSignal = hasTestSignal;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// XPVOB Signal ...
|
|
||||||
if (useXPVOBSignal && !hasSignal)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
hasXPVOBSignal = DetectXPVOBSignal(conditions);
|
|
||||||
hasSignal = hasXPVOBSignal;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// XPVDP Signal ...
|
|
||||||
if (useXPVDPSignal && !hasSignal)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
hasXPVDPSignal = DetectXPVDPSignal(conditions);
|
|
||||||
hasSignal = hasXPVDPSignal;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// XVWPB Signal ...
|
|
||||||
if (useXVWPBSignal && !hasSignal)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
hasXVWPBSignal = DetectXVWPBSignal(conditions);
|
|
||||||
hasSignal = hasXVWPBSignal;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// XTWPV Signal ...
|
|
||||||
if (useXTWPVSignal && !hasSignal)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
hasXTWPVSignal = DetectXTWPVSignal(conditions);
|
|
||||||
hasSignal = hasXTWPVSignal;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// XPVSUPDEM Signal ...
|
|
||||||
if (useXPVSUPDEMSignal && !hasSignal)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
hasXPVSUPDEMSignal = DetectXPVSUPDEMSignal(conditions);
|
|
||||||
hasSignal = hasXPVSUPDEMSignal;
|
|
||||||
}
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
|
|
||||||
//
|
|
||||||
// Test Signal ...
|
|
||||||
X121SMCStrategyTestSignalConditions mTestConditions;
|
|
||||||
bool DetectTestSignal(
|
|
||||||
X121SMCStrategyConditions &conditions //
|
|
||||||
)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
bool result = false;
|
|
||||||
|
|
||||||
//
|
|
||||||
bool isBullish = false;
|
|
||||||
bool isBearish = false;
|
|
||||||
|
|
||||||
//
|
|
||||||
string symbol = GetSymbol();
|
|
||||||
ENUM_TIMEFRAMES period = GetPeriod();
|
|
||||||
|
|
||||||
//
|
|
||||||
datetime cTime = TimeCurrent();
|
|
||||||
|
|
||||||
//
|
|
||||||
ENUM_X_121_SMC_PROVIDERS provider = X_121_SMC_PROVIDER_XTEST;
|
|
||||||
string providerStr = ToString(provider);
|
|
||||||
|
|
||||||
//
|
|
||||||
// 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 //
|
|
||||||
);
|
|
||||||
|
|
||||||
//
|
|
||||||
setupDir = mTestConditions.dir;
|
|
||||||
setupTime = mTestConditions.setupTime;
|
|
||||||
}
|
|
||||||
|
|
||||||
// ClearDraws();
|
|
||||||
// ENUM_X_DIRECTION activeZoneDir;
|
|
||||||
// bool hasTicksZone = mTestConditions.HasTicksZone();
|
|
||||||
// bool hasActiveZone = mTestConditions.HasActiveZone(activeZoneDir);
|
|
||||||
// if (hasActiveZone)
|
|
||||||
// {
|
|
||||||
// //
|
|
||||||
// if (IsBullish(activeZoneDir))
|
|
||||||
// {
|
|
||||||
// //
|
|
||||||
// mTestConditions.activeDemandZone.To(cTime);
|
|
||||||
// XCDemandZoneObject *iObj;
|
|
||||||
// bool isCreated = mPOIDrawer.CreateDemandZone(
|
|
||||||
// mTestConditions.activeDemandZone,
|
|
||||||
// iObj //
|
|
||||||
// );
|
|
||||||
// if (isCreated)
|
|
||||||
// {
|
|
||||||
// AddObjectIfNotExists(iObj);
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// else
|
|
||||||
// {
|
|
||||||
// //
|
|
||||||
// mTestConditions.activeSupplyZone.To(cTime);
|
|
||||||
// XCSupplyZoneObject *iObj;
|
|
||||||
// bool isCreated = mPOIDrawer.CreateSupplyZone(
|
|
||||||
// mTestConditions.activeSupplyZone,
|
|
||||||
// iObj //
|
|
||||||
// );
|
|
||||||
// if (isCreated)
|
|
||||||
// {
|
|
||||||
// AddObjectIfNotExists(iObj);
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// if (hasTicksZone)
|
|
||||||
// {
|
|
||||||
// //
|
|
||||||
// XCTicksZoneObject *iObj;
|
|
||||||
// bool isCreated = mPOIDrawer.CreateTicksZone(
|
|
||||||
// mTestConditions.ticksZone,
|
|
||||||
// iObj //
|
|
||||||
// );
|
|
||||||
// if (isCreated)
|
|
||||||
// {
|
|
||||||
// AddObjectIfNotExists(iObj);
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
//
|
|
||||||
result = isSetuped;
|
|
||||||
if (!result)
|
|
||||||
{
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// 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)
|
|
||||||
{
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// Issues Signal on Conditions ...
|
|
||||||
conditions.signalDir = setupDir;
|
|
||||||
conditions.provider = providerStr;
|
|
||||||
conditions.sl = mTestConditions.sl;
|
|
||||||
conditions.target = mTestConditions.target;
|
|
||||||
|
|
||||||
//
|
|
||||||
mTestConditions.Clean();
|
|
||||||
|
|
||||||
//
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// XPVOB Signal ...
|
|
||||||
X121SMCStrategyXPVOBSignalConditions mXPVOBConditions;
|
|
||||||
bool DetectXPVOBSignal(
|
|
||||||
X121SMCStrategyConditions &conditions //
|
|
||||||
)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
bool result = false;
|
|
||||||
|
|
||||||
//
|
|
||||||
bool isBullish = false;
|
|
||||||
bool isBearish = false;
|
|
||||||
|
|
||||||
//
|
|
||||||
string symbol = GetSymbol();
|
|
||||||
ENUM_TIMEFRAMES period = GetPeriod();
|
|
||||||
|
|
||||||
//
|
|
||||||
datetime cTime = TimeCurrent();
|
|
||||||
|
|
||||||
//
|
|
||||||
ENUM_X_121_SMC_PROVIDERS provider = X_121_SMC_PROVIDER_XPVOB;
|
|
||||||
string providerStr = ToString(provider);
|
|
||||||
|
|
||||||
//
|
|
||||||
// Detect Setup Conditions ...
|
|
||||||
datetime setupTime = mXPVOBConditions.setupTime;
|
|
||||||
bool isSetuped = mXPVOBConditions.IsSetuped();
|
|
||||||
ENUM_X_DIRECTION setupDir = mXPVOBConditions.dir;
|
|
||||||
if (!isSetuped)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
// Detect Signal Setup ...
|
|
||||||
isSetuped = DetectX121SMCXPVOBSiganlSetup(
|
|
||||||
symbol,
|
|
||||||
period,
|
|
||||||
mXPVOBConditions,
|
|
||||||
mTriggerCycleHelper,
|
|
||||||
mDecisionCycleHelper,
|
|
||||||
mAnalyseCycleHelper,
|
|
||||||
mVerificationCycleHelper,
|
|
||||||
mConsolidationCycleHelper,
|
|
||||||
mVisionCycleHelper //
|
|
||||||
);
|
|
||||||
|
|
||||||
//
|
|
||||||
result = isSetuped;
|
|
||||||
if (!result)
|
|
||||||
{
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
setupDir = mXPVOBConditions.dir;
|
|
||||||
setupTime = mXPVOBConditions.setupTime;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// Draw Conditions Active FVG ...
|
|
||||||
// if (isSetuped)
|
|
||||||
// {
|
|
||||||
// //
|
|
||||||
// XCFVG *iFVG = mXPVOBConditions.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 = mXPVOBConditions.CanTrigger();
|
|
||||||
datetime triggerTime = mXPVOBConditions.triggerTime;
|
|
||||||
if (!canTrigger)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
// Detect Signal Trigger ...
|
|
||||||
canTrigger = DetectX121SMCXPVOBSiganlTrigger(
|
|
||||||
mXPVOBConditions,
|
|
||||||
symbol,
|
|
||||||
period,
|
|
||||||
mTriggerCycleHelper,
|
|
||||||
mDecisionCycleHelper,
|
|
||||||
mAnalyseCycleHelper,
|
|
||||||
mVerificationCycleHelper,
|
|
||||||
mConsolidationCycleHelper,
|
|
||||||
mVisionCycleHelper //
|
|
||||||
);
|
|
||||||
|
|
||||||
//
|
|
||||||
result = canTrigger;
|
|
||||||
if (!result)
|
|
||||||
{
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
triggerTime = mXPVOBConditions.triggerTime;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// Check Signal Direction ...
|
|
||||||
|
|
||||||
//
|
|
||||||
isBullish = IsBullish(setupDir);
|
|
||||||
isBearish = IsBearish(setupDir);
|
|
||||||
result = isBullish ||
|
|
||||||
isBearish;
|
|
||||||
if (!result)
|
|
||||||
{
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// Issues Signal on Conditions ...
|
|
||||||
conditions.signalDir = setupDir;
|
|
||||||
conditions.provider = providerStr;
|
|
||||||
conditions.sl = mXPVOBConditions.sl;
|
|
||||||
conditions.target = mXPVOBConditions.target;
|
|
||||||
|
|
||||||
//
|
|
||||||
mXPVOBConditions.Clean();
|
|
||||||
|
|
||||||
//
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// XPVDP Signal ...
|
|
||||||
X121SMCStrategyXPVDPSignalConditions mXPVDPConditions;
|
|
||||||
bool DetectXPVDPSignal(
|
|
||||||
X121SMCStrategyConditions &conditions //
|
|
||||||
)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
bool result = false;
|
|
||||||
|
|
||||||
//
|
|
||||||
bool isBullish = false;
|
|
||||||
bool isBearish = false;
|
|
||||||
|
|
||||||
//
|
|
||||||
string symbol = GetSymbol();
|
|
||||||
ENUM_TIMEFRAMES period = GetPeriod();
|
|
||||||
|
|
||||||
//
|
|
||||||
datetime cTime = TimeCurrent();
|
|
||||||
|
|
||||||
//
|
|
||||||
ENUM_X_121_SMC_PROVIDERS provider = X_121_SMC_PROVIDER_XPVDP;
|
|
||||||
string providerStr = ToString(provider);
|
|
||||||
|
|
||||||
//
|
|
||||||
// Detect Setup Conditions ...
|
|
||||||
datetime setupTime = mXPVDPConditions.setupTime;
|
|
||||||
bool isSetuped = mXPVDPConditions.IsSetuped();
|
|
||||||
ENUM_X_DIRECTION setupDir = mXPVDPConditions.dir;
|
|
||||||
if (!isSetuped)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
// Detect Signal Setup ...
|
|
||||||
isSetuped = DetectX121SMCXPVDPSiganlSetup(
|
|
||||||
symbol,
|
|
||||||
period,
|
|
||||||
mXPVDPConditions,
|
|
||||||
mTriggerCycleHelper,
|
|
||||||
mDecisionCycleHelper,
|
|
||||||
mAnalyseCycleHelper,
|
|
||||||
mVerificationCycleHelper,
|
|
||||||
mConsolidationCycleHelper,
|
|
||||||
mVisionCycleHelper //
|
|
||||||
);
|
|
||||||
|
|
||||||
//
|
|
||||||
setupDir = mXPVDPConditions.dir;
|
|
||||||
setupTime = mXPVDPConditions.setupTime;
|
|
||||||
}
|
|
||||||
result = isSetuped;
|
|
||||||
if (!result)
|
|
||||||
{
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// Detect Trigger Conditions ...
|
|
||||||
bool canTrigger = mXPVDPConditions.CanTrigger();
|
|
||||||
datetime triggerTime = mXPVDPConditions.triggerTime;
|
|
||||||
if (!canTrigger)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
// Detect Signal Trigger ...
|
|
||||||
canTrigger = DetectX121SMCXPVDPSiganlTrigger(
|
|
||||||
mXPVDPConditions,
|
|
||||||
symbol,
|
|
||||||
period,
|
|
||||||
mTriggerCycleHelper,
|
|
||||||
mDecisionCycleHelper,
|
|
||||||
mAnalyseCycleHelper,
|
|
||||||
mVerificationCycleHelper,
|
|
||||||
mConsolidationCycleHelper,
|
|
||||||
mVisionCycleHelper //
|
|
||||||
);
|
|
||||||
|
|
||||||
//
|
|
||||||
result = canTrigger;
|
|
||||||
if (!result)
|
|
||||||
{
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
triggerTime = mXPVDPConditions.triggerTime;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// Check Signal Direction ...
|
|
||||||
|
|
||||||
//
|
|
||||||
isBullish = IsBullish(setupDir);
|
|
||||||
isBearish = IsBearish(setupDir);
|
|
||||||
result = isBullish ||
|
|
||||||
isBearish;
|
|
||||||
if (!result)
|
|
||||||
{
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// Issues Signal on Conditions ...
|
|
||||||
conditions.signalDir = setupDir;
|
|
||||||
conditions.provider = providerStr;
|
|
||||||
conditions.sl = mXPVDPConditions.sl;
|
|
||||||
conditions.target = mXPVDPConditions.target;
|
|
||||||
|
|
||||||
//
|
|
||||||
mXPVDPConditions.Clean();
|
|
||||||
|
|
||||||
//
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// XVWPB Signal ...
|
|
||||||
X121SMCStrategyXVWPBSignalConditions mXVWPBConditions;
|
|
||||||
bool DetectXVWPBSignal(
|
|
||||||
X121SMCStrategyConditions &conditions //
|
|
||||||
)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
bool result = false;
|
|
||||||
|
|
||||||
//
|
|
||||||
bool isBullish = false;
|
|
||||||
bool isBearish = false;
|
|
||||||
|
|
||||||
//
|
|
||||||
string symbol = GetSymbol();
|
|
||||||
ENUM_TIMEFRAMES period = GetPeriod();
|
|
||||||
|
|
||||||
//
|
|
||||||
datetime cTime = TimeCurrent();
|
|
||||||
|
|
||||||
//
|
|
||||||
ENUM_X_121_SMC_PROVIDERS provider = X_121_SMC_PROVIDER_XVWPB;
|
|
||||||
string providerStr = ToString(provider);
|
|
||||||
|
|
||||||
//
|
|
||||||
// Detect Setup Conditions ...
|
|
||||||
datetime setupTime = mXVWPBConditions.setupTime;
|
|
||||||
bool isSetuped = mXVWPBConditions.IsSetuped();
|
|
||||||
ENUM_X_DIRECTION setupDir = mXVWPBConditions.dir;
|
|
||||||
if (!isSetuped)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
// Detect Signal Setup ...
|
|
||||||
isSetuped = DetectX121SMCXVWPBSiganlSetup(
|
|
||||||
symbol,
|
|
||||||
period,
|
|
||||||
mXVWPBConditions,
|
|
||||||
mTriggerCycleHelper,
|
|
||||||
mDecisionCycleHelper,
|
|
||||||
mAnalyseCycleHelper,
|
|
||||||
mVerificationCycleHelper,
|
|
||||||
mConsolidationCycleHelper,
|
|
||||||
mVisionCycleHelper //
|
|
||||||
);
|
|
||||||
|
|
||||||
//
|
|
||||||
setupDir = mXVWPBConditions.dir;
|
|
||||||
setupTime = mXVWPBConditions.setupTime;
|
|
||||||
}
|
|
||||||
result = isSetuped;
|
|
||||||
if (!result)
|
|
||||||
{
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// Detect Trigger Conditions ...
|
|
||||||
bool canTrigger = mXVWPBConditions.CanTrigger();
|
|
||||||
datetime triggerTime = mXVWPBConditions.triggerTime;
|
|
||||||
if (!canTrigger)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
// Detect Signal Trigger ...
|
|
||||||
canTrigger = DetectX121SMCXVWPBSiganlTrigger(
|
|
||||||
mXVWPBConditions,
|
|
||||||
symbol,
|
|
||||||
period,
|
|
||||||
mTriggerCycleHelper,
|
|
||||||
mDecisionCycleHelper,
|
|
||||||
mAnalyseCycleHelper,
|
|
||||||
mVerificationCycleHelper,
|
|
||||||
mConsolidationCycleHelper,
|
|
||||||
mVisionCycleHelper //
|
|
||||||
);
|
|
||||||
|
|
||||||
//
|
|
||||||
result = canTrigger;
|
|
||||||
if (!result)
|
|
||||||
{
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
triggerTime = mXVWPBConditions.triggerTime;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// Check Signal Direction ...
|
|
||||||
|
|
||||||
//
|
|
||||||
isBullish = IsBullish(setupDir);
|
|
||||||
isBearish = IsBearish(setupDir);
|
|
||||||
result = isBullish ||
|
|
||||||
isBearish;
|
|
||||||
if (!result)
|
|
||||||
{
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// Issues Signal on Conditions ...
|
|
||||||
conditions.signalDir = setupDir;
|
|
||||||
conditions.provider = providerStr;
|
|
||||||
conditions.sl = mXVWPBConditions.sl;
|
|
||||||
conditions.target = mXVWPBConditions.target;
|
|
||||||
|
|
||||||
//
|
|
||||||
mXVWPBConditions.Clean();
|
|
||||||
|
|
||||||
//
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// XTWPV Signal ...
|
|
||||||
X121SMCStrategyXTWPVSignalConditions mXTWPVConditions;
|
|
||||||
bool DetectXTWPVSignal(
|
|
||||||
X121SMCStrategyConditions &conditions //
|
|
||||||
)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
bool result = false;
|
|
||||||
|
|
||||||
//
|
|
||||||
bool isBullish = false;
|
|
||||||
bool isBearish = false;
|
|
||||||
|
|
||||||
//
|
|
||||||
string symbol = GetSymbol();
|
|
||||||
ENUM_TIMEFRAMES period = GetPeriod();
|
|
||||||
|
|
||||||
//
|
|
||||||
datetime cTime = TimeCurrent();
|
|
||||||
|
|
||||||
//
|
|
||||||
ENUM_X_121_SMC_PROVIDERS provider = X_121_SMC_PROVIDER_XTWPV;
|
|
||||||
string providerStr = ToString(provider);
|
|
||||||
|
|
||||||
//
|
|
||||||
// Detect Setup Conditions ...
|
|
||||||
datetime setupTime = mXTWPVConditions.setupTime;
|
|
||||||
bool isSetuped = mXTWPVConditions.IsSetuped();
|
|
||||||
ENUM_X_DIRECTION setupDir = mXTWPVConditions.dir;
|
|
||||||
if (!isSetuped)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
// Detect Signal Setup ...
|
|
||||||
isSetuped = DetectX121SMCXTWPVSiganlSetup(
|
|
||||||
symbol,
|
|
||||||
period,
|
|
||||||
mXTWPVConditions,
|
|
||||||
mTriggerCycleHelper,
|
|
||||||
mDecisionCycleHelper,
|
|
||||||
mAnalyseCycleHelper,
|
|
||||||
mVerificationCycleHelper,
|
|
||||||
mConsolidationCycleHelper,
|
|
||||||
mVisionCycleHelper //
|
|
||||||
);
|
|
||||||
|
|
||||||
//
|
|
||||||
setupDir = mXTWPVConditions.dir;
|
|
||||||
setupTime = mXTWPVConditions.setupTime;
|
|
||||||
}
|
|
||||||
result = isSetuped;
|
|
||||||
if (!result)
|
|
||||||
{
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// Detect Trigger Conditions ...
|
|
||||||
bool canTrigger = mXTWPVConditions.CanTrigger();
|
|
||||||
datetime triggerTime = mXTWPVConditions.triggerTime;
|
|
||||||
if (!canTrigger)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
// Detect Signal Trigger ...
|
|
||||||
canTrigger = DetectX121SMCXTWPVSiganlTrigger(
|
|
||||||
mXTWPVConditions,
|
|
||||||
symbol,
|
|
||||||
period,
|
|
||||||
mTriggerCycleHelper,
|
|
||||||
mDecisionCycleHelper,
|
|
||||||
mAnalyseCycleHelper,
|
|
||||||
mVerificationCycleHelper,
|
|
||||||
mConsolidationCycleHelper,
|
|
||||||
mVisionCycleHelper //
|
|
||||||
);
|
|
||||||
|
|
||||||
//
|
|
||||||
result = canTrigger;
|
|
||||||
if (!result)
|
|
||||||
{
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
triggerTime = mXTWPVConditions.triggerTime;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// Check Signal Direction ...
|
|
||||||
|
|
||||||
//
|
|
||||||
isBullish = IsBullish(setupDir);
|
|
||||||
isBearish = IsBearish(setupDir);
|
|
||||||
result = isBullish ||
|
|
||||||
isBearish;
|
|
||||||
if (!result)
|
|
||||||
{
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// Issues Signal on Conditions ...
|
|
||||||
conditions.signalDir = setupDir;
|
|
||||||
conditions.provider = providerStr;
|
|
||||||
conditions.sl = mXTWPVConditions.sl;
|
|
||||||
conditions.target = mXTWPVConditions.target;
|
|
||||||
|
|
||||||
//
|
|
||||||
mXTWPVConditions.Clean();
|
|
||||||
|
|
||||||
//
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// XPVSUPDEM Signal ...
|
|
||||||
X121SMCStrategyXPVSUPDEMSignalConditions mXPVSUPDEMConditions;
|
|
||||||
bool DetectXPVSUPDEMSignal(
|
|
||||||
X121SMCStrategyConditions &conditions //
|
|
||||||
)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
bool result = false;
|
|
||||||
|
|
||||||
//
|
|
||||||
bool isBullish = false;
|
|
||||||
bool isBearish = false;
|
|
||||||
|
|
||||||
//
|
|
||||||
string symbol = GetSymbol();
|
|
||||||
ENUM_TIMEFRAMES period = GetPeriod();
|
|
||||||
|
|
||||||
//
|
|
||||||
datetime cTime = TimeCurrent();
|
|
||||||
|
|
||||||
//
|
|
||||||
ENUM_X_121_SMC_PROVIDERS provider = X_121_SMC_PROVIDER_XPVSUPDEM;
|
|
||||||
string providerStr = ToString(provider);
|
|
||||||
|
|
||||||
//
|
|
||||||
// Detect Setup Conditions ...
|
|
||||||
datetime setupTime = mXPVSUPDEMConditions.setupTime;
|
|
||||||
bool isSetuped = mXPVSUPDEMConditions.IsSetuped();
|
|
||||||
ENUM_X_DIRECTION setupDir = mXPVSUPDEMConditions.dir;
|
|
||||||
if (!isSetuped)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
// Detect Signal Setup ...
|
|
||||||
isSetuped = DetectX121SMCXPVSUPDEMSiganlSetup(
|
|
||||||
symbol,
|
|
||||||
period,
|
|
||||||
mXPVSUPDEMConditions,
|
|
||||||
mTriggerCycleHelper,
|
|
||||||
mDecisionCycleHelper,
|
|
||||||
mAnalyseCycleHelper,
|
|
||||||
mVerificationCycleHelper,
|
|
||||||
mConsolidationCycleHelper,
|
|
||||||
mVisionCycleHelper //
|
|
||||||
);
|
|
||||||
|
|
||||||
//
|
|
||||||
setupDir = mXPVSUPDEMConditions.dir;
|
|
||||||
setupTime = mXPVSUPDEMConditions.setupTime;
|
|
||||||
}
|
|
||||||
|
|
||||||
// ClearDraws();
|
|
||||||
// ENUM_X_DIRECTION activeZoneDir;
|
|
||||||
// bool hasTicksZone = mXPVSUPDEMConditions.HasTicksZone();
|
|
||||||
// bool hasActiveZone = mXPVSUPDEMConditions.HasActiveZone(activeZoneDir);
|
|
||||||
// if (hasActiveZone)
|
|
||||||
// {
|
|
||||||
// //
|
|
||||||
// if (IsBullish(activeZoneDir))
|
|
||||||
// {
|
|
||||||
// //
|
|
||||||
// mXPVSUPDEMConditions.activeDemandZone.To(cTime);
|
|
||||||
// XCDemandZoneObject *iObj;
|
|
||||||
// bool isCreated = mPOIDrawer.CreateDemandZone(
|
|
||||||
// mXPVSUPDEMConditions.activeDemandZone,
|
|
||||||
// iObj //
|
|
||||||
// );
|
|
||||||
// if (isCreated)
|
|
||||||
// {
|
|
||||||
// AddObjectIfNotExists(iObj);
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// else
|
|
||||||
// {
|
|
||||||
// //
|
|
||||||
// mXPVSUPDEMConditions.activeSupplyZone.To(cTime);
|
|
||||||
// XCSupplyZoneObject *iObj;
|
|
||||||
// bool isCreated = mPOIDrawer.CreateSupplyZone(
|
|
||||||
// mXPVSUPDEMConditions.activeSupplyZone,
|
|
||||||
// iObj //
|
|
||||||
// );
|
|
||||||
// if (isCreated)
|
|
||||||
// {
|
|
||||||
// AddObjectIfNotExists(iObj);
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// if (hasTicksZone)
|
|
||||||
// {
|
|
||||||
// //
|
|
||||||
// XCTicksZoneObject *iObj;
|
|
||||||
// bool isCreated = mPOIDrawer.CreateTicksZone(
|
|
||||||
// mXPVSUPDEMConditions.ticksZone,
|
|
||||||
// iObj //
|
|
||||||
// );
|
|
||||||
// if (isCreated)
|
|
||||||
// {
|
|
||||||
// AddObjectIfNotExists(iObj);
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
//
|
|
||||||
result = isSetuped;
|
|
||||||
if (!result)
|
|
||||||
{
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// Detect Trigger Conditions ...
|
|
||||||
bool canTrigger = mXPVSUPDEMConditions.CanTrigger();
|
|
||||||
datetime triggerTime = mXPVSUPDEMConditions.triggerTime;
|
|
||||||
if (!canTrigger)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
// Detect Signal Trigger ...
|
|
||||||
canTrigger = DetectX121SMCXPVSUPDEMSiganlTrigger(
|
|
||||||
mXPVSUPDEMConditions,
|
|
||||||
symbol,
|
|
||||||
period,
|
|
||||||
mTriggerCycleHelper,
|
|
||||||
mDecisionCycleHelper,
|
|
||||||
mAnalyseCycleHelper,
|
|
||||||
mVerificationCycleHelper,
|
|
||||||
mConsolidationCycleHelper,
|
|
||||||
mVisionCycleHelper //
|
|
||||||
);
|
|
||||||
|
|
||||||
//
|
|
||||||
result = canTrigger;
|
|
||||||
if (!result)
|
|
||||||
{
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
triggerTime = mXPVSUPDEMConditions.triggerTime;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// Check Signal Direction ...
|
|
||||||
|
|
||||||
//
|
|
||||||
isBullish = IsBullish(setupDir);
|
|
||||||
isBearish = IsBearish(setupDir);
|
|
||||||
result = isBullish ||
|
|
||||||
isBearish;
|
|
||||||
if (!result)
|
|
||||||
{
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// Issues Signal on Conditions ...
|
|
||||||
conditions.signalDir = setupDir;
|
|
||||||
conditions.provider = providerStr;
|
|
||||||
conditions.sl = mXPVSUPDEMConditions.sl;
|
|
||||||
conditions.target = mXPVSUPDEMConditions.target;
|
|
||||||
|
|
||||||
//
|
|
||||||
mXPVSUPDEMConditions.Clean();
|
|
||||||
|
|
||||||
//
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
|
||||||
@@ -1,852 +0,0 @@
|
|||||||
///////////////////////////////////////////////////////
|
|
||||||
//
|
|
||||||
// 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 X121SMCStrategyXTWPVSignalConditions
|
|
||||||
{
|
|
||||||
//
|
|
||||||
// Props ...
|
|
||||||
|
|
||||||
//
|
|
||||||
string symbol;
|
|
||||||
ENUM_TIMEFRAMES period;
|
|
||||||
|
|
||||||
//
|
|
||||||
double sl;
|
|
||||||
double target;
|
|
||||||
ENUM_X_DIRECTION dir;
|
|
||||||
ENUM_X_POSITION_TYPES type;
|
|
||||||
|
|
||||||
//
|
|
||||||
// Setup Props ...
|
|
||||||
|
|
||||||
//
|
|
||||||
datetime setupTime;
|
|
||||||
datetime triggerTime;
|
|
||||||
|
|
||||||
//
|
|
||||||
XPVPivot parentPivot;
|
|
||||||
XPVPivot childPivot;
|
|
||||||
|
|
||||||
//
|
|
||||||
// Constructor ...
|
|
||||||
X121SMCStrategyXTWPVSignalConditions()
|
|
||||||
{
|
|
||||||
Clean();
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// Tools ...
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Cleaning Up ...
|
|
||||||
*/
|
|
||||||
void Clean()
|
|
||||||
{
|
|
||||||
//
|
|
||||||
sl = 0;
|
|
||||||
target = 0;
|
|
||||||
|
|
||||||
//
|
|
||||||
dir = X_DIRECTION_NONE;
|
|
||||||
type = X_POSITION_TYPE_NONE;
|
|
||||||
|
|
||||||
//
|
|
||||||
symbol = NULL;
|
|
||||||
period = NULL;
|
|
||||||
setupTime = NULL;
|
|
||||||
triggerTime = NULL;
|
|
||||||
|
|
||||||
//
|
|
||||||
ExtensionClean();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 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;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Calculate Setup Age ...
|
|
||||||
*
|
|
||||||
* @return ( int )
|
|
||||||
*/
|
|
||||||
int GetSetupAge()
|
|
||||||
{
|
|
||||||
//
|
|
||||||
int result = 0;
|
|
||||||
|
|
||||||
//
|
|
||||||
if (!IsSetuped())
|
|
||||||
{
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
result = (int)(TimeCurrent() - setupTime) / PeriodSeconds(period);
|
|
||||||
|
|
||||||
//
|
|
||||||
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 ...
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Clean Additional Properties ...
|
|
||||||
*/
|
|
||||||
void ExtensionClean()
|
|
||||||
{
|
|
||||||
//
|
|
||||||
CleanPivots();
|
|
||||||
}
|
|
||||||
|
|
||||||
void CleanPivots()
|
|
||||||
{
|
|
||||||
//
|
|
||||||
parentPivot.Clean();
|
|
||||||
childPivot.Clean();
|
|
||||||
}
|
|
||||||
|
|
||||||
bool HasParentPivot()
|
|
||||||
{
|
|
||||||
return parentPivot.IsValid();
|
|
||||||
}
|
|
||||||
|
|
||||||
bool HasChildPivot()
|
|
||||||
{
|
|
||||||
return childPivot.IsValid();
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
};
|
|
||||||
|
|
||||||
//
|
|
||||||
// Extension Functions ...
|
|
||||||
|
|
||||||
//
|
|
||||||
// Detect Setup Conditions ...
|
|
||||||
bool DetectX121SMCXTWPVSiganlSetup(
|
|
||||||
string _symbol,
|
|
||||||
ENUM_TIMEFRAMES _period,
|
|
||||||
//
|
|
||||||
X121SMCStrategyXTWPVSignalConditions &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;
|
|
||||||
|
|
||||||
//
|
|
||||||
// Setup Conditions ...
|
|
||||||
|
|
||||||
//
|
|
||||||
// Detect Market Trend ...
|
|
||||||
// ENUM_X_DIRECTION trend;
|
|
||||||
// bool hasTrend = verificationCycleHelper
|
|
||||||
// .DetectTrend(trend);
|
|
||||||
// bool hasBullishTrend = hasTrend &&
|
|
||||||
// IsBullish(trend);
|
|
||||||
// bool hasBearishTrend = hasTrend &&
|
|
||||||
// IsBearish(trend);
|
|
||||||
// result = hasBullishTrend ||
|
|
||||||
// hasBearishTrend;
|
|
||||||
// if (!result)
|
|
||||||
// {
|
|
||||||
// return result;
|
|
||||||
// }
|
|
||||||
|
|
||||||
//
|
|
||||||
// Retrieve Active Pivots ...
|
|
||||||
|
|
||||||
//
|
|
||||||
XPVPivot peakPivot;
|
|
||||||
bool hasPeakPivot = analyseCycleHelper
|
|
||||||
.GetActivePeakPivot(peakPivot);
|
|
||||||
|
|
||||||
//
|
|
||||||
XPVPivot valePivot;
|
|
||||||
bool hasValePivot = analyseCycleHelper
|
|
||||||
.GetActiveValePivot(valePivot);
|
|
||||||
|
|
||||||
//
|
|
||||||
// Check Parent Pivot ...
|
|
||||||
bool hasParentPivot = conditions.HasParentPivot();
|
|
||||||
if (!hasParentPivot)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
if (hasPeakPivot && !hasValePivot)
|
|
||||||
{
|
|
||||||
conditions.parentPivot = peakPivot;
|
|
||||||
}
|
|
||||||
else if (hasValePivot && !hasPeakPivot)
|
|
||||||
{
|
|
||||||
conditions.parentPivot = valePivot;
|
|
||||||
}
|
|
||||||
else if (hasPeakPivot && hasValePivot)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
if (peakPivot.from < valePivot.from)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
conditions.parentPivot = peakPivot;
|
|
||||||
conditions.childPivot = valePivot;
|
|
||||||
}
|
|
||||||
else if (valePivot.from < peakPivot.from)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
conditions.parentPivot = valePivot;
|
|
||||||
conditions.childPivot = peakPivot;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
hasParentPivot = conditions.HasParentPivot();
|
|
||||||
result = hasParentPivot;
|
|
||||||
if (!result)
|
|
||||||
{
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// Check Child Pivot ...
|
|
||||||
bool hasChildPivot = conditions.HasChildPivot();
|
|
||||||
if (!hasChildPivot)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
if (hasPeakPivot && !hasValePivot)
|
|
||||||
{
|
|
||||||
conditions.childPivot = peakPivot;
|
|
||||||
}
|
|
||||||
else if (hasValePivot && !hasPeakPivot)
|
|
||||||
{
|
|
||||||
conditions.childPivot = valePivot;
|
|
||||||
}
|
|
||||||
else if (hasPeakPivot && hasValePivot)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
if (peakPivot.from < valePivot.from)
|
|
||||||
{
|
|
||||||
conditions.childPivot = peakPivot;
|
|
||||||
}
|
|
||||||
else if (valePivot.from < peakPivot.from)
|
|
||||||
{
|
|
||||||
conditions.childPivot = valePivot;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
hasChildPivot = conditions.HasChildPivot();
|
|
||||||
result = hasChildPivot;
|
|
||||||
if (!result)
|
|
||||||
{
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
if (hasParentPivot && hasChildPivot)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
bool isChildSame =
|
|
||||||
conditions.childPivot.from == peakPivot.from ||
|
|
||||||
conditions.childPivot.from == valePivot.from;
|
|
||||||
result = isChildSame;
|
|
||||||
if (!result)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
conditions.CleanPivots();
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// Detect Direction ...
|
|
||||||
|
|
||||||
//
|
|
||||||
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 DetectX121SMCXTWPVSiganlTrigger(
|
|
||||||
//
|
|
||||||
X121SMCStrategyXTWPVSignalConditions &conditions,
|
|
||||||
//
|
|
||||||
string _symbol,
|
|
||||||
ENUM_TIMEFRAMES _period,
|
|
||||||
//
|
|
||||||
XC121SMCCycleHelper *triggerCycleHelper,
|
|
||||||
XC121SMCCycleHelper *decisionCycleHelper,
|
|
||||||
XC121SMCCycleHelper *analyseCycleHelper,
|
|
||||||
XC121SMCCycleHelper *verificationCycleHelper,
|
|
||||||
XC121SMCCycleHelper *consolidationCycleHelper,
|
|
||||||
XC121SMCCycleHelper *visionCycleHelper,
|
|
||||||
//
|
|
||||||
int maxAllowedSetupAge = 60 //
|
|
||||||
//
|
|
||||||
)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
bool result = false;
|
|
||||||
|
|
||||||
//
|
|
||||||
result = conditions.IsSetuped();
|
|
||||||
if (!result)
|
|
||||||
{
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
datetime setupTime = conditions.setupTime;
|
|
||||||
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;
|
|
||||||
|
|
||||||
//
|
|
||||||
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;
|
|
||||||
|
|
||||||
//
|
|
||||||
// Trigger Conditions ...
|
|
||||||
|
|
||||||
//
|
|
||||||
// Check VWap State ...
|
|
||||||
|
|
||||||
//
|
|
||||||
bool isVWapBullishState = triggerConditions.x121Conditions.isVWapBullishState;
|
|
||||||
bool isVWapBearishState = triggerConditions.x121Conditions.isVWapBearishState;
|
|
||||||
|
|
||||||
//
|
|
||||||
isBullish =
|
|
||||||
IsBullish(setupDir) &&
|
|
||||||
isVWapBullishState;
|
|
||||||
|
|
||||||
//
|
|
||||||
isBearish =
|
|
||||||
IsBearish(setupDir) &&
|
|
||||||
isVWapBearishState;
|
|
||||||
|
|
||||||
//
|
|
||||||
result = isBullish ||
|
|
||||||
isBearish;
|
|
||||||
if (!result)
|
|
||||||
{
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// Waitings For Sar Switched to Direction ...
|
|
||||||
|
|
||||||
//
|
|
||||||
double sar = triggerConditions.x121Conditions.sarBuffer[1];
|
|
||||||
|
|
||||||
//
|
|
||||||
bool isSarSwitchedToBullish = triggerConditions.x121Conditions.isSarSwitchedToBullish;
|
|
||||||
bool isSarSwitchedToBearish = triggerConditions.x121Conditions.isSarSwitchedToBearish;
|
|
||||||
|
|
||||||
//
|
|
||||||
isBullish =
|
|
||||||
//
|
|
||||||
isBullish &&
|
|
||||||
isSarSwitchedToBullish
|
|
||||||
//
|
|
||||||
;
|
|
||||||
|
|
||||||
//
|
|
||||||
isBearish =
|
|
||||||
//
|
|
||||||
isBearish &&
|
|
||||||
isSarSwitchedToBearish
|
|
||||||
//
|
|
||||||
;
|
|
||||||
|
|
||||||
//
|
|
||||||
result = isBullish ||
|
|
||||||
isBearish;
|
|
||||||
if (!result)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
// Cleanup Setup Conditions ...
|
|
||||||
int setupAge = conditions.GetSetupAge();
|
|
||||||
if (IsValidSize(setupAge) &&
|
|
||||||
IsValidSize(maxAllowedSetupAge) &&
|
|
||||||
setupAge >= maxAllowedSetupAge)
|
|
||||||
{
|
|
||||||
conditions.Clean();
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// Detect Nearest FVG or Supply Zone For Traget ...
|
|
||||||
|
|
||||||
//
|
|
||||||
// Select Source State ...
|
|
||||||
XPOIState state = triggerState;
|
|
||||||
|
|
||||||
//
|
|
||||||
double target = CalculateTarget(
|
|
||||||
cBar,
|
|
||||||
state,
|
|
||||||
setupDir //
|
|
||||||
);
|
|
||||||
|
|
||||||
//
|
|
||||||
result = target > 0;
|
|
||||||
if (!result)
|
|
||||||
{
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
conditions.target = target;
|
|
||||||
conditions.triggerTime = cTime;
|
|
||||||
conditions.sl = isBullish
|
|
||||||
? sar
|
|
||||||
: sar;
|
|
||||||
conditions.type = isBullish
|
|
||||||
? X_POSITION_TYPE_LONG
|
|
||||||
: X_POSITION_TYPE_SHORT;
|
|
||||||
|
|
||||||
//
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
@@ -1,73 +0,0 @@
|
|||||||
//
|
|
||||||
ClearDraws();
|
|
||||||
XPVPivot peakPivot;
|
|
||||||
bool hasActivePeakPivot =
|
|
||||||
mTriggerCycleHelper
|
|
||||||
.GetActivePeakPivot(peakPivot);
|
|
||||||
if (hasActivePeakPivot)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
XCBaseObject *iPivotObjs[];
|
|
||||||
int drawnCount = mPOIDrawer.DrawPivot(
|
|
||||||
peakPivot,
|
|
||||||
iPivotObjs //
|
|
||||||
);
|
|
||||||
|
|
||||||
//
|
|
||||||
if (IsValidSize(drawnCount))
|
|
||||||
{
|
|
||||||
AddObjectsIfNotExists(iPivotObjs);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
XPVPivot valePivot;
|
|
||||||
bool hasActiveValePivot =
|
|
||||||
mTriggerCycleHelper
|
|
||||||
.GetActiveValePivot(valePivot);
|
|
||||||
if (hasActiveValePivot)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
XCBaseObject *iPivotObjs[];
|
|
||||||
int drawnCount = mPOIDrawer.DrawPivot(
|
|
||||||
valePivot,
|
|
||||||
iPivotObjs //
|
|
||||||
);
|
|
||||||
|
|
||||||
//
|
|
||||||
if (IsValidSize(drawnCount))
|
|
||||||
{
|
|
||||||
AddObjectsIfNotExists(iPivotObjs);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// XPVPivot pivots[];
|
|
||||||
// int pivotsCount = mTriggerCycleHelper.FillPivots(pivots);
|
|
||||||
// if (IsValidSize(pivotsCount))
|
|
||||||
// {
|
|
||||||
// //
|
|
||||||
// for (int i = 0; i < pivotsCount; i++)
|
|
||||||
// {
|
|
||||||
// //
|
|
||||||
// XPVPivot iPivot = pivots[i];
|
|
||||||
|
|
||||||
// //
|
|
||||||
// XCBaseObject *iPivotObjects[];
|
|
||||||
// mPOIDrawer.DrawPivot(
|
|
||||||
// iPivot,
|
|
||||||
// iPivotObjects,
|
|
||||||
// false // Don't Draw State ...
|
|
||||||
// );
|
|
||||||
|
|
||||||
// //
|
|
||||||
// int iPivotObjectsCount = ArraySize(iPivotObjects);
|
|
||||||
// if (IsValidSize(iPivotObjectsCount))
|
|
||||||
// {
|
|
||||||
// //
|
|
||||||
// for (int j = 0; j < iPivotObjectsCount; j++)
|
|
||||||
// {
|
|
||||||
// AddObjectIfNotExists(iPivotObjects[j]);
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -1,995 +0,0 @@
|
|||||||
///////////////////////////////////////////////////////
|
|
||||||
//
|
|
||||||
// SaherElm IT Center MQL5 X121 SMC Signal Lib
|
|
||||||
// -------------------------------------------------
|
|
||||||
// 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 X121SMCStrategyXPVDPSignalConditions
|
|
||||||
{
|
|
||||||
//
|
|
||||||
// Props ...
|
|
||||||
|
|
||||||
//
|
|
||||||
string symbol;
|
|
||||||
ENUM_TIMEFRAMES period;
|
|
||||||
|
|
||||||
//
|
|
||||||
double sl;
|
|
||||||
double target;
|
|
||||||
ENUM_X_DIRECTION dir;
|
|
||||||
ENUM_X_POSITION_TYPES type;
|
|
||||||
|
|
||||||
//
|
|
||||||
// Setup Props ...
|
|
||||||
|
|
||||||
//
|
|
||||||
datetime setupTime;
|
|
||||||
datetime triggerTime;
|
|
||||||
|
|
||||||
//
|
|
||||||
double peak;
|
|
||||||
double vale;
|
|
||||||
|
|
||||||
//
|
|
||||||
// Constructor ...
|
|
||||||
X121SMCStrategyXPVDPSignalConditions()
|
|
||||||
{
|
|
||||||
Clean();
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// Tools ...
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Cleaning Up ...
|
|
||||||
*/
|
|
||||||
void Clean()
|
|
||||||
{
|
|
||||||
//
|
|
||||||
sl = 0;
|
|
||||||
target = 0;
|
|
||||||
|
|
||||||
//
|
|
||||||
dir = X_DIRECTION_NONE;
|
|
||||||
type = X_POSITION_TYPE_NONE;
|
|
||||||
|
|
||||||
//
|
|
||||||
symbol = NULL;
|
|
||||||
period = NULL;
|
|
||||||
setupTime = NULL;
|
|
||||||
triggerTime = NULL;
|
|
||||||
|
|
||||||
//
|
|
||||||
ExtensionClean();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 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;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Calculate Setup Age ...
|
|
||||||
*
|
|
||||||
* @return ( int )
|
|
||||||
*/
|
|
||||||
int GetSetupAge()
|
|
||||||
{
|
|
||||||
//
|
|
||||||
int result = 0;
|
|
||||||
|
|
||||||
//
|
|
||||||
if (!IsSetuped())
|
|
||||||
{
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
result = (int)(TimeCurrent() - setupTime) / PeriodSeconds(period);
|
|
||||||
|
|
||||||
//
|
|
||||||
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 ...
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Clean Additional Properties ...
|
|
||||||
*/
|
|
||||||
void ExtensionClean()
|
|
||||||
{
|
|
||||||
//
|
|
||||||
peak = 0;
|
|
||||||
vale = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
};
|
|
||||||
|
|
||||||
//
|
|
||||||
// Extension Functions ...
|
|
||||||
|
|
||||||
//
|
|
||||||
// Detect Setup Conditions ...
|
|
||||||
bool DetectX121SMCXPVDPSiganlSetup(
|
|
||||||
string _symbol,
|
|
||||||
ENUM_TIMEFRAMES _period,
|
|
||||||
//
|
|
||||||
X121SMCStrategyXPVDPSignalConditions &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;
|
|
||||||
|
|
||||||
//
|
|
||||||
// Setup Conditions ...
|
|
||||||
|
|
||||||
//
|
|
||||||
// Detect Market Trend ...
|
|
||||||
ENUM_X_DIRECTION trend;
|
|
||||||
bool hasTrend = consolidationCycleHelper
|
|
||||||
.DetectTrend(trend);
|
|
||||||
bool hasBullishTrend = hasTrend &&
|
|
||||||
IsBullish(trend);
|
|
||||||
bool hasBearishTrend = hasTrend &&
|
|
||||||
IsBearish(trend);
|
|
||||||
result = hasBullishTrend ||
|
|
||||||
hasBearishTrend;
|
|
||||||
if (!result)
|
|
||||||
{
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// Select Source State ...
|
|
||||||
XPOIState state = decisionState;
|
|
||||||
|
|
||||||
//
|
|
||||||
// Detect High Equals to Peaks or Low Equals to Vale ...
|
|
||||||
|
|
||||||
//
|
|
||||||
// Peak ...
|
|
||||||
double peak = triggerConditions.x121Conditions.peaksBuffer[1];
|
|
||||||
bool isNewPeak = triggerConditions.x121Conditions.isNewPeak;
|
|
||||||
bool isNewPeakOverLast = triggerConditions.x121Conditions.isNewPeakOverLast;
|
|
||||||
bool isNewPeakUnderLast = triggerConditions.x121Conditions.isNewPeakUnderLast;
|
|
||||||
|
|
||||||
//
|
|
||||||
// Vale ...
|
|
||||||
double vale = triggerConditions.x121Conditions.valesBuffer[1];
|
|
||||||
bool isNewVale = triggerConditions.x121Conditions.isNewVale;
|
|
||||||
bool isNewValeOverLast = triggerConditions.x121Conditions.isNewValeOverLast;
|
|
||||||
bool isNewValeUnderLast = triggerConditions.x121Conditions.isNewValeUnderLast;
|
|
||||||
|
|
||||||
//
|
|
||||||
bool isHighEqualsToPeak =
|
|
||||||
isNewPeak &&
|
|
||||||
peak == cBar.high;
|
|
||||||
|
|
||||||
//
|
|
||||||
bool isLowEqualsToVale =
|
|
||||||
isNewVale &&
|
|
||||||
vale == cBar.low;
|
|
||||||
|
|
||||||
//
|
|
||||||
result = isHighEqualsToPeak ||
|
|
||||||
isLowEqualsToVale;
|
|
||||||
if (!result)
|
|
||||||
{
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// Now We Have To Check DONChain Status ...
|
|
||||||
|
|
||||||
//
|
|
||||||
double donCUpper = triggerConditions.x121Conditions.donCloseUpperBuffer[1];
|
|
||||||
double donCUpperPrev = triggerConditions.x121Conditions.donCloseUpperBuffer[2];
|
|
||||||
|
|
||||||
//
|
|
||||||
double donCLower = triggerConditions.x121Conditions.donCloseLowerBuffer[1];
|
|
||||||
double donCLowerPrev = triggerConditions.x121Conditions.donCloseLowerBuffer[2];
|
|
||||||
|
|
||||||
//
|
|
||||||
double donOUpper = triggerConditions.x121Conditions.donOpenUpperBuffer[1];
|
|
||||||
double donOUpperPrev = triggerConditions.x121Conditions.donOpenUpperBuffer[2];
|
|
||||||
|
|
||||||
//
|
|
||||||
double donOLower = triggerConditions.x121Conditions.donOpenLowerBuffer[1];
|
|
||||||
double donOLowerPrev = triggerConditions.x121Conditions.donOpenLowerBuffer[2];
|
|
||||||
|
|
||||||
//
|
|
||||||
bool isDonUpperBullish = donCUpper > donOUpper;
|
|
||||||
bool isDonUpperBullishPrev = donCUpperPrev > donOUpperPrev;
|
|
||||||
|
|
||||||
//
|
|
||||||
bool isDonUpperBearish = donCUpper < donOUpper;
|
|
||||||
bool isDonUpperBearishPrev = donCUpperPrev < donOUpperPrev;
|
|
||||||
|
|
||||||
//
|
|
||||||
bool isDonUpperSwitchedToBullish = isDonUpperBullish &&
|
|
||||||
!isDonUpperBullishPrev;
|
|
||||||
|
|
||||||
//
|
|
||||||
bool isDonUpperSwitchedToBearish = isDonUpperBearish &&
|
|
||||||
!isDonUpperBearishPrev;
|
|
||||||
|
|
||||||
//
|
|
||||||
bool isDonLowerBullish = donCLower > donOLower;
|
|
||||||
bool isDonLowerBullishPrev = donCLowerPrev > donOLowerPrev;
|
|
||||||
|
|
||||||
//
|
|
||||||
bool isDonLowerBearish = donCLower < donOLower;
|
|
||||||
bool isDonLowerBearishPrev = donCLowerPrev < donOLowerPrev;
|
|
||||||
|
|
||||||
//
|
|
||||||
bool isDonLowerSwitchedToBullish = isDonLowerBullish &&
|
|
||||||
!isDonLowerBullishPrev;
|
|
||||||
|
|
||||||
//
|
|
||||||
bool isDonLowerSwitchedToBearish = isDonLowerBearish &&
|
|
||||||
!isDonLowerBearishPrev;
|
|
||||||
|
|
||||||
//
|
|
||||||
// Calculate State ...
|
|
||||||
|
|
||||||
//
|
|
||||||
bool isDonInBullishState =
|
|
||||||
//
|
|
||||||
// Upper ...
|
|
||||||
(isDonUpperBullish ||
|
|
||||||
isDonUpperSwitchedToBullish)
|
|
||||||
//
|
|
||||||
&&
|
|
||||||
//
|
|
||||||
// Lower ...
|
|
||||||
(isDonLowerBullish ||
|
|
||||||
isDonLowerSwitchedToBullish)
|
|
||||||
//
|
|
||||||
;
|
|
||||||
|
|
||||||
//
|
|
||||||
bool isDonInBearishState =
|
|
||||||
//
|
|
||||||
// Upper ...
|
|
||||||
(isDonUpperBearish ||
|
|
||||||
isDonUpperSwitchedToBearish)
|
|
||||||
//
|
|
||||||
&&
|
|
||||||
//
|
|
||||||
// Lower ...
|
|
||||||
(isDonLowerBearish ||
|
|
||||||
isDonLowerSwitchedToBearish)
|
|
||||||
//
|
|
||||||
;
|
|
||||||
|
|
||||||
//
|
|
||||||
// Summary DonChain State ...
|
|
||||||
|
|
||||||
//
|
|
||||||
isBullish =
|
|
||||||
//
|
|
||||||
hasBullishTrend
|
|
||||||
//
|
|
||||||
&&
|
|
||||||
//
|
|
||||||
isDonInBullishState
|
|
||||||
//
|
|
||||||
&&
|
|
||||||
//
|
|
||||||
(isHighEqualsToPeak ||
|
|
||||||
isLowEqualsToVale)
|
|
||||||
//
|
|
||||||
;
|
|
||||||
|
|
||||||
//
|
|
||||||
isBearish =
|
|
||||||
//
|
|
||||||
hasBearishTrend
|
|
||||||
//
|
|
||||||
&&
|
|
||||||
//
|
|
||||||
isDonInBearishState
|
|
||||||
//
|
|
||||||
&&
|
|
||||||
//
|
|
||||||
(isHighEqualsToPeak ||
|
|
||||||
isLowEqualsToVale)
|
|
||||||
//
|
|
||||||
;
|
|
||||||
result = isBullish ||
|
|
||||||
isBearish;
|
|
||||||
if (!result)
|
|
||||||
{
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// Check VWap Conditions ...
|
|
||||||
|
|
||||||
//
|
|
||||||
double vwapFast = triggerConditions.x121Conditions.vwapFastBuffer[1];
|
|
||||||
double vwapMid = triggerConditions.x121Conditions.vwapMidBuffer[1];
|
|
||||||
double vwapSlow = triggerConditions.x121Conditions.vwapSlowBuffer[1];
|
|
||||||
|
|
||||||
//
|
|
||||||
double vwaps[3] = {
|
|
||||||
vwapFast,
|
|
||||||
vwapMid,
|
|
||||||
vwapSlow,
|
|
||||||
};
|
|
||||||
double vwapMax = GetMax(vwaps);
|
|
||||||
double vwapMin = GetMin(vwaps);
|
|
||||||
|
|
||||||
//
|
|
||||||
bool isCloseOverVwapMax =
|
|
||||||
//
|
|
||||||
ask > vwapMax &&
|
|
||||||
bid > vwapMax &&
|
|
||||||
(cBar.low > vwapMax ||
|
|
||||||
cBar.close > vwapMax)
|
|
||||||
//
|
|
||||||
;
|
|
||||||
|
|
||||||
//
|
|
||||||
bool isCloseUnderVwapMin =
|
|
||||||
//
|
|
||||||
ask < vwapMin &&
|
|
||||||
bid < vwapMin &&
|
|
||||||
(cBar.high < vwapMin ||
|
|
||||||
cBar.close < vwapMin)
|
|
||||||
//
|
|
||||||
;
|
|
||||||
|
|
||||||
//
|
|
||||||
bool isVWapFastBullish = triggerConditions.x121Conditions.isVWapFastBullish;
|
|
||||||
bool isVWapFastBearish = triggerConditions.x121Conditions.isVWapFastBearish;
|
|
||||||
bool isVWapMidBullish = triggerConditions.x121Conditions.isVWapMidBullish;
|
|
||||||
bool isVWapMidBearish = triggerConditions.x121Conditions.isVWapMidBearish;
|
|
||||||
bool isVWapSlowBullish = triggerConditions.x121Conditions.isVWapSlowBullish;
|
|
||||||
bool isVWapSlowBearish = triggerConditions.x121Conditions.isVWapSlowBearish;
|
|
||||||
bool isVWapFastOverMid = triggerConditions.x121Conditions.isVWapFastOverMid;
|
|
||||||
bool isVWapMidOverSlow = triggerConditions.x121Conditions.isVWapMidOverSlow;
|
|
||||||
bool isVWapFastUnderMid = triggerConditions.x121Conditions.isVWapFastUnderMid;
|
|
||||||
bool isVWapMidUnderSlow = triggerConditions.x121Conditions.isVWapMidUnderSlow;
|
|
||||||
|
|
||||||
//
|
|
||||||
bool isVwapBullishFormed =
|
|
||||||
//
|
|
||||||
// Order ...
|
|
||||||
(isVWapFastOverMid ||
|
|
||||||
isVWapMidOverSlow ||
|
|
||||||
(isVWapFastOverMid &&
|
|
||||||
isVWapMidOverSlow))
|
|
||||||
//
|
|
||||||
&&
|
|
||||||
// State ...
|
|
||||||
((isVWapFastBullish &&
|
|
||||||
isVWapMidBullish) ||
|
|
||||||
(isVWapMidBullish &&
|
|
||||||
isVWapSlowBullish) ||
|
|
||||||
(isVWapFastBullish &&
|
|
||||||
isVWapMidBullish &&
|
|
||||||
isVWapSlowBullish))
|
|
||||||
//
|
|
||||||
;
|
|
||||||
|
|
||||||
//
|
|
||||||
bool isVwapBearishFormed =
|
|
||||||
//
|
|
||||||
// Order ...
|
|
||||||
(isVWapFastUnderMid ||
|
|
||||||
isVWapMidUnderSlow ||
|
|
||||||
(isVWapFastUnderMid &&
|
|
||||||
isVWapMidUnderSlow))
|
|
||||||
//
|
|
||||||
&&
|
|
||||||
// State ...
|
|
||||||
((isVWapFastBearish &&
|
|
||||||
isVWapMidBearish) ||
|
|
||||||
(isVWapMidBearish &&
|
|
||||||
isVWapSlowBearish) ||
|
|
||||||
(isVWapFastBearish &&
|
|
||||||
isVWapMidBearish &&
|
|
||||||
isVWapSlowBearish))
|
|
||||||
//
|
|
||||||
;
|
|
||||||
|
|
||||||
//
|
|
||||||
// Summar VWap State ...
|
|
||||||
|
|
||||||
//
|
|
||||||
isBullish =
|
|
||||||
isBullish &&
|
|
||||||
isCloseOverVwapMax &&
|
|
||||||
isVwapBullishFormed;
|
|
||||||
|
|
||||||
//
|
|
||||||
isBearish =
|
|
||||||
isBearish &&
|
|
||||||
isCloseUnderVwapMin &&
|
|
||||||
isVwapBearishFormed;
|
|
||||||
result = isBullish ||
|
|
||||||
isBearish;
|
|
||||||
if (!result)
|
|
||||||
{
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// Check Sar State ...
|
|
||||||
double sar = triggerConditions.x121Conditions.sarBuffer[1];
|
|
||||||
|
|
||||||
//
|
|
||||||
bool isSarBullish = triggerConditions.x121Conditions.isSarBullish;
|
|
||||||
bool isSarSwitchedToBullish = triggerConditions.x121Conditions.isSarSwitchedToBullish;
|
|
||||||
|
|
||||||
//
|
|
||||||
bool isSarBearish = triggerConditions.x121Conditions.isSarBearish;
|
|
||||||
bool isSarSwitchedToBearish = triggerConditions.x121Conditions.isSarSwitchedToBearish;
|
|
||||||
|
|
||||||
//
|
|
||||||
// Summary Sar ...
|
|
||||||
|
|
||||||
//
|
|
||||||
bool isSarBullishFormed = isSarBullish ||
|
|
||||||
isSarSwitchedToBullish;
|
|
||||||
|
|
||||||
//
|
|
||||||
bool isSarBearishFormed = isSarBearish ||
|
|
||||||
isSarSwitchedToBearish;
|
|
||||||
|
|
||||||
//
|
|
||||||
isBullish =
|
|
||||||
isBullish &&
|
|
||||||
isSarBullishFormed;
|
|
||||||
|
|
||||||
//
|
|
||||||
isBearish =
|
|
||||||
isBearish &&
|
|
||||||
isSarBearishFormed;
|
|
||||||
|
|
||||||
//
|
|
||||||
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 DetectX121SMCXPVDPSiganlTrigger(
|
|
||||||
//
|
|
||||||
X121SMCStrategyXPVDPSignalConditions &conditions,
|
|
||||||
//
|
|
||||||
string _symbol,
|
|
||||||
ENUM_TIMEFRAMES _period,
|
|
||||||
//
|
|
||||||
XC121SMCCycleHelper *triggerCycleHelper,
|
|
||||||
XC121SMCCycleHelper *decisionCycleHelper,
|
|
||||||
XC121SMCCycleHelper *analyseCycleHelper,
|
|
||||||
XC121SMCCycleHelper *verificationCycleHelper,
|
|
||||||
XC121SMCCycleHelper *consolidationCycleHelper,
|
|
||||||
XC121SMCCycleHelper *visionCycleHelper,
|
|
||||||
//
|
|
||||||
int maxAllowedSetupAge = 60 //
|
|
||||||
//
|
|
||||||
)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
bool result = false;
|
|
||||||
|
|
||||||
//
|
|
||||||
result = conditions.IsSetuped();
|
|
||||||
if (!result)
|
|
||||||
{
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
datetime setupTime = conditions.setupTime;
|
|
||||||
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;
|
|
||||||
|
|
||||||
//
|
|
||||||
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;
|
|
||||||
|
|
||||||
//
|
|
||||||
// Trigger Conditions ...
|
|
||||||
|
|
||||||
//
|
|
||||||
double vwapFast = triggerConditions.x121Conditions.vwapFastBuffer[1];
|
|
||||||
double vwapMid = triggerConditions.x121Conditions.vwapMidBuffer[1];
|
|
||||||
double vwapSlow = triggerConditions.x121Conditions.vwapSlowBuffer[1];
|
|
||||||
|
|
||||||
//
|
|
||||||
double vwaps[3] = {
|
|
||||||
vwapFast,
|
|
||||||
vwapMid,
|
|
||||||
vwapSlow,
|
|
||||||
};
|
|
||||||
double vwapMax = GetMax(vwaps);
|
|
||||||
double vwapMin = GetMin(vwaps);
|
|
||||||
|
|
||||||
//
|
|
||||||
double sar = triggerConditions.x121Conditions.sarBuffer[1];
|
|
||||||
|
|
||||||
//
|
|
||||||
isBullish =
|
|
||||||
//
|
|
||||||
IsBullish(setupDir)
|
|
||||||
//
|
|
||||||
;
|
|
||||||
|
|
||||||
//
|
|
||||||
isBearish =
|
|
||||||
//
|
|
||||||
IsBearish(setupDir)
|
|
||||||
//
|
|
||||||
;
|
|
||||||
|
|
||||||
//
|
|
||||||
result = isBullish ||
|
|
||||||
isBearish;
|
|
||||||
if (!result)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
// Cleanup Setup Conditions ...
|
|
||||||
int setupAge = conditions.GetSetupAge();
|
|
||||||
if (IsValidSize(setupAge) &&
|
|
||||||
IsValidSize(maxAllowedSetupAge) &&
|
|
||||||
setupAge >= maxAllowedSetupAge)
|
|
||||||
{
|
|
||||||
conditions.Clean();
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
conditions.triggerTime = cTime;
|
|
||||||
conditions.sl = isBullish
|
|
||||||
? MathMin(sar, vwapMin)
|
|
||||||
: MathMin(sar, vwapMax);
|
|
||||||
conditions.type = isBullish
|
|
||||||
? X_POSITION_TYPE_LONG
|
|
||||||
: X_POSITION_TYPE_SHORT;
|
|
||||||
|
|
||||||
//
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1,297 +0,0 @@
|
|||||||
|
|
||||||
//
|
|
||||||
// Find a Support or Resistance Zone ...
|
|
||||||
|
|
||||||
// //
|
|
||||||
// // Support Zone ...
|
|
||||||
// bool hasSupportZone = conditions.HasSupportZone();
|
|
||||||
// if (isLowEqualsToVale && !hasSupportZone)
|
|
||||||
// {
|
|
||||||
// //
|
|
||||||
// int count = state.CountSupportZones();
|
|
||||||
// if (IsValidSize(count))
|
|
||||||
// {
|
|
||||||
// //
|
|
||||||
// for (int i = count - 1; i >= 0; i--)
|
|
||||||
// {
|
|
||||||
// //
|
|
||||||
// XCSupportZone *iZone = state.supportZones[i];
|
|
||||||
|
|
||||||
// //
|
|
||||||
// bool isValid =
|
|
||||||
// vale >= iZone.Lower() &&
|
|
||||||
// vale <= iZone.Upper();
|
|
||||||
// if (isValid)
|
|
||||||
// {
|
|
||||||
// //
|
|
||||||
// conditions.supportZone = iZone;
|
|
||||||
// break;
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
// //
|
|
||||||
// hasSupportZone = conditions.HasSupportZone();
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
// //
|
|
||||||
// // Resistance Zone ...
|
|
||||||
// bool hasResistanceZone = conditions.HasResistanceZone();
|
|
||||||
// if (isHighEqualsToPeak && !hasResistanceZone)
|
|
||||||
// {
|
|
||||||
// //
|
|
||||||
// int count = state.CountResistanceZones();
|
|
||||||
// if (IsValidSize(count))
|
|
||||||
// {
|
|
||||||
// //
|
|
||||||
// for (int i = count - 1; i >= 0; i--)
|
|
||||||
// {
|
|
||||||
// //
|
|
||||||
// XCResistanceZone *iZone = state.resistanceZones[i];
|
|
||||||
|
|
||||||
// //
|
|
||||||
// bool isValid =
|
|
||||||
// peak >= iZone.Lower() &&
|
|
||||||
// peak <= iZone.Upper();
|
|
||||||
// if (isValid)
|
|
||||||
// {
|
|
||||||
// //
|
|
||||||
// conditions.resistanceZone = iZone;
|
|
||||||
// break;
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
// //
|
|
||||||
// hasResistanceZone = conditions.HasResistanceZone();
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
// //
|
|
||||||
// isBullish =
|
|
||||||
// isLowEqualsToVale &&
|
|
||||||
// hasSupportZone;
|
|
||||||
|
|
||||||
// //
|
|
||||||
// isBearish =
|
|
||||||
// isHighEqualsToPeak &&
|
|
||||||
// hasResistanceZone;
|
|
||||||
|
|
||||||
// //
|
|
||||||
// result = isBullish ||
|
|
||||||
// isBearish;
|
|
||||||
// if (!result)
|
|
||||||
// {
|
|
||||||
// return result;
|
|
||||||
// }
|
|
||||||
|
|
||||||
// //
|
|
||||||
// // Retrieve Active Zone ...
|
|
||||||
// XCBarZone *activeZone;
|
|
||||||
// result = conditions.HasActiveZone(activeZone);
|
|
||||||
// if (!result)
|
|
||||||
// {
|
|
||||||
// return result;
|
|
||||||
// }
|
|
||||||
|
|
||||||
// //
|
|
||||||
// // Draw ...
|
|
||||||
// if (hasSupportZone)
|
|
||||||
// {
|
|
||||||
// //
|
|
||||||
// XCSupportZoneObject *iObj;
|
|
||||||
// bool isCreated = drawer.CreateSupportZone(
|
|
||||||
// conditions.supportZone,
|
|
||||||
// iObj //
|
|
||||||
// );
|
|
||||||
// }
|
|
||||||
|
|
||||||
// //
|
|
||||||
// if (hasResistanceZone)
|
|
||||||
// {
|
|
||||||
// //
|
|
||||||
// XCResistanceZoneObject *iObj;
|
|
||||||
// bool isCreated = drawer.CreateResistanceZone(
|
|
||||||
// conditions.resistanceZone,
|
|
||||||
// iObj //
|
|
||||||
// );
|
|
||||||
// }
|
|
||||||
|
|
||||||
//
|
|
||||||
XCSupportZone *supportZone;
|
|
||||||
XCResistanceZone *resistanceZone;
|
|
||||||
datetime activeZoneFoundedAt;
|
|
||||||
|
|
||||||
//
|
|
||||||
supportZone = NULL;
|
|
||||||
resistanceZone = NULL;
|
|
||||||
activeZoneFoundedAt = NULL;
|
|
||||||
|
|
||||||
bool HasSupportZone()
|
|
||||||
{
|
|
||||||
//
|
|
||||||
bool result = false;
|
|
||||||
|
|
||||||
//
|
|
||||||
result =
|
|
||||||
supportZone != NULL &&
|
|
||||||
supportZone.IsValid();
|
|
||||||
|
|
||||||
//
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool HasResistanceZone()
|
|
||||||
{
|
|
||||||
//
|
|
||||||
bool result = false;
|
|
||||||
|
|
||||||
//
|
|
||||||
result =
|
|
||||||
resistanceZone != NULL &&
|
|
||||||
resistanceZone.IsValid();
|
|
||||||
|
|
||||||
//
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool HasActiveZone(XCBarZone *&zone)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
bool result = false;
|
|
||||||
|
|
||||||
//
|
|
||||||
zone = NULL;
|
|
||||||
|
|
||||||
//
|
|
||||||
bool hasSupportZone = HasSupportZone();
|
|
||||||
bool hasResistanceZone = HasResistanceZone();
|
|
||||||
|
|
||||||
//
|
|
||||||
result = hasSupportZone ||
|
|
||||||
hasResistanceZone;
|
|
||||||
if (!result)
|
|
||||||
{
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
if (hasSupportZone)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
supportZone.To(TimeCurrent());
|
|
||||||
zone = supportZone;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
if (hasResistanceZone)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
resistanceZone.To(TimeCurrent());
|
|
||||||
zone = resistanceZone;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Detect Cycle Trend Based On Pivots ...
|
|
||||||
*
|
|
||||||
* @param dir: ENUM_X_DIRECTION member Reference ...
|
|
||||||
* @param numberOfPivots: Integer ...
|
|
||||||
*
|
|
||||||
* @return ( bool )
|
|
||||||
*/
|
|
||||||
bool DetectTrend(
|
|
||||||
ENUM_X_DIRECTION &dir,
|
|
||||||
int numberOfPivots = 3 //
|
|
||||||
)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
bool result = false;
|
|
||||||
|
|
||||||
//
|
|
||||||
dir = X_DIRECTION_NONE;
|
|
||||||
|
|
||||||
//
|
|
||||||
if (numberOfPivots < 2)
|
|
||||||
{
|
|
||||||
numberOfPivots = 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
int verifications = 0;
|
|
||||||
XValueChange changes[];
|
|
||||||
|
|
||||||
//
|
|
||||||
// Bearish Trend ...
|
|
||||||
int peaksChangesCount = CountPeaksChanges();
|
|
||||||
if (!result &&
|
|
||||||
peaksChangesCount > numberOfPivots)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
Clean(changes);
|
|
||||||
FillPeaksChanges(changes);
|
|
||||||
|
|
||||||
//
|
|
||||||
verifications = 0;
|
|
||||||
for (int i = peaksChangesCount - 1 - numberOfPivots; i < peaksChangesCount - 2; i++)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
XValueChange cChange = changes[i];
|
|
||||||
XValueChange nChange = changes[i + 1];
|
|
||||||
|
|
||||||
//
|
|
||||||
if (cChange.after > nChange.after)
|
|
||||||
{
|
|
||||||
verifications++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
result = verifications == numberOfPivots - 1;
|
|
||||||
if (result)
|
|
||||||
{
|
|
||||||
dir = X_DIRECTION_BEARISH;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// Bullish Trend ...
|
|
||||||
int valesChangesCount = CountValesChanges();
|
|
||||||
if (!result &&
|
|
||||||
valesChangesCount > numberOfPivots)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
Clean(changes);
|
|
||||||
FillValesChanges(changes);
|
|
||||||
|
|
||||||
//
|
|
||||||
verifications = 0;
|
|
||||||
for (int i = valesChangesCount - 1 - numberOfPivots; i < valesChangesCount - 2; i++)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
XValueChange cChange = changes[i];
|
|
||||||
XValueChange nChange = changes[i + 1];
|
|
||||||
|
|
||||||
//
|
|
||||||
if (cChange.after < nChange.after)
|
|
||||||
{
|
|
||||||
verifications++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
result = verifications == numberOfPivots - 1;
|
|
||||||
if (result)
|
|
||||||
{
|
|
||||||
dir = X_DIRECTION_BULLISH;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
@@ -1,787 +0,0 @@
|
|||||||
///////////////////////////////////////////////////////
|
|
||||||
//
|
|
||||||
// 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 ...
|
|
||||||
|
|
||||||
//
|
|
||||||
Reference in New Issue
Block a user