システムエンジニアになる ツール

超簡単!pythonで株価や出来高でフィルタリングする方法!

こんにちは、こちょすです!

インスタ始めました!ぜひフォロー・応援お願いします🙏
※インスタは主に肉体改造に向けた軌跡を記録しているアカウントです!

instagram:@kochos05
Twitter:@kochos5

 

さて!今回はタイトルにあるとおり、勉強系(プログラミング系)です!

 

国が「貯蓄から投資へ」と高らかに謳っていたり、コロナ禍で生活が不安、今の仕事に収入源を増やしたいなどなどの思いから、投資を始めている人も多くいるのではないでしょうか

 

今回はシステムエンジニアの私がご紹介できる株式投資に関するTipsをご紹介したいと思います!

投資といえば株式投資!ということで、今回は株価をpythonを使って自動取得し、そこから出来高でフィルタリングする方法をご紹介します!

とっても簡単なので、pythonを学びたての方もぜひトライしてみてください!

 

こんな方におすすめ

  • pythonを使って株価を自動で取得したい
  • pythonは勉強しているが、実用的なものを作ってみたい
  • 株価分析したいけどスクレイピングはちょっと敷居が高い、、、

 

それではいってみましょう!💪

 

 

利用するライブラリのインストール

まずはpythonのライブラリのインストールから!

今回利用するライブラリはpandas_datareaderです

pandasと呼ばれる、データ分析界隈でよく使われているライブラリ群の一部ですね!

 

 

私もデータ分析コンテストのKaggleに参加していた時期があり、その際はpandasをよく使っていました。

pandasの使い方やデータ分析モデルについては今後記事にしていきたいと思います!

 

、、、と少し脱線してしまいました。ではpandas_datareaderをpipでインストールしましょう!

 


pip install pandas_datareader

 

これでインストール完了です!では次のステップにいきましょう!

 

 

ライブラリを使ってコーディングをしてみよう!

ではまずはこのライブラリを使って株価データを取得してみましょう!

 

たったの4行で株価データを取得することができます

以下のコードをコピーして、実行してみてください!


import pandas_datareader.data as web
stock_code = '6758.JP'
stock = web.DataReader(stock_code, 'stooq')
print(stock)


 

簡単にコードをご説明します!

メモ

最初にpipでインストールしたライブラリ、pandas_datareader.dataを「web」という別名でインポートしています。

2行目ではソニーの銘柄コード(6758)を宣言しています。(.JPを付けているのは日本に上場している銘柄だからです!)

3行目では、銘柄コードを第一引数として渡しています。他の部分はおまじないだと思ってそのまま使っちゃってください!笑

 

 

さらに詳しくライブラリの使い方を学びたい方は以下の公式リファレンスをぜひみてみてくださいねー!

 

これを実行すると、以下のような結果が出力されます。

ちなみにpandasのデータフレーム型と呼ばれる型で結果が返ってきています。

 

(base) kochos  ~/Desktop/python $ python sample_stock_manage.py
Date         Open      High       Low     Close    Volume
2021-01-28   9950.00  10075.00   9915.00  10035.00   6602500
2021-01-27  10300.00  10400.00  10125.00  10270.00   4777800
2021-01-26  10250.00  10340.00  10160.00  10285.00   3810700
2021-01-25  10460.00  10490.00  10155.00  10300.00   5221700
2021-01-22  10470.00  10510.00  10385.00  10480.00   3683800
・・・(略)

 

 

それぞれのカラム(列)の意味を簡単に説明します!

各カラムの意味

Date:日付項目です。そのままですね!
Open:始値です。場が開いて始めて付いた値段がこの列に設定されています。
High:高値です。その日の市場で付いた最高値がこの列に設定されています。
Low:安値です。その日の市場で付いた最安値がこの列に設定されています。
Close:終値です。場の最後に付いた値段がこの列に設定されています。
Volume:出来高です。その日の市場で取引された数量がこの列に設定されています。

 

これで株価データの取得方法や、取得結果の見方もわかりました!では最後に、出来高でスクリーニングする方法をみてみましょう!

 

 

出来高を使ってフィルタリングしてみよう!

ではこのライブラリを使って、「出来高が●以上の銘柄かどうか」を判定するロジックを実装してみましょう!

 

 

僕の場合、普段はcsvファイルを読み込んで処理をすることが多いのですが、今回は簡易的に実装するために、候補を予め配列に設定し、その配列を読み込んで1つずつ処理をするようにしてみましょう!

(CSVを読み込んで実装することも簡単にできるので、ぜひ調べてトライしてみてくださいね!)

 

 

ではいきましょう!

今回はソニー(6758)、任天堂(7974)、バンダイナムコ(7832)の3社の株価を使いたいと思います!

 

コードはこんな感じになります。


import pandas_datareader.data as web
stock_code_list = ['6758.JP', '7974.JP', '7832.JP', ]
for stock_code in stock_code_list:
    stock = web.DataReader(stock_code, 'stooq')
    if (stock['Volume'][0] > 3000000):
        print('条件を満たしています')
        print(stock_code, "の出来高:", stock['Volume'][0])
    else:
        print('条件を満たしていません')
        print(stock_code, "の出来高:", stock['Volume'][0])


 

 

少しコードが長くなりましたが、ご安心ください!解説していきます。

 

メモ

1行目のimport文は大丈夫ですね!先ほどと同じライブラリをインポートしています。
2行目で、候補銘柄の3つを配列で宣言しています。
3行目〜4行目ではforループを使って配列から1つずつ銘柄を取り出し、その取り出した配列を、ライブラリに渡しています。
5行目では戻り値のデータフレーム型のVolume(出来高)の直近情報を使って、その銘柄の出来高が300万以上かどうかを判定しています。
もしTrue(300万以上取引されている)であれば条件を満たしていることと、その出来高を出力しています。
一方でFlase(300万未満しか取引されていない)であれば条件を満たしていないことと、その出来高を出力しています。
このif文の中身を書き換えることで、自分のやりたい処理を実装することができます

 

最後にこのコードを実行してみましょう!

 

(base) kochos  ~/Desktop/python $ python sample_stock_manage.py
条件を満たしています
6758.JP の出来高: 6602500
条件を満たしていません
7974.JP の出来高: 1534800
条件を満たしています
7832.JP の出来高: 3819900

どうでしょうか!
ソニーとバンダイナムコは条件を満たしている一方、任天堂は満たしていないことがわかります。

 

 

最後に1つだけ注意点!

ポイント

このライブラリでは最新のデータは前々日のデータになります。

つまり昨日のデータが欲しい場合には、スクレイピングなどを利用して、組み合わせる必要があります。

スクレイピングのやり方については以下の記事で解説していますので、ぜひご参照ください!

 

PythonでChrome検索を自動化する方法 with selenium

続きを見る

 

 

まとめ

では最後に要点をまとめておきます。

 

ポイント

・pythonで株価情報のデータを使いたいときにはpandas_datareaderというライブラリを使う

・戻り値は日付や高値、出来高などを持っている

・このライブラリで

取得できるのは前々日の株価まで。前日の株価が欲しい場合にはスクレイピングも併せて使う

 

いかがでしたでしょうか。たった4行から株価のデータを取得することができるので、ぜひみなさんも使ってみてはいかがでしょうか!

 

ではまた!!

-システムエンジニアになる, ツール

© 2021 これブロ