このシリーズではbitFlyer Lightning APIを使用することで、常に情報収集/テクニカル分析し、 ここだと思えるタイミングで自動売買を行えるシステム開発を目指します。
今回は、取得したTickerをSQL Serverに保存してみようと思います。
-- 実行環境 --
Windows 10 64ビット版(1903)、python 3.7.4
API制限
bitFlyer API API Documentation より抜粋
HTTP API は、以下のとおり呼出回数を制限いたします。
Private API の呼出は 5 分間で 500 回を上限とします。上限に達すると呼出を一定時間ブロックします。また、ブロックの解除後も呼出の上限を一定時間引き下げます。同一 IP アドレスからの API の呼出は 5 分間で 500 回を上限とします。上限に達すると呼出を一定時間ブロックします。また、ブロックの解除後も呼出の上限を一定時間引き下げます。
0.1 以下の数量の注文は、すべての板の合計で 1 分間で 100 回を上限とします。上限に達するとその後 1 時間は 1 分間で 10 回まで注文を制限します。システムに負荷をかける目的で注文を繰り返していると当社が判断した場合は、API の使用を制限することがあります。ご了承ください。
事前準備
まず初めにSQL Serverのインストールが必要です。今回はマイクロソフトの SQL Server 2017 Express Edition を使用します。このサンプルでは下記で作成したテーブルに書き込みを行うことを目標とします。
pythonからデータベースへのアクセスには pyodbc を使用します。コマンドプロンプトから下記コマンドでインストールを行ってください。
pip install pyodbc
Tickerの書き込み
データベースに接続してTicker情報を書き込みます。
SQL Serverに接続
SQL Serverに接続します。SQL Serverをインストールした端末で実行することを想定したサンプルを下記に記載します。
import pyodbc
con = pyodbc.connect( 'DRIVER={SQL Server};SERVER=localhost\AutoTrading;DATABASE=bitFlyer_DB')
cur = con.cursor()

SERVERとDATABASEのパラメーターはインストールしたときのパラメーターに変更してくださいね。
テーブルへ書き込み
接続したSQL Server のテーブルにデータを書き込みます。サンプルはSQL Serverインストール編で作成したテーブル「TB_Ticker」に書き込みを行います。
sql = "INSERT INTO TB_Ticker VALUES ( '{}', '{}', {}, {}, {}, {}, {}, {}, {}, {}, {}, {})".format( 'BTC_JPY', data['timestamp'], data['tick_id'], data['best_bid'], data['best_ask'], data['best_bid_size'], data['best_ask_size'], data['total_bid_depth'], data['total_ask_depth'], data['ltp'], data['volume'], data['volume_by_product'],)
cur.execute( sql)
Ticker保存サンプルプログラム
定期的(20秒毎)にTickerを取得してDBに保存するサンプルです。終了判定入れていないのでCtrl+Cで抜けて下さい(笑)
import requests
import json
import time
import pyodbc
def main():
print( "終了するときは 【Ctrl】+C で抜けて下さい。")
while True:
# Ticker 取得
html = requests.get("https://api.bitflyer.com/v1/getticker?product_code=BTC_JPY")
data = json.loads( html.text)
print( data)
# DB接続
con = pyodbc.connect( 'DRIVER={SQL Server};SERVER=localhost\AutoTrading;DATABASE=bitFlyer_DB')
cur = con.cursor()
# クエリ
sql = "INSERT INTO TB_Ticker VALUES ( '{}', '{}', {}, {}, {}, {}, {}, {}, {}, {}, {}, {})".format( 'BTC_JPY', data['timestamp'], data['tick_id'], data['best_bid'], data['best_ask'], data['best_bid_size'], data['best_ask_size'], data['total_bid_depth'], data['total_ask_depth'], data['ltp'], data['volume'], data['volume_by_product'],)
# 書き込み
cur.execute( sql)
cur.commit()
con.close()
time.sleep(20)
if __name__ == '__main__':
main()
結果
SSMSでテーブル「TB_Ticker」のデータを確認した結果です。データが追加されて行っているのが分かります。

まとめ
今回は bitFlyer Lightning API を使用して Ticker を取得しデータベースへ保存しました。そのうちに蓄積したデータを用いて移動平均などを求め、「買い」なのか「売り」なのか判定するプログラムを作成してみたいと思います。
次回はPrivate API の認証について紹介したいと思います。
コメント