investing-algorithm-framework 7.22.3__tar.gz → 7.22.4__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-7.22.3 → investing_algorithm_framework-7.22.4}/PKG-INFO +1 -1
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/app/context.py +4 -5
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/app/strategy.py +7 -2
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/domain/backtesting/backtest_metrics.py +11 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/domain/backtesting/backtest_run.py +77 -21
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/domain/backtesting/backtest_utils.py +39 -9
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/domain/models/trade/trade.py +6 -5
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/pyproject.toml +1 -1
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/LICENSE +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/README.md +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/__init__.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/app/__init__.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/app/algorithm/__init__.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/app/algorithm/algorithm.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/app/algorithm/algorithm_factory.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/app/analysis/__init__.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/app/analysis/backtest_data_ranges.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/app/analysis/permutation.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/app/analysis/ranking.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/app/analysis/strategy_id.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/app/app.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/app/app_hook.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/app/eventloop.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/app/reporting/__init__.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/app/reporting/ascii.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/app/reporting/backtest_report.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/app/reporting/charts/__init__.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/app/reporting/charts/entry_exist_signals.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/app/reporting/charts/equity_curve.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/app/reporting/charts/equity_curve_drawdown.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/app/reporting/charts/line_chart.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/app/reporting/charts/monthly_returns_heatmap.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/app/reporting/charts/ohlcv_data_completeness.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/app/reporting/charts/rolling_sharp_ratio.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/app/reporting/charts/yearly_returns_barchart.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/app/reporting/generate.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/app/reporting/tables/__init__.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/app/reporting/tables/key_metrics_table.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/app/reporting/tables/stop_loss_table.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/app/reporting/tables/time_metrics_table.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/app/reporting/tables/trade_metrics_table.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/app/reporting/tables/trades_table.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/app/reporting/tables/utils.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/app/reporting/templates/report_template.html.j2 +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/app/stateless/__init__.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/app/stateless/action_handlers/__init__.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/app/stateless/action_handlers/action_handler_strategy.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/app/stateless/action_handlers/check_online_handler.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/app/stateless/action_handlers/run_strategy_handler.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/app/stateless/exception_handler.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/app/task.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/app/web/__init__.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/app/web/controllers/__init__.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/app/web/controllers/orders.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/app/web/controllers/portfolio.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/app/web/controllers/positions.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/app/web/create_app.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/app/web/error_handler.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/app/web/responses.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/app/web/run_strategies.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/app/web/schemas/__init__.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/app/web/schemas/order.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/app/web/schemas/portfolio.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/app/web/schemas/position.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/app/web/setup_cors.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/cli/__init__.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/cli/cli.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/cli/deploy_to_aws_lambda.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/cli/deploy_to_azure_function.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/cli/initialize_app.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/cli/templates/.gitignore.template +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/cli/templates/app.py.template +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/cli/templates/app_aws_lambda_function.py.template +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/cli/templates/app_azure_function.py.template +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/cli/templates/app_web.py.template +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/cli/templates/aws_lambda_dockerfile.template +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/cli/templates/aws_lambda_dockerignore.template +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/cli/templates/aws_lambda_readme.md.template +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/cli/templates/aws_lambda_requirements.txt.template +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/cli/templates/azure_function_function_app.py.template +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/cli/templates/azure_function_host.json.template +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/cli/templates/azure_function_local.settings.json.template +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/cli/templates/azure_function_requirements.txt.template +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/cli/templates/data_providers.py.template +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/cli/templates/env.example.template +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/cli/templates/env_azure_function.example.template +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/cli/templates/market_data_providers.py.template +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/cli/templates/readme.md.template +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/cli/templates/requirements.txt.template +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/cli/templates/run_backtest.py.template +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/cli/templates/strategy.py.template +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/create_app.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/dependency_container.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/domain/__init__.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/domain/backtesting/__init__.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/domain/backtesting/backtest.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/domain/backtesting/backtest_date_range.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/domain/backtesting/backtest_evaluation_focuss.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/domain/backtesting/backtest_permutation_test.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/domain/backtesting/backtest_summary_metrics.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/domain/backtesting/combine_backtests.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/domain/config.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/domain/constants.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/domain/data_provider.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/domain/data_structures.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/domain/decimal_parsing.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/domain/exceptions.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/domain/models/__init__.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/domain/models/app_mode.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/domain/models/base_model.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/domain/models/data/__init__.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/domain/models/data/data_source.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/domain/models/data/data_type.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/domain/models/event.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/domain/models/market/__init__.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/domain/models/market/market_credential.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/domain/models/order/__init__.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/domain/models/order/order.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/domain/models/order/order_side.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/domain/models/order/order_status.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/domain/models/order/order_type.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/domain/models/portfolio/__init__.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/domain/models/portfolio/portfolio.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/domain/models/portfolio/portfolio_configuration.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/domain/models/portfolio/portfolio_snapshot.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/domain/models/position/__init__.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/domain/models/position/position.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/domain/models/position/position_size.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/domain/models/position/position_snapshot.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/domain/models/risk_rules/__init__.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/domain/models/risk_rules/stop_loss_rule.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/domain/models/risk_rules/take_profit_rule.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/domain/models/snapshot_interval.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/domain/models/strategy_profile.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/domain/models/time_frame.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/domain/models/time_interval.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/domain/models/time_unit.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/domain/models/tracing/__init__.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/domain/models/tracing/trace.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/domain/models/trade/__init__.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/domain/models/trade/trade_status.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/domain/models/trade/trade_stop_loss.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/domain/models/trade/trade_take_profit.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/domain/order_executor.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/domain/portfolio_provider.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/domain/services/__init__.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/domain/services/market_credential_service.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/domain/services/portfolios/__init__.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/domain/services/portfolios/portfolio_sync_service.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/domain/services/rounding_service.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/domain/services/state_handler.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/domain/stateless_actions.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/domain/strategy.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/domain/utils/__init__.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/domain/utils/csv.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/domain/utils/custom_tqdm.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/domain/utils/dates.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/domain/utils/jupyter_notebook_detection.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/domain/utils/polars.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/domain/utils/random.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/domain/utils/signatures.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/domain/utils/stoppable_thread.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/domain/utils/synchronized.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/download_data.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/infrastructure/__init__.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/infrastructure/data_providers/__init__.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/infrastructure/data_providers/ccxt.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/infrastructure/data_providers/csv.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/infrastructure/data_providers/pandas.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/infrastructure/database/__init__.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/infrastructure/database/sql_alchemy.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/infrastructure/models/__init__.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/infrastructure/models/decimal_parser.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/infrastructure/models/model_extension.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/infrastructure/models/order/__init__.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/infrastructure/models/order/order.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/infrastructure/models/order/order_metadata.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/infrastructure/models/order_trade_association.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/infrastructure/models/portfolio/__init__.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/infrastructure/models/portfolio/portfolio_snapshot.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/infrastructure/models/portfolio/sql_portfolio.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/infrastructure/models/position/__init__.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/infrastructure/models/position/position.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/infrastructure/models/position/position_snapshot.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/infrastructure/models/trades/__init__.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/infrastructure/models/trades/trade.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/infrastructure/models/trades/trade_stop_loss.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/infrastructure/models/trades/trade_take_profit.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/infrastructure/order_executors/__init__.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/infrastructure/order_executors/backtest_oder_executor.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/infrastructure/order_executors/ccxt_order_executor.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/infrastructure/portfolio_providers/__init__.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/infrastructure/portfolio_providers/ccxt_portfolio_provider.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/infrastructure/repositories/__init__.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/infrastructure/repositories/order_metadata_repository.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/infrastructure/repositories/order_repository.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/infrastructure/repositories/portfolio_repository.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/infrastructure/repositories/portfolio_snapshot_repository.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/infrastructure/repositories/position_repository.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/infrastructure/repositories/position_snapshot_repository.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/infrastructure/repositories/repository.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/infrastructure/repositories/trade_repository.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/infrastructure/repositories/trade_stop_loss_repository.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/infrastructure/repositories/trade_take_profit_repository.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/infrastructure/services/__init__.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/infrastructure/services/aws/__init__.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/infrastructure/services/aws/state_handler.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/infrastructure/services/azure/__init__.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/infrastructure/services/azure/state_handler.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/infrastructure/services/backtesting/__init__.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/infrastructure/services/backtesting/backtest_service.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/services/__init__.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/services/configuration_service.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/services/data_providers/__init__.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/services/data_providers/data_provider_service.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/services/market_credential_service.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/services/metrics/__init__.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/services/metrics/alpha.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/services/metrics/beta.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/services/metrics/cagr.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/services/metrics/calmar_ratio.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/services/metrics/drawdown.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/services/metrics/equity_curve.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/services/metrics/exposure.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/services/metrics/generate.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/services/metrics/mean_daily_return.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/services/metrics/price_efficiency.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/services/metrics/profit_factor.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/services/metrics/recovery.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/services/metrics/returns.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/services/metrics/risk_free_rate.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/services/metrics/sharpe_ratio.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/services/metrics/sortino_ratio.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/services/metrics/standard_deviation.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/services/metrics/trades.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/services/metrics/treynor_ratio.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/services/metrics/ulcer.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/services/metrics/value_at_risk.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/services/metrics/volatility.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/services/metrics/win_rate.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/services/order_service/__init__.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/services/order_service/order_backtest_service.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/services/order_service/order_executor_lookup.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/services/order_service/order_service.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/services/portfolios/__init__.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/services/portfolios/backtest_portfolio_service.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/services/portfolios/portfolio_configuration_service.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/services/portfolios/portfolio_provider_lookup.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/services/portfolios/portfolio_service.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/services/portfolios/portfolio_snapshot_service.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/services/portfolios/portfolio_sync_service.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/services/positions/__init__.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/services/positions/position_service.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/services/positions/position_snapshot_service.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/services/repository_service.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/services/trade_order_evaluator/__init__.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/services/trade_order_evaluator/backtest_trade_oder_evaluator.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/services/trade_order_evaluator/default_trade_order_evaluator.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/services/trade_order_evaluator/trade_order_evaluator.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/services/trade_service/__init__.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/services/trade_service/trade_service.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/services/trade_service/trade_stop_loss_service.py +0 -0
- {investing_algorithm_framework-7.22.3 → investing_algorithm_framework-7.22.4}/investing_algorithm_framework/services/trade_service/trade_take_profit_service.py +0 -0
|
@@ -1196,11 +1196,10 @@ class Context:
|
|
|
1196
1196
|
portfolio=None,
|
|
1197
1197
|
status=None,
|
|
1198
1198
|
order_id=None
|
|
1199
|
-
) ->
|
|
1199
|
+
) -> Trade:
|
|
1200
1200
|
"""
|
|
1201
|
-
Function to
|
|
1202
|
-
that
|
|
1203
|
-
is specified, the trades with the specified market will be returned.
|
|
1201
|
+
Function to retrieve a trade. This function will return the first
|
|
1202
|
+
trade that matches the specified query parameters.
|
|
1204
1203
|
|
|
1205
1204
|
Args:
|
|
1206
1205
|
market: The market of the asset
|
|
@@ -1211,7 +1210,7 @@ class Context:
|
|
|
1211
1210
|
trading_symbol: The trading symbol of the asset
|
|
1212
1211
|
|
|
1213
1212
|
Returns:
|
|
1214
|
-
|
|
1213
|
+
Trade: A instance of a trade that matches the query parameters
|
|
1215
1214
|
"""
|
|
1216
1215
|
query_params = {}
|
|
1217
1216
|
|
|
@@ -16,7 +16,12 @@ class TradingStrategy:
|
|
|
16
16
|
strategy is a set of rules that defines when to buy or sell an asset.
|
|
17
17
|
|
|
18
18
|
Attributes:
|
|
19
|
-
|
|
19
|
+
algorithm_id (string): the unique id for your
|
|
20
|
+
combined strategy instances. An algorithm consists out of one or
|
|
21
|
+
more strategy instances that run together. The algorithm_id
|
|
22
|
+
is used to uniquely indentify the combined strategy instances.
|
|
23
|
+
This is id is used in various places in the framework, e.g. for
|
|
24
|
+
backtesting results, logging, monitoring etc.
|
|
20
25
|
time_unit (TimeUnit): the time unit of the strategy that defines
|
|
21
26
|
when the strategy should run e.g. HOUR, DAY, WEEK, MONTH
|
|
22
27
|
interval (int): the interval of the strategy that defines how often
|
|
@@ -34,7 +39,7 @@ class TradingStrategy:
|
|
|
34
39
|
store additional information about the strategy, such as its
|
|
35
40
|
author, version, description, params etc.
|
|
36
41
|
"""
|
|
37
|
-
|
|
42
|
+
algorithm_id: str
|
|
38
43
|
time_unit: TimeUnit = None
|
|
39
44
|
interval: int = None
|
|
40
45
|
worker_id: str = None
|
|
@@ -21,8 +21,13 @@ class BacktestMetrics:
|
|
|
21
21
|
and maximum drawdown.
|
|
22
22
|
|
|
23
23
|
Attributes:
|
|
24
|
+
backtest_date_range_name (str): The name of the date range
|
|
25
|
+
used for the backtest.
|
|
24
26
|
backtest_start_date (datetime): The start date of the backtest.
|
|
25
27
|
backtest_end_date (datetime): The end date of the backtest.
|
|
28
|
+
trading_symbol (str): The trading symbol used in the backtest.
|
|
29
|
+
initial_unallocated (float): The initial unallocated cash
|
|
30
|
+
at the start of the backtest.
|
|
26
31
|
final_value (float): The final value of the portfolio at the end
|
|
27
32
|
of the backtest.
|
|
28
33
|
equity_curve (List[Tuple[datetime, float]]): A list of
|
|
@@ -137,6 +142,9 @@ class BacktestMetrics:
|
|
|
137
142
|
"""
|
|
138
143
|
backtest_start_date: datetime
|
|
139
144
|
backtest_end_date: datetime
|
|
145
|
+
backtest_date_range_name: str = ""
|
|
146
|
+
trading_symbol: str = ""
|
|
147
|
+
initial_unallocated: float = 0.0
|
|
140
148
|
equity_curve: List[Tuple[float, datetime]] = field(default_factory=list)
|
|
141
149
|
total_growth: float = 0.0
|
|
142
150
|
total_growth_percentage: float = 0.0
|
|
@@ -233,6 +241,9 @@ class BacktestMetrics:
|
|
|
233
241
|
return {
|
|
234
242
|
"backtest_start_date": ensure_iso(self.backtest_start_date),
|
|
235
243
|
"backtest_end_date": ensure_iso(self.backtest_end_date),
|
|
244
|
+
"backtest_date_range_name": self.backtest_date_range_name,
|
|
245
|
+
"trading_symbol": self.trading_symbol,
|
|
246
|
+
"initial_unallocated": self.initial_unallocated,
|
|
236
247
|
"equity_curve": [(value, ensure_iso(date))
|
|
237
248
|
for value, date in self.equity_curve],
|
|
238
249
|
"final_value": self.final_value,
|
|
@@ -169,6 +169,23 @@ class BacktestRun:
|
|
|
169
169
|
f"The run file {run_file} does not exist."
|
|
170
170
|
)
|
|
171
171
|
|
|
172
|
+
# Validate and set defaults for required fields
|
|
173
|
+
required_fields = {
|
|
174
|
+
"backtest_start_date": "2020-01-01 00:00:00",
|
|
175
|
+
"backtest_end_date": "2020-01-02 00:00:00",
|
|
176
|
+
"created_at": "2020-01-01 00:00:00",
|
|
177
|
+
"trading_symbol": "USD",
|
|
178
|
+
"initial_unallocated": 1000.0,
|
|
179
|
+
"number_of_runs": 1
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
for field_name, default_value in required_fields.items():
|
|
183
|
+
if field_name not in data:
|
|
184
|
+
logger.warning(f"Missing required field '{field_name}' in "
|
|
185
|
+
f"backtest data, using "
|
|
186
|
+
f"default: {default_value}")
|
|
187
|
+
data[field_name] = default_value
|
|
188
|
+
|
|
172
189
|
# Parse datetime fields
|
|
173
190
|
data["backtest_start_date"] = datetime.strptime(
|
|
174
191
|
data["backtest_start_date"], "%Y-%m-%d %H:%M:%S"
|
|
@@ -186,27 +203,66 @@ class BacktestRun:
|
|
|
186
203
|
"backtest_end_date"].replace(tzinfo=timezone.utc)
|
|
187
204
|
data["created_at"] = data["created_at"].replace(tzinfo=timezone.utc)
|
|
188
205
|
|
|
189
|
-
# Parse orders
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
data
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
206
|
+
# Parse orders with error handling
|
|
207
|
+
orders = []
|
|
208
|
+
for order_data in data.get("orders", []):
|
|
209
|
+
try:
|
|
210
|
+
order = Order.from_dict(order_data)
|
|
211
|
+
orders.append(order)
|
|
212
|
+
except KeyError as e:
|
|
213
|
+
logger.error(f"Failed to parse order "
|
|
214
|
+
f"data, missing field {e}: {order_data}")
|
|
215
|
+
continue
|
|
216
|
+
except Exception as e:
|
|
217
|
+
logger.error(f"Failed to parse order data: {e}")
|
|
218
|
+
continue
|
|
219
|
+
data["orders"] = orders
|
|
220
|
+
|
|
221
|
+
# Parse positions with error handling
|
|
222
|
+
positions = []
|
|
223
|
+
for position_data in data.get("positions", []):
|
|
224
|
+
try:
|
|
225
|
+
position = Position.from_dict(position_data)
|
|
226
|
+
positions.append(position)
|
|
227
|
+
except KeyError as e:
|
|
228
|
+
logger.error(f"Failed to parse position data, "
|
|
229
|
+
f"missing field {e}: {position_data}")
|
|
230
|
+
continue
|
|
231
|
+
except Exception as e:
|
|
232
|
+
logger.error(f"Failed to parse position data: {e}")
|
|
233
|
+
continue
|
|
234
|
+
data["positions"] = positions
|
|
235
|
+
|
|
236
|
+
# Parse trades with error handling
|
|
237
|
+
trades = []
|
|
238
|
+
for trade_data in data.get("trades", []):
|
|
239
|
+
try:
|
|
240
|
+
trade = Trade.from_dict(trade_data)
|
|
241
|
+
trades.append(trade)
|
|
242
|
+
except KeyError as e:
|
|
243
|
+
logger.error(f"Failed to parse trade data, "
|
|
244
|
+
f"missing field {e}: {trade_data}")
|
|
245
|
+
# Skip this trade and continue with the next one
|
|
246
|
+
continue
|
|
247
|
+
except Exception as e:
|
|
248
|
+
logger.error(f"Failed to parse trade data: {e}")
|
|
249
|
+
continue
|
|
250
|
+
data["trades"] = trades
|
|
251
|
+
|
|
252
|
+
# Parse portfolio snapshots with error handling
|
|
253
|
+
portfolio_snapshots = []
|
|
254
|
+
for ps_data in data.get("portfolio_snapshots", []):
|
|
255
|
+
try:
|
|
256
|
+
ps = PortfolioSnapshot.from_dict(ps_data)
|
|
257
|
+
portfolio_snapshots.append(ps)
|
|
258
|
+
except KeyError as e:
|
|
259
|
+
logger.error(f"Failed to parse portfolio snapshot data, "
|
|
260
|
+
f"missing field {e}: {ps_data}")
|
|
261
|
+
continue
|
|
262
|
+
except Exception as e:
|
|
263
|
+
logger.error(f"Failed to parse portfolio snapshot data: {e}")
|
|
264
|
+
continue
|
|
265
|
+
data["portfolio_snapshots"] = portfolio_snapshots
|
|
210
266
|
|
|
211
267
|
return BacktestRun(
|
|
212
268
|
backtest_metrics=backtest_metrics,
|
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
import os
|
|
2
|
-
from pathlib import Path
|
|
3
|
-
from typing import List, Union, Callable
|
|
4
2
|
from logging import getLogger
|
|
3
|
+
from pathlib import Path
|
|
5
4
|
from random import Random
|
|
5
|
+
from typing import List, Union, Callable
|
|
6
6
|
|
|
7
|
-
from .backtest import Backtest
|
|
8
7
|
from investing_algorithm_framework.domain.exceptions import \
|
|
9
8
|
OperationalException
|
|
10
|
-
|
|
9
|
+
from .backtest import Backtest
|
|
11
10
|
|
|
12
11
|
logger = getLogger("investing_algorithm_framework")
|
|
13
12
|
|
|
@@ -29,7 +28,7 @@ def save_backtests_to_directory(
|
|
|
29
28
|
dir_name_generation_function (Callable[[Backtest], str], optional):
|
|
30
29
|
A function that takes a Backtest object as input and returns
|
|
31
30
|
a string to be used as the directory name for that backtest.
|
|
32
|
-
If not provided, the backtest's
|
|
31
|
+
If not provided, the backtest's algorithm_id will be used.
|
|
33
32
|
Defaults to None.
|
|
34
33
|
number_of_backtests_to_save (int, optional): Maximum number of
|
|
35
34
|
backtests to save. If None, all backtests will be saved.
|
|
@@ -74,7 +73,7 @@ def save_backtests_to_directory(
|
|
|
74
73
|
|
|
75
74
|
if dir_name is None:
|
|
76
75
|
logger.warning(
|
|
77
|
-
"Backtest
|
|
76
|
+
"Backtest algorithm_id is None. "
|
|
78
77
|
"Generating a random directory name."
|
|
79
78
|
)
|
|
80
79
|
dir_name = str(Random().randint(100000, 999999))
|
|
@@ -123,16 +122,47 @@ def load_backtests_from_directory(
|
|
|
123
122
|
file_path = os.path.join(directory_path, file_name)
|
|
124
123
|
|
|
125
124
|
try:
|
|
126
|
-
|
|
125
|
+
|
|
126
|
+
# Add step-by-step debugging
|
|
127
|
+
try:
|
|
128
|
+
backtest = Backtest.open(file_path)
|
|
129
|
+
except KeyError as ke:
|
|
130
|
+
logger.error(
|
|
131
|
+
f"KeyError during Backtest.open for {file_path}: {ke}"
|
|
132
|
+
)
|
|
133
|
+
import traceback
|
|
134
|
+
logger.error(
|
|
135
|
+
f"Backtest.open KeyError "
|
|
136
|
+
f"traceback: {traceback.format_exc()}"
|
|
137
|
+
)
|
|
138
|
+
continue # Skip this backtest and continue with the next one
|
|
139
|
+
except Exception as be:
|
|
140
|
+
logger.error(
|
|
141
|
+
f"Other error during Backtest.open for {file_path}: {be}"
|
|
142
|
+
)
|
|
143
|
+
import traceback
|
|
144
|
+
logger.error(
|
|
145
|
+
f"Backtest.open error traceback: {traceback.format_exc()}"
|
|
146
|
+
)
|
|
147
|
+
continue # Skip this backtest and continue with the next one
|
|
127
148
|
|
|
128
149
|
if filter_function is not None:
|
|
129
|
-
|
|
150
|
+
try:
|
|
151
|
+
if not filter_function(backtest):
|
|
152
|
+
continue
|
|
153
|
+
except Exception as fe:
|
|
154
|
+
logger.error(
|
|
155
|
+
f"Error in filter_function for {file_path}: {fe}"
|
|
156
|
+
)
|
|
130
157
|
continue
|
|
131
158
|
|
|
132
159
|
backtests.append(backtest)
|
|
160
|
+
|
|
133
161
|
except Exception as e:
|
|
134
162
|
logger.error(
|
|
135
|
-
f"
|
|
163
|
+
f"Unexpected top-level error loading "
|
|
164
|
+
f"backtest from {file_path}: {e}"
|
|
136
165
|
)
|
|
166
|
+
import traceback
|
|
137
167
|
|
|
138
168
|
return backtests
|
|
@@ -341,13 +341,14 @@ class Trade(BaseModel):
|
|
|
341
341
|
Order.from_dict(order)
|
|
342
342
|
for order in data["orders"]
|
|
343
343
|
]
|
|
344
|
+
|
|
344
345
|
return Trade(
|
|
345
346
|
id=data.get("id", None),
|
|
346
347
|
orders=orders,
|
|
347
|
-
target_symbol=data
|
|
348
|
-
trading_symbol=data
|
|
349
|
-
amount=data
|
|
350
|
-
open_price=data
|
|
348
|
+
target_symbol=data.get("target_symbol", ""),
|
|
349
|
+
trading_symbol=data.get("trading_symbol", ""),
|
|
350
|
+
amount=data.get("amount", 0),
|
|
351
|
+
open_price=data.get("open_price", 0),
|
|
351
352
|
opened_at=opened_at,
|
|
352
353
|
closed_at=closed_at,
|
|
353
354
|
filled_amount=data.get("filled_amount", 0),
|
|
@@ -355,7 +356,7 @@ class Trade(BaseModel):
|
|
|
355
356
|
remaining=data.get("remaining", 0),
|
|
356
357
|
net_gain=data.get("net_gain", 0),
|
|
357
358
|
last_reported_price=data.get("last_reported_price"),
|
|
358
|
-
status=TradeStatus.from_value(data
|
|
359
|
+
status=TradeStatus.from_value(data.get("status", "OPEN")).value,
|
|
359
360
|
cost=data.get("cost", 0),
|
|
360
361
|
updated_at=updated_at,
|
|
361
362
|
stop_losses=stop_losses,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|