[PYTHON] Ich habe versucht, die Methode zur Mittelung der Dollarkosten zu simulieren

Einführung

Beim Kauf von Aktien und Investment Trusts gibt es eine Methode zur Mittelung der Dollarkosten. Das Risiko kann durch den regelmäßigen Kauf von Produkten wie Aktien und Investment Trusts zu einem festen Preis verringert werden.

In den Folien, die ich oft sehe, hatte ich das Gefühl, nicht überzeugt zu sein, weil sie unter der Annahme eines willkürlichen Übergangs von Aktienkurs zu Basispreis geschrieben wurden und die Anzahl der Daten gering war. Offensichtlich ist das Risiko theoretisch reduziert. Daher ist es ein Versuch, basierend auf den Standardpreisdaten des tatsächlichen Investment Trusts zu simulieren.

Simulationsannahmen

Investment Trust für die Simulation

[Foreign Stock Index e] von Sumitomo Mitsui Trust Assetment (http://www.smtam.jp/fund/detail/_id_122/)

Bewertungsindex

In dieser Simulation vergleichen wir den ROI ein Jahr nach Kaufbeginn.

ROI = \frac{Vermögenswerte ein Jahr später gehalten-1 Jahr Investitionsbetrag}{1 Jahr Investitionsbetrag}

Methode 1 (Großeinkauf)

Ich werde zu einem bestimmten Zeitpunkt einen bestimmten Betrag (100.000 Yen) kaufen.

Methode 2 (Regelmäßiger Kauf einer bestimmten Anzahl von Einheiten)

Ab einem bestimmten Zeitpunkt kaufen wir am 25. eines jeden Monats für ein Jahr eine bestimmte Anzahl von Einheiten (10.000 Yen).

Methode 3 (Abonnement mit festem Betrag)

Ab einem bestimmten Zeitpunkt werde ich am 25. eines jeden Monats für ein Jahr einen festen Betrag (10.000 Yen) kaufen.

Simulation

Die Risikobewertung erfolgt durch Ändern der Kaufstartzeit auf 100 Arten und Vergleichen der resultierenden ROI-Verteilung.

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'Grundpreis')
ax.set_ylabel(u'Grundpreis')
ax.set_xlabel(u'Datum')

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'Datum')
    ax.legend_.remove()
    return final_ratio

package_ratio = sim(package, u'Großeinkauf', 'blue')
constant_ratio = sim(constant_num, u'Feste Anzahl von Abonnements', 'green')
dc_ratio = sim(doller_cost, u'Festbetrag Abonnement', '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'Großeinkauf')
pd.Series(constant_ratio).hist(ax=ax, color='green', alpha=0.3, normed=True, label=u'Feste Anzahl von Abonnements')
pd.Series(dc_ratio).hist(ax=ax, color='red', alpha=0.3, normed=True, label=u'Festbetrag Abonnement')
ax.set_xlabel('ROI')
ax.set_ylabel('freq(normed)')
ax.legend()

image image image image

Was ich fand

Recommended Posts

Ich habe versucht, die Methode zur Mittelung der Dollarkosten zu simulieren
Ich habe versucht, den Ball zu bewegen
Ich habe versucht, den Abschnitt zu schätzen.
Ich habe versucht zu simulieren, wie sich die Infektion mit Python ausbreitet
Ich habe versucht, die Anzeigenoptimierung mithilfe des Banditenalgorithmus zu simulieren
Ich habe versucht, den Befehl umask zusammenzufassen
Ich habe versucht, die grafische Modellierung zusammenzufassen.
Ich habe versucht, das Umfangsverhältnis π probabilistisch abzuschätzen
Ich habe versucht, die COTOHA-API zu berühren
[Linux] Ich habe versucht, die sichere Bestätigungsmethode von FQDN (CentOS7) zu überprüfen.
Ich habe versucht, eine Super-Resolution-Methode / ESPCN zu erstellen
Ich habe Web Scraping versucht, um die Texte zu analysieren.
Ich habe versucht, eine Super-Resolution-Methode / SRCNN build zu erstellen
Ich habe versucht, beim Trocknen der Wäsche zu optimieren
Ich habe versucht, die Daten mit Zwietracht zu speichern
Ich habe die Methode der kleinsten Quadrate in Python ausprobiert
Ich habe versucht, die Trapezform des Bildes zu korrigieren
Ich habe versucht, eine Super-Resolution-Methode / SRCNN build zu erstellen
Ich habe versucht, eine Super-Resolution-Methode / SRCNN build zu erstellen
LeetCode Ich habe versucht, die einfachen zusammenzufassen
Ich habe versucht, das Problem des Handlungsreisenden umzusetzen
Ich habe versucht, die Texte von Hinatazaka 46 zu vektorisieren!
Ich habe versucht zu debuggen.
Ich habe versucht, die in Python installierten Pakete grafisch darzustellen
Ich habe versucht, Iris aus dem Kamerabild zu erkennen
Ich habe versucht, die Grundform von GPLVM zusammenzufassen
Ich habe versucht, eine CSV-Datei mit Python zu berühren
Ich habe versucht, Soma Cube mit Python zu lösen
Ich habe versucht, EKG-Daten mit der K-Shape-Methode zu gruppieren
Ich habe versucht, die Sündenfunktion mit Chainer zu approximieren
Ich habe versucht, Pytest in die eigentliche Schlacht zu bringen
[Python] Ich habe versucht, die Top 10 der Lidschatten grafisch darzustellen
Ich habe versucht, die Spacha-Informationen von VTuber zu visualisieren
Ich habe versucht, den negativen Teil von Meros zu löschen
Ich habe versucht, das Problem mit Python Vol.1 zu lösen
Ich möchte das Produkt zu den niedrigsten Kosten veröffentlichen
Ich habe versucht, die nicht negative Matrixfaktorisierung (NMF) zu wiederholen.
Ich habe die einfachste Methode zur Klassifizierung von Dokumenten mit mehreren Etiketten ausprobiert
Ich habe versucht, die Sprache mit CNN + Melspectogram zu identifizieren
Ich habe versucht, das Wissensdiagramm mit OpenKE zu ergänzen
Ich habe versucht, die Stimmen der Sprecher zu klassifizieren
Ich habe versucht, das Bild mithilfe von maschinellem Lernen zu komprimieren
Ich habe versucht, die String-Operationen von Python zusammenzufassen
[Python] Ich habe versucht, das Array, die Wörterbuchgenerierungsmethode, die Schleifenmethode und die Listeneinschlussnotation zusammenzufassen
Ich habe versucht, SVM zu organisieren.
Ich habe versucht, PCANet zu implementieren
Ich habe die Changefinder-Bibliothek ausprobiert!
Ich habe versucht, Linux wieder einzuführen
Ich habe versucht, Pylint vorzustellen
Ich habe versucht, SparseMatrix zusammenzufassen
jupyter ich habe es berührt
Ich habe versucht, StarGAN (1) zu implementieren.
Ich habe versucht, die Entropie des Bildes mit Python zu finden
Ich habe versucht, die Umrisse von Big Gorilla herauszufinden
Ich habe versucht, das Blockdiagramm-Generierungswerkzeug blockdiag einzuführen
Ich habe versucht, den für TensorFlow geschriebenen Code nach Theano zu portieren
[Pferderennen] Ich habe versucht, die Stärke des Rennpferdes zu quantifizieren
Ich habe versucht, die Emotionen des gesamten Romans "Wetterkind" zu analysieren