Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 1063

 
¿Puedes decirme si hay una manera de cambiar los tiempos de apertura de las barras h4 y d1? A grandes rasgos, para simular un cambio de zona horaria. Tal vez un script que construye gráficos fuera de línea basado en el marco de tiempo h1 o algo así.
 
Artyom Trishkin:

La ejecución no puede ser perdonada.

¿Cuál es el error?

Aquí.

Como puedes ver, no puedes pasar una estructura declarada localmente a una función.

 
vladnev:
¿Puedes decirme si hay una manera de cambiar los tiempos de apertura de las barras h4 y d1? A grandes rasgos, imitar un cambio de zona horaria. Tal vez un script que construye gráficos fuera de línea basado en el marco de tiempo h1 o algo así.
iOpen(Symbol,нужный таймфрейм,номер бара(счёт идёт справа налево))

Tenemos que trabajar con este

 
Seric29:

Aquí.

Como puedes ver, no puedes pasar una estructura declarada localmente a una función.

Estás confundiendo la definición de la estructura con la declaración de una variable con el tipo de esta estructura.
 
Artyom Trishkin:

¿Puede comprobarlo usted mismo? ¿Es difícil? ¿Y por qué escribir demasiado?

No lo he comprobado. ¿Qué te detiene?

Artyom, esta opción realmente no funcionará. La estructura debe definirse a nivel de variable global. Y una variable de tipo estructura está en cualquier lugar. Entonces será posible pasarlo por referencia. Porque el tipo en los parámetros de la función entrante no estará definido.

//+------------------------------------------------------------------+
//| 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:
Confundes la definición de una estructura con la declaración de una variable con el tipo de esta estructura.

Significado. ¿Quieres decir que la estructura debe ser declarada globalmente, es decir, fuera del código, y que la estructura por su definición no puede ser descrita dentro del código, es decir, localmente; sólo las variables pueden ser creadas de esta manera, o estoy entendiendo algo mal? Por favor, explique.

 
Alexey Viktorov:

Artyom, esta variante realmente no funcionará. La estructura debe definirse a nivel de variables globales. Y una variable de tipo estructura está en cualquier lugar. Entonces será posible transferirlo por referencia. Porque el tipo en los parámetros entrantes de la función no estará definido.

Así que es global después de todo.

 
Seric29:

Así que es global después de todo.

NO. Una estructura es un tipo definido por el usuario. Y, por tanto, este tipo debe estar disponible en todas partes. Y se puede declarar una VARIABLE de un tipo personalizado donde quiera el meñique izquierdo del pie derecho y pasar esta variable donde quiera el querido perro, pero sólo por referencia.

 
Alexey Viktorov:

Así la estructura no funcionará, Artyom. La estructura debe definirse a nivel de variables globales. Y la variable de tipo estructura está en cualquier lugar. Entonces será posible transferirlo por referencia. Porque el tipo en los parámetros de la función entrante no estará definido.

 

En general, ya que Artyom no responde nada, y el hombre de arriba dio la respuesta de que las funciones trabajan con estructuras que deben ser conocidas y por lo tanto deben ser declaradas globalmente, concluimos que la estructura debe ser declarada globalmente.

Por su naturaleza, una función que trabaja con una estructura sólo puede aceptar las mismas estructuras estáticas. Significa que es imposible declarar una estructura localmente para que tenga un alcance limitado y pasarla a la función.

Razón de la queja: