Adjust 000852 market-cap band and volume filter
This commit is contained in:
@@ -6,21 +6,27 @@ let rsi_rate = 1.0001;
|
|||||||
let trade_rate = 0.5;
|
let trade_rate = 0.5;
|
||||||
let xs = 4 / 500;
|
let xs = 4 / 500;
|
||||||
let base_index_level = 2000;
|
let base_index_level = 2000;
|
||||||
let base_cap_floor = 7;
|
let base_cap_floor = 3;
|
||||||
let cap_span = 10;
|
let base_cap_ceiling = 28;
|
||||||
|
|
||||||
fn band_start(current_price, base_index_level, xs, base_cap_floor) {
|
fn band_start(current_price, base_index_level, xs, base_cap_floor) {
|
||||||
if current_price == base_index_level {
|
if current_price == base_index_level {
|
||||||
base_cap_floor
|
base_cap_floor
|
||||||
} else if current_price > 0 {
|
} 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 {
|
} else {
|
||||||
base_cap_floor
|
base_cap_floor
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn band_end(current_price, base_index_level, xs, base_cap_floor, cap_span) {
|
fn band_end(current_price, base_index_level, xs, base_cap_ceiling) {
|
||||||
band_start(current_price, base_index_level, xs, base_cap_floor) + cap_span
|
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") {
|
strategy("microcap_volume_trend_000852") {
|
||||||
@@ -36,7 +42,7 @@ strategy("microcap_volume_trend_000852") {
|
|||||||
selection.market_cap_band(
|
selection.market_cap_band(
|
||||||
field="market_cap",
|
field="market_cap",
|
||||||
lower=band_start(signal_close, base_index_level, xs, base_cap_floor),
|
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(
|
risk.index_exposure(
|
||||||
@@ -46,7 +52,6 @@ strategy("microcap_volume_trend_000852") {
|
|||||||
filter.stock_expr(
|
filter.stock_expr(
|
||||||
stock_ma5 > stock_ma10 * rsi_rate &&
|
stock_ma5 > stock_ma10 * rsi_rate &&
|
||||||
stock_ma10 > stock_ma30 * rsi_rate &&
|
stock_ma10 > stock_ma30 * rsi_rate &&
|
||||||
rolling_mean("volume", 5) < rolling_mean("volume", 20) &&
|
|
||||||
rolling_mean("volume", 5) < rolling_mean("volume", 60)
|
rolling_mean("volume", 5) < rolling_mean("volume", 60)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -16,13 +16,13 @@
|
|||||||
"rankLimit": 40
|
"rankLimit": 40
|
||||||
},
|
},
|
||||||
"runtimeExpressions": {
|
"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": {
|
"selection": {
|
||||||
"limitExpr": "stocknum",
|
"limitExpr": "stocknum",
|
||||||
"marketCapField": "market_cap",
|
"marketCapField": "market_cap",
|
||||||
"marketCapLowerExpr": "band_start(signal_close, base_index_level, xs, base_cap_floor)",
|
"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)",
|
"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\", 20) && rolling_mean(\"volume\", 5) < rolling_mean(\"volume\", 60)"
|
"stockFilterExpr": "stock_ma5 > stock_ma10 * rsi_rate && stock_ma10 > stock_ma30 * rsi_rate && rolling_mean(\"volume\", 5) < rolling_mean(\"volume\", 60)"
|
||||||
},
|
},
|
||||||
"risk": {
|
"risk": {
|
||||||
"exposureExpr": "signal_ma5 > signal_ma10 * rsi_rate ? 1.0 : trade_rate",
|
"exposureExpr": "signal_ma5 > signal_ma10 * rsi_rate ? 1.0 : trade_rate",
|
||||||
|
|||||||
Reference in New Issue
Block a user