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.
- {qubx-0.7.6 → qubx-0.7.7}/PKG-INFO +1 -1
- {qubx-0.7.6 → qubx-0.7.7}/pyproject.toml +1 -1
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/core/series.pxd +10 -1
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/core/series.pyi +2 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/core/series.pyx +35 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/ta/indicators.pxd +2 -6
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/ta/indicators.pyx +4 -27
- {qubx-0.7.6 → qubx-0.7.7}/LICENSE +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/README.md +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/build.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/__init__.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/_nb_magic.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/backtester/__init__.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/backtester/account.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/backtester/broker.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/backtester/data.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/backtester/management.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/backtester/ome.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/backtester/optimization.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/backtester/runner.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/backtester/sentinels.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/backtester/simulated_data.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/backtester/simulated_exchange.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/backtester/simulator.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/backtester/transfers.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/backtester/utils.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/cli/__init__.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/cli/commands.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/cli/deploy.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/cli/misc.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/cli/release.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/cli/tui.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/connectors/ccxt/__init__.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/connectors/ccxt/account.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/connectors/ccxt/adapters/__init__.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/connectors/ccxt/adapters/polling_adapter.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/connectors/ccxt/broker.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/connectors/ccxt/connection_manager.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/connectors/ccxt/data.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/connectors/ccxt/exceptions.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/connectors/ccxt/exchange_manager.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/connectors/ccxt/exchanges/__init__.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/connectors/ccxt/exchanges/base.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/connectors/ccxt/exchanges/binance/broker.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/connectors/ccxt/exchanges/binance/exchange.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/connectors/ccxt/exchanges/bitfinex/bitfinex.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/connectors/ccxt/exchanges/bitfinex/bitfinex_account.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/connectors/ccxt/exchanges/hyperliquid/__init__.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/connectors/ccxt/exchanges/hyperliquid/account.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/connectors/ccxt/exchanges/hyperliquid/broker.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/connectors/ccxt/exchanges/hyperliquid/hyperliquid.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/connectors/ccxt/exchanges/kraken/kraken.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/connectors/ccxt/factory.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/connectors/ccxt/handlers/__init__.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/connectors/ccxt/handlers/base.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/connectors/ccxt/handlers/factory.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/connectors/ccxt/handlers/funding_rate.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/connectors/ccxt/handlers/liquidation.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/connectors/ccxt/handlers/ohlc.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/connectors/ccxt/handlers/open_interest.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/connectors/ccxt/handlers/orderbook.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/connectors/ccxt/handlers/quote.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/connectors/ccxt/handlers/trade.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/connectors/ccxt/reader.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/connectors/ccxt/subscription_config.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/connectors/ccxt/subscription_manager.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/connectors/ccxt/subscription_orchestrator.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/connectors/ccxt/utils.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/connectors/ccxt/warmup_service.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/connectors/tardis/data.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/connectors/tardis/utils.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/connectors/xlighter/__init__.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/connectors/xlighter/account.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/connectors/xlighter/broker.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/connectors/xlighter/client.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/connectors/xlighter/constants.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/connectors/xlighter/data.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/connectors/xlighter/extensions.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/connectors/xlighter/factory.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/connectors/xlighter/handlers/__init__.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/connectors/xlighter/handlers/base.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/connectors/xlighter/handlers/orderbook.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/connectors/xlighter/handlers/quote.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/connectors/xlighter/handlers/stats.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/connectors/xlighter/handlers/trades.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/connectors/xlighter/instruments.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/connectors/xlighter/nonce.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/connectors/xlighter/parsers.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/connectors/xlighter/rate_limits.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/connectors/xlighter/reader.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/connectors/xlighter/utils.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/connectors/xlighter/websocket.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/core/__init__.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/core/account.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/core/basics.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/core/context.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/core/deque.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/core/detectors/__init__.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/core/detectors/delisting.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/core/detectors/stale.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/core/errors.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/core/exceptions.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/core/helpers.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/core/initializer.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/core/interfaces.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/core/loggers.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/core/lookups.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/core/metrics.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/core/mixins/__init__.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/core/mixins/market.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/core/mixins/processing.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/core/mixins/subscription.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/core/mixins/trading.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/core/mixins/universe.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/core/mixins/utils.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/core/utils.pyi +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/core/utils.pyx +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/data/__init__.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/data/composite.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/data/containers.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/data/helpers.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/data/hft.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/data/readers.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/data/registry.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/data/storage.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/data/storages/csv.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/data/storages/questdb.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/data/storages/utils.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/data/tardis.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/data/transformers.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/emitters/__init__.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/emitters/base.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/emitters/composite.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/emitters/csv.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/emitters/indicator.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/emitters/inmemory.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/emitters/prometheus.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/emitters/questdb.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/exporters/__init__.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/exporters/composite.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/exporters/formatters/__init__.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/exporters/formatters/base.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/exporters/formatters/incremental.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/exporters/formatters/slack.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/exporters/formatters/target_position.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/exporters/redis_streams.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/exporters/slack.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/features/__init__.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/features/core.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/features/orderbook.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/features/price.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/features/trades.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/features/utils.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/gathering/simplest.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/health/__init__.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/health/base.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/loggers/__init__.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/loggers/csv.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/loggers/factory.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/loggers/inmemory.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/loggers/mongo.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/math/__init__.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/math/stats.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/notifications/__init__.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/notifications/composite.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/notifications/slack.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/notifications/throttler.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/pandaz/__init__.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/pandaz/ta.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/pandaz/utils.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/resources/_build.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/resources/crypto-fees.ini +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/resources/instruments/hyperliquid-spot.json +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/resources/instruments/hyperliquid.f-perpetual.json +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/resources/instruments/symbols-binance-spot.json +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/resources/instruments/symbols-binance.cm-future.json +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/resources/instruments/symbols-binance.cm-perpetual.json +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/resources/instruments/symbols-binance.um-future.json +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/resources/instruments/symbols-binance.um-perpetual.json +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/resources/instruments/symbols-bitfinex.f-perpetual.json +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/resources/instruments/symbols-kraken-spot.json +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/resources/instruments/symbols-kraken.f-future.json +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/resources/instruments/symbols-kraken.f-perpetual.json +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/restarts/__init__.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/restarts/state_resolvers.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/restarts/time_finders.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/restorers/__init__.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/restorers/balance.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/restorers/factory.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/restorers/interfaces.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/restorers/position.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/restorers/signal.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/restorers/state.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/restorers/utils.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/ta/__init__.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/ta/indicators.pyi +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/templates/__init__.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/templates/base.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/templates/project/accounts.toml.j2 +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/templates/project/config.yml.j2 +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/templates/project/jlive.sh.j2 +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/templates/project/jpaper.sh.j2 +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/templates/project/pyproject.toml.j2 +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/templates/project/src/{{ strategy_name }}/__init__.py.j2 +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/templates/project/src/{{ strategy_name }}/strategy.py.j2 +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/templates/project/template.yml +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/templates/simple/__init__.py.j2 +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/templates/simple/accounts.toml.j2 +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/templates/simple/config.yml.j2 +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/templates/simple/jlive.sh.j2 +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/templates/simple/jpaper.sh.j2 +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/templates/simple/strategy.py.j2 +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/templates/simple/template.yml +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/trackers/__init__.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/trackers/advanced.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/trackers/composite.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/trackers/rebalancers.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/trackers/riskctrl.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/trackers/sizers.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/utils/__init__.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/utils/_pyxreloader.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/utils/charting/lookinglass.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/utils/charting/mpl_helpers.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/utils/charting/orderbook.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/utils/collections.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/utils/hft/__init__.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/utils/hft/numba_utils.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/utils/hft/orderbook.pyi +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/utils/hft/orderbook.pyx +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/utils/marketdata/binance.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/utils/marketdata/ccxt.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/utils/marketdata/dukas.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/utils/misc.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/utils/nonce.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/utils/ntp.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/utils/numbers_utils.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/utils/orderbook.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/utils/plotting/__init__.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/utils/plotting/dashboard.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/utils/plotting/data.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/utils/plotting/interfaces.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/utils/plotting/renderers/__init__.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/utils/plotting/renderers/plotly.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/utils/questdb.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/utils/rate_limiter.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/utils/ringbuffer.pxd +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/utils/ringbuffer.pyi +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/utils/ringbuffer.pyx +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/utils/runner/__init__.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/utils/runner/_jupyter_runner.pyt +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/utils/runner/accounts.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/utils/runner/configs.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/utils/runner/factory.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/utils/runner/kernel_service.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/utils/runner/runner.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/utils/runner/textual/__init__.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/utils/runner/textual/app.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/utils/runner/textual/handlers.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/utils/runner/textual/init_code.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/utils/runner/textual/kernel.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/utils/runner/textual/styles.tcss +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/utils/runner/textual/widgets/__init__.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/utils/runner/textual/widgets/command_input.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/utils/runner/textual/widgets/debug_log.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/utils/runner/textual/widgets/orders_table.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/utils/runner/textual/widgets/positions_table.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/utils/runner/textual/widgets/quotes_table.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/utils/runner/textual/widgets/repl_output.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/utils/slack.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/utils/time.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/utils/version.py +0 -0
- {qubx-0.7.6 → qubx-0.7.7}/src/qubx/utils/websocket_manager.py +0 -0
|
@@ -4,7 +4,7 @@ build-backend = "poetry.core.masonry.api"
|
|
|
4
4
|
|
|
5
5
|
[tool.poetry]
|
|
6
6
|
name = "Qubx"
|
|
7
|
-
version = "0.7.
|
|
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)
|
|
@@ -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
|
-
|
|
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.
|
|
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
|
-
# -
|
|
1436
|
-
|
|
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
|
|
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
|
|
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
|