自動売買Botのテストにデータベースを使おう! 登録~取得まで Bitmex用 python3 SQLite3 仮想通貨

URLからリクエスト投げたり、APIを使用してローソク足のデータを取得している方がほとんどだと思います。ただやっぱりデータの取得に失敗したり、テストする時に毎回取得するのもなんか嫌ですよね・・・(笑)
データベースを使用すれば必要なデータだけを必要な時に取得できるんで、やっぱ使いやすいです!
データベースを使用した事ない方も今回のnoteを通して便利さを分かってもらえると思います。

今回はSQLiteというデータベースを使用していきます。(開発環境はCloud9)
今回紹介するソースは以下の通りです。
①メイン処理
②テーブル作成の関数(makeTable)
③データ登録の関数(Insert)
④データの取得の関数(Select)
⑤テーブルの存在確認の関数(tExist)
※すべてのソースは最後に載せています。

データベースの構造
◆テーブル名:t_data

画像1

◆処理の流れ
 ①:「t_data」の存在確認
 ②:①でテーブルがなければテーブル作成
 ③:ローソク足でデータを取得
 ④:「t_data」に③のデータを登録
 ⑤:登録したデータの取得(全件取得)
 ⑥:登録したデータの取得(条件指定)

以下がメイン処理のソースになります。※メイン処理のみでは動きません。

#!/usr/bin/python3
import time
import requests
import sqlite3

#DBファイルパス
db = './trade.db'
#DBテーブル名
table = 't_data'
#DB接続とカーソル生成
connection = sqlite3.connect(db)
#自動コミットON
connection.isolation_level = None
cursor = connection.cursor()

resolution = 1440           #取得する足
from_date = 10               #何日前のデータから取得するか指定 
try:
  if makeTable(cursor):
     now = int(time.time())#unix-time
     url = 'https://www.bitmex.com/api/udf/history?symbol=XBTUSD&resolution='
     url += str(resolution) +'&from=' + str(now-60*60*24*from_date) + '&to=' + str(now)
     candles = requests.get(url)
     tohlcv = candles.json()
     length = len(tohlcv['t'])
     t_val = tohlcv['t']
     o_val = tohlcv['o']
     h_val = tohlcv['h']
     l_val = tohlcv['l']
     c_val = tohlcv['c']
     v_val = tohlcv['v']
      #データの登録      for i in range(length):
        res = Insert(cursor, resolution, t_val[i], o_val[i], h_val[i], l_val[i], c_val[i], v_val[i])
     #データ取得(条件を指定しない場合)
     result = Select(cursor)
     print('****All Data****')
     for val in result:
        print(val)
     #データ取得(条件を指定する場合)
      #終値が9000ドル以上のデータだけ取得      result = Select(cursor, 'where close>9000')
     print('****Close>9000****')
     for val in result:
        print(val)
except Exception as e:
   print('[main] error ' + str(e))

# 接続を閉じる
connection.close()

プログラム初回起動時は、もちろんデータベースが存在しないので、テーブル作成を行います。その際に自動的にデータベースファイルが作成されます。(今回は「trade.db」)このファイルにデータが入っています。SQLiteは1つのファイルで管理できるので初心者の方でも管理がしやすいです。
実行結果はこんな感じです。プログラムと同じ階層にデータベースファイルができます。

画像2

そして、データの取得結果がこんな感じです。10日前からの日足データを登録しているので、全部で11件の表示、そして条件指定で終値が9000ドル以上のデータのみの表示もできています。

画像3

こんな感じで金額指定でも日時指定でも自分の欲しいデータだけを取得できるのでデータベースは超便利です!

今回は日足データのみですが、5分足や1時間足を登録したい場合はパラメーター「resolution」の値を変更して登録して下さい。

以下がすべてのソースコードになります。ぜひテスト用等にご活用ください。

※注意
ローソク足データの取得ですが、1度に最大で取得できるデータの個数が10080本分みたいのなので、
1分足にすると7日前までしか取得できませんので注意してください。
7日前より過去のデータが必要な場合は、ローソク足データの取得を何回かに分けて下さい。

ここから先は

3,466字

¥ 100

この記事が気に入ったらサポートをしてみませんか?