[ARCHIVE]Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Je ne peux aller nulle part sans toi - 5. - page 212

 
MK07:
Si nous voulons vérifier le nombre de barres après CHAQUE croisement de MA, nous pouvons calculer le nombre de barres après le dernier croisement, mais pas après CHAQUE croisement.

Cela dépend de ce pour quoi vous en avez besoin. Pour un EA, un algorithme, pour un indicateur, un autre.

En général, approximativement comme suit : créons une variable dans laquelle nous stockerons le nombre de croisements. Vous pouvez créer deux variables - pour le haut et pour le bas, par exemple Intersection_UP etIntersection_DN.

Avant la boucle, nous les initialisons avec des zéros.

Créer une boucle de la première barre aux barres: for (int i=1 ; i<Bars ; i++) { // corps de la boucle où nous comptons les intersections ... }.

A chaque intersection sur la barre i ma1 de bas en haut ma2 augmente Intersection_UP, à chaque intersection sur la barre i ma1 de haut en bas ma2 augmente Intersection_DN.

A la fin du cycle, nous avons en deux variables le nombre de passages en haut et en bas. Additionnez-les pour obtenir le nombre total d'intersections.

 
MK07:
Bonjour à tous.Deux MA sont croisées plusieurs fois sur le graphique.Est-il possible de compter le nombre de barres après CHAQUE croisement de MA.Après le dernier, ça marche, mais après CHAQUE MA, ça ne marche pas.Quelqu'un sait-il comment faire ?

C'est simple. Vous réparez le croisement, et créez un compteur. Lorsqu'il y a un croisement, le compteur ajoute 1 barre par croisement. Lorsqu'il y a un croisement, un autre compteur commence à compter.
 
alsu:

Nous ne nous comprenons pas, apparemment.

En général, l'emplacement du problème est défini - la variable statique.

Mais pourquoi une fonction avec cette variable compilée dans le même fichier que l'indicateur fonctionne-t-elle sans problème (la réinitialisation est réussie et tout fonctionne bien), mais lorsque j'adresse la même fonction placée dans la bibliothèque, j'ai des problèmes ?

Peut-être y a-t-il des restrictions sur l'utilisation de certains types dans les fonctions de la bibliothèque ?

 
Bonjour ?
 
polycomp:

En général, l'emplacement du problème est défini - la variable statique.

Mais pourquoi la fonction avec cette variable, compilée dans le même fichier avec l'indicateur fonctionne sans problèmes (la réinitialisation est réussie et tout fonctionne bien), mais quand j'adresse la même fonction, placée dans la bibliothèque, il y a des problèmes ?

Peut-être y a-t-il des restrictions sur l'utilisation de certains types dans les fonctions de la bibliothèque ?



Je ne suis pas un développeur et je ne peux que faire des suppositions. Donc, je suppose que lors de la réinitialisation après avoir changé les paramètres ex4 n'est pas déchargé de la mémoire, et donc lors d'un nouveau départ nous obtenons la même copie de la bibliothèque que précédemment, avec toutes les statiques et leurs anciennes valeurs.

Dans l'idée, toutes les statiques du programme doivent être initialisées avant d'appeler init(). Mais la bibliothèque ex4 n'est chargée qu'immédiatement au moment du premier appel de la fonction de la bibliothèque, de sorte qu'aucune statique de la bibliothèque n'arrive dans le tas commun.

En regardant le tout de cette façon, l'explication est assez logique.

 

Voici la fonctionStringGetChar https://docs.mql4.com/ru/objects/ObjectFind

Pourquoi est-il nécessaire ?

Selon le manuel, il renvoie la valeur d'un caractère sous forme de nombre. Là,"c" correspond à la valeur 99. Comment puis-je le comprendre ? Quelle est l'utilité de cette fonction ?

Donc ça renvoie un nombre... ...et que fait-il ?

Je veux apprendre à travailler avec des chaînes de caractères, et je suis tombé sur cette fonction. C'estpour ça que je demande.

 
alsu:

Je ne suis pas un développeur et je ne peux que spéculer. Donc, je suppose que pendant la réinitialisation après des changements de paramètres, ex4 n'est pas déchargé de la mémoire, donc au nouveau démarrage nous obtenons la même copie de la bibliothèque que précédemment, avec toutes les statiques et leurs anciennes valeurs.

Dans l'idée, toutes les statiques du programme doivent être initialisées avant d'appeler init(). Mais la bibliothèque ex4 n'est chargée qu'immédiatement au moment du premier appel de la fonction de la bibliothèque, de sorte qu'aucune statique de la bibliothèque n'arrive dans le tas commun.

En regardant le tout de cette façon, l'explication est assez logique.


Merci pour cette précision ! Il semble qu'il soit préférable de ne pas utiliser les statiques dans les bibliothèques.
 

J'ai dans ma tête un tableau de 3000 valeurs du même type.

Mais je ne comprends pas bien comment initialiser un tableau unidimensionnel avec ces valeurs.

Je ne comprends pas - dois-je spécifier les 3000 valeurs séparées par une virgule dans l'opérateur d'affectation lors de l'initialisation d'un tableau ?

int Mas_i[3000]= { (Bid>1.2153)&&(Bid<1.2160) , (Bid>1.2156)&&(Bid<1.2163) ...ai-je vraiment besoin de lister les 3000 expressions ? }

Je ne trouve pas de réponse à cette question dans le tutoriel de S.Kovalev..... ou je ne le comprends pas.

Merci.

 
hoz:

Voici la fonctionStringGetChar https://docs.mql4.com/ru/objects/ObjectFind

Pourquoi est-il nécessaire ?

Selon le manuel, il renvoie la valeur d'un caractère sous forme de nombre. Là,"c" correspond à la valeur 99. Comment puis-je le comprendre ? Quelle est l'utilité de cette fonction ?

Donc ça renvoie un nombre... ...et que fait-il ?

Je veux apprendre à travailler avec des chaînes de caractères, et je suis tombé sur cette fonction. C'estpour ça que je demande.


Pour écrire dans le tableau (à ne pas confondre avec le commentaire), il faut coder un code numérique. Si vous écrivez 99, la lettre "s" apparaîtra sur le tableau. Je ne l'ai pas encore fait, mais vous pouvez trouver comment faire tout cela dans le Dock, et avec quelle police, taille, orientation des axes X et Y en pixels, etc. Si c'est tout ce qui vous manque déjà, allez-y, mais cela prendra beaucoup de temps ! Bonne chance !
 
hoz:

Voici la fonctionStringGetChar https://docs.mql4.com/ru/objects/ObjectFind

Pourquoi est-il nécessaire ?

Selon le manuel, il renvoie la valeur d'un caractère sous forme de nombre. Là,"c" correspond à la valeur 99. Comment puis-je le comprendre ? Quelle est l'utilité de cette fonction ?

Donc ça renvoie un nombre... ...et que fait-il ?

Je veux apprendre à travailler avec des chaînes de caractères, et je suis tombé sur cette fonction. C'estpour ça que je demande.


Tout caractère ANSI est codé dans un ordinateur avec 1 octet d'information. Par exemple,"s" s'écrit dans l'ordinateur comme 01100011, c'est-à-dire le même 99. C'est le nombre que StringGetChar() produit. Cette fonction est souvent nécessaire lors de la lecture de données binaires à partir de fichiers. Vous ne pouvez pas vous en passer lorsque vous calculez, par exemple, le CRC, etc.
Raison: