investing-algorithm-framework 8.6.0__tar.gz → 8.6.1__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 (291) hide show
  1. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/PKG-INFO +136 -21
  2. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/README.md +135 -20
  3. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/app/app.py +37 -3
  4. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/backtesting/backtest.py +30 -6
  5. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/backtesting/backtest_metrics.py +15 -0
  6. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/backtesting/backtest_summary_metrics.py +24 -0
  7. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/backtesting/combine_backtests.py +35 -16
  8. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/models/data/data_source.py +7 -3
  9. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/infrastructure/services/backtesting/backtest_service.py +302 -77
  10. investing_algorithm_framework-8.6.1/investing_algorithm_framework/infrastructure/services/backtesting/checkpoint_manifest.py +240 -0
  11. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/services/metrics/generate.py +24 -4
  12. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/services/metrics/returns.py +13 -4
  13. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/pyproject.toml +1 -1
  14. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/LICENSE +0 -0
  15. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/__init__.py +0 -0
  16. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/analysis/__init__.py +0 -0
  17. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/analysis/backtest_data_ranges.py +0 -0
  18. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/analysis/markdown.py +0 -0
  19. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/analysis/ranking.py +0 -0
  20. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/app/__init__.py +0 -0
  21. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/app/algorithm/__init__.py +0 -0
  22. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/app/algorithm/algorithm.py +0 -0
  23. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/app/algorithm/algorithm_factory.py +0 -0
  24. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/app/app_hook.py +0 -0
  25. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/app/context.py +0 -0
  26. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/app/eventloop.py +0 -0
  27. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/app/reporting/__init__.py +0 -0
  28. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/app/reporting/ascii.py +0 -0
  29. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/app/reporting/backtest_report.py +0 -0
  30. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/app/reporting/backtest_report_old.py +0 -0
  31. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/app/reporting/charts/__init__.py +0 -0
  32. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/app/reporting/charts/entry_exist_signals.py +0 -0
  33. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/app/reporting/charts/equity_curve.py +0 -0
  34. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/app/reporting/charts/equity_curve_drawdown.py +0 -0
  35. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/app/reporting/charts/line_chart.py +0 -0
  36. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/app/reporting/charts/monthly_returns_heatmap.py +0 -0
  37. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/app/reporting/charts/ohlcv_data_completeness.py +0 -0
  38. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/app/reporting/charts/rolling_sharp_ratio.py +0 -0
  39. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/app/reporting/charts/yearly_returns_barchart.py +0 -0
  40. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/app/reporting/generate.py +0 -0
  41. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/app/reporting/tables/__init__.py +0 -0
  42. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/app/reporting/tables/key_metrics_table.py +0 -0
  43. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/app/reporting/tables/stop_loss_table.py +0 -0
  44. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/app/reporting/tables/time_metrics_table.py +0 -0
  45. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/app/reporting/tables/trade_metrics_table.py +0 -0
  46. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/app/reporting/tables/trades_table.py +0 -0
  47. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/app/reporting/tables/utils.py +0 -0
  48. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/app/reporting/templates/dashboard.css +0 -0
  49. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/app/reporting/templates/dashboard.js +0 -0
  50. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/app/reporting/templates/dashboard_template.html.j2 +0 -0
  51. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/app/reporting/templates/report_template.html.j2 +0 -0
  52. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/app/stateless/__init__.py +0 -0
  53. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/app/stateless/action_handlers/__init__.py +0 -0
  54. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/app/stateless/action_handlers/action_handler_strategy.py +0 -0
  55. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/app/stateless/action_handlers/check_online_handler.py +0 -0
  56. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/app/stateless/action_handlers/run_strategy_handler.py +0 -0
  57. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/app/stateless/exception_handler.py +0 -0
  58. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/app/strategy.py +0 -0
  59. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/app/task.py +0 -0
  60. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/app/web/__init__.py +0 -0
  61. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/app/web/controllers/__init__.py +0 -0
  62. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/app/web/controllers/orders.py +0 -0
  63. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/app/web/controllers/portfolio.py +0 -0
  64. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/app/web/controllers/positions.py +0 -0
  65. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/app/web/create_app.py +0 -0
  66. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/app/web/error_handler.py +0 -0
  67. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/app/web/responses.py +0 -0
  68. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/app/web/run_strategies.py +0 -0
  69. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/app/web/schemas/__init__.py +0 -0
  70. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/app/web/schemas/order.py +0 -0
  71. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/app/web/schemas/portfolio.py +0 -0
  72. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/app/web/schemas/position.py +0 -0
  73. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/app/web/setup_cors.py +0 -0
  74. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/cli/__init__.py +0 -0
  75. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/cli/cli.py +0 -0
  76. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/cli/deploy_to_aws_lambda.py +0 -0
  77. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/cli/deploy_to_azure_function.py +0 -0
  78. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/cli/initialize_app.py +0 -0
  79. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/cli/mcp_server.py +0 -0
  80. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/cli/templates/.gitignore.template +0 -0
  81. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/cli/templates/app.py.template +0 -0
  82. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/cli/templates/app_aws_lambda_function.py.template +0 -0
  83. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/cli/templates/app_azure_function.py.template +0 -0
  84. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/cli/templates/app_web.py.template +0 -0
  85. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/cli/templates/aws_lambda_dockerfile.template +0 -0
  86. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/cli/templates/aws_lambda_dockerignore.template +0 -0
  87. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/cli/templates/aws_lambda_readme.md.template +0 -0
  88. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/cli/templates/aws_lambda_requirements.txt.template +0 -0
  89. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/cli/templates/azure_function_function_app.py.template +0 -0
  90. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/cli/templates/azure_function_host.json.template +0 -0
  91. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/cli/templates/azure_function_local.settings.json.template +0 -0
  92. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/cli/templates/azure_function_requirements.txt.template +0 -0
  93. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/cli/templates/data_providers.py.template +0 -0
  94. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/cli/templates/env.example.template +0 -0
  95. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/cli/templates/env_azure_function.example.template +0 -0
  96. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/cli/templates/market_data_providers.py.template +0 -0
  97. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/cli/templates/readme.md.template +0 -0
  98. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/cli/templates/requirements.txt.template +0 -0
  99. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/cli/templates/run_backtest.py.template +0 -0
  100. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/cli/templates/strategy.py.template +0 -0
  101. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/cli/validate_backtest_checkpoints.py +0 -0
  102. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/create_app.py +0 -0
  103. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/dependency_container.py +0 -0
  104. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/__init__.py +0 -0
  105. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/algorithm_id.py +0 -0
  106. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/backtesting/__init__.py +0 -0
  107. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/backtesting/backtest_date_range.py +0 -0
  108. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/backtesting/backtest_evaluation_focuss.py +0 -0
  109. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/backtesting/backtest_permutation_test.py +0 -0
  110. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/backtesting/backtest_run.py +0 -0
  111. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/backtesting/backtest_utils.py +0 -0
  112. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/backtesting/consistency.py +0 -0
  113. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/backtesting/templates/backtest.html +0 -0
  114. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/backtesting/templates/finterion-dark.png +0 -0
  115. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/backtesting/templates/finterion-light.png +0 -0
  116. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/blotter.py +0 -0
  117. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/config.py +0 -0
  118. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/constants.py +0 -0
  119. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/data_provider.py +0 -0
  120. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/data_structures.py +0 -0
  121. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/decimal_parsing.py +0 -0
  122. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/exceptions.py +0 -0
  123. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/fx.py +0 -0
  124. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/models/__init__.py +0 -0
  125. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/models/app_mode.py +0 -0
  126. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/models/base_model.py +0 -0
  127. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/models/data/__init__.py +0 -0
  128. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/models/data/data_type.py +0 -0
  129. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/models/event.py +0 -0
  130. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/models/market/__init__.py +0 -0
  131. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/models/market/market_credential.py +0 -0
  132. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/models/order/__init__.py +0 -0
  133. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/models/order/order.py +0 -0
  134. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/models/order/order_side.py +0 -0
  135. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/models/order/order_status.py +0 -0
  136. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/models/order/order_type.py +0 -0
  137. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/models/portfolio/__init__.py +0 -0
  138. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/models/portfolio/portfolio.py +0 -0
  139. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/models/portfolio/portfolio_configuration.py +0 -0
  140. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/models/portfolio/portfolio_snapshot.py +0 -0
  141. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/models/position/__init__.py +0 -0
  142. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/models/position/position.py +0 -0
  143. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/models/position/position_size.py +0 -0
  144. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/models/position/position_snapshot.py +0 -0
  145. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/models/risk_rules/__init__.py +0 -0
  146. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/models/risk_rules/scaling_rule.py +0 -0
  147. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/models/risk_rules/stop_loss_rule.py +0 -0
  148. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/models/risk_rules/take_profit_rule.py +0 -0
  149. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/models/risk_rules/trading_cost.py +0 -0
  150. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/models/snapshot_interval.py +0 -0
  151. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/models/strategy_profile.py +0 -0
  152. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/models/time_frame.py +0 -0
  153. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/models/time_interval.py +0 -0
  154. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/models/time_unit.py +0 -0
  155. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/models/tracing/__init__.py +0 -0
  156. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/models/tracing/trace.py +0 -0
  157. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/models/trade/__init__.py +0 -0
  158. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/models/trade/trade.py +0 -0
  159. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/models/trade/trade_status.py +0 -0
  160. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/models/trade/trade_stop_loss.py +0 -0
  161. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/models/trade/trade_take_profit.py +0 -0
  162. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/order_executor.py +0 -0
  163. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/portfolio_provider.py +0 -0
  164. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/services/__init__.py +0 -0
  165. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/services/market_credential_service.py +0 -0
  166. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/services/portfolios/__init__.py +0 -0
  167. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/services/portfolios/portfolio_sync_service.py +0 -0
  168. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/services/rounding_service.py +0 -0
  169. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/services/state_handler.py +0 -0
  170. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/stateless_actions.py +0 -0
  171. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/strategy.py +0 -0
  172. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/utils/__init__.py +0 -0
  173. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/utils/csv.py +0 -0
  174. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/utils/custom_tqdm.py +0 -0
  175. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/utils/dates.py +0 -0
  176. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/utils/jupyter_notebook_detection.py +0 -0
  177. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/utils/polars.py +0 -0
  178. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/utils/random.py +0 -0
  179. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/utils/signatures.py +0 -0
  180. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/utils/stoppable_thread.py +0 -0
  181. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/domain/utils/synchronized.py +0 -0
  182. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/download_data.py +0 -0
  183. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/infrastructure/__init__.py +0 -0
  184. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/infrastructure/data_providers/__init__.py +0 -0
  185. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/infrastructure/data_providers/alpha_vantage.py +0 -0
  186. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/infrastructure/data_providers/base_url.py +0 -0
  187. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/infrastructure/data_providers/ccxt.py +0 -0
  188. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/infrastructure/data_providers/csv.py +0 -0
  189. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/infrastructure/data_providers/csv_url.py +0 -0
  190. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/infrastructure/data_providers/json_url.py +0 -0
  191. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/infrastructure/data_providers/ohlcv_base.py +0 -0
  192. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/infrastructure/data_providers/pandas.py +0 -0
  193. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/infrastructure/data_providers/parquet_url.py +0 -0
  194. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/infrastructure/data_providers/polygon.py +0 -0
  195. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/infrastructure/data_providers/yahoo.py +0 -0
  196. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/infrastructure/database/__init__.py +0 -0
  197. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/infrastructure/database/sql_alchemy.py +0 -0
  198. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/infrastructure/models/__init__.py +0 -0
  199. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/infrastructure/models/decimal_parser.py +0 -0
  200. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/infrastructure/models/model_extension.py +0 -0
  201. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/infrastructure/models/order/__init__.py +0 -0
  202. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/infrastructure/models/order/order.py +0 -0
  203. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/infrastructure/models/order/trade_allocation.py +0 -0
  204. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/infrastructure/models/order_trade_association.py +0 -0
  205. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/infrastructure/models/portfolio/__init__.py +0 -0
  206. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/infrastructure/models/portfolio/portfolio_snapshot.py +0 -0
  207. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/infrastructure/models/portfolio/sql_portfolio.py +0 -0
  208. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/infrastructure/models/position/__init__.py +0 -0
  209. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/infrastructure/models/position/position.py +0 -0
  210. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/infrastructure/models/position/position_snapshot.py +0 -0
  211. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/infrastructure/models/trades/__init__.py +0 -0
  212. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/infrastructure/models/trades/trade.py +0 -0
  213. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/infrastructure/models/trades/trade_stop_loss.py +0 -0
  214. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/infrastructure/models/trades/trade_take_profit.py +0 -0
  215. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/infrastructure/order_executors/__init__.py +0 -0
  216. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/infrastructure/order_executors/ccxt_order_executor.py +0 -0
  217. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/infrastructure/portfolio_providers/__init__.py +0 -0
  218. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/infrastructure/portfolio_providers/ccxt_portfolio_provider.py +0 -0
  219. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/infrastructure/repositories/__init__.py +0 -0
  220. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/infrastructure/repositories/order_repository.py +0 -0
  221. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/infrastructure/repositories/portfolio_repository.py +0 -0
  222. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/infrastructure/repositories/portfolio_snapshot_repository.py +0 -0
  223. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/infrastructure/repositories/position_repository.py +0 -0
  224. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/infrastructure/repositories/position_snapshot_repository.py +0 -0
  225. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/infrastructure/repositories/repository.py +0 -0
  226. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/infrastructure/repositories/trade_allocation_repository.py +0 -0
  227. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/infrastructure/repositories/trade_repository.py +0 -0
  228. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/infrastructure/repositories/trade_stop_loss_repository.py +0 -0
  229. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/infrastructure/repositories/trade_take_profit_repository.py +0 -0
  230. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/infrastructure/services/__init__.py +0 -0
  231. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/infrastructure/services/aws/__init__.py +0 -0
  232. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/infrastructure/services/aws/state_handler.py +0 -0
  233. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/infrastructure/services/azure/__init__.py +0 -0
  234. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/infrastructure/services/azure/state_handler.py +0 -0
  235. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/infrastructure/services/backtesting/__init__.py +0 -0
  236. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/infrastructure/services/backtesting/event_backtest_service.py +0 -0
  237. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/infrastructure/services/backtesting/vector_backtest_service.py +0 -0
  238. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/notebook/__init__.py +0 -0
  239. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/notebook/magic.py +0 -0
  240. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/services/__init__.py +0 -0
  241. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/services/configuration_service.py +0 -0
  242. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/services/data_providers/__init__.py +0 -0
  243. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/services/data_providers/data.py +0 -0
  244. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/services/data_providers/data_provider_service.py +0 -0
  245. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/services/market_credential_service.py +0 -0
  246. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/services/metrics/__init__.py +0 -0
  247. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/services/metrics/alpha.py +0 -0
  248. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/services/metrics/beta.py +0 -0
  249. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/services/metrics/cagr.py +0 -0
  250. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/services/metrics/calmar_ratio.py +0 -0
  251. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/services/metrics/consistency.py +0 -0
  252. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/services/metrics/drawdown.py +0 -0
  253. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/services/metrics/equity_curve.py +0 -0
  254. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/services/metrics/exposure.py +0 -0
  255. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/services/metrics/mean_daily_return.py +0 -0
  256. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/services/metrics/price_efficiency.py +0 -0
  257. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/services/metrics/profit_factor.py +0 -0
  258. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/services/metrics/recovery.py +0 -0
  259. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/services/metrics/risk_free_rate.py +0 -0
  260. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/services/metrics/sharpe_ratio.py +0 -0
  261. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/services/metrics/sortino_ratio.py +0 -0
  262. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/services/metrics/standard_deviation.py +0 -0
  263. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/services/metrics/trades.py +0 -0
  264. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/services/metrics/treynor_ratio.py +0 -0
  265. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/services/metrics/ulcer.py +0 -0
  266. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/services/metrics/value_at_risk.py +0 -0
  267. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/services/metrics/volatility.py +0 -0
  268. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/services/metrics/win_rate.py +0 -0
  269. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/services/order_service/__init__.py +0 -0
  270. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/services/order_service/order_backtest_service.py +0 -0
  271. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/services/order_service/order_executor_lookup.py +0 -0
  272. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/services/order_service/order_service.py +0 -0
  273. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/services/portfolios/__init__.py +0 -0
  274. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/services/portfolios/backtest_portfolio_service.py +0 -0
  275. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/services/portfolios/portfolio_configuration_service.py +0 -0
  276. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/services/portfolios/portfolio_provider_lookup.py +0 -0
  277. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/services/portfolios/portfolio_service.py +0 -0
  278. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/services/portfolios/portfolio_snapshot_service.py +0 -0
  279. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/services/portfolios/portfolio_sync_service.py +0 -0
  280. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/services/positions/__init__.py +0 -0
  281. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/services/positions/position_service.py +0 -0
  282. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/services/positions/position_snapshot_service.py +0 -0
  283. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/services/repository_service.py +0 -0
  284. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/services/trade_order_evaluator/__init__.py +0 -0
  285. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/services/trade_order_evaluator/backtest_trade_oder_evaluator.py +0 -0
  286. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/services/trade_order_evaluator/default_trade_order_evaluator.py +0 -0
  287. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/services/trade_order_evaluator/trade_order_evaluator.py +0 -0
  288. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/services/trade_service/__init__.py +0 -0
  289. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/services/trade_service/trade_service.py +0 -0
  290. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/investing_algorithm_framework/services/trade_service/trade_stop_loss_service.py +0 -0
  291. {investing_algorithm_framework-8.6.0 → investing_algorithm_framework-8.6.1}/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.6.1
4
4
  Summary: A framework for creating trading bots
5
5
  Author: MDUYN
6
6
  Requires-Python: >=3.10,<4.0
@@ -79,7 +79,11 @@ Description-Content-Type: text/markdown
79
79
  </h4>
80
80
 
81
81
  <p align="center">
82
- <img src="static/showcase.svg" alt="dashboard" style="max-width: 100%;">
82
+ <picture>
83
+ <source media="(prefers-color-scheme: dark)" srcset="static/features/hero-dark.svg">
84
+ <source media="(prefers-color-scheme: light)" srcset="static/features/hero-light.svg">
85
+ <img src="static/features/hero-dark.svg" alt="Investing Algorithm Framework — features overview" style="max-width: 100%;">
86
+ </picture>
83
87
  </p>
84
88
 
85
89
  <p align="center">
@@ -89,17 +93,9 @@ Description-Content-Type: text/markdown
89
93
  </p>
90
94
 
91
95
  <p align="center">
92
- <sub><b>Sponsored by</b></sub>
96
+ <sub>Proudly sponsored by</sub>
93
97
  <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>
98
+ <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
99
  </p>
104
100
 
105
101
  ## Introduction
@@ -116,6 +112,7 @@ This framework is built around the full loop: **create strategies → vector bac
116
112
  </summary> <br>
117
113
 
118
114
  - 📊 **30+ Metrics** — CAGR, Sharpe, Sortino, Calmar, VaR, CVaR, Max DD, Recovery & more
115
+ - 🧮 **[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
116
  - ⚡ **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
117
  - 🏃 **Event-Driven Backtesting** — Once promising strategies are identified via vector backtests, run full event-driven backtests to simulate realistic execution and portfolio management
121
118
  - 🔀 **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
@@ -133,7 +130,109 @@ This framework is built around the full loop: **create strategies → vector bac
133
130
 
134
131
  </details>
135
132
 
136
- ## Usage
133
+ <details open>
134
+ <summary>
135
+ <strong>Backtesting Engines</strong>
136
+ </summary> <br>
137
+
138
+ ### ⚡ Vector Backtesting — Test thousands of strategies, fast
139
+
140
+ 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.
141
+
142
+ <p align="center">
143
+ <picture>
144
+ <source media="(prefers-color-scheme: dark)" srcset="static/features/vector-backtest-dark.svg">
145
+ <source media="(prefers-color-scheme: light)" srcset="static/features/vector-backtest-light.svg">
146
+ <img src="static/features/vector-backtest-dark.svg" alt="Vector backtest engine — run thousands of strategies in parallel" style="max-width: 100%;">
147
+ </picture>
148
+ </p>
149
+
150
+ ### 🏃 Event-Driven Backtesting — Bar-by-bar realism
151
+
152
+ 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.
153
+
154
+ <p align="center">
155
+ <picture>
156
+ <source media="(prefers-color-scheme: dark)" srcset="static/features/event-backtest-dark.svg">
157
+ <source media="(prefers-color-scheme: light)" srcset="static/features/event-backtest-light.svg">
158
+ <img src="static/features/event-backtest-dark.svg" alt="Event-driven backtest engine — bar-by-bar realism with order fills" style="max-width: 100%;">
159
+ </picture>
160
+ </p>
161
+
162
+ </details>
163
+
164
+ <details open>
165
+ <summary>
166
+ <strong>Backtest Analysis & Dashboard</strong>
167
+ </summary> <br>
168
+
169
+ 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.
170
+
171
+ <p align="center">
172
+ <picture>
173
+ <source media="(prefers-color-scheme: dark)" srcset="static/features/dashboard-dark.svg">
174
+ <source media="(prefers-color-scheme: light)" srcset="static/features/dashboard-light.svg">
175
+ <img src="static/features/dashboard-dark.svg" alt="Backtest analysis dashboard with MCP server and notes" style="max-width: 100%;">
176
+ </picture>
177
+ </p>
178
+
179
+ - **Self-contained HTML reports** — equity curves, drawdowns, trade lists, monthly returns, side-by-side strategy comparison
180
+ - **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`
181
+ - **Notes keeping** — annotate every backtest with hypotheses, observations and conclusions; notes travel with the report so your research is never lost
182
+
183
+ → [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)
184
+
185
+ </details>
186
+
187
+ <details open>
188
+ <summary>
189
+ <strong>Live Trading</strong>
190
+ </summary> <br>
191
+
192
+ 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.
193
+
194
+ <p align="center">
195
+ <picture>
196
+ <source media="(prefers-color-scheme: dark)" srcset="static/features/live-trading-dark.svg">
197
+ <source media="(prefers-color-scheme: light)" srcset="static/features/live-trading-light.svg">
198
+ <img src="static/features/live-trading-dark.svg" alt="Live trading & deployment — AWS Lambda and Azure Functions" style="max-width: 100%;">
199
+ </picture>
200
+ </p>
201
+
202
+ - **No code rewrites** — your `TradingStrategy` runs identically in backtest, paper trading and live
203
+ - **Cloud deploy** — `investing-algorithm-framework init --type aws_lambda` / `--type azure_function`
204
+ - **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
205
+ - **Portfolio persistence** — trades, orders and positions survive restarts
206
+
207
+ → [Live trading & deployment docs](https://coding-kitties.github.io/investing-algorithm-framework/Getting%20Started/deployment)
208
+
209
+ </details>
210
+
211
+ <details open>
212
+ <summary>
213
+ <strong>Marketplace Integration</strong>
214
+ </summary> <br>
215
+
216
+ 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.
217
+
218
+ <p align="center">
219
+ <a href="https://www.finterion.com/" target="_blank">
220
+ <picture>
221
+ <source media="(prefers-color-scheme: dark)" srcset="static/features/marketplace-dark.svg">
222
+ <source media="(prefers-color-scheme: light)" srcset="static/features/marketplace-light.svg">
223
+ <img src="static/features/marketplace-dark.svg" alt="Marketplace integration — featuring Finterion" style="max-width: 100%;">
224
+ </picture>
225
+ </a>
226
+ </p>
227
+
228
+ → [Finterion plugin](https://github.com/Finterion/finterion-investing-algorithm-framework-plugin)
229
+
230
+ </details>
231
+
232
+ <details>
233
+ <summary>
234
+ <strong>Usage and Installation</strong>
235
+ </summary> <br>
137
236
 
138
237
  To get started, install the framework and scaffold a new project:
139
238
 
@@ -283,6 +382,14 @@ Create as many strategy variants as you want — different parameters, different
283
382
 
284
383
  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
384
 
385
+ <p align="center">
386
+ <picture>
387
+ <source media="(prefers-color-scheme: dark)" srcset="static/features/dashboard-dark.svg">
388
+ <source media="(prefers-color-scheme: light)" srcset="static/features/dashboard-light.svg">
389
+ <img src="static/features/dashboard-dark.svg" alt="Self-contained HTML backtest dashboard" style="max-width: 100%;">
390
+ </picture>
391
+ </p>
392
+
286
393
  ```python
287
394
  from investing_algorithm_framework import BacktestReport
288
395
 
@@ -318,6 +425,7 @@ report.save("my_report.html")
318
425
  | **[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
426
  | **[Event-Driven Backtesting](https://coding-kitties.github.io/investing-algorithm-framework/Getting%20Started/backtesting)** | Realistic, order-by-order simulation |
320
427
  | **[Vectorized Backtesting](https://coding-kitties.github.io/investing-algorithm-framework/Getting%20Started/vector-backtesting)** | Fast signal research and prototyping |
428
+ | **[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
429
  | **50+ Metrics** | CAGR, Sharpe, Sortino, max drawdown, win rate, profit factor, recovery factor, volatility, and more |
322
430
  | **[Live Trading](https://coding-kitties.github.io/investing-algorithm-framework/Getting%20Started/application-setup)** | Connect to exchanges via CCXT for real-time execution |
323
431
  | **[Portfolio Management](https://coding-kitties.github.io/investing-algorithm-framework/Getting%20Started/portfolio-configuration)** | Position tracking, trade management, persistence |
@@ -330,14 +438,23 @@ report.save("my_report.html")
330
438
 
331
439
  </details>
332
440
 
333
- ## Plugins
441
+ </details>
442
+
443
+ <details>
444
+ <summary>
445
+ <strong>Plugins</strong>
446
+ </summary> <br>
334
447
 
335
448
  | Plugin | Description |
336
449
  |--------|-------------|
337
450
  | [PyIndicators](https://github.com/coding-kitties/PyIndicators) | Technical analysis indicators (EMA, RSI, MACD, etc.) |
338
451
  | [Finterion Plugin](https://github.com/Finterion/finterion-investing-algorithm-framework-plugin) | Share and monetize strategies on Finterion's marketplace |
339
452
 
340
- ## Development
453
+ </details>
454
+
455
+ ## Development & Contributing
456
+
457
+ We welcome contributions! Open an issue, pick one up, or send a PR.
341
458
 
342
459
  ```bash
343
460
  git clone https://github.com/coding-kitties/investing-algorithm-framework.git
@@ -348,6 +465,10 @@ poetry install
348
465
  python -m unittest discover -s tests
349
466
  ```
350
467
 
468
+ - [Open an issue](https://github.com/coding-kitties/investing-algorithm-framework/issues/new) for bugs or ideas
469
+ - Read the [Contributing Guide](https://coding-kitties.github.io/investing-algorithm-framework/Contributing%20Guide/contributing)
470
+ - PRs go against the `dev` branch
471
+
351
472
  ## Resources
352
473
 
353
474
  - **[Documentation](https://coding-kitties.github.io/investing-algorithm-framework/)** — Guides and API reference
@@ -355,12 +476,6 @@ python -m unittest discover -s tests
355
476
  - **[Discord](https://discord.gg/dQsRmGZP)** — Chat and support
356
477
  - **[Reddit](https://www.reddit.com/r/InvestingBots/)** — Strategy discussion
357
478
 
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
479
  ## Risk Disclaimer
365
480
 
366
481
  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
@@ -92,7 +89,109 @@ This framework is built around the full loop: **create strategies → vector bac
92
89
 
93
90
  </details>
94
91
 
95
- ## Usage
92
+ <details open>
93
+ <summary>
94
+ <strong>Backtesting Engines</strong>
95
+ </summary> <br>
96
+
97
+ ### ⚡ Vector Backtesting — Test thousands of strategies, fast
98
+
99
+ 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.
100
+
101
+ <p align="center">
102
+ <picture>
103
+ <source media="(prefers-color-scheme: dark)" srcset="static/features/vector-backtest-dark.svg">
104
+ <source media="(prefers-color-scheme: light)" srcset="static/features/vector-backtest-light.svg">
105
+ <img src="static/features/vector-backtest-dark.svg" alt="Vector backtest engine — run thousands of strategies in parallel" style="max-width: 100%;">
106
+ </picture>
107
+ </p>
108
+
109
+ ### 🏃 Event-Driven Backtesting — Bar-by-bar realism
110
+
111
+ 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.
112
+
113
+ <p align="center">
114
+ <picture>
115
+ <source media="(prefers-color-scheme: dark)" srcset="static/features/event-backtest-dark.svg">
116
+ <source media="(prefers-color-scheme: light)" srcset="static/features/event-backtest-light.svg">
117
+ <img src="static/features/event-backtest-dark.svg" alt="Event-driven backtest engine — bar-by-bar realism with order fills" style="max-width: 100%;">
118
+ </picture>
119
+ </p>
120
+
121
+ </details>
122
+
123
+ <details open>
124
+ <summary>
125
+ <strong>Backtest Analysis & Dashboard</strong>
126
+ </summary> <br>
127
+
128
+ 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.
129
+
130
+ <p align="center">
131
+ <picture>
132
+ <source media="(prefers-color-scheme: dark)" srcset="static/features/dashboard-dark.svg">
133
+ <source media="(prefers-color-scheme: light)" srcset="static/features/dashboard-light.svg">
134
+ <img src="static/features/dashboard-dark.svg" alt="Backtest analysis dashboard with MCP server and notes" style="max-width: 100%;">
135
+ </picture>
136
+ </p>
137
+
138
+ - **Self-contained HTML reports** — equity curves, drawdowns, trade lists, monthly returns, side-by-side strategy comparison
139
+ - **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`
140
+ - **Notes keeping** — annotate every backtest with hypotheses, observations and conclusions; notes travel with the report so your research is never lost
141
+
142
+ → [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)
143
+
144
+ </details>
145
+
146
+ <details open>
147
+ <summary>
148
+ <strong>Live Trading</strong>
149
+ </summary> <br>
150
+
151
+ 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.
152
+
153
+ <p align="center">
154
+ <picture>
155
+ <source media="(prefers-color-scheme: dark)" srcset="static/features/live-trading-dark.svg">
156
+ <source media="(prefers-color-scheme: light)" srcset="static/features/live-trading-light.svg">
157
+ <img src="static/features/live-trading-dark.svg" alt="Live trading & deployment — AWS Lambda and Azure Functions" style="max-width: 100%;">
158
+ </picture>
159
+ </p>
160
+
161
+ - **No code rewrites** — your `TradingStrategy` runs identically in backtest, paper trading and live
162
+ - **Cloud deploy** — `investing-algorithm-framework init --type aws_lambda` / `--type azure_function`
163
+ - **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
164
+ - **Portfolio persistence** — trades, orders and positions survive restarts
165
+
166
+ → [Live trading & deployment docs](https://coding-kitties.github.io/investing-algorithm-framework/Getting%20Started/deployment)
167
+
168
+ </details>
169
+
170
+ <details open>
171
+ <summary>
172
+ <strong>Marketplace Integration</strong>
173
+ </summary> <br>
174
+
175
+ 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.
176
+
177
+ <p align="center">
178
+ <a href="https://www.finterion.com/" target="_blank">
179
+ <picture>
180
+ <source media="(prefers-color-scheme: dark)" srcset="static/features/marketplace-dark.svg">
181
+ <source media="(prefers-color-scheme: light)" srcset="static/features/marketplace-light.svg">
182
+ <img src="static/features/marketplace-dark.svg" alt="Marketplace integration — featuring Finterion" style="max-width: 100%;">
183
+ </picture>
184
+ </a>
185
+ </p>
186
+
187
+ → [Finterion plugin](https://github.com/Finterion/finterion-investing-algorithm-framework-plugin)
188
+
189
+ </details>
190
+
191
+ <details>
192
+ <summary>
193
+ <strong>Usage and Installation</strong>
194
+ </summary> <br>
96
195
 
97
196
  To get started, install the framework and scaffold a new project:
98
197
 
@@ -242,6 +341,14 @@ Create as many strategy variants as you want — different parameters, different
242
341
 
243
342
  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
343
 
344
+ <p align="center">
345
+ <picture>
346
+ <source media="(prefers-color-scheme: dark)" srcset="static/features/dashboard-dark.svg">
347
+ <source media="(prefers-color-scheme: light)" srcset="static/features/dashboard-light.svg">
348
+ <img src="static/features/dashboard-dark.svg" alt="Self-contained HTML backtest dashboard" style="max-width: 100%;">
349
+ </picture>
350
+ </p>
351
+
245
352
  ```python
246
353
  from investing_algorithm_framework import BacktestReport
247
354
 
@@ -277,6 +384,7 @@ report.save("my_report.html")
277
384
  | **[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
385
  | **[Event-Driven Backtesting](https://coding-kitties.github.io/investing-algorithm-framework/Getting%20Started/backtesting)** | Realistic, order-by-order simulation |
279
386
  | **[Vectorized Backtesting](https://coding-kitties.github.io/investing-algorithm-framework/Getting%20Started/vector-backtesting)** | Fast signal research and prototyping |
387
+ | **[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
388
  | **50+ Metrics** | CAGR, Sharpe, Sortino, max drawdown, win rate, profit factor, recovery factor, volatility, and more |
281
389
  | **[Live Trading](https://coding-kitties.github.io/investing-algorithm-framework/Getting%20Started/application-setup)** | Connect to exchanges via CCXT for real-time execution |
282
390
  | **[Portfolio Management](https://coding-kitties.github.io/investing-algorithm-framework/Getting%20Started/portfolio-configuration)** | Position tracking, trade management, persistence |
@@ -289,14 +397,23 @@ report.save("my_report.html")
289
397
 
290
398
  </details>
291
399
 
292
- ## Plugins
400
+ </details>
401
+
402
+ <details>
403
+ <summary>
404
+ <strong>Plugins</strong>
405
+ </summary> <br>
293
406
 
294
407
  | Plugin | Description |
295
408
  |--------|-------------|
296
409
  | [PyIndicators](https://github.com/coding-kitties/PyIndicators) | Technical analysis indicators (EMA, RSI, MACD, etc.) |
297
410
  | [Finterion Plugin](https://github.com/Finterion/finterion-investing-algorithm-framework-plugin) | Share and monetize strategies on Finterion's marketplace |
298
411
 
299
- ## Development
412
+ </details>
413
+
414
+ ## Development & Contributing
415
+
416
+ We welcome contributions! Open an issue, pick one up, or send a PR.
300
417
 
301
418
  ```bash
302
419
  git clone https://github.com/coding-kitties/investing-algorithm-framework.git
@@ -307,6 +424,10 @@ poetry install
307
424
  python -m unittest discover -s tests
308
425
  ```
309
426
 
427
+ - [Open an issue](https://github.com/coding-kitties/investing-algorithm-framework/issues/new) for bugs or ideas
428
+ - Read the [Contributing Guide](https://coding-kitties.github.io/investing-algorithm-framework/Contributing%20Guide/contributing)
429
+ - PRs go against the `dev` branch
430
+
310
431
  ## Resources
311
432
 
312
433
  - **[Documentation](https://coding-kitties.github.io/investing-algorithm-framework/)** — Guides and API reference
@@ -314,12 +435,6 @@ python -m unittest discover -s tests
314
435
  - **[Discord](https://discord.gg/dQsRmGZP)** — Chat and support
315
436
  - **[Reddit](https://www.reddit.com/r/InvestingBots/)** — Strategy discussion
316
437
 
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
438
  ## Risk Disclaimer
324
439
 
325
440
  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.
@@ -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,
@@ -418,6 +418,23 @@ class Backtest:
418
418
  os.makedirs(destination_run_path, exist_ok=True)
419
419
  br.save(destination_run_path)
420
420
 
421
+ # Always rebuild the summary from the current set of backtest runs
422
+ # before writing it to disk. This guarantees that summary.json is
423
+ # self-consistent with the per-run metrics.json files (e.g.
424
+ # number_of_windows == number of runs, total_net_gain == sum of
425
+ # per-run total_net_gain, etc.) regardless of how the in-memory
426
+ # Backtest was constructed (single backtest, walk-forward,
427
+ # merge(), …). See issue #511.
428
+ if self.backtest_runs:
429
+ per_run_metrics = [
430
+ br.backtest_metrics for br in self.backtest_runs
431
+ if br.backtest_metrics is not None
432
+ ]
433
+ if per_run_metrics:
434
+ self.backtest_summary = generate_backtest_summary_metrics(
435
+ per_run_metrics
436
+ )
437
+
421
438
  # Save combined backtest metrics if available
422
439
  if self.backtest_summary:
423
440
  summary_file = os.path.join(
@@ -517,15 +534,22 @@ class Backtest:
517
534
  Backtest: The merged Backtest instance.
518
535
  """
519
536
 
520
- merged = Backtest()
537
+ merged = Backtest(algorithm_id=self.algorithm_id)
521
538
  merged.backtest_runs = self.backtest_runs + other.backtest_runs
522
539
 
523
- summary = BacktestSummaryMetrics()
524
-
525
- for bt_run in merged.get_all_backtest_metrics():
526
- summary.add(bt_run)
540
+ # Rebuild the summary from the full set of merged backtest runs.
541
+ # `BacktestSummaryMetrics` is a plain dataclass and does not expose
542
+ # an `add()` method, so the previous incremental approach raised
543
+ # AttributeError and silently produced a stale / single-window
544
+ # summary. See issue #511.
545
+ merged_metrics = merged.get_all_backtest_metrics()
546
+ if merged_metrics:
547
+ merged.backtest_summary = generate_backtest_summary_metrics(
548
+ merged_metrics
549
+ )
550
+ else:
551
+ merged.backtest_summary = BacktestSummaryMetrics()
527
552
 
528
- merged.backtest_summary = summary
529
553
  merged.backtest_permutation_tests = \
530
554
  self.backtest_permutation_tests + other.backtest_permutation_tests
531
555
 
@@ -20,6 +20,21 @@ class BacktestMetrics:
20
20
  total return, annualized return, volatility, Sharpe ratio,
21
21
  and maximum drawdown.
22
22
 
23
+ .. note:: Field semantics & known duplicates (issue #511)
24
+
25
+ - ``total_loss`` is the **gross loss magnitude** (a non-negative
26
+ number equal to ``sum(abs(net_gain))`` over losing trades).
27
+ ``total_loss_percentage`` is ``total_loss /
28
+ initial_unallocated`` (decimal, non-negative). These fields
29
+ no longer mirror ``total_net_gain`` / ``total_net_gain_pct``;
30
+ see B1 in issue #511.
31
+
32
+ - ``total_growth`` / ``total_growth_percentage`` are
33
+ numerically equivalent to ``total_net_gain`` /
34
+ ``total_net_gain_percentage`` for the standard
35
+ mark-to-market portfolio used in backtests. They are kept as
36
+ legacy aliases. See B3 in issue #511.
37
+
23
38
  Attributes:
24
39
  backtest_date_range_name (str): The name of the date range
25
40
  used for the backtest.
@@ -13,6 +13,30 @@ class BacktestSummaryMetrics:
13
13
  Represents the summarized results of a backtest,
14
14
  focusing on key headline performance and risk metrics.
15
15
 
16
+ .. note:: Field semantics & known duplicates (issue #511)
17
+
18
+ - ``total_loss`` / ``total_loss_percentage`` are gross-loss
19
+ based: ``total_loss`` is ``sum(per-run gross_loss)`` (a
20
+ non-negative magnitude in account currency) and
21
+ ``total_loss_percentage`` is ``total_loss /
22
+ sum(initial_unallocated)`` (decimal). They no longer mix
23
+ with net-return semantics. See B1/B2 in issue #511.
24
+
25
+ - ``total_growth`` / ``total_growth_percentage`` are
26
+ numerically equivalent to ``total_net_gain`` /
27
+ ``total_net_gain_percentage`` for closed-position backtests
28
+ because both are derived from the same start/end portfolio
29
+ values. They are kept for backwards compatibility but should
30
+ be considered legacy aliases. See B3 in issue #511.
31
+
32
+ - ``average_net_gain``, ``average_loss``, ``average_growth``
33
+ (and their ``*_percentage`` counterparts) are time-weighted
34
+ means **across windows**. For a single-window backtest they
35
+ collapse to the corresponding ``total_*`` value by
36
+ definition (weighted mean of one element equals that
37
+ element). See B4 in issue #511. For per-trade averages use
38
+ ``average_trade_*`` instead.
39
+
16
40
  Attributes:
17
41
  total_net_gain (float): Total net gain from the backtest.
18
42
  total_net_gain_percentage (float): Total net gain percentage