last works ...

This commit is contained in:
2024-12-27 13:44:03 +03:30
parent 54593e14f6
commit fc563e29ef
4 changed files with 157 additions and 11 deletions
@@ -634,6 +634,13 @@ bool DetectX121SMCTestSiganlTrigger(
{ {
// //
// Cleanup Setup Conditions ... // Cleanup Setup Conditions ...
int setupAge = conditions.GetSetupAge();
if (IsValidSize(setupAge) &&
IsValidSize(maxAllowedSetupAge) &&
setupAge >= maxAllowedSetupAge)
{
conditions.Clean();
}
// //
return result; return result;
@@ -965,6 +965,13 @@ bool DetectX121SMCXPVDPSiganlTrigger(
{ {
// //
// Cleanup Setup Conditions ... // Cleanup Setup Conditions ...
int setupAge = conditions.GetSetupAge();
if (IsValidSize(setupAge) &&
IsValidSize(maxAllowedSetupAge) &&
setupAge >= maxAllowedSetupAge)
{
conditions.Clean();
}
// //
return result; return result;
+126 -11
View File
@@ -854,6 +854,30 @@ bool DetectX121SMCXVWPBSiganlTrigger(
// //
// Trigger Conditions ... // Trigger Conditions ...
//
double vwapFast = triggerConditions.x121Conditions.vwapFastBuffer[1];
double vwapMid = triggerConditions.x121Conditions.vwapMidBuffer[1];
double vwapSlow = triggerConditions.x121Conditions.vwapSlowBuffer[1];
//
double vwaps[3] = {
vwapFast,
vwapMid,
vwapSlow,
};
double vwapMax = GetMax(vwaps);
double vwapMin = GetMin(vwaps);
//
bool isNewPeak = triggerConditions.x121Conditions.isNewPeak;
bool isNewPeakOverLast = triggerConditions.x121Conditions.isNewPeakOverLast;
bool isNewPeakUnderLast = triggerConditions.x121Conditions.isNewPeakUnderLast;
//
bool isNewVale = triggerConditions.x121Conditions.isNewVale;
bool isNewValeOverLast = triggerConditions.x121Conditions.isNewValeOverLast;
bool isNewValeUnderLast = triggerConditions.x121Conditions.isNewValeUnderLast;
// //
double triggerPeak = triggerConditions.x121Conditions.peaksBuffer[1]; double triggerPeak = triggerConditions.x121Conditions.peaksBuffer[1];
double decisionPeak = decisionConditions.x121Conditions.peaksBuffer[1]; double decisionPeak = decisionConditions.x121Conditions.peaksBuffer[1];
@@ -870,6 +894,14 @@ bool DetectX121SMCXVWPBSiganlTrigger(
// //
bool isPeaksSameFormed = bool isPeaksSameFormed =
//
(
//
triggerPeak == decisionPeak
//
)
//
||
// //
( (
// //
@@ -903,6 +935,14 @@ bool DetectX121SMCXVWPBSiganlTrigger(
// //
bool isValesSameFormed = bool isValesSameFormed =
//
(
//
triggerVale == decisionVale
//
)
//
||
// //
( (
// //
@@ -953,21 +993,69 @@ bool DetectX121SMCXVWPBSiganlTrigger(
} }
// //
conditions.Clean(); // Check Last VWap State Change ...
XValueChange vwapStateChnges[];
int vwapStateChngesCount = triggerCycleHelper
.FillVWapStateChanges(vwapStateChnges);
XValueChange lastVWapStateChnged;
bool hasLastVWapStateChanged = false;
if (IsValidSize(vwapStateChngesCount) &&
vwapStateChngesCount >= 2)
{
//
lastVWapStateChnged = vwapStateChnges[vwapStateChngesCount - 2];
hasLastVWapStateChanged = lastVWapStateChnged.IsValid();
}
//
double donOpenUpper = triggerConditions.x121Conditions.donOpenUpperBuffer[1];
double donOpenLower = triggerConditions.x121Conditions.donOpenLowerBuffer[1];
//
double donCloseUpper = triggerConditions.x121Conditions.donCloseUpperBuffer[1];
double donCloseLower = triggerConditions.x121Conditions.donCloseLowerBuffer[1];
//
bool isDonUpperBullish = donCloseUpper > donOpenUpper;
bool isDonUpperBearish = donCloseUpper < donOpenUpper;
//
bool isDonLowerBullish = donCloseLower > donOpenLower;
bool isDonLowerBearish = donCloseLower < donOpenLower;
//
bool isDonBullishFormed =
//
(isDonUpperBullish ||
isDonLowerBullish)
//
;
//
bool isDonBearishFormed =
//
(isDonUpperBearish ||
isDonLowerBearish)
//
;
// //
isBullish = isBullish =
// (isNewValeOverLast ||
false isNewPeakOverLast) &&
// isDonBullishFormed &&
; hasLastVWapStateChanged &&
(isBullish &&
IsBullish(lastVWapStateChnged.dir));
// //
isBearish = isBearish =
// (isNewPeakUnderLast ||
false isNewValeUnderLast) &&
// isDonBearishFormed &&
; hasLastVWapStateChanged &&
(isBearish &&
IsBearish(lastVWapStateChnged.dir));
// //
result = isBullish || result = isBullish ||
@@ -976,19 +1064,46 @@ bool DetectX121SMCXVWPBSiganlTrigger(
{ {
// //
// Cleanup Setup Conditions ... // Cleanup Setup Conditions ...
int setupAge = conditions.GetSetupAge();
if (IsValidSize(setupAge) &&
IsValidSize(maxAllowedSetupAge) &&
setupAge >= maxAllowedSetupAge)
{
conditions.Clean();
}
// //
return result; return result;
} }
//
// Selecting SL ...
//
double longSL = 0;
double shortSL = 0;
double entry = GetEntry(
conditions.symbol,
setupDir //
);
//
double longDistance = MathAbs(vwapMax - MathMax(triggerVale, donCloseLower)) / 2;
double shortDistance = MathAbs(vwapMin - MathMin(triggerPeak, donCloseUpper)) / 2;
//
longSL = entry - longDistance;
shortSL = entry + shortDistance;
// //
conditions.triggerTime = cTime; conditions.triggerTime = cTime;
conditions.sl = isBullish conditions.sl = isBullish
? 0 ? vwapMin
: 0; : vwapMax;
conditions.type = isBullish conditions.type = isBullish
? X_POSITION_TYPE_LONG ? X_POSITION_TYPE_LONG
: X_POSITION_TYPE_SHORT; : X_POSITION_TYPE_SHORT;
// //
return result; return result;
} }
@@ -321,6 +321,23 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy
signal.trailSLStartOnReachTPLevel = 3; signal.trailSLStartOnReachTPLevel = 3;
} }
//
// Configure Signal Protecting ...
if (hasXVWPBSignal) {
//
signal.fullTPLevel = r2r;
signal.partialCloseOnTPLevel = 2;
signal.partialCloseMultiplier = 0.5;
//
signal.riskFreeOnBreakEven = true;
signal.tpLevelForBreakEven = 1;
//
signal.trailSL = true;
signal.trailSLStartOnReachTPLevel = 2;
}
// //
result = PrepareSignal(signal); result = PrepareSignal(signal);
if (result) if (result)