532 lines
31 KiB
JSON
532 lines
31 KiB
JSON
{
|
|
"strategy_id": "benchmark-native-factor-overlay",
|
|
"strategy_version_id": "1.0.0",
|
|
"user_id": "2d84120b-567a-417e-b6a4-6ffedceb132f",
|
|
"runtime": {
|
|
"start_date": "2025-09-08",
|
|
"end_date": "2025-09-12",
|
|
"frequency": "1d",
|
|
"source_table": "strategy_factory_source_lake.daily_source_rows_v1",
|
|
"signal_symbol": "000300.SH",
|
|
"benchmark_symbol": "000300.SH",
|
|
"initial_cash": 10000000.0,
|
|
"backtestDataBundleId": "bt_bundle_85825809f940ce489825",
|
|
"backtestDataBundleHash": "c83203674aa4ba23eed0bbc043c2a53f13bcbc37f45c395b3fb8d560a4d14991"
|
|
},
|
|
"execution": {
|
|
"matchingType": "current_bar_close",
|
|
"rebalanceCashMode": "sell_then_buy",
|
|
"sellThenBuyDelaySlippageRate": 0,
|
|
"slippageModel": "price_ratio",
|
|
"slippageValue": 0.002,
|
|
"commissionRate": 0.0001,
|
|
"minimumCommission": 0.0,
|
|
"stampTaxRateBeforeChange": 0.001,
|
|
"stampTaxRateAfterChange": 0.0005,
|
|
"stampTaxChangeDate": "2023-08-28",
|
|
"volumeLimit": true,
|
|
"liquidityLimit": false,
|
|
"volumePercent": 0.25,
|
|
"riskPolicy": {
|
|
"allowMarketOrders": true,
|
|
"blacklistEnabled": true,
|
|
"blacklistedSymbols": [],
|
|
"commissionRate": 0.0001,
|
|
"forbidSameDayRebuyAfterSell": false,
|
|
"liquidityLimitEnabled": false,
|
|
"liveTradingEnabled": false,
|
|
"maxOrderNotional": 100000000,
|
|
"maxOrderQuantity": 1000000,
|
|
"maxSymbolPosition": 10000000,
|
|
"minimumCommission": 0,
|
|
"rejectBjseBuy": true,
|
|
"rejectBjseSelection": false,
|
|
"rejectInactiveBuy": true,
|
|
"rejectInactiveSelection": false,
|
|
"rejectInactiveSell": true,
|
|
"rejectKcbBuy": false,
|
|
"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(\"许总_组合_backtest\") {\n mode(\"rotation\")\n market(\"CN_A\")\n benchmark(\"000300.SH\")\n signal(\"000300.SH\")\n rebalance.every_days(1).at([\"09:30\"])\n universe.include([\"688116.SH\", \"603200.SH\", \"300395.SZ\", \"600732.SH\", \"000063.SZ\", \"002625.SZ\", \"300811.SZ\", \"002851.SZ\", \"000988.SZ\", \"002281.SZ\", \"300205.SZ\", \"002239.SZ\", \"600079.SH\", \"600276.SH\", \"600909.SH\", \"002169.SZ\", \"603156.SH\", \"002654.SZ\", \"000999.SZ\", \"601066.SH\", \"603345.SH\", \"000333.SZ\", \"603726.SH\", \"688012.SH\"])\n selection.limit(24)\n selection.candidate_limit(24)\n selection.market_cap_band(field=\"close\", lower=0, upper=1000000000000)\n filter.stock_expr((close > 0)) && (ths_up_days_stock >= 1)\n ordering.rank_expr((((((symbol == \"688116.SH\" || symbol == \"603200.SH\") || symbol == \"300395.SZ\") || ((symbol == \"600732.SH\" || symbol == \"000063.SZ\") || symbol == \"002625.SZ\")) || (((symbol == \"300811.SZ\" || symbol == \"002851.SZ\") || symbol == \"000988.SZ\") || ((symbol == \"002281.SZ\" || symbol == \"300205.SZ\") || symbol == \"002239.SZ\"))) || ((((symbol == \"600079.SH\" || symbol == \"600276.SH\") || symbol == \"600909.SH\") || ((symbol == \"002169.SZ\" || symbol == \"603156.SH\") || symbol == \"002654.SZ\")) || (((symbol == \"000999.SZ\" || symbol == \"601066.SH\") || symbol == \"603345.SH\") || ((symbol == \"000333.SZ\" || symbol == \"603726.SH\") || symbol == \"688012.SH\")))) ? (((((symbol == \"688116.SH\" || symbol == \"603200.SH\") || symbol == \"300395.SZ\") || ((symbol == \"600732.SH\" || symbol == \"000063.SZ\") || symbol == \"002625.SZ\")) || (((symbol == \"300811.SZ\" || symbol == \"002851.SZ\") || symbol == \"000988.SZ\") || ((symbol == \"002281.SZ\" || symbol == \"300205.SZ\") || symbol == \"002239.SZ\"))) ? ((((symbol == \"688116.SH\" || symbol == \"603200.SH\") || symbol == \"300395.SZ\") || ((symbol == \"600732.SH\" || symbol == \"000063.SZ\") || symbol == \"002625.SZ\")) ? (((symbol == \"688116.SH\" || symbol == \"603200.SH\") || symbol == \"300395.SZ\") ? ((symbol == \"688116.SH\" || symbol == \"603200.SH\") ? (symbol == \"688116.SH\" ? (0) : (1)) : (2)) : ((symbol == \"600732.SH\" || symbol == \"000063.SZ\") ? (symbol == \"600732.SH\" ? (3) : (4)) : (5))) : (((symbol == \"300811.SZ\" || symbol == \"002851.SZ\") || symbol == \"000988.SZ\") ? ((symbol == \"300811.SZ\" || symbol == \"002851.SZ\") ? (symbol == \"300811.SZ\" ? (6) : (7)) : (8)) : ((symbol == \"002281.SZ\" || symbol == \"300205.SZ\") ? (symbol == \"002281.SZ\" ? (9) : (10)) : (11)))) : ((((symbol == \"600079.SH\" || symbol == \"600276.SH\") || symbol == \"600909.SH\") || ((symbol == \"002169.SZ\" || symbol == \"603156.SH\") || symbol == \"002654.SZ\")) ? (((symbol == \"600079.SH\" || symbol == \"600276.SH\") || symbol == \"600909.SH\") ? ((symbol == \"600079.SH\" || symbol == \"600276.SH\") ? (symbol == \"600079.SH\" ? (12) : (13)) : (14)) : ((symbol == \"002169.SZ\" || symbol == \"603156.SH\") ? (symbol == \"002169.SZ\" ? (15) : (16)) : (17))) : (((symbol == \"000999.SZ\" || symbol == \"601066.SH\") || symbol == \"603345.SH\") ? ((symbol == \"000999.SZ\" || symbol == \"601066.SH\") ? (symbol == \"000999.SZ\" ? (18) : (19)) : (20)) : ((symbol == \"000333.SZ\" || symbol == \"603726.SH\") ? (symbol == \"000333.SZ\" ? (21) : (22)) : (23))))) : 24, \"asc\")\n risk.index_exposure(max(0.0, 0.9000000000 - 0.0000 / max(total_equity, 1.0)))\n allocation.buy_scale((((((symbol == \"688116.SH\" || symbol == \"603200.SH\") || symbol == \"300395.SZ\") || ((symbol == \"600732.SH\" || symbol == \"000063.SZ\") || symbol == \"002625.SZ\")) || (((symbol == \"300811.SZ\" || symbol == \"002851.SZ\") || symbol == \"000988.SZ\") || ((symbol == \"002281.SZ\" || symbol == \"300205.SZ\") || symbol == \"002239.SZ\"))) || ((((symbol == \"600079.SH\" || symbol == \"600276.SH\") || symbol == \"600909.SH\") || ((symbol == \"002169.SZ\" || symbol == \"603156.SH\") || symbol == \"002654.SZ\")) || (((symbol == \"000999.SZ\" || symbol == \"601066.SH\") || symbol == \"603345.SH\") || ((symbol == \"000333.SZ\" || symbol == \"603726.SH\") || symbol == \"688012.SH\")))) ? (((((symbol == \"688116.SH\" || symbol == \"603200.SH\") || (symbol == \"300395.SZ\" || symbol == \"600732.SH\")) || ((symbol == \"000063.SZ\" || symbol == \"002625.SZ\") || (symbol == \"300811.SZ\" || symbol == \"002851.SZ\"))) || (((symbol == \"000988.SZ\" || symbol == \"002281.SZ\") || (symbol == \"300205.SZ\" || symbol == \"002239.SZ\")) || ((symbol == \"600079.SH\" || symbol == \"600276.SH\") || (symbol == \"600909.SH\" || symbol == \"002169.SZ\")))) ? (1.0008000000) : (0.9984000000)) : 0.0)\n risk.stop_loss(holding_return <= -0.0800000000)\n risk.take_profit(holding_return >= 0.1600000000)\n risk.reference_price_mode(\"position_average_entry_price\")\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.hold_until_exit(true)\n trading.retry_empty_rebalance(true)\n trading.release_slot_on_exit_signal(true)\n trading.redistribute_target_weights_after_exit(true)\n trading.reenter_exited_targets(true)\n execution.matching_type(\"current_bar_close\")\n}"
|
|
},
|
|
"strategy_spec": {
|
|
"benchmark": {
|
|
"fallbackInstrumentId": "000300.SH",
|
|
"instrumentId": "000300.SH",
|
|
"note": "必须使用真实指数链路;若 000852.SH 不可用,应直接报错而不是退化到其他标的。"
|
|
},
|
|
"engineConfig": {
|
|
"benchmarkSymbol": "000300.SH",
|
|
"commissionRate": 0.0001,
|
|
"dividendReinvestment": false,
|
|
"dynamicRange": {
|
|
"baseCapFloor": 7,
|
|
"baseIndexLevel": 2000,
|
|
"capSpan": 1000000000000,
|
|
"xs": 0.008
|
|
},
|
|
"frequency": "1d",
|
|
"indexThrottle": {
|
|
"defensiveExposure": 0.5,
|
|
"fullExposure": 1,
|
|
"longDays": 10,
|
|
"rsiRate": 1.0001,
|
|
"shortDays": 5
|
|
},
|
|
"liquidityLimit": false,
|
|
"matchingType": "current_bar_close",
|
|
"minimumCommission": 0.0,
|
|
"rankLimit": 24,
|
|
"rebalanceCashMode": "sell_then_buy",
|
|
"rebalanceSchedule": {
|
|
"frequency": "daily",
|
|
"time": "09:30"
|
|
},
|
|
"refreshRate": 1,
|
|
"riskPolicy": {
|
|
"allowMarketOrders": true,
|
|
"blacklistEnabled": true,
|
|
"blacklistedSymbols": [],
|
|
"commissionRate": 0.0001,
|
|
"forbidSameDayRebuyAfterSell": false,
|
|
"liquidityLimitEnabled": false,
|
|
"liveTradingEnabled": false,
|
|
"maxOrderNotional": 100000000,
|
|
"maxOrderQuantity": 1000000,
|
|
"maxSymbolPosition": 10000000,
|
|
"minimumCommission": 0,
|
|
"rejectBjseBuy": true,
|
|
"rejectBjseSelection": false,
|
|
"rejectInactiveBuy": true,
|
|
"rejectInactiveSelection": false,
|
|
"rejectInactiveSell": true,
|
|
"rejectKcbBuy": false,
|
|
"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,
|
|
"sellThenBuyDelaySlippageRate": 0,
|
|
"signalSymbol": "000300.SH",
|
|
"skipWindows": [],
|
|
"slippageModel": "price_ratio",
|
|
"slippageValue": 0.002,
|
|
"stampTaxChangeDate": "2023-08-28",
|
|
"stampTaxRateAfterChange": 0.0005,
|
|
"stampTaxRateBeforeChange": 0.001,
|
|
"stockMaFilter": {
|
|
"longDays": 20,
|
|
"midDays": 10,
|
|
"rsiRate": 1.0001,
|
|
"shortDays": 5,
|
|
"volumeLongDays": 60,
|
|
"volumeShortDays": 5
|
|
},
|
|
"stopLossMultiplier": 0.93,
|
|
"strictValueBudget": true,
|
|
"takeProfitMultiplier": 1.07,
|
|
"templateId": "许总_组合_backtest",
|
|
"volumeLimit": true,
|
|
"volumePercent": 0.25
|
|
},
|
|
"execution": {
|
|
"commissionRate": 0.0001,
|
|
"executionGranularity": "daily_or_minute_bar",
|
|
"extractor": "omniquant-engine-script-v2",
|
|
"frequency": "1d",
|
|
"liquidityLimit": false,
|
|
"matchingType": "current_bar_close",
|
|
"minimumCommission": 0.0,
|
|
"priceSource": "current_bar_close_or_next_bar_open_or_minute_bar",
|
|
"rebalanceCashMode": "sell_then_buy",
|
|
"riskPolicy": {
|
|
"allowMarketOrders": true,
|
|
"blacklistEnabled": true,
|
|
"blacklistedSymbols": [],
|
|
"commissionRate": 0.0001,
|
|
"forbidSameDayRebuyAfterSell": false,
|
|
"liquidityLimitEnabled": false,
|
|
"liveTradingEnabled": false,
|
|
"maxOrderNotional": 100000000,
|
|
"maxOrderQuantity": 1000000,
|
|
"maxSymbolPosition": 10000000,
|
|
"minimumCommission": 0,
|
|
"rejectBjseBuy": true,
|
|
"rejectBjseSelection": false,
|
|
"rejectInactiveBuy": true,
|
|
"rejectInactiveSelection": false,
|
|
"rejectInactiveSell": true,
|
|
"rejectKcbBuy": false,
|
|
"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",
|
|
"sellThenBuyDelaySlippageRate": 0,
|
|
"slippageModel": "price_ratio",
|
|
"slippageValue": 0.002,
|
|
"sourceKind": "platform-strategy",
|
|
"sourceLanguage": "engine-script",
|
|
"stampTaxChangeDate": "2023-08-28",
|
|
"stampTaxRateAfterChange": 0.0005,
|
|
"stampTaxRateBeforeChange": 0.001,
|
|
"strictValueBudget": true,
|
|
"volumeLimit": true,
|
|
"volumePercent": 0.25
|
|
},
|
|
"factorRefs": [
|
|
"close",
|
|
"ths_up_days_stock"
|
|
],
|
|
"factorValueBindings": [],
|
|
"market": "CN_A",
|
|
"metadata": {
|
|
"backtestDataBundle": {
|
|
"sourceTable": "strategy_factory_source_lake.daily_source_rows_v1",
|
|
"backtestDataBundleId": "bt_bundle_85825809f940ce489825",
|
|
"backtestDataBundleHash": "c83203674aa4ba23eed0bbc043c2a53f13bcbc37f45c395b3fb8d560a4d14991"
|
|
},
|
|
"backtestDataBundleHash": "c83203674aa4ba23eed0bbc043c2a53f13bcbc37f45c395b3fb8d560a4d14991",
|
|
"backtestDataBundleId": "bt_bundle_85825809f940ce489825",
|
|
"sourceTable": "strategy_factory_source_lake.daily_source_rows_v1",
|
|
"strategyExecutionContract": {
|
|
"commissionRate": "0.0001",
|
|
"dynamicSlippageImpact": "0",
|
|
"dynamicSlippageMax": "0",
|
|
"dynamicSlippageVolatility": "0",
|
|
"frequency": "1d",
|
|
"hash": "fnv1a-66a4a68e",
|
|
"liquidityLimitEnabled": false,
|
|
"matchingType": "current_bar_close",
|
|
"minimumCommission": "0",
|
|
"rebalanceCashMode": "sell_then_buy",
|
|
"riskPolicy": {
|
|
"allowMarketOrders": true,
|
|
"blacklistEnabled": true,
|
|
"blacklistedSymbols": [],
|
|
"commissionRate": 0.0001,
|
|
"forbidSameDayRebuyAfterSell": false,
|
|
"liquidityLimitEnabled": false,
|
|
"liveTradingEnabled": false,
|
|
"maxOrderNotional": 100000000,
|
|
"maxOrderQuantity": 1000000,
|
|
"maxSymbolPosition": 10000000,
|
|
"minimumCommission": 0,
|
|
"rejectBjseBuy": true,
|
|
"rejectBjseSelection": false,
|
|
"rejectInactiveBuy": true,
|
|
"rejectInactiveSelection": false,
|
|
"rejectInactiveSell": true,
|
|
"rejectKcbBuy": false,
|
|
"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
|
|
},
|
|
"sellThenBuyDelaySlippageRate": "0",
|
|
"slippageMode": "fixed",
|
|
"slippageRate": "0.002",
|
|
"stampTaxChangeDate": "2023-08-28",
|
|
"stampTaxRateAfterChange": "0.0005",
|
|
"stampTaxRateBeforeChange": "0.001",
|
|
"version": "fidc-strategy-execution-v1",
|
|
"volumeLimitEnabled": true,
|
|
"volumePercent": "0.25"
|
|
},
|
|
"strategyExecutionContractHash": "fnv1a-66a4a68e",
|
|
"strategyExecutionContractVersion": "fidc-strategy-execution-v1",
|
|
"strategyRiskPolicyVersion": "fidc-risk-policy-v2"
|
|
},
|
|
"mode": "rotation",
|
|
"rebalance": {
|
|
"dailyApproximation": "日线回测按 matching_type 撮合;分钟线回测按交易时刻分钟价格撮合",
|
|
"frequencyDays": 1,
|
|
"schedule": {
|
|
"frequency": "daily",
|
|
"time": "09:30"
|
|
},
|
|
"tradeTimes": [
|
|
"09:30"
|
|
]
|
|
},
|
|
"risk": {
|
|
"indexThrottleExpr": "max(0.0, 0.9000000000 - 0.0000 / max(total_equity, 1.0))",
|
|
"stopLossExpr": "holding_return <= -0.0800000000",
|
|
"stopTakeReferencePriceMode": "position_average_entry_price",
|
|
"takeProfitExpr": "holding_return >= 0.1600000000"
|
|
},
|
|
"runtimeExpressions": {
|
|
"allocation": {
|
|
"buyScaleExpr": "(((((symbol == \"688116.SH\" || symbol == \"603200.SH\") || symbol == \"300395.SZ\") || ((symbol == \"600732.SH\" || symbol == \"000063.SZ\") || symbol == \"002625.SZ\")) || (((symbol == \"300811.SZ\" || symbol == \"002851.SZ\") || symbol == \"000988.SZ\") || ((symbol == \"002281.SZ\" || symbol == \"300205.SZ\") || symbol == \"002239.SZ\"))) || ((((symbol == \"600079.SH\" || symbol == \"600276.SH\") || symbol == \"600909.SH\") || ((symbol == \"002169.SZ\" || symbol == \"603156.SH\") || symbol == \"002654.SZ\")) || (((symbol == \"000999.SZ\" || symbol == \"601066.SH\") || symbol == \"603345.SH\") || ((symbol == \"000333.SZ\" || symbol == \"603726.SH\") || symbol == \"688012.SH\")))) ? (((((symbol == \"688116.SH\" || symbol == \"603200.SH\") || (symbol == \"300395.SZ\" || symbol == \"600732.SH\")) || ((symbol == \"000063.SZ\" || symbol == \"002625.SZ\") || (symbol == \"300811.SZ\" || symbol == \"002851.SZ\"))) || (((symbol == \"000988.SZ\" || symbol == \"002281.SZ\") || (symbol == \"300205.SZ\" || symbol == \"002239.SZ\")) || ((symbol == \"600079.SH\" || symbol == \"600276.SH\") || (symbol == \"600909.SH\" || symbol == \"002169.SZ\")))) ? (1.0008000000) : (0.9984000000)) : 0.0"
|
|
},
|
|
"ordering": {
|
|
"rankBy": "market_cap",
|
|
"rankExpr": "(((((symbol == \"688116.SH\" || symbol == \"603200.SH\") || symbol == \"300395.SZ\") || ((symbol == \"600732.SH\" || symbol == \"000063.SZ\") || symbol == \"002625.SZ\")) || (((symbol == \"300811.SZ\" || symbol == \"002851.SZ\") || symbol == \"000988.SZ\") || ((symbol == \"002281.SZ\" || symbol == \"300205.SZ\") || symbol == \"002239.SZ\"))) || ((((symbol == \"600079.SH\" || symbol == \"600276.SH\") || symbol == \"600909.SH\") || ((symbol == \"002169.SZ\" || symbol == \"603156.SH\") || symbol == \"002654.SZ\")) || (((symbol == \"000999.SZ\" || symbol == \"601066.SH\") || symbol == \"603345.SH\") || ((symbol == \"000333.SZ\" || symbol == \"603726.SH\") || symbol == \"688012.SH\")))) ? (((((symbol == \"688116.SH\" || symbol == \"603200.SH\") || symbol == \"300395.SZ\") || ((symbol == \"600732.SH\" || symbol == \"000063.SZ\") || symbol == \"002625.SZ\")) || (((symbol == \"300811.SZ\" || symbol == \"002851.SZ\") || symbol == \"000988.SZ\") || ((symbol == \"002281.SZ\" || symbol == \"300205.SZ\") || symbol == \"002239.SZ\"))) ? ((((symbol == \"688116.SH\" || symbol == \"603200.SH\") || symbol == \"300395.SZ\") || ((symbol == \"600732.SH\" || symbol == \"000063.SZ\") || symbol == \"002625.SZ\")) ? (((symbol == \"688116.SH\" || symbol == \"603200.SH\") || symbol == \"300395.SZ\") ? ((symbol == \"688116.SH\" || symbol == \"603200.SH\") ? (symbol == \"688116.SH\" ? (0) : (1)) : (2)) : ((symbol == \"600732.SH\" || symbol == \"000063.SZ\") ? (symbol == \"600732.SH\" ? (3) : (4)) : (5))) : (((symbol == \"300811.SZ\" || symbol == \"002851.SZ\") || symbol == \"000988.SZ\") ? ((symbol == \"300811.SZ\" || symbol == \"002851.SZ\") ? (symbol == \"300811.SZ\" ? (6) : (7)) : (8)) : ((symbol == \"002281.SZ\" || symbol == \"300205.SZ\") ? (symbol == \"002281.SZ\" ? (9) : (10)) : (11)))) : ((((symbol == \"600079.SH\" || symbol == \"600276.SH\") || symbol == \"600909.SH\") || ((symbol == \"002169.SZ\" || symbol == \"603156.SH\") || symbol == \"002654.SZ\")) ? (((symbol == \"600079.SH\" || symbol == \"600276.SH\") || symbol == \"600909.SH\") ? ((symbol == \"600079.SH\" || symbol == \"600276.SH\") ? (symbol == \"600079.SH\" ? (12) : (13)) : (14)) : ((symbol == \"002169.SZ\" || symbol == \"603156.SH\") ? (symbol == \"002169.SZ\" ? (15) : (16)) : (17))) : (((symbol == \"000999.SZ\" || symbol == \"601066.SH\") || symbol == \"603345.SH\") ? ((symbol == \"000999.SZ\" || symbol == \"601066.SH\") ? (symbol == \"000999.SZ\" ? (18) : (19)) : (20)) : ((symbol == \"000333.SZ\" || symbol == \"603726.SH\") ? (symbol == \"000333.SZ\" ? (21) : (22)) : (23))))) : 24",
|
|
"rankOrder": "asc"
|
|
},
|
|
"prelude": "",
|
|
"risk": {
|
|
"exposureExpr": "max(0.0, 0.9000000000 - 0.0000 / max(total_equity, 1.0))",
|
|
"stopLossExpr": "holding_return <= -0.0800000000",
|
|
"stopTakeReferencePriceMode": "position_average_entry_price",
|
|
"takeProfitExpr": "holding_return >= 0.1600000000"
|
|
},
|
|
"schedule": {
|
|
"frequency": "daily",
|
|
"time": "09:30"
|
|
},
|
|
"selection": {
|
|
"candidateLimitExpr": "24",
|
|
"limitExpr": "24",
|
|
"marketCapField": "close",
|
|
"marketCapLowerExpr": "0",
|
|
"marketCapUpperExpr": "1000000000000",
|
|
"stockFilterExpr": "((close > 0)) && (ths_up_days_stock >= 1)"
|
|
},
|
|
"trading": {
|
|
"actions": [],
|
|
"dailyPositionTargetAdjust": true,
|
|
"dailyTopUp": true,
|
|
"holdUntilExit": true,
|
|
"rebalanceExistingPositions": true,
|
|
"redistributeTargetWeightsAfterExit": true,
|
|
"reenterExitedTargets": true,
|
|
"releaseSlotOnExitSignal": true,
|
|
"retryEmptyRebalance": true,
|
|
"rotationEnabled": true,
|
|
"stage": "on_day",
|
|
"subscriptionGuardRequired": false,
|
|
"targetPortfolioDaily": true
|
|
}
|
|
},
|
|
"seasonality": {
|
|
"skipWindows": []
|
|
},
|
|
"selectors": [
|
|
{
|
|
"field": "market_cap",
|
|
"lowerExpr": "0",
|
|
"mapping": "close -> strategy_factory_source_lake.runtime_fields.close",
|
|
"type": "dynamicRange",
|
|
"upperExpr": "1000000000000"
|
|
},
|
|
{
|
|
"expr": "((close > 0)) && (ths_up_days_stock >= 1)",
|
|
"type": "filter"
|
|
},
|
|
{
|
|
"limitExpr": "24",
|
|
"orderBy": [
|
|
"market_cap asc"
|
|
],
|
|
"type": "rank"
|
|
}
|
|
],
|
|
"signalSymbol": "000300.SH",
|
|
"sourceCode": "strategy(\"许总_组合_backtest\") {\n mode(\"rotation\")\n market(\"CN_A\")\n benchmark(\"000300.SH\")\n signal(\"000300.SH\")\n rebalance.every_days(1).at([\"09:30\"])\n universe.include([\"688116.SH\", \"603200.SH\", \"300395.SZ\", \"600732.SH\", \"000063.SZ\", \"002625.SZ\", \"300811.SZ\", \"002851.SZ\", \"000988.SZ\", \"002281.SZ\", \"300205.SZ\", \"002239.SZ\", \"600079.SH\", \"600276.SH\", \"600909.SH\", \"002169.SZ\", \"603156.SH\", \"002654.SZ\", \"000999.SZ\", \"601066.SH\", \"603345.SH\", \"000333.SZ\", \"603726.SH\", \"688012.SH\"])\n selection.limit(24)\n selection.candidate_limit(24)\n selection.market_cap_band(field=\"close\", lower=0, upper=1000000000000)\n filter.stock_expr((close > 0)) && (ths_up_days_stock >= 1)\n ordering.rank_expr((((((symbol == \"688116.SH\" || symbol == \"603200.SH\") || symbol == \"300395.SZ\") || ((symbol == \"600732.SH\" || symbol == \"000063.SZ\") || symbol == \"002625.SZ\")) || (((symbol == \"300811.SZ\" || symbol == \"002851.SZ\") || symbol == \"000988.SZ\") || ((symbol == \"002281.SZ\" || symbol == \"300205.SZ\") || symbol == \"002239.SZ\"))) || ((((symbol == \"600079.SH\" || symbol == \"600276.SH\") || symbol == \"600909.SH\") || ((symbol == \"002169.SZ\" || symbol == \"603156.SH\") || symbol == \"002654.SZ\")) || (((symbol == \"000999.SZ\" || symbol == \"601066.SH\") || symbol == \"603345.SH\") || ((symbol == \"000333.SZ\" || symbol == \"603726.SH\") || symbol == \"688012.SH\")))) ? (((((symbol == \"688116.SH\" || symbol == \"603200.SH\") || symbol == \"300395.SZ\") || ((symbol == \"600732.SH\" || symbol == \"000063.SZ\") || symbol == \"002625.SZ\")) || (((symbol == \"300811.SZ\" || symbol == \"002851.SZ\") || symbol == \"000988.SZ\") || ((symbol == \"002281.SZ\" || symbol == \"300205.SZ\") || symbol == \"002239.SZ\"))) ? ((((symbol == \"688116.SH\" || symbol == \"603200.SH\") || symbol == \"300395.SZ\") || ((symbol == \"600732.SH\" || symbol == \"000063.SZ\") || symbol == \"002625.SZ\")) ? (((symbol == \"688116.SH\" || symbol == \"603200.SH\") || symbol == \"300395.SZ\") ? ((symbol == \"688116.SH\" || symbol == \"603200.SH\") ? (symbol == \"688116.SH\" ? (0) : (1)) : (2)) : ((symbol == \"600732.SH\" || symbol == \"000063.SZ\") ? (symbol == \"600732.SH\" ? (3) : (4)) : (5))) : (((symbol == \"300811.SZ\" || symbol == \"002851.SZ\") || symbol == \"000988.SZ\") ? ((symbol == \"300811.SZ\" || symbol == \"002851.SZ\") ? (symbol == \"300811.SZ\" ? (6) : (7)) : (8)) : ((symbol == \"002281.SZ\" || symbol == \"300205.SZ\") ? (symbol == \"002281.SZ\" ? (9) : (10)) : (11)))) : ((((symbol == \"600079.SH\" || symbol == \"600276.SH\") || symbol == \"600909.SH\") || ((symbol == \"002169.SZ\" || symbol == \"603156.SH\") || symbol == \"002654.SZ\")) ? (((symbol == \"600079.SH\" || symbol == \"600276.SH\") || symbol == \"600909.SH\") ? ((symbol == \"600079.SH\" || symbol == \"600276.SH\") ? (symbol == \"600079.SH\" ? (12) : (13)) : (14)) : ((symbol == \"002169.SZ\" || symbol == \"603156.SH\") ? (symbol == \"002169.SZ\" ? (15) : (16)) : (17))) : (((symbol == \"000999.SZ\" || symbol == \"601066.SH\") || symbol == \"603345.SH\") ? ((symbol == \"000999.SZ\" || symbol == \"601066.SH\") ? (symbol == \"000999.SZ\" ? (18) : (19)) : (20)) : ((symbol == \"000333.SZ\" || symbol == \"603726.SH\") ? (symbol == \"000333.SZ\" ? (21) : (22)) : (23))))) : 24, \"asc\")\n risk.index_exposure(max(0.0, 0.9000000000 - 0.0000 / max(total_equity, 1.0)))\n allocation.buy_scale((((((symbol == \"688116.SH\" || symbol == \"603200.SH\") || symbol == \"300395.SZ\") || ((symbol == \"600732.SH\" || symbol == \"000063.SZ\") || symbol == \"002625.SZ\")) || (((symbol == \"300811.SZ\" || symbol == \"002851.SZ\") || symbol == \"000988.SZ\") || ((symbol == \"002281.SZ\" || symbol == \"300205.SZ\") || symbol == \"002239.SZ\"))) || ((((symbol == \"600079.SH\" || symbol == \"600276.SH\") || symbol == \"600909.SH\") || ((symbol == \"002169.SZ\" || symbol == \"603156.SH\") || symbol == \"002654.SZ\")) || (((symbol == \"000999.SZ\" || symbol == \"601066.SH\") || symbol == \"603345.SH\") || ((symbol == \"000333.SZ\" || symbol == \"603726.SH\") || symbol == \"688012.SH\")))) ? (((((symbol == \"688116.SH\" || symbol == \"603200.SH\") || (symbol == \"300395.SZ\" || symbol == \"600732.SH\")) || ((symbol == \"000063.SZ\" || symbol == \"002625.SZ\") || (symbol == \"300811.SZ\" || symbol == \"002851.SZ\"))) || (((symbol == \"000988.SZ\" || symbol == \"002281.SZ\") || (symbol == \"300205.SZ\" || symbol == \"002239.SZ\")) || ((symbol == \"600079.SH\" || symbol == \"600276.SH\") || (symbol == \"600909.SH\" || symbol == \"002169.SZ\")))) ? (1.0008000000) : (0.9984000000)) : 0.0)\n risk.stop_loss(holding_return <= -0.0800000000)\n risk.take_profit(holding_return >= 0.1600000000)\n risk.reference_price_mode(\"position_average_entry_price\")\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.hold_until_exit(true)\n trading.retry_empty_rebalance(true)\n trading.release_slot_on_exit_signal(true)\n trading.redistribute_target_weights_after_exit(true)\n trading.reenter_exited_targets(true)\n execution.matching_type(\"current_bar_close\")\n}",
|
|
"strategyId": "许总_组合_backtest",
|
|
"universe": {
|
|
"exclude": [],
|
|
"implementationNotes": [
|
|
"ST、停牌、退市、新股、科创、一元、涨跌停、同日卖出禁买、成交量和费用由 riskPolicy / RiskLimits 统一执行",
|
|
"上市日期与退市日期取自 instrument 结构化字段,不再使用股票名称做 ST/退市判断",
|
|
"盘中 current_price / last_price 由策略交易时刻批量 tick 查询驱动"
|
|
],
|
|
"include": [
|
|
"688116.SH",
|
|
"603200.SH",
|
|
"300395.SZ",
|
|
"600732.SH",
|
|
"000063.SZ",
|
|
"002625.SZ",
|
|
"300811.SZ",
|
|
"002851.SZ",
|
|
"000988.SZ",
|
|
"002281.SZ",
|
|
"300205.SZ",
|
|
"002239.SZ",
|
|
"600079.SH",
|
|
"600276.SH",
|
|
"600909.SH",
|
|
"002169.SZ",
|
|
"603156.SH",
|
|
"002654.SZ",
|
|
"000999.SZ",
|
|
"601066.SH",
|
|
"603345.SH",
|
|
"000333.SZ",
|
|
"603726.SH",
|
|
"688012.SH"
|
|
]
|
|
},
|
|
"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"
|
|
}
|
|
}
|
|
]
|
|
}
|
|
}
|
|
}
|