Tuesday, December 27, 2016

Generador De Señales Comerciales


MetaTrader 5 - Ejemplos Generador de Señal de Negocio Basado en un Indicador Personalizado Introducción En este artículo, le diré cómo crear un generador de señales de trading basado en un indicador personalizado. Verá cómo puede escribir su propio modelo de negociación para un indicador personalizado. También explicaré el propósito del modelo 0 y por qué se utilizan estructuras de tipo ISPATTERNUSAGE (0) en el módulo de señal de comercio. El artículo utilizará dos tipos de código: el código que estamos a punto de modificar y el código que ya hemos modificado. El código modificado se resaltará de la siguiente manera: El código modificado es el código que se va a copiar y pegar en el generador de señales comerciales. Espero que usted entienda mejor el código a través del uso de destacar. 1. Indicador personalizado Estoy seguro de que debe haber un indicador no incluido en la entrega estándar que usted ha estado deseando utilizar durante mucho tiempo. Y ese es el indicador basado en el que desea crear un módulo de señal de comercio. Voy a utilizar el indicador MACD de la entrega estándar como tal indicador. La ubicación del indicador es la siguiente. MQL5IndicadoresExampleMACD. mq5. Cada indicador puede describir uno o más modelos de mercado. Un modelo de mercado es una cierta combinación del valor del indicador y el valor del precio. Los modelos disponibles para el indicador MACD son inversión, crossover de la línea principal y de la señal, crossover del nivel cero, divergencia y doble divergencia. 1.1 Nuevo Modelo Indicador. Supongamos que no estamos contentos con los modelos de mercado disponibles para el indicador y queremos introducir nuestro propio modelo de indicadores. La nueva descripción del modelo indicador: si el indicador MACD está por debajo de la línea cero y sus valores están aumentando, podemos esperar un crecimiento adicional y abrir una posición larga: Figura 1: Modelo de crecimiento del indicador prospectivo si el indicador MACD está por encima de la línea cero y Sus valores están disminuyendo, podemos esperar una disminución adicional y abrir una posición corta: Figura 2: Modelo de caída del indicador prospectivo Por lo tanto, hemos decidido sobre el indicador personalizado y llegar con el nuevo modelo de comercio para el indicador y su descripción. Vamos a proceder con la escritura del código. 2. Escribir el generador de señales de Trading basado en nuestro indicador personalizado Nuestro generador es el descendiente de la clase base CExpertSignal. La clase base CExpertSignal es una clase para crear generadores de señales comerciales. La clase CExpertSignal contiene un conjunto de métodos públicos (es decir, accesibles externamente) que permiten a un Asesor Experto ver la indicación del generador de señales comerciales en relación con la dirección de entrada en el mercado. Dado que estamos trabajando en nuestro propio generador de señales comerciales, debe ser heredado de la clase CExpertSignal, con los métodos virtuales relevantes redefinidos (rellenados con el código correspondiente). 3. Creación de la clase del generador de señales de negociación El generador de señales de negociación debe ubicarse por defecto en. MQL5IncludeExpertSignal carpeta. No sobrecargar el. Señal de la Biblioteca Estándar con demasiada información, permite crear una nueva carpeta en la carpeta. Expert y llámela MySignals. Figura 3. Creación de la nueva carpeta MySignals A continuación, crearemos un archivo de inclusión utilizando el MQL5 Wizard. En MetaEditor, seleccione Nuevo en el menú Archivo y, a continuación, seleccione Incluir archivo (.mqh). Figura 4. Asistente MQL5. Creación de un archivo de inclusión El nombre de la clase del generador de señal será MySignal. Se ubicará en IncludeExpertMySignalsMySignal. Permite especificarlo: Figura 5. Asistente MQL5. Ubicación del archivo de inclusión Después de hacer clic en Finalizar, el Asistente MQL5 generará una plantilla vacía. A partir de este momento, haremos todo manualmente y copiaremos / pegaremos datos. Me gustaría llamar su atención sobre el hecho de que internamente, todas las señales de la Biblioteca Estándar son casi idénticas. Sólo difieren en los algoritmos utilizados para determinar los modelos comerciales. Por lo tanto, puede tomar cualquier archivo de la carpeta IncludeExpertSignal, copiar su contenido y pegarlo en su plantilla. A continuación, puede iniciar la edición del archivo resultante del generador de señales comerciales. 4. Descripción de la Clase del Generador de Señales Trading Como una plantilla, tomé el archivo IncludeExpertSignalSignalEnvelopes. mqh del cual copié todo excepto el encabezado: y lo pegué todo en nuestra plantilla casi vacía de MySignal. mqh. Esto es lo que tengo: Aquí le damos una orden al preprocesador para incluir la clase base CExpertSignal para crear generadores de señales comerciales en nuestra plantilla. Seguiremos editando la plantilla. Para asegurarnos de que nuestra plantilla se vea más adelante en el MQL5 Wizard, necesitamos cambiar la descripción de nuestra clase: Así que, vamos a ver. La línea muestra el nombre de nuestra clase de señal en la que se mostrará en el Asistente MQL5. Vamos a cambiar este nombre a algo como esto: indica el nombre para describir las variables de nuestra clase de señal de comercio. Esta descripción será utilizada por el Asistente MQL5. Vamos a modificar esta línea de la siguiente manera: Vamos a dar el mismo nombre a este parámetro: La línea siguiente establece el nombre de la clase: Permite cambiar el nombre de este parámetro: Deje el siguiente parámetro como está. El siguiente grupo de parámetros es responsable de la descripción de los parámetros del indicador que subyace al generador de señales de negociación. Como mencioné antes, usaré. MQL5IndicatorsExamplesMACD. mq5 como el indicador personalizado. Tiene los siguientes parámetros: 4.1 Parámetro Descripción Bloque Observe que los parámetros dados arriba se aplican solamente a MACD. mq5. Su indicador personalizado puede tener parámetros completamente diferentes. Lo principal aquí es hacer coincidir los parámetros del indicador con sus descripciones en la clase de señal de negociación. El bloque de descripción de parámetros en la clase de señal de negociación para el indicador personalizado bajo consideración, MACD. mq5. Será la siguiente: Eche un vistazo a cómo los parámetros en el indicador ahora coinciden con las descripciones en el bloque de descripción de clase. Después de todas las modificaciones, el bloque de descripción de nuestra clase será el siguiente: En la programación, se considera buena práctica proporcionar comentarios a los códigos, facilitando así la comprensión del código, al volver a él después de algún tiempo ha pasado . Por lo tanto, vamos a modificar el siguiente bloque: para que coincida con la descripción de nuestra clase: Para evitar la confusión, tenemos que reemplazar todos CSignalEnvelopes valores con CSignalMyCustInd Figura 6. Sustitución de CSignalEnvelopes con CSignalMyCustInd Ahora tenemos un vistazo a algunos aspectos teóricos. 5. La clase CiCustom Necesitaremos que la clase CiCustom continúe trabajando en el código de la clase de indicadores de negociación del indicador personalizado. La clase CiCustom se creó específicamente para trabajar con indicadores personalizados. La clase CiCustom proporciona creación, configuración y acceso a datos de indicadores personalizados. 6. La Clase Cindicadores. CIndicators es la clase para recopilar instancias de series de tiempo y clases de indicadores técnicos. La clase CIndicators proporciona creación, almacenamiento y administración (sincronización de datos, manejo y administración de memoria) de instancias de clase de indicadores técnicos. Estamos particularmente interesados ​​en la clase CIndicators debido al método Create. Este método crea un indicador de un tipo especificado con parámetros especificados. 7. Seguir Escribiendo Nuestra Clase de Señal Comercial El siguiente bloque de código que vamos a modificar (líneas 28-42) es como sigue: 8. Creación del Indicador Personalizado en el Generador de Señales de Trading Eche un vistazo al bloque de código proporcionado anteriormente. La línea declara un objeto: el indicador de clase CiEnvelopes. CiEnvelopes es la clase para trabajar con el indicador técnico de la Biblioteca Estándar. La clase CiEnvelopes se creó con base en el indicador técnico de la Biblioteca Estándar. Sin embargo, estamos escribiendo el código del generador basado en nuestro indicador personalizado. Por lo tanto, no hay una clase lista para nuestro indicador personalizado en la Biblioteca estándar. Lo que podemos hacer es usar la clase CiCustom. Vamos a declarar nuestro indicador como la clase CiCustom: 8.1 Cuatro variables Se acuerda del bloque de descripción de parámetros en la clase? Hubo tres parámetros en esa descripción. En el área protegida de nuestra clase generadora, ahora declararemos cuatro variables para pasar los valores a nuestros cuatro parámetros: El siguiente bloque de código: Este código declara variables que dan peso a los modelos comerciales de nuestro generador de señales comerciales. Vamos a reemplazar el bloque de pesos con el siguiente código: 9. Modelo 0 Como recuerda, al principio del artículo se decidió describir sólo un nuevo modelo que será generado por nuestro generador de señales comerciales. Sin embargo, en el código anterior he especificado dos modelos de mercado (modelo 0 y modelo 1). Aquí, el modelo 0 es un modelo auxiliar importante. Se requiere al negociar con órdenes pendientes. Cuando se aplica, el modelo 0 asegura que los pedidos pendientes se muevan junto con el precio. Vamos a echar un vistazo a nuestro generador de señales de negociación y las siguientes condiciones: el indicador personalizado MACD está por debajo de la línea cero, y sus valores están aumentando, estamos negociando con órdenes pendientes de establecer 50 puntos del precio de apertura de la barra (cuatro dígitos valor de precio ). Estas condiciones describen perfectamente nuestro modelo comercial. Aquí es cómo las cosas se moverán: Nuestras condiciones del modelo comercial serán comprobadas al aparecer de la barra no. 1. Lo que tenemos: MACD está por debajo de la línea cero, pero está ganando impulso. Esto corresponde a la señal de compra. Por lo tanto, ponemos una orden pendiente Buy Stop: Al aparecer de la siguiente barra no. 2, la comprobación de condición encuentra que MACD está por debajo de cero y está cayendo. De acuerdo con nuestro modelo de negociación, actualmente no hay condiciones para comprar o vender. Sin embargo, tenga en cuenta: de acuerdo con la lógica de clase CExpertSignal, ya que no hay condiciones para la compra o venta, todos los pedidos pendientes deben ser eliminados. En este caso, si el precio sube repentinamente y dramáticamente, vamos a perder la oportunidad de entrar en el mercado largo a nuestra ventaja, ya que no habrá orden pendiente. Aquí es donde el modelo auxiliar 0 parece ser muy útil. Se aplicará el modelo auxiliar 0, siempre que: el indicador personalizado MACD esté por debajo de la línea cero. Así que podemos hacer una orden pendiente de Buy Stop. Puesto que ponemos una orden de 50 puntos del precio de apertura de la barra, de hecho, simplemente movemos la orden pendiente Buy Stop de acuerdo con el movimiento del precio: Así, usando el modelo auxiliar 0 tenemos la oportunidad de mover una orden pendiente según El movimiento de precios. 10. Modificaciones adicionales del código de plantilla El siguiente bloque de código a modificar es el siguiente: En este bloque se declaran los métodos de ajuste de parámetros ajustables, métodos de ajuste de pesos de modelos de negociación, método de verificación de ajustes, método de inicialización de indicadores y métodos De verificar si se generan los modelos de mercado. Teniendo en cuenta que hemos declarado cuatro variables en parámetros ajustables, el bloque de métodos para establecer los parámetros será como sigue: El siguiente fragmento de código permanecerá sin cambios: El siguiente bloque de código a ser modificado es el siguiente: Este bloque será fuertemente modificado. Tenga en cuenta que estoy utilizando el método GetData de la clase CIndicator. Los nombres de los métodos llamados se proporcionarán directamente en el código: El siguiente bloque de código es el constructor. En el constructor, cambiaremos los nombres de las variables. Además, utilizaremos sólo dos series: USESERIESHIGHUSESERIESLOW Permite modificar el método ValidationSettings de nuestra clase. En el bloque de comprobación, verificamos la condición principal para el indicador personalizado dado: mperiodfastgtmperiodslow El siguiente bloque trata de la creación de indicadores: Como se aplica a nuestro indicador personalizado: El siguiente bloque es el bloque de inicialización del indicador: Primero, agregamos un objeto al colección. A continuación, establecemos los parámetros de nuestro indicador y crear el indicador personalizado mediante el método Create de la clase CIndicators: El siguiente bloque comprueba condiciones de compra: De acuerdo con nuestra implementación de modelo 0. Se comprueban dos modelos: El bloque siguiente comprueba las condiciones de venta: Según nuestra implementación del modelo 0. Dos modelos se comprueban: Conclusión Espero que este artículo le ha ayudado a entender cómo se puede crear un generador de señales comerciales basadas en su indicador personalizado. Aumente su comercio de divisas Entrar en su estrategia de negociación y generar asesor experto para el comercio de divisas de divisas. Crear secuencias de comandos para ayudarle a comerciar. Professional Edition genera archivos. ex4 /.ex5 y código fuente. mq4 /.mq5. Dado que la mayoría de las estrategias de comercio de Forex contienen elementos comunes: posiciones de apertura, posiciones de cierre, arrastre de paradas, señales, etc generador crea Asesor experto, Script o Indicador personalizado con esos componentes comunes para los mercados de divisas. Presione el menú Generar y su indicador EA, Script o Personalizado estará listo. Pruebe sus ideas antes de contratar a alguien para programar Asesor experto, Script o Indicador personalizado para usted. Forex Generator Soporte completo para MetaTrader 4. Soporte experimental limitado de MetaTrader 5. No requiere programación para la mayoría de las configuraciones. Cree tanto Expertos Asesores (EA), Indicadores personalizados y Scripts comerciales. La orden de establecimiento ordena señales de apertura a través de indicadores incorporados o personalizados. Importe sus propios o personalizados indicadores de terceros. Establecer la ejecución de la orden: tomar ganancia, detener la pérdida, parada de arrastre, etc. Limitar la apertura de nuevos pedidos a días específicos de la semana. Establezca las horas en las que el Asesor experto debe abrir nuevos pedidos. Limite a Expert Advisor para que trabaje sólo cuando los spreads tengan un valor inferior al establecido. Configure el segundo orden con diferentes beneficios de toma, detenga la pérdida, etc. Principalmente utilizados para los escenarios de negociación de equilibrio. Opción para cerrar órdenes si se ha recibido señal opuesta. Martingale y Semi-Martingale. Incluya su propio código personalizado en el diagrama. Forex Generator Block Editor Este es un complemento gratuito complementario del producto para Forex Generator. Cree sus propios bloques de construcción y utilizarlos en el generador de Forex. Construye tu propia biblioteca de bloques avanzados. Actualizaciones gratuitas Si obtiene la versión actual 6.x, todas las actualizaciones para cualquier versión futura 6.x serán gratuitas. Forex Generator Capturas de pantallaMetaTrader 5 - Trading Systems MQL5 Wizard: Cómo crear un módulo de señales de comercio Introducción MetaTrader 5 proporciona una herramienta poderosa para la comprobación rápida de las ideas comerciales. Éste es el generador de estrategias comerciales del MQL5 Wizard. El uso del MQL5 Wizard para la creación automática de códigos de Expert Advisor se describe en el artículo MQL5 Wizard: Creación de asesores expertos sin programación. La apertura del sistema de generación de código le permite agregar sus propias clases de señales comerciales, sistemas de gestión de dinero y módulos de seguimiento a los estándares. En este artículo se describen los principios de escribir módulos de señales comerciales para utilizarlos al crear Asesores expertos con el Asistente MQL5. El Asesor experto creado con MQL5 Wizard. Se basa en cuatro pilares: cuatro clases de base: La clase CExpert (o su subclase) es el motor principal de un robot comercial. Una instancia de CExpert contiene una copia de cada clase: CExpertSignal. CExpertMoney y CExpertTrailing (o sus subclases): CExpertSignal es la base del generador de señales comerciales. Una instancia de la clase derivada CExpertSignal, incluida en CExpert. Proporciona a un asesor experto información sobre la posibilidad de entrar en el mercado, los niveles de entrada y la colocación de órdenes de protección, sobre la base de algoritmos incorporados. La decisión final sobre la ejecución de operaciones comerciales es tomada por la EA. CExpertMoney es la base de los sistemas de gestión de dinero y riesgo. Una instancia de la clase derivada de CExpertMoney calcula los volúmenes para abrir posiciones y colocar órdenes pendientes. La decisión final sobre el volumen es tomada por la EA. CExpertTrailing - es la base del módulo de soporte de posiciones abiertas. Una instancia de la clase derivada CExpertTrailing informa a un EA sobre la necesidad de modificar órdenes de protección de una posición. La decisión final sobre la modificación de la orden es tomada por la EA. Además, los miembros de la clase CExpert son instancias de las siguientes clases: CExpertTrade (para negociar) CIndicadores (para el control de indicadores y series de tiempo involucrados en el trabajo de la EA). CSimbolInfo (para obtener información sobre el instrumento) CAccountInfo (para obtener información sobre el estado de la cuenta comercial) CPositionInfo (para obtener información sobre las posiciones) COrderInfo (para obtener información sobre órdenes pendientes) En adelante, bajo el término expert se entiende una instancia de CExpert o Su subclase. Más detalles de CExpert y el trabajo con él se describirá en un artículo aparte. 1. Clase Base CExpertSignal CExpertSignal es la base del generador de señales comerciales. Para la comunicación con el mundo exterior, CExpertSignal tiene un conjunto de método público virtual: Descripción de los métodos 1.1. Métodos de inicialización: El método Init () se llama automáticamente justo después de que se agrega una instancia de clase al experto. No es necesario reemplazar el método. El método ValidationSettings () se llama a la derecha del experto después de todos los parámetros se establecen. Debe anular el método si hay algún parámetro de configuración. El método anulado debe devolver true, si todas las opciones son válidas (utilizables). Si al menos uno de los parámetros es incorrecto, debe devolver false (trabajo adicional es imposible). La clase base CExpertSignal no tiene parámetros ajustables, por lo tanto, el método de clase base devuelve siempre true sin realizar ninguna comprobación. El método InitIndicators () implementa la creación e inicialización de todos los indicadores y series de tiempo necesarios. Se llama desde el experto después de que todos los parámetros se establecen y su corrección se verifica con éxito. El método debe ser anulado si el generador de señales comerciales utiliza al menos un indicador o series de tiempo. Los indicadores y / o las series de tiempo deben usarse a través de las clases apropiadas de la Biblioteca Estándar. Los punteros de todos los indicadores y / o series de tiempo deben agregarse a la colección de indicadores de un experto (un puntero al cual se pasa como un parámetro). El método overridden debe devolver true, si todas las manipulaciones con los indicadores y / o timeseries tuvieron éxito (son adecuadas para su uso). Si al menos una operación con los indicadores y / o series de tiempo falló, el método debe devolver falso (trabajo adicional es imposible). La clase base CExpertSignal no utiliza indicadores ni series de tiempo, por lo tanto, el método de clase base siempre devuelve true, sin realizar ninguna acción. 1.2. Métodos de verificación de la señal de apertura de posición: El método CheckOpenLong () genera una señal de apertura de una posición larga, definiendo el nivel de entrada y los niveles de colocación de órdenes protectoras. Es llamado por un experto para determinar si es necesario abrir una posición larga. El método debe ser anulado, si se espera que se genere una señal de apertura de posición larga. El método debe implementar el algoritmo de comprobar la condición de una posición larga de apertura. Si se cumple la condición, se deben asignar valores apropiados a las variables price, sl, tp y expiration (referencias a las cuales se pasan como parámetros) y el método devuelve true. Si la condición no se cumple, el método debe devolver false. La clase base CExpertSignal no tiene algoritmo incorporado para generar una señal de apertura de posición larga, por lo que el método de clase base siempre devuelve false. El método CheckOpenShort () genera una señal de apertura de una posición corta, definiendo el nivel de entrada y los niveles de colocación de órdenes protectoras. Se llama por un experto para determinar si es necesario abrir una posición corta. El método debe ser anulado, si se espera que se genere una señal de apertura de posición corta. El método debe implementar el algoritmo para comprobar la condición para abrir una posición corta. Si se cumple la condición, se deben asignar valores apropiados a las variables price, sl, tp y expiration (referencias a las cuales se pasan como parámetros) y el método devuelve true. Si la condición no se cumple, el método debe devolver false. La clase base CExpertSignal no tiene ningún algoritmo incorporado para generar una señal de apertura de posición corta, por lo que el método de clase base siempre devuelve false. 1.3. Métodos de verificación de la señal de cierre de posición: El método CheckCloseLong () genera una señal de cierre de una posición larga, definiendo el nivel de salida. Es llamado por un experto para determinar si es necesario cerrar una posición larga. El método debe ser anulado, si se espera que se genere una señal de cierre de posición larga. El método debe implementar el algoritmo para verificar la condición para cerrar la posición larga. Si se cumple la condición, se debe asignar al valor variable (la referencia a la cual se pasa como parámetro) el valor apropiado y el método devolverá true. Si la condición no se cumple, el método debe devolver false. La clase base CExpertSignal no tiene algoritmo incorporado para generar una señal de un cierre de posición largo, por lo que el método de clase base siempre devuelve false. El método CheckCloseShort () genera una señal de cierre de una posición corta, definiendo el nivel de salida. Es llamado por un experto para determinar si es necesario cerrar una posición corta. El método debe ser anulado, si se espera que se genere una señal de cierre de posición corta. El método debe implementar el algoritmo para verificar la condición para cerrar una posición corta. Si se cumple la condición, se debe asignar al valor variable (la referencia a la cual se pasa como parámetro) el valor apropiado y el método devolverá true. Si la condición no se cumple, el método debe devolver false. La clase base CExpertSignal no tiene ningún algoritmo incorporado para generar una señal de cierre de posición corta, por lo que el método de clase base siempre devuelve false. 1.4. Métodos para comprobar la señal de inversión de posición: El método CheckReverseLong genera una señal de inversión de una posición larga, que define el nivel de inversión y los niveles de colocación de órdenes protectoras. Es llamado por un experto para determinar si es necesario invertir una posición larga. El método debe ser anulado, si se espera que se genere una señal de una inversión de posición larga. El método debe implementar el algoritmo para comprobar la condición de inversión de posición larga. Si se cumple la condición, se deben asignar valores apropiados a las variables price, sl, tp y expiration (referencias a las cuales se pasan como parámetros) y el método devuelve true. Si la condición no se cumple, el método debe devolver false. En la clase base CExpertSignal, se implementa el siguiente algoritmo para generar una señal de inversión de posición larga: Comprobación de una señal para cerrar una posición larga. Comprobación de una señal para abrir una posición corta. Si ambas señales están activas (se cumplen las condiciones) y los precios de cierre y apertura coinciden, se asignan los valores apropiados a las variables precio, sl, tp y vencimiento (referencias a las cuales se pasan como parámetros) y el método devuelve true. Si la condición no se cumple, el método devuelve false. El método CheckReverseShort genera una señal de inversión de una posición corta, definiendo el nivel de inversión y los niveles de colocación de órdenes protectoras. Es llamado por un experto para determinar si es necesario invertir una posición corta. El método debe ser anulado, si se espera que se genere una señal de una inversión de posición larga de acuerdo con el algoritmo que difiere del implementado en la clase base. El método debe implementar el algoritmo para comprobar la condición de inversión de posición corta. Si se cumple la condición, se deben asignar valores apropiados a las variables price, sl, tp y expiration (referencias a las cuales se pasan como parámetros) y el método devuelve true. Si la condición no se cumple, el método debe devolver false. En la clase base CExpertSignal, se implementa el siguiente algoritmo para generar una señal de inversión de posición corta: Comprobación de una señal para cerrar una posición corta. Comprobación de una señal para abrir una posición larga. Si ambas señales están activas (se cumplen las condiciones) y los precios de cierre y apertura coinciden, se asignan los valores apropiados a las variables precio, sl, tp y vencimiento (referencias a las cuales se pasan como parámetros) y el método devuelve true. Si la condición no se cumple, el método devuelve false. 1.5. Métodos para comprobar la señal de la modificación de orden pendiente: El método CheckTrailingOrderLong () genera la señal de modificación de una orden de compra pendiente, definiendo un nuevo precio de pedido. Es llamado por un experto para determinar si es necesario modificar una orden de compra pendiente. El método debe ser anulado, si se espera que se genere una señal de modificación de una orden de compra pendiente. El método debe implementar el algoritmo para verificar la condición de modificación de una orden de compra pendiente. Si se cumple la condición, se debe asignar al valor variable (la referencia a la cual se pasa como parámetro) el valor apropiado y el método devolverá true. Si la condición no se cumple, el método debe devolver false. La clase base CExpertSignal no tiene ningún algoritmo incorporado para generar una señal de modificación de una orden de compra pendiente, por lo que el método de clase base siempre devuelve false. El método CheckTrailingOrderShort () genera la señal de modificación de una orden de venta pendiente, definiendo un nuevo precio de pedido. Es llamado por un experto para determinar si es necesario modificar una orden de venta pendiente. El método debe ser anulado, si se espera que se genere una señal de modificación de una orden de venta pendiente. El método debe implementar el algoritmo para verificar la condición de modificación de una orden de venta pendiente. Si se cumple la condición, se debe asignar al valor variable (la referencia a la cual se pasa como parámetro) el valor apropiado y el método devolverá true. Si la condición no se cumple, el método debe devolver false. La clase base CExpertSignal no tiene algoritmo incorporado para generar una señal de modificación de una orden de venta pendiente, por lo que el método de clase base siempre devuelve false. 2. Desarrolle su propio generador de señales comerciales Ahora, después de revisar la estructura de la clase base CExpertSignal, puede comenzar a crear su propio generador de señales comerciales. Como se mencionó anteriormente, la clase CExpertSignal es un conjunto de cuerdas virtuales públicas - métodos, mediante las cuales el experto puede conocer la opinión del generador de señales comerciales sobre la entrada en el mercado en un sentido u otro. Por lo tanto, nuestro objetivo principal es crear nuestra propia clase de generador de señales comerciales, derivándolo de la clase CExpertSignal y reemplazando los métodos virtuales apropiados, implementando los algoritmos requeridos. Nuestro segundo problema (que no es menos importante) - para hacer nuestra clase visible para MQL5 Wizard. Pero, primeras cosas primero. 2.1. Crear la clase del generador de señales comerciales Primero, creamos (por ejemplo, usando el mismo Asistente MQL5) un archivo de inclusión con la extensión mqh. En el menú Archivo, seleccione Crear (o presione la combinación de teclas CtrlN) e indique la creación de un archivo incluido: Figura 2. Creación de un archivo de inclusión usando MQL5 Wizard Debe tenerse en cuenta que para que el archivo sea detectado por MQL5 Wizard como Un generador de señal, debe ser creado en la carpeta IncludeExpertSignal. Para no tirar basura en la Biblioteca Estándar. Crear nuestra propia carpeta IncludeExpertSignalMySignals, en la que creamos el archivo SampleSignal. mqh, especificando estos parámetros en MQL5 Wizard: Figura 3. Configuración de la ubicación del archivo de inclusión Como resultado de la operación MQL5 Wizard tenemos el siguiente patrón: Lo siguiente es sólo manual trabajo. Elimine las partes innecesarias y añada lo que se requiera (incluya el archivo ExpertSignal. mqh de la Biblioteca Estándar y una descripción de clase que esté vacía). Ahora, es necesario elegir los algoritmos. Como base para nuestro generador de señales comerciales, tomamos el precio modelo generalizado cruza la media móvil. Pero hacemos una suposición más: Después de cruzar la media móvil, el precio se mueve hacia atrás, y sólo entonces va en la dirección correcta. Reflexionar esto en nuestro archivo. Generalmente, cuando usted está escribiendo algo, no escatime en los comentarios. Después de algún tiempo, leer un código cuidadosamente comentado será tan cómodo. Ahora permite definir qué datos se necesitan para tomar decisiones sobre la generación de señales comerciales. En nuestro caso, este es el precio abierto y el precio de cierre de la barra anterior, y el valor de la media móvil en la misma barra anterior. Para acceder a estos datos, usamos las clases de biblioteca estándar CiOpen. CiClose y CiMA. Bueno discutir indicadores y series de tiempo más tarde. Mientras tanto, permite definir una lista de configuraciones para nuestro generador. Primero, necesitamos establecer la media móvil. Estos parámetros incluyen el período, el desplazamiento a lo largo del eje de tiempo, el método de promediado y el objeto de promediar. En segundo lugar, tenemos que establecer el nivel de entrada y los niveles de colocación de órdenes de protección, y la duración de una orden pendiente, porque vamos a trabajar con pedidos pendientes. Todos los ajustes del generador se almacenarán en miembros de datos protegidos de la clase. El acceso a los ajustes será implementado a través de métodos públicos apropiados. Incluimos estos cambios en nuestro archivo: Ya que estamos usando miembros de datos protegidos, necesitamos agregar un constructor de clase. En el cual inicializaremos estos datos por valores predeterminados. Para comprobar los parámetros, permite anular el método virtual ValidationSettings de acuerdo con la descripción de la clase base. Descripción de la clase: Implementación del método ValidationSettings (): Ahora, cuando hemos terminado la mayor parte del trabajo preparatorio, hablaremos más sobre indicadores y series de tiempo. Los indicadores y las series de tiempo son la principal fuente de información para la toma de decisiones (sin duda puede utilizar el lanzamiento de monedas, o fases de la luna, pero son muy difíciles de formalizar). Como ya hemos definido anteriormente, para tomar decisiones, necesitamos la siguiente información: el precio de apertura de la barra anterior, el precio de cierre de la barra anterior y el valor de la media móvil en la misma barra anterior. Para acceder a estos datos, utilizaremos las siguientes clases de la Biblioteca Estándar: CiOpen - para acceder al precio abierto de la barra anterior, CiClose - para acceder al precio de cierre de la barra anterior, CiMA - para acceder al valor de la Promedio móvil en la barra anterior. Usted puede preguntar: Por qué utilizar el indicador o las series de tiempo, envuelto en una clase, con el fin de obtener un solo número Hay un significado oculto, que vamos a revelar ahora. Cómo utilizar los datos de un indicador o series de tiempo Primero, necesitamos crear un indicador. En segundo lugar, necesitamos copiar la cantidad necesaria de datos en un buffer intermedio. En tercer lugar, debemos comprobar si la copia está completa. Sólo después de estos pasos, puede utilizar los datos. Uso de las clases de la Biblioteca Estándar. Evita la necesidad de crear un indicador, de preocuparse por la disponibilidad de tampones intermedios y sobre la carga de datos o la liberación de un identificador. El objeto de una clase apropiada lo hará por usted. Todos los indicadores requeridos serán generados por nuestro generador de señales durante la etapa de inicialización, y todos los indicadores se proporcionarán con el buffer temporal necesario. And besides, once we add an indicator or timeseries object in the collection (the object of a special class), you can stop caring about the relevance of the data (the data will be updated automatically by the expert). Well place the objects of these classes in the protected data members. For each object, we create a method of initialization and data access method. Lets override the virtual method InitIndicators (according to the description of the base class). Description of the class: Implementation of methods InitIndicators, InitMA, InitOpen, InitClose: All the preparatory works are completed. As you can see, our class has grown significantly. But now we are ready to generate trading signals. Figure 4. Trading signals for the price crossing the moving average Lets consider our algorithms again in more detail. 1. The signal to buy appears when the following conditions have been fulfilled on the previous bar: the bar open price is less than the value of the moving average, the bar close price is greater than the value of the moving average, the moving average is increasing. In this case, we offer to place a pending Buy order with the parameters defined by the settings. For this purpose, we override the virtual method CheckOpenLong and fill it with the corresponding functional. 2. The signal to sell appears when the following conditions have been fulfilled on the previous bar: the bar open price is greater than the value of the moving average, the bar close price is less than the value of the moving average, the moving average is decreasing. In this case, we offer to place a pending Sell order with the parameters defined by the settings. For this purpose, we override the virtual method CheckOpenShort and fill it with the corresponding functional. 3. We will not generate signals to close positions. Let the positions be closed by Stop Loss/Take Profit . 4. We will propose the modification of a pending order along the moving average at the distance specified by the settings. For this purpose, we override the virtual methods CheckTrailingOrderLong and CheckTrailingOrderShort. filling them with corresponding functional. Description of the class: Implementation of methods CheckOpenLong, CheckOpenShort, CheckTrailingOrderLong, CheckTrailingOrderShort: So weve solved the first problem. The above code is a source code of the class of trading signals generator that meets our main task. 2.2. Preparing a description of the created class of the trading signals for MQL5 Wizard We now turn to solving the second problem. Our signal should be recognized by the generator of trading strategies MQL5 Wizard. Weve done the first necessary condition: weve placed the file where it will be found by the MQL5 Wizard. But this is not enough. The MQL5 Wizard must not only find the file, but also recognize it. To do this we must add to the original text the class descriptor for the MQL5 Wizard . A class descriptor is a block of comments composed according to certain rules. Lets consider these rules. 1. The block of comments should start with the following lines: 2. The next line is a text descriptor (what we will see in the MQL5 Wizard when choosing the signal) in the format // TitleltTextgt . If the text is too big for one line, you can add one more line (but not more) after it. In our case, we have the following: 3. Then comes a line with the class type specified in the format // TypeltTypegt . The ltTypegt field must have the Signal value (in addition to signals, the MQL5 Wizard knows other types of classes). 4. The following line in the format // NameltNamegt is the short name of the signal (it is used by the MQL5 Wizard for generating the names of the global variables of the expert). We get the following: 5. The name of a class is an important element of the description. In the line with the format // ClassltClassNamegt , the ltClassNamegt parameter must match with the name of our class: 6. We do not fill in this line, but it must be present (this is a link to the language reference section): 7. Further, there are descriptions of the signal setup parameters. This is a set of rows (the number of rows is equal to the number of parameters). The format of each line is // ParameterltNameOfMethodgt, ltTypeOfParametergt, ltDefaultValuegt . Here is our set of parameters: 8. The block of comment should end with the following lines: Lets add the descriptor to the source code. Well, thats all. The signal is ready to use. For the generator trading strategies MQL5 Wizard to be able to use our signal, we should restart MetaEditor (MQL5 Wizard scans the folder IncludeExpert only at boot). After restarting MetaEditor. the created module of trading signals can be used in the MQL5 Wizard: Figure 5. The created generator of trading signals in the MQL5 Wizard The input parameters specified in the section of description of the parameters of the trading signals generator are now available: Figure 6. Input parameters of the created generator of trading signals in the MQL5 Wizard The best values of the input parameters of the implemented trading strategy can be found using the Strategy Tester of the MetaTrader 5 terminal. The generator of trading strategies of the MQL5 Wizard greatly simplifies the testing of trading ideas. The code of the generated expert is based on the classes of trading strategies of the Standard Library, which are used for creating certain implementations of trading signal classes, money and risk management classes and position support classes. The article discusses how to write your own class of trading signals with the implementation of signals on the crossing of the price and the moving average, and how to include it to the generator of trading strategies of the MQL5 Wizard. as well as describes the structure and format of the description of the generated class for the MQL5 Wizard.

No comments:

Post a Comment