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!
Как ущербный, могу позволить себе написать правду. И паук и qq - для новичка полное дерьмо. Когда человек, вне зависимости от опыта, приходит на рынок, он сталкивается со сложной задачей: найди то, не знаю что. Но чтобы был профит. И самое сложное определиться, ГДЕ именно копать и КАК копать. На форумах этой информации практически нет. А если и...
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.
structMqlRates
{
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.
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.
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).
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}).
Daskönnen Sie nicht.
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!
Jacke, beschmutzen Sie nicht Ihr Image hier unter den "Nubs und PR-Leuten", wie Sie es nennen. Gehen Sie zu Ihrem QQ.
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.
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.
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:
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
// 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.
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.
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).
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):
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).
In einigen Fällen wird es entscheidend sein, die Lücke zu ignorieren.
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. ;)