Errores, fallos, preguntas - página 108

 
Interesting:

¿Más fiable? ¿Por qué no es fiable la obtención de asas en la inicialización? ¿Por qué no es fiable comprobar los datos necesarios? Y aún más, ¿por qué no es fiable la presencia de controles?

Para los principiantes puede no ser tan fácil, pero con el tiempo todo se aclarará...

De hecho, estoy tratando de resolverlo de inmediato, no más tarde... No quiero limitarme a copiar algunas acciones sin entender su significado. Si tengo el código como una función incorporada como en MQL4, probablemente añadiré algún parámetro extra con el número de barras.

 

¿Por qué se carga?

 
simpleton:

Los "números ordinarios" son expresiones constantes, que también tienen un tipo. En este caso es de tipo int.

Una expresión que consiste en la multiplicación de dos subexpresiones, cada una de tipo int, es también de tipo int. Aquí es donde se produce el desbordamiento.

Y sólo entonces se produce la conversión implícita del tipo de la expresión int al tipo long durante la inicialización de la variable long.

Todo está claro aquí. Por cierto, en este caso no es necesario lanzar cada uno de los operandos a long. Podemos lanzar uno y lanzar implícitamente el segundo.

Esto es lo que intentaba decir, pero utilizando un lenguaje menos académico. Lo principal es advertir a otros observadores.

La cuestión es diferente. ¿En qué parte del Talmud dice que :

Los "números ordinarios" son expresiones constantes que también tienen un tipo. En este caso es de tipo int.

Por ejemplo, si X se establece en 10000000000 , entonces se convierte en tipo largo? ¿Y por qué no ulong o datetime o incluso string.?

¿Cuál es el tipo de número 255uchar oshort?

 
gumgum:

¿Por qué se carga?

Probablemente porque los pares cruzados GBPJPY y hay cálculos de margen en alguna parte del código. IMHO
 
simpleton:

Parece que hay una confusión entre el registro y el código. El código anterior funciona de forma "limpia". Y, para conseguir dicho registro, tuve que hacer que las variables A y B fueran de tipo int o uint, y la variable X de tipo uint:

Y aquí está el trabajo del código original:

Compilación 314 (20 de agosto de 2010).

He citado un código diferente

long A = AccountInfoInteger(ACCOUNT_LOGIN);  // 661701
long B = A;
long C = 661701;

Print(" A=",A,"  B=",B,"  C=",C);

long X =(long)10000;

long L1 = A*X;
long L2 = B*X;
long L3 = C*X;

Print(" L1=",L1,"   L2=",L2,"   L3=",L3);

Preste especial atención a la primera línea, su cuenta puede tener un número diferente. Búscalo y ponlo en la C larga =

Comprobado el resultado de nuevo

2010.08.25 20:23:12     Servis (EURUSD,H1)       L1=2322042704   L2=2322042704   L3=6617010000
2010.08.25 20:23:12     Servis (EURUSD,H1)       A=661701  B=661701  C=661701

Compilación 314 (20 de agosto de 2010).

 
Por favor, dígame por qué la función SymbolInfoDouble(_Symbol,SYMBOL_POINT) da un valor de cinco dígitos de 0,00001 después del punto decimal para el USDCHF, cuando el valor aceptado para este par es 0,0001?
Документация по MQL5: Получение рыночной информации / SymbolInfoDouble
Документация по MQL5: Получение рыночной информации / SymbolInfoDouble
  • www.mql5.com
Получение рыночной информации / SymbolInfoDouble - Документация по MQL5
 
rut_:
Por favor, dígame por qué la función SymbolInfoDouble(_Symbol,SYMBOL_POINT) del par USDCHF produce un tamaño de punto de cinco dígitos después del punto decimal 0,00001, cuando este par se acepta para el valor de punto 0,0001?

por qué crees que hay 4 dígitos en este instrumento, el terminal muestra claramente que las cotizaciones allí son de 5 dígitos
 
sergey1294:
Qué te hace pensar que hay 4 dígitos en este instrumento, el terminal muestra claramente que las cotizaciones allí son de 5 dígitos

Esta función puede devolver diferentes valores de puntos incluso en cuentas con cinco dígitos, todo depende de la configuración que acepte el broker.

Por ejemplo, una empresa de corretaje tiene el siguiente comentario

1 pips (пункт) равен:

для валютных пар с 5 знаками после запятой - минимальному изменению 4-го знака после запятой (0,0001);
для валютных пар с 3 знаками после запятой - минимальному изменению 2-го знака после запятой (0,01).

y otro tiene 1 pipa igual al quinto dígito.

 
SHOOTER777:

Eso es lo que intentaba decir, pero en términos menos académicos. Y, sobre todo, para advertir a otros buscadores.

La cuestión es diferente. ¿En qué parte del Talmud se dice que :

Los "números ordinarios" son expresiones constantes, que también tienen un tipo. En este caso es de tipo int.

Por ejemplo, si X se establece en 10000000000 , entonces se convierte en tipo largo? ¿Y por qué no ulong o datetime o incluso string.?

¿Cuál es el tipo de número 255uchar oshort?

La constante 10000000000 ya es de tipo long.

¿Cómo lo pongo? Los lenguajes normales tienen sufijos-modificadores que permiten especificar el tipo de la constante sin utilizar una conversión de tipo explícita. En el caso de MQL5, sólo lo he encontrado para float. Por lo tanto, es imposible definir constantes de tipo uchar, ushort, uint, ulong, char, short y long (si el valor de la constante encaja en el tipo int) sin una conversión de tipo explícita.

La constante 255 es de tipo int. Puede encontrar algo en las descripciones de los tipos, por ejemplo, las constantes de caracteres se declaran como de tipo ushort. También hay información sobre las constantes de tipo datetime, tipo color, tipo bool, tipo double y tipo string.

Puede intentar imprimir el tamaño del tipo de constante, siempre y cuando se introduzca la operación sizeof (pero por qué se introduce, por favor explique a uno de los desarrolladores):

void OnStart()
{
  Print("sizeof true                = ", sizeof true);
  Print("sizeof 'a'                 = ", sizeof 'a');
  Print("sizeof 255                 = ", sizeof 255);
  Print("sizeof 200000000           = ", sizeof 20000000);
  Print("sizeof 10000000000         = ", sizeof 10000000000);
  Print("sizeof C'128,128,128'      = ", sizeof C'128,128,128');
  Print("sizeof D'2004.01.01 00:00' = ", sizeof D'2004.01.01 00:00');
  Print("sizeof 1.0f                = ", sizeof 1.0 f);
  Print("sizeof 1.0                 = ", sizeof 1.0);
  Print("sizeof \"Xa!\"               = ", sizeof "Xa!");
  Print("sizeof \"Xa-xa-xa!!!\"       = ", sizeof "Xa-xa-xa!!!");
}

/* Вывод в лог (хронология - сверху вниз):
GF      0       1 (EURUSD,M15)  02:03:23        sizeof true                = 1
IS      0       1 (EURUSD,M15)  02:03:23        sizeof 'a'                 = 2
LF      0       1 (EURUSD,M15)  02:03:23        sizeof 255                 = 4
JI      0       1 (EURUSD,M15)  02:03:23        sizeof 200000000           = 4
EQ      0       1 (EURUSD,M15)  02:03:23        sizeof 10000000000         = 8
DG      0       1 (EURUSD,M15)  02:03:23        sizeof C'128,128,128'      = 4
JN      0       1 (EURUSD,M15)  02:03:23        sizeof D'2004.01.01 00:00' = 8
GE      0       1 (EURUSD,M15)  02:03:23        sizeof 1.0f                = 4
GR      0       1 (EURUSD,M15)  02:03:23        sizeof 1.0                 = 8
QJ      0       1 (EURUSD,M15)  02:03:23        sizeof "Xa!"               = 12
ER      0       1 (EURUSD,M15)  02:03:23        sizeof "Xa-xa-xa!!!"       = 12
*/

En general, entre los sufijos sólo f funciona para las constantes dobles, modificándolas a float, lo que puede verse por el sizeof-type de dicha constante.

Aquí, el único uso sensato de la operación sizeof que pude encontrar. :)

 
SHOOTER777:

Te di un código diferente

Preste especial atención a la primera línea, puede haber un número diferente en su cuenta. Búscalo y ponlo en la C larga =

Comprobado el resultado de nuevo

Compilación 314 (20 de agosto de 2010).

No, no tengo el mismo efecto que tú. Sólo tengo que comprobar las versiones de bits de MT5. Yo tengo la versión de 64 bits, ¿cuál es la tuya?

Por cierto, ¿el código modificado que he probado te da los mismos resultados que a mí?

Si es así, lo que veo es muy parecido a ese fallo sobre el "origen" de un valor, es decir, el código puede comportarse de forma diferente (tanto correcta como incorrectamente) dependiendo de la procedencia del valor en el que se basan los cálculos posteriores.