Errores, fallos, preguntas - página 1393

 
galustyan10:

HOLA, ¿PODRÍAIS ACONSEJARME, CUANDO ABRO UNA CUENTA REAL EN MT5, CUÁNTO TIEMPO TARDA UN EMPLEADO DE LA EMPRESA EN LLAMARME Y COMPLETAR EL PROCEDIMIENTO DE APERTURA DE LA CUENTA?

¿Por qué gritas? Recibirás tu nombre de usuario y contraseña cuando registres tu cuenta. Por lo general, se trata de una cuenta personal en el sitio web del corredor.

 
Error de compilación:'a' - no es un miembro estático
class A     { int a; };
class B : A { void a(); };
void B::a() {}
De lo contrario,
class A     { int a; };
class B : A { void a() {} };
está bien. ¿Cuál es la diferencia?
 

MT5 1159. Desajuste de la escala horizontal si se establece una fuente mediana o grande en la "personalización". Win7, 32b

 

¿Cómo hace MT5 para autoescalar los indicadores en una ventana separada?

Indicador en una ventana aparte

El terminal hace el máximo de 0,5603, mientras que el valor máximo real de cualquier tampón indicador en todo el historial es de 0,0605. Ni que decir tiene que en MT4 no existen estos problemas.

 
Ilya Malev:

¿Cómo hace MT5 para autoescalar los indicadores en una ventana separada?


El terminal hace el máximo de 0,5603, mientras que el valor máximo real de cualquier tampón indicador en todo el historial es de 0,0605. Ni que decir tiene que en MT4 no existen estos problemas.

Comprueba los valores que tienes en el buffer del indicador. Puedes hacerlo manualmente con "Crosshair", puedes hacerlo con MQL5.
 
Karputov Vladimir:
Comprueba los valores que tienes en el buffer del indicador. Puedes hacerlo manualmente con "Crosshair", puedes hacerlo con MQL5.

Te dije que el máximo en toda la historia es 0,0605. Se comprueba en OnCalculate comparando el valor máximo de cada buffer en cada barra.

P.D. En realidad ya he descubierto cuál es el problema. Diferente algoritmo para calcular los máximos en MT4 y MT5. Me gustaría entender la razonabilidad de cambiar este algoritmo, pero es una pregunta retórica.

El problema estaba en MT4 - los valores del buffer de los indicadores mostrados en la ventana de datos afectan a la escala de una ventana de indicadores separada, incluso si su visualización en el gráfico está desactivada (estilo DRAW_NONE). Resolví el problema haciéndolos negativos y fijando el mínimo en 0. Todo se mostraba perfectamente, porque sólo los valores del indicador por encima del mínimo fijado (0) participaban en el cálculo de la escala. Ahora los valores por debajo del mínimo fijado participan en el cálculo de la escala. Es decir, no han añadido la posibilidad de eliminar los valores del buffer del cálculo de la escala (o yo no lo he averiguado todavía), pero han eliminado la posibilidad de excluirlos de la escala poniéndolos por debajo del mínimo o del máximo. (todo esto se aplica a los búferes DRAW_NONE no visualizados)

 
Ilya Malev:

Te dije que el máximo en toda la historia es 0,0605. Se comprueba en OnCalculate comparando el valor máximo de cada buffer en cada barra.

P.D. En realidad ya he descubierto cuál es el problema. Diferente algoritmo para calcular los máximos en MT4 y MT5. Me gustaría entender la razonabilidad de cambiar este algoritmo, pero es una pregunta retórica.

Cualquiera de los valores que se pasen al buffer del indicador, serán los mismos. Otra variante: al principio del inicio no se analiza cada elemento del buffer de indicadores y se obtienen como resultado valores aleatorios en el buffer.

Por lo tanto, no se puede prescindir de mirar el código.

 
Karputov Vladimir:

Otra opción: al principio del inicio no se cuentan todos los elementos del buffer de indicadores y se acaban teniendo valores aleatorios en el buffer.

Ya me lo he imaginado. Por cierto, también fue una sorpresa inesperada de MT5 :)
 
Karputov Vladimir:

De todos modos, no puedes prescindir de mirar el código aquí.

Bien, aquí está el código

#property indicator_separate_window
#property indicator_buffers 2
#property indicator_plots 2
#property indicator_minimum 0
#property  indicator_color1 clrRed
#property  indicator_type1 DRAW_LINE
#property  indicator_label1 "Стд.Откл."

double buffer1[], buffer2[];

int i_std=INVALID_HANDLE;

void OnInit(){
   SetIndexBuffer(0, buffer1);
   SetIndexBuffer(1, buffer2);
   PlotIndexSetInteger(1, PLOT_DRAW_TYPE, DRAW_NONE);
   PlotIndexSetInteger(1, PLOT_SHOW_DATA, true);
   ArraySetAsSeries(buffer1, true);
   ArraySetAsSeries(buffer2, true);
   i_std=iStdDev(Symbol(), Period(), 20, 0, MODE_SMA, PRICE_CLOSE);
}

void OnDeinit(const int reason){
   if(i_std!=INVALID_HANDLE)  IndicatorRelease(i_std);
}

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[]){

   for(int i=rates_total-MathMax(1, prev_calculated); i>=0; i--){
      buffer1[i]=_ind(i_std, 0, i);
      buffer2[i]=-MathRand()%5;
   }
   return(rates_total);
}

double _ind(int hnd, int buf, int index){
   if(index < 0) return(EMPTY_VALUE);
   double Arr[];
   return(CopyBuffer(hnd, buf, index, 1, Arr)==1?Arr[0]:EMPTY_VALUE);
}
 

No sé si es un bug o un comportamiento extraño pero en el probador de estrategias de MT4 los buffers de los indicadores tienen un tamaño de unas 1000 +/- 3 celdas.

En otros tipos de pruebas -demostrativas o reales- el número de celdas en el búfer es aproximadamente el mismo que el número de barras permitido en la configuración del terminal.

Quiero preguntar si es un bug o se suponía que fuera así, también me he dado cuenta de que los indicadores se pueden editar mientras se hace la prueba sin parar el probador. Todavía no he leído ninguna información en ningún sitio sobre los Asesores Expertos, pero ¡gracias por ello!