Mysql-Abfrage mit Rückwärts-Adjustierung

ms1110

Grünschnabel
Bei meiner Frage geht es nicht um konkreten Code, sondern um die grundsätzliche Konzeption des Ganzen. Ich habe eine Mysql-Datenbank mit Börsenkursen von Futures. Anders als Aktien, laufen diese aus. Wer eine längere Zeitreihe darstellen will, muss also die sogenannten Kontrakte zusammenstückeln (z.B. erst JAN20, dann MAR20, dann MAY20 usw.) Das Problem: jeder „neue“ Kontrakt hat einen anderen Kurs als der „alte“. Im Chart entstehen dadurch Gaps, die eine vernünftige Analyse unmöglich machen. Daher berechnet man beim Übergang einen Multiplikator, mit dem alle vorherigen Kurse multipliziert werden. So sehen Ausschnitte meiner Datenbank aus:
Tag 1
datecontractopenhighlowclosevolumeactive
2019-12-24JAN20410.40410.40405.90406.8073act
2019-12-24MAR20422.50423.60420.60420.9048
2019-12-24MAY20415.50415.50412.60412.607
2019-12-24JLY20000406.002
2019-12-24SEP20000400.300
2019-12-24NOV20000398.300
2019-12-24JAN21000396.800

Tag 2
datecontractopenhighlowclosevolumeactive
2019-12-26JAN20408.90409.10404.00406.20124
2019-12-26MAR20425.10426.40421.20422.30132act
2019-12-26MAY20415.80416.90413.80414.1037
2019-12-26JLY20409.60409.60408.40408.402
2019-12-26SEP20402.60402.60402.60402.601
2019-12-26NOV20000400.600
2019-12-26JAN21000399.100

Ausgelöst wird der Übergang durch das Volumen: der Future mit dem höchsten Volumen wandert in die Zeitreihe. Im Beispiel war das am 24.12. JAN20 und am 26.12. dann MAR20. Ohne Adjustierung hätte ich also einen Sprung von 406,20 auf 422,30. Real (bei JAN20) fiel der Kurs jedoch von 406,80 auf 406,20, bei MAR20 stieg er geringfügig von 420,90 auf 422,30. Um dieses Gap zu vermeiden, macht man mit dem MAR20 am 26.12. weiter, adjustiert die vorherigen JAN20 (24.12. und zurück) jedoch per Multiplikator. Dieser wird mit den Kursen von Tag 1 (24.12.) berechnet, hier ist die Formel:
1583265630193.png

Im obigen Beispiel: 420.90/406.80 = 1.03466 (kann auch negativ ausfallen!)

Diesen Multiplikator muss ich also ausrechen und die Kurse des JAN20-Kontrakts am 24.12., am 23.12. und so weiter damit multiplizieren (jeweils open, high, low und close. Volume nicht). Erschwerend kommt hinzu, dass diese Prozedur monatlich oder zumindest mehrmals jährlich stattfindet. Je weiter man zurückgeht, desto mehr Multiplikatoren stehen also bei einem Kontrakt. Bei JAN19 und wenn man einen Jahreschart zeichnet hätte man Stand 26.12.2019 die Multiplikatoren von JAN19, MAR19, MAY19, JLY19, SEP19 und NOV20 - jeweils miteinander multipliziert.

Wie konzipiere ich das Ganze? Erzeuge ich eine neue Tabelle, in der ausschließlich die „act“-Kontrakte auftauchen mit einer Spalte „Multiplikator“? Und wie bringe ich die Multiplikatoren zusammen? Und wie frage ich die Zeitreihen am besten ab?

Ich hoffe, meine Erklärungen sind halbwegs plausibel. Bei Unklarheiten bitte Fragen.
Noch zur Info ist hier ein Beispiel, in dem nicht rückadjustiert wird:

1583266473099.png
 

Yaslaw

n/a
Moderator
Sehr komplex mit viel Fachwissen drin. Ich habe den Faden verloren, als es darum ging, dass der Gap vom Gap und noch ein Gap...

Ich würde galube 2 Tabellen machen. Eine mit den Original Daten, die 2te Mit berechneten Daten.
Dann kannst du den Gap ausrechnen und auf die alten berchneten Daten zugreifen.
Ev leige ich aber auch völlig falsch, da ich etwa 15% vom ganzen verstanden habe.