[Archive] Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Je ne peux aller nulle part sans toi - 2. - page 502

 
edit | delete Aidez à trouver une fonction de passage d'ordre qui prenne en compte le slippage et sans erreurs 130-134.
 
nuan:
edit | delete Aide pour trouver une fonction pour passer des ordres qui prend en compte le slippage et sans 130-134 erreurs.

Montrez-moi votre variante.
 
NumderOrder=OrderSend(Symbol(),OP_BUY,0.01,Ask,3,Ask-SL*Point,Ask+TP*Point, "BUY",0,0,Red) ;

Print(GetLastError()) ;

Avec n'importe quelles valeurs de SL et TP, il donne 134, et souvent il ne passe pas d'ordre du tout.

s'ouvre sur condition if(NumberOfOrders(NULL)==0)


Dans le testeur, au lieu d'un ordre, il en place toujours plusieurs, c'est-à-dire que je ne comprends pas pourquoi il devrait placer un ordre s'il n'y a pas d'autres ordres ouverts sur cette paire.

 
désolé, pourquoi il y a plus d'une commande
 
nuan:
NumderOrder=OrderSend(Symbol(),OP_BUY,0.01,Ask,3,Ask-SL*Point,Ask+TP*Point, "BUY",0,0,Red) ;

Print(GetLastError()) ;

Avec n'importe quelles valeurs de SL et TP, il donne 134, et souvent il ne passe pas d'ordre du tout.

s'ouvre sur condition if(NumberOfOrders(NULL)==0)


Dans le testeur, au lieu d'un ordre, il en place toujours plusieurs, c'est-à-dire que je ne comprends pas pourquoi il devrait placer un ordre s'il n'y a pas d'autres ordres ouverts sur cette paire.


ERR_NOT_ENOUGH_MONEY 134 Pas assez d'argent pour effectuer la transaction.
 

Bonne journée. Je suis en train de faire un EA, il ouvre 2 ordres dans une certaine condition (au sens figuré : quand le prix monte et descend). Quand le prix monte, il en ouvre 2, quand le prix descend, il ferme ces 2 et en ouvre de nouveaux. Un ordre est passé sans take profit, le second avec un take profit. Il y a un problème avec le second. Au moment où son heure de mort arrive, il n'est pas sélectionné, voici le code pour supprimer les commandes :

for (int a = 0; a < OrdersTotal()-1; a++)
    if (OrderSelect(a, SELECT_BY_POS, MODE_TRADES))
        if (OrderComment() == "MyOrd" && OrderType() == OP_SELL)
            OrderClose(OrderTicket(), NormalizeDouble(OrderLots(), Digits), NormalizeDouble(Ask, Digits), 0);

Idem pour OP_BUY. Je compare les commentaires pour être sûr qu'il s'agit d'un ordre ouvert par mon EA et non manuellement ou par un autre EA. Voici le problème avec OrderSelect, il ne veut tout simplement pas sélectionner un ordre avec un take profit. Lorsqu'il arrive à son numéro, OrderSelect renvoie false. Il n'y a pas d'erreur dans le journal du testeur, GetLastError indique également que tout va bien (renvoie 0). Pourquoi n'est-il pas sélectionné ? Pourquoi pas d'erreur s'il n'a pas pu le sélectionner ? Merci à tous.

 
Question de suivi. Pourquoi, dans le testeur, lorsque je règle la période sur mois+, cinq chiffres apparaissent dans les résultats ? Partout où les prix sont fixés, je mets NormalizeDouble(SomeValue, Digits). Et seulement dans les résultats, le log ne jure pas, bien que lorsque je ne connaissais pas la fonction d'arrondi, alors il jurait.
 

la condition

a < OrdersTotal()-1

est vérifié à chaque itération.

Pensez à ce que a égale et à ce que OrdersTotal() -1 égale après la première itération.

 
Solree:

OrderClose(OrderTicket(), NormalizeDouble(OrderLots(), Digits), NormalizeDouble(Ask, Digits), 0) ;

Le lot et le prix ont des chiffres différents.
 

Solree:

NormalizeDouble(OrderLots(), Digits)


De plus - il n'est pas si facile de normaliser le lot.
Vous devez prendre en compte le pas de changement de lot autorisé.
Par exemple, si le pas est de 0,01, il faut normaliser par 2.
et si le pas est de 0,1, alors la normalisation doit être de 1