start implementing XTrade Handler Class ...

This commit is contained in:
2024-07-22 02:04:16 +03:30
parent d194d85082
commit d1e8daa131
5 changed files with 853 additions and 38 deletions
+86 -8
View File
@@ -67,6 +67,14 @@ XSCXCCHelper *mCCHelper;
// Registred Strategies ...
XSCBaseStrategy *strategies[];
//
// Trader Instance Class ...
XSCTrade *eaTrader;
//
// Trade Handler Instance Class ...
XSCXTradeHandler *eaTradeHandler;
//
// Event Handlers ...
@@ -90,7 +98,7 @@ int OnInit()
drawPrefix = ShortName;
//
// EventSetTimer(1);
EventSetTimer(5);
// EventSetMillisecondTimer(100);
//
@@ -120,7 +128,11 @@ void OnDeinit(const int reason)
delete mCCHelper;
//
// EventKillTimer();
delete eaTrader;
delete eaTradeHandler;
//
EventKillTimer();
//
Clean(strategies);
@@ -130,19 +142,14 @@ void OnDeinit(const int reason)
// On Tick Handler ...
void OnTick()
{
//
HandleStrategiesOnTick();
//
HandleTradeState();
}
//
// On Timer ...
void OnTimer()
{
//
// HandleStrategiesOnTick();
HandleTradeState();
}
//
@@ -199,6 +206,14 @@ bool InitialEA()
return result;
}
//
// Create Trader Instance ...
eaTrader = new XSCTrade(
eaSlippage,
eaMagicNumber //
);
eaTradeHandler = new XSCXTradeHandler(eaTrader);
//
XSymbolParser symbolParser;
@@ -241,6 +256,7 @@ bool InitialEA()
eaR2R, // R2R ...
eaSlippage,
magicNumber,
true, // Ignore Signal Execution
true, // Use TP SL Point
false, // Use Max
50, // eaTPPoint, // TP
@@ -254,6 +270,7 @@ bool InitialEA()
);
eurusdTestStrategy.SetAlertLogAlerts(true);
eurusdTestStrategy.SetAlertEnableAlerts(true);
eurusdTestStrategy.AddSignalEventHandler(OnSignalRecieved);
RegisterStrategy(eurusdTestStrategy);
}
}
@@ -307,6 +324,67 @@ void HandleTradeState()
{
//
// Implement All Trade States here ...
eaTradeHandler.UpdateData();
}
//
// All Signals from Strategies Comming Here for Execution or
// Analyzing ...
void OnSignalRecieved(XSignal &signal)
{
//
ENUM_X_SIGNAL_EXECUTION_RESULT state;
bool isExecuted = eaTrader.ExecuteSignal(
signal,
state //
);
//
if (isExecuted)
{
//
// Find Executed Signal Deal History ...
XDeal deals[];
double commission = 0;
int dealsCount = eaTrader.GetDeals(
deals,
signal.symbol,
signal.provider,
signal.period,
NULL,
DEAL_ENTRY_IN //
);
if (IsValidSize(dealsCount))
{
//
for (int i = 0; i < dealsCount; i++)
{
//
XDeal iDeal = deals[i];
if (iDeal.positionId == signal.positionId)
{
//
commission = iDeal.commission;
break;
}
}
}
//
// Add Signal to Trade Handler ...
eaTradeHandler.AddExecutedSignal(
signal,
commission //
);
//
string msg = (signal.type == POSITION_TYPE_BUY ? "Long" : "Short") +
" Signal Provided by: " + signal.provider +
" on: " + signal.symbol +
" in: " + ToString(signal.period) +
" Executed Successfully ...";
Print(msg);
}
}
//