IV Rank データ戦略¶
概要¶
AEGISでは、IV Rank(Implied Volatility Rank)データの取得に用途別のデータソース戦略を採用しています。
データソース¶
| データソース | 特徴 | データ範囲 |
|---|---|---|
| Barchart | ヒストリカルデータ | 2018-10-03 ~ 現在(7年分) |
| Unusual Whales | リアルタイムデータ | 直近7営業日(現在のプランでは) |
用途別戦略¶
🔬 バックテスト(2019-2025年)¶
データソース: Barchart キャッシュ
理由: - 6年間のバックテストには過去のIV Rankが必須 - Barchartは2018年10月から7年分のデータを保有 - 全ての対象銘柄(198銘柄)で完全なデータセット
実装:
from core.data_interfaces import BarchartIVHistoryProvider
# Barchart IV Rankプロバイダー初期化
barchart_iv_dir = "/path/to/barchart-scraper/data/raw/history"
iv_provider = BarchartIVHistoryProvider(data_dir=barchart_iv_dir)
# HybridDataProviderに設定
data_provider = HybridDataProvider(
polygon_api_key=Config.POLYGON_API_KEY,
iv_provider=iv_provider, # Barchart使用
skip_theta_check=True,
)
📈 ペーパートレード / ライブ取引¶
データソース: Unusual Whales 優先 → Barchart フォールバック
理由: - UnusualWhalesのデータはBarchartより9日新しい(2025-12-03 vs 2025-11-24) - リアルタイム取引では最新のIV Rankが必要 - 7営業日より古いデータが必要な場合は自動的にBarchartにフォールバック
実装:
from core.uw_iv_provider import UnusualWhalesIVProvider
# UW IV Rankプロバイダー初期化(Barchartフォールバック自動)
uw_iv_provider = UnusualWhalesIVProvider(
use_barchart_fallback=True # 7営業日以前はBarchartに自動フォールバック
)
# HybridDataProviderに設定
data_provider = HybridDataProvider(
polygon_api_key=Config.POLYGON_API_KEY,
iv_provider=uw_iv_provider,
)
⏰ プレオープン時の事前取得(PT専用)¶
ペーパートレード開始時および日付変更時に、全銘柄のIV Rankを事前取得します。
タイミング: 1. PTボット起動時(初回スキャン前) 2. 日付が変わった時(最初のスキャンサイクル)
実装: run_paper_trading_v2.py
async def _refresh_iv_rank_if_needed(self, current_date: date) -> None:
"""
IV Rankを日付変更時に事前取得
プレオープン時(または日付が変わった時)に全銘柄のIV Rankを
UnusualWhales APIから取得してキャッシュする。
"""
# 既に今日取得済みならスキップ
if self._iv_rank_last_refresh_date == current_date:
return
logger.info(f"📊 IV Rank事前取得開始: {current_date}")
# 全銘柄を事前ロード
self.data_provider.iv_provider.preload_all(self.symbols)
self._iv_rank_last_refresh_date = current_date
呼び出しタイミング:
async def scan_and_trade(self):
"""銘柄をスキャンして取引判断"""
current_date = date.today()
# === IV Rank事前取得(プレオープン時または日付変更時)===
await self._refresh_iv_rank_if_needed(current_date)
# ... スキャン処理 ...
UnusualWhalesIVProvider の仕組み¶
自動フォールバック¶
UnusualWhalesIVProviderは取得失敗時に自動的にBarchartにフォールバックします:
def get_iv_rank(self, symbol: str, target_date: date) -> Optional[float]:
"""IV Rankを取得"""
try:
# UW APIから取得
url = f"{UW_API_BASE}/api/stock/{symbol}/iv-rank"
response = requests.get(url, headers=headers, timeout=10)
if response.status_code == 200:
# 成功時はUWデータを返す
return iv_rank / 100.0
except Exception as e:
logger.debug(f"[{symbol}] UW IV Rank取得エラー: {e}")
# Barchartフォールバック(12/17まで有効)
if self.use_barchart_fallback and self._barchart_provider:
logger.debug(f"[{symbol}] Barchartフォールバックを試行...")
return self._barchart_provider.get_iv_rank(symbol, target_date)
return None
キャッシュ機構¶
- UWから取得したデータは内部キャッシュに保存
- 同じ銘柄への2回目以降のアクセスはキャッシュから返却(高速)
- 日付が変わったら自動的に再取得
データ品質の検証¶
UW vs Barchart 比較(2025-12-04テスト結果)¶
| 銘柄 | UW IV Rank | UWデータ日付 | Barchart IV Rank | Barchartデータ日付 | 差分 |
|---|---|---|---|---|---|
| AAPL | 8.91% | 2025-12-03 | 12.93% | 2025-11-24 | -4.02% |
| TSLA | 6.70% | 2025-12-03 | 15.85% | 2025-11-24 | -9.15% |
| NVDA | 19.87% | 2025-12-03 | 26.31% | 2025-11-24 | -6.44% |
| AMD | 27.71% | 2025-12-03 | 38.22% | 2025-11-24 | -10.51% |
観察: - UWのデータは9日新しい - IV Rankの値に4-10%の差異(計算方法の違いと思われる) - リアルタイム取引ではUWの使用が推奨される
Barchart 契約状況¶
結論: ❌ 解約不可
理由: 1. UWの現在のプランは過去7営業日分のみ提供 2. UWでフルヒストリカルデータを取得するにはプランアップグレードが必要 3. 6年間バックテストにはBarchartの7年分データが不可欠
今後の選択肢:
- 現状維持(Barchart継続、PT用にUW併用)
- UWプランアップグレード(dan@unusualwhales.comに問い合わせ)
まとめ¶
| 用途 | データソース | 更新頻度 | 実装 |
|---|---|---|---|
| バックテスト | Barchart キャッシュ | N/A(静的) | BarchartIVHistoryProvider |
| PT/ライブ | UW → Barchartフォールバック | 日次(プレオープン) | UnusualWhalesIVProvider |
この戦略により、バックテストの再現性とライブ取引の最新性の両立を実現しています。