Python 株式投資

【Python】SeleniumでSBI証券から日本株の注文をキャンセルする方法【自動売買への道】

2023年4月22日

【Python】SeleniumでSBI証券から日本株の注文をキャンセルする方法【自動売買への道】

こんにちは。TATです。

今日のテーマは「【Python】SeleniumでSBI証券から日本株の注文をキャンセルする方法」です。

 

PythonとSeleniumを使って、SBI証券のサイトから日本株の注文をキャンセルする操作を自動化してみます。

過去の記事では、Seleniumで日本株の新規の売買注文を入れる方法について解説しました。

今回はこの注文をキャンセルする方法を解説します。

SBI証券へのログイン

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

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

 

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

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

続きを見る

 

日本株の注文をキャンセルするまでの流れ

次にPythonとSeleniumでSBI証券のサイトから日本株の注文をキャンセルするまでの流れについて確認しておきます。

ざっくりとこんな感じです。

 

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

  1. (SeleniumでSBI証券にログイン)
  2. 「取引」から「注文照会 取消・訂正」ページへ遷移する
  3. 注文データ一覧を取得する
  4. キャンセルしたい注文の「取消」ボタンをクリックする
  5. 取引パスワードを入力して「注文取消」ボタンをクリックする
  6. 遷移後のページから注文が成功したかをチェックする

 

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

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

 

PythonとSeleniumでSBI証券サイトから日本株の注文のキャンセルを実装する

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

 

「取引」から「注文照会 取消・訂正」ページへ遷移する

まずは「取引」から「注文照会 取消・訂正」ページへ遷移します。

 

Chromeの「検証」からそれぞれの要素をチェックします。

「取引」については、title="取引"となっているので、これを利用すれば要素を取得できます。

 

「注文照会 取消・訂正」については、特にこれを特定できる要素はありませんでした。

ここでは「注文照会 取消・訂正」という文字をキーにして要素を取得したいと思います。

「注文照会」と「取消・訂正」の間に<br>が入っているので要注意です。

文字の一部から要素を特定してみます。

 

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

 

 

これで「注文照会 取消・訂正」ページへ遷移することができます。

 

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

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

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

 

以上で最初のステップは完了です。

 

注文データ一覧を取得する

次に注文データの一覧を取得します。

「注文照会 取消・訂正」を見ると、現在注文中のデータ一覧を確認できます。

ここではデモ用に適当なオーダーを入れておきましたw

 

 

注文番号がわかれば特定できる

重要になるのが注文番号です。

取消をしたい注文の注文番号がわかっていれば簡単に対象の注文を特定することができます。

 

注文番号については、注文が完了した際に確認できます。

 

自動売買のシステムを構築する際には、この注文番号を注文完了時に何処かに保管しておくと、キャンセルするときに便利です。

 

とりあえず注文データ一覧を取得する

ここでは注文番号を把握してない時のことを考慮して、一旦ここにあるデータを取得してみます。

Beautifulsoupを使ってこのテーブルにあるデータを取得しました。

 

マルチインデックスになってるので結構厄介なのですが、注文番号が存在している行を判定して、そこから必要な情報に順番にアクセスしていきました。

細かい解説は割愛しますが、コード内になるべく多くのコメントをつけたので参考にしてみてください。

 

 

これで綺麗にデータを取得することができます。

 

ここから条件指定などをして取消をしたい注文を特定することができれば便利ですね。

 

キャンセルしたい注文の「取消」ボタンをクリックする

次にキャンセルの処理をしていきます。

キャンセルしたい注文が特定できれば、その注文の「取消」ボタンをクリックします。

 

「取消」ボタンを確認すると、特に要素を特定できる要素はないので文字をキーにして要素を取得します。

 

先ほど収集したテーブルデータ(df)の行数と一致していますね。

そしてこの取得できた要素はリスト形式になっているので、indexで特定の要素にアクセスできます。

これはdfのindexと一致しているので活用できます。

 

ここでは例として注文番号「639」をキャンセルしてみましょう。

dfを確認するとindexは2ですので、これを利用して「取消」ボタンをクリックします。

 

 

これで注文取消画面に遷移します。

取引パスワードを入力して「注文取消」ボタンをクリックする

注文のキャンセルを確定させるためには、取引パスワードを入力して「注文取消」ボタンをクリックします。

要素を確認してみます。

 

 

取引パスワードはid="pwd3"となっています。「注文取消」ボタンについては、value="注文取消"となっているので、これらの要素を利用して処理を実装します。

 

 

これで注文取消が確定します。

 

 

遷移後のページから注文取消が成功したかをチェックする

最後に遷移後のページから注文取消が成功したのかどうかを確認します。

注文取消が成功すると、「ご注文を受け付けました。」という文言が表示されます。

これがあるかどうかをチェックすればOKです。

 

 

かなりシンプルですが、これで十分に機能します。

 

注意点

ここで1つだけ注意点です。

注文取消が完了してもう一度「注文照会 取消・訂正」のページを確認すると、注文状況が取消中となります。

 

しばらくすると取消が完了して、この行そのものが消えるのですが、しばらく残っているので連続で注文を取り消す際には注意が必要です。

取消中の注文は取消のリンクが無効になっているので、行数とリンクの数が合わなくなってしまいます。

これを調整するためには、取得したdfから注文状況が取消中になっている行を削除して、indexをリセットしてあげればOKです。

 

これでリンクの数とdfの行数が一致します。

連続で注文取消を行うこともあると思うので、この処理を加えておくと安心です。

 

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

ここまでの内容で、PythonとSeleniumを使って注文をキャンセルすることができました。

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

 

注文一覧のテーブルデータの取得については関数にしました。

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

コピペ用にどうぞ。

 

 

テーブルデータの取得がなければ結構短いコードで実装できてしまいますね。

dfを利用すれば、注文条件でキャンセルしたいオーダーを特定することができます。

注文番号がわかっていればその値がある行のindexを取得すればOKです。

 

これで、PythonとSeleniumで任意の注文をキャンセルできるようになりました。

 

まとめ

本記事では「【Python】SeleniumでSBI証券から日本株の注文をキャンセルする方法」について解説しました。

 

PythonとSeleniumを利用すれば、SBI証券に自動ログイン(参考記事)して、そこから日本株の新規注文を入れたり、本記事で紹介したように注文をキャンセルすることもできます。

新規注文を入れる方法については過去の記事をご参照ください。

 

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

おすすめPython学習法

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

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

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

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

 

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

© 2023 気ままなブログ