cfquant 0.2.65__tar.gz → 0.2.66__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 (278) hide show
  1. {cfquant-0.2.65 → cfquant-0.2.66}/PKG-INFO +1 -1
  2. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/__init__.py +17 -5
  3. cfquant-0.2.66/cfquant/tests/test_qmt_package_import.py +86 -0
  4. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/version.py +2 -2
  5. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant.egg-info/PKG-INFO +1 -1
  6. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant.egg-info/SOURCES.txt +1 -0
  7. {cfquant-0.2.65 → cfquant-0.2.66}/pyproject.toml +1 -1
  8. {cfquant-0.2.65 → cfquant-0.2.66}/qmt_scripts/CFQUANT_LITE.py +1 -1
  9. {cfquant-0.2.65 → cfquant-0.2.66}/qmt_scripts//345/220/214/350/264/246/345/217/267/347/213/254/347/253/213/345/270/202/345/234/272/CFQUANT_LITE_SH.py +1 -1
  10. {cfquant-0.2.65 → cfquant-0.2.66}/qmt_scripts//345/220/214/350/264/246/345/217/267/347/213/254/347/253/213/345/270/202/345/234/272/CFQUANT_LITE_SZ.py +1 -1
  11. {cfquant-0.2.65 → cfquant-0.2.66}/web_dashboard/app.js +1 -1
  12. {cfquant-0.2.65 → cfquant-0.2.66}/web_dashboard/index.html +2 -2
  13. {cfquant-0.2.65 → cfquant-0.2.66}/LICENSE +0 -0
  14. {cfquant-0.2.65 → cfquant-0.2.66}/LTtx/__init__.py +0 -0
  15. {cfquant-0.2.65 → cfquant-0.2.66}/LTtx/tx/Config.txt +0 -0
  16. {cfquant-0.2.65 → cfquant-0.2.66}/LTtx/tx/LTtx_server.py +0 -0
  17. {cfquant-0.2.65 → cfquant-0.2.66}/LTtx/tx/__init__.py +0 -0
  18. {cfquant-0.2.65 → cfquant-0.2.66}/LTtx/tx/tx.py +0 -0
  19. {cfquant-0.2.65 → cfquant-0.2.66}/MANIFEST.in +0 -0
  20. {cfquant-0.2.65 → cfquant-0.2.66}/README.md +0 -0
  21. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/_editable_install.py +0 -0
  22. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/account_routing.py +0 -0
  23. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/algo.py +0 -0
  24. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/algo_broker.py +0 -0
  25. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/batch_orders.py +0 -0
  26. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/build_info.py +0 -0
  27. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/callback_dispatcher.py +0 -0
  28. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/cftrader.py +0 -0
  29. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/channels.py +0 -0
  30. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/cli.py +0 -0
  31. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/client.py +0 -0
  32. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/conditional_orders.py +0 -0
  33. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/config.py +0 -0
  34. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/diagnostic_context.py +0 -0
  35. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/diagnostics.py +0 -0
  36. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/flow_control.py +0 -0
  37. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/hub.py +0 -0
  38. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/level2.py +0 -0
  39. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/log_management.py +0 -0
  40. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/logging_i18n.py +0 -0
  41. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/management.py +0 -0
  42. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/monitor_notifications.py +0 -0
  43. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/monitor_performance.py +0 -0
  44. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/normal_bridge.py +0 -0
  45. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/order_identity.py +0 -0
  46. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/order_meta.py +0 -0
  47. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/pipe_bridge.py +0 -0
  48. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/pipe_client.py +0 -0
  49. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/pipe_hub.py +0 -0
  50. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/pipe_transport.py +0 -0
  51. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/planning_broker.py +0 -0
  52. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/position_sizing.py +0 -0
  53. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/protocol.py +0 -0
  54. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/qmt_binding_defaults.py +0 -0
  55. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/qmt_binding_settings.py +0 -0
  56. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/qmt_bridge.py +0 -0
  57. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/qmt_component_agent.js +0 -0
  58. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/qmt_component_login.py +0 -0
  59. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/qmt_credentials.py +0 -0
  60. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/qmt_dependencies.py +0 -0
  61. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/qmt_inner.py +0 -0
  62. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/qmt_inner_catalog.py +0 -0
  63. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/qmt_inner_runtime.py +0 -0
  64. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/qmt_native_files.py +0 -0
  65. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/qmt_native_worker.py +0 -0
  66. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/qmt_pipe_runtime.py +0 -0
  67. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/qmt_python_runtime.py +0 -0
  68. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/qmt_strategy_agent.js +0 -0
  69. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/qmt_strategy_deploy.py +0 -0
  70. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/qmt_strategy_package.py +0 -0
  71. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/qmt_strategy_recovery.py +0 -0
  72. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/qmt_strategy_runtime.py +0 -0
  73. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/qmt_update.py +0 -0
  74. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/quote_history.py +0 -0
  75. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/quote_leases.py +0 -0
  76. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/quote_service.py +0 -0
  77. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/remote_adapter.py +0 -0
  78. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/remote_management.py +0 -0
  79. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/remote_supervisor.py +0 -0
  80. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/rpc_timing.py +0 -0
  81. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/runtime_report.py +0 -0
  82. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/shared_quotes.py +0 -0
  83. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/smart_orders.py +0 -0
  84. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/stock_connect.py +0 -0
  85. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/subscription_bridge.py +0 -0
  86. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/subscription_client.py +0 -0
  87. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/subscription_manager.py +0 -0
  88. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/subscription_store.py +0 -0
  89. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/tests/10_/345/221/275/344/273/244/350/241/214/346/216/245/345/217/243/346/265/213/350/257/225.py" +0 -0
  90. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/tests/11_/346/231/256/351/200/232/346/241/245/346/216/245/346/264/276/345/217/221/346/265/213/350/257/225.py" +0 -0
  91. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/tests/12_/350/256/242/345/215/225/345/244/207/346/263/250/346/265/213/350/257/225.py" +0 -0
  92. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/tests/13_/347/256/241/351/201/223/344/270/255/345/277/203/350/277/236/346/216/245/346/265/213/350/257/225.py" +0 -0
  93. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/tests/14_/350/277/220/350/241/214/346/227/266/346/212/245/345/221/212/346/265/213/350/257/225.py" +0 -0
  94. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/tests/15_/347/275/221/351/241/265/347/212/266/346/200/201/347/274/223/345/255/230/346/265/213/350/257/225.py" +0 -0
  95. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/tests/16_/345/220/257/345/212/250/345/256/211/350/243/205/346/265/213/350/257/225.py" +0 -0
  96. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/tests/17_/345/244/247QMT/346/216/245/345/217/243/351/200/202/351/205/215/346/265/213/350/257/225.py" +0 -0
  97. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/tests/18_/351/253/230/347/272/247/346/250/241/345/274/217/345/256/236/346/234/272/350/201/224/350/260/203.py" +0 -0
  98. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/tests/19_/345/256/236/346/234/272/350/201/224/350/260/203/345/210/244/345/256/232/346/265/213/350/257/225.py" +0 -0
  99. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/tests/1_/350/241/214/346/203/205/346/216/245/346/224/266/346/265/213/350/257/225.py" +0 -0
  100. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/tests/20_/350/201/224/350/260/203/351/227/256/351/242/230/344/277/256/345/244/215/346/265/213/350/257/225.py" +0 -0
  101. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/tests/21_/345/215/225/350/202/241/350/241/214/346/203/205/350/256/242/351/230/205/346/265/213/350/257/225.py" +0 -0
  102. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/tests/22_/350/277/236/346/216/245/350/257/212/346/226/255/346/265/213/350/257/225.py" +0 -0
  103. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/tests/23_/347/244/272/344/276/213/351/205/215/347/275/256/346/265/213/350/257/225.py" +0 -0
  104. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/tests/24_/350/264/246/346/210/267/347/274/223/345/255/230/346/214/211/351/234/200/345/210/267/346/226/260/346/265/213/350/257/225.py" +0 -0
  105. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/tests/25_/350/264/246/346/210/267/347/274/223/345/255/230/351/241/265/351/235/242/346/265/213/350/257/225.py" +0 -0
  106. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/tests/26_/345/205/250/346/216/250/350/256/242/351/230/205/346/265/213/350/257/225.py" +0 -0
  107. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/tests/27_/345/205/250/346/216/250/350/256/242/351/230/205/351/241/265/351/235/242/346/265/213/350/257/225.py" +0 -0
  108. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/tests/28_Level2/346/216/245/345/217/243/351/200/202/351/205/215/346/265/213/350/257/225.py" +0 -0
  109. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/tests/29_Level2/350/241/214/346/203/205/346/265/213/350/257/225.py" +0 -0
  110. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/tests/2_/346/225/260/346/215/256/350/216/267/345/217/226/346/265/213/350/257/225.py" +0 -0
  111. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/tests/30_cftrader/346/211/271/351/207/217/344/270/213/345/215/225/346/200/247/350/203/275/345/237/272/345/207/206.py" +0 -0
  112. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/tests/31_cftrader/346/250/241/346/213/237/350/264/246/345/217/267/346/211/271/351/207/217/344/270/213/345/215/225/346/265/213/350/257/225.py" +0 -0
  113. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/tests/32_/345/274/202/346/255/245/344/270/213/345/215/225/346/265/213/350/257/225.py" +0 -0
  114. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/tests/33_/345/220/214/346/255/245/344/270/213/345/215/225/345/233/236/350/260/203/346/265/213/350/257/225.py" +0 -0
  115. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/tests/34_/345/205/250/346/216/250/345/206/205/351/203/250/345/273/266/350/277/237/346/265/213/350/257/225.py" +0 -0
  116. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/tests/3_/346/225/260/346/215/256/344/270/213/350/275/275/346/265/213/350/257/225.py" +0 -0
  117. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/tests/4_/344/272/244/346/230/223/345/247/224/346/211/230/346/237/245/350/257/242/346/265/213/350/257/225.py" +0 -0
  118. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/tests/5_/347/234/237/345/256/236/344/270/213/345/215/225/346/265/213/350/257/225.py" +0 -0
  119. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/tests/6_/345/233/236/350/260/203/346/265/213/350/257/225.py" +0 -0
  120. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/tests/7_/345/220/214/346/255/245/345/274/202/346/255/245/344/270/213/345/215/225/346/265/213/350/257/225.py" +0 -0
  121. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/tests/8_/346/210/220/344/272/244/350/256/242/345/215/225/345/222/214/345/247/224/346/211/230/350/256/242/345/215/225/346/237/245/350/257/242/346/265/213/350/257/225.py" +0 -0
  122. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/tests/9_/345/217/257/346/222/244/350/256/242/345/215/225/346/265/213/350/257/225.py" +0 -0
  123. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/tests/_helpers.py +0 -0
  124. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/tests/readme.md +0 -0
  125. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/tests/test_account_query_timing.py +0 -0
  126. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/tests/test_account_subscription_probe.py +0 -0
  127. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/tests/test_activity_log_browser.py +0 -0
  128. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/tests/test_advanced_parity.py +0 -0
  129. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/tests/test_algo.py +0 -0
  130. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/tests/test_algo_broker.py +0 -0
  131. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/tests/test_api_tester_browser.py +0 -0
  132. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/tests/test_api_tester_web.py +0 -0
  133. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/tests/test_auto_login_app.py +0 -0
  134. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/tests/test_binding_delete_confirmation.py +0 -0
  135. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/tests/test_binding_live_refresh_browser.py +0 -0
  136. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/tests/test_binding_runtime_browser.py +0 -0
  137. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/tests/test_callback_recovery.py +0 -0
  138. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/tests/test_callback_requests.py +0 -0
  139. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/tests/test_cftrader.py +0 -0
  140. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/tests/test_cftrader_tutorial.py +0 -0
  141. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/tests/test_cftrader_web.py +0 -0
  142. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/tests/test_credit_compat.py +0 -0
  143. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/tests/test_dataframe_encoding.py +0 -0
  144. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/tests/test_diagnostic_context.py +0 -0
  145. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/tests/test_json_serialization.py +0 -0
  146. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/tests/test_latency_flow_control.py +0 -0
  147. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/tests/test_lite_account_routing.py +0 -0
  148. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/tests/test_lite_deployment_paths.py +0 -0
  149. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/tests/test_lite_parity.py +0 -0
  150. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/tests/test_lite_qmt_dispatch.py +0 -0
  151. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/tests/test_local_trading_calendar.py +0 -0
  152. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/tests/test_log_management.py +0 -0
  153. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/tests/test_management.py +0 -0
  154. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/tests/test_management_batch.py +0 -0
  155. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/tests/test_market_data_fallback.py +0 -0
  156. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/tests/test_market_timing.py +0 -0
  157. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/tests/test_monitor_notifications.py +0 -0
  158. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/tests/test_monitor_performance.py +0 -0
  159. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/tests/test_navigation_browser.py +0 -0
  160. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/tests/test_order_identity.py +0 -0
  161. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/tests/test_order_time_callback.py +0 -0
  162. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/tests/test_pipe_shutdown.py +0 -0
  163. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/tests/test_project_updater.py +0 -0
  164. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/tests/test_python_api_reference.py +0 -0
  165. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/tests/test_qmt_auto_login_browser.py +0 -0
  166. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/tests/test_qmt_auto_login_integration.py +0 -0
  167. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/tests/test_qmt_binding_defaults.py +0 -0
  168. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/tests/test_qmt_binding_settings.py +0 -0
  169. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/tests/test_qmt_component_login.py +0 -0
  170. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/tests/test_qmt_dependencies.py +0 -0
  171. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/tests/test_qmt_fileless.py +0 -0
  172. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/tests/test_qmt_inner.py +0 -0
  173. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/tests/test_qmt_inner_reference.py +0 -0
  174. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/tests/test_qmt_inner_web.py +0 -0
  175. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/tests/test_qmt_native_files.py +0 -0
  176. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/tests/test_qmt_native_reuse.py +0 -0
  177. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/tests/test_qmt_native_worker.py +0 -0
  178. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/tests/test_qmt_python_runtime.py +0 -0
  179. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/tests/test_qmt_strategy_browser.py +0 -0
  180. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/tests/test_qmt_strategy_capabilities.py +0 -0
  181. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/tests/test_qmt_strategy_deploy.py +0 -0
  182. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/tests/test_qmt_strategy_recovery.py +0 -0
  183. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/tests/test_qmt_strategy_web.py +0 -0
  184. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/tests/test_qmt_update.py +0 -0
  185. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/tests/test_quote_latency.py +0 -0
  186. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/tests/test_quote_latency_encoding.py +0 -0
  187. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/tests/test_quote_service.py +0 -0
  188. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/tests/test_remote_management.py +0 -0
  189. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/tests/test_remote_management_browser.py +0 -0
  190. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/tests/test_remote_version_check.py +0 -0
  191. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/tests/test_setup_qmt_prompt.py +0 -0
  192. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/tests/test_shared_quotes.py +0 -0
  193. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/tests/test_shared_quotes_generated.py +0 -0
  194. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/tests/test_smart_orders.py +0 -0
  195. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/tests/test_smart_orders_api.py +0 -0
  196. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/tests/test_smart_orders_docs.py +0 -0
  197. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/tests/test_startup_recovery.py +0 -0
  198. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/tests/test_stock_connect.py +0 -0
  199. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/tests/test_stock_connect_browser.py +0 -0
  200. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/tests/test_strategy_recovery_api.py +0 -0
  201. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/tests/test_subscription_congestion.py +0 -0
  202. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/tests/test_subscription_persistence.py +0 -0
  203. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/tests/test_table_conversion.py +0 -0
  204. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/tests/test_trade_strategy_callback.py +0 -0
  205. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/tests/test_trader_subscription_recovery.py +0 -0
  206. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/tests/test_trading_dates.py +0 -0
  207. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/tests/test_trading_monitor.py +0 -0
  208. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/tests/test_trading_monitor_browser.py +0 -0
  209. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/tests/test_tutorial_reader.py +0 -0
  210. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/tests/test_tx_auto_import.py +0 -0
  211. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/tests/test_tx_shutdown.py +0 -0
  212. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/trading_calendar.py +0 -0
  213. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/trading_monitor.py +0 -0
  214. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/tx.py +0 -0
  215. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/tx_trade_bridge.py +0 -0
  216. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/xtconstant.py +0 -0
  217. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/xtdata.py +0 -0
  218. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/xttrader.py +0 -0
  219. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant/xttype.py +0 -0
  220. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant.egg-info/dependency_links.txt +0 -0
  221. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant.egg-info/entry_points.txt +0 -0
  222. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant.egg-info/requires.txt +0 -0
  223. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant.egg-info/top_level.txt +0 -0
  224. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant_pipe_hub.py +0 -0
  225. {cfquant-0.2.65 → cfquant-0.2.66}/cfquant_web_server.py +0 -0
  226. {cfquant-0.2.65 → cfquant-0.2.66}/qmt_scripts/CFQUANT.py +0 -0
  227. {cfquant-0.2.65 → cfquant-0.2.66}/qmt_scripts/CFQUANT_CTYPE_ALL_LOWLAT.py +0 -0
  228. {cfquant-0.2.65 → cfquant-0.2.66}/qmt_scripts/CFQUANT_TRADE_LOWLAT.py +0 -0
  229. {cfquant-0.2.65 → cfquant-0.2.66}/qmt_scripts/__init__.py +0 -0
  230. {cfquant-0.2.65 → cfquant-0.2.66}/qmt_scripts//345/220/214/350/264/246/345/217/267/347/213/254/347/253/213/345/270/202/345/234/272/CFQUANT_CTYPE_ALL_LOWLAT_SH.py" +0 -0
  231. {cfquant-0.2.65 → cfquant-0.2.66}/qmt_scripts//345/220/214/350/264/246/345/217/267/347/213/254/347/253/213/345/270/202/345/234/272/CFQUANT_CTYPE_ALL_LOWLAT_SZ.py" +0 -0
  232. {cfquant-0.2.65 → cfquant-0.2.66}/qmt_scripts//345/220/214/350/264/246/345/217/267/347/213/254/347/253/213/345/270/202/345/234/272/CFQUANT_TRADE_LOWLAT_SH.py" +0 -0
  233. {cfquant-0.2.65 → cfquant-0.2.66}/qmt_scripts//345/220/214/350/264/246/345/217/267/347/213/254/347/253/213/345/270/202/345/234/272/CFQUANT_TRADE_LOWLAT_SZ.py" +0 -0
  234. {cfquant-0.2.65 → cfquant-0.2.66}/qmt_scripts//345/220/214/350/264/246/345/217/267/347/213/254/347/253/213/345/270/202/345/234/272/readme.md" +0 -0
  235. {cfquant-0.2.65 → cfquant-0.2.66}/requirements.txt +0 -0
  236. {cfquant-0.2.65 → cfquant-0.2.66}/setup.cfg +0 -0
  237. {cfquant-0.2.65 → cfquant-0.2.66}/web_dashboard/__init__.py +0 -0
  238. {cfquant-0.2.65 → cfquant-0.2.66}/web_dashboard/activity-log.js +0 -0
  239. {cfquant-0.2.65 → cfquant-0.2.66}/web_dashboard/api-tester.js +0 -0
  240. {cfquant-0.2.65 → cfquant-0.2.66}/web_dashboard/avatars/amber-pulse.svg +0 -0
  241. {cfquant-0.2.65 → cfquant-0.2.66}/web_dashboard/avatars/copper-grid.svg +0 -0
  242. {cfquant-0.2.65 → cfquant-0.2.66}/web_dashboard/avatars/market-blue.svg +0 -0
  243. {cfquant-0.2.65 → cfquant-0.2.66}/web_dashboard/avatars/rose-circuit.svg +0 -0
  244. {cfquant-0.2.65 → cfquant-0.2.66}/web_dashboard/avatars/signal-green.svg +0 -0
  245. {cfquant-0.2.65 → cfquant-0.2.66}/web_dashboard/avatars/slate-wave.svg +0 -0
  246. {cfquant-0.2.65 → cfquant-0.2.66}/web_dashboard/avatars/teal-orbit.svg +0 -0
  247. {cfquant-0.2.65 → cfquant-0.2.66}/web_dashboard/avatars/violet-node.svg +0 -0
  248. {cfquant-0.2.65 → cfquant-0.2.66}/web_dashboard/cfquant-architecture.html +0 -0
  249. {cfquant-0.2.65 → cfquant-0.2.66}/web_dashboard/cftrader-api-data.js +0 -0
  250. {cfquant-0.2.65 → cfquant-0.2.66}/web_dashboard/docs.js +0 -0
  251. {cfquant-0.2.65 → cfquant-0.2.66}/web_dashboard/favicon.svg +0 -0
  252. {cfquant-0.2.65 → cfquant-0.2.66}/web_dashboard/image/qmt_deploy/image-10.png +0 -0
  253. {cfquant-0.2.65 → cfquant-0.2.66}/web_dashboard/image/qmt_deploy/image-11.png +0 -0
  254. {cfquant-0.2.65 → cfquant-0.2.66}/web_dashboard/image/qmt_deploy/image-12.png +0 -0
  255. {cfquant-0.2.65 → cfquant-0.2.66}/web_dashboard/image/qmt_deploy/image-13.png +0 -0
  256. {cfquant-0.2.65 → cfquant-0.2.66}/web_dashboard/image/qmt_deploy/image-14.png +0 -0
  257. {cfquant-0.2.65 → cfquant-0.2.66}/web_dashboard/image/qmt_deploy/image-15.png +0 -0
  258. {cfquant-0.2.65 → cfquant-0.2.66}/web_dashboard/image/qmt_deploy/image-16.png +0 -0
  259. {cfquant-0.2.65 → cfquant-0.2.66}/web_dashboard/image/qmt_deploy/image-17.png +0 -0
  260. {cfquant-0.2.65 → cfquant-0.2.66}/web_dashboard/image/qmt_deploy/image-18.png +0 -0
  261. {cfquant-0.2.65 → cfquant-0.2.66}/web_dashboard/image/qmt_deploy/image-19.png +0 -0
  262. {cfquant-0.2.65 → cfquant-0.2.66}/web_dashboard/image/qmt_deploy/image-20.png +0 -0
  263. {cfquant-0.2.65 → cfquant-0.2.66}/web_dashboard/image/qmt_deploy/image-21.png +0 -0
  264. {cfquant-0.2.65 → cfquant-0.2.66}/web_dashboard/image/qmt_deploy/image-4.png +0 -0
  265. {cfquant-0.2.65 → cfquant-0.2.66}/web_dashboard/image/qmt_deploy/image-5.png +0 -0
  266. {cfquant-0.2.65 → cfquant-0.2.66}/web_dashboard/image/qmt_deploy/image-6.png +0 -0
  267. {cfquant-0.2.65 → cfquant-0.2.66}/web_dashboard/image/qmt_deploy/image-7.png +0 -0
  268. {cfquant-0.2.65 → cfquant-0.2.66}/web_dashboard/image/qmt_deploy/image-8.png +0 -0
  269. {cfquant-0.2.65 → cfquant-0.2.66}/web_dashboard/image/qmt_deploy/image-9.png +0 -0
  270. {cfquant-0.2.65 → cfquant-0.2.66}/web_dashboard/navigation.js +0 -0
  271. {cfquant-0.2.65 → cfquant-0.2.66}/web_dashboard/python-api-data.js +0 -0
  272. {cfquant-0.2.65 → cfquant-0.2.66}/web_dashboard/python-api.js +0 -0
  273. {cfquant-0.2.65 → cfquant-0.2.66}/web_dashboard/qmt-inner-api-data.js +0 -0
  274. {cfquant-0.2.65 → cfquant-0.2.66}/web_dashboard/remote-management.js +0 -0
  275. {cfquant-0.2.65 → cfquant-0.2.66}/web_dashboard/smart-order-api-data.js +0 -0
  276. {cfquant-0.2.65 → cfquant-0.2.66}/web_dashboard/styles.css +0 -0
  277. {cfquant-0.2.65 → cfquant-0.2.66}/web_dashboard/trading-monitor.js +0 -0
  278. {cfquant-0.2.65 → cfquant-0.2.66}/web_dashboard/vendor/mermaid.min.js +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: cfquant
3
- Version: 0.2.65
3
+ Version: 0.2.66
4
4
  Summary: QMT local bridge and xtquant-compatible Python client.
5
5
  License: MIT
6
6
  Requires-Python: >=3.8
@@ -9,10 +9,11 @@ cfquant: 面向 QMT 的 xtquant 兼容层。
9
9
  from cfquant.xttype import StockAccount
10
10
  """
11
11
 
12
+ import sys as _sys
13
+
12
14
  from . import xtconstant, xtdata, xttrader, xttype
13
15
  from . import cftrader
14
16
  from .qmt_inner import QmtInnerApi
15
- from .qmt_python_runtime import QmtPythonRuntime, QmtPythonRuntimeError, QmtPythonPackage, QmtPythonProgress
16
17
  from .client import CfquantError, CfquantTimeout, configure, get_client
17
18
  from .version import __version__
18
19
  from .build_info import build_identity, get_git_commit
@@ -28,10 +29,6 @@ __all__ = [
28
29
  "xttrader",
29
30
  "cftrader",
30
31
  "QmtInnerApi",
31
- "QmtPythonRuntime",
32
- "QmtPythonRuntimeError",
33
- "QmtPythonPackage",
34
- "QmtPythonProgress",
35
32
  "xttype",
36
33
  "configure",
37
34
  "get_client",
@@ -44,3 +41,18 @@ __all__ = [
44
41
  "get_git_commit",
45
42
  "build_identity",
46
43
  ]
44
+
45
+ # QMT's embedded Python 3.6 imports this package before loading any bridge
46
+ # submodule. The external runtime manager needs Python 3.7 syntax/dataclasses
47
+ # and must not be imported (or exported by import *) inside that interpreter.
48
+ if _sys.version_info >= (3, 7):
49
+ from .qmt_python_runtime import (
50
+ QmtPythonRuntime, QmtPythonRuntimeError, QmtPythonPackage, QmtPythonProgress,
51
+ )
52
+
53
+ __all__.extend([
54
+ "QmtPythonRuntime",
55
+ "QmtPythonRuntimeError",
56
+ "QmtPythonPackage",
57
+ "QmtPythonProgress",
58
+ ])
@@ -0,0 +1,86 @@
1
+ """Cold imports in the host interpreter and an optional real QMT Python 3.6.
2
+
3
+ Set CFQUANT_TEST_PYTHON36 to QMT's bin.x64/pythonw.exe (or python.exe).
4
+ The subprocess only imports modules; it never starts a bridge or a strategy.
5
+ """
6
+ import json
7
+ import os
8
+ from pathlib import Path
9
+ import subprocess
10
+ import sys
11
+
12
+ import pytest
13
+
14
+
15
+ ROOT = Path(__file__).resolve().parents[2]
16
+ PROBE = r'''
17
+ import sys
18
+ sys.dont_write_bytecode = True
19
+ sys.path.insert(0, sys.argv[2])
20
+ if sys.argv[3]:
21
+ sys.path[1:1] = [sys.argv[3] + "/lib", sys.argv[3] + "/DLLs"]
22
+
23
+ import importlib
24
+ import json
25
+ import traceback
26
+
27
+ result = {"version": list(sys.version_info[:3])}
28
+ try:
29
+ # Reproduce the first import in _install_logging_compat, then load the
30
+ # dependencies used by the ctypes and LTtx strategy entries.
31
+ for name in ("logging_i18n", "pipe_bridge", "qmt_pipe_runtime", "qmt_bridge"):
32
+ importlib.import_module("cfquant." + name)
33
+ import cfquant
34
+ namespace = {}
35
+ exec("from cfquant import *", namespace)
36
+ for name in ("xtdata", "xtconstant", "xttrader", "QmtInnerApi"):
37
+ assert name in namespace, name
38
+ if sys.version_info[:2] == (3, 6):
39
+ assert "cfquant.qmt_python_runtime" not in sys.modules
40
+ assert "QmtPythonRuntime" not in namespace
41
+ else:
42
+ from cfquant import qmt_python_runtime
43
+ for name in ("QmtPythonRuntime", "QmtPythonRuntimeError",
44
+ "QmtPythonPackage", "QmtPythonProgress"):
45
+ assert namespace[name] is getattr(qmt_python_runtime, name), name
46
+ progress = cfquant.QmtPythonProgress("py36", "download")
47
+ assert progress.as_dict()["phase"] == "download"
48
+ result["ok"] = True
49
+ except BaseException:
50
+ result["error"] = traceback.format_exc()
51
+ with open(sys.argv[1], "w", encoding="utf-8") as stream:
52
+ json.dump(result, stream)
53
+ '''
54
+
55
+
56
+ @pytest.mark.parametrize("runtime", ["host", "qmt36"])
57
+ def test_strategy_package_cold_import(tmp_path, runtime):
58
+ executable = sys.executable
59
+ qmt_bin = ""
60
+ env = os.environ.copy()
61
+ env.pop("PYTHONHOME", None)
62
+ if runtime == "qmt36":
63
+ executable = env.get("CFQUANT_TEST_PYTHON36")
64
+ if not executable:
65
+ pytest.skip("Set CFQUANT_TEST_PYTHON36 to run with QMT Python 3.6")
66
+ executable = str(Path(executable).resolve())
67
+ assert Path(executable).is_file(), executable
68
+ qmt_bin = str(Path(executable).parent)
69
+ env["PYTHONHOME"] = qmt_bin
70
+ env["PYTHONPATH"] = str(ROOT)
71
+ env["PYTHONDONTWRITEBYTECODE"] = "1"
72
+ env["CFQUANT_QMT_NO_FILE_IO"] = "1"
73
+ probe = tmp_path / "probe.py"
74
+ result_path = tmp_path / "result.json"
75
+ probe.write_text(PROBE, encoding="utf-8")
76
+ process = subprocess.run(
77
+ [executable, "-S", str(probe), str(result_path), str(ROOT), qmt_bin],
78
+ cwd=str(tmp_path), env=env, stdout=subprocess.PIPE, stderr=subprocess.PIPE,
79
+ timeout=30,
80
+ )
81
+ assert process.returncode == 0, process.stderr
82
+ assert result_path.is_file(), process.stderr
83
+ result = json.loads(result_path.read_text(encoding="utf-8"))
84
+ if runtime == "qmt36":
85
+ assert result["version"][:2] == [3, 6], result
86
+ assert result.get("ok"), result.get("error", result)
@@ -1,5 +1,5 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  """cfquant core version metadata."""
3
3
 
4
- __version__ = "0.2.65"
5
- WEB_VERSION = "web_20261108_01"
4
+ __version__ = "0.2.66"
5
+ WEB_VERSION = "web_20261108_02"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: cfquant
3
- Version: 0.2.65
3
+ Version: 0.2.66
4
4
  Summary: QMT local bridge and xtquant-compatible Python client.
5
5
  License: MIT
6
6
  Requires-Python: >=3.8
@@ -183,6 +183,7 @@ cfquant/tests/test_qmt_inner_web.py
183
183
  cfquant/tests/test_qmt_native_files.py
184
184
  cfquant/tests/test_qmt_native_reuse.py
185
185
  cfquant/tests/test_qmt_native_worker.py
186
+ cfquant/tests/test_qmt_package_import.py
186
187
  cfquant/tests/test_qmt_python_runtime.py
187
188
  cfquant/tests/test_qmt_strategy_browser.py
188
189
  cfquant/tests/test_qmt_strategy_capabilities.py
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "cfquant"
7
- version = "0.2.65"
7
+ version = "0.2.66"
8
8
  description = "QMT local bridge and xtquant-compatible Python client."
9
9
  license = {text = "MIT"}
10
10
  readme = "README.md"
@@ -723,7 +723,7 @@ def _resolve_batch_order_ids(bridge, account, pending, before_ids):
723
723
  time.sleep(min(0.05, remaining))
724
724
  # END GENERATED CFTRADER BATCH
725
725
 
726
- CORE_VERSION = "0.2.65"
726
+ CORE_VERSION = "0.2.66"
727
727
 
728
728
  # BEGIN GENERATED DIAGNOSTIC CONTEXT
729
729
  """Version context for cfquant diagnostics without changing application logging."""
@@ -737,7 +737,7 @@ def _resolve_batch_order_ids(bridge, account, pending, before_ids):
737
737
  time.sleep(min(0.05, remaining))
738
738
  # END GENERATED CFTRADER BATCH
739
739
 
740
- CORE_VERSION = "0.2.65"
740
+ CORE_VERSION = "0.2.66"
741
741
 
742
742
  # BEGIN GENERATED DIAGNOSTIC CONTEXT
743
743
  """Version context for cfquant diagnostics without changing application logging."""
@@ -737,7 +737,7 @@ def _resolve_batch_order_ids(bridge, account, pending, before_ids):
737
737
  time.sleep(min(0.05, remaining))
738
738
  # END GENERATED CFTRADER BATCH
739
739
 
740
- CORE_VERSION = "0.2.65"
740
+ CORE_VERSION = "0.2.66"
741
741
 
742
742
  # BEGIN GENERATED DIAGNOSTIC CONTEXT
743
743
  """Version context for cfquant diagnostics without changing application logging."""
@@ -1,4 +1,4 @@
1
- const FRONTEND_VERSION = 'web_20261108_01';
1
+ const FRONTEND_VERSION = 'web_20261108_02';
2
2
 
3
3
  const state = {
4
4
  accountId: '',
@@ -5,7 +5,7 @@
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1">
6
6
  <title>cfquant 控制台</title>
7
7
  <link rel="icon" type="image/svg+xml" href="/favicon.svg">
8
- <link rel="stylesheet" href="/styles.css?v=web_20261108_01">
8
+ <link rel="stylesheet" href="/styles.css?v=web_20261108_02">
9
9
  </head>
10
10
  <body>
11
11
  <div id="webAuthOverlay" class="auth-overlay hidden" aria-live="polite">
@@ -3514,7 +3514,7 @@ else:
3514
3514
  <script src="/trading-monitor.js?v=20261107_runtime_history_05"></script>
3515
3515
  <script src="/navigation.js?v=web_20261108_nav_03"></script>
3516
3516
  <script src="/activity-log.js?v=web_20261108_logs_01"></script>
3517
- <script src="/app.js?v=web_20261108_01"></script>
3517
+ <script src="/app.js?v=web_20261108_02"></script>
3518
3518
  <script src="/remote-management.js?v=20261103"></script>
3519
3519
  </body>
3520
3520
  </html>
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