investing-algorithm-framework 8.6.0__tar.gz → 8.6.1__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-8.6.0 → investing_algorithm_framework-8.6.1}/PKG-INFO +136 -21
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/README.md +135 -20
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/app/app.py +37 -3
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/backtesting/backtest.py +30 -6
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/backtesting/backtest_metrics.py +15 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/backtesting/backtest_summary_metrics.py +24 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/backtesting/combine_backtests.py +35 -16
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/models/data/data_source.py +7 -3
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/infrastructure/services/backtesting/backtest_service.py +302 -77
- investing_algorithm_framework-8.6.1/investing_algorithm_framework/infrastructure/services/backtesting/checkpoint_manifest.py +240 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/services/metrics/generate.py +24 -4
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/services/metrics/returns.py +13 -4
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/pyproject.toml +1 -1
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/LICENSE +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/__init__.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/analysis/__init__.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/analysis/backtest_data_ranges.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/analysis/markdown.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/analysis/ranking.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/app/__init__.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/app/algorithm/__init__.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/app/algorithm/algorithm.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/app/algorithm/algorithm_factory.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/app/app_hook.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/app/context.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/app/eventloop.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/app/reporting/__init__.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/app/reporting/ascii.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/app/reporting/backtest_report.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/app/reporting/backtest_report_old.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/app/reporting/charts/__init__.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/app/reporting/charts/entry_exist_signals.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/app/reporting/charts/equity_curve.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/app/reporting/charts/equity_curve_drawdown.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/app/reporting/charts/line_chart.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/app/reporting/charts/monthly_returns_heatmap.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/app/reporting/charts/ohlcv_data_completeness.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/app/reporting/charts/rolling_sharp_ratio.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/app/reporting/charts/yearly_returns_barchart.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/app/reporting/generate.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/app/reporting/tables/__init__.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/app/reporting/tables/key_metrics_table.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/app/reporting/tables/stop_loss_table.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/app/reporting/tables/time_metrics_table.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/app/reporting/tables/trade_metrics_table.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/app/reporting/tables/trades_table.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/app/reporting/tables/utils.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/app/reporting/templates/dashboard.css +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/app/reporting/templates/dashboard.js +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/app/reporting/templates/dashboard_template.html.j2 +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/app/reporting/templates/report_template.html.j2 +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/app/stateless/__init__.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/app/stateless/action_handlers/__init__.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/app/stateless/action_handlers/action_handler_strategy.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/app/stateless/action_handlers/check_online_handler.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/app/stateless/action_handlers/run_strategy_handler.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/app/stateless/exception_handler.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/app/strategy.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/app/task.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/app/web/__init__.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/app/web/controllers/__init__.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/app/web/controllers/orders.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/app/web/controllers/portfolio.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/app/web/controllers/positions.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/app/web/create_app.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/app/web/error_handler.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/app/web/responses.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/app/web/run_strategies.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/app/web/schemas/__init__.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/app/web/schemas/order.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/app/web/schemas/portfolio.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/app/web/schemas/position.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/app/web/setup_cors.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/cli/__init__.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/cli/cli.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/cli/deploy_to_aws_lambda.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/cli/deploy_to_azure_function.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/cli/initialize_app.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/cli/mcp_server.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/cli/templates/.gitignore.template +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/cli/templates/app.py.template +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/cli/templates/app_aws_lambda_function.py.template +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/cli/templates/app_azure_function.py.template +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/cli/templates/app_web.py.template +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/cli/templates/aws_lambda_dockerfile.template +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/cli/templates/aws_lambda_dockerignore.template +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/cli/templates/aws_lambda_readme.md.template +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/cli/templates/aws_lambda_requirements.txt.template +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/cli/templates/azure_function_function_app.py.template +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/cli/templates/azure_function_host.json.template +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/cli/templates/azure_function_local.settings.json.template +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/cli/templates/azure_function_requirements.txt.template +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/cli/templates/data_providers.py.template +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/cli/templates/env.example.template +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/cli/templates/env_azure_function.example.template +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/cli/templates/market_data_providers.py.template +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/cli/templates/readme.md.template +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/cli/templates/requirements.txt.template +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/cli/templates/run_backtest.py.template +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/cli/templates/strategy.py.template +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/cli/validate_backtest_checkpoints.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/create_app.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/dependency_container.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/__init__.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/algorithm_id.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/backtesting/__init__.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/backtesting/backtest_date_range.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/backtesting/backtest_evaluation_focuss.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/backtesting/backtest_permutation_test.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/backtesting/backtest_run.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/backtesting/backtest_utils.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/backtesting/consistency.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/backtesting/templates/backtest.html +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/backtesting/templates/finterion-dark.png +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/backtesting/templates/finterion-light.png +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/blotter.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/config.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/constants.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/data_provider.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/data_structures.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/decimal_parsing.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/exceptions.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/fx.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/models/__init__.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/models/app_mode.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/models/base_model.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/models/data/__init__.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/models/data/data_type.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/models/event.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/models/market/__init__.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/models/market/market_credential.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/models/order/__init__.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/models/order/order.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/models/order/order_side.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/models/order/order_status.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/models/order/order_type.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/models/portfolio/__init__.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/models/portfolio/portfolio.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/models/portfolio/portfolio_configuration.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/models/portfolio/portfolio_snapshot.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/models/position/__init__.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/models/position/position.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/models/position/position_size.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/models/position/position_snapshot.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/models/risk_rules/__init__.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/models/risk_rules/scaling_rule.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/models/risk_rules/stop_loss_rule.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/models/risk_rules/take_profit_rule.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/models/risk_rules/trading_cost.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/models/snapshot_interval.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/models/strategy_profile.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/models/time_frame.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/models/time_interval.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/models/time_unit.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/models/tracing/__init__.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/models/tracing/trace.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/models/trade/__init__.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/models/trade/trade.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/models/trade/trade_status.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/models/trade/trade_stop_loss.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/models/trade/trade_take_profit.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/order_executor.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/portfolio_provider.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/services/__init__.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/services/market_credential_service.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/services/portfolios/__init__.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/services/portfolios/portfolio_sync_service.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/services/rounding_service.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/services/state_handler.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/stateless_actions.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/strategy.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/utils/__init__.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/utils/csv.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/utils/custom_tqdm.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/utils/dates.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/utils/jupyter_notebook_detection.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/utils/polars.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/utils/random.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/utils/signatures.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/utils/stoppable_thread.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/utils/synchronized.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/download_data.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/infrastructure/__init__.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/infrastructure/data_providers/__init__.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/infrastructure/data_providers/alpha_vantage.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/infrastructure/data_providers/base_url.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/infrastructure/data_providers/ccxt.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/infrastructure/data_providers/csv.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/infrastructure/data_providers/csv_url.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/infrastructure/data_providers/json_url.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/infrastructure/data_providers/ohlcv_base.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/infrastructure/data_providers/pandas.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/infrastructure/data_providers/parquet_url.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/infrastructure/data_providers/polygon.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/infrastructure/data_providers/yahoo.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/infrastructure/database/__init__.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/infrastructure/database/sql_alchemy.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/infrastructure/models/__init__.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/infrastructure/models/decimal_parser.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/infrastructure/models/model_extension.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/infrastructure/models/order/__init__.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/infrastructure/models/order/order.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/infrastructure/models/order/trade_allocation.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/infrastructure/models/order_trade_association.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/infrastructure/models/portfolio/__init__.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/infrastructure/models/portfolio/portfolio_snapshot.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/infrastructure/models/portfolio/sql_portfolio.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/infrastructure/models/position/__init__.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/infrastructure/models/position/position.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/infrastructure/models/position/position_snapshot.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/infrastructure/models/trades/__init__.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/infrastructure/models/trades/trade.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/infrastructure/models/trades/trade_stop_loss.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/infrastructure/models/trades/trade_take_profit.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/infrastructure/order_executors/__init__.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/infrastructure/order_executors/ccxt_order_executor.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/infrastructure/portfolio_providers/__init__.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/infrastructure/portfolio_providers/ccxt_portfolio_provider.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/infrastructure/repositories/__init__.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/infrastructure/repositories/order_repository.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/infrastructure/repositories/portfolio_repository.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/infrastructure/repositories/portfolio_snapshot_repository.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/infrastructure/repositories/position_repository.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/infrastructure/repositories/position_snapshot_repository.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/infrastructure/repositories/repository.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/infrastructure/repositories/trade_allocation_repository.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/infrastructure/repositories/trade_repository.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/infrastructure/repositories/trade_stop_loss_repository.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/infrastructure/repositories/trade_take_profit_repository.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/infrastructure/services/__init__.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/infrastructure/services/aws/__init__.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/infrastructure/services/aws/state_handler.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/infrastructure/services/azure/__init__.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/infrastructure/services/azure/state_handler.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/infrastructure/services/backtesting/__init__.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/infrastructure/services/backtesting/event_backtest_service.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/infrastructure/services/backtesting/vector_backtest_service.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/notebook/__init__.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/notebook/magic.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/services/__init__.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/services/configuration_service.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/services/data_providers/__init__.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/services/data_providers/data.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/services/data_providers/data_provider_service.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/services/market_credential_service.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/services/metrics/__init__.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/services/metrics/alpha.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/services/metrics/beta.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/services/metrics/cagr.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/services/metrics/calmar_ratio.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/services/metrics/consistency.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/services/metrics/drawdown.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/services/metrics/equity_curve.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/services/metrics/exposure.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/services/metrics/mean_daily_return.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/services/metrics/price_efficiency.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/services/metrics/profit_factor.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/services/metrics/recovery.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/services/metrics/risk_free_rate.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/services/metrics/sharpe_ratio.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/services/metrics/sortino_ratio.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/services/metrics/standard_deviation.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/services/metrics/trades.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/services/metrics/treynor_ratio.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/services/metrics/ulcer.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/services/metrics/value_at_risk.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/services/metrics/volatility.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/services/metrics/win_rate.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/services/order_service/__init__.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/services/order_service/order_backtest_service.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/services/order_service/order_executor_lookup.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/services/order_service/order_service.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/services/portfolios/__init__.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/services/portfolios/backtest_portfolio_service.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/services/portfolios/portfolio_configuration_service.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/services/portfolios/portfolio_provider_lookup.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/services/portfolios/portfolio_service.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/services/portfolios/portfolio_snapshot_service.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/services/portfolios/portfolio_sync_service.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/services/positions/__init__.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/services/positions/position_service.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/services/positions/position_snapshot_service.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/services/repository_service.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/services/trade_order_evaluator/__init__.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/services/trade_order_evaluator/backtest_trade_oder_evaluator.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/services/trade_order_evaluator/default_trade_order_evaluator.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/services/trade_order_evaluator/trade_order_evaluator.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/services/trade_service/__init__.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/services/trade_service/trade_service.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/services/trade_service/trade_stop_loss_service.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/services/trade_service/trade_take_profit_service.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: investing-algorithm-framework
|
|
3
|
-
Version: 8.6.
|
|
3
|
+
Version: 8.6.1
|
|
4
4
|
Summary: A framework for creating trading bots
|
|
5
5
|
Author: MDUYN
|
|
6
6
|
Requires-Python: >=3.10,<4.0
|
|
@@ -79,7 +79,11 @@ Description-Content-Type: text/markdown
|
|
|
79
79
|
</h4>
|
|
80
80
|
|
|
81
81
|
<p align="center">
|
|
82
|
-
|
|
82
|
+
<picture>
|
|
83
|
+
<source media="(prefers-color-scheme: dark)" srcset="static/features/hero-dark.svg">
|
|
84
|
+
<source media="(prefers-color-scheme: light)" srcset="static/features/hero-light.svg">
|
|
85
|
+
<img src="static/features/hero-dark.svg" alt="Investing Algorithm Framework — features overview" style="max-width: 100%;">
|
|
86
|
+
</picture>
|
|
83
87
|
</p>
|
|
84
88
|
|
|
85
89
|
<p align="center">
|
|
@@ -89,17 +93,9 @@ Description-Content-Type: text/markdown
|
|
|
89
93
|
</p>
|
|
90
94
|
|
|
91
95
|
<p align="center">
|
|
92
|
-
<sub
|
|
96
|
+
<sub>Proudly sponsored by</sub>
|
|
93
97
|
<br>
|
|
94
|
-
<a href="https://www.finterion.com/" target="_blank">
|
|
95
|
-
<picture>
|
|
96
|
-
<source media="(prefers-color-scheme: dark)" srcset="static/sponsors/finterion-dark.png">
|
|
97
|
-
<source media="(prefers-color-scheme: light)" srcset="static/sponsors/finterion-light.png">
|
|
98
|
-
<img src="static/sponsors/finterion-light.png" alt="Finterion" width="200">
|
|
99
|
-
</picture>
|
|
100
|
-
</a>
|
|
101
|
-
<br>
|
|
102
|
-
<sub>Marketplace for trading bots</sub>
|
|
98
|
+
<a href="https://www.finterion.com/" target="_blank"><picture><source media="(prefers-color-scheme: dark)" srcset="static/sponsors/finterion-dark.png"><source media="(prefers-color-scheme: light)" srcset="static/sponsors/finterion-light.png"><img src="static/sponsors/finterion-light.png" alt="Finterion" width="180"></picture></a>
|
|
103
99
|
</p>
|
|
104
100
|
|
|
105
101
|
## Introduction
|
|
@@ -116,6 +112,7 @@ This framework is built around the full loop: **create strategies → vector bac
|
|
|
116
112
|
</summary> <br>
|
|
117
113
|
|
|
118
114
|
- 📊 **30+ Metrics** — CAGR, Sharpe, Sortino, Calmar, VaR, CVaR, Max DD, Recovery & more
|
|
115
|
+
- 🧮 **[Cross-Sectional Pipelines](https://coding-kitties.github.io/investing-algorithm-framework/Advanced%20Concepts/pipelines)** — Rank, filter and score entire universes of symbols every iteration with a tidy factor table
|
|
119
116
|
- ⚡ **Vector Backtesting for Signal Analysis** — Quickly test your strategy logic on historical data to see how signals would have behaved before committing to full event-driven backtests
|
|
120
117
|
- 🏃 **Event-Driven Backtesting** — Once promising strategies are identified via vector backtests, run full event-driven backtests to simulate realistic execution and portfolio management
|
|
121
118
|
- 🔀 **Permutation Testing / Monte Carlo Simulations** — Assess the statistical robustness of your strategies by running them across randomized market scenarios to see how often your results could occur by chance
|
|
@@ -133,7 +130,109 @@ This framework is built around the full loop: **create strategies → vector bac
|
|
|
133
130
|
|
|
134
131
|
</details>
|
|
135
132
|
|
|
136
|
-
|
|
133
|
+
<details open>
|
|
134
|
+
<summary>
|
|
135
|
+
<strong>Backtesting Engines</strong>
|
|
136
|
+
</summary> <br>
|
|
137
|
+
|
|
138
|
+
### ⚡ Vector Backtesting — Test thousands of strategies, fast
|
|
139
|
+
|
|
140
|
+
Polars-powered vectorized signal evaluation. Compare thousands of strategies side by side, sweep parameter grids, run multi-window robustness checks, rank by key metrics and surface your top candidates in seconds — all before committing to a full event-driven simulation.
|
|
141
|
+
|
|
142
|
+
<p align="center">
|
|
143
|
+
<picture>
|
|
144
|
+
<source media="(prefers-color-scheme: dark)" srcset="static/features/vector-backtest-dark.svg">
|
|
145
|
+
<source media="(prefers-color-scheme: light)" srcset="static/features/vector-backtest-light.svg">
|
|
146
|
+
<img src="static/features/vector-backtest-dark.svg" alt="Vector backtest engine — run thousands of strategies in parallel" style="max-width: 100%;">
|
|
147
|
+
</picture>
|
|
148
|
+
</p>
|
|
149
|
+
|
|
150
|
+
### 🏃 Event-Driven Backtesting — Bar-by-bar realism
|
|
151
|
+
|
|
152
|
+
Once you've narrowed down promising strategies, run them through a full event-driven simulation. Pluggable slippage and fill models, partial fills, and a complete simulation blotter — using the **same code path** you'll deploy live.
|
|
153
|
+
|
|
154
|
+
<p align="center">
|
|
155
|
+
<picture>
|
|
156
|
+
<source media="(prefers-color-scheme: dark)" srcset="static/features/event-backtest-dark.svg">
|
|
157
|
+
<source media="(prefers-color-scheme: light)" srcset="static/features/event-backtest-light.svg">
|
|
158
|
+
<img src="static/features/event-backtest-dark.svg" alt="Event-driven backtest engine — bar-by-bar realism with order fills" style="max-width: 100%;">
|
|
159
|
+
</picture>
|
|
160
|
+
</p>
|
|
161
|
+
|
|
162
|
+
</details>
|
|
163
|
+
|
|
164
|
+
<details open>
|
|
165
|
+
<summary>
|
|
166
|
+
<strong>Backtest Analysis & Dashboard</strong>
|
|
167
|
+
</summary> <br>
|
|
168
|
+
|
|
169
|
+
Every backtest produces a **self-contained HTML dashboard** — open it in any browser, share with teammates, archive it. No server, no Jupyter, no dependencies. Compare strategies side-by-side, drill into trades, and capture your reasoning as you go.
|
|
170
|
+
|
|
171
|
+
<p align="center">
|
|
172
|
+
<picture>
|
|
173
|
+
<source media="(prefers-color-scheme: dark)" srcset="static/features/dashboard-dark.svg">
|
|
174
|
+
<source media="(prefers-color-scheme: light)" srcset="static/features/dashboard-light.svg">
|
|
175
|
+
<img src="static/features/dashboard-dark.svg" alt="Backtest analysis dashboard with MCP server and notes" style="max-width: 100%;">
|
|
176
|
+
</picture>
|
|
177
|
+
</p>
|
|
178
|
+
|
|
179
|
+
- **Self-contained HTML reports** — equity curves, drawdowns, trade lists, monthly returns, side-by-side strategy comparison
|
|
180
|
+
- **Built-in MCP server** — let Copilot, Claude, or any MCP-compatible agent query your backtests, rank strategies, and reason over trades through `investing-algorithm-framework mcp`
|
|
181
|
+
- **Notes keeping** — annotate every backtest with hypotheses, observations and conclusions; notes travel with the report so your research is never lost
|
|
182
|
+
|
|
183
|
+
→ [Backtest dashboard docs](https://coding-kitties.github.io/investing-algorithm-framework/Getting%20Started/backtesting) · [MCP server docs](https://coding-kitties.github.io/investing-algorithm-framework/Advanced%20Concepts/mcp-server)
|
|
184
|
+
|
|
185
|
+
</details>
|
|
186
|
+
|
|
187
|
+
<details open>
|
|
188
|
+
<summary>
|
|
189
|
+
<strong>Live Trading</strong>
|
|
190
|
+
</summary> <br>
|
|
191
|
+
|
|
192
|
+
Once a strategy proves itself in backtests, deploy it with the **same code path** you backtested. Connect to any exchange — use the built-in [CCXT](https://github.com/ccxt/ccxt) integration, or plug in your own [`OrderExecutor`](https://coding-kitties.github.io/investing-algorithm-framework/Advanced%20Concepts/custom-order-executors) for brokers, FIX gateways, or any custom venue. Run locally, in Docker, or deploy serverless to **AWS Lambda** or **Azure Functions**. Built-in portfolio tracking, position management, order persistence, and automatic state recovery.
|
|
193
|
+
|
|
194
|
+
<p align="center">
|
|
195
|
+
<picture>
|
|
196
|
+
<source media="(prefers-color-scheme: dark)" srcset="static/features/live-trading-dark.svg">
|
|
197
|
+
<source media="(prefers-color-scheme: light)" srcset="static/features/live-trading-light.svg">
|
|
198
|
+
<img src="static/features/live-trading-dark.svg" alt="Live trading & deployment — AWS Lambda and Azure Functions" style="max-width: 100%;">
|
|
199
|
+
</picture>
|
|
200
|
+
</p>
|
|
201
|
+
|
|
202
|
+
- **No code rewrites** — your `TradingStrategy` runs identically in backtest, paper trading and live
|
|
203
|
+
- **Cloud deploy** — `investing-algorithm-framework init --type aws_lambda` / `--type azure_function`
|
|
204
|
+
- **Multiple exchanges & venues** — CCXT integration out of the box (Binance, Bitvavo, Coinbase, Kraken …), or plug in your own `OrderExecutor` for any broker / FIX / custom venue
|
|
205
|
+
- **Portfolio persistence** — trades, orders and positions survive restarts
|
|
206
|
+
|
|
207
|
+
→ [Live trading & deployment docs](https://coding-kitties.github.io/investing-algorithm-framework/Getting%20Started/deployment)
|
|
208
|
+
|
|
209
|
+
</details>
|
|
210
|
+
|
|
211
|
+
<details open>
|
|
212
|
+
<summary>
|
|
213
|
+
<strong>Marketplace Integration</strong>
|
|
214
|
+
</summary> <br>
|
|
215
|
+
|
|
216
|
+
Publish your winning strategies to the [**Finterion**](https://www.finterion.com/) marketplace and monetize them. Investors subscribe to your bot, you earn a recurring revenue share — the framework handles the technical integration.
|
|
217
|
+
|
|
218
|
+
<p align="center">
|
|
219
|
+
<a href="https://www.finterion.com/" target="_blank">
|
|
220
|
+
<picture>
|
|
221
|
+
<source media="(prefers-color-scheme: dark)" srcset="static/features/marketplace-dark.svg">
|
|
222
|
+
<source media="(prefers-color-scheme: light)" srcset="static/features/marketplace-light.svg">
|
|
223
|
+
<img src="static/features/marketplace-dark.svg" alt="Marketplace integration — featuring Finterion" style="max-width: 100%;">
|
|
224
|
+
</picture>
|
|
225
|
+
</a>
|
|
226
|
+
</p>
|
|
227
|
+
|
|
228
|
+
→ [Finterion plugin](https://github.com/Finterion/finterion-investing-algorithm-framework-plugin)
|
|
229
|
+
|
|
230
|
+
</details>
|
|
231
|
+
|
|
232
|
+
<details>
|
|
233
|
+
<summary>
|
|
234
|
+
<strong>Usage and Installation</strong>
|
|
235
|
+
</summary> <br>
|
|
137
236
|
|
|
138
237
|
To get started, install the framework and scaffold a new project:
|
|
139
238
|
|
|
@@ -283,6 +382,14 @@ Create as many strategy variants as you want — different parameters, different
|
|
|
283
382
|
|
|
284
383
|
Every backtest produces a **single HTML file** you can open in any browser, share with teammates, or archive. No server, no dependencies, no Jupyter required.
|
|
285
384
|
|
|
385
|
+
<p align="center">
|
|
386
|
+
<picture>
|
|
387
|
+
<source media="(prefers-color-scheme: dark)" srcset="static/features/dashboard-dark.svg">
|
|
388
|
+
<source media="(prefers-color-scheme: light)" srcset="static/features/dashboard-light.svg">
|
|
389
|
+
<img src="static/features/dashboard-dark.svg" alt="Self-contained HTML backtest dashboard" style="max-width: 100%;">
|
|
390
|
+
</picture>
|
|
391
|
+
</p>
|
|
392
|
+
|
|
286
393
|
```python
|
|
287
394
|
from investing_algorithm_framework import BacktestReport
|
|
288
395
|
|
|
@@ -318,6 +425,7 @@ report.save("my_report.html")
|
|
|
318
425
|
| **[Backtest Report Dashboard](https://coding-kitties.github.io/investing-algorithm-framework/Getting%20Started/backtest-reports)** | Self-contained HTML report with ranking tables, equity curves, metric charts, heatmaps, and strategy comparison |
|
|
319
426
|
| **[Event-Driven Backtesting](https://coding-kitties.github.io/investing-algorithm-framework/Getting%20Started/backtesting)** | Realistic, order-by-order simulation |
|
|
320
427
|
| **[Vectorized Backtesting](https://coding-kitties.github.io/investing-algorithm-framework/Getting%20Started/vector-backtesting)** | Fast signal research and prototyping |
|
|
428
|
+
| **[Cross-Sectional Pipelines](https://coding-kitties.github.io/investing-algorithm-framework/Advanced%20Concepts/pipelines)** | Compute factors across many symbols at once — rank, filter and score universes per iteration |
|
|
321
429
|
| **50+ Metrics** | CAGR, Sharpe, Sortino, max drawdown, win rate, profit factor, recovery factor, volatility, and more |
|
|
322
430
|
| **[Live Trading](https://coding-kitties.github.io/investing-algorithm-framework/Getting%20Started/application-setup)** | Connect to exchanges via CCXT for real-time execution |
|
|
323
431
|
| **[Portfolio Management](https://coding-kitties.github.io/investing-algorithm-framework/Getting%20Started/portfolio-configuration)** | Position tracking, trade management, persistence |
|
|
@@ -330,14 +438,23 @@ report.save("my_report.html")
|
|
|
330
438
|
|
|
331
439
|
</details>
|
|
332
440
|
|
|
333
|
-
|
|
441
|
+
</details>
|
|
442
|
+
|
|
443
|
+
<details>
|
|
444
|
+
<summary>
|
|
445
|
+
<strong>Plugins</strong>
|
|
446
|
+
</summary> <br>
|
|
334
447
|
|
|
335
448
|
| Plugin | Description |
|
|
336
449
|
|--------|-------------|
|
|
337
450
|
| [PyIndicators](https://github.com/coding-kitties/PyIndicators) | Technical analysis indicators (EMA, RSI, MACD, etc.) |
|
|
338
451
|
| [Finterion Plugin](https://github.com/Finterion/finterion-investing-algorithm-framework-plugin) | Share and monetize strategies on Finterion's marketplace |
|
|
339
452
|
|
|
340
|
-
|
|
453
|
+
</details>
|
|
454
|
+
|
|
455
|
+
## Development & Contributing
|
|
456
|
+
|
|
457
|
+
We welcome contributions! Open an issue, pick one up, or send a PR.
|
|
341
458
|
|
|
342
459
|
```bash
|
|
343
460
|
git clone https://github.com/coding-kitties/investing-algorithm-framework.git
|
|
@@ -348,6 +465,10 @@ poetry install
|
|
|
348
465
|
python -m unittest discover -s tests
|
|
349
466
|
```
|
|
350
467
|
|
|
468
|
+
- [Open an issue](https://github.com/coding-kitties/investing-algorithm-framework/issues/new) for bugs or ideas
|
|
469
|
+
- Read the [Contributing Guide](https://coding-kitties.github.io/investing-algorithm-framework/Contributing%20Guide/contributing)
|
|
470
|
+
- PRs go against the `dev` branch
|
|
471
|
+
|
|
351
472
|
## Resources
|
|
352
473
|
|
|
353
474
|
- **[Documentation](https://coding-kitties.github.io/investing-algorithm-framework/)** — Guides and API reference
|
|
@@ -355,12 +476,6 @@ python -m unittest discover -s tests
|
|
|
355
476
|
- **[Discord](https://discord.gg/dQsRmGZP)** — Chat and support
|
|
356
477
|
- **[Reddit](https://www.reddit.com/r/InvestingBots/)** — Strategy discussion
|
|
357
478
|
|
|
358
|
-
## Contributing
|
|
359
|
-
|
|
360
|
-
- [Open an issue](https://github.com/coding-kitties/investing-algorithm-framework/issues/new) for bugs or ideas
|
|
361
|
-
- Read the [Contributing Guide](https://coding-kitties.github.io/investing-algorithm-framework/Contributing%20Guide/contributing)
|
|
362
|
-
- PRs go against the `dev` branch
|
|
363
|
-
|
|
364
479
|
## Risk Disclaimer
|
|
365
480
|
|
|
366
481
|
If you use this framework for real trading, **do not risk money you are afraid to lose.** Test thoroughly with backtesting first. Start small. We assume no responsibility for your investment results.
|
|
@@ -38,7 +38,11 @@
|
|
|
38
38
|
</h4>
|
|
39
39
|
|
|
40
40
|
<p align="center">
|
|
41
|
-
|
|
41
|
+
<picture>
|
|
42
|
+
<source media="(prefers-color-scheme: dark)" srcset="static/features/hero-dark.svg">
|
|
43
|
+
<source media="(prefers-color-scheme: light)" srcset="static/features/hero-light.svg">
|
|
44
|
+
<img src="static/features/hero-dark.svg" alt="Investing Algorithm Framework — features overview" style="max-width: 100%;">
|
|
45
|
+
</picture>
|
|
42
46
|
</p>
|
|
43
47
|
|
|
44
48
|
<p align="center">
|
|
@@ -48,17 +52,9 @@
|
|
|
48
52
|
</p>
|
|
49
53
|
|
|
50
54
|
<p align="center">
|
|
51
|
-
<sub
|
|
55
|
+
<sub>Proudly sponsored by</sub>
|
|
52
56
|
<br>
|
|
53
|
-
<a href="https://www.finterion.com/" target="_blank">
|
|
54
|
-
<picture>
|
|
55
|
-
<source media="(prefers-color-scheme: dark)" srcset="static/sponsors/finterion-dark.png">
|
|
56
|
-
<source media="(prefers-color-scheme: light)" srcset="static/sponsors/finterion-light.png">
|
|
57
|
-
<img src="static/sponsors/finterion-light.png" alt="Finterion" width="200">
|
|
58
|
-
</picture>
|
|
59
|
-
</a>
|
|
60
|
-
<br>
|
|
61
|
-
<sub>Marketplace for trading bots</sub>
|
|
57
|
+
<a href="https://www.finterion.com/" target="_blank"><picture><source media="(prefers-color-scheme: dark)" srcset="static/sponsors/finterion-dark.png"><source media="(prefers-color-scheme: light)" srcset="static/sponsors/finterion-light.png"><img src="static/sponsors/finterion-light.png" alt="Finterion" width="180"></picture></a>
|
|
62
58
|
</p>
|
|
63
59
|
|
|
64
60
|
## Introduction
|
|
@@ -75,6 +71,7 @@ This framework is built around the full loop: **create strategies → vector bac
|
|
|
75
71
|
</summary> <br>
|
|
76
72
|
|
|
77
73
|
- 📊 **30+ Metrics** — CAGR, Sharpe, Sortino, Calmar, VaR, CVaR, Max DD, Recovery & more
|
|
74
|
+
- 🧮 **[Cross-Sectional Pipelines](https://coding-kitties.github.io/investing-algorithm-framework/Advanced%20Concepts/pipelines)** — Rank, filter and score entire universes of symbols every iteration with a tidy factor table
|
|
78
75
|
- ⚡ **Vector Backtesting for Signal Analysis** — Quickly test your strategy logic on historical data to see how signals would have behaved before committing to full event-driven backtests
|
|
79
76
|
- 🏃 **Event-Driven Backtesting** — Once promising strategies are identified via vector backtests, run full event-driven backtests to simulate realistic execution and portfolio management
|
|
80
77
|
- 🔀 **Permutation Testing / Monte Carlo Simulations** — Assess the statistical robustness of your strategies by running them across randomized market scenarios to see how often your results could occur by chance
|
|
@@ -92,7 +89,109 @@ This framework is built around the full loop: **create strategies → vector bac
|
|
|
92
89
|
|
|
93
90
|
</details>
|
|
94
91
|
|
|
95
|
-
|
|
92
|
+
<details open>
|
|
93
|
+
<summary>
|
|
94
|
+
<strong>Backtesting Engines</strong>
|
|
95
|
+
</summary> <br>
|
|
96
|
+
|
|
97
|
+
### ⚡ Vector Backtesting — Test thousands of strategies, fast
|
|
98
|
+
|
|
99
|
+
Polars-powered vectorized signal evaluation. Compare thousands of strategies side by side, sweep parameter grids, run multi-window robustness checks, rank by key metrics and surface your top candidates in seconds — all before committing to a full event-driven simulation.
|
|
100
|
+
|
|
101
|
+
<p align="center">
|
|
102
|
+
<picture>
|
|
103
|
+
<source media="(prefers-color-scheme: dark)" srcset="static/features/vector-backtest-dark.svg">
|
|
104
|
+
<source media="(prefers-color-scheme: light)" srcset="static/features/vector-backtest-light.svg">
|
|
105
|
+
<img src="static/features/vector-backtest-dark.svg" alt="Vector backtest engine — run thousands of strategies in parallel" style="max-width: 100%;">
|
|
106
|
+
</picture>
|
|
107
|
+
</p>
|
|
108
|
+
|
|
109
|
+
### 🏃 Event-Driven Backtesting — Bar-by-bar realism
|
|
110
|
+
|
|
111
|
+
Once you've narrowed down promising strategies, run them through a full event-driven simulation. Pluggable slippage and fill models, partial fills, and a complete simulation blotter — using the **same code path** you'll deploy live.
|
|
112
|
+
|
|
113
|
+
<p align="center">
|
|
114
|
+
<picture>
|
|
115
|
+
<source media="(prefers-color-scheme: dark)" srcset="static/features/event-backtest-dark.svg">
|
|
116
|
+
<source media="(prefers-color-scheme: light)" srcset="static/features/event-backtest-light.svg">
|
|
117
|
+
<img src="static/features/event-backtest-dark.svg" alt="Event-driven backtest engine — bar-by-bar realism with order fills" style="max-width: 100%;">
|
|
118
|
+
</picture>
|
|
119
|
+
</p>
|
|
120
|
+
|
|
121
|
+
</details>
|
|
122
|
+
|
|
123
|
+
<details open>
|
|
124
|
+
<summary>
|
|
125
|
+
<strong>Backtest Analysis & Dashboard</strong>
|
|
126
|
+
</summary> <br>
|
|
127
|
+
|
|
128
|
+
Every backtest produces a **self-contained HTML dashboard** — open it in any browser, share with teammates, archive it. No server, no Jupyter, no dependencies. Compare strategies side-by-side, drill into trades, and capture your reasoning as you go.
|
|
129
|
+
|
|
130
|
+
<p align="center">
|
|
131
|
+
<picture>
|
|
132
|
+
<source media="(prefers-color-scheme: dark)" srcset="static/features/dashboard-dark.svg">
|
|
133
|
+
<source media="(prefers-color-scheme: light)" srcset="static/features/dashboard-light.svg">
|
|
134
|
+
<img src="static/features/dashboard-dark.svg" alt="Backtest analysis dashboard with MCP server and notes" style="max-width: 100%;">
|
|
135
|
+
</picture>
|
|
136
|
+
</p>
|
|
137
|
+
|
|
138
|
+
- **Self-contained HTML reports** — equity curves, drawdowns, trade lists, monthly returns, side-by-side strategy comparison
|
|
139
|
+
- **Built-in MCP server** — let Copilot, Claude, or any MCP-compatible agent query your backtests, rank strategies, and reason over trades through `investing-algorithm-framework mcp`
|
|
140
|
+
- **Notes keeping** — annotate every backtest with hypotheses, observations and conclusions; notes travel with the report so your research is never lost
|
|
141
|
+
|
|
142
|
+
→ [Backtest dashboard docs](https://coding-kitties.github.io/investing-algorithm-framework/Getting%20Started/backtesting) · [MCP server docs](https://coding-kitties.github.io/investing-algorithm-framework/Advanced%20Concepts/mcp-server)
|
|
143
|
+
|
|
144
|
+
</details>
|
|
145
|
+
|
|
146
|
+
<details open>
|
|
147
|
+
<summary>
|
|
148
|
+
<strong>Live Trading</strong>
|
|
149
|
+
</summary> <br>
|
|
150
|
+
|
|
151
|
+
Once a strategy proves itself in backtests, deploy it with the **same code path** you backtested. Connect to any exchange — use the built-in [CCXT](https://github.com/ccxt/ccxt) integration, or plug in your own [`OrderExecutor`](https://coding-kitties.github.io/investing-algorithm-framework/Advanced%20Concepts/custom-order-executors) for brokers, FIX gateways, or any custom venue. Run locally, in Docker, or deploy serverless to **AWS Lambda** or **Azure Functions**. Built-in portfolio tracking, position management, order persistence, and automatic state recovery.
|
|
152
|
+
|
|
153
|
+
<p align="center">
|
|
154
|
+
<picture>
|
|
155
|
+
<source media="(prefers-color-scheme: dark)" srcset="static/features/live-trading-dark.svg">
|
|
156
|
+
<source media="(prefers-color-scheme: light)" srcset="static/features/live-trading-light.svg">
|
|
157
|
+
<img src="static/features/live-trading-dark.svg" alt="Live trading & deployment — AWS Lambda and Azure Functions" style="max-width: 100%;">
|
|
158
|
+
</picture>
|
|
159
|
+
</p>
|
|
160
|
+
|
|
161
|
+
- **No code rewrites** — your `TradingStrategy` runs identically in backtest, paper trading and live
|
|
162
|
+
- **Cloud deploy** — `investing-algorithm-framework init --type aws_lambda` / `--type azure_function`
|
|
163
|
+
- **Multiple exchanges & venues** — CCXT integration out of the box (Binance, Bitvavo, Coinbase, Kraken …), or plug in your own `OrderExecutor` for any broker / FIX / custom venue
|
|
164
|
+
- **Portfolio persistence** — trades, orders and positions survive restarts
|
|
165
|
+
|
|
166
|
+
→ [Live trading & deployment docs](https://coding-kitties.github.io/investing-algorithm-framework/Getting%20Started/deployment)
|
|
167
|
+
|
|
168
|
+
</details>
|
|
169
|
+
|
|
170
|
+
<details open>
|
|
171
|
+
<summary>
|
|
172
|
+
<strong>Marketplace Integration</strong>
|
|
173
|
+
</summary> <br>
|
|
174
|
+
|
|
175
|
+
Publish your winning strategies to the [**Finterion**](https://www.finterion.com/) marketplace and monetize them. Investors subscribe to your bot, you earn a recurring revenue share — the framework handles the technical integration.
|
|
176
|
+
|
|
177
|
+
<p align="center">
|
|
178
|
+
<a href="https://www.finterion.com/" target="_blank">
|
|
179
|
+
<picture>
|
|
180
|
+
<source media="(prefers-color-scheme: dark)" srcset="static/features/marketplace-dark.svg">
|
|
181
|
+
<source media="(prefers-color-scheme: light)" srcset="static/features/marketplace-light.svg">
|
|
182
|
+
<img src="static/features/marketplace-dark.svg" alt="Marketplace integration — featuring Finterion" style="max-width: 100%;">
|
|
183
|
+
</picture>
|
|
184
|
+
</a>
|
|
185
|
+
</p>
|
|
186
|
+
|
|
187
|
+
→ [Finterion plugin](https://github.com/Finterion/finterion-investing-algorithm-framework-plugin)
|
|
188
|
+
|
|
189
|
+
</details>
|
|
190
|
+
|
|
191
|
+
<details>
|
|
192
|
+
<summary>
|
|
193
|
+
<strong>Usage and Installation</strong>
|
|
194
|
+
</summary> <br>
|
|
96
195
|
|
|
97
196
|
To get started, install the framework and scaffold a new project:
|
|
98
197
|
|
|
@@ -242,6 +341,14 @@ Create as many strategy variants as you want — different parameters, different
|
|
|
242
341
|
|
|
243
342
|
Every backtest produces a **single HTML file** you can open in any browser, share with teammates, or archive. No server, no dependencies, no Jupyter required.
|
|
244
343
|
|
|
344
|
+
<p align="center">
|
|
345
|
+
<picture>
|
|
346
|
+
<source media="(prefers-color-scheme: dark)" srcset="static/features/dashboard-dark.svg">
|
|
347
|
+
<source media="(prefers-color-scheme: light)" srcset="static/features/dashboard-light.svg">
|
|
348
|
+
<img src="static/features/dashboard-dark.svg" alt="Self-contained HTML backtest dashboard" style="max-width: 100%;">
|
|
349
|
+
</picture>
|
|
350
|
+
</p>
|
|
351
|
+
|
|
245
352
|
```python
|
|
246
353
|
from investing_algorithm_framework import BacktestReport
|
|
247
354
|
|
|
@@ -277,6 +384,7 @@ report.save("my_report.html")
|
|
|
277
384
|
| **[Backtest Report Dashboard](https://coding-kitties.github.io/investing-algorithm-framework/Getting%20Started/backtest-reports)** | Self-contained HTML report with ranking tables, equity curves, metric charts, heatmaps, and strategy comparison |
|
|
278
385
|
| **[Event-Driven Backtesting](https://coding-kitties.github.io/investing-algorithm-framework/Getting%20Started/backtesting)** | Realistic, order-by-order simulation |
|
|
279
386
|
| **[Vectorized Backtesting](https://coding-kitties.github.io/investing-algorithm-framework/Getting%20Started/vector-backtesting)** | Fast signal research and prototyping |
|
|
387
|
+
| **[Cross-Sectional Pipelines](https://coding-kitties.github.io/investing-algorithm-framework/Advanced%20Concepts/pipelines)** | Compute factors across many symbols at once — rank, filter and score universes per iteration |
|
|
280
388
|
| **50+ Metrics** | CAGR, Sharpe, Sortino, max drawdown, win rate, profit factor, recovery factor, volatility, and more |
|
|
281
389
|
| **[Live Trading](https://coding-kitties.github.io/investing-algorithm-framework/Getting%20Started/application-setup)** | Connect to exchanges via CCXT for real-time execution |
|
|
282
390
|
| **[Portfolio Management](https://coding-kitties.github.io/investing-algorithm-framework/Getting%20Started/portfolio-configuration)** | Position tracking, trade management, persistence |
|
|
@@ -289,14 +397,23 @@ report.save("my_report.html")
|
|
|
289
397
|
|
|
290
398
|
</details>
|
|
291
399
|
|
|
292
|
-
|
|
400
|
+
</details>
|
|
401
|
+
|
|
402
|
+
<details>
|
|
403
|
+
<summary>
|
|
404
|
+
<strong>Plugins</strong>
|
|
405
|
+
</summary> <br>
|
|
293
406
|
|
|
294
407
|
| Plugin | Description |
|
|
295
408
|
|--------|-------------|
|
|
296
409
|
| [PyIndicators](https://github.com/coding-kitties/PyIndicators) | Technical analysis indicators (EMA, RSI, MACD, etc.) |
|
|
297
410
|
| [Finterion Plugin](https://github.com/Finterion/finterion-investing-algorithm-framework-plugin) | Share and monetize strategies on Finterion's marketplace |
|
|
298
411
|
|
|
299
|
-
|
|
412
|
+
</details>
|
|
413
|
+
|
|
414
|
+
## Development & Contributing
|
|
415
|
+
|
|
416
|
+
We welcome contributions! Open an issue, pick one up, or send a PR.
|
|
300
417
|
|
|
301
418
|
```bash
|
|
302
419
|
git clone https://github.com/coding-kitties/investing-algorithm-framework.git
|
|
@@ -307,6 +424,10 @@ poetry install
|
|
|
307
424
|
python -m unittest discover -s tests
|
|
308
425
|
```
|
|
309
426
|
|
|
427
|
+
- [Open an issue](https://github.com/coding-kitties/investing-algorithm-framework/issues/new) for bugs or ideas
|
|
428
|
+
- Read the [Contributing Guide](https://coding-kitties.github.io/investing-algorithm-framework/Contributing%20Guide/contributing)
|
|
429
|
+
- PRs go against the `dev` branch
|
|
430
|
+
|
|
310
431
|
## Resources
|
|
311
432
|
|
|
312
433
|
- **[Documentation](https://coding-kitties.github.io/investing-algorithm-framework/)** — Guides and API reference
|
|
@@ -314,12 +435,6 @@ python -m unittest discover -s tests
|
|
|
314
435
|
- **[Discord](https://discord.gg/dQsRmGZP)** — Chat and support
|
|
315
436
|
- **[Reddit](https://www.reddit.com/r/InvestingBots/)** — Strategy discussion
|
|
316
437
|
|
|
317
|
-
## Contributing
|
|
318
|
-
|
|
319
|
-
- [Open an issue](https://github.com/coding-kitties/investing-algorithm-framework/issues/new) for bugs or ideas
|
|
320
|
-
- Read the [Contributing Guide](https://coding-kitties.github.io/investing-algorithm-framework/Contributing%20Guide/contributing)
|
|
321
|
-
- PRs go against the `dev` branch
|
|
322
|
-
|
|
323
438
|
## Risk Disclaimer
|
|
324
439
|
|
|
325
440
|
If you use this framework for real trading, **do not risk money you are afraid to lose.** Test thoroughly with backtesting first. Start small. We assume no responsibility for your investment results.
|
|
@@ -4,7 +4,7 @@ import os
|
|
|
4
4
|
import threading
|
|
5
5
|
from datetime import datetime, timezone, timedelta
|
|
6
6
|
from pathlib import Path
|
|
7
|
-
from typing import List, Optional, Any, Dict, Tuple, Callable, Union
|
|
7
|
+
from typing import List, Literal, Optional, Any, Dict, Tuple, Callable, Union
|
|
8
8
|
|
|
9
9
|
from flask import Flask
|
|
10
10
|
|
|
@@ -985,6 +985,8 @@ class App:
|
|
|
985
985
|
] = None,
|
|
986
986
|
backtest_storage_directory: Optional[Union[str, Path]] = None,
|
|
987
987
|
use_checkpoints: bool = False,
|
|
988
|
+
force_rerun: Union[bool, Literal["stale"]] = False,
|
|
989
|
+
on_checkpoint_match: Literal["skip", "rerun", "warn"] = "skip",
|
|
988
990
|
batch_size: int = 50,
|
|
989
991
|
checkpoint_batch_size: int = 25,
|
|
990
992
|
n_workers: Optional[int] = None,
|
|
@@ -1087,7 +1089,24 @@ class App:
|
|
|
1087
1089
|
instead of running a new backtest. This is useful for
|
|
1088
1090
|
long-running backtests that might take a while to complete.
|
|
1089
1091
|
When enabled, uses the optimized version with batching and
|
|
1090
|
-
optional parallel processing.
|
|
1092
|
+
optional parallel processing. Checkpoints are content-aware:
|
|
1093
|
+
each entry stores a manifest hash that fingerprints the
|
|
1094
|
+
strategy code, parameters, data sources, and date range.
|
|
1095
|
+
Strategies whose hash differs from the stored hash are
|
|
1096
|
+
rerun automatically.
|
|
1097
|
+
force_rerun (Union[bool, Literal["stale"]]): Override checkpoint
|
|
1098
|
+
skipping behaviour.
|
|
1099
|
+
|
|
1100
|
+
- False (default): Skip strategies with a matching checkpoint.
|
|
1101
|
+
- "stale": Rerun only strategies whose stored checkpoint hash
|
|
1102
|
+
differs from the current manifest hash.
|
|
1103
|
+
- True: Ignore checkpoints entirely and rerun all strategies.
|
|
1104
|
+
on_checkpoint_match (Literal["skip", "rerun", "warn"]): Behaviour
|
|
1105
|
+
when a strategy's checkpoint matches.
|
|
1106
|
+
|
|
1107
|
+
- "skip" (default): Silently skip the strategy.
|
|
1108
|
+
- "warn": Skip but emit a single log line per match batch.
|
|
1109
|
+
- "rerun": Rerun the strategy anyway.
|
|
1091
1110
|
batch_size (int): Number of strategies to process in each batch
|
|
1092
1111
|
before memory cleanup. Only used when use_checkpoints=True.
|
|
1093
1112
|
Default: 100. Higher values use more memory but may be faster.
|
|
@@ -1204,6 +1223,8 @@ class App:
|
|
|
1204
1223
|
checkpoint_batch_size=checkpoint_batch_size,
|
|
1205
1224
|
n_workers=n_workers,
|
|
1206
1225
|
use_checkpoints=use_checkpoints,
|
|
1226
|
+
force_rerun=force_rerun,
|
|
1227
|
+
on_checkpoint_match=on_checkpoint_match,
|
|
1207
1228
|
dynamic_position_sizing=dynamic_position_sizing,
|
|
1208
1229
|
fill_missing_data=fill_missing_data,
|
|
1209
1230
|
iterative_summary_update=iterative_summary_update,
|
|
@@ -1381,6 +1402,8 @@ class App:
|
|
|
1381
1402
|
metadata: Optional[Dict[str, str]] = None,
|
|
1382
1403
|
backtest_storage_directory: Optional[Union[str, Path]] = None,
|
|
1383
1404
|
use_checkpoints: bool = False,
|
|
1405
|
+
force_rerun: Union[bool, Literal["stale"]] = False,
|
|
1406
|
+
on_checkpoint_match: Literal["skip", "rerun", "warn"] = "skip",
|
|
1384
1407
|
show_progress: bool = False,
|
|
1385
1408
|
continue_on_error: bool = False,
|
|
1386
1409
|
window_filter_function: Optional[Callable] = None,
|
|
@@ -1420,7 +1443,16 @@ class App:
|
|
|
1420
1443
|
backtest_storage_directory (Union[str, Path]): Directory to save
|
|
1421
1444
|
backtests to.
|
|
1422
1445
|
use_checkpoints (bool): Whether to use checkpointing to resume
|
|
1423
|
-
interrupted backtests.
|
|
1446
|
+
interrupted backtests. Checkpoints are content-aware:
|
|
1447
|
+
strategies whose code or parameters have changed since the
|
|
1448
|
+
last run are detected and rerun automatically.
|
|
1449
|
+
force_rerun (Union[bool, Literal["stale"]]): Override checkpoint
|
|
1450
|
+
skipping behaviour. ``False`` (default) skips matched
|
|
1451
|
+
checkpoints, ``"stale"`` reruns only mismatched ones, and
|
|
1452
|
+
``True`` reruns everything.
|
|
1453
|
+
on_checkpoint_match (Literal["skip", "rerun", "warn"]): Behaviour
|
|
1454
|
+
on a matching checkpoint. ``"skip"`` (default) silently
|
|
1455
|
+
skips, ``"warn"`` skips and logs, ``"rerun"`` reruns anyway.
|
|
1424
1456
|
show_progress (bool): Whether to show progress bars.
|
|
1425
1457
|
continue_on_error (bool): Whether to continue on errors.
|
|
1426
1458
|
window_filter_function: Filter function applied after each
|
|
@@ -1533,6 +1565,8 @@ class App:
|
|
|
1533
1565
|
final_filter_function=final_filter_function,
|
|
1534
1566
|
backtest_storage_directory=backtest_storage_directory,
|
|
1535
1567
|
use_checkpoints=use_checkpoints,
|
|
1568
|
+
force_rerun=force_rerun,
|
|
1569
|
+
on_checkpoint_match=on_checkpoint_match,
|
|
1536
1570
|
batch_size=batch_size,
|
|
1537
1571
|
checkpoint_batch_size=checkpoint_batch_size,
|
|
1538
1572
|
fill_missing_data=fill_missing_data,
|
|
@@ -418,6 +418,23 @@ class Backtest:
|
|
|
418
418
|
os.makedirs(destination_run_path, exist_ok=True)
|
|
419
419
|
br.save(destination_run_path)
|
|
420
420
|
|
|
421
|
+
# Always rebuild the summary from the current set of backtest runs
|
|
422
|
+
# before writing it to disk. This guarantees that summary.json is
|
|
423
|
+
# self-consistent with the per-run metrics.json files (e.g.
|
|
424
|
+
# number_of_windows == number of runs, total_net_gain == sum of
|
|
425
|
+
# per-run total_net_gain, etc.) regardless of how the in-memory
|
|
426
|
+
# Backtest was constructed (single backtest, walk-forward,
|
|
427
|
+
# merge(), …). See issue #511.
|
|
428
|
+
if self.backtest_runs:
|
|
429
|
+
per_run_metrics = [
|
|
430
|
+
br.backtest_metrics for br in self.backtest_runs
|
|
431
|
+
if br.backtest_metrics is not None
|
|
432
|
+
]
|
|
433
|
+
if per_run_metrics:
|
|
434
|
+
self.backtest_summary = generate_backtest_summary_metrics(
|
|
435
|
+
per_run_metrics
|
|
436
|
+
)
|
|
437
|
+
|
|
421
438
|
# Save combined backtest metrics if available
|
|
422
439
|
if self.backtest_summary:
|
|
423
440
|
summary_file = os.path.join(
|
|
@@ -517,15 +534,22 @@ class Backtest:
|
|
|
517
534
|
Backtest: The merged Backtest instance.
|
|
518
535
|
"""
|
|
519
536
|
|
|
520
|
-
merged = Backtest()
|
|
537
|
+
merged = Backtest(algorithm_id=self.algorithm_id)
|
|
521
538
|
merged.backtest_runs = self.backtest_runs + other.backtest_runs
|
|
522
539
|
|
|
523
|
-
summary
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
540
|
+
# Rebuild the summary from the full set of merged backtest runs.
|
|
541
|
+
# `BacktestSummaryMetrics` is a plain dataclass and does not expose
|
|
542
|
+
# an `add()` method, so the previous incremental approach raised
|
|
543
|
+
# AttributeError and silently produced a stale / single-window
|
|
544
|
+
# summary. See issue #511.
|
|
545
|
+
merged_metrics = merged.get_all_backtest_metrics()
|
|
546
|
+
if merged_metrics:
|
|
547
|
+
merged.backtest_summary = generate_backtest_summary_metrics(
|
|
548
|
+
merged_metrics
|
|
549
|
+
)
|
|
550
|
+
else:
|
|
551
|
+
merged.backtest_summary = BacktestSummaryMetrics()
|
|
527
552
|
|
|
528
|
-
merged.backtest_summary = summary
|
|
529
553
|
merged.backtest_permutation_tests = \
|
|
530
554
|
self.backtest_permutation_tests + other.backtest_permutation_tests
|
|
531
555
|
|
|
@@ -20,6 +20,21 @@ class BacktestMetrics:
|
|
|
20
20
|
total return, annualized return, volatility, Sharpe ratio,
|
|
21
21
|
and maximum drawdown.
|
|
22
22
|
|
|
23
|
+
.. note:: Field semantics & known duplicates (issue #511)
|
|
24
|
+
|
|
25
|
+
- ``total_loss`` is the **gross loss magnitude** (a non-negative
|
|
26
|
+
number equal to ``sum(abs(net_gain))`` over losing trades).
|
|
27
|
+
``total_loss_percentage`` is ``total_loss /
|
|
28
|
+
initial_unallocated`` (decimal, non-negative). These fields
|
|
29
|
+
no longer mirror ``total_net_gain`` / ``total_net_gain_pct``;
|
|
30
|
+
see B1 in issue #511.
|
|
31
|
+
|
|
32
|
+
- ``total_growth`` / ``total_growth_percentage`` are
|
|
33
|
+
numerically equivalent to ``total_net_gain`` /
|
|
34
|
+
``total_net_gain_percentage`` for the standard
|
|
35
|
+
mark-to-market portfolio used in backtests. They are kept as
|
|
36
|
+
legacy aliases. See B3 in issue #511.
|
|
37
|
+
|
|
23
38
|
Attributes:
|
|
24
39
|
backtest_date_range_name (str): The name of the date range
|
|
25
40
|
used for the backtest.
|
|
@@ -13,6 +13,30 @@ class BacktestSummaryMetrics:
|
|
|
13
13
|
Represents the summarized results of a backtest,
|
|
14
14
|
focusing on key headline performance and risk metrics.
|
|
15
15
|
|
|
16
|
+
.. note:: Field semantics & known duplicates (issue #511)
|
|
17
|
+
|
|
18
|
+
- ``total_loss`` / ``total_loss_percentage`` are gross-loss
|
|
19
|
+
based: ``total_loss`` is ``sum(per-run gross_loss)`` (a
|
|
20
|
+
non-negative magnitude in account currency) and
|
|
21
|
+
``total_loss_percentage`` is ``total_loss /
|
|
22
|
+
sum(initial_unallocated)`` (decimal). They no longer mix
|
|
23
|
+
with net-return semantics. See B1/B2 in issue #511.
|
|
24
|
+
|
|
25
|
+
- ``total_growth`` / ``total_growth_percentage`` are
|
|
26
|
+
numerically equivalent to ``total_net_gain`` /
|
|
27
|
+
``total_net_gain_percentage`` for closed-position backtests
|
|
28
|
+
because both are derived from the same start/end portfolio
|
|
29
|
+
values. They are kept for backwards compatibility but should
|
|
30
|
+
be considered legacy aliases. See B3 in issue #511.
|
|
31
|
+
|
|
32
|
+
- ``average_net_gain``, ``average_loss``, ``average_growth``
|
|
33
|
+
(and their ``*_percentage`` counterparts) are time-weighted
|
|
34
|
+
means **across windows**. For a single-window backtest they
|
|
35
|
+
collapse to the corresponding ``total_*`` value by
|
|
36
|
+
definition (weighted mean of one element equals that
|
|
37
|
+
element). See B4 in issue #511. For per-trade averages use
|
|
38
|
+
``average_trade_*`` instead.
|
|
39
|
+
|
|
16
40
|
Attributes:
|
|
17
41
|
total_net_gain (float): Total net gain from the backtest.
|
|
18
42
|
total_net_gain_percentage (float): Total net gain percentage
|