# Rithmic Bridge

Rithmic R|API+を用いたMBO（Market By Order）データおよび約定履歴（Trade Print）のZeroMQブリッジシステム。

## 概要

R|Trader Proのプラグインモードから、pythonnet経由でMBOデータと約定履歴を取得し、ZeroMQ PUB/SUBでWSL2等の外部環境へ低遅延転送するブリッジシステムです。

### アーキテクチャ

```
┌─────────────────────────────┐     ZeroMQ PUB/SUB     ┌──────────────────────────────┐
│   Component A (Windows)      │    tcp://*:5555        │   Component B (WSL2/Any)      │
│                              │  ══════════════════>   │                               │
│  R|Trader Pro → R|API+ DLL   │   MBO Events          │  ZMQ SUB → OrderBook再構築    │
│  → pythonnet → ZMQ PUB       │   Trade Events        │  → TradeAnalyzer → RL State   │
└─────────────────────────────┘                        └──────────────────────────────┘
```

## インストール

### 1. R | API+ (.NET) の準備

本プロジェクトにはRithmicのAPIライブラリ `rapiplus.dll` が必要です。**このDLLの再配布は禁止されています。**

1.  **APIのリクエスト**: [https://www.rithmic.com/api-request](https://www.rithmic.com/api-request) にアクセスし、**R | API (.NET)** をリクエストしてください。
2.  **配置**: ダウンロードしたパッケージに含まれる `rapiplus.dll` を、以下の標準パスに配置してください：
    `C:\Program Files (x86)\Rithmic\Rithmic Trader Pro\rapiplus.dll`

### 2. パッケージのインストール

```bash
# 基本インストール
pip install rithmic-bridge

# または uv を使用
uv add rithmic-bridge

# 開発用（テスト含む）
uv sync --extra dev --extra client
```

## クイックスタート

### 1. 環境設定

```bash
cp .env.example .env
# .envファイルを編集して接続情報を設定
```

### 2. パブリッシャー起動（Windows側）

```bash
# ダミーデータモード（テスト用）
rithmic-bridge-publisher --mode dummy

# R|API+接続モード
rithmic-bridge-publisher --mode rapi
```

### 3. クライアント起動（WSL2側）

```bash
# リアルタイムダッシュボード表示
rithmic-bridge-client --host <Windows_IP> --port 5555

# 生データ表示
rithmic-bridge-client --host <Windows_IP> --port 5555 --raw
```

## データフォーマット

### MBOイベント

```json
{
  "symbol": "GCJ6.COMEX",
  "data_type": "mbo",
  "action": "add",
  "order_id": "123456",
  "side": "bid",
  "price": 2500.1,
  "size": 5,
  "timestamp": 1708170000.123456
}
```

### Tradeイベント

```json
{
  "symbol": "GCJ6.COMEX",
  "data_type": "trade",
  "action": "execute",
  "trade_id": "987654",
  "aggressor_side": "ask",
  "price": 2500.1,
  "size": 2,
  "timestamp": 1708170000.123500
}
```

## Python APIとして使用

```python
from rithmic_bridge.config import BridgeConfig
from rithmic_bridge.client.receiver import ZmqReceiver
from rithmic_bridge.client.order_book import OrderBook
from rithmic_bridge.client.trade_analyzer import TradeAnalyzer
from rithmic_bridge.client.state_builder import StateBuilder

# 設定読み込み
config = BridgeConfig.from_env()

# StateBuilderで板情報と約定データを統合
state_builder = StateBuilder(symbol="GCJ6.COMEX")

# レシーバー設定
receiver = ZmqReceiver(config)
receiver.on_mbo(state_builder.process_mbo)
receiver.on_trade(state_builder.process_trade)
receiver.start()

# RL用の状態ベクトルを取得
state = state_builder.get_state_numpy()  # numpy配列
tensor = state_builder.get_state_tensor()  # PyTorch Tensor
```

## テスト

```bash
uv run pytest tests/ -v
```

## ライセンス

MIT License
