Parameterize 000852 band range helpers

This commit is contained in:
boris
2026-04-22 03:03:23 -07:00
parent 17fb4a3836
commit 7f54309d53
2 changed files with 17 additions and 11 deletions

View File

@@ -4,17 +4,23 @@ let close_rate = 1.07;
let loss_rate = 0.93;
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;
fn band_start(current_price) {
if abs(current_price - 2000) < 0.000001 {
7
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
} else {
(current_price - 2000) * (4.0 / 500.0) + 7
base_cap_floor
}
}
fn band_end(current_price) {
band_start(current_price) + 10
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
}
strategy("microcap_volume_trend_000852") {
@@ -29,8 +35,8 @@ strategy("microcap_volume_trend_000852") {
selection.limit(stocknum)
selection.market_cap_band(
field="market_cap",
lower=band_start(signal_close),
upper=band_end(signal_close)
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)
)
risk.index_exposure(

View File

@@ -16,12 +16,12 @@
"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;\nfn band_start(current_price) {\n if abs(current_price - 2000) < 0.000001 {\n 7\n } else {\n (current_price - 2000) * (4.0 / 500.0) + 7\n }\n}\nfn band_end(current_price) {\n band_start(current_price) + 10\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 = 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}",
"selection": {
"limitExpr": "stocknum",
"marketCapField": "market_cap",
"marketCapLowerExpr": "band_start(signal_close)",
"marketCapUpperExpr": "band_end(signal_close)",
"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)"
},
"risk": {