Preguntas de los principiantes MQL5 MT5 MetaTrader 5 - página 1208

 
Vladpedro:

No hay ninguna diferencia. Tenía la sospecha de que existía una diferencia porque cuando ponía órdenes y posiciones les asignaba "comentarios" para las posiciones, para las órdenes les asignaba mis propios comentarios. Como resultado, cuando una orden se mueve a una posición, hereda el comentario de la orden.

Luego, cuando comprobamos las posiciones a través de los comentarios, hubo un lío... los comentarios eran diferentes. Lo arreglé.

En su código, no he encontrado o entendido en absoluto cómo se cierran las posiciones para la condición SELL_LIMIT ha disparado . La equidad.

Parece que hemos comprobado si todas las posiciones pueden ser cerradas, y la bandera está fijada para ello

pero en elCloseAllPositions();

hay algo que falta.

No hay comprobación de cierre de todas las posiciones para el caso - SELL_LIMIT se ha disparado

¿Quizás este mismom_account.Equity()>= m_account.Balance()+15está implementado de alguna otra manera?

O tal vez sea porque he explicado mal lo que significa promediar en mi contexto.

Ya lo he mencionado anteriormente: las órdenes pendientes no tienen nada que ver. No puede ser una orden pendiente que tenga un beneficio. De la palabra "en absoluto". Hasta que no lo dejes claro, no podrás seguir adelante.


Añadido: He mostrado un ejemplo de solución para dos casos:

  1. Si sólo tenemos dos posiciones, debemos buscar la que tenga más beneficios y cerrarla.
  2. Si tenemos más de dos posiciones, si su beneficio total es superior al especificado, entonces cerramos todas las posiciones.
Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Свойства ордеров
Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Свойства ордеров
  • www.mql5.com
Приказы на проведение торговых операций оформляются ордерами. Каждый ордер имеет множество свойств для чтения, информацию по ним можно получать с помощью функций Идентификатор позиции, который ставится на ордере при его исполнении. Каждый исполненный ордер порождает сделку, которая открывает новую или изменяет уже существующую позицию...
 
Vladimir Karputov:

Ya lo he señalado más arriba: las órdenes pendientes no tienen nada que ver. Una orden pendiente no puede tener beneficios. De la palabra "en absoluto". Hasta que no aclare esto, no podrá avanzar.

Vladimir. Por supuesto, una orden pendiente no puede tener beneficios. Estamos hablando del beneficio, por supuesto, de las posiciones abiertas.

La única diferencia está en cómo se abrieron estas posiciones. Necesitamos un método de cierre diferente para ellas.

Si la segunda posición se abre a partir de una orden SELL_STOP inteligente, entonces hay que cerrar una de ellas, la que tiene un mayor beneficio de la posición. Esto le ha funcionado y funciona.

Si la segunda posición se abrió a partir de una orden SELL_LIMIT, entonces ambas deben cerrarse por Equidad(m_account.Equity()>= m_account.Balance()+15) A menos que el SL de una de ellas se active primero.

Añadido.

He mostrado un ejemplo de solución para dos casos:

  1. Sólo tenemos dos posiciones, así que buscamos la que tiene más beneficios y la cerramos.
  2. Tener más de dos posiciones - si su beneficio total es superior al especificado - cerrar todas las posiciones

Todo parece estar bien con la segunda condición. Pero por alguna razón tengo la segunda condición abre la segunda posición y la cierra inmediatamente cerca de 0 -1,2.

¿Tal vez especifique el beneficio total en un lugar equivocado?

InpProfitTarget = 15; Si aquí, no funciona.


 
Vladpedro:

Vladimir. Por supuesto, una orden pendiente no puede tener beneficios. Hablamos de beneficios, por supuesto, de posiciones abiertas.

Sólo que hay una diferencia en cómo se abrieron estas posiciones. Necesitamos un método de cierre diferente para ellas.

Si la segunda posición se abre a partir de una orden SELL_STOP inteligente, entonces hay que cerrar una de ellas, la que tiene un mayor beneficio de la posición. Esto le ha funcionado y funciona.

Si la segunda posición se abrió a partir de una orden SELL_LIMIT, entonces ambas deberían cerrarse por Equity(m_account.Equity()>= m_account.Balance()+15) A menos que el SL de una de ellas se active primero.

Lo siento:

He mostrado un ejemplo de solución para dos casos:

  1. Sólo tenemos dos posiciones, así que buscamos la que tiene más beneficios y la cerramos.
  2. Si tenemos más de dos posiciones, si su beneficio total es mayor que el especificado, cerramos todas las posiciones.


A continuación, por favor, haz algo tú mismo.

 
Vladimir Karputov:

Lo siento:

He mostrado un ejemplo de solución para dos casos:

  1. Sólo tenemos dos posiciones, así que buscamos la que tenga mayor beneficio y la cerramos.
  2. Tenemos más de dos posiciones - si su beneficio total es mayor que el dado, cerramos todas las posiciones.


A partir de aquí, por favor, haz algo tú mismo.

Gracias por tu ayuda Vladimir, lo estoy intentando.

2. tenemos más de dos posiciones - si su beneficio total es mayor que el especificado, cerramos todas las posiciones.

Pero no lo necesitaba, necesitaba dos o más posiciones donde la segunda se abriera con la activación de SELL_LIMIT.

Gracias de todos modos por su paciencia y esfuerzo. Por supuesto, lo resolveré a mi manera, sufriré y lo resolveré))

 
Buenas noches chicos, para no multiplicar los temas - mi pregunta es la siguiente - el script establece una orden de stop pendiente con una toma y una parada bien definida, no se ejecuta, y en los comentarios se prescribe [iliquidez] - ¿cómo luchar - para bucle de la secuencia de comandos antes de la ejecución, establecer un mayor deslizamiento, o prescribir el número de reintentos o qué? O dame una pista de dónde cavar.
 
neitrino22:
Buenas noches chicos, para no multiplicar los hilos, aquí va una pregunta - el script puso una orden de stop pendiente con una toma y un stop bastante específicos, no se ejecuta, y en los comentarios está escrito [iliquidez] - ¿cómo lidiar con ello - bucle de la secuencia de comandos antes de la ejecución, establecer un mayor deslizamiento, o especificar el número de retoma o qué? O dame una pista de dónde cavar.

Siempre hay que buscar en la documentación

ORDER_TIME_GTC

El pedido permanecerá en la cola hasta que sea retirado

Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Свойства ордеров
Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Свойства ордеров
  • www.mql5.com
Приказы на проведение торговых операций оформляются ордерами. Каждый ордер имеет множество свойств для чтения, информацию по ним можно получать с помощью функций Идентификатор позиции, который ставится на ордере при его исполнении. Каждый исполненный ордер порождает сделку, которая открывает новую или изменяет уже существующую позицию...
 
Alexey Viktorov:

Siempre hay que buscar en la documentación

ORDER_TIME_GTC

El pedido permanecerá en la cola hasta que sea retirado

Gracias, debe ser eso

 

¡Buenas noches!

Hay 1 puesto vacante.

El Asesor Experto cierra una posición utilizando el método PositionClose();

El resultado se imprime ResultRetcode= 10009. Descripción del código: hecho a 0,00

Debajo del código, hay una comprobación if(PositionSelect(_Symbol)), que tiene éxito.

Es decir, pasa un tiempo entre la ejecución de PositionClose() y la desaparición de la posición abierta, durante el cual el programa consigue realizar una salida errónea.

¿Cómo resolver esta situación correctamente?


 

¿Por qué tengo que reiniciar el terminal cada vez después de una prueba para ejecutar una nueva prueba?

2020.04.27 15:19:08.415 Tester  XAUUSD: history data begins from 2014.02.12 00:00
2020.04.27 15:19:08.415 Tester  XAUUSD: history data begins from 2014.02.12 00:00
2020.04.27 15:19:08.415 Core 01 connecting to 127.0.0.1:3000
2020.04.27 15:19:08.415 Core 01 connected
2020.04.27 15:19:08.425 Core 01 authorized (agent build 2361)
2020.04.27 15:19:08.427 Tester  XAUUSD,M15 (Alpari-MT5-Demo): testing of Experts\ExpertTest.ex5 from 2017.07.26 00:00 to 2020.02.06 00:00
2020.04.27 15:19:08.466 Core 01 disconnected
2020.04.27 15:19:08.466 Core 01 connection closed

Borro todos los objetos. Cierro los archivos. Aquí está el registro cuando dejo de probar:

2020.04.27 15:15:43.188 Core 01 disconnected
2020.04.27 15:15:43.188 Core 01 connection closed
2020.04.27 15:15:43.189 Tester  stopped by user

Pero la próxima vez no arranca, tengo que cerrar el terminal y volver a abrirlo. Construye 2361.

 
¿Cómo puedo obtener un comentario de posición cerrada en OnTradeTransaction?
Razón de la queja: