This commit is contained in:
2024-07-05 03:12:46 +03:30
parent a60b53388b
commit f846523f70
2 changed files with 383 additions and 6 deletions
+6 -6
View File
@@ -53,7 +53,7 @@ input int x121EAStartSignallingHoure = 3; // Start Signalling
input int x121EAEndSignallingHoure = 22; // End Signalling at Specific Time input int x121EAEndSignallingHoure = 22; // End Signalling at Specific Time
input int x121EACloseOnSpecificTime = -1; // Close All Trades in Specific Time input int x121EACloseOnSpecificTime = -1; // Close All Trades in Specific Time
input int x121EADelayBetweenTwoSignal = 5; // Delay Between two Same Signals input int x121EADelayBetweenTwoSignal = 5; // Delay Between two Same Signals
input int x121EAReuiredSignalVerifications = 1; // Required Verifications for Signals input int x121EAReuiredSignalVerifications = 3; // Required Verifications for Signals
input bool x121EAExecuteSignalsOnBreakout = false; // Execute Signals On Breakouts input bool x121EAExecuteSignalsOnBreakout = false; // Execute Signals On Breakouts
input bool x121EAGetVerificationFromOtherTimeFrames = true; // Get Verifications from Other Time Frames input bool x121EAGetVerificationFromOtherTimeFrames = true; // Get Verifications from Other Time Frames
@@ -75,12 +75,12 @@ input bool x121EAAcceptNextDirectionalSignalsWhenFirstInProfit = true; // Accept
// //
input group "Trailling"; input group "Trailling";
input bool x121EAAllowTrailStop = false; // Enable Trailling Stop Losses input bool x121EAAllowTrailStop = true; // Enable Trailling Stop Losses
input bool x121EADisableTrailingWhenOpposit = true; // Disable Trailling When has Opposite In Drawdown input bool x121EADisableTrailingWhenOpposit = true; // Disable Trailling When has Opposite In Drawdown
input double x121EAFirstTrailDistance = 100; // Start Trailling Distance input double x121EAFirstTrailDistance = 100; // Start Trailling Distance
input double x121EAFirstTrailPoint = 60; // First Stop Trail input double x121EAFirstTrailPoint = 60; // First Stop Trail
input double x121EANextTrailDistance = 50; // Next Trailling Distance input double x121EANextTrailDistance = 50; // Next Trailling Distance
input double x121EANextTrailPoint = 25; // Next Trailling Step input double x121EANextTrailPoint = 30; // Next Trailling Step
// //
// input group "Supporting"; // input group "Supporting";
@@ -112,7 +112,7 @@ input double x121EAMaxAllowedRecoveryVolume = 0; // Max Allowed Recovery Signals
// //
input group "Hedging"; input group "Hedging";
input int x121EARestingAfterHedge = 1000; // Resting Seconds After Hedge input int x121EARestingAfterHedge = 1000; // Resting Seconds After Hedge
input double x121EAMinRequiredProfitPerTrade = 2.5; // Minimum Required Profit for Hedging input double x121EAMinRequiredProfitPerTrade = 0.5; // Minimum Required Profit for Hedging
input double x121EAMinRequiredProfitPerVolumeFactor = 0.01; // Minimum Required Profit for Hedging Per Volume input double x121EAMinRequiredProfitPerVolumeFactor = 0.01; // Minimum Required Profit for Hedging Per Volume
// //
@@ -512,8 +512,8 @@ void X121PreConfigureStyles(X121SetupInputs &inputs)
// //
// XCHMA ... // XCHMA ...
inputs.chmaInputs.showFast = true; inputs.chmaInputs.showFast = false;
inputs.chmaInputs.showSlow = true; inputs.chmaInputs.showSlow = false;
inputs.chmaInputs.showCCFast = false; inputs.chmaInputs.showCCFast = false;
inputs.chmaInputs.showCCSlow = false; inputs.chmaInputs.showCCSlow = false;
inputs.chmaInputs.showSCFast = false; inputs.chmaInputs.showSCFast = false;
+377
View File
@@ -307,6 +307,30 @@ struct XCHMAConditions
// //
bool isRetestFastSlow; bool isRetestFastSlow;
//
bool isFastSupport;
bool isSlowSupport;
//
bool isFastResistance;
bool isSlowResistance;
//
bool isRejectedFastAsResistance;
bool isRejectedSlowAsResistance;
//
bool isRejectedFastAsSupport;
bool isRejectedSlowAsSupport;
//
bool isBreakedFastAsResistance;
bool isBreakedSlowAsResistance;
//
bool isBreakedFastAsSupport;
bool isBreakedSlowAsSupport;
// //
bool isFastOverMax; bool isFastOverMax;
bool isFastUnderMax; bool isFastUnderMax;
@@ -695,6 +719,18 @@ struct XCHMAConditions
isCloseUnderSlow = false; isCloseUnderSlow = false;
isCloseCrossedUnderSlow = false; isCloseCrossedUnderSlow = false;
isRetestFastSlow = false; isRetestFastSlow = false;
isFastSupport = false;
isSlowSupport = false;
isFastResistance = false;
isSlowResistance = false;
isRejectedFastAsResistance = false;
isRejectedSlowAsResistance = false;
isRejectedFastAsSupport = false;
isRejectedSlowAsSupport = false;
isBreakedFastAsResistance = false;
isBreakedSlowAsResistance = false;
isBreakedFastAsSupport = false;
isBreakedSlowAsSupport = false;
isFastOverMax = false; isFastOverMax = false;
isFastUnderMax = false; isFastUnderMax = false;
isFastOverMin = false; isFastOverMin = false;
@@ -930,6 +966,42 @@ struct XCHMAConditions
if (isRetestFastSlow) if (isRetestFastSlow)
{ {
} }
if (isFastSupport)
{
}
if (isSlowSupport)
{
}
if (isFastResistance)
{
}
if (isSlowResistance)
{
}
if (isRejectedFastAsResistance)
{
}
if (isRejectedSlowAsResistance)
{
}
if (isRejectedFastAsSupport)
{
}
if (isRejectedSlowAsSupport)
{
}
if (isBreakedFastAsResistance)
{
}
if (isBreakedSlowAsResistance)
{
}
if (isBreakedFastAsSupport)
{
}
if (isBreakedSlowAsSupport)
{
}
if (isFastOverMax) if (isFastOverMax)
{ {
} }
@@ -1485,6 +1557,18 @@ struct XCHMAConditions
ToString("isCloseUnderSlow", isCloseUnderSlow, ignoreFalseConditions, separator) + ToString("isCloseUnderSlow", isCloseUnderSlow, ignoreFalseConditions, separator) +
ToString("isCloseCrossedUnderSlow", isCloseCrossedUnderSlow, ignoreFalseConditions, separator) + ToString("isCloseCrossedUnderSlow", isCloseCrossedUnderSlow, ignoreFalseConditions, separator) +
ToString("isRetestFastSlow", isRetestFastSlow, ignoreFalseConditions, separator) + ToString("isRetestFastSlow", isRetestFastSlow, ignoreFalseConditions, separator) +
ToString("isFastSupport", isFastSupport, ignoreFalseConditions, separator) +
ToString("isSlowSupport", isSlowSupport, ignoreFalseConditions, separator) +
ToString("isFastResistance", isFastResistance, ignoreFalseConditions, separator) +
ToString("isSlowResistance", isSlowResistance, ignoreFalseConditions, separator) +
ToString("isRejectedFastAsResistance", isRejectedFastAsResistance, ignoreFalseConditions, separator) +
ToString("isRejectedSlowAsResistance", isRejectedSlowAsResistance, ignoreFalseConditions, separator) +
ToString("isRejectedFastAsSupport", isRejectedFastAsSupport, ignoreFalseConditions, separator) +
ToString("isRejectedSlowAsSupport", isRejectedSlowAsSupport, ignoreFalseConditions, separator) +
ToString("isBreakedFastAsResistance", isBreakedFastAsResistance, ignoreFalseConditions, separator) +
ToString("isBreakedSlowAsResistance", isBreakedSlowAsResistance, ignoreFalseConditions, separator) +
ToString("isBreakedFastAsSupport", isBreakedFastAsSupport, ignoreFalseConditions, separator) +
ToString("isBreakedSlowAsSupport", isBreakedSlowAsSupport, ignoreFalseConditions, separator) +
ToString("isFastOverMax", isFastOverMax, ignoreFalseConditions, separator) + ToString("isFastOverMax", isFastOverMax, ignoreFalseConditions, separator) +
ToString("isFastUnderMax", isFastUnderMax, ignoreFalseConditions, separator) + ToString("isFastUnderMax", isFastUnderMax, ignoreFalseConditions, separator) +
ToString("isFastOverMin", isFastOverMin, ignoreFalseConditions, separator) + ToString("isFastOverMin", isFastOverMin, ignoreFalseConditions, separator) +
@@ -3066,6 +3150,26 @@ public:
MODE_LOW // MODE_LOW //
); );
//
XOHCL ppBar;
result = ppBar.Init(
mSymbol,
mPeriod,
ppIndex //
);
if (!result)
{
return result;
}
double phhValue = ppBar.FindHighest(
loopback * 2,
MODE_HIGH //
);
double pllValue = ppBar.FindLowest(
loopback * 2,
MODE_LOW //
);
// //
double allValues[]; double allValues[];
double maxValue = 0; double maxValue = 0;
@@ -3172,6 +3276,267 @@ public:
// //
); );
//
// Calculate Support and Resistance Behaviour for Fast and Slow ...
//
// Supports Happens when Lowest Low of atleast n Number of Bars
// are above line ...
bool isFastSupport = pllValue > conditions.fast[ppIndex];
bool isSlowSupport = pllValue > conditions.slow[ppIndex];
//
// Resistance Happens when Highest High of atleast n NUmber of Bars
// are below line ...
bool isFastResistance = phhValue < conditions.fast[ppIndex];
bool isSlowResistance = phhValue < conditions.slow[ppIndex];
//
// Rejection occure by Shaddows ...
// this mean Previous Bar Shadows breaked Line but Close doesnt make sense ...
// price rejected ...
//
bool isRejectedFastAsSupport =
//
!isFastSupport
? false
: (
//
// Check Bar State ...
(ppBar.low > conditions.fast[ppIndex])
//
&&
//
// Check Shadow Break ...
(pBar.high > conditions.fast[pIndex] &&
//
// Touch ...
pBar.low < conditions.fast[pIndex])
//
&&
//
// Check Close Bar for Rejection ...
(cBar.close > conditions.fast[cIndex] &&
cBar.IsBullish())
//
)
//
;
//
bool isRejectedSlowAsSupport =
//
!isSlowSupport
? false
: (
//
// Check Bar State ...
(ppBar.low > conditions.slow[ppIndex])
//
&&
//
// Check Shadow Break ...
(pBar.high > conditions.slow[pIndex] &&
//
// Touch ...
pBar.low < conditions.slow[pIndex])
//
&&
//
// Check Close Bar for Rejection ...
(cBar.close > conditions.slow[cIndex] &&
cBar.IsBullish())
//
)
//
;
//
bool isRejectedFastAsResistance =
//
!isFastResistance
? false
: (
//
// Check Bar State ...
(ppBar.high < conditions.fast[ppIndex])
//
&&
//
// Check Shadow Break ...
(pBar.low < conditions.fast[pIndex] &&
//
// Touch ...
pBar.high > conditions.fast[pIndex])
//
&&
//
// Check Close Bar for Rejection ...
(cBar.close < conditions.fast[cIndex] &&
cBar.IsBearish())
//
)
//
;
//
bool isRejectedSlowAsResistance =
//
!isSlowResistance
? false
: (
//
// Check Bar State ...
(ppBar.high < conditions.slow[ppIndex])
//
&&
//
// Check Shadow Break ...
(pBar.low < conditions.slow[pIndex] &&
//
// Touch ...
pBar.high > conditions.slow[pIndex])
//
&&
//
// Check Close Bar for Rejection ...
(cBar.close < conditions.slow[cIndex] &&
cBar.IsBearish())
//
)
//
;
//
// Breakes occures by Price Close ...
// this means Previous Bar Close in One Side of line and next Close on another Side ...
// also Fibo 0.5 of Candle Body appears on opposit side ...
//
bool isBreakedFastAsSupport =
//
!isFastSupport
? false
: (
//
// Check Bar State ...
(ppBar.low > conditions.fast[ppIndex])
//
&&
//
// Check Shadow Break ...
(pBar.high > conditions.fast[pIndex] &&
//
// Touch ...
pBar.low < conditions.fast[pIndex] &&
//
// Calculate 50% ...
(conditions.fast[pIndex] - pBar.GetDown() > (pBar.GetBody() / 100) * 50))
//
&&
//
// Check Close Bar for Breakout ...
(cBar.close < conditions.fast[cIndex] &&
cBar.IsBearish())
//
)
//
;
//
bool isBreakedSlowAsSupport =
//
!isSlowSupport
? false
: (
//
// Check Bar State ...
(ppBar.low > conditions.slow[ppIndex])
//
&&
//
// Check Shadow Break ...
(pBar.high > conditions.slow[pIndex] &&
//
// Touch ...
pBar.low < conditions.slow[pIndex] &&
//
// Calculate 50% ...
(conditions.slow[pIndex] - pBar.GetDown() > (pBar.GetBody() / 100) * 50))
//
&&
//
// Check Close Bar for Breakout ...
(cBar.close < conditions.slow[cIndex] &&
cBar.IsBearish())
//
)
//
;
//
bool isBreakedFastAsResistance =
//
!isFastResistance
? false
: (
//
// Check Bar State ...
(ppBar.high < conditions.fast[ppIndex])
//
&&
//
// Check Shadow Break ...
(pBar.low < conditions.fast[pIndex] &&
//
// Touch ...
pBar.high > conditions.fast[pIndex] &&
//
// Calculate 50% ...
(pBar.GetUp() - conditions.fast[pIndex] > (pBar.GetBody() / 100) * 50))
//
&&
//
// Check Close Bar for Breakout ...
(cBar.close > conditions.fast[cIndex] &&
cBar.IsBullish())
//
)
//
;
//
bool isBreakedSlowAsResistance =
//
!isSlowResistance
? false
: (
//
// Check Bar State ...
(ppBar.high < conditions.slow[ppIndex])
//
&&
//
// Check Shadow Break ...
(pBar.low < conditions.slow[pIndex] &&
//
// Touch ...
pBar.high > conditions.slow[pIndex] &&
//
// Calculate 50% ...
(pBar.GetUp() - conditions.slow[pIndex] > (pBar.GetBody() / 100) * 50))
//
&&
//
// Check Close Bar for Breakout ...
(cBar.close > conditions.slow[cIndex] &&
cBar.IsBullish())
//
)
//
;
// //
// Current ... // Current ...
@@ -3685,6 +4050,18 @@ public:
conditions.isCloseUnderSlow = isCloseUnderSlow; conditions.isCloseUnderSlow = isCloseUnderSlow;
conditions.isCloseCrossedUnderSlow = isCloseCrossedUnderSlow; conditions.isCloseCrossedUnderSlow = isCloseCrossedUnderSlow;
conditions.isRetestFastSlow = isRetestFastSlow; conditions.isRetestFastSlow = isRetestFastSlow;
conditions.isFastSupport = isFastSupport;
conditions.isSlowSupport = isSlowSupport;
conditions.isFastResistance = isFastResistance;
conditions.isSlowResistance = isSlowResistance;
conditions.isRejectedFastAsResistance = isRejectedFastAsResistance;
conditions.isRejectedSlowAsResistance = isRejectedSlowAsResistance;
conditions.isRejectedFastAsSupport = isRejectedFastAsSupport;
conditions.isRejectedSlowAsSupport = isRejectedSlowAsSupport;
conditions.isBreakedFastAsResistance = isBreakedFastAsResistance;
conditions.isBreakedSlowAsResistance = isBreakedSlowAsResistance;
conditions.isBreakedFastAsSupport = isBreakedFastAsSupport;
conditions.isBreakedSlowAsSupport = isBreakedSlowAsSupport;
conditions.isFastOverMax = isFastOverMax; conditions.isFastOverMax = isFastOverMax;
conditions.isFastUnderMax = isFastUnderMax; conditions.isFastUnderMax = isFastUnderMax;
conditions.isFastOverMin = isFastOverMin; conditions.isFastOverMin = isFastOverMin;