こんにちは、DXCEL WAVEの運営者(@dxcelwave)です!
- 仮想通貨の自動売買・取引支援を行うツール開発にあたり、非常に便利なccxtライブラリをご紹介。
- 記事前半ではccxtについて詳しく解説。
- 記事後半ではJavaScript(npm)を用いたプログラム構築方法を解説。
ccxtとは|暗号資産(仮想通貨)取引所との関係性
ccxtとは、世界の100以上を超える仮想通貨取引所のAPI操作が集約されたモジュールです。
ccxtを用いると、同じプログラミングで複数取引所のAPIを呼ぶ出すことが可能です。
本来APIの仕様は取引所毎に異なるものですが、ccxtではAPIで機能毎の呼出方やアウトプットまで共通化されているため、仮想通貨の自動取引を検討される方にとって非常に便利なツールと言えます。
パグリックAPIとプライベートAPI
ccxtで実行できる取引所のAPIには、パブリックAPIとプライベートAPIという2つの種類があります。
パブリックAPI | 取引所のアカウント登録なしに実行できる |
プライベートAPI | 取引所にアカウント登録し、APIキーとSecretキーを取得した上で実行できる |
パブリックAPIを用いてできること
- 取引所で取引可能な通貨情報の確認
- 板情報の取得
- ローソク足の取得
プライベートAPIを用いてできること
- 口座残高の確認
- 仮想通貨取引(注文)
- 注文中の取引キャンセル
- (未約定の)注文状況を確認
- 約定状況を確認
【参考】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を用いたJavaScript(npm)プログラミングと自動売買
ccxtライブラリをインストールすることで実行可能な下記メソッドについて1つずつ紹介します。
実施内容 | パブリックorプライベートAPI | ccxtメソッド |
---|---|---|
取引可能な通貨情報の確認 | パブリック | load_markets() |
板情報の取得 | パブリック | fetch_ticker() |
口座残高の取得 | プライベート | fetch_balance() |
仮想通貨取引(注文) | プライベート | createLimitBuyOrder() createMarketBuyOrder() createLimitSellOrder() createMarketSellOrder() |
注文中の取引キャンセル | プライベート | cancelOrder() |
(未約定の)注文状況の確認 | プライベート | fetchOpenOrders() |
約定状況を確認 | プライベート | fetchMyTrades() |
Node.js環境下でのプログラム実行方法と出力イメージについて以下見ていきましょう。
ccxtの活用準備
ccxtライブラリを活用するには、事前にインストールが必須です。npmパッケージに以下をインストールしましょう。
npm install ccxt --save
【実践】Node.js × ccxt|パブリックAPI
準備事項|オブジェクト作成
特定の取引所のパブリックAPIを呼び出すには、その取引所に対応したオブジェクトを事前に生成する必要があります。
パブリックAPI利用時のひな型となるコードを下記に示します。
'use strict';
// ccxtをインポート
const ccxt = require ('ccxt');
// 関数
async function ccxtCall() {
// 取引所情報を記述
// ccxt.●●●●()の●●●●部分は取引所名を入力(今回は例としてbitbankを利用)
let base = new ccxt.bitbank ({})
// ↓↓ 実行対象
// ここに後述のメソッドを挿入
// ↑↑ 実行対象
}
ccxtCall();
APIを利用したい取引所をbase = new ccxt.●●● ({})
部分に記載しましょう。
今回はbitbankのパブリックAPIを呼び出すオブジェクトを例として記載しています。
ccxtでAPIが呼び出せる他の取引所はccxtのgithubライブラリ(JavaScript)から確認できます。
// ↓↓ 実行対象
// ここに後述のメソッドを挿入
// ↑↑ 実行対象
後続で紹介するメソッドを利用の際は、上記ひな型コードの部分にコピーして実行しましょう。
取引所で取り扱っている通貨情報の取得
取引所の通貨情報は、load_markets()
を用いて次のように実行します。
// ↓↓ 実行対象
console.log (base.id, await base.load_markets())
// 出力イメージ
// {
// 'BTC/JPY': {
// id: 'btc_jpy',
// symbol: 'BTC/JPY',
// base: 'BTC',
// quote: 'JPY',
// baseId: 'btc',
// quoteId: 'jpy',
// active: true,
// type: 'spot',
// linear: undefined,
// inverse: undefined,
// spot: true,
// swap: false,
// future: false,
// option: false,
// margin: false,
// contract: false,
// contractSize: undefined,
// expiry: undefined,
// expiryDatetime: undefined,
// optionType: undefined,
// strike: undefined,
// settle: undefined,
// settleId: undefined,
// precision: { amount: 4, price: 0 },
// limits: {
// leverage: [Object],
// amount: [Object],
// price: [Object],
// cost: [Object]
// },
板情報の取得
取引所の板情報は、fetch_ticker()
を用いて次のように実行します。
// ↓↓実行対象
console.log (base.id, await base.fetch_ticker(Symbol='BTC/JPY'))
// 出力イメージ
// {
// symbol: 'BTC/JPY',
// timestamp: 1648512861052,
// datetime: '2022-03-29T00:14:21.052Z',
// high: 5950000,
// low: 5707001,
// bid: 5840199,
// bidVolume: undefined,
// ask: 5840200,
// askVolume: undefined,
// vwap: undefined,
// open: undefined,
// close: 5840199,
// last: 5840199,
// previousClose: undefined,
// change: undefined,
// percentage: undefined,
// average: undefined,
// baseVolume: 630.375,
// quoteVolume: undefined,
// info: {
// sell: '5840200',
// buy: '5840199',
// open: '5712693',
// high: '5950000',
// low: '5707001',
// last: '5840199',
// vol: '630.3750',
// timestamp: '1648512861052'
// }
// }
【実践】Node.js × ccxt|プライベートAPI
特定の取引所のプライベートAPIの呼び出し方法を解説します。プライベートAPIを呼び出すには、事前に取引所のサイトでアカウント登録を済ませた後、APIキーおよびSecretキーを取得しておく必要があります。
既にAPIキーおよびシークレットキーを取得済みの方はこのままお進みください。
準備事項|オブジェクト作成
まず、下記のように事前にオブジェクトを生成しておきましょう。
プライベートAPI利用時のひな型となるコードを下記に示します。
'use strict';
// ccxtをインポート
const ccxt = require ('ccxt');
// 関数
async function ccxtCall() {
// 取引所情報を記述
// ccxt.●●●●()の●●●●部分は取引所名を入力(今回は例としてbitbankを利用)
let base = new ccxt.bitbank ({
apiKey: 'APIキーを記述',
secret: 'シークレットキーを記述',
})
// ↓↓ 実行対象
// ここに後述のメソッドを挿入していく
// ↑↑ 実行対象
}
ccxtCall();
パブリックAPI同様、APIを利用したい取引所をbase = new ccxt.●●● ({})
部分に記載しましょう。
APIキーとシークレットキーの記述も忘れないようにしましょう!
口座残高の取得
取引所の口座残高はfetch_balance()
をもとに取得できます。
// ↓↓実行対象
console.log (base.id, await base.fetch_balance())
// 出力イメージ
// {
// info: { success: '1', data: { assets: [Array] } },
// timestamp: undefined,
// datetime: undefined,
// JPY: { free: 1000, used: 1000, total: 1000 },
// BTC: { free: 2, used: 1, total: 3 },
// LTC: { free: 0, used: 0, total: 0 },
// XRP: { free: 0, used: 0, total: 0 },
// ETH: { free: 0, used: 0, total: 0 },
// MONA: { free: 0, used: 0, total: 0 },
// BCH: { free: 0, used: 0, total: 0 },
// XLM: { free: 0, used: 0, total: 0 },
// QTUM: { free: 0, used: 0, total: 0 },
// BAT: { free: 0, used: 0, total: 0 },
// OMG: { free: 0, used: 0, total: 0 },
// XYM: { free: 0, used: 0, total: 0 },
// LINK: { free: 0, used: 0, total: 0 },
// MKR: { free: 0, used: 0, total: 0 },
// BOBA: { free: 0, used: 0, total: 0 },
仮想通貨の取引(注文)
仮想通貨の注文には、成行注文と指値注文という2つの方法があります。また、購入時と売却時の場合で以下に示します。
暗号資産|購入時
指値注文の場合
// 引数情報
let symbol = 'BTC/JPY'
let amount = 0.0001
let price = 1000000
// 指値注文
console.log (base.id, await base.createLimitBuyOrder (symbol,
amount,
price,
))
成行注文の場合
// 引数情報
let symbol = 'BTC/JPY'
let amount = 0.0001
// 成行注文
console.log (base.id, await base.createMarketBuyOrder (symbol,
amount,
))
暗号資産|売却時
指値注文の場合
// 引数情報
let symbol = 'BTC/JPY'
let amount = 0.0001
let price = 1000000
// 指値注文
console.log (base.id, await base.createLimitSellOrder (symbol,
amount,
price,
))
成行注文の場合
// 引数情報
let symbol = 'BTC/JPY'
let amount = 0.0001
// 成行注文
console.log (base.id, await base.createMarketSellOrder (symbol,
amount,
))
仮想通貨注文時は引数を渡すことが必須です。以下引数情報を示します。
引数 | 概要 | 必須or任意 |
---|---|---|
symbol | 注文対象の通貨 | 必須 |
amount(またはquantity) | 仮想通貨の取引数量 | 必須 |
price | 指値価格[円] | 指値注文の場合は必須 |
// 出力イメージ
// {'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を渡して下記のように実行します。
// 引数情報
let order_id = 123445
let symbol = 'BTC/JPY'
// 注文キャンセル
console.log (base.id, await base.cancelOrder (order_id,
symbol,
))
引数 | 概要 | 必須or任意 |
---|---|---|
id | 注文idを指定する | 必須 |
symbol | 通貨情報 | 必須 |
// 出力結果
// {'id': 3372744406, 'success': True}
注文キャンセルが成立すると上記のようなレスポンスが得られます。
(未約定の)注文状況の確認
注文内容は、fetchOpenOrders()
をもとに照会できます。
// 注文状況確認
console.log (base.id, await base.fetchOpenOrders())
// 出力結果
// [{'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}]
約定状況の確認
約定後の取引内容は、fetchMyTrades()
をもとに照会できます。
// 約定情報確認
console.log (base.id, await base.fetchMyTrades())
// 出力結果
// [{'amount': 0.01,
// 'cost': -53500.0,
// 'datetime': '2022-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を活用した仮想通貨の自動取引 |
最後に
お問い合わせフォーム
上記課題に向けてご気軽にご相談下さい。
お問い合わせはこちら