Files
xMQL5/BKPS/134031009/Documents/BKP/5/x-121.smc.xoepv.signal.lib.mq5
T
2024-12-29 17:56:14 +03:30

1059 lines
27 KiB
Plaintext

///////////////////////////////////////////////////////
//
// 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 X121SMCStrategyXOEPVSignalConditions
{
//
// 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;
//
XCFVG *bullishOBs[];
XCFVG *bearishOBs[];
//
// Constructor ...
X121SMCStrategyXOEPVSignalConditions()
{
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()
{
CleanOBs();
}
void CleanOBs()
{
//
Clean(bullishOBs);
Clean(bearishOBs);
}
int CountBullishOBs()
{
return ArraySize(bullishOBs);
}
bool HasBullishOBs()
{
return CountBullishOBs() >= 3;
}
int CountBearishOBs()
{
return ArraySize(bearishOBs);
}
bool HasBearishOBs()
{
return CountBearishOBs() >= 3;
}
//
};
//
// Extension Functions ...
//
// Detect Setup Conditions ...
bool DetectX121SMCXOEPVSiganlSetup(
string _symbol,
ENUM_TIMEFRAMES _period,
//
X121SMCStrategyXOEPVSignalConditions &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 ...
//
// Vision ...
//
double visionVWapFast = visionConditions.x121Conditions.vwapFastBuffer[1];
double visionVWapMid = visionConditions.x121Conditions.vwapMidBuffer[1];
double visionVWapSlow = visionConditions.x121Conditions.vwapSlowBuffer[1];
//
double visionVWapFastPrev = visionConditions.x121Conditions.vwapFastBuffer[2];
double visionVWapMidPrev = visionConditions.x121Conditions.vwapMidBuffer[2];
double visionVWapSlowPrev = visionConditions.x121Conditions.vwapSlowBuffer[2];
//
double visionVWaps[3] = {
visionVWapFast,
visionVWapMid,
visionVWapSlow,
};
double visionVWapMax = GetMax(visionVWaps);
double visionVWapMin = GetMin(visionVWaps);
//
bool isVisionVWapFastCrossedOverMid = visionVWapFast > visionVWapMid &&
!(visionVWapFastPrev > visionVWapMidPrev);
//
bool isVisionVWapFastCrossedUnderMid = visionVWapFast < visionVWapMid &&
!(visionVWapFastPrev < visionVWapMidPrev);
//
bool isVisionVWapBullishState = visionConditions.x121Conditions.isVWapBullishState;
bool isVisionVWapSwitchedToBullishState = visionConditions.x121Conditions.isVWapSwitchedToBullishState;
//
bool isVisionVWapBearishState = visionConditions.x121Conditions.isVWapBearishState;
bool isVisionVWapSwitchedToBearishState = visionConditions.x121Conditions.isVWapSwitchedToBearishState;
//
bool isVisionVWapBullishOrdered = visionConditions.x121Conditions.isVWapBullishOrdered;
bool isVisionVWapSwitchedToBullishOrdered = visionConditions.x121Conditions.isVWapSwitchedToBullishOrdered;
//
bool isVisionVWapBearishOrdered = visionConditions.x121Conditions.isVWapBearishOrdered;
bool isVisionVWapSwitchedToBearishOrdered = visionConditions.x121Conditions.isVWapSwitchedToBearishOrdered;
//
bool isVisionVWapBullishFormed =
//
(isVisionVWapBullishOrdered ||
isVisionVWapSwitchedToBullishOrdered) &&
(isVisionVWapBullishState ||
isVisionVWapSwitchedToBullishState)
//
;
//
bool isVisionVWapBearishFormed =
//
(isVisionVWapBearishOrdered ||
isVisionVWapSwitchedToBearishOrdered) &&
(isVisionVWapBearishState ||
isVisionVWapSwitchedToBearishState)
//
;
//
// Consolidation ...
//
double consolidationVWapFast = consolidationConditions.x121Conditions.vwapFastBuffer[1];
double consolidationVWapMid = consolidationConditions.x121Conditions.vwapMidBuffer[1];
double consolidationVWapSlow = consolidationConditions.x121Conditions.vwapSlowBuffer[1];
//
double consolidationVWapFastPrev = consolidationConditions.x121Conditions.vwapFastBuffer[2];
double consolidationVWapMidPrev = consolidationConditions.x121Conditions.vwapMidBuffer[2];
double consolidationVWapSlowPrev = consolidationConditions.x121Conditions.vwapSlowBuffer[2];
//
double consolidationVWaps[3] = {
consolidationVWapFast,
consolidationVWapMid,
consolidationVWapSlow,
};
double consolidationVWapMax = GetMax(consolidationVWaps);
double consolidationVWapMin = GetMin(consolidationVWaps);
//
bool isConsolidationVWapBullishState = consolidationConditions.x121Conditions.isVWapBullishState;
bool isConsolidationVWapSwitchedToBullishState = consolidationConditions.x121Conditions.isVWapSwitchedToBullishState;
//
bool isConsolidationVWapBearishState = consolidationConditions.x121Conditions.isVWapBearishState;
bool isConsolidationVWapSwitchedToBearishState = consolidationConditions.x121Conditions.isVWapSwitchedToBearishState;
//
bool isConsolidationVWapBullishOrdered = consolidationConditions.x121Conditions.isVWapBullishOrdered;
bool isConsolidationVWapSwitchedToBullishOrdered = consolidationConditions.x121Conditions.isVWapSwitchedToBullishOrdered;
//
bool isConsolidationVWapBearishOrdered = consolidationConditions.x121Conditions.isVWapBearishOrdered;
bool isConsolidationVWapSwitchedToBearishOrdered = consolidationConditions.x121Conditions.isVWapSwitchedToBearishOrdered;
//
bool isConsolidationVWapBullishFormed =
//
(isConsolidationVWapBullishOrdered ||
isConsolidationVWapSwitchedToBullishOrdered) &&
(isConsolidationVWapBullishState ||
isConsolidationVWapSwitchedToBullishState)
//
;
//
bool isConsolidationVWapBearishFormed =
//
(isConsolidationVWapBearishOrdered ||
isConsolidationVWapSwitchedToBearishOrdered) &&
(isConsolidationVWapBearishState ||
isConsolidationVWapSwitchedToBearishState)
//
;
//
// Verification ...
//
double verificationVWapFast = verificationConditions.x121Conditions.vwapFastBuffer[1];
double verificationVWapMid = verificationConditions.x121Conditions.vwapMidBuffer[1];
double verificationVWapSlow = verificationConditions.x121Conditions.vwapSlowBuffer[1];
//
double verificationVWapFastPrev = verificationConditions.x121Conditions.vwapFastBuffer[2];
double verificationVWapMidPrev = verificationConditions.x121Conditions.vwapMidBuffer[2];
double verificationVWapSlowPrev = verificationConditions.x121Conditions.vwapSlowBuffer[2];
//
double verificationVWaps[3] = {
verificationVWapFast,
verificationVWapMid,
verificationVWapSlow,
};
double verificationVWapMax = GetMax(verificationVWaps);
double verificationVWapMin = GetMin(verificationVWaps);
//
bool isVerificationVWapBullishState = verificationConditions.x121Conditions.isVWapBullishState;
bool isVerificationVWapSwitchedToBullishState = verificationConditions.x121Conditions.isVWapSwitchedToBullishState;
//
bool isVerificationVWapBearishState = verificationConditions.x121Conditions.isVWapBearishState;
bool isVerificationVWapSwitchedToBearishState = verificationConditions.x121Conditions.isVWapSwitchedToBearishState;
//
bool isVerificationVWapBullishOrdered = verificationConditions.x121Conditions.isVWapBullishOrdered;
bool isVerificationVWapSwitchedToBullishOrdered = verificationConditions.x121Conditions.isVWapSwitchedToBullishOrdered;
//
bool isVerificationVWapBearishOrdered = verificationConditions.x121Conditions.isVWapBearishOrdered;
bool isVerificationVWapSwitchedToBearishOrdered = verificationConditions.x121Conditions.isVWapSwitchedToBearishOrdered;
//
bool isVerificationVWapBullishFormed =
//
(isVerificationVWapBullishOrdered ||
isVerificationVWapSwitchedToBullishOrdered) &&
(isVerificationVWapBullishState ||
isVerificationVWapSwitchedToBullishState)
//
;
//
bool isVerificationVWapBearishFormed =
//
(isVerificationVWapBearishOrdered ||
isVerificationVWapSwitchedToBearishOrdered) &&
(isVerificationVWapBearishState ||
isVerificationVWapSwitchedToBearishState)
//
;
//
// Analyse ...
//
double analyseVWapFast = analyseConditions.x121Conditions.vwapFastBuffer[1];
double analyseVWapMid = analyseConditions.x121Conditions.vwapMidBuffer[1];
double analyseVWapSlow = analyseConditions.x121Conditions.vwapSlowBuffer[1];
//
double analyseVWapFastPrev = analyseConditions.x121Conditions.vwapFastBuffer[2];
double analyseVWapMidPrev = analyseConditions.x121Conditions.vwapMidBuffer[2];
double analyseVWapSlowPrev = analyseConditions.x121Conditions.vwapSlowBuffer[2];
//
double analyseVWaps[3] = {
analyseVWapFast,
analyseVWapMid,
analyseVWapSlow,
};
double analyseVWapMax = GetMax(analyseVWaps);
double analyseVWapMin = GetMin(analyseVWaps);
//
bool isAnalyseVWapBullishState = analyseConditions.x121Conditions.isVWapBullishState;
bool isAnalyseVWapSwitchedToBullishState = analyseConditions.x121Conditions.isVWapSwitchedToBullishState;
//
bool isAnalyseVWapBearishState = analyseConditions.x121Conditions.isVWapBearishState;
bool isAnalyseVWapSwitchedToBearishState = analyseConditions.x121Conditions.isVWapSwitchedToBearishState;
//
bool isAnalyseVWapBullishOrdered = analyseConditions.x121Conditions.isVWapBullishOrdered;
bool isAnalyseVWapSwitchedToBullishOrdered = analyseConditions.x121Conditions.isVWapSwitchedToBullishOrdered;
//
bool isAnalyseVWapBearishOrdered = analyseConditions.x121Conditions.isVWapBearishOrdered;
bool isAnalyseVWapSwitchedToBearishOrdered = analyseConditions.x121Conditions.isVWapSwitchedToBearishOrdered;
//
bool isAnalyseVWapBullishFormed =
//
(isAnalyseVWapBullishOrdered ||
isAnalyseVWapSwitchedToBullishOrdered) &&
(isAnalyseVWapBullishState ||
isAnalyseVWapSwitchedToBullishState)
//
;
//
bool isAnalyseVWapBearishFormed =
//
(isAnalyseVWapBearishOrdered ||
isAnalyseVWapSwitchedToBearishOrdered) &&
(isAnalyseVWapBearishState ||
isAnalyseVWapSwitchedToBearishState)
//
;
//
// Summary VWap ...
//
isBullish =
// isVisionVWapBullishFormed &&
isConsolidationVWapBullishFormed &&
isVerificationVWapBullishFormed &&
isAnalyseVWapBullishFormed;
//
isBearish =
// isVisionVWapBearishFormed &&
isConsolidationVWapBearishFormed &&
isVerificationVWapBearishFormed &&
isAnalyseVWapBearishFormed;
//
result = isBullish ||
isBearish;
if (!result)
{
//
// Clean Conditions for Regenerate ...
conditions.CleanOBs();
return result;
}
//
conditions.setupTime = cTime;
conditions.dir =
isBullish
? X_DIRECTION_BULLISH
: X_DIRECTION_BEARISH;
//
return result;
}
//
// Detect Trigger Conditions ...
bool DetectX121SMCXOEPVSiganlTrigger(
//
X121SMCStrategyXOEPVSignalConditions &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 = IsBullish(setupDir);
bool isBearish = IsBearish(setupDir);
//
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 ...
//
// Decision ...
//
double decisionVWapFast = decisionConditions.x121Conditions.vwapFastBuffer[1];
double decisionVWapMid = decisionConditions.x121Conditions.vwapMidBuffer[1];
double decisionVWapSlow = decisionConditions.x121Conditions.vwapSlowBuffer[1];
//
double decisionVWapFastPrev = decisionConditions.x121Conditions.vwapFastBuffer[2];
double decisionVWapMidPrev = decisionConditions.x121Conditions.vwapMidBuffer[2];
double decisionVWapSlowPrev = decisionConditions.x121Conditions.vwapSlowBuffer[2];
//
double decisionVWaps[3] = {
decisionVWapFast,
decisionVWapMid,
decisionVWapSlow,
};
double decisionVWapMax = GetMax(decisionVWaps);
double decisionVWapMin = GetMin(decisionVWaps);
//
bool isDecisionVWapBullishState = decisionConditions.x121Conditions.isVWapBullishState;
bool isDecisionVWapSwitchedToBullishState = decisionConditions.x121Conditions.isVWapSwitchedToBullishState;
//
bool isDecisionVWapBearishState = decisionConditions.x121Conditions.isVWapBearishState;
bool isDecisionVWapSwitchedToBearishState = decisionConditions.x121Conditions.isVWapSwitchedToBearishState;
//
bool isDecisionVWapBullishOrdered = decisionConditions.x121Conditions.isVWapBullishOrdered;
bool isDecisionVWapSwitchedToBullishOrdered = decisionConditions.x121Conditions.isVWapSwitchedToBullishOrdered;
//
bool isDecisionVWapBearishOrdered = decisionConditions.x121Conditions.isVWapBearishOrdered;
bool isDecisionVWapSwitchedToBearishOrdered = decisionConditions.x121Conditions.isVWapSwitchedToBearishOrdered;
//
bool isDecisionVWapBullishFormed =
//
(isDecisionVWapBullishOrdered ||
isDecisionVWapSwitchedToBullishOrdered) &&
(isDecisionVWapBullishState ||
isDecisionVWapSwitchedToBullishState)
//
;
//
bool isDecisionVWapBearishFormed =
//
(isDecisionVWapBearishOrdered ||
isDecisionVWapSwitchedToBearishOrdered) &&
(isDecisionVWapBearishState ||
isDecisionVWapSwitchedToBearishState)
//
;
//
// Trigger ...
//
double triggerVWapFast = triggerConditions.x121Conditions.vwapFastBuffer[1];
double triggerVWapMid = triggerConditions.x121Conditions.vwapMidBuffer[1];
double triggerVWapSlow = triggerConditions.x121Conditions.vwapSlowBuffer[1];
//
double triggerVWapFastPrev = triggerConditions.x121Conditions.vwapFastBuffer[2];
double triggerVWapMidPrev = triggerConditions.x121Conditions.vwapMidBuffer[2];
double triggerVWapSlowPrev = triggerConditions.x121Conditions.vwapSlowBuffer[2];
//
double triggerVWaps[3] = {
triggerVWapFast,
triggerVWapMid,
triggerVWapSlow,
};
double triggerVWapMax = GetMax(triggerVWaps);
double triggerVWapMin = GetMin(triggerVWaps);
//
bool isTriggerVWapBullishState = triggerConditions.x121Conditions.isVWapBullishState;
bool isTriggerVWapSwitchedToBullishState = triggerConditions.x121Conditions.isVWapSwitchedToBullishState;
//
bool isTriggerVWapBearishState = triggerConditions.x121Conditions.isVWapBearishState;
bool isTriggerVWapSwitchedToBearishState = triggerConditions.x121Conditions.isVWapSwitchedToBearishState;
//
bool isTriggerVWapBullishOrdered = triggerConditions.x121Conditions.isVWapBullishOrdered;
bool isTriggerVWapSwitchedToBullishOrdered = triggerConditions.x121Conditions.isVWapSwitchedToBullishOrdered;
//
bool isTriggerVWapBearishOrdered = triggerConditions.x121Conditions.isVWapBearishOrdered;
bool isTriggerVWapSwitchedToBearishOrdered = triggerConditions.x121Conditions.isVWapSwitchedToBearishOrdered;
//
bool isTriggerVWapBullishFormed =
//
(isTriggerVWapBullishState &&
isTriggerVWapSwitchedToBullishOrdered) ||
(isTriggerVWapBullishOrdered &&
isTriggerVWapSwitchedToBullishState)
//
;
//
bool isTriggerVWapBearishFormed =
//
(isTriggerVWapBearishState &&
isTriggerVWapSwitchedToBearishOrdered) ||
(isTriggerVWapBearishOrdered &&
isTriggerVWapSwitchedToBearishState)
//
;
//
isBullish =
//
isBullish &&
isTriggerVWapBullishFormed &&
isDecisionVWapBullishFormed
//
;
//
isBearish =
//
isBearish &&
isTriggerVWapBearishFormed &&
isDecisionVWapBearishFormed
//
;
//
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
? triggerVWapMin
: triggerVWapMax;
conditions.type = isBullish
? X_POSITION_TYPE_LONG
: X_POSITION_TYPE_SHORT;
//
return result;
}
//