こんにちは、DXCEL WAVEの運営者(@dxcelwave)です!
- 仮想通貨・ビットコインの自動売買に興味がある!
- 仮想通貨の自動売買・取引を実現する最強ツール「ccxtライブラリ」について詳しく知りたい。
- ccxtライブラリを用いたPythonプログラム構築方法が知りたい
【仮想通貨ライブラリ】ccxtとは
ccxtとは複数の仮想通貨取引所のAPI操作が集約されたライブラリです。ccxtを実行することで複数取引所のAPIを容易に呼び出せます。ccxtで実行できる取引所のAPIは、パブリックAPIとプライベートAPIを用いた場合で特徴が異なり、具体的に下記が実現できます。
パブリックAPI | 取引所のアカウント登録なしに実行できる |
---|---|
プライベートAPI | 取引所にアカウント登録し、APIキーとSecretキーを取得した上で実行できる |
パブリックAPIを用いてできること
- 取引所で取り扱っている通貨情報の取得
- 板情報の取得
- ローソク足の取得
プライベートAPIを用いてできること
- 口座残高の取得
- 仮想通貨の取引(注文)
- 注文内容をキャンセル
- (未約定の)注文状況を確認
- 約定状況を確認
ccxtを用いたpythonプログラミング実践
本記事ではccxtで準備されている下記のメソッドを紹介します。
実施内容 | 対応API | 利用メソッド |
---|---|---|
取引所で取り扱う通貨情報の取得 | Public | load_markets() |
板情報の取得 | Public | fetch_ticker() |
板情報+注文量の取得 | Pubulic | fetchOrderBook() |
ローソク足の取得 | Public | fetch_ohlcv() |
口座残高の取得 | Private | fetch_balance() |
仮想通貨の取引(注文) | Private | create_order() |
注文内容をキャンセル | Private | cancel_order() |
(未約定の)注文状況の確認 | Private | fetch_open_orders() |
約定状況を確認 | Private | fetch_my_trades() |
言語はPython主体とし、1つ1つのプログラム実行方法と出力イメージを見ていきましょう。
残念ながらccxt非対応ですがGMOコインのAPI利用も魅力的です。
「API機能が豊富」「最低取引単位を小さく設定可能」「取引時の手数料が低い」「レバレッジ取引ができる」という自動売買ツール作成に適したAPIが提供されています。
GMOコインのAPI利用手順は下記にまとめていますため、合わせてご覧ください。
【Python】GMOコインAPIで仮想通貨取引の自動売買|ビットコイン等の板情報・残高・現物信用注文の自動化方法解説
本記事は「仮想通貨の自動売買に興味がある」「自動売買ツールを自作したい」という方を対象としたプログラム解説記事です。
ccxtの活用準備
ccxtライブラリを活用するには、事前にインストールが必要です。
pip install ccxt
【参考】ccxtが利用できるおすすめ暗号資産取引所
取引所名 | 最低取引量 | 現物取引手数料*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。手数料は約定数量 × 上記記載の割合[%]として算出可能。
代表的な国内の暗号資産(仮想通貨)取引所を上記に示します。
その中でもccxtに対応しており、自動取引とも相性が良い筆者おすすめの取引所は下記になります。
bitbank | Coincheck |
---|---|
API取得手順はこちら | API取得手順はこちら |
上記手数料比較表も参考にし、自動取引システムの方向性に合った取引所APIが利用できると良いですね。
ccxt利用|パブリックAPI
準備事項|オブジェクト作成
特定の取引所におけるパブリックAPIを呼び出すには、対象取引所に対応したオブジェクトを事前に生成する必要があります。下記のようにコードを実行しておきましょう。
import ccxt
from pprint import pprint
#オブジェクト生成 ccxt.●●●●()の●●●●部分は取引所名を入力
base = ccxt.coincheck()
上記はCoincheckのパブリックAPIを呼び出すためにオブジェクトを例として記載しました。
ccxtでAPIが呼び出せる他の取引所はccxtのgithubライブラリから確認できます。
取引所で取り扱っている通貨情報の取得
指定した取引所の通貨情報(通貨レート)は下記を実行して取得できます。
markets = base.load_markets()
#出力
pprint(markets)
# 出力結果
# {'BTC/JPY': {'base': 'BTC',
# 'baseId': 'btc',
# 'id': 'btc_jpy',
# 'limits': {'amount': {'max': None, 'min': None}
# 'cost': {'max': None, 'min': None}
# 'price': {'max': None, 'min': None}}
# 'maker': 0,
# 'percentage': True,
# 'precision': {},
# 'quote': 'JPY',
# 'quoteId': 'jpy',
# 'symbol': 'BTC/JPY',
# 'taker': 0,
# 'tierBased': False}}
板情報の取得
取引所の板情報は、fetch_ticker()
メソッドに通貨情報を渡すこと取得できます。
ticker = base.fetch_ticker(symbol='BTC/JPY')
#出力
pprint(ticker)
# 出力結果
# {'ask': 6364567.0,
# 'askVolume': None,
# 'average': None,
# 'baseVolume': 1785.55388838,
# 'bid': 6363000.0,
# 'bidVolume': None,
# 'change': None,
# 'close': 6363373.0,
# 'datetime': '2021-05-03T05:58:02.000Z',
# 'high': 6394783.0,
# 'info': {'ask': 6364567.0,
# 'bid': 6363000.0,
# 'high': 6394783.0,
# 'last': 6363373.0,
# 'low': 6145001.0,
# 'timestamp': 1620021482,
# 'volume': 1785.55388838},
# 'last': 6363373.0,
# 'low': 6145001.0,
# 'open': None,
# 'percentage': None,
# 'previousClose': None,
# 'quoteVolume': None,
# 'symbol': 'BTC/JPY',
# 'timestamp': 1620021482000,
# 'vwap': None}
板情報+注文量の取得
取引所の板情報は、注文量と合わせてfetchOrderBook()
メソッドでも取得できます。
orderbook = base.fetchOrderBook(symbol="BTC/JPY")
# 出力
pprint(result)
# 出力イメージ BTC価格 注文量
# {'asks': [[5570001.0, 2.5346],
# [5570054.0, 0.0179],
# [5570154.0, 0.0003],
# [5570399.0, 0.0927],
# [5570400.0, 0.01],
# [5570564.0, 0.0161],
# [5570771.0, 0.0488],
# [5571631.0, 0.01],
# [5571792.0, 0.01],
# [5572025.0, 0.0466],
# [5572194.0, 1.65],
# [5572729.0, 0.1],
# 'bids': [[5570000.0, 0.0646],
# [5569900.0, 0.0003],
# [5569700.0, 0.0005],
# [5568010.0, 0.001],
# [5568000.0, 0.001],
# [5567565.0, 0.0002],
# [5567110.0, 0.3708],
# [5567108.0, 3.5838],
# [5566371.0, 0.01],
# [5566327.0, 0.106],
# [5566303.0, 0.01],
# 'datetime': '2022-04-06T11:56:41.308Z',
# 'nonce': None,
# 'symbol': 'BTC/JPY',
# 'timestamp': 1649246201308}
ローソク足の取得
取引所のローソク足の取得は、引数としてsymbol(通貨レート)、timeframe{時間足:’1m’, ‘5m’, ‘1h’, ‘1d’)を渡し、下記のように実行します。下記には15分足を作成する際のサンプルコードを示します。
candles = base.fetch_ohlcv(symbol='BTC/JPY', # 暗号資産[通貨]
timeframe = '15m', # 時間足('1m', '5m', '1h', '1d')
since=None, # 取得開始時刻(Unix Timeミリ秒)
limit=None, # 取得件数(デフォルト:100、最大:500)
params={} # 各種パラメータ
)
#出力
pprint(candles)
# 出力結果
# [[1620020700000, //UTC timestamp
# 6363374.0, // Open(開始値)
# 6364680.0, // High(最高値)
# 6363373.0, // Low(最安値)
# 6363373.0, // Close(終値)
# 0.73488501 // Volume(出来高)
# ]]
【補足】取引所によってはsince(データ取得開始時刻:Unix Time)を設定しないと動作しない場合があるようです。sinceを正確に設定する際のサンプルコードも下記に示します。
from datetime import datetime
import calendar
""" Unix Time取得 """
# 現在時刻
datenow = datetime.utcnow()
# Unix時刻変換
unixtime = calendar.timegm(datenow.utctimetuple())
# 15分前のUnixTime(ミリ秒)を算出
minute = 15
since = (unixtime - 60 * minute) * 1000
""" ローソク足情報取得 """
candles = base.fetch_ohlcv(symbol='BTC/JPY', # 暗号資産[通貨]
timeframe = '15m', # 時間足('1m', '5m', '1h', '1d')
since=since, # 取得開始時刻(Unix Timeミリ秒)
limit=None, # 取得件数(デフォルト:100、最大:500)
params={} # 各種パラメータ
)
#出力
pprint(candles)
ccxt利用|プライベートAPI
特定の取引所におけるプライベートAPIの呼び出し方を解説します。プライベートAPIを呼び出すには、事前に取引所のサイトでアカウント登録を済ませた後、APIキーおよびSecretキーを取得しておく必要があります。
暗号資産の取引が初めての方は、CoincheckのAPIをおすすめします。即日口座開設ができ、他の取引所と比べて少額取引が可能です。そのため、万一のAPI取引失敗リスクを最小限に抑えることができるでしょう。
既にAPI情報をお持ちの方はこのままお進みください。
準備事項|オブジェクト作成
まず、下記のように事前にオブジェクトを生成しておきましょう。
import ccxt
from pprint import pprint
#APIキー&シークレットキー
apiKey = "APIキーを入力"
secret = "シークレットキーを入力"
#オブジェクト生成 ccxt.●●●●()の●●●●部分は取引所名を入力
base = ccxt.coincheck({'apiKey':apiKey,'secret':secret})
口座残高の取得
指定の取引所の口座残高は、下記のように記載して取得できます。
balance = base.fetch_balance()
#出力
pprint(balance)
# 出力結果
# {'BTC': {'free': 1.0, 'total': 0.0, 'used': 0.0},
# 'JPY': {'free': 1000000, 'total': 1000000, 'used': 0.0},
# 'free': {'BTC': 1.0, 'JPY': 1000000},
上記ビットコイン(BTC)および日本円の口座残高をレスポンス結果の例として示しています。取引所が取り扱っている他の仮想通貨の口座残高も同様に取得可能です。
仮想通貨の取引(注文)
仮想通貨を実際に注文するには、下記のように記載して実行します。
order = base.create_order(
symbol = 'BTC/JPY', #通貨
type = 'limit', #注文方法:market(成行)、limit(指値)
price = 4000000, #指値の場合価格を指定
side = 'buy', #購入(buy) or 売却(sell)
amount = 0.005, #購入数量[BTC]
)
#出力
pprint(order)
仮想通貨の注文は、create_order()メソッドに以下の引数は渡すことで実現できます。
引数名 | 概要 | 必須or任意 |
---|---|---|
symbol | 通貨レート | 必須 |
type | 注文方法:limit(指値),market(成行) | 必須 |
price | 指値価格 | 指値注文(limit)では必須 |
side | 売買方法(buy or sell) | 必須 |
amount(またはquantity) | 仮想通貨取引数量 | 必須 |
# 出力結果
# {'id': '3372744406',
# 'info': {'amount': '0.005',
# 'created_at': '2021-05-04T01:25:44.000Z',
# 'id': 3372744406,
# 'market_buy_amount': None,
# 'order_type': 'buy',
# 'pair': 'btc_jpy',
# 'rate': '4000000.0',
# 'stop_loss_rate': None,
# 'success': True}}
注文後のレスポンスには注文IDとその情報が含まれるのが特徴です。
暗号資産(仮想通貨)取引は、元本を保証するものでなく、価格変動により損失が生じるリスクがあります。お取引される際には、取引内容をよく理解し、ご自身の判断で行ってください。
注文内容をキャンセル
未約定の注文をキャンセルするには、引数として通貨レートと注文IDを渡して下記のように実行します。
#注文した際のID
order_id = '3372744406'
cancel_order = base.cancel_order(
symbol = "BTC/JPY",
id = order_id,)
#出力
pprint(cancel_order)
引数名 | 概要 | 必須or任意 |
---|---|---|
symbol | 通貨レート | 必須 |
id | 注文ID | 必須 |
# 出力イメージ
# {'id': 3372744406, 'success': True}
注文キャンセルが成立すると、キャンセル対象の注文IDとステータスがレスポンスとして得られます。
(未約定の)注文状況の確認
注文内容の照会は、下記のように通貨レートを引数で渡すことで取得できます。
open_order = base.fetch_open_orders(symbol = 'BTC/JPY')
#出力
pprint(open_order)
# 出力結果
# [{'amount': 0.005,
# 'average': None,
# 'clientOrderId': None,
# 'cost': 0.0,
# 'datetime': '2021-05-04T01:25:45.000Z',
# 'fee': None,
# 'filled': 0.0,
# 'id': '3372744406',
# 'info': {'created_at': '2021-05-04T01:25:45.000Z',
# 'id': 3372744406,
# 'order_type': 'buy',
# 'pair': 'btc_jpy',
# 'pending_amount': '0.005',
# 'pending_market_buy_amount': None,
# 'rate': '4000000.0',
# 'stop_loss_rate': None},
# 'lastTradeTimestamp': None,
# 'price': 4000000.0,
# 'remaining': 0.005,
# 'side': 'buy',
# 'status': 'open',
# 'symbol': 'BTC/JPY',
# 'timestamp': 1620091545000,
# 'trades': None,
# 'type': None}]
約定状況の確認
約定後の取引内容の取得は、通貨レートを引数で渡して下記のように実行します。
trades = base.fetch_my_trades(symbol = 'BTC/JPY')
#出力
pprint(trades)
# 出力結果
# [{'amount': 0.01,
# 'cost': -53500.0,
# 'datetime': '2021-04-23T04:13:50.000Z',
# 'fee': {'cost': 0.0, 'currency': None},
# 'id': '357493257',
# 'info': {'created_at': '2021-04-23T04:13:50.000Z',
# 'fee': '0.0',
# 'fee_currency': None,
# 'funds': {'btc': '0.01', 'jpy': '-53500.0'},
# 'id': 357493257,
# 'liquidity': 'T',
# 'order_id': 3339115495,
# 'pair': 'btc_jpy',
# 'rate': '5350000.0',
# 'side': 'buy'},
# 'order': '3339115495',
# 'price': 5350000.0,
# 'side': 'buy',
# 'symbol': 'BTC/JPY',
# 'takerOrMaker': 'taker',
# 'timestamp': 1619151230000,
# 'type': None},]
【仮想通貨・ビットコイン】自動取引実践法・その他優良情報
最後までご覧いただきありがとうございました。当サイトでは仮想通貨・ビットコインにおける多様な自動取引手法の解説記事を多数取り扱っております。
取引所別: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を活用した仮想通貨の自動取引 |
最後に
お問い合わせフォーム
上記課題に向けてご気軽にご相談下さい。
お問い合わせはこちら