Errores, fallos, preguntas - página 2815

 

Error durante la ejecución:

class A {
public:
        A( int ) { Print( 1 ); }
        A( A&  ) { Print( 2 ); }
};
void OnStart()
{       
        int a = 5;
        {
                A a( a );         //(1)
        }
}

  • Resultado en MQL: 2
  • Esperado en MQL: 1

De hecho, este ejemplo se ejecuta mediante reglas C++

void OnStart()
{
        int a = 5;
        {
                A a( a );         //(2)
        }
}

mientras que el siguiente ejemplo funciona en MQL por sus reglas (diferentes a las de C++)

void OnStart()
{       
        int a = 5;
        {
                int a = a;         //(3)
                printf( "%d", a );
        }
}

  • Resultado (3) en MQL: 5
  • en C++: 0 (o número aleatorio)

Una variable se considera declarada

  • desde el momento en que aparece (*), o
  • desde el final de la declaración (**)

En С++ hay un único enfoque (*), mientras que en MQL en el caso de (2) es (*), y en el caso de (3) es (**) ¿Cuál es la diferencia fundamental entre (2) y (3)?

Esta es la cuestión de por qué en MQL en un caso una variable se considera declarada desde el momento en que aparece y en el otro caso desde que se termina de declarar?

 

Error de compilación:

#import "z.ex5"
#import
#define  MACRO1( x )    (x) //(*)
#define  MACRO2( x )    MACRO1(x)
int f( int z )
{
        return MACRO2( z ); //Error: '()' - operand expected
}

Por lo demás:

#define  MACRO1( x )    x  //(**)

DE ACUERDO. ¿Cuál es la diferencia entre (*) y (**)?

 
Fast235:

No puedo cargar el historial en un terminal vacío o en un símbolo no utilizado previamente

Cuando lo ejecuto en M1 lo carga todo, en H1 carga ~720 barras y ya está, el indicador necesita mucho menos para funcionar, pero la carga de más barras se detiene y el indicador no se renderiza correctamente(si compruebo unas 900 barras, el indicador deja de funcionar del todo),

.....

He adjuntado el script dehttps://www.mql5.com/ru/docs/series/timeseries_access, no quise usarlo durante mucho tiempo porque era demasiado engorroso. Lo he añadido al indicador, he añadido un par de líneas y funciona bien,

¡Este script está bien diseñado y es fácil de integrar en un robot de comercio, es una necesidad para la multidivisa y los marcos de tiempo multitiempo! Como no se carga o se congela dependiendo de los indicadores de trabajo,

Lo mismo puedes conseguir incluso con el MA estándar, pero debido a sus peculiaridades, etc. mucha gente no se dará cuenta y simplemente cambiará el gráfico o el periodo, y entonces se recargará...

Документация по MQL5: Доступ к таймсериям и индикаторам / Организация доступа к данным
Документация по MQL5: Доступ к таймсериям и индикаторам / Организация доступа к данным
  • www.mql5.com
Прежде чем ценовые данные будут доступны в терминале MetaTrader 5, их необходимо получить и обработать. Для получения данных требуется подключение к торговому серверу MetaTrader 5. Данные поступают с сервера по запросу терминала в виде экономно упакованных блоков минутных баров. Механизм обращения к серверу за данными не зависит от того, каким...
 
Buenas tardes ! MT5 en Android 4.4 ha dejado de actualizarse. Ni siquiera puedo abrir la aplicación. Si alguien se ha encontrado con ello, le agradecería la ayuda.
Gracias.
 
fxsaber:

Pueden obtenerse a través de Expert.mqh en OnTesterInit, ya que el Asesor Experto se ejecutará en el modo marco para establecer los parámetros.

La llamada de EXPERT::Parameters tiene el tipo de cadena por alguna razón. ¿Es un error o una restricción?

 
Stanislav Korotky:

Como resultado de la llamada a EXPERT::Parameters todos los parámetros son de tipo string por alguna razón. ¿Es un error o una limitación?

Un ejemplo mejor.

 
Andrey:
Buenas tardes ! MT5 en Android 4.4 ha dejado de actualizarse. Ni siquiera puedo abrir la aplicación. Si alguien se ha encontrado, agradecería la ayuda.
Gracias.

El mínimo es Android5, eso es lo que escribieron los desarrolladores recientemente.

 
fxsaber:

Un ejemplo sería mejor.

Bueno el ejemplo es estándar para este método, más o menos:

    EXPERT::Parameters(0, parameters, names);
    for(int i = 0; i < ArraySize(parameters); i++)
    // здесь parameters[i].type всегда равно TYPE_STRING, вне зависимости от фактического типа параметра

Esto también puede verse en el código fuente de la propia biblioteca Expert.mqh.

PS. Trasladó la discusión al tema de la biblioteca.

 

Otro error con ParameterGetRange/ParameterSetRange.

Llamar aParameterSetRange no cambia la bandera para incluir el parámetro en la optimización para la posterior llamada aParameterGetRange:

// параметр "name" изначально включен в оптимизацию
// в одной части кода...
ParameterSetRange("name", false, value, start, step, stop);
...
// в другой части кода финализация проверок
ParameterGetRange("name", enabled, value, start, step, stop); // получаем enabled=true, т.е. изменения внесенные ParameterSetRange не применились
 
Stanislav Korotky:

Otro error con ParameterGetRange/ParameterSetRange.

Una llamada a ParameterSetRange no cambia la bandera para incluir el parámetro en la optimización para la posterior llamada aParameterGetRange:

Recuerdo que cuando me metí en este tema, había muchos matices. Algo se mostró bien o mal, dependiendo de la función OnTester*. Trate de llamarlo en diferentes On-funciones.