Pytonのコードの間違いをご指摘いただきたい。

Python

import numpy as np import pandas as pd from datetime import datetime import urllib.request #SMTAMウェブサイトから投信データcsvを取得して保存。#スクレイピングを最小限に抑えるため、一度スクレイピングしたらcsvファイルとして保存。 #JE:SMT TOPIXインデックス・オープン、EE:SMT 新興国株式インデックス・オープン、IE:SMT グローバル株式インデックス・オープン、JB:SMT 国内債券インデックス・オープン、EB:SMT 新興国債券インデックス・オープン、IB:SMT グローバル債券インデックス・オープン、IR:SMT グローバルREITインデックス・オープン、JR:SMT J-REITインデックス・オープン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) #全ファンドの累積基準価額をひとつにまとめたデータを作成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] #日次データを月次データに変換してシグナル判定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'] = ['SMT TOPIXインデックス・オープン','SMT 新興国株式インデックス・オープン','SMT グローバル株式インデックス・オープン','SMT 国内債券インデックス・オープン','SMT 新興国債券インデックス・オープン', 'SMT グローバル債券インデックス・オープン','SMT J-REITインデックス・オープンリート','SMT グローバルREITインデックス・オープン']calc.loc['3 months'] = (dfm.iloc[-1] / dfm.iloc[-4]-1)*100calc.loc['6 months'] = (dfm.iloc[-1] / dfm.iloc[-7] -1)*100calc.loc['12 months'] = (dfm.iloc[-1] / dfm.iloc[-13] -1)*100calc.loc['mean'] = (calc.loc['3 months']+calc.loc['6 months']+calc.loc['12 months'])/3calc.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') #月次シグナル判定結果を表示date = dfm.index.max()print(str(date.year) + '年' + str(date.month) + '月末のシグナルは以下の通りとなりました。')calc.T.set_index('rank')[['asset class', 'Buy/Sell']].sort_index()

コメントを投稿

0 コメント