Errores, fallos, preguntas - página 1261

 

Foro sobre trading, sistemas de trading automatizados y pruebas de estrategias de trading

Se han actualizado las aplicaciones móviles de MetaTrader 4 y MetaTrader 5 para Android

pav36krs, 2014.12.20 10:21

¡¡¡Mis amigos ayudan!!! He descargado Metatrader, y no se iniciará en 32 bits en mi Windows de 64 bits. Esta es la primera vez que he encontrado un problema de este tipo antes de instalar Metatrader de alfa forex, y todo funcionaba bien.

 

Errores en las operaciones a nivel de bits.

Print(int(1)<<34);

Obtenemos 4, que debería ser 0. Cuántos años de pulido de MT, y todavía tales errores.

 

¿Y qué, el compilador no juró este desplazamiento? Lo dudo.

De todos modos, eso es lo que queríamos.

00000000000000000000000000000001 << 34
00000000000000000000000000000100
 
GVladimir:

¿Y qué, el compilador no juró este desplazamiento? Lo dudo.

De todos modos, eso es lo que queríamos.

Evidentemente, no sabes muy bien cómo funcionan los desplazamientos de bits. Ahí no puede ocurrir nada en los bits de orden bajo. Si tienes dudas, C++ es tu ayuda.
 
meat:
Allí no puede ocurrir nada en los bits de orden inferior.
En MQL creo que todos los desplazamientos de bits se implementan como cíclicos (ROL/ROR), (que probablemente no conozcas, porque ni C ni C++ los tienen) sólo para estas situaciones
 
GVladimir:
En MQL creo que todos los desplazamientos de bits se implementan como desplazamientos cíclicos (ROL/ROR), (que probablemente no conozcas, porque ni C ni C++ los tienen) sólo para estas situaciones

La documentación de MQL no dice nada sobre un desplazamiento cíclico, así que se asume el desplazamiento habitual. Pero he encontrado allí la siguiente frase

No se recomienda desplazar un número de bits mayor o igual que el número de bits de la variable que se desplaza, porque el resultado de esta operación es indefinido.

Esto es incorrecto. No puede haber un resultado indefinido en las operaciones a nivel de bits. Sólo que el bit de salida se almacena en una bandera especial o no se almacena, pero esto no tiene ningún efecto en el algoritmo de desplazamiento, es decir, los bits de la derecha se llenan con ceros de todos modos. Si se trata de un desplazamiento cíclico, esto debe indicarse explícitamente (aunque un desplazamiento normal compatible con C++ sería más correcto).

 

¿es posible conectar un indicador compilado por la antigua construcción como recurso a otro indicador?

No consigo que funcione así:

........ 

#resource "\\Indicators\\тфьу.ex4"

........ 

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[])

  {

........ 

ExtLimeBuffer[i]=iCustom(_Symbol,0,"::Indicators\\тьфу.ex4",pr1,pr2,pr3,pr4,pr5,pr6,pr7,2,i);

........ 

  return(rates_total);

}


 

el compilador dice esto:

unknown resource type 'C:\Program Files\MT4\MQL4\Indicators\тфьу.ex4' тфьу1.mq4 10 1

 

 


 
meat:

La documentación de MQL no dice nada sobre un desplazamiento cíclico, así que asume un desplazamiento normal. Sin embargo, encontré una frase como esa allí:

Esto es incorrecto. No puede haber un resultado indefinido en las operaciones a nivel de bits. Es que el bit de salida se almacena en una bandera especial, o no se almacena, pero esto no afecta al algoritmo de desplazamiento, es decir, los bits de la derecha se rellenan con ceros de todos modos. Si es un desplazamiento cíclico, hay que especificarlo explícitamente (aunque un desplazamiento compatible con plain++ sería más correcto).

Puede ser.

En las operaciones de desplazamiento deben intervenir un máximo de 5 bits para los enteros de 32 bits (o 6 bits para los enteros de 64 bits). Si un valor de desplazamiento toma más de 5 (o 6) bits, los diferentes procesadores manejan esta situación de manera diferente. En la documentación, acabamos de reflejar este hecho diciendo que el resultado de la operación es indefinido.

Документация по MQL5: Торговые функции / OrderCalcProfit
Документация по MQL5: Торговые функции / OrderCalcProfit
  • www.mql5.com
Торговые функции / OrderCalcProfit - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
sanyooooook:

...
el compilador escribe así:

unknown resource type 'C:\Program Files\MT4\MQL4\Indicators\тфьу.ex4' тфьу1.mq4 10 1

Al parecer, el compilador es más inteligente de lo que parece. Quiere encontrar la fuente de tfu1.mq4, y luego adjuntarla como recurso.
Razón de la queja: