株式投資において、トレンド分析は非常に重要です。トレンドとは、価格がある方向に一定の期間動く傾向を指します。これを分析することで、今後の価格動向を予測し、売買の判断に役立てることができます。この章では、トレンド分析における基本的な手法である「移動平均線」と、よく使われるテクニカル指標「RSI」と「MACD」を取り上げ、Pythonでの実装方法を具体的に解説します。
移動平均線(Moving Average, MA)は、一定期間の価格データの平均値を連続的に計算したものです。過去の価格データの平均を算出し、それを時系列でプロットすることで、価格のトレンドを視覚的に捉えることができます。移動平均線は、株価の変動を平滑化する効果があり、短期的な価格のノイズを除去して、より長期的なトレンドを理解するのに役立ちます。
移動平均線にはいくつかの種類がありますが、代表的なものは以下の2つです。
SMAは、直近の一定期間の終値の平均を計算します。例えば、20日間の単純移動平均線は、直近20日間の終値を合計し、その合計を20で割った値です。これを毎日更新していくことで、移動平均線をプロットします。
Pythonを使って単純移動平均線を計算する方法は非常にシンプルです。まずは、株価データを取得し、Pandasを使って計算してみましょう。
import pandas as pd
import yfinance as yf
import matplotlib.pyplot as plt
# 株価データの取得
ticker = 'AAPL' # 例としてAppleの株価を使用
data = yf.download(ticker, start='2020-01-01', end='2023-01-01')
# 単純移動平均線の計算
data['SMA_20'] = data['Close'].rolling(window=20).mean()
# 移動平均線と株価のプロット
plt.figure(figsize=(10,6))
plt.plot(data['Close'], label='Close Price')
plt.plot(data['SMA_20'], label='20-Day SMA', color='orange')
plt.title(f'{ticker} Stock Price and 20-Day SMA')
plt.legend()
plt.show()
上記のコードでは、Apple(AAPL)の株価データをYahoo Financeから取得し、20日間の単純移動平均線を計算してプロットしています。rolling()
関数を使って、期間ごとの平均を計算し、mean()
でその平均値を算出します。
EMAは、SMAに比べて、最近の価格に重みを置いて計算されるため、より直近の動きを反映しやすいのが特徴です。EMAは次の式で計算されます。
ここで、Nは移動平均の期間を表します。
Pandasを使ってEMAを計算するには、ewm()
メソッドを使用します。
# 指数平滑移動平均線の計算
data['EMA_20'] = data['Close'].ewm(span=20, adjust=False).mean()
# EMAと株価のプロット
plt.figure(figsize=(10,6))
plt.plot(data['Close'], label='Close Price')
plt.plot(data['EMA_20'], label='20-Day EMA', color='green')
plt.title(f'{ticker} Stock Price and 20-Day EMA')
plt.legend()
plt.show()
このコードでは、20日間のEMAを計算し、株価とともにプロットしています。ewm()
メソッドで平滑化の係数を指定し、span=20
で20日間の期間を設定しています。
移動平均線に加えて、トレンドや市場の状態を評価するためのテクニカル指標も多く存在します。ここでは、代表的な2つの指標「RSI(Relative Strength Index)」と「MACD(Moving Average Convergence Divergence)」について解説します。
RSIは、株価の上昇と下降の勢いを比較して、買われすぎや売られすぎの状態を評価するための指標です。RSIは0から100の範囲で値をとり、一般的に70を超えると「買われすぎ」、30を下回ると「売られすぎ」と判断されます。計算式は以下の通りです。
ここで、RSは一定期間の上昇平均と下降平均の比率を示します。
PythonでRSIを計算する方法を見てみましょう。
# RSIの計算
window_length = 14
delta = data['Close'].diff(1)
gain = (delta.where(delta > 0, 0)).rolling(window=window_length).mean()
loss = (-delta.where(delta < 0, 0)).rolling(window=window_length).mean()
RS = gain / loss
data['RSI'] = 100 - (100 / (1 + RS))
# RSIのプロット
plt.figure(figsize=(10,6))
plt.plot(data['RSI'], label='RSI', color='purple')
plt.axhline(70, color='red', linestyle='--', label='Overbought')
plt.axhline(30, color='blue', linestyle='--', label='Oversold')
plt.title(f'{ticker} RSI')
plt.legend()
plt.show()
このコードでは、14日間のRSIを計算し、70と30の閾値を基に売買シグナルのヒントを可視化しています。diff()
メソッドで前日との価格差を取得し、それを元にRSを計算しています。
MACDは、2本の異なる移動平均線の差を利用して、トレンドの転換点を見極めるための指標です。MACDは以下の3つの要素で構成されます。
MACDラインがシグナルラインを上抜けると買いシグナル、下抜けると売りシグナルと判断されます。
以下のコードでMACDを計算し、プロットしてみましょう。
# MACDの計算
short_ema = data['Close'].ewm(span=12, adjust=False).mean()
long_ema = data['Close'].ewm(span=26, adjust=False).mean()
data['MACD'] = short_ema - long_ema
data['Signal_Line'] = data['MACD'].ewm(span=9, adjust=False).mean()
# MACDのプロット
plt.figure(figsize=(10,6))
plt.plot(data['MACD'], label='MACD', color='black')
plt.plot(data['Signal_Line'], label='Signal Line', color='red')
plt.title(f'{ticker} MACD and Signal Line')
plt.legend()
plt.show()
このコードでは、12日間と26日間のEMAを使ってMACDを計算し、さらに9日間のEMAでシグナルラインを作成しています。MACDの変化がトレンド転換の可能性を示すポイントとしてよく使われます。
移動平均線の計算と、RSI、MACDなどのテクニカル指標を使ったトレンド分析の方法を学びました。移動平均線は、価格のトレンドを把握するための基礎的なツールであり、テクニカル指標と組み合わせることで、売買のタイミングをより精度高く判断することができます。Pythonを使ってこれらの指標を計算し、グラフで視覚的に捉えることができるため、トレードの判断を客観的に行うための強力なツールとして活用できます。
プログラミングを始めたいと思っているそこのあなた、独学よりもプログラミングスクールが断然おすすめです!理由は簡単、続けやすさです。
独学でプログラミングを続けるのは、実はかなりハードルが高いんです。データによると、なんと87.5%もの学習者が途中で挫折しているとか。一方、各プログラミングスクールが公表しているデータによると、受講生の約95%が最後までやり抜いているとのこと。数字を見れば一目瞭然、プログラミングスクールの方が圧倒的に続けやすいんです。
プログラミングスクールには有料と無料のタイプがありますが、その違いは次の通りです:
どちらが自分に合っているか、よく考えて選ぶのが大事です。
プログラミング初心者でも学びやすいと評判の『FREEKS』、その特徴は以下の通り:
なんと、月会費のみで全カリキュラムが受け放題!Java、PHP、HTML/CSS、JavaScriptなど、多彩なプログラミング言語が学べるんです。しかも、AIが質問に自動で答えてくれるシステムも導入済み。
カリキュラムを終了した後には、Freeks経由で未経験者でも取り組める副業案件の受注が可能。実務を通じてスキルを磨き、市場価値の高いエンジニアへの道が開けます。
独学で悩むくらいなら、まずはプログラミングスクールをチェックしてみるのもアリかもしれませんよ!
↓ ↓ こちらをクリック ↓ ↓