テクニカル分析には過去の価格情報が欠かせません。
現在運用中のトレードプログラムは、
bitFlyer FX上で動かしています。
このトレードプログラムとは別で、
毎分1回bitFlyer FXからビットコインの
価格情報を取得してデータベースに保存しています。
テクニカル分析に用いるために、
取得した価格情報はデータベースへ保存し続けています。
今回は、価格情報を取得して保存しているプログラムをご紹介します。
Contents
データベース構築
プログラムの開発に入る前に
データを保存する箱を用意しておきます。
MySQLを使用しています。
CREATE TABLE `ticks` ( `id` bigint NOT NULL AUTO_INCREMENT, `tick_id` int DEFAULT NULL, `exchange_id` int DEFAULT NULL, `product_code` varchar(20) DEFAULT NULL, `alias` varchar(20) DEFAULT NULL, `best_bid` decimal(15,8) DEFAULT NULL, `best_ask` decimal(15,8) DEFAULT NULL, `best_bid_size` decimal(12,8) DEFAULT NULL, `best_ask_size` decimal(12,8) DEFAULT NULL, `total_bid_depth` decimal(15,8) DEFAULT NULL, `total_ask_depth` decimal(15,8) DEFAULT NULL, `ltp` decimal(15,8) DEFAULT NULL, `volume` decimal(15,8) DEFAULT NULL, `volume_by_product` decimal(15,8) DEFAULT NULL, `timestamp` datetime DEFAULT NULL, `created_at` datetime DEFAULT CURRENT_TIMESTAMP, `updated_at` datetime DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`), KEY `index_ticks_on_exchange_id` (`exchange_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
tick情報取得・保存プログラム
次に、bitFlyer FXからtick情報を取得、
保存するプログラムをご紹介します。
import bitflyerApi
import pymysql
import configparser
import os
import sys
config = configparser.ConfigParser()
config.read(os.path.dirname(os.path.abspath(__file__)) + "/config.ini")
argvs = sys.argv
account_id = argvs[1]
exchange_id = 1
db_host = config.get('db', 'host')
db_user = config.get('db', 'user')
db_pass = config.get('db', 'pass')
db_name = config.get('db', 'name')
product_code = 'FX_BTC_JPY'
dbh = pymysql.connect(
host=db_host,
user=db_user,
password=db_pass,
db=db_name,
charset='utf8',
cursorclass=pymysql.cursors.DictCursor
)
def get_ticks_sql(data):
trading_time = data['timestamp']
sql = "INSERT INTO ticks ( product_code, alias, \
timestamp, tick_id, exchange_id, best_bid, best_ask, best_bid_size, \
best_ask_size, total_bid_depth, total_ask_depth, \
ltp, volume, volume_by_product) VALUES ('%s', '%s', \
'%s', %s, %s, %s, %s, %s, \
%s, %s, %s, \
%s, %s, %s) " % (data['product_code'], data['product_code'], \
trading_time[:19],data['tick_id'], exchange_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'])
return sql
def insert_data(sql):
stmt = dbh.cursor()
stmt.execute(sql)
dbh.commit()
stmt.close()
if __name__ == '__main__':
api = bitflyerApi.bitflyerApi(account_id)
result = api.get_ticker(product_code)
sql = get_ticks_sql(result)
insert_data(sql)
読み込んでいるbitflyerApiは、
bitFlyer APIを呼び出す自作のプログラムです。
以下の記事で紹介していますのでご参考ください。
config.iniは、bitflyerApiでも用いているもので、
ここにDB接続情報を記載しています。
下記のように記載します。
[db] host = ホスト名 user = 接続ユーザー名 pass = 接続パスワード name = DB名
まとめ
get_ticks.pyを実行するたびに
ticksテーブルにデータが保存されます。
クーロンで1分間に1回実行されるように
設定しておけば毎分の価格情報を保存することが可能です。




