Qubx 0.6.66__tar.gz → 0.6.67__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 (174) hide show
  1. {qubx-0.6.66 → qubx-0.6.67}/PKG-INFO +1 -1
  2. {qubx-0.6.66 → qubx-0.6.67}/pyproject.toml +1 -1
  3. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/connectors/ccxt/data.py +10 -2
  4. {qubx-0.6.66 → qubx-0.6.67}/LICENSE +0 -0
  5. {qubx-0.6.66 → qubx-0.6.67}/README.md +0 -0
  6. {qubx-0.6.66 → qubx-0.6.67}/build.py +0 -0
  7. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/__init__.py +0 -0
  8. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/_nb_magic.py +0 -0
  9. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/backtester/__init__.py +0 -0
  10. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/backtester/account.py +0 -0
  11. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/backtester/broker.py +0 -0
  12. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/backtester/data.py +0 -0
  13. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/backtester/management.py +0 -0
  14. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/backtester/ome.py +0 -0
  15. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/backtester/optimization.py +0 -0
  16. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/backtester/runner.py +0 -0
  17. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/backtester/sentinels.py +0 -0
  18. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/backtester/simulated_data.py +0 -0
  19. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/backtester/simulated_exchange.py +0 -0
  20. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/backtester/simulator.py +0 -0
  21. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/backtester/utils.py +0 -0
  22. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/cli/__init__.py +0 -0
  23. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/cli/commands.py +0 -0
  24. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/cli/deploy.py +0 -0
  25. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/cli/misc.py +0 -0
  26. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/cli/release.py +0 -0
  27. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/cli/tui.py +0 -0
  28. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/connectors/ccxt/__init__.py +0 -0
  29. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/connectors/ccxt/account.py +0 -0
  30. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/connectors/ccxt/broker.py +0 -0
  31. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/connectors/ccxt/exceptions.py +0 -0
  32. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/connectors/ccxt/exchanges/__init__.py +0 -0
  33. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/connectors/ccxt/exchanges/binance/broker.py +0 -0
  34. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/connectors/ccxt/exchanges/binance/exchange.py +0 -0
  35. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/connectors/ccxt/exchanges/bitfinex/bitfinex.py +0 -0
  36. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/connectors/ccxt/exchanges/bitfinex/bitfinex_account.py +0 -0
  37. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/connectors/ccxt/exchanges/kraken/kraken.py +0 -0
  38. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/connectors/ccxt/factory.py +0 -0
  39. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/connectors/ccxt/reader.py +0 -0
  40. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/connectors/ccxt/utils.py +0 -0
  41. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/connectors/tardis/data.py +0 -0
  42. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/connectors/tardis/utils.py +0 -0
  43. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/core/__init__.py +0 -0
  44. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/core/account.py +0 -0
  45. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/core/basics.py +0 -0
  46. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/core/context.py +0 -0
  47. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/core/deque.py +0 -0
  48. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/core/errors.py +0 -0
  49. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/core/exceptions.py +0 -0
  50. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/core/helpers.py +0 -0
  51. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/core/initializer.py +0 -0
  52. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/core/interfaces.py +0 -0
  53. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/core/loggers.py +0 -0
  54. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/core/lookups.py +0 -0
  55. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/core/metrics.py +0 -0
  56. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/core/mixins/__init__.py +0 -0
  57. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/core/mixins/market.py +0 -0
  58. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/core/mixins/processing.py +0 -0
  59. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/core/mixins/subscription.py +0 -0
  60. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/core/mixins/trading.py +0 -0
  61. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/core/mixins/universe.py +0 -0
  62. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/core/series.pxd +0 -0
  63. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/core/series.pyi +0 -0
  64. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/core/series.pyx +0 -0
  65. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/core/stale_data_detector.py +0 -0
  66. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/core/utils.pyi +0 -0
  67. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/core/utils.pyx +0 -0
  68. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/data/__init__.py +0 -0
  69. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/data/composite.py +0 -0
  70. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/data/helpers.py +0 -0
  71. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/data/hft.py +0 -0
  72. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/data/readers.py +0 -0
  73. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/data/registry.py +0 -0
  74. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/data/tardis.py +0 -0
  75. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/emitters/__init__.py +0 -0
  76. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/emitters/base.py +0 -0
  77. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/emitters/composite.py +0 -0
  78. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/emitters/csv.py +0 -0
  79. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/emitters/indicator.py +0 -0
  80. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/emitters/inmemory.py +0 -0
  81. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/emitters/prometheus.py +0 -0
  82. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/emitters/questdb.py +0 -0
  83. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/exporters/__init__.py +0 -0
  84. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/exporters/composite.py +0 -0
  85. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/exporters/formatters/__init__.py +0 -0
  86. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/exporters/formatters/base.py +0 -0
  87. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/exporters/formatters/incremental.py +0 -0
  88. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/exporters/formatters/slack.py +0 -0
  89. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/exporters/redis_streams.py +0 -0
  90. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/exporters/slack.py +0 -0
  91. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/features/__init__.py +0 -0
  92. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/features/core.py +0 -0
  93. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/features/orderbook.py +0 -0
  94. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/features/price.py +0 -0
  95. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/features/trades.py +0 -0
  96. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/features/utils.py +0 -0
  97. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/gathering/simplest.py +0 -0
  98. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/health/__init__.py +0 -0
  99. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/health/base.py +0 -0
  100. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/loggers/__init__.py +0 -0
  101. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/loggers/csv.py +0 -0
  102. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/loggers/factory.py +0 -0
  103. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/loggers/inmemory.py +0 -0
  104. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/loggers/mongo.py +0 -0
  105. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/math/__init__.py +0 -0
  106. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/math/stats.py +0 -0
  107. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/notifications/__init__.py +0 -0
  108. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/notifications/composite.py +0 -0
  109. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/notifications/slack.py +0 -0
  110. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/notifications/throttler.py +0 -0
  111. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/pandaz/__init__.py +0 -0
  112. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/pandaz/ta.py +0 -0
  113. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/pandaz/utils.py +0 -0
  114. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/resources/_build.py +0 -0
  115. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/resources/crypto-fees.ini +0 -0
  116. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/resources/instruments/symbols-binance-spot.json +0 -0
  117. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/resources/instruments/symbols-binance.cm-future.json +0 -0
  118. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/resources/instruments/symbols-binance.cm-perpetual.json +0 -0
  119. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/resources/instruments/symbols-binance.um-future.json +0 -0
  120. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/resources/instruments/symbols-binance.um-perpetual.json +0 -0
  121. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/resources/instruments/symbols-bitfinex.f-perpetual.json +0 -0
  122. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/resources/instruments/symbols-hyperliquid-spot.json +0 -0
  123. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/resources/instruments/symbols-hyperliquid.f-perpetual.json +0 -0
  124. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/resources/instruments/symbols-kraken-spot.json +0 -0
  125. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/resources/instruments/symbols-kraken.f-future.json +0 -0
  126. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/resources/instruments/symbols-kraken.f-perpetual.json +0 -0
  127. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/restarts/__init__.py +0 -0
  128. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/restarts/state_resolvers.py +0 -0
  129. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/restarts/time_finders.py +0 -0
  130. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/restorers/__init__.py +0 -0
  131. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/restorers/balance.py +0 -0
  132. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/restorers/factory.py +0 -0
  133. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/restorers/interfaces.py +0 -0
  134. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/restorers/position.py +0 -0
  135. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/restorers/signal.py +0 -0
  136. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/restorers/state.py +0 -0
  137. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/restorers/utils.py +0 -0
  138. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/ta/__init__.py +0 -0
  139. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/ta/indicators.pxd +0 -0
  140. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/ta/indicators.pyi +0 -0
  141. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/ta/indicators.pyx +0 -0
  142. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/trackers/__init__.py +0 -0
  143. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/trackers/advanced.py +0 -0
  144. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/trackers/composite.py +0 -0
  145. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/trackers/rebalancers.py +0 -0
  146. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/trackers/riskctrl.py +0 -0
  147. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/trackers/sizers.py +0 -0
  148. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/utils/__init__.py +0 -0
  149. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/utils/_pyxreloader.py +0 -0
  150. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/utils/charting/lookinglass.py +0 -0
  151. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/utils/charting/mpl_helpers.py +0 -0
  152. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/utils/collections.py +0 -0
  153. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/utils/marketdata/binance.py +0 -0
  154. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/utils/marketdata/ccxt.py +0 -0
  155. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/utils/marketdata/dukas.py +0 -0
  156. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/utils/misc.py +0 -0
  157. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/utils/ntp.py +0 -0
  158. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/utils/numbers_utils.py +0 -0
  159. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/utils/orderbook.py +0 -0
  160. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/utils/plotting/__init__.py +0 -0
  161. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/utils/plotting/dashboard.py +0 -0
  162. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/utils/plotting/data.py +0 -0
  163. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/utils/plotting/interfaces.py +0 -0
  164. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/utils/plotting/renderers/__init__.py +0 -0
  165. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/utils/plotting/renderers/plotly.py +0 -0
  166. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/utils/questdb.py +0 -0
  167. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/utils/runner/__init__.py +0 -0
  168. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/utils/runner/_jupyter_runner.pyt +0 -0
  169. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/utils/runner/accounts.py +0 -0
  170. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/utils/runner/configs.py +0 -0
  171. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/utils/runner/factory.py +0 -0
  172. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/utils/runner/runner.py +0 -0
  173. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/utils/time.py +0 -0
  174. {qubx-0.6.66 → qubx-0.6.67}/src/qubx/utils/version.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: Qubx
3
- Version: 0.6.66
3
+ Version: 0.6.67
4
4
  Summary: Qubx - Quantitative Trading Framework
5
5
  Author: Dmitry Marienko
6
6
  Author-email: dmitry.marienko@xlydian.com
@@ -4,7 +4,7 @@ build-backend = "poetry.core.masonry.api"
4
4
 
5
5
  [tool.poetry]
6
6
  name = "Qubx"
7
- version = "0.6.66"
7
+ version = "0.6.67"
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"
@@ -533,8 +533,16 @@ class CcxtDataProvider(IDataProvider):
533
533
  instrument = ccxt_find_instrument(exch_symbol, self._exchange, _symbol_to_instrument)
534
534
  for _, ohlcvs in _data.items():
535
535
  for oh in ohlcvs:
536
- timestamp_ns = oh[0] * 1_000_000
537
- self._health_monitor.record_data_arrival(sub_type, dt_64(timestamp_ns, "ns"))
536
+ timestamp = self.time_provider.time()
537
+ bar_timestamp = dt_64(oh[0] * 1_000_000, "ns")
538
+
539
+ if pd.Timestamp(bar_timestamp).floor(timeframe) != pd.Timestamp(timestamp).floor(timeframe):
540
+ # - if the bar time refers to the previuos bar as current timestamp, then send it with a timestamp of 1ms before end of bar
541
+ timestamp = dt_64(pd.Timestamp(timestamp).floor(timeframe) - pd.Timedelta("1ms"), "ns")
542
+
543
+ timestamp_ns = timestamp.astype("datetime64[ns]").item()
544
+
545
+ self._health_monitor.record_data_arrival(sub_type, timestamp)
538
546
  channel.send(
539
547
  (
540
548
  instrument,
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