Avec quoi remplacer OnTradeTransaction() dans mql4 ? - page 6

 
Vitaly Muzichenko:

Non, mais peut-être que nous parlons de choses différentes.

Cela fonctionnera toujours.

J'ai quand même dû ouvrir le terminal et vérifier... Voici trois exécutions du même script et trois résultats.

Il n'y a qu'une seule ligne dans le script.

  Print("OrdersHistoryTotal ", OrdersHistoryTotal());
2020.01.27 18:28:51.063 Script 00 EURGBP,H4: removed
2020.01.27 18:28:51.063 00 EURGBP,H4: uninit reason 0
2020.01.27 18:28:51.063 00 EURGBP,H4: OrdersHistoryTotal 48
2020.01.27 18:28:51.063 00 EURGBP,H4: initialized
2020.01.27 18:28:51.043 Script Test\00 EURGBP,H4: loaded successfully
2020.01.27 18:28:38.203 Script 00 EURGBP,H4: removed
2020.01.27 18:28:38.193 00 EURGBP,H4: uninit reason 0
2020.01.27 18:28:38.193 00 EURGBP,H4: OrdersHistoryTotal 47
2020.01.27 18:28:38.193 00 EURGBP,H4: initialized
2020.01.27 18:28:38.183 Script Test\00 EURGBP,H4: loaded successfully
2020.01.27 18:28:16.443 Script 00 EURGBP,H4: removed
2020.01.27 18:28:16.443 00 EURGBP,H4: uninit reason 0
2020.01.27 18:28:16.443 00 EURGBP,H4: OrdersHistoryTotal 4
2020.01.27 18:28:16.443 00 EURGBP,H4: initialized
2020.01.27 18:28:16.423 Script Test\00 EURGBP,H4: loaded successfully

Je veux dire que si un EA fonctionne et qu'un utilisateur décide de changer la plage d'affichage de l'historique avec ses mains coquines, l'EA va devenir fou lors du deuxième changement. Maintenant il sera plus petit, maintenant il sera plus grand, maintenant il sera différent de celui mémorisé. Et même si la ligne

  if(HT!=__TotalHist)

mettre > au lieu de !=, la situation ne changera pas. Si l'EA est en cours d'exécution lorsque le paramètre est réglé sur "Aujourd'hui" et qu'il passe à "Tout l'historique"... que se passe-t-il ?

 
Aleksandr Volotko:

Je n'oserais jamais toucher à OrderHistoryTotal(), pourquoi le ferais-je ?

Juste au cas où : ))))

 
Alexey Viktorov:

Juste au cas où : ))))

:))) OrdersTotal() est suffisant pour moi

Peut-être qu'il faut faire deux minuteurs ? l'un compare les valeurs de OrdersTotal() même une fois toutes les 100 ms, et le second pour la sécurité une fois par minute (ou moins fréquemment) dans une boucle - pas une souris ne peut passer par là, si l'une des deux douzaines de transactions se ferme/ouvre 100500 fois par minute plus tard - je ne vais certainement pas mourir, je suppose que le dépôt aussi.

 
Aleksandr Volotko:

:))) OrdersTotal() est suffisant pour moi

Peut-être que je devrais faire deux minuteurs : l'un d'eux compare les valeurs de OrdersTotal() même une fois toutes les 100 ms, et le second - une fois par minute (ou moins fréquemment) passe par la boucle - pas une seule souris ne peut passer par là, si l'un des deux douzaines d'ordres se ferme/ouvre une minute plus tard, que 100500 fois - je ne mourrai sûrement pas et je suppose que mon dépôt aussi.

Et le nombre d'ordres ouverts en même temps est fourni par l'algorithme ?

 
Alexey Viktorov:

J'ai quand même dû ouvrir le terminal et vérifier... Voici trois exécutions du même script et trois résultats.

Il n'y a qu'une seule ligne dans le script

Ce que je veux dire, c'est que si l'EA fonctionne et qu'un utilisateur décide de changer la plage d'affichage de l'historique avec ses mains coquines, l'EA va devenir fou lors du deuxième changement. Maintenant il sera plus petit, maintenant il sera plus grand, maintenant il sera différent de celui mémorisé. Et même si la ligne

La situation ne changera pas si nous mettons > au lieu de !=. Si l'Expert Advisor est lancé au moment où le paramètre est "Aujourd'hui" et passe à "Tout l'historique"... que se passera-t-il ?

Dans tous les cas, il ne sera pas égal, et le code ira plus loin. Mais si nous définissonsif(HT >__TotalHist), alors nous serons confrontés à des problèmes.

 
Alexey Viktorov:

Et combien d'ordres ouverts l'algorithme prévoit-il au total ?

Deux ou trois douzaines tout au plus.

 
Vitaly Muzichenko:

Dans tous les cas, il ne sera pas égal et le code passera à autre chose. Mais si (HT >__TotalHist)alors il y a un problème.

Vitaly, il y aura des problèmes dans tous les cas. Quelle que soit la façon dont vous le voyez, si l'EA doit réagir aux changements du nombre d'ordres dans l'historique, il réagira indépendamment de la façon dont le nombre d'ordres a changé. En fait, le nombre d'ordres dans l'histoire ne peut qu'augmenter, c'est pourquoi j'ai suggéré que ce serait moins dangereux, mais cela ne résout pas le problème. Même si vous l'avez rédigé uniquement pour vous-même, vous ne pouvez pas exclure la possibilité d'une commutation manuelle. On ne sait jamais quel genre de SMS va nous venir à l'esprit ;)))

 
Aleksandr Volotko:

2-3 douzaines tout au plus

Pour un tel nombre, il serait plus facile de créer un tableau de tickets ou même un tableau de structures avec des propriétés d'ordre et de vérifier le changement de type et l'heure de clôture à chaque tick. Cela nous permettra de suivre l'activation d'un ordre en attente ou la fermeture d'une position. Et en ouvrant immédiatement après l'envoi de OrderSend(), ajoutez la taille du tableau et mettez-y tout ce dont vous avez besoin.

 
C'est ça le truc, tu peux secouer les commandes 86400 fois par jour, mais tu n'as pas voulu.
 
Aleksandr Volotko:
C'est ça le truc, tu peux secouer les commandes 86400 fois par jour, mais tu n'as pas voulu.

Dans ce cas, il serait difficile de vivre sans la bibliothèque d'Artem.

Raison: