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

 

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) ;

2) Pourquoi un tableau dans une fonction définie par l'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];}

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

 
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) ;

...

1) ArrayResize()

int i=7;
double Muss[]; // объявление динамического массива
//---
int init() 
{
  ArrayResize(Muss,i); // устанавливает новый размер массива
  return(0);
}
 

une telle chose :

si vous appelez MarketInfo(Symbol(),MODE_TRADEALLOWED), il retourne - 1=trade autorisé.

Mais si vous passez la souris sur le symbole dans la vue d'ensemble du marché, une info-bulle avec le texte - Trade : Close s'affichera.

Quelle est l'astuce ici ?

Je ne peux vraiment pas négocier, mais pourquoi MODE_TRADEALLOWED renvoie-t-il une valeur erronée ?

 
chief2000:

Combien de fois avez-vous fait fonctionner l'indicateur ? Il semble que ce soit plusieurs fois (la cyclicité est perceptible dans vos résultats).
Ajoutez une impression supplémentaire à deinit avec un certain "séparateur", définissez une condition d'entrée ou refaites-le dans le script pour qu'il ne soit pas exécuté plus d'une fois, alors ce sera plus clair.


Excellente idée))

Je l'ai fait plus simple, comme ça :

//+------------------------------------------------------------------+
//|                                            massive_fffffffff.mq4 |
//|                                                              hoz |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "hoz"
#property link      ""

int start()
{ 

   int Array[4] = {1, 2, 3, 4};
   int x1, x2, x3, x4;
   int Array_Size = ArrayRange(Array, 0);
   
   for(int i=0; i<11; i++)
   {
      i++;
      Print("_i = ", i);
   }

   for(x1=0; x1<Array_Size; x1++)
   {
      Print("Combination = ", Array[x1]);

      for(x2=x1+1; x2<Array_Size; x2++)
      {
         Print("Combination = ", Array[x1] + "   " + Array[x2]);

         for(x3=x2+1; x3<Array_Size; x3++)
         {
            Print("Combination = ", Array[x1] + "   " + Array[x2] + "   " + Array[x3]);

            for(x4=x3+1; x4<Array_Size; x4++)
            {
               Print("Combination = ", Array[x1] + "   " + Array[x2] + "   " + Array[x3] + "   " + Array[x4]);
            }
         }
      }
   }
  for(int h=0; h<11; i++)
   {
      h++;
      Print("h = ", h);
   }


   return(0);
}

Le début dans le journal de bord est comme ceci :

2013.09.10 17:09:08     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: h = 9
2013.09.10 17:09:08     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: _i = 9
2013.09.10 17:09:08     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: _i = 7
2013.09.10 17:09:08     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: _i = 5
2013.09.10 17:09:08     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: _i = 3
2013.09.10 17:09:08     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: _i = 1
2013.09.10 17:09:07     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: h = 11
2013.09.10 17:09:07     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: h = 10
2013.09.10 17:09:07     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: h = 9
2013.09.10 17:09:06     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: _i = 9
2013.09.10 17:09:06     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: _i = 7
2013.09.10 17:09:06     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: _i = 5
2013.09.10 17:09:06     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: _i = 3
2013.09.10 17:09:06     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: _i = 1
2013.09.10 17:09:06     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: h = 11
2013.09.10 17:09:06     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: h = 10
2013.09.10 17:09:06     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: h = 9
2013.09.10 17:09:06     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: Combination = 1
2013.09.10 17:09:06     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: _i = 11
2013.09.10 17:09:06     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: _i = 9
2013.09.10 17:09:06     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: _i = 7
2013.09.10 17:09:06     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: _i = 5
2013.09.10 17:09:06     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: _i = 3
2013.09.10 17:09:06     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: _i = 1
2013.09.10 17:09:06     massive_fffffffff test started
2013.09.10 17:09:04     TestGenerator: spread set to 2
2013.09.10 17:09:04     massive_fffffffff EURUSD.GI,M5: loaded successfully

Il n'y a même pas de cycles du tout. Il n'y a pas d'ordre. La sortie n'est pas du tout cohérente.

 
hoz:


Excellente idée))

Je l'ai fait plus simple, comme ça :

Le début dans le journal de bord est comme ceci :

Il n'y a même pas de cycles du tout. Il n'y a pas d'ordre. La sortie n'est pas du tout cohérente.


Vous avez rendu les choses un peu plus compliquées, au stade du test tout peut être fait en 1-2 lignes, selon la variante. Il est possible de tout faire dans l'Inite. L'ordre de sortie n'a pas été stipulé.


bool Status_Run = true;


start() {

   if(Status_Run==true) {
      Status_Run  = false;

      Print("---START ---");
      ......

   }
}
 
chief2000:

Vous avez rendu les choses un peu plus compliquées, au stade de la vérification, tout peut être fait en 1 ou 2 lignes, selon la variante. Il est possible de tout faire dans l'Inite. L'ordre de sortie n'a pas été stipulé.





Voulez-vous introduire un drapeau pour que les boucles soient exécutées une fois et c'est tout ? Je n'arrête pas d'exécuter... C'est comme ça que ça marche :

//+------------------------------------------------------------------+
//|                                            massive_fffffffff.mq4 |
//|                                                              hoz |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "hoz"
#property link      ""

int start()
{ 

   bool Status_run = true;
   int Array[4] = {1, 2, 3, 4};
   int x1, x2, x3, x4;
   int Array_Size = ArrayRange(Array, 0);
   
   if (Status_run == true)
   {
      Status_run = false;

      for(x1=0; x1<Array_Size; x1++)
      {
         Print("Combination = ", Array[x1]);

         for(x2=x1+1; x2<Array_Size; x2++)
         {
            Print("Combination = ", Array[x1] + "   " + Array[x2]);

            for(x3=x2+1; x3<Array_Size; x3++)
            {
               Print("Combination = ", Array[x1] + "   " + Array[x2] + "   " + Array[x3]);

               for(x4=x3+1; x4<Array_Size; x4++)
               {
                  Print("Combination = ", Array[x1] + "   " + Array[x2] + "   " + Array[x3] + "   " + Array[x4]);
               }
            }
         }
      }
   }

   return(0);
}

En substance, cependant, le code devrait fonctionner comme dans INITA, une fois pour toutes. Alors la variable booléenne Status_run sera immédiatement mise à faux et la condition if ne sera pas exécutée à nouveau... Mais mon journal n'est pas épuisé pour une raison quelconque.

 
hoz:


Voulez-vous introduire un drapeau pour que les boucles soient exécutées une fois et c'est tout ? Je n'arrête pas de courir... C'est comme ça que ça marche :

Bien qu'en substance, le code devrait fonctionner comme dans INITE, une fois et c'est tout. Alors la variable booléenne Status_run prendra immédiatement la valeur false et la condition if ne s'exécutera plus... Mais je n'ai pas de sortie dans le journal pour une raison quelconque.


Vous avez affirmé que les boucles donnaient des résultats erronés et je vous ai proposé un moyen de le tester. Si cela fonctionne comme vous le souhaitez, vous devez le faire conformément à votre algorithme, et si ce n'est pas le cas, vous devez le modifier pendant la vérification.

PS "Status_run" doit être créé avant start(), c'est une variable globale.
 

Gourous, un conseil. J'ai défini la variable bool Flag=true; pour commencer,

J'ouvre un marché

si ( condition)

{

Opn_S = true ;

Drapeau=false ;

}

Il y a une question sur le drapeau, si le drapeau renvoiefaux quand il est ouvert et qu'il y a ce drapeau dans la condition ouverte. Combien de temps le vrai ou faux passé au drapeau est-il conservé, est-il remis à zéro le jour suivant ?

 
Forexman77:

Gourous, un conseil. J'ai défini la variable bool=true; pour commencer,

J'ouvre un marché

si ( condition)

{

Opn_S = true ;

Drapeau=false ;

}

Il y a une question sur le drapeau, si le drapeau renvoiefaux quand il est ouvert et qu'il y a ce drapeau dans la condition ouverte. Combien de temps le vrai ou faux passé au drapeau est-il conservé, sera-t-il remis à zéro le jour suivant ?


Non, à chaque nouveau tick, la valeur de Flag sera vraie . https://book.mql4.com/ru/variables/types

Soit déclarer la variable de manière globale - par exemple au début d'un programme, en dehors de toutes les fonctions.

Ou rendez la variable statique - static bool flag=true ; .

 
ALXIMIKS:

Non, à chaque nouveau tick, la valeur de Flag sera vraie . https://book.mql4.com/ru/variables/types

Soit déclarer la variable de manière globale - au début du programme, en dehors de toutes les fonctions.

Ou rendez la variable statique - static bool flag=true ; .

Merci !