Erstellen Sie in Python ein einfaches Momentum-Investmentmodell

Kaufen Sie, wenn das Momentum in einem 250-Tage-Lookback Null überschreitet, und verkaufen Sie, wenn das Momentum unter Null fällt.

# -*- coding: utf-8 -*-
import pandas_datareader.data as web
from datetime import datetime
import talib as ta
import matplotlib.pyplot as plt
import pandas as pd

# make plots inline
%matplotlib inline
# setting parameters
ticker = 'SPY'
sd = datetime(2001,  1,  1)
ed = datetime(2015, 12, 31)
period = 250
# getting price data
d = web.DataReader(ticker, 'yahoo', sd, ed)
d.sort_index(ascending=True, inplace=True)

# calcurating momentum
momentum = ta.MOM(d['Adj Close'].values, period)
# initialize
maxcnt = d['Adj Close'].count()
cash = [None for row in range(maxcnt)]
position = [None for row in range(maxcnt)]
asset = [None for row in range(maxcnt)]

cash[0] = 10000
position[0] = 0

# simulation
for i, (index, row) in enumerate(d.iterrows()):
    if i > 0:
        cash[i] = cash[i-1]
        position[i] = position[i-1]

        if momentum[i] > 0 and momentum[i-1] < 0:
            # open(buy)
            amount = cash[i] // row['Adj Close']
            position[i] += amount
            cash[i] -= amount * row['Adj Close']
            
        elif momentum[i] < 0 and momentum[i-1] > 0:
            # close(sell)
            cash[i] += position[i] * row['Adj Close']
            position[i] = 0

    asset[i] = cash[i] + position[i] * row['Adj Close']

d['asset'] = asset
# plot result
d2 = pd.DataFrame()
d2['Stock'] = d['Adj Close']/d['Adj Close'][0]*100
d2['Performance'] = asset/asset[0]*100

d2.plot()
plt.show()

output_4_0.png

Recommended Posts

Erstellen Sie in Python ein einfaches Momentum-Investmentmodell
Erstellen Sie eine einfache GUI-App in Python
Erstellen Sie eine Funktion in Python
Erstellen Sie ein Wörterbuch in Python
Erstellen Sie einen DI-Container mit Python
Erstellen Sie eine Binärdatei in Python
Implementierung eines einfachen Algorithmus in Python 2
Führen Sie einen einfachen Algorithmus in Python aus
Erstellen Sie eine zufällige Zeichenfolge in Python
Ein einfacher HTTP-Client, der in Python implementiert ist
Versuchen Sie, eine einfache Animation in Python zu zeichnen
Schreiben Sie eine einfache Giermethode in Python
[GPS] Erstellen Sie eine kml-Datei mit Python
Schreiben Sie ein einfaches Vim-Plugin in Python 3
Richten Sie mit Python 3 einen einfachen HTTPS-Server ein
Erstellen Sie in 1 Minute eine Vim + Python-Testumgebung
Erstellen Sie eine GIF-Datei mit Pillow in Python
Einfacher gRPC in Python
Erstellen Sie ein Python-Modul
Erstellen Sie Spatia Lite in Python
Erstellen Sie in Python ein Diagramm der Standardnormalverteilung
Erstellen Sie eine virtuelle Umgebung mit conda in Python
Einfache Pub / Sub-Programmhinweise in Python
Erstellen Sie eine neue Seite im Zusammenfluss mit Python
Erstellen Sie ein Datum / Uhrzeit-Objekt aus einer Zeichenfolge in Python (Python 3.3).
Richten Sie einen einfachen SMTP-Server in Python ein
Erstellen Sie in Python ein Paket mit globalen Befehlen
Erstellen Sie eine Python-Umgebung
Erstellen Sie eine MIDI-Datei in Python mit pretty_midi
Erstellen Sie in KiCad ein Rahmenantennenmuster in Python
[Docker] Erstellen Sie in 3 Minuten eine jupyterLab (Python) -Umgebung!
Schreiben Sie ein super einfaches molekulardynamisches Programm in Python
Erstellen Sie ein Plug-In, das Python Doctest auf Vim ausführt (2)
Erstellen Sie ein Plug-In, um Python Doctest mit Vim (1) auszuführen.
Erstellen Sie in Python einen Dekorator, der Argumente dynamisch akzeptiert. Erstellen Sie einen Dekorator
Erstellen Sie mit Quarry einen gefälschten Minecraft-Server in Python
Machen Sie einen Screenshot in Python
Visualisieren Sie das Keras-Modell mit Python 3.5
Erstellen Sie ein Wox-Plugin (Python)
Erstellen Sie einen (einfachen) REST-Server
Erstellen Sie ein Lesezeichen in Python
Erstellen Sie ein Python-Numpy-Array
Einfache Regressionsanalyse mit Python
Erstellen Sie einen einfachen Textlint-Server
Zeichne ein Herz in Python
Einfacher IRC-Client mit Python
Erstellen Sie ein Verzeichnis mit Python
Ich habe ein einfaches Tippspiel mit tkinter of Python gemacht
Erstellen Sie einen lokalen Bereich in Python, ohne den Namespace zu verschmutzen
Erstellen Sie ein untergeordnetes Konto für die Verbindung mit Stripe in Python
Eine einfache Möglichkeit, mehrere for-Schleifen in Python zu vermeiden
[Python Kivy] So erstellen Sie ein einfaches Popup-Fenster
Erstellen Sie den Code, der in Python "A und vorgeben B" ausgibt
Erstellen Sie mit python wxpython + openCV ein einfaches Videoanalysetool
Erstellen Sie mit VSCode & Docker Desktop eine einfache Python-Entwicklungsumgebung