Mise à jour du signal mensuel pour Relative Strength Investment sur My Blog Cependant, jusqu'à présent, je devais acquérir manuellement des données et calculer dans Excel.
Cette fois, j'ai écrit du code python pour juger du signal mensuel. Je suis un débutant avec python depuis plusieurs mois, alors pardonnez-moi s'il peut s'agir d'un code inesthétique. D'après ce que je peux voir, cela semble fonctionner correctement.
[Monthly_check]RS_signal.ipynb
import numpy as np
import pandas as pd
from datetime import datetime
import urllib.request
#Obtenez et enregistrez les données de fiducie d'investissement csv à partir du site Web SMTAM.
#Enregistrez en tant que fichier csv une fois récupéré pour minimiser le scraping.
#JE:Stock japonais, EE:Stock des pays émergents, IE:Stock des pays développés, JB:Obligation japonaise, EB:Obligations des marchés émergents, IB:Obligations d'État avancées, IR:Pays développé Reet, JR:Japon Riet
url_list = {'JE':'https://www.smtam.jp/chart_data/140833/140833.csv',
'EE':'https://www.smtam.jp/chart_data/140841/140841.csv',
'IE':'https://www.smtam.jp/chart_data/140834/140834.csv',
'JB':'https://www.smtam.jp/chart_data/140835/140835.csv',
'EB':'https://www.smtam.jp/chart_data/140842/140842.csv',
'IB':'https://www.smtam.jp/chart_data/140836/140836.csv',
'IR':'https://www.smtam.jp/chart_data/140838/140838.csv',
'JR':'https://www.smtam.jp/chart_data/140837/140837.csv'}
for key in url_list:
url = url_list[key]
title = "{0}.csv".format(key)
urllib.request.urlretrieve(url,title)
[Monthly_check]RS_signal.ipynb
#Créer des données qui résument le prix de base cumulé de tous les fonds
assets = ['JE','EE','IE','JB','EB','IB','JR','IR']
df_all = pd.DataFrame()
for asset in assets:
asset_file = "{0}.csv".format(asset)
df = pd.read_csv(asset_file, skiprows = [0], names = ['date','nav', 'div', 'aum'],
parse_dates = True, index_col = 0)
df['div'] = pd.to_numeric(df['div'],errors='coerce')
df['div'] = df['div'].fillna(0)
df['cum_nav'] = (df['nav'] + df['div']) / df['nav'].shift(1)
df[asset] = df['cum_nav'].cumprod()
df_all[asset] = df[asset]
#Jugement du signal en convertissant les données quotidiennes en données mensuelles
dfm = df_all.resample('M').ffill()
dfm = dfm[dfm.index < datetime.now()]
calc = pd.DataFrame(columns = ['JE','EE','IE','JB','EB','IB','JR','IR'])
calc.loc['asset class'] = ['Stock japonais','Actions des pays émergents','Stock des pays développés','Bond japonais','Obligations des pays émergents',
'Obligations d'État avancées','Japon Riet','Pays développé Riet']
calc.loc['3 months'] = (dfm.iloc[-1] / dfm.iloc[-4] -1)*100
calc.loc['6 months'] = (dfm.iloc[-1] / dfm.iloc[-7] -1)*100
calc.loc['12 months'] = (dfm.iloc[-1] / dfm.iloc[-13] -1)*100
calc.loc['mean'] = (calc.loc['3 months']+calc.loc['6 months']+calc.loc['12 months'])/3
calc.loc['rank'] = calc.loc['mean'].rank(ascending = False).astype(int)
calc.loc['latest nav'] = dfm.iloc[-1]
calc.loc['12ma NAV'] = dfm.iloc[-12:].mean()
calc.loc['Buy/Sell'] = np.where(calc.loc['latest nav'] > calc.loc['12ma NAV'], 'Buy', 'Sell')
#Afficher le résultat du jugement mensuel du signal
date = dfm.index.max()
print(str(date.year) + 'Année' + str(date.month) + 'Le signal de fin de mois est le suivant.')
calc.T.set_index('rank')[['asset class', 'Buy/Sell']].sort_index()
Une fois exécuté, ce qui suit sera affiché (devrait être) sur le bloc-notes Jupyter.
Voici un article de blog qui reflète le signal ci-dessus. ↓ [Commentaire mensuel du signal relatif à l'investissement relatif à la force (basé sur fin mars 2020)]
Mise à jour mensuelle de Signal Excel Il a fallu des décennies de travail manuel pour terminer. Il doit être utilisé pendant des décennies pour être rentable.
Le code qui juge le signal est vraiment amateur. Je voudrais m'améliorer quand je m'améliore.
Recommended Posts