Erreurs, bugs, questions - page 2313

 
fxsaber :

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) :

Salut,

Avez-vous obtenu une réponse utile de Metaquotes ?

J'ai un client qui souhaite utiliser le testeur de stratégie MT5 pour améliorer ses performances. La stratégie EA peut facilement utiliser le mode "Prix disponibles uniquement". Cependant, le backtest, qui prend 1,5 seconde avec MT4, est réalisé en 5 secondes avec MT5 !

La stratégie utilise un stop suiveur et semble utiliser OrderSend () pendant 90% du temps de backtest :


 
Alain Verleyen:

Salut,

Avez-vous obtenu une réponse utile de Metaquotes ?

J'ai un client qui souhaite utiliser le testeur de stratégie MT5 pour améliorer ses performances. La stratégie EA peut facilement utiliser le mode "Prix disponibles uniquement". Cependant, le backtest, qui prend 1,5 seconde avec MT4, est réalisé en 5 secondes avec MT5 !

La stratégie utilise un stop suiveur et semble utiliser OrderSend () pendant 90% du temps de backtest :

Toutes les réponses ont été données dans ce fil uniquement. On dirait que quelque chose a été fait.

MetaQuotes Software Corp.:
  1. Testeur : Testeur de stratégie optimisé et accéléré.

Je l'ai résolu moi-même grâce à Virtual.


ZZY Montrez votre EA.

Библиотеки: Virtual
Библиотеки: Virtual
  • 2018.10.03
  • www.mql5.com
Статьи и техническая библиотека по автоматическому трейдингу: Библиотеки: Virtual
 
fxsaber:

On dirait que quelque chose a été fait

1930

Core 1  pass 0 returned result 99753711.00 in 0:00:03.729
Core 1  pass 1 returned result 99753711.00 in 0:00:03.432
Core 1  pass 2 returned result 99753711.00 in 0:00:03.401
Core 1  pass 3 returned result 99753711.00 in 0:00:03.354
Core 1  pass 4 returned result 99753711.00 in 0:00:03.323
Core 1  pass 5 returned result 99753711.00 in 0:00:03.385
Core 1  pass 6 returned result 99753711.00 in 0:00:03.448
Core 1  pass 7 returned result 99753711.00 in 0:00:03.369
Core 1  pass 8 returned result 99753711.00 in 0:00:03.369
Core 1  pass 9 returned result 99753711.00 in 0:00:03.385
Tester  optimization finished, total passes 10
Statistics      optimization done in 0 minutes 35 seconds
Statistics      shortest pass 0:00:03.323, longest pass 0:00:03.729, average pass 0:00:03.419


Virtual

Core 1  pass 0 returned result 99753711.00 in 0:00:02.231
Core 1  pass 1 returned result 99753711.00 in 0:00:01.217
Core 1  pass 2 returned result 99753711.00 in 0:00:01.217
Core 1  pass 3 returned result 99753711.00 in 0:00:01.185
Core 1  pass 4 returned result 99753711.00 in 0:00:01.170
Core 1  pass 5 returned result 99753711.00 in 0:00:01.201
Core 1  pass 6 returned result 99753711.00 in 0:00:01.186
Core 1  pass 7 returned result 99753711.00 in 0:00:01.201
Core 1  pass 8 returned result 99753711.00 in 0:00:01.185
Core 1  pass 9 returned result 99753711.00 in 0:00:01.202
Tester  optimization finished, total passes 10
Statistics      optimization done in 0 minutes 13 seconds
Statistics      shortest pass 0:00:01.170, longest pass 0:00:02.231, average pass 0:00:01.299


La différence est trois fois supérieure à ce qu'elle était en 1881. Il a probablement été modifié ailleurs. Mais le sujet OrderSend n'a probablement pas été touché.

 
fxsaber :

Toutes les réponses ont été données uniquement dans ce fil. On dirait que quelque chose a été fait.

Je l'ai résolu moi-même grâce à Virtual.

Je vous remercie de votre réponse.
 
Les gars. Il y a encore une erreur sur le site.
Je ne peux pas répondre aux messages du marché à partir de mon téléphone. La liste ne s'affiche pas.
En vacances, pas d'ordinateur.

Dossiers :
 

L'optimisation génère des paquets de 128 travaux pour chaque agent. Est-il possible de former des paquets d'une taille différente ?

Voici la situation

Tous les agents, sauf un, ont terminé leur tâche. Et nous devons attendre que l'optimisation soit terminée à cause d'un agent. Mais il a été possible de parvenir à une cessation quasi simultanée du travail de tous les agents.

Considérons, par exemple, comme sur la capture d'écran, 8 Agents et 5376 tâches. 5376 / 8 = 672 tâches. Vous pouvez donc former des paquets de taille 336 (=672/2), 168 (672/4) ou 84 (672/8) emplois chacun. Et tous les agents atteindraient la ligne d'arrivée en même temps.


La valeur de 128, en revanche, ne tient pas compte de cette multiplicité. Il en résulte des temps d'optimisation plus longs si plusieurs cœurs sont utilisés.

 

Je voulais mettre une note sur le KB et ça n'a pas marché. Et à en juger par le fait que les publications récentes n'ont pas de classement du tout, il semble que je ne sois pas le seul à avoir ce problème.

Et en même temps, je veux bien admettre que le système de notation(simple moyenne arithmétique ) donne envie d'en avoir plus. Après tout, un code récemment publié avec une note de 5 étoiles sera plus élevé qu'un code qui est en BE depuis plusieurs années et qui a 49 notes de 5 étoiles et une note de 4 étoiles. Est-ce juste ?

À mon avis, cette formule serait au moins beaucoup plus équitable :

double R=Average*pow(N,0.1);

Où :

R- la note que vous recherchez

Score moyen - moyenne arithmétique

N- nombre d'évaluations.

 
fxsaber:

L'optimisation génère des paquets de 128 travaux pour chaque agent. Est-il possible de former des paquets d'une taille différente ?

Voici la situation

Tous les agents, sauf un, ont terminé leur tâche. Et nous devons attendre que l'optimisation soit terminée à cause d'un agent. Mais il a été possible de parvenir à une cessation quasi simultanée du travail de tous les agents.

Considérons, par exemple, comme sur la capture d'écran, 8 Agents et 5376 tâches. 5376 / 8 = 672 tâches. Vous pouvez donc former des paquets de taille 336 (=672/2), 168 (672/4) ou 84 (672/8) emplois chacun. Et tous les agents atteindraient la ligne d'arrivée en même temps.


La valeur de 128, en revanche, ne tient pas compte de cette multiplicité. Cela entraîne une augmentation du temps d'optimisation si plusieurs cœurs sont utilisés.

Dans l'ensemble, je suis d'accord, mais je pense qu'il serait plus correct d'activer l'annulation automatique des tâches pour les agents (déjà mis en œuvre en appuyant sur le bouton pour désactiver l'activité de l'agent), s'il y a des agents libres et 5 fois plus de tâches et de redistribuer les tâches à nouveau à tous les agents, y compris les agents distants.

 

Bonjour à tous ! Désolé pour la question stupide. Les gars, pourriez-vous me dire comment faire pour que la propriété Pressed d'un bouton soit vraie quand on clique sur le bouton gauche et fausse quand on clique sur le bouton gauche. Maintenant la situation est telle, que rien ne se passe en appuyant dessus, et en relâchant Pressed change sa valeur en son contraire.

Je comprends que je dois remplacer les gestionnaires d'événements CButton::OnMouseUp et CButton::OnMouseDown, mais je n'ai aucune idée de l'endroit où le faire. Un indice s'il vous plaît. Merci d'avance !

 

Camarades développeurs !

Dans MT4, un clic sur l'objet graphique sélectionné déclenche l'événement"CHARTEVENT_OBJECT_DRAG". Il s'agit d'une véritable erreur.

Dans mt5, ce problème n'existe pas.

void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
 {
  if(id==CHARTEVENT_OBJECT_DRAG)
    Print(id); // 2
 }