Erreurs, bugs, questions - page 2573

 
Nikolai Semko:

Les variables elles-mêmes sont bien, mais il y a les noms de chaînes de caractères, qui doivent aussi être stockés et le sont encore à chaque fois qu'une recherche de chaîne de caractères permet d'accéder à cette variable, sans parler du seul type double, qui peut être stocké. Il est clair que nous pouvons utiliser le syndicat, mais son utilisation n'est pas non plus gratuite.

J'avais l'idée et le désir d'utiliser des variables globales, mais j'ai décidé de les enregistrer sur le disque à l'ancienne, surtout maintenant que j'ai commencé à écrire du code correctement - les données sont stockées dans des structures, et vous pouvez vider les structures sur le disque en un clic - FileWriteStruct().



ainsi, les variables globales "doivent être utilisées exactement dans l'autre sens" - les données doivent être stockées dans le nom de la variable globale. et le checksum en double avec Base64 - tout est prêt dans CryptEncode(), et idéalement il devrait être Base85 ( Ascii85 ) ou vu quelque part le code source sur le githab Base128

et si je ne me trompe pas, le nom de la variable globale dans le terminal est de 256 caractères ? l'efficacité de Base64 est légèrement supérieure à 60% ( taille ), d'autres méthodes de codage ont une efficacité supérieure - vous pouvez stocker 160-180 octets dans une variable globale

Certes, vous devrez déterminer les données en utilisant le préfixe, mais en général, cela fonctionnera - d'autant plus que les variables globales sont rarement utilisées - tous les noms sont essentiellement libres

 
Igor Makanu:

J'avais l'idée et le désir d'utiliser des variables globales, mais j'ai décidé de les sauvegarder sur le disque à l'ancienne, surtout maintenant que j'ai commencé à écrire des codes aussi correctement que possible - je stocke les données dans des structures, et je peux vider les structures sur le disque en un clic - FileWriteStruct().



ainsi, les variables globales "doivent être utilisées exactement dans l'autre sens" - les données doivent être stockées dans le nom de la variable globale. et le checksum en double avec Base64 - tout est prêt dans CryptEncode(), et idéalement il devrait être Base85 ( Ascii85 ) ou vu quelque part le code source sur le githab Base128

et si je ne me trompe pas, le nom de la variable globale dans le terminal est de 256 caractères ? l'efficacité de Base64 est légèrement supérieure à 60% ( taille ), d'autres méthodes de codage ont une efficacité supérieure - vous pouvez stocker 160-180 octets dans une variable globale

Certes, vous devrez définir les données avec un préfixe, mais en général, cela fonctionnera - d'autant plus que les variables globales sont rarement utilisées - tous les noms sont essentiellement libres.

Pourtant, pour accéder à une variable, vous devez parcourir les sommes de contrôle jusqu'à ce que vous trouviez la bonne. Et s'il y a de nombreuses variables ?
Ou vous pouvez suivre la séquence des variables et leur attribuer des index. Mais c'est absolument inutile, car il est plus facile d'écrire une classe pour enregistrer les données
 
Nikolai Semko:
il est plus facile d'écrire une classe de sauvegarde des données

La classe est présentée, avec des exemples. Les développeurs introduiront une nouvelle fonctionnalité qui permet déjà de transférer des données sans écrire de wrappers autour des ressources.

Lesvariables globales sont utilisées pour les drapeaux. Il est également pratique de toujours voir leurs valeurs - F3.

 
fxsaber:

La classe est présentée, avec des exemples. Les développeurs introduiront une nouvelle fonctionnalité qui permet déjà de transférer des données sans écrire de wrappers autour des ressources.

Lesvariables globales sont utilisées pour les drapeaux. Il est également pratique de toujours voir leurs valeurs - F3.

Oui, je l'ai fait. C'est pourquoi j'ai été surpris.
Pour le contrôle de la valeur, je suis d'accord, alors justifié.
 
Georgiy Merts:

J'ai constaté que dans mon mode de test visuel, SymbolInfoTick() renvoie une valeur mais la série chronologique Close[0] a une valeur différente.

Est-ce une erreur de ma part ? Est-ce que je fais quelque chose de mal ?

Il semble que les valeurs devraient être les mêmes :

Habituellement, la différence est de 1 à 2 points, mais sur les mouvements brusques, elle peut être plus importante.

Est-ce que c'est seulement moi ?

S'il s'avère que SymbolInfoTick() donne une valeur différente de Close[0], alors je suppose que la valeur correcte est Close[0] et je laisse un spread tel qu'il a été retourné par SymbolInfoTick().

Mais il est intéressant de comprendre quel prix est correct, quel prix est "regardé" par DC - SymbolInfoTick() ou Close[0].

Quel est le numéro de fabrication ?

La version 2155 devrait être corrigée maintenant - ce bug a été corrigé la semaine dernière.

 
Slava:

Quel est le numéro de fabrication ?

La version 2155 devrait être corrigée maintenant - ils ont corrigé ce bug la semaine dernière.

Ouais. Et j'ai 2085.

Compris, mise à jour.

P.S. Oui, les valeurs sont les mêmes maintenant.
 
Slava:

Quel est le numéro de fabrication ?

La version 2155 devrait être corrigée maintenant - ce bug a été corrigé la semaine dernière.

Savez-vous quelque chose à ce sujet ?
https://www.mql5.com/ru/forum/1111/page2571#comment_13285021
 
Aleksei Beliakov:
Savez-vous quelque chose à ce sujet ?
https://www.mql5.com/ru/forum/1111/page2571#comment_13285021

Vous n'avez pas donné de détails pour reproduire

 
Slava:

Vous n'avez pas donné de détails pour reproduire

Banal si vous imprimez les résultats de ces fonctions en ontick, c'est pour le temps 1970.01.01 pour le prix 0
Avant, c'était l'heure du bar ou du prix.
C'est donc maintenant.
iHigh(NULL,PERIOD_W1,0) в журнале будет 0
iTime(NULL,PERIOD_W1,0) в журнале будет 1970.01.01
 
Aleksei Beliakov:
Banal si vous imprimez les résultats de ces fonctions en ontick alors c'est pour le temps 1970.01.01 pour le prix 0
Avant, c'était l'heure du bar ou du prix.
Donc maintenant c'est comme ça.

Peut-être avez-vous un bug dans votre ordinateur ? J'ai ce code dans la version 1220.

 Print("iHigh ", iHigh(NULL, PERIOD_W1, 0));
 Print("iTime ", iTime(NULL, PERIOD_W1, 0));

imprime

2019.09.23 09:41:27.560 00 EURUSD,M5: iTime 2019.09.22 00:00:00
2019.09.23 09:41:27.560 00 EURUSD,M5: iHigh 1.10245
Raison: