[PYTHON] Versuchen Sie, die kumulierte Rendite des Rollovers im Futures-Handel zu modellieren

Modellierung des zukünftigen Handels

Es ist im Grunde eine Fortsetzung von vorherige und vorherige.

Heute ist der Standard "[[] in Future Trading Fr](http://www.comtex.co.jp/www/?module=Default&action=meigara&page=sheet1&article=T-kin) "baut tatsächlich kontinuierliche Renditen aus Rollovers auf und hilft bei der Vorhersage und Modellierung Es ist eine Geschichte, für die man sich einsetzen kann.

Rollover ist einfach ein Übergang von einem Kontrakt mit einer sich nähernden Frist für den Futures-Handel zu einem Kontrakt, der bald oder lange vor uns liegt. Das ist. Um den kontinuierlichen Übergang des Transaktionssaldos zu modellieren, müssen verschiedene Marktbedingungen und die Transaktion berücksichtigt werden. Hier betrachten wir jedoch ein einfaches Modell, das linear übergeht.

Markenauswahl

Lesen Sie Gold Futures Rollover Dates 2013 und wählen Sie die entsprechende Aktie aus. Zum Zeitpunkt des Schreibens ist es 3/13, also zielen wir auf GCJ14 und GCM14, die kurz vor dem Erreichen des letzten Handelstermins stehen.

Zielloser Spaziergang

[Random Walk](http://ja.wikipedia.org/wiki/%E3%83%A9%E3%83%B3%E3%83%80%E3%83%A0%E3%83%BB%E3% Simulieren Sie zukünftige Handelskontrakte mit 82% A6% E3% 82% A9% E3% 83% BC% E3% 82% AF% E7% 90% 86% E8% AB% 96).

def random_walk(px, n, f):
    np.random.seed(34567)
    N = 200
    _walk = (np.random.randint(0, 200, size=N) - 100) * 0.25
    perturb = (np.random.randint(0, 20, size=N) - 10) * 0.25
    walk = _walk.cumsum()
    rng = pd.date_range(px.index[0], periods=len(px) + N, freq='B')
    near = np.concatenate([px.values, px.values[-1] + walk])
    far = np.concatenate([px.values, px.values[-1] + walk + perturb])
    prices = pd.DataFrame({n: near, f: far}, index=rng)
    return prices

Sie haben jetzt eine Random-Walk-Funktion. Lassen Sie uns Yahoo! Finance-Daten an diese weitergeben.

#SPY Investment Trust Grundpreis S.&Wird als ungefährer Preis für den P 500-Index verwendet
px = web.get_data_yahoo('SPY')['Adj Close'] * 10
#Geben Sie die Marke und das Vertragsablaufdatum an
expiries = {
    'GCJ14': datetime(2014,4,28),
    'GCM14': datetime(2014,6,26)
}
expiry = pd.Series(expiries).order()

print( px.tail(5) )
# => 
# Date
# 2014-03-06    1881.8
# 2014-03-07    1882.6
# 2014-03-10    1881.6
# 2014-03-11    1872.3
# 2014-03-12    1872.8

print( expiry )
# =>
# GCJ14   2014-04-28
# GCM14   2014-06-26

prices = random_walk(px, 'GCJ14', 'GCM14')
print( prices.tail(5) )
# =>
#               GCJ14    GCM14
# 2014-10-17  1618.80  1621.05
# 2014-10-20  1634.80  1632.55
# 2014-10-21  1622.55  1623.80
# 2014-10-22  1638.55  1639.30
# 2014-10-23  1637.55  1638.30

Gewichtet

Erstellen Sie als Nächstes ein Modell, das die Gewichte berechnet. Der Code ist der gleiche wie im O'Reilly-Buch.

def get_roll_weights(start, expiry, items, roll_periods=5):
    dates = pd.date_range(start, expiry[-1], freq='B')
    weights = pd.DataFrame(np.zeros((len(dates), len(items))),
                        index=dates, columns=items)
    prev_date = weights.index[0]
    for i, (item, ex_date) in enumerate( expiry.iteritems() ):
        if i < len(expiry) - 1:
            weights.ix[prev_date:ex_date - pd.offsets.BDay(), item] = 1
            roll_rng = pd.date_range(end=ex_date - pd.offsets.BDay(),
                                     periods=roll_periods + 1, freq='B')
            decay_weights = np.linspace(0, 1, roll_periods + 1)
            weights.ix[roll_rng, item] = 1 - decay_weights
            weights.ix[roll_rng, expiry.index[i + 1]] = decay_weights
        else:
            weights.ix[prev_date:, item] = 1
        prev_date = ex_date
    return weights

Berechnung der kontinuierlichen Rendite

Verwenden Sie diese Funktionen schließlich, um den kontinuierlichen Rückgabeindex zu ermitteln.

weights = get_roll_weights('3/11/2014', expiry, prices.columns)

sample_prices  = prices.ix['2014-04-17' : '2014-04-28']
sample_weights = weights.ix['2014-04-17' : '2014-04-28']
sample = sample_prices * sample_weights

#Erstellen Sie einen neuen Datenrahmen
result = pd.DataFrame({'GCJ14': sample['GCJ14'], 'GCM14': sample['GCM14'], 'GOLD': sample['GCJ14'] + sample['GCM14'] })

#Holen Sie sich eine Rendite auf Rollover-Futures
print( result )
# =>
#               GCJ14    GCM14     GOLD
# 2014-04-17  1663.30     0.00  1663.30
# 2014-04-18  1687.55     0.00  1687.55
# 2014-04-21  1348.24   337.16  1685.40
# 2014-04-22  1017.78   678.42  1696.20
# 2014-04-23   676.62  1015.53  1692.15
# 2014-04-24   338.01  1351.84  1689.85
# 2014-04-25     0.00  1705.55  1705.55
# 2014-04-28     0.00  1723.05  1723.05

image.png

Dies ist das Ende der Analyse des Aktienportfolios und wir werden es ab dem nächsten Mal auf andere Bereiche anwenden.

Referenz

Einführung in die Datenanalyse mit Python-Datenverarbeitung mit NumPy und Pandas http://www.oreilly.co.jp/books/9784873116556/

Recommended Posts

Versuchen Sie, die kumulierte Rendite des Rollovers im Futures-Handel zu modellieren
Versuchen Sie, die Leistung des Modells für maschinelles Lernen / Regression zu bewerten
Versuchen Sie, die Leistung des Modells für maschinelles Lernen / Klassifizierung zu bewerten
Probieren Sie Cython in kürzester Zeit aus
Versuchen Sie, die Bewegung des Sonnensystems zu simulieren
Versuchen Sie, die Eisenbahndaten der nationalen Landnummern in 3D anzuzeigen
Geben Sie das Beleuchtungsmodell für SCN-Material in Pythonista an
Zählen Sie die Anzahl der Parameter im Deep-Learning-Modell
Versuchen Sie, die Probleme des "Matrix-Programmierers" zu lösen (Kapitel 1).
Die Entscheidung von scikit-learn Wie man ein Holzmodell visualisiert
[Django] Lassen Sie uns versuchen, den Teil von Django zu klären, der im Test irgendwie durch war
Versuchen Sie, die Anzahl der Likes auf Twitter zu schätzen
Versuchen Sie, den Inhalt von Word mit Golang zu erhalten
Verwendung des in Lobe in Python erlernten Modells
Versuchen Sie, die in Firefox gespeicherten Anmeldedaten zu entschlüsseln
Um das Äquivalent von Rubys ObjectSpace._id2ref in Python zu tun
Versuchen Sie, COVID-19 Tokyo-Daten mit Python zu kratzen
So finden Sie die optimale Anzahl von Clustern für k-means
Versuchen Sie, die Funktionsliste des Python> os-Pakets abzurufen
[Memo] Das Geheimnis kumulativer Zuweisungsanweisungen in Python-Funktionen
Ich habe eine Funktion erstellt, um das Modell von DCGAN zu überprüfen
Versuchen Sie, die Genauigkeit der Twitter-ähnlichen Zahlenschätzung zu verbessern
Versuchen Sie, die Probleme / Probleme des "Matrix-Programmierers" zu lösen (Kapitel 0-Funktion)
Versuchen Sie, den Betrieb von Netzwerkgeräten mit Python zu automatisieren
Versuchen Sie, die in COTOHA beliebten Schlüsselwörter zu extrahieren
Versuchen Sie, eine multimodale Verteilung mithilfe des EM-Algorithmus zu modellieren
Versuchen Sie, Merkmale von Sensordaten mit CNN zu extrahieren
Zusammenfassung des Zeichenkettenformats in Python3 Gibt an, ob mit dem alten oder dem neuen Modell gelebt werden soll
Versuchen Sie, die Position des Senders aus dem Funkwellenausbreitungsmodell mit Python [Wi-Fi, Beacon] zu berechnen.
So geben Sie die im Django-Modell enthaltenen Daten im JSON-Format zurück und ordnen sie der Broschüre zu
[Pytorch] Ich möchte die Trainingsparameter des Modells manuell zuweisen
So bestimmen Sie die Existenz eines Selenelements in Python
[Anmerkung] Versuchen wir, den Stromverbrauch vorherzusagen! (Teil 1)
Wie Sie die interne Struktur eines Objekts in Python kennen
Versuchen Sie, die Thread-Liste der Nachrichten (Abneigung) mit Python zu erhalten.
[Python] PCA-Scratch im Beispiel "Einführung in die multivariate Analysemethode"
So ändern Sie die Farbe nur der mit Tkinter gedrückten Taste
Versuchen Sie, die stochastische Massenfunktion der Binomialverteilung in Python zu transkribieren
So überprüfen Sie die Speichergröße einer Variablen in Python
Erste Python ② Versuchen Sie, Code zu schreiben, während Sie die Funktionen von Python untersuchen
Versuchen Sie, das N Queen-Problem mit SA von PyQUBO zu lösen
Geben Sie den Inhalt von ~ .xlsx im Ordner mit Python in HTML aus
Fühlen Sie sich frei, das Legendenlabel mit Seaborn in Python zu ändern
Versuchen Sie, ein neues Bild mit dem trainierten StyleGAN2-Modell zu bearbeiten
Verwenden Sie PyCaret, um den Preis von Gebrauchtwohnungen in Tokio vorherzusagen!
Ich habe den Code geschrieben, um den Brainf * ck-Code in Python zu schreiben
So überprüfen Sie die Speichergröße eines Wörterbuchs in Python
So ermitteln Sie die Scheitelpunktkoordinaten eines Features in ArcPy
[Einführung in das SIR-Modell] Betrachten Sie das passende Ergebnis von Diamond Princess ♬
Erstellen Sie eine Funktion, um den Inhalt der Datenbank in Go abzurufen
Ich möchte die Bevölkerung jedes Landes der Welt kennenlernen.
Versuchen Sie, das Triplett des Bootsrennens vorherzusagen, indem Sie das Lernen bewerten
[Abgeschlossene Version] Versuchen Sie, die Anzahl der Einwohner der Stadt anhand der Adressliste mit Python herauszufinden
Programmierung, um in der Welt zu kämpfen ~ 5-5,5-6
Programmieren, um in der Welt zu kämpfen 5-3
Die Geschichte der Teilnahme an AtCoder
Programmierung für den Kampf in der Welt - Kapitel 4