[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 310

 
david2:
Comment implémenter cette fonction dans votre EA ? Lorsqu'un TP ou SL est déclenché sur l'un des ordres Bay, tous les ordres Bay doivent être fermés.

Si vous avez une expérience de la programmation, un conseil :

1. après avoir ouvert un ordre d'achat, comptez le nombre d'ordres d'achat

2. Sauvegarder leur numéro dans une variable globale

Au tick suivant, vérifiez que le nombre d'ordres d'achat est inférieur au précédent, puis fermez tous les ordres d'achat.

Il existe des fonctions qui calculent le nombre d'ordres par type de position ouverte et par fermeture de positions d'un type sélectionné (achat ou vente) dans la Kodobase.

De nombreuses fonctions utiles dans les fonctions de Kim

 

À propos de la conversion des types de variables.
Écrit la valeur du coefficient double K dans la description de la ligne comme texte (K=0.573).
Pendant l'exécution du code, la valeur du coefficient K a changé plusieurs fois.
Maintenant je veux multiplier la variable double Z par la valeur K=0.573 après avoir extrait la chaîne de description de ligne ObjectDescription(string name).
Est-il possible de convertir une variable de type string en une variable de type double dans MQL pour obtenir à nouveau 0.573. Si possible, veuillez me donner le lien.
Regards. Shurkin.

 
Shurkin:

Est-il possible de convertir une variable de type string dans MQL en une variable de type double pour obtenir à nouveau 0.573. Si possible, veuillez me donner un lien.
.

https://docs.mql4.com/ru/convert/StrToDouble
 
08:05:30 Sec.TF AUDUSD,M1 : 15
08:05:31 Tick.tf AUDUSD,M1 : 0
08:05:33 Tick.tf AUDUSD,M1 : 0
08:05:33 Tick.tf AUDUSD,M1 : 0
08:05:35 Tick.tf AUDUSD,M1 : 0
08:05:38 Tick.tf AUDUSD,M1 : 0
08:05:39 Tick.tf AUDUSD,M1 : 0
08:05:39 Tick.tf AUDUSD,M1 : 0
08:05:40 Tick.tf AUDUSD,M1 : 0
08:05:41 Tick.tf AUDUSD,M1 : 0
08:05:42 Tick.tf AUDUSD,M1 : 0
08:05:42 Tick.tf AUDUSD,M1 : 0
08:05:43 Tick.tf AUDUSD,M1 : 0
08:05:51 GMT AUDUSD,M1 : 15062
08:05:54 Tick.tf AUDUSD,M1 : 0
08:05:54 Tick.tf AUDUSD,M1 : 0
08:05:55 Tick.tf AUDUSD,M1 : 0
08:05:56 Tick.tf AUDUSD,M1 : 0
08:05:56 Tick.tf AUDUSD,M1 : 0
08:05:57 Tick.tf AUDUSD,M1 : 0
08:05:58 Tick.tf AUDUSD,M1 : 0
08:05:58 Tick.tf AUDUSD,M1 : 16
08:05:59 Tick.tf AUDUSD,M1 : 0
08:06:00 Tick.tf AUDUSD,M1 : 0
08:06:06 Tick.tf AUDUSD,M1 : 0
08:06:06 Tick.tf AUDUSD,M1 : 0
08:06:09 GMT AUDUSD,M1 : 10156
08:06:16 Tick.tf AUDUSD,M1 : 0
08:06:16 Tick.tf AUDUSD,M1 : 0
08:06:17 Tick.tf AUDUSD,M1 : 0
08:06:18 Tick.tf AUDUSD,M1 : 0
08:06:26 GMT AUDUSD,M1 : 5078
08:06:27 Tick.tf AUDUSD,M1 : 0
08:06:28 Tick.tf AUDUSD,M1 : 0
08:06:30 Tick.tf AUDUSD,M1 : 31

08:06:32 GMT AUDUSD,M1 : 15

Une partie du journal avec une minuterie en millisecondes dans les deux codes (temps de tic et de seconde). Tout ce à quoi j'ai pensé jusqu'à présent est de supprimer complètement les cycles, c'est-à-dire un ou plusieurs ticks par seconde, quel que soit le nombre de secondes écoulées depuis le dernier tick - il s'agit toujours d'une bougie. S'il y avait une seconde et ainsi de suite sur les ticks par seconde - un chandelier avec des ombres. Mais ensuite, il y aura un deuxième TF avec des "trous" et par High[15], supposons que je ne prendrai pas la valeur de asc il y a 15 secondes...

 
hoz:

Je me suis demandé comment écrire une fonction. L'idée est que lorsque N bougies se retournent dans une certaine direction, il doit calculer le nombre de bougies. MAIS. Pour cela, il y a plusieurs conditions, ou plus précisément, il y en aura une liste au fil du temps.

Disons que la tendance, par exemple, est dirigée vers le bas,... ...un pullback augmente. Je veux que, si 5 chandeliers sont montés, et que chaque chandelier était haussier, et, par exemple, la taille de chaque chandelier était plus grande quei_sizeOfCurrBar, et d'autres conditions, le nombre de barres continuellement haussières soit affiché, et que la fonction renvoie un résultat.

Quelle est la meilleure façon de l'écrire ? En ce moment, j'ai commencé à écrire, et je comprends que je devrais le faire passer par une boucle par barres, et d'une certaine manière je devrais limiter la vue dans la profondeur de l'histoire non pas par un nombre fixe de barres, mais par barres, avec ces paramètres, qui nous intéressent par conditions.

Voilà ce que j'ai :

Pour le moment, nous allons simplement de l'avant-dernière barre à la barre d'indice 6, c'est-à-dire 5 barres d'affilée. Mais je veux que mon conseiller expert recherche uniquement les barres qui sont haussières et non pas toutes les barres d'affilée. Comment la mettre en œuvre de manière adéquate ?

J'ai en quelque sorte correctement filtré par taille.

Eh bien, quand tout est déjà écrit, le compteur en bas calculera déjà le nombre de barres continues avec les paramètres nht,etvsvb et s'il y a assez de ces barres, alors une valeur de la fonction sera retournée.

Comme toujours original : compter les barres "d'en bas"...

for (int i=Bars-1; i>=Bars-6; i--)
 
Zhunko:

Il y a beaucoup de manières différentes :

1. Par le biais d'une variable globale.

2. Via le dossier.

3. via iCustom().

4. Par le biais des variables graphiques globales.

5. Cartographie. Vous pouvez transférer des données d'un terminal à un autre. Ou dans un terminal pour transférer des données d'une fenêtre à l'autre sans les limitations des variables globales de MT4.


Laquelle de ces œuvres est la plus rapide ?
 
gyfto:

Laquelle de ces œuvres est la plus rapide ?
5. Cartographie.
 
hoz:
Dans l'impression, il a une valeur de 1 et 2... Qu'est-ce qui se passe ici, de toute façon ?
Print("i = ", i, "; up = ", cnt, "; cnt = ", cnt);

Juste de l'inattention. En général, le bool est ici de 4 octets, ce qui ne l'oblige pas à prendre uniquement les valeurs 0 et 1. L'apprentissage en C++ se fait sur un octet. Personnellement, j'utilise bool en arithmétique binaire dans switch(), si je dois faire des choix multiples, en sachant que c'est toujours 0 ou 1)). Comme ça :

bool f1, f2, f3, f4//флаги

switch(8*f4+4*f3+2*f2+f1){
   case 0:
   ...
   case 15:
}//без default
 
gyfto:

Une telle question. Comment optimiser maintenant ? Le squelette de l'Expert Advisor est le suivant :

J'ai mis open-close dans les variables et supprimé le deuxième bloc FileSeek, qui est devenu inutile, ajouté la sélection du style de chandelier (tout haussier, tout baissier, n'importe lequel), ajouté des ombres si le prochain ascendant ou descendant est supérieur ou inférieur au précédent haut et bas, ajouté le traçage avec le print, qui est activé par un drapeau dans l'en-tête, tout commenté avec des liens vers les numéros de ligne, essayé de rendre le code lisible pour le forum. J'ai également ajouté les numéros de ligne à l'impression.

Maintenant, regardez :

Au-dessus du tick timeframe, au-dessous du second timeframe. Les ombres (queues) se produisent lorsque deux ticks ont été capturés en une seconde et que l'offre ou la demande diffère de la précédente. Le tic-tac fonctionne comme une horloge. Le deuxième tic-tac est en retard, ce qui signifie qu'il prend plus de temps pour traiter le tic-tac que l'intervalle minimal entre les tics. C'est pourquoi je demande comment optimiser le code. Je joins le code et je répète que j'ai tout surcommenté. Si vous voulez vérifier comment il fonctionne - vous le configurez comme un EA sur les minutes, puis dans la recherche autonome et ouvrir 'sec'+nom de l'instrument.

Je ne suis pas entré dans la logique, mais quelque chose me dit qu'il y a des calculs supplémentaires. Il y a un an et demi, je résolvais le même problème en rassemblant des citations et en formant des chandeliers M1 avec une coupe nette au début de la minute astronomique.
Si cela vous intéresse, vous pouvez jeter un coup d'œil à quelques moments d'optimisation pure de votre code (fichier). Vraiment, si nous parlons sérieusement d'optimisation, vous devez mesurer le temps d'exécution du code. ;)
Dossiers :
hhi.jt_c_.mq4  23 kb
 

Question sur le fonctionnement du testeur : Après avoirexécuté un test, vous modifiez les paramètres (dates, paire de devises, délai), vous relancez le test - il s'exécute, mais lorsqu'il est terminé, les informations dans les onglets comme "graphique" et "rapport" ne changent pas du tout - tout reste du test précédent. Le rapport sauvegardé s'avère également être ancien. Quelle en est la raison et comment y remédier ? Peut-être existe-t-il une fonction permettant de réinitialiser les résultats ?

J'ai lu le manuel, les articles, j'ai fait des recherches sur le forum - je n'ai rencontré aucune mention d'un tel problème...