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

 

Très bien !!!! S'il n'y a pas d'ordres souhaités, X reste égal à zéro avec le numéro magique souhaité et les ordres seront ouverts. S'il y en a, X est égal à 2 et aucun autre ordre ne sera ouvert.

Quel est donc le problème, sinon ?

- Au tout premier instant, vous sélectionnez un ordre qui n'existe pas à l'aide de la fonction OrderSelect.

dans la première boucle for(int Uy=OrdersTotal();Uy<=-1;Uy--) Alors quoi, eh bien le cycle fonctionne plus pour l'espoir, puis je l'ai changé à 0, il n'y a aucun changement dans le travail, ce ne sont pas des erreurs, ils ne changent pas, je m'excuse.

 
Insertion d'une alerte pour suivre le travail du cycle. Je ne comprends rien. La variable, qui est dans la boucle, une seule fois, au début, avec une valeur de 0, puis le stop de vente 0 et le stop d'achat 130, ce qui est également surprenant, ils sont symétriques !!!!. Et après 2,5 m de l'inscription dit déjà erreur 148 (le courtier interdit de nombreux ordres)
//+------------------------------------------------------------------+
//|                                                    для лавин.mq4 |
//|                      Copyright © 2011, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2011, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"
extern double stoploss=0; extern double takeprofit=20;extern int otstup=20; extern datetime expiration=0;

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
 int tiket,tikett;double volume=0.1;int i=0,R1=0,R2=0,A=1 ;double price=PRICE_OPEN;
   //  R1=((PRICE_OPEN- stoploss*Point)*stoploss)/stoploss;R2=((PRICE_OPEN+ stoploss*Point)*stoploss)/stoploss;
     
     
int start()
  {       int X;       
//----
       for(int Uy=OrdersTotal();Uy==0;Uy--){
OrderSelect( Uy,SELECT_BY_POS );Alert ("Uy",Uy);
if(OrderSymbol()==Symbol()&&OrderMagicNumber( )==1000||OrderMagicNumber( )==2000 &&OrderSymbol()==Symbol())
{X ++;}}  
if (X<=2){
   tiket= OrderSend( Symbol(), OP_BUYSTOP,  volume*A, price +otstup*Point, Point* 3, R1, PRICE_OPEN+takeprofit*Point+otstup*Point, "OP_BUYSTOP", 1000,  expiration, Red); 
   Alert ("OP_BUYSTOP", GetLastError( )); 
   tikett= OrderSend( Symbol(), OP_SELLSTOP,  volume*A, price -otstup*Point, Point* 3,R2, PRICE_OPEN-takeprofit*Point-otstup*Point, "OP_SELLSTOP" , 2000,  expiration,C'0,128,255' );
    Alert ("OP_SELLSTOP", GetLastError( )); 
    }       
   
//----
   return(0);
  }
//+------------------------------------------------------------------+

Oh, quelle absurdité. Au début, il écrit toujours une erreur de date, environ 49 fois. Oui !!!! X reste toujours à 0 et ça écrit bien. En 2 commandes.

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

Très bien !!!! S'il n'y a pas d'ordres souhaités, X reste égal à zéro avec le numéro magique souhaité et les ordres seront ouverts. S'il y en a, X est égal à 2 et aucun autre ordre ne sera ouvert.

Quel est donc le problème, sinon ?

- Au tout premier instant, vous sélectionnez un ordre qui n'existe pas à l'aide de la fonction OrderSelect.

dans la première boucle for(int Uy=OrdersTotal();Uy<=-1;Uy--) Alors quoi, la boucle tourne plus pour l'espoir, puis je l'ai changé à 0, il n'y a aucun changement dans le travail, ce ne sont pas des erreurs, ils ne changent pas, je m'excuse.

Comment peut-il fonctionner plus longtemps que ?

Quel que soit le nombre d'ordres ouverts, la condition Uy<=-1 n'est pas remplie immédiatement car le nombre d'ordres est supérieur ou égal à zéro immédiatement.

 

Aidez-moi à trouver une erreur,

Merci.

void TrailPositions()
{
//-----
  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*Point
      && BuySL*Point > OrderStopLoss())// && BuySL*Point > OrderOpenPrice())
      {
        OrderModify(OrderTicket(),OrderOpenPrice(),BuySL*Point,OrderTakeProfit(),0,CLR_NONE);
        if(UseSound == true)
        {
        PlaySound(SuccesSound);
        }
      }
      if(OrderType() == OP_SELL && OrderMagicNumber()==Magic && OrderStopLoss() != SelSL*Point
      && SelSL*Point < OrderStopLoss())// && SelSL*Point < OrderOpenPrice())
      {
        OrderModify(OrderTicket(),OrderOpenPrice(),SelSL*Point,OrderTakeProfit(),0,CLR_NONE);
        if(UseSound == true)
        {
        PlaySound(SuccesSound);
        }
      }
    }
  }
}

 
PapaYozh:


Si les ticks sont en cours, l'icône de l'EA est "souriante", l'EA devrait faire des transactions (c'est-à-dire que les conditions pour cela apparaissent), mais il ne les fait pas, alors il est nécessaire de déboguer.

Placez la commande price() dans le code de l'EA, en particulier aux endroits où elle est comparée et voyez ce qui est comparé exactement. Vous avez peut-être une comparaison sur l'égalité des variables de type double et le résultat de la comparaison est toujours faux, alors que vous supposez que les variables sont égales.

Merci beaucoup pour les conseils ! !! J'ai résolu mon problème. Il s'est avéré que le courtier dont j'avais besoin pour placer un ordre au marché, c'est-à-dire en fonction des conditions, n'a pas la capacité de placer des niveaux d'arrêt 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 non valide 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) ;
retour(0) ;

}

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

Naturellement, j'ai mal modifié l'ordre dans le code... Veuillez me conseiller !

 
Quelqu'un peut-il m'aider à trouver une fonction qui montre les deux dernières valeurs extrêmes de ZZ ?
 
Chers programmeurs, je vous demande une suggestion sur la façon d'améliorer l'Expert Advisor : Il y a une position ouverte et après un certain temps il y a un signal de réouverture dans la même direction. Je veux exécuter le deuxième signal seulement si le premier ordre est déjà en profit. 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 ?
 
Mesure en pips, la plus fiable.
 
Roger:
Mesure en pips, la plus fiable.
Pouvez-vous me donner un code ?
Raison: