This commit is contained in:
2025-02-26 01:44:21 +03:30
parent 22298e8bab
commit 727888d783
19 changed files with 19179 additions and 9414 deletions
@@ -299,16 +299,16 @@ class XC121SMCCycleHelper : public XCBase
string symbol,
ENUM_TIMEFRAMES period,
X121Inputs &x121Inputs,
int requiredPOIS = 50 //
int requiredPOIs = 50 //
)
{
//
bool result = false;
//
if (requiredPOIS < 10)
if (requiredPOIs < 10)
{
requiredPOIS = 10;
requiredPOIs = 10;
}
//
@@ -341,8 +341,21 @@ class XC121SMCCycleHelper : public XCBase
symbol,
period //
);
mPOIDetector.MaxNumberOfPOIs(requiredPOIS);
mPOIDetector.MaxNumberOfRequiredPOIs(requiredPOIS);
mPOIDetector.MaxRequiredPOIs(requiredPOIs);
//
int maxLoopbackBars = mPOIDetector.MaxAllowedLoopbackForInit();
int periodSeconds = PeriodSeconds(period);
if (periodSeconds > PeriodSeconds(PERIOD_M15)) {
//
int multiplier = periodSeconds / PeriodSeconds(PERIOD_M15);
//
if (multiplier >= 1) {
maxLoopbackBars *= 2;
}
}
mPOIDetector.MaxAllowedLoopbackForInit(maxLoopbackBars);
mPOIDetector.Init();
//
@@ -48,7 +48,7 @@ struct X121SMCTradeData
double commission; // Commission
string conditions; // Signal Conditions
double maxDrawdown; // Max Position Drawdown
bool isTargeted; // Check Targetted Before Or Not
double lastTarget; // Check Last Targetted
double lastTrailedTPLevel; // Hold Last Trailed TP Level
//
@@ -115,7 +115,7 @@ struct X121SMCTradeData
conditions = NULL;
//
isTargeted = false;
lastTarget = 0;
//
signal.Clean();
@@ -644,9 +644,22 @@ struct X121SMCTradeData
*
* @return ( double )
*/
double Target()
int Targets(double &targets[])
{
return signal.target;
//
int result = 0;
//
Copy(
signal.targets,
targets //
);
//
result = ArraySize(targets);
//
return result;
}
/**
@@ -3722,50 +3735,72 @@ class XC121SMCTradeHandler : public XCBaseAlert
//
// Handle RF On Target ...
double target = iData.Target();
double targetDelta = isLong
? target + (15 * points)
: target - (15 * points);
bool canRF =
target > 0 &&
!iData.isTargeted &&
(isLong ? target > entry
: target < entry) &&
(isLong
? iPosition.sl < target
: iPosition.sl > target) &&
(isLong
? iPosition.price > targetDelta
: iPosition.price < targetDelta);
if (canRF)
double targets[];
int targetsCount = iData.Targets(targets);
bool hasTargets = IsValidSize(targetsCount);
if (hasTargets)
{
//
double sl = target;
double tp = iPosition.tp;
string comment = "RF On Target ...";
bool isModified = mTrader.Modify(
iData.ticket,
sl,
tp,
comment //
);
if (isModified)
for (int k = 0; k < targetsCount; k++)
{
//
isProtected = true;
double target = targets[k];
bool isValidTarget =
iData.lastTarget == 0
? true
: isLong
? target > iData.lastTarget
: target < iData.lastTarget;
if (!isValidTarget)
{
continue;
}
//
// Update mData ...
mData[i].isTargeted = true;
double targetDelta = isLong
? target + (15 * points)
: target - (15 * points);
bool canRF =
target > 0 &&
(isLong ? target > entry
: target < entry) &&
(isLong
? iPosition.sl < target
: iPosition.sl > target) &&
(isLong
? iPosition.price > targetDelta
: iPosition.price < targetDelta);
if (canRF)
{
//
double sl = target;
double tp = iPosition.tp;
string comment = "RF On Target ...";
bool isModified = mTrader.Modify(
iData.ticket,
sl,
tp,
comment //
);
if (isModified)
{
//
isProtected = true;
//
string message = prefix +
ToString(iData.Type()) +
" Position: " +
ToString(iData.ticket) +
" RF On Traget: " + ToString(target) +
" Successfully ...";
Alert(message);
//
// Update mData ...
mData[i].lastTarget = target;
//
string message = prefix +
ToString(iData.Type()) +
" Position: " +
ToString(iData.ticket) +
" RF On Traget: " + ToString(target) +
" Successfully ...";
Alert(message);
}
}
}
}
}
+5 -2
View File
@@ -267,8 +267,8 @@ struct X121SMCStrategyConditions
//
double sl;
double tp;
double target;
string provider;
double targets[];
ENUM_X_DIRECTION signalDir;
//
@@ -286,9 +286,9 @@ struct X121SMCStrategyConditions
void Clean()
{
//
time = NULL;
symbol = NULL;
period = NULL;
time = NULL;
//
sl = 0;
@@ -296,6 +296,9 @@ struct X121SMCStrategyConditions
provider = NULL;
signalDir = X_DIRECTION_NONE;
//
Clean(targets);
//
ZeroMemory(this);
}
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+11 -88
View File
@@ -294,20 +294,12 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy
signal.pushers = pushers;
signal.provider = provider;
signal.time = TimeCurrent();
signal.target = conditions.target;
//
bool canReplaceTarget =
signal.target > 0 &&
(hasLong
? signal.target > signal.tp
: signal.target < signal.tp);
if (canReplaceTarget)
{
//
signal.tp = conditions.target;
signal.target = tp;
}
Copy(
conditions.targets,
signal.targets //
);
//
result = PrepareSignal(signal);
@@ -354,40 +346,6 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy
signal.volume = cVolume;
}
}
//
// Fix Signal TP Based On Working Zone ...
// double maxAllowedTP =
// hasLong
// ? mXWZConditions.workingZone.upper
// : mXWZConditions.workingZone.lower;
// bool canApplyMaxAlowedTP = (hasLong &&
// signal.tp > maxAllowedTP) ||
// (!hasLong && signal.tp < maxAllowedTP);
// if (canApplyMaxAlowedTP)
// {
// signal.tp = maxAllowedTP;
// }
//
// Configuring Global Protector ...
// signal.trailSL = true;
// signal.trailSLStartOnReachTPLevel = 3;
// signal.fullTPLevel = signal.GetRiskRewardRatio();
// //
// mXSupDemOBSSignalDetector.RemoveDraws();
// mXSupDemOBSSignalDetector.DrawConditions(
// mXSupDemOBSConditions,
// mVisionCycleHelper.mPOIDrawer //
// );
// //
// mXSupDemOBSSignalDetector.RemoveWorkingZoneDraws();
// mXSupDemOBSSignalDetector.DrawWorkingZone(
// mXSupDemOBSConditions,
// mVisionCycleHelper.mPOIDrawer //
// );
}
//
@@ -595,33 +553,9 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy
setupDir = mXWZSignalDetector.mConditions.dir;
setupTime = mXWZSignalDetector.mConditions.setupTime;
//
if (!isSetuped)
{
//
mXWZSignalDetector.RemoveDraws();
// mXWZSignalDetector.RemoveWorkingZoneDraws();
//
// mXWZSignalDetector.DrawWorkingZone(
// mXWZSignalDetector.mConditions,
// mVisionCycleHelper.mPOIDrawer //
// );
//
mXWZSignalDetector.DrawConditions(
mXWZSignalDetector.mConditions,
mVisionCycleHelper.mPOIDrawer //
);
}
//
if (isSetuped)
{
//
mXWZSignalDetector.RemoveDraws();
// mXWZSignalDetector.RemoveWorkingZoneDraws();
//
int items = mXWZSignalDetector
.AddConditionsIfNotExists();
@@ -694,22 +628,6 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy
//
if (canTrigger)
{
//
mXWZSignalDetector.RemoveDraws();
// mXWZSignalDetector.RemoveWorkingZoneDraws();
//
// mXWZSignalDetector.DrawWorkingZone(
// mTmpConditions[i],
// mVisionCycleHelper.mPOIDrawer //
// );
//
mXWZSignalDetector.DrawConditions(
mTmpConditions[i],
mVisionCycleHelper.mPOIDrawer //
);
//
selectedIndex = i;
mConditions = mTmpConditions[i];
@@ -749,7 +667,12 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy
conditions.sl = mConditions.sl;
conditions.provider = providerStr;
conditions.signalDir = mConditions.dir;
conditions.target = mConditions.target;
//
Copy(
mConditions.targets,
conditions.targets //
);
//
xWZConditions = mConditions;
@@ -785,7 +708,7 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy
//
if (mMaxAllowedRequiredPOIs <= 0)
{
mMaxAllowedRequiredPOIs = 50;
mMaxAllowedRequiredPOIs = 200;
}
//