サラリーマンSEがサイドFIREを目指すブログ

30歳SE&FP2級保持。新人時代から投資を続けつつ、お金や投資、時々技術の話をゆるっと発信中。

Pythonで仮想通貨の4本値(OHLC)を記録してみた【.venv環境構築ガイド付き】

普段は資産運用の記事が多いのですが、今回はエンジニアらしく Pythonを使った仮想通貨の記録プログラム を紹介します。

「仮想通貨の価格推移を長期的に記録したい」と思ったことはありませんか?
多くのサイトでは 直近1年程度 しか見られず、もっと細かく追いたいと感じる方も多いはず。
そこで、私が保有している リップル(XRP) の値動きを記録するため、Pythonで4本値(始値・高値・安値・終値)を保存できるプログラムを作ってみました。


開発環境

  • OS:Windows 11
  • 言語:Python 3.x
  • 開発ツール:Visual Studio Code

Python環境構築手順(Windows向け)

1. Pythonをインストール

公式サイトからWindows用のPythonをインストールしてください。
👉 Python公式ダウンロードページ
以下の赤丸部分を押してダウンロードしてください。Python3以上なら大丈夫です。

ダウンロードしたインストーラを実行してInstall Nowをクリックします。正常終了したらpythonの準備完了です。

2. VS Codeをインストール

プログラミング用エディタとしてVS Codeを利用します。
👉 Visual Studio Code公式サイト
Downloade for windowsをクリックしてインストーラをダウンロードします。

インストーラを実行してダウンロードします。色々聞かれますが基本はデフォルトでいいです。インストール出来たらVS Codeも準備完了です。

3. 仮想環境(.venv)の作成

VS Codeで以下を実行します。 まずはVS Codeを開いてください。 開いたら以下の手順で操作してください 1. Ctrl + Shift + P → 「Python: 環境作成」を選択
2. インストール済みのPythonバージョンを選ぶんでください(スクショは筆者の古いPythonバージョンですが、皆様はダウンロードしたPythonバージョンを選んでください 3. .venv フォルダが自動生成されます

以下を実行して仮想環境を有効化してください:

.venv\Scripts\activate

※.venvをVS Code上でアクティベートできない方はコマンドプロンプト上で実行してみてください 有効化出来たら画像のように(.venv)が頭につきます。

4. 必要なライブラリのインストール

仮想環境が準備できたらライブラリを導入します。

pip install pycoingecko
pip install pandas

これでAPIを使う準備が整いました。

プログラム実装例

以下のコードを coin_gecko.py として保存してください。

from pycoingecko import CoinGeckoAPI
from datetime import datetime
import pandas as pd
import numpy as np
import time
import os

# ----------------------------
# 定数
# ----------------------------
SYMBOLS = [
    'solana',  # SOL
    'stepn',  # GMT
    'green-satoshi-token',  # GST
    'green-satoshi-token-on-eth',  # GST-ETH
    'bitcoin',  # BTC
    'ethereum',  # ETH
    'stellar',  # XLM
    'usd-coin',  # USDC
]

CURRENCIES = ['usd', 'jpy']
YMD_COLS = ['ymd', 'year', 'month', 'day']
OHLC_COLS = ['open', 'high', 'low', 'close']

cg = CoinGeckoAPI()

# ----------------------------
# 時間データを整形
# ----------------------------
def process_dates(timestamps):
    dates, ymd, years, months, days, hours = [], [], [], [], [], []

    for ts in timestamps:
        loc = datetime.utcfromtimestamp(int(ts / 1000))
        dates.append(loc)
        ymd.append(f"{loc.year:04}/{loc.month:02}/{loc.day:02}")
        years.append(loc.year)
        months.append(loc.month)
        days.append(loc.day)
        hours.append(loc.hour)

    return dates, ymd, years, months, days, hours

# ----------------------------
# OHLCデータ取得と整形
# ----------------------------
def fetch_ohlc(symbol, currency, days=7):
    ohlc = cg.get_coin_ohlc_by_id(symbol, currency, str(days))
    df = pd.DataFrame(ohlc, columns=['date'] + OHLC_COLS)

    dates, ymd, years, months, days, hours = process_dates(df['date'])
    df['date'] = dates
    df['ymd'] = ymd
    df['year'] = years
    df['month'] = months
    df['day'] = days
    df['hour'] = hours

    return df

# ----------------------------
# 日次データに変換
# ----------------------------
def to_daily(df):
    open_price = df[df['hour'] == 0][['ymd', 'open'] + YMD_COLS[1:]]
    close_price = df[df['hour'] == 20][['ymd', 'close'] + YMD_COLS[1:]]
    high_low = df.groupby('ymd').agg({'high': np.max, 'low': np.min}).reset_index()

    daily = open_price.merge(close_price, on=['ymd'] + YMD_COLS[1:], how='inner')
    daily = daily.merge(high_low, on='ymd', how='inner')
    return daily[['ymd'] + OHLC_COLS + YMD_COLS[1:]]

# ----------------------------
# CSV保存
# ----------------------------
def save_to_csv(symbol, currency, new_data):
    filename = f"{symbol}_{currency}.csv"

    if os.path.exists(filename):
        old_data = pd.read_csv(filename)
        merged = pd.concat([old_data, new_data]).drop_duplicates().sort_values(YMD_COLS)
        print(f"更新: {filename}")
    else:
        merged = new_data
        print(f"新規作成: {filename}")

    merged.to_csv(filename, index=False)

# ----------------------------
# メイン処理
# ----------------------------
def main():
    for symbol in SYMBOLS:
        print(f"\n{'-'*20} {symbol} {'-'*20}")
        for currency in CURRENCIES:
            df = fetch_ohlc(symbol, currency)
            daily = to_daily(df)
            print(f"通貨: {currency}, データ件数: {len(daily)}")
            save_to_csv(symbol, currency, daily)
            time.sleep(5)  # API呼び出し制限回避用

if __name__ == "__main__":
    main()

実行方法:

python coin_gecko.py

これで csv ファイルに仮想通貨の4本値が記録されます。 日本円とドル両方を記録します。他のコインを見たい場合はSYMBOLS変数のリストに追加すればオッケーです。

仮想通貨価格記録を自動化する方法

手動で実行するのが面倒な方は、Windowsの タスクスケジューラ を使って毎朝自動実行できます。 さらに本格的にやるなら、Raspberry Pi などの小型サーバーに常時稼働させても面白いです。

実際に使ってみた感想

  • リップル(XRP)の値動きが 長期的に見えるようになった

  • 確定申告に備えて利益の管理がしやすくなる

  • データをPandasで加工して可視化すると、トレンド把握にも役立つ

投資や取引履歴を残していない人でも、この仕組みがあれば 自分専用の価格データベース を作れます。

まとめ

  • Python + CoinGecko API で仮想通貨の4本値を取得できる

  • 環境構築(Python、VS Code、.venv)さえできれば誰でも実行可能

  • タスクスケジューラやラズパイを使えば自動化も可能

また今回のようなプログラム系も投稿していこうと思います。読んでいただきありがとうございました。

【関連記事】 www.se30invest.com

www.se30invest.com

プライバシーポリシーお問い合わせサイトマップ | 運営者情報