Room No.511

人生一度きり。色々やろうよ。Twitter: @roomno511

Pythonで株価を取得し、LINEに通知するプログラムを作成 -実践編-

皆さんこんにちは。


前回は久々の更新で、どんな環境でPythonのコードを作成しているかを記載しました。



gdgdnk.hatenablog.com




今回は、株価を毎日取得するために私が作成したコードと、どのように実行しているかについてご紹介したいと思います。


 *=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*

◎本記事の見出し

 *=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*




がっつり株で儲けたい方々には向いてないコードかと思いますが、

私のように、仕事の傍らに売り買いをする程度の方々にはそこそこ使える...かもしれません笑

今後の改善点なども含めて記載していこうと思います。







〇実現したかったこと

Pythonで実現したかったことは、

”毎日一定時間おきに、自分が持っている銘柄の株価を取得し、LINEで通知してくてること”

です。

色々と試行錯誤したのですが、素人の私に一番簡単だった方法は

◆”毎日一定時間おきに” → Windowsのタスクスケジューラを使用する

◆”自分が持っている銘柄の株価を取得” → Yahoo Finance が提供しているAPIを利用する

◆”LINEで通知” → LINE Notifyが提供しているAPIを利用する

というものでした。


〇コード紹介

それでは、早速作成したコードを紹介します。



###import library###
from pandas_datareader import data as pdr
import datetime
import yfinance as yf 
import requests
import time
from datetime import timedelta, date
from time import sleep
import schedule

###Yahoo finance API###
end = datetime.datetime.now()
start = end - timedelta(1)
stock_code = "1321.T # 日経225ETF

yf.pdr_override() 
df = pdr.get_data_yahoo(stock_code, start, end, interval="30m")



#####LINE notify#######
access_token = "LINE Notifyで発行されたトークンID"
message = "現在の株価をお知らせします。: \n {}".format(df.iloc[-1]["Close"])

message

#####LINE 通知関数#######
def send_line_notification(access_token, message):
     headers = {"Authorization": f"Bearer {access_token}"}
     payload = {"message": message}
     requests.post("https://notify-api.line.me/api/notify", headers = headers, params = payload)

def notify():
    #mesage = "Amazon: {}".format(df["Open"])
    send_line_notification(access_token, message)

notify()

ここでは、銘柄コード1321 の日経225ETFの株価を取得しています。

コードの6割はChatGPT、残り4割はGoogle検索でヒットした方々のブログを参考に作成しました。

Pythonのことは殆どわからないので、例えばコード中の"override"とかぜんっぜんわかりません笑

AIとブロガーの皆様に感謝です。

〇コード実行方法

先ほどのコードを毎日定期実行するために、Windowsのタスクスケジューラを使用しています。

Windowsスケジューラーで毎日、30分おきに繰り返すことで上記のコードを実行しています。


〇本プログラムの改善点

最後に、今後このプログラムの改善点と実装したい機能を挙げておこうと思います。

① 株価がリアルタイムの値ではない

これは、データ提供元のyahoo financeの株価更新に20分の遅延があることに由来します。

有料のAPI等を利用すればリアルタイム株価を取得できるようですが、

あくまでも、仕事の合間での株売買の指標にすることが目的なので、
ここはこのままで良いかなと思っています。

② 市場の開いていない時間にも通知が来る

これは要改良の点かなと思います。

上記コードのままタスクスケジューラーで実行すると、土日祝日やお昼休みも通知が来ます。

最後にAPIで取得した値が通知されてしまうので、例えば土曜日ですと

金曜日の終値が一日中通知されてしまい、少し煩わしいです。

条件文を追記すれば回避できそうな気がするので、ここは早急に改良したいです。


③ 株価の通知が来ても買い時/売り時は一目では分からない

皆さん、現在の保有株式の平均取得金額って把握されてますか?

当然把握しているに決まっている!という方にはあまり関係の無い話ですが、

私は一切把握していないため、現在の株価が取得金額よりどの程度高いのか、

はたまた安いのかが全然わかりません。