見出し画像

仮想通貨bot 勉強記録⑥

~PybybitでBybitに注文を出してみる~

前回までのあらすじ

教科書の第2回:4まで終了しました。

第2回:5はなんとな~く理解した(してない)ので読み飛ばし、第3回:1を読んでbybitのテストネットキーとメインネットキーを入手しました。

なので今回は、第3回:2買い注文を出してみよう を進めていきます。

読み進めると分かりますが、この記事はbitflyer向けです。bybitのAPIとbitflyerのAPIが全然違うので、コピペできません(無念)

しょうがないので、bybitのAPI仕様書を読みながらやっていこうと思ったんですが、色々調べてみるとbybitの公式APIは使いづらいらしい。。。知らんけど。

そこで、まちゅけんさんという方が作成したpybybitというモジュールを有難く使わせていただきます。

ちなみに記事冒頭にこんな記載が、、、

画像1

くぅ~!”技術的な意味を理解”とは程遠いけど、気合で乗り越えるしかあるまい。。。ということで、まずはインストールしましょう。

pip install git+https://github.com/MtkN1/pybybit.git

このコードをコピペしてEnterでインストールできます。
サンプルコードも載っているので、しっかり見ておきましょう。
ちなみに僕は何が書いてあるのかほとんど分かりませんでした()

※2021/04/14追記
先にGit for Windowsをインストールする必要があります。
以下を参考にインストールしてください。

それでは早速買い注文を出すコードを作っていきます。

まずは必要なモジュールをインポートします。サンプルコードはpprintモジュールからpp関数をインストールしていましたが、見やすくてお気に入りのrichのprint関数にしておきます。

import pybybit
from rich import print as pp
import time

次にAPI情報を入力
テスト用なので、テストネットのAPIキーを入力します。

# API情報を入力
apis = [
   'YOUER_API_KEY',
   'YOUER_API_SECRET'
]

APIクラスト作成
テストネットなので、testnet=Trueです。
なんでパラメータのapisの前に*マークが付いているのかは分かりません。

3/19追記
Pythonのテクニックで、*をつけると、リストの中身を全て展開して引数として渡せるそうです。参考サイト
まちゅけんさん教えてくださりありがとうございます!

bybit = pybybit.API(*apis, testnet=True)

サンプルコードには他にも準備コード(?)のようなもの(データストアクラスの生成や、コールバック関数の追加など)が書いてありますが、今回は買い注文を出すだけなので要らないっぽいです。

サンプルコードの下の方に行くと、有難いことにBTCUSDで買い注文を出す関数が書いてありました。感謝!

def limitorder_sample():
   # インバース契約 BTCUSD 7000USD 10契約 PostOnly 買い で指値注文送信
   r = bybit.rest.inverse.private_order_create(side='Buy', symbol='BTCUSD',
    order_type='Limit', qty=10, price=7000, time_in_force='PostOnly')
   pp(r.json())

これを使えば買い注文を出せてしまいますが、勉強なので解読していきます。

1行目:初登場の"関数"です。これはpython1年生で理解しました。

簡単に言うと、関数の名前を決めて、中に実行時の処理を書いておくと、関数名を呼び出したときに中の処理を実行してくれます。
(なんか小泉構文みたいになってしまった。)

2行目:変数rに、bybit.rest.inverse.private_order_createという情報を入れています。
これはbybitモジュールのprivate_order_create関数を呼び出してるってことですね。​
ってことは、()の中身はprivate_order_create関数に入れるパラメータですね。

いやめっちゃ成長したな自分。ムスカの気分ですわ(読める、読めるぞ!)

bybitモジュールを使ってるってことは、bybitの公式APIを見ればパラメータが分かる気がするので確認します。

ありましたprivate_order_createの項目!

画像2

サンプルコードと照らし合わせていきます。

(side='Buy', symbol='BTCUSD',
order_type='Limit', qty=10, price=7000, time_in_force='PostOnly')
side(買いか売りか):必須、BuyかSellどちらか
symbol(ペア):必須、インバース形式の4ペアのうちどれか
order_type(指値/成行):必須、LimitかMarket
qty(いくら分買うか):必須、単位はUSD
price(値段の指定):Limitの時は必須、Marketの時は不要
time_in_force(注文の有効期限):Limitの時は必須、Marketの時は不要
       多分PostOnlyかGoodTillCanselledかReduceOnlyのうちどれか

time_in_forceについては、bybitに説明のページがありました。読めば大体わかります。
Post_Onlyっていうのは、”指値で買えなかったら即時キャンセルする”みたいな意味だったと思います。(適当ですみません調べてください)

コードの意味が分かったところで、実行してみます。コードはこちら

import pybybit
from rich import print as pp
import time

apis = [
   'プライベートキー',
   'シークレットキー'
]

bybit = pybybit.API(*apis, testnet=True)

def limitorder_sample():
   # インバース契約 BTCUSD 7000USD 10契約 PostOnly 買い で指値注文送信
   r = bybit.rest.inverse.private_order_create(side='Buy', symbol='BTCUSD', order_type='Limit', qty=10, price=7000, time_in_force='PostOnly')
   pp(r.json())

limitorder_sample()

結果は、、、

画像3

注文できた!

画像4

Anacondaも喜んでいます。

今回はここまで。次回は教科書の第3回:3 CCXTライブラリのインポート
の予定でしたが、今回インストールしたpybybitが、bybitにおけるCCXTライブラリの上位互換なので、飛ばします。まちゅけんさんに感謝。
また、第3回:4はCCXTライブラリを使って買い注文を出す ですが、さっきpybybitで注文を出せたので飛ばします。

なので、次回は教科書の第3回:5のタイトルを変更し、
pybybitで未約定の注文をキャンセルする
をやっていきます。

この記事が気に入ったらサポートをしてみませんか?