Erreurs, bugs, questions - page 108

 
Interesting:

Plus fiable ? Pourquoi l'obtention de handles à l'initialisation n'est-elle pas fiable ? Pourquoi n'est-il pas fiable de vérifier les données nécessaires ? Et plus encore, pourquoi la présence de contrôles n'est-elle pas fiable ?

Pour les débutants, ce n'est peut-être pas si facile, mais avec le temps, tout deviendra clair...

En fait, j'essaie de le découvrir tout de suite, pas plus tard... Je ne veux pas me contenter de copier certaines actions sans en comprendre le sens. Si le code est une fonction intégrée comme dans MQL4, je vais probablement ajouter un paramètre supplémentaire avec le nombre de barres.

 

Pourquoi se charge-t-il ?

 
simpleton:

Les "nombres ordinaires" sont des expressions constantes, qui ont également un type. Dans ce cas, il s'agit du type int.

Une expression consistant en une multiplication de deux sous-expressions, chacune de type int, est également de type int. C'est là que le débordement se produit.

Et ce n'est qu'ensuite que la conversion implicite du type de l'expression int au type long se produit pendant l'initialisation de la variable longue.

Tout est clair ici. D'ailleurs, il n'est pas nécessaire de transformer chacun des opérandes en long dans ce cas. On peut juste en couler un et implicitement couler le second.

C'est ce que j'essayais de dire, mais en utilisant un langage moins académique. L'essentiel est d'avertir les autres chercheurs.

La question est différente. Où dans quel Talmud est-il dit que :

Les "nombres ordinaires" sont des expressions constantes qui ont également un type. Dans ce cas, il s'agit du type int.

Par exemple, si X est fixé à 10000000000 , alors il devient un type long ? Et pourquoi pas ulong ou datetime ou même string?

Quel est le type du nombre 255uchar oushort ?

 
gumgum:

Pourquoi se charge-t-il ?

Probablement parce que GBPJPY crosspairs et qu'il y a des calculs de marge quelque part dans le code. IMHO
 
simpleton:

Il semble y avoir une confusion entre le journal et le code. Le code ci-dessus fonctionne "proprement". Et, pour obtenir un tel journal, je devais faire en sorte que les variables A et B soient de type int ou uint, et la variable X de type uint:

Et voici le travail du code original :

Build 314 (20 août 2010).

J'ai cité un code différent

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);

Portez une attention particulière à la première ligne, votre compte peut avoir un numéro différent. Cherche-le et mets-le dans le long C =

Résultat vérifié à nouveau

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

Build 314 (20 août 2010).

 
Veuillez me dire pourquoi la fonction SymbolInfoDouble(_Symbol,SYMBOL_POINT) donne une valeur à cinq chiffres de 0,00001 après la virgule pour USDCHF, alors que la valeur acceptée pour cette paire est 0,0001 ?
Документация по MQL5: Получение рыночной информации / SymbolInfoDouble
Документация по MQL5: Получение рыночной информации / SymbolInfoDouble
  • www.mql5.com
Получение рыночной информации / SymbolInfoDouble - Документация по MQL5
 
rut_:
Veuillez me dire pourquoi la fonction SymbolInfoDouble(_Symbol,SYMBOL_POINT) de la paire USDCHF produit une taille de point à cinq chiffres après le point décimal 0,00001, alors que cette paire est acceptée pour la valeur de point 0,0001 ?

pourquoi pensez-vous qu'il y a 4 chiffres dans cet instrument, le terminal montre clairement que les cotations sont à 5 chiffres.
 
sergey1294:
Qu'est-ce qui vous fait penser qu'il y a 4 chiffres dans cet instrument, le terminal montre clairement que les cotations sont à 5 chiffres.

Cette fonction peut renvoyer différentes valeurs de points même dans les comptes à cinq chiffres, tout dépend des paramètres qui seront acceptés par le courtier.

Par exemple, une société de courtage a le commentaire suivant

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

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

et un autre a 1 pips égal au cinquième chiffre.

 
SHOOTER777:

C'est ce que j'essayais de dire, mais en termes moins académiques. Et surtout pour mettre en garde les autres chercheurs.

La question est différente. Où dans quel Talmud est-il dit que :

Les "nombres ordinaires" sont des expressions constantes qui ont également un type. Dans ce cas, il s'agit du type int.

Par exemple, si X est fixé à 10000000000 , alors il devient un type long ? Et pourquoi pas ulong ou datetime ou même string?

Quel est le type du nombre 255uchar oushort ?

La constante 10000000000 est déjà de type long.

Comment dois-je le mettre ? Les langages normaux possèdent des suffixes-modificateurs qui vous permettent de spécifier le type d'une constante sans utiliser une conversion de type explicite. Pour MQL5, je ne l'ai trouvé que pour le float. Il est donc impossible de définir des constantes de type uchar, ushort, uint, ulong, char, short et long (si la valeur de la constante correspond au type int) sans conversion de type explicite.

La constante 255 est de type int. Vous pouvez trouver quelque chose dans les descriptions de type, par exemple, les constantes de caractères sont déclarées comme ayant le type ushort. Il existe également des informations sur les constantes de type date, couleur, bool, double et chaîne de caractères.

Vous pouvez essayer d'imprimer la taille du type de constante, à condition que l'opération sizeof soit introduite (mais pourquoi est-elle introduite, veuillez expliquer à l'un des développeurs) :

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 général, parmi les suffixes, seul f fonctionne pour les constantes doubles, les modifiant en flottant, ce qui peut être vu par la taille du type d'une telle constante.

Ici, la seule utilisation raisonnable de l'opération sizeof que j'ai pu trouver. :)

 
SHOOTER777:

Je vous ai donné un code différent

Portez une attention particulière à la première ligne, il peut y avoir un numéro différent sur votre compte. Cherchez-le et mettez-le dans le long C =

Résultat vérifié à nouveau

Build 314 (20 août 2010).

Non, je n'ai pas le même effet que vous. Il ne me reste plus qu'à vérifier les versions bit de MT5. J'ai la version 64 bits, quelle est la vôtre ?

Au fait, le code modifié que j'ai testé vous donne-t-il les mêmes résultats que moi ?

Si oui, alors ce que je vois est très similaire à ce bogue sur "l'origine" d'une valeur - c'est-à-dire que le code peut se comporter différemment (à la fois correctement et incorrectement) selon l'origine de la valeur sur laquelle les calculs ultérieurs sont basés.