Forex API
メジャー、マイナー、エキゾチックを含む 50+ の通貨ペアに Tick レベルの相場情報を提供します。
1 つの WebSocket・REST API で、Tick レベルの Forex、Crypto、Stock、Commodity、Index データを配信します。営業担当との通話なしで、数秒で無料キーを取得できます。
| シンボル | 資産クラス | 価格 | 直近変動 |
|---|---|---|---|
| EUR/USD 外国為替ユーロ / 米ドル | 外国為替 | - | - |
| BTC/USDT 暗号資産ビットコイン | 暗号資産 | - | - |
| ETH/USDT 暗号資産イーサリアム | 暗号資産 | - | - |
| AAPL 株式Apple Inc. | 株式 | - | - |
| XAU/USD コモディティ金スポット | コモディティ | - | - |
| USD/JPY 外国為替米ドル / 円 | 外国為替 | - | - |
| NVDA 株式NVIDIA Corp. | 株式 | - | - |
| SPX 指数S&P 500 指数 | 指数 | - | - |
AllTick がカバーするすべての市場を、同じ統一 REST と WebSocket インターフェースから利用できます。
メジャー、マイナー、エキゾチックを含む 50+ の通貨ペアに Tick レベルの相場情報を提供します。
リアルタイムの現物・デリバティブデータを、1 つの配信に正規化します。
米国、香港、中国本土市場の株式について、約定と相場情報を提供します。
貴金属とエネルギーのリアルタイム価格を提供します。
主要なグローバル指数のベンチマーク値と構成銘柄を提供します。
AllTick の各市場について、対応範囲、レイテンシー、データ種別を比較します。
製品を見るAllTick と一般的な従来型市場データベンダーを比較します。
| 機能 | AllTick | 一般的な従来型ベンダー |
|---|---|---|
| WebSocket レイテンシー中央値 | 約 150ms | 400–800ms |
| 1 つの API に含まれる資産クラス | 5(FX、Crypto、Stock、Commodities、Indices) | 1–2 |
| 稼働率 SLA | 99.95% | 99.5% またはなし |
| 無料枠 | あり — API キーを即時発行 | 営業担当との通話が必要 |
| WebSocket ストリーミング | ネイティブ | ポーリング / 制限あり |
WebSocket に接続し、あらゆる市場の任意のシンボルを購読できます。
# AllTick realtime financial data API
# forex crypto stock commodities indices
import asyncio, json, uuid
import websockets
subscribe = {
"cmd_id": 22004,
"seq_id": 1,
"trace": str(uuid.uuid4()),
"data": {"symbol_list": [{"code": "EURUSD"}]},
}
heartbeat = {"cmd_id": 22000, "seq_id": 1, "trace": "heartbeat", "data": {}}
async def stream():
uri = "wss://quote.alltick.co/quote-b-ws-api?token=YOUR_API_KEY"
async with websockets.connect(uri) as socket:
await socket.send(json.dumps(subscribe))
async def keep_alive():
while True:
await asyncio.sleep(10)
await socket.send(json.dumps(heartbeat))
asyncio.create_task(keep_alive())
async for message in socket:
print(json.loads(message))
asyncio.run(stream())Crypto の対応範囲を広げながら、市場データコストを 60% 削減。
“AllTick への移行により、3 社のベンダーを 1 つの WebSocket 配信に統合し、取引アプリを 1 四半期早くリリースできました。”導入事例を読む
200ms 未満の相場情報更新で 4 万人の同時接続ユーザーに対応。
“99.95% SLA と安定したレイテンシーは、当社のリテールブローカーがグローバル展開するためにまさに必要なものでした。”導入事例を読む
5 資産クラスにわたる 12 年分の Tick データをバックテスト。
“1 つの正規化 API から履歴データとリアルタイムデータを取得でき、数週間分のデータエンジニアリング作業が不要になりました。”導入事例を読む
市場データエンジニアリング、ストリーミング API、低遅延金融アプリケーション構築に関する実践的な記事です。
アルゴリズム取引の台頭により、Pythonはクオンツ開発者にとって不可欠なツールとなっています。これは主に、Pythonが科学技術計算やデータ分析において強力なエコシステムを持ち、優れたサードパーティライブラリに支えられているためです。Pandas、NumPy、SciPyなどのライブラリは、データ操作、数値計算、科学的分析において豊富な機能を提供しており、クオンツリサーチや戦略開発をより効率的に行うことができます。本日は、5つの代表的なクオンツ取引戦略と、それぞれに対応するPythonコードの例をご紹介します。
平均回帰戦略は、資産価格が長期的な平均値の周りを変動するという仮定に基づいた統計的アービトラージ手法です。短期的な価格変動があっても、価格は時間とともに平均に戻ると考えられます。以下は、単純移動平均を使って資産の「平均」を定義し、標準偏差を用いて売買シグナルを生成するシンプルなPythonコード例です:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
data = pd.DataFrame({
'Date': pd.date_range(start='2023-01-01', periods=100),
'Close': np.random.normal(100, 10, 100)
})
data.set_index('Date', inplace=True)
window = 20
data['Moving Average'] = data['Close'].rolling(window=window).mean()
data['Standard Deviation'] = data['Close'].rolling(window=window).std()
data['Upper Bound'] = data['Moving Average'] + data['Standard Deviation']
data['Lower Bound'] = data['Moving Average'] - data['Standard Deviation']
data['Position'] = 0
data.loc[data['Close'] < data['Lower Bound'], 'Position'] = 1
data.loc[data['Close'] > data['Upper Bound'], 'Position'] = -1
plt.figure(figsize=(14, 7))
plt.plot(data['Close'], label='Close Price')
plt.plot(data['Moving Average'], label='Moving Average')
plt.fill_between(data.index, data['Upper Bound'], data['Lower Bound'], color='gray', alpha=0.3, label='Mean Reversion Band')
plt.plot(data.index, data['Position'] * 50, label='Trading Signal', color='magenta')
plt.legend()
plt.show()
トレンドフォローは、資産の短期移動平均と長期移動平均を比較し、現在の市場トレンドを特定してその流れに従う戦略です。たとえば、株価が上昇トレンドで市場心理が強気の場合、その流れに従って株を買い持ちし、トレンドが反転するまで保有します。Pythonでは、MACD(移動平均収束拡散法)を使って短期トレンドを識別し、売買シグナルを生成することができます:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
data = pd.DataFrame({
'Date': pd.date_range(start='2023-01-01', periods=200),
'Close': np.random.normal(100, 15, 200)
})
data.set_index('Date', inplace=True)
short_window = 40
long_window = 100
data['Short MA'] = data['Close'].rolling(window=short_window).mean()
data['Long MA'] = data['Close'].rolling(window=long_window).mean()
data['Signal'] = 0
data['Signal'][short_window:] = np.where(data['Short MA'][short_window:] > data['Long MA'][short_window:], 1, 0)
data['Position'] = data['Signal'].diff()
plt.figure(figsize=(14, 7))
plt.plot(data['Close'], label='Close Price')
plt.plot(data['Short MA'], label='40-Day Moving Average')
plt.plot(data['Long MA'], label='100-Day Moving Average')
plt.plot(data.index, data['Position'] * 50, label='Trading Signal', color='magenta', marker='o', linestyle='None')
plt.legend()
plt.show()
ペアトレーディングは、強い相関関係を持つ2つの資産の価格差に基づく統計的アービトラージ手法です。価格差が通常の範囲を超えて乖離したとき、割安な資産を買い、割高な資産を売ることで利益を狙います。長期的には価格が平均に戻るとされ、短期的なアービトラージの機会を提供します。
2つの資産の過去の価格関係を分析し、予想されるスプレッドからの乖離を元に取引シグナルを作成します:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
np.random.seed(42)
data = pd.DataFrame({
'Date': pd.date_range(start='2023-01-01', periods=180),
'Asset_A': np.random.normal(100, 10, 180).cumsum() + 100,
'Asset_B': np.random.normal(100, 10, 180).cumsum() + 120
})
data.set_index('Date', inplace=True)
data['Price_Diff'] = data['Asset_A'] - data['Asset_B']
window = 30
data['Mean_Diff'] = data['Price_Diff'].rolling(window=window).mean()
data['Std_Diff'] = data['Price_Diff'].rolling(window=window).std()
data['Upper_Bound'] = data['Mean_Diff'] + data['Std_Diff']
data['Lower_Bound'] = data['Mean_Diff'] - data['Std_Diff']
data['Position'] = 0
data.loc[data['Price_Diff'] > data['Upper_Bound'], 'Position'] = -1 # 做空Asset A,做多Asset B
data.loc[data['Price_Diff'] < data['Lower_Bound'], 'Position'] = 1 # 做多Asset A,做空Asset B
plt.figure(figsize=(14, 7))
plt.subplot(211)
plt.plot(data['Asset_A'], label='Asset A')
plt.plot(data['Asset_B'], label='Asset B')
plt.legend()
plt.subplot(212)
plt.plot(data['Price_Diff'], label='Price Difference')
plt.plot(data['Mean_Diff'], label='Mean Difference')
plt.fill_between(data.index, data['Upper_Bound'], data['Lower_Bound'], color='gray', alpha=0.3, label='Trading Zone')
plt.plot(data.index, data['Position'] * 20, label='Trading Signal', color='magenta', marker='o', linestyle='None')
plt.legend()
plt.show()
統計的アービトラージは、複数の資産間の価格の歪みを利用する取引手法です。よくある方法は、歴史的な関係から乖離した株のペアやグループを特定し、それに基づいて取引を行うことです。以下は、2つの株の価格スプレッドに基づいた基本的な統計的アービトラージ戦略のPython実装例です:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
np.random.seed(42)
data = pd.DataFrame({
'Date': pd.date_range(start='2023-01-01', periods=250),
'Stock_A': np.random.normal(0, 1, 250).cumsum() + 50,
'Stock_B': np.random.normal(0, 1, 250).cumsum() + 50
})
data.set_index('Date', inplace=True)
data['Spread'] = data['Stock_A'] - data['Stock_B']
window = 20
data['Spread Mean'] = data['Spread'].rolling(window=window).mean()
data['Spread Std'] = data['Spread'].rolling(window=window).std()
entry_z = 2
exit_z = 0
data['Upper Threshold'] = data['Spread Mean'] + entry_z * data['Spread Std']
data['Lower Threshold'] = data['Spread Mean'] - entry_z * data['Spread Std']
data['Exit Threshold'] = data['Spread Mean'] + exit_z * data['Spread Std']
data['Position'] = 0
data.loc[data['Spread'] > data['Upper Threshold'], 'Position'] = -1 # 做空Stock A,做多Stock B
data.loc[data['Spread'] < data['Lower Threshold'], 'Position'] = 1 # 做多Stock A,做空Stock B
data.loc[data['Spread'] * data['Position'] < data['Exit Threshold'], 'Position'] = 0 # 退出信号
plt.figure(figsize=(14, 7))
plt.subplot(211)
plt.plot(data['Stock_A'], label='Stock A')
plt.plot(data['Stock_B'], label='Stock B')
plt.title('Stock Prices')
plt.legend()
plt.subplot(212)
plt.plot(data['Spread'], label='Spread')
plt.plot(data['Spread Mean'], label='Mean Spread')
plt.fill_between(data.index, data['Upper Threshold'], data['Lower Threshold'], color='gray', alpha=0.3, label='Entry Zone')
plt.plot(data.index, data['Position'] * 10, label='Trading Signal', color='magenta', marker='o', linestyle='None')
plt.title('Spread and Trading Signals')
plt.legend()
plt.show()
ボラティリティ取引戦略は、市場の変動性の変化から利益を得ることを目的としています。例えば、株の1日ごとのリターンと過去のボラティリティ(年率換算の標準偏差)を計算し、以下のような条件を設定できます:ボラティリティが平均の1.2倍を超えたら売り、0.8倍を下回ったら買い。以下はそのPython実装です:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
np.random.seed(42)
dates = pd.date_range(start='2023-01-01', periods=250)
prices = np.random.normal(0, 1, 250).cumsum() + 100
data = pd.DataFrame({
'Date': dates,
'Price': prices
})
data.set_index('Date', inplace=True)
data['Returns'] = data['Price'].pct_change()
data.dropna(inplace=True)
window = 20
data['Volatility'] = data['Returns'].rolling(window=window).std() * np.sqrt(252) # 年化波动性
threshold_high = data['Volatility'].mean() * 1.2
threshold_low = data['Volatility'].mean() * 0.8
data['Position'] = 0
data.loc[data['Volatility'] > threshold_high, 'Position'] = -1
data.loc[data['Volatility'] < threshold_low, 'Position'] = 1
plt.figure(figsize=(14, 10))
plt.subplot(211)
plt.plot(data['Price'], label='Price')
plt.title('Stock Price')
plt.legend()
plt.subplot(212)
plt.plot(data['Volatility'], label='Volatility')
plt.axhline(y=threshold_high, color='r', linestyle='--', label='High Threshold')
plt.axhline(y=threshold_low, color='g', linestyle='--', label='Low Threshold')
plt.plot(data.index, data['Position'] * 0.01, label='Trading Signal', color='magenta', marker='o', linestyle='None')
plt.title('Volatility and Trading Signals')
plt.legend()
plt.show()