investing-algorithm-framework 8.2.0__tar.gz → 8.4.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.4.0}/PKG-INFO +49 -18
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/README.md +39 -14
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/__init__.py +37 -5
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/app/app.py +149 -14
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/app/context.py +475 -87
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/app/reporting/templates/dashboard.css +4 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/app/reporting/templates/dashboard_template.html.j2 +31 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/app/strategy.py +26 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/cli/validate_backtest_checkpoints.py +1 -1
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/__init__.py +24 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/backtesting/backtest_run.py +27 -0
- investing_algorithm_framework-8.4.0/investing_algorithm_framework/domain/blotter.py +752 -0
- investing_algorithm_framework-8.4.0/investing_algorithm_framework/domain/fx.py +137 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/models/data/data_source.py +177 -2
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/infrastructure/__init__.py +14 -4
- investing_algorithm_framework-8.4.0/investing_algorithm_framework/infrastructure/data_providers/__init__.py +120 -0
- investing_algorithm_framework-8.4.0/investing_algorithm_framework/infrastructure/data_providers/alpha_vantage.py +170 -0
- investing_algorithm_framework-8.4.0/investing_algorithm_framework/infrastructure/data_providers/base_url.py +372 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/infrastructure/data_providers/csv.py +3 -2
- investing_algorithm_framework-8.4.0/investing_algorithm_framework/infrastructure/data_providers/csv_url.py +33 -0
- investing_algorithm_framework-8.4.0/investing_algorithm_framework/infrastructure/data_providers/json_url.py +53 -0
- investing_algorithm_framework-8.4.0/investing_algorithm_framework/infrastructure/data_providers/ohlcv_base.py +587 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/infrastructure/data_providers/pandas.py +7 -5
- investing_algorithm_framework-8.4.0/investing_algorithm_framework/infrastructure/data_providers/parquet_url.py +36 -0
- investing_algorithm_framework-8.4.0/investing_algorithm_framework/infrastructure/data_providers/polygon.py +137 -0
- investing_algorithm_framework-8.4.0/investing_algorithm_framework/infrastructure/data_providers/yahoo.py +134 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/infrastructure/database/__init__.py +2 -1
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/infrastructure/database/sql_alchemy.py +33 -7
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/infrastructure/order_executors/__init__.py +0 -2
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/infrastructure/services/backtesting/backtest_service.py +5 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/infrastructure/services/backtesting/event_backtest_service.py +5 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/infrastructure/services/backtesting/vector_backtest_service.py +32 -0
- investing_algorithm_framework-8.4.0/investing_algorithm_framework/services/metrics/risk_free_rate.py +49 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/services/order_service/order_backtest_service.py +0 -1
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.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.4.0}/investing_algorithm_framework/services/trade_order_evaluator/trade_order_evaluator.py +16 -3
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/pyproject.toml +12 -4
- 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.4.0}/LICENSE +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/analysis/__init__.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/analysis/backtest_data_ranges.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/analysis/markdown.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/analysis/ranking.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/app/__init__.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/app/algorithm/__init__.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/app/algorithm/algorithm.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/app/algorithm/algorithm_factory.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/app/app_hook.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/app/eventloop.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/app/reporting/__init__.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/app/reporting/ascii.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/app/reporting/backtest_report.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/app/reporting/backtest_report_old.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/app/reporting/charts/__init__.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/app/reporting/charts/entry_exist_signals.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/app/reporting/charts/equity_curve.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/app/reporting/charts/equity_curve_drawdown.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/app/reporting/charts/line_chart.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/app/reporting/charts/monthly_returns_heatmap.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/app/reporting/charts/ohlcv_data_completeness.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/app/reporting/charts/rolling_sharp_ratio.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/app/reporting/charts/yearly_returns_barchart.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/app/reporting/generate.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/app/reporting/tables/__init__.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/app/reporting/tables/key_metrics_table.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/app/reporting/tables/stop_loss_table.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/app/reporting/tables/time_metrics_table.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/app/reporting/tables/trade_metrics_table.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/app/reporting/tables/trades_table.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/app/reporting/tables/utils.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/app/reporting/templates/dashboard.js +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/app/reporting/templates/report_template.html.j2 +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/app/stateless/__init__.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/app/stateless/action_handlers/__init__.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/app/stateless/action_handlers/action_handler_strategy.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/app/stateless/action_handlers/check_online_handler.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/app/stateless/action_handlers/run_strategy_handler.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/app/stateless/exception_handler.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/app/task.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/app/web/__init__.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/app/web/controllers/__init__.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/app/web/controllers/orders.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/app/web/controllers/portfolio.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/app/web/controllers/positions.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/app/web/create_app.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/app/web/error_handler.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/app/web/responses.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/app/web/run_strategies.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/app/web/schemas/__init__.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/app/web/schemas/order.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/app/web/schemas/portfolio.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/app/web/schemas/position.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/app/web/setup_cors.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/cli/__init__.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/cli/cli.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/cli/deploy_to_aws_lambda.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/cli/deploy_to_azure_function.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/cli/initialize_app.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/cli/mcp_server.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/cli/templates/.gitignore.template +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/cli/templates/app.py.template +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/cli/templates/app_aws_lambda_function.py.template +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/cli/templates/app_azure_function.py.template +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/cli/templates/app_web.py.template +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/cli/templates/aws_lambda_dockerfile.template +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/cli/templates/aws_lambda_dockerignore.template +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/cli/templates/aws_lambda_readme.md.template +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/cli/templates/aws_lambda_requirements.txt.template +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/cli/templates/azure_function_function_app.py.template +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/cli/templates/azure_function_host.json.template +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/cli/templates/azure_function_local.settings.json.template +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/cli/templates/azure_function_requirements.txt.template +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/cli/templates/data_providers.py.template +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/cli/templates/env.example.template +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/cli/templates/env_azure_function.example.template +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/cli/templates/market_data_providers.py.template +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/cli/templates/readme.md.template +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/cli/templates/requirements.txt.template +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/cli/templates/run_backtest.py.template +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/cli/templates/strategy.py.template +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/create_app.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/dependency_container.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/algorithm_id.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/backtesting/__init__.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/backtesting/backtest.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/backtesting/backtest_date_range.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/backtesting/backtest_evaluation_focuss.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/backtesting/backtest_metrics.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/backtesting/backtest_permutation_test.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/backtesting/backtest_summary_metrics.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/backtesting/backtest_utils.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/backtesting/combine_backtests.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/backtesting/templates/backtest.html +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/backtesting/templates/finterion-dark.png +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/backtesting/templates/finterion-light.png +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/config.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/constants.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/data_provider.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/data_structures.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/decimal_parsing.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/exceptions.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/models/__init__.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/models/app_mode.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/models/base_model.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/models/data/__init__.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/models/data/data_type.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/models/event.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/models/market/__init__.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/models/market/market_credential.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/models/order/__init__.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/models/order/order.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/models/order/order_side.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/models/order/order_status.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/models/order/order_type.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/models/portfolio/__init__.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/models/portfolio/portfolio.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/models/portfolio/portfolio_configuration.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/models/portfolio/portfolio_snapshot.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/models/position/__init__.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/models/position/position.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/models/position/position_size.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/models/position/position_snapshot.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/models/risk_rules/__init__.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/models/risk_rules/scaling_rule.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/models/risk_rules/stop_loss_rule.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/models/risk_rules/take_profit_rule.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/models/risk_rules/trading_cost.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/models/snapshot_interval.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/models/strategy_profile.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/models/time_frame.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/models/time_interval.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/models/time_unit.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/models/tracing/__init__.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/models/tracing/trace.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/models/trade/__init__.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/models/trade/trade.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/models/trade/trade_status.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/models/trade/trade_stop_loss.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/models/trade/trade_take_profit.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/order_executor.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/portfolio_provider.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/services/__init__.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/services/market_credential_service.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/services/portfolios/__init__.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/services/portfolios/portfolio_sync_service.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/services/rounding_service.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/services/state_handler.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/stateless_actions.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/strategy.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/utils/__init__.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/utils/csv.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/utils/custom_tqdm.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/utils/dates.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/utils/jupyter_notebook_detection.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/utils/polars.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/utils/random.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/utils/signatures.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/utils/stoppable_thread.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/utils/synchronized.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/download_data.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/infrastructure/data_providers/ccxt.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/infrastructure/models/__init__.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/infrastructure/models/decimal_parser.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/infrastructure/models/model_extension.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/infrastructure/models/order/__init__.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/infrastructure/models/order/order.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/infrastructure/models/order/trade_allocation.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/infrastructure/models/order_trade_association.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/infrastructure/models/portfolio/__init__.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/infrastructure/models/portfolio/portfolio_snapshot.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/infrastructure/models/portfolio/sql_portfolio.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/infrastructure/models/position/__init__.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/infrastructure/models/position/position.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/infrastructure/models/position/position_snapshot.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/infrastructure/models/trades/__init__.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/infrastructure/models/trades/trade.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/infrastructure/models/trades/trade_stop_loss.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/infrastructure/models/trades/trade_take_profit.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/infrastructure/order_executors/ccxt_order_executor.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/infrastructure/portfolio_providers/__init__.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/infrastructure/portfolio_providers/ccxt_portfolio_provider.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/infrastructure/repositories/__init__.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/infrastructure/repositories/order_repository.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/infrastructure/repositories/portfolio_repository.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/infrastructure/repositories/portfolio_snapshot_repository.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/infrastructure/repositories/position_repository.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/infrastructure/repositories/position_snapshot_repository.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/infrastructure/repositories/repository.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/infrastructure/repositories/trade_allocation_repository.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/infrastructure/repositories/trade_repository.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/infrastructure/repositories/trade_stop_loss_repository.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/infrastructure/repositories/trade_take_profit_repository.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/infrastructure/services/__init__.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/infrastructure/services/aws/__init__.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/infrastructure/services/aws/state_handler.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/infrastructure/services/azure/__init__.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/infrastructure/services/azure/state_handler.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/infrastructure/services/backtesting/__init__.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/services/__init__.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/services/configuration_service.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/services/data_providers/__init__.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/services/data_providers/data.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/services/data_providers/data_provider_service.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/services/market_credential_service.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/services/metrics/__init__.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/services/metrics/alpha.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/services/metrics/beta.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/services/metrics/cagr.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/services/metrics/calmar_ratio.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/services/metrics/drawdown.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/services/metrics/equity_curve.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/services/metrics/exposure.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/services/metrics/generate.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/services/metrics/mean_daily_return.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/services/metrics/price_efficiency.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/services/metrics/profit_factor.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/services/metrics/recovery.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/services/metrics/returns.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/services/metrics/sharpe_ratio.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/services/metrics/sortino_ratio.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/services/metrics/standard_deviation.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/services/metrics/trades.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/services/metrics/treynor_ratio.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/services/metrics/ulcer.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/services/metrics/value_at_risk.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/services/metrics/volatility.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/services/metrics/win_rate.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/services/order_service/__init__.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/services/order_service/order_executor_lookup.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/services/order_service/order_service.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/services/portfolios/__init__.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/services/portfolios/backtest_portfolio_service.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/services/portfolios/portfolio_configuration_service.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/services/portfolios/portfolio_provider_lookup.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/services/portfolios/portfolio_service.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/services/portfolios/portfolio_snapshot_service.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/services/portfolios/portfolio_sync_service.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/services/positions/__init__.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/services/positions/position_service.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/services/positions/position_snapshot_service.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/services/repository_service.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/services/trade_order_evaluator/__init__.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.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.4.0}/investing_algorithm_framework/services/trade_service/__init__.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/services/trade_service/trade_service.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/services/trade_service/trade_stop_loss_service.py +0 -0
- {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.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.4.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
|
-
Requires-Dist: Flask-Cors (>=3.0.9,<
|
|
16
|
+
Requires-Dist: Flask-Cors (>=3.0.9,<7.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">
|
|
@@ -38,12 +44,28 @@ Description-Content-Type: text/markdown
|
|
|
38
44
|
</h1>
|
|
39
45
|
|
|
40
46
|
<p align="center">
|
|
41
|
-
<i align="center">Create trading strategies. Compare them side by side. Pick the best one
|
|
47
|
+
<i align="center">Create trading strategies. Compare them side by side. Pick the best one and Deploy 🚀</i>
|
|
42
48
|
</p>
|
|
43
49
|
|
|
44
50
|
<h4 align="center">
|
|
45
|
-
<a href="https://github.com/coding-kitties/investing-algorithm-framework/actions/workflows/test.yml">
|
|
46
|
-
<img src="https://img.shields.io/github/actions/workflow/status/coding-kitties/investing-algorithm-framework/test.yml?branch=
|
|
51
|
+
<a href="https://github.com/coding-kitties/investing-algorithm-framework/actions/workflows/test.yml?query=branch%3Amain">
|
|
52
|
+
<img src="https://img.shields.io/github/actions/workflow/status/coding-kitties/investing-algorithm-framework/test.yml?branch=main&label=linux%20(main)&style=flat-square&logo=linux&logoColor=white" alt="linux main" style="height: 20px;">
|
|
53
|
+
</a>
|
|
54
|
+
<a href="https://github.com/coding-kitties/investing-algorithm-framework/actions/workflows/test.yml?query=branch%3Amain">
|
|
55
|
+
<img src="https://img.shields.io/github/actions/workflow/status/coding-kitties/investing-algorithm-framework/test.yml?branch=main&label=macos%20(main)&style=flat-square&logo=apple&logoColor=white" alt="macos main" style="height: 20px;">
|
|
56
|
+
</a>
|
|
57
|
+
<a href="https://github.com/coding-kitties/investing-algorithm-framework/actions/workflows/test.yml?query=branch%3Amain">
|
|
58
|
+
<img src="https://img.shields.io/github/actions/workflow/status/coding-kitties/investing-algorithm-framework/test.yml?branch=main&label=windows%20(main)&style=flat-square&logo=windows&logoColor=white" alt="windows main" style="height: 20px;">
|
|
59
|
+
</a>
|
|
60
|
+
<br>
|
|
61
|
+
<a href="https://github.com/coding-kitties/investing-algorithm-framework/actions/workflows/test.yml?query=branch%3Adev">
|
|
62
|
+
<img src="https://img.shields.io/github/actions/workflow/status/coding-kitties/investing-algorithm-framework/test.yml?branch=dev&label=linux%20(dev)&style=flat-square&logo=linux&logoColor=white" alt="linux dev" style="height: 20px;">
|
|
63
|
+
</a>
|
|
64
|
+
<a href="https://github.com/coding-kitties/investing-algorithm-framework/actions/workflows/test.yml?query=branch%3Adev">
|
|
65
|
+
<img src="https://img.shields.io/github/actions/workflow/status/coding-kitties/investing-algorithm-framework/test.yml?branch=dev&label=macos%20(dev)&style=flat-square&logo=apple&logoColor=white" alt="macos dev" style="height: 20px;">
|
|
66
|
+
</a>
|
|
67
|
+
<a href="https://github.com/coding-kitties/investing-algorithm-framework/actions/workflows/test.yml?query=branch%3Adev">
|
|
68
|
+
<img src="https://img.shields.io/github/actions/workflow/status/coding-kitties/investing-algorithm-framework/test.yml?branch=dev&label=windows%20(dev)&style=flat-square&logo=windows&logoColor=white" alt="windows dev" style="height: 20px;">
|
|
47
69
|
</a>
|
|
48
70
|
<a href="https://pypi.org/project/investing-algorithm-framework/">
|
|
49
71
|
<img src="https://img.shields.io/pypi/v/investing-algorithm-framework.svg?style=flat-square" alt="pypi" style="height: 20px;">
|
|
@@ -96,7 +118,7 @@ Description-Content-Type: text/markdown
|
|
|
96
118
|
|
|
97
119
|
Most quant frameworks stop at "here's your backtest result." You get a number, maybe a chart, and then you're on your own figuring out which strategy is actually better.
|
|
98
120
|
|
|
99
|
-
This framework is built around the full loop: **create strategies → backtest
|
|
121
|
+
This framework is built around the full loop: **create strategies → vector backtest for signals analysis → compare them in a single report → event backtest the most promising strategies → deploy the winner.** It generates a self-contained HTML dashboard that lets you rank, filter, and visually compare every strategy you've tested — all in one view, no notebooks required.
|
|
100
122
|
|
|
101
123
|
<details open>
|
|
102
124
|
<summary>
|
|
@@ -104,6 +126,10 @@ This framework is built around the full loop: **create strategies → backtest t
|
|
|
104
126
|
</summary> <br>
|
|
105
127
|
|
|
106
128
|
- 📊 **30+ Metrics** — CAGR, Sharpe, Sortino, Calmar, VaR, CVaR, Max DD, Recovery & more
|
|
129
|
+
- ⚡ **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
|
|
130
|
+
- 🏃 **Event-Driven Backtesting** — Once promising strategies are identified via vector backtests, run full event-driven backtests to simulate realistic execution and portfolio management
|
|
131
|
+
- 🔀 **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
|
|
132
|
+
- 🚀 **Deployment** — Once the best strategy is identified through backtesting and comparison, deploy it to production locally or in the cloud (AWS Lambda / Azure Functions) to start live trading
|
|
107
133
|
- ⚔️ **Multi-Strategy Comparison** — Rank, filter & compare strategies in a single interactive report
|
|
108
134
|
- 🪟 **Multi-Window Robustness** — Test across different time periods with window coverage analysis
|
|
109
135
|
- 📈 **Equity & Drawdown Charts** — Overlay equity curves, rolling Sharpe, drawdown & return distributions
|
|
@@ -111,7 +137,9 @@ This framework is built around the full loop: **create strategies → backtest t
|
|
|
111
137
|
- 🎯 **Return Scenario Projections** — Good, average, bad & very bad year projections from backtest data
|
|
112
138
|
- 📉 **Benchmark Comparison** — Beat-rate analysis vs Buy & Hold, DCA, risk-free & custom benchmarks
|
|
113
139
|
- 📄 **One-Click HTML Report** — Self-contained file, no server, dark & light theme, shareable
|
|
114
|
-
-
|
|
140
|
+
- 🌐 **Load External Data** — Fetch CSV, JSON, or Parquet from any URL with caching and auto-refresh
|
|
141
|
+
- � **[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()`
|
|
142
|
+
- �🚀 **Build → Backtest → Deploy** — Local dev, cloud deploy (AWS / Azure), or monetize on Finterion
|
|
115
143
|
|
|
116
144
|
</details>
|
|
117
145
|
|
|
@@ -297,15 +325,18 @@ report.save("my_report.html")
|
|
|
297
325
|
|
|
298
326
|
| | |
|
|
299
327
|
|---|---|
|
|
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 |
|
|
328
|
+
| **[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 |
|
|
329
|
+
| **[Event-Driven Backtesting](https://coding-kitties.github.io/investing-algorithm-framework/Getting%20Started/backtesting)** | Realistic, order-by-order simulation |
|
|
330
|
+
| **[Vectorized Backtesting](https://coding-kitties.github.io/investing-algorithm-framework/Getting%20Started/vector-backtesting)** | Fast signal research and prototyping |
|
|
303
331
|
| **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
|
-
| **
|
|
332
|
+
| **[Live Trading](https://coding-kitties.github.io/investing-algorithm-framework/Getting%20Started/application-setup)** | Connect to exchanges via CCXT for real-time execution |
|
|
333
|
+
| **[Portfolio Management](https://coding-kitties.github.io/investing-algorithm-framework/Getting%20Started/portfolio-configuration)** | Position tracking, trade management, persistence |
|
|
334
|
+
| **[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 |
|
|
335
|
+
| **[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 |
|
|
336
|
+
| **[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 |
|
|
337
|
+
| **[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()` |
|
|
338
|
+
| **[Strategies](https://coding-kitties.github.io/investing-algorithm-framework/Getting%20Started/strategies)** | OHLCV, tickers, custom data — Polars and Pandas native |
|
|
339
|
+
| **[Extensible](https://coding-kitties.github.io/investing-algorithm-framework/Advanced%20Concepts/custom-data-providers)** | Custom data providers, order executors, and strategy classes |
|
|
309
340
|
|
|
310
341
|
</details>
|
|
311
342
|
|
|
@@ -338,7 +369,7 @@ python -m unittest discover -s tests
|
|
|
338
369
|
|
|
339
370
|
- [Open an issue](https://github.com/coding-kitties/investing-algorithm-framework/issues/new) for bugs or ideas
|
|
340
371
|
- Read the [Contributing Guide](https://coding-kitties.github.io/investing-algorithm-framework/Contributing%20Guide/contributing)
|
|
341
|
-
- PRs go against the `
|
|
372
|
+
- PRs go against the `dev` branch
|
|
342
373
|
|
|
343
374
|
## Risk Disclaimer
|
|
344
375
|
|
|
@@ -3,12 +3,28 @@
|
|
|
3
3
|
</h1>
|
|
4
4
|
|
|
5
5
|
<p align="center">
|
|
6
|
-
<i align="center">Create trading strategies. Compare them side by side. Pick the best one
|
|
6
|
+
<i align="center">Create trading strategies. Compare them side by side. Pick the best one and Deploy 🚀</i>
|
|
7
7
|
</p>
|
|
8
8
|
|
|
9
9
|
<h4 align="center">
|
|
10
|
-
<a href="https://github.com/coding-kitties/investing-algorithm-framework/actions/workflows/test.yml">
|
|
11
|
-
<img src="https://img.shields.io/github/actions/workflow/status/coding-kitties/investing-algorithm-framework/test.yml?branch=
|
|
10
|
+
<a href="https://github.com/coding-kitties/investing-algorithm-framework/actions/workflows/test.yml?query=branch%3Amain">
|
|
11
|
+
<img src="https://img.shields.io/github/actions/workflow/status/coding-kitties/investing-algorithm-framework/test.yml?branch=main&label=linux%20(main)&style=flat-square&logo=linux&logoColor=white" alt="linux main" style="height: 20px;">
|
|
12
|
+
</a>
|
|
13
|
+
<a href="https://github.com/coding-kitties/investing-algorithm-framework/actions/workflows/test.yml?query=branch%3Amain">
|
|
14
|
+
<img src="https://img.shields.io/github/actions/workflow/status/coding-kitties/investing-algorithm-framework/test.yml?branch=main&label=macos%20(main)&style=flat-square&logo=apple&logoColor=white" alt="macos main" style="height: 20px;">
|
|
15
|
+
</a>
|
|
16
|
+
<a href="https://github.com/coding-kitties/investing-algorithm-framework/actions/workflows/test.yml?query=branch%3Amain">
|
|
17
|
+
<img src="https://img.shields.io/github/actions/workflow/status/coding-kitties/investing-algorithm-framework/test.yml?branch=main&label=windows%20(main)&style=flat-square&logo=windows&logoColor=white" alt="windows main" style="height: 20px;">
|
|
18
|
+
</a>
|
|
19
|
+
<br>
|
|
20
|
+
<a href="https://github.com/coding-kitties/investing-algorithm-framework/actions/workflows/test.yml?query=branch%3Adev">
|
|
21
|
+
<img src="https://img.shields.io/github/actions/workflow/status/coding-kitties/investing-algorithm-framework/test.yml?branch=dev&label=linux%20(dev)&style=flat-square&logo=linux&logoColor=white" alt="linux dev" style="height: 20px;">
|
|
22
|
+
</a>
|
|
23
|
+
<a href="https://github.com/coding-kitties/investing-algorithm-framework/actions/workflows/test.yml?query=branch%3Adev">
|
|
24
|
+
<img src="https://img.shields.io/github/actions/workflow/status/coding-kitties/investing-algorithm-framework/test.yml?branch=dev&label=macos%20(dev)&style=flat-square&logo=apple&logoColor=white" alt="macos dev" style="height: 20px;">
|
|
25
|
+
</a>
|
|
26
|
+
<a href="https://github.com/coding-kitties/investing-algorithm-framework/actions/workflows/test.yml?query=branch%3Adev">
|
|
27
|
+
<img src="https://img.shields.io/github/actions/workflow/status/coding-kitties/investing-algorithm-framework/test.yml?branch=dev&label=windows%20(dev)&style=flat-square&logo=windows&logoColor=white" alt="windows dev" style="height: 20px;">
|
|
12
28
|
</a>
|
|
13
29
|
<a href="https://pypi.org/project/investing-algorithm-framework/">
|
|
14
30
|
<img src="https://img.shields.io/pypi/v/investing-algorithm-framework.svg?style=flat-square" alt="pypi" style="height: 20px;">
|
|
@@ -61,7 +77,7 @@
|
|
|
61
77
|
|
|
62
78
|
Most quant frameworks stop at "here's your backtest result." You get a number, maybe a chart, and then you're on your own figuring out which strategy is actually better.
|
|
63
79
|
|
|
64
|
-
This framework is built around the full loop: **create strategies → backtest
|
|
80
|
+
This framework is built around the full loop: **create strategies → vector backtest for signals analysis → compare them in a single report → event backtest the most promising strategies → deploy the winner.** It generates a self-contained HTML dashboard that lets you rank, filter, and visually compare every strategy you've tested — all in one view, no notebooks required.
|
|
65
81
|
|
|
66
82
|
<details open>
|
|
67
83
|
<summary>
|
|
@@ -69,6 +85,10 @@ This framework is built around the full loop: **create strategies → backtest t
|
|
|
69
85
|
</summary> <br>
|
|
70
86
|
|
|
71
87
|
- 📊 **30+ Metrics** — CAGR, Sharpe, Sortino, Calmar, VaR, CVaR, Max DD, Recovery & more
|
|
88
|
+
- ⚡ **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
|
|
89
|
+
- 🏃 **Event-Driven Backtesting** — Once promising strategies are identified via vector backtests, run full event-driven backtests to simulate realistic execution and portfolio management
|
|
90
|
+
- 🔀 **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
|
|
91
|
+
- 🚀 **Deployment** — Once the best strategy is identified through backtesting and comparison, deploy it to production locally or in the cloud (AWS Lambda / Azure Functions) to start live trading
|
|
72
92
|
- ⚔️ **Multi-Strategy Comparison** — Rank, filter & compare strategies in a single interactive report
|
|
73
93
|
- 🪟 **Multi-Window Robustness** — Test across different time periods with window coverage analysis
|
|
74
94
|
- 📈 **Equity & Drawdown Charts** — Overlay equity curves, rolling Sharpe, drawdown & return distributions
|
|
@@ -76,7 +96,9 @@ This framework is built around the full loop: **create strategies → backtest t
|
|
|
76
96
|
- 🎯 **Return Scenario Projections** — Good, average, bad & very bad year projections from backtest data
|
|
77
97
|
- 📉 **Benchmark Comparison** — Beat-rate analysis vs Buy & Hold, DCA, risk-free & custom benchmarks
|
|
78
98
|
- 📄 **One-Click HTML Report** — Self-contained file, no server, dark & light theme, shareable
|
|
79
|
-
-
|
|
99
|
+
- 🌐 **Load External Data** — Fetch CSV, JSON, or Parquet from any URL with caching and auto-refresh
|
|
100
|
+
- � **[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()`
|
|
101
|
+
- �🚀 **Build → Backtest → Deploy** — Local dev, cloud deploy (AWS / Azure), or monetize on Finterion
|
|
80
102
|
|
|
81
103
|
</details>
|
|
82
104
|
|
|
@@ -262,15 +284,18 @@ report.save("my_report.html")
|
|
|
262
284
|
|
|
263
285
|
| | |
|
|
264
286
|
|---|---|
|
|
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 |
|
|
287
|
+
| **[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 |
|
|
288
|
+
| **[Event-Driven Backtesting](https://coding-kitties.github.io/investing-algorithm-framework/Getting%20Started/backtesting)** | Realistic, order-by-order simulation |
|
|
289
|
+
| **[Vectorized Backtesting](https://coding-kitties.github.io/investing-algorithm-framework/Getting%20Started/vector-backtesting)** | Fast signal research and prototyping |
|
|
268
290
|
| **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
|
-
| **
|
|
291
|
+
| **[Live Trading](https://coding-kitties.github.io/investing-algorithm-framework/Getting%20Started/application-setup)** | Connect to exchanges via CCXT for real-time execution |
|
|
292
|
+
| **[Portfolio Management](https://coding-kitties.github.io/investing-algorithm-framework/Getting%20Started/portfolio-configuration)** | Position tracking, trade management, persistence |
|
|
293
|
+
| **[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 |
|
|
294
|
+
| **[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 |
|
|
295
|
+
| **[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 |
|
|
296
|
+
| **[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()` |
|
|
297
|
+
| **[Strategies](https://coding-kitties.github.io/investing-algorithm-framework/Getting%20Started/strategies)** | OHLCV, tickers, custom data — Polars and Pandas native |
|
|
298
|
+
| **[Extensible](https://coding-kitties.github.io/investing-algorithm-framework/Advanced%20Concepts/custom-data-providers)** | Custom data providers, order executors, and strategy classes |
|
|
274
299
|
|
|
275
300
|
</details>
|
|
276
301
|
|
|
@@ -303,7 +328,7 @@ python -m unittest discover -s tests
|
|
|
303
328
|
|
|
304
329
|
- [Open an issue](https://github.com/coding-kitties/investing-algorithm-framework/issues/new) for bugs or ideas
|
|
305
330
|
- Read the [Contributing Guide](https://coding-kitties.github.io/investing-algorithm-framework/Contributing%20Guide/contributing)
|
|
306
|
-
- PRs go against the `
|
|
331
|
+
- PRs go against the `dev` branch
|
|
307
332
|
|
|
308
333
|
## Risk Disclaimer
|
|
309
334
|
|
|
@@ -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):
|
|
@@ -356,6 +368,29 @@ class App:
|
|
|
356
368
|
logger.info(
|
|
357
369
|
f"Removing existing database at {database_path}"
|
|
358
370
|
)
|
|
371
|
+
|
|
372
|
+
# Dispose the existing engine to release file locks
|
|
373
|
+
# (required on Windows where locks are mandatory)
|
|
374
|
+
from investing_algorithm_framework.infrastructure.database \
|
|
375
|
+
import Session
|
|
376
|
+
from sqlalchemy.orm import close_all_sessions
|
|
377
|
+
close_all_sessions()
|
|
378
|
+
bind = Session.kw.get("bind")
|
|
379
|
+
|
|
380
|
+
if bind is not None:
|
|
381
|
+
|
|
382
|
+
try:
|
|
383
|
+
conn = bind.connect()
|
|
384
|
+
conn.invalidate()
|
|
385
|
+
conn.close()
|
|
386
|
+
except Exception:
|
|
387
|
+
pass
|
|
388
|
+
|
|
389
|
+
bind.dispose()
|
|
390
|
+
|
|
391
|
+
import gc
|
|
392
|
+
gc.collect()
|
|
393
|
+
|
|
359
394
|
os.remove(database_path)
|
|
360
395
|
|
|
361
396
|
# Create the sqlalchemy database uri
|
|
@@ -651,7 +686,9 @@ class App:
|
|
|
651
686
|
.trade_stop_loss_service(),
|
|
652
687
|
trade_take_profit_service=self.container
|
|
653
688
|
.trade_take_profit_service(),
|
|
654
|
-
configuration_service=self.container.configuration_service()
|
|
689
|
+
configuration_service=self.container.configuration_service(),
|
|
690
|
+
blotter=self._blotter,
|
|
691
|
+
context=self.context
|
|
655
692
|
)
|
|
656
693
|
event_loop_service = EventLoopService(
|
|
657
694
|
configuration_service=self.container.configuration_service(),
|
|
@@ -1499,6 +1536,7 @@ class App:
|
|
|
1499
1536
|
checkpoint_batch_size=checkpoint_batch_size,
|
|
1500
1537
|
fill_missing_data=fill_missing_data,
|
|
1501
1538
|
iterative_summary_update=iterative_summary_update,
|
|
1539
|
+
blotter=self._blotter,
|
|
1502
1540
|
)
|
|
1503
1541
|
|
|
1504
1542
|
# Cleanup resources
|
|
@@ -1737,6 +1775,7 @@ class App:
|
|
|
1737
1775
|
trading_symbol=trading_symbol,
|
|
1738
1776
|
fill_missing_data=fill_missing_data,
|
|
1739
1777
|
skip_data_sources_initialization=True,
|
|
1778
|
+
blotter=self._blotter,
|
|
1740
1779
|
)
|
|
1741
1780
|
|
|
1742
1781
|
# Store run history
|
|
@@ -2207,6 +2246,98 @@ class App:
|
|
|
2207
2246
|
)
|
|
2208
2247
|
self.add_market_credential(market_credential)
|
|
2209
2248
|
|
|
2249
|
+
def set_blotter(self, blotter):
|
|
2250
|
+
"""
|
|
2251
|
+
Set a blotter for order book management. The blotter sits
|
|
2252
|
+
between the strategy and the order execution layer, enabling
|
|
2253
|
+
batch ordering, transaction tracking, and custom order routing.
|
|
2254
|
+
|
|
2255
|
+
Args:
|
|
2256
|
+
blotter: Instance of Blotter
|
|
2257
|
+
|
|
2258
|
+
Returns:
|
|
2259
|
+
None
|
|
2260
|
+
"""
|
|
2261
|
+
from investing_algorithm_framework.domain.blotter import Blotter
|
|
2262
|
+
|
|
2263
|
+
if inspect.isclass(blotter):
|
|
2264
|
+
blotter = blotter()
|
|
2265
|
+
|
|
2266
|
+
if not isinstance(blotter, Blotter):
|
|
2267
|
+
raise OperationalException(
|
|
2268
|
+
"Blotter should be an instance of Blotter"
|
|
2269
|
+
)
|
|
2270
|
+
|
|
2271
|
+
self._blotter = blotter
|
|
2272
|
+
|
|
2273
|
+
def get_blotter(self):
|
|
2274
|
+
"""
|
|
2275
|
+
Get the configured blotter.
|
|
2276
|
+
|
|
2277
|
+
Returns:
|
|
2278
|
+
Blotter or None: The configured blotter instance.
|
|
2279
|
+
"""
|
|
2280
|
+
return self._blotter
|
|
2281
|
+
|
|
2282
|
+
def set_base_currency(self, currency: str) -> None:
|
|
2283
|
+
"""
|
|
2284
|
+
Set the base currency for multi-currency portfolio reporting.
|
|
2285
|
+
|
|
2286
|
+
When a base currency is set and an FX rate provider is registered,
|
|
2287
|
+
the framework will automatically convert position values from
|
|
2288
|
+
their local currency to the base currency when computing
|
|
2289
|
+
portfolio totals.
|
|
2290
|
+
|
|
2291
|
+
Args:
|
|
2292
|
+
currency: Currency code (e.g. "EUR", "USD", "GBP").
|
|
2293
|
+
|
|
2294
|
+
Returns:
|
|
2295
|
+
None
|
|
2296
|
+
"""
|
|
2297
|
+
self._base_currency = currency.upper()
|
|
2298
|
+
|
|
2299
|
+
def get_base_currency(self) -> str:
|
|
2300
|
+
"""
|
|
2301
|
+
Get the configured base currency.
|
|
2302
|
+
|
|
2303
|
+
Returns:
|
|
2304
|
+
str or None: The base currency code, or None if not set.
|
|
2305
|
+
"""
|
|
2306
|
+
return self._base_currency
|
|
2307
|
+
|
|
2308
|
+
def add_fx_rate_provider(self, fx_rate_provider) -> None:
|
|
2309
|
+
"""
|
|
2310
|
+
Register an FX rate provider for multi-currency portfolio
|
|
2311
|
+
support. The provider supplies exchange rates between
|
|
2312
|
+
currency pairs.
|
|
2313
|
+
|
|
2314
|
+
Args:
|
|
2315
|
+
fx_rate_provider: Instance of FXRateProvider.
|
|
2316
|
+
|
|
2317
|
+
Returns:
|
|
2318
|
+
None
|
|
2319
|
+
"""
|
|
2320
|
+
from investing_algorithm_framework.domain.fx import FXRateProvider
|
|
2321
|
+
|
|
2322
|
+
if inspect.isclass(fx_rate_provider):
|
|
2323
|
+
fx_rate_provider = fx_rate_provider()
|
|
2324
|
+
|
|
2325
|
+
if not isinstance(fx_rate_provider, FXRateProvider):
|
|
2326
|
+
raise OperationalException(
|
|
2327
|
+
"FX rate provider should be an instance of FXRateProvider"
|
|
2328
|
+
)
|
|
2329
|
+
|
|
2330
|
+
self._fx_rate_provider = fx_rate_provider
|
|
2331
|
+
|
|
2332
|
+
def get_fx_rate_provider(self):
|
|
2333
|
+
"""
|
|
2334
|
+
Get the configured FX rate provider.
|
|
2335
|
+
|
|
2336
|
+
Returns:
|
|
2337
|
+
FXRateProvider or None: The FX rate provider instance.
|
|
2338
|
+
"""
|
|
2339
|
+
return self._fx_rate_provider
|
|
2340
|
+
|
|
2210
2341
|
def add_order_executor(self, order_executor):
|
|
2211
2342
|
"""
|
|
2212
2343
|
Function to add an order executor to the app. The order executor
|
|
@@ -2284,24 +2415,30 @@ class App:
|
|
|
2284
2415
|
"""
|
|
2285
2416
|
Function to initialize the order executors. This function will
|
|
2286
2417
|
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
|
-
|
|
2418
|
+
running in backtest mode, all order executors will be removed
|
|
2419
|
+
(OrderBacktestService handles execution directly) and the
|
|
2420
|
+
SimulationBlotter will be set as the default blotter if no custom
|
|
2421
|
+
blotter has been configured.
|
|
2289
2422
|
|
|
2290
2423
|
If it is not running in backtest mode, it will add the default
|
|
2291
2424
|
CCXTOrderExecutor with a priority 3.
|
|
2292
2425
|
"""
|
|
2426
|
+
from investing_algorithm_framework.domain.blotter import \
|
|
2427
|
+
SimulationBlotter
|
|
2428
|
+
|
|
2293
2429
|
logger.info("Adding order executors")
|
|
2294
2430
|
order_executor_lookup = self.container.order_executor_lookup()
|
|
2295
2431
|
environment = self.config[ENVIRONMENT]
|
|
2296
2432
|
|
|
2297
2433
|
if Environment.BACKTEST.equals(environment):
|
|
2298
|
-
#
|
|
2299
|
-
#
|
|
2300
|
-
# and add a single BacktestOrderExecutor
|
|
2434
|
+
# In backtest mode, OrderBacktestService handles execution
|
|
2435
|
+
# directly — no order executor needed
|
|
2301
2436
|
order_executor_lookup.reset()
|
|
2302
|
-
|
|
2303
|
-
|
|
2304
|
-
|
|
2437
|
+
|
|
2438
|
+
# Auto-set SimulationBlotter for backtesting if no
|
|
2439
|
+
# custom blotter has been configured
|
|
2440
|
+
if self._blotter is None:
|
|
2441
|
+
self._blotter = SimulationBlotter()
|
|
2305
2442
|
else:
|
|
2306
2443
|
order_executor_lookup.add_order_executor(
|
|
2307
2444
|
CCXTOrderExecutor(priority=3)
|
|
@@ -2498,9 +2635,7 @@ class App:
|
|
|
2498
2635
|
environment = self.config[ENVIRONMENT]
|
|
2499
2636
|
|
|
2500
2637
|
if Environment.BACKTEST.equals(environment):
|
|
2501
|
-
#
|
|
2502
|
-
# remove all order executors
|
|
2503
|
-
# and add a single BacktestOrderExecutor
|
|
2638
|
+
# In backtest mode, remove all portfolio providers
|
|
2504
2639
|
portfolio_provider_lookup.reset()
|
|
2505
2640
|
else:
|
|
2506
2641
|
portfolio_provider_lookup.add_portfolio_provider(
|