orz

趣味のブログです

ボリンジャーバンド付きの株価チャートを書くプログラム(Python)

 


Pythonを使って、株価チャートを書く練習をしてみました。 表題の通り、ボリンジャーバンドまでかけれるようにしてみました。 意外と単純にできたので、備忘録として公開します。まぁ、大したプログラムではないのですが。

ソースコード

from bs4 import BeautifulSoup
import pandas as pd
import requests
from datetime import datetime
import numpy as np
import matplotlib.pyplot as plt
from statistics import mean

y = 2020 #2019年
stock_number = 1321 #日経225連動型上場投信
url = 'https://kabuoji3.com/stock/{}/{}/'.format(stock_number,y)
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36"}
soup = BeautifulSoup(requests.get(url,headers = headers).content,'html.parser')

tag_tr = soup.find_all('tr')
head = [h.text for h in tag_tr[0].find_all('th')] #テーブルのヘッドの取得

#テーブルの各データの取得
data = []
for i in range(1,len(tag_tr)):
    data.append([d.text for d in tag_tr[i].find_all('td')])
    df = pd.DataFrame(data, columns = head)
#終値と日付を抜き出す
owarine =df['終値']
day = df['日付']

#終値の整数の変換ができた
for x in range(len(owarine)):
    owarine[x] = int(owarine[x]) 
#移動平均線を書いてみる
#まずは5日移動平均線
sma5 = []
day_sma5 = day[4:]
for x in range(len(owarine)):
    if (x-4) >= 0:
        sma5 = np.append(sma5,mean(owarine[(x-4):x]))
    else:
        continue

#25日移動平均線と標準偏差の算出
sma25 = []
day_sma25 = day[24:]
std=[]

for x in range(len(owarine)):
    if (x-24) >= 0:
        sma25 = np.append(sma25,mean(owarine[(x-24):x]))
        std = np.append(std,np.std(owarine[(x-24):x]))
    else:
        continue
plt.plot(day, owarine, label='raw data',linestyle="--", color='slateblue')
plt.plot(day_sma5,sma5,label ="5 days SMA")
plt.plot(day_sma25,sma25, label ="25 day SMA")
plt.plot(day_sma25,sma25+std, label="+sgm")
plt.plot(day_sma25,sma25+2*std,label="+2sgm")
plt.plot(day_sma25,sma25-std,label="-sgm")
plt.plot(day_sma25,sma25-2*std,label="-2sgm")
plt.title(str(stock_number)+" share value")
plt.legend(loc='lower right')
plt.show()

これを出力すると、次の画像のようになります。横軸汚いのは勘弁してください。
f:id:orshibuya0926:20210104182534p:plain

使い方、いじり方

stock_numberを変えるとほかの銘柄のグラフを出力をさせることができます。
例えば、stock_number = 9983 (ファーストリテイリングユニクロ)と変更しますと、
f:id:orshibuya0926:20210104183027p:plain
こんな感じで出力できます。

y =2020から2019に変更しますと、2019年の株価を出力させることできます。

例えば、125日移動曲線を作りたかったら、

sma125 = []
day_sma125 = day[124:]
for x in range(len(owarine)):
    if (x-125) >= 0:
        sma125 = np.append(sma125,mean(owarine[(x-124):x]))
    else:
        continue

を追加しまして、

plt.plot(day_sma125,sma125,label="125 days SMA")

と入れればグラフに追加できます。

次のステップ

一般的には2σラインを株価が抜けると上昇トレンド発生して買い時、-2σラインを株価が抜けると下降トレンドが発生して売り時と判断できます。

  • 一目均衡表をグラフに追加して、昨日の株価が売り時か買い時かを返してくれるプログラムを作る

"べつに、チャートで見て自分で判断すればいいじゃん"と言われれば、それまでですが、チャートを見て株を買うときに心理的な要素を排除したいがために作成しております。
ボリンジャーバンドに従ってやり取りしてみた、というネタでブログを書いてみたいという欲望もあります。