Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 1294

 
ANDREY:

¡Buenos días a todos!

Estoy intentando pasar de mql4 a mql5.

Pregunta: ¿Por qué mql5 calcula y muestra una expresión desconocida para mí como 2,99999999 - (menos) 05 en lugar de la diferencia entre el precio actual y el valor de la variable Hay, que debería ser <1 (como en mql4)?

¿Cómo puedo hacer que mql5 calcule correctamente la diferencia entre estos valores? Normalizo todos los valores utilizando NormalizeDouble(), pero los valores anteriores

los valores se muestran sin cambios. Esto me resulta extraño ya que ambos valores son de doble tipo

Gracias a todos por su ayuda.


2,99999999 -(menos)05= 2,99999999 / 100000 = 0,0000299999999. Así es como se hace en matemáticas.

-(menos)05 es dividir por 10 a la quinta potencia.

 
IndependentMK:

Hola de nuevo.
Por favor, preste atención a la pregunta de un novato.
Necesito señalar errores en el código, porque en el probador, el Asesor Experto no abre órdenes...
El compilador no muestra errores ni advertencias y lo mismo en el diario, no hay errores...

No se abre porque no se cumple una de las condiciones.

Es

while(MA_Smoth_B > MA_Smoth_S)

o esto

if(MA_Simpl_B_Op < MA_Simpl_S_Op && MA_Simpl_B_Cl > MA_Simpl_S_Cl)

Comenta los dos flashes // y verás cuál es. Así encontrará el error.

 
Александр:

2,99999999 -(menos)05= 2,99999999 / 100000 = 0,000029999999999. Así es como se hace en matemáticas.

-(menos)05 es dividir por 10 a la quinta potencia.

Gracias por la respuesta, pero ¿por qué el programa no calcula la diferencia entre el precio 1,33671 y Hay 1,33664 en lugar de la expresión, que debería ser 0,00007, sino que emite la expresión?

Al mismo tiempo, cuando reemplazo la variable Hay con 1,33664 por la constante 1,33664( SymbolInfoDouble(Symbol(),SYMBOL_BID) - 1,33664 ), el programa calcula la diferencia real entre estos valores, es decir 0,00007. De hecho, la variable Hay en el código toma el valor del precio de apertura de la orden en el tick anterior, que es un valor doble de 1,33664.

Gracias de antemano por su ayuda.

 
ANDREY:

Gracias por la respuesta, pero ¿por qué el programa no calcula la diferencia entre el valor del precio 1,33671 y Hay 1,33664 en lugar de la expresión, que debería ser 0,00007, sino que emite la expresión?

Gracias de antemano por el consejo.

DoubleToString(). No se trata de MQL5, se trata de la salida incorrecta de valores reales en el registro. Esto es igualmente cierto para MQL4.

Документация по MQL5: Преобразование данных / DoubleToString
Документация по MQL5: Преобразование данных / DoubleToString
  • www.mql5.com
[in]  Формат точности. Если значение digits лежит в диапазоне от 0 до 16, то будет получено строковое представление числа с указанным количество знаков после запятой. Если значение digits лежит в диапазоне от -1 до -16, то...
 
Artyom Trishkin:

DoubleToString(). Y no se trata de MQL5, sino de la salida incorrecta de valores reales en el registro. Esto también se aplica a MQL4 exactamente en la misma medida.

Lo tengo. Gracias. Nunca me había enfrentado a estos problemas. Ahora lo sabré.

No sé muy bien qué significa el formato de precisión en relación con mi código. Me parece que es el número de decimales.
Pero en MT4, en exactamente el mismo código (excepto para OrderSend), si no recuerdo mal, la función Print siempre emite el valor real de la diferencia entre dos valores de precio, es decir, el número menor que 1 (0,00000) con 5 decimales después de 0.

 
ANDREY:

Lo tengo. Gracias. Nunca me había encontrado con esto. Ahora lo sabré.

Todavía no estoy muy seguro de lo que significa el formato de precisión en relación con mi código. Me parece que es el número de decimales.
Pero en MT4, en exactamente el mismo código (excepto para OrderSend), si no recuerdo mal, la función Print siempre emite el valor real de la diferencia entre dos valores de precio, es decir, el número menor que 1 (0,00000) con 5 decimales después de 0.

Los valores de los datos reales se imprimen en todas partes. Se trata simplemente de un formato diferente de representación de los números reales. Si el terminal no especifica el formato de salida, decide por sí mismo qué formato es más conveniente. Naturalmente, esto supone que se conocen todos los formatos de representación numérica.

Todo está en la ayuda.

 
Artyom Trishkin:

Los valores de los datos reales se muestran en todas partes. Es sólo un formato diferente para representar los números reales. Si no se le indica al terminal el formato de salida, éste decide cuál es el más conveniente. Naturalmente, esto supone que conoces todos los formatos de los números.

Todo está en la ayuda.

Entonces, ¿MT4 y MT5 tienen formatos diferentes para la representación de números reales?
¿Qué debo leer en la Ayuda de mql5 para tratar esta cuestión?

Gracias por la ayuda.

 
Michail_David:
Hola, compañeros expertos. Necesito su ayuda para corregir el indicador. La esencia del indicador es la siguiente. Calcule la magnitud del aumento de precios en relación con la barra anterior. Para el cero se necesita una barra de estrella. Es decir, el precio de apertura es igual al de cierre. Al compilar no hay errores, pero al probar un error en la línea 80 20 caracteres. La línea de señal también está mal dibujada. Pero creo que esta es la razón del cálculo incorrecto del buffer principal. Por favor, ayúdenme a solucionarlo.

De acuerdo. Parece que sólo unos pocos elegidos reciben ayuda por aquí.

 
Michail_David:

De acuerdo. Parece que sólo unos pocos elegidos reciben ayuda por aquí.

Prueba esto.

//--- typical price and its moving average
   for(i=0; i<rates_total-1; i++)
     {
      ExtTempBuffer[i] = NormalizeDouble((close[i]-open[i])/Point(),2);
 
Vitaly Muzichenko:

Prueba esto.

Gracias, Vitaly. Pero todavía me da un error en la línea ExtTempBuffer[i] = NormalizeDouble((close[i]-open[i])/Point(),2); en el elemento [i}.

Razón de la queja: