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,1095 @@
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.arithmetic_operator import (
8
+ abs,
9
+ log,
10
+ pow1,
11
+ pow2,
12
+ quesval,
13
+ quesval2,
14
+ sign,
15
+ )
16
+ from quant_core.app.factor.computation.operators.cross_section_operator import cs_rank, cs_scale
17
+ from quant_core.app.factor.computation.operators.time_series_operator import (
18
+ ts_argmax,
19
+ ts_argmin,
20
+ ts_corr,
21
+ ts_cov,
22
+ ts_decay_linear,
23
+ ts_delay,
24
+ ts_delta,
25
+ ts_greater,
26
+ ts_less,
27
+ ts_max,
28
+ ts_mean,
29
+ ts_min,
30
+ ts_product,
31
+ ts_rank,
32
+ ts_std,
33
+ ts_sum,
34
+ )
35
+ from quant_core.app.factor.computation.panel_expression import PanelExpression
36
+
37
+ UNSUPPORTED_ALPHA101 = (48, 56, 58, 59, 63, 67, 69, 70, 76, 79, 80, 82, 87, 89, 90, 91, 93, 97, 100)
38
+
39
+
40
+ def alpha101_alpha1(fields: dict[str, PanelExpression]) -> PanelExpression:
41
+ """固定参考版本的 alpha101/alpha1 特征。"""
42
+ close = fields["close"]
43
+ return (
44
+ cs_rank(
45
+ ts_argmax(
46
+ pow1(
47
+ quesval(
48
+ 0,
49
+ (close / ts_delay(close, 1) - 1),
50
+ close,
51
+ ts_std((close / ts_delay(close, 1) - 1), 20),
52
+ ),
53
+ 2.0,
54
+ ),
55
+ 5,
56
+ )
57
+ )
58
+ - 0.5
59
+ )
60
+
61
+
62
+ def alpha101_alpha2(fields: dict[str, PanelExpression]) -> PanelExpression:
63
+ """固定参考版本的 alpha101/alpha2 特征。"""
64
+ close = fields["close"]
65
+ open = fields["open"]
66
+ volume = fields["volume"]
67
+ return (-1) * ts_corr(cs_rank(ts_delta(log(volume), 2)), cs_rank((close - open) / open), 6)
68
+
69
+
70
+ def alpha101_alpha3(fields: dict[str, PanelExpression]) -> PanelExpression:
71
+ """固定参考版本的 alpha101/alpha3 特征。"""
72
+ open = fields["open"]
73
+ volume = fields["volume"]
74
+ return ts_corr(cs_rank(open), cs_rank(volume), 10) * -1
75
+
76
+
77
+ def alpha101_alpha4(fields: dict[str, PanelExpression]) -> PanelExpression:
78
+ """固定参考版本的 alpha101/alpha4 特征。"""
79
+ low = fields["low"]
80
+ return -1 * ts_rank(cs_rank(low), 9)
81
+
82
+
83
+ def alpha101_alpha5(fields: dict[str, PanelExpression]) -> PanelExpression:
84
+ """固定参考版本的 alpha101/alpha5 特征。"""
85
+ close = fields["close"]
86
+ open = fields["open"]
87
+ vwap = fields["vwap"]
88
+ return cs_rank(open - (ts_sum(vwap, 10) / 10)) * (-1 * abs(cs_rank(close - vwap)))
89
+
90
+
91
+ def alpha101_alpha6(fields: dict[str, PanelExpression]) -> PanelExpression:
92
+ """固定参考版本的 alpha101/alpha6 特征。"""
93
+ open = fields["open"]
94
+ volume = fields["volume"]
95
+ return (-1) * ts_corr(open, volume, 10)
96
+
97
+
98
+ def alpha101_alpha7(fields: dict[str, PanelExpression]) -> PanelExpression:
99
+ """固定参考版本的 alpha101/alpha7 特征。"""
100
+ close = fields["close"]
101
+ volume = fields["volume"]
102
+ return quesval2(
103
+ ts_mean(volume, 20),
104
+ volume,
105
+ (-1 * ts_rank(abs(close - ts_delay(close, 7)), 60)) * sign(ts_delta(close, 7)),
106
+ -1,
107
+ )
108
+
109
+
110
+ def alpha101_alpha8(fields: dict[str, PanelExpression]) -> PanelExpression:
111
+ """固定参考版本的 alpha101/alpha8 特征。"""
112
+ close = fields["close"]
113
+ open = fields["open"]
114
+ return -1 * cs_rank(
115
+ (ts_sum(open, 5) * ts_sum((close / ts_delay(close, 1) - 1), 5))
116
+ - ts_delay((ts_sum(open, 5) * ts_sum((close / ts_delay(close, 1) - 1), 5)), 10)
117
+ )
118
+
119
+
120
+ def alpha101_alpha9(fields: dict[str, PanelExpression]) -> PanelExpression:
121
+ """固定参考版本的 alpha101/alpha9 特征。"""
122
+ close = fields["close"]
123
+ return quesval(
124
+ 0,
125
+ ts_min(ts_delta(close, 1), 5),
126
+ ts_delta(close, 1),
127
+ quesval(0, ts_max(ts_delta(close, 1), 5), (-1 * ts_delta(close, 1)), ts_delta(close, 1)),
128
+ )
129
+
130
+
131
+ def alpha101_alpha10(fields: dict[str, PanelExpression]) -> PanelExpression:
132
+ """固定参考版本的 alpha101/alpha10 特征。"""
133
+ close = fields["close"]
134
+ return cs_rank(
135
+ quesval(
136
+ 0,
137
+ ts_min(ts_delta(close, 1), 4),
138
+ ts_delta(close, 1),
139
+ quesval(
140
+ 0, ts_max(ts_delta(close, 1), 4), (-1 * ts_delta(close, 1)), ts_delta(close, 1)
141
+ ),
142
+ )
143
+ )
144
+
145
+
146
+ def alpha101_alpha11(fields: dict[str, PanelExpression]) -> PanelExpression:
147
+ """固定参考版本的 alpha101/alpha11 特征。"""
148
+ close = fields["close"]
149
+ volume = fields["volume"]
150
+ vwap = fields["vwap"]
151
+ return (cs_rank(ts_max(vwap - close, 3)) + cs_rank(ts_min(vwap - close, 3))) * cs_rank(
152
+ ts_delta(volume, 3)
153
+ )
154
+
155
+
156
+ def alpha101_alpha12(fields: dict[str, PanelExpression]) -> PanelExpression:
157
+ """固定参考版本的 alpha101/alpha12 特征。"""
158
+ close = fields["close"]
159
+ volume = fields["volume"]
160
+ return sign(ts_delta(volume, 1)) * (-1 * ts_delta(close, 1))
161
+
162
+
163
+ def alpha101_alpha13(fields: dict[str, PanelExpression]) -> PanelExpression:
164
+ """固定参考版本的 alpha101/alpha13 特征。"""
165
+ close = fields["close"]
166
+ volume = fields["volume"]
167
+ return -1 * cs_rank(ts_cov(cs_rank(close), cs_rank(volume), 5))
168
+
169
+
170
+ def alpha101_alpha14(fields: dict[str, PanelExpression]) -> PanelExpression:
171
+ """固定参考版本的 alpha101/alpha14 特征。"""
172
+ close = fields["close"]
173
+ open = fields["open"]
174
+ volume = fields["volume"]
175
+ return (
176
+ -1
177
+ * cs_rank((close / ts_delay(close, 1) - 1) - ts_delay((close / ts_delay(close, 1) - 1), 3))
178
+ ) * ts_corr(open, volume, 10)
179
+
180
+
181
+ def alpha101_alpha15(fields: dict[str, PanelExpression]) -> PanelExpression:
182
+ """固定参考版本的 alpha101/alpha15 特征。"""
183
+ high = fields["high"]
184
+ volume = fields["volume"]
185
+ return -1 * ts_sum(cs_rank(ts_corr(cs_rank(high), cs_rank(volume), 3)), 3)
186
+
187
+
188
+ def alpha101_alpha16(fields: dict[str, PanelExpression]) -> PanelExpression:
189
+ """固定参考版本的 alpha101/alpha16 特征。"""
190
+ high = fields["high"]
191
+ volume = fields["volume"]
192
+ return -1 * cs_rank(ts_cov(cs_rank(high), cs_rank(volume), 5))
193
+
194
+
195
+ def alpha101_alpha17(fields: dict[str, PanelExpression]) -> PanelExpression:
196
+ """固定参考版本的 alpha101/alpha17 特征。"""
197
+ close = fields["close"]
198
+ volume = fields["volume"]
199
+ return (
200
+ (-1 * cs_rank(ts_rank(close, 10)))
201
+ * cs_rank(close - 2 * ts_delay(close, 1) + ts_delay(close, 2))
202
+ * cs_rank(ts_rank(volume / ts_mean(volume, 20), 5))
203
+ )
204
+
205
+
206
+ def alpha101_alpha18(fields: dict[str, PanelExpression]) -> PanelExpression:
207
+ """固定参考版本的 alpha101/alpha18 特征。"""
208
+ close = fields["close"]
209
+ open = fields["open"]
210
+ return -1 * cs_rank((ts_std(abs(close - open), 5) + (close - open)) + ts_corr(close, open, 10))
211
+
212
+
213
+ def alpha101_alpha19(fields: dict[str, PanelExpression]) -> PanelExpression:
214
+ """固定参考版本的 alpha101/alpha19 特征。"""
215
+ close = fields["close"]
216
+ return (-1 * sign(ts_delta(close, 7) + (close - ts_delay(close, 7)))) * (
217
+ cs_rank(ts_sum((close / ts_delay(close, 1) - 1), 250) + 1) + 1
218
+ )
219
+
220
+
221
+ def alpha101_alpha20(fields: dict[str, PanelExpression]) -> PanelExpression:
222
+ """固定参考版本的 alpha101/alpha20 特征。"""
223
+ close = fields["close"]
224
+ high = fields["high"]
225
+ low = fields["low"]
226
+ open = fields["open"]
227
+ return (
228
+ (-1 * cs_rank(open - ts_delay(high, 1)))
229
+ * cs_rank(open - ts_delay(close, 1))
230
+ * cs_rank(open - ts_delay(low, 1))
231
+ )
232
+
233
+
234
+ def alpha101_alpha21(fields: dict[str, PanelExpression]) -> PanelExpression:
235
+ """固定参考版本的 alpha101/alpha21 特征。"""
236
+ close = fields["close"]
237
+ volume = fields["volume"]
238
+ return quesval2(
239
+ (ts_mean(close, 8) + ts_std(close, 8)),
240
+ ts_mean(close, 2),
241
+ -1,
242
+ quesval2(
243
+ ts_mean(close, 2),
244
+ (ts_mean(close, 8) - ts_std(close, 8)),
245
+ 1,
246
+ quesval(1, (volume / ts_mean(volume, 20)), 1, -1),
247
+ ),
248
+ )
249
+
250
+
251
+ def alpha101_alpha22(fields: dict[str, PanelExpression]) -> PanelExpression:
252
+ """固定参考版本的 alpha101/alpha22 特征。"""
253
+ close = fields["close"]
254
+ high = fields["high"]
255
+ volume = fields["volume"]
256
+ return -1 * ts_delta(ts_corr(high, volume, 5), 5) * cs_rank(ts_std(close, 20))
257
+
258
+
259
+ def alpha101_alpha23(fields: dict[str, PanelExpression]) -> PanelExpression:
260
+ """固定参考版本的 alpha101/alpha23 特征。"""
261
+ high = fields["high"]
262
+ return quesval2(ts_mean(high, 20), high, -1 * ts_delta(high, 2), 0)
263
+
264
+
265
+ def alpha101_alpha24(fields: dict[str, PanelExpression]) -> PanelExpression:
266
+ """固定参考版本的 alpha101/alpha24 特征。"""
267
+ close = fields["close"]
268
+ return quesval(
269
+ 0.05,
270
+ ts_delta(ts_sum(close, 100) / 100, 100) / ts_delay(close, 100),
271
+ (-1 * ts_delta(close, 3)),
272
+ (-1 * (close - ts_min(close, 100))),
273
+ )
274
+
275
+
276
+ def alpha101_alpha25(fields: dict[str, PanelExpression]) -> PanelExpression:
277
+ """固定参考版本的 alpha101/alpha25 特征。"""
278
+ close = fields["close"]
279
+ high = fields["high"]
280
+ volume = fields["volume"]
281
+ vwap = fields["vwap"]
282
+ return cs_rank(
283
+ (-1 * (close / ts_delay(close, 1) - 1)) * ts_mean(volume, 20) * vwap * (high - close)
284
+ )
285
+
286
+
287
+ def alpha101_alpha26(fields: dict[str, PanelExpression]) -> PanelExpression:
288
+ """固定参考版本的 alpha101/alpha26 特征。"""
289
+ high = fields["high"]
290
+ volume = fields["volume"]
291
+ return -1 * ts_max(ts_corr(ts_rank(volume, 5), ts_rank(high, 5), 5), 3)
292
+
293
+
294
+ def alpha101_alpha27(fields: dict[str, PanelExpression]) -> PanelExpression:
295
+ """固定参考版本的 alpha101/alpha27 特征。"""
296
+ volume = fields["volume"]
297
+ vwap = fields["vwap"]
298
+ return quesval(0.5, cs_rank(ts_mean(ts_corr(cs_rank(volume), cs_rank(vwap), 6), 2)), -1, 1)
299
+
300
+
301
+ def alpha101_alpha28(fields: dict[str, PanelExpression]) -> PanelExpression:
302
+ """固定参考版本的 alpha101/alpha28 特征。"""
303
+ close = fields["close"]
304
+ high = fields["high"]
305
+ low = fields["low"]
306
+ volume = fields["volume"]
307
+ return cs_scale(ts_corr(ts_mean(volume, 20), low, 5) + (high + low) / 2 - close)
308
+
309
+
310
+ def alpha101_alpha29(fields: dict[str, PanelExpression]) -> PanelExpression:
311
+ """固定参考版本的 alpha101/alpha29 特征。"""
312
+ close = fields["close"]
313
+ return ts_min(
314
+ ts_product(
315
+ cs_rank(
316
+ cs_rank(
317
+ cs_scale(
318
+ log(
319
+ ts_sum(
320
+ ts_min(cs_rank(cs_rank(-1 * cs_rank(ts_delta((close - 1), 5)))), 2),
321
+ 1,
322
+ )
323
+ )
324
+ )
325
+ )
326
+ ),
327
+ 1,
328
+ ),
329
+ 5,
330
+ ) + ts_rank(ts_delay((-1 * (close / ts_delay(close, 1) - 1)), 6), 5)
331
+
332
+
333
+ def alpha101_alpha30(fields: dict[str, PanelExpression]) -> PanelExpression:
334
+ """固定参考版本的 alpha101/alpha30 特征。"""
335
+ close = fields["close"]
336
+ volume = fields["volume"]
337
+ return (
338
+ (
339
+ cs_rank(
340
+ sign(close - ts_delay(close, 1))
341
+ + sign(ts_delay(close, 1) - ts_delay(close, 2))
342
+ + sign(ts_delay(close, 2) - ts_delay(close, 3))
343
+ )
344
+ * -1
345
+ + 1
346
+ )
347
+ * ts_sum(volume, 5)
348
+ ) / ts_sum(volume, 20)
349
+
350
+
351
+ def alpha101_alpha31(fields: dict[str, PanelExpression]) -> PanelExpression:
352
+ """固定参考版本的 alpha101/alpha31 特征。"""
353
+ close = fields["close"]
354
+ low = fields["low"]
355
+ volume = fields["volume"]
356
+ return (
357
+ cs_rank(cs_rank(cs_rank(ts_decay_linear((-1) * cs_rank(cs_rank(ts_delta(close, 10))), 10))))
358
+ + cs_rank((-1) * ts_delta(close, 3))
359
+ ) + sign(cs_scale(ts_corr(ts_mean(volume, 20), low, 12)))
360
+
361
+
362
+ def alpha101_alpha32(fields: dict[str, PanelExpression]) -> PanelExpression:
363
+ """固定参考版本的 alpha101/alpha32 特征。"""
364
+ close = fields["close"]
365
+ vwap = fields["vwap"]
366
+ return cs_scale(ts_sum(close, 7) / 7 - close) + (
367
+ 20 * cs_scale(ts_corr(vwap, ts_delay(close, 5), 230))
368
+ )
369
+
370
+
371
+ def alpha101_alpha33(fields: dict[str, PanelExpression]) -> PanelExpression:
372
+ """固定参考版本的 alpha101/alpha33 特征。"""
373
+ close = fields["close"]
374
+ open = fields["open"]
375
+ return cs_rank((-1) * (open / close * -1 + 1))
376
+
377
+
378
+ def alpha101_alpha34(fields: dict[str, PanelExpression]) -> PanelExpression:
379
+ """固定参考版本的 alpha101/alpha34 特征。"""
380
+ close = fields["close"]
381
+ return cs_rank(
382
+ (
383
+ cs_rank(
384
+ ts_std((close / ts_delay(close, 1) - 1), 2)
385
+ / ts_std((close / ts_delay(close, 1) - 1), 5)
386
+ )
387
+ * -1
388
+ + 1
389
+ )
390
+ + (cs_rank(ts_delta(close, 1)) * -1 + 1)
391
+ )
392
+
393
+
394
+ def alpha101_alpha35(fields: dict[str, PanelExpression]) -> PanelExpression:
395
+ """固定参考版本的 alpha101/alpha35 特征。"""
396
+ close = fields["close"]
397
+ high = fields["high"]
398
+ low = fields["low"]
399
+ volume = fields["volume"]
400
+ return (ts_rank(volume, 32) * (ts_rank((close + high - low), 16) * -1 + 1)) * (
401
+ ts_rank((close / ts_delay(close, 1) - 1), 32) * -1 + 1
402
+ )
403
+
404
+
405
+ def alpha101_alpha36(fields: dict[str, PanelExpression]) -> PanelExpression:
406
+ """固定参考版本的 alpha101/alpha36 特征。"""
407
+ close = fields["close"]
408
+ open = fields["open"]
409
+ volume = fields["volume"]
410
+ vwap = fields["vwap"]
411
+ return (
412
+ (
413
+ (
414
+ (2.21 * cs_rank(ts_corr((close - open), ts_delay(volume, 1), 15)))
415
+ + (0.7 * cs_rank((open - close)))
416
+ )
417
+ + (0.73 * cs_rank(ts_rank(ts_delay((-1) * (close / ts_delay(close, 1) - 1), 6), 5)))
418
+ )
419
+ + cs_rank(abs(ts_corr(vwap, ts_mean(volume, 20), 6)))
420
+ ) + (0.6 * cs_rank((ts_sum(close, 200) / 200 - open) * (close - open)))
421
+
422
+
423
+ def alpha101_alpha37(fields: dict[str, PanelExpression]) -> PanelExpression:
424
+ """固定参考版本的 alpha101/alpha37 特征。"""
425
+ close = fields["close"]
426
+ open = fields["open"]
427
+ return cs_rank(ts_corr(ts_delay((open - close), 1), close, 200)) + cs_rank(open - close)
428
+
429
+
430
+ def alpha101_alpha38(fields: dict[str, PanelExpression]) -> PanelExpression:
431
+ """固定参考版本的 alpha101/alpha38 特征。"""
432
+ close = fields["close"]
433
+ open = fields["open"]
434
+ return ((-1) * cs_rank(ts_rank(close, 10))) * cs_rank(close / open)
435
+
436
+
437
+ def alpha101_alpha39(fields: dict[str, PanelExpression]) -> PanelExpression:
438
+ """固定参考版本的 alpha101/alpha39 特征。"""
439
+ close = fields["close"]
440
+ volume = fields["volume"]
441
+ return (
442
+ (-1)
443
+ * cs_rank(
444
+ ts_delta(close, 7)
445
+ * (cs_rank(ts_decay_linear((volume / ts_mean(volume, 20)), 9)) * -1 + 1)
446
+ )
447
+ ) * (cs_rank(ts_sum((close / ts_delay(close, 1) - 1), 250)) + 1)
448
+
449
+
450
+ def alpha101_alpha40(fields: dict[str, PanelExpression]) -> PanelExpression:
451
+ """固定参考版本的 alpha101/alpha40 特征。"""
452
+ high = fields["high"]
453
+ volume = fields["volume"]
454
+ return ((-1) * cs_rank(ts_std(high, 10))) * ts_corr(high, volume, 10)
455
+
456
+
457
+ def alpha101_alpha41(fields: dict[str, PanelExpression]) -> PanelExpression:
458
+ """固定参考版本的 alpha101/alpha41 特征。"""
459
+ high = fields["high"]
460
+ low = fields["low"]
461
+ vwap = fields["vwap"]
462
+ return pow1((high * low), 0.5) - vwap
463
+
464
+
465
+ def alpha101_alpha42(fields: dict[str, PanelExpression]) -> PanelExpression:
466
+ """固定参考版本的 alpha101/alpha42 特征。"""
467
+ close = fields["close"]
468
+ vwap = fields["vwap"]
469
+ return cs_rank(vwap - close) / cs_rank(vwap + close)
470
+
471
+
472
+ def alpha101_alpha43(fields: dict[str, PanelExpression]) -> PanelExpression:
473
+ """固定参考版本的 alpha101/alpha43 特征。"""
474
+ close = fields["close"]
475
+ volume = fields["volume"]
476
+ return ts_rank((volume / ts_mean(volume, 20)), 20) * ts_rank((-1) * ts_delta(close, 7), 8)
477
+
478
+
479
+ def alpha101_alpha44(fields: dict[str, PanelExpression]) -> PanelExpression:
480
+ """固定参考版本的 alpha101/alpha44 特征。"""
481
+ high = fields["high"]
482
+ volume = fields["volume"]
483
+ return (-1) * ts_corr(high, cs_rank(volume), 5)
484
+
485
+
486
+ def alpha101_alpha45(fields: dict[str, PanelExpression]) -> PanelExpression:
487
+ """固定参考版本的 alpha101/alpha45 特征。"""
488
+ close = fields["close"]
489
+ volume = fields["volume"]
490
+ return (
491
+ (-1)
492
+ * cs_rank(ts_sum(ts_delay(close, 5), 20) / 20)
493
+ * ts_corr(close, volume, 2)
494
+ * cs_rank(ts_corr(ts_sum(close, 5), ts_sum(close, 20), 2))
495
+ )
496
+
497
+
498
+ def alpha101_alpha46(fields: dict[str, PanelExpression]) -> PanelExpression:
499
+ """固定参考版本的 alpha101/alpha46 特征。"""
500
+ close = fields["close"]
501
+ return quesval(
502
+ 0.25,
503
+ ((ts_delay(close, 20) - ts_delay(close, 10)) / 10 - (ts_delay(close, 10) - close) / 10),
504
+ -1,
505
+ quesval(
506
+ 0,
507
+ ((ts_delay(close, 20) - ts_delay(close, 10)) / 10 - (ts_delay(close, 10) - close) / 10),
508
+ (-1) * (close - ts_delay(close, 1)),
509
+ 1,
510
+ ),
511
+ )
512
+
513
+
514
+ def alpha101_alpha47(fields: dict[str, PanelExpression]) -> PanelExpression:
515
+ """固定参考版本的 alpha101/alpha47 特征。"""
516
+ close = fields["close"]
517
+ high = fields["high"]
518
+ volume = fields["volume"]
519
+ vwap = fields["vwap"]
520
+ return (
521
+ (cs_rank(pow1(close, -1)) * volume / ts_mean(volume, 20))
522
+ * (high * cs_rank(high - close))
523
+ / (ts_sum(high, 5) / 5)
524
+ ) - cs_rank(vwap - ts_delay(vwap, 5))
525
+
526
+
527
+ def alpha101_alpha49(fields: dict[str, PanelExpression]) -> PanelExpression:
528
+ """固定参考版本的 alpha101/alpha49 特征。"""
529
+ close = fields["close"]
530
+ return quesval(
531
+ -0.1,
532
+ ((ts_delay(close, 20) - ts_delay(close, 10)) / 10 - (ts_delay(close, 10) - close) / 10),
533
+ (-1) * (close - ts_delay(close, 1)),
534
+ 1,
535
+ )
536
+
537
+
538
+ def alpha101_alpha50(fields: dict[str, PanelExpression]) -> PanelExpression:
539
+ """固定参考版本的 alpha101/alpha50 特征。"""
540
+ volume = fields["volume"]
541
+ vwap = fields["vwap"]
542
+ return (-1) * ts_max(cs_rank(ts_corr(cs_rank(volume), cs_rank(vwap), 5)), 5)
543
+
544
+
545
+ def alpha101_alpha51(fields: dict[str, PanelExpression]) -> PanelExpression:
546
+ """固定参考版本的 alpha101/alpha51 特征。"""
547
+ close = fields["close"]
548
+ return quesval(
549
+ -0.05,
550
+ ((ts_delay(close, 20) - ts_delay(close, 10)) / 10 - (ts_delay(close, 10) - close) / 10),
551
+ (-1) * (close - ts_delay(close, 1)),
552
+ 1,
553
+ )
554
+
555
+
556
+ def alpha101_alpha52(fields: dict[str, PanelExpression]) -> PanelExpression:
557
+ """固定参考版本的 alpha101/alpha52 特征。"""
558
+ close = fields["close"]
559
+ low = fields["low"]
560
+ volume = fields["volume"]
561
+ return (
562
+ (((-1) * ts_min(low, 5)) + ts_delay(ts_min(low, 5), 5))
563
+ * cs_rank(
564
+ (
565
+ ts_sum((close / ts_delay(close, 1) - 1), 240)
566
+ - ts_sum((close / ts_delay(close, 1) - 1), 20)
567
+ )
568
+ / 220
569
+ )
570
+ * ts_rank(volume, 5)
571
+ )
572
+
573
+
574
+ def alpha101_alpha53(fields: dict[str, PanelExpression]) -> PanelExpression:
575
+ """固定参考版本的 alpha101/alpha53 特征。"""
576
+ close = fields["close"]
577
+ high = fields["high"]
578
+ low = fields["low"]
579
+ return (-1) * ts_delta(((close - low) - (high - close)) / (close - low), 9)
580
+
581
+
582
+ def alpha101_alpha54(fields: dict[str, PanelExpression]) -> PanelExpression:
583
+ """固定参考版本的 alpha101/alpha54 特征。"""
584
+ close = fields["close"]
585
+ high = fields["high"]
586
+ low = fields["low"]
587
+ open = fields["open"]
588
+ return ((-1) * ((low - close) * pow1(open, 5))) / ((low - high) * pow1(close, 5))
589
+
590
+
591
+ def alpha101_alpha55(fields: dict[str, PanelExpression]) -> PanelExpression:
592
+ """固定参考版本的 alpha101/alpha55 特征。"""
593
+ close = fields["close"]
594
+ high = fields["high"]
595
+ low = fields["low"]
596
+ volume = fields["volume"]
597
+ return (-1) * ts_corr(
598
+ cs_rank((close - ts_min(low, 12)) / (ts_max(high, 12) - ts_min(low, 12))),
599
+ cs_rank(volume),
600
+ 6,
601
+ )
602
+
603
+
604
+ def alpha101_alpha57(fields: dict[str, PanelExpression]) -> PanelExpression:
605
+ """固定参考版本的 alpha101/alpha57 特征。"""
606
+ close = fields["close"]
607
+ vwap = fields["vwap"]
608
+ return -1 * ((close - vwap) / ts_decay_linear(cs_rank(ts_argmax(close, 30)), 2))
609
+
610
+
611
+ def alpha101_alpha60(fields: dict[str, PanelExpression]) -> PanelExpression:
612
+ """固定参考版本的 alpha101/alpha60 特征。"""
613
+ close = fields["close"]
614
+ high = fields["high"]
615
+ low = fields["low"]
616
+ volume = fields["volume"]
617
+ return -1 * (
618
+ (2 * cs_scale(cs_rank((((close - low) - (high - close)) / (high - low)) * volume)))
619
+ - cs_scale(cs_rank(ts_argmax(close, 10)))
620
+ )
621
+
622
+
623
+ def alpha101_alpha61(fields: dict[str, PanelExpression]) -> PanelExpression:
624
+ """固定参考版本的 alpha101/alpha61 特征。"""
625
+ volume = fields["volume"]
626
+ vwap = fields["vwap"]
627
+ return quesval2(
628
+ cs_rank(vwap - ts_min(vwap, 16)), cs_rank(ts_corr(vwap, ts_mean(volume, 180), 18)), 1, 0
629
+ )
630
+
631
+
632
+ def alpha101_alpha62(fields: dict[str, PanelExpression]) -> PanelExpression:
633
+ """固定参考版本的 alpha101/alpha62 特征。"""
634
+ high = fields["high"]
635
+ low = fields["low"]
636
+ open = fields["open"]
637
+ volume = fields["volume"]
638
+ vwap = fields["vwap"]
639
+ return (
640
+ cs_rank(ts_corr(vwap, ts_sum(ts_mean(volume, 20), 22), 10))
641
+ < cs_rank((cs_rank(open) + cs_rank(open)) < (cs_rank((high + low) / 2) + cs_rank(high)))
642
+ ) * -1
643
+
644
+
645
+ def alpha101_alpha64(fields: dict[str, PanelExpression]) -> PanelExpression:
646
+ """固定参考版本的 alpha101/alpha64 特征。"""
647
+ high = fields["high"]
648
+ low = fields["low"]
649
+ open = fields["open"]
650
+ volume = fields["volume"]
651
+ vwap = fields["vwap"]
652
+ return (
653
+ cs_rank(
654
+ ts_corr(
655
+ ts_sum(((open * 0.178404) + (low * (1 - 0.178404))), 13),
656
+ ts_sum(ts_mean(volume, 120), 13),
657
+ 17,
658
+ )
659
+ )
660
+ < cs_rank(ts_delta((((high + low) / 2 * 0.178404) + (vwap * (1 - 0.178404))), 4))
661
+ ) * -1
662
+
663
+
664
+ def alpha101_alpha65(fields: dict[str, PanelExpression]) -> PanelExpression:
665
+ """固定参考版本的 alpha101/alpha65 特征。"""
666
+ open = fields["open"]
667
+ volume = fields["volume"]
668
+ vwap = fields["vwap"]
669
+ return (
670
+ cs_rank(
671
+ ts_corr(
672
+ ((open * 0.00817205) + (vwap * (1 - 0.00817205))), ts_sum(ts_mean(volume, 60), 9), 6
673
+ )
674
+ )
675
+ < cs_rank(open - ts_min(open, 14))
676
+ ) * -1
677
+
678
+
679
+ def alpha101_alpha66(fields: dict[str, PanelExpression]) -> PanelExpression:
680
+ """固定参考版本的 alpha101/alpha66 特征。"""
681
+ high = fields["high"]
682
+ low = fields["low"]
683
+ open = fields["open"]
684
+ vwap = fields["vwap"]
685
+ return (
686
+ cs_rank(ts_decay_linear(ts_delta(vwap, 4), 7))
687
+ + ts_rank(
688
+ ts_decay_linear(
689
+ (((low * 0.96633) + (low * (1 - 0.96633))) - vwap) / (open - ((high + low) / 2)), 11
690
+ ),
691
+ 7,
692
+ )
693
+ ) * -1
694
+
695
+
696
+ def alpha101_alpha68(fields: dict[str, PanelExpression]) -> PanelExpression:
697
+ """固定参考版本的 alpha101/alpha68 特征。"""
698
+ close = fields["close"]
699
+ high = fields["high"]
700
+ low = fields["low"]
701
+ volume = fields["volume"]
702
+ return (
703
+ ts_rank(ts_corr(cs_rank(high), cs_rank(ts_mean(volume, 15)), 9), 14)
704
+ < cs_rank(ts_delta((close * 0.518371 + low * (1 - 0.518371)), 1))
705
+ ) * -1
706
+
707
+
708
+ def alpha101_alpha71(fields: dict[str, PanelExpression]) -> PanelExpression:
709
+ """固定参考版本的 alpha101/alpha71 特征。"""
710
+ close = fields["close"]
711
+ low = fields["low"]
712
+ open = fields["open"]
713
+ volume = fields["volume"]
714
+ vwap = fields["vwap"]
715
+ return ts_greater(
716
+ ts_rank(
717
+ ts_decay_linear(ts_corr(ts_rank(close, 3), ts_rank(ts_mean(volume, 180), 12), 18), 4),
718
+ 16,
719
+ ),
720
+ ts_rank(ts_decay_linear(pow1(cs_rank((low + open) - (vwap + vwap)), 2), 16), 4),
721
+ )
722
+
723
+
724
+ def alpha101_alpha72(fields: dict[str, PanelExpression]) -> PanelExpression:
725
+ """固定参考版本的 alpha101/alpha72 特征。"""
726
+ high = fields["high"]
727
+ low = fields["low"]
728
+ volume = fields["volume"]
729
+ vwap = fields["vwap"]
730
+ return cs_rank(
731
+ ts_decay_linear(ts_corr((high + low) / 2, ts_mean(volume, 40), 9), 10)
732
+ ) / cs_rank(ts_decay_linear(ts_corr(ts_rank(vwap, 4), ts_rank(volume, 19), 7), 3))
733
+
734
+
735
+ def alpha101_alpha73(fields: dict[str, PanelExpression]) -> PanelExpression:
736
+ """固定参考版本的 alpha101/alpha73 特征。"""
737
+ low = fields["low"]
738
+ open = fields["open"]
739
+ vwap = fields["vwap"]
740
+ return (
741
+ ts_greater(
742
+ cs_rank(ts_decay_linear(ts_delta(vwap, 5), 3)),
743
+ ts_rank(
744
+ ts_decay_linear(
745
+ (
746
+ ts_delta(open * 0.147155 + low * 0.852845, 2)
747
+ / (open * 0.147155 + low * 0.852845)
748
+ )
749
+ * -1,
750
+ 3,
751
+ ),
752
+ 17,
753
+ ),
754
+ )
755
+ * -1
756
+ )
757
+
758
+
759
+ def alpha101_alpha74(fields: dict[str, PanelExpression]) -> PanelExpression:
760
+ """固定参考版本的 alpha101/alpha74 特征。"""
761
+ close = fields["close"]
762
+ high = fields["high"]
763
+ volume = fields["volume"]
764
+ vwap = fields["vwap"]
765
+ return (
766
+ quesval2(
767
+ cs_rank(ts_corr(close, ts_sum(ts_mean(volume, 30), 37), 15)),
768
+ cs_rank(ts_corr(cs_rank(high * 0.0261661 + vwap * 0.9738339), cs_rank(volume), 11)),
769
+ 1,
770
+ 0,
771
+ )
772
+ * -1
773
+ )
774
+
775
+
776
+ def alpha101_alpha75(fields: dict[str, PanelExpression]) -> PanelExpression:
777
+ """固定参考版本的 alpha101/alpha75 特征。"""
778
+ low = fields["low"]
779
+ volume = fields["volume"]
780
+ vwap = fields["vwap"]
781
+ return quesval2(
782
+ cs_rank(ts_corr(vwap, volume, 4)),
783
+ cs_rank(ts_corr(cs_rank(low), cs_rank(ts_mean(volume, 50)), 12)),
784
+ 1,
785
+ 0,
786
+ )
787
+
788
+
789
+ def alpha101_alpha77(fields: dict[str, PanelExpression]) -> PanelExpression:
790
+ """固定参考版本的 alpha101/alpha77 特征。"""
791
+ high = fields["high"]
792
+ low = fields["low"]
793
+ volume = fields["volume"]
794
+ vwap = fields["vwap"]
795
+ return ts_less(
796
+ cs_rank(ts_decay_linear((((high + low) / 2 + high) - (vwap + high)), 20)),
797
+ cs_rank(ts_decay_linear(ts_corr((high + low) / 2, ts_mean(volume, 40), 3), 6)),
798
+ )
799
+
800
+
801
+ def alpha101_alpha78(fields: dict[str, PanelExpression]) -> PanelExpression:
802
+ """固定参考版本的 alpha101/alpha78 特征。"""
803
+ low = fields["low"]
804
+ volume = fields["volume"]
805
+ vwap = fields["vwap"]
806
+ return pow2(
807
+ cs_rank(
808
+ ts_corr(
809
+ ts_sum((low * 0.352233) + (vwap * (1 - 0.352233)), 20),
810
+ ts_sum(ts_mean(volume, 40), 20),
811
+ 7,
812
+ )
813
+ ),
814
+ cs_rank(ts_corr(cs_rank(vwap), cs_rank(volume), 6)),
815
+ )
816
+
817
+
818
+ def alpha101_alpha81(fields: dict[str, PanelExpression]) -> PanelExpression:
819
+ """固定参考版本的 alpha101/alpha81 特征。"""
820
+ volume = fields["volume"]
821
+ vwap = fields["vwap"]
822
+ return (
823
+ quesval2(
824
+ cs_rank(
825
+ log(
826
+ ts_product(
827
+ cs_rank(
828
+ pow1(cs_rank(ts_corr(vwap, ts_sum(ts_mean(volume, 10), 50), 8)), 4)
829
+ ),
830
+ 15,
831
+ )
832
+ )
833
+ ),
834
+ cs_rank(ts_corr(cs_rank(vwap), cs_rank(volume), 5)),
835
+ 1,
836
+ 0,
837
+ )
838
+ * -1
839
+ )
840
+
841
+
842
+ def alpha101_alpha83(fields: dict[str, PanelExpression]) -> PanelExpression:
843
+ """固定参考版本的 alpha101/alpha83 特征。"""
844
+ close = fields["close"]
845
+ high = fields["high"]
846
+ low = fields["low"]
847
+ volume = fields["volume"]
848
+ vwap = fields["vwap"]
849
+ return (
850
+ cs_rank(ts_delay((high - low) / (ts_sum(close, 5) / 5), 2)) * cs_rank(cs_rank(volume))
851
+ ) / (((high - low) / (ts_sum(close, 5) / 5)) / (vwap - close))
852
+
853
+
854
+ def alpha101_alpha84(fields: dict[str, PanelExpression]) -> PanelExpression:
855
+ """固定参考版本的 alpha101/alpha84 特征。"""
856
+ close = fields["close"]
857
+ vwap = fields["vwap"]
858
+ return pow2(ts_rank(vwap - ts_max(vwap, 15), 21), ts_delta(close, 5))
859
+
860
+
861
+ def alpha101_alpha85(fields: dict[str, PanelExpression]) -> PanelExpression:
862
+ """固定参考版本的 alpha101/alpha85 特征。"""
863
+ close = fields["close"]
864
+ high = fields["high"]
865
+ low = fields["low"]
866
+ volume = fields["volume"]
867
+ return pow2(
868
+ cs_rank(ts_corr(high * 0.876703 + close * 0.123297, ts_mean(volume, 30), 10)),
869
+ cs_rank(ts_corr(ts_rank((high + low) / 2, 4), ts_rank(volume, 10), 7)),
870
+ )
871
+
872
+
873
+ def alpha101_alpha86(fields: dict[str, PanelExpression]) -> PanelExpression:
874
+ """固定参考版本的 alpha101/alpha86 特征。"""
875
+ close = fields["close"]
876
+ open = fields["open"]
877
+ volume = fields["volume"]
878
+ vwap = fields["vwap"]
879
+ return (
880
+ quesval2(
881
+ ts_rank(ts_corr(close, ts_sum(ts_mean(volume, 20), 15), 6), 20),
882
+ cs_rank((open + close) - (vwap + open)),
883
+ 1,
884
+ 0,
885
+ )
886
+ * -1
887
+ )
888
+
889
+
890
+ def alpha101_alpha88(fields: dict[str, PanelExpression]) -> PanelExpression:
891
+ """固定参考版本的 alpha101/alpha88 特征。"""
892
+ close = fields["close"]
893
+ high = fields["high"]
894
+ low = fields["low"]
895
+ open = fields["open"]
896
+ volume = fields["volume"]
897
+ return ts_less(
898
+ cs_rank(
899
+ ts_decay_linear((cs_rank(open) + cs_rank(low)) - (cs_rank(high) + cs_rank(close)), 8)
900
+ ),
901
+ ts_rank(
902
+ ts_decay_linear(ts_corr(ts_rank(close, 8), ts_rank(ts_mean(volume, 60), 21), 8), 7), 3
903
+ ),
904
+ )
905
+
906
+
907
+ def alpha101_alpha92(fields: dict[str, PanelExpression]) -> PanelExpression:
908
+ """固定参考版本的 alpha101/alpha92 特征。"""
909
+ close = fields["close"]
910
+ high = fields["high"]
911
+ low = fields["low"]
912
+ open = fields["open"]
913
+ volume = fields["volume"]
914
+ return ts_less(
915
+ ts_rank(ts_decay_linear(quesval2(((high + low) / 2 + close), (low + open), 1, 0), 15), 19),
916
+ ts_rank(ts_decay_linear(ts_corr(cs_rank(low), cs_rank(ts_mean(volume, 30)), 8), 7), 7),
917
+ )
918
+
919
+
920
+ def alpha101_alpha94(fields: dict[str, PanelExpression]) -> PanelExpression:
921
+ """固定参考版本的 alpha101/alpha94 特征。"""
922
+ volume = fields["volume"]
923
+ vwap = fields["vwap"]
924
+ return (
925
+ pow2(
926
+ cs_rank(vwap - ts_min(vwap, 12)),
927
+ ts_rank(ts_corr(ts_rank(vwap, 20), ts_rank(ts_mean(volume, 60), 4), 18), 3),
928
+ )
929
+ * -1
930
+ )
931
+
932
+
933
+ def alpha101_alpha95(fields: dict[str, PanelExpression]) -> PanelExpression:
934
+ """固定参考版本的 alpha101/alpha95 特征。"""
935
+ high = fields["high"]
936
+ low = fields["low"]
937
+ open = fields["open"]
938
+ volume = fields["volume"]
939
+ return quesval2(
940
+ cs_rank(open - ts_min(open, 12)),
941
+ ts_rank(
942
+ pow1(
943
+ cs_rank(ts_corr(ts_sum((high + low) / 2, 19), ts_sum(ts_mean(volume, 40), 19), 13)),
944
+ 5,
945
+ ),
946
+ 12,
947
+ ),
948
+ 1,
949
+ 0,
950
+ )
951
+
952
+
953
+ def alpha101_alpha96(fields: dict[str, PanelExpression]) -> PanelExpression:
954
+ """固定参考版本的 alpha101/alpha96 特征。"""
955
+ close = fields["close"]
956
+ volume = fields["volume"]
957
+ vwap = fields["vwap"]
958
+ return (
959
+ ts_greater(
960
+ ts_rank(ts_decay_linear(ts_corr(cs_rank(vwap), cs_rank(volume), 4), 4), 8),
961
+ ts_rank(
962
+ ts_decay_linear(
963
+ ts_argmax(ts_corr(ts_rank(close, 7), ts_rank(ts_mean(volume, 60), 4), 4), 13),
964
+ 14,
965
+ ),
966
+ 13,
967
+ ),
968
+ )
969
+ * -1
970
+ )
971
+
972
+
973
+ def alpha101_alpha98(fields: dict[str, PanelExpression]) -> PanelExpression:
974
+ """固定参考版本的 alpha101/alpha98 特征。"""
975
+ open = fields["open"]
976
+ volume = fields["volume"]
977
+ vwap = fields["vwap"]
978
+ return cs_rank(ts_decay_linear(ts_corr(vwap, ts_sum(ts_mean(volume, 5), 26), 5), 7)) - cs_rank(
979
+ ts_decay_linear(
980
+ ts_rank(ts_argmin(ts_corr(cs_rank(open), cs_rank(ts_mean(volume, 15)), 21), 9), 7), 8
981
+ )
982
+ )
983
+
984
+
985
+ def alpha101_alpha99(fields: dict[str, PanelExpression]) -> PanelExpression:
986
+ """固定参考版本的 alpha101/alpha99 特征。"""
987
+ high = fields["high"]
988
+ low = fields["low"]
989
+ volume = fields["volume"]
990
+ return (
991
+ quesval2(
992
+ cs_rank(ts_corr(ts_sum((high + low) / 2, 20), ts_sum(ts_mean(volume, 60), 20), 9)),
993
+ cs_rank(ts_corr(low, volume, 6)),
994
+ 1,
995
+ 0,
996
+ )
997
+ * -1
998
+ )
999
+
1000
+
1001
+ def alpha101_alpha101(fields: dict[str, PanelExpression]) -> PanelExpression:
1002
+ """固定参考版本的 alpha101/alpha101 特征。"""
1003
+ close = fields["close"]
1004
+ high = fields["high"]
1005
+ low = fields["low"]
1006
+ open = fields["open"]
1007
+ return (close - open) / ((high - low) + 0.001)
1008
+
1009
+
1010
+ ALPHA101_RECIPES: dict[
1011
+ str, tuple[Callable[[dict[str, PanelExpression]], PanelExpression], int, tuple[str, ...]]
1012
+ ] = {
1013
+ "alpha101_alpha1": (alpha101_alpha1, 25, ("close",)),
1014
+ "alpha101_alpha2": (alpha101_alpha2, 8, ("close", "open", "volume")),
1015
+ "alpha101_alpha3": (alpha101_alpha3, 10, ("open", "volume")),
1016
+ "alpha101_alpha4": (alpha101_alpha4, 9, ("low",)),
1017
+ "alpha101_alpha5": (alpha101_alpha5, 10, ("close", "open", "vwap")),
1018
+ "alpha101_alpha6": (alpha101_alpha6, 10, ("open", "volume")),
1019
+ "alpha101_alpha7": (alpha101_alpha7, 67, ("close", "volume")),
1020
+ "alpha101_alpha8": (alpha101_alpha8, 16, ("close", "open")),
1021
+ "alpha101_alpha9": (alpha101_alpha9, 6, ("close",)),
1022
+ "alpha101_alpha10": (alpha101_alpha10, 5, ("close",)),
1023
+ "alpha101_alpha11": (alpha101_alpha11, 4, ("close", "volume", "vwap")),
1024
+ "alpha101_alpha12": (alpha101_alpha12, 2, ("close", "volume")),
1025
+ "alpha101_alpha13": (alpha101_alpha13, 5, ("close", "volume")),
1026
+ "alpha101_alpha14": (alpha101_alpha14, 10, ("close", "open", "volume")),
1027
+ "alpha101_alpha15": (alpha101_alpha15, 5, ("high", "volume")),
1028
+ "alpha101_alpha16": (alpha101_alpha16, 5, ("high", "volume")),
1029
+ "alpha101_alpha17": (alpha101_alpha17, 24, ("close", "volume")),
1030
+ "alpha101_alpha18": (alpha101_alpha18, 10, ("close", "open")),
1031
+ "alpha101_alpha19": (alpha101_alpha19, 251, ("close",)),
1032
+ "alpha101_alpha20": (alpha101_alpha20, 2, ("close", "high", "low", "open")),
1033
+ "alpha101_alpha21": (alpha101_alpha21, 20, ("close", "volume")),
1034
+ "alpha101_alpha22": (alpha101_alpha22, 20, ("close", "high", "volume")),
1035
+ "alpha101_alpha23": (alpha101_alpha23, 20, ("high",)),
1036
+ "alpha101_alpha24": (alpha101_alpha24, 200, ("close",)),
1037
+ "alpha101_alpha25": (alpha101_alpha25, 20, ("close", "high", "volume", "vwap")),
1038
+ "alpha101_alpha26": (alpha101_alpha26, 11, ("high", "volume")),
1039
+ "alpha101_alpha27": (alpha101_alpha27, 7, ("volume", "vwap")),
1040
+ "alpha101_alpha28": (alpha101_alpha28, 24, ("close", "high", "low", "volume")),
1041
+ "alpha101_alpha29": (alpha101_alpha29, 12, ("close",)),
1042
+ "alpha101_alpha30": (alpha101_alpha30, 20, ("close", "volume")),
1043
+ "alpha101_alpha31": (alpha101_alpha31, 31, ("close", "low", "volume")),
1044
+ "alpha101_alpha32": (alpha101_alpha32, 235, ("close", "vwap")),
1045
+ "alpha101_alpha33": (alpha101_alpha33, 1, ("close", "open")),
1046
+ "alpha101_alpha34": (alpha101_alpha34, 6, ("close",)),
1047
+ "alpha101_alpha35": (alpha101_alpha35, 33, ("close", "high", "low", "volume")),
1048
+ "alpha101_alpha36": (alpha101_alpha36, 200, ("close", "open", "volume", "vwap")),
1049
+ "alpha101_alpha37": (alpha101_alpha37, 201, ("close", "open")),
1050
+ "alpha101_alpha38": (alpha101_alpha38, 10, ("close", "open")),
1051
+ "alpha101_alpha39": (alpha101_alpha39, 251, ("close", "volume")),
1052
+ "alpha101_alpha40": (alpha101_alpha40, 10, ("high", "volume")),
1053
+ "alpha101_alpha41": (alpha101_alpha41, 1, ("high", "low", "vwap")),
1054
+ "alpha101_alpha42": (alpha101_alpha42, 1, ("close", "vwap")),
1055
+ "alpha101_alpha43": (alpha101_alpha43, 39, ("close", "volume")),
1056
+ "alpha101_alpha44": (alpha101_alpha44, 5, ("high", "volume")),
1057
+ "alpha101_alpha45": (alpha101_alpha45, 25, ("close", "volume")),
1058
+ "alpha101_alpha46": (alpha101_alpha46, 21, ("close",)),
1059
+ "alpha101_alpha47": (alpha101_alpha47, 20, ("close", "high", "volume", "vwap")),
1060
+ "alpha101_alpha49": (alpha101_alpha49, 21, ("close",)),
1061
+ "alpha101_alpha50": (alpha101_alpha50, 9, ("volume", "vwap")),
1062
+ "alpha101_alpha51": (alpha101_alpha51, 21, ("close",)),
1063
+ "alpha101_alpha52": (alpha101_alpha52, 241, ("close", "low", "volume")),
1064
+ "alpha101_alpha53": (alpha101_alpha53, 10, ("close", "high", "low")),
1065
+ "alpha101_alpha54": (alpha101_alpha54, 1, ("close", "high", "low", "open")),
1066
+ "alpha101_alpha55": (alpha101_alpha55, 17, ("close", "high", "low", "volume")),
1067
+ "alpha101_alpha57": (alpha101_alpha57, 31, ("close", "vwap")),
1068
+ "alpha101_alpha60": (alpha101_alpha60, 10, ("close", "high", "low", "volume")),
1069
+ "alpha101_alpha61": (alpha101_alpha61, 197, ("volume", "vwap")),
1070
+ "alpha101_alpha62": (alpha101_alpha62, 50, ("high", "low", "open", "volume", "vwap")),
1071
+ "alpha101_alpha64": (alpha101_alpha64, 148, ("high", "low", "open", "volume", "vwap")),
1072
+ "alpha101_alpha65": (alpha101_alpha65, 73, ("open", "volume", "vwap")),
1073
+ "alpha101_alpha66": (alpha101_alpha66, 17, ("high", "low", "open", "vwap")),
1074
+ "alpha101_alpha68": (alpha101_alpha68, 36, ("close", "high", "low", "volume")),
1075
+ "alpha101_alpha71": (alpha101_alpha71, 226, ("close", "low", "open", "volume", "vwap")),
1076
+ "alpha101_alpha72": (alpha101_alpha72, 57, ("high", "low", "volume", "vwap")),
1077
+ "alpha101_alpha73": (alpha101_alpha73, 21, ("low", "open", "vwap")),
1078
+ "alpha101_alpha74": (alpha101_alpha74, 80, ("close", "high", "volume", "vwap")),
1079
+ "alpha101_alpha75": (alpha101_alpha75, 61, ("low", "volume", "vwap")),
1080
+ "alpha101_alpha77": (alpha101_alpha77, 47, ("high", "low", "volume", "vwap")),
1081
+ "alpha101_alpha78": (alpha101_alpha78, 65, ("low", "volume", "vwap")),
1082
+ "alpha101_alpha81": (alpha101_alpha81, 80, ("volume", "vwap")),
1083
+ "alpha101_alpha83": (alpha101_alpha83, 7, ("close", "high", "low", "volume", "vwap")),
1084
+ "alpha101_alpha84": (alpha101_alpha84, 35, ("close", "vwap")),
1085
+ "alpha101_alpha85": (alpha101_alpha85, 39, ("close", "high", "low", "volume")),
1086
+ "alpha101_alpha86": (alpha101_alpha86, 58, ("close", "open", "volume", "vwap")),
1087
+ "alpha101_alpha88": (alpha101_alpha88, 95, ("close", "high", "low", "open", "volume")),
1088
+ "alpha101_alpha92": (alpha101_alpha92, 49, ("close", "high", "low", "open", "volume")),
1089
+ "alpha101_alpha94": (alpha101_alpha94, 82, ("volume", "vwap")),
1090
+ "alpha101_alpha95": (alpha101_alpha95, 81, ("high", "low", "open", "volume")),
1091
+ "alpha101_alpha96": (alpha101_alpha96, 103, ("close", "volume", "vwap")),
1092
+ "alpha101_alpha98": (alpha101_alpha98, 56, ("open", "volume", "vwap")),
1093
+ "alpha101_alpha99": (alpha101_alpha99, 87, ("high", "low", "volume")),
1094
+ "alpha101_alpha101": (alpha101_alpha101, 1, ("close", "high", "low", "open")),
1095
+ }