時系列DBのInfluxDBにビットコインのデータを入れて表示させマス。
一番取引量が多い取引所のBinanceのデータをinfluxdbに保存させます。pyhonのサンプルは多いですが、いつもnodeなのでnode.jsで実装しました。
ここではnode.jsでbinanceにwebsocket接続をし、1m,5m,30分単位のデータを保存させます。
まず、InfluxDBでBTC用のbucketを作成します。
このようにBTCが追加されました。
node.jsでアクセスするためにapi tokenを作成します。
既にあれば不要です。
無い場合は新しく作成してください。
binanceAPIを参照し、データを取得します。簡単なのはhttp requestですが、リアルタイム性 速度が重要なため、websocketでデータを受信します。 公式
binanceにweboskcetで接続するためには、単純にwss://addressで接続が可能です。 アドレスにシンボル(銘柄),種類(データ種類),インターバルを加えます。
//ビットコイン
//通貨USDT
//1mローソク足
let symbol = "btcusdt"
let interval = "1m"
let socket = new WebSocket(`wss://stream.binance.com:9443/ws/${symbol}@kline_${interval}`);
wesocketのメッセージ内容は、更新があった際データを受信します。そのため、1分の間に複数回受信されます。
socket.onmessage = (data)=>{
let msgdata = JSON.parse(data.data);
//ここ
}
それで、1分間のチャートが確定されたという情報は次の部分で判断できます。
socket.onmessage = (data)=>{
let msgdata = JSON.parse(data.data);
if(msgdata.k.x){
//1m更新情報確定
}
}
このdataは1mローソク足のopen,close,high,low,volumeが入っています。
msgdata.k = {
c: 1111,//クローズ
o: 1111,//オープン
h: 1111,//ハイ
l: 1111,//ロー
v: 1111,//ボリューム
}
1mローソク足の情報が取れたので、次にデータベースに入れていきます。 必要な情報は influxdata/influxdb-client
まずはライブラリーを追加します。 公式
npm install --save @influxdata/influxdb-client
npm install --save @influxdata/influxdb-client-apis
InfluxDBで作成した情報を入れていきます。
API tokenは分からない場合は作成してください。
Influxdbにjavascriptでアクセス、書き込みを行います。
import { InfluxDB, Point, ClientOptions } from '@influxdata/influxdb-client'
import WebSocket from "ws";
import dotenv from 'dotenv';
dotenv.config();
const symbol = "btcusdt";
const org = 'local';
const influxBucket = "BTC";
const influxPointname = "BTC/USDT"
let writeApi;
writeApi = influxdb.getWriteApi(org,influxBucket);
const point = new Point(influxPointname)
.tag('interval', interval)
.timestamp(data['t'] * 1e6)
.floatField('close', parseFloat(data['c'])) // Changed from fields to field
.floatField('open', parseFloat(data['o']))
.floatField('high', parseFloat(data['h']))
.floatField('low', parseFloat(data['l']))
.floatField('volume', parseFloat(data['v']));
writeApi.writePoint(point);
正常に書き込みができるとfilterにintervalが増えています。30mは30分後に正常に書き込みが完了しないと追加されません。そのため、1mが追加できていれば成功しているはずです。
グラフで見ると
influxdbにBTCのデータを書き込むことができました。使っていると4h,1dが書き込めていない、5mが一定期間書き込めていない状況が発生していました。ログも確認しましたが、何もなく...何が問題なのかもう少し長期で様子見をする必要がありますが、安定してデータを取得できました。
influxdbでグラフで見ることができますが、grafanaがやっぱりカスタマイズできるのでgrafanaも入れる方が良いと思いました。
質問や、間違いがありましたら、お気軽にどうぞ
※お名前とコメントの内容を入力してください。
※全てこのブログ上に公表されます。
※許可なく管理者によって修正・削除する場合がございます。 詳しくはプライバシーポリシーを参照ください