Dukascopy MCP Server
by katunet
README.md
# Dukascopy MCP Server
Dukascopy の無料公開データフィードからティックデータ・1分足OHLCを取得する MCP (Model Context Protocol) サーバー。
Claude Code / Claude Desktop から直接呼び出して、FX・CFDのヒストリカルデータを取得・分析できる。
MT5_mcp と組み合わせることで、実ブローカーのティック特性(スプレッド・遅延)を Dukascopy データに重畳した「較正済みティック」を生成できる。
## 機能一覧
### データ取得・キャッシュ(6ツール)
| ツール | 用途 |
|-------|------|
| `get_ticks` | 指定シンボル・日時の1時間分ティックデータをJSON返却(キャッシュなし) |
| `get_candles` | 指定シンボル・日時の1時間分1分足OHLCをJSON返却(キャッシュ優先) |
| `download_ticks` | 期間指定でティックデータをCSVに一括保存 |
| `download_candles` | 期間指定で1分足OHLCをCSVに一括保存 |
| `cache_status` | 保存済みデータの一覧表示(シンボル・期間・サイズ) |
| `clear_cache` | キャッシュ削除(シンボル・期間指定可) |
### キャリブレーションパイプライン(4ツール)
| ツール | 用途 |
|-------|------|
| `calibrate` | MT5ティック ↔ Dukascopyティックを照合し、時間帯別スプレッドプロファイルを生成・保存 |
| `reshape` | 較正モデルを使って Dukascopy ティックをブローカー特性に近似変換 |
| `calibration_status` | 保存済み較正モデル(profile.json)の一覧と概要を確認 |
| `get_reshaped_ticks` | 成形済みティックをJSON取得(アドホック分析・精度確認用) |
## キャリブレーションの仕組み
```
[前提データ準備]
MT5_mcp: download_ticks_bulk → WD_Black/MT5_cache/{broker}/{symbol}/ticks/
Dukascopy: download_ticks → WD_Black/Dukascopy_mcp/cache/{symbol}/ticks/
[較正モデル生成]
calibrate(symbol, broker, start, end)
→ TickAligner: 時刻±tolerance_msでMT5↔Dukascopyのティックペアを照合
→ SpreadProfiler: 時間帯(0-23)ごとにスプレッド差・中値オフセットを集計
→ CalibrationModel: profile.json として WD_Black/calibration/{broker}/{symbol}/ に保存
※ ForexFactory 高インパクトニュース前後はサンプルから除外可(use_calendar=true)
[ティック成形]
reshape(symbol, broker, start, end)
→ Reshaper: 較正モデルの時間帯プロファイルを使い Dukascopy のbid/askを補正
→ 出力: WD_Black/reshaped/{broker}/{symbol}/ticks/{date}.csv
```
## ファイル構成
```
Dukascopy_mcp/
server.py # MCPサーバー (10ツール定義)
dukascopy_client.py # データ取得・パース・キャッシュ管理
requirements.txt
calibration/
model.py # CalibrationModel (JSON保存/読み込み)
tick_aligner.py # TickAligner (MT5↔Dukascopy ミリ秒アライメント)
spread_profiler.py # SpreadProfiler (時間帯別プロファイル集計)
reshaper.py # Reshaper (較正モデル適用)
calendar_loader.py # CalendarLoader (ForexFactory ニュース除外)
tests/
test_client.py
test_server.py
test_tick_aligner.py
test_spread_profiler.py
test_reshaper.py
test_calendar_loader.py
```
## キャッシュパス(WD_Black SSD 優先)
| 種別 | WD_Black パス | ローカルフォールバック |
|-----|--------------|----------------------|
| Dukascopy ティック/ローソク | `/Volumes/WD_Black/Dukascopy_mcp/cache/` | `./cache/` |
| MT5 ティック(MT5_mcpと共有) | `/Volumes/WD_Black/MT5_cache/` | `./MT5_cache/` |
| 較正モデル | `/Volumes/WD_Black/calibration/` | `./calibration_cache/` |
| 成形済みティック | `/Volumes/WD_Black/reshaped/` | `./reshaped_cache/` |
| ForexFactory カレンダー | `/Volumes/WD_Black/ForexFactory/calendar/` | 使用しない |
WD_Black が接続中であれば自動的にそちらに書き込む。未接続時はローカルにフォールバック。
## 対応シンボル (デフォルトプリセット 16ペア)
**メイン:** XAUUSD
**クロス通貨:** USDJPY, EURUSD, GBPJPY, EURJPY, EURCHF, EURAUD, EURNZD, GBPCAD, GBPCHF, GBPAUD, GBPNZD, NZDCHF, AUDNZD, AUDCAD, CHFJPY
プリセット外の任意シンボルも指定可能。
## セットアップ
```bash
cd Dukascopy_mcp
pip install -r requirements.txt
```
**Claude Code** (`.mcp.json`):
```json
{
"mcpServers": {
"dukascopy": {
"command": "python3",
"args": ["server.py"],
"cwd": "/path/to/Dukascopy_mcp"
}
}
}
```
## 使い方
### アドホック分析
```
「XAUUSD の 2024-01-15 10:00 UTC のティックデータを見せて」
→ get_ticks(symbol="XAUUSD", date="2024-01-15", hour=10)
「EURUSD の 2024-03-01 15時台の1分足を取得して」
→ get_candles(symbol="EURUSD", date="2024-03-01", hour=15)
```
### バックテスト用データ一括取得
```
「XAUUSD の 2023年1月〜12月のティックをダウンロードして」
→ download_ticks(symbol="XAUUSD", start="2023-01-01", end="2023-12-31")
「今キャッシュにどれくらいデータがある?」
→ cache_status()
```
### キャリブレーション(WiFi接続・WD_Black接続が必要)
```
# 1. Dukascopy ティックをダウンロード
download_ticks(symbol="XAUUSD", start="2025-01-01", end="2025-03-31")
# 2. MT5 ティックをダウンロード(MT5_mcp で実行)
download_ticks_bulk(symbol="XAUUSD", start="2025-01-01", end="2025-03-31", account="ICMarkets")
# 3. 較正モデルを生成
calibrate(symbol="XAUUSD", broker="ICMarkets", start="2025-01-01", end="2025-03-31")
# 4. Dukascopy ティックをブローカー特性に成形
reshape(symbol="XAUUSD", broker="ICMarkets", start="2025-01-01", end="2025-03-31")
# 5. 成形済みティックを確認
get_reshaped_ticks(symbol="XAUUSD", broker="ICMarkets", date="2025-01-15", hour=10)
```
## データソース
- **URL:** `https://datafeed.dukascopy.com/datafeed/`
- **形式:** LZMA圧縮バイナリ (.bi5)
- **認証:** 不要 (無料公開データ)
- **利用可能期間:** 2003-2004年頃〜現在 (通貨ペアにより異なる)
## テスト
```bash
python3 -m pytest tests/ -v
```
## 技術スタック
- Python 3, asyncio
- httpx — 非同期HTTPクライアント
- MCP — Model Context Protocol (stdio)
- lzma, struct — 標準ライブラリ (bi5解凍・バイナリパース)
## ライセンス
MIT
This server cannot be deployed
Maintenance
ActivityInactive
ResponsivenessNo issues