見出し画像

PYTHON 株価予測:NVIDIA &移動平均編


1)初めに&今回のゴール

前回、予測精度を向上させるため複数の変数も併せて学習できるSARIMAXモデルを紹介しましたが正直なところ精度には疑問が残ります。
そこで今回は、チャート分析の基本である”移動平均”の計算方法と、その移動平均を学習に使用して予測精度に変化についてお話ししたいと思います。
今回のターゲットは、昨年からの生成AIブームで絶好調のNVIDIAとしてみました。PYTHON時系列予測入門移動平均編、ぜひお付き合い下さい。

今回のゴール:NVIDIA株の株価の20日後までの予測結果

参考)前回の記事SARIMAXモデルについて

2)少しだけお勉強

(1)移動平均とは?

投資の世界で頻繁に耳にする「移動平均」。この単語は、株価のチャート分析において基本中の基本とされ、初心者からプロのトレーダーまで幅広く利用されています。
移動平均は、ある期間にわたる株価の平均値を連続して計算し、それをチャート上にプロットしたものです。例えば、「30日移動平均」は過去30日間の株価の平均値を指し、毎日その平均値が更新されます。この平滑化された線は、市場のノイズを減らし、株価のトレンドをより明確に示します。

移動平均の種類 :移動平均には主に2つのタイプがあります:
単純移動平均(SMA):特定の期間の株価の算術平均です。全ての価格に同じ重みが与えられます。*この記事ではこちらのSMAを使用してます。
指数移動平均(EMA):最近の価格により大きな重みを置くことで、より速く市場の変化に反応します。

移動平均の使い方
トレンドの識別:移動平均はトレンドの方向性を示すのに有用です。株価がその移動平均より上にあれば、上昇トレンドにあり、逆もまた真です。
サポートとレジスタンス:移動平均はしばしばサポートライン(下支え)やレジスタンスライン(上限)として機能します。
トレンドの変化の警告:株価がその移動平均線を上下に突破すると、トレンドの転換を示唆している可能性があります。

まとめ
移動平均は、それだけで投資判断を下すべきではないですが、株価の分析と予測において強力なツールです。PYTHON では簡単にこの分析を行うことも可能ですので、ぜひ使ってみて下さい。

(2)ロウソク足チャートとは?

ロウソク足チャートは、株価の動きを視覚的に表現するために広く利用される表示方法です。このチャートは、特定の期間(例えば、1日、1週間、1ヶ月)の開始価格、終了価格、その期間の最高価格、最低価格を一つの「ロウソク」で示します。
ロウソクの本体(実体)は開始価格と終了価格の間を示し、それが増加している場合は通常白や緑で、減少している場合は赤や黒で表示されます。最高価格と最低価格は「ヒゲ」と呼ばれる線で表され、ロウソクの上下に伸びています。
株価の場合ただの線図では味気ないので、PYTHON では”mplfinance”というライブラリを使うことで可能となります。

実際のPYTHON での可視化について
まずは、PIPコマンドでインストールが必要です。

!pip install mplfinance

あとはインポートして”matplotlib”と同様に実行することで作図ができます。

import mplfinance as mpf

# ろうそく足チャートをプロット
mpf.plot(df, type='candle', style='charles',
         title='NVDA Candlestick Chart',
         ylabel='Price USD ($)',
         volume=True,
         ylabel_lower='Volume',
         show_nontrading=False)
ロウソク足チャート+移動平均線

3)移動平均線で株価予測

実際に株価を取得し、移動平均線を計算します。
計算には、.rolling(window=5).mean()のように、rolingの引数に(window=移動平均で出したい日数)として、その平均値を取るため.mean()を指定してあげるだけです。今回、5日、20日、50日の終値(Close)の移動平均をそれぞれ算出し、元データdfに格納するコードは下記のように簡単です。

# 移動平均を計算してdfに追加
df['ma5'] = df['Close'].rolling(window=5).mean()
df['ma20'] = df['Close'].rolling(window=20).mean()
df['ma50'] = df['Close'].rolling(window=50).mean()

# 結果の確認
df

実行するとデータが確認できます。ma5は5日平均のため、データが5日ないと平均値が計算できないためNaNとなっています。
予測する場合にはNaNは使えないため、データ欠損行の削除などの対応を忘れないようにしましょう。

欠損値行の削除及び学習したい目的変数の設定は下記のように目的変数y、説明変数Xを設定します。学習及び予測結果のプロットは前回と同じですのでここでは省かせてもらいますが、非常に簡単に予測することができているのがわかると思います。

# 欠損データの処理
df.dropna(inplace=True)

# 目的変数(Close)と説明変数(ma5, ma20, ma50)を設定
y = df['Close'].values
X = df[['ma5', 'ma20', 'ma50']].values

ちなみに、前回のS&P500、NASDAQ100、米国債券価格を使って予測した結果です。(実行コードは、最後にあります。)

S&P500等を使っての予測結果は疑問が残るチャート形状ですが、移動平均を使った予測結果はもしかしたらそのように動くのか?とも思えるのではないかと思います。
(くれぐれも実際の売買にあたっては検証の上、自己責任でお取引をお願い致します。)

4)まとめ&コード全文

今回移動平均を使ったSARIMAXモデルでの株価予測をご紹介しました。前回より格段に精度を感じさせる予測結果になったと思います。
今後も時系列予測に興味のある方にとって楽しみとなれる記事を書いていきたいと思いますので、次回もお楽しみに!

以下、コード全文です。
学習に使用する移動平均の取捨選択や、SARIMAXパラメータを調整して予測精度の向上にチャレンジしてみて下さい。

ここから先は

4,857字 / 3画像

¥ 300

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