investing-algorithm-framework 8.7.2__tar.gz → 8.7.3__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 (309) hide show
  1. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/PKG-INFO +17 -17
  2. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/README.md +16 -16
  3. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/cli/deploy_to_azure_function.py +107 -46
  4. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/cli/initialize_app.py +123 -14
  5. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/cli/templates/.gitignore.template +11 -0
  6. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/cli/templates/app.py.template +1 -1
  7. investing_algorithm_framework-8.7.3/investing_algorithm_framework/cli/templates/app_aws_lambda_function.py.template +48 -0
  8. investing_algorithm_framework-8.7.3/investing_algorithm_framework/cli/templates/app_azure_function.py.template +35 -0
  9. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/cli/templates/app_web.py.template +1 -1
  10. investing_algorithm_framework-8.7.3/investing_algorithm_framework/cli/templates/azure_function_function_app.py.template +52 -0
  11. investing_algorithm_framework-8.7.3/investing_algorithm_framework/cli/templates/azure_function_host.json.template +21 -0
  12. investing_algorithm_framework-8.7.3/investing_algorithm_framework/cli/templates/data_providers.py.template +40 -0
  13. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/cli/templates/run_backtest.py.template +1 -1
  14. investing_algorithm_framework-8.7.3/investing_algorithm_framework/cli/templates/strategy.py.template +105 -0
  15. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/domain/backtesting/backtest.py +11 -0
  16. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/services/metrics/generate.py +23 -11
  17. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/pyproject.toml +1 -1
  18. investing_algorithm_framework-8.7.2/investing_algorithm_framework/cli/templates/app_aws_lambda_function.py.template +0 -48
  19. investing_algorithm_framework-8.7.2/investing_algorithm_framework/cli/templates/app_azure_function.py.template +0 -14
  20. investing_algorithm_framework-8.7.2/investing_algorithm_framework/cli/templates/azure_function_function_app.py.template +0 -65
  21. investing_algorithm_framework-8.7.2/investing_algorithm_framework/cli/templates/azure_function_host.json.template +0 -15
  22. investing_algorithm_framework-8.7.2/investing_algorithm_framework/cli/templates/data_providers.py.template +0 -17
  23. investing_algorithm_framework-8.7.2/investing_algorithm_framework/cli/templates/strategy.py.template +0 -124
  24. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/LICENSE +0 -0
  25. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/__init__.py +0 -0
  26. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/analysis/__init__.py +0 -0
  27. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/analysis/backtest_data_ranges.py +0 -0
  28. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/analysis/markdown.py +0 -0
  29. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/analysis/ranking.py +0 -0
  30. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/app/__init__.py +0 -0
  31. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/app/algorithm/__init__.py +0 -0
  32. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/app/algorithm/algorithm.py +0 -0
  33. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/app/algorithm/algorithm_factory.py +0 -0
  34. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/app/app.py +0 -0
  35. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/app/app_hook.py +0 -0
  36. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/app/context.py +0 -0
  37. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/app/eventloop.py +0 -0
  38. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/app/reporting/__init__.py +0 -0
  39. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/app/reporting/ascii.py +0 -0
  40. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/app/reporting/backtest_report.py +0 -0
  41. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/app/reporting/backtest_report_old.py +0 -0
  42. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/app/reporting/charts/__init__.py +0 -0
  43. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/app/reporting/charts/entry_exist_signals.py +0 -0
  44. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/app/reporting/charts/equity_curve.py +0 -0
  45. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/app/reporting/charts/equity_curve_drawdown.py +0 -0
  46. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/app/reporting/charts/line_chart.py +0 -0
  47. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/app/reporting/charts/monthly_returns_heatmap.py +0 -0
  48. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/app/reporting/charts/ohlcv_data_completeness.py +0 -0
  49. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/app/reporting/charts/rolling_sharp_ratio.py +0 -0
  50. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/app/reporting/charts/yearly_returns_barchart.py +0 -0
  51. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/app/reporting/generate.py +0 -0
  52. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/app/reporting/tables/__init__.py +0 -0
  53. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/app/reporting/tables/key_metrics_table.py +0 -0
  54. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/app/reporting/tables/stop_loss_table.py +0 -0
  55. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/app/reporting/tables/time_metrics_table.py +0 -0
  56. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/app/reporting/tables/trade_metrics_table.py +0 -0
  57. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/app/reporting/tables/trades_table.py +0 -0
  58. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/app/reporting/tables/utils.py +0 -0
  59. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/app/reporting/templates/dashboard.css +0 -0
  60. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/app/reporting/templates/dashboard.js +0 -0
  61. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/app/reporting/templates/dashboard_template.html.j2 +0 -0
  62. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/app/reporting/templates/report_template.html.j2 +0 -0
  63. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/app/stateless/__init__.py +0 -0
  64. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/app/stateless/action_handlers/__init__.py +0 -0
  65. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/app/stateless/action_handlers/action_handler_strategy.py +0 -0
  66. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/app/stateless/action_handlers/check_online_handler.py +0 -0
  67. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/app/stateless/action_handlers/run_strategy_handler.py +0 -0
  68. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/app/stateless/exception_handler.py +0 -0
  69. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/app/strategy.py +0 -0
  70. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/app/task.py +0 -0
  71. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/app/web/__init__.py +0 -0
  72. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/app/web/controllers/__init__.py +0 -0
  73. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/app/web/controllers/orders.py +0 -0
  74. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/app/web/controllers/portfolio.py +0 -0
  75. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/app/web/controllers/positions.py +0 -0
  76. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/app/web/create_app.py +0 -0
  77. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/app/web/error_handler.py +0 -0
  78. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/app/web/responses.py +0 -0
  79. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/app/web/run_strategies.py +0 -0
  80. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/app/web/schemas/__init__.py +0 -0
  81. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/app/web/schemas/order.py +0 -0
  82. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/app/web/schemas/portfolio.py +0 -0
  83. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/app/web/schemas/position.py +0 -0
  84. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/app/web/setup_cors.py +0 -0
  85. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/cli/__init__.py +0 -0
  86. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/cli/cli.py +0 -0
  87. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/cli/deploy_to_aws_lambda.py +0 -0
  88. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/cli/mcp_server.py +0 -0
  89. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/cli/templates/aws_lambda_dockerfile.template +0 -0
  90. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/cli/templates/aws_lambda_dockerignore.template +0 -0
  91. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/cli/templates/aws_lambda_readme.md.template +0 -0
  92. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/cli/templates/aws_lambda_requirements.txt.template +0 -0
  93. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/cli/templates/azure_function_local.settings.json.template +0 -0
  94. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/cli/templates/azure_function_requirements.txt.template +0 -0
  95. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/cli/templates/env.example.template +0 -0
  96. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/cli/templates/env_azure_function.example.template +0 -0
  97. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/cli/templates/market_data_providers.py.template +0 -0
  98. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/cli/templates/readme.md.template +0 -0
  99. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/cli/templates/requirements.txt.template +0 -0
  100. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/cli/validate_backtest_checkpoints.py +0 -0
  101. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/create_app.py +0 -0
  102. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/dependency_container.py +0 -0
  103. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/domain/__init__.py +0 -0
  104. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/domain/algorithm_id.py +0 -0
  105. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/domain/backtesting/__init__.py +0 -0
  106. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/domain/backtesting/backtest_date_range.py +0 -0
  107. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/domain/backtesting/backtest_evaluation_focuss.py +0 -0
  108. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/domain/backtesting/backtest_metrics.py +0 -0
  109. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/domain/backtesting/backtest_permutation_test.py +0 -0
  110. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/domain/backtesting/backtest_run.py +0 -0
  111. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/domain/backtesting/backtest_summary_metrics.py +0 -0
  112. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/domain/backtesting/backtest_utils.py +0 -0
  113. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/domain/backtesting/bundle.py +0 -0
  114. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/domain/backtesting/combine_backtests.py +0 -0
  115. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/domain/backtesting/consistency.py +0 -0
  116. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/domain/backtesting/templates/backtest.html +0 -0
  117. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/domain/backtesting/templates/finterion-dark.png +0 -0
  118. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/domain/backtesting/templates/finterion-light.png +0 -0
  119. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/domain/blotter.py +0 -0
  120. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/domain/config.py +0 -0
  121. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/domain/constants.py +0 -0
  122. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/domain/data_provider.py +0 -0
  123. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/domain/data_structures.py +0 -0
  124. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/domain/datetime_parsing.py +0 -0
  125. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/domain/decimal_parsing.py +0 -0
  126. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/domain/exceptions.py +0 -0
  127. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/domain/fx.py +0 -0
  128. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/domain/models/__init__.py +0 -0
  129. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/domain/models/app_mode.py +0 -0
  130. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/domain/models/base_model.py +0 -0
  131. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/domain/models/data/__init__.py +0 -0
  132. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/domain/models/data/data_source.py +0 -0
  133. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/domain/models/data/data_type.py +0 -0
  134. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/domain/models/event.py +0 -0
  135. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/domain/models/market/__init__.py +0 -0
  136. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/domain/models/market/market_credential.py +0 -0
  137. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/domain/models/order/__init__.py +0 -0
  138. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/domain/models/order/order.py +0 -0
  139. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/domain/models/order/order_side.py +0 -0
  140. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/domain/models/order/order_status.py +0 -0
  141. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/domain/models/order/order_type.py +0 -0
  142. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/domain/models/portfolio/__init__.py +0 -0
  143. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/domain/models/portfolio/portfolio.py +0 -0
  144. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/domain/models/portfolio/portfolio_configuration.py +0 -0
  145. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/domain/models/portfolio/portfolio_snapshot.py +0 -0
  146. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/domain/models/position/__init__.py +0 -0
  147. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/domain/models/position/position.py +0 -0
  148. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/domain/models/position/position_size.py +0 -0
  149. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/domain/models/position/position_snapshot.py +0 -0
  150. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/domain/models/risk_rules/__init__.py +0 -0
  151. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/domain/models/risk_rules/scaling_rule.py +0 -0
  152. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/domain/models/risk_rules/stop_loss_rule.py +0 -0
  153. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/domain/models/risk_rules/take_profit_rule.py +0 -0
  154. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/domain/models/risk_rules/trading_cost.py +0 -0
  155. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/domain/models/snapshot_interval.py +0 -0
  156. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/domain/models/strategy_profile.py +0 -0
  157. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/domain/models/time_frame.py +0 -0
  158. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/domain/models/time_interval.py +0 -0
  159. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/domain/models/time_unit.py +0 -0
  160. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/domain/models/tracing/__init__.py +0 -0
  161. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/domain/models/tracing/trace.py +0 -0
  162. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/domain/models/trade/__init__.py +0 -0
  163. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/domain/models/trade/trade.py +0 -0
  164. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/domain/models/trade/trade_status.py +0 -0
  165. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/domain/models/trade/trade_stop_loss.py +0 -0
  166. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/domain/models/trade/trade_take_profit.py +0 -0
  167. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/domain/order_executor.py +0 -0
  168. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/domain/pipeline/__init__.py +0 -0
  169. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/domain/pipeline/custom_factor.py +0 -0
  170. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/domain/pipeline/factor.py +0 -0
  171. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/domain/pipeline/factors/__init__.py +0 -0
  172. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/domain/pipeline/factors/builtin.py +0 -0
  173. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/domain/pipeline/filter.py +0 -0
  174. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/domain/pipeline/pipeline.py +0 -0
  175. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/domain/portfolio_provider.py +0 -0
  176. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/domain/services/__init__.py +0 -0
  177. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/domain/services/market_credential_service.py +0 -0
  178. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/domain/services/portfolios/__init__.py +0 -0
  179. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/domain/services/portfolios/portfolio_sync_service.py +0 -0
  180. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/domain/services/rounding_service.py +0 -0
  181. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/domain/services/state_handler.py +0 -0
  182. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/domain/stateless_actions.py +0 -0
  183. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/domain/strategy.py +0 -0
  184. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/domain/utils/__init__.py +0 -0
  185. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/domain/utils/csv.py +0 -0
  186. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/domain/utils/custom_tqdm.py +0 -0
  187. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/domain/utils/dates.py +0 -0
  188. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/domain/utils/jupyter_notebook_detection.py +0 -0
  189. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/domain/utils/polars.py +0 -0
  190. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/domain/utils/random.py +0 -0
  191. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/domain/utils/signatures.py +0 -0
  192. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/domain/utils/stoppable_thread.py +0 -0
  193. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/domain/utils/synchronized.py +0 -0
  194. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/download_data.py +0 -0
  195. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/infrastructure/__init__.py +0 -0
  196. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/infrastructure/data_providers/__init__.py +0 -0
  197. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/infrastructure/data_providers/alpha_vantage.py +0 -0
  198. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/infrastructure/data_providers/base_url.py +0 -0
  199. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/infrastructure/data_providers/ccxt.py +0 -0
  200. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/infrastructure/data_providers/csv.py +0 -0
  201. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/infrastructure/data_providers/csv_url.py +0 -0
  202. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/infrastructure/data_providers/json_url.py +0 -0
  203. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/infrastructure/data_providers/ohlcv_base.py +0 -0
  204. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/infrastructure/data_providers/pandas.py +0 -0
  205. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/infrastructure/data_providers/parquet_url.py +0 -0
  206. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/infrastructure/data_providers/polygon.py +0 -0
  207. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/infrastructure/data_providers/yahoo.py +0 -0
  208. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/infrastructure/database/__init__.py +0 -0
  209. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/infrastructure/database/sql_alchemy.py +0 -0
  210. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/infrastructure/models/__init__.py +0 -0
  211. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/infrastructure/models/decimal_parser.py +0 -0
  212. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/infrastructure/models/model_extension.py +0 -0
  213. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/infrastructure/models/order/__init__.py +0 -0
  214. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/infrastructure/models/order/order.py +0 -0
  215. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/infrastructure/models/order/trade_allocation.py +0 -0
  216. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/infrastructure/models/order_trade_association.py +0 -0
  217. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/infrastructure/models/portfolio/__init__.py +0 -0
  218. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/infrastructure/models/portfolio/portfolio_snapshot.py +0 -0
  219. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/infrastructure/models/portfolio/sql_portfolio.py +0 -0
  220. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/infrastructure/models/position/__init__.py +0 -0
  221. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/infrastructure/models/position/position.py +0 -0
  222. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/infrastructure/models/position/position_snapshot.py +0 -0
  223. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/infrastructure/models/trades/__init__.py +0 -0
  224. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/infrastructure/models/trades/trade.py +0 -0
  225. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/infrastructure/models/trades/trade_stop_loss.py +0 -0
  226. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/infrastructure/models/trades/trade_take_profit.py +0 -0
  227. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/infrastructure/order_executors/__init__.py +0 -0
  228. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/infrastructure/order_executors/ccxt_order_executor.py +0 -0
  229. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/infrastructure/portfolio_providers/__init__.py +0 -0
  230. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/infrastructure/portfolio_providers/ccxt_portfolio_provider.py +0 -0
  231. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/infrastructure/repositories/__init__.py +0 -0
  232. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/infrastructure/repositories/order_repository.py +0 -0
  233. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/infrastructure/repositories/portfolio_repository.py +0 -0
  234. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/infrastructure/repositories/portfolio_snapshot_repository.py +0 -0
  235. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/infrastructure/repositories/position_repository.py +0 -0
  236. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/infrastructure/repositories/position_snapshot_repository.py +0 -0
  237. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/infrastructure/repositories/repository.py +0 -0
  238. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/infrastructure/repositories/trade_allocation_repository.py +0 -0
  239. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/infrastructure/repositories/trade_repository.py +0 -0
  240. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/infrastructure/repositories/trade_stop_loss_repository.py +0 -0
  241. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/infrastructure/repositories/trade_take_profit_repository.py +0 -0
  242. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/infrastructure/services/__init__.py +0 -0
  243. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/infrastructure/services/aws/__init__.py +0 -0
  244. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/infrastructure/services/aws/state_handler.py +0 -0
  245. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/infrastructure/services/azure/__init__.py +0 -0
  246. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/infrastructure/services/azure/state_handler.py +0 -0
  247. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/infrastructure/services/backtesting/__init__.py +0 -0
  248. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/infrastructure/services/backtesting/backtest_service.py +0 -0
  249. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/infrastructure/services/backtesting/checkpoint_manifest.py +0 -0
  250. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/infrastructure/services/backtesting/event_backtest_service.py +0 -0
  251. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/infrastructure/services/backtesting/vector_backtest_service.py +0 -0
  252. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/notebook/__init__.py +0 -0
  253. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/notebook/magic.py +0 -0
  254. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/services/__init__.py +0 -0
  255. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/services/configuration_service.py +0 -0
  256. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/services/data_providers/__init__.py +0 -0
  257. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/services/data_providers/data.py +0 -0
  258. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/services/data_providers/data_provider_service.py +0 -0
  259. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/services/market_credential_service.py +0 -0
  260. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/services/metrics/__init__.py +0 -0
  261. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/services/metrics/alpha.py +0 -0
  262. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/services/metrics/beta.py +0 -0
  263. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/services/metrics/cagr.py +0 -0
  264. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/services/metrics/calmar_ratio.py +0 -0
  265. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/services/metrics/consistency.py +0 -0
  266. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/services/metrics/drawdown.py +0 -0
  267. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/services/metrics/equity_curve.py +0 -0
  268. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/services/metrics/exposure.py +0 -0
  269. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/services/metrics/mean_daily_return.py +0 -0
  270. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/services/metrics/price_efficiency.py +0 -0
  271. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/services/metrics/profit_factor.py +0 -0
  272. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/services/metrics/recovery.py +0 -0
  273. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/services/metrics/returns.py +0 -0
  274. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/services/metrics/risk_free_rate.py +0 -0
  275. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/services/metrics/sharpe_ratio.py +0 -0
  276. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/services/metrics/sortino_ratio.py +0 -0
  277. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/services/metrics/standard_deviation.py +0 -0
  278. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/services/metrics/trades.py +0 -0
  279. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/services/metrics/treynor_ratio.py +0 -0
  280. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/services/metrics/ulcer.py +0 -0
  281. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/services/metrics/value_at_risk.py +0 -0
  282. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/services/metrics/volatility.py +0 -0
  283. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/services/metrics/win_rate.py +0 -0
  284. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/services/order_service/__init__.py +0 -0
  285. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/services/order_service/order_backtest_service.py +0 -0
  286. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/services/order_service/order_executor_lookup.py +0 -0
  287. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/services/order_service/order_service.py +0 -0
  288. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/services/pipeline/__init__.py +0 -0
  289. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/services/pipeline/pipeline_engine.py +0 -0
  290. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/services/pipeline/vector_pipeline_engine.py +0 -0
  291. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/services/portfolios/__init__.py +0 -0
  292. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/services/portfolios/backtest_portfolio_service.py +0 -0
  293. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/services/portfolios/portfolio_configuration_service.py +0 -0
  294. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/services/portfolios/portfolio_provider_lookup.py +0 -0
  295. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/services/portfolios/portfolio_service.py +0 -0
  296. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/services/portfolios/portfolio_snapshot_service.py +0 -0
  297. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/services/portfolios/portfolio_sync_service.py +0 -0
  298. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/services/positions/__init__.py +0 -0
  299. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/services/positions/position_service.py +0 -0
  300. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/services/positions/position_snapshot_service.py +0 -0
  301. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/services/repository_service.py +0 -0
  302. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/services/trade_order_evaluator/__init__.py +0 -0
  303. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/services/trade_order_evaluator/backtest_trade_oder_evaluator.py +0 -0
  304. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/services/trade_order_evaluator/default_trade_order_evaluator.py +0 -0
  305. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/services/trade_order_evaluator/trade_order_evaluator.py +0 -0
  306. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/services/trade_service/__init__.py +0 -0
  307. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/services/trade_service/trade_service.py +0 -0
  308. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/investing_algorithm_framework/services/trade_service/trade_stop_loss_service.py +0 -0
  309. {investing_algorithm_framework-8.7.2 → investing_algorithm_framework-8.7.3}/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.7.2
3
+ Version: 8.7.3
4
4
  Summary: A framework for creating trading bots
5
5
  Author: MDUYN
6
6
  Requires-Python: >=3.10,<4.0
@@ -114,23 +114,23 @@ This framework is built around the full loop: **create strategies → vector bac
114
114
  Features
115
115
  </summary> <br>
116
116
 
117
- - 📊 **30+ Metrics** — CAGR, Sharpe, Sortino, Calmar, VaR, CVaR, Max DD, Recovery & more
117
+ - 📊 **[30+ Metrics](https://coding-kitties.github.io/investing-algorithm-framework/Getting%20Started/metrics)** — CAGR, Sharpe, Sortino, Calmar, VaR, CVaR, Max DD, Recovery & more
118
118
  - 🧮 **[Cross-Sectional Pipelines](https://coding-kitties.github.io/investing-algorithm-framework/Advanced%20Concepts/pipelines)** — Rank, filter and score entire universes of symbols every iteration with a tidy factor table
119
- - ⚡ **Vector Backtesting for Signal Analysis** — Quickly test your strategy logic on historical data to see how signals would have behaved before committing to full event-driven backtests
120
- - 🏃 **Event-Driven Backtesting** — Once promising strategies are identified via vector backtests, run full event-driven backtests to simulate realistic execution and portfolio management
121
- - 🔀 **Permutation Testing / Monte Carlo Simulations** — Assess the statistical robustness of your strategies by running them across randomized market scenarios to see how often your results could occur by chance
122
- - 🚀 **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
123
- - ⚔️ **Multi-Strategy Comparison** — Rank, filter & compare strategies in a single interactive report
124
- - 🪟 **Multi-Window Robustness** — Test across different time periods with window coverage analysis
125
- - 📈 **Equity & Drawdown Charts** — Overlay equity curves, rolling Sharpe, drawdown & return distributions
126
- - 🗓️ **Monthly Heatmaps & Yearly Returns** — Calendar heatmap per strategy with return/growth toggles
127
- - 🎯 **Return Scenario Projections** — Good, average, bad & very bad year projections from backtest data
128
- - 📉 **Benchmark Comparison** — Beat-rate analysis vs Buy & Hold, DCA, risk-free & custom benchmarks
129
- - 📄 **One-Click HTML Report** — Self-contained file, no server, dark & light theme, shareable
130
- - 📦 **Custom `.iafbt` Backtest Bundle Format** — An explicit, versioned, compressed, language-portable container (zstd + msgpack with magic-byte header) plus a separate parquet index for fast filtering without loading. ~21× smaller and ~27× fewer files than standard filebased directory layouts, with parallel I/O for fast load/save of large amounts of backtests.
131
- - 🌐 **Load External Data** — Fetch CSV, JSON, or Parquet from any URL with caching and auto-refresh
132
- - **[Record Custom Variables](https://coding-kitties.github.io/investing-algorithm-framework/Advanced%20Concepts/recording-variables)** — Track any indicator or metric during backtests with `context.record()`
133
- - �🚀 **Build → Backtest → Deploy** — Local dev, cloud deploy (AWS / Azure), or monetize on Finterion
119
+ - ⚡ **[Vector Backtesting for Signal Analysis](https://coding-kitties.github.io/investing-algorithm-framework/Getting%20Started/vector-backtesting)** — Quickly test your strategy logic on historical data to see how signals would have behaved before committing to full event-driven backtests
120
+ - 🏃 **[Event-Driven Backtesting](https://coding-kitties.github.io/investing-algorithm-framework/Getting%20Started/event-backtesting)** — Once promising strategies are identified via vector backtests, run full event-driven backtests to simulate realistic execution and portfolio management
121
+ - 🔀 **[Permutation Testing / Monte Carlo Simulations](https://coding-kitties.github.io/investing-algorithm-framework/Getting%20Started/backtest-reports)** — Assess the statistical robustness of your strategies by running them across randomized market scenarios to see how often your results could occur by chance
122
+ - 🚀 **[Deployment](https://coding-kitties.github.io/investing-algorithm-framework/Getting%20Started/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
123
+ - ⚔️ **[Multi-Strategy Comparison](https://coding-kitties.github.io/investing-algorithm-framework/Getting%20Started/backtest-reports)** — Rank, filter & compare strategies in a single interactive report
124
+ - 🪟 **[Multi-Window Robustness](https://coding-kitties.github.io/investing-algorithm-framework/Getting%20Started/backtest-reports)** — Test across different time periods with window coverage analysis
125
+ - 📈 **[Equity & Drawdown Charts](https://coding-kitties.github.io/investing-algorithm-framework/Getting%20Started/backtest-reports)** — Overlay equity curves, rolling Sharpe, drawdown & return distributions
126
+ - 🗓️ **[Monthly Heatmaps & Yearly Returns](https://coding-kitties.github.io/investing-algorithm-framework/Getting%20Started/backtest-reports)** — Calendar heatmap per strategy with return/growth toggles
127
+ - 🎯 **[Return Scenario Projections](https://coding-kitties.github.io/investing-algorithm-framework/Getting%20Started/backtest-reports)** — Good, average, bad & very bad year projections from backtest data
128
+ - 📉 **[Benchmark Comparison](https://coding-kitties.github.io/investing-algorithm-framework/Getting%20Started/backtest-reports)** — Beat-rate analysis vs Buy & Hold, DCA, risk-free & custom benchmarks
129
+ - 📄 **[One-Click HTML Report](https://coding-kitties.github.io/investing-algorithm-framework/Getting%20Started/backtest-reports)** — Self-contained file, no server, dark & light theme, shareable
130
+ - 📦 **[Custom `.iafbt` Backtest Bundle Format](https://coding-kitties.github.io/investing-algorithm-framework/Data/backtest_data)** — An explicit, versioned, compressed, language-portable container (zstd + msgpack with magic-byte header) plus a separate parquet index for fast filtering without loading. ~21× smaller and ~27× fewer files than standard filebased directory layouts, with parallel I/O for fast load/save of large amounts of backtests.
131
+ - 🌐 **[Load External Data](https://coding-kitties.github.io/investing-algorithm-framework/Data/external-data)** — Fetch CSV, JSON, or Parquet from any URL with caching and auto-refresh
132
+ - 📝 **[Record Custom Variables](https://coding-kitties.github.io/investing-algorithm-framework/Advanced%20Concepts/recording-variables)** — Track any indicator or metric during backtests with `context.record()`
133
+ - 🚀 **[Build → Backtest → Deploy](https://coding-kitties.github.io/investing-algorithm-framework/Getting%20Started/application-setup)** — Local dev, cloud deploy (AWS / Azure), or monetize on Finterion
134
134
 
135
135
  </details>
136
136
 
@@ -70,23 +70,23 @@ This framework is built around the full loop: **create strategies → vector bac
70
70
  Features
71
71
  </summary> <br>
72
72
 
73
- - 📊 **30+ Metrics** — CAGR, Sharpe, Sortino, Calmar, VaR, CVaR, Max DD, Recovery & more
73
+ - 📊 **[30+ Metrics](https://coding-kitties.github.io/investing-algorithm-framework/Getting%20Started/metrics)** — CAGR, Sharpe, Sortino, Calmar, VaR, CVaR, Max DD, Recovery & more
74
74
  - 🧮 **[Cross-Sectional Pipelines](https://coding-kitties.github.io/investing-algorithm-framework/Advanced%20Concepts/pipelines)** — Rank, filter and score entire universes of symbols every iteration with a tidy factor table
75
- - ⚡ **Vector Backtesting for Signal Analysis** — Quickly test your strategy logic on historical data to see how signals would have behaved before committing to full event-driven backtests
76
- - 🏃 **Event-Driven Backtesting** — Once promising strategies are identified via vector backtests, run full event-driven backtests to simulate realistic execution and portfolio management
77
- - 🔀 **Permutation Testing / Monte Carlo Simulations** — Assess the statistical robustness of your strategies by running them across randomized market scenarios to see how often your results could occur by chance
78
- - 🚀 **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
79
- - ⚔️ **Multi-Strategy Comparison** — Rank, filter & compare strategies in a single interactive report
80
- - 🪟 **Multi-Window Robustness** — Test across different time periods with window coverage analysis
81
- - 📈 **Equity & Drawdown Charts** — Overlay equity curves, rolling Sharpe, drawdown & return distributions
82
- - 🗓️ **Monthly Heatmaps & Yearly Returns** — Calendar heatmap per strategy with return/growth toggles
83
- - 🎯 **Return Scenario Projections** — Good, average, bad & very bad year projections from backtest data
84
- - 📉 **Benchmark Comparison** — Beat-rate analysis vs Buy & Hold, DCA, risk-free & custom benchmarks
85
- - 📄 **One-Click HTML Report** — Self-contained file, no server, dark & light theme, shareable
86
- - 📦 **Custom `.iafbt` Backtest Bundle Format** — An explicit, versioned, compressed, language-portable container (zstd + msgpack with magic-byte header) plus a separate parquet index for fast filtering without loading. ~21× smaller and ~27× fewer files than standard filebased directory layouts, with parallel I/O for fast load/save of large amounts of backtests.
87
- - 🌐 **Load External Data** — Fetch CSV, JSON, or Parquet from any URL with caching and auto-refresh
88
- - **[Record Custom Variables](https://coding-kitties.github.io/investing-algorithm-framework/Advanced%20Concepts/recording-variables)** — Track any indicator or metric during backtests with `context.record()`
89
- - �🚀 **Build → Backtest → Deploy** — Local dev, cloud deploy (AWS / Azure), or monetize on Finterion
75
+ - ⚡ **[Vector Backtesting for Signal Analysis](https://coding-kitties.github.io/investing-algorithm-framework/Getting%20Started/vector-backtesting)** — Quickly test your strategy logic on historical data to see how signals would have behaved before committing to full event-driven backtests
76
+ - 🏃 **[Event-Driven Backtesting](https://coding-kitties.github.io/investing-algorithm-framework/Getting%20Started/event-backtesting)** — Once promising strategies are identified via vector backtests, run full event-driven backtests to simulate realistic execution and portfolio management
77
+ - 🔀 **[Permutation Testing / Monte Carlo Simulations](https://coding-kitties.github.io/investing-algorithm-framework/Getting%20Started/backtest-reports)** — Assess the statistical robustness of your strategies by running them across randomized market scenarios to see how often your results could occur by chance
78
+ - 🚀 **[Deployment](https://coding-kitties.github.io/investing-algorithm-framework/Getting%20Started/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
79
+ - ⚔️ **[Multi-Strategy Comparison](https://coding-kitties.github.io/investing-algorithm-framework/Getting%20Started/backtest-reports)** — Rank, filter & compare strategies in a single interactive report
80
+ - 🪟 **[Multi-Window Robustness](https://coding-kitties.github.io/investing-algorithm-framework/Getting%20Started/backtest-reports)** — Test across different time periods with window coverage analysis
81
+ - 📈 **[Equity & Drawdown Charts](https://coding-kitties.github.io/investing-algorithm-framework/Getting%20Started/backtest-reports)** — Overlay equity curves, rolling Sharpe, drawdown & return distributions
82
+ - 🗓️ **[Monthly Heatmaps & Yearly Returns](https://coding-kitties.github.io/investing-algorithm-framework/Getting%20Started/backtest-reports)** — Calendar heatmap per strategy with return/growth toggles
83
+ - 🎯 **[Return Scenario Projections](https://coding-kitties.github.io/investing-algorithm-framework/Getting%20Started/backtest-reports)** — Good, average, bad & very bad year projections from backtest data
84
+ - 📉 **[Benchmark Comparison](https://coding-kitties.github.io/investing-algorithm-framework/Getting%20Started/backtest-reports)** — Beat-rate analysis vs Buy & Hold, DCA, risk-free & custom benchmarks
85
+ - 📄 **[One-Click HTML Report](https://coding-kitties.github.io/investing-algorithm-framework/Getting%20Started/backtest-reports)** — Self-contained file, no server, dark & light theme, shareable
86
+ - 📦 **[Custom `.iafbt` Backtest Bundle Format](https://coding-kitties.github.io/investing-algorithm-framework/Data/backtest_data)** — An explicit, versioned, compressed, language-portable container (zstd + msgpack with magic-byte header) plus a separate parquet index for fast filtering without loading. ~21× smaller and ~27× fewer files than standard filebased directory layouts, with parallel I/O for fast load/save of large amounts of backtests.
87
+ - 🌐 **[Load External Data](https://coding-kitties.github.io/investing-algorithm-framework/Data/external-data)** — Fetch CSV, JSON, or Parquet from any URL with caching and auto-refresh
88
+ - 📝 **[Record Custom Variables](https://coding-kitties.github.io/investing-algorithm-framework/Advanced%20Concepts/recording-variables)** — Track any indicator or metric during backtests with `context.record()`
89
+ - 🚀 **[Build → Backtest → Deploy](https://coding-kitties.github.io/investing-algorithm-framework/Getting%20Started/application-setup)** — Local dev, cloud deploy (AWS / Azure), or monetize on Finterion
90
90
 
91
91
  </details>
92
92
 
@@ -30,6 +30,51 @@ def generate_unique_resource_name(base_name):
30
30
  return f"{base_name}{unique_suffix}".lower()
31
31
 
32
32
 
33
+ async def _wait_until_function_app_ready(
34
+ function_app_name,
35
+ resource_group_name,
36
+ timeout_seconds=300,
37
+ poll_interval_seconds=10,
38
+ ):
39
+ """
40
+ Poll `az functionapp show --query state` until the Function App
41
+ reports 'Running', or raise once `timeout_seconds` is exceeded.
42
+
43
+ This replaces the old hard-coded `time.sleep(60)` which both blocked
44
+ the event loop and frequently published before the host was ready
45
+ (causing silent SCM 503s).
46
+ """
47
+ deadline = time.monotonic() + timeout_seconds
48
+ last_state = None
49
+
50
+ while time.monotonic() < deadline:
51
+ process = await asyncio.create_subprocess_exec(
52
+ "az", "functionapp", "show",
53
+ "--name", function_app_name,
54
+ "--resource-group", resource_group_name,
55
+ "--query", "state",
56
+ "-o", "tsv",
57
+ stdout=asyncio.subprocess.PIPE,
58
+ stderr=asyncio.subprocess.PIPE,
59
+ )
60
+ stdout, _ = await process.communicate()
61
+ state = stdout.decode().strip()
62
+
63
+ if state and state != last_state:
64
+ print(f"Function App state: {state}")
65
+ last_state = state
66
+
67
+ if state == "Running":
68
+ return
69
+
70
+ await asyncio.sleep(poll_interval_seconds)
71
+
72
+ raise TimeoutError(
73
+ f"Function App '{function_app_name}' did not reach 'Running' "
74
+ f"state within {timeout_seconds}s (last seen: {last_state!r})."
75
+ )
76
+
77
+
33
78
  def ensure_azure_functools():
34
79
  """
35
80
  Function to ensure that the Azure Functions Core Tools are installed.
@@ -128,77 +173,93 @@ async def publish_function_app(
128
173
  """
129
174
  print(f"Publishing Function App {function_app_name}")
130
175
 
131
- # Wait for 60 seconds to ensure the Function App is ready
132
- time.sleep(60)
176
+ # Wait for the Function App to report a 'Running' state instead of
177
+ # blindly sleeping. The first deployment can take a while because the
178
+ # Linux Consumption host is provisioned lazily.
179
+ await _wait_until_function_app_ready(
180
+ function_app_name=function_app_name,
181
+ resource_group_name=resource_group_name,
182
+ timeout_seconds=300,
183
+ )
133
184
 
134
185
  try:
135
- # Step 1: Publish the Azure Function App
136
- process = await asyncio.create_subprocess_exec(
137
- "func", "azure", "functionapp", "publish", function_app_name
138
- )
139
-
140
- # Wait for the subprocess to finish
141
- _, stderr = await process.communicate()
142
-
143
- # Check the return code
144
- if process.returncode != 0:
145
-
146
- if stderr is not None:
147
- raise Exception(
148
- f"Error publishing Function App: {stderr.decode().strip()}"
149
- )
150
- else:
151
- raise Exception("Error publishing Function App")
152
-
153
- print(f"Function App {function_app_name} published successfully.")
154
-
155
- # Step 2: Add app settings
186
+ # Step 1: Push app settings BEFORE publishing so the worker has
187
+ # the storage credentials available on first cold start.
188
+ print("Setting AZURE_STORAGE_* app settings...")
156
189
  add_settings_process = await asyncio.create_subprocess_exec(
157
190
  "az", "functionapp", "config", "appsettings", "set",
158
191
  "--name", function_app_name,
192
+ "--resource-group", resource_group_name,
159
193
  "--settings",
160
194
  f"AZURE_STORAGE_CONNECTION_STRING={storage_connection_string}",
161
195
  f"AZURE_STORAGE_CONTAINER_NAME={storage_container_name}",
162
- "--resource-group", resource_group_name
196
+ "SCM_DO_BUILD_DURING_DEPLOYMENT=true",
197
+ "ENABLE_ORYX_BUILD=true",
198
+ stdout=asyncio.subprocess.PIPE,
199
+ stderr=asyncio.subprocess.PIPE,
163
200
  )
164
201
  _, stderr1 = await add_settings_process.communicate()
165
202
 
166
203
  if add_settings_process.returncode != 0:
204
+ raise Exception(
205
+ "Error adding app settings: " +
206
+ (stderr1.decode().strip() if stderr1 else "")
207
+ )
208
+ print("App settings configured successfully.")
167
209
 
168
- if stderr1 is not None:
169
- raise Exception(
170
- f"Error adding App settings: {stderr1.decode().strip()}"
171
- )
172
- else:
173
- raise Exception("Error adding App settings")
174
-
210
+ # Step 2: Publish the Azure Function App. `--build remote --python`
211
+ # is *required* on Linux Consumption: native wheels (pandas, numpy,
212
+ # msgpack, polars, ...) must be built on the function host's libc/
213
+ # arch, otherwise the host crashes silently on import at cold start.
175
214
  print(
176
- "Added app settings to the Function App successfully"
215
+ "Running 'func azure functionapp publish' "
216
+ f"(remote build) for {function_app_name}..."
217
+ )
218
+ publish_process = await asyncio.create_subprocess_exec(
219
+ "func", "azure", "functionapp", "publish", function_app_name,
220
+ "--build", "remote",
221
+ "--python",
177
222
  )
223
+ await publish_process.communicate()
224
+
225
+ if publish_process.returncode != 0:
226
+ raise Exception(
227
+ "Error publishing Function App. Re-run with the Azure "
228
+ "CLI directly to see full output:\n "
229
+ f"func azure functionapp publish {function_app_name} "
230
+ "--build remote --python"
231
+ )
232
+ print(f"Function App {function_app_name} published successfully.")
178
233
 
179
- # Step 3: Update the cors settings
234
+ # Step 3: Update the CORS settings.
180
235
  cors_process = await asyncio.create_subprocess_exec(
181
236
  "az", "functionapp", "cors", "add",
182
237
  "--name", function_app_name,
183
238
  "--allowed-origins", "*",
184
- "--resource-group", resource_group_name
239
+ "--resource-group", resource_group_name,
240
+ stdout=asyncio.subprocess.PIPE,
241
+ stderr=asyncio.subprocess.PIPE,
185
242
  )
186
-
187
- _, stderr1 = await add_settings_process.communicate()
243
+ _, cors_stderr = await cors_process.communicate()
188
244
 
189
245
  if cors_process.returncode != 0:
246
+ # CORS already configured is not fatal.
247
+ print(
248
+ "Warning: could not add CORS rule: " +
249
+ (cors_stderr.decode().strip() if cors_stderr else "")
250
+ )
251
+ else:
252
+ print("CORS rule '*' added.")
190
253
 
191
- if stderr1 is not None:
192
- raise Exception(
193
- f"Error adding cors settings: {stderr1.decode().strip()}"
194
- )
195
- else:
196
- raise Exception("Error adding cors settings")
197
-
198
- print("All app settings have been added successfully.")
199
- print("Function App creation completed successfully.")
254
+ print("Function App deployment completed successfully.")
255
+ print(
256
+ "\nTo stream live logs run:\n "
257
+ f"az webapp log tail --name {function_app_name} "
258
+ f"--resource-group {resource_group_name}"
259
+ )
200
260
  except Exception as e:
201
261
  print(f"Error publishing Function App: {e}")
262
+ raise
202
263
 
203
264
 
204
265
  async def create_function_app(
@@ -268,7 +329,7 @@ async def create_function_app(
268
329
  "--runtime",
269
330
  "python",
270
331
  "--runtime-version",
271
- "3.10",
332
+ "3.11",
272
333
  "--functions-version",
273
334
  "4",
274
335
  "--name",
@@ -1,7 +1,37 @@
1
+ import json
1
2
  import os
2
3
  from enum import Enum
3
4
 
4
5
 
6
+ # Notebook stubs created in `notebooks/` by `init`. Each entry is
7
+ # (filename, first-markdown-cell-title) and mirrors the recommended
8
+ # research workflow documented in
9
+ # docusaurus/docs/Getting Started/application-setup.md.
10
+ RECOMMENDED_NOTEBOOKS = [
11
+ ("01_data_exploration.ipynb",
12
+ "# 01 — Data Exploration\n\nDownload OHLCV, inspect coverage, "
13
+ "detect and fill gaps."),
14
+ ("02_backtest_baseline.ipynb",
15
+ "# 02 — Baseline Backtest\n\nSingle vector backtest of the strategy "
16
+ "with default parameters and HTML report."),
17
+ ("03_in_sample_param_grid_search.ipynb",
18
+ "# 03 — In-Sample Parameter Grid Search\n\nGrid search across "
19
+ "thousands of parameter combinations on the in-sample window."),
20
+ ("04_out_of_sample_param_grid_search.ipynb",
21
+ "# 04 — Out-of-Sample Parameter Grid Search\n\nRe-run top in-sample "
22
+ "candidates on the held-out out-of-sample window."),
23
+ ("05_overfitting_analysis.ipynb",
24
+ "# 05 — Overfitting Analysis\n\nCompare in-sample vs out-of-sample "
25
+ "performance, walk-forward / permutation checks."),
26
+ ("06_event_backtests.ipynb",
27
+ "# 06 — Event-Driven Backtests\n\nValidate the final picks with the "
28
+ "event-driven engine (fees, slippage, fills)."),
29
+ ]
30
+
31
+ # Empty cache/output directories created in the project root.
32
+ RECOMMENDED_DIRS = ["data", "backtest_results", "reports", "resources"]
33
+
34
+
5
35
  class AppType(Enum):
6
36
  DEFAULT = "DEFAULT"
7
37
  DEFAULT_WEB = "DEFAULT_WEB"
@@ -100,6 +130,71 @@ def create_file_from_template(template_path, output_path, replace=False):
100
130
  file.write(template)
101
131
 
102
132
 
133
+ def _create_empty_notebook(file_path, title_markdown, replace=False):
134
+ """
135
+ Create a minimal Jupyter notebook (nbformat 4) with a single
136
+ markdown title cell.
137
+ """
138
+ if os.path.exists(file_path):
139
+ if replace:
140
+ os.remove(file_path)
141
+ else:
142
+ return
143
+
144
+ notebook = {
145
+ "cells": [
146
+ {
147
+ "cell_type": "markdown",
148
+ "metadata": {},
149
+ "source": title_markdown,
150
+ }
151
+ ],
152
+ "metadata": {
153
+ "kernelspec": {
154
+ "display_name": "Python 3",
155
+ "language": "python",
156
+ "name": "python3",
157
+ },
158
+ "language_info": {"name": "python"},
159
+ },
160
+ "nbformat": 4,
161
+ "nbformat_minor": 5,
162
+ }
163
+
164
+ with open(file_path, "w") as file:
165
+ json.dump(notebook, file, indent=1)
166
+
167
+
168
+ def _scaffold_recommended_layout(path, replace=False):
169
+ """
170
+ Create the directories and notebook stubs that are part of the
171
+ recommended project layout but not directly tied to a specific
172
+ deployment target (default, web, AWS Lambda, Azure Function).
173
+
174
+ Creates:
175
+ notebooks/ with 6 stub research notebooks
176
+ data/ cache for downloaded market data
177
+ backtest_results/ saved backtest bundles
178
+ reports/ generated HTML/CSV reports
179
+ resources/ misc assets (databases, configs)
180
+ """
181
+ notebooks_path = os.path.join(path, "notebooks")
182
+ create_directory(notebooks_path)
183
+
184
+ for filename, title_markdown in RECOMMENDED_NOTEBOOKS:
185
+ _create_empty_notebook(
186
+ os.path.join(notebooks_path, filename),
187
+ title_markdown,
188
+ replace=replace,
189
+ )
190
+
191
+ for directory_name in RECOMMENDED_DIRS:
192
+ directory_path = os.path.join(path, directory_name)
193
+ create_directory(directory_path)
194
+ # .gitkeep so the empty directory is committed
195
+ create_file(os.path.join(directory_path, ".gitkeep"))
196
+
197
+
103
198
  def command(path=None, app_type="default", replace=False):
104
199
  """
105
200
  Function to create an azure function app skeleton.
@@ -207,19 +302,22 @@ def create_default_app(path=None, replace=False):
207
302
  os.path.join(path, "run_backtest.py"),
208
303
  replace=replace
209
304
  )
210
- # Create the main directory
305
+ # Create the strategies package
211
306
  create_directory(os.path.join(path, "strategies"))
212
307
  strategies_path = os.path.join(path, "strategies")
213
308
  create_file(os.path.join(strategies_path, "__init__.py"))
214
309
  create_file_from_template(
215
310
  strategy_template_path,
216
- os.path.join(strategies_path, "strategy.py")
311
+ os.path.join(strategies_path, "my_strategy.py")
217
312
  )
313
+ # data_providers.py lives at the project root so app.py, notebooks
314
+ # and strategies can all import it as `from data_providers import ...`
218
315
  create_file_from_template(
219
316
  data_providers_template_path,
220
- os.path.join(strategies_path, "data_providers.py"),
317
+ os.path.join(path, "data_providers.py"),
221
318
  replace=replace
222
319
  )
320
+ _scaffold_recommended_layout(path, replace=replace)
223
321
  gitignore_template_path = os.path.join(
224
322
  os.path.dirname(current_script_path),
225
323
  "templates",
@@ -311,19 +409,22 @@ def create_default_web_app(path=None, replace=False):
311
409
  os.path.join(path, "run_backtest.py"),
312
410
  replace=replace
313
411
  )
314
- # Create the main directory
412
+ # Create the strategies package
315
413
  create_directory(os.path.join(path, "strategies"))
316
414
  strategies_path = os.path.join(path, "strategies")
317
415
  create_file(os.path.join(strategies_path, "__init__.py"))
318
416
  create_file_from_template(
319
417
  strategy_template_path,
320
- os.path.join(strategies_path, "strategy.py")
418
+ os.path.join(strategies_path, "my_strategy.py")
321
419
  )
420
+ # data_providers.py lives at the project root so app.py, notebooks
421
+ # and strategies can all import it as `from data_providers import ...`
322
422
  create_file_from_template(
323
423
  data_providers_template_path,
324
- os.path.join(strategies_path, "data_providers.py"),
424
+ os.path.join(path, "data_providers.py"),
325
425
  replace=replace
326
426
  )
427
+ _scaffold_recommended_layout(path, replace=replace)
327
428
  gitignore_template_path = os.path.join(
328
429
  os.path.dirname(current_script_path),
329
430
  "templates",
@@ -417,19 +518,22 @@ def create_aws_lambda_app(path=None, replace=False):
417
518
  os.path.join(path, "run_backtest.py"),
418
519
  replace=replace
419
520
  )
420
- # Create the main directory
521
+ # Create the strategies package
421
522
  create_directory(os.path.join(path, "strategies"))
422
523
  strategies_path = os.path.join(path, "strategies")
423
524
  create_file(os.path.join(strategies_path, "__init__.py"))
424
525
  create_file_from_template(
425
526
  strategy_template_path,
426
- os.path.join(strategies_path, "strategy.py")
527
+ os.path.join(strategies_path, "my_strategy.py")
427
528
  )
529
+ # data_providers.py lives at the project root so app.py, notebooks
530
+ # and strategies can all import it as `from data_providers import ...`
428
531
  create_file_from_template(
429
532
  data_providers_template_path,
430
- os.path.join(strategies_path, "data_providers.py"),
533
+ os.path.join(path, "data_providers.py"),
431
534
  replace=replace
432
535
  )
536
+ _scaffold_recommended_layout(path, replace=replace)
433
537
  gitignore_template_path = os.path.join(
434
538
  os.path.dirname(current_script_path),
435
539
  "templates",
@@ -504,10 +608,12 @@ def create_azure_function_app(path=None, replace=False):
504
608
  "templates",
505
609
  "run_backtest.py.template"
506
610
  )
507
- # Create the framework app file as app_entry.py
611
+ # The Azure Functions Python v2 programming model requires the
612
+ # entry point to be named exactly `function_app.py` at the project
613
+ # root. Anything else and the host won't discover any triggers.
508
614
  create_file_from_template(
509
615
  azure_function_template_path,
510
- os.path.join(path, "app_web.py"),
616
+ os.path.join(path, "function_app.py"),
511
617
  replace=replace
512
618
  )
513
619
  # Create the host.json file
@@ -568,19 +674,22 @@ def create_azure_function_app(path=None, replace=False):
568
674
  os.path.join(path, "run_backtest.py"),
569
675
  replace=replace
570
676
  )
571
- # Create the main directory
677
+ # Create the strategies package
572
678
  create_directory(os.path.join(path, "strategies"))
573
679
  strategies_path = os.path.join(path, "strategies")
574
680
  create_file(os.path.join(strategies_path, "__init__.py"))
575
681
  create_file_from_template(
576
682
  strategy_template_path,
577
- os.path.join(strategies_path, "strategy.py")
683
+ os.path.join(strategies_path, "my_strategy.py")
578
684
  )
685
+ # data_providers.py lives at the project root so app.py, notebooks
686
+ # and strategies can all import it as `from data_providers import ...`
579
687
  create_file_from_template(
580
688
  data_providers_template_path,
581
- os.path.join(strategies_path, "data_providers.py"),
689
+ os.path.join(path, "data_providers.py"),
582
690
  replace=replace
583
691
  )
692
+ _scaffold_recommended_layout(path, replace=replace)
584
693
  gitignore_template_path = os.path.join(
585
694
  os.path.dirname(current_script_path),
586
695
  "templates",
@@ -176,3 +176,14 @@ cython_debug/
176
176
 
177
177
  # Framework related files
178
178
  # The following files are related to the investing_algorithm_framework framework.
179
+
180
+ # Local caches and generated outputs (the directories themselves are kept
181
+ # via .gitkeep, but their contents should not be committed).
182
+ data/*
183
+ !data/.gitkeep
184
+ backtest_results/*
185
+ !backtest_results/.gitkeep
186
+ reports/*
187
+ !reports/.gitkeep
188
+ resources/*
189
+ !resources/.gitkeep
@@ -3,7 +3,7 @@ from dotenv import load_dotenv
3
3
 
4
4
  from investing_algorithm_framework import create_app, \
5
5
  DEFAULT_LOGGING_CONFIG, Algorithm, PortfolioConfiguration
6
- from strategies.strategy import MyTradingStrategy
6
+ from strategies.my_strategy import MyTradingStrategy
7
7
 
8
8
  load_dotenv()
9
9
  logging.config.dictConfig(DEFAULT_LOGGING_CONFIG)
@@ -0,0 +1,48 @@
1
+ import logging.config
2
+ import os
3
+
4
+ from dotenv import load_dotenv
5
+
6
+ from investing_algorithm_framework import (
7
+ create_app,
8
+ AWSS3StorageStateHandler,
9
+ AWS_S3_STATE_BUCKET_NAME,
10
+ AWS_LAMBDA_LOGGING_CONFIG,
11
+ RESOURCE_DIRECTORY,
12
+ )
13
+
14
+ from strategies.my_strategy import MyTradingStrategy
15
+
16
+ load_dotenv()
17
+ logging.config.dictConfig(AWS_LAMBDA_LOGGING_CONFIG)
18
+ logger = logging.getLogger(__name__)
19
+
20
+ # Lambda's filesystem is read-only except for /tmp; route the framework's
21
+ # writable resources there.
22
+ app = create_app(
23
+ config={RESOURCE_DIRECTORY: os.path.join("/tmp", "resources")}
24
+ )
25
+
26
+ # The S3 bucket is provisioned and exported as an env var by the
27
+ # `deploy_aws_lambda` CLI command.
28
+ app.add_state_handler(
29
+ AWSS3StorageStateHandler(bucket_name=os.getenv(AWS_S3_STATE_BUCKET_NAME))
30
+ )
31
+
32
+ app.add_market(market="bitvavo", trading_symbol="EUR", initial_balance=1000)
33
+ app.add_strategy(MyTradingStrategy)
34
+
35
+
36
+ def lambda_handler(event, context):
37
+ """
38
+ AWS Lambda handler that runs a single iteration of the trading bot.
39
+ """
40
+ try:
41
+ app.run(number_of_iterations=1)
42
+ return {
43
+ "statusCode": 200,
44
+ "body": "Trading strategy executed successfully.",
45
+ }
46
+ except Exception as exc: # noqa: BLE001
47
+ logger.exception(exc)
48
+ return {"statusCode": 500, "body": str(exc)}
@@ -0,0 +1,35 @@
1
+ import logging.config
2
+ import os
3
+
4
+ from dotenv import load_dotenv
5
+
6
+ from investing_algorithm_framework import (
7
+ create_app,
8
+ DEFAULT_LOGGING_CONFIG,
9
+ AzureBlobStorageStateHandler,
10
+ RESOURCE_DIRECTORY,
11
+ )
12
+
13
+ from strategies.my_strategy import MyTradingStrategy
14
+
15
+ load_dotenv()
16
+ logging.config.dictConfig(DEFAULT_LOGGING_CONFIG)
17
+
18
+ # Azure Function workers can only write to /tmp at runtime; point the
19
+ # framework's resource directory there so SQLite/state files land in a
20
+ # writable location.
21
+ app = create_app(
22
+ config={RESOURCE_DIRECTORY: os.path.join("/tmp", "resources")}
23
+ )
24
+
25
+ # Persist portfolio/state in Azure Blob Storage so the function is
26
+ # stateless across cold starts. Connection string + container name are
27
+ # read from app settings (configured by `deploy_to_azure_function`).
28
+ app.add_state_handler(AzureBlobStorageStateHandler())
29
+
30
+ app.add_market(
31
+ market="bitvavo",
32
+ trading_symbol="EUR",
33
+ initial_balance=1000,
34
+ )
35
+ app.add_strategy(MyTradingStrategy)
@@ -3,7 +3,7 @@ from dotenv import load_dotenv
3
3
 
4
4
  from investing_algorithm_framework import create_app, \
5
5
  DEFAULT_LOGGING_CONFIG, Algorithm
6
- from strategies.strategy import MyTradingStrategy
6
+ from strategies.my_strategy import MyTradingStrategy
7
7
 
8
8
  load_dotenv()
9
9
  logging.config.dictConfig(DEFAULT_LOGGING_CONFIG)