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