Bibliotheken: Symbol - Seite 5

 
Viktar Dzemikhau:
Ich frage mich, warum benutzerdefinierte Symbole benötigt werden?

Tick-Historie eines Drittanbieters nehmen - nicht MT5. Sie können sofort verstehen, wie gut die Quelle zu Ihrem TS in Bezug auf die Handelsbedingungen passt.

  • Sie können Kurshistorien von verschiedenen Symbolen synchronisieren, um falsche Arbitrage-Situationen zu vermeiden.
  • Sie können statistische Expert Advisors im Tester auf verschiedenen Kursverläufen laufen lassen und die Handelsbedingungen vergleichen.
  • Sie können Lags zwischen verschiedenen Feeds vergleichen.
  • Sie können offensichtliche Fehler in der Kurshistorie beseitigen und Lücken füllen.
  • Sie können Ihre eigene Kurshistorie mit den erforderlichen statistischen Daten erstellen - Monte Carli TC.
  • Sie können Kursverläufe von synthetischen Symbolen generieren und TC auf ihnen laufen lassen.
  • ...
  • Einige Dinge sind in diesem Zweig implementiert.

     
    fxsaber:

    Im MT5-Tester haben Limit-Orders in der Regel (z.B. Forex) einen positiven Slippage, was zu ExpertRemove aufrufen, wenn das entsprechende Ereignis eingetreten ist. Dadurch wird die Optimierung deutlich beschleunigt.

    Dies ist besonders wichtig für benutzerdefinierte Symbole, da dort Transaktionen auch mit negativem Saldo durchgeführt werden.

    Ein einfaches ExpertRemove reicht nicht aus, da es ein erzwungenes Schließen der aktuellen Positionen zum letzten Preis von Null ist, wenn es keine Daten darüber in den benutzerdefinierten Symbolen gibt (was meistens der Fall ist).


    Um den Backtest dennoch ohne Poker zu verlassen, sollten Sie vor dem ExpertRemove Folgendes tun

    // Schließt Positionen über Limitaufträge
    bool CloseAll()
    {
      bool Res = true;
      
      for (int i = OrdersTotal() - 1; i >= 0; i--)
        if (OrderSelect(i, SELECT_BY_POS))
          Res &= (OrderType() > OP_SELL) ? OrderDelete(OrderTicket())
                                         : OrderSend(OrderSymbol(), OrderType() ? OP_BUYLIMIT : OP_SELLLIMIT , OrderLots(), OrderClosePrice(), 100, 0, 0) && false;
        
      return(Res);
    }
    
    void OnTick( void )
    {
      if (IsRemove() && CloseAll())
        ExpertRemove();
    }


    Beachten Sie, dass das Schließen auf dem aktuellen Tick nur auf dem Netting (wo die ursprüngliche Aufgabe des Entfernens von Slippages von Limit-Orders implementiert ist), da das Schließen auf dem aktuellen Tick nur auf dem Netting (wo die ursprüngliche Aufgabe des Entfernens von Slippages von Limit-Orders implementiert ist) sein wird.

    Forum zum Handel, zu automatisierten Handelssystemen und zum Testen von Handelsstrategien.

    Bibliotheken: Symbol

    fxsaber, 2018.04.06 16:43

    Limit-Orders zum aktuellen Kurs auf Börsensymbolen Netting-Konten werden sofort (und im Tester) ausgeführt, ohne auf den nächsten Tick zu warten.


    Beachten Sie, dass nicht nur das Börsensymbol wichtig ist, sondern auch das Netting-Konto. Sie können zum Beispiel ein MOEX-Symbol auf einem Hedge-MQ-Demo nehmen, aber es wird nicht auf die gleiche Weise (und im Tester) ausgeführt wie auf demselben Netting-MQ-Demo.

    Dies ist einer der Gründe, warum Backtests auf denselben völlig identischen MOEX-Symbolen je nach Kontotyp unterschiedlich ausfallen können.

    Manchmal muss man also auf den nächsten Tick warten.


    Das ist die Art von Tanzen.

     

    Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien

    Bibliotheken: Symbol

    fxsaber, 2018.04.07 22:37

    Zusammenfassung

    Bei realen Ticks verringerte sich die Anzahl der Ticks um das 16-fache (der leichteste Filter), die Geschwindigkeit der Optimierung erhöhte sich um das 14-fache, die Qualität litt überhaupt nicht (Analyse, die hier nicht einging). Natürlich ist dies nur möglich, wenn der TS auf eine bestimmte Weise geschrieben wird. Insbesondere, wenn die Balkenanalyse fehlt.

    Die vorherige kostenlose Universalbeschleunigung brachte nur eine zweifache Steigerung. Die aktuelle ist ebenfalls kostenlos (die Qualität leidet nicht), aber weniger universell. Der Gewinn liegt jedoch um mehr als eine Größenordnung höher. Jetzt optimiere ich TC nur noch auf diese Weise. Kein Fehler.

    Da das Thema die Beschleunigung betrifft, hier ein weiteres Rezept für die Beschleunigung

    Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien.

    Fehler, Bugs, Fragen

    fxsaber, 2018.09.11 17:15

    Tester Ordner auf 5Gb RAMDisk verschoben und im MT5 Verzeichnis ausgeführt.

    mklink /j Tester z:\Tester


    Jetzt schläft die SSD friedlich, die Optimierung wurde ~1,5 mal (nach Augenmaß) schneller, kostenlos!

    Gleichzeitig wird die SSD nicht getötet.

     
    fxsaber:

    einfaches ExpertRemove kann nicht verwendet werden, weil die aktuellen Positionen gezwungen sind, zum Null-Last-Preis geschlossen zu werden, wenn es keine Daten über sie in benutzerdefinierten Symbolen gibt (meistens).


    Dies sind solche Tänze.

    Die Krücken sind auch in einem anderen

    Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien

    Fehler, Bugs, Fragen

    fxsaber, 2018.09.12 18:30

    Im Video.

    Tausche Instrument auf echte Ticks. Bars werden durch Bid gebildet, keine Flipperdaten, BUY Position ist offen. Es ist deutlich zu sehen, dass der aktuelle Schlusskurs der Position

    PositionGetDouble(POSITION_PRICE_CURRENT)

    ständig gleich Null ist, obwohl sich Bid ständig ändert. Wie kann ich dem Tester erklären, dass ein Börsensymbol eine KAUFEN-Position mit Bid schließen sollte? Im Moment wird nicht einmal das Eigenkapital berechnet.


    Die einzige Lösung besteht also darin, (Bid+Ask)/2 zu flippen.

     
    fxsaber:

    Da das Thema die Beschleunigung betrifft

    Tester's "real ticks" Walkthrough für drei Monate (8 Millionen Ticks) dauert 100 ms (4000 OrderSend, 800 Trades + EA-Logik). Das Rezept ist benutzerdefinierte Symbole.

     

    Danke für den Code. Ich habe etwas für mich erstellt, das darauf basiert... Allerdings habe ich die Klon-Methode leicht modifiziert, damit es möglich ist, einen bestimmten Teil der Historie zu laden. Andernfalls, wenn es eine Menge Ticks gibt, verbraucht es eine Menge RAM.

    bool CiCustomSymbol::Clone(const string _src_symbol,const ulong _from_msc=0,const ulong _to_msc=LONG_MAX)
    
     
    Denis Kirichenko:

    Die Klon-Methode wurde leicht optimiert, um das Laden eines bestimmten Teils der Historie zu ermöglichen. Andernfalls, wenn es eine Menge von Ticks, verbraucht es eine Menge RAM.

    Ich habe es unter Berücksichtigung Ihrer Bemerkung aktualisiert, Danke.

     

    Ich habe auch 2 Methoden zum Laden eines benutzerdefinierten Verlaufs aus einer Datei erstellt. Nehmen wir an, es gibt 2 Dateien mit Ticks und Minuten. Die Aufgabe besteht darin, sie in die Ticks- und Kursdatenbank des ausgewählten Symbols zu laden.

    bool              LoadTicks(const string _src_file_name);
    bool              LoadRates(const string _src_file_name);
     
    Denis Kirichenko:

    Ich habe auch 2 Methoden zum Laden eines benutzerdefinierten Verlaufs aus einer Datei erstellt. Nehmen wir an, es gibt 2 Dateien mit Ticks und Minuten. Die Aufgabe besteht darin, sie in die Ticks- und Kursdatenbank des ausgewählten Symbols zu laden.

    Das Format ist also im Allgemeinen nicht definiert.

     
    fxsaber:

    Das Format ist also nicht allgemein definiert.

    Ja, aber wir müssen darüber nachdenken. Aber ich habe Archive von Zecken mit einem bestimmten Format, und ich habe es für jetzt gemacht. Einfach genug: <Datum>,<Uhrzeit>,<BID>,<Auftrag>.