pybitflyerなるものを使えば、bitFlyerの取引を自動化できる?
pybitflyerを使うことで、bitFlyerの取引を自動化することができます。
本記事ではpybitflyerを導入/インストールし、簡単な自動売買プログラムを動かす方法をご紹介します。
もくじ
pybitflyerとは?
本格的な説明に入る前に、用語を確認しておきます。
pybitflyerとは、Pythonというプログラミング言語のライブラリ(追加パッケージ)で、無償で利用することができます。開発者はyag_aysさんという方です。
PythonだけではbitFlyerと互換性がないのですが、pybitflyerを導入することで、PythonとbitFlyerを連携させることができます。
(pybitflyerは、裏側ではbitFlyerのAPIというものを利用しています。APIについては、過去記事を参照してください)
pybitflyerの導入と動作試験
pybitflyerの導入と、動作試験をしていきます。5分で終わります。簡単です。
pybitflyer利用のために、Google Colab を起動する
こちらのリンクから、Google Colabへアクセスしてください。Google ColabはGoogleが無償で提供している、Pythonというプログラミング言語のプログラミング環境です。
“NEW NOTEBOOK”をクリックすると、プログラミング画面が開きます。

Google Colab 上で、pybitflyerプログラミング
プログラミング画面が表示されたら、下記の赤枠部分に、

このプログラムをコピペしてください。
!pip install pybitflyer import pybitflyer pybitflyer.API().board(product_code='FX_BTC_JPY')
そして再生ボタンをクリックし、プログラムを実行させます。

そうすると、bitFlyer (BTC-FX/JPY) の板情報が表示されます。

実は先程のプログラミングは、1行目(!pip install pybitflyer
)でpybitflyerの導入を行い、2/3行目でbitFlyerの板情報取得を行うものでした。
おめでとうございます! これで既に、pybitflyerの導入と動作試験が完了しました。
pybitflyerで指定の価格で買って、指定の価格で売る
それでは実際に、自動で売り買いするプログラムを書いていきましょう。
なお、こちらの記事のStep3までを参照しつつ、APIキーとAPIシークレットの2つを取得しておいてください。
Google Colab左上の”+ Code”ボタンをクリックして、新しいプログラム用の箱を作ります。

買い注文を出したい価格、ターゲットとする価格、注文の数量を指定します。それぞれの数字を自分の好きなものに変更した上で、新しい箱にコピペしてください。
buy_price = 1989850 target_price = 1999000 size = 0.01
上記のプログラムをコピペして実行すると、下記のような画面になるはずです。

5秒おきに価格を取得する下記のプログラムを、”+ Code”で新しい箱を作り、その中で動かしてみます。
from time import sleep api = pybitflyer.API() while True: print(api.board(product_code='FX_BTC_JPY')['mid_price']) sleep(5)
そうすると下記のように、5秒毎に価格が表示されるはずです。止める際には、下図赤丸部分の停止ボタンをクリックしてください。

同じ箱を下記のように書き換えて、実際に売買 (成行注文) するプログラムを動かしてみましょう。APIキーとAPIシークレットは、ご自身のものに書き換えてください。
from time import sleep api_key = 'S7quKTdao0Cd2klfofa0pf' api_secret = 'FK98G3bedJK8K8imvGF10p5pvdf89LK6X98I1Pilk90=' api = pybitflyer.API(api_key=api_key, api_secret=api_secret) buy_flag = False while True: price = api.board(product_code='FX_BTC_JPY')['mid_price'] print(price) if not buy_flag and price < buy_price: api.sendchildorder(product_code='FX_BTC_JPY', child_order_type='MARKET', side='BUY', size=size, ) buy_flag = True if buy_flag and price > target_price: api.sendchildorder(product_code='FX_BTC_JPY', child_order_type='MARKET', side='SELL', size=size, ) buy_flag = False sleep(5)
先程と同じように動くはずです。画面では見えませんが、設定した価格によって実際に売買が走ります。止め方は先程と同じです。

解説: sleep関数を使う準備 – pybitflyer
5秒ごとに処理を行うために、sleep関数というものを利用しています。そしてこの関数を利用するための下準備を、下記のプログラムで行っています。
from time import sleep
解説: API利用のための登録 – pybitflyer
pybitflyerではbitFlyerのAPIを利用しており、APIキー/シークレット (パスワードのようなもの) をプログラム中で登録する必要があります。
下記のプログラムが、その登録を行っている部分です。
api_key = 'S7quKTdao0Cd2klfofa0pf' api_secret = 'FK98G3bedJK8K8imvGF10p5pvdf89LK6X98I1Pilk90=' api = pybitflyer.API(api_key=api_key, api_secret=api_secret)
解説: 買い注文済みフラグの登録 – pybitflyer
プログラムの中で、買い注文を出したかどうかを覚えておくための変数を用意しておく必要があります。下記プログラムが、該当部分です。
buy_flag = False
解説: 繰り返し処理 – pybitflyer
5秒ごとに同じ処理を繰り返すため、下記のようにwhile文とsleep関数を利用しています。sleep関数は、引数の秒数間だけ処理を止めるものです。
while True: ... sleep(5)
解説: 現在価格の取得と表示 – pybitflyer
板情報から現在価格を取得し、それをprint関数で表示しています。
この処理はwhile文の中にあるため、5秒ごとに毎回実行されます。
price = api.board(product_code='FX_BTC_JPY')['mid_price'] print(price)
解説: 買い注文 – pybitflyer
買い注文をまだだしておらず (not buy_flag
)、かつ (and
) 現在価格が設定価格を下回っている (price < buy_price
) 場合、買い (side='BUY'
) の注文 (sendchildorder
) を出します。
if not buy_flag and price < buy_price: api.sendchildorder(product_code='FX_BTC_JPY', child_order_type='MARKET', side='BUY', size=size, ) buy_flag = True
解説: 売り注文 – pybitflyer
買い注文を出しており (buy_flag
)、かつ (and
) 現在価格が設定価格を上回っている (price > target_price
) 場合、売り (side='SELL'
) の注文 (sendchildorder
) を出します。
if buy_flag and price > target_price: api.sendchildorder(product_code='FX_BTC_JPY', child_order_type='MARKET', side='SELL', size=size, ) buy_flag = False
pybitflyerで過去の値幅を見ながら、自動売買する
自分で売買価格を設定するようでは、まだ自動とは言えません。直近10分間の1分足を見て、その底値で買い注文を出し、高値で売り注文を出すようにしてみましょう。
from time import sleep import requests api_key = 'S7quKTdao0Cd2klfofa0pf' api_secret = 'FK98G3bedJK8K8imvGF10p5pvdf89LK6X98I1Pilk90=' api = pybitflyer.API(api_key=api_key, api_secret=api_secret) buy_flag = False while True: res = requests.get('https://api.cryptowat.ch/markets/bitflyer/btcfxjpy/ohlc?periods=60') closes = [ohlcv[4] for ohlcv in res.json()['result']['60'][-10:-1]] buy_price = min(closes) target_price = max(closes) price = api.board(product_code='FX_BTC_JPY')['mid_price'] print(price, buy_price, target_price) if not buy_flag and price < buy_price: api.sendchildorder(product_code='FX_BTC_JPY', child_order_type='MARKET', side='BUY', size=size, ) buy_flag = True if buy_flag and price > target_price: api.sendchildorder(product_code='FX_BTC_JPY', child_order_type='MARKET', side='SELL', size=size, ) buy_flag = False sleep(5)
下記のような実行画面になるかと思います。

解説: 目標価格の逐次更新 – pybitflyer
先程のプログラムと異なっているのは、buy_price
とtarget_price
を逐次更新する、下記4行のプログラム追加部分のみです。
request.get
で、ローソク足(1分足)を取得しています。そのローソク足からリスト内包表記で終値 (close) だけを抽出し、その底値と高値をそれぞれbuy_price
とtarget_price
に設定しています。
res = requests.get('https://api.cryptowat.ch/markets/bitflyer/btcfxjpy/ohlc?periods=60') closes = [ohlcv[4] for ohlcv in res.json()['result']['60'][-10:-1]] buy_price = min(closes) target_price = max(closes)
まとめ: pybitflyerで自動売買ができる
pybitflyerを利用して、自動売買をする方法について解説をしました。
プログラミング次第で、自動売買のルールをかなり柔軟に設定することができます。今後、もう少し進んだプログラミングについて記事を書いていきます。
補足説明: pybitflyerについて
API制限
pybitflyerでは、bitFlyerのAPIサービスを利用しています。
APIを使い過ぎるとbitFlyerのサーバーに負担をかけるため、利用回数に制限があります。bitFlyerの公式ドキュメントによれば、5分間で500回のAPI呼び出し制限があります。
実際に利用した感覚として、スキャルピングでもしない限りこの制限回数を超えることはありません。スキャルピングを利用する場合は、少し工夫が必要かもしれません。
Google Colabの利用制限
プログラム環境として、本記事ではGoogle Colabを利用しました。
Google Colabの利用は無料なのですが、利用を開始してから12時間が経つと自動でプログラムを落とされます。その後は手動で再起動すれば良いのですが、12時間以上連続してGoogle Colabでの自動売買ができない旨は、覚えておいてください。
[…] pybitflyerについての記事を作成しました。ぜひ確認してみてください。 […]