{ "strategy_id": "benchmark-native-factor-overlay", "strategy_version_id": "goal-five-year-semantics-v1", "user_id": "boris", "runtime": { "start_date": "2021-08-23", "end_date": "2026-08-28", "frequency": "1d", "source_table": "strategy_factory_source_lake.daily_source_rows_v1", "signal_symbol": "000852.SH", "benchmark_symbol": "000852.SH", "initial_cash": 10000000.0, "backtestDataBundleId": "bt_bundle_b44e03990c76064f54a9", "backtestDataBundleHash": "d7c1461131edaecb5981e207852782d92e636dbfee9fd7c44063605d96eb2b4f" }, "execution": { "matchingType": "next_bar_open", "rebalanceCashMode": "same_point_net", "slippageModel": "price_ratio", "slippageValue": 0.0001, "commissionRate": 0.0001, "minimumCommission": 5.0, "stampTaxRateBeforeChange": 0.001, "stampTaxRateAfterChange": 0.0005, "stampTaxChangeDate": "2023-08-28", "volumeLimit": true, "liquidityLimit": false, "volumePercent": 0.25, "riskPolicy": { "allowMarketOrders": true, "blacklistEnabled": false, "blacklistedSymbols": [], "commissionRate": 0.0001, "forbidSameDayRebuyAfterSell": true, "liquidityLimitEnabled": false, "liveTradingEnabled": false, "minimumCommission": 5.0, "rejectBjseBuy": false, "rejectBjseSelection": false, "rejectInactiveBuy": true, "rejectInactiveSelection": false, "rejectInactiveSell": true, "rejectKcbBuy": true, "rejectKcbSelection": false, "rejectLowerLimitSelection": false, "rejectLowerLimitSell": true, "rejectNewListingBuy": true, "rejectNewListingSelection": false, "rejectOneYuanBuy": true, "rejectOneYuanSelection": false, "rejectPausedBuy": true, "rejectPausedSelection": false, "rejectPausedSell": true, "rejectStBuy": true, "rejectStSelection": false, "rejectStarStBuy": true, "rejectStarStSelection": false, "rejectUpperLimitBuy": true, "rejectUpperLimitSelection": false, "respectAllowBuySell": true, "stampTaxChangeDate": "2023-08-28", "stampTaxRateAfterChange": 0.0005, "stampTaxRateBeforeChange": 0.001, "volumeLimitEnabled": true, "volumePercent": 0.25 } }, "strategy_source": { "source_type": "platform-strategy", "language": "engine-script", "parser": "omniquant-engine-script-v2", "source_code": "strategy(\"xiaoshizhi_1_06_dynamic_small_cap_csi2000_signal_day_exposure\") {\n market(\"CN_A\");\n benchmark(\"000300.SH\");\n signal(\"932000.CSI\");\n\n let stocknum = 30;\n let candidate_pool_size = 50;\n let position_denominator_extra = 1;\n let signal_close_t = rolling_mean_current(\"signal_close\", 1);\n let signal_ma10_t = rolling_mean_current(\"signal_close\", 10);\n let signal_ma30_t = rolling_mean_current(\"signal_close\", 30);\n let signal_vol20_t = rolling_return_stddev_current(\"signal_close\", 20);\n let signal_high60_t = rolling_max_current(\"signal_close\", 60);\n let signal_drawdown60_t = 1.0 - safe_div(signal_close_t, signal_high60_t);\n let signal_range_t = safe_div(clamp(signal_close_t, 2000.0, 3000.0) - 2000.0, 1000.0);\n let market_cap_lower_t = 12.0 + signal_range_t * 5.0;\n let market_cap_upper_t = 40.0 + signal_range_t * 5.0;\n let base_exposure_t = signal_ma10_t > signal_ma30_t ? 1.0 : 0.3;\n let volatility_exposure_t = signal_vol20_t >= 0.025 ? 0.3 : 1.0;\n let drawdown_exposure_t = signal_drawdown60_t >= 0.08 ? 0.2 : 1.0;\n let final_exposure_t =\n signal_close_t > 0.0 &&\n signal_ma10_t > 0.0 &&\n signal_ma30_t > 0.0 &&\n signal_high60_t > 0.0\n ? min(min(base_exposure_t, volatility_exposure_t), drawdown_exposure_t)\n : 0.0;\n\n rebalance.every_days(1).at([\"15:00\"]);\n\n selection.market_cap_band(\n field=\"market_cap\",\n lower=market_cap_lower_t,\n upper=market_cap_upper_t\n );\n\n filter.stock_expr(((!is_star_st && !is_kcb && !is_bjse && rolling_mean_current(\"close\", 5) > rolling_mean_current(\"close\", 10) && rolling_mean_current(\"close\", 10) > rolling_mean_current(\"close\", 30) && rolling_mean_current(\"volume\", 5) < rolling_mean_current(\"volume\", 100)) && (!is_st))) && (ths_up_days_stock >= 1);\n\n ordering.rank_by(\"market_cap\", \"asc\");\n selection.candidate_limit(50);\n selection.limit(stocknum);\n\n allocation.buy_scale(30.0 / 31.0);\n execution.strict_value_budget(true)\n\n trading.hold_until_exit(true);\n trading.max_holding_days(90);\n trading.daily_top_up(true);\n trading.daily_position_target_adjust(true);\n trading.target_portfolio_daily(true);\n trading.rebalance_existing_positions(true);\n trading.retry_empty_rebalance(true);\n trading.release_slot_on_exit_signal(true);\n\n risk.stop_loss(0.08);\n risk.take_profit(0.16);\n risk.reference_price_mode(\"signal_day_post_adjusted_close\");\n risk.index_exposure(final_exposure_t);\n\n risk.policy(reject_st_selection=false, reject_st_buy=true, reject_star_st_selection=false, reject_star_st_buy=true, reject_paused_selection=false, reject_paused_buy=true, reject_paused_sell=true, reject_inactive_selection=false, reject_inactive_buy=true, reject_inactive_sell=true, reject_new_listing_selection=false, reject_new_listing_buy=true, reject_kcb_selection=false, reject_kcb_buy=true, reject_bjse_selection=false, reject_bjse_buy=false, reject_one_yuan_selection=false, reject_one_yuan_buy=true, respect_allow_buy_sell=true, reject_upper_limit_selection=false, reject_lower_limit_selection=false, reject_upper_limit_buy=true, reject_lower_limit_sell=true, forbid_same_day_rebuy_after_sell=true, blacklist_enabled=false, blacklisted_symbols=[], allow_market_orders=true, live_trading_enabled=false, volume_limit_enabled=true, liquidity_limit_enabled=false, volume_percent=0.25, commission_rate=0.0001, minimum_commission=5.0, stamp_tax_rate_before_change=0.001, stamp_tax_rate_after_change=0.0005, stamp_tax_change_date=\"2023-08-28\");\n\n execution.matching_type(\"next_bar_open\");\n execution.slippage(\"price_ratio\", 0.0001);\n execution.rebalance_cash_mode(\"same_point_net\");\n}" }, "strategy_spec": { "benchmark": { "fallbackInstrumentId": "000852.SH", "instrumentId": "000852.SH" }, "engineConfig": { "benchmarkSymbol": "000852.SH", "commissionRate": 0.0001, "dividendReinvestment": false, "dynamicRange": { "baseCapFloor": 7, "baseIndexLevel": 2000, "capSpan": 10, "xs": 0.008 }, "frequency": "1d", "indexThrottle": { "defensiveExposure": 0.5, "fullExposure": 1, "longDays": 130, "rsiRate": 1.0001, "shortDays": 1 }, "liquidityLimit": false, "matchingType": "next_bar_open", "minimumCommission": 5.0, "rankLimit": 30, "rebalanceCashMode": "same_point_net", "rebalanceSchedule": { "frequency": "daily", "time": "15:00" }, "refreshRate": 1, "riskPolicy": { "allowMarketOrders": true, "blacklistEnabled": false, "blacklistedSymbols": [], "commissionRate": 0.0001, "forbidSameDayRebuyAfterSell": true, "liquidityLimitEnabled": false, "liveTradingEnabled": false, "minimumCommission": 5.0, "rejectBjseBuy": false, "rejectBjseSelection": false, "rejectInactiveBuy": true, "rejectInactiveSelection": false, "rejectInactiveSell": true, "rejectKcbBuy": true, "rejectKcbSelection": false, "rejectLowerLimitSelection": false, "rejectLowerLimitSell": true, "rejectNewListingBuy": true, "rejectNewListingSelection": false, "rejectOneYuanBuy": true, "rejectOneYuanSelection": false, "rejectPausedBuy": true, "rejectPausedSelection": false, "rejectPausedSell": true, "rejectStBuy": true, "rejectStSelection": false, "rejectStarStBuy": true, "rejectStarStSelection": false, "rejectUpperLimitBuy": true, "rejectUpperLimitSelection": false, "respectAllowBuySell": true, "stampTaxChangeDate": "2023-08-28", "stampTaxRateAfterChange": 0.0005, "stampTaxRateBeforeChange": 0.001, "volumeLimitEnabled": true, "volumePercent": 0.25 }, "rsiRate": 1.0001, "signalSymbol": "000852.SH", "skipWindows": [], "slippageModel": "price_ratio", "slippageValue": 0.0001, "stampTaxChangeDate": "2023-08-28", "stampTaxRateAfterChange": 0.0005, "stampTaxRateBeforeChange": 0.001, "stockMaFilter": { "longDays": 30, "midDays": 10, "rsiRate": 1.0001, "shortDays": 5, "volumeLongDays": 100, "volumeShortDays": 5 }, "stopLossMultiplier": 0.08, "strictValueBudget": true, "takeProfitMultiplier": 0.16, "templateId": "xiaoshizhi_1_06_dynamic_small_cap_csi2000_signal_day_exposure", "volumeLimit": true, "volumePercent": 0.25 }, "execution": { "commissionRate": 0.0001, "executionGranularity": "daily_or_minute_bar", "extractor": "omniquant-engine-script-v2", "frequency": "1d", "liquidityLimit": false, "matchingType": "next_bar_open", "minimumCommission": 5.0, "priceSource": "current_bar_close_or_next_bar_open_or_minute_bar", "rebalanceCashMode": "same_point_net", "riskPolicy": { "allowMarketOrders": true, "blacklistEnabled": false, "blacklistedSymbols": [], "commissionRate": 0.0001, "forbidSameDayRebuyAfterSell": true, "liquidityLimitEnabled": false, "liveTradingEnabled": false, "minimumCommission": 5.0, "rejectBjseBuy": false, "rejectBjseSelection": false, "rejectInactiveBuy": true, "rejectInactiveSelection": false, "rejectInactiveSell": true, "rejectKcbBuy": true, "rejectKcbSelection": false, "rejectLowerLimitSelection": false, "rejectLowerLimitSell": true, "rejectNewListingBuy": true, "rejectNewListingSelection": false, "rejectOneYuanBuy": true, "rejectOneYuanSelection": false, "rejectPausedBuy": true, "rejectPausedSelection": false, "rejectPausedSell": true, "rejectStBuy": true, "rejectStSelection": false, "rejectStarStBuy": true, "rejectStarStSelection": false, "rejectUpperLimitBuy": true, "rejectUpperLimitSelection": false, "respectAllowBuySell": true, "stampTaxChangeDate": "2023-08-28", "stampTaxRateAfterChange": 0.0005, "stampTaxRateBeforeChange": 0.001, "volumeLimitEnabled": true, "volumePercent": 0.25 }, "selectionGranularity": "strategy_factory_source_lake.daily_source_rows_v1", "slippageModel": "price_ratio", "slippageValue": 0.0001, "sourceKind": "platform-strategy", "sourceLanguage": "engine-script", "stampTaxChangeDate": "2023-08-28", "stampTaxRateAfterChange": 0.0005, "stampTaxRateBeforeChange": 0.001, "strictValueBudget": true, "volumeLimit": true, "volumePercent": 0.25 }, "factorRefs": [ "market_cap", "ths_up_days_stock" ], "market": "CN_A", "metadata": { "backtestDataBundle": { "sourceTable": "strategy_factory_source_lake.daily_source_rows_v1", "backtestDataBundleId": "bt_bundle_b44e03990c76064f54a9", "backtestDataBundleHash": "d7c1461131edaecb5981e207852782d92e636dbfee9fd7c44063605d96eb2b4f" }, "backtestDataBundleHash": "d7c1461131edaecb5981e207852782d92e636dbfee9fd7c44063605d96eb2b4f", "backtestDataBundleId": "bt_bundle_b44e03990c76064f54a9", "sourceTable": "strategy_factory_source_lake.daily_source_rows_v1" }, "rebalance": { "dailyApproximation": "日线回测按 matching_type 撮合;分钟线回测按交易时刻分钟价格撮合", "frequencyDays": 1, "schedule": { "frequency": "daily", "time": "15:00" }, "tradeTimes": [ "15:00" ] }, "risk": { "indexThrottleExpr": "final_exposure_t", "stopLossExpr": "0.08", "stopTakeReferencePriceMode": "signal_day_post_adjusted_close", "takeProfitExpr": "0.16" }, "runtimeExpressions": { "allocation": { "buyScaleExpr": "30.0 / 31.0" }, "ordering": { "rankBy": "market_cap", "rankExpr": "", "rankOrder": "asc" }, "prelude": "let stocknum = 30;\nlet candidate_pool_size = 50;\nlet position_denominator_extra = 1;\nlet signal_close_t = rolling_mean_current(\"signal_close\", 1);\nlet signal_ma10_t = rolling_mean_current(\"signal_close\", 10);\nlet signal_ma30_t = rolling_mean_current(\"signal_close\", 30);\nlet signal_vol20_t = rolling_return_stddev_current(\"signal_close\", 20);\nlet signal_high60_t = rolling_max_current(\"signal_close\", 60);\nlet signal_drawdown60_t = 1.0 - safe_div(signal_close_t, signal_high60_t);\nlet signal_range_t = safe_div(clamp(signal_close_t, 2000.0, 3000.0) - 2000.0, 1000.0);\nlet market_cap_lower_t = 12.0 + signal_range_t * 5.0;\nlet market_cap_upper_t = 40.0 + signal_range_t * 5.0;\nlet base_exposure_t = signal_ma10_t > signal_ma30_t ? 1.0 : 0.3;\nlet volatility_exposure_t = signal_vol20_t >= 0.025 ? 0.3 : 1.0;\nlet drawdown_exposure_t = signal_drawdown60_t >= 0.08 ? 0.2 : 1.0;\nlet final_exposure_t = signal_close_t > 0.0 && signal_ma10_t > 0.0 && signal_ma30_t > 0.0 && signal_high60_t > 0.0 ? min(min(base_exposure_t, volatility_exposure_t), drawdown_exposure_t) : 0.0;\nlet warmup_probe = rolling_sum(\"amount\", 125);", "risk": { "exposureExpr": "final_exposure_t", "stopLossExpr": "0.08", "stopTakeReferencePriceMode": "signal_day_post_adjusted_close", "takeProfitExpr": "0.16" }, "schedule": { "frequency": "daily", "time": "15:00" }, "selection": { "candidateLimitExpr": "50", "limitExpr": "stocknum", "marketCapField": "market_cap", "marketCapLowerExpr": "market_cap_lower_t", "marketCapUpperExpr": "market_cap_upper_t", "stockFilterExpr": "(((!is_star_st && !is_kcb && !is_bjse && rolling_mean_current(\"close\", 5) > rolling_mean_current(\"close\", 10) && rolling_mean_current(\"close\", 10) > rolling_mean_current(\"close\", 30) && rolling_mean_current(\"volume\", 5) < rolling_mean_current(\"volume\", 100)) && (!is_st))) && (ths_up_days_stock >= 1)" }, "trading": { "actions": [], "dailyPositionTargetAdjust": true, "dailyTopUp": true, "holdUntilExit": true, "maxHoldingDays": 90, "rebalanceExistingPositions": true, "releaseSlotOnExitSignal": true, "retryEmptyRebalance": true, "rotationEnabled": true, "stage": "on_day", "subscriptionGuardRequired": false, "targetPortfolioDaily": true } }, "seasonality": { "skipWindows": [] }, "selectors": [ { "field": "market_cap", "lowerExpr": "market_cap_lower_t", "mapping": "market_cap -> strategy_factory_source_lake.runtime_fields.market_cap", "type": "dynamicRange", "upperExpr": "market_cap_upper_t" }, { "expr": "(((!is_star_st && !is_kcb && !is_bjse && rolling_mean_current(\"close\", 5) > rolling_mean_current(\"close\", 10) && rolling_mean_current(\"close\", 10) > rolling_mean_current(\"close\", 30) && rolling_mean_current(\"volume\", 5) < rolling_mean_current(\"volume\", 100)) && (!is_st))) && (ths_up_days_stock >= 1)", "type": "filter" }, { "limitExpr": "stocknum", "orderBy": [ "market_cap asc" ], "type": "rank" } ], "signalSymbol": "000852.SH", "sourceCode": "strategy(\"xiaoshizhi_1_06_dynamic_small_cap_csi2000_signal_day_exposure\") {\n market(\"CN_A\");\n benchmark(\"000300.SH\");\n signal(\"932000.CSI\");\n\n let stocknum = 30;\n let candidate_pool_size = 50;\n let position_denominator_extra = 1;\n let signal_close_t = rolling_mean_current(\"signal_close\", 1);\n let signal_ma10_t = rolling_mean_current(\"signal_close\", 10);\n let signal_ma30_t = rolling_mean_current(\"signal_close\", 30);\n let signal_vol20_t = rolling_return_stddev_current(\"signal_close\", 20);\n let signal_high60_t = rolling_max_current(\"signal_close\", 60);\n let signal_drawdown60_t = 1.0 - safe_div(signal_close_t, signal_high60_t);\n let signal_range_t = safe_div(clamp(signal_close_t, 2000.0, 3000.0) - 2000.0, 1000.0);\n let market_cap_lower_t = 12.0 + signal_range_t * 5.0;\n let market_cap_upper_t = 40.0 + signal_range_t * 5.0;\n let base_exposure_t = signal_ma10_t > signal_ma30_t ? 1.0 : 0.3;\n let volatility_exposure_t = signal_vol20_t >= 0.025 ? 0.3 : 1.0;\n let drawdown_exposure_t = signal_drawdown60_t >= 0.08 ? 0.2 : 1.0;\n let final_exposure_t =\n signal_close_t > 0.0 &&\n signal_ma10_t > 0.0 &&\n signal_ma30_t > 0.0 &&\n signal_high60_t > 0.0\n ? min(min(base_exposure_t, volatility_exposure_t), drawdown_exposure_t)\n : 0.0;\n\n rebalance.every_days(1).at([\"15:00\"]);\n\n selection.market_cap_band(\n field=\"market_cap\",\n lower=market_cap_lower_t,\n upper=market_cap_upper_t\n );\n\n filter.stock_expr(((!is_star_st && !is_kcb && !is_bjse && rolling_mean_current(\"close\", 5) > rolling_mean_current(\"close\", 10) && rolling_mean_current(\"close\", 10) > rolling_mean_current(\"close\", 30) && rolling_mean_current(\"volume\", 5) < rolling_mean_current(\"volume\", 100)) && (!is_st))) && (ths_up_days_stock >= 1);\n\n ordering.rank_by(\"market_cap\", \"asc\");\n selection.candidate_limit(50);\n selection.limit(stocknum);\n\n allocation.buy_scale(30.0 / 31.0);\n execution.strict_value_budget(true)\n\n trading.hold_until_exit(true);\n trading.max_holding_days(90);\n trading.daily_top_up(true);\n trading.daily_position_target_adjust(true);\n trading.target_portfolio_daily(true);\n trading.rebalance_existing_positions(true);\n trading.retry_empty_rebalance(true);\n trading.release_slot_on_exit_signal(true);\n\n risk.stop_loss(0.08);\n risk.take_profit(0.16);\n risk.reference_price_mode(\"signal_day_post_adjusted_close\");\n risk.index_exposure(final_exposure_t);\n\n risk.policy(reject_st_selection=false, reject_st_buy=true, reject_star_st_selection=false, reject_star_st_buy=true, reject_paused_selection=false, reject_paused_buy=true, reject_paused_sell=true, reject_inactive_selection=false, reject_inactive_buy=true, reject_inactive_sell=true, reject_new_listing_selection=false, reject_new_listing_buy=true, reject_kcb_selection=false, reject_kcb_buy=true, reject_bjse_selection=false, reject_bjse_buy=false, reject_one_yuan_selection=false, reject_one_yuan_buy=true, respect_allow_buy_sell=true, reject_upper_limit_selection=false, reject_lower_limit_selection=false, reject_upper_limit_buy=true, reject_lower_limit_sell=true, forbid_same_day_rebuy_after_sell=true, blacklist_enabled=false, blacklisted_symbols=[], allow_market_orders=true, live_trading_enabled=false, volume_limit_enabled=true, liquidity_limit_enabled=false, volume_percent=0.25, commission_rate=0.0001, minimum_commission=5.0, stamp_tax_rate_before_change=0.001, stamp_tax_rate_after_change=0.0005, stamp_tax_change_date=\"2023-08-28\");\n\n execution.matching_type(\"next_bar_open\");\n execution.slippage(\"price_ratio\", 0.0001);\n execution.rebalance_cash_mode(\"same_point_net\");\n}", "strategyId": "warmup-expression-contract-acceptance", "universe": { "exclude": [], "implementationNotes": [ "ST、停牌、退市、新股、科创、一元、涨跌停、同日卖出禁买、成交量和费用由 riskPolicy / RiskLimits 统一执行", "上市日期与退市日期取自 instrument 结构化字段,不再使用股票名称做 ST/退市判断", "盘中 current_price / last_price 由策略交易时刻批量 tick 查询驱动" ] }, "version": "1.0.0", "stockPoolFactorContract": { "schemaVersion": 1, "entryLogic": "all", "exitLogic": "any", "conditions": [ { "factorRef": "up_days_stock", "label": "连涨天数", "role": "selection", "registryRole": "selection_feature", "roleRegistrySha256": "1d0b307c168feda08d5fbe20f0e88964230553f8ceb2017b66aec48dbd5a5b57", "roleEvidence": { "role": "selection_feature", "polarity": "trend_persistence_positive", "signalShape": "state", "holdingStates": [ "flat" ], "requiredConfirmations": [], "cooldownTradingDays": 0, "windowTradingDays": 1, "recommendedParameters": { "inputUnit": "days", "minimum": 0 } }, "operator": ">=", "threshold": 1, "semantic": { "ref": "up_days_stock", "label": "连涨天数", "status": "available", "queryable": true, "source": "strategy-factory-source-lake:indicator", "schema": "strategy-factory.value-semantics/v1", "valueType": "integer", "semanticType": "count", "comparisonGroup": "count", "storageUnit": "days", "inputUnit": "days", "inputScale": 1.0, "allowedOperators": [ ">", ">=", "<", "<=", "==", "!=", "between", "in" ], "nullable": true, "declared": true, "metadataStatus": "declared", "semanticProvenance": "explicit_manifest", "businessSemanticDeclared": true, "minimum": 0, "backtestBinding": { "field": "ths_up_days_stock", "sourceDataset": "indicators_up_days_stock" }, "tradingRoles": [ { "role": "selection_feature", "polarity": "trend_persistence_positive", "signalShape": "state", "holdingStates": [ "flat" ], "requiredConfirmations": [], "cooldownTradingDays": 0, "windowTradingDays": 1, "recommendedParameters": { "inputUnit": "days", "minimum": 0 } } ], "tradingRoleTradable": true, "tradingRoleEvidenceStatus": "source_lake_registered_indicator", "tradingRoleRegistrySha256": "1d0b307c168feda08d5fbe20f0e88964230553f8ceb2017b66aec48dbd5a5b57" } } ] } } }