Interessantes Thema für viele: was ist neu in MetaTrader 4 und MQL4 - große Änderungen auf dem Weg - Seite 66

 
Mischek:
Nun, das wird nicht der Fall sein.

Was genau wird nicht passieren: das Matching oder seine automatischen Folgen?

Seien Sie genauer... ;)

 
MetaDriver:

Was genau wird nicht passieren: das Matching oder seine automatischen Folgen?

Seien Sie bitte konkret... ;)

Es wird keinen Unterricht geben, das ist klar. :)
 
MetaDriver:

Was genau wird nicht passieren: das Matching oder seine automatischen Folgen?

Seien Sie bitte konkret... ;)

Ihre überzogenen Konsequenzen.
 
MetaDriver:

Was genau wird nicht passieren?

Es wird nichts geben. Ein großer Metatrader. Und Stille).
 
MetaDriver:

Die massenhafte Einführung von Matching auf MT5-Plattformen kann in gewissem Sinne zu einer "Marktbombe" werden, da sie theoretisch in naher Zukunft zu einer "Anti-Markt-Revolution" auf dem Devisenmarkt führen könnte. Vielleicht ist der Begriff "Revolution" übertrieben, vielleicht aber auch nicht, denn jeder Händler wird in der Lage sein, als Market Maker (Preisbeeinflusser) tätig zu werden. Mit der massiven Verbreitung einheimischer Aggregatoren, die bedeutende Segmente des Weltmarktes abdecken.... die Ära der (nun ja, fast) monopolistischen Macht der Liquiditätsanbieter über die Währungspreisgestaltung könnte für immer vorbei sein (könnten).

Vor diesem Hintergrund stellt sich die "epochale" Frage: Sind die Händler bereit für die "neue Ära"? Welche regulären Instrumente stehen der "breiten Masse der Händler" zur Verfügung, um Streuungsalgorithmen zu testen, zu optimieren und zu debuggen?

Keine.

Es gibt keine Tick-Historie und kein Debugging im Tester. Das Format der Kursbasis lässt keine Möglichkeit offen, sie zum Testen und Optimieren von HFT-Strategien zu verwenden , die Limit-Orders verwenden (was alle Spreading-Algorithmen sind).

Dem stimme ich zu. Nur ein Gegenargument: Das derzeitige Format der Notierungen ist für Breakout-Strategien ebenso dumm wie für Reverse-Strategien, aber mit einer so einfachen Methode wie dieser kann man das nicht beheben. Sie können zumindest eine Klasse von Strategien heilen, während sie in der bevorstehenden Situation eine "dramatische Form" annimmt (siehe oben), während andere Strategien nicht darunter leiden! Wenn Sie es sehen, nennen Sie ein Beispiel für eine Klasse von Strategien, für die eine Änderung der Streuung in der vorgeschlagenen Weise die Prüfung/Optimierung weniger realistisch macht.

Tatsächlich ist der Prüfer immer noch tickwise, so dass es nur eine Frage des Formats der Geschichte ist. Und auch die Möglichkeit, "Nicht-Standard-Anführungszeichen" zu verwenden, wenn nötig.
MetaDriver:

Ich versuche, ein bisschen weiter "um die Ecke zu schauen" // Alles, was Sie geschrieben haben, ist richtig.

Das "Mass Market Making" kann, gerade weil es die von Ihnen beschriebenen Szenarien auslöst, schließlich dazu führen, dass der Dollar seine Position als "Universaltauscher" verliert. Dies ist eine einfache Folge des Zusammenbruchs der Spreads für "Minderjährige". Der Devisenmarkt wird dynamischer und effizienter werden. Und gerade Handelssysteme, die auf Prognosen (und nicht auf Preismanipulationen) beruhen, werden davon profitieren. Meiner Meinung nach ist jede nicht-marktwirtschaftliche Regulierung von Wechselkursen mit erheblichen Missbräuchen verbunden. Es spielt keine Rolle, wie edel die Ziele erklärt werden - es gibt immer die Möglichkeit der Monetarisierung des Insiders und es ist töricht anzunehmen, dass irgendwelche rechtlichen Mechanismen dem entgegenwirken können.

Kurz gesagt - ich bin an "ehrlichem Forex" interessiert, vielleicht werde ich persönlich nicht finanziell von einer solchen Umkehrung profitieren (oder vielleicht doch), aber wenn ich verliere, weiß ich wenigstens, dass ich verloren habe, weil ich einen dummen Algorithmus entwickelt habe, und nicht, weil ich "betrogen" wurde.

Kein Kommentar für den Moment. Ich werde noch etwas darüber nachdenken. Ich habe noch keine einzige profitable Strategie gesehen, die eine konstante Menge nur mit Stopps handelt. Nicht ein einziges Mal. Theoretisch ist das sehr verständlich. (Die Behauptung, dass es solche Strategien gibt, ist die Behauptung, dass es irgendeinen Handelshorizont gibt, in dem die H-Volatilität durchgängig größer als 2,0 ist) Alle Trendstrategien, die ich gesehen habe, die funktionieren, werden entweder mit Marktaufträgen ausgeführt oder bei Pullbacks mit Limitern (oder Market Puts) ein- und ausgestiegen. Für HighAsk/LowBid-Märkte ist die Historie nicht wertvoller als LowAsk/HighBid. Für sie ist die wichtige Information eher der Spread an allen Punkten des Bar-OHLC.

Schließlich kommt die Einsicht, dass Halbheiten wie HighBid+LowAsk nicht ausreichen, um einen Prüfer angemessen zu machen.

 
Urain:

Schließlich ist klar, dass halbe Maßnahmen wie HighBid+LowAsk nicht ausreichen werden, um den Prüfer angemessen zu machen.

Wenn Sie aus dem, was ich geschrieben habe, eine solche Schlussfolgerung ziehen... dann verstehen Sie es auch nicht)
 
TheXpert:
Wenn es das ist, was Sie aus Ihrem Schreiben ableiten... ...dann verstehen Sie es auch nicht.)

Was willst du denn machen?! Er kommt herein, sagt ein paar Worte, und das war's, ein paar schlaflose Nächte sind garantiert. )

Der Beitrag war nicht für mich, aber ich werde auch nicht schlafen.

 
MetaDriver:

(Die Behauptung, dass es diese gibt, ist die Behauptung, dass es Handelshorizonte gibt, in denen die H-Volatilität durchweg größer als 2,0 ist)

Nun, das ist ein Gral eines Trends überhaupt. Es ist auch nicht durchweg weniger als 2x. Es gibt keine solchen Instrumente, bei denen die H-Volatilität über die gesamte Reihe hinweg konstant unter oder über 2 liegt. Auf separaten Abschnitten/zu separaten Zeitpunkten. Wissen, wann man mit einem Trend handelt, wann man mit einer Rendite handelt. Filtern Sie den Basar))
 
hrenfx:

Ich musste mein Prüfgerät für einen neuen Beruf verbessern. Den Code des alten Systems zu verstehen, hat mehr Zeit gekostet (ich habe mehrere Wochen mit gelegentlichen Versuchen vergeudet), als ein neues System zu schreiben.

Ich brauchte also 5 Stunden (mit Fehlersuche), um einen neuen Tester von Grund auf zu schreiben. Seine Leistung (für mich als Einsteiger zufriedenstellend):

  • Funktioniert mit M1 HighBid + LowAsk (die Ergebnisse sind genauer als im MT5-Tester).
  • Ein Symbol.
  • Geschwindigkeit (i7 2700K) ca. 100.000.000 Balken pro Sekunde (277 FOREX-Jahre pro Sekunde) auf Test-TS - nicht leer, viele Dinge werden berechnet. Ständig auf dem Markt.
  • Kein MM - keine Lose.
  • Gewinn nur in Pips.
  • Der Händler hat die Möglichkeit, die Slippage und die Kommission zu kontrollieren.
  • Optimierer mit eigenen Optimierungskriterien - für jedes dieser Kriterien wird eine eigene Datei (kann mehrere GB groß sein) mit sortierten Zeichenfolgen von Geschäften geöffnet.
  • Es gibt keine Fehlerprüfungen im Tester - ich kenne alle Feinheiten meines Testers, also lasse ich sie nicht zu.
  • TS ist in einem leicht verkürzten MQL4 geschrieben - alle unnötigen Dinge wurden entfernt. Aber Sie können die gesamte Leistungsfähigkeit von C++ nutzen.
  • Der Tester ist ohne OOP geschrieben - ich weiß nicht, wie man das kompetent macht. Es ist also praktisch eine reine C-Sprache.
  • Quellcode in freiem C++~ 20Kb.
  • Haltestellen und Marktplätze wurden gestrichen (OrderClose wurde belassen) - nicht notwendig.
  • Jeder Lauf (wahlweise - Laufnummer angeben) kann im Mathematikpaket visualisiert und studiert werden - Equity and Balance changes file wird einfach geschrieben.
  • Keine Genetik.
  • Kein OpenCL - kann es nicht tun.
  • Einfädig. Lädt alle Kerne dumm - mehrere Optimierer werden manuell ausgeführt.
  • Konsolenanwendung.
  • TC-Eingangsparameter, Testereinstellungen und Optimierungsbereiche werden in der Datei festgelegt.
  • TC wird zusammen mit dem Tester in eine EXE-Datei kompiliert.
  • Vor dem Start gibt es nur drei Dateien: EXE, Verlauf, Einstellungen.
  • Der Optimierer hat eine Unterbrechung des Laufs, wenn der aktuelle Zustand des Laufs die Bedingungen nicht erfüllt (z. B. zu hohe Setzungen).
  • Das MQL4-Skript bereitet die Geschichte für den Prüfer vor, es wurde vor langer Zeit geschrieben.
  • Keine dynamische Zuweisung von Speicher für die Auftragstabelle - einmal zugewiesener Speicher und vergessen.
  • Keine Protokolle - ich sehe sie mir nicht an.
  • Keine Auftragshistorie - auf dieselbe Weise.
  • Es gibt keine Idee über Indikatoren und alles, was mit ihnen zu tun hat - wir brauchen sie nicht für TS.
  • Die Preise sind ganzzahlig (long int).

Wenn derselbe Unsinn in MQL5 implementiert ist, können wir Cloud im Modus der Matrixoptimierung verwenden. Nur der Verlauf muss jedes Mal gesendet werden - die eingebaute Komprimierung solcher Informationen ist erforderlich.

Theoretisch kann eine Geschwindigkeit von ~ 100 Bb/s (beim Test-TS) erreicht werden. Ich frage mich, was ist die Leistung der MT5-Tester auf die gesamte Wolke in den gleichen Papageien?

100 Milliarden Balken pro Sekunde sind eine gute Geschwindigkeit für alle Arten von Forschung. In andere Einheiten umgerechnet, bedeutet diese Geschwindigkeit, dass ein Jahr mit einer Minute FOREX-Geschichte ~300.000 Mal pro Sekunde auf einem Symbol durchlaufen wird.

Die meiste Zeit habe ich damit verbracht, die Syntax der Sprache zu lernen - einfach zu googeln. Kein Programmierer.

Ich sage Ihnen gleich, dass es eine riesige Zeitverschwendung ist, einen universellen Rahmen für Ihre eigenen bescheidenen Bedürfnisse zu schreiben. Besser zu erkunden. Wenn etwas berücksichtigt werden muss, bringen Sie es einfach zu Ende.

Dies ist nur ein Kern, jetzt brauchen Sie ein schlaues Toolkit für den Optimierer. Hier braucht man viel mehr Zeit - man muss sich das gut überlegen.

Ich lese das alles hier, und mir kommt der Gedanke, dass entweder eine Person völlig in den Strömen ihres Bewusstseins versunken ist oder dass mindestens die Hälfte dessen, was er geschrieben hat , einfach eine gemeine Lüge ist.

Ein autodidaktischer Programmierer ohne tiefgreifende Kenntnisse der Sprache hat einen Single-Thread-Tester mit einer Leistung von 100 000 000 Takten pro Sekunde für mehrere Stunden geschrieben? Im Gegensatz dazu verbringen hochprofessionelle Leute Jahre damit, einen kompetenten, leistungsstarken HFT-Tester zu entwickeln, ganze Teams zu bilden, die damit arbeiten und es mit Strategien füllen, und hier beschloss eine Person, selbst einen Tester zu bauen, und erreichte sofort eine um Größenordnungen höhere Leistung führender (geschlossener) HFT-Plattformen.

Berechnen wir einfach, wie viel Bandbreitenspeicher wir benötigen, um 100 000 000 Takte pro Sekunde auszuführen. Jeder Balken besteht aus 4 Preisen + AskLow HighBid, was zu 6 Integer-Typen mit jeweils 64 Bit führt(Preise sind Integer (long int)). Für 100.000.000 Balken pro Sekunde würde dies bedeuten

64 Bit * 6 Preise * 100.000.000 Takte = 38.400.000.000 Bit = 4.800.000.000 Bytes = . 4 577 Mbytes pro Sekunde..


Das bedeutet, dass diese Leistung grundsätzlich und rein theoretisch auch mit DDR2 533-Speichermodulen und höher erreicht werden kann. Zumindest ist die angegebene Leistung mit der physikalischen Grenze moderner Hardware vergleichbar.

Aber die Zeitkosten für die Software stellen noch größere Hindernisse dar. Diese können nicht ignoriert werden. Deshalb habe ich einen schnellen 64-Bit-C-Compiler Win-Lcc 64 genommen und die Leistung einer direkten Suche in einem Array von Balken ohne schwere mathematische Berechnungen gemessen. Bitte beachten Sie: Es handelt sich um die direkte, d. h. die schnellste Suche. Ohne Umgebungsmanipulationen und andere Gemeinkosten. Im Gegensatz zu dickfix stelle ich den vollständigen Quellcode meines "Strategietesters" zur Verfügung, so dass jeder ihn kompilieren und die Leistung in seinem Lieblingscompiler messen kann:

#include <time.h>
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <windows.h>
#define  LAPS 10000              //Количество серий
#define  ELEMENTS 10000          //Количество баров в одной серии
#define  INVOKE                  //Определено, если требуется эмулировать
                                //вызов функции

//Представление бара
struct bar
{
        long long Open;
        long long High;
        long long Low;
        long long Close;
        long long AskLow;
        long long BidHigh;
};

int main(void)
{
        struct bar bar_array[ELEMENTS];
        //Общее время выполнения стратегии
        clock_t eleps_time = 0;
        //Общее время выполения
        clock_t total_time = 0;
        //К сожалению заявленный объем памяти (100 000 000 баров) выделить не удалось,
    //поэтому выделяем память порциями, 1000 раз, по 100 000 баров за раз.
        clock_t ttime = clock();
        for(int lap = 0; lap < LAPS; lap++)
        {
                //Заполняем бары случайными числами
                for(int i = 0; i < ELEMENTS; i++)
                {
                        bar_array[i].Open = (long long)rand();
                        bar_array[i].High = (long long)rand();
                        bar_array[i].Low = (long long)rand();
                        bar_array[i].Close = (long long)rand();
                        bar_array[i].AskLow = (long long)rand();
                        bar_array[i].BidHigh = (long long)rand();
                        //if(i < 5)
                        //      printf("%i\n", bar_array[i].High);
                }
                //Эмулируем работу ТС c массивом котировок
                //Рассчитываем время на выполнение этого блока и суммируем его, получая общее время
                //выполнения
                clock_t btime = clock();
                //Наша стратегия будет проверять простое соответствие проверяемого бара настоящему.
                //Настоящий бар, это бар чей high > open, low, close а low < high, open, close
                int signal = 0;

                for(int i = 0; i < ELEMENTS; i++)
                {
                        #ifndef  INVOKE
                        if( bar_array[i].High > bar_array[i].Low &&
                            bar_array[i].High > bar_array[i].Open &&
                                bar_array[i].High > bar_array[i].Close)
                                signal++;
                        #endif
                        #ifdef  INVOKE
                        signal += TradeSystem(&bar_array[i]);
                        #endif
                }
                eleps_time += clock() - btime;
        }
        printf("Bars was worked: %i\n", LAPS*ELEMENTS);
        //Печатаем общее время выполнения
    double timedif = ((double)clock() / (double)CLOCKS_PER_SEC);
    printf("Bars %f seconds\n", timedif);
        //Печатаем время выполнения торговой системы
        double eleps_diff = (double)eleps_time / (double)CLOCKS_PER_SEC;
        printf("The TradeSystem time is %f seconds\n", eleps_diff);
        printf("The Eleps tik is %i tiks\n", eleps_time);
        return 0;
}
//
// Функция торговой системы. Принимает на вход бар,
// обрабатывает его и возвращает целочисленный результат
int TradeSystem(struct bar &cbar)
{
        if( cbar.High > cbar.Low &&
                cbar.High > cbar.Open &&
                cbar.High > cbar.Close)
                                return 1;
        return 0;
}

Sie sehen, dass dieser Code je nach der Invoke-Direktive entweder das Array durchläuft und einen einfachen Vergleich durchführt (eine sehr schnelle Operation) oder eine Funktion aufruft, die denselben Vergleich durchführt.

Schauen wir uns an, wie viel Zeit dieser Code für die Suche und den Vergleich von 100 000 000 Balken benötigt:

Wir können sehen, dass es 1,28 Sekunden brauchte, um 100.000.000 Takte direkt zu durchlaufen, was fast ein Drittel schlechter ist als die angekündigte Leistung.

Es ist zu erkennen, dass die Suche nach 100 000 000 Balken mit dem Aufruf der Berechnungsfunktion für jeden Balken 1,79 Sekunden dauerte, was mehr als 1,5 Mal schlechter ist als die angegebene Leistung.

Alle Tests wurden aufi7 870, DDR3 3200 8Gb Hardware durchgeführt.

Die meiste Zeit wurde für die eigentliche Datenaufbereitung aufgewendet (etwa 9 Sekunden). Schon die kleinste Unzulänglichkeit im Optimierungsentwurf führt zu einem enormen Overhead. Aber ich habe diese Zeit nicht berücksichtigt, da wir nur über den Strategiedurchlauf gesprochen haben.

Ziehen Sie Ihre eigenen Schlussfolgerungen. Ich hoffe, mit den Zahlen gezeigt zu haben, dass das behauptete Ergebnis, gelinde ausgedrückt, nicht der Realität entspricht. Selbst die theoretische Leistung des Codes, der den Optimierer beschreibt, entspricht nicht dem behaupteten Ergebnis. Und wenn Sie einen echten Tester implementieren, der annähernd die Funktionalität des behaupteten hat, wird die Leistung noch weiter sinken, da jeder Funktionsaufruf und jede mehr oder weniger nützliche mathematische Berechnung sofort die Zeit der bloßen Suche verringert.

 
Avals:
Nun, das ist ein Gral eines Trends überhaupt. Es ist auch nicht durchweg weniger als 2x. Es gibt keine derartigen Instrumente, die die H-Wellen über die gesamte Serie hinweg konstant auf weniger oder mehr als 2 bringen. In einigen Bereichen/zu einigen Zeitpunkten. Wissen, wann man mit einem Trend handelt, wann man mit einer Rendite handelt. Filtern Sie den Basar))

Genau, aber in diesem Fall kommen wir zum Limit-Handel als letzte Phase der Entwicklung eines idealen Handelssystems.

Denken Sie nach: Wenn ein "ideales" System Limits handeln muss, warum sollte dann ein echtes System Marquets oder Stops handeln? Aus Bescheidenheit? ;)