【Python】BitTrade APIの取得と自動売買の実践手順| ビットトレード仮想通貨・ビットコイン取引機能入門

当ページには広告が含まれています。

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

こんな方に向けた記事です
  • 暗号資産(仮想通貨)の自動取引に興味がある
  • BitTrade API(旧Huobi Japan API)の取得手順が知りたい
  • Python環境でAPI機能を利用したい
  • 仮想通貨(ビットコイン等)の自動売買ツールを自作したい
目次

暗号資産(仮想通貨)の自動取引とは

仮想通貨の自動取引とは、通貨情報参照・決済・送金等の取引に関連する操作をプログラムで代替することを指します。

自動取引の実装により、手動操作による手間削減はもちろんのこと、仮想通貨収益化プロセスの効率化も大幅に期待できます。

仮想通貨の自動売買ツール実装手段には「取引所が提供するAPI」が欠かせません。

APIと聞くと、難しく感じるかもしれませんが、利用方法さえ分かれば意外と簡単に自作ツールにも取り入れられます。

本記事では仮想通貨の自動売買ツール作成に挑戦してみたい方向けに、BitTradeのAPIを活用し、仮想通貨自動売買ツールを作成する方法について解説します。

なお、後述で紹介するプログラムは、ビットコイン取引を例として記載しますが、ビットコイン以外の通貨にも横展開できるようになっています。そのため、ビットトコイン以外の自作ツールを作成したい方も必見です!

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

BitTrade(旧 フォビジャパン)取引所の概要・API取得方法

【引用】の公式HP

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

BitTradeは世界170ヵ国以上数千万人のユーザーに暗号資産取引や資産管理サービスを提供している実績があります。

BitTradeが提供するサービスのセキュリティレベルや安全性は非常に高く、金融庁に登録もされている暗号資産交換業者であるため、安心して利用できる点が好評です。そのため、多くのトレーダーに愛用されています。

【参考】主要な仮想通貨取引所の比較情報

スクロールできます
取引所名最低取引量現物取引手数料*1入金手数料[円]入金手数料[BTC]出金手数料[円]送金手数料[BTC]信用取引API提供ccxt自動売買おすすめ
0.005 BTC無料無料無料407円0.0005 BTC×★★★★★
0.0001BTCMaker:-0.01%
Taker:0.05%
無料無料0円/
400円(大口出金)
無料×★★★★☆
0.0001BTCMaker:-0.02%
Taker:0.12%
無料無料550円/
770円(3万円以上)
0.0006 BTC×★★★★☆
0.0001 BTC無料無料無料330 円無料××★★★☆☆
表:暗号資産取引所の比較表(最低取引量の単位はBTCで記載)
補足
  1. 現物取引手数料の対象通貨はBTC/JPY。手数料は約定数量 × 上記記載の割合[%]として算出可能。

BitTradeの取引所は「通貨最低取引単位を小さく設定できる」「取引時の手数料が低い」のが特徴であるため、仮想通貨取引が未経験の方もはじめやすい条件であると言えます。また「APIサービスが豊富」「レバレッジ(信用)取引対応」のため、仮想通貨取引に慣れてくれば、レバレッジをかけた高度な取引にも挑戦できます。

このようにBitTradeは自動取引ツール作成を検討される幅広い層の方に推奨できます。

BitTradeの口座開設

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

APIを使うには、BitTradeの口座開設が必須です。

そのため、BitTradeの口座開設が未済の方は事前に開設手続きを行いましょう。口座開設はスマホと本人確認書類さえあれば10分で手続き完了でき、即日口座開設および暗号資産取引が可能です。

アカウントをお持ちでない方はこちら

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

口座開設完了後、APIを利用するための情報としてAPIキー(公開鍵)とシークレットキー(秘密鍵)を取得します。

下記の手順で取得していきましょう!

BitTradeでAPI情報を取得する手順
(1) 会員ページにログイン
BitTradeログインページ(https://www.huobi.co.jp/ja-jp/login/)
(2) 右上マイページからAPIを選択
【任意】2段階認証

API利用の際は2段階認証を設定し、セキュリティを強化しておくことを推奨します。

(3) APIに必要な情報を入力し「秘密鍵を作成」をクリック
(4) APIキー(公開鍵)とシークレットキー(秘密鍵)を確認

APIキーとシークレットキーは、後ほど活用するためコピーし、お手元にメモとして残しておきましょう!

【任意】API 動作チェック

上記で取得したAPIキーとシークレットキーを用いて動作チェックを行います。

まずこちらをインストールしてきましょう。

pip install ccxt

インストール完了後、以下を実行しエラーが出なければ問題なしです!

import ccxt

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

# BitTrade(旧:huobi Japan)取引所のAPI呼出
huobi = ccxt.huobijp({'apiKey':apiKey,'secret':secret})

# 残高表示
huobi.fetchBalance() 

【参考】遭遇しやすいエラー

AuthenticationError: huobijp {"status":"error","err-code":"api-signature-not-valid","err-msg":"Signature not valid: Verification failure}

上記のようなエラーが出た場合、「APIキーとシークレットキーが正しく入力されていない」または「手順(3)でIPアドレスが正しく入力されていない」可能性が高いです。後者の場合、IPアドレスは「グローバルIPアドレス」が入力されているかチェックしましょう!(プライベートIPアドレスでないことに注意)

【Python】BitTrade APIの使い方解説・自動売買に応用

仮想通貨自動取引をPythonで実現するために、次のようなBitTrade API機能の使い方を解説します。

No作成する自動売買機能
必須APIキー・シークレットキー設定
1取引通貨情報の取得
2板情報の取得
3残高情報の取得
4仮想通貨の注文する
5仮想通貨の注文内容キャンセル
6未約定の注文状況確認
7約定した取引確認
8入出金記録を確認

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

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

pip install ccxt

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

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

import ccxt
from pprint import pprint

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

# BitTrade(旧:huobi Japan)取引所のインスタンス作成
huobi = ccxt.huobijp({'apiKey':apiKey,'secret':secret})

取引通貨情報の取得

BitTradeが取り扱う通貨情報(銘柄情報)は下記で取得可能です。

# 取引通貨
def get_markets():
    result = huobi.load_markets() 
    return result

#出力
pprint(get_markets())
# 出力イメージ
# {'18C/BTC': {'active': True,
#              'base': '18C',
#              'baseId': '18c',
#              'contract': False,
#              'contractSize': None,
#              'expiry': None,
#              'expiryDatetime': None,
#              'feeSide': 'get',
#              'future': False,
#              'id': '18cbtc',
#              'info': {'amount-precision': '2',
#                       'api-trading': 'enabled',
#                       'base-currency': '18c',
#                       'buy-limit-must-less-than': '1.1',
#                       'buy-market-max-order-value': '2',
#                       'limit-order-max-buy-amt': '933333831',
#                       'limit-order-max-order-amt': '933333831',
#                       'limit-order-max-sell-amt': '933333831',
#                       'limit-order-min-order-amt': '0.01',
#                       'market-buy-order-rate-must-less-than': '0.1',
#                       'market-sell-order-rate-must-less-than': '0.1',
#                       'max-order-amt': '933333831',
#                       'min-order-amt': '0.01',
#                       'min-order-value': '0.0001',
#                       'price-precision': '10',
#                       'quote-currency': 'btc',
#                       'sell-limit-must-greater-than': '0.9',
#                       'sell-market-max-order-amt': '93333383',
#                       'sell-market-min-order-amt': '0.01',
#                       'state': 'online',
#                       'symbol': '18cbtc',
#                       'symbol-partition': 'innovation',
#                       'tags': 'hadax',
#                       'value-precision': '8'},
#              'inverse': None,
#              'limits': {'amount': {'max': 933333831.0, 'min': 0.01},
#                         'cost': {'max': None, 'min': 0.0001},
#                         'leverage': {'max': 1, 'superMax': 1},
#                         'price': {'max': None, 'min': 1e-10}},
#              'linear': None,
#              'maker': 0.002,
#              'percentage': True,
#              'precision': {'amount': 0.01, 'cost': 1e-08, 'price': 1e-10},
#              'quote': 'BTC',
#              'quoteId': 'btc',
#              'settle': None,
#              'settleId': None,
#              'spot': True,
#              'swap': False,
#              'symbol': '18C/BTC',
#              'taker': 0.002,
#              'tierBased': False,
#              'type': 'spot'},

板情報の取得

板情報は下記より取得可能です。関数の引数には、取得したい板の通貨情報(symbol)を指定します。

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

# 板情報
def get_ticker(symbol):
    result = huobi.fetch_ticker(symbol=symbol)
    return result

#出力
pprint(get_ticker(symbol="BTC/JPY"))
# 出力イメージ
# {'ask': 5770022.0,
#  'askVolume': 0.005,
#  'average': 5763257.0,
#  'baseVolume': 21.61963485580715,
#  'bid': 5761329.0,
#  'bidVolume': 0.005,
#  'change': 4882.0,
#  'close': 5765698.0,
#  'datetime': '2022-03-31T12:45:18.465Z',
#  'high': 5813903.0,
#  'info': {'amount': '21.61963485580715',
#           'ask': ['5770022.0', '0.005'],
#           'bid': ['5761329.0', '0.005'],
#           'close': '5765698.0',
#           'count': '32105',
#           'high': '5813903.0',
#           'id': '204020602580',
#           'low': '5712407.0',
#           'open': '5760816.0',
#           'version': '204020602580',
#           'vol': '1.244817864956001E8'},
#  'last': 5765698.0,
#  'low': 5712407.0,
#  'open': 5760816.0,
#  'percentage': 0.08474493891143199,
#  'previousClose': None,
#  'quoteVolume': 124481786.4956001,
#  'symbol': 'BTC/JPY',
#  'timestamp': 1648730718465,
#  'vwap': 5757811.698756033}

残高情報の取得

BitTradeに預けている残高情報(日本円、仮想通貨の残高)は次のように確認します。

# 残高
def get_balance():
    result = huobi.fetchBalance()
    return result

#出力
pprint(get_balance())
# 出力イメージ
# {'info': {'status': 'ok',
#   'data': {'id': '16236707',
#    'type': 'spot',
#    'state': 'working',
#    'list': [{'currency': 'xem',
#      'type': 'trade',
#      'balance': '0',
#      'seq-num': '0'},
#     {'currency': 'btc', 'type': 'trade', 'balance': '0', 'seq-num': '0'},
#     {'currency': 'btc', 'type': 'frozen', 'balance': '0', 'seq-num': '0'},
#     {'currency': 'jpy', 'type': 'trade', 'balance': '0', 'seq-num': '0'},
#     {'currency': 'jpy', 'type': 'frozen', 'balance': '0', 'seq-num': '0'},
#  'BTC': {'free': 0.0, 'used': 0.0, 'total': 0.0},
#  'JPY': {'free': 0.0, 'used': 0.0, 'total': 0.0},
#  'used': {'XEM': 0.0,
#   'BTC': 0.0,
#   'JPY': 0.0,
#  'total': {'XEM': 0.0,
#   'BTC': 0.0,
#   'JPY': 0.0,}}

仮想通貨の注文する

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

コード実行で実際に注文が走ります。取り扱いには十分注意です。

指値注文の場合

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

成行注文の場合

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

暗号資産の注文にはcreate_order()メソッドを用います。引数には下記を設定しましょう。

引数名概要必須or任意
symbol取引通貨必須
price指値価格指値注文では必須
side売買(buy or sell)必須
amount(またはquantity)仮想通貨取引数量必須

仮想通貨の注文内容キャンセル

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

def cancelOrder(order_id, symbol):
    result = huobi.cancel_order(
                                symbol = symbol,  # 取引通貨
                                id = order_id,    # 注文ID
                                )
    return result

# 注文IDと取引通貨を指定
order_id = '111111111'
symbol =   'BTC/JPY'

# 出力
pprint(cancelOrder(order_id,symbol))

注文の照会

指値注文した際、約定せずに注文が残り続ける場合があります。そのような未約定の注文状況は、下記を実行することで照会できます。

関数の引数には、通貨情報(symbol)を指定しましょう。

def open_order(symbol):
    result = huobi.fetchOpenOrders(symbol = symbol)
    return result

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

約定した取引確認

約定した取引情報の確認は、次のようなコードを実行します。

関数の引数には、通貨情報(symbol)を指定しましょう。

def myTrades(symbol):
    result = huobi.fetchMyTrades(symbol = symbol)
    return result

#出力
pprint(myTrades(symbol='BTC/JPY'))
# 出力イメージ
# {'ch': 'market.btcjpy.trade.detail',
#  '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}

入出金記録の確認

BitTradeの口座残高の入出金記録は、次のように確認します。

def deposit():
    result = huobi.fetchDeposits()
    return result

# 出力
pprint(deposit())
合わせて読みたい

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

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

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

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

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

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

スクロールできます
対応言語記事名
Python【GMOコイン】 APIで仮想通貨取引の自動化
Python【BitTrade】 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を活用した仮想通貨の自動取引

最後に

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

本記事をシェア!
目次