Erreurs, bugs, questions - page 2301
![MQL5 - Langage des stratégies de trading intégré au terminal client MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Vous manquez des opportunités de trading :
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Inscription
Se connecter
Vous acceptez la politique du site Web et les conditions d'utilisation
Si vous n'avez pas de compte, veuillez vous inscrire
Mais cela nécessite la création de DEUX objets nommés, par exemple, Hi et Lo (extrémités supérieure et inférieure du zigzag ou extrémités supérieure et inférieure de la tendance locale réelle à la hausse ou à la baisse) et de les lier tous les deux au graphique avec les valeurs correspondantes de ANCHOR_LOWER et ANCHOR_UPPER. Ne serait-il pas plus simple de lier (d'une manière ou d'une autre) le haut du zigzag - au bas précédemment "lié" ? C'est à peu près ce que j'ai fait, en ajoutant une ligne à la fonction précédente
ObjectSetInteger(0,Obj,OBJPROP_ANCHOR,ANCHOR_CENTER) ; et introduire une "correction de décalage" à la ligne de sortie if(tvT) ORT(kBtT,Low[kBtT]-2*_Point,DtT,LowClr) ; else ORT(kBtT,High[kBtT]+2*_Point,DtT,HighClr) ; //
Jusqu'à présent, cela semble fonctionner. Merci !
Quel est l'intérêt ? Vous pouvez modifier l'attachement à tout moment. Ou est-ce que je rate quelque chose ? Vous changez la couleur. Donc, vous changez l'attelage.
Après avoir fermé la fenêtre de débogage, recompilé et lancé une seule exécution dans le testeur sans visualisation, j'ai obtenu ceci
Je n'ai rien pu faire pendant 20 secondes. Le bouton Start était grisé tout le temps.
Les registres de l'agent.
Les journaux montrent que le testeur a essayé de se connecter à l'agent à 01:52, mais que l'agent (serveur) lui-même ne s'est arrêté qu'à 01:54. D'où l'incapacité à se connecter et à se suspendre. C'est un bogue de longue date, mais au moins la cause est maintenant claire.
Résultats du profileur sur les données historiques
Le système interne OrderSend prend un tiers du temps. Qu'est-ce qui provoque des résultats aussi désagréables ?
Résultats du profileur sur les données historiques
L'OrderSend interne prend un tiers du temps. Qu'est-ce qui provoque des résultats aussi désagréables ?
Dans le testeur, toute la logique de négociation est ici, et non sur le serveur de négociation.
Dans le testeur, toute la logique de négociation est ici, et non sur le serveur de négociation.
Presque trois millions de ticks et seulement 16K OrderSend. Mais ces ordres commerciaux prennent un tiers du temps. Et à chaque tick, il y a des calculs dans l'Expert Advisor.
D'où ma question. Pourriez-vous exécuter le code de OrderSend dans le profiler ? À quel endroit y a-t-il un tel problème ?
Je suppose que si vous remplacez la fonction standard par la vôtre, elle fonctionnera plus rapidement. Probablement, il y a quelques contrôles et gestes coûteux dans OrderSend. Par exemple, s'il n'y a pas de fonctions d'historique et de OnTrade* dans le conseiller expert (+ indicateurs), la création des enregistrements/événements appropriés est une perte de temps.
Je comprends que pour certaines personnes, une course dure plusieurs minutes. Mais il existe des cas comme celui-ci - des unités de quelques secondes, si vous prêtez attention à la vitesse d'exécution. Et là, il s'avère que je lance Optimize pendant trois heures, dont une heure pour OrderSend, dont le temps d'exécution moyen est de 69 µs (voir capture d'écran) :
J'ai établi le profil du testeur à de nombreuses reprises. Et je sais où se trouve le "hitch". Il s'agit de calculs financiers, qui impliquent plusieurs normalisations des résultats en fonction du nombre de chiffres de la monnaie de dépôt.
Je vais écrire mon OrderSend et le comparer.
Forum sur le trading, les systèmes de trading automatisés et les tests de stratégie
Conversion correcte de double en int
Slava, 2018.09.28 07:10
Je vais aussi vérifier. Pourquoi avez-vous besoin de normaliser les doublages ?Ma compréhension du testeur est-elle correcte ?
C'est-à-dire que la deuxième étape, très coûteuse, est effectuée pour éviter que la troisième étape ne soit très coûteuse. Puisqu'il y a plusieurs ordres de grandeur de ticks (troisième étape) par rapport à OrderSend (deuxième étape).
Quand Digits == 0, NormalizeDouble ralentit ?