Messieurs les professionnels, j'ai encore besoin de votre aide !
Vous trouverez ci-dessous un extrait de code responsable de la clôture des transactions, mais le problème est que lorsque les ordres en attente ne sont pas exécutés, ils ne sont pas supprimés, je n'arrive pas à comprendre pourquoi. Mais lorsque j'ai besoin de fermer un ordre en attente qui a déjà été exécuté, tout se passe correctement et si l'ordre n'a pas été exécuté, il reste simplement suspendu jusqu'à ce qu'il soit exécuté....
Vous trouverez ci-dessous un extrait de code responsable de la clôture des transactions, mais le problème est que lorsque les ordres en attente ne sont pas exécutés, il ne les supprime pas, je ne comprends pas pourquoi.
J'ai mis une fonction dans mon EA pour fermer 1/3 du lot ouvert lorsque le stoploss est déclenché au seuil de rentabilité, mais pour une raison quelconque, cela ne fonctionne pas.
Pouvez-vous me dire ce qui ne va pas ?
//======================================================================================= void BuyCloseOneThird(string sy="", int op=-1, int mn=-1) {
double pr=0;
int i, k=OrdersTotal(), np=-1;
if (sy=="0") sy=Symbol();
for (i=k-1; i>=0; i--) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if ((OrderSymbol()==sy || sy=="") && OrderType()==OP_BUY) {
if (mn<0 || OrderMagicNumber()==mn) {
if (Bid>OrderOpenPrice() && Bid==OrderStopLoss()) {
if (OrderSelect(np, SELECT_BY_POS, MODE_TRADES)) {
ClosePosBySelect();}
}
}
}
}
}
}
//======================================================================================= void SellCloseOneThird(string sy="", int op=-1, int mn=-1) {
double pr=0;
int i, k=OrdersTotal(), np=-1;
if (sy=="0") sy=Symbol();
for (i=k-1; i>=0; i--) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if ((OrderSymbol()==sy || sy=="") && OrderType()==OP_BUY) {
if (mn<0 || OrderMagicNumber()==mn) {
if (Ask<OrderOpenPrice() && Ask==OrderStopLoss()) {
if (OrderSelect(np, SELECT_BY_POS, MODE_TRADES)) {
ClosePosBySelect();}
}
}
}
}
}
}
//+------------------------------------------------------------------+void ClosePosBySelect() {
bool fc;
color clClose;
double pa, pb, pp;
int err, it;
double ll = MathCeil(OrderLots() / 3.0 * 10.0) / 10.0;
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
for (it=1; it<=5; it++) {
if (!IsTesting() && (!IsExpertEnabled() || IsStopped())) break;
while (!IsTradeAllowed()) Sleep(5000);
RefreshRates();
pa=MarketInfo(OrderSymbol(), MODE_ASK);
pb=MarketInfo(OrderSymbol(), MODE_BID);
if (OrderType()==OP_BUY) {
pp=pb; clClose=Red;
} else {
pp=pa; clClose=Blue;
}
ll=OrderLots();
fc=OrderClose(OrderTicket(), ll, pp, Slippage, clClose);
if (fc) {
PlaySound("wave"); break;
} else {
err=GetLastError();
if (err==146) while (IsTradeContextBusy()) Sleep(1000*11);
Print(OrderTicket()," Ask=",pa," Bid=",pb," pp=",pp);
Print("sy=",OrderSymbol()," ll=",ll," sl=",OrderStopLoss(),
" tp=",OrderTakeProfit()," mn=",OrderMagicNumber());
Sleep(1000*5);
}
}
}
}
J'ai mis une fonction dans mon EA pour fermer 1/3 du lot ouvert lorsque le stoploss est déclenché au seuil de rentabilité, mais pour une raison quelconque, cela ne fonctionne pas.
Pouvez-vous me dire ce qui ne va pas ?
Probablement parce que vous calculez le lot d'abord et ensuite
Utiliser la fonction NormalizeDouble(lot,2)
Merci. Je pense que c'est ce que je cherchais.
Merci pour la discussion. Vos informations seront également utiles.
Où se cache le défaut ')' ici ? - paramètres erronés compte 4 fois ? Peut-être que ce n'est pas comme ça qu'il faut l'écrire ?
Où se cache le défaut ')' ici ? - paramètres erronés compte 4 fois ? Peut-être que ce n'est pas la bonne façon de l'écrire ?
Messieurs les professionnels, j'ai encore besoin de votre aide !
Vous trouverez ci-dessous un extrait de code responsable de la clôture des transactions, mais le problème est que lorsque les ordres en attente ne sont pas exécutés, ils ne sont pas supprimés, je n'arrive pas à comprendre pourquoi. Mais lorsque j'ai besoin de fermer un ordre en attente qui a déjà été exécuté, tout se passe correctement et si l'ordre n'a pas été exécuté, il reste simplement suspendu jusqu'à ce qu'il soit exécuté....
OrderSelect(0, SELECT_BY_POS, MODE_TRADES) ;
Magic = OrderMagicNumber() ;
orderticket = OrderTicket() ;
if (OrdersTotal() == 1 && Magic == 111 && OrderType( ) == 0)
{
if (H1_BUY_5 == 0 || H1_BUY_1 == 0)
{
OrderClose(orderticket, lots, Bid, 5, Yellow) ;
if (OrdersTotal() == 1) OrderDelete(orderticket, Brown) ;
}
}
Xaoss1990:
Vous trouverez ci-dessous un extrait de code responsable de la clôture des transactions, mais le problème est que lorsque les ordres en attente ne sont pas exécutés, il ne les supprime pas, je ne comprends pas pourquoi.
si (OrdersTotal() == 1 && Magic == 111 && OrderType( ) == 0)
cela interfère
J'ai mis une fonction dans mon EA pour fermer 1/3 du lot ouvert lorsque le stoploss est déclenché au seuil de rentabilité, mais pour une raison quelconque, cela ne fonctionne pas.
Pouvez-vous me dire ce qui ne va pas ?
J'ai mis une fonction dans mon EA pour fermer 1/3 du lot ouvert lorsque le stoploss est déclenché au seuil de rentabilité, mais pour une raison quelconque, cela ne fonctionne pas.
Pouvez-vous me dire ce qui ne va pas ?
Probablement parce que vous calculez le lot d'abord et ensuite