This commit is contained in:
2024-12-13 19:46:00 +03:30
parent fe54432fa2
commit 940931d78a
9 changed files with 1602 additions and 16 deletions
@@ -2666,6 +2666,29 @@ class XC121SMCTradeHandler : public XCBaseAlert
return result;
}
}
//
if (!youngestPosition.IsValid())
{
//
int symbolIDX = FindLastExecutedSignalItem(signal);
if (IsValidIndex(symbolIDX))
{
//
datetime cTime = TimeCurrent();
int signalPeriodSeconds = PeriodSeconds(signal.period);
datetime lastExecutedTime = mLastExecutedSignals[symbolIDX].time;
datetime passedTime = ((datetime)lastExecutedTime +
((mDelayBarBetweenTwoSignal * signalPeriodSeconds)));
//
result = cTime >= passedTime;
if (!result)
{
return result;
}
}
}
}
//
@@ -2712,6 +2735,9 @@ class XC121SMCTradeHandler : public XCBaseAlert
forceTrail //
);
//
HandleSignalExecuted(signal);
//
string msg = (signal.type == POSITION_TYPE_BUY ? "Long" : "Short") +
" Signal Provided by: " + signal.provider +
@@ -3789,7 +3815,8 @@ class XC121SMCTradeHandler : public XCBaseAlert
private:
//
// Props ...
double mAdditionalVolume; // Volume Additional
double mAdditionalVolume; // Volume Additional
XSymbolLastPosition mLastExecutedSignals[]; // Last Executed Signals
//
// Read Only ...
@@ -4131,6 +4158,78 @@ class XC121SMCTradeHandler : public XCBaseAlert
mCollector.SaveSignal(item);
}
//
int FindLastExecutedSignalItem(XSignal &signal)
{
//
int result = -1;
//
if (!signal.IsValid())
{
return result;
}
//
int count = ArraySize(mLastExecutedSignals);
if (!IsValidSize(count))
{
return result;
}
//
for (int i = 0; i < count; i++)
{
//
XSymbolLastPosition iLast = mLastExecutedSignals[i];
if (iLast.symbol == signal.symbol &&
iLast.provider == signal.provider)
{
//
result = i;
break;
}
}
//
return result;
}
//
void HandleSignalExecuted(XSignal &signal)
{
//
if (!signal.IsValid())
{
return;
}
//
datetime cTime = TimeCurrent();
int symbolIDX = FindLastExecutedSignalItem(signal);
bool hasItem = IsValidIndex(symbolIDX);
if (hasItem)
{
mLastExecutedSignals[symbolIDX].time = cTime;
}
else
{
//
XSymbolLastPosition item;
//
item.time = cTime;
item.symbol = signal.symbol;
item.provider = signal.provider;
//
AddRef(
item,
mLastExecutedSignals //
);
}
}
//
};