記事概要

クラウドサーバー上で株価監視や定量戦略のバックテスト環境を構築する際、個株と ETF の両方のリアルタイム相場データを同時取得するニーズが多く存在します。個株は単一銘柄の資金動向を把握するのに対し、ETF は業種・市場全体のムードを把握でき、2 種類のデータを組み合わせることで市場分析の精度が高まります。

開発初心者の多くが個株用、ETF 用に 2 系統の WebSocket 接続を作成したり、定期的な API ポーリングでデータを取得する手法を採用します。しかしこの方法ではクラウドの帯域を無駄に消費したり、瞬間的な価格変動データを取りこぼしバックテストの結果が歪むといった課題が発生します。 本記事では単一の WebSocket 長時間接続で複数銘柄を一括購読する設計手法を解説し、実行可能な 1 セットの Python コードを掲載。長時間連続稼働に必要なデータ整形・タイムスタンプ統一・切断自動復旧などの安定化対策、拡張性の高いモジュール構成まで実務的な知見をまとめています。

1. 銘柄リストを統一管理し保守性を向上

個株と ETF の相場データには現在価格、出来高、タイムスタンプ、板情報など共通する項目が多く、品種ごとに処理系統を分ける必要はありません。 銘柄管理用の配列にtypeフィールドを追加し、stock/etf で分類する方式を採用。監視対象の追加・削除時は設定リストのみ編集するだけで、通信処理の核心コードを変更する必要がなく、長期運用時のメンテナンスコストを削減できます。

データソースに AllTickの WebSocket エンドポイントを使用し、1 本の接続だけで複数銘柄のリアルタイム配信を受信します

2. 24 時間連続稼働に欠かせない安定化対策

データベースへ保存しバックテストに活用する場合、下記 3 点の調整が必須です。

  1. 銘柄コードのフォーマット統一:SH/SZ など市場プレフィックスを事前整形し、検索時のデータ不整合を防止
  2. タイムゾーン統一:すべてのタイムスタンプを北京時間に統一、分足ローソク作成や多因子分析の時系列ズレを回避
  3. 切断自動復旧処理:監視リストをメモリに保持し、ネットワーク切断後の再接続時に自動的に一括購読を再実行

3. 拡張性に優れたモジュール型プロジェクト構成

後からデータ永続化、価格変動アラート、可視化ダッシュボードなどの機能を追加する場合はファイルを分割して管理すると開発が容易になります。

  • config.py:監視対象銘柄の設定を一括管理
  • websocket.py:接続・購読・切断復旧のロジックをカプセル化
  • handler.py:データ解析、品種別指標計算
  • storage.py:整形後の相場データを時系列 DB へ書き込み
  • main.py:プログラム起動エントリー

機能ごとにファイルを分けることで、新機能追加時に基盤の通信処理を壊すリスクを抑え、長期的な定量研究の開発環境として適しています。

まとめ

個株と ETF の同時相場取得に 2 系統の通信路を用意する必要はなく、単一 WebSocket 接続+統一銘柄リストの構成でクラウド帯域の節約とコードの保守性向上を両立できます。

相場取得システムの価値は単なる価格取得ではなく、バックテストに活用できる標準化された時系列データを安定的に出力する点にあります。事前に銘柄管理、時系列整形、切断時のフォールバックといった基礎ロジックを設計しておけば、指数・転換社債など新たな商品を追加する際の開発コストを大幅に削減できます。