Preguntas sobre el MQL5 Wizard y la biblioteca estándar de clases comerciales - página 10

 
Sevrer:

Hola.

Decidí escribir mi propio módulo de señales con fines puramente cognitivos. Me he enfrentado a un problema. Tengo que establecer órdenes pendientes. He entendido que se puede hacer a través de CExpertSignal::OpenLongParams(...). Pero tengo un problema - mi probador advierte sobre la Expiración Inválida. Habiendo escarbado en el código fuente, me he dado cuenta de que no podemos obtener ningún tipo de tiempo aparte deORDER_TIME_SPECIFIED y nos gustaría ORDER_TIME_GTC.

Hasta ahora he hecho un movimiento inteligente, pero no es del todo correcto. He corregido la función en la biblioteca:

¿Qué puede aconsejar?

Hola.

Tienes toda la razón. No he tenido en cuenta los vencimientos cero.

Su solución está bien. Haré las modificaciones pertinentes en la Biblioteca Estándar.

Gracias.

 
uncleVic:

Hola.

Tienes toda la razón. No he tenido en cuenta la caducidad cero.

Su solución está bien. Haré las modificaciones pertinentes en la Biblioteca Estándar.

Gracias.

Eso estará bien, pero mientras tanto, en esta situación encontré otra salida, la correcta :) Creando una clase heredada de CExpert, en la que he sobrescrito las funciones CheckOpenLong() y CheckOpenShort(), y he hecho correcciones de este tipo allí:

        if (expiration == TimeCurrent() || expiration == 0)
        {
                m_expiration = 0;
                m_trade.SetOrderTypeTime(ORDER_TIME_GTC);
        }
        else
        {
              if(!m_trade.SetOrderExpiration(expiration))
        	{
         		 m_expiration=expiration;
        	}
        }
 
Sevrer:

Pero mientras tanto, he encontrado otra forma de salir de esta situación, la correcta :) Creando una clase heredada de CExpert, en la que he sobrepasado las funciones CheckOpenLong() y CheckOpenShort(), y he hecho correcciones de este tipo allí:


La herencia es el enfoque correcto.
 

Por favor, explique la lógica del parámetro Expert_EveryTick

Si Expert_EveryTick=true, el Asesor Experto procesa cada tick? Es decir, comprueba las condiciones de entrada/salida y el seguimiento de la posición (arrastre) en cada nuevo tick, ¿verdad?

¿Y si Expert_EveryTick=fasle - sólo en el primer tick de una nueva barra? ¿Y el rastro también se activará sólo en el primer tick?

Обработчик события "новый бар"
Обработчик события "новый бар"
  • 2010.10.04
  • Konstantin Gruzdev
  • www.mql5.com
Язык программирования MQL5 позволяет решать задачи на совершенно новом уровне. Даже те задачи, которые уже вроде имеют решения, благодаря объектно-ориентированному программированию могут подняться на качественно новый уровень. В данной статье специально взят простой пример проверки появления нового бара на графике, который был преобразован в достаточно мощный и универсальный инструмент. Какой? Читайте в статье.
 
mr.Taras:

Por favor, explique la lógica del parámetro Expert_EveryTick

Si Expert_EveryTick=true, el Asesor Experto procesa cada tick? Es decir, comprueba las condiciones de entrada/salida y el seguimiento de la posición (arrastre) en cada nuevo tick, ¿verdad?

¿Y si Expert_EveryTick=fasle - sólo en el primer tick de una nueva barra? ¿Y el arrastre también se activará sólo en el primer tick?


Sí, has acertado.
 

Más preguntas sobre la lógica del Asesor Experto:


hay una posición abierta, por ejemplo, de compra, y un lote fijo, por ejemplo, 1.

Hay una señal para el otro lado, para vender.

¿qué hará el EA? ¿habrá dos operaciones de 1 lote cada una (la primera se cerrará por 1 lote) o una sola operación de 2 lotes? ¿hay diferencia entre ganar y perder la compra actual?


Si hay una posición de compra y de nuevo una señal de compra, ¿qué métodos debo redefinir para que se cierre?

 
mr.Taras:

Más preguntas sobre la lógica del Asesor Experto:


1. Hay una posición abierta, por ejemplo, de compra, y un lote fijo, por ejemplo, 1.

hay una señal para el otro lado, para vender.

¿qué debe hacer el Asesor Experto? ¿abrirá dos operaciones de 1 lote cada una (la primera se cerrará por 1 lote) o una operación de 2 lotes? ¿hay alguna diferencia si la compra actual está en rojo o en excedente?


2. el EA no va a ir largo por sí mismo, es decir, si hay una posición de compra y de nuevo una señal de compra? ¿qué métodos debo redefinir para que vaya largo, CheckOpenLong()?


1. Dos umbrales de activación (configuración del Asesor Experto). Si se supera el umbral de Cierre, la posición simplemente se cierra, si se superan dos umbrales (Cierre y Apertura), la posición se invierte. -/+ No hay diferencia.

2. Método de tratamiento

 
uncleVic:

1. dos umbrales de activación ( ajustes de EA). si se supera el umbral de Cierre, la posición simplemente se cerrará. si se superan dos umbrales (Cierre y Apertura), la posición se invertirá. -/+ No hay diferencia.

2. Método de tratamiento

Los umbrales de Cierre y Apertura son el resultado de la "votación", ¿qué devuelven ShortCondition() o LongCondition() en el módulo de señales?

 
mr.Taras:

¿Los umbrales de Cierre y Apertura son el resultado de "votar" lo que devuelve ShortCondition() o LongCondition() en el módulo de señales?

Los umbrales son parámetros (Signal_ThresholdOpen y Signal_ThresholdClose) con los que se compara el resultado de la "votación".
 

Tres preguntas:

  1. ¿Cómo hacer que el módulo de señales funcione sólo en los precios de apertura y no en cada tick?
  2. ¿Cómo obtengo los valores de votación del módulo de señal en el módulo de seguimiento de posición? Hay que arrastrar sobre una señal ya calculada y no inventarse otro módulo de señal para seguir.
  3. ¿Cómo obtener los valores de votación del módulo de alarma en el módulo de gestión de dinero y riesgo? Es necesario abrir los volúmenes de acuerdo con las señales de comercio ya calculadas, no componer otro módulo de señales para el cálculo del volumen.

En teoría, podemos construir el EA utilizando el asistente y luego añadir todas estas características manualmente al código. Pero es deseable que todo esto se haya implementado en forma de métodos estándar, es decir, para los tontos que quieran utilizar el asistente, para que no tengan que entrar en el código y editar, por ejemplo, si quieren sustituir un módulo de señal por otro.