久々の投稿です。
仕事も少しずつ忙しくなってきていますが、趣味プログラミングも続けています。
最近新たに考え始めているのが、Bitcoinの自動取引botの製作です。
データ処理や機械学習に関して全く知識が無いので、かなり初歩的なところから実践になると思いますが。
まず、Bitcoinの価格変動の特性を知るため、取引価格のデータロガーを作ってみました。
開発環境
言語はNode.jsです。
いつか多人数接続型ゲームを作りたいので、その勉強がてらということで採用。
Node.jsサーバーとしては、お古のスマホを使いました。普段使うPCをずっとつけっぱなしにするのは嫌なので、Servers Ultimate Proというアプリを使い、スマホ上にNode.jsサーバーを立ち上げました。
取引所はbitFlyerのBTC/JPYです。bitfFlyer Lightning APIを用いて価格取得を行います。
要件
- 5秒ごとにリクエストを送り、データを取得・記録する
- 対象データは最終取引価格とする
- 記録はcsv形式として、単一のファイルに追記していく
ソース
'use strict'; /* Require */ var request = require("request"); var crypto = require("crypto"); var cron = require("node-cron"); var fs = require("fs"); /* constant for API */ const key = "秘密"; const secret = "秘密"; const apiUrl = "https://api.bitflyer.com/v1/getticker"; /* constant for Logging */ var pathPrefix = "/storage/emulated/0/__ultimate_server/__logFile/"; var logFilePath = pathPrefix + "log.csv"; /* parameters for API-getTicker */ var options = { url: apiUrl, method: "GET", form: {"product_code": "BTC_JPY"}, json: true, } /* cron working every 5sec */ cron.schedule("*/5 * * * * *", () => { /* GET Req to API-getTicker */ request(options, (err, res, body) => { if (err){ console.log("Error: " + err.message); return; } /* creating output line */ var outputLine = [ body.timestamp, body.best_bid, body.best_ask, body.total_bid_depth, body.total_ask_depth, body.ltp, //Last Trade Price body.volume ].join(","); console.log(outputLine); /* write the output to local */ fs.appendFile(logFilePath, outputLine+"\n", (err) => { if(err) { console.log(err); } }); }); });
最終取引価格以外にも、取れるなら取っておこう精神で、とりあえず最高買値やら最低売値やら記録してます。
結果
こんな感じにデータ取れました。2019-10-21T17:05:40.553,887691,888158,2099.38694713,2013.00988734,888084,96415.62493796 2019-10-21T17:05:43.29,887691,888156,2099.591124,2013.36406421,888084,96415.77283595 2019-10-21T17:05:50.033,887696,888084,2098.56487012,2013.13071033,888084,96413.55523049 2019-10-21T17:05:54.733,887690,888167,2099.49258136,2012.16042158,888084,96413.79270283 2019-10-21T17:06:00.307,887690,888166,2099.60658122,2009.92589631,888084,96417.47290789 2019-10-21T17:06:05.023,887775,888166,2099.49658136,2011.09942158,888084,96418.89188389 2019-10-21T17:06:09.76,887693,888367,2099.92128043,2012.97508641,888084,96414.38448725 2019-10-21T17:06:13.603,887710,888366,2099.92128057,2011.17508655,888084,96413.73498725 2019-10-21T17:06:19.58,887716,888366,2099.93128043,2013.16508641,888084,96401.22671839 2019-10-21T17:06:25.017,887761,888442,2099.93128057,2011.17478655,888084,96395.31327489 …略
グラフにしてやるとこんな感じです。
まとめ
とりあえずデータを取るとこまでは完成です。
過去のデータが欲しくなった場合は、Bitcoincharts.comに溜め込まれているcsvを処理すればいいかなと。
(元々はここのcsvをデータ処理して終わりのつもりでしたが、半年前くらいからデータログ止まっている、ファイルサイズが膨大過ぎる、一定周期毎ではなく逐次取引毎のログである、等々の理由があって変更しました)
次は、ログを取ったデータの解析にトライしてみようと思います。おわり。
[Tag] * JavaScript
Last Modified : 2019-10-24