Files

228 lines
5.3 KiB
Plaintext

//
// Close All Open Positions when Profit Summary is Reached ...
void HandleGridHedge()
{
//
int openPositionsCount = xEATrade.PositionsCount();
if (openPositionsCount <= 1 ||
xEAMinProfitPerOpenPositionForHedging <= 0)
{
return;
}
//
double requiredProfitForHedging = xEAMinProfitPerOpenPositionForHedging * openPositionsCount;
double accountProfit = xEATrade.GetPositionsProfit();
if (accountProfit > 0 || MathAbs(accountProfit) < requiredProfitForHedging)
{
return;
}
//
string comment = "Close since Grid Hedging ...";
xEATrade.CloseAllPositions(comment);
//
string msg = "Grid Hedging in Loss: " + (string)accountProfit;
LogMessage(msg);
}
//
// Close All Open Positions when Profit Summary is Reached ...
void HandlePyramidHedge()
{
//
int openPositionsCount = xEATrade.PositionsCount();
if (openPositionsCount <= 1 ||
xEAMinProfitPerOpenPositionForHedging <= 0)
{
return;
}
//
double requiredProfitForHedging = xEAMinProfitPerOpenPositionForHedging * openPositionsCount;
double accountProfit = xEATrade.GetPositionsProfit();
if (accountProfit < requiredProfitForHedging)
{
return;
}
//
string comment = "Close since Pyramid Hedging ...";
xEATrade.CloseAllPositions(comment);
//
string msg = "Pyramid Hedging in Profit: " + (string)accountProfit;
LogMessage(msg);
}
//
// Force Close Signals ...
void HandleForceClosing()
{
//
int positionsCount = xEATrade.PositionsCount();
int ordersCount = xEATrade.OrdersCount();
if (positionsCount <= 0 || ordersCount <= 0)
{
return;
}
//
X121ForceClose results[];
xEAProvider.CanForceCloseShortSignals(results);
int resultsCount = ArraySize(results);
if (resultsCount <= 0)
{
return;
}
//
for (int i = 0; i < resultsCount; i++)
{
//
X121ForceClose iForceClose = results[i];
if (!iForceClose.force)
{
continue;
}
//
XPosition iPositions[];
xEATrade.GetPositions(
iPositions,
iForceClose.symbol,
iForceClose.period);
int iPositionsCount = ArraySize(iPositions);
if (iPositionsCount > 0)
{
//
for (int j = 0; j < iPositionsCount; j++)
{
//
XPosition jPosition = iPositions[j];
bool isLong = IsLong(jPosition.type);
if (isLong)
{
continue;
}
//
ENUM_X121_SIGNAL_PROVIDERS jProvider = ExtractProvider(jPosition);
string jProviderStr = ToString(jProvider);
if (jProviderStr != iForceClose.provider)
{
continue;
}
//
string comment = "Force Close Signals ...";
bool isClosed = xEATrade.Close(jPosition.ticket, comment);
if (isClosed)
{
//
string msg = "Position (" + (string)jPosition.ticket + ") Closed Due Force Event ...";
LogMessage(msg);
}
}
}
//
XOrder iOrders[];
xEATrade.GetOrders(
iOrders,
iForceClose.symbol,
iForceClose.period,
ORDER_STATE_PLACED);
int iOrdersCount = ArraySize(iOrders);
if (iOrdersCount > 0)
{
//
bool isCanceled = xEATrade.CancelOrders(iOrders);
if (isCanceled)
{
//
string msg = "(" + (string)ordersCount + ") Canceled due Cycle Change ...";
//
LogMessage(msg);
}
}
}
}
//
// Close a Position and it's Support Due to Profit ...
void HandleHedgeSupports()
{
//
int positionsCount = xEATrade.PositionsCount();
if (positionsCount <= 0)
{
return;
}
//
XPosition positions[];
xEATrade.GetPositions(
positions);
positionsCount = ArraySize(positions);
if (positionsCount <= 0)
{
return;
}
//
for (int i = 0; i < positionsCount; i++)
{
//
XPosition iPosition = positions[i];
//
bool hasSupport = xEATrade.HasSupport(iPosition.ticket);
if (!hasSupport)
{
continue;
}
//
bool isClosed = xEATrade.ClosePositionAndSupports(
iPosition.ticket);
if (isClosed)
{
//
string msg = "Position and Supports Closed ...";
LogMessage(msg);
}
}
}
//
// Delete Specific Order of Support if Exists ...
ulong positionId = deal.positionId;
//
XOrder supports[];
bool hasSupport = xEATrade.GetSupportOrders(
positionId,
supports,
NULL,
NULL,
ORDER_STATE_PLACED);
if (hasSupport)
{
//
bool isCanceled = xEATrade.CancelOrders(supports);
//
if (isCanceled)
{
//
string msg = "Close all Supports of (" + (string)positionId + ") Due to it's TakeProfit Event ...";
LogMessage(msg);
}
}