[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 395

 
KostelloArtua:

Merci beaucoup pour les conseils ! !! J'ai résolu mon problème. Il s'est avéré que le courtier que je recherchais, lorsqu'il place un ordre au marché, c'est-à-dire en fonction des conditions, ne me permet pas de placer des niveaux de stop en même temps. Maintenant, les ordres sont placés sans aucun niveau d'arrêt et je fixe des niveaux d'arrêt immédiatement après chaque ordre. J'ai un problème avec cela : seule une très petite partie des ordres sont modifiés, alors que la plupart des ordres affichent les résultats suivants dans la section "Expert Advisors" :

2011.05.19 09:46:55 Spacenewcomer-Svecha CLM1,M15 : ouvrir #30906670 vendre 0.01 CLM1 à 99.79 ok
2011.05.19 09:46:55 Spacenewcomer-Svecha CLM1,M15 : ticket invalide pour la fonction OrderModify
2011.05.19 09:55:40 Spacenewcomer-Svecha ESM1,M5 : ouvrir #30906787 acheter 0.01 ESM1 à 1337.50 ok

2011.05.19 10:00:03 Spacenewcomer-Svecha EURUSD,M15 : ticket invalide pour la fonction OrderModify

Voici le texte du code :

{
res=OrderSend(Symbol(),OP_SELL,0.01,Bid,3,0,0, "basic",_MagicNumber,0,Red) ;


OrderModify(OrderTicket(),OrderOpenPrice(),Ask+StopLoss*Point,Ask-TakeProfit*Point,0,Red) ;
return(0) ;

}

De plus, c'est le premier ordre qui est modifié après le démarrage de l'Expert Advisor !

Manifestement, j'ai défini la mauvaise modification des ordres dans le code... S'il vous plaît, aidez-moi !

res=OrderSend(Symbol(),OP_SELL,0.01,Bid,3,0,0, "basic",_MagicNumber,0,Red) ;

OrderSelect(res, SELECT_BY_TICKET) ;
OrderModify(OrderTicket(),, OrderOpenPrice(),NormalizeDouble(Ask+StopLoss*Point, Digits),NormalizeDouble( Ask-TakeProfit*Point, Digits),0,Red) ;
 
ilunga:
res=OrderSend(Symbol(),OP_SELL,0.01,Bid,3,0,0, "basic",_MagicNumber,0,Red) ;

OrderSelect(res, SELECT_BY_TICKET) ;
OrderModify(OrderTicket(), OrderOpenPrice(),NormalizeDouble( Ask+StopLoss*Point,Digits),NormalizeDouble( Ask-TakeProfit*Point,Digits),0,Red) ;
Merci pour le tuyau ! !!
 
Sancho77:
Chers programmeurs, je demande de l'aide pour modifier l'Expert Advisor : J'ai une position ouverte et après un certain temps il y a un deuxième signal pour ouvrir la position dans la même direction. Je veux remplir la position par le deuxième signal seulement si le premier ordre est déjà dans la position plus. J'ai implémenté ceci en comparant la taille du solde et l'équité (si l'équité est supérieure au solde, l'ordre ouvert est dans le plus).
Pouvez-vous suggérer un code pour déterminer le profit/la perte sur le dernier ordre ouvert que vous avez ?

Si son numéro de ticket est enregistré, il suffit de

OrderSelect(ticket, SELECT_BY_TICKET);

if (OrderProfit() > )

{

          // доливаем ордер

}
 
ilunga:

Si son numéro de ticket est enregistré, il suffit de


Merci ! Pouvez-vous me dire comment sauvegarder le ticket de la dernière commande ?
 
Sancho77:
Merci ! Pouvez-vous m'indiquer comment sauvegarder le ticket de la dernière commande ?

Eh bien, l'option la plus simple est de déclarer une variable globale int ticket

et remplacer partout ticket = OrderSend(...) par ticket = OrderSend(...)

le numéro de la dernière commande ouverte sera toujours enregistré.

Ou voir le sujet "Fonctions utiles de KimIV" seulement!

 
ilunga:

Eh bien, l'option la plus simple est de déclarer une variable globale int ticket

et remplacer partout ticket = OrderSend(...) par ticket = OrderSend(...)

le numéro de la dernière commande ouverte sera toujours enregistré.

ou voir la rubrique "Fonctions utiles de KimIV" seulement

Merci pour votre aide !
 
rustein:

Aidez-moi à trouver une erreur,

Merci.


BuySL*Point // зачем умножать на Point ? Тоже самое для SelSL*Point
 
khorosh:

Merci,

Je ne sais pas... Je pensais que ça marcherait, ça ne marche pas sans l'un ou l'autre, je l'ai fait et ça marche.....

//-----
  double Spread = (NormalizeDouble(Ask,Digits) - NormalizeDouble(Bid,Digits)) / Point;
  double BuySL = NormalizeDouble(iCustom(NULL,0,"NRTR",AveragePeriod,0,1),Digits);
  double SelSL = NormalizeDouble(iCustom(NULL,0,"NRTR",AveragePeriod,1,1),Digits);
//-----
  int Orders = OrdersTotal();
  for (int i=0; i<Orders; i++)
  {
    if (!(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))) continue;
    if (OrderSymbol() != Symbol()) continue;
    {
      if(OrderType() == OP_BUY && OrderMagicNumber()==Magic && OrderStopLoss() != BuySL-Spread*Point
      && BuySL-Spread*Point > OrderStopLoss() && BuySL-Spread*Point > OrderOpenPrice())
      {
        OrderModify(OrderTicket(),OrderOpenPrice(),BuySL-Spread*Point,OrderTakeProfit(),0,CLR_NONE);
      }
      if(OrderType() == OP_SELL && OrderMagicNumber()==Magic && OrderStopLoss() != SelSL+Spread*Point
      && SelSL+Spread*Point < OrderStopLoss() && SelSL+Spread*Point < OrderOpenPrice())
      {
        OrderModify(OrderTicket(),OrderOpenPrice(),SelSL+Spread*Point,OrderTakeProfit(),0,CLR_NONE);
      }
    }
  }
}

 
Roger:
PRICE_OPEN ! !!! - vous ne pouvez pas utiliser ce prix ! Cela ne fonctionne que pour les indicateurs. Utilisez Bid ou Ask.

Merci ! !! Oui, c'est une possibilité certaine.
 

Guys une question plus compliquée......

Comment faire pour qu'un EA ferme tous les ordres lorsqu'un profit donné est atteint .... Fermer uniquement les ordres sur un symbole ...

Exemple : EA travaille sur 3 paires montant à fermer tous les ordres sur un symbole 100p ...

Si l'EUR a plus de 100p, il ne fermera que les ordres sur l'EUR alors que d'autres peuvent avoir 200p ...

Si je prends accountbalanse(), le conseiller ne fermera que lorsque la somme des trois paires est supérieure à 100p. Cette option ne me convient pas ! !!!.

Aidez-nous s'il vous plaît.........