This commit is contained in:
2025-01-03 20:25:00 +03:30
parent 5f2a2f822e
commit a9ab5a6258
10 changed files with 8609 additions and 4449 deletions
@@ -27,6 +27,7 @@
#include "../../Classes/x-saherelm.x-bar.analyser.class.mq5"
#include "../../Classes/x-saherelm.x-poi.drawer.class.mq5"
#include "../../Classes/x-saherelm.x-trade.class.mq5"
#include "../Libraries/x-121.smc.lib.mq5"
//
// Definitions ...
@@ -3196,6 +3197,120 @@ class XC121SMCTradeHandler : public XCBaseAlert
return result;
}
/**
* Execute Specific Signal using Trade Handler ...
*
* @param signal: XSignal instance Reference ...
* @param state: ENUM_X_SIGNAL_EXECUTION_RESULT Reference for olding Signal Execution Result Reason ...
* @param ignorePolicies: Boolean ...
*
* @return ( bool )
*/
bool ExecuteSignal(
XSignal &signal, // Signal for Execution
X121SMCStrategyConditions &conditions, // Signal Conditions
ENUM_X_SIGNAL_EXECUTION_RESULT &state, // Execution State
bool ignorePolicies = false // Ignore Execution Policies
)
{
//
bool result = false;
//
// Check Signal Validation ...
result = signal.IsValid() &&
conditions.IsValid();
if (!result)
{
return result;
}
//
// Check Policies ...
if (!ignorePolicies)
{
//
// Filter Signals if Necessary ...
result = CanExecute(
signal,
state //
);
if (!result)
{
//
AlertSignalExecutionFailed(
signal,
state //
);
//
return result;
}
}
//
// Apply Additional Volume to Signal if Provided ...
double additionalVolume = AdditionalVolume();
if (additionalVolume > 0)
{
signal.volume += mAdditionalVolume;
}
//
// Execute Signal ...
result = mTrader.ExecuteSignal(
signal,
state //
);
if (result)
{
//
// Add XTradeHandler Data ...
Add(signal);
if (CanDraw())
{
//
XCSignalObject *iObj;
mDrawer.DrawSignal(signal, iObj);
//
XCBaseObject *conditionsObjects[];
DrawX121SMCStrategyConditions(
conditions,
conditionsObjects,
mDrawer //
);
}
//
// Handle Last Executed Signal ...
HandleSignalExecuted(signal);
//
// Alert Executed Signal ...
string msg = (signal.type == POSITION_TYPE_BUY ? "Long" : "Short") +
" Signal Provided by: " + signal.provider +
(signal.pushers > 1 ? " Pushers: " + ToString(signal.pushers) : "") +
" on: " + signal.symbol +
" in: " + ToString(signal.period) +
" Executed Successfully ...";
Alert(msg);
}
//
if (!result)
{
//
AlertSignalExecutionFailed(
signal,
state //
);
}
//
return result;
}
//
// Timing Actions ...