【Python】bitFlyer API取得手順・ビットコイン自動売買実践|仮想通貨の取引自動化・シストレ入門

こんにちは、DXCEL WAVEの運営者(@dxcelwave)です!

こんな方に向けた記事です
  • 暗号資産(仮想通貨)の自動売買に興味がある
  • bitFlyer APIの取得手順が知りたい
  • Python環境でAPI機能を利用したい
目次

【仮想通貨】ビットコインの自動取引とは

ビットコイン自動取引とは、通貨情報参照・決済・送金等の取引に関連する操作を全てプログラムで自動化することを指します。自動取引の実装により、手動操作による手間削減はもちろんのこと、仮想通貨収益化に際した全体プロセスの効率化も期待できます。

APIについて

仮想通貨の自動売買ツール実装手段には「取引所が提供するAPI」が欠かせません。APIと聞くと、難しく感じるかもしれませんが、利用方法さえ分かれば意外と簡単にオリジナルツールが作れちゃいます。

本記事での解説範囲

本記事はビットコインの自動取引ツール作成に挑戦してみたい方向けに、「bitFlyer APIの取得手順」および「bitFlyer APIを活用した自動売買実践法」について解説します。

なお、後述のプログラムは、ビットコインを取引例として言及しますが、ビットコイン以外の通貨にも応用できるように解説しています。ビットトコイン以外の自動取引ツールを作成したい方も必見です!

【参考】仮想通貨の自動売買でできること

仮想通貨の自動売買手法はこちらの記事で解説しています。合わせてご覧下さい。

bitFlyer(ビットフライヤー)取引所の概要・API取得方法

【引用】

bitFlyer取引所のAPIを用いて自動売買ツールを作成する前に、bitFlyerの概要とAPIを利用する上で必要となる事前準備について言及します。

bitFlyerは2014年に創業した仮想通貨(暗号資産)業界の先駆者と言えます。Bitcoin 日本語情報サイトの調べによると、ビットコインの取引量は2016-2021年にかけて6年連続で国内No1(※国内暗号資産交換業者における 2016年-2021 年の年間出来高(差金決済/先物取引を含む))を保持しています。

bitFlyerのセキュリティレベルは非常に高く、過去ハッキングされた経験がないことはもちろん、金融庁に登録もされている暗号資産交換業者であるため、安心・安全に利用できる点が好評です。

bitFlyerの口座開設

自動売買ツールの作成にはbitflyer APIを用いる必要があります。

APIを使うには、bitflyerの口座開設が必須であるため、事前に開設しておきましょう。

bitFlyer APIキー・シークレットを取得

口座開設完了後、APIを利用するために、APIキー(公開鍵)とシークレットキー(秘密鍵)を取得する必要があります。

下記の手順でそれぞれのキーを取得していきましょう!

上記までの手順が完了すると、「APIキー」および「シークレットキー」が発行されます。

後続のプログラム実装の際に各キーは活用するため、お手元にメモとして残しておきましょう。

【Python】bitFlyer(ビットフライヤー) APIの使い方解説・自動売買に応用

ビットコイン自動取引をPythonで実現するために、以下のbitFlyer API機能を解説します。

No作成する自動売買機能
必須APIキー・シークレットキー設定
1取引通貨情報
2板情報
3残高情報
4ビットコインの注文
5注文キャンセル
6注文照会
7取引履歴の照会

※bitFlyer APIはccxtという暗号資産APIを容易に扱えるパッケージに対応しているため、そちらを用いることします。

事前にccxtをインストールしておきましょう!

pip install ccxt

APIキー・シークレットキーの設定

ビットコイン自動取引ツールの動作実行に必要なAPIキー・シーレットキーを定義します。必要となるライブラリも合わせてインポートしましょう。

import ccxt
from pprint import pprint

# APIキー&シークレットキー
apiKey  = "APIキーを入力"
secret  = "シークレットキーを入力"

# bitFlyerのインスタンス作成
bitflyer = ccxt.bitflyer({'apiKey':apiKey,'secret':secret})

取引通貨情報の取得

bitFlyerが取り扱う通貨情報は以下で確認できます。

# マーケット情報
res = bitflyer.load_markets() 

# 出力
pprint(res)
# 出力イメージ
# 'BTC/JPY': {'base': 'BTC',
#              'baseId': 'BTC',
#              'future': False,
#              'id': 'BTC_JPY',
#              'info': {'market_type': 'Spot', 'product_code': 'BTC_JPY'},
#              'limits': {'amount': {'max': None, 'min': None},
#                         'cost': {'max': None, 'min': None},
#                         'leverage': {'max': None, 'min': None},
#                         'price': {'max': None, 'min': None}},
#              'maker': 0.002,
#              'percentage': True,
#              'precision': {},
#              'quote': 'JPY',
#              'quoteId': 'JPY',
#              'spot': True,
#              'symbol': 'BTC/JPY',
#              'taker': 0.002,
#              'type': 'spot'},
#  'BTC/USD': {'base': 'BTC',
#              'baseId': 'BTC',
#              'future': False,
#              'id': 'BTC_USD',
#              'info': {'market_type': 'Spot', 'product_code': 'BTC_USD'},
#              'limits': {'amount': {'max': None, 'min': None},
#                         'cost': {'max': None, 'min': None},
#                         'leverage': {'max': None, 'min': None},
#                         'price': {'max': None, 'min': None}},
#              'maker': 0.002,
#              'percentage': True,
#              'precision': {},
#              'quote': 'USD',
#              'quoteId': 'USD',
#              'spot': True,
#              'symbol': 'BTC/USD',
#              'taker': 0.002,
#              'type': 'spot'},

板情報の取得

板情報は下記より確認できます。引数には、通貨情報(symbol)を指定しましょう。

下記の例はsymbolをビットコイン(BTC/JPY)としていますが、他の通貨コードを指定し、お好みの暗号資産情報を確認することもできます。

# 通貨選択
symbol = "BTC/JPY"

# 板情報
res = bitflyer.fetch_ticker(symbol)

# 出力
pprint(res)
# 出力イメージ
# {'ask': 4079652.0,
#  'askVolume': None,
#  'average': None,
#  'baseVolume': 2456.37221309,
#  'bid': 4078101.0,
#  'bidVolume': None,
#  'change': None,
#  'close': 4078000.0,
#  'datetime': '2022-05-31T22:15:49.920Z',
#  'high': None,
#  'info': {'best_ask': '4079652.0',
#           'best_ask_size': '0.02',
#           'best_bid': '4078101.0',
#           'best_bid_size': '0.01',
#           'ltp': '4078000.0',
#           'market_ask_size': '0.0',
#           'market_bid_size': '0.0',
#           'product_code': 'BTC_JPY',
#           'state': 'RUNNING',
#           'tick_id': '8242859',
#           'timestamp': '2022-05-31T22:15:49.92',
#           'total_ask_depth': '634.72737884',
#           'total_bid_depth': '898.36911934',
#           'volume': '9793.28783793',
#           'volume_by_product': '2456.37221309'},
#  'last': 4078000.0,
#  'low': None,
#  'open': None,
#  'percentage': None,
#  'previousClose': None,
#  'quoteVolume': None,
#  'symbol': 'BTC/JPY',
#  'timestamp': 1654035349920,
#  'vwap': None}

残高情報の取得

bitFlyer口座内の口座残高情報(日本円、仮想通貨)は以下で確認できます。

# 残高
res = bitflyer.fetchBalance()

# 出力
pprint(res)
# 出力イメージ
# {'BAT': {'free': 0.0, 'total': 0.0, 'used': 0.0},
#  'BCH': {'free': 0.0, 'total': 0.0, 'used': 0.0},
#  'BTC': {'free': 0.0, 'total': 0.0, 'used': 0.0},
#  'DOT': {'free': 0.0, 'total': 0.0, 'used': 0.0},
#  'ETC': {'free': 0.0, 'total': 0.0, 'used': 0.0},
#  'ETH': {'free': 0.0, 'total': 0.0, 'used': 0.0},
#  'JPY': {'free': 0.0, 'total': 0.0, 'used': 0.0},
#  'LINK': {'free': 0.0, 'total': 0.0, 'used': 0.0},
#  'LSK': {'free': 0.0, 'total': 0.0, 'used': 0.0},
#  'LTC': {'free': 0.0, 'total': 0.0, 'used': 0.0},
#  'MONA': {'free': 0.0, 'total': 0.0, 'used': 0.0},
#  'XEM': {'free': 0.0, 'total': 0.0, 'used': 0.0},
#  'XLM': {'free': 0.0, 'total': 0.0, 'used': 0.0},
#  'XRP': {'free': 0.0, 'total': 0.0, 'used': 0.0},
#  'XTZ': {'free': 0.0, 'total': 0.0, 'used': 0.0},
#  'XYM': {'free': 0.0, 'total': 0.0, 'used': 0.0},
#  'info': [{'amount': '0.0', 'available': '0.0', 'currency_code': 'JPY'},
#           {'amount': '0.0', 'available': '0.0', 'currency_code': 'BTC'},
#           {'amount': '0.0', 'available': '0.0', 'currency_code': 'BCH'},
#           {'amount': '0.0', 'available': '0.0', 'currency_code': 'ETH'},
#           {'amount': '0.0', 'available': '0.0', 'currency_code': 'ETC'},
#           {'amount': '0.0', 'available': '0.0', 'currency_code': 'LTC'},
#           {'amount': '0.0', 'available': '0.0', 'currency_code': 'MONA'},
#           {'amount': '0.0', 'available': '0.0', 'currency_code': 'LSK'},
#           {'amount': '0.0', 'available': '0.0', 'currency_code': 'XRP'},
#           {'amount': '0.0', 'available': '0.0', 'currency_code': 'BAT'},
#           {'amount': '0.0', 'available': '0.0', 'currency_code': 'XLM'},
#           {'amount': '0.0', 'available': '0.0', 'currency_code': 'XEM'},
#           {'amount': '0.0', 'available': '0.0', 'currency_code': 'XTZ'},
#           {'amount': '0.0', 'available': '0.0', 'currency_code': 'DOT'},
#           {'amount': '0.0', 'available': '0.0', 'currency_code': 'LINK'},
#           {'amount': '0.0', 'available': '0.0', 'currency_code': 'XYM'}],

仮想通貨の注文する

仮想通貨を実際に注文するコードは次のようになります。

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

現物|指値注文の場合

order = bitflyer.createLimitOrder(
                symbol = 'BTC/JPY',    # 取引通貨
                price  = 3000000,      # 指値価格
                side   = 'buy',        # 購入(buy) or 売却(sell)
                amount = 0.001,        # 購入数量[BTC]
                )
# 出力
pprint(order)

現物|成行注文の場合

order = bitflyer.createMarketOrder(
                symbol = 'BTC/JPY',    # 取引通貨
                side   = 'buy',        # 購入(buy) or 売却(sell)
                amount = 0.001,        # 購入数量[BTC]
                )
# 出力
pprint(order)

レバレッジ|指値注文の場合

order = bitflyer.createLimitOrder(
                symbol = "FX_BTC_JPY", # 取引通貨
                price  = 3000000,      # 指値価格
                side   = 'buy',        # 購入(buy) or 売却(sell)
                amount = 0.05,         # 購入数量[BTC]
                )
# 出力
pprint(order)

レバレッジ|成行注文の場合

order = bitflyer.createMarketOrder(
                symbol = "FX_BTC_JPY", # 取引通貨
                side   = 'buy',        # 購入(buy) or 売却(sell)
                amount = 0.05,         # 購入数量[BTC]
                )
# 出力
pprint(order)

仮想通貨注文の際、引数には下記を設定します。

引数名概要必須or任意
symbol取引通貨必須
price指値価格指値注文では必須
side売買(buy or sell)必須
amount仮想通貨取引数量必須
合わせて読みたい

暗号資産の取引経験があり、レバレッジ取引もしたい方には、のAPIもおすすめです。

レバレッジ取引のAPI機能を活用すると、自作ツールでできることが大幅に広がります。

GMOコインでの取引には、「API機能が豊富」「最低取引単位を小さく設定できる」「取引時の手数料が低い」という特徴があるため、使い勝手が良いと言えます。

ビットコイン注文のキャンセル

注文のキャンセルには、注文した取引IDを引数に指定し、次のように実行します。

# 引数情報
order_id = '111111111'  # 注文ID
symbol   = 'BTC/JPY'    # 取引通過

# 取引キャンセル
res = bitflyer.cancel_order(symbol = symbol,  # 取引通貨
                            id = order_id,    # 注文ID
                           )

# 出力
pprint(res)

注文情報照会

注文中の取引情報は以下を実行することで照会できます。

# 取引通貨
symbol='BTC/JPY'

# 注文照会
res = bitflyer.fetchOpenOrders(symbol)

# 出力
pprint(res)
# 出力イメージ
# {
#   "status": 'ok',
#   "data": {"注文一覧情報が表示"},
#   "responsetime": "2021-03-22T03:52:44.192Z"
# }

取引履歴

約定した取引履歴は以下で確認できます。

# 取引通貨
symbol='BTC/JPY'

# 取引履歴
res = bitflyer.fetchMyTrades(symbol)

#出力
pprint(res)
# 出力イメージ
#  'data': [{'data': [{'amount': 1e-05,
#                      'direction': 'buy',
#                      'id': 102010486785509397136938752,
#                      'price': 5777419.0,
#                      'trade-id': 100037130882,
#                      'ts': 1648687445068},
#                     {'amount': 2e-05,
#                      'direction': 'buy',
#                      'id': 102010486785509397136938751,
#                      'price': 5776869.0,
#                      'trade-id': 100037130881,
#                      'ts': 1648687445068}],
#            'id': 102010486785,
#            'ts': 1648687445068}],
#  'status': 'ok',
#  'ts': 1648687446500}

【仮想通貨・ビットコイン】自動取引実践法・その他優良情報

最後までご覧いただきありがとうございました。当サイトでは仮想通貨・ビットコインにおける多様な自動取引手法の解説記事を多数取り扱っております。

取引所別:APIの取得手順と使い方の解説記事

スクロールできます
対応言語記事名
Python【GMOコイン】 APIで仮想通貨取引の自動化
Python【Huobi Japan】 APIで仮想通貨取引の自動化
Python【bitbank】 APIで仮想通貨取引の自動化
Python【Coincheck】APIで仮想通貨取引の自動化
Python【bitFlyer】APIで仮想通貨取引を自動化
Python【BITPOINT】APIで仮想通貨取引の自動化

機械学習やテクニカル分析を採用した仮想通貨取引の解説記事

スクロールできます
対応言語記事名指標
共通自動売買の種類・自作時のポイント全て
Pythonリアルタイムチャート分析基礎トレンド
Python移動平均線トレンド
Pythonゴールデンクロス・デッドクロストレンド
Pythonアービトラージ(裁定取引)時間・値幅
Pythonボリンジャーバンドオシレータ
PythonMACDオシレータ
PythonRSIオシレータ
Python時系列予測モデルの構築機械学習・AI
【トレンド】:値動きが上昇・下降どちらのトレンドなのか判断に有効
【オシレータ】:現在の相場に対する買われすぎ・売られすぎの判断に有効

その他仮想通貨自動トレード解説記事

スクロールできます
対応言語記事名
Python【データ収集】仮想通貨の過去データを大量取得する方法
Python【初心者向け】ccxtを活用した仮想通貨の自動取引
Node.js【初心者向け】ccxtを活用した仮想通貨の自動取引

最後に

この記事が気に入ったら
フォローしてね!

本記事をシェア!
目次