テクニカル分析には過去の価格情報が欠かせません。
現在運用中のトレードプログラムは、
bitFlyer FX上で動かしています。
このトレードプログラムとは別で、
毎分1回bitFlyer FXからビットコインの
価格情報を取得してデータベースに保存しています。
テクニカル分析に用いるために、
取得した価格情報はデータベースへ保存し続けています。
今回は、価格情報を取得して保存しているプログラムをご紹介します。
データベース構築
プログラムの開発に入る前に
データを保存する箱を用意しておきます。
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回実行されるように
設定しておけば毎分の価格情報を保存することが可能です。