株の動向チェックチャート(ver.0.02)複数銘柄をイッキ見! python初心者(Ep31)
こんにちわ。スミラです。
前回は、株の動向チェックチャート(ver.0.01)がついに完成しましたね。
いつもスキ❤️を押していただいている皆さん、本当にありがとうございます!励みになります☆
それでは、本日のテーマは、
投資判断に繋がる可視化情報の追加
について実施したいと思います。宜しくお願い致します。
~~~~~~~~~~~【注意文章】~~~~~~~~~~~
株に手を出すことに伴って、損得の感情が発生してしまいますが、あくまでこれは コードの学習 において記載している内容です。一切の不利益が発生したとしても何も保証できません。また、個人の見解であり、投資を行う場合は、ご自身の判断で行うようお願い致します。
ご理解の上、読んで頂けますと幸いです。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
復習:MACDとSignalの交差点
MACDとSignalの動き方によって購入タイミングが分かることは前回の記事で記載しました。そこで、今は買い場!と分かる部分に対して、背景色を設定したいと思います。
この手法に関しては、前回の記事にも記載しました内容ですので、下記を確認ください✨
株の動向チェックチャート(ver.0.02)複数銘柄+買い場傾向付き 完成
コードとしては、見た目が悪い状態ではありますが、複数銘柄を確認できることもあり、ご自身の保有している株の傾向を複数確認することができるため、
「あー。そろそろ この株買い時!」
と言うことを見ることができます。完成した図はこちらになります。
今が買い場 というところがわかりますね!
しかし、RSIが高い領域に来ているので、買われ過ぎ とも見ることができるため、もう少し市場を冷静に見てもいいかもしれませんね。
一つの図で、株の傾向が見えることができて光栄です!
コードはこちら。
jupyterの環境であれば、下記のコードをコピー&貼り付けで皆さん活用できますので、是非とも活用ください✨
※ライブラリのインストールが必要な場合もありますので、ご了承下さい。
※ pip install XXXX XXX:ライブラリ名 でOK
# 初期設定
import matplotlib.pyplot as plt
import yfinance as yf
# import numpy as np
import datetime as dt
import pandas as pd
import matplotlib.dates as mdates
#非推奨ですが、こちらを選択します!
import mpl_finance as mpf
#選択する株
pick_lists=["AAPL","^IXIC","AMZN"]
for pick_code in range(len(pick_lists)):
#取得した銘柄をリスト化
symbol_list_kai =pick_lists[pick_code]
#取得の開始したい日付を設定 YYYY-MM-DD
get_start = '2020-01-01'
#取得の終了日付を設定 YYYY-MM-DD
#本日までのデータの場合
get_end = dt.datetime.today().strftime('%Y-%m-%d')
#取得のタイミング 1m,2m,5m,15m,30m,60m,90m,1h,1d,5d,1wk,1mo,3mo
get_interval = "1d"
#データの取得
df = yf.download(symbol_list_kai, start=get_start, end=get_end, interval = get_interval)
#index 情報の追加
df.insert(0,"index",[i for i in range(len(df))])
# MACDをプロット
#short_w :短期設定
#long_w :長期設定
#signal :移動平均線
short_w = 6
long_w =19
signal_w =9
df["MACD"]= df["Adj Close"].ewm(span=short_w,adjust=False).mean() - df["Adj Close"].ewm(span=long_w,adjust=False).mean()
df["Signal"] = df["MACD"].ewm(span=signal_w,adjust=False).mean()
#RSIを算出
RSI_p = 14
# 前日との差分を計算
df_diff = df["Adj Close"].diff(1)
# 計算用のDataFrameを定義
df_up, df_down = df_diff.copy(), df_diff.copy()
# df_upはマイナス値を0に変換
# df_downはプラス値を0に変換して正負反転
df_up[df_up < 0] = 0
df_down[df_down > 0] = 0
df_down = df_down * -1
# 設定期間でそれぞれの平均を算出
df_up_sma = df_up.rolling(window=RSI_p, center=False).mean()
df_down_sma= df_down.rolling(window=RSI_p, center=False).mean()
# RSIを算出
df["RSI"] = 100.0 * (df_up_sma / (df_up_sma + df_down_sma))
#移動平均線の計算
SMA_long_p = 200
SMA_short_p= 50
df["SMA{}".format(str(SMA_long_p))] = df["Adj Close"].rolling(SMA_long_p).mean()
df["SMA{}".format(str(SMA_short_p))] = df["Adj Close"].rolling(SMA_short_p).mean()
#差分フラグポイントの検出
df["judge_flag"]=(df["MACD"]-df["Signal"]>0)
#差分取得の準備
diff_pre = pd.Series([0]+list(df['judge_flag'].astype(int))+[0])
#差分を計算し、Noneは取り除く
diff_pre2 = diff_pre.diff().dropna()
%matplotlib inline
# チャート定義
#4つのグラフ構成 (ローソク足チャート(移動平均線含む)、出来高、MACD、RSI)
#X軸を共通
#高さ割合を変更
fig, ax = plt.subplots(4, figsize=(20, 10), sharex=True, gridspec_kw={'height_ratios': [3, 1, 1, 1]})
# ローソク足チャートをプロット
mpf.candlestick_ohlc(ax[0], df.values, width=0.5, colorup='r', colordown='b',alpha=1)
# 移動平均線をプロット
ax[0].plot(df["index"], df["SMA200"], label="SMA200")
ax[0].plot(df["index"], df["SMA50"], label="SMA50")
#タイトルの追加
ax[0].set_title(str(pick_lists[pick_code]),fontsize='40')
# 出来高をプロット
ax[1].bar(df["index"], df["Volume"], label="Volume")
# MACD/Signalをプロット ※色付き
ax[2].plot(df["index"], df["MACD"], label="MACD")
ax[2].plot(df["index"], df["Signal"], label="Signal")
#start : ilocで行番号を取得、終了する行を-1にすることで後ろの差分で追加分を考慮し、立ち上がり(0から1になった部分)を検出
#end : ilocで行番号を取得、開始する行を1にすることで前の差分で追加分を考慮し、立下り(1から0になった部分)を検出
for start , end in zip(df['judge_flag'].index[diff_pre2.iloc[:-1]==1],
df['judge_flag'].index[diff_pre2.iloc[1:]==-1]):
ax[2].axvspan(df.loc[start,"index"],df.loc[end,"index"],color="red",alpha=0.3)
# RSIをプロット
ax[3].plot(df["index"], df["RSI"], label="RSI")
# X軸を調整
#index情報を元に、日付情報を関連付け
plt.xticks([x for x in range(len(df))], [x.strftime('%Y-%m-%d') for x in df.index])
#X軸の目盛り値を変更(10日間隔でプロット)
plt.gca().xaxis.set_major_locator(mdates.DayLocator(interval=10))
#X軸の重なりをいい感じに修正
fig.autofmt_xdate()
# 凡例表示, グリッド表示
for a in ax:
a.legend()
a.grid()
#データフレームの一部表示
display(df.tail(10))
# グラフを表示
plt.tight_layout()
plt.show()
#初期化
df=[0]
次回は
決算傾向の情報の追加
をさらに実施してみたいと思いますね。
本日はここまで。それではまた次回に!
ここから先は
¥ 100
よろしければサポート頂けると幸いです!子供へのパパ時間提供の御礼(お菓子)に活用させて頂きます☆