Discusión sobre el artículo "¡Cree su propio robot de trading en 6 pasos!"

 

Artículo publicado ¡Cree su propio robot de trading en 6 pasos!:

Si no sabe como se construyen las clases trade y le asustan las palabras "Programación Orientada a Objetos", este artículo es para usted. De hecho, no necesita conocer más detalles para escribir su propio módulo de señales de trading. Tan solo siga algunas reglas simples. Todo lo demás será realizado por el MQL5 Wizard y podrá disponer de un robot de trading ¡listo para ser usado!

Autor: MetaQuotes Software Corp.

[Eliminado]  
Y todo estaría bien - los robots comerciales se crean en 5 clics del ratón, se pueden probar en un probador para оптимизации параметров sistema de comercio, usted puede poner el robot resultante para el comercio en su cuenta y no es necesario modificar nada con un archivo.
¿Se puede permitir que un robot de este tipo para el comercio? Después de todo, la biblioteca de clases de comercio no contiene el procesamiento de varios errores, que era una condición necesaria, incluso en el campeonato, y mucho menos en el comercio real. Es más correcto escribir que se puede crear un Asesor Experto en cinco clics sólo para una rápida comprobación de las ideas en el probador, pero tal Asesor Experto será inadecuado para el comercio.
 
¡Gracias por tu trabajo! ¡Y gracias por la foto con la caja y los cubos! Sistematiza :-)
 

para continuar...

Se me ocurrió convertir las líneas de este ejemplo:

if(m_method_fast!=MODE_SMA && m_method_fast!=MODE_EMA && m_method_fast!=MODE_SMMA && m_method_fast!=MODE_LWMA)

if(m_método_lento!=MODE_SMA && m_método_lento!=MODE_EMA && m_método_lento!=MODE_SMMA && m_método_lento!=MODE_LWMA)

En el algoritmo

1) dos matrices:

el primero contiene m_method_fast y m_method_slow

el segundo contiene los valores de la enumeración ENUM_MA_METHOD.

2) En un bucle, tomando el valor del primer array, comprobar si se encuentra en el segundo.

¿Puedes decirme cómo implementar esto?

Entiendo que es necesario conectar CArray . Pero, ¿qué tipo?

Quién puede, por favor, escribir una parte del código, porque las cosas básicas elementales, y con la sintaxis no puedo coger todavía.

¡Gracias!

Документация по MQL5: Стандартные константы, перечисления и структуры / Константы индикаторов / Методы скользящих
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы индикаторов / Методы скользящих
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы индикаторов / Методы скользящих - Документация по MQL5
 
bivmail:

para continuar...

Se me ocurrió convertir las líneas de este ejemplo:

if(m_method_fast!=MODE_SMA && m_method_fast!=MODE_EMA && m_method_fast!=MODE_SMMA && m_method_fast!=MODE_LWMA)

if(m_método_lento!=MODE_SMA && m_método_lento!=MODE_EMA && m_método_lento!=MODE_SMMA && m_método_lento!=MODE_LWMA)

En el algoritmo

1) dos matrices:

el primero contiene m_method_fast y m_method_slow

el segundo contiene los valores de la enumeración ENUM_MA_METHOD.

2) En un bucle, tomando el valor del primer array, comprobar si se encuentra en el segundo.

¿Puedes decirme cómo implementar esto?

Entiendo que es necesario conectar CArray . Pero, ¿qué tipo?

¿Quién puede, por favor, escribir una parte del código, porque las cosas básicas elementales, y con la sintaxis que aún no puedo captar.

¡Gracias!

Así:

func(int& array1[],int& array2[])
  {
   int total1=ArraySize(array1);
   int total2=ArraySize(array2);
//---
   for(int i=0;i<total1;i++)
     {
      for(int j=0;j<total2;j++)
        {
         if(array1[i]==array2[j])
           {
            // encontrado
           }
        }
     }
  }
 

Sí, ya he llegado a este punto en C++ para principiantes :-)

Excepto que allí no existe tal tipo de datos ENUM_MA_METHOD

¿Cómo puedo averiguar en qué tipo de datos consiste esta enumeración? ¿Es posible hacer un bucle a través de la propia enumeración ENUM_MA_METHOD?

Ahora veo dos maneras:

//primera forma de describir ambas matrices

  ENUM_MA_METHOD l_array_enum_ma_method[3];

  l_array_enum_ma_method[0]=MODE_SMA;

  l_array_enum_ma_method[1]=MODE_EMA;

  l_array_enum_ma_method[2]=MODE_SMMA;

  l_array_enum_ma_method[3]=MODE_LWMA;

  print("array size %d", ArraySize(l_array_enum_ma_method));

  print("ENUM_MA_METHOD size %d", ArraySize(ENUM_MA_METHOD));

  

   ENUM_MA_METHOD l_array_select_method[1];

   l_array_select_method[0]=m_MethodFast;

   l_array_select_method[1]=m_MethodSlow;

   //además según el esquema

   

   /segundo modo, conectar la biblioteca

   //#include <Arrays\ArrayInt.mqh>

     CArrayInt *l_array_enum_ma_method=new CArrayInt;

   l_array_enum_ma_method[0]=MODE_SMA;

  l_array_enum_ma_method[1]=MODE_EMA;

  l_array_enum_ma_method[2]=MODE_SMMA;

  l_array_enum_ma_method[3]=MODE_LWMA;

   l_array_enum_ma_method.Sort();

   //--- elemento de búsqueda

   if(l_array_enum_ma_method.Search(m_MethodFast)!=-1) printf("Element found");

   else                        printf("Element not found");

   //--- borrar array

   delete l_array_enum_ma_method;

en la segunda forma necesitas conectar una librería de un tipo específico, ¿y qué tipo es ENUM_MA_METHOD?

hmm... extraño, hice clic en responder y resultó ser un nuevo post....

 
Vea cómo insertar el código correctamente.
 
bivmail:

Sí, ya he llegado a este punto en C++ para principiantes :-)

Excepto que allí no existe tal tipo de datos ENUM_MA_METHOD

¿Cómo puedo averiguar en qué tipo de datos consiste esta enumeración? ¿Es posible hacer un bucle a través de la propia enumeración ENUM_MA_METHOD?

Ahora veo dos maneras:

en la segunda forma necesitas conectar una librería de un tipo específico, ¿y qué tipo es ENUM_MA_METHOD?

hmm... que raro, hice click en responder y resultó ser un nuevo post....

Primera manera:

 ENUM_MA_METHOD l_array_enum_ma_method[]={MODE_SMA,MODE_EMA,MODE_SMMA,MODE_LWMA};
//--- más adelante

Segunda manera:

#include <Arrays\ArrayInt.mqh>

CArrayInt l_array_enum_ma_method;
//---
l_array_enum_ma_method.Add(MODE_SMA);
l_array_enum_ma_method.Add(MODE_EMA);
l_array_enum_ma_method.Add(MODE_SMMA);
l_array_enum_ma_method.Add(MODE_LWMA);
//--- más adelante

No puedo entender por qué se requieren tantos pasos?

 

ups... muchas gracias, eso es lo que intento hacer... off.

En el primer caso, ya he visto esta forma de grabar, pero aún no me he dado cuenta de lo que necesito,

y en el segundo caso - Yo estaba confundido por ArrayInt. Pensé que desde Int, significa que sólo se almacena el valor numérico, pero ,

parece que el compilador convierte MODE_SMA en un número, y al obtener el valor de nuevo, será necesario realizar una conversión implícita (usando paréntesis) al tipo(ENUM_MA_METHOD), es decir, algo similar a lo siguiente.

  ENUM_POSITION_TYPE type=(ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE);

P.D. En la tercera sección 3. Métodos para establecer parámetros, deberíamos borrar las líneas declaradas prematuramente, creo que
:

 CiCustom          m_fast_ma;        // indicador como objeto
   CiCustom          m_slow_ma;        // indicador como objeto
 
bivmail:

P.D. En la tercera sección 3. Métodos para establecer parámetros, creo que deberíamos borrar las líneas declaradas prematuramente:

Eliminado, gracias.
 

Me estaba emocionando, pero no puedo evitarlo (comm - leí sobre la transferencia de direcciones de memoria, pero tampoco funcionó así):

El compilador devuelve el error 'm_MethodFast' - expresión constante requerida, ' m_MethodSlow' - expresión constante requerida

Por supuesto, estas son preguntas para un dummies. tal vez debería hacer este tipo de preguntas en otro hilo, a fin de no obstruir el artículo?

//primera forma de describir ambas matrices
//int *Finger_m_MethodFast;
//int *Finger_m_MethodSlow;
//Finger_m_MethodFast=&m_MethodFast;
//Finger_m_MethodFast=&m_MethodSlow;
// int l_array1_select_method[]={Finger_m_MethodFast,Finger_m_MethodFast};
   ENUM_MA_METHOD l_array1_select_method[]={m_MethodFast,m_MethodSlow};
   ENUM_MA_METHOD l_array2_enum_ma_method[]={MODE_SMA,MODE_EMA,MODE_SMMA,MODE_LWMA};

   int total_array1=ArraySize(l_array1_select_method);
   int total_array2=ArraySize(l_array2_enum_ma_method);
   bool NoErrorsFlag=false;
   for(int i_array1=0;i_array1<total_array1;i_array1++)
     {

      for(int i_array2=0;i_array2<total_array2;i_array2++)
        {
         if(l_array1_select_method[i_array1]=l_array2_enum_ma_method[i_array2])
           {
            NoErrorsFlag=true;
           }
        }
      if(!NoErrorsFlag)
        {
         PrintFormat("¡Tipo de suavizado %s media móvil no válido!".,EnumToString(l_array1_select_method[i_array1]));
        }

     }

   if(!NoErrorsFlag)
     {
      return(false);
     }