investing-algorithm-framework 2.5.2__tar.gz → 7.25.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- investing_algorithm_framework-7.25.0/PKG-INFO +533 -0
- investing_algorithm_framework-7.25.0/README.md +497 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/__init__.py +203 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/app/__init__.py +47 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/app/algorithm/__init__.py +7 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/app/algorithm/algorithm.py +241 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/app/algorithm/algorithm_factory.py +114 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/app/analysis/__init__.py +15 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/app/analysis/algorithm_id.py +40 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/app/analysis/backtest_data_ranges.py +293 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/app/analysis/permutation.py +135 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/app/analysis/ranking.py +298 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/app/app.py +2292 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/app/app_hook.py +28 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/app/context.py +1724 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/app/eventloop.py +620 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/app/reporting/__init__.py +27 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/app/reporting/ascii.py +921 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/app/reporting/backtest_report.py +349 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/app/reporting/charts/__init__.py +19 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/app/reporting/charts/entry_exist_signals.py +66 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/app/reporting/charts/equity_curve.py +37 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/app/reporting/charts/equity_curve_drawdown.py +74 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/app/reporting/charts/line_chart.py +11 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/app/reporting/charts/monthly_returns_heatmap.py +70 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/app/reporting/charts/ohlcv_data_completeness.py +51 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/app/reporting/charts/rolling_sharp_ratio.py +79 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/app/reporting/charts/yearly_returns_barchart.py +55 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/app/reporting/generate.py +185 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/app/reporting/tables/__init__.py +11 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/app/reporting/tables/key_metrics_table.py +217 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/app/reporting/tables/stop_loss_table.py +0 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/app/reporting/tables/time_metrics_table.py +80 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/app/reporting/tables/trade_metrics_table.py +147 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/app/reporting/tables/trades_table.py +75 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/app/reporting/tables/utils.py +29 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/app/reporting/templates/report_template.html.j2 +154 -0
- {investing_algorithm_framework-2.5.2 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/app/stateless/action_handlers/__init__.py +4 -2
- {investing_algorithm_framework-2.5.2 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/app/stateless/action_handlers/action_handler_strategy.py +1 -1
- {investing_algorithm_framework-2.5.2 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/app/stateless/action_handlers/check_online_handler.py +2 -1
- {investing_algorithm_framework-2.5.2 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/app/stateless/action_handlers/run_strategy_handler.py +14 -7
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/app/strategy.py +827 -0
- {investing_algorithm_framework-2.5.2 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/app/task.py +5 -3
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/app/web/__init__.py +5 -0
- {investing_algorithm_framework-2.5.2 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/app/web/controllers/orders.py +3 -2
- {investing_algorithm_framework-2.5.2 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/app/web/create_app.py +4 -2
- {investing_algorithm_framework-2.5.2 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/app/web/schemas/position.py +1 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/cli/__init__.py +0 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/cli/cli.py +231 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/cli/deploy_to_aws_lambda.py +501 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/cli/deploy_to_azure_function.py +718 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/cli/initialize_app.py +603 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/cli/templates/.gitignore.template +178 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/cli/templates/app.py.template +18 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/cli/templates/app_aws_lambda_function.py.template +48 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/cli/templates/app_azure_function.py.template +14 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/cli/templates/app_web.py.template +18 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/cli/templates/aws_lambda_dockerfile.template +22 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/cli/templates/aws_lambda_dockerignore.template +92 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/cli/templates/aws_lambda_readme.md.template +110 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/cli/templates/aws_lambda_requirements.txt.template +2 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/cli/templates/azure_function_function_app.py.template +65 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/cli/templates/azure_function_host.json.template +15 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/cli/templates/azure_function_local.settings.json.template +8 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/cli/templates/azure_function_requirements.txt.template +3 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/cli/templates/data_providers.py.template +17 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/cli/templates/env.example.template +2 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/cli/templates/env_azure_function.example.template +4 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/cli/templates/market_data_providers.py.template +9 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/cli/templates/readme.md.template +135 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/cli/templates/requirements.txt.template +2 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/cli/templates/run_backtest.py.template +20 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/cli/templates/strategy.py.template +124 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/cli/validate_backtest_checkpoints.py +197 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/create_app.py +54 -0
- {investing_algorithm_framework-2.5.2 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/dependency_container.py +87 -53
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/domain/__init__.py +150 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/domain/backtesting/__init__.py +25 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/domain/backtesting/backtest.py +548 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/domain/backtesting/backtest_date_range.py +113 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/domain/backtesting/backtest_evaluation_focuss.py +241 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/domain/backtesting/backtest_metrics.py +470 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/domain/backtesting/backtest_permutation_test.py +275 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/domain/backtesting/backtest_run.py +663 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/domain/backtesting/backtest_summary_metrics.py +162 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/domain/backtesting/backtest_utils.py +198 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/domain/backtesting/combine_backtests.py +290 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/domain/config.py +111 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/domain/constants.py +52 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/domain/data_provider.py +334 -0
- {investing_algorithm_framework-2.5.2 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/domain/data_structures.py +3 -2
- {investing_algorithm_framework-2.5.2 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/domain/exceptions.py +51 -1
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/domain/models/__init__.py +45 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/domain/models/app_mode.py +34 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/domain/models/data/__init__.py +7 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/domain/models/data/data_source.py +222 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/domain/models/data/data_type.py +46 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/domain/models/event.py +35 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/domain/models/market/market_credential.py +88 -0
- {investing_algorithm_framework-2.5.2 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/domain/models/order/__init__.py +3 -4
- {investing_algorithm_framework-2.5.2 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/domain/models/order/order.py +145 -99
- {investing_algorithm_framework-2.5.2 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/domain/models/order/order_status.py +2 -2
- {investing_algorithm_framework-2.5.2 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/domain/models/order/order_type.py +1 -3
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/domain/models/portfolio/portfolio.py +169 -0
- {investing_algorithm_framework-2.5.2 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/domain/models/portfolio/portfolio_configuration.py +30 -6
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/domain/models/portfolio/portfolio_snapshot.py +208 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/domain/models/position/__init__.py +5 -0
- {investing_algorithm_framework-2.5.2 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/domain/models/position/position.py +20 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/domain/models/position/position_size.py +41 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/domain/models/risk_rules/__init__.py +7 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/domain/models/risk_rules/stop_loss_rule.py +51 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/domain/models/risk_rules/take_profit_rule.py +55 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/domain/models/snapshot_interval.py +45 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/domain/models/strategy_profile.py +33 -0
- {investing_algorithm_framework-2.5.2 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/domain/models/time_frame.py +42 -5
- {investing_algorithm_framework-2.5.2 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/domain/models/time_interval.py +33 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/domain/models/time_unit.py +149 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/domain/models/tracing/__init__.py +0 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/domain/models/tracing/trace.py +23 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/domain/models/trade/__init__.py +11 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/domain/models/trade/trade.py +389 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/domain/models/trade/trade_status.py +40 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/domain/models/trade/trade_stop_loss.py +332 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/domain/models/trade/trade_take_profit.py +365 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/domain/order_executor.py +112 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/domain/portfolio_provider.py +118 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/domain/services/__init__.py +11 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/domain/services/market_credential_service.py +37 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/domain/services/portfolios/__init__.py +5 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/domain/services/portfolios/portfolio_sync_service.py +9 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/domain/services/rounding_service.py +27 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/domain/services/state_handler.py +38 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/domain/strategy.py +44 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/domain/utils/__init__.py +27 -0
- {investing_algorithm_framework-2.5.2 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/domain/utils/csv.py +22 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/domain/utils/custom_tqdm.py +22 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/domain/utils/dates.py +57 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/domain/utils/jupyter_notebook_detection.py +19 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/domain/utils/polars.py +53 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/domain/utils/random.py +41 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/download_data.py +108 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/infrastructure/__init__.py +52 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/infrastructure/data_providers/__init__.py +36 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/infrastructure/data_providers/ccxt.py +1152 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/infrastructure/data_providers/csv.py +568 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/infrastructure/data_providers/pandas.py +599 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/infrastructure/database/__init__.py +10 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/infrastructure/database/sql_alchemy.py +127 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/infrastructure/models/__init__.py +16 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/infrastructure/models/order/__init__.py +4 -0
- {investing_algorithm_framework-2.5.2 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/infrastructure/models/order/order.py +53 -54
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/infrastructure/models/order/order_metadata.py +44 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/infrastructure/models/order_trade_association.py +10 -0
- {investing_algorithm_framework-2.5.2 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/infrastructure/models/portfolio/__init__.py +1 -1
- {investing_algorithm_framework-2.5.2 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/infrastructure/models/portfolio/portfolio_snapshot.py +8 -0
- investing_algorithm_framework-2.5.2/investing_algorithm_framework/infrastructure/models/portfolio/portfolio.py → investing_algorithm_framework-7.25.0/investing_algorithm_framework/infrastructure/models/portfolio/sql_portfolio.py +17 -5
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/infrastructure/models/trades/__init__.py +9 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/infrastructure/models/trades/trade.py +130 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/infrastructure/models/trades/trade_stop_loss.py +59 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/infrastructure/models/trades/trade_take_profit.py +55 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/infrastructure/order_executors/__init__.py +21 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/infrastructure/order_executors/backtest_oder_executor.py +28 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/infrastructure/order_executors/ccxt_order_executor.py +200 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/infrastructure/portfolio_providers/__init__.py +19 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/infrastructure/portfolio_providers/ccxt_portfolio_provider.py +199 -0
- {investing_algorithm_framework-2.5.2 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/infrastructure/repositories/__init__.py +10 -4
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/infrastructure/repositories/order_metadata_repository.py +17 -0
- {investing_algorithm_framework-2.5.2 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/infrastructure/repositories/order_repository.py +16 -5
- {investing_algorithm_framework-2.5.2 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/infrastructure/repositories/portfolio_repository.py +1 -1
- {investing_algorithm_framework-2.5.2 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/infrastructure/repositories/position_repository.py +11 -0
- {investing_algorithm_framework-2.5.2 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/infrastructure/repositories/repository.py +84 -30
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/infrastructure/repositories/trade_repository.py +71 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/infrastructure/repositories/trade_stop_loss_repository.py +29 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/infrastructure/repositories/trade_take_profit_repository.py +29 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/infrastructure/services/__init__.py +9 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/infrastructure/services/aws/__init__.py +6 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/infrastructure/services/aws/state_handler.py +193 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/infrastructure/services/azure/__init__.py +5 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/infrastructure/services/azure/state_handler.py +158 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/infrastructure/services/backtesting/__init__.py +5 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/infrastructure/services/backtesting/backtest_service.py +1503 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/infrastructure/services/backtesting/vector_backtest_service.py +393 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/services/__init__.py +135 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/services/configuration_service.py +95 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/services/data_providers/__init__.py +5 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/services/data_providers/data_provider_service.py +1058 -0
- {investing_algorithm_framework-2.5.2 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/services/market_credential_service.py +20 -4
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/services/metrics/__init__.py +118 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/services/metrics/alpha.py +0 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/services/metrics/beta.py +0 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/services/metrics/cagr.py +60 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/services/metrics/calmar_ratio.py +40 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/services/metrics/drawdown.py +181 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/services/metrics/equity_curve.py +24 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/services/metrics/exposure.py +210 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/services/metrics/generate.py +358 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/services/metrics/mean_daily_return.py +84 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/services/metrics/price_efficiency.py +57 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/services/metrics/profit_factor.py +165 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/services/metrics/recovery.py +113 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/services/metrics/returns.py +452 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/services/metrics/risk_free_rate.py +28 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/services/metrics/sharpe_ratio.py +137 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/services/metrics/sortino_ratio.py +74 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/services/metrics/standard_deviation.py +156 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/services/metrics/trades.py +473 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/services/metrics/treynor_ratio.py +0 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/services/metrics/ulcer.py +0 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/services/metrics/value_at_risk.py +0 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/services/metrics/volatility.py +118 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/services/metrics/win_rate.py +177 -0
- {investing_algorithm_framework-2.5.2 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/services/order_service/__init__.py +4 -2
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/services/order_service/order_backtest_service.py +178 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/services/order_service/order_executor_lookup.py +110 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/services/order_service/order_service.py +826 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/services/portfolios/__init__.py +16 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/services/portfolios/backtest_portfolio_service.py +54 -0
- {investing_algorithm_framework-2.5.2/investing_algorithm_framework/services → investing_algorithm_framework-7.25.0/investing_algorithm_framework/services/portfolios}/portfolio_configuration_service.py +22 -8
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/services/portfolios/portfolio_provider_lookup.py +106 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/services/portfolios/portfolio_service.py +188 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/services/portfolios/portfolio_snapshot_service.py +136 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/services/portfolios/portfolio_sync_service.py +182 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/services/positions/__init__.py +7 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/services/positions/position_service.py +210 -0
- {investing_algorithm_framework-2.5.2 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/services/repository_service.py +8 -2
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/services/trade_order_evaluator/__init__.py +9 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/services/trade_order_evaluator/backtest_trade_oder_evaluator.py +113 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/services/trade_order_evaluator/default_trade_order_evaluator.py +51 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/services/trade_order_evaluator/trade_order_evaluator.py +80 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/services/trade_service/__init__.py +9 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/services/trade_service/trade_service.py +1099 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/services/trade_service/trade_stop_loss_service.py +39 -0
- investing_algorithm_framework-7.25.0/investing_algorithm_framework/services/trade_service/trade_take_profit_service.py +41 -0
- investing_algorithm_framework-7.25.0/pyproject.toml +50 -0
- investing_algorithm_framework-2.5.2/PKG-INFO +0 -343
- investing_algorithm_framework-2.5.2/README.md +0 -315
- investing_algorithm_framework-2.5.2/investing_algorithm_framework/__init__.py +0 -52
- investing_algorithm_framework-2.5.2/investing_algorithm_framework/app/__init__.py +0 -15
- investing_algorithm_framework-2.5.2/investing_algorithm_framework/app/algorithm.py +0 -759
- investing_algorithm_framework-2.5.2/investing_algorithm_framework/app/app.py +0 -602
- investing_algorithm_framework-2.5.2/investing_algorithm_framework/app/strategy.py +0 -120
- investing_algorithm_framework-2.5.2/investing_algorithm_framework/app/web/__init__.py +0 -4
- investing_algorithm_framework-2.5.2/investing_algorithm_framework/create_app.py +0 -20
- investing_algorithm_framework-2.5.2/investing_algorithm_framework/domain/__init__.py +0 -99
- investing_algorithm_framework-2.5.2/investing_algorithm_framework/domain/config.py +0 -189
- investing_algorithm_framework-2.5.2/investing_algorithm_framework/domain/constants.py +0 -75
- investing_algorithm_framework-2.5.2/investing_algorithm_framework/domain/models/__init__.py +0 -35
- investing_algorithm_framework-2.5.2/investing_algorithm_framework/domain/models/backtesting/__init__.py +0 -6
- investing_algorithm_framework-2.5.2/investing_algorithm_framework/domain/models/backtesting/backtest_report.py +0 -505
- investing_algorithm_framework-2.5.2/investing_algorithm_framework/domain/models/market/market_credential.py +0 -26
- investing_algorithm_framework-2.5.2/investing_algorithm_framework/domain/models/order/order_fee.py +0 -45
- investing_algorithm_framework-2.5.2/investing_algorithm_framework/domain/models/portfolio/portfolio.py +0 -78
- investing_algorithm_framework-2.5.2/investing_algorithm_framework/domain/models/portfolio/portfolio_snapshot.py +0 -111
- investing_algorithm_framework-2.5.2/investing_algorithm_framework/domain/models/position/__init__.py +0 -4
- investing_algorithm_framework-2.5.2/investing_algorithm_framework/domain/models/strategy_profile.py +0 -165
- investing_algorithm_framework-2.5.2/investing_algorithm_framework/domain/models/time_unit.py +0 -85
- investing_algorithm_framework-2.5.2/investing_algorithm_framework/domain/models/trade.py +0 -177
- investing_algorithm_framework-2.5.2/investing_algorithm_framework/domain/models/trading_data_types.py +0 -47
- investing_algorithm_framework-2.5.2/investing_algorithm_framework/domain/models/trading_time_frame.py +0 -223
- investing_algorithm_framework-2.5.2/investing_algorithm_framework/domain/services/__init__.py +0 -12
- investing_algorithm_framework-2.5.2/investing_algorithm_framework/domain/services/market_data_sources.py +0 -381
- investing_algorithm_framework-2.5.2/investing_algorithm_framework/domain/services/market_service.py +0 -134
- investing_algorithm_framework-2.5.2/investing_algorithm_framework/domain/singleton.py +0 -9
- investing_algorithm_framework-2.5.2/investing_algorithm_framework/domain/strategy.py +0 -72
- investing_algorithm_framework-2.5.2/investing_algorithm_framework/domain/utils/__init__.py +0 -17
- investing_algorithm_framework-2.5.2/investing_algorithm_framework/domain/utils/backtesting.py +0 -132
- investing_algorithm_framework-2.5.2/investing_algorithm_framework/domain/utils/random.py +0 -12
- investing_algorithm_framework-2.5.2/investing_algorithm_framework/infrastructure/__init__.py +0 -39
- investing_algorithm_framework-2.5.2/investing_algorithm_framework/infrastructure/database/__init__.py +0 -6
- investing_algorithm_framework-2.5.2/investing_algorithm_framework/infrastructure/database/sql_alchemy.py +0 -53
- investing_algorithm_framework-2.5.2/investing_algorithm_framework/infrastructure/models/__init__.py +0 -22
- investing_algorithm_framework-2.5.2/investing_algorithm_framework/infrastructure/models/market_data_sources/__init__.py +0 -12
- investing_algorithm_framework-2.5.2/investing_algorithm_framework/infrastructure/models/market_data_sources/ccxt.py +0 -486
- investing_algorithm_framework-2.5.2/investing_algorithm_framework/infrastructure/models/market_data_sources/csv.py +0 -177
- investing_algorithm_framework-2.5.2/investing_algorithm_framework/infrastructure/models/order/__init__.py +0 -4
- investing_algorithm_framework-2.5.2/investing_algorithm_framework/infrastructure/models/order/order_fee.py +0 -21
- investing_algorithm_framework-2.5.2/investing_algorithm_framework/infrastructure/repositories/order_fee_repository.py +0 -15
- investing_algorithm_framework-2.5.2/investing_algorithm_framework/infrastructure/services/__init__.py +0 -7
- investing_algorithm_framework-2.5.2/investing_algorithm_framework/infrastructure/services/market_service/__init__.py +0 -5
- investing_algorithm_framework-2.5.2/investing_algorithm_framework/infrastructure/services/market_service/ccxt_market_service.py +0 -405
- investing_algorithm_framework-2.5.2/investing_algorithm_framework/infrastructure/services/performance_service/__init__.py +0 -7
- investing_algorithm_framework-2.5.2/investing_algorithm_framework/infrastructure/services/performance_service/backtest_performance_service.py +0 -2
- investing_algorithm_framework-2.5.2/investing_algorithm_framework/infrastructure/services/performance_service/performance_service.py +0 -221
- investing_algorithm_framework-2.5.2/investing_algorithm_framework/services/__init__.py +0 -35
- investing_algorithm_framework-2.5.2/investing_algorithm_framework/services/backtesting/__init__.py +0 -8
- investing_algorithm_framework-2.5.2/investing_algorithm_framework/services/backtesting/backtest_report_writer_service.py +0 -37
- investing_algorithm_framework-2.5.2/investing_algorithm_framework/services/backtesting/backtest_service.py +0 -315
- investing_algorithm_framework-2.5.2/investing_algorithm_framework/services/configuration_service.py +0 -29
- investing_algorithm_framework-2.5.2/investing_algorithm_framework/services/market_data_source_service/__init__.py +0 -8
- investing_algorithm_framework-2.5.2/investing_algorithm_framework/services/market_data_source_service/backtest_market_data_source_service.py +0 -128
- investing_algorithm_framework-2.5.2/investing_algorithm_framework/services/market_data_source_service/market_data_source_service.py +0 -164
- investing_algorithm_framework-2.5.2/investing_algorithm_framework/services/order_service/order_backtest_service.py +0 -154
- investing_algorithm_framework-2.5.2/investing_algorithm_framework/services/order_service/order_service.py +0 -767
- investing_algorithm_framework-2.5.2/investing_algorithm_framework/services/portfolio_service/__init__.py +0 -7
- investing_algorithm_framework-2.5.2/investing_algorithm_framework/services/portfolio_service/backtest_portfolio_service.py +0 -20
- investing_algorithm_framework-2.5.2/investing_algorithm_framework/services/portfolio_service/portfolio_service.py +0 -287
- investing_algorithm_framework-2.5.2/investing_algorithm_framework/services/portfolio_snapshot_service.py +0 -67
- investing_algorithm_framework-2.5.2/investing_algorithm_framework/services/position_service.py +0 -74
- investing_algorithm_framework-2.5.2/investing_algorithm_framework/services/strategy_orchestrator_service.py +0 -238
- investing_algorithm_framework-2.5.2/investing_algorithm_framework/services/trade_service/__init__.py +0 -3
- investing_algorithm_framework-2.5.2/investing_algorithm_framework/services/trade_service/trade_service.py +0 -291
- investing_algorithm_framework-2.5.2/pyproject.toml +0 -32
- {investing_algorithm_framework-2.5.2 → investing_algorithm_framework-7.25.0}/LICENSE +0 -0
- {investing_algorithm_framework-2.5.2 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/app/stateless/__init__.py +0 -0
- {investing_algorithm_framework-2.5.2 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/app/stateless/exception_handler.py +0 -0
- {investing_algorithm_framework-2.5.2 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/app/web/controllers/__init__.py +2 -2
- {investing_algorithm_framework-2.5.2 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/app/web/controllers/portfolio.py +0 -0
- {investing_algorithm_framework-2.5.2 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/app/web/controllers/positions.py +2 -2
- {investing_algorithm_framework-2.5.2 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/app/web/error_handler.py +0 -0
- {investing_algorithm_framework-2.5.2 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/app/web/responses.py +0 -0
- {investing_algorithm_framework-2.5.2 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/app/web/run_strategies.py +0 -0
- {investing_algorithm_framework-2.5.2 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/app/web/schemas/__init__.py +0 -0
- {investing_algorithm_framework-2.5.2 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/app/web/schemas/order.py +0 -0
- {investing_algorithm_framework-2.5.2 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/app/web/schemas/portfolio.py +0 -0
- {investing_algorithm_framework-2.5.2 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/app/web/setup_cors.py +0 -0
- {investing_algorithm_framework-2.5.2 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/domain/decimal_parsing.py +0 -0
- {investing_algorithm_framework-2.5.2 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/domain/models/base_model.py +0 -0
- {investing_algorithm_framework-2.5.2 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/domain/models/market/__init__.py +0 -0
- {investing_algorithm_framework-2.5.2 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/domain/models/order/order_side.py +0 -0
- {investing_algorithm_framework-2.5.2 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/domain/models/portfolio/__init__.py +1 -1
- {investing_algorithm_framework-2.5.2 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/domain/models/position/position_snapshot.py +0 -0
- {investing_algorithm_framework-2.5.2 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/domain/stateless_actions.py +0 -0
- {investing_algorithm_framework-2.5.2 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/domain/utils/signatures.py +0 -0
- {investing_algorithm_framework-2.5.2 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/domain/utils/stoppable_thread.py +0 -0
- {investing_algorithm_framework-2.5.2 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/domain/utils/synchronized.py +0 -0
- {investing_algorithm_framework-2.5.2 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/infrastructure/models/decimal_parser.py +0 -0
- {investing_algorithm_framework-2.5.2 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/infrastructure/models/model_extension.py +0 -0
- {investing_algorithm_framework-2.5.2 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/infrastructure/models/position/__init__.py +0 -0
- {investing_algorithm_framework-2.5.2 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/infrastructure/models/position/position.py +0 -0
- {investing_algorithm_framework-2.5.2 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/infrastructure/models/position/position_snapshot.py +0 -0
- {investing_algorithm_framework-2.5.2 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/infrastructure/repositories/portfolio_snapshot_repository.py +0 -0
- {investing_algorithm_framework-2.5.2 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/infrastructure/repositories/position_snapshot_repository.py +0 -0
- {investing_algorithm_framework-2.5.2/investing_algorithm_framework/services → investing_algorithm_framework-7.25.0/investing_algorithm_framework/services/positions}/position_snapshot_service.py +0 -0
|
@@ -0,0 +1,533 @@
|
|
|
1
|
+
Metadata-Version: 2.1
|
|
2
|
+
Name: investing-algorithm-framework
|
|
3
|
+
Version: 7.25.0
|
|
4
|
+
Summary: A framework for creating trading bots
|
|
5
|
+
Author: MDUYN
|
|
6
|
+
Requires-Python: >=3.10
|
|
7
|
+
Classifier: Programming Language :: Python :: 3
|
|
8
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
9
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
10
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
11
|
+
Requires-Dist: Flask (>=3.1.0)
|
|
12
|
+
Requires-Dist: Flask-Cors (>=3.0.9,<5.0.0)
|
|
13
|
+
Requires-Dist: Flask-Migrate (>=2.6.0)
|
|
14
|
+
Requires-Dist: SQLAlchemy (>=2.0.18)
|
|
15
|
+
Requires-Dist: azure-identity (>=1.19.0,<2.0.0)
|
|
16
|
+
Requires-Dist: azure-mgmt-resource (>=23.2.0,<24.0.0)
|
|
17
|
+
Requires-Dist: azure-mgmt-storage (>=21.2.1,<22.0.0)
|
|
18
|
+
Requires-Dist: azure-mgmt-web (>=7.3.1,<8.0.0)
|
|
19
|
+
Requires-Dist: azure-storage-blob (>=12.24.0,<13.0.0)
|
|
20
|
+
Requires-Dist: boto3 (>=1.38.41,<2.0.0)
|
|
21
|
+
Requires-Dist: ccxt (>=4.2.48)
|
|
22
|
+
Requires-Dist: dependency-injector (>=4.40.0)
|
|
23
|
+
Requires-Dist: jupyter (>=1.0.0)
|
|
24
|
+
Requires-Dist: marshmallow (>=3.5.0)
|
|
25
|
+
Requires-Dist: plotly (>=6.1.2,<7.0.0)
|
|
26
|
+
Requires-Dist: polars[numpy,pandas] (>=0.20.10)
|
|
27
|
+
Requires-Dist: python-dateutil (>=2.8.2)
|
|
28
|
+
Requires-Dist: python-dotenv (>=1.0.1,<2.0.0)
|
|
29
|
+
Requires-Dist: schedule (>=1.1.0)
|
|
30
|
+
Requires-Dist: tabulate (>=0.9.0)
|
|
31
|
+
Requires-Dist: tqdm (>=4.66.1)
|
|
32
|
+
Requires-Dist: wrapt (>=1.16.0)
|
|
33
|
+
Requires-Dist: yfinance (>=0.2.61,<0.3.0)
|
|
34
|
+
Description-Content-Type: text/markdown
|
|
35
|
+
|
|
36
|
+
<div align="center">
|
|
37
|
+
<h1>⚡ Investing Algorithm Framework</h1>
|
|
38
|
+
|
|
39
|
+
<p style="font-size: 18px; font-weight: 600; margin: 15px 0;">
|
|
40
|
+
🚀 <b>Build. Backtest. Deploy.</b> Quantitative Trading Strategies at Scale
|
|
41
|
+
</p>
|
|
42
|
+
|
|
43
|
+
<p style="font-size: 14px; color: #666; margin-bottom: 25px;">
|
|
44
|
+
The fastest way to go from trading idea to production-ready trading bot
|
|
45
|
+
</p>
|
|
46
|
+
|
|
47
|
+
<!-- Quick Links -->
|
|
48
|
+
<div style="margin: 20px 0;">
|
|
49
|
+
<a target="_blank" href="https://coding-kitties.github.io/investing-algorithm-framework/">
|
|
50
|
+
<img src="https://img.shields.io/badge/📖_Documentation-blue?style=for-the-badge">
|
|
51
|
+
</a>
|
|
52
|
+
|
|
53
|
+
<a href="https://coding-kitties.github.io/investing-algorithm-framework/Getting%20Started/installation">
|
|
54
|
+
<img src="https://img.shields.io/badge/🚀_Quick_Start-green?style=for-the-badge">
|
|
55
|
+
</a>
|
|
56
|
+
</div>
|
|
57
|
+
|
|
58
|
+
<!-- Badges -->
|
|
59
|
+
<div style="margin-bottom: 20px;">
|
|
60
|
+
<a target="_blank" href="https://discord.gg/dQsRmGZP"><img src="https://img.shields.io/discord/1345358169777635410.svg?color=7289da&label=Discord&logo=discord&style=flat-square" alt="Discord"></a>
|
|
61
|
+
|
|
62
|
+
<a href="https://github.com/coding-kitties/investing-algorithm-framework/actions/workflows/test.yml"><img src="https://github.com/coding-kitties/investing-algorithm-framework/actions/workflows/test.yml/badge.svg?style=flat-square" alt="Tests"></a>
|
|
63
|
+
|
|
64
|
+
<a href="https://pypi.org/project/investing-algorithm-framework/"><img src="https://img.shields.io/pypi/v/investing-algorithm-framework.svg?style=flat-square" alt="PyPI"></a>
|
|
65
|
+
|
|
66
|
+
<a href="https://pepy.tech/project/investing-algorithm-framework"><img src="https://pepy.tech/badge/investing-algorithm-framework/month?style=flat-square" alt="Downloads"></a>
|
|
67
|
+
|
|
68
|
+
<a href="https://github.com/coding-kitties/investing-algorithm-framework/stargazers"><img src="https://img.shields.io/github/stars/coding-kitties/investing-algorithm-framework?style=flat-square" alt="Stars"></a>
|
|
69
|
+
</div>
|
|
70
|
+
|
|
71
|
+
<img src="static/showcase.svg" alt="Investing Algorithm Framework" style="height: 400px; max-width: 100%; margin: 30px 0;">
|
|
72
|
+
|
|
73
|
+
<hr style="margin: 30px 0; border: none; border-top: 2px solid #ddd;">
|
|
74
|
+
|
|
75
|
+
> ⭐ **If you like this project, please consider [starring](https://github.com/coding-kitties/investing-algorithm-framework) it!** Your support helps us build better tools for the community.
|
|
76
|
+
|
|
77
|
+
</div>
|
|
78
|
+
|
|
79
|
+
---
|
|
80
|
+
|
|
81
|
+
## 💡 Why Investing Algorithm Framework?
|
|
82
|
+
|
|
83
|
+
Stop wasting time on boilerplate. The **Investing Algorithm Framework** handles all the heavy lifting:
|
|
84
|
+
|
|
85
|
+
✨ **From Idea to Production** — Write your strategy once, deploy everywhere
|
|
86
|
+
📊 **Accurate Backtesting** — Event-driven and vectorized engines for realistic results
|
|
87
|
+
⚡ **Lightning Fast** — Optimized for speed and efficiency
|
|
88
|
+
🔧 **Extensible** — Connect any exchange, broker, or data source
|
|
89
|
+
📈 **Production Ready** — Built for real money trading
|
|
90
|
+
|
|
91
|
+
## Sponsors
|
|
92
|
+
|
|
93
|
+
<a href="https://www.finterion.com/" target="_blank">
|
|
94
|
+
<picture style="height: 30px;">
|
|
95
|
+
<source media="(prefers-color-scheme: dark)" srcset="static/sponsors/finterion-dark.png">
|
|
96
|
+
<source media="(prefers-color-scheme: light)" srcset="static/sponsors/finterion-light.png">
|
|
97
|
+
<img src="static/sponsors/finterion-light.png" alt="Finterion Logo" width="200px" height="50px">
|
|
98
|
+
</picture>
|
|
99
|
+
</a>
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
## 🔌 Plugins & Integrations
|
|
103
|
+
|
|
104
|
+
Extend your trading bot with powerful plugins:
|
|
105
|
+
|
|
106
|
+
| Plugin | Description |
|
|
107
|
+
|--------|-----------------------------------------------------------------------------|
|
|
108
|
+
| 🎯 **[PyIndicators](https://github.com/coding-kitties/PyIndicators)** | Technical analysis indicators for strategy development |
|
|
109
|
+
| 🏪 **[Finterion Plugin](https://github.com/Finterion/finterion-investing-algorithm-framework-plugin)** | Monetize & share your strategies with the public on Finterion's marketplace |
|
|
110
|
+
|
|
111
|
+
## 🌟 Powerful Features
|
|
112
|
+
|
|
113
|
+
| Feature | Description |
|
|
114
|
+
|---------|-------------|
|
|
115
|
+
| 🐍 **Python 3.10+** | Cross-platform support for Windows, macOS, and Linux |
|
|
116
|
+
| ⚙️ **Event-Driven Backtest** | Accurate, realistic backtesting with event-driven architecture |
|
|
117
|
+
| ⚡ **Vectorized Backtest** | Lightning-fast signal research and prototyping |
|
|
118
|
+
| 📊 **Advanced Metrics** | CAGR, Sharpe ratio, max drawdown, win rate, and 50+ more metrics |
|
|
119
|
+
| 📈 **Backtest Reports** | Generate detailed, comparison-ready reports |
|
|
120
|
+
| 🎯 **Statistical Testing** | Permutation testing for strategy significance evaluation |
|
|
121
|
+
| 💱 **Live Trading** | Real-time execution across multiple exchanges (via CCXT) |
|
|
122
|
+
| 💼 **Portfolio Management** | Full position and trade management with persistence |
|
|
123
|
+
| 📉 **Market Data** | OHLCV, tickers, custom data — Polars & Pandas native |
|
|
124
|
+
| 🔗 **Data Integrations** | PyIndicators, multiple data sources, custom providers |
|
|
125
|
+
| ☁️ **Cloud Deployment** | Azure Functions, AWS Lambda, and more |
|
|
126
|
+
| 🌐 **Web API** | REST API for bot interaction and monitoring |
|
|
127
|
+
| 🧩 **Fully Extensible** | Custom strategies, data providers, order executors |
|
|
128
|
+
| 🏗️ **Modular Design** | Build with reusable, composable components |
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
|
|
132
|
+
## 🚀 Quickstart
|
|
133
|
+
|
|
134
|
+
### 📦 Installation
|
|
135
|
+
|
|
136
|
+
Install the framework via [PyPI](https://pypi.org/project/investing-algorithm-framework/):
|
|
137
|
+
|
|
138
|
+
```bash
|
|
139
|
+
pip install investing-algorithm-framework
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
### 🎯 Initialize Your Project
|
|
143
|
+
|
|
144
|
+
Run the following command to scaffold a new trading bot:
|
|
145
|
+
|
|
146
|
+
```bash
|
|
147
|
+
investing-algorithm-framework init
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
For an AWS Lambda-ready project:
|
|
151
|
+
|
|
152
|
+
```bash
|
|
153
|
+
investing-algorithm-framework init --type aws_lambda
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
This creates:
|
|
157
|
+
- **app.py** — Your bot's entry point (keep as-is)
|
|
158
|
+
- **strategy.py** — Your trading strategy (customize this!)
|
|
159
|
+
|
|
160
|
+
> 💡 **Tip:** You can also create `default_web` or `azure_function` projects
|
|
161
|
+
|
|
162
|
+
## 📈 Example: A Simple Trading Bot
|
|
163
|
+
The following example trading bot implements a simple moving average strategy.
|
|
164
|
+
The strategy will use data from bitvavo exchange and will calculate
|
|
165
|
+
the 20, 50 and 100 period exponential moving averages (EMA) and the
|
|
166
|
+
14 period relative strength index (RSI).
|
|
167
|
+
|
|
168
|
+
> This example uses [PyIndicators](https://github.com/coding-kitties/pyindicators) for technical analysis.
|
|
169
|
+
> This dependency is not part of the framework, but is used to perform technical analysis on the dataframes.
|
|
170
|
+
> You can install it using pip: pip install pyindicators.
|
|
171
|
+
|
|
172
|
+
```python
|
|
173
|
+
from typing import Dict, Any
|
|
174
|
+
from datetime import datetime, timezone
|
|
175
|
+
|
|
176
|
+
import pandas as pd
|
|
177
|
+
from pyindicators import ema, rsi, crossover, crossunder
|
|
178
|
+
|
|
179
|
+
from investing_algorithm_framework import TradingStrategy, DataSource, \
|
|
180
|
+
TimeUnit, DataType, PositionSize, create_app, RESOURCE_DIRECTORY, \
|
|
181
|
+
BacktestDateRange, BacktestReport, TakeProfitRule, StopLossRule
|
|
182
|
+
|
|
183
|
+
|
|
184
|
+
class RSIEMACrossoverStrategy(TradingStrategy):
|
|
185
|
+
time_unit = TimeUnit.HOUR
|
|
186
|
+
interval = 2
|
|
187
|
+
symbols = ["BTC"]
|
|
188
|
+
position_sizes = [
|
|
189
|
+
PositionSize(
|
|
190
|
+
symbol="BTC", percentage_of_portfolio=20.0
|
|
191
|
+
),
|
|
192
|
+
PositionSize(
|
|
193
|
+
symbol="ETH", percentage_of_portfolio=20.0
|
|
194
|
+
)
|
|
195
|
+
]
|
|
196
|
+
take_profits = [
|
|
197
|
+
TakeProfitRule(
|
|
198
|
+
symbol="BTC",
|
|
199
|
+
percentage_threshold=10,
|
|
200
|
+
trailing=True,
|
|
201
|
+
sell_percentage=100
|
|
202
|
+
),
|
|
203
|
+
TakeProfitRule(
|
|
204
|
+
symbol="ETH",
|
|
205
|
+
percentage_threshold=10,
|
|
206
|
+
trailing=True,
|
|
207
|
+
sell_percentage=100
|
|
208
|
+
)
|
|
209
|
+
]
|
|
210
|
+
stop_losses = [
|
|
211
|
+
StopLossRule(
|
|
212
|
+
symbol="BTC",
|
|
213
|
+
percentage_threshold=5,
|
|
214
|
+
trailing=False,
|
|
215
|
+
sell_percentage=100
|
|
216
|
+
),
|
|
217
|
+
StopLossRule(
|
|
218
|
+
symbol="ETH",
|
|
219
|
+
percentage_threshold=5,
|
|
220
|
+
trailing=False,
|
|
221
|
+
sell_percentage=100
|
|
222
|
+
)
|
|
223
|
+
]
|
|
224
|
+
|
|
225
|
+
def __init__(
|
|
226
|
+
self,
|
|
227
|
+
time_unit: TimeUnit,
|
|
228
|
+
interval: int,
|
|
229
|
+
market: str,
|
|
230
|
+
rsi_time_frame: str,
|
|
231
|
+
rsi_period: int,
|
|
232
|
+
rsi_overbought_threshold,
|
|
233
|
+
rsi_oversold_threshold,
|
|
234
|
+
ema_time_frame,
|
|
235
|
+
ema_short_period,
|
|
236
|
+
ema_long_period,
|
|
237
|
+
ema_cross_lookback_window: int = 10
|
|
238
|
+
):
|
|
239
|
+
self.rsi_time_frame = rsi_time_frame
|
|
240
|
+
self.rsi_period = rsi_period
|
|
241
|
+
self.rsi_result_column = f"rsi_{self.rsi_period}"
|
|
242
|
+
self.rsi_overbought_threshold = rsi_overbought_threshold
|
|
243
|
+
self.rsi_oversold_threshold = rsi_oversold_threshold
|
|
244
|
+
self.ema_time_frame = ema_time_frame
|
|
245
|
+
self.ema_short_result_column = f"ema_{ema_short_period}"
|
|
246
|
+
self.ema_long_result_column = f"ema_{ema_long_period}"
|
|
247
|
+
self.ema_crossunder_result_column = "ema_crossunder"
|
|
248
|
+
self.ema_crossover_result_column = "ema_crossover"
|
|
249
|
+
self.ema_short_period = ema_short_period
|
|
250
|
+
self.ema_long_period = ema_long_period
|
|
251
|
+
self.ema_cross_lookback_window = ema_cross_lookback_window
|
|
252
|
+
data_sources = []
|
|
253
|
+
|
|
254
|
+
for symbol in self.symbols:
|
|
255
|
+
full_symbol = f"{symbol}/EUR"
|
|
256
|
+
data_sources.append(
|
|
257
|
+
DataSource(
|
|
258
|
+
identifier=f"{symbol}_rsi_data",
|
|
259
|
+
data_type=DataType.OHLCV,
|
|
260
|
+
time_frame=self.rsi_time_frame,
|
|
261
|
+
market=market,
|
|
262
|
+
symbol=full_symbol,
|
|
263
|
+
pandas=True,
|
|
264
|
+
window_size=800
|
|
265
|
+
)
|
|
266
|
+
)
|
|
267
|
+
data_sources.append(
|
|
268
|
+
DataSource(
|
|
269
|
+
identifier=f"{symbol}_ema_data",
|
|
270
|
+
data_type=DataType.OHLCV,
|
|
271
|
+
time_frame=self.ema_time_frame,
|
|
272
|
+
market=market,
|
|
273
|
+
symbol=full_symbol,
|
|
274
|
+
pandas=True,
|
|
275
|
+
window_size=800
|
|
276
|
+
)
|
|
277
|
+
)
|
|
278
|
+
|
|
279
|
+
super().__init__(
|
|
280
|
+
data_sources=data_sources, time_unit=time_unit, interval=interval
|
|
281
|
+
)
|
|
282
|
+
|
|
283
|
+
def _prepare_indicators(
|
|
284
|
+
self,
|
|
285
|
+
rsi_data,
|
|
286
|
+
ema_data
|
|
287
|
+
):
|
|
288
|
+
"""
|
|
289
|
+
Helper function to prepare the indicators
|
|
290
|
+
for the strategy. The indicators are calculated
|
|
291
|
+
using the pyindicators library: https://github.com/coding-kitties/PyIndicators
|
|
292
|
+
"""
|
|
293
|
+
ema_data = ema(
|
|
294
|
+
ema_data,
|
|
295
|
+
period=self.ema_short_period,
|
|
296
|
+
source_column="Close",
|
|
297
|
+
result_column=self.ema_short_result_column
|
|
298
|
+
)
|
|
299
|
+
ema_data = ema(
|
|
300
|
+
ema_data,
|
|
301
|
+
period=self.ema_long_period,
|
|
302
|
+
source_column="Close",
|
|
303
|
+
result_column=self.ema_long_result_column
|
|
304
|
+
)
|
|
305
|
+
# Detect crossover (short EMA crosses above long EMA)
|
|
306
|
+
ema_data = crossover(
|
|
307
|
+
ema_data,
|
|
308
|
+
first_column=self.ema_short_result_column,
|
|
309
|
+
second_column=self.ema_long_result_column,
|
|
310
|
+
result_column=self.ema_crossover_result_column
|
|
311
|
+
)
|
|
312
|
+
# Detect crossunder (short EMA crosses below long EMA)
|
|
313
|
+
ema_data = crossunder(
|
|
314
|
+
ema_data,
|
|
315
|
+
first_column=self.ema_short_result_column,
|
|
316
|
+
second_column=self.ema_long_result_column,
|
|
317
|
+
result_column=self.ema_crossunder_result_column
|
|
318
|
+
)
|
|
319
|
+
rsi_data = rsi(
|
|
320
|
+
rsi_data,
|
|
321
|
+
period=self.rsi_period,
|
|
322
|
+
source_column="Close",
|
|
323
|
+
result_column=self.rsi_result_column
|
|
324
|
+
)
|
|
325
|
+
|
|
326
|
+
return ema_data, rsi_data
|
|
327
|
+
|
|
328
|
+
def generate_buy_signals(self, data: Dict[str, Any]) -> Dict[str, pd.Series]:
|
|
329
|
+
"""
|
|
330
|
+
Generate buy signals based on the moving average crossover.
|
|
331
|
+
|
|
332
|
+
data (Dict[str, Any]): Dictionary containing all the data for
|
|
333
|
+
the strategy data sources.
|
|
334
|
+
|
|
335
|
+
Returns:
|
|
336
|
+
Dict[str, pd.Series]: A dictionary where keys are symbols and values
|
|
337
|
+
are pandas Series indicating buy signals (True/False).
|
|
338
|
+
"""
|
|
339
|
+
|
|
340
|
+
signals = {}
|
|
341
|
+
|
|
342
|
+
for symbol in self.symbols:
|
|
343
|
+
ema_data_identifier = f"{symbol}_ema_data"
|
|
344
|
+
rsi_data_identifier = f"{symbol}_rsi_data"
|
|
345
|
+
ema_data, rsi_data = self._prepare_indicators(
|
|
346
|
+
data[ema_data_identifier].copy(),
|
|
347
|
+
data[rsi_data_identifier].copy()
|
|
348
|
+
)
|
|
349
|
+
|
|
350
|
+
# crossover confirmed
|
|
351
|
+
ema_crossover_lookback = ema_data[
|
|
352
|
+
self.ema_crossover_result_column].rolling(
|
|
353
|
+
window=self.ema_cross_lookback_window
|
|
354
|
+
).max().astype(bool)
|
|
355
|
+
|
|
356
|
+
# use only RSI column
|
|
357
|
+
rsi_oversold = rsi_data[self.rsi_result_column] \
|
|
358
|
+
< self.rsi_oversold_threshold
|
|
359
|
+
|
|
360
|
+
buy_signal = rsi_oversold & ema_crossover_lookback
|
|
361
|
+
buy_signals = buy_signal.fillna(False).astype(bool)
|
|
362
|
+
signals[symbol] = buy_signals
|
|
363
|
+
return signals
|
|
364
|
+
|
|
365
|
+
def generate_sell_signals(self, data: Dict[str, Any]) -> Dict[str, pd.Series]:
|
|
366
|
+
"""
|
|
367
|
+
Generate sell signals based on the moving average crossover.
|
|
368
|
+
|
|
369
|
+
Args:
|
|
370
|
+
data (Dict[str, Any]): Dictionary containing all the data for
|
|
371
|
+
the strategy data sources.
|
|
372
|
+
|
|
373
|
+
Returns:
|
|
374
|
+
Dict[str, pd.Series]: A dictionary where keys are symbols and values
|
|
375
|
+
are pandas Series indicating sell signals (True/False).
|
|
376
|
+
"""
|
|
377
|
+
|
|
378
|
+
signals = {}
|
|
379
|
+
for symbol in self.symbols:
|
|
380
|
+
ema_data_identifier = f"{symbol}_ema_data"
|
|
381
|
+
rsi_data_identifier = f"{symbol}_rsi_data"
|
|
382
|
+
ema_data, rsi_data = self._prepare_indicators(
|
|
383
|
+
data[ema_data_identifier].copy(),
|
|
384
|
+
data[rsi_data_identifier].copy()
|
|
385
|
+
)
|
|
386
|
+
|
|
387
|
+
# Confirmed by crossover between short-term EMA and long-term EMA
|
|
388
|
+
# within a given lookback window
|
|
389
|
+
ema_crossunder_lookback = ema_data[
|
|
390
|
+
self.ema_crossunder_result_column].rolling(
|
|
391
|
+
window=self.ema_cross_lookback_window
|
|
392
|
+
).max().astype(bool)
|
|
393
|
+
|
|
394
|
+
# use only RSI column
|
|
395
|
+
rsi_overbought = rsi_data[self.rsi_result_column] \
|
|
396
|
+
>= self.rsi_overbought_threshold
|
|
397
|
+
|
|
398
|
+
# Combine both conditions
|
|
399
|
+
sell_signal = rsi_overbought & ema_crossunder_lookback
|
|
400
|
+
sell_signal = sell_signal.fillna(False).astype(bool)
|
|
401
|
+
signals[symbol] = sell_signal
|
|
402
|
+
return signals
|
|
403
|
+
|
|
404
|
+
|
|
405
|
+
if __name__ == "__main__":
|
|
406
|
+
app = create_app()
|
|
407
|
+
app.add_strategy(
|
|
408
|
+
RSIEMACrossoverStrategy(
|
|
409
|
+
time_unit=TimeUnit.HOUR,
|
|
410
|
+
interval=2,
|
|
411
|
+
market="bitvavo",
|
|
412
|
+
rsi_time_frame="2h",
|
|
413
|
+
rsi_period=14,
|
|
414
|
+
rsi_overbought_threshold=70,
|
|
415
|
+
rsi_oversold_threshold=30,
|
|
416
|
+
ema_time_frame="2h",
|
|
417
|
+
ema_short_period=12,
|
|
418
|
+
ema_long_period=26,
|
|
419
|
+
ema_cross_lookback_window=10
|
|
420
|
+
)
|
|
421
|
+
)
|
|
422
|
+
|
|
423
|
+
# Market credentials for coinbase for both the portfolio connection and data sources will
|
|
424
|
+
# be read from .env file, when not registering a market credential object in the app.
|
|
425
|
+
app.add_market(
|
|
426
|
+
market="bitvavo",
|
|
427
|
+
trading_symbol="EUR",
|
|
428
|
+
)
|
|
429
|
+
backtest_range = BacktestDateRange(
|
|
430
|
+
start_date=datetime(2023, 1, 1, tzinfo=timezone.utc),
|
|
431
|
+
end_date=datetime(2024, 6, 1, tzinfo=timezone.utc)
|
|
432
|
+
)
|
|
433
|
+
backtest = app.run_backtest(
|
|
434
|
+
backtest_date_range=backtest_range, initial_amount=1000
|
|
435
|
+
)
|
|
436
|
+
report = BacktestReport(backtest)
|
|
437
|
+
report.show(backtest_date_range=backtest_range, browser=True)
|
|
438
|
+
```
|
|
439
|
+
|
|
440
|
+
> You can find more examples [here](./examples) folder.
|
|
441
|
+
|
|
442
|
+
## 📚 Documentation
|
|
443
|
+
Comprehensive documentation is available at [github pages](https://coding-kitties.github.io/investing-algorithm-framework/).
|
|
444
|
+
|
|
445
|
+
## 🛠️ Development
|
|
446
|
+
|
|
447
|
+
### Setup
|
|
448
|
+
|
|
449
|
+
Clone the repository and install dependencies using Poetry:
|
|
450
|
+
|
|
451
|
+
> Make sure you have [Poetry](https://python-poetry.org/docs/#installation) installed.
|
|
452
|
+
|
|
453
|
+
```bash
|
|
454
|
+
git clone https://github.com/coding-kitties/investing-algorithm-framework.git
|
|
455
|
+
cd investing-algorithm-framework
|
|
456
|
+
poetry install
|
|
457
|
+
```
|
|
458
|
+
|
|
459
|
+
### Running Tests
|
|
460
|
+
|
|
461
|
+
```bash
|
|
462
|
+
# Run all tests
|
|
463
|
+
python -m unittest discover -s tests
|
|
464
|
+
|
|
465
|
+
# Run specific test
|
|
466
|
+
python -m unittest tests.services.test_trade_service.TestTradeService
|
|
467
|
+
```
|
|
468
|
+
|
|
469
|
+
## ⚠️ Risk Disclaimer
|
|
470
|
+
|
|
471
|
+
🚨 **Use at Your Own Risk**
|
|
472
|
+
|
|
473
|
+
If you use this framework for your investments, **do not risk money which you are afraid to lose** until you have a clear understanding of how the framework works.
|
|
474
|
+
|
|
475
|
+
**BEFORE YOU START USING MONEY WITH THE FRAMEWORK:**
|
|
476
|
+
- ✅ Test your strategies thoroughly with backtesting
|
|
477
|
+
- ✅ Review the source code of any plugins you use
|
|
478
|
+
- ✅ Start with small amounts on paper trading first
|
|
479
|
+
- ✅ Understand the risks involved
|
|
480
|
+
|
|
481
|
+
**We assume no responsibility for your investment results. The authors and all affiliates disclaim any liability for losses.**
|
|
482
|
+
|
|
483
|
+
---
|
|
484
|
+
|
|
485
|
+
## 🤝 Contributing
|
|
486
|
+
|
|
487
|
+
The investing algorithm framework is a **community-driven project**. We welcome contributions at all levels:
|
|
488
|
+
|
|
489
|
+
- 🐛 **Found a bug?** [Open an issue](https://github.com/coding-kitties/investing-algorithm-framework/issues/new)
|
|
490
|
+
- 💡 **Have an idea?** [Share it with us](https://github.com/coding-kitties/investing-algorithm-framework/issues/new)
|
|
491
|
+
- 🔧 **Want to code?** Check the [project board](https://github.com/coding-kitties/investing-algorithm-framework/projects?query=is%3Aopen)
|
|
492
|
+
|
|
493
|
+
**Guidelines:**
|
|
494
|
+
- Read the [Contributing Guide](https://coding-kitties.github.io/investing-algorithm-framework/Contributing%20Guide/contributing)
|
|
495
|
+
- Always create PRs against the `develop` branch, not `main`
|
|
496
|
+
- Open an issue before starting major feature work
|
|
497
|
+
|
|
498
|
+
---
|
|
499
|
+
|
|
500
|
+
## 📚 Documentation
|
|
501
|
+
|
|
502
|
+
Comprehensive documentation is available at [GitHub Pages](https://coding-kitties.github.io/investing-algorithm-framework/)
|
|
503
|
+
|
|
504
|
+
---
|
|
505
|
+
|
|
506
|
+
## 📬 Community
|
|
507
|
+
|
|
508
|
+
Join us and connect with other traders and developers:
|
|
509
|
+
|
|
510
|
+
* 💬 [Discord Community](https://discord.gg/dQsRmGZP) — Real-time chat and support
|
|
511
|
+
* 🔗 [Reddit Community](https://www.reddit.com/r/InvestingBots/) — Share strategies and discuss
|
|
512
|
+
* 📖 [Documentation](https://coding-kitties.github.io/investing-algorithm-framework/) — Guides and API references
|
|
513
|
+
|
|
514
|
+
---
|
|
515
|
+
|
|
516
|
+
## 🏆 Acknowledgements
|
|
517
|
+
|
|
518
|
+
We want to thank all contributors to this project. A full list can be found in [AUTHORS.md](https://github.com/coding-kitties/investing-algorithm-framework/blob/master/AUTHORS.md)
|
|
519
|
+
|
|
520
|
+
### Report Issues
|
|
521
|
+
|
|
522
|
+
If you discover a bug in the framework, please [search our issue tracker](https://github.com/coding-kitties/investing-algorithm-framework/issues?q=is%3Aissue) first. If it hasn't been reported, please [create a new issue](https://github.com/coding-kitties/investing-algorithm-framework/issues/new).
|
|
523
|
+
|
|
524
|
+
---
|
|
525
|
+
|
|
526
|
+
<div align="center">
|
|
527
|
+
<p>
|
|
528
|
+
<a href="https://github.com/coding-kitties/investing-algorithm-framework/stargazers">⭐ Star us on GitHub</a> ·
|
|
529
|
+
<a href="https://discord.gg/dQsRmGZP">💬 Join Discord</a> ·
|
|
530
|
+
<a href="https://github.com/coding-kitties/investing-algorithm-framework/issues/new">🐛 Report Bug</a>
|
|
531
|
+
</p>
|
|
532
|
+
</div>
|
|
533
|
+
|