investing-algorithm-framework 7.14.4__tar.gz → 7.15.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-7.14.4 → investing_algorithm_framework-7.15.0}/PKG-INFO +1 -1
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/domain/backtesting/backtest_metrics.py +16 -8
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/domain/backtesting/backtest_run.py +28 -1
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/domain/models/portfolio/portfolio_snapshot.py +1 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/services/backtesting/backtest_service.py +16 -14
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/services/metrics/trades.py +14 -8
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/pyproject.toml +1 -1
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/LICENSE +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/README.md +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/__init__.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/app/__init__.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/app/algorithm/__init__.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/app/algorithm/algorithm.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/app/algorithm/algorithm_factory.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/app/analysis/__init__.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/app/analysis/backtest_data_ranges.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/app/analysis/permutation.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/app/analysis/ranking.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/app/app.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/app/app_hook.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/app/context.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/app/eventloop.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/app/reporting/__init__.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/app/reporting/ascii.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/app/reporting/backtest_report.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/app/reporting/charts/__init__.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/app/reporting/charts/entry_exist_signals.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/app/reporting/charts/equity_curve_drawdown.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/app/reporting/charts/line_chart.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/app/reporting/charts/monthly_returns_heatmap.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/app/reporting/charts/ohlcv_data_completeness.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/app/reporting/charts/rolling_sharp_ratio.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/app/reporting/charts/yearly_returns_barchart.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/app/reporting/generate.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/app/reporting/tables/__init__.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/app/reporting/tables/key_metrics_table.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/app/reporting/tables/stop_loss_table.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/app/reporting/tables/time_metrics_table.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/app/reporting/tables/trade_metrics_table.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/app/reporting/tables/trades_table.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/app/reporting/tables/utils.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/app/reporting/templates/report_template.html.j2 +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/app/stateless/__init__.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/app/stateless/action_handlers/__init__.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/app/stateless/action_handlers/action_handler_strategy.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/app/stateless/action_handlers/check_online_handler.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/app/stateless/action_handlers/run_strategy_handler.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/app/stateless/exception_handler.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/app/strategy.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/app/task.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/app/web/__init__.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/app/web/controllers/__init__.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/app/web/controllers/orders.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/app/web/controllers/portfolio.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/app/web/controllers/positions.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/app/web/create_app.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/app/web/error_handler.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/app/web/responses.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/app/web/run_strategies.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/app/web/schemas/__init__.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/app/web/schemas/order.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/app/web/schemas/portfolio.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/app/web/schemas/position.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/app/web/setup_cors.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/cli/__init__.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/cli/cli.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/cli/deploy_to_aws_lambda.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/cli/deploy_to_azure_function.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/cli/initialize_app.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/cli/templates/.gitignore.template +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/cli/templates/app.py.template +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/cli/templates/app_aws_lambda_function.py.template +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/cli/templates/app_azure_function.py.template +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/cli/templates/app_web.py.template +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/cli/templates/aws_lambda_dockerfile.template +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/cli/templates/aws_lambda_dockerignore.template +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/cli/templates/aws_lambda_readme.md.template +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/cli/templates/aws_lambda_requirements.txt.template +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/cli/templates/azure_function_function_app.py.template +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/cli/templates/azure_function_host.json.template +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/cli/templates/azure_function_local.settings.json.template +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/cli/templates/azure_function_requirements.txt.template +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/cli/templates/data_providers.py.template +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/cli/templates/env.example.template +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/cli/templates/env_azure_function.example.template +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/cli/templates/market_data_providers.py.template +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/cli/templates/readme.md.template +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/cli/templates/requirements.txt.template +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/cli/templates/run_backtest.py.template +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/cli/templates/strategy.py.template +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/create_app.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/dependency_container.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/domain/__init__.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/domain/backtesting/__init__.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/domain/backtesting/backtest.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/domain/backtesting/backtest_date_range.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/domain/backtesting/backtest_evaluation_focuss.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/domain/backtesting/backtest_permutation_test.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/domain/backtesting/backtest_summary_metrics.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/domain/backtesting/combine_backtests.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/domain/config.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/domain/constants.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/domain/data_provider.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/domain/data_structures.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/domain/decimal_parsing.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/domain/exceptions.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/domain/models/__init__.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/domain/models/app_mode.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/domain/models/base_model.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/domain/models/data/__init__.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/domain/models/data/data_source.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/domain/models/data/data_type.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/domain/models/event.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/domain/models/market/__init__.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/domain/models/market/market_credential.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/domain/models/order/__init__.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/domain/models/order/order.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/domain/models/order/order_side.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/domain/models/order/order_status.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/domain/models/order/order_type.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/domain/models/portfolio/__init__.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/domain/models/portfolio/portfolio.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/domain/models/portfolio/portfolio_configuration.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/domain/models/position/__init__.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/domain/models/position/position.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/domain/models/position/position_snapshot.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/domain/models/snapshot_interval.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/domain/models/strategy_profile.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/domain/models/time_frame.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/domain/models/time_interval.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/domain/models/time_unit.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/domain/models/tracing/__init__.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/domain/models/tracing/trace.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/domain/models/trade/__init__.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/domain/models/trade/trade.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/domain/models/trade/trade_risk_type.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/domain/models/trade/trade_status.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/domain/models/trade/trade_stop_loss.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/domain/models/trade/trade_take_profit.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/domain/order_executor.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/domain/portfolio_provider.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/domain/positions/__init__.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/domain/positions/position_size.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/domain/services/__init__.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/domain/services/market_credential_service.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/domain/services/portfolios/__init__.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/domain/services/portfolios/portfolio_sync_service.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/domain/services/rounding_service.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/domain/services/state_handler.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/domain/stateless_actions.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/domain/strategy.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/domain/utils/__init__.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/domain/utils/csv.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/domain/utils/custom_tqdm.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/domain/utils/dates.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/domain/utils/jupyter_notebook_detection.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/domain/utils/polars.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/domain/utils/random.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/domain/utils/signatures.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/domain/utils/stoppable_thread.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/domain/utils/synchronized.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/download_data.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/infrastructure/__init__.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/infrastructure/data_providers/__init__.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/infrastructure/data_providers/ccxt.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/infrastructure/data_providers/csv.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/infrastructure/data_providers/pandas.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/infrastructure/database/__init__.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/infrastructure/database/sql_alchemy.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/infrastructure/models/__init__.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/infrastructure/models/decimal_parser.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/infrastructure/models/model_extension.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/infrastructure/models/order/__init__.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/infrastructure/models/order/order.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/infrastructure/models/order/order_metadata.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/infrastructure/models/order_trade_association.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/infrastructure/models/portfolio/__init__.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/infrastructure/models/portfolio/portfolio_snapshot.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/infrastructure/models/portfolio/sql_portfolio.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/infrastructure/models/position/__init__.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/infrastructure/models/position/position.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/infrastructure/models/position/position_snapshot.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/infrastructure/models/trades/__init__.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/infrastructure/models/trades/trade.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/infrastructure/models/trades/trade_stop_loss.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/infrastructure/models/trades/trade_take_profit.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/infrastructure/order_executors/__init__.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/infrastructure/order_executors/backtest_oder_executor.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/infrastructure/order_executors/ccxt_order_executor.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/infrastructure/portfolio_providers/__init__.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/infrastructure/portfolio_providers/ccxt_portfolio_provider.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/infrastructure/repositories/__init__.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/infrastructure/repositories/order_metadata_repository.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/infrastructure/repositories/order_repository.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/infrastructure/repositories/portfolio_repository.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/infrastructure/repositories/portfolio_snapshot_repository.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/infrastructure/repositories/position_repository.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/infrastructure/repositories/position_snapshot_repository.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/infrastructure/repositories/repository.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/infrastructure/repositories/trade_repository.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/infrastructure/repositories/trade_stop_loss_repository.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/infrastructure/repositories/trade_take_profit_repository.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/infrastructure/services/__init__.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/infrastructure/services/aws/__init__.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/infrastructure/services/aws/state_handler.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/infrastructure/services/azure/__init__.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/infrastructure/services/azure/state_handler.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/services/__init__.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/services/backtesting/__init__.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/services/configuration_service.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/services/data_providers/__init__.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/services/data_providers/data_provider_service.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/services/market_credential_service.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/services/metrics/__init__.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/services/metrics/alpha.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/services/metrics/beta.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/services/metrics/cagr.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/services/metrics/calmar_ratio.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/services/metrics/drawdown.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/services/metrics/equity_curve.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/services/metrics/exposure.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/services/metrics/generate.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/services/metrics/mean_daily_return.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/services/metrics/price_efficiency.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/services/metrics/profit_factor.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/services/metrics/recovery.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/services/metrics/returns.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/services/metrics/risk_free_rate.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/services/metrics/sharpe_ratio.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/services/metrics/sortino_ratio.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/services/metrics/standard_deviation.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/services/metrics/treynor_ratio.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/services/metrics/ulcer.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/services/metrics/value_at_risk.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/services/metrics/volatility.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/services/metrics/win_rate.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/services/order_service/__init__.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/services/order_service/order_backtest_service.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/services/order_service/order_executor_lookup.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/services/order_service/order_service.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/services/portfolios/__init__.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/services/portfolios/backtest_portfolio_service.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/services/portfolios/portfolio_configuration_service.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/services/portfolios/portfolio_provider_lookup.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/services/portfolios/portfolio_service.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/services/portfolios/portfolio_snapshot_service.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/services/portfolios/portfolio_sync_service.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/services/positions/__init__.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/services/positions/position_service.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/services/positions/position_snapshot_service.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/services/repository_service.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/services/trade_order_evaluator/__init__.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/services/trade_order_evaluator/backtest_trade_oder_evaluator.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/services/trade_order_evaluator/default_trade_order_evaluator.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/services/trade_order_evaluator/trade_order_evaluator.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/services/trade_service/__init__.py +0 -0
- {investing_algorithm_framework-7.14.4 → investing_algorithm_framework-7.15.0}/investing_algorithm_framework/services/trade_service/trade_service.py +0 -0
|
@@ -257,19 +257,25 @@ class BacktestMetrics:
|
|
|
257
257
|
"exposure_ratio": self.exposure_ratio,
|
|
258
258
|
"cumulative_exposure": self.cumulative_exposure,
|
|
259
259
|
"average_trade_gain": self.average_trade_gain,
|
|
260
|
-
"average_trade_gain_percentage":
|
|
260
|
+
"average_trade_gain_percentage":
|
|
261
|
+
self.average_trade_gain_percentage,
|
|
261
262
|
"average_trade_loss": self.average_trade_loss,
|
|
262
|
-
"average_trade_loss_percentage":
|
|
263
|
+
"average_trade_loss_percentage":
|
|
264
|
+
self.average_trade_loss_percentage,
|
|
263
265
|
"average_trade_return": self.average_trade_return,
|
|
264
|
-
"average_trade_return_percentage":
|
|
266
|
+
"average_trade_return_percentage":
|
|
267
|
+
self.average_trade_return_percentage,
|
|
265
268
|
"median_trade_return": self.median_trade_return,
|
|
266
|
-
"median_trade_return_percentage":
|
|
269
|
+
"median_trade_return_percentage":
|
|
270
|
+
self.median_trade_return_percentage,
|
|
267
271
|
"number_of_positive_trades": self.number_of_positive_trades,
|
|
268
272
|
"percentage_positive_trades": self.percentage_positive_trades,
|
|
269
273
|
"number_of_negative_trades": self.number_of_negative_trades,
|
|
270
274
|
"percentage_negative_trades": self.percentage_negative_trades,
|
|
271
|
-
"best_trade": self.best_trade.to_dict()
|
|
272
|
-
|
|
275
|
+
"best_trade": self.best_trade.to_dict()
|
|
276
|
+
if self.best_trade else None,
|
|
277
|
+
"worst_trade": self.worst_trade.to_dict()
|
|
278
|
+
if self.worst_trade else None,
|
|
273
279
|
"average_trade_duration": self.average_trade_duration,
|
|
274
280
|
"average_trade_size": self.average_trade_size,
|
|
275
281
|
"number_of_trades": self.number_of_trades,
|
|
@@ -278,8 +284,10 @@ class BacktestMetrics:
|
|
|
278
284
|
"percentage_winning_months": self.percentage_winning_months,
|
|
279
285
|
"percentage_winning_years": self.percentage_winning_years,
|
|
280
286
|
"average_monthly_return": self.average_monthly_return,
|
|
281
|
-
"average_monthly_return_losing_months":
|
|
282
|
-
|
|
287
|
+
"average_monthly_return_losing_months":
|
|
288
|
+
self.average_monthly_return_losing_months,
|
|
289
|
+
"average_monthly_return_winning_months":
|
|
290
|
+
self.average_monthly_return_winning_months,
|
|
283
291
|
"best_month": self.best_month,
|
|
284
292
|
"best_year": self.best_year,
|
|
285
293
|
"worst_month": self.worst_month,
|
|
@@ -293,7 +293,10 @@ class BacktestRun:
|
|
|
293
293
|
|
|
294
294
|
def get_portfolio_snapshots(
|
|
295
295
|
self,
|
|
296
|
-
created_at_lt: Optional[datetime] = None
|
|
296
|
+
created_at_lt: Optional[datetime] = None,
|
|
297
|
+
created_at_lte: Optional[datetime] = None,
|
|
298
|
+
created_at_gt: Optional[datetime] = None,
|
|
299
|
+
created_at_gte: Optional[datetime] = None
|
|
297
300
|
) -> List[PortfolioSnapshot]:
|
|
298
301
|
"""
|
|
299
302
|
Get the portfolio snapshots of the backtest report
|
|
@@ -301,6 +304,12 @@ class BacktestRun:
|
|
|
301
304
|
Args:
|
|
302
305
|
created_at_lt (datetime): The created_at date to filter
|
|
303
306
|
the snapshots
|
|
307
|
+
created_at_lte (datetime): The created_at date to filter
|
|
308
|
+
the snapshots
|
|
309
|
+
created_at_gt (datetime): The created_at date to filter
|
|
310
|
+
the snapshots
|
|
311
|
+
created_at_gte (datetime): The created_at date to filter
|
|
312
|
+
the snapshots
|
|
304
313
|
|
|
305
314
|
Returns:
|
|
306
315
|
list: The portfolio snapshots of the backtest report
|
|
@@ -313,6 +322,24 @@ class BacktestRun:
|
|
|
313
322
|
if snapshot.created_at < created_at_lt
|
|
314
323
|
]
|
|
315
324
|
|
|
325
|
+
if created_at_lte is not None:
|
|
326
|
+
selection = [
|
|
327
|
+
snapshot for snapshot in selection
|
|
328
|
+
if snapshot.created_at <= created_at_lte
|
|
329
|
+
]
|
|
330
|
+
|
|
331
|
+
if created_at_gt is not None:
|
|
332
|
+
selection = [
|
|
333
|
+
snapshot for snapshot in selection
|
|
334
|
+
if snapshot.created_at > created_at_gt
|
|
335
|
+
]
|
|
336
|
+
|
|
337
|
+
if created_at_gte is not None:
|
|
338
|
+
selection = [
|
|
339
|
+
snapshot for snapshot in selection
|
|
340
|
+
if snapshot.created_at >= created_at_gte
|
|
341
|
+
]
|
|
342
|
+
|
|
316
343
|
return selection
|
|
317
344
|
|
|
318
345
|
def get_orders(
|
|
@@ -259,7 +259,7 @@ class BacktestService:
|
|
|
259
259
|
# If we are not in a position, and we get a buy signal
|
|
260
260
|
if current_signal == 1 and last_trade is None:
|
|
261
261
|
amount = float(capital_for_trade / current_price)
|
|
262
|
-
|
|
262
|
+
buy_order = Order(
|
|
263
263
|
id=uuid4(),
|
|
264
264
|
target_symbol=symbol,
|
|
265
265
|
trading_symbol=trading_symbol,
|
|
@@ -271,12 +271,10 @@ class BacktestService:
|
|
|
271
271
|
updated_at=current_date,
|
|
272
272
|
order_side=OrderSide.BUY
|
|
273
273
|
)
|
|
274
|
-
orders.append(
|
|
274
|
+
orders.append(buy_order)
|
|
275
275
|
trade = Trade(
|
|
276
276
|
id=uuid4(),
|
|
277
|
-
orders=[
|
|
278
|
-
order
|
|
279
|
-
],
|
|
277
|
+
orders=[buy_order],
|
|
280
278
|
target_symbol=symbol,
|
|
281
279
|
trading_symbol=trading_symbol,
|
|
282
280
|
available_amount=amount,
|
|
@@ -286,11 +284,9 @@ class BacktestService:
|
|
|
286
284
|
opened_at=current_date,
|
|
287
285
|
closed_at=None,
|
|
288
286
|
amount=amount,
|
|
289
|
-
net_gain=0,
|
|
290
287
|
status=TradeStatus.OPEN.value,
|
|
291
288
|
cost=capital_for_trade
|
|
292
289
|
)
|
|
293
|
-
trade.updated_at = current_date
|
|
294
290
|
last_trade = trade
|
|
295
291
|
trades.append(trade)
|
|
296
292
|
|
|
@@ -299,11 +295,7 @@ class BacktestService:
|
|
|
299
295
|
net_gain_val = (
|
|
300
296
|
current_price - last_trade.open_price
|
|
301
297
|
) * last_trade.available_amount
|
|
302
|
-
|
|
303
|
-
last_trade.updated_at = current_date
|
|
304
|
-
last_trade.net_gain = net_gain_val
|
|
305
|
-
last_trade.status = TradeStatus.CLOSED.value
|
|
306
|
-
order = Order(
|
|
298
|
+
sell_order = Order(
|
|
307
299
|
id=uuid4(),
|
|
308
300
|
target_symbol=symbol,
|
|
309
301
|
trading_symbol=trading_symbol,
|
|
@@ -315,8 +307,18 @@ class BacktestService:
|
|
|
315
307
|
updated_at=current_date,
|
|
316
308
|
order_side=OrderSide.SELL
|
|
317
309
|
)
|
|
318
|
-
orders.append(
|
|
319
|
-
last_trade.orders
|
|
310
|
+
orders.append(sell_order)
|
|
311
|
+
trade_orders = last_trade.orders
|
|
312
|
+
trade_orders.append(sell_order)
|
|
313
|
+
last_trade.update(
|
|
314
|
+
{
|
|
315
|
+
"orders": trade_orders,
|
|
316
|
+
"closed_at": current_date,
|
|
317
|
+
"trade_status": TradeStatus.CLOSED,
|
|
318
|
+
"updated_at": current_date,
|
|
319
|
+
"net_gain": net_gain_val
|
|
320
|
+
}
|
|
321
|
+
)
|
|
320
322
|
last_trade = None
|
|
321
323
|
|
|
322
324
|
# Create portfolio snapshots
|
|
@@ -201,7 +201,8 @@ def get_average_trade_return(trades: List[Trade]) -> Tuple[float, float]:
|
|
|
201
201
|
"Trades list is empty, cannot compute average return."
|
|
202
202
|
)
|
|
203
203
|
|
|
204
|
-
closed_trades = [t for t in trades if t.status
|
|
204
|
+
closed_trades = [t for t in trades if TradeStatus.CLOSED.equals(t.status)]
|
|
205
|
+
|
|
205
206
|
if not closed_trades:
|
|
206
207
|
return 0.0, 0.0
|
|
207
208
|
|
|
@@ -265,15 +266,22 @@ def get_average_trade_loss(trades: List[Trade]) -> Tuple[float, float]:
|
|
|
265
266
|
"Trades list is empty or None, cannot calculate average loss."
|
|
266
267
|
)
|
|
267
268
|
|
|
268
|
-
|
|
269
|
-
|
|
269
|
+
closed_trades = [t for t in trades if TradeStatus.CLOSED.equals(t.status)]
|
|
270
|
+
losing_trades = [t for t in closed_trades if t.net_gain < 0]
|
|
270
271
|
|
|
271
|
-
if not
|
|
272
|
+
if not losing_trades or len(losing_trades) == 0:
|
|
272
273
|
return 0.0, 0.0
|
|
273
274
|
|
|
275
|
+
losses = [t.net_gain for t in losing_trades]
|
|
274
276
|
average_loss = sum(losses) / len(losses)
|
|
275
|
-
|
|
276
|
-
|
|
277
|
+
percentage_returns = [
|
|
278
|
+
(t.net_gain / t.cost) * 100.0 for t in losing_trades if t.cost > 0
|
|
279
|
+
]
|
|
280
|
+
average_return_percentage = (
|
|
281
|
+
sum(percentage_returns) / len(percentage_returns)
|
|
282
|
+
if percentage_returns else 0.0
|
|
283
|
+
)
|
|
284
|
+
return average_loss, average_return_percentage
|
|
277
285
|
|
|
278
286
|
|
|
279
287
|
def get_median_trade_return(trades: List[Trade]) -> Tuple[float, float]:
|
|
@@ -339,5 +347,3 @@ def get_worst_trade(trades: List[Trade]) -> Trade:
|
|
|
339
347
|
return None
|
|
340
348
|
|
|
341
349
|
return min(trades, key=lambda t: t.net_gain)
|
|
342
|
-
|
|
343
|
-
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|