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

 

Um den Gral im Pips-Modus zu erreichen, schließen Sie Verlustpositionen mit einer Markierung für das gesamte Positionsvolumen und Gewinnpositionen mit 0,01 Lots.

Beispiel.

#include <MT4Orders.mqh>

#define  Ask SymbolInfoDouble(_Symbol, SYMBOL_ASK)

const bool Init = EventSetTimer(100);

void OnTimer()
{
  while (OrdersTotal())
    if (OrderSelect(0, SELECT_BY_POS))
      OrderClose(OrderTicket(), (OrderProfit() > 0) ? 0.01 : OrderLots(), OrderClosePrice(), 0);
      
  OrderSend(_Symbol, OP_BUY, 1, Ask, 0, 0, 0);
}


Ergebnis

 

Forum zum Thema Handel, automatisierte Handelssysteme und Strategietests

Bibliotheken: SingleTesterCache

fxsaber, 2020.01.12 23:20

Die aktuelle Version von tst-format enthält die folgenden Daten nicht

  • Zeit in Millisekunden.
  • PositionID.
  • MagicNumber.
Dies führt zu Einschränkungen in den Nutzungsszenarien.
 

Forum zum Thema Handel, automatisierte Handelssysteme und Strategietests

Bibliotheken: SingleTesterCache

fxsaber, 2020.01.13 00:01

Mehrere Bugs wiederholen. Wir starten den Expert Advisor im Strategy Tester auf einem Hedge-Konto.

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

#define  Ask SymbolInfoDouble(_Symbol, SYMBOL_ASK)

#define  PAUSE 100000

void OnTick()
{
  static bool FirstRun = true;
  
  if (FirstRun)
  {
    OrderSend(_Symbol, OP_BUY, 1, Ask, 0, 0, 0);
    Sleep(PAUSE);
    
    OrderSend(_Symbol, OP_BUY, 2, Ask, 0, 0, 0);
    Sleep(PAUSE);

    if (OrderSelect(0, SELECT_BY_POS))
      OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 0);
    Sleep(PAUSE * 2);
    
    if (OrderSelect(0, SELECT_BY_POS))
      OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 0);
    Sleep(PAUSE * 2);

    TesterWithdrawal(100);    
    
    FirstRun = false;
  }
}

void OnDeinit( const int )
{
  const int Total = OrdersHistoryTotal();
  
  for (int i = 0; i < Total; i++)
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
    {
      OrderPrint();
      
      Print(OrderTicketID()); // MT5-PositionID
    }
}


Wir erhalten Folgendes

2020.01.08 23:59:58   #1 2020.01.01 00:00:00 balance 0.00 0.00000 0.00000 0.00000 2020.01.01 00:00:00 0.00000 0.00 0.00 100000.00 0
2020.01.08 23:59:58   0
2020.01.08 23:59:58   #4 2020.01.02 06:00:00 buy 1.00 EURUSD 1.12137 0.00000 0.00000 2020.01.02 06:03:20 1.12132 -3.56 0.00 -4.46 0
2020.01.08 23:59:58   2
2020.01.08 23:59:58   #5 2020.01.02 06:01:40 buy 2.00 EURUSD 1.12137 0.00000 0.00000 2020.01.02 06:06:40 1.12129 -7.14 0.00 -14.27 0
2020.01.08 23:59:58   3
2020.01.08 23:59:58   #6 2020.01.02 06:10:00 balance 0.00 0.00000 0.00000 0.00000 2020.01.02 06:10:00 0.00000 0.00 0.00 -100.00 withdrawal 0
2020.01.08 23:59:58   0


Dann lesen wir die entsprechende tst-Datei mit Hilfe des Skripts.

#include <fxsaber\SingleTesterCache\SingleTesterCache.mqh> // https://www.mql5.com/ru/code/27611
#include <fxsaber\MultiTester\MTTester.mqh> // https://www.mql5.com/ru/code/26132

void OnStart()
{  
  uchar Bytes2[];
  
  if (MTTESTER::GetLastTstCache(Bytes2) != -1) // Если получилось прочитать последнюю кеш-запись одиночного прогона
  {
    const SINGLETESTERCACHE SingleTesterCache(Bytes2); // Загоняем ее в соответствующий объект.

    for (int i = 0; i < ArraySize(SingleTesterCache.Positions); i++)
      Print(SingleTesterCache.Positions[i].ToString());
  }
}


Es druckt die Daten auf Positionen

id = 0
mfe = 0.0
mae = -8.029999999999999
profit = -4.46
lifetime = 00:03:20

id = 0
mfe = 0.0
mae = -21.4
profit = -14.27
lifetime = 00:05:00

id = 0
mfe = 0.0
mae = 0.0
profit = 0.0
lifetime = 00:00:00


Wenn wir alles in diesem Beitrag vergleichen, werden wir die folgenden Fehler feststellen.

  • Null-Identifikation anstelle der korrekten Identifikation.
  • Provisionen und Swaps werden bei der Gewinnberechnung nicht berücksichtigt.
  • Rücknahmegeschäfte sind fälschlicherweise in der Anzahl der geschlossenen Handelspositionen enthalten.

 

Der Debugger ist nicht vollständig funktionsfähig. Was fehlt im Vergleich zu Standard-Debuggern, in absteigender Reihenfolge der Mängel.

1. Änderung des Speichers. Sie können Variablen anzeigen, aber die Bearbeitung scheint nicht möglich zu sein.

2. Bedingte Haltepunkte. Wie Stopp, wenn die Variable test=10.

3. Möglichkeit, die Ausführung zu verschieben. Mit anderen Worten: Sie können einfach auf eine Zeile klicken und ihr sagen, dass sie von dort aus ausgeführt werden soll. Mit anderen Worten: Klicken Sie auf eine Zeile und sagen Sie: "Laufen Sie jetzt von hier aus".

4. ein Anhang zu einem bereits laufenden Skript/Berater/Indikator. Oder zumindest die Möglichkeit, sich bei einem Absturz zu befestigen, so dass es leicht zu analysieren ist.

 
traveller00:

Der Debugger ist nicht vollständig funktionsfähig. Was fehlt im Vergleich zu Standard-Debuggern, in absteigender Reihenfolge der Mängel.

2. Bedingte Haltepunkte. Wie Stopp, wenn die Variable test=10.

if (smth) {

    int a;

}
 
Ja, ich stimme zu, man kann fast alles durch Wiederzusammenbau erreichen. Mit Ausnahme von Punkt 4. 4. Aber ich würde es trotzdem gerne im Debugger sehen, weil es ein Standard-Funktionssatz für den Debugger ist.
 

Forum zum Thema Handel, automatisierte Handelssysteme und Strategietests

Bibliotheken: SingleTesterCache

fxsaber, 2020.01.14 10:49

Ich verwende jetzt tst-files anstelle von set-files. Sie können sehr schnell zwischen ihnen wechseln und haben nicht nur Eingabeparameter, sondern auch vollständige Backtests.

Es ist schade, dass wir jetzt verschiedene TS nicht vollständig in einem Portfolio kombinieren können, da die Millisekundendaten in tst fehlen.


Ich hoffe, dass die Entwickler die vorhandenen Felder in vollem Umfang nutzen werden.

INT64             TradeDeal::time_create;             // время создания записи

INT64             TradeOrder::time_setup;             // время приёма ордера от клиента в систему
INT64             TradeOrder::time_done;              // время снятия завки

indem Sie dort den Zeitwert in Millisekunden statt in Sekunden angeben.


Im Allgemeinen können wir in der Praxis nicht alle Vorzüge der Verwendung von tst demonstrieren, da tst einige kleine Nachteile aufweist. Dies könnte korrigiert werden.

 


TesterWithdrawal ist im Bericht enthalten, aber TesterDeposit fehlt.

 
Wie ist dieses Bild zu verstehen? Das Optimierungsdiagramm zeigt Spitzenwerte um 5000. In der Optimierungstabelle beträgt der Höchstwert jedoch 4670. Wo sind die Parameter für die besten Pässe?
Dateien:
8c97so2_7-1.jpg  184 kb
 
Grozir:
Wie ist dieses Bild zu verstehen? Das Optimierungsdiagramm zeigt Spitzenwerte um 5000. Und in der Optimierungstabelle ist der Höchstwert 4670. Wo sind die Parameter für die besten Pässe?

Sortieren Sie die Spalte "Ergebnis".