J'écris un EA qui fonctionne sur la base d'une martingale.
Comment puis-je faire en sorte qu'il ferme tous les ordres qu'il a ouverts lorsque la perte maximale autorisée en pips sur une paire de devises est atteinte ?
J'écris un EA qui fonctionne sur la base d'une martingale.
Comment puis-je faire en sorte qu'il ferme tous les ordres qu'il a ouverts lorsque la perte maximale autorisée en pips sur une paire de devises est atteinte ?
double GetProfitinCurrency(string order_symbol="",int order_type=-1,int order_magic=-1) { double profit=0; int i,k=OrdersTotal();
J'écris un EA qui fonctionne sur la base d'une martingale.
Comment puis-je faire en sorte qu'il ferme tous les ordres qu'il a ouverts lorsque la perte maximale autorisée en pips sur une paire de devises est atteinte ?
J'écris un EA qui fonctionne sur la base d'une martingale.
Comment puis-je faire en sorte qu'il ferme tous les ordres qu'il a ouverts lorsque la perte maximale autorisée en pips sur une paire de devises est atteinte ?
double GetProfitinCurrency(string order_symbol="",int order_type=-1,int order_magic=-1)
{
double profit=0;
int i,k=OrdersTotal();
if(order_symbol=="0") order_symbol=Symbol();
for(i=0; i<k; i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if((OrderSymbol()==order_symbol || order_symbol=="") && (order_type<0 || OrderType()==order_type))
{
if(OrderType()==OP_BUY || OrderType()==OP_SELL)
{
if(order_magic<0 || OrderMagicNumber()==order_magic)
{
profit+=OrderProfit()+OrderCommission()+OrderSwap();
}
}
}
}
}
return(profit);
}
la fonction renvoie les profits dans les positions ouvertes, peut être filtrée par symbole, type, magik
Ensuite, vous fermez toutes les positions
{
int i,k=OrdersTotal();
if(order_symbol=="0") order_symbol=Symbol();
for(i=k-1; i>=0; i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if((OrderSymbol()==order_symbol || order_symbol=="") && (order_type<0 || OrderType()==order_type))
{
if(OrderType()==OP_BUY || OrderType()==OP_SELL)
{
if(order_magic<0 || OrderMagicNumber()==order_magic) OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),1,CLR_GREEN);
}
}
}
}
}
...
la fonction renvoie les profits en poses d'octobre, peut être filtrée par symbole, type, magik
Puis fermer toutes les positions
Je veux dire, je vous ai donné ce qui précède,
Le profit est donc un terme générique.
-20 est -20
if(GetProfitinCurrency(Symbol(),-1,-1)<-20)CPD(Symbol(),-1,-1)
double GetProfitinCurrency(string order_symbol="",int order_type=-1,int order_magic=-1)
{
double profit=0;
int i,k=OrdersTotal();
if(order_symbol=="0") order_symbol=Symbol();
for(i=0; i<k; i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if((OrderSymbol()==order_symbol || order_symbol=="") && (order_type<0 || OrderType()==order_type))
{
if(OrderType()==OP_BUY || OrderType()==OP_SELL)
{
if(order_magic<0 || OrderMagicNumber()==order_magic)
{
profit+=OrderProfit()+OrderCommission()+OrderSwap();
}
}
}
}
}
return(profit);
}
Merci, maintenant je comprends.
Ce qui n'est toujours pas clair dans le code est :(order_type<0||OrderType()==order_type) Ceci peut être lu comme "et ordre de vendre ou d'acheter" ?
ouiorder_type= OP_BUY OP_SELL -1
Le compilateur se plaint également deClosePosBySelect.
Cette fonction doit-elle être écrite séparément ?
Vladislav Andruschenko
RichLux:
Le compilateur se plaint également deClosePosBySelect.
Cette fonction doit-elle être écrite séparément ?
{
int i,k=OrdersTotal();
if(order_symbol=="0") order_symbol=Symbol();
for(i=k-1; i>=0; i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if((OrderSymbol()==order_symbol || order_symbol=="") && (order_type<0 || OrderType()==order_type))
{
if(OrderType()==OP_BUY || OrderType()==OP_SELL)
{
if(order_magic<0 || OrderMagicNumber()==order_magic) OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),1,CLR_GREEN);
}
}
}
}
}