425 lines
23 KiB
JSON
425 lines
23 KiB
JSON
{
|
|
"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"
|
|
}
|
|
}
|
|
]
|
|
}
|
|
}
|
|
}
|