Créer un modèle d'investissement dynamique simple en Python

Achetez lorsque l'élan dépasse zéro dans une période d'analyse de 250 jours, et vendez lorsque l'élan tombe en dessous de zéro.

# -*- 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

Créer un modèle d'investissement dynamique simple en Python
Créer une application GUI simple en Python
Créer une fonction en Python
Créer un dictionnaire en Python
Créer un conteneur DI avec Python
Créer un fichier binaire en Python
Implémentation d'un algorithme simple en Python 2
Exécutez un algorithme simple en Python
Créer une chaîne aléatoire en Python
Un client HTTP simple implémenté en Python
Essayez de dessiner une animation simple en Python
Ecrire une méthode de cupidité simple en Python
[GPS] Créer un fichier kml avec Python
Ecrire un plugin Vim simple en Python 3
Configurer un serveur HTTPS simple avec Python 3
Créez un environnement de test Vim + Python en 1 minute
Créer un fichier GIF en utilisant Pillow en Python
GRPC simple en Python
Créer un module Python
Créer Spatia Lite en Python
Créer un graphique de distribution normale standard en Python
Créer un environnement virtuel avec conda avec Python
Notes de programme simples Pub / Sub en Python
Créer une nouvelle page en confluence avec Python
Créer un objet datetime à partir d'une chaîne en Python (Python 3.3)
Configurer un serveur SMTP simple en Python
Créer un package contenant des commandes globales en Python
Créer un environnement Python
Créez un fichier MIDI en Python en utilisant pretty_midi
Créer un modèle d'antenne cadre en Python dans KiCad
[Docker] Créez un environnement jupyterLab (python) en 3 minutes!
Ecrire un programme de dynamique moléculaire super simple en python
Créer un plugin pour exécuter Python Doctest sur Vim (2)
Créez un plug-in pour exécuter Python Doctest avec Vim (1)
En Python, créez un décorateur qui accepte dynamiquement les arguments Créer un décorateur
Créez un faux serveur Minecraft en Python avec Quarry
Prendre une capture d'écran en Python
Visualiser le modèle Keras avec Python 3.5
Créer un plugin Wox (Python)
Créer un serveur REST (simple)
Créer un bookmarklet en Python
Créer un tableau numpy python
Analyse de régression simple avec Python
Créer un serveur textlint simple
Dessinez un cœur en Python
Client IRC simple avec python
Créer un répertoire avec python
J'ai fait un jeu de frappe simple avec tkinter de Python
Créer une portée locale en Python sans polluer l'espace de noms
Créer un compte enfant de connect with Stripe en Python
Un moyen simple d'éviter plusieurs boucles for en Python
[Python Kivy] Comment créer une simple fenêtre pop-up
Créez le code qui renvoie "A et prétendant B" en python
Créez un outil d'analyse vidéo simple avec python wxpython + openCV
Créez un environnement de développement Python simple avec VSCode et Docker Desktop