pandas-ta について
暗号資産市場の分析向け Python テクニカル分析ライブラリです。`df.ta` を通じて pandas DataFrame に 130 種類以上の指標を適用でき、OHLCV 分析や売買戦略の入力に使えます。
主な機能
- 01130 種類以上のテクニカル指標
- 02トレンド、モメンタム、ボラティリティ指標
- 03出来高・オーバーラップ指標
- 04複数の指標戦略を一括実行
- 05OHLCV DataFrame 対応
活用シーン
- 01価格・出来高データから指標を計算
- 02指標を組み合わせて売買シグナルを作成
- 03バックテスト用の指標入力を用意
- 04時間軸ごとに暗号資産市場を分析
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ agiprolabs/ claude-trading-skills --skill pandas-taインストール後、Claude Code で/pandas-taを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/common_pitfalls.mdindicator_guide.mdstrategy_patterns.mdscripts/compute_indicators.pymulti_indicator_scan.py詳細
pandas-ta — 暗号資産市場のテクニカル分析
pandas-ta は、df.ta から利用できる 130 種類以上のテクニカル分析指標を pandas の DataFrame に追加する Python ライブラリです。トレンド、モメンタム、ボラティリティ、出来高、オーバーラップ指標の各カテゴリをカバーしており、任意の OHLCV DataFrame に対して単一のメソッド呼び出しで実行できます。
インストール
uv pip install pandas-ta pandas httpx
クイックスタート
import pandas as pd
import pandas_ta as ta
# Assume df is a DataFrame with columns: open, high, low, close, volume
# All lowercase column names required
# Single indicator
df["rsi"] = df.ta.rsi(length=14)
df["atr"] = df.ta.atr(length=14)
# Multiple indicators via strategy
df.ta.strategy(ta.Strategy(
name="Quick Check",
ta=[
{"kind": "rsi", "length": 14},
{"kind": "macd", "fast": 12, "slow": 26, "signal": 9},
{"kind": "bbands", "length": 20, "std": 2.0},
]
))
OHLCV DataFrame の形式
pandas-ta では、小文字の列名を持つ DataFrame が必要です。
import pandas as pd
df = pd.DataFrame({
"open": [...],
"high": [...],
"low": [...],
"close": [...],
"volume": [...]
}, index=pd.DatetimeIndex([...]))
重要:VWAP など、時間を考慮する指標では、インデックスを DatetimeIndex に設定してください。列名は小文字である必要があります(Close ではなく close)。
欠損データの処理
# Drop rows with NaN in OHLCV columns
df = df.dropna(subset=["open", "high", "low", "close", "volume"])
# Forward-fill small gaps (1-2 bars max)
df = df.ffill(limit=2)
# Verify no zero-volume bars for volume indicators
df = df[df["volume"] > 0]
主な指標カテゴリ
トレンド指標
市場の方向性とトレンドの強さを特定します。
| 指標 | 呼び出し | 主なシグナル |
|---|---|---|
| SMA | df.ta.sma(length=20) | 価格が上=強気 |
| EMA | df.ta.ema(length=20) | SMA より速く、遅れが少ない |
| SuperTrend | df.ta.supertrend(length=10, multiplier=3) | 方向列:1=強気、-1=弱気 |
| Ichimoku | df.ta.ichimoku() | (span, lines) の DataFrame タプルを返します |
| VWMA | df.ta.vwma(length=20) | 出来高加重の価格トレンド |
| HMA | df.ta.hma(length=20) | 遅れを最小限に抑えた滑らかなトレンド |
| ADX | df.ta.adx(length=14) | >25=トレンド相場、<20=レンジ相場 |
モメンタム指標
価格変動の速度と大きさを測定します。
| 指標 | 呼び出し | 主なシグナル |
|---|---|---|
| RSI | df.ta.rsi(length=14) | >70 は買われすぎ、<30 は売られすぎ |
| MACD | df.ta.macd(fast=12, slow=26, signal=9) | ヒストグラムのクロスオーバー=エントリー |
| Stochastic | df.ta.stoch(k=14, d=3, smooth_k=3) | >80 は買われすぎ、<20 は売られすぎ |
| CCI | df.ta.cci(length=20) | >100 は買われすぎ、<-100 は売られすぎ |
| Williams %R | df.ta.willr(length=14) | >-20 は買われすぎ、<-80 は売られすぎ |
| ROC | df.ta.roc(length=10) | 正の値=上昇モメンタム |
| MFI | df.ta.mfi(length=14) | 資金フロー版 RSI |
ボラティリティ指標
価格のばらつきと予想レンジを測定します。
| 指標 | 呼び出し | 主なシグナル |
|---|---|---|
| Bollinger Bands | df.ta.bbands(length=20, std=2) | スクイーズ=ブレイクアウトが近い |
| ATR | df.ta.atr(length=14) | ポジションサイズの決定、ストップ位置の設定 |
| Keltner Channels | df.ta.kc(length=20, scalar=1.5) | BB が KC の内側=スクイーズ |
| Donchian Channels | df.ta.donchian(lower_length=20, upper_length=20) | ブレイクアウトの検出 |
出来高指標
出来高分析で価格変動を確認します。
| 指標 | 呼び出し | 主なシグナル |
|---|---|---|
| OBV | df.ta.obv() | 価格とのダイバージェンス=反転 |
| VWAP | df.ta.vwap() | 日中の適正価格(DatetimeIndex が必要) |
| CMF | df.ta.cmf(length=20) | >0 は蓄積、<0 は分配 |
| AD | df.ta.ad() | 蓄積/分配ライン |
Strategy クラス
ta.Strategy を使うと、1 回の呼び出しで複数の指標を実行できます。
import pandas_ta as ta
# Built-in "All" strategy runs every indicator
df.ta.strategy(ta.AllStrategy)
# Custom strategy
my_strategy = ta.Strategy(
name="Crypto Scalp",
description="Fast indicators for crypto scalping",
ta=[
{"kind": "ema", "length": 9},
{"kind": "ema", "length": 21},
{"kind": "rsi", "length": 7},
{"kind": "stoch", "k": 5, "d": 3, "smooth_k": 3},
{"kind": "atr", "length": 7},
{"kind": "bbands", "length": 10, "std": 2.0},
{"kind": "obv"},
]
)
df.ta.strategy(my_strategy)
名前付きストラテジーパターン
# Trend following
trend_strategy = ta.Strategy(
name="Trend",
ta=[
{"kind": "ema", "length": 20},
{"kind": "ema", "length": 50},
{"kind": "adx", "length": 14},
{"kind": "supertrend", "length": 10, "multiplier": 3},
{"kind": "atr", "length": 14},
]
)
# Mean reversion
reversion_strategy = ta.Strategy(
name="Mean Reversion",
ta=[
{"kind": "rsi", "length": 14},
{"kind": "bbands", "length": 20, "std": 2.0},
{"kind": "stoch", "k": 14, "d": 3, "smooth_k": 3},
{"kind": "cci", "length": 20},
]
)
# Momentum
momentum_strategy = ta.Strategy(
name="Momentum",
ta=[
{"kind": "macd", "fast": 12, "slow": 26, "signal": 9},
{"kind": "rsi", "length": 14},
{"kind": "obv"},
{"kind": "roc", "length": 10},
{"kind": "mfi", "length": 14},
]
)
暗号資産特有の考慮事項
24 時間 365 日の市場
- セッション間のギャップがありません。セッションの始値/終値に依存する指標は、動作が異なります。
- VWAP はデフォルトで UTC の午前 0 時にリセットされます。独自の期間を使う場合は、アンカード VWAP を検討してください。
- 週末のデータも連続しているため、月曜日のギャップの影響はありません。
高ボラティリティに合わせた調整
- Bollinger Bands:デフォルトの 2 倍ではなく、標準偏差の 2.5~3 倍を使用します。
- RSI の期間:短い期間(7~10)にすると、暗号資産の速いサイクルを捉えられます。
- ATR:動的なストップロスに使用します。暗号資産の ATR は通常、株式の ATR の 2~5 倍です。
- SuperTrend の倍率:暗号資産では 3~4 倍、株式では 2~3 倍にします。
時価総額の小さいトークンに関する考慮事項
- 出来高指標(OBV、CMF、MFI)は、板が薄い場合、信頼性が低くなります。
- 流動性の低いトークンでは、価格ベースの指標(RSI、BBands、SuperTrend)を優先してください。
- ATR に基づくポジションサイズの決定が重要です。広いスプレッドは損失を拡大させます。
- ウォッシュトレードによって出来高が水増しされるため、オンチェーンデータと照合してください。
時間足の選択
| 時間足 | 用途 | 推奨指標 |
|---|---|---|
| 1m-5m | スキャルピング、PumpFun | RSI(5-7)、EMA(5,13)、ATR(5) |
| 15m-1h | デイトレード | MACD、RSI(14)、BBands、EMA(20,50) |
| 4h-1d | スイングトレード | SuperTrend、ADX、EMA(50,200) |
| 1w | ポジショントレード | SMA(20,50)、RSI(14)、月次VWAP |
よく使われる指標の組み合わせ
トレンドフォロー
# EMA crossover + ADX confirmation + SuperTrend direction
ema_fast = df.ta.ema(length=20)
ema_slow = df.ta.ema(length=50)
adx_df = df.ta.adx(length=14)
st_df = df.ta.supertrend(length=10, multiplier=3)
bullish = (
(ema_fast > ema_slow) &
(adx_df["ADX_14"] > 25) &
(st_df["SUPERTd_10_3.0"] == 1)
)
平均回帰
# RSI oversold + price at lower BB + Stochastic oversold
rsi = df.ta.rsi(length=14)
bb = df.ta.bbands(length=20, std=2.5)
stoch = df.ta.stoch(k=14, d=3, smooth_k=3)
buy_signal = (
(rsi < 30) &
(df["close"] <= bb["BBL_20_2.5"]) &
(stoch["STOCHk_14_3_3"] < 20)
)
モメンタムの確認
# MACD histogram positive + RSI above 50 + OBV rising
macd = df.ta.macd(fast=12, slow=26, signal=9)
rsi = df.ta.rsi(length=14)
obv = df.ta.obv()
momentum_bull = (
(macd["MACDh_12_26_9"] > 0) &
(rsi > 50) &
(obv > obv.shift(1))
)
ボラティリティ・ブレイクアウト(BBスクイーズ)
# Bollinger Band width contracting + volume spike
bb = df.ta.bbands(length=20, std=2.0)
atr = df.ta.atr(length=14)
vol_sma = df["volume"].rolling(20).mean()
bb_width = (bb["BBU_20_2.0"] - bb["BBL_20_2.0"]) / bb["BBM_20_2.0"]
squeeze = bb_width < bb_width.rolling(120).quantile(0.1)
vol_spike = df["volume"] > (vol_sma * 2.0)
breakout_setup = squeeze & vol_spike
他のスキルとの連携
- birdeye-api:OHLCVデータを取得 → pandas-taに渡して指標を計算
- vectorbt:pandas-taの指標をバックテストのシグナル入力として使用
- trading-visualization:価格チャートに指標を重ねて表示
- slippage-modeling:ATRとスリッページの推定値を組み合わせ、現実的な執行モデルを作成
- position-sizing:pandas-taの出力に基づくATRベースのポジションサイズを使用
ファイル
参考資料
references/indicator_guide.md— 構文、パラメーター、解釈を含む、暗号資産向け上位20指標のガイドreferences/strategy_patterns.md— スキャルピング、デイトレード、スイングトレード向けの事前構築済み戦略の組み合わせreferences/common_pitfalls.md— 暗号資産市場でテクニカル指標を使う際によくある間違い
スクリプト
scripts/compute_indicators.py— OHLCVデータを取得し、標準的な指標セットを計算してシグナルの概要を出力scripts/multi_indicator_scan.py— 複数の戦略プロファイルを実行し、現在のシグナルの一致度をスコア化
コメント
Markdown 対応