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.
[Indice des actions étrangères e] de Sumitomo Mitsui Trust Assetment (http://www.smtam.jp/fund/detail/_id_122/)
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}
J'achèterai un certain montant (100 000 yens) à un certain moment.
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.
À partir d'un certain moment, j'achèterai un montant fixe (10 000 yens) le 25 de chaque mois pendant un an.
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)
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')
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()
Recommended Posts