【Javascript・Node.js】ccxtを用いた仮想通貨・ビットコイン取引の自動売買|板情報・価格・注文・約定

当ページには広告が含まれています。

こんにちは、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自動売買おすすめ
0.005 BTC無料無料無料407円0.0005 BTC×★★★★★
0.0001BTCMaker:-0.01%
Taker:0.05%
無料無料0円/
400円(大口出金)
無料×★★★★☆
0.0001BTCMaker:-0.02%
Taker:0.12%
無料無料550円/
770円(3万円以上)
0.0006 BTC×★★★★☆
0.0001 BTC無料無料無料330 円無料××★★★☆☆
表:暗号資産取引所の比較表(最低取引量の単位はBTCで記載)
補足
  1. 現物取引手数料の対象通貨はBTC/JPY。手数料は約定数量 × 上記記載の割合[%]として算出可能。

代表的な国内の暗号資産(仮想通貨)取引所を上記に示します。

その中でもccxtに対応しており、自動取引とも相性が良い筆者おすすめの取引所は下記になります。

API取得手順はこちらAPI取得手順はこちら
※口座開設ページは画像リンクからも確認できます

上記手数料比較表も参考にし、自動取引システムの方向性に合った取引所APIが利用できると良いですね。

ccxtを用いたJavaScript(npm)プログラミングと自動売買

ccxtライブラリをインストールすることで実行可能な下記メソッドについて1つずつ紹介します。

実施内容パブリックorプライベートAPIccxtメソッド
取引可能な通貨情報の確認パブリック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.●●● ({})部分に記載しましょう。

今回はのパブリック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ボリンジャーバンドオシレータ
PythonMACDオシレータ
PythonRSIオシレータ
Python時系列予測モデルの構築機械学習・AI
【トレンド】:値動きが上昇・下降どちらのトレンドなのか判断に有効
【オシレータ】:現在の相場に対する買われすぎ・売られすぎの判断に有効

その他仮想通貨自動トレード解説記事

スクロールできます
対応言語記事名
Python【データ収集】仮想通貨の過去データを大量取得する方法
Python【初心者向け】ccxtを活用した仮想通貨の自動取引
Node.js【初心者向け】ccxtを活用した仮想通貨の自動取引

最後に

この記事が気に入ったら
フォローしてね!

目次