[PYTHON] J'ai essayé de simuler la méthode de calcul de la moyenne des coûts en dollars

introduction

Lors de l'achat d'actions et de fiducies de placement, il existe une méthode d'étalement des coûts en dollars. Le risque peut être réduit en achetant régulièrement des produits tels que des actions et des fonds d'investissement à un prix fixe.

Dans les diapositives que je vois souvent, je sentais que je n'étais pas convaincu car il était écrit en supposant une transition arbitraire du cours de l'action / prix de base et le nombre de données était petit. Évidemment, le risque est réduit en théorie. Par conséquent, il s'agit d'une tentative de simulation basée sur les données de prix standard de la fiducie de placement réelle.

Hypothèses de simulation

Fiducie d'investissement utilisée pour la simulation

[Indice des actions étrangères e] de Sumitomo Mitsui Trust Assetment (http://www.smtam.jp/fund/detail/_id_122/)

Index d'évaluation

Dans cette simulation, nous comparerons le ROI un an après le début de l'achat.

ROI = \frac{Actifs détenus un an plus tard-Montant d'investissement d'un an}{Montant d'investissement d'un an}

Méthode 1 (achat en gros)

J'achèterai un certain montant (100 000 yens) à un certain moment.

Méthode 2 (achat régulier d'un certain nombre d'unités)

A partir d'un certain moment, nous achetons un certain nombre d'unités (10 000 yens) le 25 de chaque mois pendant un an.

Méthode 3 (abonnement à montant fixe)

À partir d'un certain moment, j'achèterai un montant fixe (10 000 yens) le 25 de chaque mois pendant un an.

simulation

L'évaluation des risques est effectuée en modifiant l'heure de début de l'achat de 100 façons et en comparant la distribution du retour sur investissement qui en résulte.

import pandas as pd
df = pd.read_csv('http://www.smtam.jp/fund_data/csv/110057.csv', 
                 names=['day', 'price', 'income', 'asset'], skiprows=1)
df.loc[:, 'day'] = pd.to_datetime(df.day)
print df.shape
df.head(10)

image

import matplotlib
import seaborn as sns
%matplotlib inline
import matplotlib.pyplot as plt

fig, ax = plt.subplots(1, figsize=(12, 8))
df.plot('day', 'price', ax =ax, label=u'Prix de base')
ax.set_ylabel(u'Prix de base')
ax.set_xlabel(u'Date')

image

import  numpy as np
def package(timing):
    num = []
    invest = []
    price = 100000
    for i, r in df.iterrows():
        if i == timing:
            num_add = int(10000.0 * price/ r.price)
            num.append(num[i-1] + num_add  if len(num) > 0 else num_add)
            invest.append(invest[i-1] + price if len(invest) > 0 else price)
        else:
            num.append(num[i-1] if len(num) > 0 else 0)
            invest.append(invest[i-1] if len(invest) > 0 else 0)
    return num, invest

def constant_num(start_timing):
    num = []
    invest = []
    for i, r in df.iterrows():
        if r.day.day == 25 and i >= start_timing:
            num_add = 10000
            invest_add = r.price 
            num.append(num[i-1] + num_add  if len(num) > 0 else num_add)
            invest.append(invest[i-1] + invest_add if len(invest) > 0 else invest_add)
        else:
            num.append(num[i-1] if len(num) > 0 else 0)
            invest.append(invest[i-1] if len(invest) > 0 else 0)
    return num, invest


def doller_cost(start_timing):
    num = []
    invest = []
    price = 10000
    for i, r in df.iterrows():
        if r.day.day == 25 and i >= start_timing:
            num_add = int(10000.0 * price/ r.price)
            num.append(num[i-1] + num_add  if len(num) > 0 else num_add)
            invest.append(invest[i-1] + price if len(invest) > 0 else price)
        else:
            num.append(num[i-1] if len(num) > 0 else 0)
            invest.append(invest[i-1] if len(invest) > 0 else 0)
    return num, invest


def sim(function, label, color):
    fig, ax = plt.subplots(1, figsize=(12, 8))
    final_ratio = []
    for i in np.arange(0, 100) * 10:
        num, invest = function(i)
        num = pd.Series(num)
        invest = pd.Series(invest)
        df.loc[:, 'ratio'] = (num * df.price / 10000.0 - invest.astype(float)) / invest.astype(float)
        df.plot('day', 'ratio', ax=ax,alpha=0.1, color=color)
        
        final_ratio.append(df.iloc[i + 365].ratio)
    ax.set_title(label)
    ax.set_ylabel('ROI')
    ax.set_xlabel(u'Date')
    ax.legend_.remove()
    return final_ratio

package_ratio = sim(package, u'Achat en vrac', 'blue')
constant_ratio = sim(constant_num, u'Nombre d'abonnements fixe', 'green')
dc_ratio = sim(doller_cost, u'Abonnement à montant fixe', 'red')

fig, ax = plt.subplots(1, figsize=(12, 8))
pd.Series(package_ratio).hist(ax=ax, color='blue', alpha=0.3, normed=True, label=u'Achat en vrac')
pd.Series(constant_ratio).hist(ax=ax, color='green', alpha=0.3, normed=True, label=u'Nombre d'abonnements fixe')
pd.Series(dc_ratio).hist(ax=ax, color='red', alpha=0.3, normed=True, label=u'Abonnement à montant fixe')
ax.set_xlabel('ROI')
ax.set_ylabel('freq(normed)')
ax.legend()

image image image image

Ce que j'ai trouvé

Recommended Posts

J'ai essayé de simuler la méthode de calcul de la moyenne des coûts en dollars
J'ai essayé de déplacer le ballon
J'ai essayé d'estimer la section.
J'ai essayé de simuler la propagation de l'infection avec Python
J'ai essayé de simuler l'optimisation des publicités à l'aide de l'algorithme Bandit
J'ai essayé de résumer la commande umask
J'ai essayé de résumer la modélisation graphique.
J'ai essayé d'estimer le rapport de circonférence π de manière probabiliste
J'ai essayé de toucher l'API COTOHA
[Linux] J'ai essayé de vérifier la méthode de confirmation sécurisée du FQDN (CentOS7)
J'ai essayé de créer une méthode de super résolution / ESPCN
J'ai essayé Web Scraping pour analyser les paroles.
J'ai essayé de créer une méthode de super résolution / SRCNN ①
J'ai essayé d'optimiser le séchage du linge
J'ai essayé de sauvegarder les données avec discorde
J'ai essayé la méthode des moindres carrés en Python
J'ai essayé de corriger la forme trapézoïdale de l'image
J'ai essayé de créer une méthode de super résolution / SRCNN ③
J'ai essayé de créer une méthode de super résolution / SRCNN ②
LeetCode j'ai essayé de résumer les plus simples
J'ai essayé de mettre en œuvre le problème du voyageur de commerce
J'ai essayé de vectoriser les paroles de Hinatazaka 46!
J'ai essayé de déboguer.
J'ai essayé de représenter graphiquement les packages installés en Python
J'ai essayé de détecter l'iris à partir de l'image de la caméra
J'ai essayé de résumer la forme de base de GPLVM
J'ai essayé de toucher un fichier CSV avec Python
J'ai essayé de résoudre Soma Cube avec python
J'ai essayé de regrouper les données ECG en utilisant la méthode K-Shape
J'ai essayé d'approcher la fonction sin en utilisant le chainer
J'ai essayé de mettre Pytest dans la bataille réelle
[Python] J'ai essayé de représenter graphiquement le top 10 des ombres à paupières
J'ai essayé de visualiser les informations spacha de VTuber
J'ai essayé d'effacer la partie négative de Meros
J'ai essayé de résoudre le problème avec Python Vol.1
Je souhaite publier le produit au moindre coût
J'ai essayé de refaire la factorisation matricielle non négative (NMF)
J'ai essayé la méthode la plus simple de classification de documents multi-étiquettes
J'ai essayé d'identifier la langue en utilisant CNN + Melspectogram
J'ai essayé de compléter le graphe de connaissances en utilisant OpenKE
J'ai essayé de classer les voix des acteurs de la voix
J'ai essayé de compresser l'image en utilisant l'apprentissage automatique
J'ai essayé de résumer les opérations de chaîne de Python
[Python] J'ai essayé de résumer le tableau, la méthode de génération du dictionnaire, la méthode de boucle, la notation d'inclusion de liste
J'ai essayé d'organiser SVM.
J'ai essayé d'implémenter PCANet
J'ai essayé la bibliothèque changefinder!
J'ai essayé de réintroduire Linux
J'ai essayé de présenter Pylint
J'ai essayé de résumer SparseMatrix
jupyter je l'ai touché
J'ai essayé d'implémenter StarGAN (1)
J'ai essayé de trouver l'entropie de l'image avec python
J'ai essayé de découvrir les grandes lignes de Big Gorilla
J'ai essayé d'introduire l'outil de génération de diagramme blockdiag
J'ai essayé de porter le code écrit pour TensorFlow sur Theano
[Courses de chevaux] J'ai essayé de quantifier la force du cheval de course
J'ai essayé d'analyser les émotions de tout le roman "Weather Child" ☔️