investing-algorithm-framework 8.6.0__tar.gz → 8.7.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-8.6.0 → investing_algorithm_framework-8.7.0}/PKG-INFO +140 -21
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/README.md +136 -20
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/__init__.py +20 -1
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/app/app.py +37 -3
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/app/eventloop.py +262 -1
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/app/reporting/backtest_report.py +53 -7
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/app/strategy.py +59 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/cli/cli.py +70 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/__init__.py +42 -1
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/backtesting/__init__.py +19 -2
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/backtesting/backtest.py +155 -9
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/backtesting/backtest_metrics.py +62 -19
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/backtesting/backtest_permutation_test.py +53 -2
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/backtesting/backtest_run.py +124 -103
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/backtesting/backtest_summary_metrics.py +32 -1
- investing_algorithm_framework-8.7.0/investing_algorithm_framework/domain/backtesting/backtest_utils.py +713 -0
- investing_algorithm_framework-8.7.0/investing_algorithm_framework/domain/backtesting/bundle.py +351 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/backtesting/combine_backtests.py +35 -16
- investing_algorithm_framework-8.7.0/investing_algorithm_framework/domain/datetime_parsing.py +29 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/models/data/data_source.py +7 -3
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/models/order/order.py +5 -2
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/models/portfolio/portfolio_snapshot.py +5 -4
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/models/trade/trade.py +7 -4
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/models/trade/trade_stop_loss.py +9 -7
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/models/trade/trade_take_profit.py +8 -5
- investing_algorithm_framework-8.7.0/investing_algorithm_framework/domain/pipeline/__init__.py +40 -0
- investing_algorithm_framework-8.7.0/investing_algorithm_framework/domain/pipeline/custom_factor.py +34 -0
- investing_algorithm_framework-8.7.0/investing_algorithm_framework/domain/pipeline/factor.py +538 -0
- investing_algorithm_framework-8.7.0/investing_algorithm_framework/domain/pipeline/factors/__init__.py +26 -0
- investing_algorithm_framework-8.7.0/investing_algorithm_framework/domain/pipeline/factors/builtin.py +496 -0
- investing_algorithm_framework-8.7.0/investing_algorithm_framework/domain/pipeline/filter.py +98 -0
- investing_algorithm_framework-8.7.0/investing_algorithm_framework/domain/pipeline/pipeline.py +142 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/infrastructure/services/backtesting/backtest_service.py +337 -88
- investing_algorithm_framework-8.7.0/investing_algorithm_framework/infrastructure/services/backtesting/checkpoint_manifest.py +240 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/infrastructure/services/backtesting/event_backtest_service.py +23 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/infrastructure/services/backtesting/vector_backtest_service.py +80 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/services/metrics/generate.py +85 -24
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/services/metrics/returns.py +13 -4
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/services/metrics/sharpe_ratio.py +6 -2
- investing_algorithm_framework-8.7.0/investing_algorithm_framework/services/pipeline/__init__.py +5 -0
- investing_algorithm_framework-8.7.0/investing_algorithm_framework/services/pipeline/pipeline_engine.py +174 -0
- investing_algorithm_framework-8.7.0/investing_algorithm_framework/services/pipeline/vector_pipeline_engine.py +219 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/pyproject.toml +4 -1
- investing_algorithm_framework-8.6.0/investing_algorithm_framework/domain/backtesting/backtest_utils.py +0 -297
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/LICENSE +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/analysis/__init__.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/analysis/backtest_data_ranges.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/analysis/markdown.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/analysis/ranking.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/app/__init__.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/app/algorithm/__init__.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/app/algorithm/algorithm.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/app/algorithm/algorithm_factory.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/app/app_hook.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/app/context.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/app/reporting/__init__.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/app/reporting/ascii.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/app/reporting/backtest_report_old.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/app/reporting/charts/__init__.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/app/reporting/charts/entry_exist_signals.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/app/reporting/charts/equity_curve.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/app/reporting/charts/equity_curve_drawdown.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/app/reporting/charts/line_chart.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/app/reporting/charts/monthly_returns_heatmap.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/app/reporting/charts/ohlcv_data_completeness.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/app/reporting/charts/rolling_sharp_ratio.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/app/reporting/charts/yearly_returns_barchart.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/app/reporting/generate.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/app/reporting/tables/__init__.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/app/reporting/tables/key_metrics_table.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/app/reporting/tables/stop_loss_table.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/app/reporting/tables/time_metrics_table.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/app/reporting/tables/trade_metrics_table.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/app/reporting/tables/trades_table.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/app/reporting/tables/utils.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/app/reporting/templates/dashboard.css +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/app/reporting/templates/dashboard.js +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/app/reporting/templates/dashboard_template.html.j2 +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/app/reporting/templates/report_template.html.j2 +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/app/stateless/__init__.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/app/stateless/action_handlers/__init__.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/app/stateless/action_handlers/action_handler_strategy.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/app/stateless/action_handlers/check_online_handler.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/app/stateless/action_handlers/run_strategy_handler.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/app/stateless/exception_handler.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/app/task.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/app/web/__init__.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/app/web/controllers/__init__.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/app/web/controllers/orders.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/app/web/controllers/portfolio.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/app/web/controllers/positions.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/app/web/create_app.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/app/web/error_handler.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/app/web/responses.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/app/web/run_strategies.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/app/web/schemas/__init__.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/app/web/schemas/order.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/app/web/schemas/portfolio.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/app/web/schemas/position.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/app/web/setup_cors.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/cli/__init__.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/cli/deploy_to_aws_lambda.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/cli/deploy_to_azure_function.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/cli/initialize_app.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/cli/mcp_server.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/cli/templates/.gitignore.template +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/cli/templates/app.py.template +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/cli/templates/app_aws_lambda_function.py.template +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/cli/templates/app_azure_function.py.template +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/cli/templates/app_web.py.template +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/cli/templates/aws_lambda_dockerfile.template +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/cli/templates/aws_lambda_dockerignore.template +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/cli/templates/aws_lambda_readme.md.template +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/cli/templates/aws_lambda_requirements.txt.template +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/cli/templates/azure_function_function_app.py.template +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/cli/templates/azure_function_host.json.template +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/cli/templates/azure_function_local.settings.json.template +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/cli/templates/azure_function_requirements.txt.template +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/cli/templates/data_providers.py.template +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/cli/templates/env.example.template +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/cli/templates/env_azure_function.example.template +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/cli/templates/market_data_providers.py.template +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/cli/templates/readme.md.template +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/cli/templates/requirements.txt.template +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/cli/templates/run_backtest.py.template +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/cli/templates/strategy.py.template +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/cli/validate_backtest_checkpoints.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/create_app.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/dependency_container.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/algorithm_id.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/backtesting/backtest_date_range.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/backtesting/backtest_evaluation_focuss.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/backtesting/consistency.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/backtesting/templates/backtest.html +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/backtesting/templates/finterion-dark.png +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/backtesting/templates/finterion-light.png +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/blotter.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/config.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/constants.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/data_provider.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/data_structures.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/decimal_parsing.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/exceptions.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/fx.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/models/__init__.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/models/app_mode.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/models/base_model.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/models/data/__init__.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/models/data/data_type.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/models/event.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/models/market/__init__.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/models/market/market_credential.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/models/order/__init__.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/models/order/order_side.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/models/order/order_status.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/models/order/order_type.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/models/portfolio/__init__.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/models/portfolio/portfolio.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/models/portfolio/portfolio_configuration.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/models/position/__init__.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/models/position/position.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/models/position/position_size.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/models/position/position_snapshot.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/models/risk_rules/__init__.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/models/risk_rules/scaling_rule.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/models/risk_rules/stop_loss_rule.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/models/risk_rules/take_profit_rule.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/models/risk_rules/trading_cost.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/models/snapshot_interval.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/models/strategy_profile.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/models/time_frame.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/models/time_interval.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/models/time_unit.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/models/tracing/__init__.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/models/tracing/trace.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/models/trade/__init__.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/models/trade/trade_status.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/order_executor.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/portfolio_provider.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/services/__init__.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/services/market_credential_service.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/services/portfolios/__init__.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/services/portfolios/portfolio_sync_service.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/services/rounding_service.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/services/state_handler.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/stateless_actions.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/strategy.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/utils/__init__.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/utils/csv.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/utils/custom_tqdm.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/utils/dates.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/utils/jupyter_notebook_detection.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/utils/polars.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/utils/random.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/utils/signatures.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/utils/stoppable_thread.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/utils/synchronized.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/download_data.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/infrastructure/__init__.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/infrastructure/data_providers/__init__.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/infrastructure/data_providers/alpha_vantage.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/infrastructure/data_providers/base_url.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/infrastructure/data_providers/ccxt.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/infrastructure/data_providers/csv.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/infrastructure/data_providers/csv_url.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/infrastructure/data_providers/json_url.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/infrastructure/data_providers/ohlcv_base.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/infrastructure/data_providers/pandas.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/infrastructure/data_providers/parquet_url.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/infrastructure/data_providers/polygon.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/infrastructure/data_providers/yahoo.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/infrastructure/database/__init__.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/infrastructure/database/sql_alchemy.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/infrastructure/models/__init__.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/infrastructure/models/decimal_parser.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/infrastructure/models/model_extension.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/infrastructure/models/order/__init__.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/infrastructure/models/order/order.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/infrastructure/models/order/trade_allocation.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/infrastructure/models/order_trade_association.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/infrastructure/models/portfolio/__init__.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/infrastructure/models/portfolio/portfolio_snapshot.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/infrastructure/models/portfolio/sql_portfolio.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/infrastructure/models/position/__init__.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/infrastructure/models/position/position.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/infrastructure/models/position/position_snapshot.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/infrastructure/models/trades/__init__.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/infrastructure/models/trades/trade.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/infrastructure/models/trades/trade_stop_loss.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/infrastructure/models/trades/trade_take_profit.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/infrastructure/order_executors/__init__.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/infrastructure/order_executors/ccxt_order_executor.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/infrastructure/portfolio_providers/__init__.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/infrastructure/portfolio_providers/ccxt_portfolio_provider.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/infrastructure/repositories/__init__.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/infrastructure/repositories/order_repository.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/infrastructure/repositories/portfolio_repository.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/infrastructure/repositories/portfolio_snapshot_repository.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/infrastructure/repositories/position_repository.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/infrastructure/repositories/position_snapshot_repository.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/infrastructure/repositories/repository.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/infrastructure/repositories/trade_allocation_repository.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/infrastructure/repositories/trade_repository.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/infrastructure/repositories/trade_stop_loss_repository.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/infrastructure/repositories/trade_take_profit_repository.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/infrastructure/services/__init__.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/infrastructure/services/aws/__init__.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/infrastructure/services/aws/state_handler.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/infrastructure/services/azure/__init__.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/infrastructure/services/azure/state_handler.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/infrastructure/services/backtesting/__init__.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/notebook/__init__.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/notebook/magic.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/services/__init__.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/services/configuration_service.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/services/data_providers/__init__.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/services/data_providers/data.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/services/data_providers/data_provider_service.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/services/market_credential_service.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/services/metrics/__init__.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/services/metrics/alpha.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/services/metrics/beta.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/services/metrics/cagr.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/services/metrics/calmar_ratio.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/services/metrics/consistency.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/services/metrics/drawdown.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/services/metrics/equity_curve.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/services/metrics/exposure.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/services/metrics/mean_daily_return.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/services/metrics/price_efficiency.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/services/metrics/profit_factor.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/services/metrics/recovery.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/services/metrics/risk_free_rate.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/services/metrics/sortino_ratio.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/services/metrics/standard_deviation.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/services/metrics/trades.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/services/metrics/treynor_ratio.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/services/metrics/ulcer.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/services/metrics/value_at_risk.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/services/metrics/volatility.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/services/metrics/win_rate.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/services/order_service/__init__.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/services/order_service/order_backtest_service.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/services/order_service/order_executor_lookup.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/services/order_service/order_service.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/services/portfolios/__init__.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/services/portfolios/backtest_portfolio_service.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/services/portfolios/portfolio_configuration_service.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/services/portfolios/portfolio_provider_lookup.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/services/portfolios/portfolio_service.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/services/portfolios/portfolio_snapshot_service.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/services/portfolios/portfolio_sync_service.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/services/positions/__init__.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/services/positions/position_service.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/services/positions/position_snapshot_service.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/services/repository_service.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/services/trade_order_evaluator/__init__.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/services/trade_order_evaluator/backtest_trade_oder_evaluator.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/services/trade_order_evaluator/default_trade_order_evaluator.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/services/trade_order_evaluator/trade_order_evaluator.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/services/trade_service/__init__.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/services/trade_service/trade_service.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/services/trade_service/trade_stop_loss_service.py +0 -0
- {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/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.
|
|
3
|
+
Version: 8.7.0
|
|
4
4
|
Summary: A framework for creating trading bots
|
|
5
5
|
Author: MDUYN
|
|
6
6
|
Requires-Python: >=3.10,<4.0
|
|
@@ -27,9 +27,11 @@ Requires-Dist: ccxt (>=4.2.48)
|
|
|
27
27
|
Requires-Dist: dependency-injector (>=4.40.0)
|
|
28
28
|
Requires-Dist: jupyter (>=1.0.0)
|
|
29
29
|
Requires-Dist: marshmallow (>=3.5.0)
|
|
30
|
+
Requires-Dist: msgpack (>=1.0.0)
|
|
30
31
|
Requires-Dist: plotly (>=6.1.2,<7.0.0)
|
|
31
32
|
Requires-Dist: polars[numpy,pandas] (>=0.20.10)
|
|
32
33
|
Requires-Dist: polygon-api-client (>=1.14.0,<2.0.0) ; extra == "polygon" or extra == "all"
|
|
34
|
+
Requires-Dist: pyarrow (>=14.0.0)
|
|
33
35
|
Requires-Dist: python-dateutil (>=2.8.2)
|
|
34
36
|
Requires-Dist: python-dotenv (>=1.0.1,<2.0.0)
|
|
35
37
|
Requires-Dist: schedule (>=1.1.0)
|
|
@@ -37,6 +39,7 @@ Requires-Dist: tabulate (>=0.9.0)
|
|
|
37
39
|
Requires-Dist: tqdm (>=4.66.1)
|
|
38
40
|
Requires-Dist: wrapt (>=1.16.0)
|
|
39
41
|
Requires-Dist: yfinance (>=0.2.61,<0.3.0) ; extra == "yahoo" or extra == "all"
|
|
42
|
+
Requires-Dist: zstandard (>=0.20.0)
|
|
40
43
|
Description-Content-Type: text/markdown
|
|
41
44
|
|
|
42
45
|
<h1 align="center">
|
|
@@ -79,7 +82,11 @@ Description-Content-Type: text/markdown
|
|
|
79
82
|
</h4>
|
|
80
83
|
|
|
81
84
|
<p align="center">
|
|
82
|
-
|
|
85
|
+
<picture>
|
|
86
|
+
<source media="(prefers-color-scheme: dark)" srcset="static/features/hero-dark.svg">
|
|
87
|
+
<source media="(prefers-color-scheme: light)" srcset="static/features/hero-light.svg">
|
|
88
|
+
<img src="static/features/hero-dark.svg" alt="Investing Algorithm Framework — features overview" style="max-width: 100%;">
|
|
89
|
+
</picture>
|
|
83
90
|
</p>
|
|
84
91
|
|
|
85
92
|
<p align="center">
|
|
@@ -89,17 +96,9 @@ Description-Content-Type: text/markdown
|
|
|
89
96
|
</p>
|
|
90
97
|
|
|
91
98
|
<p align="center">
|
|
92
|
-
<sub
|
|
99
|
+
<sub>Proudly sponsored by</sub>
|
|
93
100
|
<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>
|
|
101
|
+
<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
102
|
</p>
|
|
104
103
|
|
|
105
104
|
## Introduction
|
|
@@ -116,6 +115,7 @@ This framework is built around the full loop: **create strategies → vector bac
|
|
|
116
115
|
</summary> <br>
|
|
117
116
|
|
|
118
117
|
- 📊 **30+ Metrics** — CAGR, Sharpe, Sortino, Calmar, VaR, CVaR, Max DD, Recovery & more
|
|
118
|
+
- 🧮 **[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
119
|
- ⚡ **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
120
|
- 🏃 **Event-Driven Backtesting** — Once promising strategies are identified via vector backtests, run full event-driven backtests to simulate realistic execution and portfolio management
|
|
121
121
|
- 🔀 **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
|
|
@@ -127,13 +127,116 @@ This framework is built around the full loop: **create strategies → vector bac
|
|
|
127
127
|
- 🎯 **Return Scenario Projections** — Good, average, bad & very bad year projections from backtest data
|
|
128
128
|
- 📉 **Benchmark Comparison** — Beat-rate analysis vs Buy & Hold, DCA, risk-free & custom benchmarks
|
|
129
129
|
- 📄 **One-Click HTML Report** — Self-contained file, no server, dark & light theme, shareable
|
|
130
|
+
- 📦 **Custom `.iafbt` Backtest Bundle Format** — An explicit, versioned, compressed, language-portable container (zstd + msgpack with magic-byte header) plus a separate parquet index for fast filtering without loading. ~21× smaller and ~27× fewer files than standard filebased directory layouts, with parallel I/O for fast load/save of large amounts of backtests.
|
|
130
131
|
- 🌐 **Load External Data** — Fetch CSV, JSON, or Parquet from any URL with caching and auto-refresh
|
|
131
132
|
- � **[Record Custom Variables](https://coding-kitties.github.io/investing-algorithm-framework/Advanced%20Concepts/recording-variables)** — Track any indicator or metric during backtests with `context.record()`
|
|
132
133
|
- �🚀 **Build → Backtest → Deploy** — Local dev, cloud deploy (AWS / Azure), or monetize on Finterion
|
|
133
134
|
|
|
134
135
|
</details>
|
|
135
136
|
|
|
136
|
-
|
|
137
|
+
<details open>
|
|
138
|
+
<summary>
|
|
139
|
+
<strong>Backtesting Engines</strong>
|
|
140
|
+
</summary> <br>
|
|
141
|
+
|
|
142
|
+
### ⚡ Vector Backtesting — Test thousands of strategies, fast
|
|
143
|
+
|
|
144
|
+
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.
|
|
145
|
+
|
|
146
|
+
<p align="center">
|
|
147
|
+
<picture>
|
|
148
|
+
<source media="(prefers-color-scheme: dark)" srcset="static/features/vector-backtest-dark.svg">
|
|
149
|
+
<source media="(prefers-color-scheme: light)" srcset="static/features/vector-backtest-light.svg">
|
|
150
|
+
<img src="static/features/vector-backtest-dark.svg" alt="Vector backtest engine — run thousands of strategies in parallel" style="max-width: 100%;">
|
|
151
|
+
</picture>
|
|
152
|
+
</p>
|
|
153
|
+
|
|
154
|
+
### 🏃 Event-Driven Backtesting — Bar-by-bar realism
|
|
155
|
+
|
|
156
|
+
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.
|
|
157
|
+
|
|
158
|
+
<p align="center">
|
|
159
|
+
<picture>
|
|
160
|
+
<source media="(prefers-color-scheme: dark)" srcset="static/features/event-backtest-dark.svg">
|
|
161
|
+
<source media="(prefers-color-scheme: light)" srcset="static/features/event-backtest-light.svg">
|
|
162
|
+
<img src="static/features/event-backtest-dark.svg" alt="Event-driven backtest engine — bar-by-bar realism with order fills" style="max-width: 100%;">
|
|
163
|
+
</picture>
|
|
164
|
+
</p>
|
|
165
|
+
|
|
166
|
+
</details>
|
|
167
|
+
|
|
168
|
+
<details open>
|
|
169
|
+
<summary>
|
|
170
|
+
<strong>Backtest Analysis & Dashboard</strong>
|
|
171
|
+
</summary> <br>
|
|
172
|
+
|
|
173
|
+
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.
|
|
174
|
+
|
|
175
|
+
<p align="center">
|
|
176
|
+
<picture>
|
|
177
|
+
<source media="(prefers-color-scheme: dark)" srcset="static/features/dashboard-dark.svg">
|
|
178
|
+
<source media="(prefers-color-scheme: light)" srcset="static/features/dashboard-light.svg">
|
|
179
|
+
<img src="static/features/dashboard-dark.svg" alt="Backtest analysis dashboard with MCP server and notes" style="max-width: 100%;">
|
|
180
|
+
</picture>
|
|
181
|
+
</p>
|
|
182
|
+
|
|
183
|
+
- **Self-contained HTML reports** — equity curves, drawdowns, trade lists, monthly returns, side-by-side strategy comparison
|
|
184
|
+
- **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`
|
|
185
|
+
- **Notes keeping** — annotate every backtest with hypotheses, observations and conclusions; notes travel with the report so your research is never lost
|
|
186
|
+
|
|
187
|
+
→ [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)
|
|
188
|
+
|
|
189
|
+
</details>
|
|
190
|
+
|
|
191
|
+
<details open>
|
|
192
|
+
<summary>
|
|
193
|
+
<strong>Live Trading</strong>
|
|
194
|
+
</summary> <br>
|
|
195
|
+
|
|
196
|
+
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.
|
|
197
|
+
|
|
198
|
+
<p align="center">
|
|
199
|
+
<picture>
|
|
200
|
+
<source media="(prefers-color-scheme: dark)" srcset="static/features/live-trading-dark.svg">
|
|
201
|
+
<source media="(prefers-color-scheme: light)" srcset="static/features/live-trading-light.svg">
|
|
202
|
+
<img src="static/features/live-trading-dark.svg" alt="Live trading & deployment — AWS Lambda and Azure Functions" style="max-width: 100%;">
|
|
203
|
+
</picture>
|
|
204
|
+
</p>
|
|
205
|
+
|
|
206
|
+
- **No code rewrites** — your `TradingStrategy` runs identically in backtest, paper trading and live
|
|
207
|
+
- **Cloud deploy** — `investing-algorithm-framework init --type aws_lambda` / `--type azure_function`
|
|
208
|
+
- **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
|
|
209
|
+
- **Portfolio persistence** — trades, orders and positions survive restarts
|
|
210
|
+
|
|
211
|
+
→ [Live trading & deployment docs](https://coding-kitties.github.io/investing-algorithm-framework/Getting%20Started/deployment)
|
|
212
|
+
|
|
213
|
+
</details>
|
|
214
|
+
|
|
215
|
+
<details open>
|
|
216
|
+
<summary>
|
|
217
|
+
<strong>Marketplace Integration</strong>
|
|
218
|
+
</summary> <br>
|
|
219
|
+
|
|
220
|
+
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.
|
|
221
|
+
|
|
222
|
+
<p align="center">
|
|
223
|
+
<a href="https://www.finterion.com/" target="_blank">
|
|
224
|
+
<picture>
|
|
225
|
+
<source media="(prefers-color-scheme: dark)" srcset="static/features/marketplace-dark.svg">
|
|
226
|
+
<source media="(prefers-color-scheme: light)" srcset="static/features/marketplace-light.svg">
|
|
227
|
+
<img src="static/features/marketplace-dark.svg" alt="Marketplace integration — featuring Finterion" style="max-width: 100%;">
|
|
228
|
+
</picture>
|
|
229
|
+
</a>
|
|
230
|
+
</p>
|
|
231
|
+
|
|
232
|
+
→ [Finterion plugin](https://github.com/Finterion/finterion-investing-algorithm-framework-plugin)
|
|
233
|
+
|
|
234
|
+
</details>
|
|
235
|
+
|
|
236
|
+
<details>
|
|
237
|
+
<summary>
|
|
238
|
+
<strong>Usage and Installation</strong>
|
|
239
|
+
</summary> <br>
|
|
137
240
|
|
|
138
241
|
To get started, install the framework and scaffold a new project:
|
|
139
242
|
|
|
@@ -283,6 +386,14 @@ Create as many strategy variants as you want — different parameters, different
|
|
|
283
386
|
|
|
284
387
|
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
388
|
|
|
389
|
+
<p align="center">
|
|
390
|
+
<picture>
|
|
391
|
+
<source media="(prefers-color-scheme: dark)" srcset="static/features/dashboard-dark.svg">
|
|
392
|
+
<source media="(prefers-color-scheme: light)" srcset="static/features/dashboard-light.svg">
|
|
393
|
+
<img src="static/features/dashboard-dark.svg" alt="Self-contained HTML backtest dashboard" style="max-width: 100%;">
|
|
394
|
+
</picture>
|
|
395
|
+
</p>
|
|
396
|
+
|
|
286
397
|
```python
|
|
287
398
|
from investing_algorithm_framework import BacktestReport
|
|
288
399
|
|
|
@@ -318,6 +429,7 @@ report.save("my_report.html")
|
|
|
318
429
|
| **[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
430
|
| **[Event-Driven Backtesting](https://coding-kitties.github.io/investing-algorithm-framework/Getting%20Started/backtesting)** | Realistic, order-by-order simulation |
|
|
320
431
|
| **[Vectorized Backtesting](https://coding-kitties.github.io/investing-algorithm-framework/Getting%20Started/vector-backtesting)** | Fast signal research and prototyping |
|
|
432
|
+
| **[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
433
|
| **50+ Metrics** | CAGR, Sharpe, Sortino, max drawdown, win rate, profit factor, recovery factor, volatility, and more |
|
|
322
434
|
| **[Live Trading](https://coding-kitties.github.io/investing-algorithm-framework/Getting%20Started/application-setup)** | Connect to exchanges via CCXT for real-time execution |
|
|
323
435
|
| **[Portfolio Management](https://coding-kitties.github.io/investing-algorithm-framework/Getting%20Started/portfolio-configuration)** | Position tracking, trade management, persistence |
|
|
@@ -330,14 +442,23 @@ report.save("my_report.html")
|
|
|
330
442
|
|
|
331
443
|
</details>
|
|
332
444
|
|
|
333
|
-
|
|
445
|
+
</details>
|
|
446
|
+
|
|
447
|
+
<details>
|
|
448
|
+
<summary>
|
|
449
|
+
<strong>Plugins</strong>
|
|
450
|
+
</summary> <br>
|
|
334
451
|
|
|
335
452
|
| Plugin | Description |
|
|
336
453
|
|--------|-------------|
|
|
337
454
|
| [PyIndicators](https://github.com/coding-kitties/PyIndicators) | Technical analysis indicators (EMA, RSI, MACD, etc.) |
|
|
338
455
|
| [Finterion Plugin](https://github.com/Finterion/finterion-investing-algorithm-framework-plugin) | Share and monetize strategies on Finterion's marketplace |
|
|
339
456
|
|
|
340
|
-
|
|
457
|
+
</details>
|
|
458
|
+
|
|
459
|
+
## Development & Contributing
|
|
460
|
+
|
|
461
|
+
We welcome contributions! Open an issue, pick one up, or send a PR.
|
|
341
462
|
|
|
342
463
|
```bash
|
|
343
464
|
git clone https://github.com/coding-kitties/investing-algorithm-framework.git
|
|
@@ -348,6 +469,10 @@ poetry install
|
|
|
348
469
|
python -m unittest discover -s tests
|
|
349
470
|
```
|
|
350
471
|
|
|
472
|
+
- [Open an issue](https://github.com/coding-kitties/investing-algorithm-framework/issues/new) for bugs or ideas
|
|
473
|
+
- Read the [Contributing Guide](https://coding-kitties.github.io/investing-algorithm-framework/Contributing%20Guide/contributing)
|
|
474
|
+
- PRs go against the `dev` branch
|
|
475
|
+
|
|
351
476
|
## Resources
|
|
352
477
|
|
|
353
478
|
- **[Documentation](https://coding-kitties.github.io/investing-algorithm-framework/)** — Guides and API reference
|
|
@@ -355,12 +480,6 @@ python -m unittest discover -s tests
|
|
|
355
480
|
- **[Discord](https://discord.gg/dQsRmGZP)** — Chat and support
|
|
356
481
|
- **[Reddit](https://www.reddit.com/r/InvestingBots/)** — Strategy discussion
|
|
357
482
|
|
|
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
483
|
## Risk Disclaimer
|
|
365
484
|
|
|
366
485
|
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
|
|
@@ -86,13 +83,116 @@ This framework is built around the full loop: **create strategies → vector bac
|
|
|
86
83
|
- 🎯 **Return Scenario Projections** — Good, average, bad & very bad year projections from backtest data
|
|
87
84
|
- 📉 **Benchmark Comparison** — Beat-rate analysis vs Buy & Hold, DCA, risk-free & custom benchmarks
|
|
88
85
|
- 📄 **One-Click HTML Report** — Self-contained file, no server, dark & light theme, shareable
|
|
86
|
+
- 📦 **Custom `.iafbt` Backtest Bundle Format** — An explicit, versioned, compressed, language-portable container (zstd + msgpack with magic-byte header) plus a separate parquet index for fast filtering without loading. ~21× smaller and ~27× fewer files than standard filebased directory layouts, with parallel I/O for fast load/save of large amounts of backtests.
|
|
89
87
|
- 🌐 **Load External Data** — Fetch CSV, JSON, or Parquet from any URL with caching and auto-refresh
|
|
90
88
|
- � **[Record Custom Variables](https://coding-kitties.github.io/investing-algorithm-framework/Advanced%20Concepts/recording-variables)** — Track any indicator or metric during backtests with `context.record()`
|
|
91
89
|
- �🚀 **Build → Backtest → Deploy** — Local dev, cloud deploy (AWS / Azure), or monetize on Finterion
|
|
92
90
|
|
|
93
91
|
</details>
|
|
94
92
|
|
|
95
|
-
|
|
93
|
+
<details open>
|
|
94
|
+
<summary>
|
|
95
|
+
<strong>Backtesting Engines</strong>
|
|
96
|
+
</summary> <br>
|
|
97
|
+
|
|
98
|
+
### ⚡ Vector Backtesting — Test thousands of strategies, fast
|
|
99
|
+
|
|
100
|
+
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.
|
|
101
|
+
|
|
102
|
+
<p align="center">
|
|
103
|
+
<picture>
|
|
104
|
+
<source media="(prefers-color-scheme: dark)" srcset="static/features/vector-backtest-dark.svg">
|
|
105
|
+
<source media="(prefers-color-scheme: light)" srcset="static/features/vector-backtest-light.svg">
|
|
106
|
+
<img src="static/features/vector-backtest-dark.svg" alt="Vector backtest engine — run thousands of strategies in parallel" style="max-width: 100%;">
|
|
107
|
+
</picture>
|
|
108
|
+
</p>
|
|
109
|
+
|
|
110
|
+
### 🏃 Event-Driven Backtesting — Bar-by-bar realism
|
|
111
|
+
|
|
112
|
+
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.
|
|
113
|
+
|
|
114
|
+
<p align="center">
|
|
115
|
+
<picture>
|
|
116
|
+
<source media="(prefers-color-scheme: dark)" srcset="static/features/event-backtest-dark.svg">
|
|
117
|
+
<source media="(prefers-color-scheme: light)" srcset="static/features/event-backtest-light.svg">
|
|
118
|
+
<img src="static/features/event-backtest-dark.svg" alt="Event-driven backtest engine — bar-by-bar realism with order fills" style="max-width: 100%;">
|
|
119
|
+
</picture>
|
|
120
|
+
</p>
|
|
121
|
+
|
|
122
|
+
</details>
|
|
123
|
+
|
|
124
|
+
<details open>
|
|
125
|
+
<summary>
|
|
126
|
+
<strong>Backtest Analysis & Dashboard</strong>
|
|
127
|
+
</summary> <br>
|
|
128
|
+
|
|
129
|
+
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.
|
|
130
|
+
|
|
131
|
+
<p align="center">
|
|
132
|
+
<picture>
|
|
133
|
+
<source media="(prefers-color-scheme: dark)" srcset="static/features/dashboard-dark.svg">
|
|
134
|
+
<source media="(prefers-color-scheme: light)" srcset="static/features/dashboard-light.svg">
|
|
135
|
+
<img src="static/features/dashboard-dark.svg" alt="Backtest analysis dashboard with MCP server and notes" style="max-width: 100%;">
|
|
136
|
+
</picture>
|
|
137
|
+
</p>
|
|
138
|
+
|
|
139
|
+
- **Self-contained HTML reports** — equity curves, drawdowns, trade lists, monthly returns, side-by-side strategy comparison
|
|
140
|
+
- **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`
|
|
141
|
+
- **Notes keeping** — annotate every backtest with hypotheses, observations and conclusions; notes travel with the report so your research is never lost
|
|
142
|
+
|
|
143
|
+
→ [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)
|
|
144
|
+
|
|
145
|
+
</details>
|
|
146
|
+
|
|
147
|
+
<details open>
|
|
148
|
+
<summary>
|
|
149
|
+
<strong>Live Trading</strong>
|
|
150
|
+
</summary> <br>
|
|
151
|
+
|
|
152
|
+
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.
|
|
153
|
+
|
|
154
|
+
<p align="center">
|
|
155
|
+
<picture>
|
|
156
|
+
<source media="(prefers-color-scheme: dark)" srcset="static/features/live-trading-dark.svg">
|
|
157
|
+
<source media="(prefers-color-scheme: light)" srcset="static/features/live-trading-light.svg">
|
|
158
|
+
<img src="static/features/live-trading-dark.svg" alt="Live trading & deployment — AWS Lambda and Azure Functions" style="max-width: 100%;">
|
|
159
|
+
</picture>
|
|
160
|
+
</p>
|
|
161
|
+
|
|
162
|
+
- **No code rewrites** — your `TradingStrategy` runs identically in backtest, paper trading and live
|
|
163
|
+
- **Cloud deploy** — `investing-algorithm-framework init --type aws_lambda` / `--type azure_function`
|
|
164
|
+
- **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
|
|
165
|
+
- **Portfolio persistence** — trades, orders and positions survive restarts
|
|
166
|
+
|
|
167
|
+
→ [Live trading & deployment docs](https://coding-kitties.github.io/investing-algorithm-framework/Getting%20Started/deployment)
|
|
168
|
+
|
|
169
|
+
</details>
|
|
170
|
+
|
|
171
|
+
<details open>
|
|
172
|
+
<summary>
|
|
173
|
+
<strong>Marketplace Integration</strong>
|
|
174
|
+
</summary> <br>
|
|
175
|
+
|
|
176
|
+
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.
|
|
177
|
+
|
|
178
|
+
<p align="center">
|
|
179
|
+
<a href="https://www.finterion.com/" target="_blank">
|
|
180
|
+
<picture>
|
|
181
|
+
<source media="(prefers-color-scheme: dark)" srcset="static/features/marketplace-dark.svg">
|
|
182
|
+
<source media="(prefers-color-scheme: light)" srcset="static/features/marketplace-light.svg">
|
|
183
|
+
<img src="static/features/marketplace-dark.svg" alt="Marketplace integration — featuring Finterion" style="max-width: 100%;">
|
|
184
|
+
</picture>
|
|
185
|
+
</a>
|
|
186
|
+
</p>
|
|
187
|
+
|
|
188
|
+
→ [Finterion plugin](https://github.com/Finterion/finterion-investing-algorithm-framework-plugin)
|
|
189
|
+
|
|
190
|
+
</details>
|
|
191
|
+
|
|
192
|
+
<details>
|
|
193
|
+
<summary>
|
|
194
|
+
<strong>Usage and Installation</strong>
|
|
195
|
+
</summary> <br>
|
|
96
196
|
|
|
97
197
|
To get started, install the framework and scaffold a new project:
|
|
98
198
|
|
|
@@ -242,6 +342,14 @@ Create as many strategy variants as you want — different parameters, different
|
|
|
242
342
|
|
|
243
343
|
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
344
|
|
|
345
|
+
<p align="center">
|
|
346
|
+
<picture>
|
|
347
|
+
<source media="(prefers-color-scheme: dark)" srcset="static/features/dashboard-dark.svg">
|
|
348
|
+
<source media="(prefers-color-scheme: light)" srcset="static/features/dashboard-light.svg">
|
|
349
|
+
<img src="static/features/dashboard-dark.svg" alt="Self-contained HTML backtest dashboard" style="max-width: 100%;">
|
|
350
|
+
</picture>
|
|
351
|
+
</p>
|
|
352
|
+
|
|
245
353
|
```python
|
|
246
354
|
from investing_algorithm_framework import BacktestReport
|
|
247
355
|
|
|
@@ -277,6 +385,7 @@ report.save("my_report.html")
|
|
|
277
385
|
| **[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
386
|
| **[Event-Driven Backtesting](https://coding-kitties.github.io/investing-algorithm-framework/Getting%20Started/backtesting)** | Realistic, order-by-order simulation |
|
|
279
387
|
| **[Vectorized Backtesting](https://coding-kitties.github.io/investing-algorithm-framework/Getting%20Started/vector-backtesting)** | Fast signal research and prototyping |
|
|
388
|
+
| **[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
389
|
| **50+ Metrics** | CAGR, Sharpe, Sortino, max drawdown, win rate, profit factor, recovery factor, volatility, and more |
|
|
281
390
|
| **[Live Trading](https://coding-kitties.github.io/investing-algorithm-framework/Getting%20Started/application-setup)** | Connect to exchanges via CCXT for real-time execution |
|
|
282
391
|
| **[Portfolio Management](https://coding-kitties.github.io/investing-algorithm-framework/Getting%20Started/portfolio-configuration)** | Position tracking, trade management, persistence |
|
|
@@ -289,14 +398,23 @@ report.save("my_report.html")
|
|
|
289
398
|
|
|
290
399
|
</details>
|
|
291
400
|
|
|
292
|
-
|
|
401
|
+
</details>
|
|
402
|
+
|
|
403
|
+
<details>
|
|
404
|
+
<summary>
|
|
405
|
+
<strong>Plugins</strong>
|
|
406
|
+
</summary> <br>
|
|
293
407
|
|
|
294
408
|
| Plugin | Description |
|
|
295
409
|
|--------|-------------|
|
|
296
410
|
| [PyIndicators](https://github.com/coding-kitties/PyIndicators) | Technical analysis indicators (EMA, RSI, MACD, etc.) |
|
|
297
411
|
| [Finterion Plugin](https://github.com/Finterion/finterion-investing-algorithm-framework-plugin) | Share and monetize strategies on Finterion's marketplace |
|
|
298
412
|
|
|
299
|
-
|
|
413
|
+
</details>
|
|
414
|
+
|
|
415
|
+
## Development & Contributing
|
|
416
|
+
|
|
417
|
+
We welcome contributions! Open an issue, pick one up, or send a PR.
|
|
300
418
|
|
|
301
419
|
```bash
|
|
302
420
|
git clone https://github.com/coding-kitties/investing-algorithm-framework.git
|
|
@@ -307,6 +425,10 @@ poetry install
|
|
|
307
425
|
python -m unittest discover -s tests
|
|
308
426
|
```
|
|
309
427
|
|
|
428
|
+
- [Open an issue](https://github.com/coding-kitties/investing-algorithm-framework/issues/new) for bugs or ideas
|
|
429
|
+
- Read the [Contributing Guide](https://coding-kitties.github.io/investing-algorithm-framework/Contributing%20Guide/contributing)
|
|
430
|
+
- PRs go against the `dev` branch
|
|
431
|
+
|
|
310
432
|
## Resources
|
|
311
433
|
|
|
312
434
|
- **[Documentation](https://coding-kitties.github.io/investing-algorithm-framework/)** — Guides and API reference
|
|
@@ -314,12 +436,6 @@ python -m unittest discover -s tests
|
|
|
314
436
|
- **[Discord](https://discord.gg/dQsRmGZP)** — Chat and support
|
|
315
437
|
- **[Reddit](https://www.reddit.com/r/InvestingBots/)** — Strategy discussion
|
|
316
438
|
|
|
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
439
|
## Risk Disclaimer
|
|
324
440
|
|
|
325
441
|
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.
|
|
@@ -30,7 +30,11 @@ from .domain import ApiException, combine_backtests, PositionSize, \
|
|
|
30
30
|
VolumeImpactSlippage, \
|
|
31
31
|
CommissionModel, NoCommission, PercentageCommission, FixedCommission, \
|
|
32
32
|
FillModel, FullFill, VolumeBasedFill, \
|
|
33
|
-
FXRateProvider, StaticFXRateProvider
|
|
33
|
+
FXRateProvider, StaticFXRateProvider, \
|
|
34
|
+
Pipeline, Factor, CustomFactor, Filter, \
|
|
35
|
+
Returns, AverageDollarVolume, AverageTradedValue, SMA, RSI, \
|
|
36
|
+
Volatility, StaticPerSymbol, CrossSectionalMean, RollingBeta, \
|
|
37
|
+
Neutralize
|
|
34
38
|
from .infrastructure import AzureBlobStorageStateHandler, \
|
|
35
39
|
CSVOHLCVDataProvider, CSVTickerDataProvider, CSVURLDataProvider, \
|
|
36
40
|
JSONURLDataProvider, ParquetURLDataProvider, \
|
|
@@ -256,6 +260,21 @@ __all__ = [
|
|
|
256
260
|
"VolumeBasedFill",
|
|
257
261
|
"FXRateProvider",
|
|
258
262
|
"StaticFXRateProvider",
|
|
263
|
+
# Pipeline API (Phase 1, see docs/design/pipeline-api.md)
|
|
264
|
+
"Pipeline",
|
|
265
|
+
"Factor",
|
|
266
|
+
"CustomFactor",
|
|
267
|
+
"Filter",
|
|
268
|
+
"Returns",
|
|
269
|
+
"AverageDollarVolume",
|
|
270
|
+
"AverageTradedValue",
|
|
271
|
+
"SMA",
|
|
272
|
+
"RSI",
|
|
273
|
+
"Volatility",
|
|
274
|
+
"StaticPerSymbol",
|
|
275
|
+
"CrossSectionalMean",
|
|
276
|
+
"RollingBeta",
|
|
277
|
+
"Neutralize",
|
|
259
278
|
"load_ipython_extension",
|
|
260
279
|
"get_cv_consistency",
|
|
261
280
|
"get_normalized_stability",
|
|
@@ -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,
|