investing-algorithm-framework 5.0.1__tar.gz → 5.1.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (166) hide show
  1. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/PKG-INFO +1 -1
  2. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/domain/utils/backtesting.py +1 -1
  3. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/infrastructure/models/market_data_sources/ccxt.py +33 -34
  4. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/infrastructure/models/market_data_sources/csv.py +24 -22
  5. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/services/backtesting/backtest_service.py +18 -8
  6. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/services/trade_service/trade_service.py +1 -4
  7. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/pyproject.toml +1 -1
  8. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/LICENSE +0 -0
  9. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/README.md +0 -0
  10. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/__init__.py +0 -0
  11. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/app/__init__.py +0 -0
  12. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/app/algorithm.py +0 -0
  13. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/app/app.py +0 -0
  14. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/app/stateless/__init__.py +0 -0
  15. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/app/stateless/action_handlers/__init__.py +0 -0
  16. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/app/stateless/action_handlers/action_handler_strategy.py +0 -0
  17. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/app/stateless/action_handlers/check_online_handler.py +0 -0
  18. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/app/stateless/action_handlers/run_strategy_handler.py +0 -0
  19. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/app/stateless/exception_handler.py +0 -0
  20. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/app/strategy.py +0 -0
  21. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/app/task.py +0 -0
  22. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/app/web/__init__.py +0 -0
  23. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/app/web/controllers/__init__.py +0 -0
  24. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/app/web/controllers/orders.py +0 -0
  25. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/app/web/controllers/portfolio.py +0 -0
  26. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/app/web/controllers/positions.py +0 -0
  27. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/app/web/create_app.py +0 -0
  28. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/app/web/error_handler.py +0 -0
  29. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/app/web/responses.py +0 -0
  30. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/app/web/run_strategies.py +0 -0
  31. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/app/web/schemas/__init__.py +0 -0
  32. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/app/web/schemas/order.py +0 -0
  33. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/app/web/schemas/portfolio.py +0 -0
  34. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/app/web/schemas/position.py +0 -0
  35. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/app/web/setup_cors.py +0 -0
  36. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/cli/__init__.py +0 -0
  37. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/cli/create_azure_function_app_skeleton.py +0 -0
  38. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/cli/deploy_to_azure_function.py +0 -0
  39. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/cli/templates/azure_function_framework_app.py.template +0 -0
  40. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/cli/templates/azure_function_function_app.py.template +0 -0
  41. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/cli/templates/azure_function_host.json.template +0 -0
  42. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/cli/templates/azure_function_local.settings.json.template +0 -0
  43. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/cli/templates/azure_function_requirements.txt.template +0 -0
  44. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/create_app.py +0 -0
  45. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/dependency_container.py +0 -0
  46. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/domain/__init__.py +0 -0
  47. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/domain/config.py +0 -0
  48. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/domain/constants.py +0 -0
  49. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/domain/data_structures.py +0 -0
  50. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/domain/decimal_parsing.py +0 -0
  51. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/domain/exceptions.py +0 -0
  52. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/domain/metrics/__init__.py +0 -0
  53. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/domain/metrics/price_efficiency.py +0 -0
  54. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/domain/models/__init__.py +0 -0
  55. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/domain/models/app_mode.py +0 -0
  56. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/domain/models/backtesting/__init__.py +0 -0
  57. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/domain/models/backtesting/backtest_date_range.py +0 -0
  58. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/domain/models/backtesting/backtest_position.py +0 -0
  59. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/domain/models/backtesting/backtest_report.py +0 -0
  60. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/domain/models/backtesting/backtest_reports_evaluation.py +0 -0
  61. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/domain/models/base_model.py +0 -0
  62. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/domain/models/date_range.py +0 -0
  63. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/domain/models/market/__init__.py +0 -0
  64. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/domain/models/market/market_credential.py +0 -0
  65. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/domain/models/market_data_type.py +0 -0
  66. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/domain/models/order/__init__.py +0 -0
  67. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/domain/models/order/order.py +0 -0
  68. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/domain/models/order/order_side.py +0 -0
  69. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/domain/models/order/order_status.py +0 -0
  70. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/domain/models/order/order_type.py +0 -0
  71. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/domain/models/portfolio/__init__.py +0 -0
  72. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/domain/models/portfolio/portfolio.py +0 -0
  73. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/domain/models/portfolio/portfolio_configuration.py +0 -0
  74. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/domain/models/portfolio/portfolio_snapshot.py +0 -0
  75. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/domain/models/position/__init__.py +0 -0
  76. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/domain/models/position/position.py +0 -0
  77. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/domain/models/position/position_snapshot.py +0 -0
  78. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/domain/models/strategy_profile.py +0 -0
  79. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/domain/models/time_frame.py +0 -0
  80. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/domain/models/time_interval.py +0 -0
  81. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/domain/models/time_unit.py +0 -0
  82. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/domain/models/tracing/__init__.py +0 -0
  83. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/domain/models/tracing/trace.py +0 -0
  84. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/domain/models/trade/__init__.py +0 -0
  85. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/domain/models/trade/trade.py +0 -0
  86. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/domain/models/trade/trade_status.py +0 -0
  87. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/domain/models/trading_data_types.py +0 -0
  88. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/domain/models/trading_time_frame.py +0 -0
  89. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/domain/services/__init__.py +0 -0
  90. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/domain/services/market_credential_service.py +0 -0
  91. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/domain/services/market_data_sources.py +0 -0
  92. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/domain/services/market_service.py +0 -0
  93. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/domain/services/portfolios/__init__.py +0 -0
  94. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/domain/services/portfolios/portfolio_sync_service.py +0 -0
  95. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/domain/services/rounding_service.py +0 -0
  96. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/domain/singleton.py +0 -0
  97. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/domain/stateless_actions.py +0 -0
  98. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/domain/strategy.py +0 -0
  99. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/domain/utils/__init__.py +0 -0
  100. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/domain/utils/csv.py +0 -0
  101. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/domain/utils/polars.py +0 -0
  102. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/domain/utils/random.py +0 -0
  103. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/domain/utils/signatures.py +0 -0
  104. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/domain/utils/stoppable_thread.py +0 -0
  105. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/domain/utils/synchronized.py +0 -0
  106. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/indicators/__init__.py +0 -0
  107. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/indicators/advanced.py +0 -0
  108. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/indicators/momentum.py +0 -0
  109. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/indicators/trend.py +0 -0
  110. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/indicators/utils.py +0 -0
  111. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/infrastructure/__init__.py +0 -0
  112. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/infrastructure/database/__init__.py +0 -0
  113. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/infrastructure/database/sql_alchemy.py +0 -0
  114. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/infrastructure/models/__init__.py +0 -0
  115. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/infrastructure/models/decimal_parser.py +0 -0
  116. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/infrastructure/models/market_data_sources/__init__.py +0 -0
  117. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/infrastructure/models/market_data_sources/pandas.py +0 -0
  118. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/infrastructure/models/market_data_sources/us_treasury_yield.py +0 -0
  119. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/infrastructure/models/model_extension.py +0 -0
  120. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/infrastructure/models/order/__init__.py +0 -0
  121. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/infrastructure/models/order/order.py +0 -0
  122. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/infrastructure/models/order_trade_association.py +0 -0
  123. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/infrastructure/models/portfolio/__init__.py +0 -0
  124. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/infrastructure/models/portfolio/portfolio_snapshot.py +0 -0
  125. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/infrastructure/models/portfolio/sql_portfolio.py +0 -0
  126. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/infrastructure/models/position/__init__.py +0 -0
  127. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/infrastructure/models/position/position.py +0 -0
  128. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/infrastructure/models/position/position_snapshot.py +0 -0
  129. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/infrastructure/models/trade.py +0 -0
  130. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/infrastructure/repositories/__init__.py +0 -0
  131. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/infrastructure/repositories/order_repository.py +0 -0
  132. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/infrastructure/repositories/portfolio_repository.py +0 -0
  133. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/infrastructure/repositories/portfolio_snapshot_repository.py +0 -0
  134. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/infrastructure/repositories/position_repository.py +0 -0
  135. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/infrastructure/repositories/position_snapshot_repository.py +0 -0
  136. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/infrastructure/repositories/repository.py +0 -0
  137. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/infrastructure/repositories/trade_repository.py +0 -0
  138. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/infrastructure/services/__init__.py +0 -0
  139. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/infrastructure/services/azure/__init__.py +0 -0
  140. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/infrastructure/services/azure/state_handler.py +0 -0
  141. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/infrastructure/services/market_service/__init__.py +0 -0
  142. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/infrastructure/services/market_service/ccxt_market_service.py +0 -0
  143. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/infrastructure/services/performance_service/__init__.py +0 -0
  144. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/infrastructure/services/performance_service/backtest_performance_service.py +0 -0
  145. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/infrastructure/services/performance_service/performance_service.py +0 -0
  146. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/services/__init__.py +0 -0
  147. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/services/backtesting/__init__.py +0 -0
  148. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/services/configuration_service.py +0 -0
  149. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/services/market_credential_service.py +0 -0
  150. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/services/market_data_source_service/__init__.py +0 -0
  151. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/services/market_data_source_service/backtest_market_data_source_service.py +0 -0
  152. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/services/market_data_source_service/market_data_source_service.py +0 -0
  153. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/services/order_service/__init__.py +0 -0
  154. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/services/order_service/order_backtest_service.py +0 -0
  155. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/services/order_service/order_service.py +0 -0
  156. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/services/portfolios/__init__.py +0 -0
  157. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/services/portfolios/backtest_portfolio_service.py +0 -0
  158. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/services/portfolios/portfolio_configuration_service.py +0 -0
  159. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/services/portfolios/portfolio_service.py +0 -0
  160. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/services/portfolios/portfolio_snapshot_service.py +0 -0
  161. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/services/portfolios/portfolio_sync_service.py +0 -0
  162. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/services/position_service.py +0 -0
  163. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/services/position_snapshot_service.py +0 -0
  164. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/services/repository_service.py +0 -0
  165. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/services/strategy_orchestrator_service.py +0 -0
  166. {investing_algorithm_framework-5.0.1 → investing_algorithm_framework-5.1.0}/investing_algorithm_framework/services/trade_service/__init__.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: investing-algorithm-framework
3
- Version: 5.0.1
3
+ Version: 5.1.0
4
4
  Summary: A framework for creating trading bots
5
5
  Author: MDUYN
6
6
  Requires-Python: >=3.9
@@ -2,7 +2,7 @@ import os
2
2
  import re
3
3
  import json
4
4
  from datetime import datetime
5
- from typing import List, Tuple
5
+ from typing import List
6
6
 
7
7
  from tabulate import tabulate
8
8
 
@@ -1,7 +1,6 @@
1
1
  import logging
2
2
  import os
3
3
  from datetime import timedelta, datetime, timezone
4
- from dateutil.parser import parse
5
4
  import polars
6
5
  from dateutil import parser
7
6
 
@@ -57,6 +56,9 @@ class CCXTOHLCVBacktestMarketDataSource(
57
56
  self.data = None
58
57
  self._start_date_data_source = None
59
58
  self._end_date_data_source = None
59
+ self.backtest_end_index = self.window_size
60
+ self.backtest_start_index = 0
61
+ self.window_cache = {}
60
62
 
61
63
  def prepare_data(
62
64
  self,
@@ -100,8 +102,6 @@ class CCXTOHLCVBacktestMarketDataSource(
100
102
 
101
103
  self.backtest_data_start_date = backtest_data_start_date\
102
104
  .replace(microsecond=0)
103
- self.backtest_data_index_date = backtest_data_start_date\
104
- .replace(microsecond=0)
105
105
  self.backtest_data_end_date = backtest_end_date.replace(microsecond=0)
106
106
 
107
107
  # Creating the backtest data directory and file
@@ -148,14 +148,30 @@ class CCXTOHLCVBacktestMarketDataSource(
148
148
  self.write_data_to_file_path(file_path, ohlcv)
149
149
 
150
150
  self.load_data()
151
+ self._precompute_sliding_windows() # Precompute sliding windows!
152
+
153
+ def _precompute_sliding_windows(self):
154
+ """
155
+ Precompute all sliding windows for fast retrieval.
156
+ """
157
+ self.window_cache = {}
158
+ timestamps = self.data["Datetime"].to_list()
159
+
160
+ for i in range(len(timestamps) - self.window_size + 1):
161
+ # Use last timestamp as key
162
+ end_time = timestamps[i + self.window_size - 1]
163
+ self.window_cache[end_time] = self.data.slice(i, self.window_size)
151
164
 
152
165
  def load_data(self):
153
166
  file_path = self._create_file_path()
154
- self.data = polars.read_csv(file_path)
167
+ self.data = polars.read_csv(
168
+ file_path, dtypes={"Datetime": polars.Datetime}, low_memory=True
169
+ ) # Faster parsing
155
170
  first_row = self.data.head(1)
156
171
  last_row = self.data.tail(1)
157
- self._start_date_data_source = parse(first_row["Datetime"][0])
158
- self._end_date_data_source = parse(last_row["Datetime"][0])
172
+
173
+ self._start_date_data_source = first_row["Datetime"][0]
174
+ self._end_date_data_source = last_row["Datetime"][0]
159
175
 
160
176
  def _create_file_path(self):
161
177
  """
@@ -190,38 +206,21 @@ class CCXTOHLCVBacktestMarketDataSource(
190
206
  source. This implementation will use polars to load and filter the
191
207
  data.
192
208
  """
193
- if self.data is None:
194
- self.load_data()
195
-
196
- end_date = date
197
209
 
198
- if end_date is None:
199
- return self.data
210
+ data = self.window_cache.get(date)
211
+ if data is not None:
212
+ return data
200
213
 
201
- start_date = self.create_start_date(
202
- end_date, self.time_frame, self.window_size
203
- )
214
+ # Find closest previous timestamp
215
+ sorted_timestamps = sorted(self.window_cache.keys())
204
216
 
205
- if start_date < self._start_date_data_source:
206
- raise OperationalException(
207
- f"Start date {start_date} is before the start date "
208
- f"of the data source {self._start_date_data_source}"
209
- )
217
+ closest_date = None
218
+ for ts in reversed(sorted_timestamps):
219
+ if ts < date:
220
+ closest_date = ts
221
+ break
210
222
 
211
- if end_date > self._end_date_data_source:
212
- raise OperationalException(
213
- f"End date {end_date} is after the end date "
214
- f"of the data source {self._end_date_data_source}"
215
- )
216
-
217
- time_frame = TimeFrame.from_string(self.time_frame)
218
- start_date = start_date - \
219
- timedelta(minutes=time_frame.amount_of_minutes)
220
- selection = self.data.filter(
221
- (self.data['Datetime'] >= start_date.strftime(DATETIME_FORMAT))
222
- & (self.data['Datetime'] <= end_date.strftime(DATETIME_FORMAT))
223
- )
224
- return selection
223
+ return self.window_cache.get(closest_date) if closest_date else None
225
224
 
226
225
  def to_backtest_market_data_source(self) -> BacktestMarketDataSource:
227
226
  # Ignore this method for now
@@ -40,7 +40,8 @@ class CSVOHLCVMarketDataSource(OHLCVMarketDataSource):
40
40
  self._columns = [
41
41
  "Datetime", "Open", "High", "Low", "Close", "Volume"
42
42
  ]
43
- df = polars.read_csv(csv_file_path)
43
+
44
+ df = polars.read_csv(self._csv_file_path)
44
45
 
45
46
  # Check if all column names are in the csv file
46
47
  if not all(column in df.columns for column in self._columns):
@@ -53,15 +54,25 @@ class CSVOHLCVMarketDataSource(OHLCVMarketDataSource):
53
54
  f"Missing columns: {missing_columns}"
54
55
  )
55
56
 
56
- first_row = df.head(1)
57
- last_row = df.tail(1)
58
- self._start_date_data_source = parse(first_row["Datetime"][0])
59
- self._end_date_data_source = parse(last_row["Datetime"][0])
57
+ self.data = self._load_data(self.csv_file_path)
58
+ first_row = self.data.head(1)
59
+ last_row = self.data.tail(1)
60
+ self._start_date_data_source = first_row["Datetime"][0]
61
+ self._end_date_data_source = last_row["Datetime"][0]
60
62
 
61
63
  @property
62
64
  def csv_file_path(self):
63
65
  return self._csv_file_path
64
66
 
67
+ def _load_data(self, file_path):
68
+ return polars.read_csv(
69
+ file_path, dtypes={"Datetime": polars.Datetime}, low_memory=True
70
+ ).with_columns(
71
+ polars.col("Datetime").cast(
72
+ polars.Datetime(time_unit="ms", time_zone="UTC")
73
+ )
74
+ )
75
+
65
76
  def get_data(
66
77
  self,
67
78
  start_date: datetime = None,
@@ -86,9 +97,7 @@ class CSVOHLCVMarketDataSource(OHLCVMarketDataSource):
86
97
  """
87
98
 
88
99
  if start_date is None and end_date is None:
89
- return polars.read_csv(
90
- self.csv_file_path, columns=self._columns, separator=","
91
- )
100
+ return self.data
92
101
 
93
102
  if end_date is not None and start_date is not None:
94
103
 
@@ -101,13 +110,10 @@ class CSVOHLCVMarketDataSource(OHLCVMarketDataSource):
101
110
  if start_date > self._end_date_data_source:
102
111
  return polars.DataFrame()
103
112
 
104
- df = polars.read_csv(
105
- self.csv_file_path, columns=self._columns, separator=","
106
- )
107
-
113
+ df = self.data
108
114
  df = df.filter(
109
- (df['Datetime'] >= start_date.strftime(DATETIME_FORMAT))
110
- & (df['Datetime'] <= end_date.strftime(DATETIME_FORMAT))
115
+ (df['Datetime'] >= start_date)
116
+ & (df['Datetime'] <= end_date)
111
117
  )
112
118
  return df
113
119
 
@@ -119,11 +125,9 @@ class CSVOHLCVMarketDataSource(OHLCVMarketDataSource):
119
125
  if start_date > self._end_date_data_source:
120
126
  return polars.DataFrame()
121
127
 
122
- df = polars.read_csv(
123
- self.csv_file_path, columns=self._columns, separator=","
124
- )
128
+ df = self.data
125
129
  df = df.filter(
126
- (df['Datetime'] >= start_date.strftime(DATETIME_FORMAT))
130
+ (df['Datetime'] >= start_date)
127
131
  )
128
132
  df = df.head(self.window_size)
129
133
  return df
@@ -136,11 +140,9 @@ class CSVOHLCVMarketDataSource(OHLCVMarketDataSource):
136
140
  if end_date > self._end_date_data_source:
137
141
  return polars.DataFrame()
138
142
 
139
- df = polars.read_csv(
140
- self.csv_file_path, columns=self._columns, separator=","
141
- )
143
+ df = self.data
142
144
  df = df.filter(
143
- (df['Datetime'] <= end_date.strftime(DATETIME_FORMAT))
145
+ (df['Datetime'] <= end_date)
144
146
  )
145
147
  df = df.tail(self.window_size)
146
148
  return df
@@ -612,10 +612,15 @@ class BacktestService:
612
612
 
613
613
  # Get the backtest start date from the file name
614
614
  backtest_start_date = os.path.basename(path).split("_")[3]
615
- # Parse the backtest start date
616
- return datetime.strptime(
617
- backtest_start_date, DATETIME_FORMAT_BACKTESTING
618
- )
615
+
616
+ try:
617
+ # Parse the backtest start date
618
+ return datetime.strptime(
619
+ backtest_start_date, DATETIME_FORMAT_BACKTESTING
620
+ )
621
+ except ValueError:
622
+ # Try to parse the backtest start date with a different format
623
+ return parser.parse(backtest_start_date)
619
624
 
620
625
  def _get_end_date_from_backtest_report_file(self, path: str) -> datetime:
621
626
  """
@@ -630,10 +635,15 @@ class BacktestService:
630
635
 
631
636
  # Get the backtest end date from the file name
632
637
  backtest_end_date = os.path.basename(path).split("_")[5]
633
- # Parse the backtest end date
634
- return datetime.strptime(
635
- backtest_end_date, DATETIME_FORMAT_BACKTESTING
636
- )
638
+
639
+ try:
640
+ # Parse the backtest end date
641
+ return datetime.strptime(
642
+ backtest_end_date, DATETIME_FORMAT_BACKTESTING
643
+ )
644
+ except ValueError:
645
+ # Try to parse the backtest end date with a different format
646
+ return parser.parse(backtest_end_date)
637
647
 
638
648
  def _get_algorithm_name_from_backtest_report_file(self, path: str) -> str:
639
649
  """
@@ -1,6 +1,5 @@
1
1
  import logging
2
2
  from queue import PriorityQueue
3
- from dateutil import parser
4
3
 
5
4
  from investing_algorithm_framework.domain import OrderStatus, \
6
5
  TradeStatus, Trade, OperationalException, MarketDataType
@@ -248,9 +247,7 @@ class TradeService(RepositoryService):
248
247
  last_row = data.tail(1)
249
248
  update_data = {
250
249
  "last_reported_price": last_row["Close"][0],
251
- "updated_at": parser.parse(
252
- last_row["Datetime"][0]
253
- )
250
+ "updated_at": last_row["Datetime"][0]
254
251
  }
255
252
  price = last_row["Close"][0]
256
253
 
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "investing-algorithm-framework"
3
- version = "v5.0.1"
3
+ version = "v5.1.0"
4
4
  description = "A framework for creating trading bots"
5
5
  authors = ["MDUYN"]
6
6
  readme = "README.md"