こんにちは、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ライブラリを活用するには、事前にインストールが必要です。
pip3 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 | 利用メソッド |
---|---|---|
取引所で取り扱う通貨情報の取得 | Public | load_markets() |
板情報の取得 | Public | fetch_ticker() |
板情報+注文量の取得 | Pubulic | fetchOrderBook() |
ローソク足の取得 | Public | fetch_ohlcv() |
準備事項|オブジェクト作成
特定の取引所におけるパブリック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(orderbook)
# 出力イメージ 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 | 利用メソッド |
---|---|---|
口座残高の取得 | Private | fetch_balance() |
仮想通貨の取引(注文) | Private | create_order() |
注文内容をキャンセル | Private | cancel_order() |
(未約定の)注文状況の確認 | Private | fetch_open_orders() |
約定状況を確認 | Private | fetch_my_trades() |
特定の取引所におけるプライベートAPIの呼び出し方を解説します。プライベートAPIを呼び出すには、事前に取引所のサイトでアカウント登録を済ませた後、APIキーおよびSecretキーを取得しておく必要があります。
暗号資産の取引が初めての方は、CoincheckのAPIをおすすめします。即日口座開設ができ、他の取引所と比べて少額取引が可能です。そのため、万一のAPI取引失敗リスクを最小限に抑えることができるでしょう。
既にAPI情報をお持ちの方はこのままお進みください。
この先は有料会員のみ閲覧できるコンテンツです

既に有料会員の方はこちら:
会員について詳しく知る: