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

 
fxsaber:
Si ce sont les formules correctes


Le Testeur calcule ces chiffres de manière très différente. J'ai des différences frappantes dans les résultats entre ces formules et ce que montre le Testeur (à part le bénéfice).

Je suggère que nous allions au fond des choses. Le hic, c'est de savoir exactement ce que MT5 considère comme une transaction rentable.

const double Profit = OrderProfit() + OrderCommission() + OrderSwap();

Retirez-en un, ou les deux à la fois, et comparez.

Ou ici (si ce qui précède ne vous aide pas), supprimez "=".

if (Profit >= 0)
 
Slava:

De quoi parlons-nous maintenant ? Désactiver les agents ou autoriser l'utilisation de personnages dans les tests/optimisations ?

S'il y a deux problèmes, nous devrions probablement discuter et résoudre les deux. Ou est-ce impossible ?

1. Pourquoi il y a une désactivation des agents après l'optimisation.

2. Quelle est la raison de l'arrêt de l'ajout automatique de caractères au testeur ?

 
Artyom Trishkin:

Retirez-en un, ou les deux à la fois, et comparez.

Ou ici (si ce qui précède ne vous aide pas), supprimez "=".

Voici comment fonctionne MT5

double ProfitPlus = 0;  // Профит неотрицательных закрытых позиций.
double ProfitMinus = 0; // Профит отрицательных закрытых позиций.

int AmountPlus = 0;  // Количество неотрицательных закрытых позиций.
int AmountMinus = 0; // Количество отрицательных закрытых позиций.

for (int i = OrdersHistoryTotal() - 1; i >= 0; i--)
  if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY) && (OrderType() <= OP_SELL))
  {
    const double Profit = OrderProfit()+ (OrderCommission() / 2) + OrderSwap();
    
    if (Profit >= 0)
    {
      ProfitPlus += Profit;
      AmountPlus++;
    }
    else
    {
      ProfitMinus += Profit;
      AmountMinus++;
    }      

    ProfitMinus += OrderCommission() / 2;
  }

const double PF = ProfitMinus ? -ProfitPlus / ProfitMinus : DBL_MAX; // Профит-фактор.
const double Profit = ProfitPlus + ProfitMinus;                      // Профит

Par exemple, dans MT5, vous pouvez fermer une position et subir une perte (le solde avant ouverture est inférieur au solde après fermeture). Mais dans ce cas, le testeur MT5 (le terminal n'a pas été vérifié) considérera cette transaction comme profitable.


Par exemple, MT5_PF = 1,89 et MT4_PF = 2,01.

 
fxsaber:
Si ce sont les bonnes formules


Le Testeur calcule ces chiffres de manière très différente. J'ai des différences frappantes dans les résultats entre ces formules et ce que montre le Testeur (à part le bénéfice).

Je propose de le préciser. Le hic, c'est ce que MT5 considère comme une transaction rentable.

Pourquoi y a-t-il un modificateur const ici ?

const double Profit = OrderProfit() + OrderCommission() + OrderSwap();

Lorsque cette variable quitte la portée, elle sera probablement réinitialisée... imho, const n'est pas nécessaire


Si nous supprimons OrderCommission() + OrderSwap() ? - nous parlons de bénéfices sur les transactions, pas de commissions ?

SZZ : comme option, le testeur peut travailler avec le solde, si l'ordre est fermé, le solde a changé, comparez-le avec l'ancien solde, en général, je ne peux pas deviner.... , je n'ai pas trouvé la source, mais il y a un articlehttps://www.mql5.com/ru/articles/4226 avec le même calcul de profit, mais je ne l'ai pas lu.

Пользовательский тестер стратегий на основе быстрых математических вычислений
Пользовательский тестер стратегий на основе быстрых математических вычислений
  • www.mql5.com
Тестер стратегий, предоставляемый MetaTrader 5, имеет мощный функционал для решения разнообразных задач. С его помощью можно тестировать как сложные стратегии торговли корзинами инструментов, так и одиночные стратегии с простыми правилами входов и выходов. Однако такой обширный функционал нам пригождается далеко не всегда. Часто нам просто...
 
Igor Makanu:

Pourquoi y a-t-il un modificateur const ici ?

Vous devez calculer la variable Profit à toutes les itérations de la boucle , bien qu'il soit possible que lorsque cette variable quitte la portée, elle soit réinitialisée... imho, vous n'avez pas besoin de const.

Il sera recréé. Tout est correct ici.

Que faire si je supprime OrderCommission() + OrderSwap() ? - nous parlons du profit réalisé par les transactions, pas par les commissions ?

Formule MT5 ci-dessus. Cela crée de sérieuses distorsions lors du calcul du PF des TS de scalping. Et comment se fait-il que l'IP dépende de la plateforme ? Il doit être sans ambiguïté.

 
zevs1980:
Ce problème a déjà été soulevé par moi dans des branches de constructions antérieures. Il n'a jamais été réparé. J'ai trouvé ma béquille. Je désactive certains des agents (3 sur 10 dans mon cas) et les réactive après 0 itération, et tout se passe bien. Parfois, cependant, certains agents s'arrêtent en cours de route, mais rarement, l'algorithme de solution est le même.

C'est dommage, mais la direction manuelle n'est pas une option. Je dispose d'une optimisation automatique.

 
KENT3004:

S'il y a deux problèmes, il faudrait peut-être en discuter et les résoudre tous les deux. Ou est-ce impossible ?

1. Pourquoi les agents sont déconnectés après l'optimisation.

2. Quelle est la raison de l'arrêt de l'ajout automatique de caractères au testeur ?

1. Regardez les journaux des testeurs, tout y est.

2. c'est déjà réparé. Mais jusqu'à ce que vous ayez une version corrigée, vous pouvez utiliser le drag-drop (nous n'avons pas discuté de la raison pour laquelle l'ajout de caractères s'est arrêté, nous avons discuté de la façon dont vous pouvez toujours tester dans ces conditions).

 
fxsaber:

J'effectue des passages simples en alternance sur chaque symbole personnalisé. À partir d'un certain point, il est impossible de voir le chemin qui y mène dans le testeur, mais il est toujours possible de les sélectionner par glisser-déposer à partir de la surveillance du marché. Puis, après un certain temps, cela ne fonctionne pas non plus : vous pouvez sélectionner soit un symbole normal, soit un seul symbole personnalisé. Les autres ne sont pas possibles. L'animation ci-dessous illustre cette situation.


Reproduit et corrigé. Merci.
 
Slava:

1. Regardez les journaux des testeurs, tout y est.

2. c'est déjà réparé. Mais jusqu'à ce que vous ayez une version corrigée, vous pouvez utiliser le drag-drop (nous n'avons pas discuté de la raison pour laquelle l'ajout de caractères s'est arrêté, nous avons discuté de la façon dont vous pouvez toujours tester dans ces conditions).

Merci pour votre rapidité et vos conseils utiles. J'ose "signaler" un détail mineur mais gênant. Le bouton de démarrage/arrêt couvre le bouton d'outils/de test, ce qui vous oblige à faire des choses supplémentaires. Pas très pratique cependant.
 
Edgar:
Pendant l'optimisation génétique, j'utilise beaucoup de paramètres. Dès que le nombre de variantes devient si grand qu'il apparaît en notation scientifique (6,8768769e+21), l'optimisation se poursuit avec la moitié des agents (4 sur 8) après la génération 0. Aucune mention de cela dans les journaux. L'optimisation elle-même fonctionne bien, mais avec la moitié de la charge, elle est deux fois plus longue.

Ce comportement n'est pas toujours reproduit, ce qui peut expliquer pourquoi il n'est pas corrigé. Hier, je l'avais, aujourd'hui, je ne l'ai plus. Peut-être que cela dépend aussi de l'EA. Je l'ai avec des cadres. La taille de ex5 est d'environ 0,5 Mb. J'ai 8 Go de mémoire. Intel i7, 4 cœurs, 8 threads. Divorcé. Non supervisé.