1
3

Pythonによる株式予測の移動平均とヒストグラムの求め方

Last updated at Posted at 2023-11-20

株式予測の移動平均とヒストグラムの求め方

graph_python.png

金融ファイナンスを分析することがPythonの強みです。
時系列データを分析して株価予測も可能になります。

必要ライブラリをインポートする

python
import pandas as pd
from pandas import Series,DataFrame
import numpy as np
# 可視化ライブラリ
import matplotlib.pyplot as plt
import seaborn as sns# 罫線
sns.set_style('whitegrid')
#pickleファイルで必要なデータを一括保存
#pickleはPythonオブジェクトの直列化(シリアライズ)や非直列化(デシリアライズ)を扱うライブラリ
import pickle
# Pythonで日付と時刻を扱うモジュール
from datetime import datetime

pklファイルより株価データを取得

# 証券コード(GOOG(Google))と同じ変数名 | 2022年4月から23年の4月まで
with open('ファイル名.pkl', 'br') as f:
    GOOG = pickle.load(f)

APIで取得する方法

J-Quants APIに登録
無料プランはデータ提供期間が過去2年分[12週間遅延]

リフレッシュトークンとIDトークンの取得と株価データ取得

リフレッシュトークンを取得するPythonコード

python
# リフレッシュトークン取得
import requests
import json
import pandas as pd

# 登録したメールアドレス、パスワードを設定
# EMAIL_ADDRESSに登録メールアドレス、PASSWORDにパスワードを入力
mail_password={"mailaddress":"EMAIL_ADDRESS", "password":"PASSWORD"}

# リフレッシュトークン取得
r_ref = requests.post("https://api.jquants.com/v1/token/auth_user", data=json.dumps(mail_password))

# リフレッシュトークン取得の表示
print(r_ref.json())

# 受け取ったリフレッシュトークンを設定
RefreshToken = r_ref.json()["refreshToken"]

# IDトークン取得
r_token = requests.post(f"https://api.jquants.com/v1/token/auth_refresh?refreshtoken={RefreshToken}")

# IDトークン表示
print(r_token.json())

# 取得したIDトークンを設定
idToken = r_token.json()["idToken"]
headers = {'Authorization': 'Bearer {}'.format(idToken)}

# 銘柄コード、期間を指定
code_ = "8697" 
from_ = "2022-12-01"
to_ = "2023-02-28"

# 株価四本値の取得
re_daily_OHLCV = requests.get(f"https://api.jquants.com/v1/prices/daily_quotes?code={code_}&from={from_}&to={to_}", headers=headers)

# pandasデータフレームに変換
df_daily_OHLCV = pd.DataFrame(re_daily_OHLCV.json()["daily_quotes"])

# 'Date'をdatetime型へ変換
df_daily_OHLCV['Date'] = pd.to_datetime(df_daily_OHLCV['Date'])

参照:J-Quants API(無料プランあり)を使用した株価・財務データ取得(Python)
https://taimuoreganoblog.com/miscellaneous_notes/data-acquisition/stock_data_acquisition/

describeで各列の要約統計量(平均、標準偏差など)取得

参照:note.nkmk.me:https://note.nkmk.me/python-pandas-describe/

GOOG.describe()

#情報の出力
GOOG.info()

# 終値時系列をプロット
GOOG['adjClose'].plot(legend=True, figsize=(10, 4))
# 1日に取引が成立した株の数をプロット
GOOG['volume'].plot(legend=True, figsize=(10, 4))

 移動平均線(moving average)と呼ばれるグラフ

「移動平均とは、時系列データにおいて、ある一定区間ごとの平均値を区間をずらしながら求めたもの」
参照:統計WEB | https://bellcurve.jp/statistics/blog/15528.html

間隔ごとに移動平均を取得

pandasは金融情報が得意

ma_day = [10, 20, 50]

for ma in ma_day:
    column_name = f"MA {ma}"
    GOOG[column_name] = GOOG['adjClose'].rolling(ma).mean()
    
GOOG[['adjClose','MA 10','MA 20','MA 50']].plot(figsize=(10, 4))

pct_changeを使うと変化の割合を算出

GOOG['daily'] = GOOG['adjClose'].pct_change()

日ごとの株式市場の変化率

GOOG['daily'].plot(figsize=(16, 9),#HDサイズのグラフ(1920×1080)が作りたかったら、figsizeを(16, 9)、dpiを120
                          legend=True,
                          linestyle='--'#折れ線グラフをイメージ,
                          marker='v')# 35種類のマーカーが使用可能

前日パーセンテージのヒストグラム

GOOG['daily'].hist(bins=100)

sns.histplot(GOOG['daily'],
             bins=100,
             kde=True,#カーネル密度推定グラフ / ガウス分布
             #実績データをサンプルとして、実績のない値の確率を導き出す手法
             color='purple')

graph.png

1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3