last ...
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
@@ -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;
|
||||
}
|
||||
|
||||
//
|
||||
|
||||
Reference in New Issue
Block a user