investing-algorithm-framework 8.4.0__tar.gz → 8.5.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 (288) hide show
  1. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/PKG-INFO +4 -14
  2. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/README.md +3 -13
  3. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/__init__.py +9 -0
  4. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/app/app.py +3 -2
  5. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/app/reporting/backtest_report.py +7 -3
  6. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/app/reporting/backtest_report_old.py +6 -3
  7. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/infrastructure/services/backtesting/backtest_service.py +127 -35
  8. investing_algorithm_framework-8.5.0/investing_algorithm_framework/notebook/__init__.py +3 -0
  9. investing_algorithm_framework-8.5.0/investing_algorithm_framework/notebook/magic.py +401 -0
  10. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/pyproject.toml +1 -1
  11. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/LICENSE +0 -0
  12. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/analysis/__init__.py +0 -0
  13. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/analysis/backtest_data_ranges.py +0 -0
  14. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/analysis/markdown.py +0 -0
  15. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/analysis/ranking.py +0 -0
  16. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/app/__init__.py +0 -0
  17. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/app/algorithm/__init__.py +0 -0
  18. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/app/algorithm/algorithm.py +0 -0
  19. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/app/algorithm/algorithm_factory.py +0 -0
  20. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/app/app_hook.py +0 -0
  21. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/app/context.py +0 -0
  22. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/app/eventloop.py +0 -0
  23. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/app/reporting/__init__.py +0 -0
  24. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/app/reporting/ascii.py +0 -0
  25. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/app/reporting/charts/__init__.py +0 -0
  26. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/app/reporting/charts/entry_exist_signals.py +0 -0
  27. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/app/reporting/charts/equity_curve.py +0 -0
  28. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/app/reporting/charts/equity_curve_drawdown.py +0 -0
  29. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/app/reporting/charts/line_chart.py +0 -0
  30. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/app/reporting/charts/monthly_returns_heatmap.py +0 -0
  31. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/app/reporting/charts/ohlcv_data_completeness.py +0 -0
  32. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/app/reporting/charts/rolling_sharp_ratio.py +0 -0
  33. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/app/reporting/charts/yearly_returns_barchart.py +0 -0
  34. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/app/reporting/generate.py +0 -0
  35. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/app/reporting/tables/__init__.py +0 -0
  36. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/app/reporting/tables/key_metrics_table.py +0 -0
  37. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/app/reporting/tables/stop_loss_table.py +0 -0
  38. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/app/reporting/tables/time_metrics_table.py +0 -0
  39. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/app/reporting/tables/trade_metrics_table.py +0 -0
  40. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/app/reporting/tables/trades_table.py +0 -0
  41. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/app/reporting/tables/utils.py +0 -0
  42. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/app/reporting/templates/dashboard.css +0 -0
  43. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/app/reporting/templates/dashboard.js +0 -0
  44. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/app/reporting/templates/dashboard_template.html.j2 +0 -0
  45. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/app/reporting/templates/report_template.html.j2 +0 -0
  46. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/app/stateless/__init__.py +0 -0
  47. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/app/stateless/action_handlers/__init__.py +0 -0
  48. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/app/stateless/action_handlers/action_handler_strategy.py +0 -0
  49. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/app/stateless/action_handlers/check_online_handler.py +0 -0
  50. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/app/stateless/action_handlers/run_strategy_handler.py +0 -0
  51. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/app/stateless/exception_handler.py +0 -0
  52. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/app/strategy.py +0 -0
  53. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/app/task.py +0 -0
  54. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/app/web/__init__.py +0 -0
  55. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/app/web/controllers/__init__.py +0 -0
  56. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/app/web/controllers/orders.py +0 -0
  57. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/app/web/controllers/portfolio.py +0 -0
  58. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/app/web/controllers/positions.py +0 -0
  59. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/app/web/create_app.py +0 -0
  60. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/app/web/error_handler.py +0 -0
  61. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/app/web/responses.py +0 -0
  62. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/app/web/run_strategies.py +0 -0
  63. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/app/web/schemas/__init__.py +0 -0
  64. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/app/web/schemas/order.py +0 -0
  65. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/app/web/schemas/portfolio.py +0 -0
  66. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/app/web/schemas/position.py +0 -0
  67. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/app/web/setup_cors.py +0 -0
  68. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/cli/__init__.py +0 -0
  69. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/cli/cli.py +0 -0
  70. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/cli/deploy_to_aws_lambda.py +0 -0
  71. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/cli/deploy_to_azure_function.py +0 -0
  72. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/cli/initialize_app.py +0 -0
  73. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/cli/mcp_server.py +0 -0
  74. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/cli/templates/.gitignore.template +0 -0
  75. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/cli/templates/app.py.template +0 -0
  76. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/cli/templates/app_aws_lambda_function.py.template +0 -0
  77. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/cli/templates/app_azure_function.py.template +0 -0
  78. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/cli/templates/app_web.py.template +0 -0
  79. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/cli/templates/aws_lambda_dockerfile.template +0 -0
  80. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/cli/templates/aws_lambda_dockerignore.template +0 -0
  81. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/cli/templates/aws_lambda_readme.md.template +0 -0
  82. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/cli/templates/aws_lambda_requirements.txt.template +0 -0
  83. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/cli/templates/azure_function_function_app.py.template +0 -0
  84. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/cli/templates/azure_function_host.json.template +0 -0
  85. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/cli/templates/azure_function_local.settings.json.template +0 -0
  86. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/cli/templates/azure_function_requirements.txt.template +0 -0
  87. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/cli/templates/data_providers.py.template +0 -0
  88. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/cli/templates/env.example.template +0 -0
  89. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/cli/templates/env_azure_function.example.template +0 -0
  90. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/cli/templates/market_data_providers.py.template +0 -0
  91. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/cli/templates/readme.md.template +0 -0
  92. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/cli/templates/requirements.txt.template +0 -0
  93. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/cli/templates/run_backtest.py.template +0 -0
  94. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/cli/templates/strategy.py.template +0 -0
  95. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/cli/validate_backtest_checkpoints.py +0 -0
  96. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/create_app.py +0 -0
  97. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/dependency_container.py +0 -0
  98. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/domain/__init__.py +0 -0
  99. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/domain/algorithm_id.py +0 -0
  100. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/domain/backtesting/__init__.py +0 -0
  101. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/domain/backtesting/backtest.py +0 -0
  102. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/domain/backtesting/backtest_date_range.py +0 -0
  103. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/domain/backtesting/backtest_evaluation_focuss.py +0 -0
  104. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/domain/backtesting/backtest_metrics.py +0 -0
  105. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/domain/backtesting/backtest_permutation_test.py +0 -0
  106. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/domain/backtesting/backtest_run.py +0 -0
  107. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/domain/backtesting/backtest_summary_metrics.py +0 -0
  108. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/domain/backtesting/backtest_utils.py +0 -0
  109. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/domain/backtesting/combine_backtests.py +0 -0
  110. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/domain/backtesting/templates/backtest.html +0 -0
  111. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/domain/backtesting/templates/finterion-dark.png +0 -0
  112. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/domain/backtesting/templates/finterion-light.png +0 -0
  113. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/domain/blotter.py +0 -0
  114. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/domain/config.py +0 -0
  115. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/domain/constants.py +0 -0
  116. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/domain/data_provider.py +0 -0
  117. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/domain/data_structures.py +0 -0
  118. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/domain/decimal_parsing.py +0 -0
  119. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/domain/exceptions.py +0 -0
  120. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/domain/fx.py +0 -0
  121. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/domain/models/__init__.py +0 -0
  122. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/domain/models/app_mode.py +0 -0
  123. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/domain/models/base_model.py +0 -0
  124. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/domain/models/data/__init__.py +0 -0
  125. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/domain/models/data/data_source.py +0 -0
  126. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/domain/models/data/data_type.py +0 -0
  127. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/domain/models/event.py +0 -0
  128. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/domain/models/market/__init__.py +0 -0
  129. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/domain/models/market/market_credential.py +0 -0
  130. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/domain/models/order/__init__.py +0 -0
  131. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/domain/models/order/order.py +0 -0
  132. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/domain/models/order/order_side.py +0 -0
  133. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/domain/models/order/order_status.py +0 -0
  134. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/domain/models/order/order_type.py +0 -0
  135. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/domain/models/portfolio/__init__.py +0 -0
  136. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/domain/models/portfolio/portfolio.py +0 -0
  137. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/domain/models/portfolio/portfolio_configuration.py +0 -0
  138. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/domain/models/portfolio/portfolio_snapshot.py +0 -0
  139. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/domain/models/position/__init__.py +0 -0
  140. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/domain/models/position/position.py +0 -0
  141. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/domain/models/position/position_size.py +0 -0
  142. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/domain/models/position/position_snapshot.py +0 -0
  143. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/domain/models/risk_rules/__init__.py +0 -0
  144. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/domain/models/risk_rules/scaling_rule.py +0 -0
  145. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/domain/models/risk_rules/stop_loss_rule.py +0 -0
  146. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/domain/models/risk_rules/take_profit_rule.py +0 -0
  147. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/domain/models/risk_rules/trading_cost.py +0 -0
  148. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/domain/models/snapshot_interval.py +0 -0
  149. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/domain/models/strategy_profile.py +0 -0
  150. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/domain/models/time_frame.py +0 -0
  151. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/domain/models/time_interval.py +0 -0
  152. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/domain/models/time_unit.py +0 -0
  153. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/domain/models/tracing/__init__.py +0 -0
  154. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/domain/models/tracing/trace.py +0 -0
  155. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/domain/models/trade/__init__.py +0 -0
  156. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/domain/models/trade/trade.py +0 -0
  157. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/domain/models/trade/trade_status.py +0 -0
  158. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/domain/models/trade/trade_stop_loss.py +0 -0
  159. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/domain/models/trade/trade_take_profit.py +0 -0
  160. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/domain/order_executor.py +0 -0
  161. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/domain/portfolio_provider.py +0 -0
  162. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/domain/services/__init__.py +0 -0
  163. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/domain/services/market_credential_service.py +0 -0
  164. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/domain/services/portfolios/__init__.py +0 -0
  165. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/domain/services/portfolios/portfolio_sync_service.py +0 -0
  166. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/domain/services/rounding_service.py +0 -0
  167. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/domain/services/state_handler.py +0 -0
  168. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/domain/stateless_actions.py +0 -0
  169. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/domain/strategy.py +0 -0
  170. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/domain/utils/__init__.py +0 -0
  171. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/domain/utils/csv.py +0 -0
  172. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/domain/utils/custom_tqdm.py +0 -0
  173. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/domain/utils/dates.py +0 -0
  174. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/domain/utils/jupyter_notebook_detection.py +0 -0
  175. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/domain/utils/polars.py +0 -0
  176. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/domain/utils/random.py +0 -0
  177. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/domain/utils/signatures.py +0 -0
  178. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/domain/utils/stoppable_thread.py +0 -0
  179. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/domain/utils/synchronized.py +0 -0
  180. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/download_data.py +0 -0
  181. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/infrastructure/__init__.py +0 -0
  182. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/infrastructure/data_providers/__init__.py +0 -0
  183. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/infrastructure/data_providers/alpha_vantage.py +0 -0
  184. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/infrastructure/data_providers/base_url.py +0 -0
  185. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/infrastructure/data_providers/ccxt.py +0 -0
  186. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/infrastructure/data_providers/csv.py +0 -0
  187. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/infrastructure/data_providers/csv_url.py +0 -0
  188. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/infrastructure/data_providers/json_url.py +0 -0
  189. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/infrastructure/data_providers/ohlcv_base.py +0 -0
  190. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/infrastructure/data_providers/pandas.py +0 -0
  191. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/infrastructure/data_providers/parquet_url.py +0 -0
  192. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/infrastructure/data_providers/polygon.py +0 -0
  193. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/infrastructure/data_providers/yahoo.py +0 -0
  194. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/infrastructure/database/__init__.py +0 -0
  195. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/infrastructure/database/sql_alchemy.py +0 -0
  196. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/infrastructure/models/__init__.py +0 -0
  197. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/infrastructure/models/decimal_parser.py +0 -0
  198. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/infrastructure/models/model_extension.py +0 -0
  199. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/infrastructure/models/order/__init__.py +0 -0
  200. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/infrastructure/models/order/order.py +0 -0
  201. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/infrastructure/models/order/trade_allocation.py +0 -0
  202. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/infrastructure/models/order_trade_association.py +0 -0
  203. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/infrastructure/models/portfolio/__init__.py +0 -0
  204. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/infrastructure/models/portfolio/portfolio_snapshot.py +0 -0
  205. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/infrastructure/models/portfolio/sql_portfolio.py +0 -0
  206. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/infrastructure/models/position/__init__.py +0 -0
  207. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/infrastructure/models/position/position.py +0 -0
  208. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/infrastructure/models/position/position_snapshot.py +0 -0
  209. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/infrastructure/models/trades/__init__.py +0 -0
  210. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/infrastructure/models/trades/trade.py +0 -0
  211. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/infrastructure/models/trades/trade_stop_loss.py +0 -0
  212. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/infrastructure/models/trades/trade_take_profit.py +0 -0
  213. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/infrastructure/order_executors/__init__.py +0 -0
  214. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/infrastructure/order_executors/ccxt_order_executor.py +0 -0
  215. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/infrastructure/portfolio_providers/__init__.py +0 -0
  216. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/infrastructure/portfolio_providers/ccxt_portfolio_provider.py +0 -0
  217. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/infrastructure/repositories/__init__.py +0 -0
  218. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/infrastructure/repositories/order_repository.py +0 -0
  219. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/infrastructure/repositories/portfolio_repository.py +0 -0
  220. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/infrastructure/repositories/portfolio_snapshot_repository.py +0 -0
  221. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/infrastructure/repositories/position_repository.py +0 -0
  222. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/infrastructure/repositories/position_snapshot_repository.py +0 -0
  223. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/infrastructure/repositories/repository.py +0 -0
  224. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/infrastructure/repositories/trade_allocation_repository.py +0 -0
  225. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/infrastructure/repositories/trade_repository.py +0 -0
  226. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/infrastructure/repositories/trade_stop_loss_repository.py +0 -0
  227. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/infrastructure/repositories/trade_take_profit_repository.py +0 -0
  228. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/infrastructure/services/__init__.py +0 -0
  229. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/infrastructure/services/aws/__init__.py +0 -0
  230. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/infrastructure/services/aws/state_handler.py +0 -0
  231. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/infrastructure/services/azure/__init__.py +0 -0
  232. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/infrastructure/services/azure/state_handler.py +0 -0
  233. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/infrastructure/services/backtesting/__init__.py +0 -0
  234. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/infrastructure/services/backtesting/event_backtest_service.py +0 -0
  235. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/infrastructure/services/backtesting/vector_backtest_service.py +0 -0
  236. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/services/__init__.py +0 -0
  237. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/services/configuration_service.py +0 -0
  238. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/services/data_providers/__init__.py +0 -0
  239. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/services/data_providers/data.py +0 -0
  240. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/services/data_providers/data_provider_service.py +0 -0
  241. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/services/market_credential_service.py +0 -0
  242. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/services/metrics/__init__.py +0 -0
  243. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/services/metrics/alpha.py +0 -0
  244. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/services/metrics/beta.py +0 -0
  245. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/services/metrics/cagr.py +0 -0
  246. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/services/metrics/calmar_ratio.py +0 -0
  247. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/services/metrics/drawdown.py +0 -0
  248. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/services/metrics/equity_curve.py +0 -0
  249. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/services/metrics/exposure.py +0 -0
  250. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/services/metrics/generate.py +0 -0
  251. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/services/metrics/mean_daily_return.py +0 -0
  252. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/services/metrics/price_efficiency.py +0 -0
  253. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/services/metrics/profit_factor.py +0 -0
  254. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/services/metrics/recovery.py +0 -0
  255. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/services/metrics/returns.py +0 -0
  256. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/services/metrics/risk_free_rate.py +0 -0
  257. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/services/metrics/sharpe_ratio.py +0 -0
  258. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/services/metrics/sortino_ratio.py +0 -0
  259. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/services/metrics/standard_deviation.py +0 -0
  260. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/services/metrics/trades.py +0 -0
  261. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/services/metrics/treynor_ratio.py +0 -0
  262. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/services/metrics/ulcer.py +0 -0
  263. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/services/metrics/value_at_risk.py +0 -0
  264. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/services/metrics/volatility.py +0 -0
  265. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/services/metrics/win_rate.py +0 -0
  266. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/services/order_service/__init__.py +0 -0
  267. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/services/order_service/order_backtest_service.py +0 -0
  268. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/services/order_service/order_executor_lookup.py +0 -0
  269. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/services/order_service/order_service.py +0 -0
  270. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/services/portfolios/__init__.py +0 -0
  271. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/services/portfolios/backtest_portfolio_service.py +0 -0
  272. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/services/portfolios/portfolio_configuration_service.py +0 -0
  273. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/services/portfolios/portfolio_provider_lookup.py +0 -0
  274. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/services/portfolios/portfolio_service.py +0 -0
  275. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/services/portfolios/portfolio_snapshot_service.py +0 -0
  276. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/services/portfolios/portfolio_sync_service.py +0 -0
  277. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/services/positions/__init__.py +0 -0
  278. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/services/positions/position_service.py +0 -0
  279. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/services/positions/position_snapshot_service.py +0 -0
  280. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/services/repository_service.py +0 -0
  281. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/services/trade_order_evaluator/__init__.py +0 -0
  282. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/services/trade_order_evaluator/backtest_trade_oder_evaluator.py +0 -0
  283. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/services/trade_order_evaluator/default_trade_order_evaluator.py +0 -0
  284. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/services/trade_order_evaluator/trade_order_evaluator.py +0 -0
  285. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/services/trade_service/__init__.py +0 -0
  286. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/services/trade_service/trade_service.py +0 -0
  287. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.0}/investing_algorithm_framework/services/trade_service/trade_stop_loss_service.py +0 -0
  288. {investing_algorithm_framework-8.4.0 → investing_algorithm_framework-8.5.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.4.0
3
+ Version: 8.5.0
4
4
  Summary: A framework for creating trading bots
5
5
  Author: MDUYN
6
6
  Requires-Python: >=3.10,<4.0
@@ -49,23 +49,13 @@ Description-Content-Type: text/markdown
49
49
 
50
50
  <h4 align="center">
51
51
  <a href="https://github.com/coding-kitties/investing-algorithm-framework/actions/workflows/test.yml?query=branch%3Amain">
52
- <img src="https://img.shields.io/github/actions/workflow/status/coding-kitties/investing-algorithm-framework/test.yml?branch=main&label=linux%20(main)&style=flat-square&logo=linux&logoColor=white" alt="linux main" style="height: 20px;">
52
+ <img src="https://img.shields.io/github/actions/workflow/status/coding-kitties/investing-algorithm-framework/test.yml?branch=main&label=linux&style=flat-square&logo=linux&logoColor=white" alt="linux main" style="height: 20px;">
53
53
  </a>
54
54
  <a href="https://github.com/coding-kitties/investing-algorithm-framework/actions/workflows/test.yml?query=branch%3Amain">
55
- <img src="https://img.shields.io/github/actions/workflow/status/coding-kitties/investing-algorithm-framework/test.yml?branch=main&label=macos%20(main)&style=flat-square&logo=apple&logoColor=white" alt="macos main" style="height: 20px;">
55
+ <img src="https://img.shields.io/github/actions/workflow/status/coding-kitties/investing-algorithm-framework/test.yml?branch=main&label=macos&style=flat-square&logo=apple&logoColor=white" alt="macos main" style="height: 20px;">
56
56
  </a>
57
57
  <a href="https://github.com/coding-kitties/investing-algorithm-framework/actions/workflows/test.yml?query=branch%3Amain">
58
- <img src="https://img.shields.io/github/actions/workflow/status/coding-kitties/investing-algorithm-framework/test.yml?branch=main&label=windows%20(main)&style=flat-square&logo=windows&logoColor=white" alt="windows main" style="height: 20px;">
59
- </a>
60
- <br>
61
- <a href="https://github.com/coding-kitties/investing-algorithm-framework/actions/workflows/test.yml?query=branch%3Adev">
62
- <img src="https://img.shields.io/github/actions/workflow/status/coding-kitties/investing-algorithm-framework/test.yml?branch=dev&label=linux%20(dev)&style=flat-square&logo=linux&logoColor=white" alt="linux dev" style="height: 20px;">
63
- </a>
64
- <a href="https://github.com/coding-kitties/investing-algorithm-framework/actions/workflows/test.yml?query=branch%3Adev">
65
- <img src="https://img.shields.io/github/actions/workflow/status/coding-kitties/investing-algorithm-framework/test.yml?branch=dev&label=macos%20(dev)&style=flat-square&logo=apple&logoColor=white" alt="macos dev" style="height: 20px;">
66
- </a>
67
- <a href="https://github.com/coding-kitties/investing-algorithm-framework/actions/workflows/test.yml?query=branch%3Adev">
68
- <img src="https://img.shields.io/github/actions/workflow/status/coding-kitties/investing-algorithm-framework/test.yml?branch=dev&label=windows%20(dev)&style=flat-square&logo=windows&logoColor=white" alt="windows dev" style="height: 20px;">
58
+ <img src="https://img.shields.io/github/actions/workflow/status/coding-kitties/investing-algorithm-framework/test.yml?branch=main&label=windows&style=flat-square&logo=windows&logoColor=white" alt="windows main" style="height: 20px;">
69
59
  </a>
70
60
  <a href="https://pypi.org/project/investing-algorithm-framework/">
71
61
  <img src="https://img.shields.io/pypi/v/investing-algorithm-framework.svg?style=flat-square" alt="pypi" style="height: 20px;">
@@ -8,23 +8,13 @@
8
8
 
9
9
  <h4 align="center">
10
10
  <a href="https://github.com/coding-kitties/investing-algorithm-framework/actions/workflows/test.yml?query=branch%3Amain">
11
- <img src="https://img.shields.io/github/actions/workflow/status/coding-kitties/investing-algorithm-framework/test.yml?branch=main&label=linux%20(main)&style=flat-square&logo=linux&logoColor=white" alt="linux main" style="height: 20px;">
11
+ <img src="https://img.shields.io/github/actions/workflow/status/coding-kitties/investing-algorithm-framework/test.yml?branch=main&label=linux&style=flat-square&logo=linux&logoColor=white" alt="linux main" style="height: 20px;">
12
12
  </a>
13
13
  <a href="https://github.com/coding-kitties/investing-algorithm-framework/actions/workflows/test.yml?query=branch%3Amain">
14
- <img src="https://img.shields.io/github/actions/workflow/status/coding-kitties/investing-algorithm-framework/test.yml?branch=main&label=macos%20(main)&style=flat-square&logo=apple&logoColor=white" alt="macos main" style="height: 20px;">
14
+ <img src="https://img.shields.io/github/actions/workflow/status/coding-kitties/investing-algorithm-framework/test.yml?branch=main&label=macos&style=flat-square&logo=apple&logoColor=white" alt="macos main" style="height: 20px;">
15
15
  </a>
16
16
  <a href="https://github.com/coding-kitties/investing-algorithm-framework/actions/workflows/test.yml?query=branch%3Amain">
17
- <img src="https://img.shields.io/github/actions/workflow/status/coding-kitties/investing-algorithm-framework/test.yml?branch=main&label=windows%20(main)&style=flat-square&logo=windows&logoColor=white" alt="windows main" style="height: 20px;">
18
- </a>
19
- <br>
20
- <a href="https://github.com/coding-kitties/investing-algorithm-framework/actions/workflows/test.yml?query=branch%3Adev">
21
- <img src="https://img.shields.io/github/actions/workflow/status/coding-kitties/investing-algorithm-framework/test.yml?branch=dev&label=linux%20(dev)&style=flat-square&logo=linux&logoColor=white" alt="linux dev" style="height: 20px;">
22
- </a>
23
- <a href="https://github.com/coding-kitties/investing-algorithm-framework/actions/workflows/test.yml?query=branch%3Adev">
24
- <img src="https://img.shields.io/github/actions/workflow/status/coding-kitties/investing-algorithm-framework/test.yml?branch=dev&label=macos%20(dev)&style=flat-square&logo=apple&logoColor=white" alt="macos dev" style="height: 20px;">
25
- </a>
26
- <a href="https://github.com/coding-kitties/investing-algorithm-framework/actions/workflows/test.yml?query=branch%3Adev">
27
- <img src="https://img.shields.io/github/actions/workflow/status/coding-kitties/investing-algorithm-framework/test.yml?branch=dev&label=windows%20(dev)&style=flat-square&logo=windows&logoColor=white" alt="windows dev" style="height: 20px;">
17
+ <img src="https://img.shields.io/github/actions/workflow/status/coding-kitties/investing-algorithm-framework/test.yml?branch=main&label=windows&style=flat-square&logo=windows&logoColor=white" alt="windows main" style="height: 20px;">
28
18
  </a>
29
19
  <a href="https://pypi.org/project/investing-algorithm-framework/">
30
20
  <img src="https://img.shields.io/pypi/v/investing-algorithm-framework.svg?style=flat-square" alt="pypi" style="height: 20px;">
@@ -254,4 +254,13 @@ __all__ = [
254
254
  "VolumeBasedFill",
255
255
  "FXRateProvider",
256
256
  "StaticFXRateProvider",
257
+ "load_ipython_extension",
257
258
  ]
259
+
260
+
261
+ def load_ipython_extension(ipython):
262
+ """Allow ``%load_ext investing_algorithm_framework`` to register
263
+ the ``%backtest`` / ``%%backtest`` magic commands."""
264
+ from investing_algorithm_framework.notebook import load_ipython_extension \
265
+ as _load
266
+ _load(ipython)
@@ -279,10 +279,11 @@ class App:
279
279
 
280
280
  if SQLALCHEMY_DATABASE_URI not in config \
281
281
  or config[SQLALCHEMY_DATABASE_URI] is None:
282
- path = "sqlite:///" + os.path.join(
282
+ db_path = os.path.join(
283
283
  configuration_service.config[DATABASE_DIRECTORY_PATH],
284
284
  configuration_service.config[DATABASE_NAME]
285
285
  )
286
+ path = "sqlite:///" + db_path.replace("\\", "/")
286
287
  configuration_service.add_value(SQLALCHEMY_DATABASE_URI, path)
287
288
 
288
289
  def initialize_backtest_config(
@@ -394,7 +395,7 @@ class App:
394
395
  os.remove(database_path)
395
396
 
396
397
  # Create the sqlalchemy database uri
397
- path = f"sqlite:///{database_path}"
398
+ path = "sqlite:///" + database_path.replace("\\", "/")
398
399
  self.set_config(SQLALCHEMY_DATABASE_URI, path)
399
400
 
400
401
  # Setup sql if needed
@@ -1,9 +1,11 @@
1
1
  import os
2
2
  import csv
3
3
  import base64
4
+ import tempfile
4
5
  import webbrowser
5
6
  import logging
6
7
  from dataclasses import dataclass, field
8
+ from pathlib import Path
7
9
  from typing import List, Union
8
10
  from datetime import datetime, timedelta
9
11
 
@@ -185,12 +187,14 @@ class BacktestReport:
185
187
  if not self.html_report:
186
188
  self.html_report = self._build_html()
187
189
 
188
- path = "/tmp/backtest_report.html"
190
+ path = os.path.join(tempfile.gettempdir(), "backtest_report.html")
189
191
  with open(path, "w", encoding="utf-8") as f:
190
192
  f.write(self.html_report)
191
193
 
194
+ file_uri = Path(path).as_uri()
195
+
192
196
  if browser:
193
- webbrowser.open(f"file://{path}")
197
+ webbrowser.open(file_uri)
194
198
  return
195
199
 
196
200
  try:
@@ -203,7 +207,7 @@ class BacktestReport:
203
207
  except (NameError, ImportError):
204
208
  pass
205
209
 
206
- webbrowser.open(f"file://{path}")
210
+ webbrowser.open(file_uri)
207
211
 
208
212
  def save(self, path):
209
213
  if not self.html_report:
@@ -1,5 +1,6 @@
1
1
  import logging
2
2
  import os
3
+ import tempfile
3
4
  from pathlib import Path
4
5
  import webbrowser
5
6
  from dataclasses import dataclass
@@ -117,12 +118,14 @@ class BacktestReport:
117
118
  self._create_html_report(backtest_date_range)
118
119
 
119
120
  # Save the html report to a tmp location
120
- path = "/tmp/backtest_report.html"
121
+ path = os.path.join(tempfile.gettempdir(), "backtest_report.html")
121
122
  with open(path, "w") as html_file:
122
123
  html_file.write(self.html_report)
123
124
 
125
+ file_uri = Path(path).as_uri()
126
+
124
127
  if browser:
125
- webbrowser.open(f"file://{path}")
128
+ webbrowser.open(file_uri)
126
129
 
127
130
  def in_jupyter_notebook():
128
131
  try:
@@ -134,7 +137,7 @@ class BacktestReport:
134
137
  if in_jupyter_notebook():
135
138
  display(HTML(self.html_report))
136
139
  else:
137
- webbrowser.open(f"file://{path}")
140
+ webbrowser.open(file_uri)
138
141
 
139
142
  def _create_html_report(self, backtest_date_range: BacktestDateRange):
140
143
  """
@@ -1,14 +1,18 @@
1
1
  import gc
2
2
  import json
3
3
  import logging
4
+ import multiprocessing
4
5
  import os
5
- import numpy as np
6
- import pandas as pd
7
- import polars as pl
6
+ import threading
8
7
  from collections import defaultdict
8
+ from concurrent.futures import ProcessPoolExecutor, as_completed
9
9
  from datetime import datetime, timedelta, timezone
10
10
  from pathlib import Path
11
- from typing import Dict, List, Union, Optional, Callable
11
+ from typing import Callable, Dict, List, Optional, Union
12
+
13
+ import numpy as np
14
+ import pandas as pd
15
+ import polars as pl
12
16
 
13
17
  from investing_algorithm_framework.domain import BacktestRun, TimeUnit, \
14
18
  OperationalException, BacktestDateRange, Backtest, combine_backtests, \
@@ -27,6 +31,21 @@ from .vector_backtest_service import VectorBacktestService
27
31
 
28
32
  logger = logging.getLogger(__name__)
29
33
 
34
+ # Module-level global used by worker processes. Set via _init_worker
35
+ # which is called once per worker by ProcessPoolExecutor's initializer.
36
+ _worker_data_provider_service = None
37
+
38
+
39
+ def _init_worker(data_provider_service):
40
+ """Initializer for ProcessPoolExecutor workers.
41
+
42
+ Stores the data_provider_service in a module-level global so each
43
+ worker pickles/unpickles it only once at startup rather than per task.
44
+ This dramatically reduces overhead on Windows/WSL (spawn start method).
45
+ """
46
+ global _worker_data_provider_service
47
+ _worker_data_provider_service = data_provider_service
48
+
30
49
 
31
50
  def _print_progress(message: str, show_progress: bool = False):
32
51
  """
@@ -902,10 +921,6 @@ class BacktestService:
902
921
 
903
922
  if use_parallel:
904
923
  # Parallel processing of backtests (batches per worker)
905
- import multiprocessing
906
- from concurrent.futures import \
907
- ProcessPoolExecutor, as_completed
908
-
909
924
  # Determine number of workers
910
925
  if n_workers == -1:
911
926
  n_workers = multiprocessing.cpu_count()
@@ -933,6 +948,19 @@ class BacktestService:
933
948
  show_progress
934
949
  )
935
950
 
951
+ # Shared counter for strategy-level progress
952
+ # across all workers. Use Manager so the proxy
953
+ # object can be pickled by ProcessPoolExecutor.
954
+ manager = multiprocessing.Manager()
955
+ progress_counter = manager.Value('i', 0)
956
+
957
+ # Copy data provider once and pass via initializer
958
+ # so each worker inherits it at startup instead of
959
+ # pickling it per task (major speedup on Windows/WSL
960
+ # where spawn is used instead of fork).
961
+ shared_data_provider = \
962
+ self._data_provider_service.copy()
963
+
936
964
  worker_args = []
937
965
 
938
966
  for batch in strategy_batches:
@@ -943,13 +971,45 @@ class BacktestService:
943
971
  snapshot_interval,
944
972
  risk_free_rate,
945
973
  continue_on_error,
946
- self._data_provider_service.copy(),
974
+ None, # placeholder, worker reads global
947
975
  False,
948
- dynamic_position_sizing
976
+ dynamic_position_sizing,
977
+ progress_counter,
949
978
  ))
950
979
 
951
- # Execute batches in parallel
952
- with ProcessPoolExecutor(max_workers=n_workers) as ex:
980
+ # Start a monitoring thread that updates a
981
+ # strategy-level progress bar in real time
982
+ total_strategies = len(strategies_to_run)
983
+ pbar = tqdm(
984
+ total=total_strategies,
985
+ colour="green",
986
+ desc="Running backtests for "
987
+ f"{start_date} to {end_date}",
988
+ disable=not show_progress,
989
+ unit="strategy",
990
+ )
991
+ stop_event = threading.Event()
992
+
993
+ def _monitor_progress():
994
+ while not stop_event.is_set():
995
+ pbar.n = progress_counter.value
996
+ pbar.refresh()
997
+ stop_event.wait(0.5)
998
+
999
+ monitor = threading.Thread(
1000
+ target=_monitor_progress, daemon=True
1001
+ )
1002
+ monitor.start()
1003
+
1004
+ # Execute batches in parallel.
1005
+ # Use initializer to pass data_provider_service
1006
+ # once per worker process rather than pickling it
1007
+ # with every submitted task.
1008
+ with ProcessPoolExecutor(
1009
+ max_workers=n_workers,
1010
+ initializer=_init_worker,
1011
+ initargs=(shared_data_provider,),
1012
+ ) as ex:
953
1013
  # Submit all batch tasks
954
1014
  futures = [
955
1015
  ex.submit(
@@ -961,15 +1021,8 @@ class BacktestService:
961
1021
  # Track completed batches for periodic cleanup
962
1022
  completed_count = 0
963
1023
 
964
- # Collect results with progress bar
965
- for future in tqdm(
966
- as_completed(futures),
967
- total=len(futures),
968
- colour="green",
969
- desc="Running backtests for "
970
- f"{start_date} to {end_date}",
971
- disable=not show_progress
972
- ):
1024
+ # Collect results as batches complete
1025
+ for future in as_completed(futures):
973
1026
  try:
974
1027
  batch_result = future.result()
975
1028
  if batch_result:
@@ -1006,6 +1059,15 @@ class BacktestService:
1006
1059
  else:
1007
1060
  raise
1008
1061
 
1062
+ # Stop the monitoring thread and finalise
1063
+ # the progress bar
1064
+ stop_event.set()
1065
+ monitor.join()
1066
+ pbar.n = progress_counter.value
1067
+ pbar.refresh()
1068
+ pbar.close()
1069
+ manager.shutdown()
1070
+
1009
1071
  # Save remaining batch and create checkpoint files when
1010
1072
  # storage directory provided
1011
1073
  if backtest_storage_directory is not None:
@@ -1309,8 +1371,6 @@ class BacktestService:
1309
1371
  combined_backtests.append(backtests_list[0])
1310
1372
  else:
1311
1373
  # Combine multiple backtests for the same algorithm
1312
- from investing_algorithm_framework.domain import (
1313
- combine_backtests)
1314
1374
  combined = combine_backtests(backtests_list)
1315
1375
  combined_backtests.append(combined)
1316
1376
 
@@ -1709,23 +1769,46 @@ class BacktestService:
1709
1769
  continue_on_error,
1710
1770
  data_provider_service,
1711
1771
  show_progress,
1712
- dynamic_position_sizing
1772
+ dynamic_position_sizing,
1773
+ progress_counter (optional),
1713
1774
  )
1714
1775
 
1715
1776
  Returns:
1716
1777
  List[Backtest]: List of completed backtest results
1717
1778
  """
1718
- (
1719
- strategy_batch,
1720
- backtest_date_range,
1721
- portfolio_configuration,
1722
- snapshot_interval,
1723
- risk_free_rate,
1724
- continue_on_error,
1725
- data_provider_service,
1726
- show_progress,
1727
- dynamic_position_sizing
1728
- ) = args
1779
+ # Support both old (9-element) and new (10-element) tuple
1780
+ if len(args) == 10:
1781
+ (
1782
+ strategy_batch,
1783
+ backtest_date_range,
1784
+ portfolio_configuration,
1785
+ snapshot_interval,
1786
+ risk_free_rate,
1787
+ continue_on_error,
1788
+ data_provider_service,
1789
+ show_progress,
1790
+ dynamic_position_sizing,
1791
+ progress_counter,
1792
+ ) = args
1793
+ else:
1794
+ (
1795
+ strategy_batch,
1796
+ backtest_date_range,
1797
+ portfolio_configuration,
1798
+ snapshot_interval,
1799
+ risk_free_rate,
1800
+ continue_on_error,
1801
+ data_provider_service,
1802
+ show_progress,
1803
+ dynamic_position_sizing,
1804
+ ) = args
1805
+ progress_counter = None
1806
+
1807
+ # Use the worker-global data provider if none was passed
1808
+ # directly (parallel mode passes None and relies on the
1809
+ # initializer to set the global once per worker process).
1810
+ if data_provider_service is None:
1811
+ data_provider_service = _worker_data_provider_service
1729
1812
 
1730
1813
  vector_backtest_service = VectorBacktestService(
1731
1814
  data_provider_service=data_provider_service
@@ -1768,12 +1851,21 @@ class BacktestService:
1768
1851
  )
1769
1852
  batch_results.append(backtest)
1770
1853
 
1854
+ # Increment shared progress counter so the
1855
+ # main process can track per-strategy progress
1856
+ if progress_counter is not None:
1857
+ progress_counter.value += 1
1858
+
1771
1859
  except Exception as e:
1772
1860
  if continue_on_error:
1773
1861
  logger.error(
1774
1862
  "Worker error for strategy "
1775
1863
  f"{strategy.algorithm_id}: {e}"
1776
1864
  )
1865
+ # Still increment counter for failed strategies
1866
+ # so progress total stays accurate
1867
+ if progress_counter is not None:
1868
+ progress_counter.value += 1
1777
1869
  continue
1778
1870
  else:
1779
1871
  raise
@@ -0,0 +1,3 @@
1
+ from .magic import load_ipython_extension
2
+
3
+ __all__ = ["load_ipython_extension"]