السلام عليكم خواني
هذا كود اغلاق الصفقات دفعة واحدة
اين هو المكان الذي احدد فيه السعر الذي اريد الاغلاق علية
/+------------------------------------------------------------------+
//| CloseAll-PL.mq4 |
//| |
//+------------------------------------------------------------------+
extern int Profit=0;
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);
}