Pythonでアルトコインの価格をまとめて取得する

Pythonでアルトコインの価格をまとめて取得する 仮想通貨・暗号資産
+------------+-----------+----------+-----------+
|            | binance   | mexc     |    coinex |
+============+===========+==========+===========+
| ETH/USDT   | 359172.74 | 359176.2 | 359175    |
+------------+-----------+----------+-----------+
| SOL/USDT   | 15625.29  | 15638.84 |  15631.8  |
+------------+-----------+----------+-----------+
| ADA/USDT   | 131.81    | 131.93   |    131.58 |
+------------+-----------+----------+-----------+
| GALA/USDT  | 35.18     | 35.2     |     35.16 |
+------------+-----------+----------+-----------+
| TOWN/USDT  | ---       | ---      |     65.48 |
+------------+-----------+----------+-----------+
| ONE/USDT   | 31.59     | 31.6     |     31.99 |
+------------+-----------+----------+-----------+
| JEWEL/USDT | ---       | 2019.82  |   1991.77 |
+------------+-----------+----------+-----------+

このような感じで仮想通貨の価格を見たいと思いませんか?
取引所、通貨の組み合わせを自由に選んで。

この記事では、上記のように表示する方法を解説します。
自分だけのアルトコイン価格一覧を作りましょう。

本記事の内容

  • GameFi関連の仮想通貨の価格をまとめて見たい
  • アルトコイン価格一括取得機能のシステム要件
  • アルトコイン価格一括取得機能のコード

それでは、上記に沿って解説していきます。

GameFi関連の仮想通貨の価格をまとめて見たい

GameFiとは、次のブロックチェーンゲーム(NFTゲーム)です。

  • Town Star
  • DeFi Kingdoms

個人的には、この2つに注目しています。
これらに関連する仮想通貨には、それぞれ以下が存在します。

Town Star

  • GALA
  • TOWN

DeFi Kingdoms

  • ONE
  • JEWEL

それぞれ2つ存在しているのは、意味があります。
ここでは、簡単に説明しておきます。

GALAとONEは、それぞれのゲームに参加する際に必要となります。
TOWNとJEWELは、それぞれのゲーム内で得ることができます。

そうすると、次のように考えるようになります。
「これら4つの仮想通貨の価格をまとめて見たい」

まとめて見ることで比較することが可能になります。
しかし、これらのアルトコインの価格をまとめて確認できるツールはありません。

少なくとも見つけることが、できませんでした。
そもそも、それほど人気のある仮想通貨ではありませんからね。

それに頑張って探すぐらいなら、作った方が早いです。
勉強にもなりますからね。
ということで、自作することにしました。

「アルトコイン価格一括取得機能」
自作するプログラムをこのように呼びます。

以上、GameFi関連の仮想通貨の価格をまとめて見たいことについて説明しました。
次は、アルトコイン価格一括取得機能のシステム要件を確認します。

アルトコイン価格一括取得機能のシステム要件

アルトコイン価格一括取得機能のシステム要件は、以下となります。

  • Python
  • ccxt
  • pandas-datareader
  • tabulate

それぞれを下記で説明します。

Python

Pythonで開発します。
Pythonが動けば、OSは何でも構いません。

つまり、以下を含むクロスプラットフォーム対応ということです。

  • Windows
  • macOS
  • Linux

ただし、Pythonのバージョンには気をつけてください。
Python 3.7以降をオススメします。

Python 3.7以降というのは、理由があります。
以下のPython公式開発サイクルを見てください。

バージョンリリース日サポート期限
3.62016年12月23日2021年12月23日
3.72018年6月27日2023年6月27日
3.82019年10月14日2024年10月
3.92020年10月5日2025年10月
3.102021年10月4日2026年10月

Python 3.6は、2021年末でサポートが切れています。
そのため、Python 3.7以降としています。
まあ、Python 3.6でも動くとは思いますけどね。

最新のPython 3.10系をインストールする場合は、次の記事を参考にしてください。

さらにそれをアップグレードするなら、こちらの記事が参考となります。
いきなり3.10.1のインストールでもいいかもしれません。

ccxt

ccxtは、Pythonで仮想通貨を扱う際には必須と言えます。
ccxtの詳細は、次の記事で解説しています。

ccxtさえあれば、各取引所のAPIは不要です。
価格取得に関しては、不要と言う意味です。

pandas-datareader

pandas-datareaderは、為替レートを取得するために利用します。
pandas-datareaderの詳細は、次の記事をご覧ください。

pandas-datareaderを利用して、円ドルの為替レートを取得します。

tabulate

tabulateを使えば、次のような表形式でデータを表示できます。

+----------+----------+---------------------+ 
| Planet   |   R (km) |   mass (x 10^29 kg) | 
+==========+==========+=====================+ 
| Sun      |   696000 |          1.9891e+09 | 
+----------+----------+---------------------+ 
| Earth    |     6371 |       5973.6        | 
+----------+----------+---------------------+ 
| Moon     |     1737 |         73.5        | 
+----------+----------+---------------------+ 
| Mars     |     3390 |        641.85       | 
+----------+----------+---------------------+

tabulateの詳細は、次の記事をご覧ください。

まとめ

上記で挙げたライブラリは、インストールしておきます。
プログラムを動かすためには、それぞれをインストールしておく必要があります。

以上、アルトコイン価格一括取得機能のシステム要件の説明でした。
次は、アルトコイン価格一括取得機能のコードを確認しましょう。

アルトコイン価格一括取得機能のコード

アルトコイン価格一括取得機能のコードは、以下。

import ccxt
import pandas as pd
from tabulate import tabulate
from pandas_datareader.data import get_quote_yahoo

EXCHANGES = ["binance", "mexc", "coinex"]
SYMBOLS = ["ETH/USDT", "SOL/USDT", "ADA/USDT", "GALA/USDT", "TOWN/USDT", "ONE/USDT", "JEWEL/USDT"]


def get_exchange_result(exchange_id, symbols):
    # 取引所ID→クラス→インスタンス
    exchange_class = getattr(ccxt, exchange_id)
    exchange = exchange_class()

    result_dic = {}
    # 取扱い通貨の情報取得
    tickers = exchange.fetch_tickers()
    for symbol in symbols:
        data = tickers.get(symbol)
        if data:
            ask = data["ask"]
            result_dic[symbol] = ask
        else:
            result_dic[symbol] = None

    return result_dic


if __name__ == '__main__':

    all_result = {}

    # 取引所毎に通貨価格を取得
    for exchange_id in EXCHANGES:
        exchange_result = get_exchange_result(exchange_id, SYMBOLS)
        all_result[exchange_id] = exchange_result

    # 辞書型からDataFrameに変換
    df = pd.DataFrame(data=all_result)

    # 為替レート取得
    rate_result = get_quote_yahoo('JPY=X')
    ary_rate_result = rate_result["price"].values
    exchange_rate = ary_rate_result[0]

    # 円換算
    df_yen = df * exchange_rate
    # 小数の丸め処理
    df_yen = df_yen.round(2)
    # NaNの置き換え→「---」
    df_yen = df_yen.fillna("---")
    # テーブル形式で表示
    tbl = tabulate(df_yen, showindex="always", headers="keys", tablefmt="grid")
    print(tbl)

システム要件を満たしていれば、上記コードは動くはずです。
実行すると、冒頭の表形式のデータを表示します。

各自で修正する必要があるのは、次の部分です。

EXCHANGES = ["binance", "mexc", "coinex"]
SYMBOLS = ["ETH/USDT", "SOL/USDT", "ADA/USDT", "GALA/USDT", "TOWN/USDT", "ONE/USDT", "JEWEL/USDT"]

EXCHANGESには、取引所IDをリスト形式で設定しています。
SYMBOLSには、通貨ペアをリスト形式で設定します。

通貨ペアは、大体イメージできると思います。
今回は、テザー(USDT)とペアになるように設定しています。

そうすれば、円ドルの為替レートを組み合わせることができます。
組み合わせて、日本円で仮想通貨の価格を表示できるようになります。

取引所IDに関しては、次のコードで確認できます。

import ccxt
# 取引所一覧
exchanges = ccxt.exchanges
print(len(exchanges))
print(exchanges)

実行した結果は、以下。

115
['aax', 'ascendex', 'bequant', 'bibox', 'bigone', 'binance', 'binancecoinm', 'binanceus', 'binanceusdm', 'bit2c', 'bitbank', 'bitbay', 'bitbns', 'bitcoincom', 'bitfinex', 'bitfinex2', 'bitflyer', 'bitforex', 'bitget', 'bithumb', 'bitmart', 'bitmex', 'bitpanda', 'bitrue', 'bitso', 'bitstamp', 'bitstamp1', 'bittrex', 'bitvavo', 'bl3p', 'blockchaincom', 'btcalpha', 'btcbox', 'btcmarkets', 'btctradeua', 'btcturk', 'buda', 'bw', 'bybit', 'bytetrade', 'cdax', 'cex', 'coinbase', 'coinbaseprime', 'coinbasepro', 'coincheck', 'coinex', 'coinfalcon', 'coinmate', 'coinone', 'coinspot', 'crex24', 'cryptocom', 'currencycom', 'delta', 'deribit', 'digifinex', 'eqonex', 'equos', 'exmo', 'flowbtc', 'ftx', 'ftxus', 'gateio', 'gemini', 'hitbtc', 'hitbtc3', 'hollaex', 'huobi', 'huobijp', 'huobipro', 'idex', 'independentreserve', 'indodax', 'itbit', 'kraken', 'kucoin', 'kucoinfutures', 'kuna', 'latoken', 'latoken1', 'lbank', 'liquid', 'luno', 'lykke', 'mercado', 'mexc', 'ndax', 'novadax', 'oceanex', 'okcoin', 'okex', 'okex3', 'okex5', 'paymium', 'phemex', 'poloniex', 'probit', 'qtrade', 'ripio', 'stex', 'therock', 'tidebit', 'tidex', 'timex', 'upbit', 'vcc', 'wavesexchange', 'whitebit', 'xena', 'yobit', 'zaif', 'zb', 'zipmex', 'zonda']

現時点(2022年1月中旬)では、115個の取引所を確認できます。
また、次のページでも取引所IDを確認することが可能です。
https://github.com/ccxt/ccxt

アルトコイン価格一括取得機能のコードを実行した結果は、本記事の冒頭のモノとなります。
もちろん、実行するタイミングで価格は異なります。

なお、行と列を入れ替えたい場合は、次のようにコードを変更します。

    # テーブル形式で表示
    tbl = tabulate(df_yen.T, showindex="always", headers="keys", tablefmt="grid")

データフレームのdf_yenを転置させるだけです。
データフレームの転置は、変数に「.T」を加えるだけです。

+---------+------------+------------+------------+-------------+-------------+------------+--------------+
|         |   ETH/USDT |   SOL/USDT |   ADA/USDT |   GALA/USDT | TOWN/USDT   |   ONE/USDT | JEWEL/USDT   |
+=========+============+============+============+=============+=============+============+==============+
| binance |     359121 |    15651.4 |     131.73 |       35.27 | ---         |      31.71 | ---          |
+---------+------------+------------+------------+-------------+-------------+------------+--------------+
| mexc    |     359088 |    15664.8 |     131.82 |       35.29 | ---         |      31.7  | 2006.5       |
+---------+------------+------------+------------+-------------+-------------+------------+--------------+
| coinex  |     359124 |    15654.5 |     131.61 |       35.27 | 65.1        |      32.09 | 1965.01      |
+---------+------------+------------+------------+-------------+-------------+------------+--------------+

こちらの方が見やすいという人もいるでしょう。
その辺は、各自で自由に調整してください。

ちなみに、JEWELは取引所間でそこそこ差異があります。
裁定取引も面白いかもしれません。
ただ、手数料を考慮するとあまり儲けはないかもです。

以上、アルトコイン価格一括取得機能のコードの説明でした。

タイトルとURLをコピーしました