Qubx 0.6.87__tar.gz → 0.6.89__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.

Potentially problematic release.


This version of Qubx might be problematic. Click here for more details.

Files changed (216) hide show
  1. {qubx-0.6.87 → qubx-0.6.89}/PKG-INFO +1 -1
  2. {qubx-0.6.87 → qubx-0.6.89}/pyproject.toml +1 -1
  3. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/exporters/formatters/base.py +0 -1
  4. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/exporters/formatters/target_position.py +2 -0
  5. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/exporters/redis_streams.py +24 -4
  6. {qubx-0.6.87 → qubx-0.6.89}/LICENSE +0 -0
  7. {qubx-0.6.87 → qubx-0.6.89}/README.md +0 -0
  8. {qubx-0.6.87 → qubx-0.6.89}/build.py +0 -0
  9. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/__init__.py +0 -0
  10. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/_nb_magic.py +0 -0
  11. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/backtester/__init__.py +0 -0
  12. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/backtester/account.py +0 -0
  13. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/backtester/broker.py +0 -0
  14. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/backtester/data.py +0 -0
  15. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/backtester/management.py +0 -0
  16. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/backtester/ome.py +0 -0
  17. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/backtester/optimization.py +0 -0
  18. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/backtester/runner.py +0 -0
  19. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/backtester/sentinels.py +0 -0
  20. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/backtester/simulated_data.py +0 -0
  21. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/backtester/simulated_exchange.py +0 -0
  22. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/backtester/simulator.py +0 -0
  23. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/backtester/utils.py +0 -0
  24. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/cli/__init__.py +0 -0
  25. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/cli/commands.py +0 -0
  26. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/cli/deploy.py +0 -0
  27. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/cli/misc.py +0 -0
  28. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/cli/release.py +0 -0
  29. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/cli/tui.py +0 -0
  30. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/connectors/ccxt/__init__.py +0 -0
  31. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/connectors/ccxt/account.py +0 -0
  32. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/connectors/ccxt/adapters/__init__.py +0 -0
  33. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/connectors/ccxt/adapters/polling_adapter.py +0 -0
  34. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/connectors/ccxt/broker.py +0 -0
  35. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/connectors/ccxt/connection_manager.py +0 -0
  36. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/connectors/ccxt/data.py +0 -0
  37. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/connectors/ccxt/exceptions.py +0 -0
  38. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/connectors/ccxt/exchange_manager.py +0 -0
  39. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/connectors/ccxt/exchanges/__init__.py +0 -0
  40. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/connectors/ccxt/exchanges/base.py +0 -0
  41. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/connectors/ccxt/exchanges/binance/broker.py +0 -0
  42. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/connectors/ccxt/exchanges/binance/exchange.py +0 -0
  43. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/connectors/ccxt/exchanges/bitfinex/bitfinex.py +0 -0
  44. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/connectors/ccxt/exchanges/bitfinex/bitfinex_account.py +0 -0
  45. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/connectors/ccxt/exchanges/hyperliquid/__init__.py +0 -0
  46. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/connectors/ccxt/exchanges/hyperliquid/broker.py +0 -0
  47. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/connectors/ccxt/exchanges/hyperliquid/hyperliquid.py +0 -0
  48. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/connectors/ccxt/exchanges/kraken/kraken.py +0 -0
  49. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/connectors/ccxt/factory.py +0 -0
  50. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/connectors/ccxt/handlers/__init__.py +0 -0
  51. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/connectors/ccxt/handlers/base.py +0 -0
  52. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/connectors/ccxt/handlers/factory.py +0 -0
  53. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/connectors/ccxt/handlers/funding_rate.py +0 -0
  54. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/connectors/ccxt/handlers/liquidation.py +0 -0
  55. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/connectors/ccxt/handlers/ohlc.py +0 -0
  56. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/connectors/ccxt/handlers/open_interest.py +0 -0
  57. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/connectors/ccxt/handlers/orderbook.py +0 -0
  58. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/connectors/ccxt/handlers/quote.py +0 -0
  59. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/connectors/ccxt/handlers/trade.py +0 -0
  60. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/connectors/ccxt/reader.py +0 -0
  61. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/connectors/ccxt/subscription_config.py +0 -0
  62. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/connectors/ccxt/subscription_manager.py +0 -0
  63. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/connectors/ccxt/subscription_orchestrator.py +0 -0
  64. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/connectors/ccxt/utils.py +0 -0
  65. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/connectors/ccxt/warmup_service.py +0 -0
  66. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/connectors/tardis/data.py +0 -0
  67. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/connectors/tardis/utils.py +0 -0
  68. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/core/__init__.py +0 -0
  69. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/core/account.py +0 -0
  70. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/core/basics.py +0 -0
  71. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/core/context.py +0 -0
  72. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/core/deque.py +0 -0
  73. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/core/errors.py +0 -0
  74. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/core/exceptions.py +0 -0
  75. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/core/helpers.py +0 -0
  76. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/core/initializer.py +0 -0
  77. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/core/interfaces.py +0 -0
  78. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/core/loggers.py +0 -0
  79. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/core/lookups.py +0 -0
  80. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/core/metrics.py +0 -0
  81. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/core/mixins/__init__.py +0 -0
  82. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/core/mixins/market.py +0 -0
  83. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/core/mixins/processing.py +0 -0
  84. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/core/mixins/subscription.py +0 -0
  85. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/core/mixins/trading.py +0 -0
  86. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/core/mixins/universe.py +0 -0
  87. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/core/mixins/utils.py +0 -0
  88. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/core/series.pxd +0 -0
  89. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/core/series.pyi +0 -0
  90. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/core/series.pyx +0 -0
  91. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/core/stale_data_detector.py +0 -0
  92. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/core/utils.pyi +0 -0
  93. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/core/utils.pyx +0 -0
  94. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/data/__init__.py +0 -0
  95. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/data/composite.py +0 -0
  96. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/data/helpers.py +0 -0
  97. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/data/hft.py +0 -0
  98. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/data/readers.py +0 -0
  99. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/data/registry.py +0 -0
  100. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/data/tardis.py +0 -0
  101. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/emitters/__init__.py +0 -0
  102. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/emitters/base.py +0 -0
  103. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/emitters/composite.py +0 -0
  104. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/emitters/csv.py +0 -0
  105. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/emitters/indicator.py +0 -0
  106. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/emitters/inmemory.py +0 -0
  107. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/emitters/prometheus.py +0 -0
  108. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/emitters/questdb.py +0 -0
  109. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/exporters/__init__.py +0 -0
  110. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/exporters/composite.py +0 -0
  111. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/exporters/formatters/__init__.py +0 -0
  112. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/exporters/formatters/incremental.py +0 -0
  113. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/exporters/formatters/slack.py +0 -0
  114. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/exporters/slack.py +0 -0
  115. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/features/__init__.py +0 -0
  116. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/features/core.py +0 -0
  117. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/features/orderbook.py +0 -0
  118. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/features/price.py +0 -0
  119. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/features/trades.py +0 -0
  120. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/features/utils.py +0 -0
  121. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/gathering/simplest.py +0 -0
  122. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/health/__init__.py +0 -0
  123. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/health/base.py +0 -0
  124. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/loggers/__init__.py +0 -0
  125. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/loggers/csv.py +0 -0
  126. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/loggers/factory.py +0 -0
  127. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/loggers/inmemory.py +0 -0
  128. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/loggers/mongo.py +0 -0
  129. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/math/__init__.py +0 -0
  130. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/math/stats.py +0 -0
  131. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/notifications/__init__.py +0 -0
  132. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/notifications/composite.py +0 -0
  133. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/notifications/slack.py +0 -0
  134. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/notifications/throttler.py +0 -0
  135. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/pandaz/__init__.py +0 -0
  136. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/pandaz/ta.py +0 -0
  137. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/pandaz/utils.py +0 -0
  138. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/resources/_build.py +0 -0
  139. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/resources/crypto-fees.ini +0 -0
  140. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/resources/instruments/hyperliquid-spot.json +0 -0
  141. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/resources/instruments/hyperliquid.f-perpetual.json +0 -0
  142. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/resources/instruments/symbols-binance-spot.json +0 -0
  143. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/resources/instruments/symbols-binance.cm-future.json +0 -0
  144. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/resources/instruments/symbols-binance.cm-perpetual.json +0 -0
  145. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/resources/instruments/symbols-binance.um-future.json +0 -0
  146. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/resources/instruments/symbols-binance.um-perpetual.json +0 -0
  147. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/resources/instruments/symbols-bitfinex.f-perpetual.json +0 -0
  148. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/resources/instruments/symbols-kraken-spot.json +0 -0
  149. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/resources/instruments/symbols-kraken.f-future.json +0 -0
  150. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/resources/instruments/symbols-kraken.f-perpetual.json +0 -0
  151. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/restarts/__init__.py +0 -0
  152. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/restarts/state_resolvers.py +0 -0
  153. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/restarts/time_finders.py +0 -0
  154. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/restorers/__init__.py +0 -0
  155. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/restorers/balance.py +0 -0
  156. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/restorers/factory.py +0 -0
  157. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/restorers/interfaces.py +0 -0
  158. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/restorers/position.py +0 -0
  159. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/restorers/signal.py +0 -0
  160. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/restorers/state.py +0 -0
  161. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/restorers/utils.py +0 -0
  162. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/ta/__init__.py +0 -0
  163. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/ta/indicators.pxd +0 -0
  164. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/ta/indicators.pyi +0 -0
  165. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/ta/indicators.pyx +0 -0
  166. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/templates/__init__.py +0 -0
  167. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/templates/base.py +0 -0
  168. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/templates/project/accounts.toml.j2 +0 -0
  169. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/templates/project/config.yml.j2 +0 -0
  170. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/templates/project/jlive.sh.j2 +0 -0
  171. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/templates/project/jpaper.sh.j2 +0 -0
  172. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/templates/project/pyproject.toml.j2 +0 -0
  173. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/templates/project/src/{{ strategy_name }}/__init__.py.j2 +0 -0
  174. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/templates/project/src/{{ strategy_name }}/strategy.py.j2 +0 -0
  175. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/templates/project/template.yml +0 -0
  176. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/templates/simple/__init__.py.j2 +0 -0
  177. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/templates/simple/accounts.toml.j2 +0 -0
  178. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/templates/simple/config.yml.j2 +0 -0
  179. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/templates/simple/jlive.sh.j2 +0 -0
  180. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/templates/simple/jpaper.sh.j2 +0 -0
  181. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/templates/simple/strategy.py.j2 +0 -0
  182. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/templates/simple/template.yml +0 -0
  183. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/trackers/__init__.py +0 -0
  184. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/trackers/advanced.py +0 -0
  185. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/trackers/composite.py +0 -0
  186. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/trackers/rebalancers.py +0 -0
  187. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/trackers/riskctrl.py +0 -0
  188. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/trackers/sizers.py +0 -0
  189. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/utils/__init__.py +0 -0
  190. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/utils/_pyxreloader.py +0 -0
  191. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/utils/charting/lookinglass.py +0 -0
  192. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/utils/charting/mpl_helpers.py +0 -0
  193. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/utils/charting/orderbook.py +0 -0
  194. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/utils/collections.py +0 -0
  195. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/utils/marketdata/binance.py +0 -0
  196. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/utils/marketdata/ccxt.py +0 -0
  197. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/utils/marketdata/dukas.py +0 -0
  198. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/utils/misc.py +0 -0
  199. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/utils/ntp.py +0 -0
  200. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/utils/numbers_utils.py +0 -0
  201. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/utils/orderbook.py +0 -0
  202. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/utils/plotting/__init__.py +0 -0
  203. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/utils/plotting/dashboard.py +0 -0
  204. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/utils/plotting/data.py +0 -0
  205. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/utils/plotting/interfaces.py +0 -0
  206. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/utils/plotting/renderers/__init__.py +0 -0
  207. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/utils/plotting/renderers/plotly.py +0 -0
  208. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/utils/questdb.py +0 -0
  209. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/utils/runner/__init__.py +0 -0
  210. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/utils/runner/_jupyter_runner.pyt +0 -0
  211. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/utils/runner/accounts.py +0 -0
  212. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/utils/runner/configs.py +0 -0
  213. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/utils/runner/factory.py +0 -0
  214. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/utils/runner/runner.py +0 -0
  215. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/utils/time.py +0 -0
  216. {qubx-0.6.87 → qubx-0.6.89}/src/qubx/utils/version.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: Qubx
3
- Version: 0.6.87
3
+ Version: 0.6.89
4
4
  Summary: Qubx - Quantitative Trading Framework
5
5
  License-File: LICENSE
6
6
  Author: Dmitry Marienko
@@ -4,7 +4,7 @@ build-backend = "poetry.core.masonry.api"
4
4
 
5
5
  [tool.poetry]
6
6
  name = "Qubx"
7
- version = "0.6.87"
7
+ version = "0.6.89"
8
8
  description = "Qubx - Quantitative Trading Framework"
9
9
  authors = [ "Dmitry Marienko <dmitry.marienko@xlydian.com>", "Yuriy Arabskyy <yuriy.arabskyy@xlydian.com>",]
10
10
  readme = "README.md"
@@ -134,7 +134,6 @@ class DefaultFormatter(IExportFormatter):
134
134
  "exchange": target.instrument.exchange,
135
135
  "target_size": str(target.target_position_size),
136
136
  "price": str(target.price) if target.price is not None else "",
137
- "signal_id": str(id(target.signal)) if target.signal else "",
138
137
  }
139
138
 
140
139
  def format_position_change(
@@ -19,6 +19,7 @@ class TargetPositionFormatter(DefaultFormatter):
19
19
  self,
20
20
  alert_name: str,
21
21
  exchange_mapping: Optional[dict[str, str]] = None,
22
+ account: Optional[IAccountViewer] = None,
22
23
  ):
23
24
  """
24
25
  Initialize the TargetPositionFormatter.
@@ -27,6 +28,7 @@ class TargetPositionFormatter(DefaultFormatter):
27
28
  alert_name: The name of the alert to include in the messages
28
29
  exchange_mapping: Optional mapping of exchange names to use in messages.
29
30
  If an exchange is not in the mapping, the instrument's exchange is used.
31
+ account: The account viewer to get account information like total capital, leverage, etc.
30
32
  """
31
33
  super().__init__()
32
34
  self.alert_name = alert_name
@@ -152,16 +152,27 @@ class RedisStreamsExporter(ITradeDataExport):
152
152
  return
153
153
 
154
154
  try:
155
+ exported_count = 0
155
156
  for signal in signals:
156
157
  # Format the signal using the formatter
157
158
  data = self._formatter.format_signal(time, signal, account)
158
159
 
160
+ # Skip if formatter returned empty data
161
+ if not data:
162
+ logger.debug(
163
+ f"[RedisStreamsExporter] Skipping signal for {signal.instrument} - formatter returned empty data"
164
+ )
165
+ continue
166
+
159
167
  # Add to Redis stream in background thread
160
168
  self._add_to_redis_stream(self._signals_stream, data)
169
+ exported_count += 1
161
170
 
162
- logger.debug(f"[RedisStreamsExporter] Queued {len(signals)} signals for export to {self._signals_stream}")
171
+ logger.debug(
172
+ f"[RedisStreamsExporter] Queued {exported_count}/{len(signals)} signals for export to {self._signals_stream}"
173
+ )
163
174
  except Exception:
164
- logger.exception(f"[RedisStreamsExporter] Failed to export signals")
175
+ logger.exception("[RedisStreamsExporter] Failed to export signals")
165
176
 
166
177
  def export_target_positions(self, time: dt_64, targets: List[TargetPosition], account: IAccountViewer) -> None:
167
178
  """
@@ -176,18 +187,27 @@ class RedisStreamsExporter(ITradeDataExport):
176
187
  return
177
188
 
178
189
  try:
190
+ exported_count = 0
179
191
  for target in targets:
180
192
  # Format the target position using the formatter
181
193
  data = self._formatter.format_target_position(time, target, account)
182
194
 
195
+ # Skip if formatter returned empty data
196
+ if not data:
197
+ logger.debug(
198
+ f"[RedisStreamsExporter] Skipping target position for {target.instrument} - formatter returned empty data"
199
+ )
200
+ continue
201
+
183
202
  # Add to Redis stream in background thread
184
203
  self._add_to_redis_stream(self._targets_stream, data)
204
+ exported_count += 1
185
205
 
186
206
  logger.debug(
187
- f"[RedisStreamsExporter] Queued {len(targets)} target positions for export to {self._targets_stream}"
207
+ f"[RedisStreamsExporter] Queued {exported_count}/{len(targets)} target positions for export to {self._targets_stream}"
188
208
  )
189
209
  except Exception:
190
- logger.exception(f"[RedisStreamsExporter] Failed to export target positions")
210
+ logger.exception("[RedisStreamsExporter] Failed to export target positions")
191
211
 
192
212
  def export_position_changes(
193
213
  self, time: dt_64, instrument: Instrument, price: float, account: IAccountViewer
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
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