investing-algorithm-framework 8.6.0__tar.gz → 8.7.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (304) hide show
  1. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/PKG-INFO +140 -21
  2. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/README.md +136 -20
  3. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/__init__.py +20 -1
  4. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/app/app.py +37 -3
  5. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/app/eventloop.py +262 -1
  6. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/app/reporting/backtest_report.py +53 -7
  7. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/app/strategy.py +59 -0
  8. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/cli/cli.py +70 -0
  9. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/__init__.py +42 -1
  10. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/backtesting/__init__.py +19 -2
  11. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/backtesting/backtest.py +155 -9
  12. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/backtesting/backtest_metrics.py +62 -19
  13. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/backtesting/backtest_permutation_test.py +53 -2
  14. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/backtesting/backtest_run.py +124 -103
  15. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/backtesting/backtest_summary_metrics.py +32 -1
  16. investing_algorithm_framework-8.7.0/investing_algorithm_framework/domain/backtesting/backtest_utils.py +713 -0
  17. investing_algorithm_framework-8.7.0/investing_algorithm_framework/domain/backtesting/bundle.py +351 -0
  18. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/backtesting/combine_backtests.py +35 -16
  19. investing_algorithm_framework-8.7.0/investing_algorithm_framework/domain/datetime_parsing.py +29 -0
  20. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/models/data/data_source.py +7 -3
  21. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/models/order/order.py +5 -2
  22. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/models/portfolio/portfolio_snapshot.py +5 -4
  23. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/models/trade/trade.py +7 -4
  24. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/models/trade/trade_stop_loss.py +9 -7
  25. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/models/trade/trade_take_profit.py +8 -5
  26. investing_algorithm_framework-8.7.0/investing_algorithm_framework/domain/pipeline/__init__.py +40 -0
  27. investing_algorithm_framework-8.7.0/investing_algorithm_framework/domain/pipeline/custom_factor.py +34 -0
  28. investing_algorithm_framework-8.7.0/investing_algorithm_framework/domain/pipeline/factor.py +538 -0
  29. investing_algorithm_framework-8.7.0/investing_algorithm_framework/domain/pipeline/factors/__init__.py +26 -0
  30. investing_algorithm_framework-8.7.0/investing_algorithm_framework/domain/pipeline/factors/builtin.py +496 -0
  31. investing_algorithm_framework-8.7.0/investing_algorithm_framework/domain/pipeline/filter.py +98 -0
  32. investing_algorithm_framework-8.7.0/investing_algorithm_framework/domain/pipeline/pipeline.py +142 -0
  33. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/infrastructure/services/backtesting/backtest_service.py +337 -88
  34. investing_algorithm_framework-8.7.0/investing_algorithm_framework/infrastructure/services/backtesting/checkpoint_manifest.py +240 -0
  35. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/infrastructure/services/backtesting/event_backtest_service.py +23 -0
  36. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/infrastructure/services/backtesting/vector_backtest_service.py +80 -0
  37. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/services/metrics/generate.py +85 -24
  38. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/services/metrics/returns.py +13 -4
  39. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/services/metrics/sharpe_ratio.py +6 -2
  40. investing_algorithm_framework-8.7.0/investing_algorithm_framework/services/pipeline/__init__.py +5 -0
  41. investing_algorithm_framework-8.7.0/investing_algorithm_framework/services/pipeline/pipeline_engine.py +174 -0
  42. investing_algorithm_framework-8.7.0/investing_algorithm_framework/services/pipeline/vector_pipeline_engine.py +219 -0
  43. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/pyproject.toml +4 -1
  44. investing_algorithm_framework-8.6.0/investing_algorithm_framework/domain/backtesting/backtest_utils.py +0 -297
  45. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/LICENSE +0 -0
  46. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/analysis/__init__.py +0 -0
  47. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/analysis/backtest_data_ranges.py +0 -0
  48. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/analysis/markdown.py +0 -0
  49. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/analysis/ranking.py +0 -0
  50. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/app/__init__.py +0 -0
  51. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/app/algorithm/__init__.py +0 -0
  52. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/app/algorithm/algorithm.py +0 -0
  53. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/app/algorithm/algorithm_factory.py +0 -0
  54. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/app/app_hook.py +0 -0
  55. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/app/context.py +0 -0
  56. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/app/reporting/__init__.py +0 -0
  57. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/app/reporting/ascii.py +0 -0
  58. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/app/reporting/backtest_report_old.py +0 -0
  59. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/app/reporting/charts/__init__.py +0 -0
  60. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/app/reporting/charts/entry_exist_signals.py +0 -0
  61. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/app/reporting/charts/equity_curve.py +0 -0
  62. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/app/reporting/charts/equity_curve_drawdown.py +0 -0
  63. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/app/reporting/charts/line_chart.py +0 -0
  64. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/app/reporting/charts/monthly_returns_heatmap.py +0 -0
  65. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/app/reporting/charts/ohlcv_data_completeness.py +0 -0
  66. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/app/reporting/charts/rolling_sharp_ratio.py +0 -0
  67. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/app/reporting/charts/yearly_returns_barchart.py +0 -0
  68. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/app/reporting/generate.py +0 -0
  69. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/app/reporting/tables/__init__.py +0 -0
  70. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/app/reporting/tables/key_metrics_table.py +0 -0
  71. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/app/reporting/tables/stop_loss_table.py +0 -0
  72. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/app/reporting/tables/time_metrics_table.py +0 -0
  73. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/app/reporting/tables/trade_metrics_table.py +0 -0
  74. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/app/reporting/tables/trades_table.py +0 -0
  75. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/app/reporting/tables/utils.py +0 -0
  76. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/app/reporting/templates/dashboard.css +0 -0
  77. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/app/reporting/templates/dashboard.js +0 -0
  78. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/app/reporting/templates/dashboard_template.html.j2 +0 -0
  79. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/app/reporting/templates/report_template.html.j2 +0 -0
  80. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/app/stateless/__init__.py +0 -0
  81. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/app/stateless/action_handlers/__init__.py +0 -0
  82. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/app/stateless/action_handlers/action_handler_strategy.py +0 -0
  83. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/app/stateless/action_handlers/check_online_handler.py +0 -0
  84. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/app/stateless/action_handlers/run_strategy_handler.py +0 -0
  85. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/app/stateless/exception_handler.py +0 -0
  86. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/app/task.py +0 -0
  87. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/app/web/__init__.py +0 -0
  88. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/app/web/controllers/__init__.py +0 -0
  89. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/app/web/controllers/orders.py +0 -0
  90. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/app/web/controllers/portfolio.py +0 -0
  91. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/app/web/controllers/positions.py +0 -0
  92. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/app/web/create_app.py +0 -0
  93. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/app/web/error_handler.py +0 -0
  94. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/app/web/responses.py +0 -0
  95. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/app/web/run_strategies.py +0 -0
  96. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/app/web/schemas/__init__.py +0 -0
  97. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/app/web/schemas/order.py +0 -0
  98. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/app/web/schemas/portfolio.py +0 -0
  99. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/app/web/schemas/position.py +0 -0
  100. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/app/web/setup_cors.py +0 -0
  101. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/cli/__init__.py +0 -0
  102. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/cli/deploy_to_aws_lambda.py +0 -0
  103. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/cli/deploy_to_azure_function.py +0 -0
  104. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/cli/initialize_app.py +0 -0
  105. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/cli/mcp_server.py +0 -0
  106. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/cli/templates/.gitignore.template +0 -0
  107. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/cli/templates/app.py.template +0 -0
  108. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/cli/templates/app_aws_lambda_function.py.template +0 -0
  109. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/cli/templates/app_azure_function.py.template +0 -0
  110. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/cli/templates/app_web.py.template +0 -0
  111. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/cli/templates/aws_lambda_dockerfile.template +0 -0
  112. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/cli/templates/aws_lambda_dockerignore.template +0 -0
  113. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/cli/templates/aws_lambda_readme.md.template +0 -0
  114. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/cli/templates/aws_lambda_requirements.txt.template +0 -0
  115. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/cli/templates/azure_function_function_app.py.template +0 -0
  116. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/cli/templates/azure_function_host.json.template +0 -0
  117. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/cli/templates/azure_function_local.settings.json.template +0 -0
  118. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/cli/templates/azure_function_requirements.txt.template +0 -0
  119. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/cli/templates/data_providers.py.template +0 -0
  120. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/cli/templates/env.example.template +0 -0
  121. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/cli/templates/env_azure_function.example.template +0 -0
  122. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/cli/templates/market_data_providers.py.template +0 -0
  123. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/cli/templates/readme.md.template +0 -0
  124. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/cli/templates/requirements.txt.template +0 -0
  125. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/cli/templates/run_backtest.py.template +0 -0
  126. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/cli/templates/strategy.py.template +0 -0
  127. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/cli/validate_backtest_checkpoints.py +0 -0
  128. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/create_app.py +0 -0
  129. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/dependency_container.py +0 -0
  130. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/algorithm_id.py +0 -0
  131. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/backtesting/backtest_date_range.py +0 -0
  132. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/backtesting/backtest_evaluation_focuss.py +0 -0
  133. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/backtesting/consistency.py +0 -0
  134. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/backtesting/templates/backtest.html +0 -0
  135. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/backtesting/templates/finterion-dark.png +0 -0
  136. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/backtesting/templates/finterion-light.png +0 -0
  137. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/blotter.py +0 -0
  138. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/config.py +0 -0
  139. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/constants.py +0 -0
  140. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/data_provider.py +0 -0
  141. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/data_structures.py +0 -0
  142. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/decimal_parsing.py +0 -0
  143. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/exceptions.py +0 -0
  144. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/fx.py +0 -0
  145. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/models/__init__.py +0 -0
  146. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/models/app_mode.py +0 -0
  147. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/models/base_model.py +0 -0
  148. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/models/data/__init__.py +0 -0
  149. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/models/data/data_type.py +0 -0
  150. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/models/event.py +0 -0
  151. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/models/market/__init__.py +0 -0
  152. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/models/market/market_credential.py +0 -0
  153. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/models/order/__init__.py +0 -0
  154. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/models/order/order_side.py +0 -0
  155. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/models/order/order_status.py +0 -0
  156. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/models/order/order_type.py +0 -0
  157. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/models/portfolio/__init__.py +0 -0
  158. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/models/portfolio/portfolio.py +0 -0
  159. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/models/portfolio/portfolio_configuration.py +0 -0
  160. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/models/position/__init__.py +0 -0
  161. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/models/position/position.py +0 -0
  162. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/models/position/position_size.py +0 -0
  163. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/models/position/position_snapshot.py +0 -0
  164. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/models/risk_rules/__init__.py +0 -0
  165. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/models/risk_rules/scaling_rule.py +0 -0
  166. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/models/risk_rules/stop_loss_rule.py +0 -0
  167. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/models/risk_rules/take_profit_rule.py +0 -0
  168. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/models/risk_rules/trading_cost.py +0 -0
  169. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/models/snapshot_interval.py +0 -0
  170. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/models/strategy_profile.py +0 -0
  171. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/models/time_frame.py +0 -0
  172. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/models/time_interval.py +0 -0
  173. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/models/time_unit.py +0 -0
  174. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/models/tracing/__init__.py +0 -0
  175. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/models/tracing/trace.py +0 -0
  176. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/models/trade/__init__.py +0 -0
  177. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/models/trade/trade_status.py +0 -0
  178. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/order_executor.py +0 -0
  179. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/portfolio_provider.py +0 -0
  180. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/services/__init__.py +0 -0
  181. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/services/market_credential_service.py +0 -0
  182. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/services/portfolios/__init__.py +0 -0
  183. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/services/portfolios/portfolio_sync_service.py +0 -0
  184. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/services/rounding_service.py +0 -0
  185. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/services/state_handler.py +0 -0
  186. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/stateless_actions.py +0 -0
  187. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/strategy.py +0 -0
  188. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/utils/__init__.py +0 -0
  189. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/utils/csv.py +0 -0
  190. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/utils/custom_tqdm.py +0 -0
  191. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/utils/dates.py +0 -0
  192. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/utils/jupyter_notebook_detection.py +0 -0
  193. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/utils/polars.py +0 -0
  194. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/utils/random.py +0 -0
  195. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/utils/signatures.py +0 -0
  196. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/utils/stoppable_thread.py +0 -0
  197. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/domain/utils/synchronized.py +0 -0
  198. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/download_data.py +0 -0
  199. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/infrastructure/__init__.py +0 -0
  200. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/infrastructure/data_providers/__init__.py +0 -0
  201. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/infrastructure/data_providers/alpha_vantage.py +0 -0
  202. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/infrastructure/data_providers/base_url.py +0 -0
  203. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/infrastructure/data_providers/ccxt.py +0 -0
  204. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/infrastructure/data_providers/csv.py +0 -0
  205. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/infrastructure/data_providers/csv_url.py +0 -0
  206. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/infrastructure/data_providers/json_url.py +0 -0
  207. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/infrastructure/data_providers/ohlcv_base.py +0 -0
  208. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/infrastructure/data_providers/pandas.py +0 -0
  209. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/infrastructure/data_providers/parquet_url.py +0 -0
  210. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/infrastructure/data_providers/polygon.py +0 -0
  211. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/infrastructure/data_providers/yahoo.py +0 -0
  212. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/infrastructure/database/__init__.py +0 -0
  213. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/infrastructure/database/sql_alchemy.py +0 -0
  214. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/infrastructure/models/__init__.py +0 -0
  215. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/infrastructure/models/decimal_parser.py +0 -0
  216. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/infrastructure/models/model_extension.py +0 -0
  217. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/infrastructure/models/order/__init__.py +0 -0
  218. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/infrastructure/models/order/order.py +0 -0
  219. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/infrastructure/models/order/trade_allocation.py +0 -0
  220. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/infrastructure/models/order_trade_association.py +0 -0
  221. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/infrastructure/models/portfolio/__init__.py +0 -0
  222. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/infrastructure/models/portfolio/portfolio_snapshot.py +0 -0
  223. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/infrastructure/models/portfolio/sql_portfolio.py +0 -0
  224. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/infrastructure/models/position/__init__.py +0 -0
  225. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/infrastructure/models/position/position.py +0 -0
  226. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/infrastructure/models/position/position_snapshot.py +0 -0
  227. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/infrastructure/models/trades/__init__.py +0 -0
  228. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/infrastructure/models/trades/trade.py +0 -0
  229. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/infrastructure/models/trades/trade_stop_loss.py +0 -0
  230. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/infrastructure/models/trades/trade_take_profit.py +0 -0
  231. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/infrastructure/order_executors/__init__.py +0 -0
  232. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/infrastructure/order_executors/ccxt_order_executor.py +0 -0
  233. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/infrastructure/portfolio_providers/__init__.py +0 -0
  234. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/infrastructure/portfolio_providers/ccxt_portfolio_provider.py +0 -0
  235. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/infrastructure/repositories/__init__.py +0 -0
  236. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/infrastructure/repositories/order_repository.py +0 -0
  237. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/infrastructure/repositories/portfolio_repository.py +0 -0
  238. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/infrastructure/repositories/portfolio_snapshot_repository.py +0 -0
  239. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/infrastructure/repositories/position_repository.py +0 -0
  240. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/infrastructure/repositories/position_snapshot_repository.py +0 -0
  241. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/infrastructure/repositories/repository.py +0 -0
  242. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/infrastructure/repositories/trade_allocation_repository.py +0 -0
  243. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/infrastructure/repositories/trade_repository.py +0 -0
  244. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/infrastructure/repositories/trade_stop_loss_repository.py +0 -0
  245. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/infrastructure/repositories/trade_take_profit_repository.py +0 -0
  246. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/infrastructure/services/__init__.py +0 -0
  247. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/infrastructure/services/aws/__init__.py +0 -0
  248. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/infrastructure/services/aws/state_handler.py +0 -0
  249. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/infrastructure/services/azure/__init__.py +0 -0
  250. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/infrastructure/services/azure/state_handler.py +0 -0
  251. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/infrastructure/services/backtesting/__init__.py +0 -0
  252. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/notebook/__init__.py +0 -0
  253. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/notebook/magic.py +0 -0
  254. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/services/__init__.py +0 -0
  255. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/services/configuration_service.py +0 -0
  256. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/services/data_providers/__init__.py +0 -0
  257. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/services/data_providers/data.py +0 -0
  258. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/services/data_providers/data_provider_service.py +0 -0
  259. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/services/market_credential_service.py +0 -0
  260. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/services/metrics/__init__.py +0 -0
  261. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/services/metrics/alpha.py +0 -0
  262. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/services/metrics/beta.py +0 -0
  263. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/services/metrics/cagr.py +0 -0
  264. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/services/metrics/calmar_ratio.py +0 -0
  265. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/services/metrics/consistency.py +0 -0
  266. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/services/metrics/drawdown.py +0 -0
  267. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/services/metrics/equity_curve.py +0 -0
  268. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/services/metrics/exposure.py +0 -0
  269. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/services/metrics/mean_daily_return.py +0 -0
  270. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/services/metrics/price_efficiency.py +0 -0
  271. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/services/metrics/profit_factor.py +0 -0
  272. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/services/metrics/recovery.py +0 -0
  273. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/services/metrics/risk_free_rate.py +0 -0
  274. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/services/metrics/sortino_ratio.py +0 -0
  275. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/services/metrics/standard_deviation.py +0 -0
  276. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/services/metrics/trades.py +0 -0
  277. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/services/metrics/treynor_ratio.py +0 -0
  278. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/services/metrics/ulcer.py +0 -0
  279. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/services/metrics/value_at_risk.py +0 -0
  280. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/services/metrics/volatility.py +0 -0
  281. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/services/metrics/win_rate.py +0 -0
  282. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/services/order_service/__init__.py +0 -0
  283. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/services/order_service/order_backtest_service.py +0 -0
  284. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/services/order_service/order_executor_lookup.py +0 -0
  285. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/services/order_service/order_service.py +0 -0
  286. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/services/portfolios/__init__.py +0 -0
  287. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/services/portfolios/backtest_portfolio_service.py +0 -0
  288. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/services/portfolios/portfolio_configuration_service.py +0 -0
  289. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/services/portfolios/portfolio_provider_lookup.py +0 -0
  290. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/services/portfolios/portfolio_service.py +0 -0
  291. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/services/portfolios/portfolio_snapshot_service.py +0 -0
  292. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/services/portfolios/portfolio_sync_service.py +0 -0
  293. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/services/positions/__init__.py +0 -0
  294. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/services/positions/position_service.py +0 -0
  295. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/services/positions/position_snapshot_service.py +0 -0
  296. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/services/repository_service.py +0 -0
  297. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/services/trade_order_evaluator/__init__.py +0 -0
  298. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/services/trade_order_evaluator/backtest_trade_oder_evaluator.py +0 -0
  299. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/services/trade_order_evaluator/default_trade_order_evaluator.py +0 -0
  300. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/services/trade_order_evaluator/trade_order_evaluator.py +0 -0
  301. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/services/trade_service/__init__.py +0 -0
  302. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/services/trade_service/trade_service.py +0 -0
  303. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/services/trade_service/trade_stop_loss_service.py +0 -0
  304. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.7.0}/investing_algorithm_framework/services/trade_service/trade_take_profit_service.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: investing-algorithm-framework
3
- Version: 8.6.0
3
+ Version: 8.7.0
4
4
  Summary: A framework for creating trading bots
5
5
  Author: MDUYN
6
6
  Requires-Python: >=3.10,<4.0
@@ -27,9 +27,11 @@ Requires-Dist: ccxt (>=4.2.48)
27
27
  Requires-Dist: dependency-injector (>=4.40.0)
28
28
  Requires-Dist: jupyter (>=1.0.0)
29
29
  Requires-Dist: marshmallow (>=3.5.0)
30
+ Requires-Dist: msgpack (>=1.0.0)
30
31
  Requires-Dist: plotly (>=6.1.2,<7.0.0)
31
32
  Requires-Dist: polars[numpy,pandas] (>=0.20.10)
32
33
  Requires-Dist: polygon-api-client (>=1.14.0,<2.0.0) ; extra == "polygon" or extra == "all"
34
+ Requires-Dist: pyarrow (>=14.0.0)
33
35
  Requires-Dist: python-dateutil (>=2.8.2)
34
36
  Requires-Dist: python-dotenv (>=1.0.1,<2.0.0)
35
37
  Requires-Dist: schedule (>=1.1.0)
@@ -37,6 +39,7 @@ Requires-Dist: tabulate (>=0.9.0)
37
39
  Requires-Dist: tqdm (>=4.66.1)
38
40
  Requires-Dist: wrapt (>=1.16.0)
39
41
  Requires-Dist: yfinance (>=0.2.61,<0.3.0) ; extra == "yahoo" or extra == "all"
42
+ Requires-Dist: zstandard (>=0.20.0)
40
43
  Description-Content-Type: text/markdown
41
44
 
42
45
  <h1 align="center">
@@ -79,7 +82,11 @@ Description-Content-Type: text/markdown
79
82
  </h4>
80
83
 
81
84
  <p align="center">
82
- <img src="static/showcase.svg" alt="dashboard" style="max-width: 100%;">
85
+ <picture>
86
+ <source media="(prefers-color-scheme: dark)" srcset="static/features/hero-dark.svg">
87
+ <source media="(prefers-color-scheme: light)" srcset="static/features/hero-light.svg">
88
+ <img src="static/features/hero-dark.svg" alt="Investing Algorithm Framework — features overview" style="max-width: 100%;">
89
+ </picture>
83
90
  </p>
84
91
 
85
92
  <p align="center">
@@ -89,17 +96,9 @@ Description-Content-Type: text/markdown
89
96
  </p>
90
97
 
91
98
  <p align="center">
92
- <sub><b>Sponsored by</b></sub>
99
+ <sub>Proudly sponsored by</sub>
93
100
  <br>
94
- <a href="https://www.finterion.com/" target="_blank">
95
- <picture>
96
- <source media="(prefers-color-scheme: dark)" srcset="static/sponsors/finterion-dark.png">
97
- <source media="(prefers-color-scheme: light)" srcset="static/sponsors/finterion-light.png">
98
- <img src="static/sponsors/finterion-light.png" alt="Finterion" width="200">
99
- </picture>
100
- </a>
101
- <br>
102
- <sub>Marketplace for trading bots</sub>
101
+ <a href="https://www.finterion.com/" target="_blank"><picture><source media="(prefers-color-scheme: dark)" srcset="static/sponsors/finterion-dark.png"><source media="(prefers-color-scheme: light)" srcset="static/sponsors/finterion-light.png"><img src="static/sponsors/finterion-light.png" alt="Finterion" width="180"></picture></a>
103
102
  </p>
104
103
 
105
104
  ## Introduction
@@ -116,6 +115,7 @@ This framework is built around the full loop: **create strategies → vector bac
116
115
  </summary> <br>
117
116
 
118
117
  - 📊 **30+ Metrics** — CAGR, Sharpe, Sortino, Calmar, VaR, CVaR, Max DD, Recovery & more
118
+ - 🧮 **[Cross-Sectional Pipelines](https://coding-kitties.github.io/investing-algorithm-framework/Advanced%20Concepts/pipelines)** — Rank, filter and score entire universes of symbols every iteration with a tidy factor table
119
119
  - ⚡ **Vector Backtesting for Signal Analysis** — Quickly test your strategy logic on historical data to see how signals would have behaved before committing to full event-driven backtests
120
120
  - 🏃 **Event-Driven Backtesting** — Once promising strategies are identified via vector backtests, run full event-driven backtests to simulate realistic execution and portfolio management
121
121
  - 🔀 **Permutation Testing / Monte Carlo Simulations** — Assess the statistical robustness of your strategies by running them across randomized market scenarios to see how often your results could occur by chance
@@ -127,13 +127,116 @@ This framework is built around the full loop: **create strategies → vector bac
127
127
  - 🎯 **Return Scenario Projections** — Good, average, bad & very bad year projections from backtest data
128
128
  - 📉 **Benchmark Comparison** — Beat-rate analysis vs Buy & Hold, DCA, risk-free & custom benchmarks
129
129
  - 📄 **One-Click HTML Report** — Self-contained file, no server, dark & light theme, shareable
130
+ - 📦 **Custom `.iafbt` Backtest Bundle Format** — An explicit, versioned, compressed, language-portable container (zstd + msgpack with magic-byte header) plus a separate parquet index for fast filtering without loading. ~21× smaller and ~27× fewer files than standard filebased directory layouts, with parallel I/O for fast load/save of large amounts of backtests.
130
131
  - 🌐 **Load External Data** — Fetch CSV, JSON, or Parquet from any URL with caching and auto-refresh
131
132
  - � **[Record Custom Variables](https://coding-kitties.github.io/investing-algorithm-framework/Advanced%20Concepts/recording-variables)** — Track any indicator or metric during backtests with `context.record()`
132
133
  - �🚀 **Build → Backtest → Deploy** — Local dev, cloud deploy (AWS / Azure), or monetize on Finterion
133
134
 
134
135
  </details>
135
136
 
136
- ## Usage
137
+ <details open>
138
+ <summary>
139
+ <strong>Backtesting Engines</strong>
140
+ </summary> <br>
141
+
142
+ ### ⚡ Vector Backtesting — Test thousands of strategies, fast
143
+
144
+ Polars-powered vectorized signal evaluation. Compare thousands of strategies side by side, sweep parameter grids, run multi-window robustness checks, rank by key metrics and surface your top candidates in seconds — all before committing to a full event-driven simulation.
145
+
146
+ <p align="center">
147
+ <picture>
148
+ <source media="(prefers-color-scheme: dark)" srcset="static/features/vector-backtest-dark.svg">
149
+ <source media="(prefers-color-scheme: light)" srcset="static/features/vector-backtest-light.svg">
150
+ <img src="static/features/vector-backtest-dark.svg" alt="Vector backtest engine — run thousands of strategies in parallel" style="max-width: 100%;">
151
+ </picture>
152
+ </p>
153
+
154
+ ### 🏃 Event-Driven Backtesting — Bar-by-bar realism
155
+
156
+ Once you've narrowed down promising strategies, run them through a full event-driven simulation. Pluggable slippage and fill models, partial fills, and a complete simulation blotter — using the **same code path** you'll deploy live.
157
+
158
+ <p align="center">
159
+ <picture>
160
+ <source media="(prefers-color-scheme: dark)" srcset="static/features/event-backtest-dark.svg">
161
+ <source media="(prefers-color-scheme: light)" srcset="static/features/event-backtest-light.svg">
162
+ <img src="static/features/event-backtest-dark.svg" alt="Event-driven backtest engine — bar-by-bar realism with order fills" style="max-width: 100%;">
163
+ </picture>
164
+ </p>
165
+
166
+ </details>
167
+
168
+ <details open>
169
+ <summary>
170
+ <strong>Backtest Analysis & Dashboard</strong>
171
+ </summary> <br>
172
+
173
+ Every backtest produces a **self-contained HTML dashboard** — open it in any browser, share with teammates, archive it. No server, no Jupyter, no dependencies. Compare strategies side-by-side, drill into trades, and capture your reasoning as you go.
174
+
175
+ <p align="center">
176
+ <picture>
177
+ <source media="(prefers-color-scheme: dark)" srcset="static/features/dashboard-dark.svg">
178
+ <source media="(prefers-color-scheme: light)" srcset="static/features/dashboard-light.svg">
179
+ <img src="static/features/dashboard-dark.svg" alt="Backtest analysis dashboard with MCP server and notes" style="max-width: 100%;">
180
+ </picture>
181
+ </p>
182
+
183
+ - **Self-contained HTML reports** — equity curves, drawdowns, trade lists, monthly returns, side-by-side strategy comparison
184
+ - **Built-in MCP server** — let Copilot, Claude, or any MCP-compatible agent query your backtests, rank strategies, and reason over trades through `investing-algorithm-framework mcp`
185
+ - **Notes keeping** — annotate every backtest with hypotheses, observations and conclusions; notes travel with the report so your research is never lost
186
+
187
+ → [Backtest dashboard docs](https://coding-kitties.github.io/investing-algorithm-framework/Getting%20Started/backtesting) · [MCP server docs](https://coding-kitties.github.io/investing-algorithm-framework/Advanced%20Concepts/mcp-server)
188
+
189
+ </details>
190
+
191
+ <details open>
192
+ <summary>
193
+ <strong>Live Trading</strong>
194
+ </summary> <br>
195
+
196
+ Once a strategy proves itself in backtests, deploy it with the **same code path** you backtested. Connect to any exchange — use the built-in [CCXT](https://github.com/ccxt/ccxt) integration, or plug in your own [`OrderExecutor`](https://coding-kitties.github.io/investing-algorithm-framework/Advanced%20Concepts/custom-order-executors) for brokers, FIX gateways, or any custom venue. Run locally, in Docker, or deploy serverless to **AWS Lambda** or **Azure Functions**. Built-in portfolio tracking, position management, order persistence, and automatic state recovery.
197
+
198
+ <p align="center">
199
+ <picture>
200
+ <source media="(prefers-color-scheme: dark)" srcset="static/features/live-trading-dark.svg">
201
+ <source media="(prefers-color-scheme: light)" srcset="static/features/live-trading-light.svg">
202
+ <img src="static/features/live-trading-dark.svg" alt="Live trading & deployment — AWS Lambda and Azure Functions" style="max-width: 100%;">
203
+ </picture>
204
+ </p>
205
+
206
+ - **No code rewrites** — your `TradingStrategy` runs identically in backtest, paper trading and live
207
+ - **Cloud deploy** — `investing-algorithm-framework init --type aws_lambda` / `--type azure_function`
208
+ - **Multiple exchanges & venues** — CCXT integration out of the box (Binance, Bitvavo, Coinbase, Kraken …), or plug in your own `OrderExecutor` for any broker / FIX / custom venue
209
+ - **Portfolio persistence** — trades, orders and positions survive restarts
210
+
211
+ → [Live trading & deployment docs](https://coding-kitties.github.io/investing-algorithm-framework/Getting%20Started/deployment)
212
+
213
+ </details>
214
+
215
+ <details open>
216
+ <summary>
217
+ <strong>Marketplace Integration</strong>
218
+ </summary> <br>
219
+
220
+ Publish your winning strategies to the [**Finterion**](https://www.finterion.com/) marketplace and monetize them. Investors subscribe to your bot, you earn a recurring revenue share — the framework handles the technical integration.
221
+
222
+ <p align="center">
223
+ <a href="https://www.finterion.com/" target="_blank">
224
+ <picture>
225
+ <source media="(prefers-color-scheme: dark)" srcset="static/features/marketplace-dark.svg">
226
+ <source media="(prefers-color-scheme: light)" srcset="static/features/marketplace-light.svg">
227
+ <img src="static/features/marketplace-dark.svg" alt="Marketplace integration — featuring Finterion" style="max-width: 100%;">
228
+ </picture>
229
+ </a>
230
+ </p>
231
+
232
+ → [Finterion plugin](https://github.com/Finterion/finterion-investing-algorithm-framework-plugin)
233
+
234
+ </details>
235
+
236
+ <details>
237
+ <summary>
238
+ <strong>Usage and Installation</strong>
239
+ </summary> <br>
137
240
 
138
241
  To get started, install the framework and scaffold a new project:
139
242
 
@@ -283,6 +386,14 @@ Create as many strategy variants as you want — different parameters, different
283
386
 
284
387
  Every backtest produces a **single HTML file** you can open in any browser, share with teammates, or archive. No server, no dependencies, no Jupyter required.
285
388
 
389
+ <p align="center">
390
+ <picture>
391
+ <source media="(prefers-color-scheme: dark)" srcset="static/features/dashboard-dark.svg">
392
+ <source media="(prefers-color-scheme: light)" srcset="static/features/dashboard-light.svg">
393
+ <img src="static/features/dashboard-dark.svg" alt="Self-contained HTML backtest dashboard" style="max-width: 100%;">
394
+ </picture>
395
+ </p>
396
+
286
397
  ```python
287
398
  from investing_algorithm_framework import BacktestReport
288
399
 
@@ -318,6 +429,7 @@ report.save("my_report.html")
318
429
  | **[Backtest Report Dashboard](https://coding-kitties.github.io/investing-algorithm-framework/Getting%20Started/backtest-reports)** | Self-contained HTML report with ranking tables, equity curves, metric charts, heatmaps, and strategy comparison |
319
430
  | **[Event-Driven Backtesting](https://coding-kitties.github.io/investing-algorithm-framework/Getting%20Started/backtesting)** | Realistic, order-by-order simulation |
320
431
  | **[Vectorized Backtesting](https://coding-kitties.github.io/investing-algorithm-framework/Getting%20Started/vector-backtesting)** | Fast signal research and prototyping |
432
+ | **[Cross-Sectional Pipelines](https://coding-kitties.github.io/investing-algorithm-framework/Advanced%20Concepts/pipelines)** | Compute factors across many symbols at once — rank, filter and score universes per iteration |
321
433
  | **50+ Metrics** | CAGR, Sharpe, Sortino, max drawdown, win rate, profit factor, recovery factor, volatility, and more |
322
434
  | **[Live Trading](https://coding-kitties.github.io/investing-algorithm-framework/Getting%20Started/application-setup)** | Connect to exchanges via CCXT for real-time execution |
323
435
  | **[Portfolio Management](https://coding-kitties.github.io/investing-algorithm-framework/Getting%20Started/portfolio-configuration)** | Position tracking, trade management, persistence |
@@ -330,14 +442,23 @@ report.save("my_report.html")
330
442
 
331
443
  </details>
332
444
 
333
- ## Plugins
445
+ </details>
446
+
447
+ <details>
448
+ <summary>
449
+ <strong>Plugins</strong>
450
+ </summary> <br>
334
451
 
335
452
  | Plugin | Description |
336
453
  |--------|-------------|
337
454
  | [PyIndicators](https://github.com/coding-kitties/PyIndicators) | Technical analysis indicators (EMA, RSI, MACD, etc.) |
338
455
  | [Finterion Plugin](https://github.com/Finterion/finterion-investing-algorithm-framework-plugin) | Share and monetize strategies on Finterion's marketplace |
339
456
 
340
- ## Development
457
+ </details>
458
+
459
+ ## Development & Contributing
460
+
461
+ We welcome contributions! Open an issue, pick one up, or send a PR.
341
462
 
342
463
  ```bash
343
464
  git clone https://github.com/coding-kitties/investing-algorithm-framework.git
@@ -348,6 +469,10 @@ poetry install
348
469
  python -m unittest discover -s tests
349
470
  ```
350
471
 
472
+ - [Open an issue](https://github.com/coding-kitties/investing-algorithm-framework/issues/new) for bugs or ideas
473
+ - Read the [Contributing Guide](https://coding-kitties.github.io/investing-algorithm-framework/Contributing%20Guide/contributing)
474
+ - PRs go against the `dev` branch
475
+
351
476
  ## Resources
352
477
 
353
478
  - **[Documentation](https://coding-kitties.github.io/investing-algorithm-framework/)** — Guides and API reference
@@ -355,12 +480,6 @@ python -m unittest discover -s tests
355
480
  - **[Discord](https://discord.gg/dQsRmGZP)** — Chat and support
356
481
  - **[Reddit](https://www.reddit.com/r/InvestingBots/)** — Strategy discussion
357
482
 
358
- ## Contributing
359
-
360
- - [Open an issue](https://github.com/coding-kitties/investing-algorithm-framework/issues/new) for bugs or ideas
361
- - Read the [Contributing Guide](https://coding-kitties.github.io/investing-algorithm-framework/Contributing%20Guide/contributing)
362
- - PRs go against the `dev` branch
363
-
364
483
  ## Risk Disclaimer
365
484
 
366
485
  If you use this framework for real trading, **do not risk money you are afraid to lose.** Test thoroughly with backtesting first. Start small. We assume no responsibility for your investment results.
@@ -38,7 +38,11 @@
38
38
  </h4>
39
39
 
40
40
  <p align="center">
41
- <img src="static/showcase.svg" alt="dashboard" style="max-width: 100%;">
41
+ <picture>
42
+ <source media="(prefers-color-scheme: dark)" srcset="static/features/hero-dark.svg">
43
+ <source media="(prefers-color-scheme: light)" srcset="static/features/hero-light.svg">
44
+ <img src="static/features/hero-dark.svg" alt="Investing Algorithm Framework — features overview" style="max-width: 100%;">
45
+ </picture>
42
46
  </p>
43
47
 
44
48
  <p align="center">
@@ -48,17 +52,9 @@
48
52
  </p>
49
53
 
50
54
  <p align="center">
51
- <sub><b>Sponsored by</b></sub>
55
+ <sub>Proudly sponsored by</sub>
52
56
  <br>
53
- <a href="https://www.finterion.com/" target="_blank">
54
- <picture>
55
- <source media="(prefers-color-scheme: dark)" srcset="static/sponsors/finterion-dark.png">
56
- <source media="(prefers-color-scheme: light)" srcset="static/sponsors/finterion-light.png">
57
- <img src="static/sponsors/finterion-light.png" alt="Finterion" width="200">
58
- </picture>
59
- </a>
60
- <br>
61
- <sub>Marketplace for trading bots</sub>
57
+ <a href="https://www.finterion.com/" target="_blank"><picture><source media="(prefers-color-scheme: dark)" srcset="static/sponsors/finterion-dark.png"><source media="(prefers-color-scheme: light)" srcset="static/sponsors/finterion-light.png"><img src="static/sponsors/finterion-light.png" alt="Finterion" width="180"></picture></a>
62
58
  </p>
63
59
 
64
60
  ## Introduction
@@ -75,6 +71,7 @@ This framework is built around the full loop: **create strategies → vector bac
75
71
  </summary> <br>
76
72
 
77
73
  - 📊 **30+ Metrics** — CAGR, Sharpe, Sortino, Calmar, VaR, CVaR, Max DD, Recovery & more
74
+ - 🧮 **[Cross-Sectional Pipelines](https://coding-kitties.github.io/investing-algorithm-framework/Advanced%20Concepts/pipelines)** — Rank, filter and score entire universes of symbols every iteration with a tidy factor table
78
75
  - ⚡ **Vector Backtesting for Signal Analysis** — Quickly test your strategy logic on historical data to see how signals would have behaved before committing to full event-driven backtests
79
76
  - 🏃 **Event-Driven Backtesting** — Once promising strategies are identified via vector backtests, run full event-driven backtests to simulate realistic execution and portfolio management
80
77
  - 🔀 **Permutation Testing / Monte Carlo Simulations** — Assess the statistical robustness of your strategies by running them across randomized market scenarios to see how often your results could occur by chance
@@ -86,13 +83,116 @@ This framework is built around the full loop: **create strategies → vector bac
86
83
  - 🎯 **Return Scenario Projections** — Good, average, bad & very bad year projections from backtest data
87
84
  - 📉 **Benchmark Comparison** — Beat-rate analysis vs Buy & Hold, DCA, risk-free & custom benchmarks
88
85
  - 📄 **One-Click HTML Report** — Self-contained file, no server, dark & light theme, shareable
86
+ - 📦 **Custom `.iafbt` Backtest Bundle Format** — An explicit, versioned, compressed, language-portable container (zstd + msgpack with magic-byte header) plus a separate parquet index for fast filtering without loading. ~21× smaller and ~27× fewer files than standard filebased directory layouts, with parallel I/O for fast load/save of large amounts of backtests.
89
87
  - 🌐 **Load External Data** — Fetch CSV, JSON, or Parquet from any URL with caching and auto-refresh
90
88
  - � **[Record Custom Variables](https://coding-kitties.github.io/investing-algorithm-framework/Advanced%20Concepts/recording-variables)** — Track any indicator or metric during backtests with `context.record()`
91
89
  - �🚀 **Build → Backtest → Deploy** — Local dev, cloud deploy (AWS / Azure), or monetize on Finterion
92
90
 
93
91
  </details>
94
92
 
95
- ## Usage
93
+ <details open>
94
+ <summary>
95
+ <strong>Backtesting Engines</strong>
96
+ </summary> <br>
97
+
98
+ ### ⚡ Vector Backtesting — Test thousands of strategies, fast
99
+
100
+ Polars-powered vectorized signal evaluation. Compare thousands of strategies side by side, sweep parameter grids, run multi-window robustness checks, rank by key metrics and surface your top candidates in seconds — all before committing to a full event-driven simulation.
101
+
102
+ <p align="center">
103
+ <picture>
104
+ <source media="(prefers-color-scheme: dark)" srcset="static/features/vector-backtest-dark.svg">
105
+ <source media="(prefers-color-scheme: light)" srcset="static/features/vector-backtest-light.svg">
106
+ <img src="static/features/vector-backtest-dark.svg" alt="Vector backtest engine — run thousands of strategies in parallel" style="max-width: 100%;">
107
+ </picture>
108
+ </p>
109
+
110
+ ### 🏃 Event-Driven Backtesting — Bar-by-bar realism
111
+
112
+ Once you've narrowed down promising strategies, run them through a full event-driven simulation. Pluggable slippage and fill models, partial fills, and a complete simulation blotter — using the **same code path** you'll deploy live.
113
+
114
+ <p align="center">
115
+ <picture>
116
+ <source media="(prefers-color-scheme: dark)" srcset="static/features/event-backtest-dark.svg">
117
+ <source media="(prefers-color-scheme: light)" srcset="static/features/event-backtest-light.svg">
118
+ <img src="static/features/event-backtest-dark.svg" alt="Event-driven backtest engine — bar-by-bar realism with order fills" style="max-width: 100%;">
119
+ </picture>
120
+ </p>
121
+
122
+ </details>
123
+
124
+ <details open>
125
+ <summary>
126
+ <strong>Backtest Analysis & Dashboard</strong>
127
+ </summary> <br>
128
+
129
+ Every backtest produces a **self-contained HTML dashboard** — open it in any browser, share with teammates, archive it. No server, no Jupyter, no dependencies. Compare strategies side-by-side, drill into trades, and capture your reasoning as you go.
130
+
131
+ <p align="center">
132
+ <picture>
133
+ <source media="(prefers-color-scheme: dark)" srcset="static/features/dashboard-dark.svg">
134
+ <source media="(prefers-color-scheme: light)" srcset="static/features/dashboard-light.svg">
135
+ <img src="static/features/dashboard-dark.svg" alt="Backtest analysis dashboard with MCP server and notes" style="max-width: 100%;">
136
+ </picture>
137
+ </p>
138
+
139
+ - **Self-contained HTML reports** — equity curves, drawdowns, trade lists, monthly returns, side-by-side strategy comparison
140
+ - **Built-in MCP server** — let Copilot, Claude, or any MCP-compatible agent query your backtests, rank strategies, and reason over trades through `investing-algorithm-framework mcp`
141
+ - **Notes keeping** — annotate every backtest with hypotheses, observations and conclusions; notes travel with the report so your research is never lost
142
+
143
+ → [Backtest dashboard docs](https://coding-kitties.github.io/investing-algorithm-framework/Getting%20Started/backtesting) · [MCP server docs](https://coding-kitties.github.io/investing-algorithm-framework/Advanced%20Concepts/mcp-server)
144
+
145
+ </details>
146
+
147
+ <details open>
148
+ <summary>
149
+ <strong>Live Trading</strong>
150
+ </summary> <br>
151
+
152
+ Once a strategy proves itself in backtests, deploy it with the **same code path** you backtested. Connect to any exchange — use the built-in [CCXT](https://github.com/ccxt/ccxt) integration, or plug in your own [`OrderExecutor`](https://coding-kitties.github.io/investing-algorithm-framework/Advanced%20Concepts/custom-order-executors) for brokers, FIX gateways, or any custom venue. Run locally, in Docker, or deploy serverless to **AWS Lambda** or **Azure Functions**. Built-in portfolio tracking, position management, order persistence, and automatic state recovery.
153
+
154
+ <p align="center">
155
+ <picture>
156
+ <source media="(prefers-color-scheme: dark)" srcset="static/features/live-trading-dark.svg">
157
+ <source media="(prefers-color-scheme: light)" srcset="static/features/live-trading-light.svg">
158
+ <img src="static/features/live-trading-dark.svg" alt="Live trading & deployment — AWS Lambda and Azure Functions" style="max-width: 100%;">
159
+ </picture>
160
+ </p>
161
+
162
+ - **No code rewrites** — your `TradingStrategy` runs identically in backtest, paper trading and live
163
+ - **Cloud deploy** — `investing-algorithm-framework init --type aws_lambda` / `--type azure_function`
164
+ - **Multiple exchanges & venues** — CCXT integration out of the box (Binance, Bitvavo, Coinbase, Kraken …), or plug in your own `OrderExecutor` for any broker / FIX / custom venue
165
+ - **Portfolio persistence** — trades, orders and positions survive restarts
166
+
167
+ → [Live trading & deployment docs](https://coding-kitties.github.io/investing-algorithm-framework/Getting%20Started/deployment)
168
+
169
+ </details>
170
+
171
+ <details open>
172
+ <summary>
173
+ <strong>Marketplace Integration</strong>
174
+ </summary> <br>
175
+
176
+ Publish your winning strategies to the [**Finterion**](https://www.finterion.com/) marketplace and monetize them. Investors subscribe to your bot, you earn a recurring revenue share — the framework handles the technical integration.
177
+
178
+ <p align="center">
179
+ <a href="https://www.finterion.com/" target="_blank">
180
+ <picture>
181
+ <source media="(prefers-color-scheme: dark)" srcset="static/features/marketplace-dark.svg">
182
+ <source media="(prefers-color-scheme: light)" srcset="static/features/marketplace-light.svg">
183
+ <img src="static/features/marketplace-dark.svg" alt="Marketplace integration — featuring Finterion" style="max-width: 100%;">
184
+ </picture>
185
+ </a>
186
+ </p>
187
+
188
+ → [Finterion plugin](https://github.com/Finterion/finterion-investing-algorithm-framework-plugin)
189
+
190
+ </details>
191
+
192
+ <details>
193
+ <summary>
194
+ <strong>Usage and Installation</strong>
195
+ </summary> <br>
96
196
 
97
197
  To get started, install the framework and scaffold a new project:
98
198
 
@@ -242,6 +342,14 @@ Create as many strategy variants as you want — different parameters, different
242
342
 
243
343
  Every backtest produces a **single HTML file** you can open in any browser, share with teammates, or archive. No server, no dependencies, no Jupyter required.
244
344
 
345
+ <p align="center">
346
+ <picture>
347
+ <source media="(prefers-color-scheme: dark)" srcset="static/features/dashboard-dark.svg">
348
+ <source media="(prefers-color-scheme: light)" srcset="static/features/dashboard-light.svg">
349
+ <img src="static/features/dashboard-dark.svg" alt="Self-contained HTML backtest dashboard" style="max-width: 100%;">
350
+ </picture>
351
+ </p>
352
+
245
353
  ```python
246
354
  from investing_algorithm_framework import BacktestReport
247
355
 
@@ -277,6 +385,7 @@ report.save("my_report.html")
277
385
  | **[Backtest Report Dashboard](https://coding-kitties.github.io/investing-algorithm-framework/Getting%20Started/backtest-reports)** | Self-contained HTML report with ranking tables, equity curves, metric charts, heatmaps, and strategy comparison |
278
386
  | **[Event-Driven Backtesting](https://coding-kitties.github.io/investing-algorithm-framework/Getting%20Started/backtesting)** | Realistic, order-by-order simulation |
279
387
  | **[Vectorized Backtesting](https://coding-kitties.github.io/investing-algorithm-framework/Getting%20Started/vector-backtesting)** | Fast signal research and prototyping |
388
+ | **[Cross-Sectional Pipelines](https://coding-kitties.github.io/investing-algorithm-framework/Advanced%20Concepts/pipelines)** | Compute factors across many symbols at once — rank, filter and score universes per iteration |
280
389
  | **50+ Metrics** | CAGR, Sharpe, Sortino, max drawdown, win rate, profit factor, recovery factor, volatility, and more |
281
390
  | **[Live Trading](https://coding-kitties.github.io/investing-algorithm-framework/Getting%20Started/application-setup)** | Connect to exchanges via CCXT for real-time execution |
282
391
  | **[Portfolio Management](https://coding-kitties.github.io/investing-algorithm-framework/Getting%20Started/portfolio-configuration)** | Position tracking, trade management, persistence |
@@ -289,14 +398,23 @@ report.save("my_report.html")
289
398
 
290
399
  </details>
291
400
 
292
- ## Plugins
401
+ </details>
402
+
403
+ <details>
404
+ <summary>
405
+ <strong>Plugins</strong>
406
+ </summary> <br>
293
407
 
294
408
  | Plugin | Description |
295
409
  |--------|-------------|
296
410
  | [PyIndicators](https://github.com/coding-kitties/PyIndicators) | Technical analysis indicators (EMA, RSI, MACD, etc.) |
297
411
  | [Finterion Plugin](https://github.com/Finterion/finterion-investing-algorithm-framework-plugin) | Share and monetize strategies on Finterion's marketplace |
298
412
 
299
- ## Development
413
+ </details>
414
+
415
+ ## Development & Contributing
416
+
417
+ We welcome contributions! Open an issue, pick one up, or send a PR.
300
418
 
301
419
  ```bash
302
420
  git clone https://github.com/coding-kitties/investing-algorithm-framework.git
@@ -307,6 +425,10 @@ poetry install
307
425
  python -m unittest discover -s tests
308
426
  ```
309
427
 
428
+ - [Open an issue](https://github.com/coding-kitties/investing-algorithm-framework/issues/new) for bugs or ideas
429
+ - Read the [Contributing Guide](https://coding-kitties.github.io/investing-algorithm-framework/Contributing%20Guide/contributing)
430
+ - PRs go against the `dev` branch
431
+
310
432
  ## Resources
311
433
 
312
434
  - **[Documentation](https://coding-kitties.github.io/investing-algorithm-framework/)** — Guides and API reference
@@ -314,12 +436,6 @@ python -m unittest discover -s tests
314
436
  - **[Discord](https://discord.gg/dQsRmGZP)** — Chat and support
315
437
  - **[Reddit](https://www.reddit.com/r/InvestingBots/)** — Strategy discussion
316
438
 
317
- ## Contributing
318
-
319
- - [Open an issue](https://github.com/coding-kitties/investing-algorithm-framework/issues/new) for bugs or ideas
320
- - Read the [Contributing Guide](https://coding-kitties.github.io/investing-algorithm-framework/Contributing%20Guide/contributing)
321
- - PRs go against the `dev` branch
322
-
323
439
  ## Risk Disclaimer
324
440
 
325
441
  If you use this framework for real trading, **do not risk money you are afraid to lose.** Test thoroughly with backtesting first. Start small. We assume no responsibility for your investment results.
@@ -30,7 +30,11 @@ from .domain import ApiException, combine_backtests, PositionSize, \
30
30
  VolumeImpactSlippage, \
31
31
  CommissionModel, NoCommission, PercentageCommission, FixedCommission, \
32
32
  FillModel, FullFill, VolumeBasedFill, \
33
- FXRateProvider, StaticFXRateProvider
33
+ FXRateProvider, StaticFXRateProvider, \
34
+ Pipeline, Factor, CustomFactor, Filter, \
35
+ Returns, AverageDollarVolume, AverageTradedValue, SMA, RSI, \
36
+ Volatility, StaticPerSymbol, CrossSectionalMean, RollingBeta, \
37
+ Neutralize
34
38
  from .infrastructure import AzureBlobStorageStateHandler, \
35
39
  CSVOHLCVDataProvider, CSVTickerDataProvider, CSVURLDataProvider, \
36
40
  JSONURLDataProvider, ParquetURLDataProvider, \
@@ -256,6 +260,21 @@ __all__ = [
256
260
  "VolumeBasedFill",
257
261
  "FXRateProvider",
258
262
  "StaticFXRateProvider",
263
+ # Pipeline API (Phase 1, see docs/design/pipeline-api.md)
264
+ "Pipeline",
265
+ "Factor",
266
+ "CustomFactor",
267
+ "Filter",
268
+ "Returns",
269
+ "AverageDollarVolume",
270
+ "AverageTradedValue",
271
+ "SMA",
272
+ "RSI",
273
+ "Volatility",
274
+ "StaticPerSymbol",
275
+ "CrossSectionalMean",
276
+ "RollingBeta",
277
+ "Neutralize",
259
278
  "load_ipython_extension",
260
279
  "get_cv_consistency",
261
280
  "get_normalized_stability",
@@ -4,7 +4,7 @@ import os
4
4
  import threading
5
5
  from datetime import datetime, timezone, timedelta
6
6
  from pathlib import Path
7
- from typing import List, Optional, Any, Dict, Tuple, Callable, Union
7
+ from typing import List, Literal, Optional, Any, Dict, Tuple, Callable, Union
8
8
 
9
9
  from flask import Flask
10
10
 
@@ -985,6 +985,8 @@ class App:
985
985
  ] = None,
986
986
  backtest_storage_directory: Optional[Union[str, Path]] = None,
987
987
  use_checkpoints: bool = False,
988
+ force_rerun: Union[bool, Literal["stale"]] = False,
989
+ on_checkpoint_match: Literal["skip", "rerun", "warn"] = "skip",
988
990
  batch_size: int = 50,
989
991
  checkpoint_batch_size: int = 25,
990
992
  n_workers: Optional[int] = None,
@@ -1087,7 +1089,24 @@ class App:
1087
1089
  instead of running a new backtest. This is useful for
1088
1090
  long-running backtests that might take a while to complete.
1089
1091
  When enabled, uses the optimized version with batching and
1090
- optional parallel processing.
1092
+ optional parallel processing. Checkpoints are content-aware:
1093
+ each entry stores a manifest hash that fingerprints the
1094
+ strategy code, parameters, data sources, and date range.
1095
+ Strategies whose hash differs from the stored hash are
1096
+ rerun automatically.
1097
+ force_rerun (Union[bool, Literal["stale"]]): Override checkpoint
1098
+ skipping behaviour.
1099
+
1100
+ - False (default): Skip strategies with a matching checkpoint.
1101
+ - "stale": Rerun only strategies whose stored checkpoint hash
1102
+ differs from the current manifest hash.
1103
+ - True: Ignore checkpoints entirely and rerun all strategies.
1104
+ on_checkpoint_match (Literal["skip", "rerun", "warn"]): Behaviour
1105
+ when a strategy's checkpoint matches.
1106
+
1107
+ - "skip" (default): Silently skip the strategy.
1108
+ - "warn": Skip but emit a single log line per match batch.
1109
+ - "rerun": Rerun the strategy anyway.
1091
1110
  batch_size (int): Number of strategies to process in each batch
1092
1111
  before memory cleanup. Only used when use_checkpoints=True.
1093
1112
  Default: 100. Higher values use more memory but may be faster.
@@ -1204,6 +1223,8 @@ class App:
1204
1223
  checkpoint_batch_size=checkpoint_batch_size,
1205
1224
  n_workers=n_workers,
1206
1225
  use_checkpoints=use_checkpoints,
1226
+ force_rerun=force_rerun,
1227
+ on_checkpoint_match=on_checkpoint_match,
1207
1228
  dynamic_position_sizing=dynamic_position_sizing,
1208
1229
  fill_missing_data=fill_missing_data,
1209
1230
  iterative_summary_update=iterative_summary_update,
@@ -1381,6 +1402,8 @@ class App:
1381
1402
  metadata: Optional[Dict[str, str]] = None,
1382
1403
  backtest_storage_directory: Optional[Union[str, Path]] = None,
1383
1404
  use_checkpoints: bool = False,
1405
+ force_rerun: Union[bool, Literal["stale"]] = False,
1406
+ on_checkpoint_match: Literal["skip", "rerun", "warn"] = "skip",
1384
1407
  show_progress: bool = False,
1385
1408
  continue_on_error: bool = False,
1386
1409
  window_filter_function: Optional[Callable] = None,
@@ -1420,7 +1443,16 @@ class App:
1420
1443
  backtest_storage_directory (Union[str, Path]): Directory to save
1421
1444
  backtests to.
1422
1445
  use_checkpoints (bool): Whether to use checkpointing to resume
1423
- interrupted backtests.
1446
+ interrupted backtests. Checkpoints are content-aware:
1447
+ strategies whose code or parameters have changed since the
1448
+ last run are detected and rerun automatically.
1449
+ force_rerun (Union[bool, Literal["stale"]]): Override checkpoint
1450
+ skipping behaviour. ``False`` (default) skips matched
1451
+ checkpoints, ``"stale"`` reruns only mismatched ones, and
1452
+ ``True`` reruns everything.
1453
+ on_checkpoint_match (Literal["skip", "rerun", "warn"]): Behaviour
1454
+ on a matching checkpoint. ``"skip"`` (default) silently
1455
+ skips, ``"warn"`` skips and logs, ``"rerun"`` reruns anyway.
1424
1456
  show_progress (bool): Whether to show progress bars.
1425
1457
  continue_on_error (bool): Whether to continue on errors.
1426
1458
  window_filter_function: Filter function applied after each
@@ -1533,6 +1565,8 @@ class App:
1533
1565
  final_filter_function=final_filter_function,
1534
1566
  backtest_storage_directory=backtest_storage_directory,
1535
1567
  use_checkpoints=use_checkpoints,
1568
+ force_rerun=force_rerun,
1569
+ on_checkpoint_match=on_checkpoint_match,
1536
1570
  batch_size=batch_size,
1537
1571
  checkpoint_batch_size=checkpoint_batch_size,
1538
1572
  fill_missing_data=fill_missing_data,