Autoaprendizaje del lenguaje MQL5 desde cero - página 65

 
MrBrooklin:

¡Hola, Valery! Muchas gracias, tu versión "...si las posiciones con nuestro magik y en nuestro símbolo son iguales a cero, comprobamos la hora y abrimos una posición..." resultó ser la más fácil y efectiva. Lo he añadido a la condición de comprobar el tiempo && PositionTotal()==0 y ¡sólo se abre una posición con la cantidad necesaria!

Sinceramente, Vladimir.


Desafortunadamente, MKL no tiene un comando que devuelva el número de posiciones del símbolo. TotalPosition devuelve todas las posiciones de la cuenta en todos los símbolos. Por lo tanto, para obtener posiciones sobre el símbolo hay que buscar todas las posiciones y comparar la posición del símbolo con la nuestra.

También. La lógica en el tiempo de cabeza, abrirlo y comprobar la presencia de nuestra posición, trilling no siempre es óptima. A veces es mejor comprobar primero si la posición está abierta con nuestro asistente y si lo está, comprobamos la hora de cierre, o bien la arrastramos, o bien comprobamos la hora de apertura.

El objetivo es reducir el número de acciones de la EA.

 
Valeriy Yastremskiy:

Desafortunadamente, no hay ningún comando en MKL que devuelva el número de posiciones de un símbolo. TotalPositions devuelve todas las posiciones de todos los símbolos. Por lo tanto, para obtener las posiciones de un símbolo, hay que buscar todas las posiciones y comparar la posición del símbolo con la nuestra.

También. La lógica en el tiempo de cabeza, abrirlo y comprobar la presencia de nuestra posición, trilling no siempre es óptima. A veces es mejor comprobar primero si la posición está abierta con nuestro asistente y si lo está, comprobamos la hora de cierre, o bien la arrastramos, o bien comprobamos la hora de apertura.

El objetivo es reducir el número de acciones de la EA.

¡Todo está claro, Valery! Estoy tratando de poner en práctica sus consejos.

Sinceramente, Vladimir.

 
Valeriy Yastremskiy:

Si las posiciones con nuestro Magik y en nuestro símbolo son cero, comprobamos el tiempo y abrimos una posición, si es 1, no abrimos una posición, comprobamos el tiempo de cierre y arrastramos, si es más de 1, alertamos y no trabajamos. Podemos utilizar pergaminos o comprobar si.

¡Hola, Valery! He intentado escribir el código sin la enumeración de posiciones. Lo escribí, lo comprobé y todo funciona.

   if(PositionSelect(Symbol())==false && PositionGetInteger(POSITION_MAGIC)!=Magic_Number
   && time_current.hour==time_open.hour && time_current.min>=time_open.min && time_current.min<time_open1.min)
      OpenBUY();
Sinceramente, Vladimir.
 
MrBrooklin:

¡Hola Valery! He intentado escribir el código sin la enumeración de posiciones. Lo escribí, lo comprobé y todo funciona.

Saludos, Vladimir.

Está bien para empezar, pero sólo para empezar. Las condiciones son demasiado estrictas. Si no hay posiciones en nuestro símbolo y no hay posiciones con nuestro magik en todos los símbolos entonces parece normal. En la vida real puedes tener 2 ventanas abiertas en un símbolo y otro puede tener una posición. Usted puede simplemente utilizar Magik a la cuenta, por ejemplo, como trishkin, los 3 primeros dígitos - código de símbolo y los 2 siguientes - script / código de asesor. Y el primer paso es codificar manualmente, o generar un magik añadiendo líneas en función del símbolo de la ventana y el código del script y luego convertir la línea en un número.

La forma clásica es buscar todas las órdenes o posiciones.

Pero esto es demasiado para el comienzo.

Por eso está bien para empezar.

 
Valeriy Yastremskiy:

Está bien para empezar, pero sólo para empezar. Las condiciones son demasiado estrictas. Si no hay posiciones en nuestro símbolo y no hay posiciones con nuestro magik en todos los instrumentos entonces parece normal. En la vida real puedes tener 2 ventanas abiertas en un símbolo y otro puede tener una posición. Usted puede simplemente utilizar Magik a la cuenta, por ejemplo, como trishkin, los 3 primeros dígitos - código de símbolo y los 2 siguientes - script / código de asesor. Y el primer paso es codificar manualmente, o generar un magik añadiendo líneas en función del símbolo de la ventana y el código del script y luego convertir la línea en un número.

La forma clásica es buscar todas las órdenes o posiciones.

Pero esto es demasiado para el comienzo.

Por eso está bien para empezar.

¡Gracias, Valeriy! Buscar entre todos los puestos es uno de los próximos pasos en el autoestudio que seguramente haré.

Saludos, Vladimir.

 
Valeriy Yastremskiy:

Por alguna razón, todas las órdenes o posiciones se consideran un rebasamiento clásico.

Por desgracia, esto es una tradición en la comunidad MQL, todos los EAs se desarrollan teniendo en cuenta una pérdida repentina de la conexión y / o corte de energía de un PC.

Por un lado esta es una buena metodología, pero por otro lado esto impone grandes limitaciones en el estilo de escritura del código del EA - el EA sólo trabaja con maestros de órdenes. Por ejemplo, si necesitas escribir una martingala, el EA buscará en el historial la última orden con sus maestros y mirará el beneficio/pérdida y decidirá si aumentar el nuevo lote o no

... en general desde la creación de MT - todo el mundo está esperando que desaparezca internet y la estrategia en sí ya no es tan importante ))

 
Igor Makanu:

Por desgracia, esto es una tradición en la comunidad MQL, todos los EAs se desarrollan con una pérdida repentina de la conexión y / o corte de energía del PC en mente.

Por un lado esta es una buena metodología, pero por otro lado impone grandes restricciones en el estilo de escritura del código del EA - el EA sólo trabaja con maestros de órdenes. Por ejemplo, si necesitas escribir una martingala, el EA buscará en el historial la última orden con sus maestros y mirará el beneficio/pérdida y decidirá si aumentar el nuevo lote o no

... en general desde la creación de la MT - todo el mundo está esperando que desaparezca Internet, y la estrategia en sí ya no es tan importante ))

Hola Igor, gracias por compartir esta información tan útil.

Sinceramente, Vladimir.

 
Igor Makanu:

Por desgracia, esto es una tradición en la comunidad MQL, todos los EAs se desarrollan con una pérdida repentina de la conexión y / o corte de energía del PC en mente.

Por un lado esta es una buena metodología, pero por otro lado impone grandes restricciones en el estilo de escritura del código del EA - el EA sólo trabaja con maestros de órdenes. Por ejemplo, si necesitas escribir una martingala, el EA buscará en el historial la última orden con sus maestros y mirará el beneficio/pérdida y decidirá si aumentar el nuevo lote o no

... En general desde la creación de la MT - todo el mundo está esperando que desaparezca internet y la estrategia en sí ya no es tan importante ))

La protección contra el fuego, las inundaciones y las tonterías debería ser siempre!) Normalmente me limito a las paradas en caso de pérdida de conexión con el DT.

 

¡Buen día y buen humor a todos!

Sigo estudiando el lenguaje de programación MQL5. He comenzado un estudio detallado del operador de bucle for, que según la Referencia MQL5, y cito:

El operador de bucle for

Ejecuta el operador hasta que la expresión que se comprueba se convierte en falsa. La expresión se comprueba antes de cada iteración


Voy a la descripción del operador de bucle for y allí leo eso:

Оператор for состоит из трех выражений и выполняемого оператора:

for(выражение1; выражение2; выражение3) 
   оператор;

Выражение1 описывает инициализацию цикла. Выражение2 - проверка условия завершения цикла.
Если оно истинно, то выполняется оператор тела цикла for. Все повторяется, пока выражение2 не станет ложным. 
Если оно ложно, цикл заканчивается и управление передается следующему оператору. 
ВыражениеЗ вычисляется после каждой итерации.

¿El operador ejecuta un operador? DE ACUERDO. Tomo e inicio el operador de bucle for para buscar entre todas las posiciones abiertas y luego escribo la sentencia if con las condiciones que necesito:

   for(int i=PositionsTotal()-1; i>=0; i--)
     {
      if(PositionSelect(Symbol())==false && PositionGetInteger(POSITION_MAGIC)!=Magic_Number
         && time_current.hour==time_open.hour && time_current.min>=time_open.min && time_current.min<time_open1.min)
         OpenBUY();
     }

y luego no pasa nada. La posición de compra no se abre. ¿Cómo lo entiendo? ¿Debo estar haciendo algo mal, o no entiendo en absoluto el término de la sentencia for correctamente?

¡Querido experto! Por favor, aconséjeme, pero no con palabras, ni con un código corregido, de lo contrario nunca aprenderé el lenguaje de programación MQL5.

Sinceramente, Vladimir.
 
MrBrooklin:

¡Buen día y buen humor a todos!

Sigo estudiando el lenguaje de programación MQL5. He comenzado un estudio detallado del operador de bucle for, que según la Referencia MQL5, y cito:

El operador de bucle for

Ejecuta el operador hasta que la expresión que se comprueba se convierte en falsa. La expresión se comprueba antes de cada iteración


Voy a la descripción del operador de bucle for y allí leo eso:

¿El operador ejecuta un operador? DE ACUERDO. Tomo y ejecuto el operador de bucle for para probar todas las posiciones abiertas y luego escribo la sentencia if con las condiciones que necesito:

y no pasa nada. La posición de compra no se abre. ¿Cómo lo entiendo? ¿Debo estar haciendo algo mal o no entiendo en absoluto la finalidad del operador de bucle for?

Queridos especialistas Os pido que me deis alguna opinión, pero no con palabras, sino nunca aprenderé el lenguaje de programación MQL5.

Sinceramente, Vladimir.

El operador de bucle y los operadores en el cuerpo del bucle. No se trata de una lengua rusa clásica.

Todo está bien, por supuesto, pero ¿dónde está el iterador i en el cuerpo del bucle? Y para obtener el carácter de posición y su símbolo mágico, hay que seleccionarlo primero. La descripción de la posición es una estructura (en MQL5 todo es una estructura, las órdenes, el tiempo y los tratos), y se rellena a través de la selección, por el iterador que no es un ticket de posición, sino un número de posición. Y debemos recordar que la estructura de la descripción de la posición es siempre la última opción.

Razón de la queja: