investing-algorithm-framework 8.2.0__tar.gz → 8.4.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (289) hide show
  1. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/PKG-INFO +49 -18
  2. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/README.md +39 -14
  3. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/__init__.py +37 -5
  4. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/app/app.py +149 -14
  5. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/app/context.py +475 -87
  6. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/app/reporting/templates/dashboard.css +4 -0
  7. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/app/reporting/templates/dashboard_template.html.j2 +31 -0
  8. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/app/strategy.py +26 -0
  9. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/cli/validate_backtest_checkpoints.py +1 -1
  10. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/__init__.py +24 -0
  11. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/backtesting/backtest_run.py +27 -0
  12. investing_algorithm_framework-8.4.0/investing_algorithm_framework/domain/blotter.py +752 -0
  13. investing_algorithm_framework-8.4.0/investing_algorithm_framework/domain/fx.py +137 -0
  14. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/models/data/data_source.py +177 -2
  15. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/infrastructure/__init__.py +14 -4
  16. investing_algorithm_framework-8.4.0/investing_algorithm_framework/infrastructure/data_providers/__init__.py +120 -0
  17. investing_algorithm_framework-8.4.0/investing_algorithm_framework/infrastructure/data_providers/alpha_vantage.py +170 -0
  18. investing_algorithm_framework-8.4.0/investing_algorithm_framework/infrastructure/data_providers/base_url.py +372 -0
  19. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/infrastructure/data_providers/csv.py +3 -2
  20. investing_algorithm_framework-8.4.0/investing_algorithm_framework/infrastructure/data_providers/csv_url.py +33 -0
  21. investing_algorithm_framework-8.4.0/investing_algorithm_framework/infrastructure/data_providers/json_url.py +53 -0
  22. investing_algorithm_framework-8.4.0/investing_algorithm_framework/infrastructure/data_providers/ohlcv_base.py +587 -0
  23. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/infrastructure/data_providers/pandas.py +7 -5
  24. investing_algorithm_framework-8.4.0/investing_algorithm_framework/infrastructure/data_providers/parquet_url.py +36 -0
  25. investing_algorithm_framework-8.4.0/investing_algorithm_framework/infrastructure/data_providers/polygon.py +137 -0
  26. investing_algorithm_framework-8.4.0/investing_algorithm_framework/infrastructure/data_providers/yahoo.py +134 -0
  27. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/infrastructure/database/__init__.py +2 -1
  28. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/infrastructure/database/sql_alchemy.py +33 -7
  29. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/infrastructure/order_executors/__init__.py +0 -2
  30. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/infrastructure/services/backtesting/backtest_service.py +5 -0
  31. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/infrastructure/services/backtesting/event_backtest_service.py +5 -0
  32. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/infrastructure/services/backtesting/vector_backtest_service.py +32 -0
  33. investing_algorithm_framework-8.4.0/investing_algorithm_framework/services/metrics/risk_free_rate.py +49 -0
  34. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/services/order_service/order_backtest_service.py +0 -1
  35. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/services/trade_order_evaluator/backtest_trade_oder_evaluator.py +107 -56
  36. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/services/trade_order_evaluator/trade_order_evaluator.py +16 -3
  37. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/pyproject.toml +12 -4
  38. investing_algorithm_framework-8.2.0/investing_algorithm_framework/infrastructure/data_providers/__init__.py +0 -39
  39. investing_algorithm_framework-8.2.0/investing_algorithm_framework/infrastructure/order_executors/backtest_oder_executor.py +0 -28
  40. investing_algorithm_framework-8.2.0/investing_algorithm_framework/services/metrics/risk_free_rate.py +0 -28
  41. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/LICENSE +0 -0
  42. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/analysis/__init__.py +0 -0
  43. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/analysis/backtest_data_ranges.py +0 -0
  44. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/analysis/markdown.py +0 -0
  45. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/analysis/ranking.py +0 -0
  46. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/app/__init__.py +0 -0
  47. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/app/algorithm/__init__.py +0 -0
  48. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/app/algorithm/algorithm.py +0 -0
  49. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/app/algorithm/algorithm_factory.py +0 -0
  50. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/app/app_hook.py +0 -0
  51. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/app/eventloop.py +0 -0
  52. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/app/reporting/__init__.py +0 -0
  53. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/app/reporting/ascii.py +0 -0
  54. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/app/reporting/backtest_report.py +0 -0
  55. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/app/reporting/backtest_report_old.py +0 -0
  56. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/app/reporting/charts/__init__.py +0 -0
  57. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/app/reporting/charts/entry_exist_signals.py +0 -0
  58. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/app/reporting/charts/equity_curve.py +0 -0
  59. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/app/reporting/charts/equity_curve_drawdown.py +0 -0
  60. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/app/reporting/charts/line_chart.py +0 -0
  61. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/app/reporting/charts/monthly_returns_heatmap.py +0 -0
  62. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/app/reporting/charts/ohlcv_data_completeness.py +0 -0
  63. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/app/reporting/charts/rolling_sharp_ratio.py +0 -0
  64. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/app/reporting/charts/yearly_returns_barchart.py +0 -0
  65. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/app/reporting/generate.py +0 -0
  66. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/app/reporting/tables/__init__.py +0 -0
  67. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/app/reporting/tables/key_metrics_table.py +0 -0
  68. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/app/reporting/tables/stop_loss_table.py +0 -0
  69. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/app/reporting/tables/time_metrics_table.py +0 -0
  70. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/app/reporting/tables/trade_metrics_table.py +0 -0
  71. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/app/reporting/tables/trades_table.py +0 -0
  72. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/app/reporting/tables/utils.py +0 -0
  73. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/app/reporting/templates/dashboard.js +0 -0
  74. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/app/reporting/templates/report_template.html.j2 +0 -0
  75. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/app/stateless/__init__.py +0 -0
  76. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/app/stateless/action_handlers/__init__.py +0 -0
  77. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/app/stateless/action_handlers/action_handler_strategy.py +0 -0
  78. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/app/stateless/action_handlers/check_online_handler.py +0 -0
  79. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/app/stateless/action_handlers/run_strategy_handler.py +0 -0
  80. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/app/stateless/exception_handler.py +0 -0
  81. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/app/task.py +0 -0
  82. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/app/web/__init__.py +0 -0
  83. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/app/web/controllers/__init__.py +0 -0
  84. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/app/web/controllers/orders.py +0 -0
  85. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/app/web/controllers/portfolio.py +0 -0
  86. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/app/web/controllers/positions.py +0 -0
  87. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/app/web/create_app.py +0 -0
  88. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/app/web/error_handler.py +0 -0
  89. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/app/web/responses.py +0 -0
  90. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/app/web/run_strategies.py +0 -0
  91. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/app/web/schemas/__init__.py +0 -0
  92. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/app/web/schemas/order.py +0 -0
  93. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/app/web/schemas/portfolio.py +0 -0
  94. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/app/web/schemas/position.py +0 -0
  95. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/app/web/setup_cors.py +0 -0
  96. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/cli/__init__.py +0 -0
  97. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/cli/cli.py +0 -0
  98. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/cli/deploy_to_aws_lambda.py +0 -0
  99. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/cli/deploy_to_azure_function.py +0 -0
  100. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/cli/initialize_app.py +0 -0
  101. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/cli/mcp_server.py +0 -0
  102. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/cli/templates/.gitignore.template +0 -0
  103. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/cli/templates/app.py.template +0 -0
  104. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/cli/templates/app_aws_lambda_function.py.template +0 -0
  105. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/cli/templates/app_azure_function.py.template +0 -0
  106. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/cli/templates/app_web.py.template +0 -0
  107. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/cli/templates/aws_lambda_dockerfile.template +0 -0
  108. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/cli/templates/aws_lambda_dockerignore.template +0 -0
  109. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/cli/templates/aws_lambda_readme.md.template +0 -0
  110. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/cli/templates/aws_lambda_requirements.txt.template +0 -0
  111. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/cli/templates/azure_function_function_app.py.template +0 -0
  112. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/cli/templates/azure_function_host.json.template +0 -0
  113. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/cli/templates/azure_function_local.settings.json.template +0 -0
  114. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/cli/templates/azure_function_requirements.txt.template +0 -0
  115. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/cli/templates/data_providers.py.template +0 -0
  116. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/cli/templates/env.example.template +0 -0
  117. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/cli/templates/env_azure_function.example.template +0 -0
  118. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/cli/templates/market_data_providers.py.template +0 -0
  119. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/cli/templates/readme.md.template +0 -0
  120. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/cli/templates/requirements.txt.template +0 -0
  121. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/cli/templates/run_backtest.py.template +0 -0
  122. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/cli/templates/strategy.py.template +0 -0
  123. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/create_app.py +0 -0
  124. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/dependency_container.py +0 -0
  125. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/algorithm_id.py +0 -0
  126. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/backtesting/__init__.py +0 -0
  127. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/backtesting/backtest.py +0 -0
  128. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/backtesting/backtest_date_range.py +0 -0
  129. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/backtesting/backtest_evaluation_focuss.py +0 -0
  130. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/backtesting/backtest_metrics.py +0 -0
  131. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/backtesting/backtest_permutation_test.py +0 -0
  132. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/backtesting/backtest_summary_metrics.py +0 -0
  133. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/backtesting/backtest_utils.py +0 -0
  134. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/backtesting/combine_backtests.py +0 -0
  135. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/backtesting/templates/backtest.html +0 -0
  136. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/backtesting/templates/finterion-dark.png +0 -0
  137. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/backtesting/templates/finterion-light.png +0 -0
  138. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/config.py +0 -0
  139. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/constants.py +0 -0
  140. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/data_provider.py +0 -0
  141. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/data_structures.py +0 -0
  142. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/decimal_parsing.py +0 -0
  143. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/exceptions.py +0 -0
  144. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/models/__init__.py +0 -0
  145. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/models/app_mode.py +0 -0
  146. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/models/base_model.py +0 -0
  147. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/models/data/__init__.py +0 -0
  148. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/models/data/data_type.py +0 -0
  149. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/models/event.py +0 -0
  150. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/models/market/__init__.py +0 -0
  151. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/models/market/market_credential.py +0 -0
  152. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/models/order/__init__.py +0 -0
  153. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/models/order/order.py +0 -0
  154. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/models/order/order_side.py +0 -0
  155. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/models/order/order_status.py +0 -0
  156. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/models/order/order_type.py +0 -0
  157. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/models/portfolio/__init__.py +0 -0
  158. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/models/portfolio/portfolio.py +0 -0
  159. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/models/portfolio/portfolio_configuration.py +0 -0
  160. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/models/portfolio/portfolio_snapshot.py +0 -0
  161. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/models/position/__init__.py +0 -0
  162. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/models/position/position.py +0 -0
  163. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/models/position/position_size.py +0 -0
  164. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/models/position/position_snapshot.py +0 -0
  165. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/models/risk_rules/__init__.py +0 -0
  166. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/models/risk_rules/scaling_rule.py +0 -0
  167. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/models/risk_rules/stop_loss_rule.py +0 -0
  168. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/models/risk_rules/take_profit_rule.py +0 -0
  169. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/models/risk_rules/trading_cost.py +0 -0
  170. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/models/snapshot_interval.py +0 -0
  171. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/models/strategy_profile.py +0 -0
  172. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/models/time_frame.py +0 -0
  173. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/models/time_interval.py +0 -0
  174. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/models/time_unit.py +0 -0
  175. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/models/tracing/__init__.py +0 -0
  176. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/models/tracing/trace.py +0 -0
  177. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/models/trade/__init__.py +0 -0
  178. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/models/trade/trade.py +0 -0
  179. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/models/trade/trade_status.py +0 -0
  180. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/models/trade/trade_stop_loss.py +0 -0
  181. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/models/trade/trade_take_profit.py +0 -0
  182. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/order_executor.py +0 -0
  183. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/portfolio_provider.py +0 -0
  184. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/services/__init__.py +0 -0
  185. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/services/market_credential_service.py +0 -0
  186. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/services/portfolios/__init__.py +0 -0
  187. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/services/portfolios/portfolio_sync_service.py +0 -0
  188. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/services/rounding_service.py +0 -0
  189. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/services/state_handler.py +0 -0
  190. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/stateless_actions.py +0 -0
  191. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/strategy.py +0 -0
  192. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/utils/__init__.py +0 -0
  193. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/utils/csv.py +0 -0
  194. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/utils/custom_tqdm.py +0 -0
  195. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/utils/dates.py +0 -0
  196. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/utils/jupyter_notebook_detection.py +0 -0
  197. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/utils/polars.py +0 -0
  198. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/utils/random.py +0 -0
  199. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/utils/signatures.py +0 -0
  200. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/utils/stoppable_thread.py +0 -0
  201. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/domain/utils/synchronized.py +0 -0
  202. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/download_data.py +0 -0
  203. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/infrastructure/data_providers/ccxt.py +0 -0
  204. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/infrastructure/models/__init__.py +0 -0
  205. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/infrastructure/models/decimal_parser.py +0 -0
  206. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/infrastructure/models/model_extension.py +0 -0
  207. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/infrastructure/models/order/__init__.py +0 -0
  208. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/infrastructure/models/order/order.py +0 -0
  209. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/infrastructure/models/order/trade_allocation.py +0 -0
  210. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/infrastructure/models/order_trade_association.py +0 -0
  211. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/infrastructure/models/portfolio/__init__.py +0 -0
  212. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/infrastructure/models/portfolio/portfolio_snapshot.py +0 -0
  213. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/infrastructure/models/portfolio/sql_portfolio.py +0 -0
  214. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/infrastructure/models/position/__init__.py +0 -0
  215. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/infrastructure/models/position/position.py +0 -0
  216. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/infrastructure/models/position/position_snapshot.py +0 -0
  217. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/infrastructure/models/trades/__init__.py +0 -0
  218. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/infrastructure/models/trades/trade.py +0 -0
  219. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/infrastructure/models/trades/trade_stop_loss.py +0 -0
  220. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/infrastructure/models/trades/trade_take_profit.py +0 -0
  221. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/infrastructure/order_executors/ccxt_order_executor.py +0 -0
  222. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/infrastructure/portfolio_providers/__init__.py +0 -0
  223. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/infrastructure/portfolio_providers/ccxt_portfolio_provider.py +0 -0
  224. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/infrastructure/repositories/__init__.py +0 -0
  225. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/infrastructure/repositories/order_repository.py +0 -0
  226. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/infrastructure/repositories/portfolio_repository.py +0 -0
  227. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/infrastructure/repositories/portfolio_snapshot_repository.py +0 -0
  228. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/infrastructure/repositories/position_repository.py +0 -0
  229. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/infrastructure/repositories/position_snapshot_repository.py +0 -0
  230. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/infrastructure/repositories/repository.py +0 -0
  231. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/infrastructure/repositories/trade_allocation_repository.py +0 -0
  232. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/infrastructure/repositories/trade_repository.py +0 -0
  233. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/infrastructure/repositories/trade_stop_loss_repository.py +0 -0
  234. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/infrastructure/repositories/trade_take_profit_repository.py +0 -0
  235. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/infrastructure/services/__init__.py +0 -0
  236. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/infrastructure/services/aws/__init__.py +0 -0
  237. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/infrastructure/services/aws/state_handler.py +0 -0
  238. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/infrastructure/services/azure/__init__.py +0 -0
  239. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/infrastructure/services/azure/state_handler.py +0 -0
  240. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/infrastructure/services/backtesting/__init__.py +0 -0
  241. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/services/__init__.py +0 -0
  242. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/services/configuration_service.py +0 -0
  243. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/services/data_providers/__init__.py +0 -0
  244. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/services/data_providers/data.py +0 -0
  245. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/services/data_providers/data_provider_service.py +0 -0
  246. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/services/market_credential_service.py +0 -0
  247. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/services/metrics/__init__.py +0 -0
  248. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/services/metrics/alpha.py +0 -0
  249. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/services/metrics/beta.py +0 -0
  250. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/services/metrics/cagr.py +0 -0
  251. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/services/metrics/calmar_ratio.py +0 -0
  252. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/services/metrics/drawdown.py +0 -0
  253. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/services/metrics/equity_curve.py +0 -0
  254. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/services/metrics/exposure.py +0 -0
  255. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/services/metrics/generate.py +0 -0
  256. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/services/metrics/mean_daily_return.py +0 -0
  257. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/services/metrics/price_efficiency.py +0 -0
  258. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/services/metrics/profit_factor.py +0 -0
  259. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/services/metrics/recovery.py +0 -0
  260. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/services/metrics/returns.py +0 -0
  261. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/services/metrics/sharpe_ratio.py +0 -0
  262. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/services/metrics/sortino_ratio.py +0 -0
  263. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/services/metrics/standard_deviation.py +0 -0
  264. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/services/metrics/trades.py +0 -0
  265. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/services/metrics/treynor_ratio.py +0 -0
  266. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/services/metrics/ulcer.py +0 -0
  267. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/services/metrics/value_at_risk.py +0 -0
  268. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/services/metrics/volatility.py +0 -0
  269. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/services/metrics/win_rate.py +0 -0
  270. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/services/order_service/__init__.py +0 -0
  271. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/services/order_service/order_executor_lookup.py +0 -0
  272. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/services/order_service/order_service.py +0 -0
  273. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/services/portfolios/__init__.py +0 -0
  274. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/services/portfolios/backtest_portfolio_service.py +0 -0
  275. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/services/portfolios/portfolio_configuration_service.py +0 -0
  276. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/services/portfolios/portfolio_provider_lookup.py +0 -0
  277. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/services/portfolios/portfolio_service.py +0 -0
  278. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/services/portfolios/portfolio_snapshot_service.py +0 -0
  279. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/services/portfolios/portfolio_sync_service.py +0 -0
  280. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/services/positions/__init__.py +0 -0
  281. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/services/positions/position_service.py +0 -0
  282. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/services/positions/position_snapshot_service.py +0 -0
  283. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/services/repository_service.py +0 -0
  284. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/services/trade_order_evaluator/__init__.py +0 -0
  285. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/services/trade_order_evaluator/default_trade_order_evaluator.py +0 -0
  286. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/services/trade_service/__init__.py +0 -0
  287. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/services/trade_service/trade_service.py +0 -0
  288. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/services/trade_service/trade_stop_loss_service.py +0 -0
  289. {investing_algorithm_framework-8.2.0 → investing_algorithm_framework-8.4.0}/investing_algorithm_framework/services/trade_service/trade_take_profit_service.py +0 -0
@@ -1,17 +1,22 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: investing-algorithm-framework
3
- Version: 8.2.0
3
+ Version: 8.4.0
4
4
  Summary: A framework for creating trading bots
5
5
  Author: MDUYN
6
- Requires-Python: >=3.10
6
+ Requires-Python: >=3.10,<4.0
7
7
  Classifier: Programming Language :: Python :: 3
8
8
  Classifier: Programming Language :: Python :: 3.10
9
9
  Classifier: Programming Language :: Python :: 3.11
10
10
  Classifier: Programming Language :: Python :: 3.12
11
+ Provides-Extra: all
12
+ Provides-Extra: alpha-vantage
13
+ Provides-Extra: polygon
14
+ Provides-Extra: yahoo
11
15
  Requires-Dist: Flask (>=3.1.0)
12
- Requires-Dist: Flask-Cors (>=3.0.9,<5.0.0)
16
+ Requires-Dist: Flask-Cors (>=3.0.9,<7.0.0)
13
17
  Requires-Dist: Flask-Migrate (>=2.6.0)
14
18
  Requires-Dist: SQLAlchemy (>=2.0.18)
19
+ Requires-Dist: alpha_vantage (>=3.0.0,<4.0.0) ; extra == "alpha-vantage" or extra == "all"
15
20
  Requires-Dist: azure-identity (>=1.19.0,<2.0.0)
16
21
  Requires-Dist: azure-mgmt-resource (>=23.2.0,<24.0.0)
17
22
  Requires-Dist: azure-mgmt-storage (>=21.2.1,<22.0.0)
@@ -24,13 +29,14 @@ Requires-Dist: jupyter (>=1.0.0)
24
29
  Requires-Dist: marshmallow (>=3.5.0)
25
30
  Requires-Dist: plotly (>=6.1.2,<7.0.0)
26
31
  Requires-Dist: polars[numpy,pandas] (>=0.20.10)
32
+ Requires-Dist: polygon-api-client (>=1.14.0,<2.0.0) ; extra == "polygon" or extra == "all"
27
33
  Requires-Dist: python-dateutil (>=2.8.2)
28
34
  Requires-Dist: python-dotenv (>=1.0.1,<2.0.0)
29
35
  Requires-Dist: schedule (>=1.1.0)
30
36
  Requires-Dist: tabulate (>=0.9.0)
31
37
  Requires-Dist: tqdm (>=4.66.1)
32
38
  Requires-Dist: wrapt (>=1.16.0)
33
- Requires-Dist: yfinance (>=0.2.61,<0.3.0)
39
+ Requires-Dist: yfinance (>=0.2.61,<0.3.0) ; extra == "yahoo" or extra == "all"
34
40
  Description-Content-Type: text/markdown
35
41
 
36
42
  <h1 align="center">
@@ -38,12 +44,28 @@ Description-Content-Type: text/markdown
38
44
  </h1>
39
45
 
40
46
  <p align="center">
41
- <i align="center">Create trading strategies. Compare them side by side. Pick the best one. 🚀</i>
47
+ <i align="center">Create trading strategies. Compare them side by side. Pick the best one and Deploy 🚀</i>
42
48
  </p>
43
49
 
44
50
  <h4 align="center">
45
- <a href="https://github.com/coding-kitties/investing-algorithm-framework/actions/workflows/test.yml">
46
- <img src="https://img.shields.io/github/actions/workflow/status/coding-kitties/investing-algorithm-framework/test.yml?branch=master&label=tests&style=flat-square" alt="tests" style="height: 20px;">
51
+ <a href="https://github.com/coding-kitties/investing-algorithm-framework/actions/workflows/test.yml?query=branch%3Amain">
52
+ <img src="https://img.shields.io/github/actions/workflow/status/coding-kitties/investing-algorithm-framework/test.yml?branch=main&label=linux%20(main)&style=flat-square&logo=linux&logoColor=white" alt="linux main" style="height: 20px;">
53
+ </a>
54
+ <a href="https://github.com/coding-kitties/investing-algorithm-framework/actions/workflows/test.yml?query=branch%3Amain">
55
+ <img src="https://img.shields.io/github/actions/workflow/status/coding-kitties/investing-algorithm-framework/test.yml?branch=main&label=macos%20(main)&style=flat-square&logo=apple&logoColor=white" alt="macos main" style="height: 20px;">
56
+ </a>
57
+ <a href="https://github.com/coding-kitties/investing-algorithm-framework/actions/workflows/test.yml?query=branch%3Amain">
58
+ <img src="https://img.shields.io/github/actions/workflow/status/coding-kitties/investing-algorithm-framework/test.yml?branch=main&label=windows%20(main)&style=flat-square&logo=windows&logoColor=white" alt="windows main" style="height: 20px;">
59
+ </a>
60
+ <br>
61
+ <a href="https://github.com/coding-kitties/investing-algorithm-framework/actions/workflows/test.yml?query=branch%3Adev">
62
+ <img src="https://img.shields.io/github/actions/workflow/status/coding-kitties/investing-algorithm-framework/test.yml?branch=dev&label=linux%20(dev)&style=flat-square&logo=linux&logoColor=white" alt="linux dev" style="height: 20px;">
63
+ </a>
64
+ <a href="https://github.com/coding-kitties/investing-algorithm-framework/actions/workflows/test.yml?query=branch%3Adev">
65
+ <img src="https://img.shields.io/github/actions/workflow/status/coding-kitties/investing-algorithm-framework/test.yml?branch=dev&label=macos%20(dev)&style=flat-square&logo=apple&logoColor=white" alt="macos dev" style="height: 20px;">
66
+ </a>
67
+ <a href="https://github.com/coding-kitties/investing-algorithm-framework/actions/workflows/test.yml?query=branch%3Adev">
68
+ <img src="https://img.shields.io/github/actions/workflow/status/coding-kitties/investing-algorithm-framework/test.yml?branch=dev&label=windows%20(dev)&style=flat-square&logo=windows&logoColor=white" alt="windows dev" style="height: 20px;">
47
69
  </a>
48
70
  <a href="https://pypi.org/project/investing-algorithm-framework/">
49
71
  <img src="https://img.shields.io/pypi/v/investing-algorithm-framework.svg?style=flat-square" alt="pypi" style="height: 20px;">
@@ -96,7 +118,7 @@ Description-Content-Type: text/markdown
96
118
 
97
119
  Most quant frameworks stop at "here's your backtest result." You get a number, maybe a chart, and then you're on your own figuring out which strategy is actually better.
98
120
 
99
- This framework is built around the full loop: **create strategies → backtest them → compare them in a single report → deploy the winner.** It generates a self-contained HTML dashboard that lets you rank, filter, and visually compare every strategy you've tested — all in one view, no notebooks required.
121
+ This framework is built around the full loop: **create strategies → vector backtest for signals analysis → compare them in a single report → event backtest the most promising strategies → deploy the winner.** It generates a self-contained HTML dashboard that lets you rank, filter, and visually compare every strategy you've tested — all in one view, no notebooks required.
100
122
 
101
123
  <details open>
102
124
  <summary>
@@ -104,6 +126,10 @@ This framework is built around the full loop: **create strategies → backtest t
104
126
  </summary> <br>
105
127
 
106
128
  - 📊 **30+ Metrics** — CAGR, Sharpe, Sortino, Calmar, VaR, CVaR, Max DD, Recovery & more
129
+ - ⚡ **Vector Backtesting for Signal Analysis** — Quickly test your strategy logic on historical data to see how signals would have behaved before committing to full event-driven backtests
130
+ - 🏃 **Event-Driven Backtesting** — Once promising strategies are identified via vector backtests, run full event-driven backtests to simulate realistic execution and portfolio management
131
+ - 🔀 **Permutation Testing / Monte Carlo Simulations** — Assess the statistical robustness of your strategies by running them across randomized market scenarios to see how often your results could occur by chance
132
+ - 🚀 **Deployment** — Once the best strategy is identified through backtesting and comparison, deploy it to production locally or in the cloud (AWS Lambda / Azure Functions) to start live trading
107
133
  - ⚔️ **Multi-Strategy Comparison** — Rank, filter & compare strategies in a single interactive report
108
134
  - 🪟 **Multi-Window Robustness** — Test across different time periods with window coverage analysis
109
135
  - 📈 **Equity & Drawdown Charts** — Overlay equity curves, rolling Sharpe, drawdown & return distributions
@@ -111,7 +137,9 @@ This framework is built around the full loop: **create strategies → backtest t
111
137
  - 🎯 **Return Scenario Projections** — Good, average, bad & very bad year projections from backtest data
112
138
  - 📉 **Benchmark Comparison** — Beat-rate analysis vs Buy & Hold, DCA, risk-free & custom benchmarks
113
139
  - 📄 **One-Click HTML Report** — Self-contained file, no server, dark & light theme, shareable
114
- - 🚀 **Build → Backtest → Deploy** — Local dev, cloud deploy (AWS / Azure), or monetize on Finterion
140
+ - 🌐 **Load External Data** — Fetch CSV, JSON, or Parquet from any URL with caching and auto-refresh
141
+ - � **[Record Custom Variables](https://coding-kitties.github.io/investing-algorithm-framework/Advanced%20Concepts/recording-variables)** — Track any indicator or metric during backtests with `context.record()`
142
+ - �🚀 **Build → Backtest → Deploy** — Local dev, cloud deploy (AWS / Azure), or monetize on Finterion
115
143
 
116
144
  </details>
117
145
 
@@ -297,15 +325,18 @@ report.save("my_report.html")
297
325
 
298
326
  | | |
299
327
  |---|---|
300
- | **Backtest Report Dashboard** | Self-contained HTML report with ranking tables, equity curves, metric charts, heatmaps, and strategy comparison |
301
- | **Event-Driven Backtesting** | Realistic, order-by-order simulation |
302
- | **Vectorized Backtesting** | Fast signal research and prototyping |
328
+ | **[Backtest Report Dashboard](https://coding-kitties.github.io/investing-algorithm-framework/Getting%20Started/backtest-reports)** | Self-contained HTML report with ranking tables, equity curves, metric charts, heatmaps, and strategy comparison |
329
+ | **[Event-Driven Backtesting](https://coding-kitties.github.io/investing-algorithm-framework/Getting%20Started/backtesting)** | Realistic, order-by-order simulation |
330
+ | **[Vectorized Backtesting](https://coding-kitties.github.io/investing-algorithm-framework/Getting%20Started/vector-backtesting)** | Fast signal research and prototyping |
303
331
  | **50+ Metrics** | CAGR, Sharpe, Sortino, max drawdown, win rate, profit factor, recovery factor, volatility, and more |
304
- | **Live Trading** | Connect to exchanges via CCXT for real-time execution |
305
- | **Portfolio Management** | Position tracking, trade management, persistence |
306
- | **Cloud Deployment** | Deploy to AWS Lambda, Azure Functions, or run as a web service |
307
- | **Market Data** | OHLCV, tickers, custom data — Polars and Pandas native |
308
- | **Extensible** | Custom data providers, order executors, and strategy classes |
332
+ | **[Live Trading](https://coding-kitties.github.io/investing-algorithm-framework/Getting%20Started/application-setup)** | Connect to exchanges via CCXT for real-time execution |
333
+ | **[Portfolio Management](https://coding-kitties.github.io/investing-algorithm-framework/Getting%20Started/portfolio-configuration)** | Position tracking, trade management, persistence |
334
+ | **[Cloud Deployment](https://coding-kitties.github.io/investing-algorithm-framework/Getting%20Started/deployment)** | Deploy to AWS Lambda, Azure Functions, or run as a web service |
335
+ | **[Market Data Providers](https://coding-kitties.github.io/investing-algorithm-framework/Advanced%20Concepts/custom-data-providers)** | Built-in providers for CCXT, Yahoo Finance, Alpha Vantage, and Polygon — or build your own |
336
+ | **[Load External Data](https://coding-kitties.github.io/investing-algorithm-framework/Data/external-data)** | Fetch CSV, JSON, or Parquet from any URL with caching, date parsing, and pre/post-processing |
337
+ | **[Record Custom Variables](https://coding-kitties.github.io/investing-algorithm-framework/Advanced%20Concepts/recording-variables)** | Track any indicator or metric during backtests with `context.record()` |
338
+ | **[Strategies](https://coding-kitties.github.io/investing-algorithm-framework/Getting%20Started/strategies)** | OHLCV, tickers, custom data — Polars and Pandas native |
339
+ | **[Extensible](https://coding-kitties.github.io/investing-algorithm-framework/Advanced%20Concepts/custom-data-providers)** | Custom data providers, order executors, and strategy classes |
309
340
 
310
341
  </details>
311
342
 
@@ -338,7 +369,7 @@ python -m unittest discover -s tests
338
369
 
339
370
  - [Open an issue](https://github.com/coding-kitties/investing-algorithm-framework/issues/new) for bugs or ideas
340
371
  - Read the [Contributing Guide](https://coding-kitties.github.io/investing-algorithm-framework/Contributing%20Guide/contributing)
341
- - PRs go against the `develop` branch
372
+ - PRs go against the `dev` branch
342
373
 
343
374
  ## Risk Disclaimer
344
375
 
@@ -3,12 +3,28 @@
3
3
  </h1>
4
4
 
5
5
  <p align="center">
6
- <i align="center">Create trading strategies. Compare them side by side. Pick the best one. 🚀</i>
6
+ <i align="center">Create trading strategies. Compare them side by side. Pick the best one and Deploy 🚀</i>
7
7
  </p>
8
8
 
9
9
  <h4 align="center">
10
- <a href="https://github.com/coding-kitties/investing-algorithm-framework/actions/workflows/test.yml">
11
- <img src="https://img.shields.io/github/actions/workflow/status/coding-kitties/investing-algorithm-framework/test.yml?branch=master&label=tests&style=flat-square" alt="tests" style="height: 20px;">
10
+ <a href="https://github.com/coding-kitties/investing-algorithm-framework/actions/workflows/test.yml?query=branch%3Amain">
11
+ <img src="https://img.shields.io/github/actions/workflow/status/coding-kitties/investing-algorithm-framework/test.yml?branch=main&label=linux%20(main)&style=flat-square&logo=linux&logoColor=white" alt="linux main" style="height: 20px;">
12
+ </a>
13
+ <a href="https://github.com/coding-kitties/investing-algorithm-framework/actions/workflows/test.yml?query=branch%3Amain">
14
+ <img src="https://img.shields.io/github/actions/workflow/status/coding-kitties/investing-algorithm-framework/test.yml?branch=main&label=macos%20(main)&style=flat-square&logo=apple&logoColor=white" alt="macos main" style="height: 20px;">
15
+ </a>
16
+ <a href="https://github.com/coding-kitties/investing-algorithm-framework/actions/workflows/test.yml?query=branch%3Amain">
17
+ <img src="https://img.shields.io/github/actions/workflow/status/coding-kitties/investing-algorithm-framework/test.yml?branch=main&label=windows%20(main)&style=flat-square&logo=windows&logoColor=white" alt="windows main" style="height: 20px;">
18
+ </a>
19
+ <br>
20
+ <a href="https://github.com/coding-kitties/investing-algorithm-framework/actions/workflows/test.yml?query=branch%3Adev">
21
+ <img src="https://img.shields.io/github/actions/workflow/status/coding-kitties/investing-algorithm-framework/test.yml?branch=dev&label=linux%20(dev)&style=flat-square&logo=linux&logoColor=white" alt="linux dev" style="height: 20px;">
22
+ </a>
23
+ <a href="https://github.com/coding-kitties/investing-algorithm-framework/actions/workflows/test.yml?query=branch%3Adev">
24
+ <img src="https://img.shields.io/github/actions/workflow/status/coding-kitties/investing-algorithm-framework/test.yml?branch=dev&label=macos%20(dev)&style=flat-square&logo=apple&logoColor=white" alt="macos dev" style="height: 20px;">
25
+ </a>
26
+ <a href="https://github.com/coding-kitties/investing-algorithm-framework/actions/workflows/test.yml?query=branch%3Adev">
27
+ <img src="https://img.shields.io/github/actions/workflow/status/coding-kitties/investing-algorithm-framework/test.yml?branch=dev&label=windows%20(dev)&style=flat-square&logo=windows&logoColor=white" alt="windows dev" style="height: 20px;">
12
28
  </a>
13
29
  <a href="https://pypi.org/project/investing-algorithm-framework/">
14
30
  <img src="https://img.shields.io/pypi/v/investing-algorithm-framework.svg?style=flat-square" alt="pypi" style="height: 20px;">
@@ -61,7 +77,7 @@
61
77
 
62
78
  Most quant frameworks stop at "here's your backtest result." You get a number, maybe a chart, and then you're on your own figuring out which strategy is actually better.
63
79
 
64
- This framework is built around the full loop: **create strategies → backtest them → compare them in a single report → deploy the winner.** It generates a self-contained HTML dashboard that lets you rank, filter, and visually compare every strategy you've tested — all in one view, no notebooks required.
80
+ This framework is built around the full loop: **create strategies → vector backtest for signals analysis → compare them in a single report → event backtest the most promising strategies → deploy the winner.** It generates a self-contained HTML dashboard that lets you rank, filter, and visually compare every strategy you've tested — all in one view, no notebooks required.
65
81
 
66
82
  <details open>
67
83
  <summary>
@@ -69,6 +85,10 @@ This framework is built around the full loop: **create strategies → backtest t
69
85
  </summary> <br>
70
86
 
71
87
  - 📊 **30+ Metrics** — CAGR, Sharpe, Sortino, Calmar, VaR, CVaR, Max DD, Recovery & more
88
+ - ⚡ **Vector Backtesting for Signal Analysis** — Quickly test your strategy logic on historical data to see how signals would have behaved before committing to full event-driven backtests
89
+ - 🏃 **Event-Driven Backtesting** — Once promising strategies are identified via vector backtests, run full event-driven backtests to simulate realistic execution and portfolio management
90
+ - 🔀 **Permutation Testing / Monte Carlo Simulations** — Assess the statistical robustness of your strategies by running them across randomized market scenarios to see how often your results could occur by chance
91
+ - 🚀 **Deployment** — Once the best strategy is identified through backtesting and comparison, deploy it to production locally or in the cloud (AWS Lambda / Azure Functions) to start live trading
72
92
  - ⚔️ **Multi-Strategy Comparison** — Rank, filter & compare strategies in a single interactive report
73
93
  - 🪟 **Multi-Window Robustness** — Test across different time periods with window coverage analysis
74
94
  - 📈 **Equity & Drawdown Charts** — Overlay equity curves, rolling Sharpe, drawdown & return distributions
@@ -76,7 +96,9 @@ This framework is built around the full loop: **create strategies → backtest t
76
96
  - 🎯 **Return Scenario Projections** — Good, average, bad & very bad year projections from backtest data
77
97
  - 📉 **Benchmark Comparison** — Beat-rate analysis vs Buy & Hold, DCA, risk-free & custom benchmarks
78
98
  - 📄 **One-Click HTML Report** — Self-contained file, no server, dark & light theme, shareable
79
- - 🚀 **Build → Backtest → Deploy** — Local dev, cloud deploy (AWS / Azure), or monetize on Finterion
99
+ - 🌐 **Load External Data** — Fetch CSV, JSON, or Parquet from any URL with caching and auto-refresh
100
+ - � **[Record Custom Variables](https://coding-kitties.github.io/investing-algorithm-framework/Advanced%20Concepts/recording-variables)** — Track any indicator or metric during backtests with `context.record()`
101
+ - �🚀 **Build → Backtest → Deploy** — Local dev, cloud deploy (AWS / Azure), or monetize on Finterion
80
102
 
81
103
  </details>
82
104
 
@@ -262,15 +284,18 @@ report.save("my_report.html")
262
284
 
263
285
  | | |
264
286
  |---|---|
265
- | **Backtest Report Dashboard** | Self-contained HTML report with ranking tables, equity curves, metric charts, heatmaps, and strategy comparison |
266
- | **Event-Driven Backtesting** | Realistic, order-by-order simulation |
267
- | **Vectorized Backtesting** | Fast signal research and prototyping |
287
+ | **[Backtest Report Dashboard](https://coding-kitties.github.io/investing-algorithm-framework/Getting%20Started/backtest-reports)** | Self-contained HTML report with ranking tables, equity curves, metric charts, heatmaps, and strategy comparison |
288
+ | **[Event-Driven Backtesting](https://coding-kitties.github.io/investing-algorithm-framework/Getting%20Started/backtesting)** | Realistic, order-by-order simulation |
289
+ | **[Vectorized Backtesting](https://coding-kitties.github.io/investing-algorithm-framework/Getting%20Started/vector-backtesting)** | Fast signal research and prototyping |
268
290
  | **50+ Metrics** | CAGR, Sharpe, Sortino, max drawdown, win rate, profit factor, recovery factor, volatility, and more |
269
- | **Live Trading** | Connect to exchanges via CCXT for real-time execution |
270
- | **Portfolio Management** | Position tracking, trade management, persistence |
271
- | **Cloud Deployment** | Deploy to AWS Lambda, Azure Functions, or run as a web service |
272
- | **Market Data** | OHLCV, tickers, custom data — Polars and Pandas native |
273
- | **Extensible** | Custom data providers, order executors, and strategy classes |
291
+ | **[Live Trading](https://coding-kitties.github.io/investing-algorithm-framework/Getting%20Started/application-setup)** | Connect to exchanges via CCXT for real-time execution |
292
+ | **[Portfolio Management](https://coding-kitties.github.io/investing-algorithm-framework/Getting%20Started/portfolio-configuration)** | Position tracking, trade management, persistence |
293
+ | **[Cloud Deployment](https://coding-kitties.github.io/investing-algorithm-framework/Getting%20Started/deployment)** | Deploy to AWS Lambda, Azure Functions, or run as a web service |
294
+ | **[Market Data Providers](https://coding-kitties.github.io/investing-algorithm-framework/Advanced%20Concepts/custom-data-providers)** | Built-in providers for CCXT, Yahoo Finance, Alpha Vantage, and Polygon — or build your own |
295
+ | **[Load External Data](https://coding-kitties.github.io/investing-algorithm-framework/Data/external-data)** | Fetch CSV, JSON, or Parquet from any URL with caching, date parsing, and pre/post-processing |
296
+ | **[Record Custom Variables](https://coding-kitties.github.io/investing-algorithm-framework/Advanced%20Concepts/recording-variables)** | Track any indicator or metric during backtests with `context.record()` |
297
+ | **[Strategies](https://coding-kitties.github.io/investing-algorithm-framework/Getting%20Started/strategies)** | OHLCV, tickers, custom data — Polars and Pandas native |
298
+ | **[Extensible](https://coding-kitties.github.io/investing-algorithm-framework/Advanced%20Concepts/custom-data-providers)** | Custom data providers, order executors, and strategy classes |
274
299
 
275
300
  </details>
276
301
 
@@ -303,7 +328,7 @@ python -m unittest discover -s tests
303
328
 
304
329
  - [Open an issue](https://github.com/coding-kitties/investing-algorithm-framework/issues/new) for bugs or ideas
305
330
  - Read the [Contributing Guide](https://coding-kitties.github.io/investing-algorithm-framework/Contributing%20Guide/contributing)
306
- - PRs go against the `develop` branch
331
+ - PRs go against the `dev` branch
307
332
 
308
333
  ## Risk Disclaimer
309
334
 
@@ -24,11 +24,20 @@ from .domain import ApiException, combine_backtests, PositionSize, \
24
24
  APPLICATION_DIRECTORY, DataSource, OrderExecutor, PortfolioProvider, \
25
25
  SnapshotInterval, AWS_S3_STATE_BUCKET_NAME, BacktestEvaluationFocus, \
26
26
  save_backtests_to_directory, BacktestMetrics, DATA_DIRECTORY, \
27
- retag_backtests
27
+ retag_backtests, \
28
+ Blotter, DefaultBlotter, SimulationBlotter, Transaction, \
29
+ SlippageModel, NoSlippage, PercentageSlippage, FixedSlippage, \
30
+ VolumeImpactSlippage, \
31
+ CommissionModel, NoCommission, PercentageCommission, FixedCommission, \
32
+ FillModel, FullFill, VolumeBasedFill, \
33
+ FXRateProvider, StaticFXRateProvider
28
34
  from .infrastructure import AzureBlobStorageStateHandler, \
29
- CSVOHLCVDataProvider, CSVTickerDataProvider, \
35
+ CSVOHLCVDataProvider, CSVTickerDataProvider, CSVURLDataProvider, \
36
+ JSONURLDataProvider, ParquetURLDataProvider, \
30
37
  CCXTOHLCVDataProvider, CCXTTickerDataProvider, \
31
- PandasOHLCVDataProvider, \
38
+ PandasOHLCVDataProvider, OHLCVDataProviderBase, \
39
+ YahooOHLCVDataProvider, \
40
+ AlphaVantageOHLCVDataProvider, PolygonOHLCVDataProvider, \
32
41
  AWSS3StorageStateHandler
33
42
  from .create_app import create_app
34
43
  from .download_data import download, download_v2, DownloadResult, \
@@ -114,8 +123,13 @@ __all__ = [
114
123
  'DataType',
115
124
  'CSVOHLCVDataProvider',
116
125
  'CSVTickerDataProvider',
117
- "CCXTOHLCVDataProvider",
126
+ 'CSVURLDataProvider', 'JSONURLDataProvider',
127
+ 'ParquetURLDataProvider', "CCXTOHLCVDataProvider",
118
128
  "CCXTTickerDataProvider",
129
+ "OHLCVDataProviderBase",
130
+ "YahooOHLCVDataProvider",
131
+ "AlphaVantageOHLCVDataProvider",
132
+ "PolygonOHLCVDataProvider",
119
133
  "DataProvider",
120
134
  "get_annual_volatility",
121
135
  "get_sortino_ratio",
@@ -221,5 +235,23 @@ __all__ = [
221
235
  "download_v2",
222
236
  "DownloadResult",
223
237
  "create_data_storage_path",
224
- "DATA_DIRECTORY"
238
+ "DATA_DIRECTORY",
239
+ "Blotter",
240
+ "DefaultBlotter",
241
+ "SimulationBlotter",
242
+ "Transaction",
243
+ "SlippageModel",
244
+ "NoSlippage",
245
+ "PercentageSlippage",
246
+ "FixedSlippage",
247
+ "VolumeImpactSlippage",
248
+ "CommissionModel",
249
+ "NoCommission",
250
+ "PercentageCommission",
251
+ "FixedCommission",
252
+ "FillModel",
253
+ "FullFill",
254
+ "VolumeBasedFill",
255
+ "FXRateProvider",
256
+ "StaticFXRateProvider",
225
257
  ]
@@ -24,7 +24,7 @@ from investing_algorithm_framework.domain import DATABASE_NAME, TimeUnit, \
24
24
  LAST_SNAPSHOT_DATETIME, BACKTESTING_FLAG, DATA_DIRECTORY
25
25
  from investing_algorithm_framework.infrastructure import setup_sqlalchemy, \
26
26
  create_all_tables, CCXTOrderExecutor, CCXTPortfolioProvider, \
27
- BacktestOrderExecutor, CCXTOHLCVDataProvider, clear_db, \
27
+ CCXTOHLCVDataProvider, clear_db, \
28
28
  PandasOHLCVDataProvider
29
29
  from investing_algorithm_framework.services import OrderBacktestService, \
30
30
  BacktestPortfolioService, DefaultTradeOrderEvaluator
@@ -71,10 +71,22 @@ class App:
71
71
  self._state_handler = state_handler
72
72
  self._run_history = None
73
73
  self._name = name
74
+ self._blotter = None
75
+ self._fx_rate_provider = None
76
+ self._base_currency = None
74
77
 
75
78
  @property
76
79
  def context(self):
77
- return self.container.context()
80
+ from investing_algorithm_framework.domain.blotter import \
81
+ DefaultBlotter
82
+
83
+ ctx = self.container.context()
84
+ ctx._blotter = self._blotter \
85
+ if self._blotter is not None else DefaultBlotter()
86
+ ctx._fx_rate_provider = self._fx_rate_provider
87
+ ctx._base_currency = self._base_currency
88
+
89
+ return ctx
78
90
 
79
91
  @property
80
92
  def resource_directory_path(self):
@@ -356,6 +368,29 @@ class App:
356
368
  logger.info(
357
369
  f"Removing existing database at {database_path}"
358
370
  )
371
+
372
+ # Dispose the existing engine to release file locks
373
+ # (required on Windows where locks are mandatory)
374
+ from investing_algorithm_framework.infrastructure.database \
375
+ import Session
376
+ from sqlalchemy.orm import close_all_sessions
377
+ close_all_sessions()
378
+ bind = Session.kw.get("bind")
379
+
380
+ if bind is not None:
381
+
382
+ try:
383
+ conn = bind.connect()
384
+ conn.invalidate()
385
+ conn.close()
386
+ except Exception:
387
+ pass
388
+
389
+ bind.dispose()
390
+
391
+ import gc
392
+ gc.collect()
393
+
359
394
  os.remove(database_path)
360
395
 
361
396
  # Create the sqlalchemy database uri
@@ -651,7 +686,9 @@ class App:
651
686
  .trade_stop_loss_service(),
652
687
  trade_take_profit_service=self.container
653
688
  .trade_take_profit_service(),
654
- configuration_service=self.container.configuration_service()
689
+ configuration_service=self.container.configuration_service(),
690
+ blotter=self._blotter,
691
+ context=self.context
655
692
  )
656
693
  event_loop_service = EventLoopService(
657
694
  configuration_service=self.container.configuration_service(),
@@ -1499,6 +1536,7 @@ class App:
1499
1536
  checkpoint_batch_size=checkpoint_batch_size,
1500
1537
  fill_missing_data=fill_missing_data,
1501
1538
  iterative_summary_update=iterative_summary_update,
1539
+ blotter=self._blotter,
1502
1540
  )
1503
1541
 
1504
1542
  # Cleanup resources
@@ -1737,6 +1775,7 @@ class App:
1737
1775
  trading_symbol=trading_symbol,
1738
1776
  fill_missing_data=fill_missing_data,
1739
1777
  skip_data_sources_initialization=True,
1778
+ blotter=self._blotter,
1740
1779
  )
1741
1780
 
1742
1781
  # Store run history
@@ -2207,6 +2246,98 @@ class App:
2207
2246
  )
2208
2247
  self.add_market_credential(market_credential)
2209
2248
 
2249
+ def set_blotter(self, blotter):
2250
+ """
2251
+ Set a blotter for order book management. The blotter sits
2252
+ between the strategy and the order execution layer, enabling
2253
+ batch ordering, transaction tracking, and custom order routing.
2254
+
2255
+ Args:
2256
+ blotter: Instance of Blotter
2257
+
2258
+ Returns:
2259
+ None
2260
+ """
2261
+ from investing_algorithm_framework.domain.blotter import Blotter
2262
+
2263
+ if inspect.isclass(blotter):
2264
+ blotter = blotter()
2265
+
2266
+ if not isinstance(blotter, Blotter):
2267
+ raise OperationalException(
2268
+ "Blotter should be an instance of Blotter"
2269
+ )
2270
+
2271
+ self._blotter = blotter
2272
+
2273
+ def get_blotter(self):
2274
+ """
2275
+ Get the configured blotter.
2276
+
2277
+ Returns:
2278
+ Blotter or None: The configured blotter instance.
2279
+ """
2280
+ return self._blotter
2281
+
2282
+ def set_base_currency(self, currency: str) -> None:
2283
+ """
2284
+ Set the base currency for multi-currency portfolio reporting.
2285
+
2286
+ When a base currency is set and an FX rate provider is registered,
2287
+ the framework will automatically convert position values from
2288
+ their local currency to the base currency when computing
2289
+ portfolio totals.
2290
+
2291
+ Args:
2292
+ currency: Currency code (e.g. "EUR", "USD", "GBP").
2293
+
2294
+ Returns:
2295
+ None
2296
+ """
2297
+ self._base_currency = currency.upper()
2298
+
2299
+ def get_base_currency(self) -> str:
2300
+ """
2301
+ Get the configured base currency.
2302
+
2303
+ Returns:
2304
+ str or None: The base currency code, or None if not set.
2305
+ """
2306
+ return self._base_currency
2307
+
2308
+ def add_fx_rate_provider(self, fx_rate_provider) -> None:
2309
+ """
2310
+ Register an FX rate provider for multi-currency portfolio
2311
+ support. The provider supplies exchange rates between
2312
+ currency pairs.
2313
+
2314
+ Args:
2315
+ fx_rate_provider: Instance of FXRateProvider.
2316
+
2317
+ Returns:
2318
+ None
2319
+ """
2320
+ from investing_algorithm_framework.domain.fx import FXRateProvider
2321
+
2322
+ if inspect.isclass(fx_rate_provider):
2323
+ fx_rate_provider = fx_rate_provider()
2324
+
2325
+ if not isinstance(fx_rate_provider, FXRateProvider):
2326
+ raise OperationalException(
2327
+ "FX rate provider should be an instance of FXRateProvider"
2328
+ )
2329
+
2330
+ self._fx_rate_provider = fx_rate_provider
2331
+
2332
+ def get_fx_rate_provider(self):
2333
+ """
2334
+ Get the configured FX rate provider.
2335
+
2336
+ Returns:
2337
+ FXRateProvider or None: The FX rate provider instance.
2338
+ """
2339
+ return self._fx_rate_provider
2340
+
2210
2341
  def add_order_executor(self, order_executor):
2211
2342
  """
2212
2343
  Function to add an order executor to the app. The order executor
@@ -2284,24 +2415,30 @@ class App:
2284
2415
  """
2285
2416
  Function to initialize the order executors. This function will
2286
2417
  first check if the app is running in backtest mode or not. If it is
2287
- running in backtest mode, all order executors will be removed and
2288
- a single BacktestOrderExecutor will be added to the order executors.
2418
+ running in backtest mode, all order executors will be removed
2419
+ (OrderBacktestService handles execution directly) and the
2420
+ SimulationBlotter will be set as the default blotter if no custom
2421
+ blotter has been configured.
2289
2422
 
2290
2423
  If it is not running in backtest mode, it will add the default
2291
2424
  CCXTOrderExecutor with a priority 3.
2292
2425
  """
2426
+ from investing_algorithm_framework.domain.blotter import \
2427
+ SimulationBlotter
2428
+
2293
2429
  logger.info("Adding order executors")
2294
2430
  order_executor_lookup = self.container.order_executor_lookup()
2295
2431
  environment = self.config[ENVIRONMENT]
2296
2432
 
2297
2433
  if Environment.BACKTEST.equals(environment):
2298
- # If the app is running in backtest mode,
2299
- # remove all order executors
2300
- # and add a single BacktestOrderExecutor
2434
+ # In backtest mode, OrderBacktestService handles execution
2435
+ # directly — no order executor needed
2301
2436
  order_executor_lookup.reset()
2302
- order_executor_lookup.add_order_executor(
2303
- BacktestOrderExecutor(priority=1)
2304
- )
2437
+
2438
+ # Auto-set SimulationBlotter for backtesting if no
2439
+ # custom blotter has been configured
2440
+ if self._blotter is None:
2441
+ self._blotter = SimulationBlotter()
2305
2442
  else:
2306
2443
  order_executor_lookup.add_order_executor(
2307
2444
  CCXTOrderExecutor(priority=3)
@@ -2498,9 +2635,7 @@ class App:
2498
2635
  environment = self.config[ENVIRONMENT]
2499
2636
 
2500
2637
  if Environment.BACKTEST.equals(environment):
2501
- # If the app is running in backtest mode,
2502
- # remove all order executors
2503
- # and add a single BacktestOrderExecutor
2638
+ # In backtest mode, remove all portfolio providers
2504
2639
  portfolio_provider_lookup.reset()
2505
2640
  else:
2506
2641
  portfolio_provider_lookup.add_portfolio_provider(