Qubx 1.1.2.dev7__tar.gz → 1.1.2.dev8__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.1.2.dev7 → qubx-1.1.2.dev8}/PKG-INFO +1 -1
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/_version.py +2 -2
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/utils/results.py +11 -9
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/utils/runner/runner.py +93 -2
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/utils/time.py +0 -1
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/.gitignore +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/LICENSE +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/README.md +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/pyproject.toml +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/scripts/build.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/__init__.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/_nb_magic.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/backtester/__init__.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/backtester/account.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/backtester/broker.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/backtester/data.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/backtester/iteratedstream.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/backtester/management.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/backtester/ome.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/backtester/optimization.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/backtester/runner.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/backtester/sentinels.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/backtester/simulated_data.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/backtester/simulated_exchange.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/backtester/simulator.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/backtester/transfers.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/backtester/utils.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/cli/__init__.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/cli/commands.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/cli/deploy.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/cli/misc.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/cli/release.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/cli/resolver.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/cli/s3.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/cli/theme.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/cli/tui.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/cli/user_config.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/config.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/connectors/__init__.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/connectors/ccxt/__init__.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/connectors/ccxt/account.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/connectors/ccxt/adapters/__init__.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/connectors/ccxt/adapters/polling_adapter.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/connectors/ccxt/broker.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/connectors/ccxt/connection_manager.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/connectors/ccxt/data.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/connectors/ccxt/exceptions.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/connectors/ccxt/exchange_manager.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/connectors/ccxt/exchanges/__init__.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/connectors/ccxt/exchanges/base.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/connectors/ccxt/exchanges/binance/broker.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/connectors/ccxt/exchanges/binance/exchange.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/connectors/ccxt/exchanges/bitfinex/bitfinex.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/connectors/ccxt/exchanges/bitfinex/bitfinex_account.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/connectors/ccxt/exchanges/gateio/__init__.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/connectors/ccxt/exchanges/gateio/gateio.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/connectors/ccxt/exchanges/hyperliquid/__init__.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/connectors/ccxt/exchanges/hyperliquid/account.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/connectors/ccxt/exchanges/hyperliquid/broker.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/connectors/ccxt/exchanges/hyperliquid/hyperliquid.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/connectors/ccxt/exchanges/kraken/kraken.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/connectors/ccxt/exchanges/okx/__init__.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/connectors/ccxt/exchanges/okx/account.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/connectors/ccxt/exchanges/okx/broker.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/connectors/ccxt/exchanges/okx/okx.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/connectors/ccxt/factory.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/connectors/ccxt/handlers/__init__.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/connectors/ccxt/handlers/base.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/connectors/ccxt/handlers/factory.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/connectors/ccxt/handlers/funding_rate.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/connectors/ccxt/handlers/liquidation.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/connectors/ccxt/handlers/ohlc.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/connectors/ccxt/handlers/open_interest.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/connectors/ccxt/handlers/orderbook.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/connectors/ccxt/handlers/quote.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/connectors/ccxt/handlers/trade.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/connectors/ccxt/subscription_config.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/connectors/ccxt/subscription_manager.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/connectors/ccxt/subscription_orchestrator.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/connectors/ccxt/utils.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/connectors/ccxt/warmup_service.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/connectors/registry.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/connectors/tardis/data.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/connectors/tardis/utils.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/core/__init__.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/core/account.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/core/basics.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/core/context.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/core/detectors/__init__.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/core/detectors/delisting.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/core/detectors/stale.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/core/errors.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/core/exceptions.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/core/helpers.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/core/initializer.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/core/interfaces.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/core/loggers.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/core/lookups.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/core/metrics.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/core/mixins/__init__.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/core/mixins/market.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/core/mixins/processing.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/core/mixins/subscription.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/core/mixins/trading.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/core/mixins/universe.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/core/mixins/utils.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/core/series.pxd +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/core/series.pyi +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/core/series.pyx +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/core/utils.pyi +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/core/utils.pyx +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/data/__init__.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/data/cache.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/data/containers.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/data/guards.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/data/registry.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/data/storage.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/data/storages/ccxt.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/data/storages/csv.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/data/storages/handy.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/data/storages/multi.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/data/storages/questdb.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/data/storages/stub.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/data/storages/utils.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/data/transformers.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/emitters/__init__.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/emitters/base.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/emitters/composite.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/emitters/csv.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/emitters/indicator.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/emitters/inmemory.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/emitters/prometheus.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/emitters/questdb.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/exporters/__init__.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/exporters/composite.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/exporters/formatters/__init__.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/exporters/formatters/base.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/exporters/formatters/incremental.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/exporters/formatters/slack.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/exporters/formatters/target_position.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/exporters/redis_streams.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/exporters/slack.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/gathering/simplest.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/health/__init__.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/health/base.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/health/dummy.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/health/server.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/loggers/__init__.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/loggers/csv.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/loggers/factory.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/loggers/inmemory.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/loggers/mongo.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/notifications/__init__.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/notifications/composite.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/notifications/slack.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/notifications/throttler.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/pandaz/__init__.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/pandaz/stats.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/pandaz/ta.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/pandaz/utils.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/plugins/__init__.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/plugins/loader.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/resources/_build.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/resources/crypto-fees.ini +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/resources/instruments/hyperliquid-spot.json +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/resources/instruments/hyperliquid.f-perpetual.json +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/resources/instruments/symbols-binance-spot.json +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/resources/instruments/symbols-binance.cm-future.json +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/resources/instruments/symbols-binance.cm-perpetual.json +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/resources/instruments/symbols-binance.um-future.json +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/resources/instruments/symbols-binance.um-perpetual.json +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/resources/instruments/symbols-bitfinex.f-perpetual.json +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/resources/instruments/symbols-kraken-spot.json +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/resources/instruments/symbols-kraken.f-future.json +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/resources/instruments/symbols-kraken.f-perpetual.json +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/restarts/__init__.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/restarts/state_resolvers.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/restarts/time_finders.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/restorers/__init__.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/restorers/balance.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/restorers/factory.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/restorers/interfaces.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/restorers/position.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/restorers/signal.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/restorers/state.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/restorers/utils.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/state/__init__.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/state/dummy.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/state/redis.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/ta/__init__.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/ta/indicators.pxd +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/ta/indicators.pyi +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/ta/indicators.pyx +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/templates/__init__.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/templates/base.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/templates/project/accounts.toml.j2 +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/templates/project/config.yml.j2 +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/templates/project/jlive.sh.j2 +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/templates/project/jpaper.sh.j2 +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/templates/project/pyproject.toml.j2 +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/templates/project/src/{{ strategy_name }}/__init__.py.j2 +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/templates/project/src/{{ strategy_name }}/strategy.py.j2 +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/templates/project/template.yml +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/templates/repo/.claude/skills/qubx-cli/SKILL.md +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/templates/repo/.claude/skills/qubx-indicators/SKILL.md +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/templates/repo/.claude/skills/simulation-explorer/SKILL.md +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/templates/repo/.claude/skills/strategy-release/SKILL.md +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/templates/repo/.github/workflows/ci.yml.j2 +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/templates/repo/.gitignore.j2 +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/templates/repo/.python-version +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/templates/repo/.vscode/launch.json +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/templates/repo/.vscode/settings.json +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/templates/repo/.vscode/tasks.json +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/templates/repo/CLAUDE.md.j2 +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/templates/repo/README.md.j2 +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/templates/repo/configs/.gitkeep +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/templates/repo/justfile.j2 +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/templates/repo/pyproject.toml.j2 +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/templates/repo/research/.gitkeep +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/templates/repo/src/{{ strategy_name }}/__init__.py.j2 +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/templates/repo/src/{{ strategy_name }}/cli.py.j2 +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/templates/repo/src/{{ strategy_name }}/strategy.py.j2 +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/templates/repo/template.yml +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/templates/repo/tests/test_strategy.py.j2 +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/templates/simple/__init__.py.j2 +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/templates/simple/accounts.toml.j2 +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/templates/simple/config.yml.j2 +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/templates/simple/jlive.sh.j2 +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/templates/simple/jpaper.sh.j2 +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/templates/simple/strategy.py.j2 +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/templates/simple/template.yml +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/trackers/__init__.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/trackers/advanced.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/trackers/composite.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/trackers/rebalancers.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/trackers/riskctrl.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/trackers/sizers.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/utils/__init__.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/utils/_pyxreloader.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/utils/charting/lookinglass.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/utils/charting/mpl_helpers.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/utils/charting/orderbook.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/utils/collections.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/utils/hft/__init__.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/utils/hft/numba_utils.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/utils/hft/orderbook.pyi +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/utils/hft/orderbook.pyx +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/utils/marketdata/binance.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/utils/marketdata/ccxt.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/utils/marketdata/dukas.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/utils/misc.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/utils/nonce.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/utils/ntp.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/utils/numbers_utils.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/utils/orderbook.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/utils/plotting/__init__.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/utils/plotting/dashboard.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/utils/plotting/data.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/utils/plotting/interfaces.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/utils/plotting/renderers/__init__.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/utils/plotting/renderers/plotly.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/utils/questdb.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/utils/rate_limiter.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/utils/ringbuffer.pxd +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/utils/ringbuffer.pyi +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/utils/ringbuffer.pyx +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/utils/runner/__init__.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/utils/runner/_jupyter_runner.pyt +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/utils/runner/accounts.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/utils/runner/configs.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/utils/runner/factory.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/utils/runner/kernel_service.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/utils/runner/textual/__init__.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/utils/runner/textual/app.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/utils/runner/textual/handlers.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/utils/runner/textual/init_code.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/utils/runner/textual/kernel.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/utils/runner/textual/styles.tcss +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/utils/runner/textual/widgets/__init__.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/utils/runner/textual/widgets/account_summary.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/utils/runner/textual/widgets/command_input.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/utils/runner/textual/widgets/debug_log.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/utils/runner/textual/widgets/orders_table.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/utils/runner/textual/widgets/positions_table.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/utils/runner/textual/widgets/quotes_table.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/utils/runner/textual/widgets/repl_output.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/utils/s3.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/utils/slack.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/utils/throttler.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/utils/websocket_manager.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/tests/strategies/macd_crossover/src/macd_crossover/indicators/macd.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/tests/strategies/macd_crossover/src/macd_crossover/models/macd_crossover.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/tests/strategies/macd_crossover/src/macd_crossover/models/utils.py +0 -0
- {qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/tests/strategies/obi_trader/src/obi_trader/models/obi_trader.py +0 -0
|
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
|
|
|
18
18
|
commit_id: str | None
|
|
19
19
|
__commit_id__: str | None
|
|
20
20
|
|
|
21
|
-
__version__ = version = '1.1.2.
|
|
22
|
-
__version_tuple__ = version_tuple = (1, 1, 2, '
|
|
21
|
+
__version__ = version = '1.1.2.dev8'
|
|
22
|
+
__version_tuple__ = version_tuple = (1, 1, 2, 'dev8')
|
|
23
23
|
|
|
24
24
|
__commit_id__ = commit_id = None
|
|
@@ -414,12 +414,13 @@ class SimulationResultsSaver:
|
|
|
414
414
|
self._storage_options,
|
|
415
415
|
dst_name=f"{self._config_name}.log",
|
|
416
416
|
)
|
|
417
|
+
# - only remove temp file after successful upload
|
|
418
|
+
try:
|
|
419
|
+
os.unlink(log_file)
|
|
420
|
+
except Exception:
|
|
421
|
+
pass
|
|
417
422
|
except Exception as _e:
|
|
418
423
|
logger.warning(f"[SimulationResultsSaver] Failed to upload log file: {_e}")
|
|
419
|
-
try:
|
|
420
|
-
os.unlink(log_file)
|
|
421
|
-
except Exception:
|
|
422
|
-
pass
|
|
423
424
|
|
|
424
425
|
def close(self) -> None:
|
|
425
426
|
"""Ensure pending write completes (called if write_completed/write_failed not used)."""
|
|
@@ -474,7 +475,7 @@ class SimulationResultsSaver:
|
|
|
474
475
|
return
|
|
475
476
|
|
|
476
477
|
def _do_log() -> None:
|
|
477
|
-
"""Upload temp log file to run_dir and delete the local copy."""
|
|
478
|
+
"""Upload temp log file to run_dir and delete the local copy only on success."""
|
|
478
479
|
if log_file is None:
|
|
479
480
|
return
|
|
480
481
|
try:
|
|
@@ -484,12 +485,13 @@ class SimulationResultsSaver:
|
|
|
484
485
|
self._storage_options,
|
|
485
486
|
dst_name=f"{self._config_name}.log",
|
|
486
487
|
)
|
|
488
|
+
# - only remove temp file after successful upload so fallback can still use it
|
|
489
|
+
try:
|
|
490
|
+
os.unlink(log_file)
|
|
491
|
+
except Exception:
|
|
492
|
+
pass
|
|
487
493
|
except Exception as _e:
|
|
488
494
|
logger.warning(f"[SimulationResultsSaver] Failed to upload log file: {_e}")
|
|
489
|
-
try:
|
|
490
|
-
os.unlink(log_file)
|
|
491
|
-
except Exception:
|
|
492
|
-
pass
|
|
493
495
|
|
|
494
496
|
if len(test_res) > 1:
|
|
495
497
|
# ── variation set ────────────────────────────────────────────────
|
|
@@ -71,7 +71,7 @@ from qubx.utils.runner.factory import (
|
|
|
71
71
|
create_notifiers,
|
|
72
72
|
create_state_persistence,
|
|
73
73
|
)
|
|
74
|
-
from qubx.utils.s3 import is_cloud_path
|
|
74
|
+
from qubx.utils.s3 import S3Client, is_account_uri, is_cloud_path
|
|
75
75
|
from qubx.utils.time import convert_seconds_to_str, to_timedelta, to_timestamp
|
|
76
76
|
|
|
77
77
|
from .accounts import AccountConfigurationManager
|
|
@@ -1074,6 +1074,75 @@ def _build_sim_params(
|
|
|
1074
1074
|
return {"data": data, "custom_data": data_i}, sim_params
|
|
1075
1075
|
|
|
1076
1076
|
|
|
1077
|
+
def _safe_store_results(
|
|
1078
|
+
results_saver: "SimulationResultsSaver",
|
|
1079
|
+
test_res: list,
|
|
1080
|
+
sim_time_sec: int,
|
|
1081
|
+
cloud_log_file: str | None,
|
|
1082
|
+
save_path: str | None,
|
|
1083
|
+
yaml_name: str,
|
|
1084
|
+
strategy_full_classes: str | list[str],
|
|
1085
|
+
simulation_name: str,
|
|
1086
|
+
sim_start: str,
|
|
1087
|
+
sim_stop: str,
|
|
1088
|
+
v_id: str,
|
|
1089
|
+
config_file: Path,
|
|
1090
|
+
tags: list[str],
|
|
1091
|
+
descr: str,
|
|
1092
|
+
is_variation: bool,
|
|
1093
|
+
) -> None:
|
|
1094
|
+
"""
|
|
1095
|
+
Store simulation results, falling back to a local temp directory if cloud storage is unavailable.
|
|
1096
|
+
|
|
1097
|
+
If ``save_path`` is a cloud URI and writing fails (network issue, credentials, etc.),
|
|
1098
|
+
results are saved to ``{tempdir}/backtests/`` so completed simulations are never lost.
|
|
1099
|
+
Any cloud log file is copied to the fallback run directory before the temp file is removed.
|
|
1100
|
+
For non-cloud failures the exception is re-raised as usual.
|
|
1101
|
+
"""
|
|
1102
|
+
try:
|
|
1103
|
+
results_saver.store_simulation_results(test_res, sim_time_sec, log_file=cloud_log_file)
|
|
1104
|
+
except Exception as _store_err:
|
|
1105
|
+
if save_path is not None and is_cloud_path(save_path):
|
|
1106
|
+
import os
|
|
1107
|
+
import shutil
|
|
1108
|
+
import tempfile
|
|
1109
|
+
|
|
1110
|
+
_fallback_base = str(Path(tempfile.gettempdir()) / "backtests")
|
|
1111
|
+
logger.warning(
|
|
1112
|
+
f"[simulate_strategy] Failed to save results to cloud storage ({save_path}): {_store_err}"
|
|
1113
|
+
f"\n → Falling back to local storage: {_fallback_base}"
|
|
1114
|
+
)
|
|
1115
|
+
_fallback_saver = SimulationResultsSaver(
|
|
1116
|
+
name=yaml_name,
|
|
1117
|
+
strategy_class=strategy_full_classes,
|
|
1118
|
+
config_name=simulation_name,
|
|
1119
|
+
sim_start=sim_start,
|
|
1120
|
+
sim_stop=sim_stop,
|
|
1121
|
+
save_path=_fallback_base,
|
|
1122
|
+
run_id=v_id,
|
|
1123
|
+
config_file=str(config_file),
|
|
1124
|
+
tags=tags,
|
|
1125
|
+
description=descr,
|
|
1126
|
+
is_variation=is_variation,
|
|
1127
|
+
storage_options=None, # - local, no cloud credentials needed
|
|
1128
|
+
)
|
|
1129
|
+
# - cloud log file: copy to fallback run_dir instead of uploading
|
|
1130
|
+
_fallback_log: str | None = None
|
|
1131
|
+
if cloud_log_file is not None:
|
|
1132
|
+
try:
|
|
1133
|
+
makedirs(_fallback_saver.run_dir)
|
|
1134
|
+
_dst = Path(_fallback_saver.run_dir) / f"{simulation_name}.log"
|
|
1135
|
+
shutil.copy2(cloud_log_file, str(_dst))
|
|
1136
|
+
os.unlink(cloud_log_file)
|
|
1137
|
+
logger.info(f"[simulate_strategy] Log saved locally: {_dst}")
|
|
1138
|
+
except Exception as _log_err:
|
|
1139
|
+
logger.warning(f"[simulate_strategy] Could not copy log to fallback dir: {_log_err}")
|
|
1140
|
+
_fallback_saver.store_simulation_results(test_res, sim_time_sec, log_file=_fallback_log)
|
|
1141
|
+
print(f" > Results saved locally (cloud fallback): {green(_fallback_saver.run_dir)}")
|
|
1142
|
+
else:
|
|
1143
|
+
raise
|
|
1144
|
+
|
|
1145
|
+
|
|
1077
1146
|
def simulate_strategy(
|
|
1078
1147
|
config_file: Path,
|
|
1079
1148
|
save_path: str | None = None,
|
|
@@ -1103,6 +1172,12 @@ def simulate_strategy(
|
|
|
1103
1172
|
if not config_file.exists():
|
|
1104
1173
|
raise FileNotFoundError(f"Configuration file for simualtion not found: {config_file}")
|
|
1105
1174
|
|
|
1175
|
+
# - resolve account URI (e.g. r2:backtests) → s3:// + credentials before any path use
|
|
1176
|
+
if save_path is not None and is_account_uri(save_path) and storage_options is None:
|
|
1177
|
+
_client, _s3_key = S3Client.from_uri(save_path)
|
|
1178
|
+
storage_options = _client.storage_options
|
|
1179
|
+
save_path = f"s3://{_s3_key}"
|
|
1180
|
+
|
|
1106
1181
|
cfg = load_strategy_config_from_yaml(config_file)
|
|
1107
1182
|
|
|
1108
1183
|
# Load plugins from configuration
|
|
@@ -1230,7 +1305,23 @@ def simulate_strategy(
|
|
|
1230
1305
|
|
|
1231
1306
|
if _results_saver is not None:
|
|
1232
1307
|
# - for cloud: pass temp log file so saver uploads it; for local it's already in run_dir
|
|
1233
|
-
|
|
1308
|
+
_safe_store_results(
|
|
1309
|
+
results_saver=_results_saver,
|
|
1310
|
+
test_res=test_res,
|
|
1311
|
+
sim_time_sec=_sim_time_sec,
|
|
1312
|
+
cloud_log_file=_cloud_log_file,
|
|
1313
|
+
save_path=save_path,
|
|
1314
|
+
yaml_name=_yaml_name,
|
|
1315
|
+
strategy_full_classes=_strategy_full_classes,
|
|
1316
|
+
simulation_name=simulation_name,
|
|
1317
|
+
sim_start=cfg.simulation.start,
|
|
1318
|
+
sim_stop=cfg.simulation.stop,
|
|
1319
|
+
v_id=_v_id,
|
|
1320
|
+
config_file=config_file,
|
|
1321
|
+
tags=_tags,
|
|
1322
|
+
descr=_descr,
|
|
1323
|
+
is_variation=bool(cfg.simulation.variate),
|
|
1324
|
+
)
|
|
1234
1325
|
elif _use_storage is False and len(test_res) > 0:
|
|
1235
1326
|
# - no saver (no output path) — just log timing
|
|
1236
1327
|
print(f" > Simulation finished in {green(convert_seconds_to_str(_sim_time_sec))}")
|
|
@@ -568,7 +568,6 @@ def convert_times_to_ns(times: np.ndarray, timestamp_units: str = "ns") -> np.nd
|
|
|
568
568
|
return times
|
|
569
569
|
|
|
570
570
|
|
|
571
|
-
|
|
572
571
|
def find_minimal_timeframe(timestamps: list[pd.Timestamp]) -> str:
|
|
573
572
|
"""
|
|
574
573
|
Find the minimal standard trading timeframe that covers all timestamps.
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
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.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/connectors/ccxt/exchanges/bitfinex/bitfinex_account.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/connectors/ccxt/exchanges/hyperliquid/__init__.py
RENAMED
|
File without changes
|
{qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/connectors/ccxt/exchanges/hyperliquid/account.py
RENAMED
|
File without changes
|
{qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/src/qubx/connectors/ccxt/exchanges/hyperliquid/broker.py
RENAMED
|
File without changes
|
{qubx-1.1.2.dev7 → qubx-1.1.2.dev8}/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
|
|
File without changes
|
|
File without changes
|