株の自動売買をしてみる:トークンを発行する
auカブコム証券には、株取引用のAPI「kabuステーション®API」
が用意されています。 このAPIを利用して株の自動売買に挑戦してみようと思います。
環境
設定
auカブコム証券に口座を開設し、 https://kabucom.github.io/kabusapi/ptal/howto.html にしたがってkabuステーションの設定をします。
サンプルコードでトークンを発行してみる
ここにサンプルコードがあったので、そのまま利用してトークンを発行してみます
# kabusapi_token.py import urllib.request import json import pprint obj = { 'APIPassword': 'testtest' } json_data = json.dumps(obj).encode('utf8') url = 'http://localhost:18081/kabusapi/token' req = urllib.request.Request(url, json_data, method='POST') req.add_header('Content-Type', 'application/json') try: with urllib.request.urlopen(req) as res: print(res.status, res.reason) for header in res.getheaders(): print(header) print() content = json.loads(res.read()) pprint.pprint(content) except urllib.error.HTTPError as e: print(e) content = json.loads(e.read()) pprint.pprint(content) except Exception as e: print(e)
検証用の環境で試したいので、検証用APIPassword
を設定し、urlもurl = 'http://localhost:18081/kabusapi/token'
にします。
$ python kabusapi_token.py
で実行すると、
ステータスコードと、ヘッダー情報とともにTokenが返ってきていることがわかります。
※検証用の環境とはいえ、Tokenは一部のみ表示しています。
トークンの取得が成功しました。 このトークンを使って、売買していきますが、その前に、このコードを呼び出し易いようにしておきます。
main.pyからTokenManagerクラスを呼び出す
Pythonぽく、main.pyからソースコードを呼び出すようにします。
# main.py from src.token_manager import TokenManager if __name__ == '__main__': TokenManager.fetch_token()
Tokenを管理するクラスを用意します
# token_manager.py import urllib.request import json class TokenManager: @staticmethod def fetch_token(): obj = {'APIPassword': 'testtest'} json_data = json.dumps(obj).encode('utf8') url = 'http://localhost:18081/kabusapi/token' req = urllib.request.Request(url, json_data, method='POST') req.add_header('Content-Type', 'application/json') try: with urllib.request.urlopen(req) as res: content = json.loads(res.read()) print(content['Token']) except urllib.error.HTTPError as e: content = json.loads(e.read()) print(content) except Exception as e: print(e) return None
コマンドライン引数を使用して実行する
本番用と検証用の環境を簡単に切り替えたいので、 コマンドライン引数で環境を指定してスクリプトを実行できるようにしてみます
# config.py class Config: ENV_TEST = { 'APIPassword': 'testtest', 'URL': 'http://localhost:18081/kabusapi/token' } ENV_PROD = { 'APIPassword': '********', 'URL': 'http://localhost:18080/kabusapi/token' }
設定ファイルを用意しました。
# main.py from src.token_manager import TokenManager import argparse parser = argparse.ArgumentParser(description='Fetch API token') parser.add_argument('--env', choices=['test', 'prod'], default='test', help='Specify environment (test or prod)') args = parser.parse_args() if __name__ == '__main__': TokenManager.fetch_token(args.env)
コマンドライン引数で、検証用と本番用の環境を切り替えて実行できるようにします。 開発中なので、デフォルトは検証用の環境にしました。
# テスト環境でのトークン取得 $ python main.py --env test # 本番環境でのトークン取得 $ python main.py --env prod
次は検証用の環境で発注をしてみようと思います。