【Python】Huobi APIの取得と自動売買の実践手順| フォビジャパン仮想通貨・ビットコイン取引機能入門

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

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

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

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

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

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

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

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

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

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

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

【引用】の公式HP

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

Huobiグループは世界170ヵ国以上数千万人のユーザーに暗号資産取引や資産管理サービスを提供している実績ある企業であり、その中でもHuobi Japanは日本市場にサービスを提供している日本支社です。

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

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

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

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

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

Huobi Japanの口座開設

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

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

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

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

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

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

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

Huobi JapanでAPI情報を取得する手順

【Python】Huobi Japan(フォビジャパン) APIの使い方解説・自動売買に応用

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

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

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

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

pip install ccxt

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

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

import ccxt
from pprint import pprint

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

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

取引通貨情報の取得

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

# 取引通貨
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}

残高情報の取得

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

# 残高
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}

入出金記録の確認

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

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

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

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

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

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

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

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

取引所別: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を活用した仮想通貨の自動取引

最後に

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

本記事をシェア!
目次