last ...
This commit is contained in:
@@ -27,7 +27,7 @@
|
||||
|
||||
//
|
||||
// Define On Signal Event Handler Type ...
|
||||
typedef void (*TOnSignal)(XSignal &signals[]);
|
||||
typedef void (*TOnSignal)(XSignal &signal);
|
||||
|
||||
//
|
||||
// Tokens ...
|
||||
@@ -1703,8 +1703,12 @@ public:
|
||||
ulong magicNumber, // Specify Magic Number
|
||||
//
|
||||
// Event Handlers ...
|
||||
TOnSignal onSignal = NULL, // On Signal Recieved Event Handler
|
||||
TOnModify onModifyPosition = NULL, // On Modify Position Event Handler
|
||||
TOnStopLoss onStopLossTriggered = NULL, // On StopLoass Triggered Event Handler
|
||||
TOnTakeProfit onTakeProfitTriggered = NULL, // On TakeProfit Triggered Event Handler
|
||||
TOnForceClose onForceClosePosition = NULL, // On Force Close Position Event Handler
|
||||
TOnPartialClose onPartialClosePosition = NULL, // On Partial Close Position Event Handler
|
||||
TOnDealsChanged onDealsChangedHandler = NULL, // On Deals Changed Event Handler
|
||||
TOnOrdersChanged onOrdersChangedHandler = NULL, // On Orders Changed Event Handler
|
||||
TOnPositionsChanged onPositionsChangedHandler = NULL, // On Positions Changed Event Handler
|
||||
@@ -1723,15 +1727,42 @@ public:
|
||||
|
||||
//
|
||||
// Set Event Handlers ...
|
||||
mOnSignal = onSignal;
|
||||
mOnModifyPosition = onModifyPosition;
|
||||
mOnStopLossTriggered = onStopLossTriggered;
|
||||
mOnForceClosePosition = onForceClosePosition;
|
||||
mOnTakeProfitTriggered = onTakeProfitTriggered;
|
||||
mOnDealsChangedHandler = onDealsChangedHandler;
|
||||
mOnPartialClosePosition = onPartialClosePosition;
|
||||
mOnOrdersChangedHandler = onOrdersChangedHandler;
|
||||
mOnPositionsChangedHandler = onPositionsChangedHandler;
|
||||
mOnTradeStateChangedHandler = onTradeStateChangedHandler;
|
||||
|
||||
//
|
||||
// Add Event Listeners to XTrade Class if they Provided ...
|
||||
if (mOnSignal != NULL)
|
||||
{
|
||||
AddOnSignalEventHandler(mOnSignal);
|
||||
}
|
||||
|
||||
//
|
||||
if (mOnModifyPosition != NULL)
|
||||
{
|
||||
mTrader.AddOnModifyPositionEventHandler(mOnModifyPosition);
|
||||
}
|
||||
|
||||
//
|
||||
if (mOnForceClosePosition != NULL)
|
||||
{
|
||||
mTrader.AddOnForceClosePositionEventHandler(mOnForceClosePosition);
|
||||
}
|
||||
|
||||
//
|
||||
if (mOnPartialClosePosition != NULL)
|
||||
{
|
||||
mTrader.AddOnPartialClosePositionEventHandler(mOnPartialClosePosition);
|
||||
}
|
||||
|
||||
//
|
||||
if (mOnStopLossTriggered != NULL)
|
||||
{
|
||||
mTrader.AddOnStopLossEventHandler(mOnStopLossTriggered);
|
||||
@@ -1793,6 +1824,16 @@ public:
|
||||
return mTrader.GetMagicNumber();
|
||||
}
|
||||
|
||||
//
|
||||
void AddOnSignalEventHandler(TOnSignal handler)
|
||||
{
|
||||
//
|
||||
Add(
|
||||
handler,
|
||||
mOnSignalEventHandlers //
|
||||
);
|
||||
}
|
||||
|
||||
//
|
||||
// Overrides ...
|
||||
|
||||
@@ -1874,6 +1915,36 @@ public:
|
||||
HandleSignalsExecution(signals);
|
||||
}
|
||||
|
||||
//
|
||||
// Calls when a Position Modified ...
|
||||
virtual void OnPositionModified(
|
||||
const ulong ticket,
|
||||
const double profit,
|
||||
const string comment //
|
||||
)
|
||||
{
|
||||
}
|
||||
|
||||
//
|
||||
// Calls when a Position Closed ...
|
||||
virtual void OnPositionClosed(
|
||||
const ulong ticket,
|
||||
const XPosition &position,
|
||||
const string comment //
|
||||
)
|
||||
{
|
||||
}
|
||||
|
||||
//
|
||||
// Calls when a Position Partially Closed ...
|
||||
virtual void OnPositionPartialyClosed(
|
||||
const ulong ticket,
|
||||
const double profit,
|
||||
const string comment //
|
||||
)
|
||||
{
|
||||
}
|
||||
|
||||
//
|
||||
// Handle StopLoss Event ...
|
||||
virtual void OnStopLossTriggered(const XDeal &deal) {}
|
||||
@@ -2065,6 +2136,14 @@ public:
|
||||
return;
|
||||
}
|
||||
|
||||
//
|
||||
// Notify Signal Event Handlers for Reciving New Signal ...
|
||||
for (int i = 0; i < managedSignalsCount; i++)
|
||||
{
|
||||
//
|
||||
NotifyOnSignalEventHandlers(signals[i]);
|
||||
}
|
||||
|
||||
//
|
||||
// Try to Execute Signals ...
|
||||
XSignal notExecuteds[];
|
||||
@@ -2154,9 +2233,233 @@ protected:
|
||||
//
|
||||
// Tools ...
|
||||
|
||||
//
|
||||
// Since we need to Calls Some Event Handlers on
|
||||
// - Modified;
|
||||
// - Closed;
|
||||
// - Partial Closed;
|
||||
// events ...
|
||||
// we have to implement thouse Methods here and use them ...
|
||||
|
||||
//
|
||||
// Modify ...
|
||||
bool Modify(
|
||||
ulong ticket, // position ticket
|
||||
double sl = 0, // stop loss price
|
||||
double tp = 0, // take profit
|
||||
string comment = NULL // comment
|
||||
)
|
||||
{
|
||||
//
|
||||
bool result = false;
|
||||
|
||||
//
|
||||
result = mTrader.Modify(
|
||||
ticket,
|
||||
sl,
|
||||
tp,
|
||||
comment //
|
||||
);
|
||||
|
||||
//
|
||||
if (result)
|
||||
{
|
||||
//
|
||||
XPosition position;
|
||||
result = mTrader.GetPosition(
|
||||
ticket,
|
||||
position //
|
||||
);
|
||||
if (result)
|
||||
{
|
||||
//
|
||||
OnPositionModified(
|
||||
ticket,
|
||||
position.profit,
|
||||
comment //
|
||||
);
|
||||
|
||||
//
|
||||
string message = "Position " + ToString(ticket) + " Modified Successfully ...";
|
||||
|
||||
//
|
||||
Alert(message);
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
// Close ...
|
||||
bool Close(
|
||||
ulong ticket,
|
||||
string comment //
|
||||
)
|
||||
{
|
||||
//
|
||||
bool result = false;
|
||||
|
||||
//
|
||||
XPosition position;
|
||||
result = mTrader.GetPosition(
|
||||
ticket,
|
||||
position //
|
||||
);
|
||||
|
||||
//
|
||||
result = mTrader.Close(
|
||||
ticket,
|
||||
comment //
|
||||
);
|
||||
|
||||
//
|
||||
if (result)
|
||||
{
|
||||
//
|
||||
OnPositionClosed(
|
||||
ticket,
|
||||
position,
|
||||
comment //
|
||||
);
|
||||
|
||||
//
|
||||
string message = "Position " + ToString(ticket) + " Closed Successfully ...";
|
||||
|
||||
//
|
||||
Alert(message);
|
||||
}
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
// Close ...
|
||||
int Close(
|
||||
XPosition &positions[],
|
||||
string comment //
|
||||
)
|
||||
{
|
||||
//
|
||||
int result = 0;
|
||||
|
||||
//
|
||||
int count = ArraySize(positions);
|
||||
if (!IsValidSize(count))
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
for (int i = 0; i < count; i++)
|
||||
{
|
||||
//
|
||||
bool isClosed = Close(
|
||||
positions[i].ticket,
|
||||
comment //
|
||||
);
|
||||
|
||||
//
|
||||
if (isClosed)
|
||||
{
|
||||
result++;
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
// Partial Close ...
|
||||
bool PartialClose(
|
||||
ulong ticket,
|
||||
double volume,
|
||||
string comment //
|
||||
)
|
||||
{
|
||||
//
|
||||
bool result = false;
|
||||
|
||||
//
|
||||
XPosition position;
|
||||
result = mTrader.GetPosition(
|
||||
ticket,
|
||||
position //
|
||||
);
|
||||
if (!result)
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
result = mTrader.ClosePartial(
|
||||
ticket,
|
||||
volume,
|
||||
comment //
|
||||
);
|
||||
|
||||
//
|
||||
if (result)
|
||||
{
|
||||
//
|
||||
OnPositionPartialyClosed(
|
||||
ticket,
|
||||
position.profit,
|
||||
comment //
|
||||
);
|
||||
}
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
// Partial Close ...
|
||||
int PartialClose(
|
||||
XPosition &positions[],
|
||||
double volume,
|
||||
string comment //
|
||||
)
|
||||
{
|
||||
//
|
||||
int result = 0;
|
||||
|
||||
//
|
||||
int count = ArraySize(positions);
|
||||
if (!IsValidSize(count))
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
for (int i = 0; i < count; i++)
|
||||
{
|
||||
//
|
||||
bool isClosed = PartialClose(
|
||||
positions[i].ticket,
|
||||
volume,
|
||||
comment //
|
||||
);
|
||||
|
||||
//
|
||||
if (isClosed)
|
||||
{
|
||||
result++;
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
// Signal Event Listeners ...
|
||||
void NotifyOnSignalEventHandlers(XSignal &signals[])
|
||||
|
||||
//
|
||||
void NotifyOnSignalEventHandlers(XSignal &signal)
|
||||
{
|
||||
//
|
||||
int listenersCount = ArraySize(mOnSignalEventHandlers);
|
||||
@@ -2172,7 +2475,7 @@ protected:
|
||||
TOnSignal iListener = mOnSignalEventHandlers[i];
|
||||
|
||||
//
|
||||
iListener(signals);
|
||||
iListener(signal);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3126,9 +3429,13 @@ private:
|
||||
|
||||
//
|
||||
// Event Handlers ...
|
||||
TOnSignal mOnSignal;
|
||||
TOnModify mOnModifyPosition;
|
||||
TOnStopLoss mOnStopLossTriggered;
|
||||
TOnTakeProfit mOnTakeProfitTriggered;
|
||||
TOnForceClose mOnForceClosePosition;
|
||||
TOnDealsChanged mOnDealsChangedHandler;
|
||||
TOnPartialClose mOnPartialClosePosition;
|
||||
TOnOrdersChanged mOnOrdersChangedHandler;
|
||||
TOnPositionsChanged mOnPositionsChangedHandler;
|
||||
TOnTradeStateChanged mOnTradeStateChangedHandler;
|
||||
|
||||
Reference in New Issue
Block a user