* 一、基本データ取得と初期フィルタリングETFリストの取得:get_all_securities(['etf'])を使用して全市場のETFを取得し、2013年1月1日以前に設立されたもの(start_date < 2023-01-01)を選定し、十分な過去データを確保します。 流動性の低いETFを除外:取引高の平均値が低い特定のETF(例:159003.XSHE招商快线ETF、159005.XSHE汇添富快钱ETFなど、平均取引高≤2.92kw)を手動で除外します。* 二、ETFの日足データとリターン率の計算データ範囲:当日(today)前の240取引日の終値データを取得します。 リターン率処理:日次リターン(pchg = close.pct_change())を計算し、ETFリターンの行列(prices、行=取引日、列=ETFコード)を作成します。* 三、K-Meansクラスタリングによる重複排除(動きの類似性に基づく)クラスタリング目的:動きが似ているETFを一つのクラスタにまとめ、重複を減らす。 パラメータ設定:クラスタ数n_clusters=30(クラスタ数が少なすぎて類似しないETFが誤ってまとめられるのを防ぐため)、KMeansアルゴリズムを使用し、random_state=42を設定。 クラスタ内の選別:各クラスタで最も早く設立されたETFを残す。理由は以下の通り: - 早期設立→取引高が大きく流動性が高い傾向がある。 - 早期設立→過去データが豊富でモデル訓練に有利。* 四、輪郭係数によるクラスタリング効果の評価クラスタリングの輪郭係数を計算:0.4511880967361387(中程度の水準、クラスタ内の密集度とクラスタ間の分離度は一定の良さを示すが、さらなる最適化の余地あり)。* 五、相関係数の二次フィルタリング(関連性のさらなる低減)相関係数行列の計算:ETFリターンの相関係数行列(corr = prices[df.code].corr())を算出。 高い相関のETFペアの処理:相関係数>0.85のETFペアを抽出し、各ペアで設立が早いETFのみを残し、他を除外(例:159922.XSHE、512100.XSHGなど)。* 六、オプション:設立が遅いETFの除外(データ品質向上)閾値設定:2020年以降に設立されたETF(例:513060.XSHG恒生医療、515790.XSHG太陽光発電ETFなど)を除外し、残るETFの過去データを充実させる(モデル訓練用途に適する)。* 七、注意点と補足国債ETFの特別処理:モデル訓練に使用する場合、511010.XSHE国債ETFは除外推奨。理由は、直線的な動き(余额宝に類似)で変動が極めて小さく、モデルの波動特性学習を妨げるため。 下落傾向のETFの取扱い:長期的に下落しているETF(例:医薬品ETF、不動産ETF)も結果に含まれる可能性がある。除外の判断は戦略の目的次第: - 安定したリターンを追求するなら除外。 - 下落ETFを含んでも戦略が良好に機能する場合、戦略の堅牢性が高い可能性もある(ただし、「未来予測」リスクに注意し、下落反転の可能性は予測できない)。 可視化による検証:残ったETFのチャート(例:2017年以降の終値)を描画し、相関や分布が期待通りか手動で確認。最終的な選別の流れ: 「初期フィルタリング→クラスタリングによる重複排除→相関係数の二次フィルタリング→(必要に応じて)設立時期による除外」の4段階を経て、流動性が高く動きの低相関、過去データが豊富なETF群を抽出。これにより、多様で高品質な基準銘柄群を戦略やモデルに提供します。
ETFスクリーニングプロセスとコア要点まとめ
ETFリストの取得:get_all_securities([‘etf’])を使用して全市場のETFを取得し、2013年1月1日以前に設立されたもの(start_date < 2023-01-01)を選定し、十分な過去データを確保します。
流動性の低いETFを除外:取引高の平均値が低い特定のETF(例:159003.XSHE招商快线ETF、159005.XSHE汇添富快钱ETFなど、平均取引高≤2.92kw)を手動で除外します。
二、ETFの日足データとリターン率の計算 データ範囲:当日(today)前の240取引日の終値データを取得します。
リターン率処理:日次リターン(pchg = close.pct_change())を計算し、ETFリターンの行列(prices、行=取引日、列=ETFコード)を作成します。
三、K-Meansクラスタリングによる重複排除(動きの類似性に基づく) クラスタリング目的:動きが似ているETFを一つのクラスタにまとめ、重複を減らす。
パラメータ設定:クラスタ数n_clusters=30(クラスタ数が少なすぎて類似しないETFが誤ってまとめられるのを防ぐため)、KMeansアルゴリズムを使用し、random_state=42を設定。
クラスタ内の選別:各クラスタで最も早く設立されたETFを残す。理由は以下の通り:
四、輪郭係数によるクラスタリング効果の評価 クラスタリングの輪郭係数を計算:0.4511880967361387(中程度の水準、クラスタ内の密集度とクラスタ間の分離度は一定の良さを示すが、さらなる最適化の余地あり)。
五、相関係数の二次フィルタリング(関連性のさらなる低減) 相関係数行列の計算:ETFリターンの相関係数行列(corr = prices[df.code].corr())を算出。
高い相関のETFペアの処理:相関係数>0.85のETFペアを抽出し、各ペアで設立が早いETFのみを残し、他を除外(例:159922.XSHE、512100.XSHGなど)。
六、オプション:設立が遅いETFの除外(データ品質向上) 閾値設定:2020年以降に設立されたETF(例:513060.XSHG恒生医療、515790.XSHG太陽光発電ETFなど)を除外し、残るETFの過去データを充実させる(モデル訓練用途に適する)。
七、注意点と補足 国債ETFの特別処理:モデル訓練に使用する場合、511010.XSHE国債ETFは除外推奨。理由は、直線的な動き(余额宝に類似)で変動が極めて小さく、モデルの波動特性学習を妨げるため。
下落傾向のETFの取扱い:長期的に下落しているETF(例:医薬品ETF、不動産ETF)も結果に含まれる可能性がある。除外の判断は戦略の目的次第:
可視化による検証:残ったETFのチャート(例:2017年以降の終値)を描画し、相関や分布が期待通りか手動で確認。
最終的な選別の流れ:
「初期フィルタリング→クラスタリングによる重複排除→相関係数の二次フィルタリング→(必要に応じて)設立時期による除外」の4段階を経て、流動性が高く動きの低相関、過去データが豊富なETF群を抽出。これにより、多様で高品質な基準銘柄群を戦略やモデルに提供します。