Discusión sobre el artículo "Biblioteca para el desarrollo rápido y sencillo de programas para MetaTrader (Parte XXXIV): Eliminación de órdenes y posiciones según condiciones"

 

Artículo publicado Biblioteca para el desarrollo rápido y sencillo de programas para MetaTrader (Parte XXXIV): Solicitudes comerciales pendientes - Eliminación de órdenes y posiciones según condiciones:

En el presente artículo, finalizaremos la descripción del concepto de trabajo con solicitudes pendientes y crearemos la funcionalidad para eliminar órdenes pendientes y posiciones según una condición. De esta forma, dispondremos de toda una funcionalidad con la que podremos crear estrategias de usuario sencillas, para ser más exactos, una cierta lógica de comportamiento que el asesor activará al cumplirse las condiciones establecidas por el usuario.

Compilamos e iniciamos el asesor en el simulador en el modo visual. Para comprobar la eliminación de órdenes y la modificación de órdenes y posiciones, primero abrimos dos posiciones de venta y colocamos una orden pendiente de venta sin niveles de StopLoss y TakeProfit. A continuación, creamos solicitudes pendientes para modificar los niveles stop de las órdenes y posiciones según la condición del valor de precio. Esperamos la activación de las solicitudes pendientes y la colocación de los niveles stop establecidos, y luego eliminamos las órdenes y posiciones.

Acto seguido, abrimos dos posiciones de compra y establecemos una orden pendiente de compra. Después de ello, creamos solicitudes pendientes de eliminación de órdenes y cierre de posiciones según la hora.


Como podemos ver, las órdenes stop se han colocado cuando el precio de activación de las solicitudes pendientes ha cruzado el nivel establecido; las posiciones se han cerrado al pasar el tiempo establecido y la orden ha sido eliminada.

Autor: Artyom Trishkin

 

¡Buenas tardes!

¡Gracias por la serie de artículos y gracias por el código adaptado para MQL4!

En cuanto a los ejemplos prácticos.

La tarea consiste en,

  1. Cuando se produzcan determinadas condiciones de mercado, abrir varias posiciones en la misma dirección con los mismos niveles de cierre para pérdidas y diferentes niveles para beneficios.
  2. Cuando ocurran condiciones similares abajo/arriba, abrir varias posiciones más en la misma dirección, de nuevo con los mismos niveles de cierre de pérdidas y diferentes niveles de beneficios + cambiar el nivel de pérdidas de las posiciones abiertas a cero.
  3. el tamaño acumulado del primer conjunto de posiciones debe determinarse teniendo en cuenta una pérdida del 2% del balance
  4. el tamaño acumulado del segundo conjunto de posiciones debe determinarse teniendo en cuenta una pérdida del 2% de los fondos
  5. no se espera trabajar con órdenes pendientes.

Mi MQL4 Expert Advisor ya ha implementado un algoritmo para encontrar puntos de entrada, pero no hay operaciones de comercio todavía.

Atención, pregunta ))

¿Cuál de las bibliotecas, clases, métodos de la primera serie me ayudaría a acelerar el desarrollo?


Рынок - новости, аналитика, прогнозы по рынкам - Блоги трейдеров и аналитика финансовых рынков
Рынок - новости, аналитика, прогнозы по рынкам - Блоги трейдеров и аналитика финансовых рынков
  • www.mql5.com
Рынок — это место, где обычно происходит обмен товара на деньги или товара на товар. Если доступ на рынок свободный, то производители и потребители проводят обмен в условиях конкуренции. Существует
 
Nikolai Karetnikov:

¡Buenas tardes!

¡Gracias por la serie de artículos y gracias por el código adaptado para MQL4!

En cuanto a los ejemplos prácticos.

Hay una tarea,

  1. cuando se producen ciertas condiciones de mercado, abrir varias posiciones en la misma dirección con los mismos niveles de cierre de pérdida y diferentes niveles de beneficio.
  2. Cuando se produzcan condiciones similares abajo/arriba, abrir varias posiciones más en la misma dirección, de nuevo con los mismos niveles de cierre de pérdida y diferentes niveles de beneficio + cambiar el nivel de pérdida de las posiciones abiertas a cero.
  3. el tamaño acumulado del primer conjunto de posiciones debe determinarse teniendo en cuenta una pérdida del 2% del balance
  4. el tamaño acumulado del segundo conjunto de posiciones debe determinarse teniendo en cuenta una pérdida del 2% de los fondos
  5. no se asume el trabajo con órdenes pendientes

Mi MQL4 Expert Advisor ya ha implementado un algoritmo para encontrar puntos de entrada, pero no hay operaciones de comercio todavía.

Atención, pregunta ))

¿Cuál de las bibliotecas, clases, métodos de la primera serie me ayudaría a acelerar el desarrollo?


No es una descripción completa.

1. Abrimos posiciones fijando inmediatamente el identificador del primer grupo en el número mágico para que sea el mismo para todas ellas. Ahora todo el primer grupo puede ser buscado por el identificador 1.

2. Abrimos posiciones, fijándolas inmediatamente por el segundo identificador de grupo en el número mágico que es el mismo para ellas. Ahora todo el segundo grupo puede ser buscado por el identificador 2.
2.1 Después de abrir el segundo grupo de posiciones, seleccione todas las posiciones del grupo 1 en la lista y modifique sus niveles de Stop Loss al nivel de Breakeven calculado para ellas. El nivel debe calcularse de forma independiente. 2. La lista de posiciones del primer grupo está disponible - su beneficio/pérdida acumulado se calcula fácilmente.

3. ¿Es esta posición el volumen acumulado? En caso afirmativo, calcúlelo antes de abrir el primer grupo de posiciones.

4. ¿Es este punto el volumen total? En caso afirmativo, calcúlelo antes de abrir el segundo grupo de posiciones. Pero los fondos dependerán del margen ocupado para el primer grupo y su beneficio/pérdida - beneficio/pérdida flotante sobre fondos libres.

5. Las solicitudes pendientes son convenientes de utilizar sólo para establecer todas las condiciones necesarias para la apertura de grupos. Planifique con antelación y fije las expectativas. No insisto - es un medio de planificación de tácticas y técnicas de negociación.

La respuesta - todo esto es en la primera parte para darse cuenta de lo que se pretende. No entiendo la pregunta - no hay intento de probar algo. En consecuencia - sólo puedo usar palabras.

 

Artem, buenas tardes

Trabajo irreal en cuanto a capacidad, muchas gracias.

Tengo una observación: en la mayoría de los casos mis terminales de prueba MT4 están conectados a una cuenta real de trading en modo inversor.

La idea es maximizar las condiciones de la cuenta de trading en el tester (swaps, comisiones, niveles de stop... todo lo que no se intercambia en el TDS).

Sin embargo, la librería detecta que el trading en la cuenta está prohibido y se niega a operar. En el tester.

¿Quizás tenga sentido relajar explícitamente algunas de las restricciones para trabajar en el tester?

Al parecer, aquí:

//--- Comprobar el permiso de comercio para esta cuenta (si hay conexión con el servidor de comercio)
   else if(!this.m_account.TradeAllowed() && !::MQLInfoInteger(MQL_TESTER))
     {
      //--- Escribe el código de error en la lista y devuelve false - no tiene sentido seguir comprobando
      this.m_error_reason_flags=TRADE_REQUEST_ERR_FLAG_ERROR_IN_LIST;
      this.AddErrorCodeToList(MSG_LIB_TEXT_ACCOUNT_NOT_TRADE_ENABLED);
      return false;
     }

He añadido la mía, pero esto podría no ser la única comprobación que tiene sentido ignorar en el probador?

Документация по MQL5: Константы, перечисления и структуры / Состояние окружения / Информация о счете
Документация по MQL5: Константы, перечисления и структуры / Состояние окружения / Информация о счете
  • www.mql5.com
, то позиции по каждому символу разрешается закрывать только в том порядке, в котором они были открыты — сначала самую старую, затем более новую и т.д. При попытке закрыть позиции в ином порядке будет получена ошибка. Уровень залоговых средств, при достижении которого происходит принудительное закрытие самой убыточной позиции (Stop Out). В...
 
Igor Ryabchikov:

Artem, buenas tardes.

Un trabajo irreal en cuanto a capacidad, muchas gracias

Tengo una observación: en la mayoría de los casos mis terminales de prueba MT4 están conectados a una cuenta de trading real en modo inversor.

La idea es maximizar el uso de las condiciones de la cuenta de trading en el tester (swaps, comisiones, niveles de stop... todo lo que no se intercambia en el RTD)

Sin embargo, la biblioteca detecta que la negociación en la cuenta está prohibida y se niega a negociar. En el probador.

¿Quizás tenga sentido relajar explícitamente algunas de las restricciones para trabajar en el tester?

Aparentemente, aquí:

Tengo la mía añadido, pero esto podría no ser la única comprobación que tiene sentido ignorar en el probador?

Gracias, lo arreglaré.

 

Hola @Artyom Trishkin, gracias por este código.

Traté de ejecutar la versión modificada en MT4 sin botones de prueba para escuchar a los eventos de cuenta / comercio. pero veo resultado incorrecto cuando abrí y cerré 3 oficios:

01:17:13.849 eliminado

01:17:13.733 uninit razón 4

01:15:36.860 OnDoEasyEvent: Posición cerrada

01:15:36.860 - Posición cerrada: 2020.08.20 23:45:29.000 -EURUSD Cerrado Vender #573015195 al precio 1.18610, Ganancia -0.13 USD

01:15:35.489 CEventsCollection::CreateNewEvent, Línea 768: Este evento ya está en la lista

01:15:35.019 OnDoEasyEvent: Posición cerrada

01:15:35.019 - Posición cerrada: 2020.08.20 23:45:27.000 -EURUSD Cerrado Comprar #573015193 al precio 1.18623, Ganancia -0.13 USD

01:15:30.144 OnDoEasyEvent: Posición abierta

01:15:30.144 - Posición abierta: 2020.08.20 23:45:29.000 -EURUSD Abierto 0.01 Sell #573015195 [0.01 Market-order Sell #573015195] al precio 1.18610

01:15:28.724 OnDoEasyEvent: Posición abierta

01:15:28.724 - Posición abierta: 2020.08.20 23:45:28.000 -EURUSD Abierta 0.01 Compra #573015194 [0.01 Orden de mercado Compra #573015194] al precio 1.18623

01:15:28.263 OnDoEasyEvent: Posición abierta

01:15:28.257 - Posición abierta: 2020.08.20 23:45:27.000 -EURUSD Abierto 0.01 Comprar #573015193 [0.01 Market-order Comprar #573015193] al precio 1.18623

01:14:49.639 inicializado

01:14:22.120 CAccount::Load: No se pudo crear una estructura de objeto a partir de una matriz uchar

01:14:22.120 CAccount::Load: No se pudo crear la estructura de objetos de matriz uchar

01:14:22.120 CAccount::Load: No se pudo crear la estructura de objetos de matriz uchar

01:14:22.120 Cuenta ****: **** (****) **** USD, 1:100, Hedge, Cuenta Demo MetaTrader 4

01:14:20.357 cargado con éxito


¿Qué es probablemente mal en mi código de prueba?

 
Mohammad Bazrkar :

Hola @Artyom Trishkin, gracias por este código.

Traté de ejecutar la versión modificada en MT4 sin botones de prueba para escuchar eventos de cuenta/comercio. pero veo resultado incorrecto cuando abrí y cerré 3 oficios:

01:17:13.849 eliminado

01:17:13.733 uninit razón 4

01:15:36.860 OnDoEasyEvent: Posición cerrada

01:15:36.860 - Posición cerrada: 2020.08.20 23:45:29.000 -EURUSD Cerrado Vender #573015195 al precio 1.18610, Ganancia -0.13 USD

01:15:35.489 CEventsCollection::CreateNewEvent, Línea 768: Este evento ya está en la lista

01:15:35.019 OnDoEasyEvent: Posición cerrada

01:15:35.019 - Posición cerrada: 2020.08.20 23:45:27.000 -EURUSD Cerrado Comprar #573015193 al precio 1.18623, Ganancia -0.13 USD

01:15:30.144 OnDoEasyEvent: Posición abierta

01:15:30.144 - Posición abierta: 2020.08.20 23:45:29.000 -EURUSD Abierto 0.01 Sell #573015195 [0.01 Market-order Sell #573015195] al precio 1.18610

01:15:28.724 OnDoEasyEvent: Posición abierta

01:15:28.724 - Posición abierta: 2020.08.20 23:45:28.000 -EURUSD Abierta 0.01 Compra #573015194 [0.01 Orden de mercado Compra #573015194] al precio 1.18623

01:15:28.263 OnDoEasyEvent: Posición abierta

01:15:28.257 - Posición abierta: 2020.08.20 23:45:27.000 -EURUSD Abierto 0.01 Comprar #573015193 [0.01 Market-order Comprar #573015193] al precio 1.18623

01:14:49.639 inicializado

01:14:22.120 CAccount::Load: No se pudo crear una estructura de objeto a partir de una matriz uchar

01:14:22.120 CAccount::Load: No se pudo crear la estructura de objetos de matriz uchar

01:14:22.120 CAccount::Load: No se pudo crear la estructura de objetos de matriz uchar

01:14:22.120 Cuenta ****: **** (****) **** USD, 1:100, Hedge, Cuenta Demo MetaTrader 4

01:14:20.357 cargado con éxito


¿Qué es probablemente mal en mi código de prueba?

No sé lo que ha cambiado allí ...

 

He cortado algunos códigos relacionados con los botones, pero es posible eliminar algunos códigos necesarios. Ahora lo adjunto.

Pero, ¿estás de acuerdo en que el error por no capturar la SEGUNDA posición de compra de cierre no debería estar relacionado con mis cambios?

Archivos adjuntos:
mhdbzr-34.mq4  46 kb
 
Mohammad Bazrkar :

He cortado algunos códigos relacionados con los botones, pero es posible eliminar algunos códigos necesarios. Ahora lo adjunto.

Pero, ¿estás de acuerdo en que el error por no capturar la SEGUNDA posición de cierre de compra no debería estar relacionado con mis cambios?

¿El asesor de prueba funciona sin errores?

 
Artyom Trishkin:

¿Funciona el asesor de pruebas sin errores?

Ejecuto el EA modificado para observar mis eventos, luego coloco manualmente algunas operaciones y las cierro lo más rápido posible.
No utilizo el EA de prueba para abrir/cerrar posiciones.


esos errores de `CAccount` aparecen en el TestDoEasyPart34.ex4 por defecto

01:14:22.120 CAccount::Cargar: No se pudo crear una estructura de objetos a partir de una matriz uchar

01:14:22.120 CAccount::Cargar: No se pudo crear una estructura de objetos a partir de una matriz uchar

01:14:22.120 CAccount::Load: No se pudo crear la estructura de objetos de la matriz uchar

 
Mohammad Bazrkar:
Ejecuto el EA modificado para observar mis eventos, luego coloco manualmente algunas operaciones y las cierro lo más rápido posible.
No utilizo EA de prueba para abrir/cerrar posición.


esos errores de `CAccount` aparecen en el TestDoEasyPart34.ex4 por defecto

01:14:22.120 CAccount::Cargar: No se pudo crear una estructura de objetos a partir de una matriz uchar

01:14:22.120 CAccount::Cargar: No se pudo crear una estructura de objetos a partir de una matriz uchar

01:14:22.120 CAccount::Load: No se pudo crear la estructura de objetos de la matriz uchar

Sí, lo harán. Porque ahí se ha cambiado la forma de almacenar los datos de la cuenta. Esto está escrito al final del artículo como advertencia:
-----
Para su información:
desde que cambiamos la estructura del objeto de cuenta (cambiamos el tamaño de los arrays uchar para almacenar las propiedades de cadena de la cuenta y añadimos una propiedad entera más), todos los archivos previamente guardados de los objetos de cuenta ya no se cargarán correctamente. Si se encuentran en la carpeta común de terminales en el directorio \Files\DoEasy\Accounts\, entonces todos ellos deben ser eliminados antes de iniciar este asesor de pruebas - se volverán a crear al cambiar de una cuenta a otra con un nuevo tamaño de la estructura del objeto.
-----