Testeur de stratégie MetaTrader 5 : bugs, anomalies, suggestions d'amélioration - page 21

 

Dans le testeur, l'acceptation des ordres à cours limité n'est pas vérifiée sur le tick set/modify.

De ce fait, lorsqu'un ordre à cours limité est placé au prix actuel, il n'est pas exécuté, ce qui n'est pas conforme aux règles du marché.


Y aura-t-il des changements dans le testeur pour cette situation ?

 

Le testeur fonctionne en 12 flux depuis 27 heures maintenant. C'est une drôle de photo souvenir. Vous pouvez voir ici que l'application ne consomme pas beaucoup de mémoire.


Surtout le statut des agents est plus que libre.



Il y a aussi une instance qui a déjà fini de travailler dans 1 fil. La mémoire swap est allouée.


Fermeture de l'instance en cours :

Immédiatement, 26 Go se sont libérés. Je pense que les threads conservent la mémoire dans l'état alloué ? C'est ce que montre Process Explorer. Chaque instance dispose de 4 Go (sauf une). Cela dit, une personne s'est désistée (il devrait y en avoir 12).


Le problème est que, même si la mémoire privée n'est pas utilisée, lorsque le fichier d'échange est plein, le même Chrome se met à jurer sur l'insuffisance de mémoire. En même temps, la RAM est à moitié libre...


La deuxième question est la suivante. Pourquoi, lors d'une optimisation génétique, les threads restent-ils souvent inactifs et attendent-ils qu'un thread se termine ? Cela a-t-il un sens de les tuer en calculant avec la prédiction et en détectant les différents résultats de l'attente de la fin du fil attendu ? Ou bien essayer de " secouer " à nouveau certains paramètres et chercher d'autres solutions ?

PS. J'ai mis les agents en mode désactivé puis les ai réactivés - ils ont cessé de manger la mémoire. Mais il me semble que le cache disque se recrée également au démarrage ?
 

Il y a un bug dans le temps d'annulation d'un ordre en attente sur un événement de manque d'argent.

Il y a un temps zéro (mis en évidence dans la capture d'écran) à la place du temps d'annulation.

Et le statut placé au lieu d'annulé.

 

Analysons maintenant la situation sur le morceau mis en évidence.


vous devez déplacer le curseur, vous souvenir de la date qui apparaît, ouvrir le graphique d'exécution, vous rendre à l'endroit voulu dans l'historique des transactions et double-cliquer sur la ligne correspondante dans le tableau.


Peut-on remplacer tout cela en double-cliquant sur le point du graphique ci-dessus ?

 
fxsaber:

Tout cela peut-il être remplacé par un double clic sur le point du graphique ci-dessus ?

Je pense que c'est fantastique, une "fonctionnalité" très nécessaire - je la soutiens ! !!

 

Forum sur le trading, les systèmes de trading automatisé et les tests de stratégies de trading

Testeur de stratégie MetaTrader 5 : bugs, anomalies, suggestions d'amélioration

fxsaber, 2019.10.14 23:32

Dans MT5, vous pouvez fermer une position et obtenir une perte (le solde avant ouverture est inférieur au solde après fermeture). Mais dans le même temps, le testeur MT5 (terminal non vérifié) considère cette transaction comme rentable.

J'ai élaboré un conseiller expert pour jouer

#include <MT4Orders.mqh> // https://www.mql5.com/ru/code/16006

#define  Ask SymbolInfoDouble(_Symbol, SYMBOL_ASK)

void OnTick()
{
  if (!OrderSelect(0, SELECT_BY_POS))
    OrderSend(_Symbol, OP_BUY, 1, Ask, 0, 0, 0);
  else if ((OrderProfit() > -OrderCommission()) &&
           (OrderProfit() < -OrderCommission() * 2) &&
           OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 0))
    ExpertRemove();
}


Exécutez-la dans le testeur de stratégie à partir d'un serveur de trading, où il y a une commission (je l'ai exécutée sur celui-ci : ForexTimeFXTM-Demo01).

Le résultat est en images.


Dans la capture d'écran, vous pouvez voir qu'il y avait une position BUY, qui a été clôturée avec une perte totale - le solde initial a diminué.


Et c'est ce qui est mis en évidence ici dans la colonne de gauche - le conseiller expert a subi une perte.

Et maintenant, regardons ce qui est mis en évidence dans la deuxième colonne. Tout y est génial avec une espérance mathématique positive et des trades 100% rentables !


Il s'avère donc que le conseiller expert est perdant alors que l'indicateur semble rentable. Le calcul du PF est donc faussé.


ZZY a écrit un exemple en une minute. J'ai réfléchi avec terreur, au temps qu'il faudrait pour l'écrire en MQL5 ou SB. Qui n'est pas paresseux - essayez-le.

 

Dans le testeur, l'onglet Vue d'ensemble présente une liste très pratique des actions précédentes avec un filtre interactif.

Dans cette liste, les noms des EA sont affichés sans chemin. Pour cette raison, lorsqu'il y a deux EA avec le même nom, mais dans des dossiers différents, la liste ne montre pas (et ne peut pas filtrer) quel EA correspond à quelle entrée.


Est-il possible d'afficher dans cette liste d'actions précédentes les noms des EAs avec leurs chemins d'accès depuis le dossier Experts ?

Je n'utilise pas d'indicateurs, mais il serait probablement raisonnable de faire de même pour eux.

 
Le testeur prend en compte les deux côtés des transactions CloseBy lors du calcul du nombre de transactions. D'où le nombre incorrect de transactions, l'espérance mathématique, etc.
 
EA
#include <MT4Orders.mqh> // https://www.mql5.com/ru/code/16006

#define  Bid SymbolInfoDouble(_Symbol, SYMBOL_BID)
#define  Ask SymbolInfoDouble(_Symbol, SYMBOL_ASK)

int OnInit()
{
  return(OrderCloseBy(OrderSend(_Symbol, OP_BUY, 1, Ask, 0, 0, 0), OrderSend(_Symbol, OP_SELL, 
2, Bid, 0, 0, 0)));
}


le rapport ne donne que des zéros. Bien que l'échange soit en cours.


La raison pour laquelle = 1 n'est pas claire non plus. Il n'est pas présent dans le code source.

 
fxsaber:
EA


le rapport ne donne que des zéros. Bien que l'échange soit en cours.


La raison pour laquelle OnTester == 1 n'est pas non plus claire. Il n'est pas présent dans le code source.

Vous êtes sûr qu'il s'agit d'une transaction dans OnInit ? Et comment allez-vous utiliser GetLastError avec votre code ? Et une autre question. Êtes-vous sûr de l'ordre dans lequel les arguments de la fonction sont calculés ?
Raison: