Questions des débutants MQL5 MT5 MetaTrader 5 - page 855

 

Il est important pour moi d'obtenir une réponse à ces questions.

Pour les méthodes CTrade::Buy, CTrade::Sell, CTrade::ClosePosition

Cela signifie-t-il que si false est retourné, Retcode doit être ignoré ?

Est-ce que cela signifie que si true est retourné, Retcode est toujours rempli avec la valeur correcte ?

Merci.

 

Chers collègues, aidez-moi.

J'essaie de comprendre comment travailler avec le registre, j'ai créé un conseiller expert simple pour le test. La lecture des données du registre du système se déroule sans problème, mais il y a des problèmes d'écriture, de MT et de plantage de la mémoire... (((

Peut-être que mon œil est déjà trempé et que je ne vois pas l'évidence...

Dossiers :
TestReg.mq5  25 kb
 
Алексей Барбашин:

Chers collègues, aidez-moi.

J'essaie de comprendre comment travailler avec le registre, j'ai créé un conseiller expert simple pour le test. La lecture des données du registre du système se déroule sans problème, mais il y a des problèmes d'écriture, de MT et de plantage de la mémoire... (((

Peut-être que mon œil est déjà trempé et que je ne vois pas l'évidence...

Cela devrait être simple ici. Avant et après chaque appel à la fonction API, imprimez quelque chose dans le journal. Après le crash, les journaux indiqueront l'emplacement du crash.

 
. ... Rick D. ... .:

Cela devrait être assez simple. Avant et après chaque appel de la fonction API, imprimez quelque chose dans le journal. Après le crash, les journaux indiqueront clairement où le crash s'est produit.

De cette façon, le journal n'a même pas le temps d'être écrit, le terminal se ferme avec une erreur. (( Je suppose qu'il y a une fuite de mémoire. Mais les objets dynamiques ne sont pas utilisés (nouveaux). Je ne sais pas comment m'en sortir et chercher de tels problèmes ;(.

 
Алексей Барбашин:

De cette façon, le journal n'a même pas le temps d'être écrit, le terminal se ferme avec une erreur. (( Je suppose qu'il y a une fuite de mémoire. Mais les objets dynamiques ne sont pas utilisés (nouveaux). Je ne sais pas comment y faire face et comment détecter ces problèmes ;(

J'ai peut-être un peu modifié votre exemple.
Dossiers :
TestReg.mq5  26 kb
 
. ... Rick D. ... .:
J'ai un peu modifié votre exemple.

Я ... choqué, agréablement choqué. Placez votre changement sur plusieurs graphiques à la fois pour assurer un chargement asynchrone sur le registre..... Tout fonctionne de manière cohérente. Vous avez changé le principe du passage des paramètres dans l'API, c'est-à-dire là où les valeurs de retour sont utilisées, vous avez appliqué les tableaux avec le passage par référence, ce qui en mql signifie passer une adresse, ou un pointeur en termes de++. Mais je pensais que cette approche, décrite il y a 10 ans, était anachronique, car tous les types de données simples dans l'API sont de toute façon transmis par référence..... Mais apparemment, c'était mon erreur et mon manque de perspicacité, cela signifie que les types simples ne sont pas transmis aussi facilement à l'API. Merci beaucoup de m'avoir aiguillé dans la bonne direction ! )))

 
Алексей Барбашин:

Я ... choqué, agréablement choqué. Placez votre changement sur plusieurs graphiques à la fois pour assurer un chargement asynchrone sur le registre..... Tout fonctionne de manière cohérente. Vous avez changé le principe du passage des paramètres dans l'API, c'est-à-dire là où les valeurs de retour sont utilisées, vous avez appliqué les tableaux avec le passage par référence, ce qui en mql signifie passer une adresse, ou un pointeur en termes de++. Mais je pensais que cette approche, décrite il y a 10 ans, était anachronique, car tous les types de données simples dans l'API sont transmis par référence.... de toute façon. Mais apparemment, c'était mon erreur et mon manque de perspicacité, cela signifie que les types simples ne sont pas transmis aussi facilement à l'API. Merci beaucoup de m'avoir aiguillé dans la bonne direction ! )))

Il y a quelque temps, sous MT4, on m'a appris à transmettre des pointeurs vers des fonctions API via des tableaux unidimensionnels. Si quelque chose a changé en ce moment, et que quelqu'un peut le confirmer, j'utiliserai une nouvelle approche.

Mais vous avez quand même mélangé les types. En particulier, les longs dans Windows et dans MQL5 ont des tailles différentes.
Vous trouverez peut-être d'autres différences.

 
. ... Rick D. ... .:

Il fut un temps où, sous MT4, on apprenait à passer les pointeurs vers les fonctions API via des tableaux unidimensionnels. Si quelque chose a changé à l'heure actuelle et que quelqu'un peut le confirmer, j'utiliserai la nouvelle approche.

Mais vous avez également eu une certaine confusion avec les types. En particulier, les longs dans Windows et dans MQL5 ont des tailles différentes.
Vous trouverez peut-être d'autres différences.

J'ai vu toutes les différences))) Merci beaucoup !

La seule question qui se pose est celle de la taille des données stockées dans le registre. Selon l'exemple de la documentation (https://msdn.microsoft.com/en-us/library/windows/desktop/ms724911(v=vs.85).aspx), nous pouvons stocker un peu plus de données que dans le fichier corrigé (ushort buff[1024] ;). Est-ce que je comprends bien ?
RegQueryValueEx function (Windows)
  • msdn.microsoft.com
Retrieves the type and data for the specified value name associated with an open registry key. To ensure that any string values (REG_SZ, REG_MULTI_SZ, and REG_EXPAND_SZ) returned are null-terminated, use the RegGetValue function. Syntax Parameters hKey [in] lpValueName [in, optional] The name of the registry value. If lpValueName is NULL or an...
 
Алексей Барбашин:

J'ai vu toutes les différences))) Merci beaucoup !

La seule question qui se pose est celle de la taille des données stockées dans le registre. Selon l'exemple de la documentation (https://msdn.microsoft.com/en-us/library/windows/desktop/ms724911(v=vs.85).aspx), vous pouvez stocker un peu plus de données que dans le fichier fixe (ushort buff[1024] ;). Est-ce que je le lis correctement ?
Correct. Il peut y avoir plus de données. Pour les données volumineuses, il est correct de demander d'abord la longueur, puis de redimensionner dynamiquement le tableau, et enfin de récupérer toutes les données.
 
. ... Rick D. ... .:
Bien. Il peut y avoir plus de données. Pour les données volumineuses, il est correct de demander d'abord la longueur, puis de redimensionner dynamiquement le tableau, et enfin d'obtenir toutes les données.

Hmmm... Je n'ai probablement pas regardé l'API très attentivement, mais je n'ai pas vu une telle fonction..... Et ce serait probablement pratique.

D'autres conseils... peut-être que la question est trop... ridicule... Comment traduire un nombre, par exemple un double, en un tableau de caractères ? En effet, dans certaines API, il est nécessaire de transmettre les nombres sous forme de pointeur. Les pointeurs sont passés comme des tableaux unidimensionnels... C'est clair avec les chaînes de caractères, les fonctions StringToShortArray et StringToCharArray sont prévues pour elles, mais avec les nombres je ne comprends toujours pas comment les convertir en tableaux d'octets (char).

Raison: