Diskussion zum Artikel "Entwicklung eines Replay-Systems — Marktsimulation (Teil 01): Erste Versuche (I)"
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.
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.
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 88Aber 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.)))
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!
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.

Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
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