見出し画像

株価の環境認識 ーテクニカル分析ー


テクニカル分析における環境認識をする

と、いうことで今回のテーマは環境認識です。日経平均が4万円を超えたあと38000円あたりで動いているので、各株価はどうなっているのか?というのを確認するためにchatGPT協力の元作成しました。

今回のコード

# 必要なライブラリのインポート
import datetime
import ta
import IPython.display
import matplotlib
import matplotlib.pyplot as plt
import numpy as np
import pandas_datareader as pdr
import pandas as pd
import numpy as np

import yfinance as yf
yf.pdr_override()
import seaborn as sns
sns.set()

%matplotlib inline
from scipy.stats import linregress

#表示させたい会社の銘柄コードを指定
ticker_info = '4755.T'
# 株価データの読み込み
start = '2015-01-01'
end = datetime.datetime.now()
df = pdr.data.get_data_yahoo(ticker_info,start,end)

def add_trendline(df):
    x = range(len(df))
    y = df['Close']
    slope, intercept, r_value, p_value, std_err = linregress(x, y)
    line = slope * x + intercept
    return line

df['trendline'] = add_trendline(df)

#この変数で最終日から何日前からの情報を出すか指定
eria = int(15)#移動平均算出

df['sma25'] = df['Close'].rolling(window= 25).mean()
df['sma75'] = df['Close'].rolling(window= 75).mean()
df['sma200'] = df['Close'].rolling(window= 200).mean()

#価格差
df['change'] = df['Close'] - df['Close'].shift(1)

#ラグ指標を計算
df["Lag_1"] = df['Close'] - df["Close"].shift(1) # 1日前の終値
df["Lag_2"] = df['Close'] - df["Close"].shift(2) # 2日前の終値
df["Lag_3"] = df['Close'] - df["Close"].shift(3) # 3日前の終値
df["Lag_4"] = df['Close'] - df["Close"].shift(4) # 4日前の終値
df["Lag_5"] = df['Close'] - df["Close"].shift(5) # 5日前の終値

# # ボリンジャーバンドを計算する
# indicator_bb = ta.volatility.BollingerBands(close=df_usdjpy['Close'], window=20, window_dev=2)
# # ボリンジャーバンドの値を取得する
# bb_mavg = indicator_bb.bollinger_mavg()
# bb_hband = indicator_bb.bollinger_hband()
# bb_lband = indicator_bb.bollinger_lband()

#MACDに使う値を計算
ema12 = df['Close'].ewm(span=12).mean()
ema26 = df['Close'].ewm(span=26).mean()
macd = ema12 - ema26
signal = macd.ewm(span=9).mean()
histogram = macd - signal

#RSIの計算
n = 14
delta = df['Close'].diff()
gain = delta.where(delta > 0, 0)
loss = -delta.where(delta < 0, 0)
avg_gain = gain.rolling(window=n).mean()
avg_loss = loss.rolling(window=n).mean()
rs = avg_gain / avg_loss
rsi = 100 - (100 / (1 + rs))

# 移動平均線のグラフを描画
fig, ax = plt.subplots(figsize=(12, 6))
ax.plot(df['Close'][-eria:], label='Close')
ax.plot(df['sma25'][-eria:], label='SMA25')
ax.plot(df['sma75'][-eria:], label='SMA75')
ax.plot(df['sma200'][-eria:], label='SMA200')
ax.legend(loc='best')
ax.set_title('Moving Average')

# MACDのグラフを描画
fig, ax = plt.subplots(figsize=(12, 6))
ax.plot(macd[-eria:], label='MACD')
ax.plot(signal[-eria:], label='Signal')
ax.bar(histogram.index[-eria:], histogram[-eria:], label='Histogram', width=0.8)
ax.legend(loc='best')
ax.set_title('MACD')

# RSIのグラフを描画
fig, ax = plt.subplots(figsize=(12, 6))
ax.plot(rsi[-eria:], label='RSI')
ax.axhline(y=70, color='red', linestyle='--')
ax.axhline(y=30, color='red', linestyle='--')
ax.legend(loc='best')
ax.set_title('RSI')

plt.show()


# 窓口パターンの認識(上昇トレンド)
if df['Close'].iloc[-3] < df['Close'].iloc[-2] < df['Close'].iloc[-1]:
    print('窓口パターン(上昇トレンド)が認識されました。')

# 逆三尊天井パターンの認識
if df['High'].rolling(window=3).max().iloc[-1] == df['High'].rolling(window=3).max().iloc[-3]:
    print('逆三尊天井パターンが認識されました。')

コード解説

まず、データ分析に必要な複数のライブラリをインポートしています。pandas_datareaderyfinanceは金融データを取得するため、matplotlibseabornはデータの可視化に、numpyscipyは数学的な計算に利用されます。

コードの主な構成は以下の通りです:

  1. 株価データの取得: yfinanceを使って特定の銘柄の株価データを指定期間で取得します。ここでは銘柄コード4755.T(おそらく楽天)のデータを2015年から現在まで取得しています。

  2. トレンドラインの追加: 株価の終値データに基づいて線形回帰を行い、トレンドラインを計算しています。これは価格の傾向を把握するのに役立ちます。

  3. テクニカル指標の計算:

    • 移動平均: 25日、75日、200日の単純移動平均線(SMA)を計算。これはトレンドの方向を見るために使われます。

    • MACD(Moving Average Convergence Divergence): 短期EMA(12日)と長期EMA(26日)の差を計算し、さらにそのシグナルライン(9日EMA)との差(ヒストグラム)をプロットします。

    • RSI(Relative Strength Index): 価格の強さを計る指標で、14日間の平均上昇幅と平均下降幅を基に計算されます。

  4. グラフの描画: 株価の終値、各移動平均線、MACD、RSIをグラフにプロットしています。これにより視覚的にデータを解析できます。

  5. パターン認識:

    • 窓口パターン(連続して株価が上昇している場合)

    • 逆三尊天井パターン(特定の高値が繰り返される場合)

このコードは、株価の振る舞いを理解しやすくするために多くのテクニカル指標とデータ可視化技術を利用しています。投資判断の補助として、これらの分析ツールが有効です。

この記事が気に入ったらサポートをしてみませんか?