アプリケーション開発 プログラミング

Pybitflyerを用いた自動取引ツール開発基礎【サンプルあり】


今回はPybitflyerを用いた仮想通貨自動取引ツール開発手法の基礎を紹介します。

プログラミング、機械学習を学ぶとその知識で仮想通貨、株式等の自動取引が簡単にできるようになる!?と皆さん思いますよね、それがプログラミングを始める動機になったりも。

ランダムで動く価格に対して個人で機械学習を導入、取引を行うのは高難易度ですが、APIを用いた簡単なルールに従う自動注文/取引はすぐに導入可能です。

本日はその一例としてbitflyerのAPIをpythonで用いることができるように開発されたPybitflyerを用いて自動取引ツールの基礎を紹介します。


脳みそ男

決まった時期に決まった量だけ自動的に仮想通貨を積み立てたい!


自動売り買いで試したいアルゴリズムがあるけど、どうやって導入すればいいか分からない!

脳筋太郎



本記事ではそんな疑問にお答えします。

こんな方におすすめの記事

  • bitFlyerでビットコインの取引を行っており、自動取引ツールを開発したい
  • 仮想通貨APIで何ができるかを知りたい
  • 自分の戦略を自動取引で仮想通貨売買に取り込みたい



免責事項

・当サイトに掲載された内容によって生じた損害等の一切の責任を負いかねます。当サイトの情報を利用する場合には、自己責任でご利用下さい。

・本サイトで掲載されている評価や感想等は、あくまでサイト運営者の主観であり、広告主 に保証されたものではありません。

・暗号資産(仮想通貨)取引は、元本を保証するものでなく、価格変動により損失が生じる リスクがあります。お取引される際には、取引内容をよく理解し、ご自身の判断で行ってく ださい。



それでは一緒に開発手法を見ていきましょう!

Pybitflyerを用いた自動取引ツール開発手法


仮想通貨販売所のbitFlyerでは自動取引用のAPI(HTTP API/REST API)を提供しています。



これらbitFlyerのREST APIをPythonから気軽に利用することができるラッパーが以下で提供されています。

このように開発していただける方がいると本当に助かります!


ラッパーとは

ラッパークラスとは、オブジェクト指向プログラミング言語で、他のクラスやプログラム中でオブジェクトとして扱いたい対象を、クラスとして定義したもの。

“wrapper” とは包装、包み紙という意味で、対象を包み込んで覆い隠すという意味合いがある。


このPybitflyerとbitFlyerアカウントにて発行されるAPI KEYを用いることで、pythonで自動的に売買注文を行うことができます。

売買注文を行う際の戦略をpython上でコーディング、自動的に注文を執行することで感情に左右されず、決まったルールに乗っ取った取引が実現できますね!



脳みそ男

投資においては感情に左右される取引が一番危険!


bitflyerの口座開設


bitFlyerには「販売所」と「簡単取引所」、そして証拠金取引など高度な注文が可能な「bitFlyer Lightning」があります。

pybitflyerでの自動取引が可能なのは「bitFlyer Lightning」のうち「ビットコイン現物(BTC/JPY)」、「イーサリアム現物取引(ETH/JPY)」、「ビットコインFX(BTC-FX/JPY)」の3つになります。

オンライン上での本人確認が可能なクイック認証を用いれば最短即日で口座開設ができます。

口座開設のステップは以下です。


口座開設に必要なステップ





即日で口座開設できるのはすごい!

脳筋太郎


bitFlyerからのAPI KEYの取得


口座開設が完了したら次に自動取引用のAPI KEYを取得します。

API KEYの取得方法は以下です。



APIの権限に関して

すべての権限を付与したAPI KEYが外部に漏洩した場合、取引、入出金、送金等すべてが外部から可能になってしまいます。

取り扱いには最新の注意を払うとともに、必要に応じた権限のみの設定としましょう。



上記設定を行うことでAPI KEYおよびAPI SECRET KEYが取得できます。

以下の基本操作で使用するため、メモをしておきましょう!



脳みそ男

API KEYの管理には細心の注意を払おう!



pybitflyerの基本操作


それでは実際にpybitflyerの基本操作について紹介していきます!

今回は板情報の取得、成行注文、指値注文、注文キャンセルの4つについて紹介します。


pybitflyerの導入


まずは以下のコマンドでpybitflyerをインストールします。

入力

pip install pybitflyer


注文用クラスの定義


次に注文用クラスをpythonで定義していきます。

上から順番に板情報取得、成行注文、指値注文、注文キャンセル関数を定義しています。

以下のコードではproduct codeを"BTC_JPY"に設定しているためビットコインの現物取引ができるようになっています。

必要に応じてProdut codeを変更してください。

ビットコイン現物コード : BTC_JPY

ビットコインFXコード : FX_BTC_JPY

イーサリアム現物 コード: ETH_JPY



入力

import pybitflyer

"""
pybitFlyer
"""

class Bitflyerorder:
    
    #現物の場合: "BTC_JPY" / 先物の場合: "FX_BTC_JPY"
    code = 'BTC_JPY'

    def __init__(self,api_key,api_secret):
        # 
        self.public_api = pybitflyer.API()
        self.api = pybitflyer.API(api_key, api_secret)
        self.product_code = self.code

    def get_ticker(self):
        """
        板情報取得関数
        """
        tick = self.api.ticker(product_code=self.product_code)

        print("最終取引価格 : " + str(tick["ltp"]))
        print("ベストBIT: " + str(tick["best_bid"]))
        print("ベストASK: " + str(tick["best_ask"]))
    

    def market_order(self, side, size, time_to_expire=1):
        """
        成行注文関数
        :param side: 売買方向
        :param size: 取引量
        :param time_to_expire:注文寿命
        """
        res = self.api.sendchildorder(product_code=self.product_code, child_order_type="MARKET",
                                      minute_to_expire=time_to_expire, side=side, size=size, price=0)
        print("<成行注文>" + "【方向】" + str(side) + "【サイズ】"+ str(size) + "【注文保持時間】" + str(time_to_expire) )
    

    def limit_order(self, side, price, size, time_to_expire=1):
        """
        指値注文関数
        :param side: 売買方向
        :param price: 価格
        :param size: 取引量
        :param time_to_expire:注文寿命
        """
        
        res = self.api.sendchildorder(product_code=self.product_code, child_order_type="LIMIT",
                                      minute_to_expire=time_to_expire, side=side, size=size, price=price)
        print("<指値注文>" + "【方向】" + str(side) + "【サイズ】"+ str(size) + "【指値】" + str(price)+ "【注文保持時間】" + str(time_to_expire) )
    
        
    def cancel_order(self):
        """
        注文取消関数
        """
        self.api.cancelallchildorders(product_code=self.product_code)
        print("注文をキャンセルしました")


注文条件の定義



次に注文条件を設定します。

先ほど発行したAPI KEYを指定の欄に入力してください。

(実際に運用する際はそのままのAPI KEYをコード上に記載することは推奨しません。必要に応じて暗号化するなどの対処をしてください。)

変数は以下を定義しています。

side : 注文方向 "BUY" / "SELL"

size : 注文サイズ ※ BTC_JPYの場合、最小 0.001 / *FX_BTC_JPYの場合、最小 0.01

price : 指値注文価格

time_to_expire : 注文保持時間 (秒)



入力

API_KEY = "---API KEY---" # API KEYを入力
API_SECRET = "---API SECRET KEY---" # API SECRET KEYを入力

side = "BUY"
size = 0.001
price = 5100000
time_to_expire = 1

order = Bitflyerorder(API_KEY, API_SECRET)


板情報の取得


それでは板情報を取得します。

今回は取得した板情報のうち、最終取引価格、ベストBIT、ベストASKを表示しています。

板情報の取得に関してはAPI KEYの入力は必ずしも必要ありません。

入力

order.get_ticker()

出力

最終取引価格 : 5014861.0
ベストBIT: 5012602.0
ベストASK: 5015000.0


成行注文の執行


次に以下で成行注文を執行しましょう!

注文の執行にはAPI KEYは必ず必要です。API KEYを設定した状態で以下を実行すると実際に注文が入るので、しっかりと確認したうえで実行ください。


入力

order.market_order(side,size,time_to_expire)

出力

<成行注文>【方向】BUY【サイズ】0.001【注文保持時間】1


指値注文の執行


次に以下で指値注文を執行しましょう!

同じく注文の執行にはAPI KEYは必ず必要です。

にしてもビットコイン1枚500万円は高すぎる。。!(2021年2月現在)



入力

order.limit_order(side,price,size,time_to_expire)

出力

<指値注文>【方向】BUY【サイズ】0.001【指値】5100000【注文保持時間】1


注文のキャンセル


最後に注文のキャンセルです。

以下を実行すると現在の注文がすべてキャンセルされます。

入力

order.cancel_order()

出力

注文をキャンセルしました


注文上の注意点


bitFlyer APIを用いる際には一定時間内の注文回数制限があり、制限に引っかかるとAPIの使用に制限がかかってしまいます。

高頻度取引のシステムを構築する際には注意しましょう。

注文の間にsleep関数で待機時間を挟むなどで調整しましょう。





注文回数の制限は要注意だけど高速で取引できるのもメリットの一つだね!

脳筋太郎


まとめ


本日はpybitflyerを用いた自動取引の基礎を紹介しました。

将来的なビットコインに対する世の中の期待は高まるばかり、自動取引ツールで一定期間のビットコイン積み立てを行うのもよいかもしれませんね。

pybitflyerを用いれば注文指示も自由自在です。

ぜひ紹介した注文手法の基礎を組み込んで、独自の取引アルゴリズムを開発してみましょう!


自動取引開発のためにpythonを勉強したいと思ったそこのアナタ!pythonを用いたコーディング学習にはData Campがおススメです!

詳細に関してはこちらで紹介しています。↓


それでは、本日は以上です!

-アプリケーション開発, プログラミング