FX の自動売買システムや分析ツールを作っていると、1 秒ごとの価格変動を正確に取得したい場面がたくさんありますよね。昔ながらの Web ページの定期スクレイピングでは、遅延が大きかったりデータが欠けたりして、リアルタイムな戦略にはまったく使えませんでした。
いろいろ試した結果、専用の秒足 API を WebSocket で接続するのが一番安定的!今回は実際に使えるコード付きで、手順を全部まとめてみました。
必要な開発環境とライブラリ
難しい環境は不要で、Python の標準的な環境だけで動作します。
- Python 3.10 以上
- websocket-client:リアルタイムな価格データを受信
- pandas:データを整形・分析
- json:API のデータを解析
これだけで、秒足データの受信・整理・分析まで完結できちゃいます。
WebSocket で秒足データを取得する(EURUSD)
代表的な通貨ペア・ユーロドル(EURUSD)の例で、リアルタイム接続を組んでいきます。
import websocket import json def on_message(ws, message): tick = json.loads(message) print(tick) def on_open(ws): subscribe_msg = { "type": "subscribe", "symbol": "EURUSD", "interval": "1s" } ws.send(json.dumps(subscribe_msg)) ws = websocket.WebSocketApp( "wss://realtime.alltick.co/forex", on_message=on_message, on_open=on_open ) ws.run_forever()
この API からは、時刻・始値・高値・安値・終値・出来高がまとめて返ってくるので、そのまま戦略に使ったり DB に保存したりできます。
pandas でデータを見やすく整形する
JSON のままだと扱いにくいので、pandas で表形式に変換するのがおすすめ。
import pandas as pd data_list = [] def on_message(ws, message): tick = json.loads(message) data_list.append({ "time": tick["time"], "open": tick["open"], "high": tick["high"], "low": tick["low"], "close": tick["close"], "volume": tick.get("volume", 0) }) df = pd.DataFrame(data_list) print(df.tail())
整形後は、分足や時間足にまとめたり、バックテストに使ったり自由自在です。
複数の通貨ペアをまとめて購読する
複数の通貨を同時に分析したいときも、一回のリクエストで OK!
subscribe_msg = { "type": "subscribe", "symbols": ["EURUSD", "USDJPY", "GBPUSD"], "interval": "1s" } ws.send(json.dumps(subscribe_msg))データに通貨名が付いてくるので、まとめて管理しやすく、比較分析もしやすいです。
実際に使うときの注意点
実践で使うなら、押さえておきたいポイントが 3 つあります。
- 秒足データはリアルタイムが命。遅延や欠落が戦略に直結するので、安定したデータソースを選びましょう。
- データの保存は、DataFrame で一時処理するか、データベースに保存するか、環境に合わせて使い分けてください。
- AllTick APIのように、リアルタイム秒足と過去データが両方使えると、戦略の検証がとてもスムーズになります。
最後にまとめると、秒足データを自分のシステムに直接接続できれば、分析も可視化も自由にカスタマイズでき、FX の自動売買や分析の幅が大きく広がります。ぜひ実際にコードをコピーして試してみてくださいね。