株式売買やシステムトレード、データ監視ツールを作っていると、「データの遅延がすごい」「取得が安定しない」 という悩みに必ずぶつかりますよね。

私も長年、開発者・トレーダーとしてこの問題を抱えていましたが、WebSocket を使ったデータ配信に切り替えたら、劇的に快適になりました。

今回は、リアルタイム株価データを安定的に取得し、解析するまでの流れを、コード付きで完全公開します。


HTTP ポーリングのデメリット(私が失敗した理由)

最初は一般的なHTTP ポーリングでデータを取得していました。しかし、実際に使ってみると問題だらけでした。

  • 価格変動が激しいと遅延が大きくなる
  • 何度もリクエストするので無駄な通信が多い
  • データ抜けが起きやすくシステムが不安定
  • 大量の銘柄を監視すると重すぎて動かない

これでは、システムトレードやリアルタイム表示ツールには使えません。

解決策:WebSocket でリアルタイム配信を受け取る

そこで私がたどり着いたのがWebSocketによるデータ購読です。

WebSocket は一度接続したら、価格が更新されるたびに自動でデータが届くため、遅延が少なく、負荷も大幅に減ります。

今回はAllTick APIを使って、安定した株価データを取得する方法を紹介します。


実装コード【コピペですぐ使える】

1. WebSocket 接続&銘柄登録

import websocket
import json

def on_message(ws, message):
    data = json.loads(message)
    print(f"{data['symbol']} 最終価格: {data['price']} 出来高: {data['volume']}")

def on_open(ws):
    sub_data = {
        "action": "subscribe",
        "symbols": ["spx", "nq", "aapl", "tsla"]
    }
    ws.send(json.dumps(sub_data))

ws = websocket.WebSocketApp(
    "wss://api.alltick.co/ws/stock",
    on_open=on_open,
    on_message=on_message
)

ws.run_forever()

2. データを解析・整形する

取得したデータは、そのままでは使いにすいので、整然とした形に変換します。騰落率や変動幅を計算し、戦略や画面表示に使えるようにします。

def process_tick(data):
    symbol = data['symbol']
    price = float(data['price'])
    volume = int(data['volume'])
    change = price - data['prev_close']
    percent = (change / data['prev_close']) * 100
    return {
        "symbol": symbol,
        "price": price,
        "volume": volume,
        "change": change,
        "percent": percent
    }

3. 銘柄を動的に追加・解除

必要な銘柄だけをリアルタイムで切り替えられるので、無駄なデータを減らせます

# 最初に登録
ws.send(json.dumps({"action": "subscribe", "symbols": ["msft", "goog"]}))

# 追加登録
ws.send(json.dumps({"action": "subscribe", "symbols": ["amzn"]}))

# 登録解除
ws.send(json.dumps({"action": "unsubscribe", "symbols": ["msft"]}))

安定稼働させるコツ【3 つ】

実際に長時間稼働させるために、私が気をつけているポイントです。

  1. 自動再接続ネットワークが切れても、自動で再接続する仕組みを入れましょう。

  2. スナップショットと併用初期データや再接続時に、スナップショット API を使うとデータが途切れません。

  3. 非同期処理データ処理を別スレッドで行い、WebSocket の受信をブロックしないようにします。


この方法のメリットまとめ

  • 遅延が少なくリアルタイムに使える
  • コードが短く初心者でも簡単
  • 銘柄を自由に追加・解除できる
  • データが綺麗に整形されすぐに活用可能
  • システムトレード・監視ツールに最適

最後に

株価データの取得は、システムトレードのとなる部分です。HTTP ポーリングでストレスを感じている方は、ぜひWebSocketを試してみてください。

私はこの方法に変えてから、稼働が安定し、作業効率が大幅にアップしました。

参考になれば嬉しいです😊