Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 6. - page 137

 

Et puis il devra aussi faire la sortie des messages non plus par des commentaires, mais par des objets, et de manière plus importante....

Une personne n'apprendra jamais à penser de cette façon par elle-même.

 
artmedia70:
Gardez simplement à l'esprit que la variable est réinitialisée au redémarrage. Cette approche est donc acceptable pour un testeur, mais pas pour le commerce réel.


Merci pour ces informations, que faire alors ? Devrais-je simplement écrire la valeur dans GV ? ?? Ou existe-t-il une autre option pour un véritable commerce...

 
ALXIMIKS:

Merci pour ces informations, que dois-je faire alors ? Marquez la valeur dans GV ? ?? Ou existe-t-il une autre option pour...
Oubliez les drapeaux mondiaux. Je ne sais pas pourquoi vous avez besoin de drapeaux et ce qu'ils indiquent. C'est pourquoi il est difficile de donner des conseils par rapport à votre situation.
 
Zolotai:
Les amis, pourriez-vous suggérer un indicateur ? Il est basé sur deux diapositives. Et quand il traverse, il donne la direction sous forme de flèches. Je ne l'ai pas trouvé, merci.
i-PSI@MA_Signal d'ici.
 
ALXIMIKS:

Bonjour, si ce n'est pas trop difficile, veuillez conseiller un débutant :

1) Comment déclarer un tableau de taille égale à la valeur d'une variable ? (si i=7 déclarer le tableau double Muss[7] et ainsi de suite) ;

déjà répondu

2) Pourquoi un tableau dans une fonction utilisateur est-il considéré comme déclaré et utilisé de manière adéquate si la condition est toujours fausse ?

while (false){

Alert("aaaaaaaaaaaaa" ) ;

statique double Buf_max [9000000] ;

statique double Buf_min [9000000];}

parce qu'il a été déclaré comme statique. En MQL, toutes les variables statiques sont initialisées avant d'appeler la fonction init()

3) Y a-t-il une différence dans une fonction utilisateur et en général entre un tableau simple et un tableau statique ?

un tableau simple sera initialisé la première fois que vous entrez dans la fonction où il est déclaré. Cependant, à la sortie, si vous l'avez déjà redimensionné, la nouvelle valeur ne sera pas réinitialisée, et la prochaine fois que la fonction sera appelée, le tableau aura la même taille que la dernière fois.

C'est-à-dire que, dans l'ensemble, la différence entre simple et statique se situe uniquement au moment de l'initialisation.

 
Que peut-on faire en cas d'erreur "1"-->(pas d'erreur, mais résultat inconnu) ?
 

J'ai écrit une fonction ici pour supprimer les commandes en attente. Mais pour une raison quelconque, il ne les supprime pas. Voici le code :

void DeletePendingOrders()
{
    int NumberOfTry = 0,
        err,
        ticket;

   for (int i=OrdersTotal()-1; i>=0; i--)
   {
      if (!OrderSelect(i, SELECT_BY_POS,MODE_TRADES)) continue;
      if (OrderMagicNumber() != i_magic) continue;
      if (OrderSymbol() != Symbol()) continue;
      if (OrderType() > 1)
      {
         ticket = OrderTicket();
      
         while (NumberOfTry < 3)
         {
            while (!IsTradeAllowed()) Sleep(5000);
      
            if (OrderDelete(ticket, Red))
                NumberOfTry = 3;
            else
                err = GetLastError();
      
            if (err > 0)
            { 
              Print(NumberOfTry," #",ticket," Error modifing order: (", err , ") ");
              Sleep(5000); RefreshRates(); NumberOfTry++;
            }
         }
      }
   }
}

Pourquoi ne fonctionne-t-il pas correctement ? Je comprends qu'il peut être réécrit différemment, mais je veux comprendre pourquoi ce code ne remplit pas son office.

 
hoz:

J'ai écrit une fonction ici pour supprimer les commandes en attente. Mais pour une raison quelconque, il ne les supprime pas. Voici le code :

Pourquoi ne fonctionne-t-il pas correctement ? Je comprends qu'il peut être réécrit différemment, mais je veux comprendre pourquoi ce code ne fonctionne pas comme prévu.

Je voudrais insérer une ligne afin de ne pas avoir à modifier le code en particulier :

            while (!IsTradeAllowed()) Sleep(5000);
            err=0;
            if (OrderDelete(ticket, Red))
                NumberOfTry = 3;
            else
                err = GetLastError();
      
            if (err > 0)
 
Sepulca:

J'aurais inséré une ligne pour ne pas modifier le code en particulier :


Et qu'est-ce que cela va nous apporter ? Toujours aucune commande fermée et aucune erreur.

Le code a été modifié :

void DeletePendingOrders()
{
    int NumberOfTry = 0,
        err,
        ticket;

   for (int i=OrdersTotal()-1; i>=0; i--)
   {
      if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;
      if (OrderMagicNumber() != i_magic) continue;
      if (OrderSymbol() != Symbol()) continue;
      if (OrderType() > 1)
      {
         ticket = OrderTicket();
      
         while (NumberOfTry < 3)
         {
            while (!IsTradeAllowed()) Sleep(5000);
                err = 0;
              Print("IsTradeAllowed() = ", IsTradeAllowed());
              Print("err = ", err);

            if (OrderDelete(ticket, Red))
            {
                NumberOfTry = 3;
                Print("NumberOfTry", NumberOfTry);
            }
            else
            {
                err = GetLastError();
                Print("err = ", err);
            }
      
            if (err > 0)
            { 
              Print(NumberOfTry," #",ticket," Error modifing order: (", err , ") ");
              Sleep(5000); RefreshRates(); NumberOfTry++;
            }
         }
      }
   }
}

La partie droite du carnet de bord :

2013.09.11 22:24:19     2012.01.02 08:05  Perevorot EURUSD,M5: modify #10 sell stop 0.01 EURUSD at 1.29279 sl: 0.00000 tp: 1.29179 ok
2013.09.11 22:24:19     2012.01.02 08:05  Perevorot EURUSD,M5: open #10 sell stop 0.01 EURUSD at 1.29279 ok
2013.09.11 22:24:19     2012.01.02 08:02  Perevorot EURUSD,M5: Ôóíêöèÿ DeletePendingOrders çàâåðøåíà
2013.09.11 22:24:19     2012.01.02 08:02  Perevorot EURUSD,M5: NumberOfTry3
2013.09.11 22:24:19     2012.01.02 08:02  Perevorot EURUSD,M5: delete #9 sell stop 0.64 EURUSD at 1.29279 sl: 0.00000 tp: 1.29179 ok
2013.09.11 22:24:19     2012.01.02 08:02  Perevorot EURUSD,M5: err = 0
2013.09.11 22:24:19     2012.01.02 08:02  Perevorot EURUSD,M5: IsTradeAllowed() = 1
2013.09.11 22:24:19     2012.01.02 08:02  Perevorot EURUSD,M5: Ôóíêöèÿ ClosePosBySortLots çàêðûëà âñå ðûíî÷íûå îðäåðà
2013.09.11 22:24:19     2012.01.02 08:02  Perevorot EURUSD,M5: close #3 sell 0.01 EURUSD at 1.29303 tp: 1.29203 at price 1.29487
2013.09.11 22:24:19     2012.01.02 08:02  Perevorot EURUSD,M5: close #4 buy 0.02 EURUSD at 1.29403 tp: 1.29503 at price 1.29480
2013.09.11 22:24:19     2012.01.02 08:02  Perevorot EURUSD,M5: close #5 sell 0.04 EURUSD at 1.29286 tp: 1.29186 at price 1.29487
2013.09.11 22:24:19     2012.01.02 08:02  Perevorot EURUSD,M5: close #6 buy 0.08 EURUSD at 1.29386 tp: 1.29486 at price 1.29480
Il s'avère que l'ordre est supprimé. Mais un seul. Il y en avait un autre, un autre. Mais il n'a pas été supprimé. Mais le cycle est pour toutes les commandes.
 

Surveillez votre variable NumberOfTry

il doit être mis à zéro pour chaque ticket, sinon une valeur de 3 ou plus lui sera attribuée et les autres conditions ne seront pas exécutées pour tous les tickets.

un seul satisfait à la condition

Raison: