Vous pouvez procédez comme suit avec cette fonction
Code:
//+-----------------------------------------------------------------------------------------------+
// close transaction 0=buy close // 1=seel close // 3=close all // 4=close neg // 5=close profit +
//+-----------------------------------------------------------------------------------------------+
void closeall(int a)
{
//double decimale=MarketInfo(Symbol(),MODE_DIGITS);
//si devise en 5 et 3 digit
// modifier NormalizeDouble (bid ou ask ,decimale)
for(int i=OrdersTotal()-1;i>=0;i--)
{
if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES) )
continue;
if(OrderSymbol()==Symbol())
{
RefreshRates();
/////////Standart ferme tout // ferme sell // ferme buy
if(((OrderType()==OP_BUY )&& (a==0))||( a==3 ))
{
OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,4),3,Green);
}
if(((OrderType()==OP_SELL )&& (a==1))||( a==3 ))
{
OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,4),3,Red);
}
///////// ferme perdant
if(((OrderType()==OP_BUY ) && (a==4) && (OrderProfit()<0) ))
{
OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,4),3,Green);
// Alert("Perte = ",OrderProfit()," ** ",Symbol());
}
if(((OrderType()==OP_SELL )&& (a==4) && (OrderProfit()<0)))
{
OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,4),3,Red);
// Alert("Perte = ",OrderProfit()," ** ",Symbol());
}
///////// ferme gagnant
if(((OrderType()==OP_BUY ) && (a==5) && (OrderProfit()>0) ))
{
OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,4),3,Green);
// Alert("Gain = ",OrderProfit()," ** ",Symbol());
}
if(((OrderType()==OP_SELL )&& (a==5) && (OrderProfit()>0)))
{
OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,4),3,Red);
// Alert("Gain = ",OrderProfit()," ** ",Symbol());
}
}
}
}
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
l'appelle de closeall(4) ferme que les trades negatif de la paire
après pour connaitre le gain ou la perte par paire
une autre fonction
Code:
double gainperte()
{
double balance=0;
for (int i=0; i<OrdersTotal(); i++)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
if(OrderSymbol()==Symbol())
{
balance+=OrderProfit();
}
}
return(balance);
}
et après dans votre code vous pouvez a votre guise gérer des conditions de lancement des scrutations
ex: if (gainperte()<=(-273) ) {closeall(4);} //une perte de 273 ferme que les trades perdant de la paire
sinon
ex: if (gainperte()<=(-273) ) {closeall(3);} //une perte de 273 ferme tout les trades de la paire
etc...