はじめに

私は趣味で香港株の自動売買ストラテジーを作ったり、長期バックテストを繰り返したりしている個人開発者です。 普段はローソク足の欠損補完、出来高の調整、ティックデータの整備といった細かい作業ばかり気にしていて、企業の資本施策が株価グラフに与える影響を長い間見落としていました。

先日、長期保有向けの手法を検証していたとき、特定銘柄のある日だけ移動平均線や収益率、ボラティリティが突飛な数値に跳ね上がる現象に遭遇しました。 生の相場データを一つ一つ確認してやっと分かったのが、その銘柄で株式併合が実施されていたのに、過去価格の復権補正処理を作っていなかったことが原因だったということ。

香港株で定量分析をする人なら誰もが経験する悩みだと思います。株式併合以外にも株式分割・増資などの資本変更が起きると、株価と保有株数の比率が大きく変わります。 API から取得した生データをそのままグラフに表示すると、併合による価格の飛びを市場の上昇と勘違いし、バックテストの結果がまったく信用できなくなる、目に見えにくい落とし穴なのです。

1. 株式併合が時系列価格を壊す仕組みを解説

1.1 株式併合の基本的な計算ルール

株式併合とは単純に保有株数をまとめる施策のこと。例えば 10 株を 1 株に統合するケースだと、手持ちの株数は 10 分の 1 に減る代わり、理論上の 1 株価格は 10 倍になり、企業全体の時価総額自体は変わりません。

補正を一切行わないデータだと、チャートに唐突な急騰ラインができてしまいます。 ただグラフを眺めるだけなら違和感程度で済みますが、価格をもとに計算する各種テクニカル指標には常に誤差が積み重なり、検証期間が長くなったり複数銘柄を同時に分析するほど結果が大きく歪んでしまいます。

1.2 生価格・補正価格・補正係数の 3 種類でデータを分けて保管

初心者が陥りがちな失敗が、取引所から取得した生の株価だけを一つのテーブルに保存することです。 何度もバックテストを試した結果、用途別に 3 つのデータを分けて管理するのが一番安定すると実感しました。

  1. 生価格データ:取引所の約定記録をそのまま保存。実際の取引履歴を確認したいときに使う
  2. 補正後価格データ:バックテストやテクニカル指標計算、長期収益シミュレーション専用
  3. 補正係数データ:各資本施策の換算比率を記録、復権計算の基準となる数値

先ほどの 10 株併合 1 株の例で前復権を適用する場合、併合実施日より前のすべての過去価格に 10 を掛け算するだけで、時系列の価格が滑らかにつながり不自然な断層が消えます。 生データと補正データを分けておけば本来の取引記録を残しつつ、分析用の連続した価格を自由に呼び出せるメリットがあります。

1.3 香港株 API を活用するときの見落としポイント 3 つ

香港株の相場 API を使ってデータパイプラインを作るとき、相場情報と資本施策の情報は別々のインターフェースから取得する必要があります。 基本的な流れは「過去ローソク足取得→各銘柄の併合実施日・比率取得→対象期間のデータ抽出→補正係数算出→補正価格を記録」という順番です。

この作業の中で特に気をつけなければならない箇所が 3 点あります。 ・補正計算を終値だけに適用してはいけない。始値・高値・安値も同じ係数で一括補正しないとローソク足の形が崩れ、サポートラインなどの分析ができなくなる ・出来高も併合比率に合わせて調整する必要がある。価格だけ直して出来高をそのままにすると売買代金や回転率の計算が狂う ・過去アーカイブデータとリアルタイムティックの基準が統一されない。過去データには資本施策情報が付いているのに、リアルタイム配信には補正情報が含まれないため、そのままつなげると価格に段差が生まれる

2. 過去データとリアルタイムティックを統一する実装フロー

私が普段の開発で使っている、ローカル PC でもクラウド環境でも運用しやすい標準的な処理手順をまとめました。

  1. テーブルを 3 つに分けて作成:生相場テーブル、資本施策イベントテーブル、補正価格テーブル。銘柄コードとタイムスタンプで複合インデックスを設定し、データ検索を高速化
  2. 施策の日付を厳密に判別:企業の発表日と実際に取引所で併合が適用される営業日は違う場合が多いので、市場適用日だけを時系列の境目として使用
  3. 複数回の資本施策に対応:同じ銘柄が数年の間に分割・併合を複数回行っている場合は時間順に補正係数を積み上げて計算、一回分の比率だけを使わない
  4. リアルタイムデータは動的補正:ライブ配信データで過去の補正済みデータを上書きせず、ローカルに施策情報のキャッシュ DB を用意。グラフ表示やストラテジー再生時にその都度復権価格を計算

リアルタイムのシミュレーション環境を作るときは、ティック購読処理と資本施策 DB への保存処理を分けて動かし、同じ時間ウィンドウでデータを照合します。 動作検証の段階では AllTick API の WebSocket 長時間接続を利用して香港株の逐次約定データを取得しています。時系列フォーマットが統一されているので、ローカルの施策キャッシュとタイムスタンプで簡単に紐付けられるのが便利です。

 

3. まとめ|資本施策の補正は香港株定量分析の基礎

長期間香港株のデータパイプラインを整備し、数多くのバックテスト不具合を調べた経験から言えることは、滑らかな価格グラフはあくまで見た目だけの情報だということです。 バックテストや収益シミュレーションの結果の信頼度を左右するのは、株式併合・分割といった資本変更イベントに対する適切な補正ロジックの有無なのです。

単一銘柄の短期簡単手法はバックテストの結果が安定して見えても、期間を長くし複数回の資本施策をまたぐと計算結果が大きくズレる事例がとても多いです。原因のほとんどは開発時に併合・分割の情報をノイズと判断し、価格計算の工程から除外してしまうことにあります。

実務で再利用できる一連の手順を整理します。

  1. データ登録時に生相場・資本施策・補正価格の 3 テーブルに分け、複合インデックスを作成
  2. API から取得した資本施策情報を解析し、併合実施日・換算比率を記録、公告日と実施日を区別する
  3. 株式併合の適用営業日を時系列の境界とし、時間順に複数段階の補正係数を累積計算
  4. リアルタイムティックとローカル施策キャッシュを銘柄コード・タイムスタンプで相互照合
  5. バックテスト実行時に 3 層のデータを同時読み込み、始値・終値・高値・安値すべての価格を動的に復権補正

この 3 層データ構造をもとにデータ基盤を作れば、資本施策による価格の歪みを完全に解消し、香港株の本来の価格推移を正しく再現できます。個人の趣味的な定量研究から小規模チームのバックテスト環境まで幅広く活用できます。