Versión beta del libro en línea sobre la programación de MQL4 - por Sergey Kovalev (SK.) - página 3

 
Climber:
He probado Meta Trader por primera vez hace una semana y descubrí que es mucho más conveniente que mis terminales anteriores (Rumus y Forex Trader). Hace unos dos años, cuando conocí el mercado de divisas y abrí mi primera cuenta de demostración, me pregunté cómo automatizar todo. Entonces abrí el terminal y vi el mensaje de Autotrading en la sección de correo. Y aquí estoy))) Leí intensamente el libro, y espero que pronto escriba mi primer Asesor Experto para mi estrategia desarrollada. Antes no tenía absolutamente nada que ver con la programación, incluso era difícil imaginar que alguna vez estudiaría programación))) A medida que leía, me surgían preguntas, pero también desaparecían a medida que avanzaba. Apareció la pregunta, miré hacia adelante y quedé satisfecho, porque vi la respuesta después de un par de capítulos y volví a leer todo en orden. Me atrajo especialmente la posibilidad de probar la estrategia en datos históricos y ajustar la estrategia como resultado.
De todos modos, muchas gracias por el libro.


Es excelente. Eres un nuevo usuario de MT. Y tú no sabes prácticamente nada de programación en este momento.

Permítame sugerirle que informe al menos dos o tres veces al mes de cómo van las cosas (y más a menudo si lo desea). Eso sería muy interesante.

Mientras tanto, si me permite, tengo una pregunta. Dice usted que le ha surgido una duda que se responde en los siguientes apartados. He tratado de armarlo de manera que se evite esa situación. ¿Podría aclarar a qué pregunta se refiere?

 
SK. писал (а):
Climber:
Hace una semana instalé y probé Meta Trader por primera vez. Resultó que este terminal es mucho más conveniente que mis anteriores (Rumus y Forex Trader). Hace unos dos años, cuando conocí el mercado de divisas y abrí mi primera cuenta de demostración, me pregunté cómo automatizar todo. Entonces abrí el terminal y vi el mensaje Autotrading en la sección de correo. Y aquí estoy))) Leí intensamente el libro, y espero que pronto escriba mi primer Asesor Experto para mi estrategia desarrollada. Antes no tenía absolutamente nada que ver con la programación, incluso era difícil imaginar que alguna vez estudiaría programación))) Mientras leía, me surgieron preguntas, pero también desaparecieron a medida que avanzaba. La pregunta surgió, miré hacia adelante y quedé satisfecho, ya que vi la respuesta después de un par de capítulos y volví a leer todo en orden. Me atrajo especialmente la posibilidad de probar la estrategia con datos históricos y corregirla como resultado.
De todos modos, muchas gracias por el libro.


Es excelente. Eres un nuevo usuario de MT. Y tú no sabes prácticamente nada de programación en este momento.

Me permito ofrecerle: que me haga saber al menos 2 o 3 veces al mes cómo le va (o más a menudo, si lo desea). Sería muy interesante.

Mientras tanto, si me permite, tengo una pregunta. Dice usted que le ha surgido una duda que se responde en los siguientes apartados. He tratado de armarlo de manera que se evite esa situación. ¿Podría aclarar a qué pregunta se refiere?

Una vez utilicé Sign of Misery para facilitar mi trabajo, donde puedes escribir un programa sin saber programación. Sólo había que especificar las acciones en el orden en que se realizaban (yo lo usaba principalmente como automatizador, aunque hay muchas más posibilidades). Digamos que tengo un montón de valores en 4 columnas en Excel (datos de estudios eléctricos de geofísica, cada 20 cm). Para el procesamiento posterior de estos datos necesitaba tomar los datos sólo de los contadores (es decir, de 0, 1, 2, 3, 4 ....). Hice este programa para automatizar las acciones, mediante comandos para emular las teclas y cambiar las coordenadas del ratón. Lo compilé en el ehe. Pero era sólo una digresión. El programa tenía que hacer etiquetas y establecer las condiciones de transición a estas etiquetas, es decir, hacer un ciclo de operaciones, con la condición de salir de este ciclo. Cuando llegué a la cuestión de la construcción del EA tenía alguna idea sobre la visión general de la estructura del código. Pero cuando empecé a leer el libro, estaba un poco confundido por la estructura de la construcción del programa y luego por la función int start () que se repite en cada tick y si en el momento de su ejecución me enteré del precio de la oferta, se escribe en una variable y se almacena en ella a lo largo de su ejecución, entonces ¿cómo voy a saber cuando el precio ha cambiado y el programa puede realizar cualquier otra acción basada en el nuevo precio? Pensé que el precio en mi programa se actualizará por algún tipo de código de bucle, pidiendo constantemente. También tenía otra duda: cuando se llama a una función y se ejecuta, me imaginaba que se ejecutaría la siguiente función, pero resulta que el control vuelve a la función siguiente a la que inicialmente llamó a la función. Pero este hecho me agradó en particular, porque me quedó claro (porque pensé, ¿qué pasa con otras acciones, que siguieron a esta función, se saltan de esta manera?) Ahora tengo una pregunta así: Entendí que al ejecutar la función init, llamaré a una función para calcular un precio de apertura adecuado para mi orden, y también para calcular un tamaño de lote en base a los datos de saldo de mi cuenta; después de terminar init, comenzará la ejecución de la función start, que contendrá un código de "espera" para El precio necesario de la transacción, y tan pronto como vendrá, se ejecutará la apertura de la orden (take profit no se supone poner porque si habrá un salto que saltará sobre el valor ТР, no se activará, y el salto esta potencialmente favorable que el valor ТР, por lo tanto quiero formar la orden para cerrar la orden en el último precio conocido cuando el precio actual o es igual, o < , o > especificado.o >); entonces lo más misterioso para mí es dónde escribir el código de espera del precio de "cierre" de la orden y volver al principio, es decir, calcular de nuevo el precio liquidado y utilizar el "cierre" de la orden. Es decir, tengo que calcular el precio que hay que fijar para la apertura, esperar este precio, etc. He mirado en las secciones; creo que he visto algo en los títulos, que probablemente responda a mi pregunta. Mientras termino de leer la sección de Órdenes de Apertura y Fijación. Empecé a leerlo ayer por la mañana.
Te haré saber el progreso por supuesto, como en mi situación y sin comunicación)). Espero una respuesta constructiva.
Gracias por su tiempo y atención.
 

Por favor, divida los siguientes mensajes en párrafos, ya que es difícil entender lo que se escribe.

Climber:
Pero al empezar a leer el libro, estaba un poco confundido por la estructura de la construcción del programa y luego por la función int start (), que se repite en cada tick y si en el momento de su ejecución conozco el precio de la oferta, entonces se escribe en una variable y se almacena en ella durante todo el tiempo de ejecución, entonces ¿cómo voy a saber cuando el precio ha cambiado y el programa puede realizar cualquier otra acción basada en el nuevo precio? Pensaba que el precio en mi programa se actualizaría mediante algún código de bucle, pidiéndolo constantemente.

Tienes razón al decir que para que el programa pueda funcionar en tiempo real, es necesario que se informe periódicamente del hecho de un nuevo precio y del precio mismo.

Efectivamente, hay dos maneras de hacerlo:

La primera forma es ejecutar en un bucle sin fin alguna función y desde ella solicitar periódicamente el precio.
Pero este método tiene desventajas:
- Si las consultas se realizan con frecuencia, el resultado es una gran carga en el canal de comunicación y un desperdicio de recursos del PC;
- Si realiza consultas con poca frecuencia, puede perder un nuevo precio entre las consultas.

El segundo método (aceptado como básico en la tecnología MQ) es bastante diferente, ya que el lanzamiento del código necesario pertenece al terminal. El terminal recibe información del servidor, entiende que ha llegado un nuevo tick (el hecho de un nuevo precio y el propio precio) y en base a esta información, el terminal inicia la función(). Todo esto se describe en la sección Programa en MQL4.

Escalador:
Ahora tengo una pregunta: me he dado cuenta de que al ejecutar la función init llamaré a la función de cálculo del precio abierto de mi orden, y también al cálculo del tamaño del lote, basándome en los datos del saldo de mi cuenta; después de la ejecución init comenzará la función init...

No es correcto. init() y start() son funciones especiales. Son llamados por el terminal cliente de acuerdo a sus propias propiedades (o más simplemente, de acuerdo a las reglas, condiciones bajo las cuales son llamados para su ejecución). Esto se describe en la sección Funciones especiales. La función init() se ejecuta una vez, cuando el programa se carga en la ventana. Y se llama a start() en cada tick. Esto es muy conveniente. Un tick llegó y trajo un nuevo precio = la terminal lanza start() que se ejecuta hasta que se ejecuta. En él deben insertarse todos los cálculos: cálculo del número de lotes, condiciones de las órdenes de apertura/cierre y todo lo demás.

Escalador:
Entonces lo más desconcertante para mí es dónde escribir el código esperando el precio de "cierre" de la orden y volver al principio, es decir, de nuevo, contando el precio de apertura, esperando este precio, etc. He mirado en las secciones; creo que he visto algo en los títulos, que probablemente responda a mi pregunta. Disfrutaré de la lectura de la sección de Órdenes de apertura y establecimiento.

A juzgar por sus preguntas, no necesita escribir programas ni leer lo que está leyendo ahora. En esta situación, se recomienda encarecidamente empezar a leer el libro de nuevo. Con constancia y sin adelantarse a los acontecimientos. Y a medida que vayas avanzando, escribe todos los ejemplos presentados en ME y ejecútalos en tu PC. Y no pases a la siguiente sección hasta que no entiendas bien cada letra del código. Busque los conceptos de Garrapata, Control, Función, Función especial, Operador y, en general, consulte el Diccionario de Términos de vez en cuando.

Escalador:
Por supuesto que informaré de los avances como en mi posición y sin comunicación)) Espero una respuesta constructiva.
Gracias por sus comentarios.

Espero que tome el consejo correctamente y lo siga.

 
SK. escribió (a):
<br / translate="no">

Escalador:
Entonces lo más desconcertante para mí es dónde escribir el código esperando el precio de "cierre" y volver al principio, es decir, contando de nuevo el precio de apertura, esperando este precio, etc. He mirado en las secciones; creo que he visto algo en los títulos, que probablemente responda a mi pregunta. Sigo leyendo la sección de Órdenes de Apertura y Fijación.

A juzgar por las preguntas que tienes, no necesitas escribir programas todavía y tampoco necesitas leer lo que estás leyendo ahora.

Uf, creo que tengo la estructura del experto.
Rápidamente lo garabateé en el vdp, aquí tienes:

Init

Inicie

He establecido el número máximo de órdenes abiertas = 1;

Compruebe cuántos pedidos están abiertos;

si 1 está abierto, entonces llamo a la función para cerrar la orden,

Si no se abre ninguna orden, entonces llamo a la función "calcular precio y número de lotes".

--------------------------

Necesario para calcular un precio de compra y venta favorable y para calcular el número de lotes;

--------------------------

consultando el precio actual;

si el precio actual >= precio de ganga para vender,

entonces abra una orden de venta igual al número de lotes ya determinado;

si no, compara el precio actual con el precio de la oferta ganadora;

si el precio actual es <= precio de oferta,

respectivamente abrir una orden de compra;

--------------------------

Llama a la función para cerrar la orden;

devolver

deinit


¿Lo has entendido bien?
 
Climber:
¿Lo has entendido bien?

Bueno, en general es correcto :) Te felicito. Siempre es bueno entender algo más.

Aun así, hazme caso: vuelve al principio y ve desde el principio sin saltarte nada, ejecutando metódicamente en tu PC todos los códigos sugeridos en el tutorial.

 
Parabellum:

Hay un interesante indicador ROC en el libro: el indicador de Tasa de Cambio(https://book.mql4.com/ru/samples/iroc). Entiendo que este libro es un libro de texto y que el autor no está obligado a dar el código fuente de medio o incluso de un cuarto de grano, pero la idea del indicador es muy buena, y la he retocado un poco para que el retraso sea aún más débil.

Por cierto, el texto de indicador publicado en la propia página tiene dos erratas en el código y por tanto es incompilable.
      Line_4[i]=(Line_1[i]+Line_2[i]+Line_3[i])3;// Суммарный массив
      //-------------------------------------------------------- 17 --

      Line_5[i]= Sum(Aver_Bars+1); // Индик. массив сглаженной линии
Dos veces falta el carácter de división (¿desapareció durante la creación del archivo html?).
El archivo del indicador vinculado en el texto es normal.
 
SK. писал (а):

Bueno, en general es correcto :) Te felicito. Siempre es bueno entender algo más.

Aun así, sigue mi consejo: tienes que volver al principio y empezar desde el principio sin saltar y saltando, ejecutando metódicamente en tu PC todos los códigos sugeridos en el tutorial.


Sí, estoy de acuerdo, es muy importante ver y sentir cualquier resultado de lo que se lee, que es cuando se fija en la memoria a largo plazo, tanto más bajo la influencia del contenido emocional, aparece más de una asociación:) Por cierto, también quería destacar que para estimular el interés, es necesario volver o utilizar aquellos capítulos que son más importantes, entonces el propio interés llevará a la meta y ampliará el círculo de conocimiento. Lo más difícil en nuestra situación es entender lo que nos interesa a medida que avanzamos, para elaborar el orden que será más eficaz, ya que vemos la eficacia de todo lo que poseemos. Yo relacionaría el funcionamiento de la memoria asociativa con la memoria gestionada, en la que un área distribuida existe mientras haya al menos un enlace(asociación) a la misma, cuantos más enlaces, más probable es que el área no se libere, garantizando así su uso y posterior utilidad. Por lo tanto, es necesario reponer constantemente el stock de asociaciones para consolidar lo que se ha leído.

P.D.: Perdón si me he pasado de la raya:)

 
timbo: Por cierto, el texto del indicador publicado en la propia página tiene dos erratas en el código, y por tanto es incompilable.
      Line_4[i]=(Line_1[i]+Line_2[i]+Line_3[i])3;// Суммарный массив
      //-------------------------------------------------------- 17 --

      Line_5[i]= Sum(Aver_Bars+1); // Индик. массив сглаженной линии
El símbolo de la división falta dos veces (¿desapareció al crear el archivo html?).
El archivo indicador vinculado en el texto es normal.


Sí, existe. Todavía no hay errores en los códigos fuente, mientras que los códigos de texto están jodidos en algunos lugares por alguna razón. Lo solucionaremos.
 
xnsnet:

P.D.: Perdón si he exagerado:)

:) Sí, un poco allí)))
 
También hay una pequeña nota sobre el libro. Es mejor utilizar ejemplos de la vida real, no me refiero a los gatos, sino al dinero o a cosas que sean relevantes. Por ejemplo, cuando llegué a los operadores de bucle, el ejemplo con las ovejas te distrae un poco, empiezas a pensar en cómo se puede utilizar en nuestras condiciones, y esto te distrae del proceso de percepción.

Ya me está costando mucho los bucles (volveré a estas secciones más de una vez), y luego están esas ovejas.

Solo es mi opinión, si se considera un ejemplo concreto de comercio (casi de raid:)), vale, de comercio, entonces si el lector se encuentra con un ejemplo similar a su idea (que no sabe cómo poner en práctica), con gran interés considerará este ejemplo y pensará cómo modificarlo y personalizarlo para poner en práctica su idea (creo que sabes lo que quiero decir).

Me interesaba saber cómo abrir una orden por 1/3 del saldo. No te puedes imaginar qué tipo de operaciones matemáticas se realizaron en mi cabeza para convertir 1/3 en dólares, de manera que obtuviera la suma en lotes (0,1 o 3,5 lotes...). Y qué contento me puse cuando vi un ejemplo deopenbuy.mq4, que abre una orden de compra por valor del 35% de los fondos disponibles, con algunos valores especificados de órdenes de stop. Lo miré de cabo a rabo, miré cada línea, qué, por qué y dónde. He mirado las funciones estándar utilizadas en él (MathFloor, MarketInfo. ....).