
MQL5 Wizard: crear asesores expertos sin programar
Introducción
Cuando creamos sistemas de trading automatizados es necesario escribir algoritmos para analizar la situación del mercado y generar señales de trading, algoritmos de arrastre de nuestras posiciones abiertas y sistemas para gestionar el dinero y el riesgo.
Una vez que se ha escrito el código de los módulos, la tarea más difícil es ensamblar todas las partes y depurar el código fuente del robot de trading. Aquí, el papel principal lo juega la arquitectura de la interacción de los módulos: si su construcción es deficiente, la mayor parte del tiempo se empleará en encontrar y corregir errores, y si sustituimos el algoritmo de cualquier módulo nos llevará a reescribir todo el código fuente.
El uso del enfoque orientado a objeto en MQL5 elimina considerablemente la tarea de escribir y probar los sistemas de trading automatizados.
MetaQuotes Software Corp. ha desarrollado clases para implementar estrategias de trading. Ahora puede generar código de asesores expertos de forma automática directamente en MetaEditor seleccionando las señales de trading necesarias (actualmente hay 20 de ellas), los módulos Trailing (4) y Money Management (5). Combinando estos módulos podemos obtener muchas variantes de sistemas de trading listos para ser usados.
Puede usar también sus propias clases con la implementación de estos módulos. Créelos por sí mismos o pídalos a través del servicio Trabajos.
En este artículo vamos a ver la generación automática de código fuente de asesores expertos usando el MQL5 Wizard. ¡Y no habrá que programar nada!
1. Crear un robot de trading usando MQL5 Wizard
El código fuente de los asesores expertos se genera usando el MQL5 Wizard en MetaEditor.
Las clases básicas de estrategias de trading se encuentran en la carpeta '\<client_terminal_directory>\MQL5\Include\Expert\'. Los algoritmos de clases de señales de trading listos para su uso, las clases de posiciones abiertas de arrastre y las clases de gestión de dinero y riesgo se encuentran en las subcarpetas Signal, Trailing y Money. El MQL5 Wizard analiza los archivos en estas carpetas y los utiliza para generar código del asesor experto.
Para ejecutar el MQL5 Wizard necesita hacer clic en el botón "Nuevo" en la barra de herramientas o seleccionar "Nuevo" en el menú "Archivo" (o simplemente pulsar Ctrl+N):
Fig. 1. Ejecutar el MQL5 Wizard
A continuación seleccione el tipo de programa que quiere crear. En nuestro caso seleccionamos la opción (generar) "Asesor experto":
Fig. 2. Seleccionar el tipo de programa
Paso 1. Propiedades generales del asesor experto
A continuación se abre el cuadro de diálogo donde podemos establecer las propiedades generales del asesor experto:
Fig. 3. Propiedades generales del Expert Advisor
Especificamos el nombre de nuestro asesor experto, el nombre del autor y el enlace a nuestro sitio web en los campos "Nombre", "Autor" y "Enlace" (respectivamente).
El asesor experto tiene también los siguientes parámetros de entrada.
- Símbolo (el tipo de string) - símbolo de trabajo para el asesor experto.
- Periodo de tiempo (el tipo de periodo de tiempo) - periodo de tiempo de trabajo para el asesor experto.
En el siguiente paso seleccionamos el tipo de señales de trading sobre las que operará el experto.
Paso 2. Seleccionar el módulo de señales de trading
El algoritmo de apertura y cierre de posiciones viene determinado por el módulo de las señales de trading. Los módulos de las señales de trading contienen reglas para la apertura/cierre/inversión de posiciones.
La librería estándar tiene módulos de señales de trading listas para usar:
- CSignalAC - el módulo de señales basado en los modelos de mercado del indicador oscilador acelerador.
- CSignalAMA - el módulo de señales basado en los modelos de mercado del indicador media móvil adaptativa.
- CSignalAO - el módulo de señales basado en los modelos de mercado del indicador oscilador impresionante.
- CSignalBearsPower - el módulo de señales basado en los modelos de mercado del oscilador poder de osos.
- CSignalBullsPower - el módulo de señales basado en los modelos de mercado del oscilador poder de toros.
- CSignalCCI - el módulo de señales basado en los modelos de mercado del oscilador índice de canal de producto.
- CSignalDeM - el módulo de señales basado en los modelos de mercado del oscilador DeMarker.
- CSignalDEMA - el módulo de señales basado en los modelos de mercado del indicador media móvil doble exponencial.
- CSignalEnvelopes - el módulo de señales basado en los modelos de mercado del indicador Envelopes.
- CSignalFrAMA - el módulo de señales basado en los modelos de mercado del indicador media móvil adaptativa fractal.
- CSignalITF - módulo de filtración de señales por tiempo.
- CSignalMACD - el módulo de señales basado en los modelos de mercado del oscilador MACD.
- CSignalMA - el módulo de señales basado en los modelos de mercado del indicador media móvil.
- CSignalSAR - el módulo de señales basado en los modelos de mercado del indicador SAR parabólico.
- CSignalRSI - el módulo de señales basado en los modelos de mercado del oscilador índice de resistencia relativa.
- CSignalRVI - el módulo de señales basado en los modelos de mercado del oscilador índice de vigor relativo.
- CSignalStoch - el módulo de señales basado en los modelos de mercado del oscilador estocástico.
- CSignalTRIX - el módulo de señales basado en los modelos de mercado del oscilador media exponencial triple.
- CSignalTEMA - el módulo de señales basado en los modelos de mercado del indicador media móvil exponencial triple.
- CSignalWPR - el módulo de señales basado en los modelos de mercado del oscilador rango porcentual de Williams.
El tipo de señales de trading se selecciona de la lista desplegable "Nombre".
Después de pulsar el botón "Siguiente" verá una ventana:
Fig. 4. Selección de señales de trading del Expert Advisor
Para añadir un módulo de señales de trading presione el botón "Añadir".
Vamos a añadir señales de trading basadas en el indicador de media móvil.
Fig. 5. Seleccionar el algoritmo de señales de trading
Cada módulo de señales de trading tiene sus propios parámetros. Puede usar los valores por defecto.
Hay dos formas de crear los parámetros. Puede cambiar entre ellas haciendo doble clic con el botón izquierdo del ratón en el icono del parámetro. Si el parámetro tiene el icono resaltado éste estará disponible como la variable de entrada del asesor experto. Dichos parámetros pueden usarse posteriormente para la optimización del experto en el probador de estrategias. Si el parámetro tiene el icono gris
tendrá un valor fijo que no podrá modificarse en las propiedades del asesor experto.
El módulo de señales de trading aparecerá en la lista:
Fig. 6. Se ha añadido el módulo de señales de trading
Paso 3. Seleccionar el módulo de rastreo de posiciones abiertas
El siguiente paso es seleccionar el algoritmo de rastreo de posiciones abiertas (Trailing Stop). El uso del arrastre nos permite ahorrar el beneficio obtenido.
La librería estándar proporciona varias formas de rastrear posiciones abiertas:
- CTrailingNone - Trailing Stop no se usa.
- CTrailingFixedPips - Trailing Stop basada en una Stop Level fija.
- CTrailingMA - Trailing Stop basada en la MA.
- CTrailingPSAR - Trailing Stop basada en el SAR parabólico.
En nuestro asesor experto seleccionamos "Trailing Stop basada en Stop Level":
Fig. 7. Seleccionar el algoritmo de posiciones abiertas de arrastre
Este tipo de arrastre tiene dos parámetros: StopLevel y ProfitLevel (en puntos para cotizaciones con 2 y 4 dígitos después de la coma) que serán usados para rastrear posiciones abiertas:
Fig. 9. Establecer los parámetros del algoritmo seleccionado de rastreo de posiciones abiertas
Paso 4. Seleccionar el módulo de gestión de dinero y riesgo
En el último paso necesitamos seleccionar el sistema de gestión de dinero y riesgo que será usado en nuestro asesor experto.
El propósito de este algoritmo es determinar el volumen de transacciones (en lotes) para las operaciones de trading y también la gestión del riesgo. Cuando el valor de pérdida excede el límite permitido (por ejemplo, 10% de las acciones) el módulo de gestión de dinero y riesgo cerrará forzosamente la posición no rentable.
La librería estándar proporciona varias implementaciones de los algoritmos de gestión de dinero y riesgos listas para ser usadas:
- CMoneyFixedLot - Operar con un volumen de transacciones fijo
- CMoneyFixedMargin - Operar con un margen fijo.
- CMoneyFixedRisk - Operar con un riesgo fijo.
- CMoneyNone - Operar con el volumen de transacciones mínimo permitido.
- CMoneySizeOptimized - Operar con el volumen de transacción optimizado.
Fig. 9. Seleccionar el algoritmo de gestión de dinero y riesgo
Seleccionar el algoritmo "Operar con volumen de transacciones fijo".
El módulo que hemos seleccionado tiene dos parámetros:
- Lotes - volumen de transacciones en lotes.
- Porcentaje - porcentaje de riesgo máximo permitido.
Fig. 10. Establecer los parámetros del algoritmo seleccionado de gestión de dinero y riesgo
Después de hacer clic en "Finalizar" aparecerá el archivo TestExpert.mq5 en la carpeta \teminal_data_filder\MQL5\Experts\. El nombre del archivo es el nombre del asesor experto especificado.
2. Estructura del asesor experto creado usando el MQL5 Wizard
El código fuente generado por el MQL5 Wizard es el siguiente:
//+------------------------------------------------------------------+ //| TestExpert.mq5 | //| Copyright 2012, MetaQuotes Software Corp. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2012, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" //+------------------------------------------------------------------+ //| Include | //+------------------------------------------------------------------+ #include <Expert\Expert.mqh> //--- available signals #include <Expert\Signal\SignalMA.mqh> //--- available trailing #include <Expert\Trailing\TrailingFixedPips.mqh> //--- available money management #include <Expert\Money\MoneyFixedLot.mqh> //+------------------------------------------------------------------+ //| Inputs | //+------------------------------------------------------------------+ //--- inputs for expert input string Expert_Title ="TestExpert"; // Document name ulong Expert_MagicNumber =23689; // bool Expert_EveryTick =false; // //--- inputs for main signal input int Signal_ThresholdOpen =10; // Signal threshold value to open [0...100] input int Signal_ThresholdClose =10; // Signal threshold value to close [0...100] input double Signal_PriceLevel =0.0; // Price level to execute a deal input double Signal_StopLevel =50.0; // Stop Loss level (in points) input double Signal_TakeLevel =50.0; // Take Profit level (in points) input int Signal_Expiration =4; // Expiration of pending orders (in bars) input int Signal_MA_PeriodMA =85; // Moving Average(85,0,...) Period of averaging input int Signal_MA_Shift =0; // Moving Average(85,0,...) Time shift input ENUM_MA_METHOD Signal_MA_Method =MODE_SMA; // Moving Average(85,0,...) Method of averaging input ENUM_APPLIED_PRICE Signal_MA_Applied =PRICE_CLOSE; // Moving Average(85,0,...) Prices series input double Signal_MA_Weight =1.0; // Moving Average(85,0,...) Weight [0...1.0] //--- inputs for trailing input int Trailing_FixedPips_StopLevel =30; // Stop Loss trailing level (in points) input int Trailing_FixedPips_ProfitLevel=50; // Take Profit trailing level (in points) //--- inputs for money input double Money_FixLot_Percent =10.0; // Percent input double Money_FixLot_Lots =0.1; // Fixed volume //+------------------------------------------------------------------+ //| Global expert object | //+------------------------------------------------------------------+ CExpert ExtExpert; //+------------------------------------------------------------------+ //| Initialization function of the expert | //+------------------------------------------------------------------+ int OnInit() { //--- Initializing expert if(!ExtExpert.Init(Symbol(),Period(),Expert_EveryTick,Expert_MagicNumber)) { //--- failed printf(__FUNCTION__+": error initializing expert"); ExtExpert.Deinit(); return(-1); } //--- Creating signal CExpertSignal *signal=new CExpertSignal; if(signal==NULL) { //--- failed printf(__FUNCTION__+": error creating signal"); ExtExpert.Deinit(); return(-2); } //--- ExtExpert.InitSignal(signal); signal.ThresholdOpen(Signal_ThresholdOpen); signal.ThresholdClose(Signal_ThresholdClose); signal.PriceLevel(Signal_PriceLevel); signal.StopLevel(Signal_StopLevel); signal.TakeLevel(Signal_TakeLevel); signal.Expiration(Signal_Expiration); //--- Creating filter CSignalMA CSignalMA *filter0=new CSignalMA; if(filter0==NULL) { //--- failed printf(__FUNCTION__+": error creating filter0"); ExtExpert.Deinit(); return(-3); } signal.AddFilter(filter0); //--- Set filter parameters filter0.PeriodMA(Signal_MA_PeriodMA); filter0.Shift(Signal_MA_Shift); filter0.Method(Signal_MA_Method); filter0.Applied(Signal_MA_Applied); filter0.Weight(Signal_MA_Weight); //--- Creation of trailing object CTrailingFixedPips *trailing=new CTrailingFixedPips; if(trailing==NULL) { //--- failed printf(__FUNCTION__+": error creating trailing"); ExtExpert.Deinit(); return(-4); } //--- Add trailing to expert (will be deleted automatically)) if(!ExtExpert.InitTrailing(trailing)) { //--- failed printf(__FUNCTION__+": error initializing trailing"); ExtExpert.Deinit(); return(-5); } //--- Set trailing parameters trailing.StopLevel(Trailing_FixedPips_StopLevel); trailing.ProfitLevel(Trailing_FixedPips_ProfitLevel); //--- Creation of money object CMoneyFixedLot *money=new CMoneyFixedLot; if(money==NULL) { //--- failed printf(__FUNCTION__+": error creating money"); ExtExpert.Deinit(); return(-6); } //--- Add money to expert (will be deleted automatically)) if(!ExtExpert.InitMoney(money)) { //--- failed printf(__FUNCTION__+": error initializing money"); ExtExpert.Deinit(); return(-7); } //--- Set money parameters money.Percent(Money_FixLot_Percent); money.Lots(Money_FixLot_Lots); //--- Check all trading objects parameters if(!ExtExpert.ValidationSettings()) { //--- failed ExtExpert.Deinit(); return(-8); } //--- Tuning of all necessary indicators if(!ExtExpert.InitIndicators()) { //--- failed printf(__FUNCTION__+": error initializing indicators"); ExtExpert.Deinit(); return(-9); } //--- ok return(0); } //+------------------------------------------------------------------+ //| Deinitialization function of the expert | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { ExtExpert.Deinit(); } //+------------------------------------------------------------------+ //| "Tick" event handler function | //+------------------------------------------------------------------+ void OnTick() { ExtExpert.OnTick(); } //+------------------------------------------------------------------+ //| "Trade" event handler function | //+------------------------------------------------------------------+ void OnTrade() { ExtExpert.OnTrade(); } //+------------------------------------------------------------------+ //| "Timer" event handler function | //+------------------------------------------------------------------+ void OnTimer() { ExtExpert.OnTimer(); } //+------------------------------------------------------------------+
El código del asesor experto comprende varias secciones.
Sección que describe las propiedades del programa:
#property copyright "Copyright 2012, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00"
Archivos incluidos:
#include <Expert\Expert.mqh> //--- available signals #include <Expert\Signal\SignalMA.mqh> //--- available trailing #include <Expert\Trailing\TrailingFixedPips.mqh> //--- available money management #include <Expert\Money\MoneyFixedLot.mqh>
El código de la clase CExpert (su instancia se usa en el asesor experto) se encuentra en el archivo Expert.mqh.
El archivo SignalMA.mqh contiene el código fuente de la clase de señales de trading seleccionada - CSignalMA. El archivo TrailingFixedPips.mqh contiene el código fuente de la clase del algoritmo del rastreo de posiciones abiertas - CTrailingFixedPips. La gestión de dinero y riesgo será implementada por la clase CMoneyFixedLot contenida en el archivo MoneyFixedLot.mqh.
A continuación vienen los parámetros de entrada del asesor experto:
//--- inputs for expert input string Expert_Title ="TestExpert"; // Document name ulong Expert_MagicNumber =23689; // bool Expert_EveryTick =false; // //--- inputs for main signal input int Signal_ThresholdOpen =10; // Signal threshold value to open [0...100] input int Signal_ThresholdClose =10; // Signal threshold value to close [0...100] input double Signal_PriceLevel =0.0; // Price level to execute a deal input double Signal_StopLevel =50.0; // Stop Loss level (in points) input double Signal_TakeLevel =50.0; // Take Profit level (in points) input int Signal_Expiration =4; // Expiration of pending orders (in bars) input int Signal_MA_PeriodMA =85; // Moving Average(85,0,...) Period of averaging input int Signal_MA_Shift =0; // Moving Average(85,0,...) Time shift input ENUM_MA_METHOD Signal_MA_Method =MODE_SMA; // Moving Average(85,0,...) Method of averaging input ENUM_APPLIED_PRICE Signal_MA_Applied =PRICE_CLOSE; // Moving Average(85,0,...) Prices series input double Signal_MA_Weight =1.0; // Moving Average(85,0,...) Weight [0...1.0] //--- inputs for trailing input int Trailing_FixedPips_StopLevel =30; // Stop Loss trailing level (in points) input int Trailing_FixedPips_ProfitLevel=50; // Take Profit trailing level (in points) //--- inputs for money input double Money_FixLot_Percent =10.0; // Percent input double Money_FixLot_Lots =0.1; // Fixed volume
Los primeros tres parámetros (Expert_Title, Expert_MagicNumber son Expert_EveryTick) son generales. Están siempre presentes con independencia de los algoritmos trading signals, trailing, y money and risk management seleccionados.
El parámetro Expert_Title especifica el nombre del asesor experto, Expert_MagicNumber especifica su ID (este valor se usará en los parámetros de las solicitudes de operaciones) y el parámetro Expert_EveryTick se usa para establecer el modo de funcionamiento del asesor experto. Si Expert_EveryTick se establece en el valor verdadero, el asesor experto llamará a las funciones del controlador (comprobar las condiciones de operatividad, comprometer operaciones, rastrear posiciones abiertas) cada vez que llegue un nuevo tick para el símbolo en funcionamiento.
Después de los parámetros generales del asesor experto vienen los parámetros de entrada para el algoritmo de señales de transacciones elegido (en nuestro caso son los parámetros usados en la clase CSignalMA).
Hemos elegido la clase CTrailingStopFixedPips del rastreo de posiciones abiertas. Esta clase rastrea las posiciones abiertas a una distancia fija determinada por los niveles de Stop Loss y Take Profit, cuyos valores se definen en puntos digitales 2/4 "normales". Cuando el precio se mueve hacia la posición abierta a una distancia que excede el número de puntos establecido por el nivel de Trailing_FixedPips_StopLevel, el asesor experto modifica los valores de los niveles de Stop Loss y Take Profit (si Trailing_FixedPips_StopLevel > 0).
Los parámetros de entrada Money_FixLot_Percent y Money_FixLot_Lots corresponden a los parámetros del algoritmo con el lote de transacciones fijo implementado en la clase CMoneyFixedLot. En nuestro caso, la transacción se realizará con un volumen fijo igual al valor de Money_FixLot_Lots.
La clase Money_FixLot_Lots también implementa el algoritmo de gestión de riesgo: si hay una pérdida (como un porcentaje de la acción actual) especificada en el parámetro Inp_Money_FixLot_Percent, la clase CMoneyFixedLot recomendará al asesor experto el cierre forzado de la posición no rentable y esto se llevará a cabo.
A continuación, se declaran los parámetros de entrada del asesor experto del objeto ExtExpert de la clase CExpert:
CExpert ExtExpert;
Esta es la instancia de la clase de la estrategia de trading.
Al ser una instancia de la clase CExpert, el objeto ExtExpert contiene referencias a los objetos hijos de la clase CExpertSignal (la clase básica de señales de trading), la clase CExpertMoney (la clase básica de la gestión de de dinero y riesgo) y la clase CExpertTrailing (la clase básica del rastreo de posiciones abiertas). Además, la clase CExpert contiene las instancias de las clases CExpertTrade, SSymbolInfo, CAccountInfo, CPositionInfo, COrderInfo y el contenedor CIndicators.
Para establecer los parámetros del asesor experto tenemos que crear instancias de las clases correspondientes y especificar las referencias a los objetos creados en la clase ExtExpert.
Vamos a ver la función OnInit de inicialización del asesor experto. Aquí inicializamos y configuramos las propiedades de la clase ExtExpert.
1. Inicialización de la clase ExtExpert:
//--- Initializing expert if(!ExtExpert.Init(Symbol(),Period(),Expert_EveryTick,Expert_MagicNumber)) { //--- failed printf(__FUNCTION__+": error initializing expert"); ExtExpert.Deinit(); return(-1); }
El objeto ExtExpert es inicializado usando el método Init. Aquí establecemos el símbolo, el periodo de tiempo, el flag del método que llama en cada tick, el ID del asesor experto y también creamos e inicializamos los objetos privados de las clases (en esta etapa las clases CExpertSignal, CExpertMoney y CExpertTrailing como las señales, rastreo y objetos de gestión de dinero).
Si el objeto ExtExpert no se inicializa con éxito, el asesor experto finalizará devolviendo el código -1.
2. Crear y configurar las propiedades del objeto Señal
//--- Creating signal CExpertSignal *signal=new CExpertSignal; if(signal==NULL) { //--- failed printf(__FUNCTION__+": error creating signal"); ExtExpert.Deinit(); return(-2); } //--- ExtExpert.InitSignal(signal); signal.ThresholdOpen(Signal_ThresholdOpen); signal.ThresholdClose(Signal_ThresholdClose); signal.PriceLevel(Signal_PriceLevel); signal.StopLevel(Signal_StopLevel); signal.TakeLevel(Signal_TakeLevel); signal.Expiration(Signal_Expiration); //--- Creating filter CSignalMA CSignalMA *filter0=new CSignalMA; if(filter0==NULL) { //--- failed printf(__FUNCTION__+": error creating filter0"); ExtExpert.Deinit(); return(-3); } signal.AddFilter(filter0); //--- Set filter parameters filter0.PeriodMA(Signal_MA_PeriodMA); filter0.Shift(Signal_MA_Shift); filter0.Method(Signal_MA_Method); filter0.Applied(Signal_MA_Applied); filter0.Weight(Signal_MA_Weight);
La configuración de las señales de trading comprende varias etapas:
- Creación del objeto de la señal y establecimiento de sus parámetros
- Creación del módulo de señales de trading y su adición a la instancia de clase CExpertSignal.
Si el objeto ExtExpert no se inicializa con éxito, el asesor experto finalizará devolviendo un código (entre -2 y -3) que depende del paso en el que haya ocurrido el error.
Dependiendo de la forma en que se especifiquen los parámetros en el MQL5 Wizard, se genera el código apropiado.
//--- Set signal parameters filter0.PeriodMA(85); //--- Parameter was set as fixed in MQL5 Wizard //--- (gray icon - fixed value equal to 85) filter0.SlowPeriod(Signal_MA_Shift); //--- Parameter was set as input variable //--- (blue icon - input parameter of Expert Advisor)
Si el parámetro es fijo y su valor no difiere del valor por defecto, no se escribirá en el código generado. En tal caso se usará el valor por defecto del parámetro (especificado en la clase correspondiente).
3. Crear y configurar las propiedades del objeto de rastreo
//--- Creation of trailing object CTrailingFixedPips *trailing=new CTrailingFixedPips; if(trailing==NULL) { //--- failed printf(__FUNCTION__+": error creating trailing"); ExtExpert.Deinit(); return(-4); } //--- Add trailing to expert (will be deleted automatically)) if(!ExtExpert.InitTrailing(trailing)) { //--- failed printf(__FUNCTION__+": error initializing trailing"); ExtExpert.Deinit(); return(-5); } //--- Set trailing parameters trailing.StopLevel(Trailing_FixedPips_StopLevel); trailing.ProfitLevel(Trailing_FixedPips_ProfitLevel);La configuración del objeto de rastreo también comprende varias etapas:
- Creación del objeto de rastreo;
- Adición del rastreo al experto;
- Establecer los parámetros de rastreo;
Si el objeto de rastreo no se inicializa con éxito, el asesor experto finalizará devolviendo un código (entre -4 y -5) que depende del paso en el que haya ocurrido el error.
4. Crear y configurar las propiedades del objeto de dinero
//--- Creation of money object CMoneyFixedLot *money=new CMoneyFixedLot; if(money==NULL) { //--- failed printf(__FUNCTION__+": error creating money"); ExtExpert.Deinit(); return(-6); } //--- Add money to expert (will be deleted automatically)) if(!ExtExpert.InitMoney(money)) { //--- failed printf(__FUNCTION__+": error initializing money"); ExtExpert.Deinit(); return(-7); } //--- Set money parameters money.Percent(Money_FixLot_Percent); money.Lots(Money_FixLot_Lots);
La configuración del objeto de gestión de dinero y riesgo también comprende varias etapas:
- Creación del objeto de dinero;
- Adición del dinero al experto;
- Establecer los parámetros del dinero;
Si el objeto de dinero no se inicializa con éxito, el asesor experto finalizará devolviendo un código (entre -6 y -7) que depende del paso en el que haya ocurrido el error.
5. Inicializar todos los indicadores usados en las clases
//--- Check all trading objects parameters if(!ExtExpert.ValidationSettings()) { //--- failed ExtExpert.Deinit(); return(-8); } //--- Tuning of all necessary indicators if(!ExtExpert.InitIndicators()) { //--- failed printf(__FUNCTION__+": error initializing indicators"); ExtExpert.Deinit(); return(-9); } //--- ok return(0);
Después de crear e inicializar objetos de señales de trading, rastreo y gestión de dinero, se llama al método ValidationSettings() del objeto ExtExpert. Después de esto, se llama al método InitIndicators() del objeto ExtExpert. Esto inicializa los indicadores usados en los objetos de la señal, rastreo y dinero.
El control de los eventos OnDeinit, OnTick, OnTrade y OnTimer se realiza llamando a los métodos adecuados de la clase ExtExpert.
Si quiere conocer los detalles de la implementación de los métodos CExpert, puede ver el código fuente del indicador que se encuentra en '\<client_terminal_directory>\MQL5\Include\Expert\expert.mqh'.
3. Comprobando el asesor experto creado en el probador de estrategias de MetaTrader 5
Si están presentes todos los componentes de la librería estándar, el código del asesor experto se compila con éxito:
Figura 10. Compilación con éxito del código fuente del Expert Advisor creado en el MQL5 Wizard
El asesor experto resultante operará de acuerdo con los algoritmos elegidos de las señales de trading, rastreo de posiciones abiertas y gestión de dinero y riesgo.
Puede comprobar el funcionamiento de su sistema de trading recién creado usando el probador de estrategias del terminal de cliente de MetaTrader 5. En la figura 11 puede ver los resultados de la prueba sobre los datos históricos con los ajustes por defecto (EURUSD, H1, 2010.01.01-2011.06.01):
Figura 11. Resultados de la prueba del Expert Advisor sobre los datos históricos (EURUSD, H1)
El mejor conjunto de parámetros del asesor experto puede obtenerse después de la optimización en el probador de estrategias de MetaTrader 5.
Conclusión
El uso de las clases de estrategias de trading facilita considerablemente la creación y la prueba de sus ideas de trading. Ahora puede construirse todo el código fuente del asesor experto directamente en MetaEditor usando su MQL5 Wizard en base a los módulos de la librería estándar lista para ser usada, empleándolos en sus propios módulos.
Si no quiere o no puede escribir sus propios módulos de señales de trading, siempre puede beneficiarse del servicio trabajos y encargar todo un robot de trading o solo los módulos que necesite. Este enfoque proporciona beneficios adicionales:
- Los costes de desarrollo de módulos separados deben ser inferiores al coste del asesor experto al completo.
- El módulo resultante puede reutilizarse para crear tanto un asesor experto autónomo como una familia completa de robots de trading (basados en este módulo) usando el MQL5 Wizard.
- El módulo adquirido debe cumplir estrictamente los requisitos del MQL5 Wizard, y esto proporciona un control adicional sobre la calidad del código.
Traducción del ruso hecha por MetaQuotes Ltd.
Artículo original: https://www.mql5.com/ru/articles/171





- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Usted acepta la política del sitio web y las condiciones de uso