Errores, fallos, preguntas - página 2648

 
Vladimir Karputov:

Haga clic en la cabecera de una de las columnas: Símbolo, Billete, Hora.

Haga clic con su TECLA IZQUIERDA.

Ha funcionado, gracias, ya he cerrado varias veces el par equivocado.
 
Сергей Проценко:
Dependiendo del beneficio, si el beneficio es mayor, baja, la otra orden tiene un beneficio mayor, intercambia lugares. Si el beneficio del euro es mayor que el del oro, la orden del euro estará en la parte inferior y la del oro estará por encima.

Ha clasificado por beneficios. Seleccione un criterio de clasificación diferente.

 
fxsaber :
¿Puede decirme cómo evitar un error de compilación?

No es tan complicado como parece:

 #define  PRINT(x) ; Print ( #x,  ":" , string (x))

struct STRUCT_BASE
{
   static const int Array[];
};
static const int STRUCT_BASE::Array[] = { 1 , 2 };

struct STRUCT : STRUCT_BASE
{
   int Array2[ sizeof (Array)];
};


void OnStart ()
{
   static const int Array[] = { 1 , 2 };
   int Array2[ sizeof (Array)];
  
  PRINT( ArraySize (Array));             //2 
  PRINT( ArraySize (Array2));           //8
  
  
  STRUCT s;
  PRINT( ArraySize (s.Array));           //2
  PRINT( ArraySize (s.Array2));         //8
}
 
Sergey Dzyublik:

No es tan complicado como parece:

Gracias, no llegué a la básica.

 
No puedo comprobar el código base, elarchivo principal no se encuentra, pero está ahí. Por favor, averigüe la razón (si los moderadores pueden). Estoy pensando en volver a publicar en blogs, ahí no hay problemas.
 
Stanislav Korotky:
No puedo comprobar el código base, dicearchivo principal no encontrado, pero está ahí. Por favor, averigüe la razón (si los moderadores pueden). Estoy pensando en volver a publicar en blogs, ahí no hay tantos problemas.

coloca el mq5 en la carpeta "default".

 

Dos preguntas de inmediato para el compilador MT5 (build 2321):

#define  PRINT(x) ; Print(#x, ":", string(x))
#ifdef __cplusplus
    #include<iostream>
#endif


template<typename T>
class A{
};

template<typename T>
class B : public A<T>{
};


template<typename T>
void func(B<T> &it1){
   printf("C++:1");                      //MQL:2         
}

////ERRROR: 'func' - template functions overloading is not supported yet
//template<typename T>     
//void func(T &it1){ 
//  printf("C++:2");                               
//}
template<typename T>         
void func(T &it1, T* = NULL){
   printf("C++:2");                       //MQL:1        
}

template<typename T>
void func(A<T> &it1){
   printf("C++:3");                       //MQL:3
}


void OnStart(){
   B<int> b;
   func(b);
}

int main(){
   OnStart();
   return 0;
}

1. Las prioridades de ejecución de las funciones de plantilla en MQL no se corresponden con las de las funciones de plantilla en C++ (en línea: https://onlinegdb.com/Hkvz8Hu7L).
Así, en C++, cuando las tres funciones de plantilla están presentes, se ejecuta la función de plantilla con el resultado "C++:1", si se elimina entonces se ejecuta "C++:2", y si se elimina entonces se ejecuta "C++:3".
Las prioridades en MQL son bastante diferentes: "C++:2" seguido de "C++:1" y "C++:3".


No está claro por qué la primera de las funciones está prohibida en MQL, mientras que la función idéntica con un parámetro ficticio ya está permitida:

//ERRROR: 'func' - template functions overloading is not supported yet
template<typename T>     
void func(T &it1){ 
  printf("C++:2");                               
}

// OK
template<typename T>         
void func(T &it1, T* = NULL){
   printf("C++:2");                              
}
 

Hola a todos.

¿Alguien se ha encontrado con el problema de probar robots multidivisa?

¿Se están descargando todos los pares de divisas necesarios para el EA?

Estoy tratando de probar dos pares, por ejemplo EURUSD GBPUSD:

Si pruebo en EURUSD (probando EURUSD GBPUSD)- el resultado es 1,

Si probamos en GBPUSD (probando EURUSD GBPUSD), el resultado es 2, es decir, diferente

Si probamos el USDCHF (probando el EURUSD GBPUSD) - el resultado es 3, es decir, diferente



Los resultados no son muy diferentes, unas pocas docenas de operaciones (durante 2 meses), pero el resultado es diferente para cada par (aunque probamos ciertos pares EURUSD GBPUSD)

Inmediatamente voy a suponer: Todo el código funciona con la variable, Symb , que toma Symbol() del bucle. Es decir, código único, pero dentro del código a la variable Symb se le asigna su propio valor.


¿Puede ser que, debido a las diferentes cotizaciones, ticks, calidad de la historia para los diferentes pares (en ese EURUSD y GBPUSD siempre se prueban), los resultados de la prueba son diferentes para los diferentes pares?

Es decir

¿Puede ser que la prueba se haya realizado para el EURUSD, y que se necesiten menos cotizaciones para el GBPUSD?

и

¿Es posible que la prueba se haya establecido para el GBPUSD y que se descarguen menos cotizaciones para el EURUSD?

 
fxsaber:

Coloca el mq5 en la carpeta "por defecto".

Sé muy bien que el módulo principal debería estar sin carpetas - es, la carpeta por defecto que ellos mismos "terminan" bajando las opciones a la derecha de los botones de descarga.

No funciona.

 
En C++ compila y funciona (en línea: https://onlinegdb.com/Syn90dd7I), pero en MQL el error: "'func' - llamada ambigua a función sobrecargada"

#define  PRINT(x) ; Print(#x, ":", string(x))
#ifdef __cplusplus
    #include<iostream>
#endif


template<typename T>
class A{
};

template<typename T>
class B : public A<T>{
};

template<typename T>
class C : public B<T>{
};


template<typename T>
void func(B<T> &it1){
   printf("C++:1");                      
}

template<typename T>
void func(A<T> &it1){
   printf("C++:2");                      
}


void OnStart(){
   C<int> c;
   func(c);            //ERROR: 'func' - ambiguous call to overloaded function
}

int main(){
   OnStart();
   return 0;
}
Razón de la queja: