let refresh_rate = 15; let stocknum = 40; 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, 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 { 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 } strategy("microcap_volume_trend_000852") { market("CN_A") benchmark("000852.SH") signal("000852.SH") rebalance.every_days(refresh_rate).at("10:18") universe.exclude("paused", "st", "kcb", "one_yuan", "new_listing") selection.limit(stocknum) 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) ) risk.index_exposure( signal_ma5 > signal_ma10 * rsi_rate ? 1.0 : trade_rate ) 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) ) risk.take_profit(close_rate) risk.stop_loss(loss_rate) allocation.buy_scale(touched_upper_limit ? 1.0 : trade_rate) ordering.rank_by("market_cap", "asc") }