Erreurs, bugs, questions - page 725

 
Snaf: J'ai trouvé moi-même l'erreur dans le premier script, mais je n'ai pas assez de cervelle pour le second .

Bild 630

Cet exemple est écrit en utilisant la nouvelle version du compilateur MQL5. Nous nous excusons de ne pas en avoir tenu compte. Mais il sera bientôt disponible. Veuillez attendre un peu et tout sera compilé.
 
MetaDriver: Ma fonction assemblait une longue chaîne de caractères à partir de morceaux renvoyés par d'autres fonctions (génération de programmes OpenCL). Dans le débogueur, tout se passe comme sur des roulettes - la construction se plante et dit "Acces Violation"... ;)

J'étais sur le point d'écrire au Service Desk, mais tout à coup, ça a marché. Je ne peux plus le reproduire (bien que j'aie essayé de le faire honnêtement), pourquoi devrais-je l'envoyer au Service Desk ?

Oui, il y a un problème évident avec CLProgramCreate(). J'ai spécifiquement recherché l'endroit du script où se trouvait le premier problème d'exécution, et c'était dans cette fonction. La fonction ne renvoie pas de valeur.

Le programme CL sous forme de chaîne de caractères semble être reproduit correctement. Mais le programme CL lui-même n'est pas créé.

 
Lorsque les tests sont effectués sur des croisements, il existe une modélisation précise des autres taux pour une conversion correcte des bénéfices et des exigences de marge.

Essayez d'exécuter la visualisation et vous comprendrez immédiatement le volume des calculs basés sur le nombre de caractères d'arrière-plan dans la surveillance du marché.
 
S'il vous plaît dites-moi comment fusionner mon ordinateur portable et PC, lors de stratégies de test, les ordinateurs fonctionnent à travers un routeur, l'un via le câble, l'autre via Wi-Fi, a essayé de créer sur l'ordinateur de bureau fichier mt5, j'ai jeté à l'ordinateur portable, ajouté à la section à distance, mais les noms des agents sont les mêmes que sur un ordinateur portable
 

du poste https://www.mql5.com/ru/forum/1111/page736#comment_185306

a localisé le problème au point :

- sur la fonction de la classe CFastFile::ReadInteger

Il s'est avéré qu'en 630/64, soit l'assignation de structure, soit la lecture d'un tableau dans un tableau se sont mal passées, bien que la pire variante semble être la conversion de signés (short/int/char) en non signés (ushort/uint/uchar).

Quelque part, il y a des bits supplémentaires ou des décalages. En conséquence, le programmeur lit un nombre tout à fait différent de celui prévu. Il vous sera plus facile de faire le tri et de procéder à une double vérification dans la fonction.

Mais il fonctionne régulièrement dans le même code sur 4 ordinateurs (le code est gros, je ne peux pas étirer le tracé).

 
lazarev-d-m:
S'il vous plaît dites-moi comment fusionner mon ordinateur portable et le PC, lors de stratégies de test, les ordinateurs fonctionnent à travers un routeur, l'un via le câble, l'autre via Wi-Fi, a essayé de créer un fichier mt5 sur un ordinateur de bureau, jeté sur l'ordinateur portable, ajouté à la section à distance, mais les noms des agents sont les mêmes que sur un ordinateur portable
Est-ce que ça ne marche pas ? Terminal client / Testeur de stratégie / Agents
 
Yedelkin:
Ça ne marche pas comme ça ? Terminal client / Testeur de stratégie / Agents
J'ai dû faire quelque chose de mal, maintenant j'ai créé le fichier mt5 à nouveau, maintenant le notebook voit les processeurs du PC, mais dans le test de connexion rien ne va plus, quel peut être le problème, et est-ce que je dois ajouter les processeurs du notebook au PC tester, si je ne vais pas les utiliser sur le PC ?
 

Développeurs, vous m'avez conquis avec ce bug ! Comme on dit, "je pleure".

Fonctions de CFastFile ( ::ReadInteger)

        uint ReadArray(uchar &dst[], uint dst_start=0, int cnt=WHOLE_ARRAY) { int r=ArrayCopy(dst, m_data, dst_start, m_pos, cnt); if (r>0) m_pos+=r; return(r); }
        ushort ReadShort() { __2 b={0}; __short d={0}; ReadArray(b.v, 0, 2); d=b; return(d.v); }
        uint ReadInteger(int sz=INT_VALUE)
        {
                if (sz==SHORT_VALUE) { ushort s=ReadShort(); return(s); }
                return(ReadInt());
        }


Il renvoie un non-sens lors de la lecture de SHORT_VALUE.


J'ai commencé à creuser, à me faire une idée des différentes options de lecture d'un tableau.

Il s'est avéré que si au lieu de ushort s=ReadShort() on met le corps de la fonction ReadShort elle-même, tous les nombres sont lus normalement.

Mais ensuite, j'ai trouvé une variante qui m'a vraiment fait pleurer.

        uint ReadInteger(int sz=INT_VALUE)
        {
                if (sz==SHORT_VALUE) { ushort s=ReadShort(); if (s==426) Print(s); return(s); }
                return(ReadInt());
        }

En d'autres termes, la fonction Print transforme par magie un nombre erroné s en un nombre correct et renvoie la valeur correcte.


Chers développeurs, reprenez vos esprits ! Vous faites une bêtise ! !!

Comment allez-vous compenser les pertes sur le marché résultant de votre propre attitude vis-à-vis de votre produit ?

Après tout, MT5 n'est qu'une énorme ressource de consommation, qui est servie par des programmeurs tiers.

Et vous, avec vos actions négligentes, mettez en doute leur compétence et la qualité de leurs programmes !

 
sergeev:

Développeurs, vous m'avez conquis avec ce bug ! Comme on dit, "je pleure".

Fonctions de CFastFile ( ::ReadInteger)

Attendez, mais c'est votre code de la classe CFastFile, n'est-ce pas ? Qu'est-ce que les développeurs de plates-formes ont à voir là-dedans ?

//+------------------------------------------------------------------+
//|                                                         FastFile |
//|                                            Copyright © 2006-2012 |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2006-2012"
#property version "1.00"
#property library
 
Renat:

Attendez, mais c'est votre code de la classe CFastFile, n'est-ce pas ? Qu'est-ce que les développeurs de plateformes ont à voir là-dedans ?



Oui Renat, c'est mon code.

Cela fonctionnait dans les versions précédentes. Mais il a cessé de fonctionner dans l'actuelle 630/64.

Et il continue à fonctionner avec succès en 630/32.


Le bug que j'ai trouvé est plutôt étrange et, franchement, effrayant.