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.
[Foreign Stock Index e] von Sumitomo Mitsui Trust Assetment (http://www.smtam.jp/fund/detail/_id_122/)
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}
Ich werde zu einem bestimmten Zeitpunkt einen bestimmten Betrag (100.000 Yen) kaufen.
Ab einem bestimmten Zeitpunkt kaufen wir am 25. eines jeden Monats für ein Jahr eine bestimmte Anzahl von Einheiten (10.000 Yen).
Ab einem bestimmten Zeitpunkt werde ich am 25. eines jeden Monats für ein Jahr einen festen Betrag (10.000 Yen) kaufen.
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)
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')
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()
Recommended Posts