Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 1063

 
Pouvez-vous me dire s'il existe un moyen de modifier les heures d'ouverture des barres h4 et d1 ? En gros, pour simuler un changement de fuseau horaire. Peut-être un script qui construit des graphiques hors ligne basés sur l'horizon temporel h1 ou quelque chose comme ça.
 
Artyom Trishkin:

L'exécution ne peut être pardonnée.

Quelle est l'erreur ?

Ici.

Comme vous pouvez le constater, vous ne pouvez pas passer une structure déclarée localement à une fonction.

 
vladnev:
Pouvez-vous me dire s'il existe un moyen de modifier les heures d'ouverture des barres h4 et d1 ? Imite grosso modo un changement de fuseau horaire. Peut-être un script qui construit des graphiques hors ligne basés sur l'horizon temporel h1 ou quelque chose comme ça.
iOpen(Symbol,нужный таймфрейм,номер бара(счёт идёт справа налево))

Nous devons travailler avec ça

 
Seric29:

Ici.

Comme vous pouvez le constater, vous ne pouvez pas passer une structure déclarée localement à une fonction.

Vous confondez la définition de la structure avec la déclaration d'une variable avec le type de cette structure.
 
Artyom Trishkin:

Pouvez-vous le vérifier vous-même ? Difficile ? Et pourquoi écrire trop ?

Je n'ai pas vérifié. Qu'est-ce qui vous arrête ?

Artyom, cette option ne fonctionnera vraiment pas. La structure doit être définie au niveau de la variable globale. Et une variable de type structure se trouve n'importe où. Il sera alors possible de le passer par référence. Parce que le type des paramètres des fonctions entrantes ne sera pas défini.

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
   struct MyPoint
     {
      int         x[5];
      int         y;
     }gw777; // Переменная глобального уровня, просто лишняя.
int OnInit()
  {
   MyPoint qw1; // Локальная переменная
   EqualPointsP(qw1);// передал структуру в функцию EqualPointsP
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason) {}

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool EqualPointsP(MyPoint &qw)
  {
   Print("EqualPointsP ");
   return true;
  }
 
Artyom Trishkin:
Vous confondez définition d'une structure et déclaration d'une variable avec le type de cette structure.

C'est-à-dire. Vous voulez dire que la structure doit être déclarée globalement, c'est-à-dire en dehors du code, et que la structure, par sa définition, ne peut pas être décrite à l'intérieur du code, c'est-à-dire localement ; seules les variables peuvent être créées de cette façon, ou est-ce que je comprends mal quelque chose ? Veuillez expliquer.

 
Alexey Viktorov:

Artyom, cette variante ne fonctionnera vraiment pas. La structure doit être définie au niveau des variables globales. Et une variable de type structure se trouve n'importe où. Il sera alors possible de le transférer par référence. Parce que le type des paramètres entrants de la fonction ne sera pas défini.

Donc, c'est mondial après tout.

 
Seric29:

Donc, c'est mondial après tout.

NON. Une structure est un type défini par l'utilisateur. Et donc ce type doit être disponible partout. Et une VARIABLE d'un type personnalisé peut être déclarée où le petit doigt gauche du pied droit veut et passer cette variable où le chien bien-aimé veut, mais seulement par référence.

 
Alexey Viktorov:

De cette façon, la structure ne fonctionnera pas, Artyom. La structure doit être définie au niveau des variables globales. Et la variable de type structure est n'importe où. Il sera alors possible de le transférer par référence. Parce que le type des paramètres des fonctions entrantes ne sera pas défini.

 

En général, puisque Artyom ne répond à rien, et que l'homme ci-dessus a donné la réponse que les fonctions travaillent avec des structures qui doivent être connues et donc doivent être déclarées globalement, nous concluons que la structure doit être déclarée globalement.

Par nature, une fonction qui travaille avec une structure ne peut accepter que les mêmes structures statiques. Cela signifie qu'il est impossible de déclarer une structure localement pour qu'elle ait une portée limitée et de la passer à la fonction.

Raison: