【Python】暗号資産の終値価格データを一括取得してタブ区切りファイルに出力するコード

本ブログはアフィリエイト広告を利用しています

WEB / アプリ
WEB / アプリ
この記事は約6分で読めます。

とっちゃん@nyanco! です。

今回は複数の暗号資産(仮想通貨)の日次価格データを一括取得し、タブ区切りテキストファイルに出力するPythonコードの共有です。

肉玉にゃんこ

確定申告などの税金計算の時に便利なツールですにゃ~

日時価格は暗号資産取引所から取得する形式となります。同じ暗号資産でも取引所によって微妙な差異があるので、厳密な計算などで使用する際はご注意ください。
また、各取引所のパブリックAPIを通じてデータ取得するため、過剰なリクエストを行うとAPIにアクセスできなくなるなど何かしらのペナルティを受ける可能性があります。
くれぐれも自己責任の上でご利用ください。

スポンサーリンク

コードの動作環境

  • OS:Windows10macOS Ventura 13.6.1
  • Pythonバージョン:3.11.2
  • 必要ライブラリ:
    • os(OSと対話するためのPython標準ライブラリ。標準ライブラリなのでインストール不要
    • ccxt(暗号通貨取引所のAPIを統一的に扱うためのライブラリ)
    • pandas(データ分析や操作のためのライブラリ)
    • datetime(日付と時間を扱うためのPython標準ライブラリ)

必要ライブラリをインストールするコードは以下となります。

pip install ccxt
pip install pandas

暗号資産の日次価格データをタブ区切りテキストファイルに出力するコード

早速ですがコードはこちら!

import os
import ccxt
import pandas as pd
from datetime import datetime, timedelta

def fetch_data(exchange, symbols, start_date, end_date):
    data = {symbol: [] for symbol in symbols}
    current_date = start_date

    while current_date <= end_date:
        for symbol in symbols:
            try:
                ohlcv = exchange.fetch_ohlcv(symbol, '1d', exchange.parse8601(current_date.isoformat()), limit=1)
                if ohlcv:
                    timestamp, open_price, high, low, close, volume = ohlcv[0]
                    data[symbol].append([datetime.fromtimestamp(timestamp/1000), close])
                else:
                    data[symbol].append([current_date, None])
            except Exception as e:
                print(f"Error fetching data for {symbol} on {current_date}: {e}")
                data[symbol].append([current_date, None])
        
        current_date += timedelta(days=1)

    return data

# Binance取引所のインスタンスを作成
exchange = ccxt.binance()

# 開始日と終了日を設定
start_date = datetime(2024, 11, 1)
end_date = datetime(2024, 11, 30)

# 通貨ペアを指定
symbols = ['BTC/USDT','ETH/USDT','BNB/USDT']

# データを取得
fetched_data = fetch_data(exchange, symbols, start_date, end_date)

# データフレームに変換
df = pd.DataFrame({
    'Date': [date for date, _ in fetched_data[symbols[0]]],
    **{symbol: [close for _, close in fetched_data[symbol]] for symbol in symbols}
})

# タブ区切りテキストとしてファイルに出力
# 現在のスクリプトのディレクトリを取得
current_directory = os.path.dirname(os.path.abspath(__file__))

# 出力ファイル名を設定
output_filename = 'crypto_data.txt'

# 出力ファイルのフルパスを作成
output_path = os.path.join(current_directory, output_filename)

# タブ区切りテキストとしてファイルに出力
df.to_csv(output_path, sep='\t', index=False)
print(f"Data has been saved to {output_path}")

コードは自動生成AI「perplexity」で作成したものを元にカスタマイズしています。

自分用にカスタマイズする箇所は以下の2点です。

  • 28行目:取得する取引所を指定 ※デフォルトでは「binance」を指定 ※1
  • 31行目:取得開始日指定 ※存在しない日を指定するとエラーになる(取得終了日も同じく)
  • 32行目:取得終了日指定 ※期間が長いとAPIへの過剰リクエストとなるので要注意
  • 35行目:取得する通貨ペアを指定 ※複数指定可。デフォルトではBTC/USDT、ETH/USDT、BNB/USDTを指定。多過ぎるとAPIへの過剰リクエストとなるので要注意 ※2

※1 ccxtライブラリに対応している取引所を指定。ただ、対応はしていても価格取得ができない取引所もあり(日本の取引所はことごとくダメでした…)
※2 27行目で指定した取引所で扱っている通貨ペアを指定。扱ってないペアを指定しても取得できずエラーとなります

以下、python実行後の流れです。

▼PythonをRUNすると数秒〜数分後に以下のように「Data has been saved to crypto_data.txt」と表示されます。

▼Pythonファイルと同じディレクトリに「crypto_data.txt」というテキストファイルが生成されているので開きます。

▼このようにタブ区切りテキストで指定期間の指定した通貨ペアの終値が確認できます!

まるまるコピーしてExcelなりスプレッドシートなりにペーストすると、このようにセルに分かれて見やすく編集しやすいデータになります。

肉玉にゃんこ

あとは自分が使いやすいように編集していきますにゃ〜!

▼サクッとすぐに使えるように下記より.pyファイルのダウンロードも可能です(zip圧縮しています)。

→暗号資産の日次価格を取得する.pyファイルをダウンロード

おわりに

本記事がどなたかの参考になれば幸いです。

今回は以上となります。
最後まで読んでいただきましてありがとうございました!
それではまた〜✧٩(ˊωˋ*)و✧

コメント