rqalpha 5.6.2__tar.gz → 5.6.3__tar.gz

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 (207) hide show
  1. {rqalpha-5.6.2/rqalpha.egg-info → rqalpha-5.6.3}/PKG-INFO +1 -1
  2. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/_version.py +3 -3
  3. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/apis/api_base.py +6 -2
  4. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/config.yml +2 -1
  5. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/environment.py +10 -1
  6. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/mod/rqalpha_mod_sys_accounts/api/api_stock.py +5 -0
  7. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/mod/rqalpha_mod_sys_analyser/__init__.py +0 -1
  8. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/mod/rqalpha_mod_sys_analyser/mod.py +9 -4
  9. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/mod/rqalpha_mod_sys_analyser/plot/plot.py +3 -0
  10. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/mod/rqalpha_mod_sys_analyser/report/report.py +5 -3
  11. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/portfolio/__init__.py +4 -2
  12. {rqalpha-5.6.2 → rqalpha-5.6.3/rqalpha.egg-info}/PKG-INFO +1 -1
  13. {rqalpha-5.6.2 → rqalpha-5.6.3}/setup.cfg +1 -1
  14. {rqalpha-5.6.2 → rqalpha-5.6.3}/tests/api_tests/test_api_base.py +70 -1
  15. {rqalpha-5.6.2 → rqalpha-5.6.3}/CHANGELOG.rst +0 -0
  16. {rqalpha-5.6.2 → rqalpha-5.6.3}/LICENSE +0 -0
  17. {rqalpha-5.6.2 → rqalpha-5.6.3}/MANIFEST.in +0 -0
  18. {rqalpha-5.6.2 → rqalpha-5.6.3}/README.rst +0 -0
  19. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/__init__.py +0 -0
  20. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/__main__.py +0 -0
  21. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/api.py +0 -0
  22. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/apis/__init__.py +0 -0
  23. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/apis/api_abstract.py +0 -0
  24. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/apis/api_rqdatac.py +0 -0
  25. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/apis/names.py +0 -0
  26. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/cmds/__init__.py +0 -0
  27. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/cmds/bundle.py +0 -0
  28. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/cmds/entry.py +0 -0
  29. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/cmds/misc.py +0 -0
  30. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/cmds/mod.py +0 -0
  31. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/cmds/run.py +0 -0
  32. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/const.py +0 -0
  33. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/core/__init__.py +0 -0
  34. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/core/events.py +0 -0
  35. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/core/execution_context.py +0 -0
  36. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/core/executor.py +0 -0
  37. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/core/global_var.py +0 -0
  38. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/core/strategy.py +0 -0
  39. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/core/strategy_context.py +0 -0
  40. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/core/strategy_loader.py +0 -0
  41. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/core/strategy_universe.py +0 -0
  42. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/data/__init__.py +0 -0
  43. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/data/bar_dict_price_board.py +0 -0
  44. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/data/base_data_source/__init__.py +0 -0
  45. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/data/base_data_source/adjust.py +0 -0
  46. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/data/base_data_source/data_source.py +0 -0
  47. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/data/base_data_source/storage_interface.py +0 -0
  48. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/data/base_data_source/storages.py +0 -0
  49. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/data/bundle.py +0 -0
  50. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/data/data_proxy.py +0 -0
  51. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/data/trading_dates_mixin.py +0 -0
  52. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/examples/IF1706_20161108.csv +0 -0
  53. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/examples/IF_macd.py +0 -0
  54. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/examples/buy_and_hold.py +0 -0
  55. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/examples/data_source/get_csv_module.py +0 -0
  56. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/examples/data_source/import_get_csv_module.py +0 -0
  57. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/examples/data_source/read_csv_as_df.py +0 -0
  58. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/examples/extend_api/rqalpha_mod_extend_api_demo.py +0 -0
  59. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/examples/extend_api/test_extend_api.py +0 -0
  60. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/examples/golden_cross.py +0 -0
  61. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/examples/macd.py +0 -0
  62. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/examples/pair_trading.py +0 -0
  63. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/examples/rsi.py +0 -0
  64. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/examples/run_code_demo.py +0 -0
  65. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/examples/run_file_demo.py +0 -0
  66. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/examples/run_func_demo.py +0 -0
  67. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/examples/subscribe_event.py +0 -0
  68. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/examples/test_pt.py +0 -0
  69. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/examples/turtle.py +0 -0
  70. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/interface.py +0 -0
  71. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/main.py +0 -0
  72. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/mod/__init__.py +0 -0
  73. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/mod/rqalpha_mod_sys_accounts/__init__.py +0 -0
  74. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/mod/rqalpha_mod_sys_accounts/api/__init__.py +0 -0
  75. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/mod/rqalpha_mod_sys_accounts/api/api_future.py +0 -0
  76. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/mod/rqalpha_mod_sys_accounts/component_validator.py +0 -0
  77. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/mod/rqalpha_mod_sys_accounts/mod.py +0 -0
  78. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/mod/rqalpha_mod_sys_accounts/position_model.py +0 -0
  79. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/mod/rqalpha_mod_sys_accounts/position_validator.py +0 -0
  80. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/mod/rqalpha_mod_sys_accounts/validator.py +0 -0
  81. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/mod/rqalpha_mod_sys_analyser/plot/__init__.py +0 -0
  82. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/mod/rqalpha_mod_sys_analyser/plot/consts.py +0 -0
  83. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/mod/rqalpha_mod_sys_analyser/plot/utils.py +0 -0
  84. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/mod/rqalpha_mod_sys_analyser/plot_store.py +0 -0
  85. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/mod/rqalpha_mod_sys_analyser/report/__init__.py +0 -0
  86. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/mod/rqalpha_mod_sys_analyser/report/excel_template.py +0 -0
  87. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/mod/rqalpha_mod_sys_analyser/report/templates/summary.xlsx +0 -0
  88. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/mod/rqalpha_mod_sys_progress/__init__.py +0 -0
  89. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/mod/rqalpha_mod_sys_progress/mod.py +0 -0
  90. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/mod/rqalpha_mod_sys_risk/__init__.py +0 -0
  91. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/mod/rqalpha_mod_sys_risk/mod.py +0 -0
  92. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/mod/rqalpha_mod_sys_risk/validators/__init__.py +0 -0
  93. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/mod/rqalpha_mod_sys_risk/validators/cash_validator.py +0 -0
  94. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/mod/rqalpha_mod_sys_risk/validators/is_trading_validator.py +0 -0
  95. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/mod/rqalpha_mod_sys_risk/validators/price_validator.py +0 -0
  96. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/mod/rqalpha_mod_sys_risk/validators/self_trade_validator.py +0 -0
  97. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/mod/rqalpha_mod_sys_scheduler/__init__.py +0 -0
  98. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/mod/rqalpha_mod_sys_scheduler/mod.py +0 -0
  99. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/mod/rqalpha_mod_sys_scheduler/scheduler.py +0 -0
  100. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/mod/rqalpha_mod_sys_simulation/__init__.py +0 -0
  101. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/mod/rqalpha_mod_sys_simulation/matcher.py +0 -0
  102. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/mod/rqalpha_mod_sys_simulation/mod.py +0 -0
  103. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/mod/rqalpha_mod_sys_simulation/signal_broker.py +0 -0
  104. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/mod/rqalpha_mod_sys_simulation/simulation_broker.py +0 -0
  105. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/mod/rqalpha_mod_sys_simulation/simulation_event_source.py +0 -0
  106. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/mod/rqalpha_mod_sys_simulation/slippage.py +0 -0
  107. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/mod/rqalpha_mod_sys_simulation/testing.py +0 -0
  108. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/mod/rqalpha_mod_sys_simulation/validator.py +0 -0
  109. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/mod/rqalpha_mod_sys_transaction_cost/__init__.py +0 -0
  110. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/mod/rqalpha_mod_sys_transaction_cost/deciders.py +0 -0
  111. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/mod/rqalpha_mod_sys_transaction_cost/mod.py +0 -0
  112. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/mod/utils.py +0 -0
  113. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/mod_config.yml +0 -0
  114. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/model/__init__.py +0 -0
  115. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/model/bar.py +0 -0
  116. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/model/instrument.py +0 -0
  117. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/model/order.py +0 -0
  118. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/model/tick.py +0 -0
  119. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/model/trade.py +0 -0
  120. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/portfolio/account.py +0 -0
  121. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/portfolio/position.py +0 -0
  122. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/resource/ricequant-logo.png +0 -0
  123. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/user_module.py +0 -0
  124. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/utils/__init__.py +0 -0
  125. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/utils/arg_checker.py +0 -0
  126. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/utils/class_helper.py +0 -0
  127. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/utils/click_helper.py +0 -0
  128. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/utils/concurrent.py +0 -0
  129. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/utils/config.py +0 -0
  130. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/utils/datetime_func.py +0 -0
  131. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/utils/dict_func.py +0 -0
  132. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/utils/exception.py +0 -0
  133. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/utils/functools.py +0 -0
  134. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/utils/i18n.py +0 -0
  135. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/utils/log_capture.py +0 -0
  136. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/utils/logger.py +0 -0
  137. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/utils/package_helper.py +0 -0
  138. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/utils/persisit_helper.py +0 -0
  139. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/utils/repr.py +0 -0
  140. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/utils/risk_free_helper.py +0 -0
  141. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/utils/rq_json.py +0 -0
  142. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/utils/strategy_loader_help.py +0 -0
  143. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/utils/testing/__init__.py +0 -0
  144. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/utils/testing/fixtures.py +0 -0
  145. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/utils/testing/mocking.py +0 -0
  146. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/utils/translations/__init__.py +0 -0
  147. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/utils/translations/zh_Hans_CN/LC_MESSAGES/__init__.py +0 -0
  148. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/utils/translations/zh_Hans_CN/LC_MESSAGES/messages.mo +0 -0
  149. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/utils/translations/zh_Hans_CN/LC_MESSAGES/messages.po +0 -0
  150. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/utils/translations/zh_Hans_CN/__init__.py +0 -0
  151. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha/utils/typing.py +0 -0
  152. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha.egg-info/SOURCES.txt +0 -0
  153. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha.egg-info/dependency_links.txt +0 -0
  154. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha.egg-info/entry_points.txt +0 -0
  155. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha.egg-info/not-zip-safe +0 -0
  156. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha.egg-info/requires.txt +0 -0
  157. {rqalpha-5.6.2 → rqalpha-5.6.3}/rqalpha.egg-info/top_level.txt +0 -0
  158. {rqalpha-5.6.2 → rqalpha-5.6.3}/setup.py +0 -0
  159. {rqalpha-5.6.2 → rqalpha-5.6.3}/tests/__init__.py +0 -0
  160. {rqalpha-5.6.2 → rqalpha-5.6.3}/tests/api_tests/__init__.py +0 -0
  161. {rqalpha-5.6.2 → rqalpha-5.6.3}/tests/api_tests/mod/__init__.py +0 -0
  162. {rqalpha-5.6.2 → rqalpha-5.6.3}/tests/api_tests/mod/sys_accounts/__init__.py +0 -0
  163. {rqalpha-5.6.2 → rqalpha-5.6.3}/tests/api_tests/mod/sys_accounts/test_account_model.py +0 -0
  164. {rqalpha-5.6.2 → rqalpha-5.6.3}/tests/api_tests/mod/sys_accounts/test_futures_settlement_price_type.py +0 -0
  165. {rqalpha-5.6.2 → rqalpha-5.6.3}/tests/api_tests/mod/sys_accounts/test_margin_stocks.py +0 -0
  166. {rqalpha-5.6.2 → rqalpha-5.6.3}/tests/api_tests/mod/sys_accounts/test_position_models.py +0 -0
  167. {rqalpha-5.6.2 → rqalpha-5.6.3}/tests/api_tests/mod/sys_scheduler/__init__.py +0 -0
  168. {rqalpha-5.6.2 → rqalpha-5.6.3}/tests/api_tests/mod/sys_scheduler/test_physical_time.py +0 -0
  169. {rqalpha-5.6.2 → rqalpha-5.6.3}/tests/api_tests/mod/sys_scheduler/test_scheduler.py +0 -0
  170. {rqalpha-5.6.2 → rqalpha-5.6.3}/tests/api_tests/mod/sys_simulation/__init__.py +0 -0
  171. {rqalpha-5.6.2 → rqalpha-5.6.3}/tests/api_tests/mod/sys_simulation/test_management_fee.py +0 -0
  172. {rqalpha-5.6.2 → rqalpha-5.6.3}/tests/api_tests/mod/sys_simulation/test_match.py +0 -0
  173. {rqalpha-5.6.2 → rqalpha-5.6.3}/tests/api_tests/mod/sys_simulation/test_signal_broker.py +0 -0
  174. {rqalpha-5.6.2 → rqalpha-5.6.3}/tests/api_tests/mod/sys_simulation/test_simulation_broker.py +0 -0
  175. {rqalpha-5.6.2 → rqalpha-5.6.3}/tests/api_tests/mod/sys_simulation/test_simulation_event_source.py +0 -0
  176. {rqalpha-5.6.2 → rqalpha-5.6.3}/tests/api_tests/mod/sys_transaction_cost/__init__.py +0 -0
  177. {rqalpha-5.6.2 → rqalpha-5.6.3}/tests/api_tests/mod/sys_transaction_cost/test_commission_multiplier.py +0 -0
  178. {rqalpha-5.6.2 → rqalpha-5.6.3}/tests/api_tests/test_api_future.py +0 -0
  179. {rqalpha-5.6.2 → rqalpha-5.6.3}/tests/api_tests/test_api_stock.py +0 -0
  180. {rqalpha-5.6.2 → rqalpha-5.6.3}/tests/api_tests/test_config.py +0 -0
  181. {rqalpha-5.6.2 → rqalpha-5.6.3}/tests/api_tests/test_position_queue.py +0 -0
  182. {rqalpha-5.6.2 → rqalpha-5.6.3}/tests/api_tests/utils.py +0 -0
  183. {rqalpha-5.6.2 → rqalpha-5.6.3}/tests/test_f_buy_and_hold.py +0 -0
  184. {rqalpha-5.6.2 → rqalpha-5.6.3}/tests/test_f_delivery.py +0 -0
  185. {rqalpha-5.6.2 → rqalpha-5.6.3}/tests/test_f_macd.py +0 -0
  186. {rqalpha-5.6.2 → rqalpha-5.6.3}/tests/test_f_macd_signal.py +0 -0
  187. {rqalpha-5.6.2 → rqalpha-5.6.3}/tests/test_f_mean_reverting.py +0 -0
  188. {rqalpha-5.6.2 → rqalpha-5.6.3}/tests/test_f_tick_size.py +0 -0
  189. {rqalpha-5.6.2 → rqalpha-5.6.3}/tests/test_s_buy_and_hold.py +0 -0
  190. {rqalpha-5.6.2 → rqalpha-5.6.3}/tests/test_s_dual_thrust.py +0 -0
  191. {rqalpha-5.6.2 → rqalpha-5.6.3}/tests/test_s_pit_tax.py +0 -0
  192. {rqalpha-5.6.2 → rqalpha-5.6.3}/tests/test_s_scheduler.py +0 -0
  193. {rqalpha-5.6.2 → rqalpha-5.6.3}/tests/test_s_tick_size.py +0 -0
  194. {rqalpha-5.6.2 → rqalpha-5.6.3}/tests/test_s_turtle.py +0 -0
  195. {rqalpha-5.6.2 → rqalpha-5.6.3}/tests/test_s_turtle_signal.py +0 -0
  196. {rqalpha-5.6.2 → rqalpha-5.6.3}/tests/test_sf_buy_and_hold.py +0 -0
  197. {rqalpha-5.6.2 → rqalpha-5.6.3}/tests/unittest/__init__.py +0 -0
  198. {rqalpha-5.6.2 → rqalpha-5.6.3}/tests/unittest/test_data/__init__.py +0 -0
  199. {rqalpha-5.6.2 → rqalpha-5.6.3}/tests/unittest/test_data/test_auto_update_bundle/__init__.py +0 -0
  200. {rqalpha-5.6.2 → rqalpha-5.6.3}/tests/unittest/test_data/test_auto_update_bundle/test_auto_update_bundle_mixin.py +0 -0
  201. {rqalpha-5.6.2 → rqalpha-5.6.3}/tests/unittest/test_data/test_instrument_mixin.py +0 -0
  202. {rqalpha-5.6.2 → rqalpha-5.6.3}/tests/unittest/test_data/test_trading_dates_mixin.py +0 -0
  203. {rqalpha-5.6.2 → rqalpha-5.6.3}/tests/unittest/test_mod/__init__.py +0 -0
  204. {rqalpha-5.6.2 → rqalpha-5.6.3}/tests/unittest/test_mod/test_sys_simulation/__init__.py +0 -0
  205. {rqalpha-5.6.2 → rqalpha-5.6.3}/tests/unittest/test_mod/test_sys_simulation/test_simulation_event_source.py +0 -0
  206. {rqalpha-5.6.2 → rqalpha-5.6.3}/tests/utils.py +0 -0
  207. {rqalpha-5.6.2 → rqalpha-5.6.3}/versioneer.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: rqalpha
3
- Version: 5.6.2
3
+ Version: 5.6.3
4
4
  Summary: Ricequant Algorithm Trading System
5
5
  Home-page: https://github.com/ricequant/rqalpha
6
6
  Author: ricequant
@@ -8,11 +8,11 @@ import json
8
8
 
9
9
  version_json = '''
10
10
  {
11
- "date": "2025-08-12T16:39:32+0800",
11
+ "date": "2025-09-05T11:19:11+0800",
12
12
  "dirty": false,
13
13
  "error": null,
14
- "full-revisionid": "df666766edc9f646d9064cedd7c841d58fa67a46",
15
- "version": "5.6.2"
14
+ "full-revisionid": "d0e492f70e623217ee944de8899985bc73f983fa",
15
+ "version": "5.6.3"
16
16
  }
17
17
  ''' # END VERSION_JSON
18
18
 
@@ -876,7 +876,9 @@ def symbol(order_book_id, sep=", "):
876
876
  EXECUTION_PHASE.ON_BAR,
877
877
  EXECUTION_PHASE.ON_TICK,
878
878
  EXECUTION_PHASE.SCHEDULED,
879
- EXECUTION_PHASE.GLOBAL
879
+ EXECUTION_PHASE.GLOBAL,
880
+ EXECUTION_PHASE.BEFORE_TRADING,
881
+ EXECUTION_PHASE.AFTER_TRADING,
880
882
  )
881
883
  def deposit(account_type: str, amount: float, receiving_days: int = 0):
882
884
  """
@@ -897,7 +899,9 @@ def deposit(account_type: str, amount: float, receiving_days: int = 0):
897
899
  EXECUTION_PHASE.ON_BAR,
898
900
  EXECUTION_PHASE.ON_TICK,
899
901
  EXECUTION_PHASE.SCHEDULED,
900
- EXECUTION_PHASE.GLOBAL
902
+ EXECUTION_PHASE.GLOBAL,
903
+ EXECUTION_PHASE.BEFORE_TRADING,
904
+ EXECUTION_PHASE.AFTER_TRADING,
901
905
  )
902
906
  @apply_rules(
903
907
  verify_that("account_type").is_in(DEFAULT_ACCOUNT_TYPE),
@@ -46,7 +46,8 @@ base:
46
46
  auto_update_bundle: false
47
47
  # 自动下载的 bundle 文件支持单独设置存储路径,若不设置则使用 data_bundle_path 路径
48
48
  auto_update_bundle_path: ~
49
-
49
+ # 一年交易日天数,默认使用DAYS_CNT.TRADING_DAYS_A_YEAR
50
+ custom_trading_days_a_year: ~
50
51
 
51
52
  extra:
52
53
  # 选择日期的输出等级,有 `verbose` | `info` | `warning` | `error` 等选项,您可以通过设置 `verbose` 来查看最详细的日志,
@@ -22,10 +22,11 @@ from typing import TYPE_CHECKING
22
22
 
23
23
  import rqalpha
24
24
  from rqalpha.core.events import EventBus, Event, EVENT
25
- from rqalpha.const import INSTRUMENT_TYPE
25
+ from rqalpha.const import INSTRUMENT_TYPE, DAYS_CNT
26
26
  from rqalpha.utils.logger import system_log, user_log, user_system_log
27
27
  from rqalpha.core.global_var import GlobalVars
28
28
  from rqalpha.utils.i18n import gettext as _
29
+ from rqalpha.utils.class_helper import cached_property
29
30
  from rqalpha.const import SIDE
30
31
  if TYPE_CHECKING:
31
32
  from rqalpha.model.order import Order
@@ -61,6 +62,7 @@ class Environment(object):
61
62
  self._default_frontend_validators = []
62
63
  self._transaction_cost_decider_dict = {}
63
64
  self.rqdatac_init = rqdatac_init # type: Boolean
65
+ self._trading_days_a_year = None
64
66
 
65
67
  # Environment.event_bus used in StrategyUniverse()
66
68
  from rqalpha.core.strategy_universe import StrategyUniverse
@@ -216,3 +218,10 @@ class Environment(object):
216
218
  if not v.can_submit_order(order, account):
217
219
  return False
218
220
  return True
221
+
222
+ @cached_property
223
+ def trading_days_a_year(self):
224
+ self._trading_days_a_year = getattr(self.config.base, 'custom_trading_days_a_year', DAYS_CNT.TRADING_DAYS_A_YEAR)
225
+ if self._trading_days_a_year is None:
226
+ self._trading_days_a_year = DAYS_CNT.TRADING_DAYS_A_YEAR
227
+ return self._trading_days_a_year
@@ -57,7 +57,9 @@ getcontext().prec = 10
57
57
  export_as_api(industry_code, name='industry_code')
58
58
  export_as_api(sector_code, name='sector_code')
59
59
 
60
+
60
61
  KSH_MIN_AMOUNT = 200
62
+ BJSE_MIN_AMOUNT = 100
61
63
 
62
64
 
63
65
  def _get_account_position_ins(id_or_ins):
@@ -76,6 +78,9 @@ def _round_order_quantity(ins, quantity, method: Callable = int) -> int:
76
78
  if ins.type == "CS" and ins.board_type == "KSH":
77
79
  # KSH can buy(sell) 201, 202 shares
78
80
  return 0 if abs(quantity) < KSH_MIN_AMOUNT else int(quantity)
81
+ elif ins.type == "CS" and ins.board_type == "BJS":
82
+ # BJSE can buy(sell) 101, 202 shares
83
+ return 0 if abs(quantity) < BJSE_MIN_AMOUNT else int(quantity)
79
84
  else:
80
85
  round_lot = ins.round_lot
81
86
  try:
@@ -108,7 +108,6 @@ def plot(result_pickle_file_path, show, plot_save_file, plot_open_close_points,
108
108
  from .plot import plot_result
109
109
 
110
110
  result_dict = pd.read_pickle(result_pickle_file_path)
111
- print(plot_open_close_points, plot_weekly_indicators)
112
111
  plot_result(result_dict, show, plot_save_file, plot_weekly_indicators, plot_open_close_points)
113
112
 
114
113
 
@@ -27,7 +27,7 @@ from typing import Dict, Optional, List, Tuple, Union, Iterable
27
27
 
28
28
  import numpy as np
29
29
  import pandas as pd
30
- from rqrisk import Risk, WEEKLY, MONTHLY
30
+ from rqrisk import Risk, DAILY, WEEKLY, MONTHLY
31
31
 
32
32
  from rqalpha.const import EXIT_CODE, DEFAULT_ACCOUNT_TYPE, INSTRUMENT_TYPE, POSITION_DIRECTION
33
33
  from rqalpha.core.events import EVENT
@@ -36,7 +36,6 @@ from rqalpha.utils.i18n import gettext as _
36
36
  from rqalpha.utils import INST_TYPE_IN_STOCK_ACCOUNT
37
37
  from rqalpha.utils.datetime_func import convert_int_to_date
38
38
  from rqalpha.utils.logger import user_system_log
39
- from rqalpha.const import DAYS_CNT
40
39
  from rqalpha.api import export_as_api
41
40
  from .plot.consts import DefaultPlot, PLOT_TEMPLATE
42
41
  from .plot.utils import max_ddd as _max_ddd
@@ -359,9 +358,10 @@ class AnalyserMod(AbstractMod):
359
358
  summary["benchmark"] = ",".join(f"{o}:{w}" for o, w in self._benchmark)
360
359
  summary["benchmark_symbol"] = ",".join(f"{self._env.data_proxy.instrument(o).symbol if o not in self.NULL_OID else 'null'}:{w}" for o, w in self._benchmark)
361
360
 
361
+ trading_days_a_year = self._env.trading_days_a_year
362
362
  risk_free_rate = data_proxy.get_risk_free_rate(self._env.config.base.start_date, self._env.config.base.end_date)
363
363
  risk = Risk(
364
- np.array(self._portfolio_daily_returns), np.array(self._benchmark_daily_returns), risk_free_rate
364
+ np.array(self._portfolio_daily_returns), np.array(self._benchmark_daily_returns), risk_free_rate, period=DAILY, trading_days_a_year=trading_days_a_year
365
365
  )
366
366
  summary.update({
367
367
  'alpha': risk.alpha,
@@ -406,7 +406,9 @@ class AnalyserMod(AbstractMod):
406
406
  benchmark_total_returns = (np.array(self._benchmark_daily_returns) + 1.0).prod() - 1.0
407
407
  summary['benchmark_total_returns'] = benchmark_total_returns
408
408
  date_count = len(self._benchmark_daily_returns)
409
- benchmark_annualized_returns = (benchmark_total_returns + 1) ** (DAYS_CNT.TRADING_DAYS_A_YEAR / date_count) - 1
409
+ # 获取一年交易日天数
410
+ trading_days_a_year = self._env.trading_days_a_year
411
+ benchmark_annualized_returns = (benchmark_total_returns + 1) ** (trading_days_a_year / date_count) - 1
410
412
  summary['benchmark_annualized_returns'] = benchmark_annualized_returns
411
413
 
412
414
  trades = pd.DataFrame(self._trades)
@@ -416,6 +418,9 @@ class AnalyserMod(AbstractMod):
416
418
  df = pd.DataFrame(self._total_portfolios)
417
419
  df['date'] = pd.to_datetime(df['date'])
418
420
  total_portfolios = df.set_index('date').sort_index()
421
+ if self._benchmark:
422
+ total_portfolios["benchmark_unit_net_value"] = (self._benchmark_daily_returns + 1).cumprod()
423
+ total_portfolios["excess_unit_net_value"] = total_portfolios["unit_net_value"] - total_portfolios["benchmark_unit_net_value"]
419
424
  df.index = df['date']
420
425
  weekly_nav = df.resample("W").last().set_index("date").unit_net_value.dropna()
421
426
  monthly_nav = df.resample("M").last().set_index("date").unit_net_value.dropna()
@@ -26,6 +26,7 @@ from matplotlib import gridspec, ticker, image as mpimg, pyplot
26
26
 
27
27
  import rqalpha
28
28
  from rqalpha.const import POSITION_EFFECT
29
+ from rqalpha.utils.logger import system_log
29
30
  from .utils import IndicatorInfo, LineInfo, max_dd as _max_dd, SpotInfo, max_ddd as _max_ddd
30
31
  from .utils import weekly_returns, trading_dates_index
31
32
  from .consts import PlotTemplate, DefaultPlot
@@ -245,6 +246,8 @@ def plot_result(
245
246
 
246
247
  _plot(summary["strategy_file"], sub_plots, strategy_name)
247
248
 
249
+ system_log.debug(f"Matplotlib backend: {pyplot.get_backend()}")
250
+
248
251
  if save:
249
252
  file_path = save
250
253
  if os.path.isdir(save):
@@ -25,7 +25,7 @@ from collections import ChainMap, defaultdict
25
25
  from pandas import Series, DataFrame
26
26
 
27
27
  from rqrisk import Risk
28
- from rqrisk import WEEKLY, MONTHLY
28
+ from rqrisk import DAILY, WEEKLY, MONTHLY
29
29
  from rqalpha.environment import Environment
30
30
 
31
31
  from rqalpha.mod.rqalpha_mod_sys_analyser.plot.utils import max_dd as _max_dd
@@ -71,7 +71,8 @@ def _yearly_indicators(
71
71
  excess_nav = (p_year_returns + 1).cumprod() / (b_year_returns + 1).cumprod()
72
72
  excess_max_dd = _max_dd(excess_nav.values, excess_nav.index)
73
73
  max_dd = _max_dd(p_nav[year_slice].values, p_nav[year_slice].index)
74
- risk = Risk(p_year_returns, b_year_returns, risk_free_rates[year])
74
+ trading_days_a_year = Environment.get_instance().trading_days_a_year
75
+ risk = Risk(p_year_returns, b_year_returns, risk_free_rates[year], period=DAILY, trading_days_a_year=trading_days_a_year)
75
76
  data["year"].append(year)
76
77
  data["returns"].append(risk.return_rate)
77
78
  data["benchmark_returns"].append(risk.benchmark_return)
@@ -142,7 +143,8 @@ def _pressure_test(
142
143
  else:
143
144
  b_period_returns = Series(index=p_period_returns.index)
144
145
  risk_free_rate = env.data_proxy.get_risk_free_rate(start, end)
145
- risk = Risk(p_period_returns, b_period_returns, risk_free_rate)
146
+ trading_days_a_year = env.trading_days_a_year
147
+ risk = Risk(p_period_returns, b_period_returns, risk_free_rate, period=DAILY, trading_days_a_year=trading_days_a_year)
146
148
  data["title"].append(title)
147
149
  data["start_date"].append(str(start))
148
150
  data["end_date"].append(str(end))
@@ -24,7 +24,7 @@ import jsonpickle
24
24
  import numpy as np
25
25
  import six
26
26
 
27
- from rqalpha.const import DAYS_CNT, DEFAULT_ACCOUNT_TYPE, POSITION_DIRECTION, RUN_TYPE
27
+ from rqalpha.const import DEFAULT_ACCOUNT_TYPE, POSITION_DIRECTION, RUN_TYPE
28
28
  from rqalpha.environment import Environment
29
29
  from rqalpha.core.events import EVENT, EventBus
30
30
  from rqalpha.interface import AbstractPosition
@@ -194,7 +194,8 @@ class Portfolio(object, metaclass=PropertyReprMeta):
194
194
 
195
195
  env = Environment.get_instance()
196
196
  date_count = float(env.data_proxy.count_trading_dates(env.config.base.start_date, env.trading_dt.date()))
197
- return self.unit_net_value ** (DAYS_CNT.TRADING_DAYS_A_YEAR / date_count) - 1
197
+ trading_days_a_year = env.trading_days_a_year
198
+ return self.unit_net_value ** (trading_days_a_year / date_count) - 1
198
199
 
199
200
  @property
200
201
  def total_value(self):
@@ -274,6 +275,7 @@ class Portfolio(object, metaclass=PropertyReprMeta):
274
275
  """出入金"""
275
276
  # 入金 现金增加,份额增加,总权益增加,单位净值不变
276
277
  # 出金 现金减少,份额减少,总权益减少,单位净值不变
278
+ account_type = account_type.upper()
277
279
  if account_type not in self._accounts:
278
280
  raise ValueError(_("invalid account type {}, choose in {}".format(account_type, list(self._accounts.keys()))))
279
281
  unit_net_value = self.unit_net_value
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: rqalpha
3
- Version: 5.6.2
3
+ Version: 5.6.3
4
4
  Summary: Ricequant Algorithm Trading System
5
5
  Home-page: https://github.com/ricequant/rqalpha
6
6
  Author: ricequant
@@ -1,6 +1,6 @@
1
1
  [metadata]
2
2
  name = rqalpha
3
- version = 5.6.2
3
+ version = 5.6.3
4
4
 
5
5
  [versioneer]
6
6
  VCS = git
@@ -448,7 +448,7 @@ def test_order_to():
448
448
  return locals()
449
449
 
450
450
 
451
- def test_deposit():
451
+ def test_deposit_and_withdraw():
452
452
  __config__ = {
453
453
  "base": {
454
454
  "accounts": {
@@ -506,3 +506,72 @@ def test_deposit():
506
506
  assert int(context.portfolio.accounts["STOCK"].cash) == int(context.cash) + 10000
507
507
 
508
508
  return locals()
509
+
510
+
511
+ def test_deposit_withdraw_before_and_after_trading():
512
+ __config__ = {
513
+ "base": {
514
+ "accounts": {
515
+ "stock": 100000000,
516
+ "future": 100000000,
517
+ }
518
+ },
519
+ }
520
+
521
+ def init(context):
522
+ context.counter = 0
523
+
524
+ context.stock = '000001.XSHE'
525
+ context.future = 'IF88'
526
+
527
+ def before_trading(context):
528
+ context.counter += 1
529
+ if context.counter == 2:
530
+ unit_net_value = context.portfolio.unit_net_value
531
+ units = context.portfolio.units
532
+ total_value = context.portfolio.total_value
533
+ cash = context.portfolio.accounts["STOCK"].cash
534
+ deposit("STOCK", 50000000)
535
+ assert int(context.portfolio.accounts["STOCK"].cash) == int(cash) + 50000000
536
+ assert context.portfolio.units > units
537
+ assert context.portfolio.total_value > total_value
538
+ assert context.portfolio.unit_net_value == unit_net_value
539
+ elif context.counter == 3:
540
+ unit_net_value = context.portfolio.unit_net_value
541
+ units = context.portfolio.units
542
+ total_value = context.portfolio.total_value
543
+ cash = context.portfolio.accounts["FUTURE"].cash
544
+ flag = withdraw("FUTURE", 50000000)
545
+ assert context.portfolio.accounts["FUTURE"].cash == cash - 50000000
546
+ assert context.portfolio.units < units
547
+ assert context.portfolio.total_value < total_value
548
+ assert context.portfolio.unit_net_value == unit_net_value
549
+
550
+ def handle_bar(context, bar_dict):
551
+ if context.counter == 1:
552
+ order(context.stock, 200)
553
+ order(context.future, -100)
554
+
555
+ def after_trading(context):
556
+ if context.counter == 4:
557
+ unit_net_value = context.portfolio.unit_net_value
558
+ units = context.portfolio.units
559
+ total_value = context.portfolio.total_value
560
+ cash = context.portfolio.accounts["STOCK"].cash
561
+ withdraw("STOCK", 50000000)
562
+ assert context.portfolio.accounts["STOCK"].cash == cash - 50000000
563
+ assert context.portfolio.units < units
564
+ assert context.portfolio.total_value < total_value
565
+ assert context.portfolio.unit_net_value == unit_net_value
566
+ elif context.counter == 5:
567
+ unit_net_value = context.portfolio.unit_net_value
568
+ units = context.portfolio.units
569
+ total_value = context.portfolio.total_value
570
+ cash = context.portfolio.accounts["FUTURE"].cash
571
+ deposit("FUTURE", 50000000)
572
+ assert context.portfolio.accounts["FUTURE"].cash == cash + 50000000
573
+ assert context.portfolio.units > units
574
+ assert context.portfolio.total_value > total_value
575
+ assert context.portfolio.unit_net_value == unit_net_value
576
+
577
+ return locals()
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes