
仮想通貨bot 勉強記録⑤
~BybitのAPIを使ってみる~
前回までのあらすじ
第2回:3まで終了しました。
このまま教科書通りに進めたいんですが、僕はbitflyerを使えないので、bybitのbotを作らないといけません。なので、ここからは教科書の内容をbybitに置き換えて進めていきます。
次は第2回:4 ”cryptowatchから数字を取り出す” なんですが、残念なことにcryptowatchのAPI取引所リストを確認しても、bybitがありません。なんでやねん。。。
ということで、cryptowatchではなく、bybitの公式APIを使ってみます。初見ではマジで意味不明です。読む気すら起こりません。。。が、読まないことには進まないので頑張りましょう。
まず、bybitの公式API仕様書について
左側のリストがメニューで、上のInverseとかUSDTとかは取引形態です。項目が分かれてるってことは、取引形態によってAPIが違うってことですねたぶん。
まずは仕様書からローソク足の項目を探します。chromeを使えば日本語に翻訳してくれるので、適宜使っていきます。ちなみにローソク足は英語だとKlineです。
ありました。MarketDataEndpointsのQueryKlineという項目です。
ここにbybitのAPIの使い方が書いてあります。
parameterがKline情報を呼び出す際に使うパラメータです。
右のrequiredは、そのパラメータが必須かどうかで、trueになっている項目は入力しないとデータを取得できません。
更に右のtypeはパラメータを入力する際のデータのタイプです。stringは文字で、integerは整数です。この辺は結構基礎知識らしく、python1年生の最初のほうに書いてありました。
ちなみに仕様書の右側には、APIの使用例と応答例が書いてあります。
bybitのAPIの使い方が分かったところで、教科書に戻ります。
2018年1月16日の日足のローソク足を取り出します。
とりあえずbybitAPI仕様書の、ローソク足の取り出し方使用例をコピペしましょう。
import bybit
client = bybit.bybit(test=True, api_key="api_key", api_secret="api_secret")
print(client.Kline.Kline_get(symbol="BTCUSD", interval="m", **{'from':1}).result())
このコードがどんなデータを呼び出すのか確認します。
1行目:bybitモジュールのインポート
2行目:テストネットかどうかの選択(bybitは本番用とテスト用がある)、APIキーとシークレットキーの入力を行う。
ただ、KlineはMarketData(公用データ)なので、それぞれのキーを入力する必要はない。
3行目:Klineの取得に必要なパラメータを入力し、出力
例だと、ペア:BTCUSD、月足、タイムスタンプ1(最初から?)
なるほど。2行目のfromのパラメータ入力のやり方が謎ですが、とりあえず実行してみよう。
おぉ、、、見にくい、、、
richのprint関数を使ってもう一度実行します。さっきのコードの2行目に追記して、、、
from rich import print
見やすいわ~。
関係ないけど、実行したときに文字がズラーッと出てきてかっこよかった(語彙力)
ここで問題発生。取得した1本目のローソク足のタイムスタンプを変換してみると、、、
2018/12/01だと!教科書の練習問題は2018/01/16のローソク足を取り出すことだったので、練習問題の再現ができないじゃないか。
Bybitの設立が2018年末ってことなんですかね?まぁいいや。
代わりに2019/11/11の日足ローソク足を取得してみます。
タイムスタンプは1573430400なので、from:には1573430400を入力。
日足のデータが欲しいので、interval="d"
使用例にはパラメータのlimitが使われていなかったけど、今回はローソク足1本だけ取得できればよいので、limit=1を追記して、、
出来上がったコードはこちら
import bybit
from rich import print
client = bybit.bybit(
test=True,
api_key="api_key",
api_secret="api_secret")
print(client.Kline.Kline_get(
symbol="BTCUSD",
interval="d",
**{'from':1573430400},
limit="1").result())
実行すると、、、
取得できました!
でも最後の1文が謎だ。
bravadoモジュールの、requests_client関数内のRequestsResponseAdapterのデータが****ってこと?(見せていいデータなのか分からずとりあえず隠した)
分かる人いましたら教えてください<(_ _)>
とりあえず今回はここまで。