10年前にシステムトレードをVBSで検討したが、結局何もせずに終わった。
NOVAでお金を失って株の自動売買を検討
2007年11月09日(金) NOVAにまた授業料支払いか・・・世の中には二種類の人間がいるんだ。一人は前例を基にいい仕事をする。一人は前例を壊すことを仕事にしている。前者が文系で、後者が理系だ。...
Deep Learningを使っても株の勝率60%程度だと色々なブログで書かれており、自動売買は夢なのかな・・・。
pythonの学習とDeep Learningの学習、株のシステムトレードの学習再開という位置づけで、ゆっくり作るか・・・
と、考える猶予はない!
何度失敗したことか・・・
まずは
バックテスト環境を早く作ること
に注力します。
Python3で自作する事を検討
ネットで調べると情報が多すぎてどのライブラリを使うのが最適なのか迷ってしまいます。
まずは今どのようなライブラリがあるのか、主要なものだけリストアップしてみました。
ライブラリ名 | |
---|---|
フレームワーク | scrapy |
HTTPリクエストを行うライブラリ | requests |
htmlパーサのライブラリ | lxml |
HTMLを解析するライブラリ | beautifulsoup4 / pyquery |
【番外】スクレイピングライブラリ (python3 には未対応) |
mechanize |
このリストから考えると、想定しうる組み合わせは
- requests + beautifulsoup4 ( + lxml )
- requests + pyquery
- scrapy
という感じになりそうです。
beautifulsoup 4 系は htmlパーサを選べるようになったので、パーサに lxml を使うことでより高速に処理できます。
pyquery は jQuery ライクのセレクタを使えるライブラリで、内部では lxml が使われています。
scrapy は 2016年5月に公開された バージョン 1.1 から python3 に対応しました。
自動ログインしてみる
ログインの際に何をPOSTとして送ればよいのか調べるため、SBI証券のソースコードを読んでみました。
結果、パスワード入力の箇所は以下のようなフォームになってました。
1 2 3 4 5 6 7 8 9 10 |
<form class="margin-4" action="/ETGate/" method="post" name="form_login"> <input id="JS_FLG" name="JS_FLG" type="hidden" value="0" /> <input id="BW_FLG" name="BW_FLG" type="hidden" value="0" /> <input name="_ControlID" type="hidden" value="WPLETlgR001Control" /> <input name="_DataStoreID" type="hidden" value="DSWPLETlgR001Control" /> <input name="_PageID" type="hidden" value="WPLETlgR001Rlgn20" /> <input name="_ActionID" type="hidden" value="login" /> <input name="getFlg" type="hidden" value="on" /> <input name="allPrmFlg" type="hidden" value="on" /> <input name="_ReturnPageInfo" type="hidden" value="WPLEThmR001Control/DefaultPID/DefaultAID/DSWPLEThmR001Control" /> |
それを踏まえたアルゴリズムは、このようになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
import requests import codecs import re import urllib.parse url = "https://site1.sbisec.co.jp/ETGate/" post = { 'JS_FLG': "0", 'BW_FLG': "0", "_ControlID": "WPLETlgR001Control", "_DataStoreID": "DSWPLETlgR001Control", "_PageID": "WPLETlgR001Rlgn20", "_ActionID": "login", "getFlg": "on", "allPrmFlg": "on", "_ReturnPageInfo": "WPLEThmR001Control/DefaultPID/DefaultAID/DSWPLEThmR001Control", "user_id": "************", "user_password": "************" } #クッキーの定義 s = requests.Session() #post送信 res = s.post(url,data=post) #口座管理のURL stock_account_page = "https://site1.sbisec.co.jp/ETGate/" #GETの送信 res = s.get(stock_account_page) print(res.text) |
SBIバックアップサイトで自動ログインしてみる
ネットで自動化に関して調査していた「k.sbisec.co.jp」というドメインも見かけた。
こちらの方が、自動売買には最適そうです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
import requests import codecs import re import urllib.parse url = "https://k.sbisec.co.jp/bsite/visitor/top.do" post = { "username": "********", "password": "********", "login": " ログイン ", } #クッキーの定義 s = requests.Session() #post送信 res = s.post(url,data=post) #MenuのURL stock_menu_page = "https://k.sbisec.co.jp/bsite/market/menu.do" #GETの送信 res = s.get(stock_menu_page) print(res.text) |
ログインに成功。
ただ・・・
バックテスト可能な環境を早く得ないと始まらない。
には、ほど遠い気がする・・・。