仮想通貨

pybitflyerで簡単自動売買

投稿日:2020年12月13日 更新日:

three round gold-colored bitcoins

pybitflyerなるものを使えば、bitFlyerの取引を自動化できる?

pybitflyerを使うことで、bitFlyerの取引を自動化することができます。

本記事ではpybitflyerを導入/インストールし、簡単な自動売買プログラムを動かす方法をご紹介します。

pybitflyerとは?

gold-colored Bitcoin

本格的な説明に入る前に、用語を確認しておきます。

pybitflyerとは、Pythonというプログラミング言語のライブラリ(追加パッケージ)で、無償で利用することができます。開発者はyag_aysさんという方です。

PythonだけではbitFlyerと互換性がないのですが、pybitflyerを導入することで、PythonとbitFlyerを連携させることができます。

(pybitflyerは、裏側ではbitFlyerのAPIというものを利用しています。APIについては、過去記事を参照してください)

pybitflyerの導入と動作試験

person holding pencil near laptop computer

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で指定の価格で買って、指定の価格で売る

turned on flat screen monitor

それでは実際に、自動で売り買いするプログラムを書いていきましょう。

なお、こちらの記事の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で過去の値幅を見ながら、自動売買する

graphs of performance analytics on a laptop screen

自分で売買価格を設定するようでは、まだ自動とは言えません。直近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_pricetarget_priceを逐次更新する、下記4行のプログラム追加部分のみです。

request.getで、ローソク足(1分足)を取得しています。そのローソク足からリスト内包表記で終値 (close) だけを抽出し、その底値と高値をそれぞれbuy_pricetarget_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で自動売買ができる

graphing notebook

pybitflyerを利用して、自動売買をする方法について解説をしました。

プログラミング次第で、自動売買のルールをかなり柔軟に設定することができます。今後、もう少し進んだプログラミングについて記事を書いていきます。



補足説明: pybitflyerについて

API制限

pybitflyerでは、bitFlyerのAPIサービスを利用しています。

APIを使い過ぎるとbitFlyerのサーバーに負担をかけるため、利用回数に制限があります。bitFlyerの公式ドキュメントによれば、5分間で500回のAPI呼び出し制限があります。

実際に利用した感覚として、スキャルピングでもしない限りこの制限回数を超えることはありません。スキャルピングを利用する場合は、少し工夫が必要かもしれません。

Google Colabの利用制限

プログラム環境として、本記事ではGoogle Colabを利用しました。

Google Colabの利用は無料なのですが、利用を開始してから12時間が経つと自動でプログラムを落とされます。その後は手動で再起動すれば良いのですが、12時間以上連続してGoogle Colabでの自動売買ができない旨は、覚えておいてください。



-仮想通貨
-, , , , , , , ,

執筆者:


  1. […] pybitflyerについての記事を作成しました。ぜひ確認してみてください。 […]

comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です



関連記事

no image

機械学習で仮想通貨の価格予測→ムリ (XGBoost)

機械学習+仮想通貨で儲けられる? 残念ながら以前の記事で述べた通り、ローソク足+機械学習でマトモな価格予測を行うことはできません。前回はPython+Keras+GRUでこのことを確認したのですが、今 …

bitFlyerのAPIでできること→ほとんど何でもできる

【2020/12/12】 pybitflyer記事へのリンクを更新しました bitFlyerを使っているのだけれど、APIなるもので何かができるらしい 確かにAPIを利用すると、bitFlyerで色々 …

no image

bitFlyer APIのTips

bitFlyer APIのTipsを列挙していきます。ご利用は自己責任で。 始めの一歩。pybitflyerを利用します。pythonコードではなく、シェル内で。 # sudo python -m p …

no image

機械学習で仮想通貨の価格予測→ムリ (Keras/GRU)

機械学習+仮想通貨で儲けられる? 残念ながら、機械学習でのお金儲けは、かなり難しいです。 少なくとも、ローソク足だけを使って機械学習で価格予測をしようとしても、ほとんどマトモな予測はできません。 機械 …

プロフィール

タクマ
−−−−−−−−

東南アジア(ミャンマー&フィリピン)でNW系システムインテグレーターとして6年ほど駐在していました。本を1500冊以上読んだり、プログラミングをしたりしています。嫁さんはタイ人で、タイ在住です。
ーー
「〇〇を分かりやすく解説!」系のスカスカな記事を見ていると頭が悪くなりそうなので、対抗して、少し骨のある記事を書こうと考えています。
ーー
Twitter (@tkm_nkmr)
ーー
Twitterまとめのまとめ
YouTube Find!
SNS Trends

−−−−−−−−