powerquant-cli 0.2.6__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (355) hide show
  1. powerquant_cli-0.2.6.dist-info/METADATA +62 -0
  2. powerquant_cli-0.2.6.dist-info/RECORD +355 -0
  3. powerquant_cli-0.2.6.dist-info/WHEEL +4 -0
  4. powerquant_cli-0.2.6.dist-info/entry_points.txt +2 -0
  5. powerquant_cli-0.2.6.dist-info/licenses/LICENSE +36 -0
  6. powerquant_cli-0.2.6.dist-info/licenses/licenses/LICENSE.vnpy +21 -0
  7. pqdata/__init__.py +6 -0
  8. pqdata/client.py +389 -0
  9. pqdata/download.py +60 -0
  10. pqdata/exceptions.py +14 -0
  11. pqdata/schema/__init__.py +1 -0
  12. pqdata/schema/adjustment_schema.py +67 -0
  13. pqdata/schema/bar_content_schema.py +24 -0
  14. pqdata/schema/bar_schema.py +56 -0
  15. pqdata/schema/corporate_action_schema.py +46 -0
  16. pqdata/schema/history_schema.py +61 -0
  17. pqdata/schema/pit_daily_window.py +16 -0
  18. pqdata/schema/query_schema.py +53 -0
  19. pqdata/schema/quote_schema.py +73 -0
  20. pqdata/schema/reference_schema.py +48 -0
  21. pqdata/schema/reliability_schema.py +152 -0
  22. quant_cli/__init__.py +0 -0
  23. quant_cli/api.py +39 -0
  24. quant_cli/app/__init__.py +0 -0
  25. quant_cli/app/backtest/__init__.py +0 -0
  26. quant_cli/app/backtest/cli/__init__.py +0 -0
  27. quant_cli/app/backtest/cli/local_backtest_cli.py +72 -0
  28. quant_cli/app/backtest/local_backtest_dependency.py +10 -0
  29. quant_cli/app/backtest/local_backtest_schema.py +49 -0
  30. quant_cli/app/backtest/repository/__init__.py +0 -0
  31. quant_cli/app/backtest/repository/backtest_local_repository.py +67 -0
  32. quant_cli/app/backtest/service/__init__.py +0 -0
  33. quant_cli/app/backtest/service/local_backtest_service.py +271 -0
  34. quant_cli/app/data/__init__.py +0 -0
  35. quant_cli/app/data/cli/__init__.py +0 -0
  36. quant_cli/app/data/cli/data_cli.py +78 -0
  37. quant_cli/app/data/data_dependency.py +35 -0
  38. quant_cli/app/data/repository/__init__.py +0 -0
  39. quant_cli/app/data/repository/parquet_repository.py +124 -0
  40. quant_cli/app/data/schema/__init__.py +0 -0
  41. quant_cli/app/data/schema/dataset_audit_schema.py +37 -0
  42. quant_cli/app/data/schema/dataset_request_schema.py +28 -0
  43. quant_cli/app/data/schema/parquet_file_schema.py +17 -0
  44. quant_cli/app/data/service/__init__.py +0 -0
  45. quant_cli/app/data/service/bar_cache_service.py +287 -0
  46. quant_cli/app/data/service/dataset_audit_service.py +137 -0
  47. quant_cli/app/data/service/dataset_load_service.py +115 -0
  48. quant_cli/app/data/service/dataset_prepare_service.py +187 -0
  49. quant_cli/app/factor/__init__.py +0 -0
  50. quant_cli/app/factor/cli/__init__.py +0 -0
  51. quant_cli/app/factor/cli/factor_definition_cli.py +81 -0
  52. quant_cli/app/factor/cli/local_factor_cli.py +102 -0
  53. quant_cli/app/factor/cli/local_selection_cli.py +58 -0
  54. quant_cli/app/factor/interface/__init__.py +0 -0
  55. quant_cli/app/factor/interface/local_selection_store.py +12 -0
  56. quant_cli/app/factor/local_factor_dependency.py +38 -0
  57. quant_cli/app/factor/repository/__init__.py +0 -0
  58. quant_cli/app/factor/repository/factor_local_repository.py +154 -0
  59. quant_cli/app/factor/repository/selection_local_repository.py +67 -0
  60. quant_cli/app/factor/schema/local_selection_schema.py +56 -0
  61. quant_cli/app/factor/service/__init__.py +0 -0
  62. quant_cli/app/factor/service/factor_data_prepare_service.py +181 -0
  63. quant_cli/app/factor/service/local_factor_query_service.py +146 -0
  64. quant_cli/app/factor/service/local_factor_service.py +120 -0
  65. quant_cli/app/factor/service/local_selection_service.py +139 -0
  66. quant_cli/app/job/__init__.py +0 -0
  67. quant_cli/app/job/cli/__init__.py +0 -0
  68. quant_cli/app/job/cli/local_job_cli.py +69 -0
  69. quant_cli/app/job/schema/__init__.py +0 -0
  70. quant_cli/app/job/schema/local_job_schema.py +11 -0
  71. quant_cli/app/job/service/__init__.py +0 -0
  72. quant_cli/app/job/service/local_job_service.py +60 -0
  73. quant_cli/app/quant_cli.py +49 -0
  74. quant_cli/app/research/__init__.py +0 -0
  75. quant_cli/app/research/cli/__init__.py +0 -0
  76. quant_cli/app/research/cli/local_research_cli.py +93 -0
  77. quant_cli/app/research/local_research_dependency.py +10 -0
  78. quant_cli/app/research/repository/__init__.py +0 -0
  79. quant_cli/app/research/repository/research_local_repository.py +67 -0
  80. quant_cli/app/research/schema/__init__.py +0 -0
  81. quant_cli/app/research/schema/local_research_schema.py +26 -0
  82. quant_cli/app/research/service/__init__.py +0 -0
  83. quant_cli/app/research/service/local_research_execution_service.py +105 -0
  84. quant_cli/app/research/service/local_research_service.py +101 -0
  85. quant_cli/app/strategy/__init__.py +0 -0
  86. quant_cli/app/strategy/cli/__init__.py +0 -0
  87. quant_cli/app/strategy/cli/strategy_cli.py +104 -0
  88. quant_cli/common/__init__.py +0 -0
  89. quant_cli/common/constants.py +7 -0
  90. quant_cli/common/database/__init__.py +0 -0
  91. quant_cli/common/database/duckdb_connection.py +30 -0
  92. quant_cli/common/http/__init__.py +0 -0
  93. quant_cli/common/http/definition_client.py +54 -0
  94. quant_cli/common/utils/__init__.py +0 -0
  95. quant_cli/common/utils/cli_utils.py +37 -0
  96. quant_cli/common/utils/platform_utils.py +11 -0
  97. quant_cli/common/utils/runtime_environment.py +12 -0
  98. quant_cli/examples/cached_factor_screen.py +165 -0
  99. quant_cli/examples/factors/ma_close_10.py +10 -0
  100. quant_cli/examples/factors/max_drawdown_20d.py +18 -0
  101. quant_cli/examples/factors/momentum_20d.py +13 -0
  102. quant_cli/examples/factors/multi_intraday_screen.py +16 -0
  103. quant_cli/examples/factors/risk_adjusted_momentum_20d.py +18 -0
  104. quant_cli/examples/factors/volume_ratio_5d.py +14 -0
  105. quant_cli/examples/factors/volume_weighted_close_pressure.py +14 -0
  106. quant_cli/examples/full_market_screen.py +189 -0
  107. quant_cli/examples/local_quant_validation.py +196 -0
  108. quant_cli/examples/published_definition_validation.py +219 -0
  109. quant_cli/examples/research/factor_pit_coverage.py +87 -0
  110. quant_cli/examples/research/ipo_first_day.py +348 -0
  111. quant_cli/examples/selection/README.md +59 -0
  112. quant_cli/examples/selection/backtest.json +18 -0
  113. quant_cli/examples/selection/buy_hold.py +7 -0
  114. quant_cli/examples/selection/compute.json +15 -0
  115. quant_cli/examples/selection/prepare.json +13 -0
  116. quant_cli/examples/selection/select.json +44 -0
  117. quant_cli/examples/strategies/bar_roundtrip.py +12 -0
  118. quant_cli/examples/strategies/buy_and_hold.py +11 -0
  119. quant_cli/examples/strategies/contrarian_timing.py +14 -0
  120. quant_cli/examples/strategies/factor_gate_vwap.py +22 -0
  121. quant_cli/examples/strategies/ipo_next_day_vwap.py +31 -0
  122. quant_cli/examples/strategies/momentum_timing.py +14 -0
  123. quant_cli/examples/strategies/monthly_equal_weight.py +19 -0
  124. quant_cli/examples/strategies/session_roundtrip.py +16 -0
  125. quant_cli/examples/strategies/trend_drawdown_guard.py +22 -0
  126. quant_cli/examples/strategies/weekly_risk_adjusted_rotation.py +61 -0
  127. quant_cli/examples/unified_snapshot_validation.py +260 -0
  128. quant_core/__init__.py +0 -0
  129. quant_core/app/SPEC.md +18 -0
  130. quant_core/app/__init__.py +0 -0
  131. quant_core/app/backtest/SPEC.md +65 -0
  132. quant_core/app/backtest/__init__.py +1 -0
  133. quant_core/app/backtest/backtest_input_schema.py +20 -0
  134. quant_core/app/backtest/backtest_run.py +393 -0
  135. quant_core/app/backtest/data_guard.py +77 -0
  136. quant_core/app/backtest/historical_clock.py +26 -0
  137. quant_core/app/backtest/legacy_result_schema.py +34 -0
  138. quant_core/app/backtest/metrics.py +194 -0
  139. quant_core/app/backtest/performance_report.py +61 -0
  140. quant_core/app/backtest/report_schema.py +64 -0
  141. quant_core/app/backtest/schema.py +477 -0
  142. quant_core/app/backtest/service/__init__.py +0 -0
  143. quant_core/app/backtest/service/backtest_execution_service.py +114 -0
  144. quant_core/app/data/__init__.py +0 -0
  145. quant_core/app/data/constants.py +284 -0
  146. quant_core/app/data/domain/__init__.py +0 -0
  147. quant_core/app/data/domain/trading_quantity_value.py +57 -0
  148. quant_core/app/data/exceptions.py +95 -0
  149. quant_core/app/data/interface/__init__.py +0 -0
  150. quant_core/app/data/interface/adjustment_factor_query.py +21 -0
  151. quant_core/app/data/interface/market_data_query.py +71 -0
  152. quant_core/app/data/interface/market_data_verification.py +20 -0
  153. quant_core/app/data/interface/market_event_source.py +11 -0
  154. quant_core/app/data/interface/market_revision_query.py +8 -0
  155. quant_core/app/data/interface/market_runtime_repository.py +44 -0
  156. quant_core/app/data/interface/market_time_slice_source.py +11 -0
  157. quant_core/app/data/repository/__init__.py +0 -0
  158. quant_core/app/data/schema/__init__.py +1 -0
  159. quant_core/app/data/schema/adjustment_schema.py +67 -0
  160. quant_core/app/data/schema/corporate_action_schema.py +46 -0
  161. quant_core/app/data/schema/event_schema.py +506 -0
  162. quant_core/app/data/schema/exchange_operating_state.py +37 -0
  163. quant_core/app/data/schema/exchange_state_schema.py +106 -0
  164. quant_core/app/data/schema/history_schema.py +48 -0
  165. quant_core/app/data/schema/instrument_identity.py +69 -0
  166. quant_core/app/data/schema/market_schema.py +128 -0
  167. quant_core/app/data/schema/pit_daily_window.py +16 -0
  168. quant_core/app/data/schema/quote_schema.py +73 -0
  169. quant_core/app/data/schema/reliability_schema.py +152 -0
  170. quant_core/app/data/schema/snapshot_schema.py +82 -0
  171. quant_core/app/data/schema/trading_state_schema.py +211 -0
  172. quant_core/app/data/service/__init__.py +0 -0
  173. quant_core/app/data/service/calendar_coverage_service.py +63 -0
  174. quant_core/app/data/service/prepared_data_verification_service.py +40 -0
  175. quant_core/app/data/service/prepared_market_service.py +189 -0
  176. quant_core/app/data/service/price_adjustment_service.py +235 -0
  177. quant_core/app/factor/LICENSE.vnpy +21 -0
  178. quant_core/app/factor/__init__.py +13 -0
  179. quant_core/app/factor/builtin/__init__.py +0 -0
  180. quant_core/app/factor/builtin/alpha101_recipe.py +1095 -0
  181. quant_core/app/factor/builtin/alpha158_recipe.py +1284 -0
  182. quant_core/app/factor/builtin/factor_recipe_catalog.py +100 -0
  183. quant_core/app/factor/computation/__init__.py +0 -0
  184. quant_core/app/factor/computation/factor_batch_evaluator.py +141 -0
  185. quant_core/app/factor/computation/factor_expression.py +106 -0
  186. quant_core/app/factor/computation/factor_source_loader.py +24 -0
  187. quant_core/app/factor/computation/operators/__init__.py +0 -0
  188. quant_core/app/factor/computation/operators/arithmetic_operator.py +182 -0
  189. quant_core/app/factor/computation/operators/cross_section_operator.py +66 -0
  190. quant_core/app/factor/computation/operators/time_series_operator.py +342 -0
  191. quant_core/app/factor/computation/panel_evaluator.py +59 -0
  192. quant_core/app/factor/computation/panel_expression.py +193 -0
  193. quant_core/app/factor/computation/python_factor_executor.py +87 -0
  194. quant_core/app/factor/computation/universe_filter.py +25 -0
  195. quant_core/app/factor/constants.py +114 -0
  196. quant_core/app/factor/exceptions.py +35 -0
  197. quant_core/app/factor/factor_dependency.py +65 -0
  198. quant_core/app/factor/interface/__init__.py +0 -0
  199. quant_core/app/factor/interface/factor_compute.py +12 -0
  200. quant_core/app/factor/interface/factor_execution.py +15 -0
  201. quant_core/app/factor/interface/factor_local_data.py +42 -0
  202. quant_core/app/factor/interface/factor_panel_compute.py +18 -0
  203. quant_core/app/factor/interface/factor_panel_input.py +12 -0
  204. quant_core/app/factor/interface/factor_query_store.py +39 -0
  205. quant_core/app/factor/interface/public/__init__.py +0 -0
  206. quant_core/app/factor/interface/public/factor_diagnostics.py +18 -0
  207. quant_core/app/factor/interface/public/factor_exposure_query.py +12 -0
  208. quant_core/app/factor/interface/public/factor_local.py +15 -0
  209. quant_core/app/factor/interface/public/factor_query.py +57 -0
  210. quant_core/app/factor/interface/public/factor_selection.py +20 -0
  211. quant_core/app/factor/model/__init__.py +0 -0
  212. quant_core/app/factor/repository/__init__.py +0 -0
  213. quant_core/app/factor/schema/__init__.py +1 -0
  214. quant_core/app/factor/schema/diagnostic_types.py +42 -0
  215. quant_core/app/factor/schema/factor_artifact_schema.py +36 -0
  216. quant_core/app/factor/schema/factor_computation_schema.py +102 -0
  217. quant_core/app/factor/schema/factor_compute_request.py +24 -0
  218. quant_core/app/factor/schema/factor_contract.py +257 -0
  219. quant_core/app/factor/schema/factor_input_schema.py +32 -0
  220. quant_core/app/factor/schema/factor_panel.py +65 -0
  221. quant_core/app/factor/schema/factor_publication_schema.py +41 -0
  222. quant_core/app/factor/schema/factor_query_result_schema.py +12 -0
  223. quant_core/app/factor/schema/factor_result_schema.py +6 -0
  224. quant_core/app/factor/schema/local_factor_schema.py +42 -0
  225. quant_core/app/factor/schema/panel_policy.py +13 -0
  226. quant_core/app/factor/schema/selection_report.py +116 -0
  227. quant_core/app/factor/schema/selection_types.py +135 -0
  228. quant_core/app/factor/service/__init__.py +1 -0
  229. quant_core/app/factor/service/factor_compute_service.py +140 -0
  230. quant_core/app/factor/service/factor_diagnostic_runner.py +134 -0
  231. quant_core/app/factor/service/factor_diagnostics_service.py +140 -0
  232. quant_core/app/factor/service/factor_exposure_service.py +24 -0
  233. quant_core/app/factor/service/factor_input_service.py +258 -0
  234. quant_core/app/factor/service/factor_local_execution_service.py +51 -0
  235. quant_core/app/factor/service/factor_panel_service.py +86 -0
  236. quant_core/app/factor/service/factor_runtime_service.py +306 -0
  237. quant_core/app/factor/service/factor_selection_runner.py +88 -0
  238. quant_core/app/factor/service/published_factor_execution_service.py +160 -0
  239. quant_core/app/factor/service/selection_service.py +234 -0
  240. quant_core/app/factor/visibility.py +22 -0
  241. quant_core/app/opportunity/SPEC.md +45 -0
  242. quant_core/app/opportunity/__init__.py +1 -0
  243. quant_core/app/order_execution/SPEC.md +64 -0
  244. quant_core/app/order_execution/__init__.py +1 -0
  245. quant_core/app/order_execution/bar_matcher.py +55 -0
  246. quant_core/app/order_execution/constants.py +142 -0
  247. quant_core/app/order_execution/domain/__init__.py +45 -0
  248. quant_core/app/order_execution/domain/execution_batch.py +108 -0
  249. quant_core/app/order_execution/domain/order_entity.py +197 -0
  250. quant_core/app/order_execution/domain/order_event.py +87 -0
  251. quant_core/app/order_execution/domain/order_policy.py +29 -0
  252. quant_core/app/order_execution/domain/order_value.py +142 -0
  253. quant_core/app/order_execution/fee_model.py +60 -0
  254. quant_core/app/order_execution/interface/__init__.py +0 -0
  255. quant_core/app/order_execution/interface/order_account.py +10 -0
  256. quant_core/app/order_execution/interface/order_trading_rules.py +10 -0
  257. quant_core/app/order_execution/interface/public/__init__.py +0 -0
  258. quant_core/app/order_execution/interface/public/execution_account.py +53 -0
  259. quant_core/app/order_execution/interface/public/order_events.py +19 -0
  260. quant_core/app/order_execution/interface/public/order_execution.py +107 -0
  261. quant_core/app/order_execution/interface/public/order_runtime.py +30 -0
  262. quant_core/app/order_execution/interface/public/order_submission.py +17 -0
  263. quant_core/app/order_execution/order_event_bus.py +28 -0
  264. quant_core/app/order_execution/order_execution_dependency.py +48 -0
  265. quant_core/app/order_execution/order_submission_service.py +301 -0
  266. quant_core/app/order_execution/schema/__init__.py +0 -0
  267. quant_core/app/order_execution/schema/order_request_schema.py +88 -0
  268. quant_core/app/order_execution/simulation_broker.py +883 -0
  269. quant_core/app/order_execution/slippage_model.py +40 -0
  270. quant_core/app/order_execution/tradability_policy.py +174 -0
  271. quant_core/app/order_execution/validators.py +40 -0
  272. quant_core/app/portfolio/SPEC.md +69 -0
  273. quant_core/app/portfolio/__init__.py +0 -0
  274. quant_core/app/portfolio/domain/__init__.py +32 -0
  275. quant_core/app/portfolio/domain/entitlement_entity.py +45 -0
  276. quant_core/app/portfolio/domain/portfolio_entity.py +511 -0
  277. quant_core/app/portfolio/domain/portfolio_event.py +59 -0
  278. quant_core/app/portfolio/domain/portfolio_value.py +21 -0
  279. quant_core/app/portfolio/domain/position_entity.py +165 -0
  280. quant_core/app/portfolio/domain/reservation_entity.py +69 -0
  281. quant_core/app/portfolio/interface/__init__.py +0 -0
  282. quant_core/app/portfolio/interface/public/__init__.py +0 -0
  283. quant_core/app/portfolio/interface/public/portfolio.py +77 -0
  284. quant_core/app/portfolio/interface/public/simulation_account.py +16 -0
  285. quant_core/app/portfolio/ledger_schema.py +130 -0
  286. quant_core/app/portfolio/order_account_listener.py +36 -0
  287. quant_core/app/portfolio/portfolio_dependency.py +21 -0
  288. quant_core/app/portfolio/portfolio_schema.py +204 -0
  289. quant_core/app/portfolio/simulated_portfolio.py +427 -0
  290. quant_core/app/research/SPEC.md +57 -0
  291. quant_core/app/research/__init__.py +0 -0
  292. quant_core/app/research/adapter/__init__.py +0 -0
  293. quant_core/app/research/adapter/market_label_query.py +84 -0
  294. quant_core/app/research/interface/__init__.py +0 -0
  295. quant_core/app/research/interface/research_dataset.py +47 -0
  296. quant_core/app/research/interface/research_evaluation.py +19 -0
  297. quant_core/app/research/schema/__init__.py +0 -0
  298. quant_core/app/research/schema/comparison_schema.py +12 -0
  299. quant_core/app/research/schema/dataset_schema.py +112 -0
  300. quant_core/app/research/schema/research_schema.py +120 -0
  301. quant_core/app/research/service/__init__.py +0 -0
  302. quant_core/app/research/service/research_dataset_service.py +80 -0
  303. quant_core/app/research/service/research_evaluation_service.py +56 -0
  304. quant_core/app/research/service/research_service.py +171 -0
  305. quant_core/app/strategy/SPEC.md +215 -0
  306. quant_core/app/strategy/__init__.py +1 -0
  307. quant_core/app/strategy/constants.py +87 -0
  308. quant_core/app/strategy/exceptions.py +32 -0
  309. quant_core/app/strategy/interface/__init__.py +0 -0
  310. quant_core/app/strategy/interface/public/__init__.py +0 -0
  311. quant_core/app/strategy/interface/public/portfolio_construction.py +19 -0
  312. quant_core/app/strategy/interface/public/strategy.py +30 -0
  313. quant_core/app/strategy/interface/public/strategy_market_query.py +53 -0
  314. quant_core/app/strategy/interface/public/strategy_portfolio_reader.py +33 -0
  315. quant_core/app/strategy/interface/strategy_factor_reader.py +19 -0
  316. quant_core/app/strategy/interface/strategy_order_reader.py +14 -0
  317. quant_core/app/strategy/schema/__init__.py +0 -0
  318. quant_core/app/strategy/schema/portfolio_schema.py +28 -0
  319. quant_core/app/strategy/schema/portfolio_target.py +70 -0
  320. quant_core/app/strategy/schema/python_strategy_schema.py +94 -0
  321. quant_core/app/strategy/schema/screener_schema.py +51 -0
  322. quant_core/app/strategy/schema/signal_schema.py +33 -0
  323. quant_core/app/strategy/schema/strategy_publication_schema.py +32 -0
  324. quant_core/app/strategy/schema/strategy_schema.py +96 -0
  325. quant_core/app/strategy/service/__init__.py +0 -0
  326. quant_core/app/strategy/service/factor_top_n_strategy.py +103 -0
  327. quant_core/app/strategy/service/portfolio_construction_service.py +142 -0
  328. quant_core/app/strategy/service/python_strategy_service.py +65 -0
  329. quant_core/app/strategy/service/screener_service.py +77 -0
  330. quant_core/app/strategy/service/store_factor_reader.py +120 -0
  331. quant_core/app/strategy/service/strategy_market_view.py +120 -0
  332. quant_core/app/strategy/service/strategy_runtime_service.py +319 -0
  333. quant_core/app/strategy/service/strategy_scheduler.py +50 -0
  334. quant_core/app/strategy/strategies/__init__.py +7 -0
  335. quant_core/app/strategy/strategies/momentum_volume_breakout.py +157 -0
  336. quant_core/app/strategy/strategy_context.py +316 -0
  337. quant_core/app/strategy/strategy_dependency.py +101 -0
  338. quant_core/app/trading_runtime/SPEC.md +70 -0
  339. quant_core/app/trading_runtime/__init__.py +1 -0
  340. quant_core/app/trading_runtime/domain/__init__.py +0 -0
  341. quant_core/app/trading_runtime/replay/__init__.py +0 -0
  342. quant_core/app/trading_runtime/replay/daily_state_expand.py +49 -0
  343. quant_core/app/trading_runtime/replay/exchange_state_resolver.py +90 -0
  344. quant_core/app/trading_runtime/replay/market_runtime_service.py +573 -0
  345. quant_core/app/trading_runtime/replay/market_state_resolver.py +150 -0
  346. quant_core/app/trading_runtime/runtime_ports.py +64 -0
  347. quant_core/app/trading_runtime/runtime_schema.py +129 -0
  348. quant_core/app/trading_runtime/runtime_session.py +361 -0
  349. quant_core/app/trading_runtime/strategy_portfolio_adapter.py +58 -0
  350. quant_core/app/trading_runtime/trading_rule_book.py +37 -0
  351. quant_core/app/trading_runtime/trading_rule_query.py +12 -0
  352. quant_core/common/__init__.py +0 -0
  353. quant_core/common/exceptions/__init__.py +0 -0
  354. quant_core/common/exceptions/base.py +89 -0
  355. quant_core/common/local_run.py +45 -0
@@ -0,0 +1,1284 @@
1
+ """静态 Python 配方,训练标签不属于特征集合。"""
2
+ # Derived from vn.py fa5206fe63836f3f8cd1ebd7168fbd19a5e2ff09.
3
+ # Copyright (c) 2015-present, Xiaoyou Chen. MIT; see app/factor/LICENSE.vnpy.
4
+
5
+ from collections.abc import Callable
6
+
7
+ from quant_core.app.factor.computation.operators.time_series_operator import (
8
+ ts_abs,
9
+ ts_argmax,
10
+ ts_argmin,
11
+ ts_corr,
12
+ ts_delay,
13
+ ts_greater,
14
+ ts_less,
15
+ ts_log,
16
+ ts_max,
17
+ ts_mean,
18
+ ts_min,
19
+ ts_quantile,
20
+ ts_rank,
21
+ ts_resi,
22
+ ts_rsquare,
23
+ ts_slope,
24
+ ts_std,
25
+ ts_sum,
26
+ )
27
+ from quant_core.app.factor.computation.panel_expression import PanelExpression
28
+
29
+
30
+ def alpha158_kmid(fields: dict[str, PanelExpression]) -> PanelExpression:
31
+ """固定参考版本的 alpha158/kmid 特征。"""
32
+ close = fields["close"]
33
+ open = fields["open"]
34
+ return (close - open) / open
35
+
36
+
37
+ def alpha158_klen(fields: dict[str, PanelExpression]) -> PanelExpression:
38
+ """固定参考版本的 alpha158/klen 特征。"""
39
+ high = fields["high"]
40
+ low = fields["low"]
41
+ open = fields["open"]
42
+ return (high - low) / open
43
+
44
+
45
+ def alpha158_kmid_2(fields: dict[str, PanelExpression]) -> PanelExpression:
46
+ """固定参考版本的 alpha158/kmid_2 特征。"""
47
+ close = fields["close"]
48
+ high = fields["high"]
49
+ low = fields["low"]
50
+ open = fields["open"]
51
+ return (close - open) / (high - low + 1e-12)
52
+
53
+
54
+ def alpha158_kup(fields: dict[str, PanelExpression]) -> PanelExpression:
55
+ """固定参考版本的 alpha158/kup 特征。"""
56
+ close = fields["close"]
57
+ high = fields["high"]
58
+ open = fields["open"]
59
+ return (high - ts_greater(open, close)) / open
60
+
61
+
62
+ def alpha158_kup_2(fields: dict[str, PanelExpression]) -> PanelExpression:
63
+ """固定参考版本的 alpha158/kup_2 特征。"""
64
+ close = fields["close"]
65
+ high = fields["high"]
66
+ low = fields["low"]
67
+ open = fields["open"]
68
+ return (high - ts_greater(open, close)) / (high - low + 1e-12)
69
+
70
+
71
+ def alpha158_klow(fields: dict[str, PanelExpression]) -> PanelExpression:
72
+ """固定参考版本的 alpha158/klow 特征。"""
73
+ close = fields["close"]
74
+ low = fields["low"]
75
+ open = fields["open"]
76
+ return (ts_less(open, close) - low) / open
77
+
78
+
79
+ def alpha158_klow_2(fields: dict[str, PanelExpression]) -> PanelExpression:
80
+ """固定参考版本的 alpha158/klow_2 特征。"""
81
+ close = fields["close"]
82
+ high = fields["high"]
83
+ low = fields["low"]
84
+ open = fields["open"]
85
+ return (ts_less(open, close) - low) / (high - low + 1e-12)
86
+
87
+
88
+ def alpha158_ksft(fields: dict[str, PanelExpression]) -> PanelExpression:
89
+ """固定参考版本的 alpha158/ksft 特征。"""
90
+ close = fields["close"]
91
+ high = fields["high"]
92
+ low = fields["low"]
93
+ open = fields["open"]
94
+ return (close * 2 - high - low) / open
95
+
96
+
97
+ def alpha158_ksft_2(fields: dict[str, PanelExpression]) -> PanelExpression:
98
+ """固定参考版本的 alpha158/ksft_2 特征。"""
99
+ close = fields["close"]
100
+ high = fields["high"]
101
+ low = fields["low"]
102
+ return (close * 2 - high - low) / (high - low + 1e-12)
103
+
104
+
105
+ def alpha158_open_0(fields: dict[str, PanelExpression]) -> PanelExpression:
106
+ """固定参考版本的 alpha158/open_0 特征。"""
107
+ close = fields["close"]
108
+ open = fields["open"]
109
+ return open / close
110
+
111
+
112
+ def alpha158_high_0(fields: dict[str, PanelExpression]) -> PanelExpression:
113
+ """固定参考版本的 alpha158/high_0 特征。"""
114
+ close = fields["close"]
115
+ high = fields["high"]
116
+ return high / close
117
+
118
+
119
+ def alpha158_low_0(fields: dict[str, PanelExpression]) -> PanelExpression:
120
+ """固定参考版本的 alpha158/low_0 特征。"""
121
+ close = fields["close"]
122
+ low = fields["low"]
123
+ return low / close
124
+
125
+
126
+ def alpha158_vwap_0(fields: dict[str, PanelExpression]) -> PanelExpression:
127
+ """固定参考版本的 alpha158/vwap_0 特征。"""
128
+ close = fields["close"]
129
+ vwap = fields["vwap"]
130
+ return vwap / close
131
+
132
+
133
+ def alpha158_roc_5(fields: dict[str, PanelExpression]) -> PanelExpression:
134
+ """固定参考版本的 alpha158/roc_5 特征。"""
135
+ close = fields["close"]
136
+ return ts_delay(close, 5) / close
137
+
138
+
139
+ def alpha158_roc_10(fields: dict[str, PanelExpression]) -> PanelExpression:
140
+ """固定参考版本的 alpha158/roc_10 特征。"""
141
+ close = fields["close"]
142
+ return ts_delay(close, 10) / close
143
+
144
+
145
+ def alpha158_roc_20(fields: dict[str, PanelExpression]) -> PanelExpression:
146
+ """固定参考版本的 alpha158/roc_20 特征。"""
147
+ close = fields["close"]
148
+ return ts_delay(close, 20) / close
149
+
150
+
151
+ def alpha158_roc_30(fields: dict[str, PanelExpression]) -> PanelExpression:
152
+ """固定参考版本的 alpha158/roc_30 特征。"""
153
+ close = fields["close"]
154
+ return ts_delay(close, 30) / close
155
+
156
+
157
+ def alpha158_roc_60(fields: dict[str, PanelExpression]) -> PanelExpression:
158
+ """固定参考版本的 alpha158/roc_60 特征。"""
159
+ close = fields["close"]
160
+ return ts_delay(close, 60) / close
161
+
162
+
163
+ def alpha158_ma_5(fields: dict[str, PanelExpression]) -> PanelExpression:
164
+ """固定参考版本的 alpha158/ma_5 特征。"""
165
+ close = fields["close"]
166
+ return ts_mean(close, 5) / close
167
+
168
+
169
+ def alpha158_ma_10(fields: dict[str, PanelExpression]) -> PanelExpression:
170
+ """固定参考版本的 alpha158/ma_10 特征。"""
171
+ close = fields["close"]
172
+ return ts_mean(close, 10) / close
173
+
174
+
175
+ def alpha158_ma_20(fields: dict[str, PanelExpression]) -> PanelExpression:
176
+ """固定参考版本的 alpha158/ma_20 特征。"""
177
+ close = fields["close"]
178
+ return ts_mean(close, 20) / close
179
+
180
+
181
+ def alpha158_ma_30(fields: dict[str, PanelExpression]) -> PanelExpression:
182
+ """固定参考版本的 alpha158/ma_30 特征。"""
183
+ close = fields["close"]
184
+ return ts_mean(close, 30) / close
185
+
186
+
187
+ def alpha158_ma_60(fields: dict[str, PanelExpression]) -> PanelExpression:
188
+ """固定参考版本的 alpha158/ma_60 特征。"""
189
+ close = fields["close"]
190
+ return ts_mean(close, 60) / close
191
+
192
+
193
+ def alpha158_std_5(fields: dict[str, PanelExpression]) -> PanelExpression:
194
+ """固定参考版本的 alpha158/std_5 特征。"""
195
+ close = fields["close"]
196
+ return ts_std(close, 5) / close
197
+
198
+
199
+ def alpha158_std_10(fields: dict[str, PanelExpression]) -> PanelExpression:
200
+ """固定参考版本的 alpha158/std_10 特征。"""
201
+ close = fields["close"]
202
+ return ts_std(close, 10) / close
203
+
204
+
205
+ def alpha158_std_20(fields: dict[str, PanelExpression]) -> PanelExpression:
206
+ """固定参考版本的 alpha158/std_20 特征。"""
207
+ close = fields["close"]
208
+ return ts_std(close, 20) / close
209
+
210
+
211
+ def alpha158_std_30(fields: dict[str, PanelExpression]) -> PanelExpression:
212
+ """固定参考版本的 alpha158/std_30 特征。"""
213
+ close = fields["close"]
214
+ return ts_std(close, 30) / close
215
+
216
+
217
+ def alpha158_std_60(fields: dict[str, PanelExpression]) -> PanelExpression:
218
+ """固定参考版本的 alpha158/std_60 特征。"""
219
+ close = fields["close"]
220
+ return ts_std(close, 60) / close
221
+
222
+
223
+ def alpha158_beta_5(fields: dict[str, PanelExpression]) -> PanelExpression:
224
+ """固定参考版本的 alpha158/beta_5 特征。"""
225
+ close = fields["close"]
226
+ return ts_slope(close, 5) / close
227
+
228
+
229
+ def alpha158_beta_10(fields: dict[str, PanelExpression]) -> PanelExpression:
230
+ """固定参考版本的 alpha158/beta_10 特征。"""
231
+ close = fields["close"]
232
+ return ts_slope(close, 10) / close
233
+
234
+
235
+ def alpha158_beta_20(fields: dict[str, PanelExpression]) -> PanelExpression:
236
+ """固定参考版本的 alpha158/beta_20 特征。"""
237
+ close = fields["close"]
238
+ return ts_slope(close, 20) / close
239
+
240
+
241
+ def alpha158_beta_30(fields: dict[str, PanelExpression]) -> PanelExpression:
242
+ """固定参考版本的 alpha158/beta_30 特征。"""
243
+ close = fields["close"]
244
+ return ts_slope(close, 30) / close
245
+
246
+
247
+ def alpha158_beta_60(fields: dict[str, PanelExpression]) -> PanelExpression:
248
+ """固定参考版本的 alpha158/beta_60 特征。"""
249
+ close = fields["close"]
250
+ return ts_slope(close, 60) / close
251
+
252
+
253
+ def alpha158_rsqr_5(fields: dict[str, PanelExpression]) -> PanelExpression:
254
+ """固定参考版本的 alpha158/rsqr_5 特征。"""
255
+ close = fields["close"]
256
+ return ts_rsquare(close, 5)
257
+
258
+
259
+ def alpha158_rsqr_10(fields: dict[str, PanelExpression]) -> PanelExpression:
260
+ """固定参考版本的 alpha158/rsqr_10 特征。"""
261
+ close = fields["close"]
262
+ return ts_rsquare(close, 10)
263
+
264
+
265
+ def alpha158_rsqr_20(fields: dict[str, PanelExpression]) -> PanelExpression:
266
+ """固定参考版本的 alpha158/rsqr_20 特征。"""
267
+ close = fields["close"]
268
+ return ts_rsquare(close, 20)
269
+
270
+
271
+ def alpha158_rsqr_30(fields: dict[str, PanelExpression]) -> PanelExpression:
272
+ """固定参考版本的 alpha158/rsqr_30 特征。"""
273
+ close = fields["close"]
274
+ return ts_rsquare(close, 30)
275
+
276
+
277
+ def alpha158_rsqr_60(fields: dict[str, PanelExpression]) -> PanelExpression:
278
+ """固定参考版本的 alpha158/rsqr_60 特征。"""
279
+ close = fields["close"]
280
+ return ts_rsquare(close, 60)
281
+
282
+
283
+ def alpha158_resi_5(fields: dict[str, PanelExpression]) -> PanelExpression:
284
+ """固定参考版本的 alpha158/resi_5 特征。"""
285
+ close = fields["close"]
286
+ return ts_resi(close, 5) / close
287
+
288
+
289
+ def alpha158_resi_10(fields: dict[str, PanelExpression]) -> PanelExpression:
290
+ """固定参考版本的 alpha158/resi_10 特征。"""
291
+ close = fields["close"]
292
+ return ts_resi(close, 10) / close
293
+
294
+
295
+ def alpha158_resi_20(fields: dict[str, PanelExpression]) -> PanelExpression:
296
+ """固定参考版本的 alpha158/resi_20 特征。"""
297
+ close = fields["close"]
298
+ return ts_resi(close, 20) / close
299
+
300
+
301
+ def alpha158_resi_30(fields: dict[str, PanelExpression]) -> PanelExpression:
302
+ """固定参考版本的 alpha158/resi_30 特征。"""
303
+ close = fields["close"]
304
+ return ts_resi(close, 30) / close
305
+
306
+
307
+ def alpha158_resi_60(fields: dict[str, PanelExpression]) -> PanelExpression:
308
+ """固定参考版本的 alpha158/resi_60 特征。"""
309
+ close = fields["close"]
310
+ return ts_resi(close, 60) / close
311
+
312
+
313
+ def alpha158_max_5(fields: dict[str, PanelExpression]) -> PanelExpression:
314
+ """固定参考版本的 alpha158/max_5 特征。"""
315
+ close = fields["close"]
316
+ high = fields["high"]
317
+ return ts_max(high, 5) / close
318
+
319
+
320
+ def alpha158_max_10(fields: dict[str, PanelExpression]) -> PanelExpression:
321
+ """固定参考版本的 alpha158/max_10 特征。"""
322
+ close = fields["close"]
323
+ high = fields["high"]
324
+ return ts_max(high, 10) / close
325
+
326
+
327
+ def alpha158_max_20(fields: dict[str, PanelExpression]) -> PanelExpression:
328
+ """固定参考版本的 alpha158/max_20 特征。"""
329
+ close = fields["close"]
330
+ high = fields["high"]
331
+ return ts_max(high, 20) / close
332
+
333
+
334
+ def alpha158_max_30(fields: dict[str, PanelExpression]) -> PanelExpression:
335
+ """固定参考版本的 alpha158/max_30 特征。"""
336
+ close = fields["close"]
337
+ high = fields["high"]
338
+ return ts_max(high, 30) / close
339
+
340
+
341
+ def alpha158_max_60(fields: dict[str, PanelExpression]) -> PanelExpression:
342
+ """固定参考版本的 alpha158/max_60 特征。"""
343
+ close = fields["close"]
344
+ high = fields["high"]
345
+ return ts_max(high, 60) / close
346
+
347
+
348
+ def alpha158_min_5(fields: dict[str, PanelExpression]) -> PanelExpression:
349
+ """固定参考版本的 alpha158/min_5 特征。"""
350
+ close = fields["close"]
351
+ low = fields["low"]
352
+ return ts_min(low, 5) / close
353
+
354
+
355
+ def alpha158_min_10(fields: dict[str, PanelExpression]) -> PanelExpression:
356
+ """固定参考版本的 alpha158/min_10 特征。"""
357
+ close = fields["close"]
358
+ low = fields["low"]
359
+ return ts_min(low, 10) / close
360
+
361
+
362
+ def alpha158_min_20(fields: dict[str, PanelExpression]) -> PanelExpression:
363
+ """固定参考版本的 alpha158/min_20 特征。"""
364
+ close = fields["close"]
365
+ low = fields["low"]
366
+ return ts_min(low, 20) / close
367
+
368
+
369
+ def alpha158_min_30(fields: dict[str, PanelExpression]) -> PanelExpression:
370
+ """固定参考版本的 alpha158/min_30 特征。"""
371
+ close = fields["close"]
372
+ low = fields["low"]
373
+ return ts_min(low, 30) / close
374
+
375
+
376
+ def alpha158_min_60(fields: dict[str, PanelExpression]) -> PanelExpression:
377
+ """固定参考版本的 alpha158/min_60 特征。"""
378
+ close = fields["close"]
379
+ low = fields["low"]
380
+ return ts_min(low, 60) / close
381
+
382
+
383
+ def alpha158_qtlu_5(fields: dict[str, PanelExpression]) -> PanelExpression:
384
+ """固定参考版本的 alpha158/qtlu_5 特征。"""
385
+ close = fields["close"]
386
+ return ts_quantile(close, 5, 0.8) / close
387
+
388
+
389
+ def alpha158_qtlu_10(fields: dict[str, PanelExpression]) -> PanelExpression:
390
+ """固定参考版本的 alpha158/qtlu_10 特征。"""
391
+ close = fields["close"]
392
+ return ts_quantile(close, 10, 0.8) / close
393
+
394
+
395
+ def alpha158_qtlu_20(fields: dict[str, PanelExpression]) -> PanelExpression:
396
+ """固定参考版本的 alpha158/qtlu_20 特征。"""
397
+ close = fields["close"]
398
+ return ts_quantile(close, 20, 0.8) / close
399
+
400
+
401
+ def alpha158_qtlu_30(fields: dict[str, PanelExpression]) -> PanelExpression:
402
+ """固定参考版本的 alpha158/qtlu_30 特征。"""
403
+ close = fields["close"]
404
+ return ts_quantile(close, 30, 0.8) / close
405
+
406
+
407
+ def alpha158_qtlu_60(fields: dict[str, PanelExpression]) -> PanelExpression:
408
+ """固定参考版本的 alpha158/qtlu_60 特征。"""
409
+ close = fields["close"]
410
+ return ts_quantile(close, 60, 0.8) / close
411
+
412
+
413
+ def alpha158_qtld_5(fields: dict[str, PanelExpression]) -> PanelExpression:
414
+ """固定参考版本的 alpha158/qtld_5 特征。"""
415
+ close = fields["close"]
416
+ return ts_quantile(close, 5, 0.2) / close
417
+
418
+
419
+ def alpha158_qtld_10(fields: dict[str, PanelExpression]) -> PanelExpression:
420
+ """固定参考版本的 alpha158/qtld_10 特征。"""
421
+ close = fields["close"]
422
+ return ts_quantile(close, 10, 0.2) / close
423
+
424
+
425
+ def alpha158_qtld_20(fields: dict[str, PanelExpression]) -> PanelExpression:
426
+ """固定参考版本的 alpha158/qtld_20 特征。"""
427
+ close = fields["close"]
428
+ return ts_quantile(close, 20, 0.2) / close
429
+
430
+
431
+ def alpha158_qtld_30(fields: dict[str, PanelExpression]) -> PanelExpression:
432
+ """固定参考版本的 alpha158/qtld_30 特征。"""
433
+ close = fields["close"]
434
+ return ts_quantile(close, 30, 0.2) / close
435
+
436
+
437
+ def alpha158_qtld_60(fields: dict[str, PanelExpression]) -> PanelExpression:
438
+ """固定参考版本的 alpha158/qtld_60 特征。"""
439
+ close = fields["close"]
440
+ return ts_quantile(close, 60, 0.2) / close
441
+
442
+
443
+ def alpha158_rank_5(fields: dict[str, PanelExpression]) -> PanelExpression:
444
+ """固定参考版本的 alpha158/rank_5 特征。"""
445
+ close = fields["close"]
446
+ return ts_rank(close, 5)
447
+
448
+
449
+ def alpha158_rank_10(fields: dict[str, PanelExpression]) -> PanelExpression:
450
+ """固定参考版本的 alpha158/rank_10 特征。"""
451
+ close = fields["close"]
452
+ return ts_rank(close, 10)
453
+
454
+
455
+ def alpha158_rank_20(fields: dict[str, PanelExpression]) -> PanelExpression:
456
+ """固定参考版本的 alpha158/rank_20 特征。"""
457
+ close = fields["close"]
458
+ return ts_rank(close, 20)
459
+
460
+
461
+ def alpha158_rank_30(fields: dict[str, PanelExpression]) -> PanelExpression:
462
+ """固定参考版本的 alpha158/rank_30 特征。"""
463
+ close = fields["close"]
464
+ return ts_rank(close, 30)
465
+
466
+
467
+ def alpha158_rank_60(fields: dict[str, PanelExpression]) -> PanelExpression:
468
+ """固定参考版本的 alpha158/rank_60 特征。"""
469
+ close = fields["close"]
470
+ return ts_rank(close, 60)
471
+
472
+
473
+ def alpha158_rsv_5(fields: dict[str, PanelExpression]) -> PanelExpression:
474
+ """固定参考版本的 alpha158/rsv_5 特征。"""
475
+ close = fields["close"]
476
+ high = fields["high"]
477
+ low = fields["low"]
478
+ return (close - ts_min(low, 5)) / (ts_max(high, 5) - ts_min(low, 5) + 1e-12)
479
+
480
+
481
+ def alpha158_rsv_10(fields: dict[str, PanelExpression]) -> PanelExpression:
482
+ """固定参考版本的 alpha158/rsv_10 特征。"""
483
+ close = fields["close"]
484
+ high = fields["high"]
485
+ low = fields["low"]
486
+ return (close - ts_min(low, 10)) / (ts_max(high, 10) - ts_min(low, 10) + 1e-12)
487
+
488
+
489
+ def alpha158_rsv_20(fields: dict[str, PanelExpression]) -> PanelExpression:
490
+ """固定参考版本的 alpha158/rsv_20 特征。"""
491
+ close = fields["close"]
492
+ high = fields["high"]
493
+ low = fields["low"]
494
+ return (close - ts_min(low, 20)) / (ts_max(high, 20) - ts_min(low, 20) + 1e-12)
495
+
496
+
497
+ def alpha158_rsv_30(fields: dict[str, PanelExpression]) -> PanelExpression:
498
+ """固定参考版本的 alpha158/rsv_30 特征。"""
499
+ close = fields["close"]
500
+ high = fields["high"]
501
+ low = fields["low"]
502
+ return (close - ts_min(low, 30)) / (ts_max(high, 30) - ts_min(low, 30) + 1e-12)
503
+
504
+
505
+ def alpha158_rsv_60(fields: dict[str, PanelExpression]) -> PanelExpression:
506
+ """固定参考版本的 alpha158/rsv_60 特征。"""
507
+ close = fields["close"]
508
+ high = fields["high"]
509
+ low = fields["low"]
510
+ return (close - ts_min(low, 60)) / (ts_max(high, 60) - ts_min(low, 60) + 1e-12)
511
+
512
+
513
+ def alpha158_imax_5(fields: dict[str, PanelExpression]) -> PanelExpression:
514
+ """固定参考版本的 alpha158/imax_5 特征。"""
515
+ high = fields["high"]
516
+ return ts_argmax(high, 5) / 5
517
+
518
+
519
+ def alpha158_imax_10(fields: dict[str, PanelExpression]) -> PanelExpression:
520
+ """固定参考版本的 alpha158/imax_10 特征。"""
521
+ high = fields["high"]
522
+ return ts_argmax(high, 10) / 10
523
+
524
+
525
+ def alpha158_imax_20(fields: dict[str, PanelExpression]) -> PanelExpression:
526
+ """固定参考版本的 alpha158/imax_20 特征。"""
527
+ high = fields["high"]
528
+ return ts_argmax(high, 20) / 20
529
+
530
+
531
+ def alpha158_imax_30(fields: dict[str, PanelExpression]) -> PanelExpression:
532
+ """固定参考版本的 alpha158/imax_30 特征。"""
533
+ high = fields["high"]
534
+ return ts_argmax(high, 30) / 30
535
+
536
+
537
+ def alpha158_imax_60(fields: dict[str, PanelExpression]) -> PanelExpression:
538
+ """固定参考版本的 alpha158/imax_60 特征。"""
539
+ high = fields["high"]
540
+ return ts_argmax(high, 60) / 60
541
+
542
+
543
+ def alpha158_imin_5(fields: dict[str, PanelExpression]) -> PanelExpression:
544
+ """固定参考版本的 alpha158/imin_5 特征。"""
545
+ low = fields["low"]
546
+ return ts_argmin(low, 5) / 5
547
+
548
+
549
+ def alpha158_imin_10(fields: dict[str, PanelExpression]) -> PanelExpression:
550
+ """固定参考版本的 alpha158/imin_10 特征。"""
551
+ low = fields["low"]
552
+ return ts_argmin(low, 10) / 10
553
+
554
+
555
+ def alpha158_imin_20(fields: dict[str, PanelExpression]) -> PanelExpression:
556
+ """固定参考版本的 alpha158/imin_20 特征。"""
557
+ low = fields["low"]
558
+ return ts_argmin(low, 20) / 20
559
+
560
+
561
+ def alpha158_imin_30(fields: dict[str, PanelExpression]) -> PanelExpression:
562
+ """固定参考版本的 alpha158/imin_30 特征。"""
563
+ low = fields["low"]
564
+ return ts_argmin(low, 30) / 30
565
+
566
+
567
+ def alpha158_imin_60(fields: dict[str, PanelExpression]) -> PanelExpression:
568
+ """固定参考版本的 alpha158/imin_60 特征。"""
569
+ low = fields["low"]
570
+ return ts_argmin(low, 60) / 60
571
+
572
+
573
+ def alpha158_imxd_5(fields: dict[str, PanelExpression]) -> PanelExpression:
574
+ """固定参考版本的 alpha158/imxd_5 特征。"""
575
+ high = fields["high"]
576
+ low = fields["low"]
577
+ return (ts_argmax(high, 5) - ts_argmin(low, 5)) / 5
578
+
579
+
580
+ def alpha158_imxd_10(fields: dict[str, PanelExpression]) -> PanelExpression:
581
+ """固定参考版本的 alpha158/imxd_10 特征。"""
582
+ high = fields["high"]
583
+ low = fields["low"]
584
+ return (ts_argmax(high, 10) - ts_argmin(low, 10)) / 10
585
+
586
+
587
+ def alpha158_imxd_20(fields: dict[str, PanelExpression]) -> PanelExpression:
588
+ """固定参考版本的 alpha158/imxd_20 特征。"""
589
+ high = fields["high"]
590
+ low = fields["low"]
591
+ return (ts_argmax(high, 20) - ts_argmin(low, 20)) / 20
592
+
593
+
594
+ def alpha158_imxd_30(fields: dict[str, PanelExpression]) -> PanelExpression:
595
+ """固定参考版本的 alpha158/imxd_30 特征。"""
596
+ high = fields["high"]
597
+ low = fields["low"]
598
+ return (ts_argmax(high, 30) - ts_argmin(low, 30)) / 30
599
+
600
+
601
+ def alpha158_imxd_60(fields: dict[str, PanelExpression]) -> PanelExpression:
602
+ """固定参考版本的 alpha158/imxd_60 特征。"""
603
+ high = fields["high"]
604
+ low = fields["low"]
605
+ return (ts_argmax(high, 60) - ts_argmin(low, 60)) / 60
606
+
607
+
608
+ def alpha158_corr_5(fields: dict[str, PanelExpression]) -> PanelExpression:
609
+ """固定参考版本的 alpha158/corr_5 特征。"""
610
+ close = fields["close"]
611
+ volume = fields["volume"]
612
+ return ts_corr(close, ts_log(volume + 1), 5)
613
+
614
+
615
+ def alpha158_corr_10(fields: dict[str, PanelExpression]) -> PanelExpression:
616
+ """固定参考版本的 alpha158/corr_10 特征。"""
617
+ close = fields["close"]
618
+ volume = fields["volume"]
619
+ return ts_corr(close, ts_log(volume + 1), 10)
620
+
621
+
622
+ def alpha158_corr_20(fields: dict[str, PanelExpression]) -> PanelExpression:
623
+ """固定参考版本的 alpha158/corr_20 特征。"""
624
+ close = fields["close"]
625
+ volume = fields["volume"]
626
+ return ts_corr(close, ts_log(volume + 1), 20)
627
+
628
+
629
+ def alpha158_corr_30(fields: dict[str, PanelExpression]) -> PanelExpression:
630
+ """固定参考版本的 alpha158/corr_30 特征。"""
631
+ close = fields["close"]
632
+ volume = fields["volume"]
633
+ return ts_corr(close, ts_log(volume + 1), 30)
634
+
635
+
636
+ def alpha158_corr_60(fields: dict[str, PanelExpression]) -> PanelExpression:
637
+ """固定参考版本的 alpha158/corr_60 特征。"""
638
+ close = fields["close"]
639
+ volume = fields["volume"]
640
+ return ts_corr(close, ts_log(volume + 1), 60)
641
+
642
+
643
+ def alpha158_cord_5(fields: dict[str, PanelExpression]) -> PanelExpression:
644
+ """固定参考版本的 alpha158/cord_5 特征。"""
645
+ close = fields["close"]
646
+ volume = fields["volume"]
647
+ return ts_corr(close / ts_delay(close, 1), ts_log(volume / ts_delay(volume, 1) + 1), 5)
648
+
649
+
650
+ def alpha158_cord_10(fields: dict[str, PanelExpression]) -> PanelExpression:
651
+ """固定参考版本的 alpha158/cord_10 特征。"""
652
+ close = fields["close"]
653
+ volume = fields["volume"]
654
+ return ts_corr(close / ts_delay(close, 1), ts_log(volume / ts_delay(volume, 1) + 1), 10)
655
+
656
+
657
+ def alpha158_cord_20(fields: dict[str, PanelExpression]) -> PanelExpression:
658
+ """固定参考版本的 alpha158/cord_20 特征。"""
659
+ close = fields["close"]
660
+ volume = fields["volume"]
661
+ return ts_corr(close / ts_delay(close, 1), ts_log(volume / ts_delay(volume, 1) + 1), 20)
662
+
663
+
664
+ def alpha158_cord_30(fields: dict[str, PanelExpression]) -> PanelExpression:
665
+ """固定参考版本的 alpha158/cord_30 特征。"""
666
+ close = fields["close"]
667
+ volume = fields["volume"]
668
+ return ts_corr(close / ts_delay(close, 1), ts_log(volume / ts_delay(volume, 1) + 1), 30)
669
+
670
+
671
+ def alpha158_cord_60(fields: dict[str, PanelExpression]) -> PanelExpression:
672
+ """固定参考版本的 alpha158/cord_60 特征。"""
673
+ close = fields["close"]
674
+ volume = fields["volume"]
675
+ return ts_corr(close / ts_delay(close, 1), ts_log(volume / ts_delay(volume, 1) + 1), 60)
676
+
677
+
678
+ def alpha158_cntp_5(fields: dict[str, PanelExpression]) -> PanelExpression:
679
+ """固定参考版本的 alpha158/cntp_5 特征。"""
680
+ close = fields["close"]
681
+ return ts_mean(close > ts_delay(close, 1), 5)
682
+
683
+
684
+ def alpha158_cntp_10(fields: dict[str, PanelExpression]) -> PanelExpression:
685
+ """固定参考版本的 alpha158/cntp_10 特征。"""
686
+ close = fields["close"]
687
+ return ts_mean(close > ts_delay(close, 1), 10)
688
+
689
+
690
+ def alpha158_cntp_20(fields: dict[str, PanelExpression]) -> PanelExpression:
691
+ """固定参考版本的 alpha158/cntp_20 特征。"""
692
+ close = fields["close"]
693
+ return ts_mean(close > ts_delay(close, 1), 20)
694
+
695
+
696
+ def alpha158_cntp_30(fields: dict[str, PanelExpression]) -> PanelExpression:
697
+ """固定参考版本的 alpha158/cntp_30 特征。"""
698
+ close = fields["close"]
699
+ return ts_mean(close > ts_delay(close, 1), 30)
700
+
701
+
702
+ def alpha158_cntp_60(fields: dict[str, PanelExpression]) -> PanelExpression:
703
+ """固定参考版本的 alpha158/cntp_60 特征。"""
704
+ close = fields["close"]
705
+ return ts_mean(close > ts_delay(close, 1), 60)
706
+
707
+
708
+ def alpha158_cntn_5(fields: dict[str, PanelExpression]) -> PanelExpression:
709
+ """固定参考版本的 alpha158/cntn_5 特征。"""
710
+ close = fields["close"]
711
+ return ts_mean(close < ts_delay(close, 1), 5)
712
+
713
+
714
+ def alpha158_cntn_10(fields: dict[str, PanelExpression]) -> PanelExpression:
715
+ """固定参考版本的 alpha158/cntn_10 特征。"""
716
+ close = fields["close"]
717
+ return ts_mean(close < ts_delay(close, 1), 10)
718
+
719
+
720
+ def alpha158_cntn_20(fields: dict[str, PanelExpression]) -> PanelExpression:
721
+ """固定参考版本的 alpha158/cntn_20 特征。"""
722
+ close = fields["close"]
723
+ return ts_mean(close < ts_delay(close, 1), 20)
724
+
725
+
726
+ def alpha158_cntn_30(fields: dict[str, PanelExpression]) -> PanelExpression:
727
+ """固定参考版本的 alpha158/cntn_30 特征。"""
728
+ close = fields["close"]
729
+ return ts_mean(close < ts_delay(close, 1), 30)
730
+
731
+
732
+ def alpha158_cntn_60(fields: dict[str, PanelExpression]) -> PanelExpression:
733
+ """固定参考版本的 alpha158/cntn_60 特征。"""
734
+ close = fields["close"]
735
+ return ts_mean(close < ts_delay(close, 1), 60)
736
+
737
+
738
+ def alpha158_cntd_5(fields: dict[str, PanelExpression]) -> PanelExpression:
739
+ """固定参考版本的 alpha158/cntd_5 特征。"""
740
+ close = fields["close"]
741
+ return ts_mean(close > ts_delay(close, 1), 5) - ts_mean(close < ts_delay(close, 1), 5)
742
+
743
+
744
+ def alpha158_cntd_10(fields: dict[str, PanelExpression]) -> PanelExpression:
745
+ """固定参考版本的 alpha158/cntd_10 特征。"""
746
+ close = fields["close"]
747
+ return ts_mean(close > ts_delay(close, 1), 10) - ts_mean(close < ts_delay(close, 1), 10)
748
+
749
+
750
+ def alpha158_cntd_20(fields: dict[str, PanelExpression]) -> PanelExpression:
751
+ """固定参考版本的 alpha158/cntd_20 特征。"""
752
+ close = fields["close"]
753
+ return ts_mean(close > ts_delay(close, 1), 20) - ts_mean(close < ts_delay(close, 1), 20)
754
+
755
+
756
+ def alpha158_cntd_30(fields: dict[str, PanelExpression]) -> PanelExpression:
757
+ """固定参考版本的 alpha158/cntd_30 特征。"""
758
+ close = fields["close"]
759
+ return ts_mean(close > ts_delay(close, 1), 30) - ts_mean(close < ts_delay(close, 1), 30)
760
+
761
+
762
+ def alpha158_cntd_60(fields: dict[str, PanelExpression]) -> PanelExpression:
763
+ """固定参考版本的 alpha158/cntd_60 特征。"""
764
+ close = fields["close"]
765
+ return ts_mean(close > ts_delay(close, 1), 60) - ts_mean(close < ts_delay(close, 1), 60)
766
+
767
+
768
+ def alpha158_sump_5(fields: dict[str, PanelExpression]) -> PanelExpression:
769
+ """固定参考版本的 alpha158/sump_5 特征。"""
770
+ close = fields["close"]
771
+ return ts_sum(ts_greater(close - ts_delay(close, 1), 0), 5) / (
772
+ ts_sum(ts_abs(close - ts_delay(close, 1)), 5) + 1e-12
773
+ )
774
+
775
+
776
+ def alpha158_sump_10(fields: dict[str, PanelExpression]) -> PanelExpression:
777
+ """固定参考版本的 alpha158/sump_10 特征。"""
778
+ close = fields["close"]
779
+ return ts_sum(ts_greater(close - ts_delay(close, 1), 0), 10) / (
780
+ ts_sum(ts_abs(close - ts_delay(close, 1)), 10) + 1e-12
781
+ )
782
+
783
+
784
+ def alpha158_sump_20(fields: dict[str, PanelExpression]) -> PanelExpression:
785
+ """固定参考版本的 alpha158/sump_20 特征。"""
786
+ close = fields["close"]
787
+ return ts_sum(ts_greater(close - ts_delay(close, 1), 0), 20) / (
788
+ ts_sum(ts_abs(close - ts_delay(close, 1)), 20) + 1e-12
789
+ )
790
+
791
+
792
+ def alpha158_sump_30(fields: dict[str, PanelExpression]) -> PanelExpression:
793
+ """固定参考版本的 alpha158/sump_30 特征。"""
794
+ close = fields["close"]
795
+ return ts_sum(ts_greater(close - ts_delay(close, 1), 0), 30) / (
796
+ ts_sum(ts_abs(close - ts_delay(close, 1)), 30) + 1e-12
797
+ )
798
+
799
+
800
+ def alpha158_sump_60(fields: dict[str, PanelExpression]) -> PanelExpression:
801
+ """固定参考版本的 alpha158/sump_60 特征。"""
802
+ close = fields["close"]
803
+ return ts_sum(ts_greater(close - ts_delay(close, 1), 0), 60) / (
804
+ ts_sum(ts_abs(close - ts_delay(close, 1)), 60) + 1e-12
805
+ )
806
+
807
+
808
+ def alpha158_sumn_5(fields: dict[str, PanelExpression]) -> PanelExpression:
809
+ """固定参考版本的 alpha158/sumn_5 特征。"""
810
+ close = fields["close"]
811
+ return ts_sum(ts_greater(ts_delay(close, 1) - close, 0), 5) / (
812
+ ts_sum(ts_abs(close - ts_delay(close, 1)), 5) + 1e-12
813
+ )
814
+
815
+
816
+ def alpha158_sumn_10(fields: dict[str, PanelExpression]) -> PanelExpression:
817
+ """固定参考版本的 alpha158/sumn_10 特征。"""
818
+ close = fields["close"]
819
+ return ts_sum(ts_greater(ts_delay(close, 1) - close, 0), 10) / (
820
+ ts_sum(ts_abs(close - ts_delay(close, 1)), 10) + 1e-12
821
+ )
822
+
823
+
824
+ def alpha158_sumn_20(fields: dict[str, PanelExpression]) -> PanelExpression:
825
+ """固定参考版本的 alpha158/sumn_20 特征。"""
826
+ close = fields["close"]
827
+ return ts_sum(ts_greater(ts_delay(close, 1) - close, 0), 20) / (
828
+ ts_sum(ts_abs(close - ts_delay(close, 1)), 20) + 1e-12
829
+ )
830
+
831
+
832
+ def alpha158_sumn_30(fields: dict[str, PanelExpression]) -> PanelExpression:
833
+ """固定参考版本的 alpha158/sumn_30 特征。"""
834
+ close = fields["close"]
835
+ return ts_sum(ts_greater(ts_delay(close, 1) - close, 0), 30) / (
836
+ ts_sum(ts_abs(close - ts_delay(close, 1)), 30) + 1e-12
837
+ )
838
+
839
+
840
+ def alpha158_sumn_60(fields: dict[str, PanelExpression]) -> PanelExpression:
841
+ """固定参考版本的 alpha158/sumn_60 特征。"""
842
+ close = fields["close"]
843
+ return ts_sum(ts_greater(ts_delay(close, 1) - close, 0), 60) / (
844
+ ts_sum(ts_abs(close - ts_delay(close, 1)), 60) + 1e-12
845
+ )
846
+
847
+
848
+ def alpha158_sumd_5(fields: dict[str, PanelExpression]) -> PanelExpression:
849
+ """固定参考版本的 alpha158/sumd_5 特征。"""
850
+ close = fields["close"]
851
+ return (
852
+ ts_sum(ts_greater(close - ts_delay(close, 1), 0), 5)
853
+ - ts_sum(ts_greater(ts_delay(close, 1) - close, 0), 5)
854
+ ) / (ts_sum(ts_abs(close - ts_delay(close, 1)), 5) + 1e-12)
855
+
856
+
857
+ def alpha158_sumd_10(fields: dict[str, PanelExpression]) -> PanelExpression:
858
+ """固定参考版本的 alpha158/sumd_10 特征。"""
859
+ close = fields["close"]
860
+ return (
861
+ ts_sum(ts_greater(close - ts_delay(close, 1), 0), 10)
862
+ - ts_sum(ts_greater(ts_delay(close, 1) - close, 0), 10)
863
+ ) / (ts_sum(ts_abs(close - ts_delay(close, 1)), 10) + 1e-12)
864
+
865
+
866
+ def alpha158_sumd_20(fields: dict[str, PanelExpression]) -> PanelExpression:
867
+ """固定参考版本的 alpha158/sumd_20 特征。"""
868
+ close = fields["close"]
869
+ return (
870
+ ts_sum(ts_greater(close - ts_delay(close, 1), 0), 20)
871
+ - ts_sum(ts_greater(ts_delay(close, 1) - close, 0), 20)
872
+ ) / (ts_sum(ts_abs(close - ts_delay(close, 1)), 20) + 1e-12)
873
+
874
+
875
+ def alpha158_sumd_30(fields: dict[str, PanelExpression]) -> PanelExpression:
876
+ """固定参考版本的 alpha158/sumd_30 特征。"""
877
+ close = fields["close"]
878
+ return (
879
+ ts_sum(ts_greater(close - ts_delay(close, 1), 0), 30)
880
+ - ts_sum(ts_greater(ts_delay(close, 1) - close, 0), 30)
881
+ ) / (ts_sum(ts_abs(close - ts_delay(close, 1)), 30) + 1e-12)
882
+
883
+
884
+ def alpha158_sumd_60(fields: dict[str, PanelExpression]) -> PanelExpression:
885
+ """固定参考版本的 alpha158/sumd_60 特征。"""
886
+ close = fields["close"]
887
+ return (
888
+ ts_sum(ts_greater(close - ts_delay(close, 1), 0), 60)
889
+ - ts_sum(ts_greater(ts_delay(close, 1) - close, 0), 60)
890
+ ) / (ts_sum(ts_abs(close - ts_delay(close, 1)), 60) + 1e-12)
891
+
892
+
893
+ def alpha158_vma_5(fields: dict[str, PanelExpression]) -> PanelExpression:
894
+ """固定参考版本的 alpha158/vma_5 特征。"""
895
+ volume = fields["volume"]
896
+ return ts_mean(volume, 5) / (volume + 1e-12)
897
+
898
+
899
+ def alpha158_vma_10(fields: dict[str, PanelExpression]) -> PanelExpression:
900
+ """固定参考版本的 alpha158/vma_10 特征。"""
901
+ volume = fields["volume"]
902
+ return ts_mean(volume, 10) / (volume + 1e-12)
903
+
904
+
905
+ def alpha158_vma_20(fields: dict[str, PanelExpression]) -> PanelExpression:
906
+ """固定参考版本的 alpha158/vma_20 特征。"""
907
+ volume = fields["volume"]
908
+ return ts_mean(volume, 20) / (volume + 1e-12)
909
+
910
+
911
+ def alpha158_vma_30(fields: dict[str, PanelExpression]) -> PanelExpression:
912
+ """固定参考版本的 alpha158/vma_30 特征。"""
913
+ volume = fields["volume"]
914
+ return ts_mean(volume, 30) / (volume + 1e-12)
915
+
916
+
917
+ def alpha158_vma_60(fields: dict[str, PanelExpression]) -> PanelExpression:
918
+ """固定参考版本的 alpha158/vma_60 特征。"""
919
+ volume = fields["volume"]
920
+ return ts_mean(volume, 60) / (volume + 1e-12)
921
+
922
+
923
+ def alpha158_vstd_5(fields: dict[str, PanelExpression]) -> PanelExpression:
924
+ """固定参考版本的 alpha158/vstd_5 特征。"""
925
+ volume = fields["volume"]
926
+ return ts_std(volume, 5) / (volume + 1e-12)
927
+
928
+
929
+ def alpha158_vstd_10(fields: dict[str, PanelExpression]) -> PanelExpression:
930
+ """固定参考版本的 alpha158/vstd_10 特征。"""
931
+ volume = fields["volume"]
932
+ return ts_std(volume, 10) / (volume + 1e-12)
933
+
934
+
935
+ def alpha158_vstd_20(fields: dict[str, PanelExpression]) -> PanelExpression:
936
+ """固定参考版本的 alpha158/vstd_20 特征。"""
937
+ volume = fields["volume"]
938
+ return ts_std(volume, 20) / (volume + 1e-12)
939
+
940
+
941
+ def alpha158_vstd_30(fields: dict[str, PanelExpression]) -> PanelExpression:
942
+ """固定参考版本的 alpha158/vstd_30 特征。"""
943
+ volume = fields["volume"]
944
+ return ts_std(volume, 30) / (volume + 1e-12)
945
+
946
+
947
+ def alpha158_vstd_60(fields: dict[str, PanelExpression]) -> PanelExpression:
948
+ """固定参考版本的 alpha158/vstd_60 特征。"""
949
+ volume = fields["volume"]
950
+ return ts_std(volume, 60) / (volume + 1e-12)
951
+
952
+
953
+ def alpha158_wvma_5(fields: dict[str, PanelExpression]) -> PanelExpression:
954
+ """固定参考版本的 alpha158/wvma_5 特征。"""
955
+ close = fields["close"]
956
+ volume = fields["volume"]
957
+ return ts_std(ts_abs(close / ts_delay(close, 1) - 1) * volume, 5) / (
958
+ ts_mean(ts_abs(close / ts_delay(close, 1) - 1) * volume, 5) + 1e-12
959
+ )
960
+
961
+
962
+ def alpha158_wvma_10(fields: dict[str, PanelExpression]) -> PanelExpression:
963
+ """固定参考版本的 alpha158/wvma_10 特征。"""
964
+ close = fields["close"]
965
+ volume = fields["volume"]
966
+ return ts_std(ts_abs(close / ts_delay(close, 1) - 1) * volume, 10) / (
967
+ ts_mean(ts_abs(close / ts_delay(close, 1) - 1) * volume, 10) + 1e-12
968
+ )
969
+
970
+
971
+ def alpha158_wvma_20(fields: dict[str, PanelExpression]) -> PanelExpression:
972
+ """固定参考版本的 alpha158/wvma_20 特征。"""
973
+ close = fields["close"]
974
+ volume = fields["volume"]
975
+ return ts_std(ts_abs(close / ts_delay(close, 1) - 1) * volume, 20) / (
976
+ ts_mean(ts_abs(close / ts_delay(close, 1) - 1) * volume, 20) + 1e-12
977
+ )
978
+
979
+
980
+ def alpha158_wvma_30(fields: dict[str, PanelExpression]) -> PanelExpression:
981
+ """固定参考版本的 alpha158/wvma_30 特征。"""
982
+ close = fields["close"]
983
+ volume = fields["volume"]
984
+ return ts_std(ts_abs(close / ts_delay(close, 1) - 1) * volume, 30) / (
985
+ ts_mean(ts_abs(close / ts_delay(close, 1) - 1) * volume, 30) + 1e-12
986
+ )
987
+
988
+
989
+ def alpha158_wvma_60(fields: dict[str, PanelExpression]) -> PanelExpression:
990
+ """固定参考版本的 alpha158/wvma_60 特征。"""
991
+ close = fields["close"]
992
+ volume = fields["volume"]
993
+ return ts_std(ts_abs(close / ts_delay(close, 1) - 1) * volume, 60) / (
994
+ ts_mean(ts_abs(close / ts_delay(close, 1) - 1) * volume, 60) + 1e-12
995
+ )
996
+
997
+
998
+ def alpha158_vsump_5(fields: dict[str, PanelExpression]) -> PanelExpression:
999
+ """固定参考版本的 alpha158/vsump_5 特征。"""
1000
+ volume = fields["volume"]
1001
+ return ts_sum(ts_greater(volume - ts_delay(volume, 1), 0), 5) / (
1002
+ ts_sum(ts_abs(volume - ts_delay(volume, 1)), 5) + 1e-12
1003
+ )
1004
+
1005
+
1006
+ def alpha158_vsump_10(fields: dict[str, PanelExpression]) -> PanelExpression:
1007
+ """固定参考版本的 alpha158/vsump_10 特征。"""
1008
+ volume = fields["volume"]
1009
+ return ts_sum(ts_greater(volume - ts_delay(volume, 1), 0), 10) / (
1010
+ ts_sum(ts_abs(volume - ts_delay(volume, 1)), 10) + 1e-12
1011
+ )
1012
+
1013
+
1014
+ def alpha158_vsump_20(fields: dict[str, PanelExpression]) -> PanelExpression:
1015
+ """固定参考版本的 alpha158/vsump_20 特征。"""
1016
+ volume = fields["volume"]
1017
+ return ts_sum(ts_greater(volume - ts_delay(volume, 1), 0), 20) / (
1018
+ ts_sum(ts_abs(volume - ts_delay(volume, 1)), 20) + 1e-12
1019
+ )
1020
+
1021
+
1022
+ def alpha158_vsump_30(fields: dict[str, PanelExpression]) -> PanelExpression:
1023
+ """固定参考版本的 alpha158/vsump_30 特征。"""
1024
+ volume = fields["volume"]
1025
+ return ts_sum(ts_greater(volume - ts_delay(volume, 1), 0), 30) / (
1026
+ ts_sum(ts_abs(volume - ts_delay(volume, 1)), 30) + 1e-12
1027
+ )
1028
+
1029
+
1030
+ def alpha158_vsump_60(fields: dict[str, PanelExpression]) -> PanelExpression:
1031
+ """固定参考版本的 alpha158/vsump_60 特征。"""
1032
+ volume = fields["volume"]
1033
+ return ts_sum(ts_greater(volume - ts_delay(volume, 1), 0), 60) / (
1034
+ ts_sum(ts_abs(volume - ts_delay(volume, 1)), 60) + 1e-12
1035
+ )
1036
+
1037
+
1038
+ def alpha158_vsumn_5(fields: dict[str, PanelExpression]) -> PanelExpression:
1039
+ """固定参考版本的 alpha158/vsumn_5 特征。"""
1040
+ volume = fields["volume"]
1041
+ return ts_sum(ts_greater(ts_delay(volume, 1) - volume, 0), 5) / (
1042
+ ts_sum(ts_abs(volume - ts_delay(volume, 1)), 5) + 1e-12
1043
+ )
1044
+
1045
+
1046
+ def alpha158_vsumn_10(fields: dict[str, PanelExpression]) -> PanelExpression:
1047
+ """固定参考版本的 alpha158/vsumn_10 特征。"""
1048
+ volume = fields["volume"]
1049
+ return ts_sum(ts_greater(ts_delay(volume, 1) - volume, 0), 10) / (
1050
+ ts_sum(ts_abs(volume - ts_delay(volume, 1)), 10) + 1e-12
1051
+ )
1052
+
1053
+
1054
+ def alpha158_vsumn_20(fields: dict[str, PanelExpression]) -> PanelExpression:
1055
+ """固定参考版本的 alpha158/vsumn_20 特征。"""
1056
+ volume = fields["volume"]
1057
+ return ts_sum(ts_greater(ts_delay(volume, 1) - volume, 0), 20) / (
1058
+ ts_sum(ts_abs(volume - ts_delay(volume, 1)), 20) + 1e-12
1059
+ )
1060
+
1061
+
1062
+ def alpha158_vsumn_30(fields: dict[str, PanelExpression]) -> PanelExpression:
1063
+ """固定参考版本的 alpha158/vsumn_30 特征。"""
1064
+ volume = fields["volume"]
1065
+ return ts_sum(ts_greater(ts_delay(volume, 1) - volume, 0), 30) / (
1066
+ ts_sum(ts_abs(volume - ts_delay(volume, 1)), 30) + 1e-12
1067
+ )
1068
+
1069
+
1070
+ def alpha158_vsumn_60(fields: dict[str, PanelExpression]) -> PanelExpression:
1071
+ """固定参考版本的 alpha158/vsumn_60 特征。"""
1072
+ volume = fields["volume"]
1073
+ return ts_sum(ts_greater(ts_delay(volume, 1) - volume, 0), 60) / (
1074
+ ts_sum(ts_abs(volume - ts_delay(volume, 1)), 60) + 1e-12
1075
+ )
1076
+
1077
+
1078
+ def alpha158_vsumd_5(fields: dict[str, PanelExpression]) -> PanelExpression:
1079
+ """固定参考版本的 alpha158/vsumd_5 特征。"""
1080
+ volume = fields["volume"]
1081
+ return (
1082
+ ts_sum(ts_greater(volume - ts_delay(volume, 1), 0), 5)
1083
+ - ts_sum(ts_greater(ts_delay(volume, 1) - volume, 0), 5)
1084
+ ) / (ts_sum(ts_abs(volume - ts_delay(volume, 1)), 5) + 1e-12)
1085
+
1086
+
1087
+ def alpha158_vsumd_10(fields: dict[str, PanelExpression]) -> PanelExpression:
1088
+ """固定参考版本的 alpha158/vsumd_10 特征。"""
1089
+ volume = fields["volume"]
1090
+ return (
1091
+ ts_sum(ts_greater(volume - ts_delay(volume, 1), 0), 10)
1092
+ - ts_sum(ts_greater(ts_delay(volume, 1) - volume, 0), 10)
1093
+ ) / (ts_sum(ts_abs(volume - ts_delay(volume, 1)), 10) + 1e-12)
1094
+
1095
+
1096
+ def alpha158_vsumd_20(fields: dict[str, PanelExpression]) -> PanelExpression:
1097
+ """固定参考版本的 alpha158/vsumd_20 特征。"""
1098
+ volume = fields["volume"]
1099
+ return (
1100
+ ts_sum(ts_greater(volume - ts_delay(volume, 1), 0), 20)
1101
+ - ts_sum(ts_greater(ts_delay(volume, 1) - volume, 0), 20)
1102
+ ) / (ts_sum(ts_abs(volume - ts_delay(volume, 1)), 20) + 1e-12)
1103
+
1104
+
1105
+ def alpha158_vsumd_30(fields: dict[str, PanelExpression]) -> PanelExpression:
1106
+ """固定参考版本的 alpha158/vsumd_30 特征。"""
1107
+ volume = fields["volume"]
1108
+ return (
1109
+ ts_sum(ts_greater(volume - ts_delay(volume, 1), 0), 30)
1110
+ - ts_sum(ts_greater(ts_delay(volume, 1) - volume, 0), 30)
1111
+ ) / (ts_sum(ts_abs(volume - ts_delay(volume, 1)), 30) + 1e-12)
1112
+
1113
+
1114
+ def alpha158_vsumd_60(fields: dict[str, PanelExpression]) -> PanelExpression:
1115
+ """固定参考版本的 alpha158/vsumd_60 特征。"""
1116
+ volume = fields["volume"]
1117
+ return (
1118
+ ts_sum(ts_greater(volume - ts_delay(volume, 1), 0), 60)
1119
+ - ts_sum(ts_greater(ts_delay(volume, 1) - volume, 0), 60)
1120
+ ) / (ts_sum(ts_abs(volume - ts_delay(volume, 1)), 60) + 1e-12)
1121
+
1122
+
1123
+ ALPHA158_RECIPES: dict[
1124
+ str, tuple[Callable[[dict[str, PanelExpression]], PanelExpression], int, tuple[str, ...]]
1125
+ ] = {
1126
+ "alpha158_kmid": (alpha158_kmid, 1, ("close", "open")),
1127
+ "alpha158_klen": (alpha158_klen, 1, ("high", "low", "open")),
1128
+ "alpha158_kmid_2": (alpha158_kmid_2, 1, ("close", "high", "low", "open")),
1129
+ "alpha158_kup": (alpha158_kup, 1, ("close", "high", "open")),
1130
+ "alpha158_kup_2": (alpha158_kup_2, 1, ("close", "high", "low", "open")),
1131
+ "alpha158_klow": (alpha158_klow, 1, ("close", "low", "open")),
1132
+ "alpha158_klow_2": (alpha158_klow_2, 1, ("close", "high", "low", "open")),
1133
+ "alpha158_ksft": (alpha158_ksft, 1, ("close", "high", "low", "open")),
1134
+ "alpha158_ksft_2": (alpha158_ksft_2, 1, ("close", "high", "low")),
1135
+ "alpha158_open_0": (alpha158_open_0, 1, ("close", "open")),
1136
+ "alpha158_high_0": (alpha158_high_0, 1, ("close", "high")),
1137
+ "alpha158_low_0": (alpha158_low_0, 1, ("close", "low")),
1138
+ "alpha158_vwap_0": (alpha158_vwap_0, 1, ("close", "vwap")),
1139
+ "alpha158_roc_5": (alpha158_roc_5, 6, ("close",)),
1140
+ "alpha158_roc_10": (alpha158_roc_10, 11, ("close",)),
1141
+ "alpha158_roc_20": (alpha158_roc_20, 21, ("close",)),
1142
+ "alpha158_roc_30": (alpha158_roc_30, 31, ("close",)),
1143
+ "alpha158_roc_60": (alpha158_roc_60, 61, ("close",)),
1144
+ "alpha158_ma_5": (alpha158_ma_5, 5, ("close",)),
1145
+ "alpha158_ma_10": (alpha158_ma_10, 10, ("close",)),
1146
+ "alpha158_ma_20": (alpha158_ma_20, 20, ("close",)),
1147
+ "alpha158_ma_30": (alpha158_ma_30, 30, ("close",)),
1148
+ "alpha158_ma_60": (alpha158_ma_60, 60, ("close",)),
1149
+ "alpha158_std_5": (alpha158_std_5, 5, ("close",)),
1150
+ "alpha158_std_10": (alpha158_std_10, 10, ("close",)),
1151
+ "alpha158_std_20": (alpha158_std_20, 20, ("close",)),
1152
+ "alpha158_std_30": (alpha158_std_30, 30, ("close",)),
1153
+ "alpha158_std_60": (alpha158_std_60, 60, ("close",)),
1154
+ "alpha158_beta_5": (alpha158_beta_5, 5, ("close",)),
1155
+ "alpha158_beta_10": (alpha158_beta_10, 10, ("close",)),
1156
+ "alpha158_beta_20": (alpha158_beta_20, 20, ("close",)),
1157
+ "alpha158_beta_30": (alpha158_beta_30, 30, ("close",)),
1158
+ "alpha158_beta_60": (alpha158_beta_60, 60, ("close",)),
1159
+ "alpha158_rsqr_5": (alpha158_rsqr_5, 5, ("close",)),
1160
+ "alpha158_rsqr_10": (alpha158_rsqr_10, 10, ("close",)),
1161
+ "alpha158_rsqr_20": (alpha158_rsqr_20, 20, ("close",)),
1162
+ "alpha158_rsqr_30": (alpha158_rsqr_30, 30, ("close",)),
1163
+ "alpha158_rsqr_60": (alpha158_rsqr_60, 60, ("close",)),
1164
+ "alpha158_resi_5": (alpha158_resi_5, 5, ("close",)),
1165
+ "alpha158_resi_10": (alpha158_resi_10, 10, ("close",)),
1166
+ "alpha158_resi_20": (alpha158_resi_20, 20, ("close",)),
1167
+ "alpha158_resi_30": (alpha158_resi_30, 30, ("close",)),
1168
+ "alpha158_resi_60": (alpha158_resi_60, 60, ("close",)),
1169
+ "alpha158_max_5": (alpha158_max_5, 5, ("close", "high")),
1170
+ "alpha158_max_10": (alpha158_max_10, 10, ("close", "high")),
1171
+ "alpha158_max_20": (alpha158_max_20, 20, ("close", "high")),
1172
+ "alpha158_max_30": (alpha158_max_30, 30, ("close", "high")),
1173
+ "alpha158_max_60": (alpha158_max_60, 60, ("close", "high")),
1174
+ "alpha158_min_5": (alpha158_min_5, 5, ("close", "low")),
1175
+ "alpha158_min_10": (alpha158_min_10, 10, ("close", "low")),
1176
+ "alpha158_min_20": (alpha158_min_20, 20, ("close", "low")),
1177
+ "alpha158_min_30": (alpha158_min_30, 30, ("close", "low")),
1178
+ "alpha158_min_60": (alpha158_min_60, 60, ("close", "low")),
1179
+ "alpha158_qtlu_5": (alpha158_qtlu_5, 5, ("close",)),
1180
+ "alpha158_qtlu_10": (alpha158_qtlu_10, 10, ("close",)),
1181
+ "alpha158_qtlu_20": (alpha158_qtlu_20, 20, ("close",)),
1182
+ "alpha158_qtlu_30": (alpha158_qtlu_30, 30, ("close",)),
1183
+ "alpha158_qtlu_60": (alpha158_qtlu_60, 60, ("close",)),
1184
+ "alpha158_qtld_5": (alpha158_qtld_5, 5, ("close",)),
1185
+ "alpha158_qtld_10": (alpha158_qtld_10, 10, ("close",)),
1186
+ "alpha158_qtld_20": (alpha158_qtld_20, 20, ("close",)),
1187
+ "alpha158_qtld_30": (alpha158_qtld_30, 30, ("close",)),
1188
+ "alpha158_qtld_60": (alpha158_qtld_60, 60, ("close",)),
1189
+ "alpha158_rank_5": (alpha158_rank_5, 5, ("close",)),
1190
+ "alpha158_rank_10": (alpha158_rank_10, 10, ("close",)),
1191
+ "alpha158_rank_20": (alpha158_rank_20, 20, ("close",)),
1192
+ "alpha158_rank_30": (alpha158_rank_30, 30, ("close",)),
1193
+ "alpha158_rank_60": (alpha158_rank_60, 60, ("close",)),
1194
+ "alpha158_rsv_5": (alpha158_rsv_5, 5, ("close", "high", "low")),
1195
+ "alpha158_rsv_10": (alpha158_rsv_10, 10, ("close", "high", "low")),
1196
+ "alpha158_rsv_20": (alpha158_rsv_20, 20, ("close", "high", "low")),
1197
+ "alpha158_rsv_30": (alpha158_rsv_30, 30, ("close", "high", "low")),
1198
+ "alpha158_rsv_60": (alpha158_rsv_60, 60, ("close", "high", "low")),
1199
+ "alpha158_imax_5": (alpha158_imax_5, 5, ("high",)),
1200
+ "alpha158_imax_10": (alpha158_imax_10, 10, ("high",)),
1201
+ "alpha158_imax_20": (alpha158_imax_20, 20, ("high",)),
1202
+ "alpha158_imax_30": (alpha158_imax_30, 30, ("high",)),
1203
+ "alpha158_imax_60": (alpha158_imax_60, 60, ("high",)),
1204
+ "alpha158_imin_5": (alpha158_imin_5, 5, ("low",)),
1205
+ "alpha158_imin_10": (alpha158_imin_10, 10, ("low",)),
1206
+ "alpha158_imin_20": (alpha158_imin_20, 20, ("low",)),
1207
+ "alpha158_imin_30": (alpha158_imin_30, 30, ("low",)),
1208
+ "alpha158_imin_60": (alpha158_imin_60, 60, ("low",)),
1209
+ "alpha158_imxd_5": (alpha158_imxd_5, 5, ("high", "low")),
1210
+ "alpha158_imxd_10": (alpha158_imxd_10, 10, ("high", "low")),
1211
+ "alpha158_imxd_20": (alpha158_imxd_20, 20, ("high", "low")),
1212
+ "alpha158_imxd_30": (alpha158_imxd_30, 30, ("high", "low")),
1213
+ "alpha158_imxd_60": (alpha158_imxd_60, 60, ("high", "low")),
1214
+ "alpha158_corr_5": (alpha158_corr_5, 5, ("close", "volume")),
1215
+ "alpha158_corr_10": (alpha158_corr_10, 10, ("close", "volume")),
1216
+ "alpha158_corr_20": (alpha158_corr_20, 20, ("close", "volume")),
1217
+ "alpha158_corr_30": (alpha158_corr_30, 30, ("close", "volume")),
1218
+ "alpha158_corr_60": (alpha158_corr_60, 60, ("close", "volume")),
1219
+ "alpha158_cord_5": (alpha158_cord_5, 6, ("close", "volume")),
1220
+ "alpha158_cord_10": (alpha158_cord_10, 11, ("close", "volume")),
1221
+ "alpha158_cord_20": (alpha158_cord_20, 21, ("close", "volume")),
1222
+ "alpha158_cord_30": (alpha158_cord_30, 31, ("close", "volume")),
1223
+ "alpha158_cord_60": (alpha158_cord_60, 61, ("close", "volume")),
1224
+ "alpha158_cntp_5": (alpha158_cntp_5, 6, ("close",)),
1225
+ "alpha158_cntp_10": (alpha158_cntp_10, 11, ("close",)),
1226
+ "alpha158_cntp_20": (alpha158_cntp_20, 21, ("close",)),
1227
+ "alpha158_cntp_30": (alpha158_cntp_30, 31, ("close",)),
1228
+ "alpha158_cntp_60": (alpha158_cntp_60, 61, ("close",)),
1229
+ "alpha158_cntn_5": (alpha158_cntn_5, 6, ("close",)),
1230
+ "alpha158_cntn_10": (alpha158_cntn_10, 11, ("close",)),
1231
+ "alpha158_cntn_20": (alpha158_cntn_20, 21, ("close",)),
1232
+ "alpha158_cntn_30": (alpha158_cntn_30, 31, ("close",)),
1233
+ "alpha158_cntn_60": (alpha158_cntn_60, 61, ("close",)),
1234
+ "alpha158_cntd_5": (alpha158_cntd_5, 6, ("close",)),
1235
+ "alpha158_cntd_10": (alpha158_cntd_10, 11, ("close",)),
1236
+ "alpha158_cntd_20": (alpha158_cntd_20, 21, ("close",)),
1237
+ "alpha158_cntd_30": (alpha158_cntd_30, 31, ("close",)),
1238
+ "alpha158_cntd_60": (alpha158_cntd_60, 61, ("close",)),
1239
+ "alpha158_sump_5": (alpha158_sump_5, 6, ("close",)),
1240
+ "alpha158_sump_10": (alpha158_sump_10, 11, ("close",)),
1241
+ "alpha158_sump_20": (alpha158_sump_20, 21, ("close",)),
1242
+ "alpha158_sump_30": (alpha158_sump_30, 31, ("close",)),
1243
+ "alpha158_sump_60": (alpha158_sump_60, 61, ("close",)),
1244
+ "alpha158_sumn_5": (alpha158_sumn_5, 6, ("close",)),
1245
+ "alpha158_sumn_10": (alpha158_sumn_10, 11, ("close",)),
1246
+ "alpha158_sumn_20": (alpha158_sumn_20, 21, ("close",)),
1247
+ "alpha158_sumn_30": (alpha158_sumn_30, 31, ("close",)),
1248
+ "alpha158_sumn_60": (alpha158_sumn_60, 61, ("close",)),
1249
+ "alpha158_sumd_5": (alpha158_sumd_5, 6, ("close",)),
1250
+ "alpha158_sumd_10": (alpha158_sumd_10, 11, ("close",)),
1251
+ "alpha158_sumd_20": (alpha158_sumd_20, 21, ("close",)),
1252
+ "alpha158_sumd_30": (alpha158_sumd_30, 31, ("close",)),
1253
+ "alpha158_sumd_60": (alpha158_sumd_60, 61, ("close",)),
1254
+ "alpha158_vma_5": (alpha158_vma_5, 5, ("volume",)),
1255
+ "alpha158_vma_10": (alpha158_vma_10, 10, ("volume",)),
1256
+ "alpha158_vma_20": (alpha158_vma_20, 20, ("volume",)),
1257
+ "alpha158_vma_30": (alpha158_vma_30, 30, ("volume",)),
1258
+ "alpha158_vma_60": (alpha158_vma_60, 60, ("volume",)),
1259
+ "alpha158_vstd_5": (alpha158_vstd_5, 5, ("volume",)),
1260
+ "alpha158_vstd_10": (alpha158_vstd_10, 10, ("volume",)),
1261
+ "alpha158_vstd_20": (alpha158_vstd_20, 20, ("volume",)),
1262
+ "alpha158_vstd_30": (alpha158_vstd_30, 30, ("volume",)),
1263
+ "alpha158_vstd_60": (alpha158_vstd_60, 60, ("volume",)),
1264
+ "alpha158_wvma_5": (alpha158_wvma_5, 6, ("close", "volume")),
1265
+ "alpha158_wvma_10": (alpha158_wvma_10, 11, ("close", "volume")),
1266
+ "alpha158_wvma_20": (alpha158_wvma_20, 21, ("close", "volume")),
1267
+ "alpha158_wvma_30": (alpha158_wvma_30, 31, ("close", "volume")),
1268
+ "alpha158_wvma_60": (alpha158_wvma_60, 61, ("close", "volume")),
1269
+ "alpha158_vsump_5": (alpha158_vsump_5, 6, ("volume",)),
1270
+ "alpha158_vsump_10": (alpha158_vsump_10, 11, ("volume",)),
1271
+ "alpha158_vsump_20": (alpha158_vsump_20, 21, ("volume",)),
1272
+ "alpha158_vsump_30": (alpha158_vsump_30, 31, ("volume",)),
1273
+ "alpha158_vsump_60": (alpha158_vsump_60, 61, ("volume",)),
1274
+ "alpha158_vsumn_5": (alpha158_vsumn_5, 6, ("volume",)),
1275
+ "alpha158_vsumn_10": (alpha158_vsumn_10, 11, ("volume",)),
1276
+ "alpha158_vsumn_20": (alpha158_vsumn_20, 21, ("volume",)),
1277
+ "alpha158_vsumn_30": (alpha158_vsumn_30, 31, ("volume",)),
1278
+ "alpha158_vsumn_60": (alpha158_vsumn_60, 61, ("volume",)),
1279
+ "alpha158_vsumd_5": (alpha158_vsumd_5, 6, ("volume",)),
1280
+ "alpha158_vsumd_10": (alpha158_vsumd_10, 11, ("volume",)),
1281
+ "alpha158_vsumd_20": (alpha158_vsumd_20, 21, ("volume",)),
1282
+ "alpha158_vsumd_30": (alpha158_vsumd_30, 31, ("volume",)),
1283
+ "alpha158_vsumd_60": (alpha158_vsumd_60, 61, ("volume",)),
1284
+ }