investing-algorithm-framework 8.2.0__tar.gz → 8.3.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.2.0 → investing_algorithm_framework-8.3.0}/PKG-INFO +20 -11
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/README.md +11 -8
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/__init__.py +37 -5
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/app/app.py +126 -14
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/app/context.py +413 -87
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/domain/__init__.py +24 -0
- investing_algorithm_framework-8.3.0/investing_algorithm_framework/domain/blotter.py +752 -0
- investing_algorithm_framework-8.3.0/investing_algorithm_framework/domain/fx.py +137 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/domain/models/data/data_source.py +177 -2
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/infrastructure/__init__.py +14 -4
- investing_algorithm_framework-8.3.0/investing_algorithm_framework/infrastructure/data_providers/__init__.py +120 -0
- investing_algorithm_framework-8.3.0/investing_algorithm_framework/infrastructure/data_providers/alpha_vantage.py +170 -0
- investing_algorithm_framework-8.3.0/investing_algorithm_framework/infrastructure/data_providers/base_url.py +372 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/infrastructure/data_providers/csv.py +3 -2
- investing_algorithm_framework-8.3.0/investing_algorithm_framework/infrastructure/data_providers/csv_url.py +33 -0
- investing_algorithm_framework-8.3.0/investing_algorithm_framework/infrastructure/data_providers/json_url.py +53 -0
- investing_algorithm_framework-8.3.0/investing_algorithm_framework/infrastructure/data_providers/ohlcv_base.py +587 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/infrastructure/data_providers/pandas.py +7 -5
- investing_algorithm_framework-8.3.0/investing_algorithm_framework/infrastructure/data_providers/parquet_url.py +36 -0
- investing_algorithm_framework-8.3.0/investing_algorithm_framework/infrastructure/data_providers/polygon.py +137 -0
- investing_algorithm_framework-8.3.0/investing_algorithm_framework/infrastructure/data_providers/yahoo.py +134 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/infrastructure/order_executors/__init__.py +0 -2
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/infrastructure/services/backtesting/backtest_service.py +5 -0
- investing_algorithm_framework-8.3.0/investing_algorithm_framework/services/metrics/risk_free_rate.py +49 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/services/order_service/order_backtest_service.py +0 -1
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/services/trade_order_evaluator/backtest_trade_oder_evaluator.py +107 -56
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/services/trade_order_evaluator/trade_order_evaluator.py +16 -3
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/pyproject.toml +11 -3
- investing_algorithm_framework-8.2.0/investing_algorithm_framework/infrastructure/data_providers/__init__.py +0 -39
- investing_algorithm_framework-8.2.0/investing_algorithm_framework/infrastructure/order_executors/backtest_oder_executor.py +0 -28
- investing_algorithm_framework-8.2.0/investing_algorithm_framework/services/metrics/risk_free_rate.py +0 -28
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/LICENSE +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/analysis/__init__.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/analysis/backtest_data_ranges.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/analysis/markdown.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/analysis/ranking.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/app/__init__.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/app/algorithm/__init__.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/app/algorithm/algorithm.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/app/algorithm/algorithm_factory.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/app/app_hook.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/app/eventloop.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/app/reporting/__init__.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/app/reporting/ascii.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/app/reporting/backtest_report.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/app/reporting/backtest_report_old.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/app/reporting/charts/__init__.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/app/reporting/charts/entry_exist_signals.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/app/reporting/charts/equity_curve.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/app/reporting/charts/equity_curve_drawdown.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/app/reporting/charts/line_chart.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/app/reporting/charts/monthly_returns_heatmap.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/app/reporting/charts/ohlcv_data_completeness.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/app/reporting/charts/rolling_sharp_ratio.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/app/reporting/charts/yearly_returns_barchart.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/app/reporting/generate.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/app/reporting/tables/__init__.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/app/reporting/tables/key_metrics_table.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/app/reporting/tables/stop_loss_table.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/app/reporting/tables/time_metrics_table.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/app/reporting/tables/trade_metrics_table.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/app/reporting/tables/trades_table.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/app/reporting/tables/utils.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/app/reporting/templates/dashboard.css +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/app/reporting/templates/dashboard.js +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/app/reporting/templates/dashboard_template.html.j2 +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/app/reporting/templates/report_template.html.j2 +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/app/stateless/__init__.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/app/stateless/action_handlers/__init__.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/app/stateless/action_handlers/action_handler_strategy.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/app/stateless/action_handlers/check_online_handler.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/app/stateless/action_handlers/run_strategy_handler.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/app/stateless/exception_handler.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/app/strategy.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/app/task.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/app/web/__init__.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/app/web/controllers/__init__.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/app/web/controllers/orders.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/app/web/controllers/portfolio.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/app/web/controllers/positions.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/app/web/create_app.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/app/web/error_handler.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/app/web/responses.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/app/web/run_strategies.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/app/web/schemas/__init__.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/app/web/schemas/order.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/app/web/schemas/portfolio.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/app/web/schemas/position.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/app/web/setup_cors.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/cli/__init__.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/cli/cli.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/cli/deploy_to_aws_lambda.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/cli/deploy_to_azure_function.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/cli/initialize_app.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/cli/mcp_server.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/cli/templates/.gitignore.template +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/cli/templates/app.py.template +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/cli/templates/app_aws_lambda_function.py.template +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/cli/templates/app_azure_function.py.template +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/cli/templates/app_web.py.template +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/cli/templates/aws_lambda_dockerfile.template +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/cli/templates/aws_lambda_dockerignore.template +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/cli/templates/aws_lambda_readme.md.template +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/cli/templates/aws_lambda_requirements.txt.template +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/cli/templates/azure_function_function_app.py.template +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/cli/templates/azure_function_host.json.template +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/cli/templates/azure_function_local.settings.json.template +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/cli/templates/azure_function_requirements.txt.template +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/cli/templates/data_providers.py.template +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/cli/templates/env.example.template +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/cli/templates/env_azure_function.example.template +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/cli/templates/market_data_providers.py.template +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/cli/templates/readme.md.template +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/cli/templates/requirements.txt.template +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/cli/templates/run_backtest.py.template +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/cli/templates/strategy.py.template +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/cli/validate_backtest_checkpoints.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/create_app.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/dependency_container.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/domain/algorithm_id.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/domain/backtesting/__init__.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/domain/backtesting/backtest.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/domain/backtesting/backtest_date_range.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/domain/backtesting/backtest_evaluation_focuss.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/domain/backtesting/backtest_metrics.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/domain/backtesting/backtest_permutation_test.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/domain/backtesting/backtest_run.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/domain/backtesting/backtest_summary_metrics.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/domain/backtesting/backtest_utils.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/domain/backtesting/combine_backtests.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/domain/backtesting/templates/backtest.html +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/domain/backtesting/templates/finterion-dark.png +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/domain/backtesting/templates/finterion-light.png +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/domain/config.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/domain/constants.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/domain/data_provider.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/domain/data_structures.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/domain/decimal_parsing.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/domain/exceptions.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/domain/models/__init__.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/domain/models/app_mode.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/domain/models/base_model.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/domain/models/data/__init__.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/domain/models/data/data_type.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/domain/models/event.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/domain/models/market/__init__.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/domain/models/market/market_credential.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/domain/models/order/__init__.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/domain/models/order/order.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/domain/models/order/order_side.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/domain/models/order/order_status.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/domain/models/order/order_type.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/domain/models/portfolio/__init__.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/domain/models/portfolio/portfolio.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/domain/models/portfolio/portfolio_configuration.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/domain/models/portfolio/portfolio_snapshot.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/domain/models/position/__init__.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/domain/models/position/position.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/domain/models/position/position_size.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/domain/models/position/position_snapshot.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/domain/models/risk_rules/__init__.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/domain/models/risk_rules/scaling_rule.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/domain/models/risk_rules/stop_loss_rule.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/domain/models/risk_rules/take_profit_rule.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/domain/models/risk_rules/trading_cost.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/domain/models/snapshot_interval.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/domain/models/strategy_profile.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/domain/models/time_frame.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/domain/models/time_interval.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/domain/models/time_unit.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/domain/models/tracing/__init__.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/domain/models/tracing/trace.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/domain/models/trade/__init__.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/domain/models/trade/trade.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/domain/models/trade/trade_status.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/domain/models/trade/trade_stop_loss.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/domain/models/trade/trade_take_profit.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/domain/order_executor.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/domain/portfolio_provider.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/domain/services/__init__.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/domain/services/market_credential_service.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/domain/services/portfolios/__init__.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/domain/services/portfolios/portfolio_sync_service.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/domain/services/rounding_service.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/domain/services/state_handler.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/domain/stateless_actions.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/domain/strategy.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/domain/utils/__init__.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/domain/utils/csv.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/domain/utils/custom_tqdm.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/domain/utils/dates.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/domain/utils/jupyter_notebook_detection.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/domain/utils/polars.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/domain/utils/random.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/domain/utils/signatures.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/domain/utils/stoppable_thread.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/domain/utils/synchronized.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/download_data.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/infrastructure/data_providers/ccxt.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/infrastructure/database/__init__.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/infrastructure/database/sql_alchemy.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/infrastructure/models/__init__.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/infrastructure/models/decimal_parser.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/infrastructure/models/model_extension.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/infrastructure/models/order/__init__.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/infrastructure/models/order/order.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/infrastructure/models/order/trade_allocation.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/infrastructure/models/order_trade_association.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/infrastructure/models/portfolio/__init__.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/infrastructure/models/portfolio/portfolio_snapshot.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/infrastructure/models/portfolio/sql_portfolio.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/infrastructure/models/position/__init__.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/infrastructure/models/position/position.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/infrastructure/models/position/position_snapshot.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/infrastructure/models/trades/__init__.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/infrastructure/models/trades/trade.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/infrastructure/models/trades/trade_stop_loss.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/infrastructure/models/trades/trade_take_profit.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/infrastructure/order_executors/ccxt_order_executor.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/infrastructure/portfolio_providers/__init__.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/infrastructure/portfolio_providers/ccxt_portfolio_provider.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/infrastructure/repositories/__init__.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/infrastructure/repositories/order_repository.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/infrastructure/repositories/portfolio_repository.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/infrastructure/repositories/portfolio_snapshot_repository.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/infrastructure/repositories/position_repository.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/infrastructure/repositories/position_snapshot_repository.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/infrastructure/repositories/repository.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/infrastructure/repositories/trade_allocation_repository.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/infrastructure/repositories/trade_repository.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/infrastructure/repositories/trade_stop_loss_repository.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/infrastructure/repositories/trade_take_profit_repository.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/infrastructure/services/__init__.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/infrastructure/services/aws/__init__.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/infrastructure/services/aws/state_handler.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/infrastructure/services/azure/__init__.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/infrastructure/services/azure/state_handler.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/infrastructure/services/backtesting/__init__.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/infrastructure/services/backtesting/event_backtest_service.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/infrastructure/services/backtesting/vector_backtest_service.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/services/__init__.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/services/configuration_service.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/services/data_providers/__init__.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/services/data_providers/data.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/services/data_providers/data_provider_service.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/services/market_credential_service.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/services/metrics/__init__.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/services/metrics/alpha.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/services/metrics/beta.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/services/metrics/cagr.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/services/metrics/calmar_ratio.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/services/metrics/drawdown.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/services/metrics/equity_curve.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/services/metrics/exposure.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/services/metrics/generate.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/services/metrics/mean_daily_return.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/services/metrics/price_efficiency.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/services/metrics/profit_factor.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/services/metrics/recovery.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/services/metrics/returns.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/services/metrics/sharpe_ratio.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/services/metrics/sortino_ratio.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/services/metrics/standard_deviation.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/services/metrics/trades.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/services/metrics/treynor_ratio.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/services/metrics/ulcer.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/services/metrics/value_at_risk.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/services/metrics/volatility.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/services/metrics/win_rate.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/services/order_service/__init__.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/services/order_service/order_executor_lookup.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/services/order_service/order_service.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/services/portfolios/__init__.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/services/portfolios/backtest_portfolio_service.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/services/portfolios/portfolio_configuration_service.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/services/portfolios/portfolio_provider_lookup.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/services/portfolios/portfolio_service.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/services/portfolios/portfolio_snapshot_service.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/services/portfolios/portfolio_sync_service.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/services/positions/__init__.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/services/positions/position_service.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/services/positions/position_snapshot_service.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/services/repository_service.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/services/trade_order_evaluator/__init__.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/services/trade_order_evaluator/default_trade_order_evaluator.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/services/trade_service/__init__.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/services/trade_service/trade_service.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/services/trade_service/trade_stop_loss_service.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.3.0}/investing_algorithm_framework/services/trade_service/trade_take_profit_service.py +0 -0
|
@@ -1,17 +1,22 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: investing-algorithm-framework
|
|
3
|
-
Version: 8.
|
|
3
|
+
Version: 8.3.0
|
|
4
4
|
Summary: A framework for creating trading bots
|
|
5
5
|
Author: MDUYN
|
|
6
|
-
Requires-Python: >=3.10
|
|
6
|
+
Requires-Python: >=3.10,<4.0
|
|
7
7
|
Classifier: Programming Language :: Python :: 3
|
|
8
8
|
Classifier: Programming Language :: Python :: 3.10
|
|
9
9
|
Classifier: Programming Language :: Python :: 3.11
|
|
10
10
|
Classifier: Programming Language :: Python :: 3.12
|
|
11
|
+
Provides-Extra: all
|
|
12
|
+
Provides-Extra: alpha-vantage
|
|
13
|
+
Provides-Extra: polygon
|
|
14
|
+
Provides-Extra: yahoo
|
|
11
15
|
Requires-Dist: Flask (>=3.1.0)
|
|
12
16
|
Requires-Dist: Flask-Cors (>=3.0.9,<5.0.0)
|
|
13
17
|
Requires-Dist: Flask-Migrate (>=2.6.0)
|
|
14
18
|
Requires-Dist: SQLAlchemy (>=2.0.18)
|
|
19
|
+
Requires-Dist: alpha_vantage (>=3.0.0,<4.0.0) ; extra == "alpha-vantage" or extra == "all"
|
|
15
20
|
Requires-Dist: azure-identity (>=1.19.0,<2.0.0)
|
|
16
21
|
Requires-Dist: azure-mgmt-resource (>=23.2.0,<24.0.0)
|
|
17
22
|
Requires-Dist: azure-mgmt-storage (>=21.2.1,<22.0.0)
|
|
@@ -24,13 +29,14 @@ Requires-Dist: jupyter (>=1.0.0)
|
|
|
24
29
|
Requires-Dist: marshmallow (>=3.5.0)
|
|
25
30
|
Requires-Dist: plotly (>=6.1.2,<7.0.0)
|
|
26
31
|
Requires-Dist: polars[numpy,pandas] (>=0.20.10)
|
|
32
|
+
Requires-Dist: polygon-api-client (>=1.14.0,<2.0.0) ; extra == "polygon" or extra == "all"
|
|
27
33
|
Requires-Dist: python-dateutil (>=2.8.2)
|
|
28
34
|
Requires-Dist: python-dotenv (>=1.0.1,<2.0.0)
|
|
29
35
|
Requires-Dist: schedule (>=1.1.0)
|
|
30
36
|
Requires-Dist: tabulate (>=0.9.0)
|
|
31
37
|
Requires-Dist: tqdm (>=4.66.1)
|
|
32
38
|
Requires-Dist: wrapt (>=1.16.0)
|
|
33
|
-
Requires-Dist: yfinance (>=0.2.61,<0.3.0)
|
|
39
|
+
Requires-Dist: yfinance (>=0.2.61,<0.3.0) ; extra == "yahoo" or extra == "all"
|
|
34
40
|
Description-Content-Type: text/markdown
|
|
35
41
|
|
|
36
42
|
<h1 align="center">
|
|
@@ -111,6 +117,7 @@ This framework is built around the full loop: **create strategies → backtest t
|
|
|
111
117
|
- 🎯 **Return Scenario Projections** — Good, average, bad & very bad year projections from backtest data
|
|
112
118
|
- 📉 **Benchmark Comparison** — Beat-rate analysis vs Buy & Hold, DCA, risk-free & custom benchmarks
|
|
113
119
|
- 📄 **One-Click HTML Report** — Self-contained file, no server, dark & light theme, shareable
|
|
120
|
+
- 🌐 **Load External Data** — Fetch CSV, JSON, or Parquet from any URL with caching and auto-refresh
|
|
114
121
|
- 🚀 **Build → Backtest → Deploy** — Local dev, cloud deploy (AWS / Azure), or monetize on Finterion
|
|
115
122
|
|
|
116
123
|
</details>
|
|
@@ -297,15 +304,17 @@ report.save("my_report.html")
|
|
|
297
304
|
|
|
298
305
|
| | |
|
|
299
306
|
|---|---|
|
|
300
|
-
| **Backtest Report Dashboard** | Self-contained HTML report with ranking tables, equity curves, metric charts, heatmaps, and strategy comparison |
|
|
301
|
-
| **Event-Driven Backtesting** | Realistic, order-by-order simulation |
|
|
302
|
-
| **Vectorized Backtesting** | Fast signal research and prototyping |
|
|
307
|
+
| **[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 |
|
|
308
|
+
| **[Event-Driven Backtesting](https://coding-kitties.github.io/investing-algorithm-framework/Getting%20Started/backtesting)** | Realistic, order-by-order simulation |
|
|
309
|
+
| **[Vectorized Backtesting](https://coding-kitties.github.io/investing-algorithm-framework/Advanced%20Concepts/vector-backtesting)** | Fast signal research and prototyping |
|
|
303
310
|
| **50+ Metrics** | CAGR, Sharpe, Sortino, max drawdown, win rate, profit factor, recovery factor, volatility, and more |
|
|
304
|
-
| **Live Trading** | Connect to exchanges via CCXT for real-time execution |
|
|
305
|
-
| **Portfolio Management** | Position tracking, trade management, persistence |
|
|
306
|
-
| **Cloud Deployment** | Deploy to AWS Lambda, Azure Functions, or run as a web service |
|
|
307
|
-
| **Market Data** |
|
|
308
|
-
| **
|
|
311
|
+
| **[Live Trading](https://coding-kitties.github.io/investing-algorithm-framework/Getting%20Started/application-setup)** | Connect to exchanges via CCXT for real-time execution |
|
|
312
|
+
| **[Portfolio Management](https://coding-kitties.github.io/investing-algorithm-framework/Getting%20Started/portfolio-configuration)** | Position tracking, trade management, persistence |
|
|
313
|
+
| **[Cloud Deployment](https://coding-kitties.github.io/investing-algorithm-framework/Getting%20Started/deployment)** | Deploy to AWS Lambda, Azure Functions, or run as a web service |
|
|
314
|
+
| **[Market Data Providers](https://coding-kitties.github.io/investing-algorithm-framework/Advanced%20Concepts/custom-data-providers)** | Built-in providers for CCXT, Yahoo Finance, Alpha Vantage, and Polygon — or build your own |
|
|
315
|
+
| **[Load External Data](https://coding-kitties.github.io/investing-algorithm-framework/Data/external-data)** | Fetch CSV, JSON, or Parquet from any URL with caching, date parsing, and pre/post-processing |
|
|
316
|
+
| **[Strategies](https://coding-kitties.github.io/investing-algorithm-framework/Getting%20Started/strategies)** | OHLCV, tickers, custom data — Polars and Pandas native |
|
|
317
|
+
| **[Extensible](https://coding-kitties.github.io/investing-algorithm-framework/Advanced%20Concepts/custom-data-providers)** | Custom data providers, order executors, and strategy classes |
|
|
309
318
|
|
|
310
319
|
</details>
|
|
311
320
|
|
|
@@ -76,6 +76,7 @@ This framework is built around the full loop: **create strategies → backtest t
|
|
|
76
76
|
- 🎯 **Return Scenario Projections** — Good, average, bad & very bad year projections from backtest data
|
|
77
77
|
- 📉 **Benchmark Comparison** — Beat-rate analysis vs Buy & Hold, DCA, risk-free & custom benchmarks
|
|
78
78
|
- 📄 **One-Click HTML Report** — Self-contained file, no server, dark & light theme, shareable
|
|
79
|
+
- 🌐 **Load External Data** — Fetch CSV, JSON, or Parquet from any URL with caching and auto-refresh
|
|
79
80
|
- 🚀 **Build → Backtest → Deploy** — Local dev, cloud deploy (AWS / Azure), or monetize on Finterion
|
|
80
81
|
|
|
81
82
|
</details>
|
|
@@ -262,15 +263,17 @@ report.save("my_report.html")
|
|
|
262
263
|
|
|
263
264
|
| | |
|
|
264
265
|
|---|---|
|
|
265
|
-
| **Backtest Report Dashboard** | Self-contained HTML report with ranking tables, equity curves, metric charts, heatmaps, and strategy comparison |
|
|
266
|
-
| **Event-Driven Backtesting** | Realistic, order-by-order simulation |
|
|
267
|
-
| **Vectorized Backtesting** | Fast signal research and prototyping |
|
|
266
|
+
| **[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 |
|
|
267
|
+
| **[Event-Driven Backtesting](https://coding-kitties.github.io/investing-algorithm-framework/Getting%20Started/backtesting)** | Realistic, order-by-order simulation |
|
|
268
|
+
| **[Vectorized Backtesting](https://coding-kitties.github.io/investing-algorithm-framework/Advanced%20Concepts/vector-backtesting)** | Fast signal research and prototyping |
|
|
268
269
|
| **50+ Metrics** | CAGR, Sharpe, Sortino, max drawdown, win rate, profit factor, recovery factor, volatility, and more |
|
|
269
|
-
| **Live Trading** | Connect to exchanges via CCXT for real-time execution |
|
|
270
|
-
| **Portfolio Management** | Position tracking, trade management, persistence |
|
|
271
|
-
| **Cloud Deployment** | Deploy to AWS Lambda, Azure Functions, or run as a web service |
|
|
272
|
-
| **Market Data** |
|
|
273
|
-
| **
|
|
270
|
+
| **[Live Trading](https://coding-kitties.github.io/investing-algorithm-framework/Getting%20Started/application-setup)** | Connect to exchanges via CCXT for real-time execution |
|
|
271
|
+
| **[Portfolio Management](https://coding-kitties.github.io/investing-algorithm-framework/Getting%20Started/portfolio-configuration)** | Position tracking, trade management, persistence |
|
|
272
|
+
| **[Cloud Deployment](https://coding-kitties.github.io/investing-algorithm-framework/Getting%20Started/deployment)** | Deploy to AWS Lambda, Azure Functions, or run as a web service |
|
|
273
|
+
| **[Market Data Providers](https://coding-kitties.github.io/investing-algorithm-framework/Advanced%20Concepts/custom-data-providers)** | Built-in providers for CCXT, Yahoo Finance, Alpha Vantage, and Polygon — or build your own |
|
|
274
|
+
| **[Load External Data](https://coding-kitties.github.io/investing-algorithm-framework/Data/external-data)** | Fetch CSV, JSON, or Parquet from any URL with caching, date parsing, and pre/post-processing |
|
|
275
|
+
| **[Strategies](https://coding-kitties.github.io/investing-algorithm-framework/Getting%20Started/strategies)** | OHLCV, tickers, custom data — Polars and Pandas native |
|
|
276
|
+
| **[Extensible](https://coding-kitties.github.io/investing-algorithm-framework/Advanced%20Concepts/custom-data-providers)** | Custom data providers, order executors, and strategy classes |
|
|
274
277
|
|
|
275
278
|
</details>
|
|
276
279
|
|
|
@@ -24,11 +24,20 @@ from .domain import ApiException, combine_backtests, PositionSize, \
|
|
|
24
24
|
APPLICATION_DIRECTORY, DataSource, OrderExecutor, PortfolioProvider, \
|
|
25
25
|
SnapshotInterval, AWS_S3_STATE_BUCKET_NAME, BacktestEvaluationFocus, \
|
|
26
26
|
save_backtests_to_directory, BacktestMetrics, DATA_DIRECTORY, \
|
|
27
|
-
retag_backtests
|
|
27
|
+
retag_backtests, \
|
|
28
|
+
Blotter, DefaultBlotter, SimulationBlotter, Transaction, \
|
|
29
|
+
SlippageModel, NoSlippage, PercentageSlippage, FixedSlippage, \
|
|
30
|
+
VolumeImpactSlippage, \
|
|
31
|
+
CommissionModel, NoCommission, PercentageCommission, FixedCommission, \
|
|
32
|
+
FillModel, FullFill, VolumeBasedFill, \
|
|
33
|
+
FXRateProvider, StaticFXRateProvider
|
|
28
34
|
from .infrastructure import AzureBlobStorageStateHandler, \
|
|
29
|
-
CSVOHLCVDataProvider, CSVTickerDataProvider, \
|
|
35
|
+
CSVOHLCVDataProvider, CSVTickerDataProvider, CSVURLDataProvider, \
|
|
36
|
+
JSONURLDataProvider, ParquetURLDataProvider, \
|
|
30
37
|
CCXTOHLCVDataProvider, CCXTTickerDataProvider, \
|
|
31
|
-
PandasOHLCVDataProvider, \
|
|
38
|
+
PandasOHLCVDataProvider, OHLCVDataProviderBase, \
|
|
39
|
+
YahooOHLCVDataProvider, \
|
|
40
|
+
AlphaVantageOHLCVDataProvider, PolygonOHLCVDataProvider, \
|
|
32
41
|
AWSS3StorageStateHandler
|
|
33
42
|
from .create_app import create_app
|
|
34
43
|
from .download_data import download, download_v2, DownloadResult, \
|
|
@@ -114,8 +123,13 @@ __all__ = [
|
|
|
114
123
|
'DataType',
|
|
115
124
|
'CSVOHLCVDataProvider',
|
|
116
125
|
'CSVTickerDataProvider',
|
|
117
|
-
|
|
126
|
+
'CSVURLDataProvider', 'JSONURLDataProvider',
|
|
127
|
+
'ParquetURLDataProvider', "CCXTOHLCVDataProvider",
|
|
118
128
|
"CCXTTickerDataProvider",
|
|
129
|
+
"OHLCVDataProviderBase",
|
|
130
|
+
"YahooOHLCVDataProvider",
|
|
131
|
+
"AlphaVantageOHLCVDataProvider",
|
|
132
|
+
"PolygonOHLCVDataProvider",
|
|
119
133
|
"DataProvider",
|
|
120
134
|
"get_annual_volatility",
|
|
121
135
|
"get_sortino_ratio",
|
|
@@ -221,5 +235,23 @@ __all__ = [
|
|
|
221
235
|
"download_v2",
|
|
222
236
|
"DownloadResult",
|
|
223
237
|
"create_data_storage_path",
|
|
224
|
-
"DATA_DIRECTORY"
|
|
238
|
+
"DATA_DIRECTORY",
|
|
239
|
+
"Blotter",
|
|
240
|
+
"DefaultBlotter",
|
|
241
|
+
"SimulationBlotter",
|
|
242
|
+
"Transaction",
|
|
243
|
+
"SlippageModel",
|
|
244
|
+
"NoSlippage",
|
|
245
|
+
"PercentageSlippage",
|
|
246
|
+
"FixedSlippage",
|
|
247
|
+
"VolumeImpactSlippage",
|
|
248
|
+
"CommissionModel",
|
|
249
|
+
"NoCommission",
|
|
250
|
+
"PercentageCommission",
|
|
251
|
+
"FixedCommission",
|
|
252
|
+
"FillModel",
|
|
253
|
+
"FullFill",
|
|
254
|
+
"VolumeBasedFill",
|
|
255
|
+
"FXRateProvider",
|
|
256
|
+
"StaticFXRateProvider",
|
|
225
257
|
]
|
|
@@ -24,7 +24,7 @@ from investing_algorithm_framework.domain import DATABASE_NAME, TimeUnit, \
|
|
|
24
24
|
LAST_SNAPSHOT_DATETIME, BACKTESTING_FLAG, DATA_DIRECTORY
|
|
25
25
|
from investing_algorithm_framework.infrastructure import setup_sqlalchemy, \
|
|
26
26
|
create_all_tables, CCXTOrderExecutor, CCXTPortfolioProvider, \
|
|
27
|
-
|
|
27
|
+
CCXTOHLCVDataProvider, clear_db, \
|
|
28
28
|
PandasOHLCVDataProvider
|
|
29
29
|
from investing_algorithm_framework.services import OrderBacktestService, \
|
|
30
30
|
BacktestPortfolioService, DefaultTradeOrderEvaluator
|
|
@@ -71,10 +71,22 @@ class App:
|
|
|
71
71
|
self._state_handler = state_handler
|
|
72
72
|
self._run_history = None
|
|
73
73
|
self._name = name
|
|
74
|
+
self._blotter = None
|
|
75
|
+
self._fx_rate_provider = None
|
|
76
|
+
self._base_currency = None
|
|
74
77
|
|
|
75
78
|
@property
|
|
76
79
|
def context(self):
|
|
77
|
-
|
|
80
|
+
from investing_algorithm_framework.domain.blotter import \
|
|
81
|
+
DefaultBlotter
|
|
82
|
+
|
|
83
|
+
ctx = self.container.context()
|
|
84
|
+
ctx._blotter = self._blotter \
|
|
85
|
+
if self._blotter is not None else DefaultBlotter()
|
|
86
|
+
ctx._fx_rate_provider = self._fx_rate_provider
|
|
87
|
+
ctx._base_currency = self._base_currency
|
|
88
|
+
|
|
89
|
+
return ctx
|
|
78
90
|
|
|
79
91
|
@property
|
|
80
92
|
def resource_directory_path(self):
|
|
@@ -651,7 +663,9 @@ class App:
|
|
|
651
663
|
.trade_stop_loss_service(),
|
|
652
664
|
trade_take_profit_service=self.container
|
|
653
665
|
.trade_take_profit_service(),
|
|
654
|
-
configuration_service=self.container.configuration_service()
|
|
666
|
+
configuration_service=self.container.configuration_service(),
|
|
667
|
+
blotter=self._blotter,
|
|
668
|
+
context=self.context
|
|
655
669
|
)
|
|
656
670
|
event_loop_service = EventLoopService(
|
|
657
671
|
configuration_service=self.container.configuration_service(),
|
|
@@ -1499,6 +1513,7 @@ class App:
|
|
|
1499
1513
|
checkpoint_batch_size=checkpoint_batch_size,
|
|
1500
1514
|
fill_missing_data=fill_missing_data,
|
|
1501
1515
|
iterative_summary_update=iterative_summary_update,
|
|
1516
|
+
blotter=self._blotter,
|
|
1502
1517
|
)
|
|
1503
1518
|
|
|
1504
1519
|
# Cleanup resources
|
|
@@ -1737,6 +1752,7 @@ class App:
|
|
|
1737
1752
|
trading_symbol=trading_symbol,
|
|
1738
1753
|
fill_missing_data=fill_missing_data,
|
|
1739
1754
|
skip_data_sources_initialization=True,
|
|
1755
|
+
blotter=self._blotter,
|
|
1740
1756
|
)
|
|
1741
1757
|
|
|
1742
1758
|
# Store run history
|
|
@@ -2207,6 +2223,98 @@ class App:
|
|
|
2207
2223
|
)
|
|
2208
2224
|
self.add_market_credential(market_credential)
|
|
2209
2225
|
|
|
2226
|
+
def set_blotter(self, blotter):
|
|
2227
|
+
"""
|
|
2228
|
+
Set a blotter for order book management. The blotter sits
|
|
2229
|
+
between the strategy and the order execution layer, enabling
|
|
2230
|
+
batch ordering, transaction tracking, and custom order routing.
|
|
2231
|
+
|
|
2232
|
+
Args:
|
|
2233
|
+
blotter: Instance of Blotter
|
|
2234
|
+
|
|
2235
|
+
Returns:
|
|
2236
|
+
None
|
|
2237
|
+
"""
|
|
2238
|
+
from investing_algorithm_framework.domain.blotter import Blotter
|
|
2239
|
+
|
|
2240
|
+
if inspect.isclass(blotter):
|
|
2241
|
+
blotter = blotter()
|
|
2242
|
+
|
|
2243
|
+
if not isinstance(blotter, Blotter):
|
|
2244
|
+
raise OperationalException(
|
|
2245
|
+
"Blotter should be an instance of Blotter"
|
|
2246
|
+
)
|
|
2247
|
+
|
|
2248
|
+
self._blotter = blotter
|
|
2249
|
+
|
|
2250
|
+
def get_blotter(self):
|
|
2251
|
+
"""
|
|
2252
|
+
Get the configured blotter.
|
|
2253
|
+
|
|
2254
|
+
Returns:
|
|
2255
|
+
Blotter or None: The configured blotter instance.
|
|
2256
|
+
"""
|
|
2257
|
+
return self._blotter
|
|
2258
|
+
|
|
2259
|
+
def set_base_currency(self, currency: str) -> None:
|
|
2260
|
+
"""
|
|
2261
|
+
Set the base currency for multi-currency portfolio reporting.
|
|
2262
|
+
|
|
2263
|
+
When a base currency is set and an FX rate provider is registered,
|
|
2264
|
+
the framework will automatically convert position values from
|
|
2265
|
+
their local currency to the base currency when computing
|
|
2266
|
+
portfolio totals.
|
|
2267
|
+
|
|
2268
|
+
Args:
|
|
2269
|
+
currency: Currency code (e.g. "EUR", "USD", "GBP").
|
|
2270
|
+
|
|
2271
|
+
Returns:
|
|
2272
|
+
None
|
|
2273
|
+
"""
|
|
2274
|
+
self._base_currency = currency.upper()
|
|
2275
|
+
|
|
2276
|
+
def get_base_currency(self) -> str:
|
|
2277
|
+
"""
|
|
2278
|
+
Get the configured base currency.
|
|
2279
|
+
|
|
2280
|
+
Returns:
|
|
2281
|
+
str or None: The base currency code, or None if not set.
|
|
2282
|
+
"""
|
|
2283
|
+
return self._base_currency
|
|
2284
|
+
|
|
2285
|
+
def add_fx_rate_provider(self, fx_rate_provider) -> None:
|
|
2286
|
+
"""
|
|
2287
|
+
Register an FX rate provider for multi-currency portfolio
|
|
2288
|
+
support. The provider supplies exchange rates between
|
|
2289
|
+
currency pairs.
|
|
2290
|
+
|
|
2291
|
+
Args:
|
|
2292
|
+
fx_rate_provider: Instance of FXRateProvider.
|
|
2293
|
+
|
|
2294
|
+
Returns:
|
|
2295
|
+
None
|
|
2296
|
+
"""
|
|
2297
|
+
from investing_algorithm_framework.domain.fx import FXRateProvider
|
|
2298
|
+
|
|
2299
|
+
if inspect.isclass(fx_rate_provider):
|
|
2300
|
+
fx_rate_provider = fx_rate_provider()
|
|
2301
|
+
|
|
2302
|
+
if not isinstance(fx_rate_provider, FXRateProvider):
|
|
2303
|
+
raise OperationalException(
|
|
2304
|
+
"FX rate provider should be an instance of FXRateProvider"
|
|
2305
|
+
)
|
|
2306
|
+
|
|
2307
|
+
self._fx_rate_provider = fx_rate_provider
|
|
2308
|
+
|
|
2309
|
+
def get_fx_rate_provider(self):
|
|
2310
|
+
"""
|
|
2311
|
+
Get the configured FX rate provider.
|
|
2312
|
+
|
|
2313
|
+
Returns:
|
|
2314
|
+
FXRateProvider or None: The FX rate provider instance.
|
|
2315
|
+
"""
|
|
2316
|
+
return self._fx_rate_provider
|
|
2317
|
+
|
|
2210
2318
|
def add_order_executor(self, order_executor):
|
|
2211
2319
|
"""
|
|
2212
2320
|
Function to add an order executor to the app. The order executor
|
|
@@ -2284,24 +2392,30 @@ class App:
|
|
|
2284
2392
|
"""
|
|
2285
2393
|
Function to initialize the order executors. This function will
|
|
2286
2394
|
first check if the app is running in backtest mode or not. If it is
|
|
2287
|
-
running in backtest mode, all order executors will be removed
|
|
2288
|
-
|
|
2395
|
+
running in backtest mode, all order executors will be removed
|
|
2396
|
+
(OrderBacktestService handles execution directly) and the
|
|
2397
|
+
SimulationBlotter will be set as the default blotter if no custom
|
|
2398
|
+
blotter has been configured.
|
|
2289
2399
|
|
|
2290
2400
|
If it is not running in backtest mode, it will add the default
|
|
2291
2401
|
CCXTOrderExecutor with a priority 3.
|
|
2292
2402
|
"""
|
|
2403
|
+
from investing_algorithm_framework.domain.blotter import \
|
|
2404
|
+
SimulationBlotter
|
|
2405
|
+
|
|
2293
2406
|
logger.info("Adding order executors")
|
|
2294
2407
|
order_executor_lookup = self.container.order_executor_lookup()
|
|
2295
2408
|
environment = self.config[ENVIRONMENT]
|
|
2296
2409
|
|
|
2297
2410
|
if Environment.BACKTEST.equals(environment):
|
|
2298
|
-
#
|
|
2299
|
-
#
|
|
2300
|
-
# and add a single BacktestOrderExecutor
|
|
2411
|
+
# In backtest mode, OrderBacktestService handles execution
|
|
2412
|
+
# directly — no order executor needed
|
|
2301
2413
|
order_executor_lookup.reset()
|
|
2302
|
-
|
|
2303
|
-
|
|
2304
|
-
|
|
2414
|
+
|
|
2415
|
+
# Auto-set SimulationBlotter for backtesting if no
|
|
2416
|
+
# custom blotter has been configured
|
|
2417
|
+
if self._blotter is None:
|
|
2418
|
+
self._blotter = SimulationBlotter()
|
|
2305
2419
|
else:
|
|
2306
2420
|
order_executor_lookup.add_order_executor(
|
|
2307
2421
|
CCXTOrderExecutor(priority=3)
|
|
@@ -2498,9 +2612,7 @@ class App:
|
|
|
2498
2612
|
environment = self.config[ENVIRONMENT]
|
|
2499
2613
|
|
|
2500
2614
|
if Environment.BACKTEST.equals(environment):
|
|
2501
|
-
#
|
|
2502
|
-
# remove all order executors
|
|
2503
|
-
# and add a single BacktestOrderExecutor
|
|
2615
|
+
# In backtest mode, remove all portfolio providers
|
|
2504
2616
|
portfolio_provider_lookup.reset()
|
|
2505
2617
|
else:
|
|
2506
2618
|
portfolio_provider_lookup.add_portfolio_provider(
|