Qubx 1.1.2.dev7__tar.gz → 1.1.2.dev8__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 (294) hide show
  1. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/PKG-INFO +1 -1
  2. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/_version.py +2 -2
  3. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/utils/results.py +11 -9
  4. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/utils/runner/runner.py +93 -2
  5. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/utils/time.py +0 -1
  6. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/.gitignore +0 -0
  7. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/LICENSE +0 -0
  8. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/README.md +0 -0
  9. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/pyproject.toml +0 -0
  10. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/scripts/build.py +0 -0
  11. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/__init__.py +0 -0
  12. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/_nb_magic.py +0 -0
  13. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/backtester/__init__.py +0 -0
  14. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/backtester/account.py +0 -0
  15. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/backtester/broker.py +0 -0
  16. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/backtester/data.py +0 -0
  17. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/backtester/iteratedstream.py +0 -0
  18. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/backtester/management.py +0 -0
  19. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/backtester/ome.py +0 -0
  20. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/backtester/optimization.py +0 -0
  21. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/backtester/runner.py +0 -0
  22. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/backtester/sentinels.py +0 -0
  23. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/backtester/simulated_data.py +0 -0
  24. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/backtester/simulated_exchange.py +0 -0
  25. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/backtester/simulator.py +0 -0
  26. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/backtester/transfers.py +0 -0
  27. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/backtester/utils.py +0 -0
  28. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/cli/__init__.py +0 -0
  29. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/cli/commands.py +0 -0
  30. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/cli/deploy.py +0 -0
  31. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/cli/misc.py +0 -0
  32. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/cli/release.py +0 -0
  33. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/cli/resolver.py +0 -0
  34. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/cli/s3.py +0 -0
  35. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/cli/theme.py +0 -0
  36. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/cli/tui.py +0 -0
  37. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/cli/user_config.py +0 -0
  38. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/config.py +0 -0
  39. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/connectors/__init__.py +0 -0
  40. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/connectors/ccxt/__init__.py +0 -0
  41. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/connectors/ccxt/account.py +0 -0
  42. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/connectors/ccxt/adapters/__init__.py +0 -0
  43. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/connectors/ccxt/adapters/polling_adapter.py +0 -0
  44. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/connectors/ccxt/broker.py +0 -0
  45. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/connectors/ccxt/connection_manager.py +0 -0
  46. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/connectors/ccxt/data.py +0 -0
  47. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/connectors/ccxt/exceptions.py +0 -0
  48. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/connectors/ccxt/exchange_manager.py +0 -0
  49. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/connectors/ccxt/exchanges/__init__.py +0 -0
  50. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/connectors/ccxt/exchanges/base.py +0 -0
  51. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/connectors/ccxt/exchanges/binance/broker.py +0 -0
  52. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/connectors/ccxt/exchanges/binance/exchange.py +0 -0
  53. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/connectors/ccxt/exchanges/bitfinex/bitfinex.py +0 -0
  54. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/connectors/ccxt/exchanges/bitfinex/bitfinex_account.py +0 -0
  55. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/connectors/ccxt/exchanges/gateio/__init__.py +0 -0
  56. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/connectors/ccxt/exchanges/gateio/gateio.py +0 -0
  57. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/connectors/ccxt/exchanges/hyperliquid/__init__.py +0 -0
  58. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/connectors/ccxt/exchanges/hyperliquid/account.py +0 -0
  59. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/connectors/ccxt/exchanges/hyperliquid/broker.py +0 -0
  60. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/connectors/ccxt/exchanges/hyperliquid/hyperliquid.py +0 -0
  61. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/connectors/ccxt/exchanges/kraken/kraken.py +0 -0
  62. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/connectors/ccxt/exchanges/okx/__init__.py +0 -0
  63. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/connectors/ccxt/exchanges/okx/account.py +0 -0
  64. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/connectors/ccxt/exchanges/okx/broker.py +0 -0
  65. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/connectors/ccxt/exchanges/okx/okx.py +0 -0
  66. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/connectors/ccxt/factory.py +0 -0
  67. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/connectors/ccxt/handlers/__init__.py +0 -0
  68. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/connectors/ccxt/handlers/base.py +0 -0
  69. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/connectors/ccxt/handlers/factory.py +0 -0
  70. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/connectors/ccxt/handlers/funding_rate.py +0 -0
  71. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/connectors/ccxt/handlers/liquidation.py +0 -0
  72. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/connectors/ccxt/handlers/ohlc.py +0 -0
  73. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/connectors/ccxt/handlers/open_interest.py +0 -0
  74. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/connectors/ccxt/handlers/orderbook.py +0 -0
  75. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/connectors/ccxt/handlers/quote.py +0 -0
  76. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/connectors/ccxt/handlers/trade.py +0 -0
  77. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/connectors/ccxt/subscription_config.py +0 -0
  78. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/connectors/ccxt/subscription_manager.py +0 -0
  79. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/connectors/ccxt/subscription_orchestrator.py +0 -0
  80. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/connectors/ccxt/utils.py +0 -0
  81. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/connectors/ccxt/warmup_service.py +0 -0
  82. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/connectors/registry.py +0 -0
  83. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/connectors/tardis/data.py +0 -0
  84. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/connectors/tardis/utils.py +0 -0
  85. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/core/__init__.py +0 -0
  86. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/core/account.py +0 -0
  87. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/core/basics.py +0 -0
  88. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/core/context.py +0 -0
  89. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/core/detectors/__init__.py +0 -0
  90. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/core/detectors/delisting.py +0 -0
  91. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/core/detectors/stale.py +0 -0
  92. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/core/errors.py +0 -0
  93. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/core/exceptions.py +0 -0
  94. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/core/helpers.py +0 -0
  95. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/core/initializer.py +0 -0
  96. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/core/interfaces.py +0 -0
  97. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/core/loggers.py +0 -0
  98. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/core/lookups.py +0 -0
  99. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/core/metrics.py +0 -0
  100. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/core/mixins/__init__.py +0 -0
  101. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/core/mixins/market.py +0 -0
  102. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/core/mixins/processing.py +0 -0
  103. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/core/mixins/subscription.py +0 -0
  104. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/core/mixins/trading.py +0 -0
  105. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/core/mixins/universe.py +0 -0
  106. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/core/mixins/utils.py +0 -0
  107. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/core/series.pxd +0 -0
  108. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/core/series.pyi +0 -0
  109. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/core/series.pyx +0 -0
  110. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/core/utils.pyi +0 -0
  111. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/core/utils.pyx +0 -0
  112. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/data/__init__.py +0 -0
  113. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/data/cache.py +0 -0
  114. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/data/containers.py +0 -0
  115. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/data/guards.py +0 -0
  116. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/data/registry.py +0 -0
  117. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/data/storage.py +0 -0
  118. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/data/storages/ccxt.py +0 -0
  119. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/data/storages/csv.py +0 -0
  120. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/data/storages/handy.py +0 -0
  121. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/data/storages/multi.py +0 -0
  122. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/data/storages/questdb.py +0 -0
  123. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/data/storages/stub.py +0 -0
  124. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/data/storages/utils.py +0 -0
  125. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/data/transformers.py +0 -0
  126. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/emitters/__init__.py +0 -0
  127. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/emitters/base.py +0 -0
  128. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/emitters/composite.py +0 -0
  129. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/emitters/csv.py +0 -0
  130. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/emitters/indicator.py +0 -0
  131. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/emitters/inmemory.py +0 -0
  132. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/emitters/prometheus.py +0 -0
  133. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/emitters/questdb.py +0 -0
  134. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/exporters/__init__.py +0 -0
  135. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/exporters/composite.py +0 -0
  136. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/exporters/formatters/__init__.py +0 -0
  137. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/exporters/formatters/base.py +0 -0
  138. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/exporters/formatters/incremental.py +0 -0
  139. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/exporters/formatters/slack.py +0 -0
  140. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/exporters/formatters/target_position.py +0 -0
  141. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/exporters/redis_streams.py +0 -0
  142. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/exporters/slack.py +0 -0
  143. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/gathering/simplest.py +0 -0
  144. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/health/__init__.py +0 -0
  145. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/health/base.py +0 -0
  146. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/health/dummy.py +0 -0
  147. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/health/server.py +0 -0
  148. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/loggers/__init__.py +0 -0
  149. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/loggers/csv.py +0 -0
  150. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/loggers/factory.py +0 -0
  151. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/loggers/inmemory.py +0 -0
  152. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/loggers/mongo.py +0 -0
  153. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/notifications/__init__.py +0 -0
  154. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/notifications/composite.py +0 -0
  155. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/notifications/slack.py +0 -0
  156. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/notifications/throttler.py +0 -0
  157. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/pandaz/__init__.py +0 -0
  158. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/pandaz/stats.py +0 -0
  159. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/pandaz/ta.py +0 -0
  160. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/pandaz/utils.py +0 -0
  161. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/plugins/__init__.py +0 -0
  162. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/plugins/loader.py +0 -0
  163. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/resources/_build.py +0 -0
  164. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/resources/crypto-fees.ini +0 -0
  165. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/resources/instruments/hyperliquid-spot.json +0 -0
  166. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/resources/instruments/hyperliquid.f-perpetual.json +0 -0
  167. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/resources/instruments/symbols-binance-spot.json +0 -0
  168. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/resources/instruments/symbols-binance.cm-future.json +0 -0
  169. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/resources/instruments/symbols-binance.cm-perpetual.json +0 -0
  170. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/resources/instruments/symbols-binance.um-future.json +0 -0
  171. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/resources/instruments/symbols-binance.um-perpetual.json +0 -0
  172. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/resources/instruments/symbols-bitfinex.f-perpetual.json +0 -0
  173. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/resources/instruments/symbols-kraken-spot.json +0 -0
  174. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/resources/instruments/symbols-kraken.f-future.json +0 -0
  175. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/resources/instruments/symbols-kraken.f-perpetual.json +0 -0
  176. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/restarts/__init__.py +0 -0
  177. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/restarts/state_resolvers.py +0 -0
  178. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/restarts/time_finders.py +0 -0
  179. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/restorers/__init__.py +0 -0
  180. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/restorers/balance.py +0 -0
  181. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/restorers/factory.py +0 -0
  182. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/restorers/interfaces.py +0 -0
  183. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/restorers/position.py +0 -0
  184. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/restorers/signal.py +0 -0
  185. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/restorers/state.py +0 -0
  186. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/restorers/utils.py +0 -0
  187. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/state/__init__.py +0 -0
  188. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/state/dummy.py +0 -0
  189. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/state/redis.py +0 -0
  190. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/ta/__init__.py +0 -0
  191. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/ta/indicators.pxd +0 -0
  192. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/ta/indicators.pyi +0 -0
  193. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/ta/indicators.pyx +0 -0
  194. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/templates/__init__.py +0 -0
  195. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/templates/base.py +0 -0
  196. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/templates/project/accounts.toml.j2 +0 -0
  197. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/templates/project/config.yml.j2 +0 -0
  198. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/templates/project/jlive.sh.j2 +0 -0
  199. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/templates/project/jpaper.sh.j2 +0 -0
  200. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/templates/project/pyproject.toml.j2 +0 -0
  201. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/templates/project/src/{{ strategy_name }}/__init__.py.j2 +0 -0
  202. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/templates/project/src/{{ strategy_name }}/strategy.py.j2 +0 -0
  203. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/templates/project/template.yml +0 -0
  204. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/templates/repo/.claude/skills/qubx-cli/SKILL.md +0 -0
  205. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/templates/repo/.claude/skills/qubx-indicators/SKILL.md +0 -0
  206. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/templates/repo/.claude/skills/simulation-explorer/SKILL.md +0 -0
  207. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/templates/repo/.claude/skills/strategy-release/SKILL.md +0 -0
  208. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/templates/repo/.github/workflows/ci.yml.j2 +0 -0
  209. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/templates/repo/.gitignore.j2 +0 -0
  210. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/templates/repo/.python-version +0 -0
  211. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/templates/repo/.vscode/launch.json +0 -0
  212. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/templates/repo/.vscode/settings.json +0 -0
  213. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/templates/repo/.vscode/tasks.json +0 -0
  214. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/templates/repo/CLAUDE.md.j2 +0 -0
  215. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/templates/repo/README.md.j2 +0 -0
  216. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/templates/repo/configs/.gitkeep +0 -0
  217. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/templates/repo/justfile.j2 +0 -0
  218. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/templates/repo/pyproject.toml.j2 +0 -0
  219. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/templates/repo/research/.gitkeep +0 -0
  220. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/templates/repo/src/{{ strategy_name }}/__init__.py.j2 +0 -0
  221. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/templates/repo/src/{{ strategy_name }}/cli.py.j2 +0 -0
  222. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/templates/repo/src/{{ strategy_name }}/strategy.py.j2 +0 -0
  223. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/templates/repo/template.yml +0 -0
  224. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/templates/repo/tests/test_strategy.py.j2 +0 -0
  225. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/templates/simple/__init__.py.j2 +0 -0
  226. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/templates/simple/accounts.toml.j2 +0 -0
  227. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/templates/simple/config.yml.j2 +0 -0
  228. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/templates/simple/jlive.sh.j2 +0 -0
  229. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/templates/simple/jpaper.sh.j2 +0 -0
  230. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/templates/simple/strategy.py.j2 +0 -0
  231. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/templates/simple/template.yml +0 -0
  232. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/trackers/__init__.py +0 -0
  233. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/trackers/advanced.py +0 -0
  234. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/trackers/composite.py +0 -0
  235. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/trackers/rebalancers.py +0 -0
  236. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/trackers/riskctrl.py +0 -0
  237. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/trackers/sizers.py +0 -0
  238. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/utils/__init__.py +0 -0
  239. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/utils/_pyxreloader.py +0 -0
  240. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/utils/charting/lookinglass.py +0 -0
  241. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/utils/charting/mpl_helpers.py +0 -0
  242. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/utils/charting/orderbook.py +0 -0
  243. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/utils/collections.py +0 -0
  244. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/utils/hft/__init__.py +0 -0
  245. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/utils/hft/numba_utils.py +0 -0
  246. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/utils/hft/orderbook.pyi +0 -0
  247. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/utils/hft/orderbook.pyx +0 -0
  248. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/utils/marketdata/binance.py +0 -0
  249. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/utils/marketdata/ccxt.py +0 -0
  250. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/utils/marketdata/dukas.py +0 -0
  251. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/utils/misc.py +0 -0
  252. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/utils/nonce.py +0 -0
  253. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/utils/ntp.py +0 -0
  254. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/utils/numbers_utils.py +0 -0
  255. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/utils/orderbook.py +0 -0
  256. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/utils/plotting/__init__.py +0 -0
  257. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/utils/plotting/dashboard.py +0 -0
  258. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/utils/plotting/data.py +0 -0
  259. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/utils/plotting/interfaces.py +0 -0
  260. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/utils/plotting/renderers/__init__.py +0 -0
  261. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/utils/plotting/renderers/plotly.py +0 -0
  262. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/utils/questdb.py +0 -0
  263. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/utils/rate_limiter.py +0 -0
  264. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/utils/ringbuffer.pxd +0 -0
  265. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/utils/ringbuffer.pyi +0 -0
  266. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/utils/ringbuffer.pyx +0 -0
  267. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/utils/runner/__init__.py +0 -0
  268. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/utils/runner/_jupyter_runner.pyt +0 -0
  269. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/utils/runner/accounts.py +0 -0
  270. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/utils/runner/configs.py +0 -0
  271. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/utils/runner/factory.py +0 -0
  272. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/utils/runner/kernel_service.py +0 -0
  273. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/utils/runner/textual/__init__.py +0 -0
  274. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/utils/runner/textual/app.py +0 -0
  275. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/utils/runner/textual/handlers.py +0 -0
  276. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/utils/runner/textual/init_code.py +0 -0
  277. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/utils/runner/textual/kernel.py +0 -0
  278. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/utils/runner/textual/styles.tcss +0 -0
  279. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/utils/runner/textual/widgets/__init__.py +0 -0
  280. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/utils/runner/textual/widgets/account_summary.py +0 -0
  281. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/utils/runner/textual/widgets/command_input.py +0 -0
  282. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/utils/runner/textual/widgets/debug_log.py +0 -0
  283. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/utils/runner/textual/widgets/orders_table.py +0 -0
  284. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/utils/runner/textual/widgets/positions_table.py +0 -0
  285. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/utils/runner/textual/widgets/quotes_table.py +0 -0
  286. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/utils/runner/textual/widgets/repl_output.py +0 -0
  287. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/utils/s3.py +0 -0
  288. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/utils/slack.py +0 -0
  289. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/utils/throttler.py +0 -0
  290. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/utils/websocket_manager.py +0 -0
  291. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/tests/strategies/macd_crossover/src/macd_crossover/indicators/macd.py +0 -0
  292. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/tests/strategies/macd_crossover/src/macd_crossover/models/macd_crossover.py +0 -0
  293. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/tests/strategies/macd_crossover/src/macd_crossover/models/utils.py +0 -0
  294. {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/tests/strategies/obi_trader/src/obi_trader/models/obi_trader.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: Qubx
3
- Version: 1.1.2.dev7
3
+ Version: 1.1.2.dev8
4
4
  Summary: Qubx - Quantitative Trading Framework
5
5
  Project-URL: homepage, https://xlydian.com
6
6
  Project-URL: repository, https://github.com/xLydianSoftware/Qubx
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
18
18
  commit_id: str | None
19
19
  __commit_id__: str | None
20
20
 
21
- __version__ = version = '1.1.2.dev7'
22
- __version_tuple__ = version_tuple = (1, 1, 2, 'dev7')
21
+ __version__ = version = '1.1.2.dev8'
22
+ __version_tuple__ = version_tuple = (1, 1, 2, 'dev8')
23
23
 
24
24
  __commit_id__ = commit_id = None
@@ -414,12 +414,13 @@ class SimulationResultsSaver:
414
414
  self._storage_options,
415
415
  dst_name=f"{self._config_name}.log",
416
416
  )
417
+ # - only remove temp file after successful upload
418
+ try:
419
+ os.unlink(log_file)
420
+ except Exception:
421
+ pass
417
422
  except Exception as _e:
418
423
  logger.warning(f"[SimulationResultsSaver] Failed to upload log file: {_e}")
419
- try:
420
- os.unlink(log_file)
421
- except Exception:
422
- pass
423
424
 
424
425
  def close(self) -> None:
425
426
  """Ensure pending write completes (called if write_completed/write_failed not used)."""
@@ -474,7 +475,7 @@ class SimulationResultsSaver:
474
475
  return
475
476
 
476
477
  def _do_log() -> None:
477
- """Upload temp log file to run_dir and delete the local copy."""
478
+ """Upload temp log file to run_dir and delete the local copy only on success."""
478
479
  if log_file is None:
479
480
  return
480
481
  try:
@@ -484,12 +485,13 @@ class SimulationResultsSaver:
484
485
  self._storage_options,
485
486
  dst_name=f"{self._config_name}.log",
486
487
  )
488
+ # - only remove temp file after successful upload so fallback can still use it
489
+ try:
490
+ os.unlink(log_file)
491
+ except Exception:
492
+ pass
487
493
  except Exception as _e:
488
494
  logger.warning(f"[SimulationResultsSaver] Failed to upload log file: {_e}")
489
- try:
490
- os.unlink(log_file)
491
- except Exception:
492
- pass
493
495
 
494
496
  if len(test_res) > 1:
495
497
  # ── variation set ────────────────────────────────────────────────
@@ -71,7 +71,7 @@ from qubx.utils.runner.factory import (
71
71
  create_notifiers,
72
72
  create_state_persistence,
73
73
  )
74
- from qubx.utils.s3 import is_cloud_path
74
+ from qubx.utils.s3 import S3Client, is_account_uri, is_cloud_path
75
75
  from qubx.utils.time import convert_seconds_to_str, to_timedelta, to_timestamp
76
76
 
77
77
  from .accounts import AccountConfigurationManager
@@ -1074,6 +1074,75 @@ def _build_sim_params(
1074
1074
  return {"data": data, "custom_data": data_i}, sim_params
1075
1075
 
1076
1076
 
1077
+ def _safe_store_results(
1078
+ results_saver: "SimulationResultsSaver",
1079
+ test_res: list,
1080
+ sim_time_sec: int,
1081
+ cloud_log_file: str | None,
1082
+ save_path: str | None,
1083
+ yaml_name: str,
1084
+ strategy_full_classes: str | list[str],
1085
+ simulation_name: str,
1086
+ sim_start: str,
1087
+ sim_stop: str,
1088
+ v_id: str,
1089
+ config_file: Path,
1090
+ tags: list[str],
1091
+ descr: str,
1092
+ is_variation: bool,
1093
+ ) -> None:
1094
+ """
1095
+ Store simulation results, falling back to a local temp directory if cloud storage is unavailable.
1096
+
1097
+ If ``save_path`` is a cloud URI and writing fails (network issue, credentials, etc.),
1098
+ results are saved to ``{tempdir}/backtests/`` so completed simulations are never lost.
1099
+ Any cloud log file is copied to the fallback run directory before the temp file is removed.
1100
+ For non-cloud failures the exception is re-raised as usual.
1101
+ """
1102
+ try:
1103
+ results_saver.store_simulation_results(test_res, sim_time_sec, log_file=cloud_log_file)
1104
+ except Exception as _store_err:
1105
+ if save_path is not None and is_cloud_path(save_path):
1106
+ import os
1107
+ import shutil
1108
+ import tempfile
1109
+
1110
+ _fallback_base = str(Path(tempfile.gettempdir()) / "backtests")
1111
+ logger.warning(
1112
+ f"[simulate_strategy] Failed to save results to cloud storage ({save_path}): {_store_err}"
1113
+ f"\n → Falling back to local storage: {_fallback_base}"
1114
+ )
1115
+ _fallback_saver = SimulationResultsSaver(
1116
+ name=yaml_name,
1117
+ strategy_class=strategy_full_classes,
1118
+ config_name=simulation_name,
1119
+ sim_start=sim_start,
1120
+ sim_stop=sim_stop,
1121
+ save_path=_fallback_base,
1122
+ run_id=v_id,
1123
+ config_file=str(config_file),
1124
+ tags=tags,
1125
+ description=descr,
1126
+ is_variation=is_variation,
1127
+ storage_options=None, # - local, no cloud credentials needed
1128
+ )
1129
+ # - cloud log file: copy to fallback run_dir instead of uploading
1130
+ _fallback_log: str | None = None
1131
+ if cloud_log_file is not None:
1132
+ try:
1133
+ makedirs(_fallback_saver.run_dir)
1134
+ _dst = Path(_fallback_saver.run_dir) / f"{simulation_name}.log"
1135
+ shutil.copy2(cloud_log_file, str(_dst))
1136
+ os.unlink(cloud_log_file)
1137
+ logger.info(f"[simulate_strategy] Log saved locally: {_dst}")
1138
+ except Exception as _log_err:
1139
+ logger.warning(f"[simulate_strategy] Could not copy log to fallback dir: {_log_err}")
1140
+ _fallback_saver.store_simulation_results(test_res, sim_time_sec, log_file=_fallback_log)
1141
+ print(f" > Results saved locally (cloud fallback): {green(_fallback_saver.run_dir)}")
1142
+ else:
1143
+ raise
1144
+
1145
+
1077
1146
  def simulate_strategy(
1078
1147
  config_file: Path,
1079
1148
  save_path: str | None = None,
@@ -1103,6 +1172,12 @@ def simulate_strategy(
1103
1172
  if not config_file.exists():
1104
1173
  raise FileNotFoundError(f"Configuration file for simualtion not found: {config_file}")
1105
1174
 
1175
+ # - resolve account URI (e.g. r2:backtests) → s3:// + credentials before any path use
1176
+ if save_path is not None and is_account_uri(save_path) and storage_options is None:
1177
+ _client, _s3_key = S3Client.from_uri(save_path)
1178
+ storage_options = _client.storage_options
1179
+ save_path = f"s3://{_s3_key}"
1180
+
1106
1181
  cfg = load_strategy_config_from_yaml(config_file)
1107
1182
 
1108
1183
  # Load plugins from configuration
@@ -1230,7 +1305,23 @@ def simulate_strategy(
1230
1305
 
1231
1306
  if _results_saver is not None:
1232
1307
  # - for cloud: pass temp log file so saver uploads it; for local it's already in run_dir
1233
- _results_saver.store_simulation_results(test_res, _sim_time_sec, log_file=_cloud_log_file)
1308
+ _safe_store_results(
1309
+ results_saver=_results_saver,
1310
+ test_res=test_res,
1311
+ sim_time_sec=_sim_time_sec,
1312
+ cloud_log_file=_cloud_log_file,
1313
+ save_path=save_path,
1314
+ yaml_name=_yaml_name,
1315
+ strategy_full_classes=_strategy_full_classes,
1316
+ simulation_name=simulation_name,
1317
+ sim_start=cfg.simulation.start,
1318
+ sim_stop=cfg.simulation.stop,
1319
+ v_id=_v_id,
1320
+ config_file=config_file,
1321
+ tags=_tags,
1322
+ descr=_descr,
1323
+ is_variation=bool(cfg.simulation.variate),
1324
+ )
1234
1325
  elif _use_storage is False and len(test_res) > 0:
1235
1326
  # - no saver (no output path) — just log timing
1236
1327
  print(f" > Simulation finished in {green(convert_seconds_to_str(_sim_time_sec))}")
@@ -568,7 +568,6 @@ def convert_times_to_ns(times: np.ndarray, timestamp_units: str = "ns") -> np.nd
568
568
  return times
569
569
 
570
570
 
571
-
572
571
  def find_minimal_timeframe(timestamps: list[pd.Timestamp]) -> str:
573
572
  """
574
573
  Find the minimal standard trading timeframe that covers all timestamps.
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes