Qubx 0.7.6__tar.gz → 0.7.7__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 (272) hide show
  1. {qubx-0.7.6 → qubx-0.7.7}/PKG-INFO +1 -1
  2. {qubx-0.7.6 → qubx-0.7.7}/pyproject.toml +1 -1
  3. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/core/series.pxd +10 -1
  4. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/core/series.pyi +2 -0
  5. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/core/series.pyx +35 -0
  6. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/ta/indicators.pxd +2 -6
  7. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/ta/indicators.pyx +4 -27
  8. {qubx-0.7.6 → qubx-0.7.7}/LICENSE +0 -0
  9. {qubx-0.7.6 → qubx-0.7.7}/README.md +0 -0
  10. {qubx-0.7.6 → qubx-0.7.7}/build.py +0 -0
  11. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/__init__.py +0 -0
  12. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/_nb_magic.py +0 -0
  13. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/backtester/__init__.py +0 -0
  14. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/backtester/account.py +0 -0
  15. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/backtester/broker.py +0 -0
  16. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/backtester/data.py +0 -0
  17. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/backtester/management.py +0 -0
  18. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/backtester/ome.py +0 -0
  19. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/backtester/optimization.py +0 -0
  20. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/backtester/runner.py +0 -0
  21. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/backtester/sentinels.py +0 -0
  22. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/backtester/simulated_data.py +0 -0
  23. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/backtester/simulated_exchange.py +0 -0
  24. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/backtester/simulator.py +0 -0
  25. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/backtester/transfers.py +0 -0
  26. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/backtester/utils.py +0 -0
  27. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/cli/__init__.py +0 -0
  28. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/cli/commands.py +0 -0
  29. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/cli/deploy.py +0 -0
  30. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/cli/misc.py +0 -0
  31. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/cli/release.py +0 -0
  32. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/cli/tui.py +0 -0
  33. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/connectors/ccxt/__init__.py +0 -0
  34. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/connectors/ccxt/account.py +0 -0
  35. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/connectors/ccxt/adapters/__init__.py +0 -0
  36. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/connectors/ccxt/adapters/polling_adapter.py +0 -0
  37. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/connectors/ccxt/broker.py +0 -0
  38. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/connectors/ccxt/connection_manager.py +0 -0
  39. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/connectors/ccxt/data.py +0 -0
  40. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/connectors/ccxt/exceptions.py +0 -0
  41. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/connectors/ccxt/exchange_manager.py +0 -0
  42. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/connectors/ccxt/exchanges/__init__.py +0 -0
  43. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/connectors/ccxt/exchanges/base.py +0 -0
  44. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/connectors/ccxt/exchanges/binance/broker.py +0 -0
  45. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/connectors/ccxt/exchanges/binance/exchange.py +0 -0
  46. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/connectors/ccxt/exchanges/bitfinex/bitfinex.py +0 -0
  47. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/connectors/ccxt/exchanges/bitfinex/bitfinex_account.py +0 -0
  48. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/connectors/ccxt/exchanges/hyperliquid/__init__.py +0 -0
  49. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/connectors/ccxt/exchanges/hyperliquid/account.py +0 -0
  50. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/connectors/ccxt/exchanges/hyperliquid/broker.py +0 -0
  51. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/connectors/ccxt/exchanges/hyperliquid/hyperliquid.py +0 -0
  52. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/connectors/ccxt/exchanges/kraken/kraken.py +0 -0
  53. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/connectors/ccxt/factory.py +0 -0
  54. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/connectors/ccxt/handlers/__init__.py +0 -0
  55. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/connectors/ccxt/handlers/base.py +0 -0
  56. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/connectors/ccxt/handlers/factory.py +0 -0
  57. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/connectors/ccxt/handlers/funding_rate.py +0 -0
  58. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/connectors/ccxt/handlers/liquidation.py +0 -0
  59. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/connectors/ccxt/handlers/ohlc.py +0 -0
  60. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/connectors/ccxt/handlers/open_interest.py +0 -0
  61. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/connectors/ccxt/handlers/orderbook.py +0 -0
  62. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/connectors/ccxt/handlers/quote.py +0 -0
  63. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/connectors/ccxt/handlers/trade.py +0 -0
  64. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/connectors/ccxt/reader.py +0 -0
  65. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/connectors/ccxt/subscription_config.py +0 -0
  66. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/connectors/ccxt/subscription_manager.py +0 -0
  67. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/connectors/ccxt/subscription_orchestrator.py +0 -0
  68. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/connectors/ccxt/utils.py +0 -0
  69. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/connectors/ccxt/warmup_service.py +0 -0
  70. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/connectors/tardis/data.py +0 -0
  71. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/connectors/tardis/utils.py +0 -0
  72. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/connectors/xlighter/__init__.py +0 -0
  73. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/connectors/xlighter/account.py +0 -0
  74. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/connectors/xlighter/broker.py +0 -0
  75. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/connectors/xlighter/client.py +0 -0
  76. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/connectors/xlighter/constants.py +0 -0
  77. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/connectors/xlighter/data.py +0 -0
  78. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/connectors/xlighter/extensions.py +0 -0
  79. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/connectors/xlighter/factory.py +0 -0
  80. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/connectors/xlighter/handlers/__init__.py +0 -0
  81. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/connectors/xlighter/handlers/base.py +0 -0
  82. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/connectors/xlighter/handlers/orderbook.py +0 -0
  83. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/connectors/xlighter/handlers/quote.py +0 -0
  84. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/connectors/xlighter/handlers/stats.py +0 -0
  85. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/connectors/xlighter/handlers/trades.py +0 -0
  86. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/connectors/xlighter/instruments.py +0 -0
  87. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/connectors/xlighter/nonce.py +0 -0
  88. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/connectors/xlighter/parsers.py +0 -0
  89. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/connectors/xlighter/rate_limits.py +0 -0
  90. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/connectors/xlighter/reader.py +0 -0
  91. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/connectors/xlighter/utils.py +0 -0
  92. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/connectors/xlighter/websocket.py +0 -0
  93. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/core/__init__.py +0 -0
  94. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/core/account.py +0 -0
  95. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/core/basics.py +0 -0
  96. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/core/context.py +0 -0
  97. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/core/deque.py +0 -0
  98. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/core/detectors/__init__.py +0 -0
  99. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/core/detectors/delisting.py +0 -0
  100. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/core/detectors/stale.py +0 -0
  101. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/core/errors.py +0 -0
  102. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/core/exceptions.py +0 -0
  103. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/core/helpers.py +0 -0
  104. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/core/initializer.py +0 -0
  105. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/core/interfaces.py +0 -0
  106. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/core/loggers.py +0 -0
  107. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/core/lookups.py +0 -0
  108. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/core/metrics.py +0 -0
  109. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/core/mixins/__init__.py +0 -0
  110. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/core/mixins/market.py +0 -0
  111. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/core/mixins/processing.py +0 -0
  112. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/core/mixins/subscription.py +0 -0
  113. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/core/mixins/trading.py +0 -0
  114. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/core/mixins/universe.py +0 -0
  115. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/core/mixins/utils.py +0 -0
  116. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/core/utils.pyi +0 -0
  117. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/core/utils.pyx +0 -0
  118. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/data/__init__.py +0 -0
  119. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/data/composite.py +0 -0
  120. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/data/containers.py +0 -0
  121. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/data/helpers.py +0 -0
  122. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/data/hft.py +0 -0
  123. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/data/readers.py +0 -0
  124. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/data/registry.py +0 -0
  125. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/data/storage.py +0 -0
  126. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/data/storages/csv.py +0 -0
  127. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/data/storages/questdb.py +0 -0
  128. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/data/storages/utils.py +0 -0
  129. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/data/tardis.py +0 -0
  130. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/data/transformers.py +0 -0
  131. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/emitters/__init__.py +0 -0
  132. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/emitters/base.py +0 -0
  133. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/emitters/composite.py +0 -0
  134. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/emitters/csv.py +0 -0
  135. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/emitters/indicator.py +0 -0
  136. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/emitters/inmemory.py +0 -0
  137. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/emitters/prometheus.py +0 -0
  138. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/emitters/questdb.py +0 -0
  139. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/exporters/__init__.py +0 -0
  140. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/exporters/composite.py +0 -0
  141. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/exporters/formatters/__init__.py +0 -0
  142. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/exporters/formatters/base.py +0 -0
  143. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/exporters/formatters/incremental.py +0 -0
  144. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/exporters/formatters/slack.py +0 -0
  145. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/exporters/formatters/target_position.py +0 -0
  146. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/exporters/redis_streams.py +0 -0
  147. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/exporters/slack.py +0 -0
  148. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/features/__init__.py +0 -0
  149. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/features/core.py +0 -0
  150. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/features/orderbook.py +0 -0
  151. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/features/price.py +0 -0
  152. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/features/trades.py +0 -0
  153. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/features/utils.py +0 -0
  154. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/gathering/simplest.py +0 -0
  155. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/health/__init__.py +0 -0
  156. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/health/base.py +0 -0
  157. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/loggers/__init__.py +0 -0
  158. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/loggers/csv.py +0 -0
  159. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/loggers/factory.py +0 -0
  160. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/loggers/inmemory.py +0 -0
  161. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/loggers/mongo.py +0 -0
  162. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/math/__init__.py +0 -0
  163. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/math/stats.py +0 -0
  164. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/notifications/__init__.py +0 -0
  165. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/notifications/composite.py +0 -0
  166. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/notifications/slack.py +0 -0
  167. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/notifications/throttler.py +0 -0
  168. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/pandaz/__init__.py +0 -0
  169. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/pandaz/ta.py +0 -0
  170. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/pandaz/utils.py +0 -0
  171. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/resources/_build.py +0 -0
  172. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/resources/crypto-fees.ini +0 -0
  173. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/resources/instruments/hyperliquid-spot.json +0 -0
  174. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/resources/instruments/hyperliquid.f-perpetual.json +0 -0
  175. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/resources/instruments/symbols-binance-spot.json +0 -0
  176. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/resources/instruments/symbols-binance.cm-future.json +0 -0
  177. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/resources/instruments/symbols-binance.cm-perpetual.json +0 -0
  178. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/resources/instruments/symbols-binance.um-future.json +0 -0
  179. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/resources/instruments/symbols-binance.um-perpetual.json +0 -0
  180. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/resources/instruments/symbols-bitfinex.f-perpetual.json +0 -0
  181. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/resources/instruments/symbols-kraken-spot.json +0 -0
  182. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/resources/instruments/symbols-kraken.f-future.json +0 -0
  183. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/resources/instruments/symbols-kraken.f-perpetual.json +0 -0
  184. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/restarts/__init__.py +0 -0
  185. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/restarts/state_resolvers.py +0 -0
  186. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/restarts/time_finders.py +0 -0
  187. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/restorers/__init__.py +0 -0
  188. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/restorers/balance.py +0 -0
  189. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/restorers/factory.py +0 -0
  190. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/restorers/interfaces.py +0 -0
  191. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/restorers/position.py +0 -0
  192. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/restorers/signal.py +0 -0
  193. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/restorers/state.py +0 -0
  194. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/restorers/utils.py +0 -0
  195. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/ta/__init__.py +0 -0
  196. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/ta/indicators.pyi +0 -0
  197. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/templates/__init__.py +0 -0
  198. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/templates/base.py +0 -0
  199. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/templates/project/accounts.toml.j2 +0 -0
  200. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/templates/project/config.yml.j2 +0 -0
  201. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/templates/project/jlive.sh.j2 +0 -0
  202. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/templates/project/jpaper.sh.j2 +0 -0
  203. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/templates/project/pyproject.toml.j2 +0 -0
  204. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/templates/project/src/{{ strategy_name }}/__init__.py.j2 +0 -0
  205. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/templates/project/src/{{ strategy_name }}/strategy.py.j2 +0 -0
  206. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/templates/project/template.yml +0 -0
  207. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/templates/simple/__init__.py.j2 +0 -0
  208. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/templates/simple/accounts.toml.j2 +0 -0
  209. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/templates/simple/config.yml.j2 +0 -0
  210. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/templates/simple/jlive.sh.j2 +0 -0
  211. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/templates/simple/jpaper.sh.j2 +0 -0
  212. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/templates/simple/strategy.py.j2 +0 -0
  213. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/templates/simple/template.yml +0 -0
  214. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/trackers/__init__.py +0 -0
  215. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/trackers/advanced.py +0 -0
  216. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/trackers/composite.py +0 -0
  217. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/trackers/rebalancers.py +0 -0
  218. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/trackers/riskctrl.py +0 -0
  219. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/trackers/sizers.py +0 -0
  220. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/utils/__init__.py +0 -0
  221. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/utils/_pyxreloader.py +0 -0
  222. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/utils/charting/lookinglass.py +0 -0
  223. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/utils/charting/mpl_helpers.py +0 -0
  224. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/utils/charting/orderbook.py +0 -0
  225. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/utils/collections.py +0 -0
  226. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/utils/hft/__init__.py +0 -0
  227. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/utils/hft/numba_utils.py +0 -0
  228. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/utils/hft/orderbook.pyi +0 -0
  229. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/utils/hft/orderbook.pyx +0 -0
  230. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/utils/marketdata/binance.py +0 -0
  231. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/utils/marketdata/ccxt.py +0 -0
  232. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/utils/marketdata/dukas.py +0 -0
  233. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/utils/misc.py +0 -0
  234. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/utils/nonce.py +0 -0
  235. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/utils/ntp.py +0 -0
  236. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/utils/numbers_utils.py +0 -0
  237. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/utils/orderbook.py +0 -0
  238. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/utils/plotting/__init__.py +0 -0
  239. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/utils/plotting/dashboard.py +0 -0
  240. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/utils/plotting/data.py +0 -0
  241. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/utils/plotting/interfaces.py +0 -0
  242. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/utils/plotting/renderers/__init__.py +0 -0
  243. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/utils/plotting/renderers/plotly.py +0 -0
  244. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/utils/questdb.py +0 -0
  245. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/utils/rate_limiter.py +0 -0
  246. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/utils/ringbuffer.pxd +0 -0
  247. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/utils/ringbuffer.pyi +0 -0
  248. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/utils/ringbuffer.pyx +0 -0
  249. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/utils/runner/__init__.py +0 -0
  250. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/utils/runner/_jupyter_runner.pyt +0 -0
  251. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/utils/runner/accounts.py +0 -0
  252. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/utils/runner/configs.py +0 -0
  253. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/utils/runner/factory.py +0 -0
  254. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/utils/runner/kernel_service.py +0 -0
  255. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/utils/runner/runner.py +0 -0
  256. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/utils/runner/textual/__init__.py +0 -0
  257. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/utils/runner/textual/app.py +0 -0
  258. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/utils/runner/textual/handlers.py +0 -0
  259. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/utils/runner/textual/init_code.py +0 -0
  260. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/utils/runner/textual/kernel.py +0 -0
  261. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/utils/runner/textual/styles.tcss +0 -0
  262. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/utils/runner/textual/widgets/__init__.py +0 -0
  263. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/utils/runner/textual/widgets/command_input.py +0 -0
  264. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/utils/runner/textual/widgets/debug_log.py +0 -0
  265. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/utils/runner/textual/widgets/orders_table.py +0 -0
  266. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/utils/runner/textual/widgets/positions_table.py +0 -0
  267. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/utils/runner/textual/widgets/quotes_table.py +0 -0
  268. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/utils/runner/textual/widgets/repl_output.py +0 -0
  269. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/utils/slack.py +0 -0
  270. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/utils/time.py +0 -0
  271. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/utils/version.py +0 -0
  272. {qubx-0.7.6 → qubx-0.7.7}/src/qubx/utils/websocket_manager.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: Qubx
3
- Version: 0.7.6
3
+ Version: 0.7.7
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.7.6"
7
+ version = "0.7.7"
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"
@@ -172,4 +172,13 @@ cdef class GenericSeries(TimeSeries):
172
172
 
173
173
 
174
174
  cdef class IndicatorGeneric(Indicator):
175
- pass
175
+ pass
176
+
177
+
178
+ cdef class SeriesCachedValue:
179
+ cdef double cached_ser_value
180
+ cdef long long cached_ser_time
181
+ cdef int cached_ser_idx
182
+ cdef TimeSeries ser
183
+
184
+ cdef double value(self, long long time)
@@ -244,3 +244,5 @@ def lag(series: TimeSeries, period: int) -> "Indicator":
244
244
  Only positive shift (from past) period is allowed.
245
245
  """
246
246
  ...
247
+
248
+ class SeriesCachedValue: ...
@@ -554,6 +554,41 @@ cdef class Resampler(TimeSeries):
554
554
  super().update(time, value)
555
555
 
556
556
 
557
+ cdef class SeriesCachedValue:
558
+ def __init__(self, TimeSeries ser):
559
+ # - initialize series cache
560
+ self.cached_ser_value = np.nan
561
+ self.cached_ser_time = -1
562
+ self.cached_ser_idx = -1
563
+ self.ser = ser
564
+
565
+ cdef double value(self, long long time):
566
+ cdef double ser_value
567
+ cdef long long ser_period_start
568
+ cdef int idx
569
+
570
+ if len(self.ser) > 0:
571
+ # - calculate period start for volatility timeframe
572
+ ser_period_start = floor_t64(time, self.ser.series.timeframe)
573
+
574
+ # - only do lookup when period changes (cache within same period)
575
+ if ser_period_start != self.cached_ser_time:
576
+ idx = self.ser.times.lookup_idx(time, 'ffill')
577
+ if idx >= 0:
578
+ self.cached_ser_value = self.ser.values.values[idx]
579
+ self.cached_ser_idx = idx
580
+ else:
581
+ self.cached_ser_value = np.nan
582
+ self.cached_ser_idx = -1
583
+ self.cached_ser_time = ser_period_start
584
+
585
+ ser_value = self.cached_ser_value
586
+ else:
587
+ ser_value = np.nan
588
+
589
+ return ser_value
590
+
591
+
557
592
  cdef class Lag(Indicator):
558
593
  cdef int period
559
594
 
@@ -1,5 +1,5 @@
1
1
  cimport numpy as np
2
- from qubx.core.series cimport Indicator, IndicatorOHLC, RollingSum, TimeSeries, OHLCV, Bar
2
+ from qubx.core.series cimport Indicator, IndicatorOHLC, RollingSum, TimeSeries, OHLCV, Bar, SeriesCachedValue
3
3
 
4
4
  cdef class Sma(Indicator):
5
5
  cdef unsigned int period
@@ -200,14 +200,10 @@ cdef class StdEma(Indicator):
200
200
  cpdef double calculate(self, long long time, double value, short new_item_started)
201
201
 
202
202
  cdef class CusumFilter(Indicator):
203
- cdef TimeSeries target
204
203
  cdef double s_pos, s_neg
205
204
  cdef double prev_value
206
205
  cdef double saved_s_pos, saved_s_neg, saved_prev_value
207
- # - cache for target value to avoid repeated lookups
208
- cdef double cached_target_value
209
- cdef long long cached_target_time
210
- cdef int cached_target_idx
206
+ cdef SeriesCachedValue target_cache
211
207
 
212
208
  cdef void _store(self)
213
209
 
@@ -4,7 +4,7 @@ cimport numpy as np
4
4
  from scipy.special.cython_special import ndtri, stdtrit, gamma
5
5
  from collections import deque
6
6
 
7
- from qubx.core.series cimport TimeSeries, Indicator, IndicatorOHLC, RollingSum, nans, OHLCV, Bar
7
+ from qubx.core.series cimport TimeSeries, Indicator, IndicatorOHLC, RollingSum, nans, OHLCV, Bar, SeriesCachedValue
8
8
  from qubx.core.utils import time_to_str
9
9
  from qubx.pandaz.utils import scols, srows
10
10
 
@@ -1385,13 +1385,10 @@ cdef class CusumFilter(Indicator):
1385
1385
  """
1386
1386
 
1387
1387
  def __init__(self, str name, TimeSeries series, TimeSeries target):
1388
- self.target = target
1388
+ self.target_cache = SeriesCachedValue(target)
1389
1389
  self.s_pos = 0.0
1390
1390
  self.s_neg = 0.0
1391
1391
  self.prev_value = np.nan
1392
- self.cached_target_value = np.nan
1393
- self.cached_target_time = -1
1394
- self.cached_target_idx = -1
1395
1392
  super().__init__(name, series)
1396
1393
 
1397
1394
  cdef void _store(self):
@@ -1432,28 +1429,8 @@ cdef class CusumFilter(Indicator):
1432
1429
  self.s_neg = min(0.0, self.s_neg + diff)
1433
1430
 
1434
1431
  # - get threshold from target series (it can be from higher timeframe)
1435
- # - use caching to avoid repeated lookups for the same target period
1436
- cdef int idx
1437
- cdef long long target_period_start
1438
-
1439
- if len(self.target) > 0:
1440
- # - calculate the period start time for the target timeframe
1441
- target_period_start = floor_t64(time, self.target.timeframe)
1442
-
1443
- # - check if we need to update the cached value
1444
- if target_period_start != self.cached_target_time:
1445
- idx = self.target.times.lookup_idx(time, 'ffill')
1446
- if idx >= 0:
1447
- self.cached_target_value = self.target.values.values[idx]
1448
- self.cached_target_idx = idx
1449
- else:
1450
- self.cached_target_value = np.nan
1451
- self.cached_target_idx = -1
1452
- self.cached_target_time = target_period_start
1453
-
1454
- target_value = self.cached_target_value
1455
- else:
1456
- target_value = np.nan
1432
+ # - SeriesCachedValue handles caching automatically
1433
+ target_value = self.target_cache.value(time)
1457
1434
 
1458
1435
  # - only check for events if threshold is available
1459
1436
  if not np.isnan(target_value):
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