Problemas con la codificación de variables locales vs globales en mql4

 

Publi

Resultados 1 al 10 de 10

Tema: Problemas con la codificación de variables locales vs globales en mql4

  1. #1
    2 Adjunto (s) Hola,
    Soy bastante nuevo en mql4. He estado bien, pero últimamente he quedado completamente perplejo por un problema que he encontrado. He codificado una ea simple que funciona bien una vez que declaro una variable local para buyorder
    int buyorder = OrderSend (Symbol (), OP_BUY, LotSize, Ask, 3,0,0, NULL, MagicNumber, 0, verde);

    if (buyordergt; 0)
    OrderModify (orden de compra, OrderOpenPrice (), bsl, btp, 0, CLR_NONE);

    pero debo admitir buyorder como una variable global (y quitarle el int) no funciona. Simplemente sigue modificando órdenes infinitum. Por mi vida, no puedo comprender por qué esto debería suceder, ya que una variable global debería tener la capacidad de usarse en cualquier parte de la aplicación y su valor debería tener la capacidad de cambiar. Podría seguir con la variable local, pero deseo ampliar la ea para hacer numerosos pedidos y usar paradas de monitor, etc., y necesito usar variables globales. He incluido el ea a continuación. La primera versión (variable local) funciona, la segunda (global) no. Si alguien puede ayudarme, sería tan apreciado ya que, literalmente, he pasado días intentando resolverlo. PD Esto también se aplica a la orden de venta variable.
    Gracias

    https://www.forexycfds.com/attachmen...1727520325.mq4

    https://www.forexycfds.com/attachmen...1081469781.mq4

  2. #2

    Cita Iniciado por ;
    Hola, soy bastante nuevo en mql4. He estado bien, pero recientemente me he quedado completamente perplejo por un problema que me he encontrado. Durante toda mi vida, no puedo entender esto ...
    Comience por hacer una sangría correcta del código. El formateo es realmente pobre.
    Https://en.wikipedia.org/wiki/Indent_stylePosteriormente cosa todas las sentencias ifbloques con llaves {}. Luego verá que está utilizando un factor no definidono inicializado en una de esas aplicaciones. El compilador no debe realmente inventarlo. O que el factor no se actualiza en otra edición. También sugeriría definir todas las variables locales en el pico de cada función y usar llaves para encerrar todos los cubos. Eso probablemente habría proporcionado comentarios a través del compilador de que algo estaba mal. TLDR: particionamiento de código pobre; Anidamiento de declaraciones if sin llaves; Declaración de variables en línea Hacer que el compilador apruebe el código incorrecto; El código no se ejecuta como se esperaba.

  3. #3
    Cuando declara una variable local, solo está disponible durante el 1 caso que se invoca start {}. Cada vez que start {} se ejecuta, vuelve a declarar la variable. Observando su código, solo se llama a la variable de orden de compra si no hay pedidos de COMPRA abiertos en su lugar, y se abre un nuevo pedido. En caso de que exista una orden, la variable buyorder se pasa por alto de las declaraciones if, por lo que no se anuncia y, por lo tanto, el cambio de orden regular no se invoca. Es decir, cuando no se llama al orden de compra, el orden de compra permanece sin declarar, o tiene un valor cero o valor, como orden de compra gt; 0 es falso. Por lo tanto, no hay alteración de orden. Por otro lado, si declara una variable global, el orden de compra retendrá los valores y, por lo tanto, el código tal como está escrito intentará cambiar cada vez, como buyorder gt; 0 es exacto. Espero que esto ayude a Fred

  4. #4
    Gracias Fred, gracias Xaphod, ¡es tan fácil cometer un error con esta codificación! Definitivamente intentaré hacer que la codificación sea más legible. ¡Gracias de nuevo por la entrada!

  5. #5

    Cita Iniciado por ;
    Gracias Fred, gracias, ¡es realmente simple cometer un error con esta codificación! Definitivamente intentará hacer que la codificación sea más legible. ¡Gracias por la aportación!
    Solo debe llamar a OrderModify una vez después de OrderSend. Entonces no importa si el orden de compra es global o local. Local es más preferible. Código insertado int buyorder = 0if (PreviousFastlt; PreviousSlow CurrentFastgt; CurrentSlow) if (OpenOrdersThisPair (Symbol ()) == 0) buyorder = OrderSend (Symbol (), OP_BUY, LotSize, Ask, 3,0,0, NULL, MagicNumber, 0, verde); if (buyordergt; 0) OrderModify (order de compra, OrderOpenPrice (), bsl, btp, 0, CLR_NONE);

  6. #6

    Cita Iniciado por ;
    No puedo saber por qué esto debería ocurrir ya que una variable global debería tener la capacidad de ser utilizada en cualquier lugar
    Ese es el problema exacto. Es un problema de alcance. En ambos ejemplos, las sentencias if (lt; buyordersellordergt; gt; 0) están en el alcance incorrecto; junto con la diferencia de que el alcance de buyordersellorder cambia junto con todos los ejemplos, induciendo el mal efecto en el siguiente ejemplo. Mire el código de muestra para obtener un alcance adecuado de Xaphod. Si puedo preguntar, ¿en qué idioma está codificado?

  7. #7

    Cita Iniciado por ;
    Citar Ese es el problema exacto. Es un problema de alcance. En ambos ejemplos, las sentencias if (lt; buyordersellordergt; gt; 0) están en la extensión incorrecta; siendo la diferencia el alcance de buyordersellorder cambia con los ejemplos, induciendo el mal efecto en el segundo caso. Mire el código de muestra de Xaphod para un alcance adecuado. Si puedo preguntar, ¿en qué idioma está acostumbrado a codificar?
    Hola, Rockit! Realmente no sé cómo programar, he estado leyendo mucho y movido a través del libro mql4. No estoy seguro de lo que quiere decir con el alcance aunque entiendo por las ilustraciones de arriba donde me equivoqué. ¡Gracias!

  8. #8

    Cita Iniciado por ;
    cita Hola! Realmente no entiendo cómo programar, he estado leyendo mucho y fui a través de la novela mql4. No estoy seguro de lo que quiere decir con el alcance aunque sé por los ejemplos anteriores en los que me equivoqué. ¡Gracias!
    Me refiero al alcancecontexto:
    https://en.wikipedia.org/wiki/Scope_(computer_scienceLas sentencias if que comprueban orden de compraorden de venta se colocaron en el contexto incorrecto, ya que pertenecían al contexto (alcance) de las otras sentencias if (externas).

  9. #9
    Hola, como se puede observar las diferencias entre una variable global y el barrio es que la variable global puede ser utilizada por más de EA a la vez para transportar datos entre EA's e Indicadores, la variable local se conoce solo por la declaración de EA en él. Que espero que esto te sea útil

  10. #10

    Cita Iniciado por ;
    Hola, como se puede ver, las diferencias entre una variable global y un barrio son que la variable global puede ser utilizada por EA a la vez para transferir información entre EA's e Indicadores, la variable local es conocida solo por el EA declarado en ella. Espero que encuentres esto útil
    La terminología es desafortunada y puede ser confusa para algunos. Te refieres a una variable global del terminal del cliente. Las publicaciones anteriores se refieren a una variable globalscope que solo se puede usar en EA, etc., donde se declara.

Permisos de publicación

  • No puedes crear nuevos temas
  • No puedes responder temas
  • No puedes subir archivos adjuntos
  • No puedes editar tus mensajes
  •  
Cookies
Utilizamos cookies propias y de terceros para mejorar nuestros servicios y mostrarle publicidad relacionada con sus preferencias mediante el análisis de sus hábitos de navegación. Si continua navegando, consideramos que acepta su uso. Puede cambiar la configuración u obtener más información y política de cookies aquí.