Diskussion zum Artikel "Entwicklung eines Replay-Systems — Marktsimulation (Teil 01): Erste Versuche (I)"

 

Neuer Artikel Entwicklung eines Replay-Systems — Marktsimulation (Teil 01): Erste Versuche (I) :

Wie wäre es, ein System zu schaffen, das es uns ermöglicht, den Markt zu studieren, wenn er geschlossen ist, oder sogar Marktsituationen zu simulieren? Wir beginnen hier eine neue Artikelserie, in der wir uns mit diesem Thema beschäftigen werden.

Mit diesem Code werden Balken mit einer Periode von 1 Minute erstellt, was die Mindestanforderung der Plattform für die Erstellung aller anderen Zeitrahmen des Charts ist. Die hervorgehobenen Teile sind nicht Teil des Codes selbst, sind aber für die Analyse des 1-Minuten-Balkens nützlich. Wir müssen prüfen, ob sie wirklich innerhalb dieses Zeitrahmens erstellt wurde. Denn wenn die Erstellung viel länger als 1 Minute dauert, müssen wir etwas dagegen tun. Wenn sie in weniger als einer Minute erstellt wird, kann dies ein Hinweis darauf sein, dass das System sofort funktionsfähig ist.

Nachdem wir dieses System ausgeführt haben, erhalten wir das Ergebnis, das wir im folgenden Video zeigen:

Autor: Daniel Jose

 

Welchen Sinn hat der folgende Code?

 17        struct st00
 18       {
 19           datetime dt;
 20           int      milisec;
 21           double   Bid,
 22                    Ask,
 23                    Last;
 24           long     Vol;
 25           uchar    flag;
 26       }st00 m_ArrayInfoTicks[];
 53      m_ArrayInfoTicks[m_ArrayCount].dt = macroRemoveSec ( StringToTime ( StringSubstr (szInfo, 0 , 19 ))); 
 54      m_ArrayInfoTicks[m_ArrayCount].milisec = ( int ) StringToInteger ( StringSubstr (szInfo, 20 , 3 ));   
Wenn die Sekunden in Zeile 53 entfernt wurden, verlieren die Millisekunden und ihre Verwendung in Zeile 54 jede Bedeutung.
Trotzdem fügen Sie sie der Struktur hinzu.
Timer-Ereignisse werden unabhängig voneinander erzeugt. Und jeder Tick kommt nach einem Timer, und nicht in Millisekunden und Sekunden (die gelöscht werden).
Millisekunden wiegen jetzt in der Luft, wie zusätzlicher Speicherplatz. Und unnötige Operationen zum Füllen.
 
Darüber hinaus haben Sie ein weiteres Problem nicht gelöst, das es Ihnen erlaubt, die Konstruktion eines Minutenbalkens zu reduzieren.
Zum Beispiel sind die rot und blau hervorgehobenen Zeiten gleich, wobei der letzte Preis derselbe sein kann, aber nicht sein muss.
Diese Ticks können komprimiert werden und die Zeit, die für den Aufbau eines Minutenbalkens benötigt wird, erheblich reduzieren.
 449      2021.10 . 22        09 : 00 : 38.649      107900    107905                    6
 450      2021.10 . 22        09 : 00 : 38.651                      107900    1.00000000        88
 451      2021.10 . 22        09 : 00 : 38.651                      107895    5.00000000        88
 452      2021.10 . 22        09 : 00 : 38.651                      107890    5.00000000        88
 453      2021.10 . 22        09 : 00 : 38.651                      107885    3.00000000        88
 454      2021.10 . 22        09 : 00 : 38.651                      107880    15.00000000       88
 455      2021.10 . 22        09 : 00 : 38.651                      107880    3.00000000        88
 456      2021.10 . 22        09 : 00 : 38.651                      107875    16.00000000       88
 457      2021.10 . 22        09 : 00 : 38.651                      107870    2.00000000        88
 458      2021.10 . 22        09 : 00 : 38.654                      107875    1.00000000        88
 459      2021.10 . 22        09 : 00 : 38.654                      107875    1.00000000        88
 460      2021.10 . 22        09 : 00 : 38.654                      107880    1.00000000        88
 461      2021.10 . 22        09 : 00 : 38.659                      107880    2.00000000        88
 462      2021.10 . 22        09 : 00 : 38.659                      107885    2.00000000        88
 463      2021.10 . 22        09 : 00 : 38.660                      107885    1.00000000        88
 464      2021.10 . 22        09 : 00 : 38.660                      107890    3.00000000        88
 465      2021.10 . 22        09 : 00 : 38.662                      107885    3.00000000        88
 466      2021.10 . 22        09 : 00 : 38.662                      107880    3.00000000        88
 467      2021.10 . 22        09 : 00 : 38.662                      107875    2.00000000        88
 468      2021.10 . 22        09 : 00 : 38.662                      107895    3.00000000        88
 469      2021.10 . 22        09 : 00 : 38.662                      107900    1.00000000        88
 470      2021.10 . 22        09 : 00 : 38.664                      107880    1.00000000        88       
Aber Sie haben die Sekunden in Zeile 53 entfernt.

53      m_ArrayInfoTicks[m_ArrayCount].dt = macroRemoveSec ( StringToTime ( StringSubstr (szInfo, 0 , 19 ))); 
54      m_ArrayInfoTicks[m_ArrayCount].milisec = ( int ) StringToInteger ( StringSubstr (szInfo, 20 , 3 ));   
Und die Millisekunden in Zeile 54 gelassen.
Das macht es Ihnen unmöglich, diese Komprimierung genau durchzuführen. Es gibt keine Bindung von Millisekunden an Sekunden - sie wurde entfernt.
Natürlich ist die Wahrscheinlichkeit gering, dass der Millisekundenwert auf die nächste Sekunde übergeht und sogar in den nächsten Ticks weiterläuft. Aber er ist da.
Eine 100-prozentige Garantie für die Genauigkeit gibt es nur beim Übergang von einem Minutenbalken zum nächsten - es gibt eine Bindung von Millisekunden an Minuten.
 
Benötigen Sie Millisekunden, um Ticks in die Zukunft zu komprimieren? Verstehe ich das richtig?
Nun, "in der Zukunft" - für mich - habe ich noch nicht weiter gelesen. Für Sie, nehme ich an, ist das schon "in der Vergangenheit"...)))
Wenn das so ist, dann stimme ich zu, dass die Sekunden entfernt werden können - die Wahrscheinlichkeit eines Zufalls ist extrem gering.)))
 
Oh, ein Wunder! Wenn Sie Millisekunden komprimieren, dann ist die Entstehungszeit der Minutenkerze 00:01:06. Gegen 00:01:52 - ohne Kompression. Wir haben 46 Sekunden gewonnen!)))
 

Das Ergebnis ist, dass mit allen Änderungen.


wurden 1153.809 Bewegungspositionen geschaffen.

Gelöschte Ticks = 1066231

Überprüfung der Ausführungsgeschwindigkeit . 2023.12.02 01:52:21 ---- 2023.12.02 01:53:17

Zeit für den Aufbau der ersten Kerze: 00:00:56 Sekunden.)))

Wir haben 56 Sekunden gewonnen!

Genau die Hälfte davon.
 

Vielen Dank für Ihre großartige Arbeit!

Ich habe eine Frage. Ist es möglich, die Option zum Zurückspulen in die Wiedergabe einzufügen? Ich meine, dass man zu den vorherigen Kerzen zurückgehen und erneut spielen kann.