0% found this document useful (0 votes)
43 views3 pages

Script EA Close by PL

This expert advisor (EA) closes all open trades when a profit target is reached or loss threshold is breached. It calculates the current profit/loss, displays this in the terminal, and checks if the target has been met by comparing it to the extern variable Profit. If so, it sets EnableClose to 1, which triggers the CloseAll function to close all trades by order type using OrderClose.

Uploaded by

IMRON HAMZAH
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
43 views3 pages

Script EA Close by PL

This expert advisor (EA) closes all open trades when a profit target is reached or loss threshold is breached. It calculates the current profit/loss, displays this in the terminal, and checks if the target has been met by comparing it to the extern variable Profit. If so, it sets EnableClose to 1, which triggers the CloseAll function to close all trades by order type using OrderClose.

Uploaded by

IMRON HAMZAH
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 3

//+------------------------------------------------------------------+

//| CloseAll-PL.mq4 |
//| |
//+------------------------------------------------------------------+

extern int Profit=30;

double myProfit=0;
int EnableClose=0;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----

//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----

//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
//----

myProfit=CalcProfit();

ShowInit();

if (EnableClose==1 && CntOrdAll(OP_BUY)==0 && CntOrdAll(OP_SELL)==0 &&


CntOrdAll(OP_BUYSTOP)==0
&& CntOrdAll(OP_BUYLIMIT)==0 && CntOrdAll(OP_SELLSTOP)==0 &&
CntOrdAll(OP_SELLLIMIT)==0) {
EnableClose=0; // Before Debug: EnableClose=1
}

if ( (Profit>0 && myProfit>=Profit) || (Profit<0 && myProfit<=Profit)) {


EnableClose=1;
}

CloseAll();

//----
return(0);
}
//+------------------------------------------------------------------+

void CloseAll () { // #function of CloseAll


if (EnableClose==1) { // #if Close is yes
int _total=OrdersTotal(); // number of lots or trades ????
int _ordertype;// order type
if (_total==0) {return;} // if total==0
int _ticket; // ticket number
double _priceClose;// price to close orders;
for(int _i=_total-1;_i>=0;_i--)
{ //# for loop
if (OrderSelect(_i,SELECT_BY_POS))
{ //# if
_ordertype=OrderType();
_ticket=OrderTicket();
switch(_ordertype)
{ //# switch
case OP_BUYLIMIT:
OrderDelete(OrderTicket());
case OP_BUYSTOP:
OrderDelete(OrderTicket());
case OP_BUY:
// close buy
_priceClose=MarketInfo(OrderSymbol(),MODE_BID);
Print("Close on ",_i," position order with ticket ¹",_ticket);
OrderClose(_ticket,OrderLots(),_priceClose,3,Red);
break;
case OP_SELLLIMIT:
OrderDelete(OrderTicket());
case OP_SELLSTOP:
OrderDelete(OrderTicket());
case OP_SELL:
// close sell
_priceClose=MarketInfo(OrderSymbol(),MODE_ASK);
Print("Close on ",_i," position order with ticket ¹",_ticket);
OrderClose(_ticket,OrderLots(),_priceClose,3,Red);
break;
default:
// values from 1 to 5, deleting pending orders
// Print("Delete on ",_i," position order with ticket ¹",_ticket);
// OrderDelete(_ticket);
break;
} //# switch
} // # if
} // # for loop

} // #if Close yes

return;
} // #function of CloseAll

void ShowInit() {

string sComment = "";


string sp = "-----------------------------------------------------\n";
string NL = "\n";
sComment = sp;
sComment = sComment + "CloseByPL will close all trades at: " + Profit + NL;
sComment = sComment + sp;
sComment = sComment + "Current P/L="+DoubleToStr(myProfit,0)+ NL;
Comment(sComment);

return;
}

double CalcProfit() {
double _sum=0;
int _total=OrdersTotal(); // number of lots

if (_total==0) {return (0);}

_sum=AccountProfit();

return(_sum);

int CntOrdAll(int Type) {


//return number of orders with specific parameters
int _CntOrd;
_CntOrd=0;
for(int i=0;i<OrdersTotal();i++)
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if (OrderType()==Type) _CntOrd++;
}
return(_CntOrd);
}

You might also like