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

 
hrenfx:


Daskönnen Sie nicht.

Unsinn von einem Mann, der in der Küche aufgewachsen ist))
 
Avals:
Mach keinen Scheiß, geh in die PR-Küche ;)

Jacke, beschmutzen Sie nicht Ihr Image hier unter den "Nubs und PR-Leuten", wie Sie es nennen. Gehen Sie zu Ihrem QQ.

P.S. Für Händler gibt es die Möglichkeit, ihr Wissen über die Realitäten des Devisenmarktes und seine verschiedenen Merkmale an ihren üblichen Börsen aufzufrischen. Erweitern Sie Ihren Horizont!

Poul Trade Forum: Два ку
  • forex.kbpauk.ru
Как ущербный, могу позволить себе написать правду. И паук и qq - для новичка полное дерьмо. Когда человек, вне зависимости от опыта, приходит на рынок, он сталкивается со сложной задачей: найди то, не знаю что. Но чтобы был профит. И самое сложное определиться, ГДЕ именно копать и КАК копать. На форумах этой информации практически нет. А если и...
 
hrenfx:
Jacke, beschmutzen Sie nicht Ihr Image hier unter den "Nubs und PR-Leuten", wie Sie es nennen. Gehen Sie zu Ihrem QQ.
die Leute hier sind meistens keine Nulpen, und du bist der einzige PR-Typ dc)
 

MetaQuotes hat es natürlich mit dem Format der gespeicherten Historie (MqlRates) übertrieben (und untertrieben), was verständlich ist. Als das Format entwickelt wurde, herrschten auf dem Devisenmarkt feste Spreads vor, während marktübliche (variable) Spreads noch exotisch waren.Obwohl es klar war, dass selbst die festen Spreads in der Tat schwankten, weil die Maklerfirmen "ihre Fixierung in den Momenten von Nachrichten und schnellen Marktveränderungen nicht garantieren" (die Anführungszeichen stellen hier ein Zitat aus einem typischen Angebot fast aller Maklerfirmen jener Zeit dar).

Aber die Zeiten haben sich geändert, und wir haben, was wir haben - die Spreads schwimmen auf jeder Zecke, und das ist in Ordnung. Nur die historischen Zitate spiegeln das nicht wider, leider.

Für jeden Balken wird nur ein Wert der Spanne in der Historie gespeichert. Und das ist jetzt nicht genug. Und es führt zu Verzerrungen beim Testen der Historie, weil es keine Übereinstimmung zwischen der tatsächlichen Handelshistorie und dem Handel im Tester gibt, selbst wenn ein Broker eine absolut ehrliche (der tatsächlichen Tick-Feed-Übersetzung entsprechende) Historienbasis liefert. Der Grund ist die unzureichende Beschreibungskraft des MqlRates-Formats.

struct MqlRates
  {
   datetime time;         // время начала периода     8 байт
   double   open;         // цена открытия             8 байт
   double   high;         // наивысшая цена за период  8 байт
   double   low;          // наименьшая цена за период 8 байт
   double   close;        // цена закрытия           8 байт   
   long     tick_volume;  // тиковый объем           8 байт  
   int      spread;       // спред                  4 байта
   long     real_volume;  // биржевой объем            8 байт
  };
// итого: size_of(MqlRates) = 52 байта 

Diese Struktur geht von der Unveränderlichkeit des Spreads innerhalb eines Balkens aus, was nicht der aktuellen Handelsrealität entspricht.

Im weiteren Verlauf der Diskussion über das "vollständige" Format habe ich es "Mql_6_Rates" genannt, um deutlich zu machen, dass es derzeit nicht unterstützt wird.

Im Folgenden werden zwei Varianten vorgestellt: Die erste ist eine gepackte Struktur (für die Festplatte) ohne Komprimierung durch spezielle Algorithmen. Es könnte um ein Vielfaches kleiner komprimiert werden (vermutlich 2-3), um den Transferverkehr zu reduzieren. Das komprimierte Format wird hier nicht diskutiert.

struct Mql_6_PackedRates  
  {
   time_t time;            // время начала периода  4 байта  // восьмибайтный time64_t неактуален до 2038 года
   float    average_price; // средняя цена бара грубо (на три значащих цифры меньше точности _digits) 4 байта
   float    d_open;        // поправка к цене открытия 4 байта
   float    d_high;        // поправка к наивысшей цене за период 4 байта
   float    d_low;         // поправка к наименьшей цене за период 4 байта
   float    d_close;       // поправка к цене закрытия 4 байта
   ushort   spread;        // средний спред 2 байта
   char     d_open_spread; // поправка к спреду открытия 1 байт
   char     d_high_spread; // поправка к спреду high 1 байт
   char     d_low_spread;  // поправка к спреду low 1 байт
   char     d_close_spread;// поправка к спреду close 1 байт
   uint     tick_volume;   // тиковый объем 4 байт
   uint     real_volume;   // биржевой объем  4 байт
   double   OpenBid() {return (average_price+d_open); } // функции на лету вычисляющие точные значения
   double   OpenAsk() {return (average_price+d_open+OpenSpread()); }
   double   HighBid() {return (average_price+d_high); }
   и т.д...... // функции на лету вычисляющие точные значения
   ...
   ...
   double OpenSpread() { return ((spread+d_open_spread) * _digits); }
   ...
   и т.п ......
   Mql_6_Rates UnpackRates() { Mql_6_Rates Rates; ..../*заполняем*/.....  return (Rates);}
  };
// Итого у меня получилось 38 байт, всё правильно? Вся информация об 4 точках bid-ask упакована без искажений

Das "gepackte" Format soll optimal sein, wenn es auf der Festplatte des Händlers gespeichert ist. Wenn es von der Festplatte in den Speicher geladen wird, kann es im Handumdrehen entpackt werden, die Entpackungsfunktionen sind an die Struktur "angehängt".

Die entpackte Historie (für den Zugriff von MQL) könnte z.B. so aussehen:

struct Mql_6_Rates
  {
   datetime time;         // время начала периода     8 байт
   double   open_bid;     // цена открытия             8 байт
   double   open_ask;     // цена открытия             8 байт
   double   high_bid;     // наивысшая цена за период  8 байт
   double   high_ask;     // наивысшая цена за период  8 байт
   double   low_bid;      // наименьшая цена за период 8 байт
   double   low_ask;      // наименьшая цена за период 8 байт
   double   close_bid;    // цена закрытия           8 байт   
   double   close_ask;    // цена закрытия           8 байт   
   long     tick_volume;  // тиковый объем           8 байт  
   long     real_volume;  // биржевой объем            8 байт
  };

//итого = 88 байт

Er ist größer als jetzt, aber die Spanne wird an allen festen Punkten des Balkens berechnet. D.h., wenn wir Informationen in Minutenbalken nach dem traditionellen Schema {Open+High+Low+Close} schreiben müssen, dann sollten wir sie "vollständig" schreiben.

Meiner Meinung nach sind diese Informationen überflüssig und neigen dazu, am Eröffnungszeitpunkt maximale Illusionen zu erzeugen. Die Zeitpunkte der Balkeneröffnung für verschiedene Symbole stimmen nicht überein, während genau zum Zeitpunkt des Minutenbeginns (astronomisch) die Geld-Brief-Kurse auf den Symbolen den zuletzt gehandelten Geboten, d.h. den Schlusskursen, entsprechen. Daher könnte das am besten geeignete Format für die Prüfung der Minuten (der gesündeste Kompromiss zwischen Tradition und gesundem Menschenverstand) wie folgt aussehen

struct Mql_6_Rates
  {
   datetime time;         // время начала периода     8 байт
   double   high_bid;     // наивысшая цена за период  8 байт
   double   high_ask;     // наивысшая цена за период  8 байт
   double   low_bid;      // наименьшая цена за период 8 байт
   double   low_ask;      // наименьшая цена за период 8 байт
   double   close_bid;    // цена закрытия           8 байт   
   double   close_ask;    // цена закрытия           8 байт   
   long     tick_volume;  // тиковый объем           8 байт  
   long     real_volume;  // биржевой объем            8 байт
  };

//итого = 72 байта

// Die entsprechende Einsparung im gepackten Diskettenformat würde weitere 7 Bytes betragen, d.h. SizeOf(Mql_6_PackedRates) würde sich auf 31 Bytes reduzieren.

Für die ökologische (sinnvollste) Prüfung "nach Eröffnungskursen" sollte die astronomische Startzeit von einer Minute genommen werden, d.h. der Schlusskurs des vorherigen Balkens. In diesem Fall würde ein exakter Mehrwährungssynchronismus der Preise erreicht werden. Diese Synchronität ist für das Debugging von Multicurrency-EAs, die mit Market Orders handeln, von entscheidender Bedeutung. Für den Handel mit Limit- und Stop-Orders sind die Informationen über die Extrema auf jedem Balken von entscheidender Bedeutung. Sie sind auch in dem von uns diskutierten Format vollständig verfügbar.

--

Eigentlich entwickle ich diese Formate gerade für meine eigenen Zwecke. Sie hier zu veröffentlichen, ist nur ein Nebenprodukt meiner Entwicklung. Vielleicht findet sie ja jemand nützlich.

 
MetaDriver:


Bei einem umweltfreundlichen (und sinnvollen) "Eröffnungskurs"-Test sollte die astronomische Startzeit der Minute genommen werden, d. h. der Schlusskurs des vorherigen Balkens.

In einigen Fällen wird es entscheidend sein, die Lücke zu ignorieren.

p.s. Wenn Sie Einsparungen beim Datenverkehr benötigen, können Sie Offsets anstelle von absoluten Preiswerten speichern, wofür double sehr gut geeignet ist.

Документация по MQL5: Математические функции / MathAbs
Документация по MQL5: Математические функции / MathAbs
  • www.mql5.com
Математические функции / MathAbs - Документация по MQL5
 
MetaDriver:

MetaQuotes hat es natürlich mit dem Format der gespeicherten Historie (MqlRates) übertrieben (bzw. untertrieben). Das ist verständlich: Als das Format auf dem Devisenmarkt entwickelt wurde, herrschten feste Spreads vor, während marktübliche (variable) Spreads noch exotisch waren.Obwohl es klar war, dass selbst feste Spreads in Wirklichkeit variabel waren, weil die Maklerunternehmen "in Zeiten von Nachrichten und schnellen Marktveränderungen keine Garantie für ihre Festigkeit geben" (die Anführungszeichen stellen hier ein Zitat aus einem typischen Angebot fast aller Maklerunternehmen jener Zeit dar).

Der MT5 war ursprünglich als Börsenterminal konzipiert. Und an den Börsen gibt es seit SEHR langer Zeit Gesetze zur Preisgestaltung von ECNs. D.h. die Ausrede der unzureichenden Leistung ist unhaltbar. Nun, es gab (und gibt) in ihrem Team keinen starken Algotrader, auf den man hören könnte. Offensichtlich gilt nur "die Anzahl der Jahre erfolgreicher Plattformentwicklung" als solide Logik.
 
hrenfx:
MT5 war ursprünglich als Börsenterminal konzipiert. Und an den Börsen sind die ECN-Gesetze zur Preisbildung schon sehr lange in Kraft. Die Ausrede des Mangels ist also nicht haltbar. Nun, es gab (und gibt) in ihrem Team keinen starken Algotrader, auf den man hören könnte. Offensichtlich gilt nur "die Anzahl der Jahre erfolgreicher Plattformentwicklung" als solide Logik.

Ich habe nicht versucht, mich zu entschuldigen. Um sich zu entschuldigen, muss man zuerst anklagen. Dafür habe ich irgendwie keine Zeit.... :)

 

Dann ist es ein Ablasshandel (vor dem man sich hüten sollte - er ist schlimmer als nackte Kritik):

MetaDriver:

Als das Format der gespeicherten Historie (MqlRates) entwickelt wurde, hat MetaQuotes natürlich übertrieben (untertrieben). Das ist verständlich, denn als das Format auf dem Devisenmarkt entwickelt wurde, herrschten feste Spreads vor, Marktspreads (floating) waren noch exotisch.Obwohl es klar war, dass selbst feste Spreads in Wirklichkeit variabel waren, weil die Maklerunternehmen "in Zeiten von Nachrichten und schnellen Marktveränderungen keine Garantie für ihre Festigkeit geben" (die Anführungszeichen stellen hier ein Zitat aus einem typischen Angebot fast aller Maklerunternehmen jener Zeit dar).

 
Avals:

In einigen Fällen wird es entscheidend sein, die Lücke zu ignorieren.

Es gibt ein solches Schreiben. Aber die Lücke (diskontinuierlicher Sprung des Kurses) kann jederzeit auftreten, nicht nur am Anfang des Taktes. Also ist jedes "ausgedünnte" Format per Definition nicht ohne Sünde. Voller Feed nur in Ticks. Und es könnte noch voller in der Geschichte sein. Ich versuche, ein Minutenformat für mich zu machen, während ich einen solchen Kompromiss gefunden habe.Ich kann es so lassen, wie oben beschrieben (ohne Open, nur {Hi-Lo-Close}), ich verstehe alle Nachteile, es ist nur eine Version meiner Kodierung für meinen Tester. Ich sehe auch vor, mit rohen Ticks zu testen, oder mit künstlich ausgedünnt durch irgendwelche Methoden (mit Speichern von Ticks Format {bid-ask-time}).
 
hrenfx:

Dann ist es Herablassung (Vorsicht vor so etwas - schlimmer als nackte Kritik):

:-)

Es ist ein bisschen spät für mich, Borjomi zu trinken oder Wiedergutmachung zu leisten. Ein Platz in der Hölle ist schon lange für mich reserviert.

Ich glaube nicht, dass der Versuch zu verstehen, ohne zu urteilen, die schwerste meiner Sünden ist. ;)