mirror of
https://github.com/rithsila/MT5-EA-Sniper-Strategy.git
synced 2026-08-16 12:18:11 +00:00
82 lines
3.1 KiB
Plaintext
82 lines
3.1 KiB
Plaintext
//+------------------------------------------------------------------+
|
|
//| E_ClosePositions.mqh |
|
|
//| Copyright 2021, Nkondog Anselme Venceslas |
|
|
//| https://www.mql5.com |
|
|
//+------------------------------------------------------------------+
|
|
#property copyright "Copyright 2021, Nkondog Anselme Venceslas"
|
|
#property link "https://www.mql5.com"
|
|
CTrade trade;
|
|
|
|
// We declare a function CloseOpenPositions of type int and we want to return
|
|
// the number of positions that are closed.
|
|
void CloseOpenPositions()
|
|
{
|
|
|
|
int TotalClose=0; // We want to count how many orders have been closed.
|
|
int c_slippage = Slippage;
|
|
Print("Close position status ", ClosePosition);
|
|
// Normalization of the slippage.
|
|
if(_Digits==3 || _Digits==5)
|
|
{
|
|
c_slippage=c_slippage*10;
|
|
}
|
|
|
|
// We scan all the orders backwards.
|
|
// This is required as if we start from the first order, we will have problems with the counters and the loop.
|
|
for(int i=PositionsTotal()-1; i>=0; i--)
|
|
{
|
|
|
|
ulong ticket = PositionGetTicket(i);
|
|
|
|
Print("Position profit is ", PositionGetDouble(POSITION_PROFIT));
|
|
PositionProfit = PositionGetDouble(POSITION_PROFIT);
|
|
if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY && iClose(Symb, PERIOD_CURRENT, 1) < Senkouspanb && iClose(Symb, PERIOD_CURRENT, 1) < Senkouspana)
|
|
{
|
|
// We select the order of index i, selecting by position and from the pool of market/pending trades.
|
|
//If the selection is successful we try to close the order.
|
|
if(trade.PositionClose(ticket, c_slippage))
|
|
{
|
|
TotalClose++;
|
|
}
|
|
else
|
|
{
|
|
// If the order fails to be closed, we print the error.
|
|
Print("Order failed to close with error - ",GetLastError());
|
|
}
|
|
}
|
|
|
|
if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_SELL && iClose(Symb, PERIOD_CURRENT, 1) > Senkouspanb && iClose(Symb, PERIOD_CURRENT, 1) > Senkouspana)
|
|
{
|
|
// We select the order of index i, selecting by position and from the pool of market/pending trades.
|
|
//If the selection is successful we try to close the order.
|
|
if(trade.PositionClose(ticket, c_slippage))
|
|
{
|
|
TotalClose++;
|
|
}
|
|
else
|
|
{
|
|
// If the order fails to be closed, we print the error.
|
|
Print("Order failed to close with error - ",GetLastError());
|
|
}
|
|
}
|
|
|
|
if(ClosePosition)
|
|
{
|
|
if(trade.PositionClose(ticket, c_slippage))
|
|
{
|
|
TotalClose++;
|
|
ClosePosition = false;
|
|
}
|
|
else
|
|
{
|
|
// If the order fails to be closed, we print the error.
|
|
Print("Order failed to close with error - ",GetLastError());
|
|
}
|
|
}
|
|
// We can use a delay if the execution is too fast.
|
|
// Sleep() will wait X milliseconds before proceeding with the code.
|
|
// Sleep(300);
|
|
}
|
|
}
|
|
//+------------------------------------------------------------------+
|