diff --git a/examples/targets/qmt/README.zh-CN.md b/examples/targets/qmt/README.zh-CN.md index a75be68..fdd228f 100644 --- a/examples/targets/qmt/README.zh-CN.md +++ b/examples/targets/qmt/README.zh-CN.md @@ -18,6 +18,7 @@ | Profile | 输入 | 示例 target | | --- | --- | --- | | `cn_industry_etf_rotation` | `market_history` | `industry_etf_dry_run.example.json`(**主轨**) | +| `cn_industry_etf_rotation_aggressive` | `market_history` | `industry_etf_aggressive_dry_run.example.json`(**optional,vol25%**) | | `cn_dividend_quality_snapshot` | `feature_snapshot` | `dividend_quality_dry_run.example.json` | `cn_index_etf_tactical_rotation` 在策略 catalog 中为 **research_backtest_only**,不要放进 `strategy-profiles.example.json` 的 runtime 列表。 diff --git a/examples/targets/qmt/industry_etf_aggressive_dry_run.example.json b/examples/targets/qmt/industry_etf_aggressive_dry_run.example.json new file mode 100644 index 0000000..7a93b2a --- /dev/null +++ b/examples/targets/qmt/industry_etf_aggressive_dry_run.example.json @@ -0,0 +1,31 @@ +{ + "$schema": "../../../schemas/runtime-target.schema.json", + "target_id": "qmt/industry_etf_aggressive_dry_run", + "description": "Optional QMT dry-run target for cn_industry_etf_rotation_aggressive (vol25% industry ETF rotation).", + "github": { + "repository": "QuantStrategyLab/QmtPlatform", + "variable_scope": "repository" + }, + "runtime_target": { + "platform_id": "qmt", + "strategy_profile": "cn_industry_etf_rotation_aggressive", + "dry_run_only": true, + "deployment_selector": "qmt", + "account_selector": ["qmt"], + "account_scope": "CN", + "service_name": "qmt-quant-service", + "execution_mode": "dry_run", + "scheduler": { + "timezone": "Asia/Shanghai", + "main_time": "45 15 * * *", + "probe_time": "35 9,15 * * *", + "precheck_time": "45 9 * * *" + } + }, + "plugin_mounts_variable": "QMT_STRATEGY_PLUGIN_MOUNTS_JSON", + "plugin_mounts": [], + "extra_variables": { + "QMT_DRY_RUN_ONLY": "true", + "QMT_MARKET_HISTORY_PATH": "data/fixtures/market_history.sample.csv" + } +} diff --git a/scripts/build_runtime_switch.py b/scripts/build_runtime_switch.py index 579fe49..cb3e2de 100644 --- a/scripts/build_runtime_switch.py +++ b/scripts/build_runtime_switch.py @@ -85,6 +85,7 @@ "hk_low_vol_dividend_quality_snapshot": HK_SNAPSHOT_SCHEDULER, "cn_index_etf_tactical_rotation": CN_DAILY_SCHEDULER, "cn_industry_etf_rotation": CN_DAILY_SCHEDULER, + "cn_industry_etf_rotation_aggressive": CN_DAILY_SCHEDULER, "cn_dividend_quality_snapshot": CN_SNAPSHOT_SCHEDULER, } PLATFORM_DRY_RUN_VARIABLES = { diff --git a/web/strategy-switch-console/account-options.example.json b/web/strategy-switch-console/account-options.example.json index d8e570f..2eb9352 100644 --- a/web/strategy-switch-console/account-options.example.json +++ b/web/strategy-switch-console/account-options.example.json @@ -98,6 +98,19 @@ "default_strategy_profile": "cn_industry_etf_rotation", "supported_domains": ["cn_equity"] }, + { + "key": "industry_etf_aggressive_dry_run", + "label": "industry_etf_aggressive_dry_run", + "target_name": "industry_etf_aggressive_dry_run", + "variable_scope": "repository", + "deployment_selector": "qmt", + "account_selector": "qmt", + "account_scope": "CN", + "service_name": "qmt-quant-service", + "cash_currency": "CNY", + "default_strategy_profile": "cn_industry_etf_rotation_aggressive", + "supported_domains": ["cn_equity"] + }, { "key": "dividend_quality_dry_run", "label": "dividend_quality_dry_run", diff --git a/web/strategy-switch-console/strategy-profiles.example.json b/web/strategy-switch-console/strategy-profiles.example.json index d37d499..83c373f 100644 --- a/web/strategy-switch-console/strategy-profiles.example.json +++ b/web/strategy-switch-console/strategy-profiles.example.json @@ -146,6 +146,14 @@ "domain": "cn_equity", "runtime_enabled": true }, + { + "profile": "cn_industry_etf_rotation_aggressive", + "label": "CN Industry ETF Rotation Aggressive", + "label_en": "CN Industry ETF Rotation Aggressive", + "label_zh": "A股行业 ETF 轮动(Aggressive vol25%)", + "domain": "cn_equity", + "runtime_enabled": true + }, { "profile": "cn_dividend_quality_snapshot", "label": "CN Dividend Quality Snapshot", diff --git a/web/strategy-switch-console/strategy_profiles_asset.js b/web/strategy-switch-console/strategy_profiles_asset.js index 60c892c..3ad07cb 100644 --- a/web/strategy-switch-console/strategy_profiles_asset.js +++ b/web/strategy-switch-console/strategy_profiles_asset.js @@ -1,2 +1,2 @@ // Generated by scripts/sync_strategy_switch_page_asset.py; do not edit by hand. -export const DEFAULT_STRATEGY_PROFILES = [{"profile": "tqqq_growth_income", "label": "TQQQ Growth Income", "label_en": "TQQQ Growth Income", "label_zh": "TQQQ 增长收益", "domain": "us_equity", "runtime_enabled": true, "income_layer_enabled": true, "income_layer_start_usd": "250000", "income_layer_max_ratio": "0.55", "income_layer_allocations": {"SCHD": 0.3, "DGRO": 0.2, "SGOV": 0.4, "SPYI": 0.08, "QQQI": 0.02}, "option_overlay_enabled": true, "option_overlay_live_gate": "promotion_required", "option_overlay_live_status": "research_only", "option_growth_overlay_enabled": true, "option_growth_overlay_recipe": "tqqq_leaps_growth_v1", "option_growth_overlay_start_usd": "250000", "option_growth_overlay_nav_budget_ratio": "0.03", "option_income_overlay_enabled": false}, {"profile": "soxl_soxx_trend_income", "label": "SOXL/SOXX Semiconductor Trend Income", "label_en": "SOXL/SOXX Semiconductor Trend Income", "label_zh": "SOXL/SOXX 半导体趋势收益", "domain": "us_equity", "runtime_enabled": true, "income_layer_enabled": true, "income_layer_start_usd": "150000", "income_layer_max_ratio": "0.95", "income_layer_allocations": {"SCHD": 0.15, "DGRO": 0.1, "SGOV": 0.7, "SPYI": 0.04, "QQQI": 0.01}, "option_overlay_enabled": true, "option_overlay_live_gate": "promotion_required", "option_overlay_live_status": "research_only", "option_growth_overlay_enabled": false, "option_income_overlay_enabled": true, "option_income_overlay_recipe": "soxx_put_credit_spread_income_v1", "option_income_overlay_start_usd": "150000", "option_income_overlay_nav_risk_ratio": "0.01"}, {"profile": "nasdaq_sp500_smart_dca", "label": "Nasdaq 100 / S&P 500 DCA", "label_en": "Nasdaq 100 / S&P 500 DCA", "label_zh": "纳指100 / 标普500 定投", "domain": "us_equity", "runtime_enabled": true, "dca_enabled": true, "dca_default_mode": "fixed", "dca_default_base_investment_usd": "1000"}, {"profile": "ibit_smart_dca", "label": "IBIT Bitcoin ETF DCA", "label_en": "IBIT Bitcoin ETF DCA", "label_zh": "IBIT 比特币定投", "domain": "us_equity", "runtime_enabled": true, "dca_enabled": true, "dca_default_mode": "fixed", "dca_default_base_investment_usd": "1000"}, {"profile": "global_etf_rotation", "label": "Global ETF Rotation", "label_en": "Global ETF Rotation", "label_zh": "全球 ETF 轮动", "domain": "us_equity", "runtime_enabled": true, "income_layer_enabled": true, "income_layer_start_usd": "500000", "income_layer_max_ratio": "0.15", "income_layer_allocations": {"SCHD": 0.4, "DGRO": 0.25, "SGOV": 0.3, "SPYI": 0.05}, "option_overlay_enabled": true, "option_overlay_live_gate": "promotion_required", "option_overlay_live_status": "research_only", "option_growth_overlay_enabled": true, "option_growth_overlay_recipe": "spy_leaps_growth_v1", "option_growth_overlay_start_usd": "500000", "option_growth_overlay_nav_budget_ratio": "0.015", "option_income_overlay_enabled": false}, {"profile": "russell_top50_leader_rotation", "label": "Russell Top50 Leader Rotation", "label_en": "Russell Top50 Leader Rotation", "label_zh": "罗素 Top50 领涨轮动", "domain": "us_equity", "runtime_enabled": true, "income_layer_enabled": true, "income_layer_start_usd": "300000", "income_layer_max_ratio": "0.25", "income_layer_allocations": {"SCHD": 0.45, "DGRO": 0.3, "SGOV": 0.25}, "option_overlay_enabled": true, "option_overlay_live_gate": "promotion_required", "option_overlay_live_status": "research_only", "option_growth_overlay_enabled": true, "option_growth_overlay_recipe": "spy_leaps_growth_v1", "option_growth_overlay_start_usd": "300000", "option_growth_overlay_nav_budget_ratio": "0.015", "option_income_overlay_enabled": false}, {"profile": "hk_global_etf_tactical_rotation", "label": "HK Global ETF Tactical Rotation", "label_en": "HK Global ETF Tactical Rotation", "label_zh": "港股全球 ETF 战术轮动", "domain": "hk_equity", "runtime_enabled": true}, {"profile": "hk_low_vol_dividend_quality_snapshot", "label": "HK Low-Vol Dividend Quality Snapshot", "label_en": "HK Low-Vol Dividend Quality Snapshot", "label_zh": "港股低波红利质量快照", "domain": "hk_equity", "runtime_enabled": true}, {"profile": "cn_industry_etf_rotation", "label": "CN Industry ETF Rotation", "label_en": "CN Industry ETF Rotation", "label_zh": "A股行业 ETF 轮动", "domain": "cn_equity", "runtime_enabled": true}, {"profile": "cn_dividend_quality_snapshot", "label": "CN Dividend Quality Snapshot", "label_en": "CN Dividend Quality Snapshot", "label_zh": "A股红利质量快照", "domain": "cn_equity", "runtime_enabled": true}]; +export const DEFAULT_STRATEGY_PROFILES = [{"profile": "tqqq_growth_income", "label": "TQQQ Growth Income", "label_en": "TQQQ Growth Income", "label_zh": "TQQQ 增长收益", "domain": "us_equity", "runtime_enabled": true, "income_layer_enabled": true, "income_layer_start_usd": "250000", "income_layer_max_ratio": "0.55", "income_layer_allocations": {"SCHD": 0.3, "DGRO": 0.2, "SGOV": 0.4, "SPYI": 0.08, "QQQI": 0.02}, "option_overlay_enabled": true, "option_overlay_live_gate": "promotion_required", "option_overlay_live_status": "research_only", "option_growth_overlay_enabled": true, "option_growth_overlay_recipe": "tqqq_leaps_growth_v1", "option_growth_overlay_start_usd": "250000", "option_growth_overlay_nav_budget_ratio": "0.03", "option_income_overlay_enabled": false}, {"profile": "soxl_soxx_trend_income", "label": "SOXL/SOXX Semiconductor Trend Income", "label_en": "SOXL/SOXX Semiconductor Trend Income", "label_zh": "SOXL/SOXX 半导体趋势收益", "domain": "us_equity", "runtime_enabled": true, "income_layer_enabled": true, "income_layer_start_usd": "150000", "income_layer_max_ratio": "0.95", "income_layer_allocations": {"SCHD": 0.15, "DGRO": 0.1, "SGOV": 0.7, "SPYI": 0.04, "QQQI": 0.01}, "option_overlay_enabled": true, "option_overlay_live_gate": "promotion_required", "option_overlay_live_status": "research_only", "option_growth_overlay_enabled": false, "option_income_overlay_enabled": true, "option_income_overlay_recipe": "soxx_put_credit_spread_income_v1", "option_income_overlay_start_usd": "150000", "option_income_overlay_nav_risk_ratio": "0.01"}, {"profile": "nasdaq_sp500_smart_dca", "label": "Nasdaq 100 / S&P 500 DCA", "label_en": "Nasdaq 100 / S&P 500 DCA", "label_zh": "纳指100 / 标普500 定投", "domain": "us_equity", "runtime_enabled": true, "dca_enabled": true, "dca_default_mode": "fixed", "dca_default_base_investment_usd": "1000"}, {"profile": "ibit_smart_dca", "label": "IBIT Bitcoin ETF DCA", "label_en": "IBIT Bitcoin ETF DCA", "label_zh": "IBIT 比特币定投", "domain": "us_equity", "runtime_enabled": true, "dca_enabled": true, "dca_default_mode": "fixed", "dca_default_base_investment_usd": "1000"}, {"profile": "global_etf_rotation", "label": "Global ETF Rotation", "label_en": "Global ETF Rotation", "label_zh": "全球 ETF 轮动", "domain": "us_equity", "runtime_enabled": true, "income_layer_enabled": true, "income_layer_start_usd": "500000", "income_layer_max_ratio": "0.15", "income_layer_allocations": {"SCHD": 0.4, "DGRO": 0.25, "SGOV": 0.3, "SPYI": 0.05}, "option_overlay_enabled": true, "option_overlay_live_gate": "promotion_required", "option_overlay_live_status": "research_only", "option_growth_overlay_enabled": true, "option_growth_overlay_recipe": "spy_leaps_growth_v1", "option_growth_overlay_start_usd": "500000", "option_growth_overlay_nav_budget_ratio": "0.015", "option_income_overlay_enabled": false}, {"profile": "russell_top50_leader_rotation", "label": "Russell Top50 Leader Rotation", "label_en": "Russell Top50 Leader Rotation", "label_zh": "罗素 Top50 领涨轮动", "domain": "us_equity", "runtime_enabled": true, "income_layer_enabled": true, "income_layer_start_usd": "300000", "income_layer_max_ratio": "0.25", "income_layer_allocations": {"SCHD": 0.45, "DGRO": 0.3, "SGOV": 0.25}, "option_overlay_enabled": true, "option_overlay_live_gate": "promotion_required", "option_overlay_live_status": "research_only", "option_growth_overlay_enabled": true, "option_growth_overlay_recipe": "spy_leaps_growth_v1", "option_growth_overlay_start_usd": "300000", "option_growth_overlay_nav_budget_ratio": "0.015", "option_income_overlay_enabled": false}, {"profile": "hk_global_etf_tactical_rotation", "label": "HK Global ETF Tactical Rotation", "label_en": "HK Global ETF Tactical Rotation", "label_zh": "港股全球 ETF 战术轮动", "domain": "hk_equity", "runtime_enabled": true}, {"profile": "hk_low_vol_dividend_quality_snapshot", "label": "HK Low-Vol Dividend Quality Snapshot", "label_en": "HK Low-Vol Dividend Quality Snapshot", "label_zh": "港股低波红利质量快照", "domain": "hk_equity", "runtime_enabled": true}, {"profile": "cn_industry_etf_rotation", "label": "CN Industry ETF Rotation", "label_en": "CN Industry ETF Rotation", "label_zh": "A股行业 ETF 轮动", "domain": "cn_equity", "runtime_enabled": true}, {"profile": "cn_industry_etf_rotation_aggressive", "label": "CN Industry ETF Rotation Aggressive", "label_en": "CN Industry ETF Rotation Aggressive", "label_zh": "A股行业 ETF 轮动(Aggressive vol25%)", "domain": "cn_equity", "runtime_enabled": true}, {"profile": "cn_dividend_quality_snapshot", "label": "CN Dividend Quality Snapshot", "label_en": "CN Dividend Quality Snapshot", "label_zh": "A股红利质量快照", "domain": "cn_equity", "runtime_enabled": true}];