[ARCHIVE] Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 3. - page 53

 

Quelque chose semble s'éclaircir.... Voici la situation : la variable globale double Delete_Level est déclarée. Dans le corps de l'instruction if, une nouvelle valeur lui est attribuée :

Delete_Level = MA3

Et lorsqu'on quitte le corps, la valeur globale de Delete_Level ne change pas. Question : comment puis-je modifier la valeur de la variable globale Delete_Level lorsque je quitte le corps de l'instruction if ?

 
vovan-gogan:

Désolée, mais pourriez-vous vous calmer ?) Aidez-moi à comprendre l'erreur en


Le fait qu'il n'y aura JAMAIS d'égalité parfaite - c'est le monde réel, le vrai monde, dans lequel il y a des incertitudes et des tolérances pour tel ou tel processus, opération, etc. Apprenez les "bases"... :-P Il n'y a pas plus simple. Faites ce que je vous ai recommandé et dites-moi si la condition fonctionne, est-ce qu'elle fonctionner a ? Je m'y intéresse moi-même. Merci.


 
vovan-gogan:

Quelque chose semble s'éclaircir.... Voici la situation : la variable globale double Delete_Level est déclarée. Dans le corps de l'instruction if, une nouvelle valeur lui est attribuée :

Et lorsqu'on quitte le corps, la valeur globale de Delete_Level ne change pas. Question : comment puis-je modifier la valeur de la variable globale Delete_Level lorsque je quitte le corps de l'instruction if ?


Comment cela peut-il ne pas changer ? Bien sûr que ça change. Imprimez le code et regardez l'onglet Log, avec F12 - test étape par étape en mode visualisation.
 
sergeev:

quelle est la date telle que vous et MQL la comprenez ?
Je voudrais faire une vérification avant de passer une commande. Supposons qu'une session commence à 10-30, puis à 10-35 toutes les conditions pour ouvrir un ordre d'achat sont remplies, mais il ne doit pas être placé avant que l'heure actuelle soit supérieure ou égale à 10-45.
 
Roman.:

Comment se fait-il que ça ne change pas ? Bien sûr, ça change.


C'est comme ça. Par exemple, dans un EA, je déclare d'abord une variable globale int Orders, puis si un ordre en attente est placé, la valeur de int Orders doit changer comme indiqué ci-dessous :

int Orders;
if (MA2_2<MA1_2 && MA2_1>MA1_1)//пересечение МА
{
   if (OrdersTotal()>= 1)
   {
   return;
   }
         SL = 30;
         TP = 12;
         S_Price = Low[1] - 1* Point;
         if (OrderSend (Symbol(), OP_SELLSTOP, Lots, S_Price, 0, SL, TP, "My order", Magic)>0)
            {
               Orders++;
               Alert ("Ордер выставлен. Orders=",Orders );
            }
}           

Mais cela ne changera pas dans les ordonnances. Chaque fois, nous recevons un message indiquant que "la commande est prête".Commandes=1"

 
vovan-gogan:


C'est comme ça. Par exemple, dans un EA, je déclare d'abord une variable globale int orders et ensuite, si un ordre en attente est placé, la valeur de int orders doit changer comme indiqué ci-dessous :

Mais il n'y a pas de changement dans les ordres. Chaque fois, je reçois un message disant "La commande est passée. Commandes=1"


Vous n'avez pas besoin d'une variable globale, mais d'une variable locale de la fonction de démarrage. Alors, s'il vous plaît, essayez

int start()                            // Спец. функция start
  {
    int Orders=0;
     if (MA2_2<MA1_2 && MA2_1>MA1_1)  //пересечение МА
        {
          if (OrdersTotal()>= 1) return(0);   
          SL = 30;
          TP = 12;
          S_Price = Low[1] - 1* Point;
          if (OrderSend (Symbol(), OP_SELLSTOP, Lots, S_Price, 0, SL, TP, "My order", Magic)>0)
            {
               Orders++;
               Alert ("Ордер выставлен.Orders = ",Orders );
            }
        }   
       Alert ("Ордеров нет. Orders = ",Orders );    
//----------------------------------------------------------------  
   return;                             // Выход из start()
  }
 
Roman.:


Vous n'avez pas besoin d'une variable globale ici, mais d'une variable locale pour la fonction de démarrage. Essayez donc


N'est-ce pas la même chose dans mon exemple ? En quoi est-ce différent ? Sauf que je n'ai pas ajouté de fonction de démarrage.
 
vovan-gogan:

N'est-ce pas la même chose dans mon exemple ? En quoi est-ce différent ? Sauf que je n'ai pas ajouté de fonction de démarrage.

Vous devriez essayer mon exemple.
 
Roman.:

Essayez ma version.

Mais je ne vois pas la différence pour essayer. S'il vous plaît, dites-moi ce que j'ai fait de mal.
 
Dites-moi pourquoi lorsque j'ouvre un graphique (en temps réel) avec Cadre temporel M30 et appliquer l'indicateur avec le paramètre int shift=iBarShift(NULL,PERIOD_M5,some_time) ; le décalage sera comme il devrait être, mais quand j'exécute le même indicateur par le testeur avec la période M30 le décalage n'est pas calculé ?
Raison: