Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 1120

 
Artyom Trishkin:

Code de problème.

Pourquoi... ? S'il s'agit de doubler la logique pour chaque traversée de la même ligne, alors bien sûr toute la logique (que je n'ai pas écrite) devrait être écrite directement par la personne. Je ne connais pas son but ultime, peut-être veut-il faire un décompte du nombre de fois où le prix traverse chaque ligne, tant qu'il la dépasse...

J'ai compris que l'homme n'avait pas réussi à obtenir un tel événement pour ses besoins. Maintenant, il aura un tel événement, et ensuite c'est à sa discrétion.


Il serait logique de renommer la ligne elle-même à un certain format au premier croisement (ou de mettre une étiquette dans la description de cette figure). Et lorsque tous les objets sont traversés, vérifiez l'absence de cette marque sur la ligne.

Si nous parlons de l'inefficacité de l'essai de tous les objets à chaque tic, alors c'est un tout autre sujet.

 
Roman:

Essayez d'utiliser la valeur renvoyée par la variable _Period pour les périodes supérieures à H1 dans vos calculs mathématiques.
Vous saurez immédiatement qui a tort.

Aucune personne saine d'esprit n'utiliserait les valeurs des constantes nommées pour des calculs mathématiques. Les constantes nommées sont là pour vous permettre de comprendre plus facilement à quoi vous faites référence, ou quel identifiant de propriété vous utilisez pour récupérer les données. Les constantes nommées remplacent la valeur de l'identifiant de la propriété demandée par une description textuelle.

Lorsque vous récupérez des données à partir, par exemple, de SymbolInfoDouble(), vous pouvez utiliser la valeur numérique de l'identifiant pour indiquer la valeur que vous souhaitez récupérer à partir de la fonction. Mais pour ce faire, vous devez vous souvenir de la valeur de l'identifiant à substituer dans la fonction. Les constantes enum nommées ont été introduites pour vous libérer de la référence constante ou pour vous éviter de mémoriser par cœur la valeur de chaque identifiant de chaque fonction dans MQL. Pour obtenir la valeur du cours vendeur actuel, vous devez soit écrire la valeur d'identifiant égale à 4 lorsque vous demandez des données pour le symbole actuel : SymbolInfoDouble(NULL,4) ou écrire SymbolInfoDouble(NULL,SYMBOL_ASK) ;

Pourquoi cela vous convient-il, et ne provoque-t-il pas de dissonance, que SYMBOL_ASK renvoie 4 et non le cours vendeur actuel ?

Pourquoi vous en prendre aux identifiants de la période du graphique alors ? C'est ce que les développeurs voulaient. Pour leurs raisons internes. Il existe un nom d'identifiant pour vous, par exemple PERIOD_H4. Vous ne devriez pas vous soucier de la valeur numérique qui lui a été attribuée par le développeur pour une raison ou une autre. On vous a donné le nom (remplacement en texte d'une valeur numérique) d'une constante - utilisez-le à votre convenance. Mais utiliser la valeur de cette constante dans vos calculs est, désolé, un non-sens. Cette constante nommée est utilisée pour indiquer à partir de quel graphique vous voulez obtenir les données. Mais il ne renvoie pas la période du graphique. Il est utilisé dans un but tout à fait différent - pour vous faciliter la vie, pour indiquer à la fonction ce qu'elle doit retourner.

Si vous voulez le nombre de minutes de la période, obtenez-le à partir du nombre de secondes de la période divisé par 60. Et n'appelle pas quelque chose qui n'est pas une béquille. Les béquilles sont ce que vous faites - essayer d'utiliser des noms de nombres dans vos calculs.

C'est une déception...

 
Vadim Lin:

Pourquoi... ? S'il s'agit de doubler la logique pour chaque traversée de la même ligne, alors bien sûr toute la logique (que je n'ai pas écrite) devrait être écrite directement par la personne. Je ne connais pas son but ultime, peut-être veut-il faire un décompte du nombre de fois où le prix traverse chaque ligne, tant qu'il la dépasse...

J'ai compris que l'homme n'avait pas réussi à obtenir un tel événement pour ses besoins. Maintenant, il aura un tel événement, et ensuite c'est à sa discrétion.


Il serait logique de renommer la ligne elle-même à un certain format au premier croisement (ou de mettre une étiquette dans la description de cette figure). Et lorsque tous les objets sont traversés, vérifiez l'absence de cette marque sur la ligne.

Si nous parlons de l'inefficacité d'essayer tous les objets à chaque tic, c'est un autre sujet.

Vous utilisez d'anciennes fonctions qui sont sur le point de tomber dans l'oubli. Le code n'est pas multiplateforme pour cette raison, bien que vous puissiez facilement le faire fonctionner sur n'importe quelle plateforme sans modification.

Et renommer est très amusant. Il suffit de regarder les noms des lignes donnés par l'indicateur, d'en extraire l'identifiant explicite et de l'utiliser pour trouver les bonnes lignes.

 
Vadim Lin:

Merci beaucoup ! C'estwchar_t qui a aidé ! J'ai lu à son sujet qu'il stocke 2 octets par caractère, contrairement à char.

Mais le paramètre de la fonction "str" ne renvoie toujours pas la valeur qui lui a été attribuée... Je me demande pourquoi...

Probablement parce que vous devez renvoyer la valeur de retour de la fonction.

extern "C" __declspec(dllexport) wchar_t* __stdcall ToString(wchar_t* str)
{
   wchar_t wcs[256];
   wcscpy(wcs, str);

   wchar_t* addStr = L" --- Привет! ---";
   
   wchar_t* res = wcsncat(wcs, addStr, wcslen(addStr) + 1);
   
   return(res);
}
 
Artyom Trishkin:

Vous utilisez d'anciennes fonctions qui sont sur le point de tomber dans l'oubli. Et le code n'est pas multiplateforme, bien que vous puissiez facilement le faire fonctionner sur n'importe quelle plateforme sans modification.

Et renommer est très amusant. Il suffit de regarder les noms des lignes dans l'indicateur, d'extraire l'identifiant explicite et de l'utiliser pour trouver les lignes nécessaires.

Merci pour l'édition !

En effet, j'ai programmé en MQL4 assez rarement, alors que je n'ai pratiquement pas utilisé MQL5. J'admets donc que certaines méthodes sont dépassées (mais je travaille quand même !).

Нужно просто поглядеть какие имена линий выдаёт индикатор, вычленить из них их явный идентификатор

Certainement, mais pas vous ou moi - nous ne connaissons pas les particularités d'appellation de ces lignes. Il est également possible de "mémoriser" ces niveaux, mais les résultats de nos "mémorisations" devraient alors être enregistrés quelque part dans un fichier, et sans cela - avec n'importe quel effondrement du terminal - l'image de ce qui se passe ne serait pas très claire. Le renommage, au moins, résoudra ce problème, bien que cette méthode ne soit pas forcément la meilleure.

Je peux me tromper, mais la personne a écrit que jusqu'à 100 lignes sont utilisées à la fois, et seulement des lignes, et il n'y a rien d'autre sur le graphique. Toutes les lignes, d'après ce que j'ai compris, doivent être surveillées pour les croisements. Donc, ce que vous allez "extraire" des noms, je ne le sais pas ;))

 
Artyom Trishkin:


Le fait est que la variable _Period doit renvoyer des valeurs temporelles.
Et les constantes doivent correspondre à des valeurs de période, et pas seulement à des constantes d'enum.
Sinon, nous perdons le sens de cette variable, qui est spécialement conçue pour obtenir rapidement la valeur du délai, sans conversion par des fonctions supplémentaires.

 
Vadim Lin:

Merci pour l'édition !

En effet, je n'ai que rarement programmé en MQL4 ces dernières années, et je n'ai pratiquement pas utilisé MQL5. J'admets donc que certaines méthodes sont dépassées (mais je travaille quand même !).

Certainement, mais pas vous ou moi - nous ne connaissons pas les particularités d'appellation de ces lignes. Il est également possible de "mémoriser" de tels niveaux, mais les résultats de nos "mémorisations" devraient alors être enregistrés quelque part dans un fichier, et sans cela, à chaque fois que le terminal se bloque, l'image de ce qui se passe serait très floue. Le renommage, au moins, résoudra ce problème, bien que cette méthode ne soit pas forcément la meilleure.

Je peux me tromper, mais la personne a écrit que jusqu'à 100 lignes sont utilisées à la fois, et seulement des lignes, et il n'y a rien d'autre sur le graphique. Toutes les lignes, d'après ce que j'ai compris, doivent être surveillées pour les croisements. Donc, ce que vous allez "repérer" parmi les noms, je ne le sais pas ;))

Si le terminal tombe en panne, il faudra le redémarrer. L'indicateur devra être appliqué au graphique à nouveau, ou pour exécuter un Expert Advisor qui utilise les données de cet indicateur (alors l'EA chargera cet indicateur lui-même lorsqu'il y accède). Dans ce cas (et même lors d'un redémarrage normal du terminal avec un chargement automatique des programmes installés sur le graphique), l'indicateur dessinera à nouveau toutes ses lignes - il n'est pas nécessaire de sauvegarder quoi que ce soit. Ces lignes peuvent être relues plus tard. De plus, ils doivent être lus de toute façon.

Pour que l'EA ne surveille que les lignes créées par l'indicateur, il suffit de regarder les noms des lignes créées par l'indicateur et d'essayer de trouver la sous-chaîne répétitive dans les noms - la même pour toutes les lignes. Ces sous-chaînes sont utilisées pour trouver les lignes nécessaires.

C'est simple, il suffit de regarder la liste des objets lorsque l'indicateur fonctionne.

 
Roman:

Le fait est que la variable _Period doit renvoyer des valeurs temporelles.
Et les constantes doivent correspondre à des valeurs de période, et pas seulement à des constantes d'enum.
Sinon, nous perdons le sens de cette variable, qui est spécialement conçue pour obtenir rapidement la valeur du délai, sans conversion par des fonctions supplémentaires.

Vous avez des gens et des chevaux mélangés partout... Pas seulement sur cette question. Si vous apportez des changements en fonction de vos suggestions, la moitié de tout ce qui a fonctionné jusqu'à présent va tout simplement mourir.

Assimiler la taille d'un tick à celle d'un point n'a aucune valeur...

 
Roman:

Essayez d'utiliser la valeur renvoyée par la variable _Period pour les périodes supérieures à H1 dans vos calculs mathématiques.
Vous verrez immédiatement qui a tort.

Je l'utilise dans presque tous les EA. Ce n'est plus drôle. Je suis désolé, c'est la première fois que je vois ça.
 
Artyom Trishkin:

Vous avez des gens et des chevaux mélangés partout... Pas seulement sur cette question. Si vous apportez des changements en fonction de vos suggestions, la moitié de tout ce qui fonctionnait jusqu'à présent disparaîtra tout simplement.

J'assimile la taille d'une tique à celle d'un point...

Parce qu'il y a beaucoup d'incohérence avec la réalité actuelle.
Et vous essayez de trouver des excuses pour ces incohérences.
Au contraire, j'ai écrit qu'un tic n'est pas égal à un point !
C'est votre propre point interne, inventé.
Compte tenu du fait que le point correspondait autrefois exactement à un point, lorsqu'il n'y avait que quatre chiffres.
Mais après l'introduction du cinquième chiffre, vous avez commencé à inventer des noms avec vos excuses.

Raison: