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
Tag 2
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:
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:
Tag 1
date | contract | open | high | low | close | volume | active |
2019-12-24 | JAN20 | 410.40 | 410.40 | 405.90 | 406.80 | 73 | act |
2019-12-24 | MAR20 | 422.50 | 423.60 | 420.60 | 420.90 | 48 | |
2019-12-24 | MAY20 | 415.50 | 415.50 | 412.60 | 412.60 | 7 | |
2019-12-24 | JLY20 | 0 | 0 | 0 | 406.00 | 2 | |
2019-12-24 | SEP20 | 0 | 0 | 0 | 400.30 | 0 | |
2019-12-24 | NOV20 | 0 | 0 | 0 | 398.30 | 0 | |
2019-12-24 | JAN21 | 0 | 0 | 0 | 396.80 | 0 |
Tag 2
date | contract | open | high | low | close | volume | active |
2019-12-26 | JAN20 | 408.90 | 409.10 | 404.00 | 406.20 | 124 | |
2019-12-26 | MAR20 | 425.10 | 426.40 | 421.20 | 422.30 | 132 | act |
2019-12-26 | MAY20 | 415.80 | 416.90 | 413.80 | 414.10 | 37 | |
2019-12-26 | JLY20 | 409.60 | 409.60 | 408.40 | 408.40 | 2 | |
2019-12-26 | SEP20 | 402.60 | 402.60 | 402.60 | 402.60 | 1 | |
2019-12-26 | NOV20 | 0 | 0 | 0 | 400.60 | 0 | |
2019-12-26 | JAN21 | 0 | 0 | 0 | 399.10 | 0 |
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:
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: