最初にひとこと
長かった・・・・
このコード書くのに、まず環境変数の定義から始まって、1日がかかりになってしまいました。
何も知らない、ド素人が、気合だけで、いちから、Pythonで各アセットの年初来の騰落率をグラフ化してみました。
以下は、あまり参考にならないコードです。なぜか、ヤフーファイナンスからデータを持ってくるパッケージが壊れてしまったので、別のサイトからデータを引っ張ってきています。
プログラムの実行が30秒で終わるからといって、負荷をかけるのはやめましょう。どこからもダウンロードさせてもらえなくなってしまいます。
なお、このプログラムの実行には、まず、Pythonの環境変数の定義から始まって、下記のパッケージのinstallが必要です。
- investpy
- pandas
- numpy
- matplotlib
Investpyでデータ取得
import investpy
import pandas as pd
import numpy as np
BTC = investpy.get_crypto_historical_data(crypto='bitcoin', from_date='01/01/2020', to_date='31/12/2020')
BTC = BTC.drop(['Currency'], axis = 1)
BTC.to_csv('D:/btc.csv')
DJI = investpy.get_index_historical_data(index='dow 30', country='united states', from_date='01/01/2020', to_date='31/12/2020')
DJI = DJI.drop(['Currency'], axis = 1)
DJI.to_csv('D:/DJI.csv')
NK225 = investpy.get_index_historical_data(index='Nikkei 225', country='japan', from_date='01/01/2020', to_date='31/12/2020')
NK225 = NK225.drop(['Currency'], axis = 1)
NK225.to_csv('D:/NK225.csv')
GOLD = investpy.etfs.get_etf_historical_data(etf='SPDR Gold Shares', country='united states', from_date='01/01/2020', to_date='31/12/2020')
GOLD = GOLD.drop(['Currency'], axis = 1)
GOLD.to_csv('D:/GOLD.csv')
AMD = investpy.stocks.get_stock_historical_data(stock='AMD', country='united states', from_date='01/01/2020', to_date='31/12/2020')
AMD = AMD.drop(['Currency'], axis = 1)
AMD.to_csv('D:/AMD.csv')
Pandasでダウンロードしたデータを結合
import pandas as pd
import numpy as np
d1 = pd.read_csv('D:/btc.csv', index_col=0,usecols=[0,4])
d1 = d1.rename(columns={'Close': 'BTCUSD'})
import pandas as pd
import matplotlib.pyplot as plt
d2 = pd.read_csv('D:/DJI.csv', index_col=0,usecols=[0,4])
d2 = d2.rename(columns={'Close': 'DJI'})
import pandas as pd
import matplotlib.pyplot as plt
d3 = pd.read_csv('D:/NK225.csv', index_col=0,usecols=[0,4])
d3 = d3.rename(columns={'Close': 'NK225'})
import pandas as pd
import matplotlib.pyplot as plt
d4 = pd.read_csv('D:/GOLD.csv', index_col=0,usecols=[0,4])
d4 = d4.rename(columns={'Close': 'SPDR GLD'})
import pandas as pd
import matplotlib.pyplot as plt
d5 = pd.read_csv('D:/AMD.csv', index_col=0,usecols=[0,4])
d5 = d5.rename(columns={'Close': 'AMD'})
df= d1.join([d2, d3, d4, d5], how='inner')
print(E1.head())
print(E1.tail())
Matplotlibでグラフを描画
import matplotlib.pyplot as plt
df = df.set_index('Date')
df_all=(1+df.pct_change()).cumprod()
df_all.plot(figsize=(8,6),fontsize=10)
plt.legend(loc='center left', bbox_to_anchor=(1, 0.5), fontsize=10)
plt.xticks(rotation =90)
plt.xticks( np.arange(min(x),200,step=5) )
plt.xlabel('')
plt.tight_layout()
plt.show()
成果物
思いのほか、ビットコインとゴールドが伸びています。年初来では、コロナショック後の株価指数の回復がいまいちでした。もちろん、個別材料があるアメリカの優良大型銘柄が、一番反発しています。ここからは、やはり少ない銘柄をねらってストックピッキングしかない気が・・・。
あと、こんなことになるなら、もう少し、短くコーディングできるようにならないと、Pythonはあまり役に立ちそうにありません。