pythonを使って、日本株のチャートを作成してみた | ソフトウェア開発のギークフィード

pythonを使って、日本株のチャートを作成してみた

pythonとbokehを使って、株チャートを作ってみました。カスタマイズ次第で、テクニカル指標も表示できますよ。

こんにちは。年末進行でへろへろになっているはるです。
へろへろな上にへっぽこです。おいしいお酒飲んで、ふとんに転がりながらスマホをいじることばかり考えています。

さて、前回までは業務の中で困った事象を解決するシリーズでした。
今回は、興味があるけど調べていなかったものをまとめてみたいと思います。

今回の題材は、python使った株チャートの描画。
様々な角度から日々の移ろう価格情報を斬るんだったら、pythonの方に部がありそうだなーって思ったので試してみました。

後、意外とこういうのまとめてる人が少なかったので、何かの価値を提供できるかもしれません。
あなたの知的好奇心を満足させられるサンプルコードとなっていましたら、幸いです。

pandas_datareader を使った四本足データの取得

では、やってみましょう。
コードはjupyter notebookを使って表示することを前提で作っています。

お手軽になにか、株の四本足(初値、高値、安値、終値)を取得する仕組みはないかなぁと調べたところ、超お手軽に株価を取得できそうなライブラリがありました。

pandas_datareader

このライブラリは、インターネット上の様々なデータソースからデータの取得を行うことができるライブラリです。
データは、扱いやすいpandasのDataFrameに変換されて、ローカルで操作ができます。

これを使って、ソフトバンク(証券コード: 9984)の株価を取得してみましょう。
日本株の情報を、1行でさっくり取得できるとかなかなかにすごいですよねぇ。。

  • 第一引数: 証券番号の後に、”.JP”を付けた文字列
  • 第二引数: データソースを明示。ここでは、stooq (世界各国の先物・個別株などの情報を取得)

取得したデータに対して、dropna()をついでに実行します。
データの中身がnanな物が存在すると、今後計算する移動平均やボリンジャーバンドの計算ができず、歯抜けになってしまうからです。

bokehを使ってローソク足を表示

一般的に、pythonでグラフと言うとmatplotlibを連想する人が多いと思います。
が、ここでは最近流行りつつあるbokehを使ってチャートを作ってみましょう。

bokeh

bokehでチャートを作るにあたっては、サンプルが公式に掲載されていますので、そちらを確認しました。

candlestick.py

stooqで取得するデータは、どうやら開始日/終了日の指定ができないようなので、DataFrameに直接日付を指定して制限する形を取りました。
vbarがローソク足の描画です。陽線なのか陰線なのかで、指定を変えています。

ローソク足の幅(w)については、可能な限り大きな値を指定するのがよいようです。

ちなみに、bokehで作ったグラフは、拡大縮小もマウスのドラッグでできるんです。
右側のアイコンから、上から3つ目の虫眼鏡をクリックして、気になる範囲をドラッグすると。。。

この通り。ちゃんと陽線と陰線も描き分けてますね。
戻すときは、下から2番めのぐるぐるボタンを押下してください。

特に指定しなくても、こういうインタラクティブなグラフを作ってくれるbokehはかなり使い勝手はいいんじゃないかと思います。

テクニカル指標の表示は?

これで表示されたチャートをベースにして、自分の好みのテクニカル指標を追加してあげましょう。
ここでは、25日平均線、ボリンジャーバンド、移動平均乖離率の3つをこれに追加してみます。

移動平均線

テクニカル指標というと、基本は移動平均線ですかね。
たった1行の追加で表示できてしまいます。

チャートのインスタンス(p)に対して、lineの描画を追加してあげてください。
25日分のデータをrollingで取得し、それを平均(mean)してあげればいいだけ。簡単ですね。

ボリンジャーバンドの追加

引き続き、皆さんよく参照されるであろうボリンジャーバンドについて。
これも移動平均と同様ローソク足を表示させているチャートにかぶせて表示します。

ここでは、pytiというライブラリを使って計算を行いました。
Pythonでテクニカル分析と言うと、TA_Libが有名なのですが、パッケージのインストールの際に、エラーが結構出るみたいで。
こちらはpipを使ってあっさりと使えるようになりました。

これも、チャートに対して線を引く処理を追加しています。

移動平均乖離率の追加

今まではチャート上に分析結果を追加する形でお伝えしていましたが、別領域に表示することもできるんです。
単に、もう一つbokehのグラフを作ってあげればいいだけです。

せっかく移動平均を表示してあげたので、移動平均乖離率を画面の下側に出してあげましょう。

lineの描画は2行ありますが、

  • 上が移動平均乖離率そのもの。
  • 下はしきい値線(10%/20%ラインなど)

を描画しています。試しに0で指定していますが、これは任意の値に変えて、色(color)の指定を変えてあげれば、さらに自分好みにカスタマイズすることができるでしょう。

まとめたコード

コード番号と抽出期間を変えてあげれば、好みの銘柄のチャートを表示できるかと思います。
是非試してみてください。

それでは、今回はこれにて。

この記事が気に入ったら
いいね ! しよう

Twitter で
The following two tabs change content below.
アバター
はる
頭から殻が取れそうで取れないしがないプログラマ。 今流行りの言語やフレームワークを触りたいなーと思いつつ、日々の業務に尻を蹴っ飛ばされる毎日を過ごしてます。 Java/python・Oracle。Laravelはじめました。
アバター
はる (全て見る)

【求人】私たちと一緒に働きませんか?

採用情報
ページトップへ