last ...
This commit is contained in:
@@ -24,6 +24,74 @@
|
||||
#include "../Classes/x-121.smc.market.cycle.helper.class.mq5"
|
||||
#include "../Libraries/x-121.smc.lib.mq5"
|
||||
|
||||
//
|
||||
const string X121SMCXTWPV_Method_1_Token = "X121SMCXTWPV_1";
|
||||
const string X121SMCXTWPV_Method_2_Token = "X121SMCXTWPV_2";
|
||||
|
||||
//
|
||||
enum ENUM_X_X121SMC_XTWPV_METHODS
|
||||
{
|
||||
X_X121SMC_XTWPV_METHOD_UNKNOWN,
|
||||
X_X121SMC_XTWPV_METHOD_1,
|
||||
X_X121SMC_XTWPV_METHOD_2,
|
||||
};
|
||||
|
||||
//
|
||||
string ToString(ENUM_X_X121SMC_XTWPV_METHODS value)
|
||||
{
|
||||
//
|
||||
string result = NULL;
|
||||
|
||||
//
|
||||
if (value == X_X121SMC_XTWPV_METHOD_UNKNOWN)
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
switch (value)
|
||||
{
|
||||
//
|
||||
case X_X121SMC_XTWPV_METHOD_1:
|
||||
result = "Method_1";
|
||||
break;
|
||||
|
||||
//
|
||||
case X_X121SMC_XTWPV_METHOD_2:
|
||||
result = "Method_2";
|
||||
break;
|
||||
}
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
ENUM_X_X121SMC_XTWPV_METHODS ParseMethod(string value)
|
||||
{
|
||||
//
|
||||
ENUM_X_X121SMC_XTWPV_METHODS result = X_X121SMC_XTWPV_METHOD_UNKNOWN;
|
||||
|
||||
//
|
||||
if (!IsValid(value))
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
if (Contains(X121SMCXTWPV_Method_1_Token, value))
|
||||
{
|
||||
result = X_X121SMC_XTWPV_METHOD_1;
|
||||
}
|
||||
else if (Contains(X121SMCXTWPV_Method_2_Token, value))
|
||||
{
|
||||
result = X_X121SMC_XTWPV_METHOD_2;
|
||||
}
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
// Definitions ...
|
||||
struct X121SMCStrategyXTWPVSignalConditions
|
||||
@@ -52,6 +120,9 @@ struct X121SMCStrategyXTWPVSignalConditions
|
||||
double point;
|
||||
XPVPivot pivot;
|
||||
|
||||
//
|
||||
string method;
|
||||
|
||||
//
|
||||
bool hasSupportZone;
|
||||
bool hasResistanceZone;
|
||||
@@ -184,6 +255,9 @@ struct X121SMCStrategyXTWPVSignalConditions
|
||||
point = 0;
|
||||
pivot.Clean();
|
||||
|
||||
//
|
||||
method = NULL;
|
||||
|
||||
//
|
||||
CleanPriceInsideZones();
|
||||
}
|
||||
@@ -418,10 +492,14 @@ bool DetectX121SMCXTWPVSiganlSetup(
|
||||
double ask = GetAsk(symbol);
|
||||
double bid = GetBid(symbol);
|
||||
datetime cTime = TimeCurrent();
|
||||
double points = GetPoints(symbol);
|
||||
|
||||
//
|
||||
double ll = cBar.FindLowest(9, MODE_LOW);
|
||||
double hh = cBar.FindHighest(9, MODE_HIGH);
|
||||
int swingLoopback = 9;
|
||||
double ll = cBar.FindLowest(swingLoopback, MODE_LOW);
|
||||
double hh = cBar.FindHighest(swingLoopback, MODE_HIGH);
|
||||
double llDown = cBar.FindLowesttDown(swingLoopback);
|
||||
double hhUp = cBar.FindHighestUp(swingLoopback);
|
||||
|
||||
//
|
||||
int zoneValidationDivider = 10;
|
||||
@@ -564,6 +642,16 @@ bool DetectX121SMCXTWPVSiganlSetup(
|
||||
// return result;
|
||||
// }
|
||||
|
||||
//
|
||||
// Detect Trend Based On Peaks and Vales ...
|
||||
ENUM_X_DIRECTION trend;
|
||||
bool hasTrend = analyseCycleHelper
|
||||
.HasPVDirection(trend);
|
||||
bool hasBullishTrend = hasTrend &&
|
||||
IsBullish(trend);
|
||||
bool hasBearishTrend = hasTrend &&
|
||||
IsBearish(trend);
|
||||
|
||||
//
|
||||
// Retrieve Active Pivots ...
|
||||
|
||||
@@ -659,12 +747,20 @@ bool DetectX121SMCXTWPVSiganlSetup(
|
||||
|
||||
//
|
||||
double peak = helperConditions.x121Conditions.peaksBuffer[1];
|
||||
double peakPrev = helperConditions.x121Conditions.peaksBuffer[2];
|
||||
double peakDiff = MathAbs(peakPrev - peak);
|
||||
|
||||
//
|
||||
bool isNewPeak = helperConditions.x121Conditions.isNewPeak;
|
||||
bool isNewPeakOverLast = helperConditions.x121Conditions.isNewPeakOverLast;
|
||||
bool isNewPeakUnderLast = helperConditions.x121Conditions.isNewPeakUnderLast;
|
||||
|
||||
//
|
||||
double vale = helperConditions.x121Conditions.valesBuffer[1];
|
||||
double valePrev = helperConditions.x121Conditions.valesBuffer[2];
|
||||
double valeDiff = MathAbs(valePrev - vale);
|
||||
|
||||
//
|
||||
bool isNewVale = helperConditions.x121Conditions.isNewVale;
|
||||
bool isNewValeOverLast = helperConditions.x121Conditions.isNewValeOverLast;
|
||||
bool isNewValeUnderLast = helperConditions.x121Conditions.isNewValeUnderLast;
|
||||
@@ -680,12 +776,6 @@ bool DetectX121SMCXTWPVSiganlSetup(
|
||||
//
|
||||
// Calculate Conditions ...
|
||||
|
||||
//
|
||||
// Bullish ...
|
||||
|
||||
//
|
||||
// Bearish ...
|
||||
|
||||
//
|
||||
double bullishFib = GetFibonacciLevel(
|
||||
helperCBar.high,
|
||||
@@ -704,11 +794,35 @@ bool DetectX121SMCXTWPVSiganlSetup(
|
||||
|
||||
//
|
||||
bool isBearishFiboPassed = bullishFib <= conditions.pivot.lower;
|
||||
bool isBullishFiboPassed = bearishFib >= conditions.pivot.upper;
|
||||
|
||||
//
|
||||
// Bullish Conditions 1 ...
|
||||
bool bullishConditions1 =
|
||||
//
|
||||
// false
|
||||
hasBullishTrend &&
|
||||
isNewPeakOverLast &&
|
||||
isBullishFiboPassed &&
|
||||
helperCBar.IsBullish() &&
|
||||
conditions.pivot.upper < peak &&
|
||||
conditions.pivot.upper < helperCBar.GetUp() &&
|
||||
conditions.pivot.upper > helperCBar.GetDown()
|
||||
//
|
||||
;
|
||||
if (bullishConditions1)
|
||||
{
|
||||
//
|
||||
conditions.point = conditions.pivot.upper;
|
||||
conditions.method = ToString(X_X121SMC_XTWPV_METHOD_1);
|
||||
}
|
||||
|
||||
//
|
||||
// Bearish Conditions 1 ...
|
||||
bool bearishConditions1 =
|
||||
//
|
||||
// false
|
||||
hasBearishTrend &&
|
||||
isNewValeUnderLast &&
|
||||
isBearishFiboPassed &&
|
||||
helperCBar.IsBearish() &&
|
||||
@@ -719,7 +833,9 @@ bool DetectX121SMCXTWPVSiganlSetup(
|
||||
;
|
||||
if (bearishConditions1)
|
||||
{
|
||||
//
|
||||
conditions.point = conditions.pivot.lower;
|
||||
conditions.method = ToString(X_X121SMC_XTWPV_METHOD_1);
|
||||
}
|
||||
|
||||
//
|
||||
@@ -760,16 +876,43 @@ bool DetectX121SMCXTWPVSiganlSetup(
|
||||
double donOpenUpper = helperConditions.x121Conditions.donOpenUpperBuffer[1];
|
||||
double donOpenLower = helperConditions.x121Conditions.donOpenLowerBuffer[1];
|
||||
|
||||
//
|
||||
int condition2MinPVDiffPoint = 30;
|
||||
bool isPeakDiffPointPassed = peakDiff >= (condition2MinPVDiffPoint * points);
|
||||
bool isValeDiffPointPassed = valeDiff >= (condition2MinPVDiffPoint * points);
|
||||
|
||||
//
|
||||
bool bullishConditions2 =
|
||||
//
|
||||
false
|
||||
// hasBullishTrend &&
|
||||
// isNewValeOverLast &&
|
||||
// donCloseLower > vale &&
|
||||
// isValeDiffPointPassed
|
||||
//
|
||||
;
|
||||
if (bullishConditions2)
|
||||
{
|
||||
//
|
||||
conditions.point = vale;
|
||||
conditions.method = ToString(X_X121SMC_XTWPV_METHOD_2);
|
||||
}
|
||||
|
||||
//
|
||||
bool bearishConditions2 =
|
||||
//
|
||||
isNewPeakUnderLast &&
|
||||
donCloseUpper > peak
|
||||
false
|
||||
// hasBearishTrend &&
|
||||
// isNewPeakUnderLast &&
|
||||
// donCloseUpper > peak &&
|
||||
// isPeakDiffPointPassed
|
||||
//
|
||||
;
|
||||
if (bearishConditions2)
|
||||
{
|
||||
//
|
||||
conditions.point = peak;
|
||||
conditions.method = ToString(X_X121SMC_XTWPV_METHOD_2);
|
||||
}
|
||||
|
||||
//
|
||||
@@ -778,7 +921,8 @@ bool DetectX121SMCXTWPVSiganlSetup(
|
||||
//
|
||||
isBullish =
|
||||
//
|
||||
false
|
||||
bullishConditions1 ||
|
||||
bullishConditions2
|
||||
//
|
||||
;
|
||||
|
||||
@@ -798,6 +942,18 @@ bool DetectX121SMCXTWPVSiganlSetup(
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
if (isBullish)
|
||||
{
|
||||
Print("Bullish ...");
|
||||
}
|
||||
|
||||
//
|
||||
if (isBearish)
|
||||
{
|
||||
Print("Bearish ...");
|
||||
}
|
||||
|
||||
//
|
||||
conditions.setupTime = cTime;
|
||||
conditions.dir =
|
||||
@@ -1212,6 +1368,59 @@ bool DetectX121SMCXTWPVSiganlTrigger(
|
||||
bool hasBullishPriceInsideZone = conditions.HasBullishPriceInsideZone();
|
||||
bool hasBearishPriceInsideZone = conditions.HasBearishPriceInsideZone();
|
||||
|
||||
//
|
||||
if (
|
||||
isBullish &&
|
||||
isBasedOnVale &&
|
||||
hasPriceInsideZones &&
|
||||
hasBullishPriceInsideZone //
|
||||
)
|
||||
{
|
||||
//
|
||||
// Demand ...
|
||||
if (conditions.hasDemandZone)
|
||||
{
|
||||
//
|
||||
Add(
|
||||
conditions.demandZone.Lower(),
|
||||
sls //
|
||||
);
|
||||
}
|
||||
|
||||
//
|
||||
// Support ...
|
||||
if (conditions.hasSupportZone)
|
||||
{
|
||||
//
|
||||
Add(
|
||||
conditions.supportZone.Lower(),
|
||||
sls //
|
||||
);
|
||||
}
|
||||
|
||||
//
|
||||
// Order Block ...
|
||||
if (conditions.hasOrderBlock)
|
||||
{
|
||||
//
|
||||
Add(
|
||||
conditions.orderBlock.Lower(),
|
||||
sls //
|
||||
);
|
||||
}
|
||||
|
||||
//
|
||||
// Fair Value Gap ...
|
||||
if (conditions.hasFairValueGap)
|
||||
{
|
||||
//
|
||||
Add(
|
||||
conditions.fairValueGap.Lower(),
|
||||
sls //
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
if (
|
||||
isBearish &&
|
||||
@@ -1285,6 +1494,18 @@ bool DetectX121SMCXTWPVSiganlTrigger(
|
||||
: entry - targetDelta;
|
||||
}
|
||||
|
||||
//
|
||||
if (isBullish)
|
||||
{
|
||||
Print("Bullish ...");
|
||||
}
|
||||
|
||||
//
|
||||
if (isBearish)
|
||||
{
|
||||
Print("Bearish ...");
|
||||
}
|
||||
|
||||
//
|
||||
conditions.sl = sl;
|
||||
conditions.target = target;
|
||||
@@ -1297,6 +1518,97 @@ bool DetectX121SMCXTWPVSiganlTrigger(
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Draw Conditions Pivot Zone ...
|
||||
*
|
||||
* @param conditions: X121SMCStrategyXTWPVSignalConditions instance Reference ...
|
||||
* @param drawer: XCPOIDrawer pointer ...
|
||||
* @param drawnObjects: XCBaseObject instance Reference Collection ...
|
||||
* @param drawState: Boolean ...
|
||||
* @param drawTicksZone: Boolean ...
|
||||
* @param ignoreSwingHighs: Boolean ...
|
||||
* @param ignoreSwingLows: Boolean ...
|
||||
* @param ignoreSupportZones: Boolean ...
|
||||
* @param ignoreResistanceZones: Boolean ...
|
||||
* @param ignoreSupplyZones: Boolean ...
|
||||
* @param ignoreDemandZones: Boolean ...
|
||||
* @param ignoreBullishOrderBlocks: Boolean ...
|
||||
* @param ignoreBearishOrderBlocks: Boolean ...
|
||||
* @param ignoreBullishFairValueGaps: Boolean ...
|
||||
* @param ignoreBearishFairValueGaps: Boolean ...
|
||||
* @param ignoreBullishRejectionBars: Boolean ...
|
||||
* @param ignoreBearishRejectionBars: Boolean ...
|
||||
* @param ignoreBullishMomentumBars: Boolean ...
|
||||
* @param ignoreBearishMomentumBars: Boolean ...
|
||||
*
|
||||
* @return ( int )
|
||||
*/
|
||||
int DrawXTWPVPivotZone(
|
||||
X121SMCStrategyXTWPVSignalConditions &conditions,
|
||||
XCPOIDrawer *drawer,
|
||||
XCBaseObject *&drawnObjects[],
|
||||
bool drawState = false,
|
||||
bool drawTicksZone = false,
|
||||
bool ignoreSwingHighs = false,
|
||||
bool ignoreSwingLows = false,
|
||||
bool ignoreSupportZones = false,
|
||||
bool ignoreResistanceZones = false,
|
||||
bool ignoreSupplyZones = false,
|
||||
bool ignoreDemandZones = false,
|
||||
bool ignoreBullishOrderBlocks = false,
|
||||
bool ignoreBearishOrderBlocks = false,
|
||||
bool ignoreBullishFairValueGaps = false,
|
||||
bool ignoreBearishFairValueGaps = false,
|
||||
bool ignoreBullishRejectionBars = false,
|
||||
bool ignoreBearishRejectionBars = false,
|
||||
bool ignoreBullishMomentumBars = false,
|
||||
bool ignoreBearishMomentumBars = false //
|
||||
)
|
||||
{
|
||||
//
|
||||
int result = 0;
|
||||
|
||||
//
|
||||
Clean(drawnObjects);
|
||||
|
||||
//
|
||||
if (drawer == NULL ||
|
||||
!conditions.HasPivot())
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
drawer.DrawPivot(
|
||||
//
|
||||
conditions.pivot,
|
||||
drawnObjects,
|
||||
//
|
||||
drawState,
|
||||
drawTicksZone,
|
||||
ignoreSwingHighs,
|
||||
ignoreSwingLows,
|
||||
ignoreSupportZones,
|
||||
ignoreResistanceZones,
|
||||
ignoreSupplyZones,
|
||||
ignoreDemandZones,
|
||||
ignoreBullishOrderBlocks,
|
||||
ignoreBearishOrderBlocks,
|
||||
ignoreBullishFairValueGaps,
|
||||
ignoreBearishFairValueGaps,
|
||||
ignoreBullishRejectionBars,
|
||||
ignoreBearishRejectionBars,
|
||||
ignoreBullishMomentumBars,
|
||||
ignoreBearishMomentumBars //
|
||||
);
|
||||
|
||||
//
|
||||
result = ArraySize(drawnObjects);
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Drw Conditions Price Inside Zones ...
|
||||
*
|
||||
@@ -1306,7 +1618,7 @@ bool DetectX121SMCXTWPVSiganlTrigger(
|
||||
*
|
||||
* @return ( int )
|
||||
*/
|
||||
int DrawPriceInsideZones(
|
||||
int DrawTWPVPriceInsideZones(
|
||||
X121SMCStrategyXTWPVSignalConditions &conditions,
|
||||
XCPOIDrawer *drawer,
|
||||
XCBaseObject *&drawnObjects[] //
|
||||
|
||||
Reference in New Issue
Block a user