こんにちは、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キー(公開鍵)とシークレットキー(秘密鍵)を取得する必要があります。
下記の手順でそれぞれのキーを取得していきましょう!
(1) 会員ページにログイン
(2) bitFlyer Lightning画面を開く
(3) APIを選択
(4)「新しいAPIキーを追加」をクリック
(5) API情報を入力
活用したいAPI機能にチェックを付け、画面下「OK」ボタンを押下しましょう。
上記までの手順が完了すると、「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 | 仮想通貨取引数量 | 必須 |
暗号資産の取引経験があり、レバレッジ取引もしたい方には、GMOコインのAPIもおすすめです。
レバレッジ取引のAPI機能を活用すると、自作ツールでできることが大幅に広がります。
GMOコインでの取引には、「API機能が豊富」「最低取引単位を小さく設定できる」「取引時の手数料が低い」という特徴があるため、使い勝手が良いと言えます。
【Python】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 | 【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を活用した仮想通貨の自動取引 |
最後に
お問い合わせフォーム
上記課題に向けてご気軽にご相談下さい。
お問い合わせはこちら