こんにちは、DXCEL WAVEの運営者(@dxcelwave)です!
- 暗号資産(仮想通貨)の自動取引に興味がある
- BitTrade API(旧Huobi Japan API)の取得手順が知りたい
- Python環境でAPI機能を利用したい
- 仮想通貨(ビットコイン等)の自動売買ツールを自作したい
暗号資産(仮想通貨)の自動取引とは
仮想通貨の自動取引とは、通貨情報参照・決済・送金等の取引に関連する操作をプログラムで代替することを指します。
自動取引の実装により、手動操作による手間削減はもちろんのこと、仮想通貨収益化プロセスの効率化も大幅に期待できます。
仮想通貨の自動売買ツール実装手段には「取引所が提供するAPI」が欠かせません。
APIと聞くと、難しく感じるかもしれませんが、利用方法さえ分かれば意外と簡単に自作ツールにも取り入れられます。
本記事では仮想通貨の自動売買ツール作成に挑戦してみたい方向けに、BitTradeのAPIを活用し、仮想通貨自動売買ツールを作成する方法について解説します。
なお、後述で紹介するプログラムは、ビットコイン取引を例として記載しますが、ビットコイン以外の通貨にも横展開できるようになっています。そのため、ビットトコイン以外の自作ツールを作成したい方も必見です!
様々な仮想通貨の自動売買手法はこちらの記事で解説しています。合わせてご覧下さい。
【仮想通貨】自動売買ツールの自作方法とおすすめ暗号資産取引所|無料で実践できるビットコイン自動取引の仕組みも徹底解説
「仮想通貨(暗号資産)の自動売買ツール作成に興味がある」「自動売買の仕組み・作り方を知りたい」「どこの仮想通貨取引所がおすすめなのか知りたい」本記事ではこのような要望にお応えします。
BitTrade(旧 フォビジャパン)取引所の概要・API取得方法
BitTrade取引所のAPIを用いて自動売買ツールを作成する前に、BitTradeの概要とAPIを利用する上で必要となる事前準備について言及します。
BitTradeは世界170ヵ国以上数千万人のユーザーに暗号資産取引や資産管理サービスを提供している実績があります。
BitTradeが提供するサービスのセキュリティレベルや安全性は非常に高く、金融庁に登録もされている暗号資産交換業者であるため、安心して利用できる点が好評です。そのため、多くのトレーダーに愛用されています。
【参考】主要な仮想通貨取引所の比較情報
取引所名 | 最低取引量 | 現物取引手数料*1 | 入金手数料[円] | 入金手数料[BTC] | 出金手数料[円] | 送金手数料[BTC] | 信用取引 | API提供 | ccxt | 自動売買おすすめ |
---|---|---|---|---|---|---|---|---|---|---|
Coincheck | 0.005 BTC | 無料 | 無料 | 無料 | 407円 | 0.0005 BTC | × | ○ | ○ | ★★★★★ |
GMOコイン | 0.0001BTC | Maker:-0.01% Taker:0.05% | 無料 | 無料 | 0円/ 400円(大口出金) | 無料 | ○ | ○ | × | ★★★★☆ |
bitbank | 0.0001BTC | Maker:-0.02% Taker:0.12% | 無料 | 無料 | 550円/ 770円(3万円以上) | 0.0006 BTC | × | ○ | ○ | ★★★★☆ |
BITPOINT | 0.0001 BTC | 無料 | 無料 | 無料 | 330 円 | 無料 | × | ○ | × | ★★★☆☆ |
- 現物取引手数料の対象通貨はBTC/JPY。手数料は約定数量 × 上記記載の割合[%]として算出可能。
BitTradeの取引所は「通貨最低取引単位を小さく設定できる」「取引時の手数料が低い」のが特徴であるため、仮想通貨取引が未経験の方もはじめやすい条件であると言えます。また「APIサービスが豊富」「レバレッジ(信用)取引対応」のため、仮想通貨取引に慣れてくれば、レバレッジをかけた高度な取引にも挑戦できます。
このようにBitTradeは自動取引ツール作成を検討される幅広い層の方に推奨できます。
BitTradeの口座開設
自動売買ツールの作成にはBitTradeAPIを用いる必要があります。
APIを使うには、BitTradeの口座開設が必須です。
そのため、BitTradeの口座開設が未済の方は事前に開設手続きを行いましょう。口座開設はスマホと本人確認書類さえあれば10分で手続き完了でき、即日口座開設および暗号資産取引が可能です。
BitTrade APIキー・シークレットを取得
口座開設完了後、APIを利用するための情報としてAPIキー(公開鍵)とシークレットキー(秘密鍵)を取得します。
下記の手順で取得していきましょう!
BitTradeでAPI情報を取得する手順
(1) 会員ページにログイン
(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())
暗号資産の取引経験があり、レバレッジ取引もしたい方には、GMOコインのAPIもおすすめです。
レバレッジ取引のAPI機能を活用すると、自作ツールでできることが大幅に広がります。
BitTrade同様「API機能が豊富」「最低取引単位を小さく設定できる」「取引時の手数料が低い」という特徴があるため、使い勝手が良いと言えます。
【Python】GMOコイン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 | ボリンジャーバンド | オシレータ |
Python | MACD | オシレータ |
Python | RSI | オシレータ |
Python | 時系列予測モデルの構築 | 機械学習・AI |
【オシレータ】:現在の相場に対する買われすぎ・売られすぎの判断に有効
その他仮想通貨自動トレード解説記事
対応言語 | 記事名 |
---|---|
Python | 【データ収集】仮想通貨の過去データを大量取得する方法 |
Python | 【初心者向け】ccxtを活用した仮想通貨の自動取引 |
Node.js | 【初心者向け】ccxtを活用した仮想通貨の自動取引 |
最後に
お問い合わせフォーム
上記課題に向けてご気軽にご相談下さい。
お問い合わせはこちら