🕯️

XRPL DEXのロウソク足を取得する

2024/01/05に公開

XRP Ledgerとは

XRP Ledgerは、分散型のパブリックブロックチェーンです。XRP Ledgerは、DEX機能やNFT機能をはじめとした様々なネイティブ機能を備えており、日々進化を続けています。

https://xrpl.org/ja/index.html

この記事ではXRPL DEXのロウソク足情報の取得方法について説明します。

XRPL DEX自体の解説については次の記事をご覧ください。

https://zenn.dev/tequ/articles/use-original-dex

book_changesコマンド

XRPL DEXのロウソク足情報はbook_changesコマンドを利用することで取得することができます。

記事執筆時点では、book_changesコマンドに関するドキュメントは存在していませんが、次のIssueが存在します。
https://github.com/XRPLF/xrpl-dev-portal/issues/1881

book_changesコマンドを使ってみる

book_changesコマンドは次のような形式で利用します。

import { Client } from 'xrpl'
const client = new Client("wss://s2.ripple.com")

const main = async () => {
  await client.connect()
  const response = await client.request({
    command: 'book_changes',
    ledger_index: "validated",
  })
  console.log(response.result)
  await client.disconnect()
}

main()

出力される結果(response.result)は次のような形式になります

{
  changes: [
    {
      close: '495049.5049504958',
      currency_a: 'XRP_drops',
      currency_b: 'rEn9eRkX25wfGPLysUMAvZ84jAzFNpT5fL/USD',
      high: '495049.5049504958',
      low: '495049.5049504958',
      open: '495049.5049504958',
      volume_a: '32307193',
      volume_b: '65.26052985999991'
    },
    {
      close: '1649998.270906047',
      currency_a: 'XRP_drops',
      currency_b: 'rcEGREd8NmkKRE8GE424sksyt1tJVFZwu/5553444300000000000000000000000000000000',
      high: '1649998.270906047',
      low: '1649998.270906047',
      open: '1649998.270906047',
      volume_a: '2995886697',
      volume_b: '1815.69081'
    },
    {
      close: '1809330.142969804',
      currency_a: 'XRP_drops',
      currency_b: 'rhub8VRN55s94qWKDv6jmDy1pUykJzF3wq/EUR',
      high: '1809330.142969804',
      low: '1809330.142969804',
      open: '1809330.142969804',
      volume_a: '32437761',
      volume_b: '17.928049850956'
    },
    {
      close: '1617798.845064956',
      currency_a: 'XRP_drops',
      currency_b: 'rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B/USD',
      high: '1617798.845064956',
      low: '1617798.845064956',
      open: '1617798.845064956',
      volume_a: '32307193',
      volume_b: '19.9698455086379'
    },
    {
      close: '0.9009009009009181',
      currency_a: 'rhub8VRN55s94qWKDv6jmDy1pUykJzF3wq/EUR',
      currency_b: 'rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B/USD',
      high: '0.9009009009009181',
      low: '0.9009009009009181',
      open: '0.9009009009009181',
      volume_a: '17.963905950658',
      volume_b: '19.93993560523'
    }
  ],
  ledger_hash: '24F9559E1BC238C42BC170BE3344AF270B4BA3050ACAC6F86141F392287CB5EA',
  ledger_index: 84858228,
  ledger_time: 756927592,
  type: 'bookChanges'
}

changesフィールドに指定したレジャーで変更があったロウソク足情報が配列形式で格納されています。

特定期間内のレジャー情報を取得し結合することで、その期間内で変更があったロウソク足情報(1時間足、日足など)を取得することができます。

ただし、パブリックノードではRate Limitが存在するため、独自のノードを利用することが非常に推奨されます。

通貨のフォーマット

currency_acurrency_bフィールドには、それぞれの通貨を一意に識別する文字列が格納されています。

通貨がネイティブトークンであるXRPの場合、XRP_dropsが設定されます。XRPの最小単位drops(0.000001XRP=1drop)で通貨の金額が利用されることが分かります。
それ以外のトークンの場合、issuercurrencyを組み合わせた形式で設定されます。
例えば、rhub8VRN55s94qWKDv6jmDy1pUykJzF3wq/EURは、rhub8VRN55s94qWKDv6jmDy1pUykJzF3wqが発行したEURトークンを表します。

ロウソク足の情報

openclosehighlowvolume_avolume_bフィールドには、それぞれロウソク足の始値、終値、高値、安値、通貨Aの取引量、通貨Bの取引量が格納されています。

openclosehighlowフィールドには、通貨A/通貨Bでのレートが格納されています。
このコマンドは1レジャーの情報を取得するため、1レジャー内で同じ通貨ペアに複数回の変更がない場合、openclosehighlowフィールドの値は同じになります。

まとめ

book_changesコマンドを利用することで、XRPL DEXのロウソク足情報を取得することができます。

このコマンドを活用することで次のようなDEXインターフェースを作成することができます。
https://unhosted.exchange

興味を持たれた方はXRP Ledger開発者のDiscordチャンネルへ是非お越しください!
日本語チャンネルもありますので、英語ができなくても大丈夫です!
https://xrpldevs.org

また、XRPL JapanのDiscordサーバもありますので、こちらもぜひご参加ください!
https://discord.gg/invite/xrpljapan

私のX/Twitterアカウントはこちら!

Discussion