株の動向チェックチャート(ver.0.01)がついに完成 python初心者(Ep30)
こんにちわ。スミラです。
前回は、SP500すべての銘柄のゴールデンクロス・デットクロスの傾向可視化を調べることができましたね。
いつもスキ❤️を押していただいている皆さん、本当にありがとうございます!励みになります☆
それでは、本日のテーマは、
他にも傾向を抽出方法や株の値動きに対する情報を組み合わせた分析
について実施したいと思います。宜しくお願い致します。
~~~~~~~~~~~【注意文章】~~~~~~~~~~~
株に手を出すことに伴って、損得の感情が発生してしまいますが、あくまでこれは コードの学習 において記載している内容です。一切の不利益が発生したとしても何も保証できません。また、個人の見解であり、投資を行う場合は、ご自身の判断で行うようお願い致します。
ご理解の上、読んで頂けますと幸いです。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
MACDをデータセットを追加
MACDの事をご存知でしょうか。
一つの 買い と 売り を行うタイミングの事を判断する要素として使われています。(下記も参考にして下さい。)
その為、このパラメータはデータセットとして追加は必要だと思います。
また、賢い人は気付くかもしれませんが、
移動平均線 ということは、ある一定の期間を定義する必要がある
→定義期間の妥当性は?
そうですよね。中々、初めて扱う指標であるだけに、
どう定義していいか分かりません。そこで、GOOGLE先生に聞きました。
その結果が、下記にあります。
その為、この内容を変更できる構成にしたいと思います。下記がコードです。(今回は、AAPL1社を対象として設計しています。)
■初期設定
新しいimportも御座いますが、後程説明致します!
# 初期設定
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
■銘柄の情報取得
yfinance ライブラリを用いて、AAPLの株情報を取得します。
#選択する株 2022/1/15
pick_lists=["AAPL"]
#取得した銘柄をリスト化
symbol_list_kai =pick_lists
#取得の開始したい日付を設定 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"
#リスト(配列)から文字列に変換
symbol_list_str = ",".join(symbol_list_kai)
#データの取得
df = yf.download(symbol_list_str, start=get_start, end=get_end, interval = get_interval)
display(df)
■MACDの情報を計算・データセット化
# 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()
display(df)
RSIをデータセットに追加
今度はRSIについてです。
なので、RSIの指標が
70ー80% 超え :買われ過ぎ
20ー30% 割れ :売られ過ぎ
と考えることができ、今の株の動向が見えることができます。
それでは実際に算出したコードを記載ます。
#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))
display(df)
もろもろ追加
ここで一般的なSMA200、SMA50を追加します。こちらは前回にコードを記載したので割愛し、下記のデータセットができました。
ここで、ポイントが、indexの列を追加したところです。
後ほどのグラフ化でこれが大活躍致します!
株の動向チェックチャートの完成(ver.0.01)
色々な壁に当たりました。笑。当たった壁は下記です。
それをなんとかクリアしまして、出来上がったコードが下記になります。
■可視化ver.0.01のコード
特徴:
①mpl_financeライブラリを用いてローソク足をプロット
②matplotlib.datesライブラリを用いてX軸をスマートにプロット
③データの順番でX軸を表現し日付情報を関連付け
%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[0]),fontsize='40')
# 出来高をプロット
ax[1].bar(df["index"], df["Volume"], label="Volume")
# MACDをプロット
ax[2].plot(df["index"], df["MACD"], label="MACD")
ax[2].plot(df["index"], df["Signal"], label="Signal")
# 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()
# グラフを表示
plt.tight_layout()
plt.show()
それっぽい~~~~!!
なかなかいいものができたと思っております☆
次回は
投資判断に繋がる可視化情報の追加
をさらに実施してみたいと思いますね。
※前回のコードとのMIXを検討します。
本日はここまで。それではまた次回に!
ここから先は
¥ 100
よろしければサポート頂けると幸いです!子供へのパパ時間提供の御礼(お菓子)に活用させて頂きます☆