Python 株式投資

【Python】SeleniumでSBI証券から日本株の損益履歴を収集する方法【自動売買への道】

2023年5月20日

【Python】SeleniumでSBI証券から日本株の損益履歴を収集する方法【自動売買への道】

こんにちは。TATです。

今日のテーマは「【Python】SeleniumでSBI証券から日本株の損益履歴を収集する方法」です。

 

PythonとSeleniumを使って、SBI証券のサイトから日本株の損益を収集する操作を自動化してみます。

過去の記事では約定履歴を収集する方法について解説しました。

 

今回の記事では損益の収集です。

このデータを集計すれば、月ごとの勝率や平均利益率、損切り回数などいろいろな分析に活用することができます。

SBI証券へのログイン

事前準備として、PythonとSeleniumでSBI証券にログインしておく必要があります。

Seleniumの準備やSBI証券へログインする方法についてはこちらの記事で解説しています。

 

ログインが完了したら、本記事で紹介するコードを実行することができます。

【Python】SeleniumでSBI証券に自動ログインする方法【自動売買への道】
【Python】SeleniumでSBI証券に自動ログインする方法【自動売買への道】

続きを見る

 

日本株の損益履歴(譲渡益税)を収集するまでの流れ

次にPythonとSeleniumでSBI証券のサイトから日本株の損益履歴を収集するまでの流れについて確認します。

ざっくりこんな感じかと思います。

 

日本株を売買するまでの流れ

  1. (SeleniumでSBI証券にログイン)
  2. 「口座管理」→「取引履歴」→「譲渡益税明細」ページへ遷移する
  3. 条件を選択する
  4. 「照会」ボタンをクリックする
  5. 結果を収集する

 

1についてはこちらの記事で解説している内容になるので、()書きにしました。

本記事では1はスキップして、2〜5を実装する方法を解説していきます。

 

PythonとSeleniumでSBI証券サイトから日本株の損益履歴収集を実装する

それでは2~5の流れを順番に解説していきます。

 

「口座管理」→「取引履歴」→「譲渡益税明細」ページへ遷移する

まずは譲渡益税のページに遷移します。

SBI証券にログインしてから、「口座管理」→「取引履歴」→ 「譲渡益税明細」とクリックすればOKです。

 

 

順番にHTMLの要素を確認してみます。

「口座管理」についてはtitle="口座管理"となっています。

 

「取引履歴」については、titleやaltなどの要素はありませんが、aタグで文字列が"取引履歴"となっています。

 

最後に、「譲渡益税明細」です。こちらもaタグで文字列が"譲渡益税明細"となっています。

 

これらの要素を利用してSeleniumでページ遷移していきます。

 

 

データの読み込み時間を考慮して、driver.implicitly_wait(60)を加えました。

これは次の処理を行うにあたり、対象となる要素が見つかるまで待機するという命令になります。

これがないとページが読み込まれる前に値を入力しようしたり次の処理を行おうとしてエラーが発生する場合があるので、処理に時間がかかる箇所に追加しておくとプログラムの安定感が増します。

 

これで譲渡益税のページへ遷移することができます。

 

 

条件を選択する

次に条件の選択です。

 

譲渡益税明細のページでは次の条件を指定することができます。

ポイント

  • 受渡日
  • 1ページあたりの表示件数

 

全てドロップダウンメニューになっていますね。

それぞれの要素をチェックすると、全てにnameが付与されていることが確認できます。

こちらは受渡日です。

 

1ページあたりの表示件数についてもname="max_cnt"となっています。

 

これらのnameを利用してドロップダウンの値を選択していきます。

やり方は全て同じですので、ここでは1ページあたりの表示件数を例にとって解説していきます。

Seleniumでドロップダウンメニューを選択するには、selenium.webdriver.support.select.Selectを使います。

 

 

こんな感じでSelectを使います。対象の要素を取得してSelectに引き渡せばOKです。

ここから選択できる値を取得することもできます。文字列になっているのでついでにintに変換しました。

 

値を選択する際には、値を直接指定することもできますし、indexで指定することもできます。

値を直接指定する場合は該当する値がない場合はエラーになってしまうのでindexで選択する方が無難です。

 

先ほど作成したmax_count_value_listから任意の値を検索してそのindexを利用することもできます。

この場合intで指定できるので使い勝手が良くなります。

 

次のコードでは全て100件を選択しています。

 

 

どれを使っても結果は変わらないのでお好きなものを選んでいただければOKです。

 

受渡日についても同様のやり方で設定できます。

全ての項目を網羅したコードは最後に共有します。

 

ここでは一旦次に進みます。

 

「照会」ボタンをクリックする

条件の設定が完了したら「照会」ボタンをクリックします。

 

要素を確認すると、name="ACT_search"となっているのでこれを利用します。

 

Seleniumで実装すると次のようになります。

 

 

これで譲渡益税明細が表示されます。

 

僕の損益情報がダダ漏れですが、こんな感じで表示されていたらOKです。

 

結果を収集する

最後に表示結果を収集します。

 

データの収集

テーブル情報を取得して、各行のデータを収集していきます。

 

今回の場合、海外株の情報も混じっています。

よって、一旦全て収集してから最終的に日本株のデータだけに絞っていきます。

 

そしてこのプロセスを全て解説していくと長くなってしまうので、ここではコードをまとめて紹介します。

なるべく多くのコメントをつけました。

 

さらに、データが多いと複数ページになります。

「次へ→」というボタンがあると次のページがあることを意味するので、これを利用して次ページがなくなるまで繰り返しデータを収集するようなプログラムにしました。

 

 

これでデータが収集できます。

また、今回は損益情報の取得が目的なので、税徴収額については収集していません。

 

収集したデータがこちらです。

 

いい感じですよね。

 

データの整形

次に修正したデータを少し整形していきます。

これは何をやるかによってどこまで綺麗に整形するべきかは変わってくると思うのですが、ここでは次のような作業をしました。

データ整形

  • 全カラムに対して、"--"とNaNに変換
  • 「銘柄」から証券コードを抽出 → 証券コードがある銘柄が日本株と判断して日本株データにもに絞る
  • 「数量」をintに変換
  • 「約定日」、「受渡日」をdatetimeに変換
  • 「取得/新規金額」、「損益金額」をfloatに変換
  • 「取引」から株式配当金を除外

 

これらを実装したコードがこちらです。

 

 

これで結構データはきれいになります。

 

これで全てのプロセスが完了です。

あとは必要に応じてカラムを追加したり集計したりすればいろいろな分析や用途に活用できるかと思います。

 

最後にコードをまとめてどうぞ!

最後に、これまでのコードをまとめたものを共有します。

解説で割愛した部分も全て網羅しています。

 

なるべくコメントも多くつけました。

コピペ用にどうぞ。

 

 

これで、PythonとSeleniumを使って、SBI証券のサイトから日本株の損益履歴を収集することができるようになりました。

 

まとめ

本記事では「【Python】SeleniumでSBI証券から日本株の損益履歴を収集する方法」について解説しました。

 

PythonとSeleniumを使えば、損益履歴の収集を自動化することができました。

参照時の条件選択も全てSeleniumを通じて自由に操作することができます。

 

このデータを集計すれば、月ごとの勝率や平均利益率、損切り回数のカウントなど、いろいろな分析に活用することができます。

最後まで読んでくださり、ありがとうございました。

おすすめPython学習法

Udemy:セール中なら90%オフで購入可能。豊富なコースから選べる!

キカガク:Pythonの基礎に加えて、機械学習やAIの数学的な背景から学べる!

データミックス:Pythonとビジネスについて学べる!起業したい方にもおすすめ!

SAMURAI TERAKOYA:月額2,980円〜利用できるコスパ最強スクール!

 

-Python, 株式投資
-, , , ,

© 2023 気ままなブログ