【python/bitFlyer】目指せ仮想通貨自動売買システム開発!Public API その3 tickerをDBに保存/蓄積する

python
スポンサーリンク

このシリーズではbitFlyer Lightning APIを使用することで、常に情報収集/テクニカル分析し、 ここだと思えるタイミングで自動売買を行えるシステム開発を目指します。

今回は、取得したTickerをSQL Serverに保存してみようと思います。

-- 実行環境 --
Windows 10 64ビット版(1903)、python 3.7.4

-免責事項-
当サイトに掲載された内容によって生じた損害等の一切の責任を負いかねます。当サイトの情報を利用する場合には、自己責任でご利用下さい。

API制限
HTTP API は、以下のとおり呼出回数を制限いたします。
Private API の呼出は 5 分間で 500 回を上限とします。上限に達すると呼出を一定時間ブロックします。また、ブロックの解除後も呼出の上限を一定時間引き下げます。同一 IP アドレスからの API の呼出は 5 分間で 500 回を上限とします。上限に達すると呼出を一定時間ブロックします。また、ブロックの解除後も呼出の上限を一定時間引き下げます。

0.1 以下の数量の注文は、すべての板の合計で 1 分間で 100 回を上限とします。上限に達するとその後 1 時間は 1 分間で 10 回まで注文を制限します。システムに負荷をかける目的で注文を繰り返していると当社が判断した場合は、API の使用を制限することがあります。ご了承ください。

bitFlyer API API Documentation より抜粋
スポンサーリンク

事前準備

まず初めに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 の認証について紹介したいと思います。

コメント

タイトルとURLをコピーしました