Discusión sobre el artículo "MQL5 Wizard: Cómo crear un módulo de señales de trading" - página 7
Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
¿Lo añado manualmente en OnInit()? ¿Entonces no puedo hacer lo que quiero a través del Asistente?
¿Cuál es el problema? Estás introduciendo una funcionalidad adicional, por lo que necesitas hacer un poco de trabajo manual.
No hay problema en absoluto, pero no se corresponde con el concepto de que el Maestro hace todo sobre la base de módulos personalizados para señales, capital, etc. Y el artículo está desactualizado y no es cierto:
El método CheckCloseLong() genera una señal para cerrar una posición larga con la determinación del nivel de salida. Es llamado por el Asesor Experto para determinar la necesidad de cerrar una posición larga. Es necesario anular el método en caso de que se desee generar una señal para cerrar una posición larga.
¿Han pasado casi 6 años y el artículo no está obsoleto? No estoy seguro, ya que veo que el terminal se actualiza casi todas las semanas.
Hola a todos,
Me pregunto cómo crear un descendiente de CExpertSignal con los dos patrones "break out" y "break in" de un rango de negociación observado utilizando el enfoque propuesto aquí, así como en Exploring Trading Strategy Classes of the Standard Library - Customizing Strategie de Harvester. Mi percepción es que cada clase de señal podría (debería) ser implementada sobrecargando
y
Entonces encontramos
cuyo resultado se comprueba con signal.m_threshold_open y signal.m_threshold_close en
Los parámetros que especifican los niveles para entrar en el mercado y fijar los precios de stop loss y take profit serían entonces devueltos por
que son invocados por la implementación estándar de bool CExpertSignal::CheckOpenLong(...) y bool CExpertSignal::CheckOpenShort(...) tal y como se definen en la clase base. Por tanto, debería bastar con sobrecargar
para definir una nueva señal arbitraria. Tenga en cuenta que CExpertTrade contiene el código para detectar si el precio de entrada deseado está demasiado lejos del precio actual para colocar órdenes de mercado y utiliza la elección del precio de entrada para decidir automáticamente si colocar una orden stop o limitada.
Sin embargo, si el rango de negociación se define como la región entre el máximo más alto (HH) y el mínimo más bajo (LL) de las últimas n barras, entonces la condición LL < precio < HH es siempre verdadera. Por lo tanto, tanto int CExpertSignal::LongCondition(...) como int CExpertSignal::ShortCondition(...) deberían detectar siempre el patrón 0 "break out" y sea cual sea el valor que asociemos a este patrón la función int CExpertSignal::Direction() ¡siempre devolverá cero!
El enfoque natural de sobrecargar
de forma que el primero comprueba
en lugar de
no se ha podido convertir en una versión satisfactoria, todavía. Como se ha señalado, sería sencillo hacer que bool CExpertSignal::OpenLongParams(...) devolviera el precio de entrada HH y que bool CExpertSignal::OpenShortParams(...)devolviera el precio de entrada LL para completar la señal generando continuamente 2 órdenes stop.
Desde mi punto de vista es deseable tener un ejemplo que muestre como implementar esta estrategia estándar de break out en términos de la librería estándar y haciéndola lo suficientemente flexible proporcionando el patrón alternativo "break in" que resulta en órdenes limitadas en LL y HH. Obviamente, una señal de este tipo combinaría las estrategias
proporcionándolas como patrones. Estaré extremadamente agradecido por la ayuda para terminar este enfoque.
Hola a todos,
Me pregunto cómo crear un descendiente de CExpertSignal con los dos patrones "break out" y "break in" de un rango de negociación observado utilizando el enfoque propuesto aquí, así como en Exploring Trading Strategy Classes of the Standard Library - Customizing Strategie de Harvester. Mi percepción es que cada clase de señal podría (debería) ser implementada sobrecargando las dos funciones
Tenga en cuenta que CExpertTrade contiene el código para detectar si el precio de entrada deseado está demasiado lejos del precio actual para colocar órdenes de mercado y utiliza la elección del precio de entrada para decidir automáticamente si colocar una orden stop o limitada.
[...]
En mi opinión, es deseable tener un ejemplo que muestre cómo implementar esta estrategia de ruptura estándar en términos de la biblioteca estándar y hacerla lo suficientemente flexible proporcionando el patrón alternativo "break in" que resulta en órdenes limitadas en LL y HH. Estaré extremadamente agradecido por la ayuda para terminar este enfoque.
He decidido reformular mis preocupaciones para que se entiendan lo más fácilmente posible. En mi opinión, los dos artículos
demuestran en general cómo escribir nuestras propias clases de señales de la forma más sencilla. Voy a resumir esta percepción mía a continuación.
Sin embargo, todavía necesito una idea para terminar la implementación de una señal que utilice este enfoque para proponer comprar/vender cuando el precio sea más alto/bajo que el precio más alto/más bajo observado durante los últimos n periodos. Esto se supone que resulta en la colocación de un par de órdenes stop por encima y por debajo del precio actual. Ya he intentado conseguirlo sustituyendo la condición
pero sigue sin funcionar. Esto no tiene ningún sentido para mí porque también sobrecargué las funciones OpenLongParams(...) y OpenShortParams(...). Determinan los niveles en los que colocar las órdenes stop deseadas. ¿Podría alguien con más conocimiento de las ideas de los desarrolladores de MetaQuotes explicar cómo habrían implementado esta estrategia de ruptura más básica?
Dado que el código fuente es a menudo visto como la mejor documentación de cualquier software he pasado algún tiempo en el análisis de la clase CExpertSignal en MQL5\Include\Expert\ExpertSignal.mqh
Mi resultado fue que las funciones que comprueban las condiciones de trading se reducen esencialmente a comprobar el valor de la función Direction() { return(LongCondition()-ShortCondition()); } como sigue:
(He quitado algo de código que sólo parece necesario para una ejecución estable sin contribuir a la funcionalidad de ninguna manera).
Este resumen muestra que para cualquier clase de estrategia personalizada debería ser suficiente sobrecargar las funciones
y en el artículo 2. de Harvester enlazado más arriba se explica cómo utilizar la macro IS_PATTERN_USAGE(x) en las dos primeras de forma que la señal resultante detecte varios patrones predefinidos.
Veo este problema: La condición de si el precio está entre el máximo más alto y el mínimo más bajo de las últimas n barras debe ser siempre verdadera. Por lo tanto, tanto LongCondition(...) como ShortCondition(...) devuelven el mismo valor asociado al patrón para la operativa de ruptura y el valor de Direction() es necesariamente cero a menos que se cambien las condiciones en CheckOpenLong(...) y CheckOpenShort(...).
Pero, ¿por qué no es suficiente utilizar LongCondition()>=m_threshold_open y ShortCondition()>=m_threshold_open ?
cuando uso el archivo que adjuntaste al articulo,hay algo mal.
Me parece que el comentario sobre Tipo debería ser el siguiente:
//| Type=SignalAdvanced |
Gracias por su mensaje. Su mensaje ha resuelto mi problema. Gracias.
George
Hola,
Cuando compilé el código, obtuve tres advertencias
declaración de 'm_open' oculta miembro samplesignal.mqh 42 23
la declaración de 'm_close' oculta el miembro samplesignal.mqh 43 23
m_open y m_close fueron definidos en ExpertBase.mqh pero con diferente tipo.
m_expiratin fue definido en ExpertSignal.mqh.
Comentar las tres líneas anteriores. Las advertencias han desaparecido.
George
Si es posible reescribir el código exacto, completo y ejecutable de este programa y corregir sus errores y ponerlo aquí.
¡Aquí lo tienes!
Saludos, Zarik