investing-algorithm-framework 7.0.2__tar.gz → 7.0.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 (256) hide show
  1. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/PKG-INFO +1 -1
  2. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/app/app.py +40 -3
  3. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/domain/models/time_unit.py +20 -4
  4. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/download_data.py +9 -8
  5. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/infrastructure/data_providers/ccxt.py +1 -1
  6. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/services/__init__.py +2 -0
  7. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/services/backtesting/backtest_service.py +1 -1
  8. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/services/data_providers/data_provider_service.py +6 -6
  9. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/services/metrics/__init__.py +2 -0
  10. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/services/metrics/generate.py +3 -1
  11. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/services/metrics/sharpe_ratio.py +3 -10
  12. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/services/metrics/sortino_ratio.py +3 -7
  13. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/pyproject.toml +1 -1
  14. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/LICENSE +0 -0
  15. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/README.md +0 -0
  16. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/__init__.py +0 -0
  17. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/app/__init__.py +0 -0
  18. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/app/algorithm/__init__.py +0 -0
  19. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/app/algorithm/algorithm.py +0 -0
  20. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/app/algorithm/algorithm_factory.py +0 -0
  21. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/app/analysis/__init__.py +0 -0
  22. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/app/analysis/backtest_data_ranges.py +0 -0
  23. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/app/analysis/ranking.py +0 -0
  24. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/app/app_hook.py +0 -0
  25. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/app/context.py +0 -0
  26. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/app/eventloop.py +0 -0
  27. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/app/reporting/__init__.py +0 -0
  28. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/app/reporting/ascii.py +0 -0
  29. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/app/reporting/backtest_report.py +0 -0
  30. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/app/reporting/charts/__init__.py +0 -0
  31. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/app/reporting/charts/entry_exist_signals.py +0 -0
  32. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/app/reporting/charts/equity_curve_drawdown.py +0 -0
  33. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/app/reporting/charts/monthly_returns_heatmap.py +0 -0
  34. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/app/reporting/charts/ohlcv_data_completeness.py +0 -0
  35. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/app/reporting/charts/rolling_sharp_ratio.py +0 -0
  36. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/app/reporting/charts/yearly_returns_barchart.py +0 -0
  37. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/app/reporting/generate.py +0 -0
  38. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/app/reporting/tables/__init__.py +0 -0
  39. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/app/reporting/tables/key_metrics_table.py +0 -0
  40. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/app/reporting/tables/stop_loss_table.py +0 -0
  41. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/app/reporting/tables/time_metrics_table.py +0 -0
  42. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/app/reporting/tables/trade_metrics_table.py +0 -0
  43. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/app/reporting/tables/trades_table.py +0 -0
  44. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/app/reporting/tables/utils.py +0 -0
  45. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/app/reporting/templates/report_template.html.j2 +0 -0
  46. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/app/stateless/__init__.py +0 -0
  47. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/app/stateless/action_handlers/__init__.py +0 -0
  48. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/app/stateless/action_handlers/action_handler_strategy.py +0 -0
  49. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/app/stateless/action_handlers/check_online_handler.py +0 -0
  50. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/app/stateless/action_handlers/run_strategy_handler.py +0 -0
  51. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/app/stateless/exception_handler.py +0 -0
  52. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/app/strategy.py +0 -0
  53. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/app/task.py +0 -0
  54. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/app/web/__init__.py +0 -0
  55. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/app/web/controllers/__init__.py +0 -0
  56. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/app/web/controllers/orders.py +0 -0
  57. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/app/web/controllers/portfolio.py +0 -0
  58. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/app/web/controllers/positions.py +0 -0
  59. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/app/web/create_app.py +0 -0
  60. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/app/web/error_handler.py +0 -0
  61. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/app/web/responses.py +0 -0
  62. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/app/web/run_strategies.py +0 -0
  63. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/app/web/schemas/__init__.py +0 -0
  64. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/app/web/schemas/order.py +0 -0
  65. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/app/web/schemas/portfolio.py +0 -0
  66. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/app/web/schemas/position.py +0 -0
  67. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/app/web/setup_cors.py +0 -0
  68. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/cli/__init__.py +0 -0
  69. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/cli/cli.py +0 -0
  70. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/cli/deploy_to_aws_lambda.py +0 -0
  71. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/cli/deploy_to_azure_function.py +0 -0
  72. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/cli/initialize_app.py +0 -0
  73. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/cli/templates/.gitignore.template +0 -0
  74. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/cli/templates/app.py.template +0 -0
  75. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/cli/templates/app_aws_lambda_function.py.template +0 -0
  76. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/cli/templates/app_azure_function.py.template +0 -0
  77. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/cli/templates/app_web.py.template +0 -0
  78. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/cli/templates/aws_lambda_dockerfile.template +0 -0
  79. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/cli/templates/aws_lambda_dockerignore.template +0 -0
  80. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/cli/templates/aws_lambda_readme.md.template +0 -0
  81. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/cli/templates/aws_lambda_requirements.txt.template +0 -0
  82. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/cli/templates/azure_function_function_app.py.template +0 -0
  83. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/cli/templates/azure_function_host.json.template +0 -0
  84. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/cli/templates/azure_function_local.settings.json.template +0 -0
  85. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/cli/templates/azure_function_requirements.txt.template +0 -0
  86. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/cli/templates/data_providers.py.template +0 -0
  87. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/cli/templates/env.example.template +0 -0
  88. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/cli/templates/env_azure_function.example.template +0 -0
  89. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/cli/templates/market_data_providers.py.template +0 -0
  90. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/cli/templates/readme.md.template +0 -0
  91. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/cli/templates/requirements.txt.template +0 -0
  92. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/cli/templates/run_backtest.py.template +0 -0
  93. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/cli/templates/strategy.py.template +0 -0
  94. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/create_app.py +0 -0
  95. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/dependency_container.py +0 -0
  96. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/domain/__init__.py +0 -0
  97. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/domain/backtesting/__init__.py +0 -0
  98. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/domain/backtesting/backtest.py +0 -0
  99. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/domain/backtesting/backtest_date_range.py +0 -0
  100. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/domain/backtesting/backtest_metrics.py +0 -0
  101. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/domain/backtesting/backtest_position.py +0 -0
  102. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/domain/backtesting/backtest_results.py +0 -0
  103. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/domain/config.py +0 -0
  104. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/domain/constants.py +0 -0
  105. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/domain/data_provider.py +0 -0
  106. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/domain/data_structures.py +0 -0
  107. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/domain/decimal_parsing.py +0 -0
  108. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/domain/exceptions.py +0 -0
  109. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/domain/models/__init__.py +0 -0
  110. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/domain/models/app_mode.py +0 -0
  111. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/domain/models/base_model.py +0 -0
  112. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/domain/models/data/__init__.py +0 -0
  113. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/domain/models/data/data_source.py +0 -0
  114. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/domain/models/data/data_type.py +0 -0
  115. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/domain/models/event.py +0 -0
  116. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/domain/models/market/__init__.py +0 -0
  117. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/domain/models/market/market_credential.py +0 -0
  118. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/domain/models/order/__init__.py +0 -0
  119. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/domain/models/order/order.py +0 -0
  120. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/domain/models/order/order_side.py +0 -0
  121. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/domain/models/order/order_status.py +0 -0
  122. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/domain/models/order/order_type.py +0 -0
  123. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/domain/models/portfolio/__init__.py +0 -0
  124. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/domain/models/portfolio/portfolio.py +0 -0
  125. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/domain/models/portfolio/portfolio_configuration.py +0 -0
  126. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/domain/models/portfolio/portfolio_snapshot.py +0 -0
  127. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/domain/models/position/__init__.py +0 -0
  128. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/domain/models/position/position.py +0 -0
  129. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/domain/models/position/position_snapshot.py +0 -0
  130. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/domain/models/snapshot_interval.py +0 -0
  131. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/domain/models/strategy_profile.py +0 -0
  132. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/domain/models/time_frame.py +0 -0
  133. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/domain/models/time_interval.py +0 -0
  134. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/domain/models/tracing/__init__.py +0 -0
  135. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/domain/models/tracing/trace.py +0 -0
  136. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/domain/models/trade/__init__.py +0 -0
  137. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/domain/models/trade/trade.py +0 -0
  138. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/domain/models/trade/trade_risk_type.py +0 -0
  139. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/domain/models/trade/trade_status.py +0 -0
  140. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/domain/models/trade/trade_stop_loss.py +0 -0
  141. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/domain/models/trade/trade_take_profit.py +0 -0
  142. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/domain/order_executor.py +0 -0
  143. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/domain/portfolio_provider.py +0 -0
  144. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/domain/services/__init__.py +0 -0
  145. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/domain/services/market_credential_service.py +0 -0
  146. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/domain/services/observable.py +0 -0
  147. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/domain/services/observer.py +0 -0
  148. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/domain/services/portfolios/__init__.py +0 -0
  149. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/domain/services/portfolios/portfolio_sync_service.py +0 -0
  150. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/domain/services/rounding_service.py +0 -0
  151. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/domain/services/state_handler.py +0 -0
  152. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/domain/stateless_actions.py +0 -0
  153. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/domain/strategy.py +0 -0
  154. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/domain/utils/__init__.py +0 -0
  155. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/domain/utils/csv.py +0 -0
  156. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/domain/utils/custom_tqdm.py +0 -0
  157. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/domain/utils/dates.py +0 -0
  158. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/domain/utils/jupyter_notebook_detection.py +0 -0
  159. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/domain/utils/polars.py +0 -0
  160. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/domain/utils/random.py +0 -0
  161. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/domain/utils/signatures.py +0 -0
  162. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/domain/utils/stoppable_thread.py +0 -0
  163. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/domain/utils/synchronized.py +0 -0
  164. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/infrastructure/__init__.py +0 -0
  165. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/infrastructure/data_providers/__init__.py +0 -0
  166. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/infrastructure/data_providers/csv.py +0 -0
  167. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/infrastructure/data_providers/pandas.py +0 -0
  168. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/infrastructure/database/__init__.py +0 -0
  169. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/infrastructure/database/sql_alchemy.py +0 -0
  170. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/infrastructure/models/__init__.py +0 -0
  171. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/infrastructure/models/decimal_parser.py +0 -0
  172. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/infrastructure/models/model_extension.py +0 -0
  173. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/infrastructure/models/order/__init__.py +0 -0
  174. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/infrastructure/models/order/order.py +0 -0
  175. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/infrastructure/models/order/order_metadata.py +0 -0
  176. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/infrastructure/models/order_trade_association.py +0 -0
  177. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/infrastructure/models/portfolio/__init__.py +0 -0
  178. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/infrastructure/models/portfolio/portfolio_snapshot.py +0 -0
  179. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/infrastructure/models/portfolio/sql_portfolio.py +0 -0
  180. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/infrastructure/models/position/__init__.py +0 -0
  181. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/infrastructure/models/position/position.py +0 -0
  182. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/infrastructure/models/position/position_snapshot.py +0 -0
  183. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/infrastructure/models/trades/__init__.py +0 -0
  184. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/infrastructure/models/trades/trade.py +0 -0
  185. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/infrastructure/models/trades/trade_stop_loss.py +0 -0
  186. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/infrastructure/models/trades/trade_take_profit.py +0 -0
  187. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/infrastructure/order_executors/__init__.py +0 -0
  188. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/infrastructure/order_executors/backtest_oder_executor.py +0 -0
  189. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/infrastructure/order_executors/ccxt_order_executor.py +0 -0
  190. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/infrastructure/portfolio_providers/__init__.py +0 -0
  191. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/infrastructure/portfolio_providers/ccxt_portfolio_provider.py +0 -0
  192. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/infrastructure/repositories/__init__.py +0 -0
  193. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/infrastructure/repositories/order_metadata_repository.py +0 -0
  194. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/infrastructure/repositories/order_repository.py +0 -0
  195. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/infrastructure/repositories/portfolio_repository.py +0 -0
  196. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/infrastructure/repositories/portfolio_snapshot_repository.py +0 -0
  197. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/infrastructure/repositories/position_repository.py +0 -0
  198. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/infrastructure/repositories/position_snapshot_repository.py +0 -0
  199. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/infrastructure/repositories/repository.py +0 -0
  200. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/infrastructure/repositories/trade_repository.py +0 -0
  201. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/infrastructure/repositories/trade_stop_loss_repository.py +0 -0
  202. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/infrastructure/repositories/trade_take_profit_repository.py +0 -0
  203. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/infrastructure/services/__init__.py +0 -0
  204. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/infrastructure/services/aws/__init__.py +0 -0
  205. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/infrastructure/services/aws/state_handler.py +0 -0
  206. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/infrastructure/services/azure/__init__.py +0 -0
  207. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/infrastructure/services/azure/state_handler.py +0 -0
  208. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/infrastructure/services/performance_service/__init__.py +0 -0
  209. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/infrastructure/services/performance_service/backtest_performance_service.py +0 -0
  210. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/infrastructure/services/performance_service/performance_service.py +0 -0
  211. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/infrastructure/unit_of_work/in_memory.py +0 -0
  212. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/infrastructure/unit_of_work/sqlalchemy.py +0 -0
  213. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/services/backtesting/__init__.py +0 -0
  214. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/services/configuration_service.py +0 -0
  215. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/services/data_providers/__init__.py +0 -0
  216. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/services/market_credential_service.py +0 -0
  217. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/services/metrics/alpha.py +0 -0
  218. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/services/metrics/beta.py +0 -0
  219. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/services/metrics/cagr.py +0 -0
  220. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/services/metrics/calmar_ratio.py +0 -0
  221. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/services/metrics/drawdown.py +0 -0
  222. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/services/metrics/equity_curve.py +0 -0
  223. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/services/metrics/exposure.py +0 -0
  224. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/services/metrics/mean_daily_return.py +0 -0
  225. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/services/metrics/price_efficiency.py +0 -0
  226. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/services/metrics/profit_factor.py +0 -0
  227. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/services/metrics/recovery.py +0 -0
  228. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/services/metrics/returns.py +0 -0
  229. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/services/metrics/risk_free_rate.py +0 -0
  230. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/services/metrics/standard_deviation.py +0 -0
  231. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/services/metrics/treynor_ratio.py +0 -0
  232. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/services/metrics/ulcer.py +0 -0
  233. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/services/metrics/value_at_risk.py +0 -0
  234. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/services/metrics/volatility.py +0 -0
  235. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/services/metrics/win_rate.py +0 -0
  236. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/services/order_service/__init__.py +0 -0
  237. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/services/order_service/order_backtest_service.py +0 -0
  238. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/services/order_service/order_executor_lookup.py +0 -0
  239. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/services/order_service/order_service.py +0 -0
  240. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/services/portfolios/__init__.py +0 -0
  241. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/services/portfolios/backtest_portfolio_service.py +0 -0
  242. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/services/portfolios/portfolio_configuration_service.py +0 -0
  243. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/services/portfolios/portfolio_provider_lookup.py +0 -0
  244. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/services/portfolios/portfolio_service.py +0 -0
  245. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/services/portfolios/portfolio_snapshot_service.py +0 -0
  246. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/services/portfolios/portfolio_sync_service.py +0 -0
  247. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/services/positions/__init__.py +0 -0
  248. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/services/positions/position_service.py +0 -0
  249. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/services/positions/position_snapshot_service.py +0 -0
  250. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/services/repository_service.py +0 -0
  251. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/services/trade_order_evaluator/__init__.py +0 -0
  252. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/services/trade_order_evaluator/backtest_trade_oder_evaluator.py +0 -0
  253. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/services/trade_order_evaluator/default_trade_order_evaluator.py +0 -0
  254. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/services/trade_order_evaluator/trade_order_evaluator.py +0 -0
  255. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/services/trade_service/__init__.py +0 -0
  256. {investing_algorithm_framework-7.0.2 → investing_algorithm_framework-7.0.3}/investing_algorithm_framework/services/trade_service/trade_service.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: investing-algorithm-framework
3
- Version: 7.0.2
3
+ Version: 7.0.3
4
4
  Summary: A framework for creating trading bots
5
5
  Author: MDUYN
6
6
  Requires-Python: >=3.10
@@ -26,7 +26,7 @@ from investing_algorithm_framework.infrastructure import setup_sqlalchemy, \
26
26
  BacktestOrderExecutor, CCXTOHLCVDataProvider, clear_db
27
27
  from investing_algorithm_framework.services import OrderBacktestService, \
28
28
  BacktestPortfolioService, BacktestTradeOrderEvaluator, \
29
- DefaultTradeOrderEvaluator
29
+ DefaultTradeOrderEvaluator, get_risk_free_rate_us
30
30
  from .app_hook import AppHook
31
31
  from .eventloop import EventLoopService
32
32
 
@@ -825,6 +825,18 @@ class App:
825
825
  self.initialize_backtest_services()
826
826
  self.initialize_backtest_portfolios()
827
827
 
828
+ if risk_free_rate is None:
829
+ logger.info("No risk free rate provided, retrieving it...")
830
+ risk_free_rate = get_risk_free_rate_us()
831
+
832
+ if risk_free_rate is None:
833
+ raise OperationalException(
834
+ "Could not retrieve risk free rate for backtest metrics."
835
+ "Please provide a risk free as an argument when running "
836
+ "your backtest or make sure you have an internet "
837
+ "connection"
838
+ )
839
+
828
840
  algorithm = self.container.algorithm_factory().create_algorithm(
829
841
  name=name if name else self._name,
830
842
  strategies=(
@@ -938,6 +950,19 @@ class App:
938
950
  self.initialize_data_sources_backtest(
939
951
  strategy.data_sources, backtest_date_range
940
952
  )
953
+
954
+ if risk_free_rate is None:
955
+ logger.info("No risk free rate provided, retrieving it...")
956
+ risk_free_rate = get_risk_free_rate_us()
957
+
958
+ if risk_free_rate is None:
959
+ raise OperationalException(
960
+ "Could not retrieve risk free rate for backtest metrics."
961
+ "Please provide a risk free as an argument when running "
962
+ "your backtest or make sure you have an internet "
963
+ "connection"
964
+ )
965
+
941
966
  backtest_service = self.container.backtest_service()
942
967
  backtest_service.validate_strategy_for_vector_backtest(strategy)
943
968
  backtest = backtest_service.create_vector_backtest(
@@ -977,7 +1002,8 @@ class App:
977
1002
  for the backtest. This is used to determine how often the
978
1003
  portfolio snapshot should be taken during the backtest.
979
1004
  risk_free_rate (Optional[float]): The risk-free rate to use for
980
- calculating performance metrics. If not provided, the default
1005
+ the backtest. This is used to calculate the Sharpe ratio
1006
+ and other performance metrics. If not provided, the default
981
1007
  risk-free rate will be tried to be fetched from the
982
1008
  US Treasury website.
983
1009
  save (bool): Whether to save the backtest reports to disk.
@@ -994,7 +1020,6 @@ class App:
994
1020
  """
995
1021
  backtests = []
996
1022
  backtest_service = self.container.backtest_service()
997
- final_algorithms = []
998
1023
 
999
1024
  if algorithms is not None:
1000
1025
  final_algorithms = algorithms
@@ -1011,6 +1036,18 @@ class App:
1011
1036
  "No algorithms or strategy provided for backtesting"
1012
1037
  )
1013
1038
 
1039
+ if risk_free_rate is None:
1040
+ logger.info("No risk free rate provided, retrieving it...")
1041
+ risk_free_rate = get_risk_free_rate_us()
1042
+
1043
+ if risk_free_rate is None:
1044
+ raise OperationalException(
1045
+ "Could not retrieve risk free rate for backtest metrics."
1046
+ "Please provide a risk free as an argument when running "
1047
+ "your backtest or make sure you have an internet "
1048
+ "connection"
1049
+ )
1050
+
1014
1051
  for date_range in backtest_date_ranges:
1015
1052
  for algorithm in final_algorithms:
1016
1053
 
@@ -1,8 +1,16 @@
1
1
  from datetime import timedelta
2
2
  from enum import Enum
3
+ from investing_algorithm_framework.domain.exceptions import \
4
+ OperationalException
3
5
 
4
6
 
5
7
  class TimeUnit(Enum):
8
+ """
9
+ Enum class the represents a time unit such as
10
+ second, minute, hour or day. This can class
11
+ can be used to specify time specification within
12
+ the framework.
13
+ """
6
14
  SECOND = "SECOND"
7
15
  MINUTE = "MINUTE"
8
16
  HOUR = "HOUR"
@@ -18,7 +26,11 @@ class TimeUnit(Enum):
18
26
  if value.upper() == entry.value:
19
27
  return entry
20
28
 
21
- raise ValueError(
29
+ raise OperationalException(
30
+ f"Could not convert string {value} to time unit"
31
+ )
32
+
33
+ raise OperationalException(
22
34
  f"Could not convert value {value} to time unit," +
23
35
  " please make sure that the value is either of type string or" +
24
36
  f"TimeUnit. Its current type is {type(value)}"
@@ -38,17 +50,21 @@ class TimeUnit(Enum):
38
50
  TimeUnit: The extracted time unit.
39
51
  """
40
52
  if not isinstance(file_path, str):
41
- raise ValueError("File path must be a string.")
53
+ raise OperationalException(
54
+ "File path must be a string."
55
+ )
42
56
 
43
57
  parts = file_path.split('_')
44
58
  if len(parts) < 2:
45
- raise ValueError("File name does not contain a valid time unit.")
59
+ raise OperationalException(
60
+ "File name does not contain a valid time unit."
61
+ )
46
62
 
47
63
  time_unit_str = parts[-1].split('.')[0].upper()
48
64
  try:
49
65
  return TimeUnit.from_string(time_unit_str)
50
66
  except ValueError:
51
- raise ValueError(
67
+ raise OperationalException(
52
68
  f"Could not extract time unit from file name: {file_path}. "
53
69
  "Expected format 'symbol_timeunit.csv', "
54
70
  f"got '{time_unit_str}'."
@@ -1,5 +1,6 @@
1
+ from pathlib import Path
1
2
  from dateutil import parser
2
- from datetime import timezone
3
+ from datetime import timezone, datetime
3
4
  import pandas
4
5
  import polars
5
6
  from typing import Union
@@ -8,21 +9,21 @@ from investing_algorithm_framework.services import DataProviderService, \
8
9
  from investing_algorithm_framework.infrastructure import \
9
10
  get_default_data_providers
10
11
  from investing_algorithm_framework.domain import DataSource, \
11
- OperationalException
12
+ OperationalException, DataType
12
13
 
13
14
 
14
15
  def download(
15
16
  symbol: str,
16
- market=None,
17
- date=None,
17
+ market: str = None,
18
+ date: Union[datetime, str] = None,
18
19
  time_frame: str = None,
19
- data_type: str = "ohlcv",
20
- start_date: str = None,
21
- end_date: str = None,
20
+ data_type: Union[str, DataType] = DataType.OHLCV,
21
+ start_date: Union[datetime, str] = None,
22
+ end_date: Union[datetime, str] = None,
22
23
  window_size: int = 200,
23
24
  pandas: bool = True,
24
25
  save: bool = True,
25
- storage_path: str = None,
26
+ storage_path: Union[str, Path] = None,
26
27
  ) -> Union[pandas.DataFrame, polars.DataFrame]:
27
28
  """
28
29
  Download market data from the specified source. This function
@@ -142,7 +142,7 @@ class CCXTOHLCVDataProvider(DataProvider):
142
142
  symbol=symbol,
143
143
  market=market,
144
144
  time_frame=data_source.time_frame,
145
- storage_path=self.storage_path,
145
+ storage_path=data_source.storage_path,
146
146
  start_date=start_date,
147
147
  end_date=end_date
148
148
  )
@@ -12,6 +12,7 @@ from .portfolios import PortfolioService, BacktestPortfolioService, \
12
12
  from .positions import PositionService, PositionSnapshotService
13
13
  from .repository_service import RepositoryService
14
14
  from .trade_service import TradeService
15
+ from .metrics import get_risk_free_rate_us
15
16
 
16
17
  __all__ = [
17
18
  "OrderService",
@@ -34,4 +35,5 @@ __all__ = [
34
35
  "PortfolioProviderLookup",
35
36
  "TradeOrderEvaluator",
36
37
  "DefaultTradeOrderEvaluator",
38
+ "get_risk_free_rate_us"
37
39
  ]
@@ -323,7 +323,7 @@ class BacktestService(Observable):
323
323
  algorithm: The algorithm to create the backtest report for
324
324
  number_of_runs: The number of runs
325
325
  backtest_date_range: The backtest date range of the backtest
326
- risk_free_rate: The risk-free rate to use in the calculations
326
+ risk_free_rate: The risk-free rate to use for the backtest metrics
327
327
  strategy_directory_path (optional, str): The path to the
328
328
  strategy directory
329
329
 
@@ -44,18 +44,18 @@ class DataProviderIndex:
44
44
 
45
45
  def register(self, data_source: DataSource) -> DataProvider:
46
46
  """
47
- Register an ohlcv data provider for a given market and symbol.
47
+ Register a data source in the DataProvider Index.
48
48
 
49
- This method will also check if the data provider supports
50
- the market. If no data provider is found for the market and symbol,
51
- it will raise an ImproperlyConfigured exception.
52
49
 
53
- If multiple data providers are found for the market and symbol,
50
+ This method will go over all data providers and select the
51
+ best matching data provider for the data source.
52
+
53
+ If multiple data providers are found for the data source,
54
54
  it will sort them by priority and pick the best one.
55
55
 
56
56
  Args:
57
57
  data_source (DataSource): The data source to register the
58
- ohlcv data provider for.
58
+ data provider for.
59
59
 
60
60
  Returns:
61
61
  None
@@ -27,6 +27,7 @@ from .exposure import get_exposure, get_average_trade_duration, \
27
27
  from .win_rate import get_win_rate, get_win_loss_ratio
28
28
  from .calmar_ratio import get_calmar_ratio
29
29
  from .generate import create_backtest_metrics
30
+ from .risk_free_rate import get_risk_free_rate_us
30
31
 
31
32
  __all__ = [
32
33
  "get_annual_volatility",
@@ -81,4 +82,5 @@ __all__ = [
81
82
  "create_backtest_metrics",
82
83
  "get_growth",
83
84
  "get_growth_percentage",
85
+ "get_risk_free_rate_us"
84
86
  ]
@@ -57,7 +57,9 @@ def create_backtest_metrics(
57
57
  backtest_results.portfolio_snapshots,
58
58
  risk_free_rate=risk_free_rate
59
59
  ),
60
- sortino_ratio=get_sortino_ratio(backtest_results.portfolio_snapshots),
60
+ sortino_ratio=get_sortino_ratio(
61
+ backtest_results.portfolio_snapshots, risk_free_rate=risk_free_rate
62
+ ),
61
63
  profit_factor=get_profit_factor(backtest_results.trades),
62
64
  calmar_ratio=get_calmar_ratio(backtest_results.portfolio_snapshots),
63
65
  annual_volatility=get_annual_volatility(
@@ -53,12 +53,11 @@ from datetime import datetime
53
53
 
54
54
  from investing_algorithm_framework.domain import PortfolioSnapshot
55
55
  from .mean_daily_return import get_mean_daily_return
56
- from .risk_free_rate import get_risk_free_rate_us
57
56
  from .standard_deviation import get_daily_returns_std
58
57
 
59
58
 
60
59
  def get_sharpe_ratio(
61
- snapshots: List[PortfolioSnapshot], risk_free_rate: Optional[float] = None,
60
+ snapshots: List[PortfolioSnapshot], risk_free_rate: float,
62
61
  ) -> float:
63
62
  """
64
63
  Calculate the Sharpe Ratio from a backtest report using daily or
@@ -79,9 +78,6 @@ def get_sharpe_ratio(
79
78
  mean_daily_return = get_mean_daily_return(snapshots)
80
79
  std_daily_return = get_daily_returns_std(snapshots)
81
80
 
82
- if risk_free_rate is None:
83
- risk_free_rate = get_risk_free_rate_us()
84
-
85
81
  if std_daily_return == 0:
86
82
  return float('nan') # Avoid division by zero
87
83
 
@@ -92,21 +88,18 @@ def get_sharpe_ratio(
92
88
 
93
89
 
94
90
  def get_rolling_sharpe_ratio(
95
- snapshots: List[PortfolioSnapshot], risk_free_rate: Optional[float] = None
91
+ snapshots: List[PortfolioSnapshot], risk_free_rate: float
96
92
  ) -> List[Tuple[float, datetime]]:
97
93
  """
98
94
  Calculate the rolling Sharpe Ratio over a 365-day window.
99
95
 
100
96
  Args:
101
97
  snapshots (List[PortfolioSnapshot]): Time-sorted list of snapshots.
102
- risk_free_rate (float, optional): Annualized risk-free rate (e.g., 0.03 for 3%).
98
+ risk_free_rate (float): Annualized risk-free rate (e.g., 0.03 for 3%).
103
99
 
104
100
  Returns:
105
101
  List[Tuple[float, datetime]]: List of (sharpe_ratio, snapshot_date).
106
102
  """
107
- if risk_free_rate is None:
108
- risk_free_rate = get_risk_free_rate_us()
109
-
110
103
  data = [(s.created_at, s.total_value) for s in snapshots]
111
104
  df = pd.DataFrame(data, columns=["created_at", "total_value"])
112
105
  df['created_at'] = pd.to_datetime(df['created_at'])
@@ -30,7 +30,7 @@ from .standard_deviation import get_downside_std_of_daily_returns
30
30
 
31
31
 
32
32
  def get_sortino_ratio(
33
- snapshots: List[PortfolioSnapshot], risk_free_rate: Optional[float] = None,
33
+ snapshots: List[PortfolioSnapshot], risk_free_rate: float
34
34
  ) -> float:
35
35
  """
36
36
  Calculate the Sortino Ratio for a given report.
@@ -46,9 +46,8 @@ def get_sortino_ratio(
46
46
  Args:
47
47
  snapshots (List[PortfolioSnapshot]): List of portfolio snapshots
48
48
  from the backtest report.
49
- risk_free_rate (float, optional): Annual risk-free rate as a decimal
50
- (e.g., 0.047 for 4.7%). If not provided, defaults to the US risk-free
51
- rate.
49
+ risk_free_rate (float): Annual risk-free rate as a decimal
50
+ (e.g., 0.047 for 4.7%).
52
51
 
53
52
  Returns:
54
53
  float: The Sortino Ratio.
@@ -61,9 +60,6 @@ def get_sortino_ratio(
61
60
  mean_daily_return = get_mean_daily_return(snapshots)
62
61
  std_downside_daily_return = get_downside_std_of_daily_returns(snapshots)
63
62
 
64
- if risk_free_rate is None:
65
- risk_free_rate = get_risk_free_rate_us()
66
-
67
63
  if std_downside_daily_return == 0:
68
64
  return float('nan') # or 0.0, depending on preference
69
65
 
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "investing-algorithm-framework"
3
- version = "v7.0.2"
3
+ version = "v7.0.3"
4
4
  description = "A framework for creating trading bots"
5
5
  authors = ["MDUYN"]
6
6
  readme = "README.md"