Preguntas de los principiantes MQL5 MT5 MetaTrader 5 - página 614

 
newnek:

Hola, ¿podría decirmesi necesito el parámetro Parameter=Ka,int,21 en la señal de la biblioteca estándar?

Seleccionado en el proceso de optimización de la enumeración del tipo

Pero, cuando la señal desaparece de la selección al generar el EA, pero está compilando normalmente, es difícil sacar conclusiones - ¿qué pasa ......, ayuda con el código, no había ya una implementación?

p.d. Tengo que cambiar int por intTypecada vez en el EA final

Especifique el archivo exacto del módulo de señales y la línea de código...
 
Karputov Vladimir:
Especifique el archivo exacto del módulo de señales y la línea de código...

Por ejemplo, aquí está parte del código superior SignalRVI.mqh. En este caso, desaparece de la selección de señales cuando cambio el tipo int por intType

Si el ámbito es erróneo, lo pongo en un archivo separado con la enumeración #include <Libraries\myfunc.mqh>
//+------------------------------------------------------------------+
//|                                                    SignalRVI.mqh |
//|                   Copyright 2009-2013, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#include <Expert\ExpertSignal.mqh>
// wizard description start
//+------------------------------------------------------------------+
//| Description of the class                                         |
//| Title=----------------Signals of oscillator 'Relative Vigor Index'               |
//| Type=SignalAdvanced                                              |
//| Name=Relative Vigor Index                                        |
//| ShortName=RVI                                                    |
//| Class=CSignalRVI                                                 |
//| Page=signal_rvi                                                  |
//| Parameter=PeriodRVI,intType,15,Period of calculation                 |
//+------------------------------------------------------------------+
// wizard description end
//+------------------------------------------------------------------+
//| Class CSignalRVI.                                                |
//| Purpose: Class of generator of trade signals based on            |
//|          the 'Relative Vigor Index' oscillator.                  |
//| Is derived from the CExpertSignal class.                         |
//+------------------------------------------------------------------+
enum intType
  {
   p0 = 15, 
   p1 = 21, 
   p2 = 29 
}
;
class CSignalRVI : public CExpertSignal
  {
protected:
   CiRVI             m_rvi;            // object-oscillator
   //--- adjusted parameters
   intType               m_periodRVI;      // the "period of calculation" parameter of the oscillator
   //--- "weights" of market models (0-100)
   int               m_pattern_0;      // model 0 "the oscillator has required direction"
   int               m_pattern_1;      // model 1 "crossing of main and signal line"

public:
                     CSignalRVI(void);
                    ~CSignalRVI(void);
   //--- methods of setting adjustable parameters
   void              PeriodRVI(intType value)            { m_periodRVI=value;                 }
   //--- methods of adjusting "weights" of market models
   void              Pattern_0(int value)            { m_pattern_0=value;                 }
   void              Pattern_1(int value)            { m_pattern_1=value;                 }
   //--- method of verification of settings
   virtual bool      ValidationSettings(void);
   //--- method of creating the indicator and timeseries
   virtual bool      InitIndicators(CIndicators *indicators);
   //--- methods of checking if the market models are formed
   virtual int       LongCondition(void);
   virtual int       ShortCondition(void);

protected:
   //--- method of initialization of the oscillator
   bool              InitRVI(CIndicators *indicators);
   //--- methods of getting data
   double            Main(int ind)                   { return(m_rvi.Main(ind));           }
   double            DiffMain(int ind)               { return(Main(ind)-Main(ind+1));     }
   double            Signal(int ind)                 { return(m_rvi.Signal(ind));         }
   double            DiffSignal(int ind)             { return(Signal(ind)-Signal(ind+1)); }
   double            DiffMainSignal(int ind)         { return(Main(ind)-Signal(ind));     }
  };
//+------------------------------------------------------------------+
//| Constructor                                                      |
//+------------------------------------------------------------------+
CSignalRVI::CSignalRVI(void) : m_periodRVI(15),
                               m_pattern_0(60),
                               m_pattern_1(100)
  {
  }
 
newnek:

Hola, ¿podría decirmesi necesito el parámetro Parameter=Ka,int,21 en la señal de la biblioteca estándar?

Seleccionado en el proceso de optimización de la enumeración del tipo

Pero, cuando la señal desaparece de la selección al generar el EA, pero está compilando normalmente, es difícil sacar conclusiones - ¿qué pasa ......, ayuda con el código, no había ya una implementación?

p.d. Tengo que cambiar int por intType cada vez en el EA final

No tiene que cambiar nada - simplemente genere su Asesor Experto basado en el indicador "Relative Vigor Index", luego en el probador de estrategias, en la pestaña "Settings" seleccione una de las optimizaciones, vaya a la pestaña "Parameters" y establezca el intervalo y el valor del parámetro "Relative Vigor Index(10) Period of calculation":

RVI

Pero como sólo quiere utilizar tres valores del intervalo 15-29, necesita escribir una condición de comprobación en OnInit():

//+------------------------------------------------------------------+
//| Initialization function of the expert                            |
//+------------------------------------------------------------------+
int OnInit()
  {
   if(Signal_RVI_PeriodRVI!=15 && Signal_RVI_PeriodRVI!=21 && Signal_RVI_PeriodRVI!=29)
      return(INIT_PARAMETERS_INCORRECT);
//--- Initializing expert

Después de ejecutar la optimización, se puede ver que el probador ha funcionado sólo para los parámetros 15, 21 y 29:

Optimización selectiva

 
Karputov Vladimir:

No tiene que cambiar nada - simplemente genere su Asesor Experto basado en el indicador "Índice de Vigor Relativo", luego seleccione una de las optimizaciones en el Probador de Estrategias, vaya a la pestaña "Parámetros" y establezca el intervalo y los valores para el parámetro "Índice de Vigor Relativo(10) Periodo de cálculo":


Pero como sólo quiere utilizar tres valores del intervalo 15-29, necesita escribir una condición de comprobación en OnInit():

Después de ejecutar la optimización, se puede ver que el probador ha funcionado sólo para los parámetros 15, 21 y 29:

Gracias, entiendo tu idea, muy interesante, pero habrá muchos pasos perdidos (aunque probablemente tampoco se pierda tiempo). He conseguido cambiar manualmente a tipo enum en el EA generado. Y me gustaría automatizarlo aún más.
 
newnek:
Gracias, entiendo tu idea, muy interesante, pero habrá muchos pasos perdidos (aunque probablemente tampoco se pierda tiempo). He conseguido cambiar manualmente a tipo enum en el EA generado. Y me gustaría automatizarlo aún más.
Habrá pasos vacíos, pero no tardan, porque OnInit() saldrá por incumplimiento de la condición y el siguiente paso de la optimización se iniciará inmediatamente.
 

Buenas tardes... Yo mismo soy un programador de C++. Hace poco decidí probarme a mí mismo en este campo... Quiero escribir un Asesor Experto o un Asesor Experto, mi estrategia está bien, mi plataforma es MT4... Así que, estoy enfrentando este problema, yo uso en mi Asesor Experto MACD.... Lo escribiré en breve...

Por ejemplo, creo un nuevo template EA, añado x=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0); y digamos que no hay nada más... Compilo, pruebo, todo está bien, al final de la prueba muestra un gráfico macd con los parámetros especificados, todo está bien.

¡La segunda opción - creo una nueva plantilla EA en el OnTick, añadir un indicador de terceros RSICur = iCustom(NULL,0, "My_Induk",14,1,0,21,1,65,35, "DodgerBlue", "Magenta",50,50, "Red", "Green",0,0); compilar, probar, todo está bien, pero!Cuando termino la prueba o cancelo la prueba en la ventana de miles de estos indicadores, entiendo que en cada tick se crea un nuevo indicador ... No entiendo por qué, porque el MAKD estándar nace una vez y ya está...

Puede alguien explicar el problema... Estoy tratando de utilizar el mismo problema con otro indicador no estándar...

P.D. este es mi primer post... Por favor, no me culpes por no encontrar la manera de ocultar la foto bajo un spoiler.

Captura de pantalla
 

No sé de qué se trata pero encontré una solución...

RSICur=iCustom(NULL,0, "My_Induk",14,1,0,0,21,1,65,35, "DodgerBlue", "Magenta",50,50, "Red", "Green",0,0);- dibuja el gráfico por tick

RSICur=iCustom(NULL,0, "My_Induk",0,0); - Ok, un gráfico, sólo se actualizan los datos de la variableRSICur por tick...No entiendo cuál es la lógica, en principio me basta, pero me gustaría entender por qué funciona bien sólo con la configuración por defecto...

 
Игорь Марин:

Buenas tardes... Yo mismo soy un programador de C++. Hace poco decidí probarme a mí mismo en este campo... Quiero escribir un Asesor Experto o un Asesor Experto, mi estrategia está bien, mi plataforma es MT4... Así que, estoy enfrentando este problema, yo uso en mi Asesor Experto MACD.... Lo escribiré en breve...

Por ejemplo, creo un nuevo template EA, añado x=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0); y digamos que no hay nada más... Compilo, pruebo, todo está bien, al final de la prueba, muestra un gráfico macd con los parámetros especificados, todo está bien.

¡La segunda opción - creo una nueva plantilla EA en el OnTick, añadir un indicador de terceros RSICur = iCustom(NULL,0, "My_Induk",14,1,0,21,1,65,35, "DodgerBlue", "Magenta",50,50, "Red", "Green",0,0); compilar, probar, todo está bien, pero!Cuando termino la prueba o cancelo la prueba en la ventana de miles de estos indicadores, entiendo que en cada tick se crea un nuevo indicador ... No entiendo por qué, porque el MAKD estándar nace una vez y ya está...

Puede alguien explicar el problema... Estoy tratando de utilizar el mismo problema con otro indicador no estándar...

P.D. este es mi primer post... Por favor, no me regañes por no encontrar la forma de ocultar la foto bajo el spoiler.

La foto está bien, no está escondida.

¿Escribiste esto My_Induk o lo encontraste en alguna parte? Entiendo que el indicador está torcido. Si tienes el código fuente, publícalo - vamos a ver cuál es el problema.

 
Игорь Марин:

No sé de qué se trata pero encontré una solución...

RSICur=iCustom(NULL,0, "My_Induk",14,1,0,0,21,1,65,35, "DodgerBlue", "Magenta",50,50, "Red", "Green",0,0);- dibuja el gráfico por tick

RSICur=iCustom(NULL,0, "My_Induk",0,0); - Ok, un gráfico, sólo se actualizan los datos de la variableRSICur por tick...No entiendo cuál es la lógica, en principio me basta, pero me gustaría entender por qué funciona bien sólo con la configuración por defecto...

Esto ocurre cuando no se han pasado correctamente los parámetros del indicador.
 
Alexey Volchanskiy:

La foto está bien, aquí no hay que esconderse.

¿Escribiste esto My_Induk o lo encontraste en alguna parte? Supongo que el indicador está torcido. Si tienes el código fuente, publícalo - vamos a ver cuál es el problema.

Vladislav Andruschenko:
Esto ocurre cuando no se han pasado correctamente los parámetros del indicador.

Gracias. Lo he descubierto... He estado hurgando todo el día y no he podido averiguarlo... Yo también soy programador, pero eso pasa... He cometido un error de sintaxis, he tenido que pasar los parámetros de color entre comillas al llamar al indicador...

iCustom(NULL,0,"My_Induk",14,1,0,21,1,65,35,"DodgerBlue","Magenta",50,50,"Red","Green",0,0);

eso es lo que causó este mal funcionamiento... ) ¡¡¡Gracias!!! ¡¡¡Seguro que habrá más preguntas!!!

Razón de la queja: