From c57d75878fdb7c3275d44bdf4d697f2b15147bbb Mon Sep 17 00:00:00 2001 From: boris Date: Wed, 22 Apr 2026 04:43:08 -0700 Subject: [PATCH] Adjust 000852 market-cap band and volume filter --- .../000852量价微盘平台策略.engine-script.txt | 19 ++++++++++++------- .../000852量价微盘平台策略.strategy_spec.json | 6 +++--- 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/data/demo/000852量价微盘平台策略.engine-script.txt b/data/demo/000852量价微盘平台策略.engine-script.txt index 5aa3e69..8b66d65 100644 --- a/data/demo/000852量价微盘平台策略.engine-script.txt +++ b/data/demo/000852量价微盘平台策略.engine-script.txt @@ -6,21 +6,27 @@ let rsi_rate = 1.0001; let trade_rate = 0.5; let xs = 4 / 500; let base_index_level = 2000; -let base_cap_floor = 7; -let cap_span = 10; +let base_cap_floor = 3; +let base_cap_ceiling = 28; fn band_start(current_price, base_index_level, xs, base_cap_floor) { if current_price == base_index_level { base_cap_floor } else if current_price > 0 { - (current_price - base_index_level) * xs + base_cap_floor + round((current_price - base_index_level) * xs + base_cap_floor) } else { base_cap_floor } } -fn band_end(current_price, base_index_level, xs, base_cap_floor, cap_span) { - band_start(current_price, base_index_level, xs, base_cap_floor) + cap_span +fn band_end(current_price, base_index_level, xs, base_cap_ceiling) { + if current_price == base_index_level { + base_cap_ceiling + } else if current_price > 0 { + round((current_price - base_index_level) * xs + base_cap_ceiling) + } else { + base_cap_ceiling + } } strategy("microcap_volume_trend_000852") { @@ -36,7 +42,7 @@ strategy("microcap_volume_trend_000852") { selection.market_cap_band( field="market_cap", lower=band_start(signal_close, base_index_level, xs, base_cap_floor), - upper=band_end(signal_close, base_index_level, xs, base_cap_floor, cap_span) + upper=band_end(signal_close, base_index_level, xs, base_cap_ceiling) ) risk.index_exposure( @@ -46,7 +52,6 @@ strategy("microcap_volume_trend_000852") { filter.stock_expr( stock_ma5 > stock_ma10 * rsi_rate && stock_ma10 > stock_ma30 * rsi_rate && - rolling_mean("volume", 5) < rolling_mean("volume", 20) && rolling_mean("volume", 5) < rolling_mean("volume", 60) ) diff --git a/data/demo/000852量价微盘平台策略.strategy_spec.json b/data/demo/000852量价微盘平台策略.strategy_spec.json index 370cca8..a25aa0f 100644 --- a/data/demo/000852量价微盘平台策略.strategy_spec.json +++ b/data/demo/000852量价微盘平台策略.strategy_spec.json @@ -16,13 +16,13 @@ "rankLimit": 40 }, "runtimeExpressions": { - "prelude": "let refresh_rate = 15;\nlet stocknum = 40;\nlet close_rate = 1.07;\nlet loss_rate = 0.93;\nlet rsi_rate = 1.0001;\nlet trade_rate = 0.5;\nlet xs = 4 / 500;\nlet base_index_level = 2000;\nlet base_cap_floor = 7;\nlet cap_span = 10;\nfn band_start(current_price, base_index_level, xs, base_cap_floor) {\n if current_price == base_index_level {\n base_cap_floor\n } else if current_price > 0 {\n (current_price - base_index_level) * xs + base_cap_floor\n } else {\n base_cap_floor\n }\n}\nfn band_end(current_price, base_index_level, xs, base_cap_floor, cap_span) {\n band_start(current_price, base_index_level, xs, base_cap_floor) + cap_span\n}", + "prelude": "let refresh_rate = 15;\nlet stocknum = 40;\nlet close_rate = 1.07;\nlet loss_rate = 0.93;\nlet rsi_rate = 1.0001;\nlet trade_rate = 0.5;\nlet xs = 4 / 500;\nlet base_index_level = 2000;\nlet base_cap_floor = 3;\nlet base_cap_ceiling = 28;\nfn band_start(current_price, base_index_level, xs, base_cap_floor) {\n if current_price == base_index_level {\n base_cap_floor\n } else if current_price > 0 {\n round((current_price - base_index_level) * xs + base_cap_floor)\n } else {\n base_cap_floor\n }\n}\nfn band_end(current_price, base_index_level, xs, base_cap_ceiling) {\n if current_price == base_index_level {\n base_cap_ceiling\n } else if current_price > 0 {\n round((current_price - base_index_level) * xs + base_cap_ceiling)\n } else {\n base_cap_ceiling\n }\n}", "selection": { "limitExpr": "stocknum", "marketCapField": "market_cap", "marketCapLowerExpr": "band_start(signal_close, base_index_level, xs, base_cap_floor)", - "marketCapUpperExpr": "band_end(signal_close, base_index_level, xs, base_cap_floor, cap_span)", - "stockFilterExpr": "stock_ma5 > stock_ma10 * rsi_rate && stock_ma10 > stock_ma30 * rsi_rate && rolling_mean(\"volume\", 5) < rolling_mean(\"volume\", 20) && rolling_mean(\"volume\", 5) < rolling_mean(\"volume\", 60)" + "marketCapUpperExpr": "band_end(signal_close, base_index_level, xs, base_cap_ceiling)", + "stockFilterExpr": "stock_ma5 > stock_ma10 * rsi_rate && stock_ma10 > stock_ma30 * rsi_rate && rolling_mean(\"volume\", 5) < rolling_mean(\"volume\", 60)" }, "risk": { "exposureExpr": "signal_ma5 > signal_ma10 * rsi_rate ? 1.0 : trade_rate",