investing-algorithm-framework 5.0.2__tar.gz → 5.1.0__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.
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/PKG-INFO +1 -1
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/domain/utils/backtesting.py +1 -1
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/infrastructure/models/market_data_sources/ccxt.py +33 -34
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/infrastructure/models/market_data_sources/csv.py +24 -22
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/services/backtesting/backtest_service.py +0 -1
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/services/trade_service/trade_service.py +1 -4
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/pyproject.toml +1 -1
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/LICENSE +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/README.md +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/__init__.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/app/__init__.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/app/algorithm.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/app/app.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/app/stateless/__init__.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/app/stateless/action_handlers/__init__.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/app/stateless/action_handlers/action_handler_strategy.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/app/stateless/action_handlers/check_online_handler.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/app/stateless/action_handlers/run_strategy_handler.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/app/stateless/exception_handler.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/app/strategy.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/app/task.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/app/web/__init__.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/app/web/controllers/__init__.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/app/web/controllers/orders.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/app/web/controllers/portfolio.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/app/web/controllers/positions.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/app/web/create_app.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/app/web/error_handler.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/app/web/responses.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/app/web/run_strategies.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/app/web/schemas/__init__.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/app/web/schemas/order.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/app/web/schemas/portfolio.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/app/web/schemas/position.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/app/web/setup_cors.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/cli/__init__.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/cli/create_azure_function_app_skeleton.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/cli/deploy_to_azure_function.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/cli/templates/azure_function_framework_app.py.template +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/cli/templates/azure_function_function_app.py.template +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/cli/templates/azure_function_host.json.template +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/cli/templates/azure_function_local.settings.json.template +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/cli/templates/azure_function_requirements.txt.template +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/create_app.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/dependency_container.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/domain/__init__.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/domain/config.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/domain/constants.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/domain/data_structures.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/domain/decimal_parsing.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/domain/exceptions.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/domain/metrics/__init__.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/domain/metrics/price_efficiency.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/domain/models/__init__.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/domain/models/app_mode.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/domain/models/backtesting/__init__.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/domain/models/backtesting/backtest_date_range.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/domain/models/backtesting/backtest_position.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/domain/models/backtesting/backtest_report.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/domain/models/backtesting/backtest_reports_evaluation.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/domain/models/base_model.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/domain/models/date_range.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/domain/models/market/__init__.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/domain/models/market/market_credential.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/domain/models/market_data_type.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/domain/models/order/__init__.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/domain/models/order/order.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/domain/models/order/order_side.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/domain/models/order/order_status.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/domain/models/order/order_type.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/domain/models/portfolio/__init__.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/domain/models/portfolio/portfolio.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/domain/models/portfolio/portfolio_configuration.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/domain/models/portfolio/portfolio_snapshot.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/domain/models/position/__init__.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/domain/models/position/position.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/domain/models/position/position_snapshot.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/domain/models/strategy_profile.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/domain/models/time_frame.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/domain/models/time_interval.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/domain/models/time_unit.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/domain/models/tracing/__init__.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/domain/models/tracing/trace.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/domain/models/trade/__init__.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/domain/models/trade/trade.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/domain/models/trade/trade_status.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/domain/models/trading_data_types.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/domain/models/trading_time_frame.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/domain/services/__init__.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/domain/services/market_credential_service.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/domain/services/market_data_sources.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/domain/services/market_service.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/domain/services/portfolios/__init__.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/domain/services/portfolios/portfolio_sync_service.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/domain/services/rounding_service.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/domain/singleton.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/domain/stateless_actions.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/domain/strategy.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/domain/utils/__init__.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/domain/utils/csv.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/domain/utils/polars.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/domain/utils/random.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/domain/utils/signatures.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/domain/utils/stoppable_thread.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/domain/utils/synchronized.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/indicators/__init__.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/indicators/advanced.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/indicators/momentum.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/indicators/trend.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/indicators/utils.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/infrastructure/__init__.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/infrastructure/database/__init__.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/infrastructure/database/sql_alchemy.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/infrastructure/models/__init__.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/infrastructure/models/decimal_parser.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/infrastructure/models/market_data_sources/__init__.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/infrastructure/models/market_data_sources/pandas.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/infrastructure/models/market_data_sources/us_treasury_yield.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/infrastructure/models/model_extension.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/infrastructure/models/order/__init__.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/infrastructure/models/order/order.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/infrastructure/models/order_trade_association.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/infrastructure/models/portfolio/__init__.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/infrastructure/models/portfolio/portfolio_snapshot.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/infrastructure/models/portfolio/sql_portfolio.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/infrastructure/models/position/__init__.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/infrastructure/models/position/position.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/infrastructure/models/position/position_snapshot.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/infrastructure/models/trade.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/infrastructure/repositories/__init__.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/infrastructure/repositories/order_repository.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/infrastructure/repositories/portfolio_repository.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/infrastructure/repositories/portfolio_snapshot_repository.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/infrastructure/repositories/position_repository.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/infrastructure/repositories/position_snapshot_repository.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/infrastructure/repositories/repository.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/infrastructure/repositories/trade_repository.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/infrastructure/services/__init__.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/infrastructure/services/azure/__init__.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/infrastructure/services/azure/state_handler.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/infrastructure/services/market_service/__init__.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/infrastructure/services/market_service/ccxt_market_service.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/infrastructure/services/performance_service/__init__.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/infrastructure/services/performance_service/backtest_performance_service.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/infrastructure/services/performance_service/performance_service.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/services/__init__.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/services/backtesting/__init__.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/services/configuration_service.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/services/market_credential_service.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/services/market_data_source_service/__init__.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/services/market_data_source_service/backtest_market_data_source_service.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/services/market_data_source_service/market_data_source_service.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/services/order_service/__init__.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/services/order_service/order_backtest_service.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/services/order_service/order_service.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/services/portfolios/__init__.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/services/portfolios/backtest_portfolio_service.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/services/portfolios/portfolio_configuration_service.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/services/portfolios/portfolio_service.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/services/portfolios/portfolio_snapshot_service.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/services/portfolios/portfolio_sync_service.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/services/position_service.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/services/position_snapshot_service.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/services/repository_service.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/services/strategy_orchestrator_service.py +0 -0
- {investing_algorithm_framework-5.0.2 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/services/trade_service/__init__.py +0 -0
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import logging
|
|
2
2
|
import os
|
|
3
3
|
from datetime import timedelta, datetime, timezone
|
|
4
|
-
from dateutil.parser import parse
|
|
5
4
|
import polars
|
|
6
5
|
from dateutil import parser
|
|
7
6
|
|
|
@@ -57,6 +56,9 @@ class CCXTOHLCVBacktestMarketDataSource(
|
|
|
57
56
|
self.data = None
|
|
58
57
|
self._start_date_data_source = None
|
|
59
58
|
self._end_date_data_source = None
|
|
59
|
+
self.backtest_end_index = self.window_size
|
|
60
|
+
self.backtest_start_index = 0
|
|
61
|
+
self.window_cache = {}
|
|
60
62
|
|
|
61
63
|
def prepare_data(
|
|
62
64
|
self,
|
|
@@ -100,8 +102,6 @@ class CCXTOHLCVBacktestMarketDataSource(
|
|
|
100
102
|
|
|
101
103
|
self.backtest_data_start_date = backtest_data_start_date\
|
|
102
104
|
.replace(microsecond=0)
|
|
103
|
-
self.backtest_data_index_date = backtest_data_start_date\
|
|
104
|
-
.replace(microsecond=0)
|
|
105
105
|
self.backtest_data_end_date = backtest_end_date.replace(microsecond=0)
|
|
106
106
|
|
|
107
107
|
# Creating the backtest data directory and file
|
|
@@ -148,14 +148,30 @@ class CCXTOHLCVBacktestMarketDataSource(
|
|
|
148
148
|
self.write_data_to_file_path(file_path, ohlcv)
|
|
149
149
|
|
|
150
150
|
self.load_data()
|
|
151
|
+
self._precompute_sliding_windows() # Precompute sliding windows!
|
|
152
|
+
|
|
153
|
+
def _precompute_sliding_windows(self):
|
|
154
|
+
"""
|
|
155
|
+
Precompute all sliding windows for fast retrieval.
|
|
156
|
+
"""
|
|
157
|
+
self.window_cache = {}
|
|
158
|
+
timestamps = self.data["Datetime"].to_list()
|
|
159
|
+
|
|
160
|
+
for i in range(len(timestamps) - self.window_size + 1):
|
|
161
|
+
# Use last timestamp as key
|
|
162
|
+
end_time = timestamps[i + self.window_size - 1]
|
|
163
|
+
self.window_cache[end_time] = self.data.slice(i, self.window_size)
|
|
151
164
|
|
|
152
165
|
def load_data(self):
|
|
153
166
|
file_path = self._create_file_path()
|
|
154
|
-
self.data = polars.read_csv(
|
|
167
|
+
self.data = polars.read_csv(
|
|
168
|
+
file_path, dtypes={"Datetime": polars.Datetime}, low_memory=True
|
|
169
|
+
) # Faster parsing
|
|
155
170
|
first_row = self.data.head(1)
|
|
156
171
|
last_row = self.data.tail(1)
|
|
157
|
-
|
|
158
|
-
self.
|
|
172
|
+
|
|
173
|
+
self._start_date_data_source = first_row["Datetime"][0]
|
|
174
|
+
self._end_date_data_source = last_row["Datetime"][0]
|
|
159
175
|
|
|
160
176
|
def _create_file_path(self):
|
|
161
177
|
"""
|
|
@@ -190,38 +206,21 @@ class CCXTOHLCVBacktestMarketDataSource(
|
|
|
190
206
|
source. This implementation will use polars to load and filter the
|
|
191
207
|
data.
|
|
192
208
|
"""
|
|
193
|
-
if self.data is None:
|
|
194
|
-
self.load_data()
|
|
195
|
-
|
|
196
|
-
end_date = date
|
|
197
209
|
|
|
198
|
-
|
|
199
|
-
|
|
210
|
+
data = self.window_cache.get(date)
|
|
211
|
+
if data is not None:
|
|
212
|
+
return data
|
|
200
213
|
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
)
|
|
214
|
+
# Find closest previous timestamp
|
|
215
|
+
sorted_timestamps = sorted(self.window_cache.keys())
|
|
204
216
|
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
217
|
+
closest_date = None
|
|
218
|
+
for ts in reversed(sorted_timestamps):
|
|
219
|
+
if ts < date:
|
|
220
|
+
closest_date = ts
|
|
221
|
+
break
|
|
210
222
|
|
|
211
|
-
if
|
|
212
|
-
raise OperationalException(
|
|
213
|
-
f"End date {end_date} is after the end date "
|
|
214
|
-
f"of the data source {self._end_date_data_source}"
|
|
215
|
-
)
|
|
216
|
-
|
|
217
|
-
time_frame = TimeFrame.from_string(self.time_frame)
|
|
218
|
-
start_date = start_date - \
|
|
219
|
-
timedelta(minutes=time_frame.amount_of_minutes)
|
|
220
|
-
selection = self.data.filter(
|
|
221
|
-
(self.data['Datetime'] >= start_date.strftime(DATETIME_FORMAT))
|
|
222
|
-
& (self.data['Datetime'] <= end_date.strftime(DATETIME_FORMAT))
|
|
223
|
-
)
|
|
224
|
-
return selection
|
|
223
|
+
return self.window_cache.get(closest_date) if closest_date else None
|
|
225
224
|
|
|
226
225
|
def to_backtest_market_data_source(self) -> BacktestMarketDataSource:
|
|
227
226
|
# Ignore this method for now
|
|
@@ -40,7 +40,8 @@ class CSVOHLCVMarketDataSource(OHLCVMarketDataSource):
|
|
|
40
40
|
self._columns = [
|
|
41
41
|
"Datetime", "Open", "High", "Low", "Close", "Volume"
|
|
42
42
|
]
|
|
43
|
-
|
|
43
|
+
|
|
44
|
+
df = polars.read_csv(self._csv_file_path)
|
|
44
45
|
|
|
45
46
|
# Check if all column names are in the csv file
|
|
46
47
|
if not all(column in df.columns for column in self._columns):
|
|
@@ -53,15 +54,25 @@ class CSVOHLCVMarketDataSource(OHLCVMarketDataSource):
|
|
|
53
54
|
f"Missing columns: {missing_columns}"
|
|
54
55
|
)
|
|
55
56
|
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
self.
|
|
57
|
+
self.data = self._load_data(self.csv_file_path)
|
|
58
|
+
first_row = self.data.head(1)
|
|
59
|
+
last_row = self.data.tail(1)
|
|
60
|
+
self._start_date_data_source = first_row["Datetime"][0]
|
|
61
|
+
self._end_date_data_source = last_row["Datetime"][0]
|
|
60
62
|
|
|
61
63
|
@property
|
|
62
64
|
def csv_file_path(self):
|
|
63
65
|
return self._csv_file_path
|
|
64
66
|
|
|
67
|
+
def _load_data(self, file_path):
|
|
68
|
+
return polars.read_csv(
|
|
69
|
+
file_path, dtypes={"Datetime": polars.Datetime}, low_memory=True
|
|
70
|
+
).with_columns(
|
|
71
|
+
polars.col("Datetime").cast(
|
|
72
|
+
polars.Datetime(time_unit="ms", time_zone="UTC")
|
|
73
|
+
)
|
|
74
|
+
)
|
|
75
|
+
|
|
65
76
|
def get_data(
|
|
66
77
|
self,
|
|
67
78
|
start_date: datetime = None,
|
|
@@ -86,9 +97,7 @@ class CSVOHLCVMarketDataSource(OHLCVMarketDataSource):
|
|
|
86
97
|
"""
|
|
87
98
|
|
|
88
99
|
if start_date is None and end_date is None:
|
|
89
|
-
return
|
|
90
|
-
self.csv_file_path, columns=self._columns, separator=","
|
|
91
|
-
)
|
|
100
|
+
return self.data
|
|
92
101
|
|
|
93
102
|
if end_date is not None and start_date is not None:
|
|
94
103
|
|
|
@@ -101,13 +110,10 @@ class CSVOHLCVMarketDataSource(OHLCVMarketDataSource):
|
|
|
101
110
|
if start_date > self._end_date_data_source:
|
|
102
111
|
return polars.DataFrame()
|
|
103
112
|
|
|
104
|
-
df =
|
|
105
|
-
self.csv_file_path, columns=self._columns, separator=","
|
|
106
|
-
)
|
|
107
|
-
|
|
113
|
+
df = self.data
|
|
108
114
|
df = df.filter(
|
|
109
|
-
(df['Datetime'] >= start_date
|
|
110
|
-
& (df['Datetime'] <= end_date
|
|
115
|
+
(df['Datetime'] >= start_date)
|
|
116
|
+
& (df['Datetime'] <= end_date)
|
|
111
117
|
)
|
|
112
118
|
return df
|
|
113
119
|
|
|
@@ -119,11 +125,9 @@ class CSVOHLCVMarketDataSource(OHLCVMarketDataSource):
|
|
|
119
125
|
if start_date > self._end_date_data_source:
|
|
120
126
|
return polars.DataFrame()
|
|
121
127
|
|
|
122
|
-
df =
|
|
123
|
-
self.csv_file_path, columns=self._columns, separator=","
|
|
124
|
-
)
|
|
128
|
+
df = self.data
|
|
125
129
|
df = df.filter(
|
|
126
|
-
(df['Datetime'] >= start_date
|
|
130
|
+
(df['Datetime'] >= start_date)
|
|
127
131
|
)
|
|
128
132
|
df = df.head(self.window_size)
|
|
129
133
|
return df
|
|
@@ -136,11 +140,9 @@ class CSVOHLCVMarketDataSource(OHLCVMarketDataSource):
|
|
|
136
140
|
if end_date > self._end_date_data_source:
|
|
137
141
|
return polars.DataFrame()
|
|
138
142
|
|
|
139
|
-
df =
|
|
140
|
-
self.csv_file_path, columns=self._columns, separator=","
|
|
141
|
-
)
|
|
143
|
+
df = self.data
|
|
142
144
|
df = df.filter(
|
|
143
|
-
(df['Datetime'] <= end_date
|
|
145
|
+
(df['Datetime'] <= end_date)
|
|
144
146
|
)
|
|
145
147
|
df = df.tail(self.window_size)
|
|
146
148
|
return df
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import logging
|
|
2
2
|
from queue import PriorityQueue
|
|
3
|
-
from dateutil import parser
|
|
4
3
|
|
|
5
4
|
from investing_algorithm_framework.domain import OrderStatus, \
|
|
6
5
|
TradeStatus, Trade, OperationalException, MarketDataType
|
|
@@ -248,9 +247,7 @@ class TradeService(RepositoryService):
|
|
|
248
247
|
last_row = data.tail(1)
|
|
249
248
|
update_data = {
|
|
250
249
|
"last_reported_price": last_row["Close"][0],
|
|
251
|
-
"updated_at":
|
|
252
|
-
last_row["Datetime"][0]
|
|
253
|
-
)
|
|
250
|
+
"updated_at": last_row["Datetime"][0]
|
|
254
251
|
}
|
|
255
252
|
price = last_row["Close"][0]
|
|
256
253
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|