Qubx 1.0.6.dev2__tar.gz → 1.0.6.dev4__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.
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/PKG-INFO +1 -1
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/__init__.py +5 -2
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/_version.py +2 -2
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/connectors/ccxt/handlers/ohlc.py +9 -2
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/core/account.py +1 -1
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/core/basics.py +3 -2
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/.gitignore +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/LICENSE +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/README.md +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/pyproject.toml +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/scripts/build.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/_nb_magic.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/backtester/__init__.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/backtester/account.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/backtester/broker.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/backtester/data.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/backtester/iteratedstream.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/backtester/management.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/backtester/ome.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/backtester/optimization.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/backtester/runner.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/backtester/sentinels.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/backtester/simulated_data.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/backtester/simulated_exchange.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/backtester/simulator.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/backtester/transfers.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/backtester/utils.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/cli/__init__.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/cli/commands.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/cli/deploy.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/cli/misc.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/cli/release.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/cli/resolver.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/cli/theme.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/cli/tui.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/config.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/connectors/__init__.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/connectors/ccxt/__init__.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/connectors/ccxt/account.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/connectors/ccxt/adapters/__init__.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/connectors/ccxt/adapters/polling_adapter.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/connectors/ccxt/broker.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/connectors/ccxt/connection_manager.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/connectors/ccxt/data.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/connectors/ccxt/exceptions.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/connectors/ccxt/exchange_manager.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/connectors/ccxt/exchanges/__init__.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/connectors/ccxt/exchanges/base.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/connectors/ccxt/exchanges/binance/broker.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/connectors/ccxt/exchanges/binance/exchange.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/connectors/ccxt/exchanges/bitfinex/bitfinex.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/connectors/ccxt/exchanges/bitfinex/bitfinex_account.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/connectors/ccxt/exchanges/gateio/__init__.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/connectors/ccxt/exchanges/gateio/gateio.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/connectors/ccxt/exchanges/hyperliquid/__init__.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/connectors/ccxt/exchanges/hyperliquid/account.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/connectors/ccxt/exchanges/hyperliquid/broker.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/connectors/ccxt/exchanges/hyperliquid/hyperliquid.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/connectors/ccxt/exchanges/kraken/kraken.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/connectors/ccxt/exchanges/okx/__init__.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/connectors/ccxt/exchanges/okx/account.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/connectors/ccxt/exchanges/okx/broker.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/connectors/ccxt/exchanges/okx/okx.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/connectors/ccxt/factory.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/connectors/ccxt/handlers/__init__.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/connectors/ccxt/handlers/base.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/connectors/ccxt/handlers/factory.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/connectors/ccxt/handlers/funding_rate.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/connectors/ccxt/handlers/liquidation.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/connectors/ccxt/handlers/open_interest.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/connectors/ccxt/handlers/orderbook.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/connectors/ccxt/handlers/quote.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/connectors/ccxt/handlers/trade.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/connectors/ccxt/subscription_config.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/connectors/ccxt/subscription_manager.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/connectors/ccxt/subscription_orchestrator.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/connectors/ccxt/utils.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/connectors/ccxt/warmup_service.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/connectors/registry.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/connectors/tardis/data.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/connectors/tardis/utils.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/core/__init__.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/core/context.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/core/detectors/__init__.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/core/detectors/delisting.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/core/detectors/stale.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/core/errors.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/core/exceptions.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/core/helpers.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/core/initializer.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/core/interfaces.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/core/loggers.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/core/lookups.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/core/metrics.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/core/mixins/__init__.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/core/mixins/market.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/core/mixins/processing.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/core/mixins/subscription.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/core/mixins/trading.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/core/mixins/universe.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/core/mixins/utils.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/core/series.pxd +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/core/series.pyi +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/core/series.pyx +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/core/utils.pyi +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/core/utils.pyx +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/data/__init__.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/data/cache.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/data/containers.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/data/guards.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/data/registry.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/data/storage.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/data/storages/ccxt.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/data/storages/csv.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/data/storages/handy.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/data/storages/multi.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/data/storages/questdb.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/data/storages/stub.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/data/storages/utils.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/data/transformers.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/emitters/__init__.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/emitters/base.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/emitters/composite.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/emitters/csv.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/emitters/indicator.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/emitters/inmemory.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/emitters/prometheus.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/emitters/questdb.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/exporters/__init__.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/exporters/composite.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/exporters/formatters/__init__.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/exporters/formatters/base.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/exporters/formatters/incremental.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/exporters/formatters/slack.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/exporters/formatters/target_position.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/exporters/redis_streams.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/exporters/slack.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/gathering/simplest.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/health/__init__.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/health/base.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/health/dummy.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/health/server.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/loggers/__init__.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/loggers/csv.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/loggers/factory.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/loggers/inmemory.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/loggers/mongo.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/notifications/__init__.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/notifications/composite.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/notifications/slack.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/notifications/throttler.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/pandaz/__init__.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/pandaz/stats.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/pandaz/ta.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/pandaz/utils.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/plugins/__init__.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/plugins/loader.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/resources/_build.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/resources/crypto-fees.ini +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/resources/instruments/hyperliquid-spot.json +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/resources/instruments/hyperliquid.f-perpetual.json +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/resources/instruments/symbols-binance-spot.json +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/resources/instruments/symbols-binance.cm-future.json +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/resources/instruments/symbols-binance.cm-perpetual.json +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/resources/instruments/symbols-binance.um-future.json +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/resources/instruments/symbols-binance.um-perpetual.json +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/resources/instruments/symbols-bitfinex.f-perpetual.json +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/resources/instruments/symbols-kraken-spot.json +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/resources/instruments/symbols-kraken.f-future.json +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/resources/instruments/symbols-kraken.f-perpetual.json +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/restarts/__init__.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/restarts/state_resolvers.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/restarts/time_finders.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/restorers/__init__.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/restorers/balance.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/restorers/factory.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/restorers/interfaces.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/restorers/position.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/restorers/signal.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/restorers/state.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/restorers/utils.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/state/__init__.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/state/dummy.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/state/redis.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/ta/__init__.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/ta/indicators.pxd +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/ta/indicators.pyi +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/ta/indicators.pyx +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/templates/__init__.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/templates/base.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/templates/project/accounts.toml.j2 +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/templates/project/config.yml.j2 +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/templates/project/jlive.sh.j2 +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/templates/project/jpaper.sh.j2 +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/templates/project/pyproject.toml.j2 +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/templates/project/src/{{ strategy_name }}/__init__.py.j2 +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/templates/project/src/{{ strategy_name }}/strategy.py.j2 +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/templates/project/template.yml +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/templates/simple/__init__.py.j2 +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/templates/simple/accounts.toml.j2 +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/templates/simple/config.yml.j2 +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/templates/simple/jlive.sh.j2 +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/templates/simple/jpaper.sh.j2 +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/templates/simple/strategy.py.j2 +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/templates/simple/template.yml +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/trackers/__init__.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/trackers/advanced.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/trackers/composite.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/trackers/rebalancers.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/trackers/riskctrl.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/trackers/sizers.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/utils/__init__.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/utils/_pyxreloader.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/utils/charting/lookinglass.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/utils/charting/mpl_helpers.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/utils/charting/orderbook.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/utils/collections.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/utils/hft/__init__.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/utils/hft/numba_utils.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/utils/hft/orderbook.pyi +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/utils/hft/orderbook.pyx +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/utils/marketdata/binance.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/utils/marketdata/ccxt.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/utils/marketdata/dukas.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/utils/misc.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/utils/nonce.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/utils/ntp.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/utils/numbers_utils.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/utils/orderbook.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/utils/plotting/__init__.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/utils/plotting/dashboard.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/utils/plotting/data.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/utils/plotting/interfaces.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/utils/plotting/renderers/__init__.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/utils/plotting/renderers/plotly.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/utils/questdb.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/utils/rate_limiter.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/utils/results.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/utils/ringbuffer.pxd +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/utils/ringbuffer.pyi +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/utils/ringbuffer.pyx +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/utils/runner/__init__.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/utils/runner/_jupyter_runner.pyt +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/utils/runner/accounts.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/utils/runner/configs.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/utils/runner/factory.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/utils/runner/kernel_service.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/utils/runner/runner.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/utils/runner/textual/__init__.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/utils/runner/textual/app.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/utils/runner/textual/handlers.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/utils/runner/textual/init_code.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/utils/runner/textual/kernel.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/utils/runner/textual/styles.tcss +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/utils/runner/textual/widgets/__init__.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/utils/runner/textual/widgets/command_input.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/utils/runner/textual/widgets/debug_log.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/utils/runner/textual/widgets/orders_table.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/utils/runner/textual/widgets/positions_table.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/utils/runner/textual/widgets/quotes_table.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/utils/runner/textual/widgets/repl_output.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/utils/slack.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/utils/throttler.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/utils/time.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/utils/websocket_manager.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/tests/strategies/macd_crossover/src/macd_crossover/indicators/macd.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/tests/strategies/macd_crossover/src/macd_crossover/models/macd_crossover.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/tests/strategies/macd_crossover/src/macd_crossover/models/utils.py +0 -0
- {qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/tests/strategies/obi_trader/src/obi_trader/models/obi_trader.py +0 -0
|
@@ -178,7 +178,10 @@ if runtime_env() in ["notebook", "shell"]:
|
|
|
178
178
|
from IPython.core.getipython import get_ipython
|
|
179
179
|
from IPython.core.magic import Magics, line_cell_magic, line_magic, magics_class
|
|
180
180
|
|
|
181
|
-
|
|
181
|
+
try:
|
|
182
|
+
from qubx.utils.charting.mpl_helpers import set_mpl_theme
|
|
183
|
+
except ImportError:
|
|
184
|
+
set_mpl_theme = None # matplotlib not available (e.g. deployed strategy)
|
|
182
185
|
|
|
183
186
|
@magics_class
|
|
184
187
|
class QubxMagics(Magics):
|
|
@@ -219,7 +222,7 @@ if runtime_env() in ["notebook", "shell"]:
|
|
|
219
222
|
exec(s, self.shell.user_ns)
|
|
220
223
|
|
|
221
224
|
# setup more funcy mpl theme instead of ugly default
|
|
222
|
-
if line:
|
|
225
|
+
if line and set_mpl_theme is not None:
|
|
223
226
|
if "dark" in line.lower():
|
|
224
227
|
set_mpl_theme("dark")
|
|
225
228
|
# - temporary workaround for vscode - dark theme not applying to ipywidgets in notebook
|
|
@@ -28,7 +28,7 @@ version_tuple: VERSION_TUPLE
|
|
|
28
28
|
commit_id: COMMIT_ID
|
|
29
29
|
__commit_id__: COMMIT_ID
|
|
30
30
|
|
|
31
|
-
__version__ = version = '1.0.6.
|
|
32
|
-
__version_tuple__ = version_tuple = (1, 0, 6, '
|
|
31
|
+
__version__ = version = '1.0.6.dev4'
|
|
32
|
+
__version_tuple__ = version_tuple = (1, 0, 6, 'dev4')
|
|
33
33
|
|
|
34
34
|
__commit_id__ = commit_id = None
|
|
@@ -134,11 +134,13 @@ class OhlcDataHandler(BaseDataTypeHandler):
|
|
|
134
134
|
exch_timeframe = self._data_provider._get_exch_timeframe(timeframe)
|
|
135
135
|
|
|
136
136
|
loaded_bars = {}
|
|
137
|
-
n_tries = nbarsback // self.MAX_BARS_PER_REQUEST_FOR_PROVIDER + 1
|
|
138
137
|
_tf_msec = pd.to_timedelta(timeframe).value // 1_000_000 # convert to msec
|
|
139
138
|
|
|
140
139
|
# - retrieve OHLC data from exchange by chunks as some providers limit number of bars per request
|
|
141
|
-
|
|
140
|
+
# Loop until we have enough bars or exchange stops returning data.
|
|
141
|
+
# n_tries is not pre-calculated because exchanges return varying page sizes
|
|
142
|
+
# (e.g., OKX returns ~100 bars vs Binance's ~1000).
|
|
143
|
+
while len(loaded_bars) < nbarsback:
|
|
142
144
|
bars_to_request = min((nbarsback - len(loaded_bars)), self.MAX_BARS_PER_REQUEST_FOR_PROVIDER)
|
|
143
145
|
if not (
|
|
144
146
|
ohlcv_data := await self._exchange_manager.exchange.fetch_ohlcv(
|
|
@@ -147,9 +149,14 @@ class OhlcDataHandler(BaseDataTypeHandler):
|
|
|
147
149
|
):
|
|
148
150
|
break
|
|
149
151
|
|
|
152
|
+
prev_count = len(loaded_bars)
|
|
150
153
|
for oh in ohlcv_data:
|
|
151
154
|
loaded_bars[oh[0]] = self._convert_ohlcv_to_bar(oh) # use timestamp as key to avoid duplicates
|
|
152
155
|
|
|
156
|
+
# Stop if no new bars were added (exchange has no more data)
|
|
157
|
+
if len(loaded_bars) == prev_count:
|
|
158
|
+
break
|
|
159
|
+
|
|
153
160
|
start_since = ohlcv_data[-1][0] + _tf_msec
|
|
154
161
|
|
|
155
162
|
return list(loaded_bars.values())
|
|
@@ -515,7 +515,7 @@ class BasicAccountProcessor(IAccountProcessor):
|
|
|
515
515
|
# how many shares are closed/open
|
|
516
516
|
qty_closing = min(abs(pos.quantity), abs(pos_change)) * direction if prev_direction != direction else 0
|
|
517
517
|
qty_opening = pos_change if prev_direction == direction else pos_change - qty_closing
|
|
518
|
-
excess = abs(qty_opening) * order.price
|
|
518
|
+
excess = abs(qty_opening) * order.instrument.quantity_multiplier * order.price
|
|
519
519
|
|
|
520
520
|
# TODO: locking likely doesn't work correctly for spot accounts (Account)
|
|
521
521
|
# Example: if we have 1 BTC at price 100k and set a limit order for 0.1 BTC at 110k
|
|
@@ -579,10 +579,11 @@ class TransactionCostsCalculator:
|
|
|
579
579
|
def get_execution_fees(
|
|
580
580
|
self, instrument: Instrument, exec_price: float, amount: float, crossed_market=False, conversion_rate=1.0
|
|
581
581
|
):
|
|
582
|
+
notional = abs(amount * instrument.quantity_multiplier * exec_price)
|
|
582
583
|
if crossed_market:
|
|
583
|
-
return
|
|
584
|
+
return notional * self.taker / conversion_rate
|
|
584
585
|
else:
|
|
585
|
-
return
|
|
586
|
+
return notional * self.maker / conversion_rate
|
|
586
587
|
|
|
587
588
|
def get_overnight_fees(self, instrument: Instrument, amount: float):
|
|
588
589
|
return 0.0
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/connectors/ccxt/exchanges/bitfinex/bitfinex_account.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/connectors/ccxt/exchanges/hyperliquid/__init__.py
RENAMED
|
File without changes
|
{qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/connectors/ccxt/exchanges/hyperliquid/account.py
RENAMED
|
File without changes
|
{qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/connectors/ccxt/exchanges/hyperliquid/broker.py
RENAMED
|
File without changes
|
{qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/connectors/ccxt/exchanges/hyperliquid/hyperliquid.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/resources/instruments/hyperliquid.f-perpetual.json
RENAMED
|
File without changes
|
{qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/resources/instruments/symbols-binance-spot.json
RENAMED
|
File without changes
|
{qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/resources/instruments/symbols-binance.cm-future.json
RENAMED
|
File without changes
|
{qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/resources/instruments/symbols-binance.cm-perpetual.json
RENAMED
|
File without changes
|
{qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/resources/instruments/symbols-binance.um-future.json
RENAMED
|
File without changes
|
{qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/resources/instruments/symbols-binance.um-perpetual.json
RENAMED
|
File without changes
|
{qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/resources/instruments/symbols-bitfinex.f-perpetual.json
RENAMED
|
File without changes
|
|
File without changes
|
{qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/resources/instruments/symbols-kraken.f-future.json
RENAMED
|
File without changes
|
{qubx-1.0.6.dev2 → qubx-1.0.6.dev4}/src/qubx/resources/instruments/symbols-kraken.f-perpetual.json
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|