MetaTrader 5 Strategy Tester: Bugs, Bugs, Verbesserungsvorschläge - Seite 16

 
fxsaber:
Wenn dies die richtigen Formeln sind


Der Tester berechnet diese Zahlen ganz anders. Ich habe auffällige Unterschiede in den Ergebnissen zwischen diesen Formeln und dem, was der Tester anzeigt (abgesehen vom Gewinn).

Ich schlage vor, dass wir der Sache auf den Grund gehen. Der Haken an der Sache ist, was genau MT5 als profitablen Handel betrachtet.

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

Entfernen Sie einen oder beide auf einmal und vergleichen Sie.

Oder hier (falls die obigen Angaben nicht helfen) "=" entfernen

if (Profit >= 0)
 
Slava:

Worüber diskutieren wir jetzt? Deaktivieren von Agenten oder Zulassen der Verwendung von Zeichen bei Tests/Optimierung?

Wenn es zwei Probleme gibt, sollten wir wahrscheinlich beide diskutieren und lösen. Oder ist das unmöglich?

1. Warum werden die Agenten nach erfolgter Optimierung deaktiviert?

2. Was ist der Grund dafür, dass das automatische Hinzufügen von Zeichen zum Tester gestoppt wurde?

 
Artyom Trishkin:

Entfernen Sie einen oder beide auf einmal und vergleichen Sie.

Oder hier (falls die obigen Angaben nicht helfen) "=" entfernen

So funktioniert 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;                      // Профит

D.h. im MT5 können Sie eine Position schließen und einen Verlust erleiden (der Saldo vor der Eröffnung ist geringer als der Saldo nach der Schließung). Aber in diesem Fall wird der MT5-Tester (Terminal hat nicht geprüft) diesen Handel als profitabel betrachten.


Zum Beispiel: MT5_PF = 1,89 und MT4_PF = 2,01.

 
fxsaber:
Wenn dies die richtigen Formeln sind


Der Tester berechnet diese Zahlen ganz anders. Ich habe auffällige Unterschiede in den Ergebnissen zwischen diesen Formeln und dem, was der Tester anzeigt (außer dem Gewinn).

Ich schlage vor, das klarzustellen. Der Haken an der Sache ist, was MT5 als profitablen Handel betrachtet.

Warum gibt es hier einen Const-Modifikator?

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

Wenn diese Variable den Geltungsbereich verlässt, wird sie wahrscheinlich neu initialisiert... Imho ist const nicht erforderlich


Wenn wir OrderCommission() + OrderSwap() entfernen ? - Wir sprechen von Gewinnen aus Geschäften, nicht von Provisionen.

SZZ: als Option kann der Tester mit dem Saldo arbeiten, wenn der Auftrag geschlossen ist, hat sich der Saldo geändert, vergleichen Sie es mit dem alten Saldo, im Allgemeinen kann ich nicht raten.... , ich habe die Quelle nicht gefunden, aber es gibt einen Artikelhttps://www.mql5.com/ru/articles/4226 mit der gleichen Gewinnberechnung, aber ich habe es nicht gelesen.

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

Warum gibt es hier einen Const-Modifikator?

Sie müssen die Variable Profit bei allen Iterationen der Schleife berechnen , obwohl es möglich ist, dass sie neu initialisiert wird, wenn diese Variable den Bereich verlässt... Imho brauchen Sie keine Konst.

Sie wird neu geschaffen. Dort ist alles korrekt.

Was passiert, wenn ich OrderCommission() + OrderSwap() entferne? - Wir sprechen von Gewinnen durch Geschäfte, nicht durch Provisionen?

MT5-Formel oben. Dies führt zu erheblichen Verzerrungen bei der Berechnung des PF von Scalping-TS. Und wie kann es sein, dass PF von der Plattform abhängt? Sie muss eindeutig sein.

 
zevs1980:
Dieses Problem wurde von mir bereits in früheren Build-Zweigen angesprochen. Das Problem wurde nie behoben. Ich habe meine Krücke gefunden. Ich deaktiviere einige der Agenten (in meinem Fall 3 von 10) und aktiviere sie nach 0 Iterationen, und alles geht gut. Manchmal bleiben jedoch einige der Agenten während des Prozesses stehen, aber selten ist der Lösungsalgorithmus derselbe.

Es ist schade, aber die manuelle Lenkung ist keine Option. Ich habe eine automatische Optimierung.

 
KENT3004:

Wenn es zwei Probleme gibt, sollten vielleicht beide diskutiert und gelöst werden. Oder ist das unmöglich?

1. Warum die Agenten nach der Optimierung nicht mehr erreichbar sind.

2. Was ist der Grund dafür, dass das automatische Hinzufügen von Zeichen zum Tester gestoppt wurde?

1. Sehen Sie sich die Testerprotokolle an, da steht alles drin.

2. Es ist bereits repariert. Aber bis Sie ein Build mit Korrekturen haben, können Sie Drag-Drop verwenden (wir haben nicht besprochen, warum die Hinzufügung von Zeichen gestoppt wurde, wir haben besprochen, wie Sie trotzdem unter diesen Bedingungen testen können)

 
fxsaber:

Ich führe abwechselnd einzelne Läufe für jedes benutzerdefinierte Symbol durch. Ab einem bestimmten Punkt ist es unmöglich, den Pfad zu ihnen im Tester zu sehen, aber sie sind immer noch per Drag & Drop aus dem Market Watch auswählbar. Nach einer Weile funktioniert auch dies nicht mehr: Sie können entweder ein normales Symbol oder nur ein benutzerdefiniertes Symbol auswählen. Die anderen sind nicht möglich. Die folgende Animation zeigt diese Situation.


Vervielfältigt und korrigiert. Ich danke Ihnen.
 
Slava:

1. Sehen Sie sich die Testerprotokolle an, da steht alles drin.

2. Es ist bereits repariert. Aber bis Sie ein Build mit Korrekturen haben, können Sie Drag-Drop verwenden (wir haben nicht besprochen, warum die Hinzufügung von Zeichen gestoppt wurde, wir haben besprochen, wie Sie trotzdem unter diesen Bedingungen testen können)

Vielen Dank für Ihre prompte Antwort und Ihre hilfreichen Ratschläge. Ich wage es, ein kleines, aber unangenehmes Detail zu "melden". Die Start-/Stopptaste verdeckt die Werkzeug-/Testertaste, so dass Sie zusätzliche Aktionen ausführen können. Allerdings nicht sehr praktisch.
 
Edgar:
Bei der genetischen Optimierung verwende ich eine Vielzahl von Parametern. Sobald die Anzahl der Varianten so groß wird, dass sie in wissenschaftlicher Schreibweise erscheint (6.8768769e+21), wird die Optimierung mit der Hälfte der Agenten (4 von 8) nach Generation 0 fortgesetzt. In den Protokollen wird dies nicht erwähnt. Die Optimierung selbst läuft gut, aber bei halber Last doppelt so lange.

Das Verhalten wird nicht immer reproduziert, was der Grund dafür sein kann, dass es nicht korrigiert wird. Gestern hatte ich sie, heute nicht mehr. Vielleicht hängt es auch von der EA ab. Ich habe es mit Rahmen. Die Größe von ex5 beträgt etwa 0,5 Mb. Ich habe 8 GB Speicher. Intel i7, 4 Kerne, 8 Threads. Geschieden. Unüberwacht.