Autoaprendizaje del lenguaje MQL5 desde cero - página 28

 
Vasiliy Sokolov:

¡Así es! Todo el mundo intenta aprender a programar utilizando ideas erróneas sobre el software basadas en la experiencia vital. Por ejemplo, que un programa es como el texto de un libro con un índice, una introducción, un índice y una conclusión. Es decir, el programa es una especie de esquema secuencial desde el principio hasta el final. Al principio, esta idea funciona, pero luego, a medida que el programa se vuelve más complejo, surgen dificultades y no es posible escribir un programa fiable que funcione de cualquier manera. Kovalev es muy bueno prestando servicios bajistas: intenta explicar al lector, utilizando su accesible aparato conceptual, que el programa es el mismo libro con tal o cual esquema. ¡Pero no hay esquemas! El script tiene un "esquema" fundamentalmente diferente al del Asesor Experto, y el Asesor Experto tiene un esquema diferente al del indicador.

¿Cómo cree que debe aprender una persona? ¿Del derecho de la filosofía de la OLP? Es imposible.
 

Vasiliy Sokolov:

... 4) El bloque más extraño es el de "gestión de errores". Puedes entrar en él, pero no puedes salir de él. Es decir, el programa ha cogido un error y se queda en este bloque (debe colgarse hasta que se reinicie por completo, o, mejor aún, el terminal se cuelga permanentemente, para asegurarse de que no va a cometer más errores - ¡esa es la idea!) ...

¡Hola Vasiliy! Gracias por la explicación tan detallada y tan hábil. Lo único con lo que no estoy de acuerdo es con el punto 4. El hecho es que las flechas van tanto hacia como desde la " Unidad de tratamiento de errores". La línea que conecta esta unidad con la otra tiene flechas en sus extremos y del programa de informática del instituto aún recuerdo que significa un proceso de dos direcciones, es decir, de ida y vuelta. Por lo tanto, no tengo dudas sobre la situación. En cuanto al resto de su mensaje, todo está claro para mí.

Saludos, Vladimir.

 
MrBrooklin:

¡Hola Vasily! Gracias por la explicación detallada y altamente cualificada. Lo único con lo que no estoy de acuerdo es con el punto 4. El hecho es que las flechas van tanto hacia como desde la "Unidad de tratamiento de errores". La línea que conecta esta unidad con la otra tiene flechas en sus extremos y del programa de informática del instituto aún recuerdo que significa un proceso de dos direcciones, es decir, de ida y vuelta. Por lo tanto, no tengo dudas sobre la situación. En cuanto al resto de su mensaje, todo está claro para mí.

Saludos, Vladimir.

Así es, el primero se puso de moda :-)

Utiliza su expa como plantilla en tu investigación: ¡código competente!

allí y


" El
  • Asesor Experto puede ser optimizado por "Marco de tiempo detrabajo
  • "
  • Sólo puede haber una operación de "entrar en el mercado" por barra (esto es un parámetro interno, no se pone en los parámetros de entrada y no tiene nada que ver con el parámetro "Sólo una posición
  • ")
  • Cuando se trabaja en modo "dentro de la barra" ("Buscar señales,
  • o igual a '10') la barra actual es la barra #0, en el
  • modo 'Buscar señales, en segundos' ('Buscar señales, en segundos
  • ' menos de '10') la barra actual es la barra #1
  • :
  • parámetro ' - restricción sobre el lado a negociar. Puede tomar los valores 'Permitir
  • sólo posiciones de COMPRA', 'Permitir sólo posiciones de VENTA' y 'Permitir posiciones de COMPRA y VENTA
  • '
  • Parámetro 'Usar control de tiempo' - marco de tiempo para la búsqueda de señales de trading
  • desde 'Hora de
  • inicio':'Minuto de inicio' hasta'Hora de fin':'Minuto de fin'
  • .
  • El parámetro "Pips o puntos:"
  • establece el
  • cálculo estándar de Stop Loss, Take Profit y Trailing

  • и

    Invertir y otras cosas y conectar bibliotecas estándar en el código al principio para simplificar la posición de apertura fie - ESTUDIAR Y NO PREOCUPARSE.

    La bandera'Posiciones: Sólo una' establecida en'true' permite que el Asesor Experto no tenga más de una posición en el mercado. La bandera"Posiciones: Invertir" es la responsable de la inversión de las señales. Bandera interesante'Posiciones: Cerrar opuestas' - si esta bandera se establece en'true' antes de abrir una posición, garantiza la eliminación de las posiciones opuestas.Imprimir registro" imprime el registro ampliado de todas las operaciones. El parámetro"Freeze and StopsLevels Coefficient" define un coeficiente para los niveles de parada y congelación para los casos en que estos niveles son iguales a cero para un símbolo. Se recomienda aplicar un valor de "3".

    iFractals iAMA
    iFractals iAMA
    • www.mql5.com
    Получать сигнала на откате (по iFractals (Fractals) ), а тренд определять по iAMA (Adaptive Moving Average, AMA). По индикатору iAMA (Adaptive Moving Average, AMA) определяется тренд. Условия тренда: на текущем баре и на двух предшествующих индикатор равномерно растёт (тренд вверх) или равномерно падает (тренд вниз). При этом цена (High или...
     

    Voy a escribir unos principios que recomiendo encarecidamente al autor para que tome conciencia de lo que es el programa. A diferencia de los folletos de Kovalev, en los que parte del material es correcto, otro contiene gruesos errores, y otro es especulación general con el lector, estos principios son SIEMPRE y 100% correctos, no importa lo que escriba en MQL: Asesores Expertos, scripts o Expert Advisors:

    Primer principio. Cualquier programa en MQL maneja eventos. Un evento es una notificación que contiene información sobre algo, normalmente sobre algo que ha cambiado. Por ejemplo, ha llegado un nuevo tick o se ha ejecutado nuestra orden pendiente. Otros eventos no contienen ninguna información, simplemente ocurren. Por ejemplo, el evento "temporizador" puede llamar a la función del usuario con una periodicidad determinada. No notifica al usuario que algo ha cambiado. Simplemente invoca el código del usuario, por lo que no necesita ninguna información adicional. A partir de la definición de los eventos, se siguen varios métodos no triviales:

    • La primera implicación es que una vez que recibimos un evento, debemos tratarlo lo antes posible. Puede haber muchos eventos, y los eventos pueden acumularse en una cola. MeteTrader (no nuestro programa) se encarga de los eventos. Para ello utiliza un recurso especial llamado flujo. Este recurso es muy valioso y limitado. El hilo propiedad de MetaTrader ejecuta generosamente nuestro burdo, subóptimo y lento código escrito en un script en la CPU de nuestro PC. Si el procesamiento de eventos ralentiza el hilo de nuestro código, en algunos casos otros programas que se ejecutan en MetaTrader no podrán ejecutarse correctamente. Esperarán a que liberemos el hilo de nuestros cálculos inútiles y luego ejecutarán su código en el hilo liberado.
    • Hay muchos eventos. Podemos encargarnos de muchos de los eventos disponibles o sólo de uno. Cuando hacemos un script, éste maneja sólo un evento, OnStart, que ocurre una vez. Cuando escribimos un Asesor Experto, éste puede manejar múltiples eventos a la vez. Esto significa que es inútil meter su programa en el paradigma de "programar este libro". En cambio, deberíamos entender que el programa es un manejador de ciertos eventos. Pueden ser llamados en cualquier orden, pueden no ser llamados en absoluto. Los acontecimientos son independientes entre sí. Así, las partes del programa que manejan estos eventos no dependen unas de otras. Son no lineales y no secuenciales.

    (eso es todo por ahora, ya continuaré si me apetece).
    Документация по MQL5: Основы языка / Функции / Функции обработки событий
    Документация по MQL5: Основы языка / Функции / Функции обработки событий
    • www.mql5.com
    В языке MQL5 предусмотрена обработка некоторых предопределенных событий. Функции для обработки этих событий должны быть определены в программе MQL5: имя функции, тип возвращаемого значения, состав параметров (если они есть) и их типы должны строго соответствовать описанию функции-обработчика события. Именно по типу возвращаемого значения и по...
     
    Roman Shiredchenko:

    aquí está el primero que conseguí para la buena suerte :-)

    Utiliza su expa como plantilla en tu investigación: ¡código competente!

    allí y


    " El
  • Asesor Experto puede ser optimizado por "Marco de tiempo detrabajo
  • "
  • Sólo puede haber una operación de "entrar en el mercado" por barra (esto es un parámetro interno, no se pone en los parámetros de entrada y no tiene nada que ver con el parámetro "Sólo una posición
  • ")
  • Cuando se trabaja en modo "dentro de la barra" ("Buscar señales,
  • o igual a '10') la barra actual es la barra #0, en el
  • modo 'Buscar señales, en segundos' ('Buscar señales, en segundos
  • ' menos de '10') la barra actual es la barra #1
  • :
  • parámetro ' - restricción sobre el lado a negociar. Puede tomar los valores 'Permitir
  • sólo posiciones de COMPRA', 'Permitir sólo posiciones de VENTA' y 'Permitir posiciones de COMPRA y VENTA
  • '
  • Parámetro 'Usar control de tiempo' - marco de tiempo para la búsqueda de señales de trading
  • desde 'Hora de
  • inicio':'Minuto de inicio' hasta'Hora de fin':'Minuto de fin'
  • .
  • El parámetro "Pips o puntos:"
  • establece el
  • cálculo estándar de Stop Loss, Take Profit y Trailing

  • и

    Invertir y otras cosas y conectar bibliotecas estándar en el código al principio para simplificar la posición de apertura fie - ESTUDIAR Y NO PREOCUPARSE. Además, acostumbrarse a escribir código estándar - hay sangrías y todo lo demás

    La bandera'Posiciones: Sólo una' establecida en'true' permite que el Asesor Experto no tenga más de una posición en el mercado. La bandera"Posiciones: Invertir" es la responsable de la inversión de las señales. Bandera interesante'Posiciones: Cerrar opuestas' - si esta bandera se establece en'true' antes de abrir una posición, garantiza la eliminación de las posiciones opuestas.Imprimir registro" imprime el registro ampliado de todas las operaciones. El parámetro"Freeze and StopsLevels Coefficient" define un coeficiente para los niveles de parada y congelación para los casos en que estos niveles son iguales a cero para un símbolo. Se recomienda utilizar el valor "3".

    ¡Hola, Roman! Gracias por el ejemplo. Muchas veces he intentado entender los códigos escritos por Vladimir Karputov, pero para mí sigue siendo un nivel inalcanzable. Un poco más tarde, cuando tenga más información en mi cabeza, es probable que vuelva a sus códigos. Pero gracias por el consejo.

    Saludos, Vladimir.

     
    Vasiliy Sokolov:

    Voy a escribir unos principios que recomiendo encarecidamente al autor para que tome conciencia de lo que es el programa. A diferencia de los folletos de Kovalev, en los que parte del material es correcto, otro contiene gruesos errores, y otro es especulación general con el lector, estos principios son SIEMPRE y 100% correctos, no importa lo que escriba en MQL: Asesores Expertos, scripts, o Expert Advisors:

    Primer principio. Cualquier programa en MQL maneja eventos. Un evento es una notificación que contiene información sobre algo, normalmente sobre algo que ha cambiado. Por ejemplo, ha llegado un nuevo tick o se ha ejecutado nuestra orden pendiente. Hay acontecimientos que no tienen información, pero que simplemente ocurren. Por ejemplo, el evento "temporizador" puede llamar a la función del usuario con una periodicidad determinada. No notifica al usuario que algo ha cambiado. Simplemente llama al código del usuario, por lo que no necesita ninguna información adicional. A partir de la definición de los eventos, se siguen varios métodos no triviales:

    • La primera implicación es que una vez que recibimos un evento, debemos tratarlo lo antes posible. Puede haber muchos eventos, y los eventos pueden acumularse en una cola. MeteTrader (no nuestro programa) se encarga de los eventos. Para ello utiliza un recurso especial llamado flujo. Este recurso es muy valioso y limitado. El hilo propiedad de MetaTrader ejecuta generosamente nuestro burdo, subóptimo y lento código escrito en un script en la CPU de nuestro PC. Si el procesamiento de eventos ralentiza el hilo de nuestro código, en algunos casos otros programas que se ejecutan en MetaTrader no podrán ejecutarse correctamente. Esperarán a que liberemos el hilo de nuestros cálculos inútiles y luego ejecutarán su código en el hilo liberado.
    • Hay muchos eventos. Podemos encargarnos de muchos de los eventos disponibles o sólo de uno. Cuando hacemos un script, éste maneja sólo un evento, OnStart, que ocurre una vez. Cuando escribimos un Asesor Experto, éste puede manejar múltiples eventos a la vez. Esto significa que es inútil meter su programa en el paradigma de "programar este libro". En cambio, deberíamos entender que el programa es un manejador de ciertos eventos. Pueden ser llamados en cualquier orden, pueden no ser llamados en absoluto. Los eventos son independientes entre sí. Así, las partes del programa que manejan estos eventos no dependen unas de otras. Son no lineales y no secuenciales.

    (Eso es todo por ahora, ya continuaré si me apetece).

    Bien hecho Vasily, estoy esperando la continuación, ¡si no te importa escribirla! Todo lo que me dijo fue lacónico y comprensible para mí.

    Saludos, Vladimir.

     
    MrBrooklin:

    Bien hecho, Vasily, espero la continuación, si no te importa escribirla. ¡Todo lo que has informado es conciso y comprensible para mí!

    Saludos, Vladimir.

    Sí, juicios interesantes.

    1. cualquier programa es una jerarquía de bloques de función y es un sistema de parámetros relacionados y mutuamente dependientes.

    2. El evento es el resultado de la interacción del programa con el entorno de software externo, o de cambios internos. El entorno "informa" del evento llamando al programa (OnTick, OnChartEvent...).

    4. El entorno (terminal) es neutral para el programa, pero puede influir en él.

    5. El programa recibe información sobre su entorno en el terminal y el mercado mediante funciones especiales y puede utilizarla en su lógica.

    6. El programa puede recibir información sobre sí mismo o sus objetos mediante consultas especiales y utilizarla en su lógica.

    7. Los eventos se describen en declaraciones if().

    8. Los eventos son manejados por manejadores que reaccionan a los cambios.

    9. La reacción puede ser un cambio de estado de los objetos (cambio de masa de los valores de sus parámetros) o algún trabajo de computación.

    10. Los manejadores de eventos se agrupan en estructuras jerárquicas (modelos de eventos).

    11. Los objetos de software pueden suscribirse a varios eventos y estar en la lista de destinatarios.

    ... y mucho más... :)

    P.D. Vasiliy lo describirá mejor y más claramente.
     

    Siguiendo adelante:

    • Como hay muchos eventos, hay muchos manejadores de eventos. Dado que los eventos son llamados de forma inconsistente, sus manejadores de eventos también son llamados de forma inconsistente. Como hay llamadas inconsistentes, los manejadores de eventos no pueden depender unos de otros, y tampoco pueden depender de los datos de los demás. La única construcción que cumple estos estrictos requisitos es una función.
    • Las funciones no pueden depender unas de otras. Si una función devuelve la suma a+b, y la segunda devuelve el producto a*b, el resultado de estas dos funciones no dependerá de la secuencia de llamadas. Podemos llamar a la primera función con los argumentos 3 y 5 y obtener 8. A continuación, llame a la segunda función con los mismos argumentos y obtenga 24. Entonces intercambia sus llamadas. Los resultados serán los mismos. La función de suma siempre devolverá 8 con los argumentos 3 y 5. La función de multiplicación siempre devolverá 24 con los mismos argumentos.
    • De lo anterior se desprende que el manejador de eventos sólo puede ser una función. Si se produce un nuevo evento de tick, éste se gestiona con la función OnTick. Si se produce el evento Start (un lanzamiento único del script), éste se gestiona mediante la función especial OnStart.
    • Esta función es universal. Esta función puede manejar no sólo eventos. La función puede devolver algo útil, por ejemplo, la hora actual. Una función puede realizar cálculos complejos con los argumentos que se le pasan y devolver el resultado final de estos cálculos como un único valor. Por último, una función puede ser un proveedor de datos: Llamas a la función y obtienes de ella los datos que necesitas, como las cotizaciones.
    • Internamente, MetaTrader consta de miles de funciones, de las cuales unas 1500 mil se ponen amablemente a disposición de los usuarios. Son funciones muy útiles. Permiten comprobar la hora del sistema y obtener los datos de un instrumento que le interesa. Las funciones se utilizan para enviar órdenes comerciales. Puedes abrir el manual de ICL y ver que consta de funciones y sus argumentos. Así que MetaTrader, en lo que respecta a los programas de usuario, es un gran conjunto de funciones.
    • Las funciones universales no son suficientes. No importa cuántas funciones nuevas se añadan al sistema, siempre habrá escasez de ellas. La razón es que cada persona tiene necesidades diferentes. No existe una función única para todas las ocasiones. Las características más genéricas y universales ya están incluidas en MetaTrader y son amablemente compartidas con nosotros. Sin embargo, las necesidades de los usuarios son infinitas. MetaQuotes no puede satisfacer las necesidades individuales de 100.000 usuarios de su terminal. En su lugar, hicieron algo más flexible: dejaron que los usuarios crearan ellos mismos las funciones que querían. Los usuarios se beneficiaron de ello. En lugar de utilizar una función del sistema que no les conviene, pueden escribir su propia función que resuelva perfectamente su problema. Ninguna función del sistema es perfecta debido a su universalidad.
    • La habilidad de un usuario para escribir sus propias funciones y entender cómo funcionan indica la habilidad de un programador. Si entiende que un programa es un conjunto desarticulado de manejadores (en forma de funciones) que no manejan consistentemente los eventos entrantes, es bueno. Si sabe escribir sus propias funciones, es otra ventaja. Si puede combinar el trabajo de varias funciones (tanto las suyas como las del sistema) en un algoritmo común, eso es otra ventaja para él.
    • Si entiendes que todo en MetaTrader (el cuarto y el quinto) se basa de alguna manera en funciones, funciones y funciones - todo se vuelve claro de repente. La ayuda ya no se presenta como un grueso libro con un montón de fragmentos de código dispersos, sino como una guía de las funciones disponibles y lo que hacen. Todo lo demás, como los tipos de datos, las matrices, las estructuras, las clases, es irrelevante. Se trata de apoyar las funciones para que puedan devolver algo y aceptar algo.

    (eso es todo por ahora)
     
    Has inundado a un recién llegado con información inútil).
     
    Реter Konow:
    Un principiante se ve inundado de información inútil).

    Esto sugiere que no debes hacer alarde de tus deseos de esa manera. Vladimir también podría haber preguntado específicamente sobre tal o cual función y recibir consejos útiles, en lugar de las tonterías de los "expertos" como aprender C++ o aprender ensamblador. Podrías empezar estudiando las tarjetas perforadas.