見出し画像

Pythonで特定フォルダにある米国株のチャートを一括で作成保存する

今回はYahoo Financeから取得してきた米国株のCSVファイル数千個を、設定したルールに則りチャートに変換し、保存していきます。チャートはボリンジャーバンドとMACDを描画。

早速コードはこちら。今回はドンチャン チャネルブレイク。

import pandas as pdr
import matplotlib.dates as mdates
import matplotlib.pyplot as plt
import talib as ta
from mpl_finance import candlestick_ohlc
import csv #csv形式
import os

csv_file=os.listdir('/Users/***/stock/') #ファイルが格納されているディレクトリ

for i in range(len(csv_file)): #csvファイルの数だけfor分を回す.
 df =pdr.read_csv('/Users/***/stock/'+str(csv_file[i]),index_col=0, parse_dates=True).tail(120)
 ma_s = df['Close'].tail(20).mean() #短期MA。最新日より20日分のデータを取得してきて平均値にしている
 ma_l = df['Close'].tail(60).mean() #長期MA。最新日より60日分のデータを取得してきて平均値にしている
 ma_ave = ma_s/ma_l
#-----------手法:ドンチャンチャネルブレイク-----------
   if df['Close'].tail(1).mean() >= df['Close'].tail(20).max().mean():
   #MACD
   df['macd'], df['macdsignal'], df['macdhist'] = ta.MACD(df['Close'], fastperiod=12, slowperiod=26, signalperiod=9)
   #ボリバン
   df['upper'], df['middle'], df['lower'] = ta.BBANDS(df['Close'], timeperiod=5, nbdevup=2, nbdevdn=2, matype=0)
   #df['ma5'] = ta.SMA(df['Close'], timeperiod=20) #SMA
   df = df[33:]
   fig = plt.figure()
   ax1 = fig.add_axes((0.1, 0.5, 0.8, 0.5))
   ax1.tick_params(labelbottom = False, bottom = False)
   ax1.set_title(str(csv_file[i]))
   ax2 = fig.add_axes((0.1, 0.3, 0.8, 0.2), sharex=ax1)
   ax2.xaxis.set_major_formatter(mdates.DateFormatter('%m/%d'))
   candlestick_ohlc(ax1, zip(mdates.date2num(df.index), df['Open'], df['High'], df['Low'], df['Close']), width=0.4)
   ax1.plot(mdates.date2num(df.index), df['upper'])
   ax1.plot(mdates.date2num(df.index), df['middle'])
   ax1.plot(mdates.date2num(df.index), df['lower'])
   ax2.plot(mdates.date2num(df.index),df['macd'])
   ax2.plot(mdates.date2num(df.index),df['macdsignal'])
   ax3 = fig.add_axes((0.1, 0.1, 0.8, 0.2), sharex=ax1)
   ax3.xaxis.set_major_formatter(mdates.DateFormatter('%m/%d'))
   candlestick_ohlc(ax1, zip(mdates.date2num(df.index), df['Open'], df['High'], df['Low'], df['Close']), width=0.4)
   ax3.bar(mdates.date2num(df.index),df['Volume'])

   plt.savefig('/Users/emoto/project/analysis_data/'+str(csv_file[i])+'.png')
​

今回はドンチャン チャネルブレイク。表示結果と格納先のディレクトリ状況は下記です。

画像1

今回は以上になります!

最後まで読んでいただきありがとうございました!!

いいなと思ったら応援しよう!