From 678d3b42b034e9974b3d99f6f6dac67a154a23ff Mon Sep 17 00:00:00 2001 From: Pigbibi <20649888+Pigbibi@users.noreply.github.com> Date: Tue, 23 Jun 2026 05:12:45 +0800 Subject: [PATCH] add Russell Top50 market regime plugin support --- docs/strategy_plugin_runtime_contract.md | 2 +- docs/strategy_plugin_runtime_contract.zh-CN.md | 2 +- .../common/strategy_plugins.py | 1 + tests/test_strategy_plugins.py | 17 +++++++++++++++++ 4 files changed, 20 insertions(+), 2 deletions(-) diff --git a/docs/strategy_plugin_runtime_contract.md b/docs/strategy_plugin_runtime_contract.md index 00ed0a2..dc0a064 100644 --- a/docs/strategy_plugin_runtime_contract.md +++ b/docs/strategy_plugin_runtime_contract.md @@ -70,7 +70,7 @@ The default registry currently defines versioned plugin contracts: | Plugin | Schema versions | Supported strategies | Status | Supported mode | Escalated alert channel | | --- | --- | --- | --- | --- | --- | -| `market_regime_control` | `market_regime_control.v1` | `tqqq_growth_income`, `soxl_soxx_trend_income`, `global_etf_rotation`, `russell_1000_multi_factor_defensive`, `mega_cap_leader_rotation_top50_balanced` | default | `shadow` | `email`, `sms`, `push`, `telegram` | +| `market_regime_control` | `market_regime_control.v1` | `tqqq_growth_income`, `soxl_soxx_trend_income`, `global_etf_rotation`, `russell_top50_leader_rotation`, `russell_1000_multi_factor_defensive`, `mega_cap_leader_rotation_top50_balanced` | default | `shadow` | `email`, `sms`, `push`, `telegram` | | `crisis_response_shadow` | `crisis_response_shadow.v1` | `tqqq_growth_income` | deprecated; successor `market_regime_control` | `shadow` | `email`, `sms`, `push`, `telegram` | | `macro_risk_governor` | `macro_risk_governor.v1` | `tqqq_growth_income` | deprecated; successor `market_regime_control` | `shadow` | `email`, `sms`, `push`, `telegram` | | `taco_rebound_shadow` | `taco_rebound_shadow.v2` | `tqqq_growth_income` | deprecated; successor `market_regime_control` | `shadow` | `email`, `sms`, `push`, `telegram` | diff --git a/docs/strategy_plugin_runtime_contract.zh-CN.md b/docs/strategy_plugin_runtime_contract.zh-CN.md index cd1867e..cec7f49 100644 --- a/docs/strategy_plugin_runtime_contract.zh-CN.md +++ b/docs/strategy_plugin_runtime_contract.zh-CN.md @@ -64,7 +64,7 @@ artifact 内,并固定为通知/观察用途的 `shadow`。 | 插件 | Schema versions | 支持策略 | 状态 | 支持模式 | 升级告警通道 | | --- | --- | --- | --- | --- | --- | -| `market_regime_control` | `market_regime_control.v1` | `tqqq_growth_income`, `soxl_soxx_trend_income`, `global_etf_rotation`, `russell_1000_multi_factor_defensive`, `mega_cap_leader_rotation_top50_balanced` | default | `shadow` | `email`, `sms`, `push`, `telegram` | +| `market_regime_control` | `market_regime_control.v1` | `tqqq_growth_income`, `soxl_soxx_trend_income`, `global_etf_rotation`, `russell_top50_leader_rotation`, `russell_1000_multi_factor_defensive`, `mega_cap_leader_rotation_top50_balanced` | default | `shadow` | `email`, `sms`, `push`, `telegram` | | `crisis_response_shadow` | `crisis_response_shadow.v1` | `tqqq_growth_income` | deprecated; successor `market_regime_control` | `shadow` | `email`, `sms`, `push`, `telegram` | | `macro_risk_governor` | `macro_risk_governor.v1` | `tqqq_growth_income` | deprecated; successor `market_regime_control` | `shadow` | `email`, `sms`, `push`, `telegram` | | `taco_rebound_shadow` | `taco_rebound_shadow.v2` | `tqqq_growth_income` | deprecated; successor `market_regime_control` | `shadow` | `email`, `sms`, `push`, `telegram` | diff --git a/src/quant_platform_kit/common/strategy_plugins.py b/src/quant_platform_kit/common/strategy_plugins.py index f8e0373..a50458c 100644 --- a/src/quant_platform_kit/common/strategy_plugins.py +++ b/src/quant_platform_kit/common/strategy_plugins.py @@ -45,6 +45,7 @@ "tqqq_growth_income", "soxl_soxx_trend_income", "global_etf_rotation", + "russell_top50_leader_rotation", "russell_1000_multi_factor_defensive", "mega_cap_leader_rotation_top50_balanced", } diff --git a/tests/test_strategy_plugins.py b/tests/test_strategy_plugins.py index 4fcd568..d2c7f61 100644 --- a/tests/test_strategy_plugins.py +++ b/tests/test_strategy_plugins.py @@ -221,6 +221,7 @@ def test_default_plugin_definition_supports_market_regime_control_for_approved_s "tqqq_growth_income", "soxl_soxx_trend_income", "global_etf_rotation", + "russell_top50_leader_rotation", "russell_1000_multi_factor_defensive", "mega_cap_leader_rotation_top50_balanced", ): @@ -362,6 +363,22 @@ def test_parse_strategy_plugin_mounts_accepts_market_regime_control_weight_profi self.assertEqual(mounts[0].strategy, "global_etf_rotation") self.assertEqual(mounts[0].plugin, PLUGIN_MARKET_REGIME_CONTROL) + def test_parse_strategy_plugin_mounts_accepts_market_regime_control_russell_top50(self): + mounts = parse_strategy_plugin_mounts( + [ + { + "strategy": "russell_top50_leader_rotation", + "plugin": PLUGIN_MARKET_REGIME_CONTROL, + "signal_path": "gs://bucket/market_regime/latest_signal.json", + "expected_schema_version": "market_regime_control.v1", + } + ] + ) + + self.assertEqual(mounts[0].strategy, "russell_top50_leader_rotation") + self.assertEqual(mounts[0].plugin, PLUGIN_MARKET_REGIME_CONTROL) + self.assertEqual(mounts[0].expected_schema_version, "market_regime_control.v1") + def test_plugin_definition_marks_legacy_plugins_deprecated(self): for plugin in ( PLUGIN_CRISIS_RESPONSE_SHADOW,