0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

バディキャピタル|OHLCVの取得からPython解析まで完全ガイド

0
Posted at

金融時系列データの基礎 — OHLCV(Open, High, Low, Close, Volume)は、株式・暗号資産・FXなどあらゆるマーケット分析の出発点です。本記事では、Python を使って OHLCV データを取得し、前処理、集計、可視化、さらに簡単なテクニカル指標の計算までを “エンジニア向け” に網羅します。データ取得の手段、ライブラリ、コード例、落とし穴、ベストプラクティスを含め、実践に即した内容を提供します。


1. OHLCVとは? — 用語と意味

項目 内容
Open 期間の開始時点の価格(始値)
High 期間中の最高価格
Low 期間中の最低価格
Close 期間の終了時点の価格(終値)
Volume 期間中の取引量/出来高

この5つの値をひとまとめにしたのが OHLCV で、株式も暗号資産も共通の “ローソク足データ + 出来高” の形式。マーケットの動きを示す基礎データとして、チャート描画、テクニカル分析、バックテストなどの土台となります。


2. データソースと取得方法の選択肢

  • 暗号資産取引所の公式 API(例: Binance, Bybit など) — 取引ペアごとのローソク足 (OHLCV) を取得。
  • 汎用ラッパーライブラリ/パッケージ(例: CCXT) — 多数の取引所に対して統一インターフェースで OHLCV を取得可能。
  • 歴史データ提供サービス/API(例: CoinAPI, CoinGecko, サードパーティのデータ提供会社など) — 過去データをまとめて取得する用途に便利。
  • CSV/ファイル形式のデータ (例: 過去のヒストリカルデータを配布しているサービス) — 手軽だが、更新性や最新性で API には劣る。

3. Python による基本取得コード

import ccxt
import pandas as pd
from datetime import datetime
例: Binance から BTC/USDT の 1時間足を取得
exchange = ccxt.binance()
symbol = 'BTC/USDT'
timeframe = '1h'
limit = 500  # 最近 500 本のローソク足
candles = exchange.fetch_ohlcv(symbol, timeframe=timeframe, limit=limit)
df = pd.DataFrame(candles, columns=['timestamp', 'open', 'high', 'low', 'close', 'volume'])
タイムスタンプを datetime に変換
df['datetime'] = df['timestamp'].apply(lambda t: datetime.utcfromtimestamp(t/1000))
df.set_index('datetime', inplace=True)
df = df.drop(columns=['timestamp'])
print(df.head())

このように、fetch_ohlcv() を使えば簡潔にデータ取得が可能です。対応取引所かどうかは、exchange.has['fetchOHLCV'] プロパティで確認できます。また、他のライブラリや専用スクリプトとして、crypto-ohlcv のようなものもあり、こちらを使うと pandas DataFrame 形式であらかじめ整形されたデータを取得できます。


4. データ前処理と時系列整形

取得したままのデータは「リストのリスト + UNIX タイムスタンプ(ms)」という raw フォーマットです。実用につかうには、以下のような前処理が必要です:

  • タイムスタンプを datetime に変換
  • インデックスを日時 (datetime) に設定
  • カラムの名前を意味のあるものに変更 (open, high, low, close, volume)
  • データの昇順並び替え (必要に応じて)

これにより、時系列データとして扱いやすくなり、Pandas の時間ベース操作 (リサンプリング、スライシング、統計処理など) にスムーズに入力できます。


5. 集計・リサンプリング(時間足変換)

# 例: 1分足データ df_1m を 15分足に変換
df_15m = df_1m.resample('15T').agg({
    'open': 'first',
    'high': 'max',
    'low': 'min',
    'close': 'last',
    'volume': 'sum'
})

このように、任意の時間足への集約が可能です。バックテストや異なる戦略の比較には非常に強力です。


6. 可視化と技術分析の基本

ローソク足チャートや出来高付きグラフ、移動平均線 (MA)、ボリンジャーバンド、RSI などのテクニカル指標は、データ分析や戦略設計において非常に重要です。Python では以下のような方法が一般的です:

  • 可視化ライブラリ: matplotlib/mplfinance/plotly など
  • テクニカル指標ライブラリ: 独自計算、または TA-Lib や Pandas を使ったカスタム実装

簡単な例として、移動平均 (EMA) を加えてチャートを描画するコードは以下のようになります:

import matplotlib.pyplot as plt
df['EMA10'] = df['close'].ewm(span=10).mean()
df['EMA50'] = df['close'].ewm(span=50).mean()
plt.figure(figsize=(12,6))
plt.plot(df.index, df['close'], label='Close')
plt.plot(df.index, df['EMA10'], label='EMA10')
plt.plot(df.index, df['EMA50'], label='EMA50')
plt.legend()
plt.show()

ローソク足チャートなら mplfinance などを使うと簡単に見栄えのよいチャートが作成できます。


7. 拡張: 非同期取得・大規模データ保存・バックテスト準備

非同期取得 & 高頻度データ

大量銘柄、多数時間足を取得する場合、同期的に API 呼び出しを並列で回すとレート制限に詰まりやすくなります。非同期プログラミングを利用して並列取得し、効率的にダウンロードする方法も現実的です。たとえば「Asynchronous OHLCV Downloader」を使うと、取得効率と信頼性が向上します。

データ検証とギャップ検出

大量データを取り込む際は、欠損 (ギャップ) やデータの不整合に注意が必要です。特に自分で保存・管理する場合、日時の重複・抜け、ボリュームの異常などをチェックする仕組みを入れるとよいでしょう。最近では、複数取引所に対応し、ギャップ検知機能などを備えたライブラリも公開されています。

バックテストへの活用

整形した OHLCV データは、そのまま backtesting.py のようなフレームワークに取り込んで、戦略のバックテストに使えます。backtesting.py は Pandas 時系列 + OHLC データを前提に設計されており、効率よく手軽にテストが可能です。


8. 次のステップ

本記事では、OHLCV データの基礎から、Python による取得、前処理、可視化、そして応用までを体系的に解説しました。エンジニアとして以下のステップをおすすめします:

  • まずは CCXT + Pandas でシンプルな取得と可視化を試す
  • 必要に応じてリサンプリングやテクニカル指標を追加
  • 高頻度や多銘柄なら非同期取得 + データ検証 + ローカル保存の仕組みを構築
  • 最終的にバックテスト環境を整備し、仮説検証を容易に

このガイドが、あなたのデータ分析、アルゴリズム取引、学術的研究、どのような用途であっても、強力な “OHLCV の起点” となることを願います。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?