investing-algorithm-framework 6.7.1__tar.gz → 6.8.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 (224) hide show
  1. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/PKG-INFO +1 -1
  2. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/__init__.py +4 -1
  3. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/metrics/__init__.py +5 -0
  4. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/metrics/cagr.py +4 -7
  5. investing_algorithm_framework-6.8.0/investing_algorithm_framework/metrics/calmar_ratio.py +39 -0
  6. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/metrics/drawdown.py +2 -2
  7. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/metrics/exposure.py +20 -0
  8. investing_algorithm_framework-6.8.0/investing_algorithm_framework/metrics/win_rate.py +81 -0
  9. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/pyproject.toml +1 -1
  10. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/LICENSE +0 -0
  11. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/README.md +0 -0
  12. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/app/__init__.py +0 -0
  13. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/app/algorithm/__init__.py +0 -0
  14. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/app/algorithm/algorithm.py +0 -0
  15. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/app/algorithm/algorithm_factory.py +0 -0
  16. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/app/app.py +0 -0
  17. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/app/app_hook.py +0 -0
  18. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/app/context.py +0 -0
  19. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/app/stateless/__init__.py +0 -0
  20. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/app/stateless/action_handlers/__init__.py +0 -0
  21. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/app/stateless/action_handlers/action_handler_strategy.py +0 -0
  22. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/app/stateless/action_handlers/check_online_handler.py +0 -0
  23. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/app/stateless/action_handlers/run_strategy_handler.py +0 -0
  24. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/app/stateless/exception_handler.py +0 -0
  25. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/app/strategy.py +0 -0
  26. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/app/task.py +0 -0
  27. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/app/web/__init__.py +0 -0
  28. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/app/web/controllers/__init__.py +0 -0
  29. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/app/web/controllers/orders.py +0 -0
  30. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/app/web/controllers/portfolio.py +0 -0
  31. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/app/web/controllers/positions.py +0 -0
  32. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/app/web/create_app.py +0 -0
  33. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/app/web/error_handler.py +0 -0
  34. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/app/web/responses.py +0 -0
  35. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/app/web/run_strategies.py +0 -0
  36. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/app/web/schemas/__init__.py +0 -0
  37. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/app/web/schemas/order.py +0 -0
  38. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/app/web/schemas/portfolio.py +0 -0
  39. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/app/web/schemas/position.py +0 -0
  40. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/app/web/setup_cors.py +0 -0
  41. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/cli/__init__.py +0 -0
  42. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/cli/cli.py +0 -0
  43. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/cli/deploy_to_azure_function.py +0 -0
  44. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/cli/initialize_app.py +0 -0
  45. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/cli/templates/.gitignore.template +0 -0
  46. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/cli/templates/app-web.py.template +0 -0
  47. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/cli/templates/app.py.template +0 -0
  48. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/cli/templates/app_azure_function.py.template +0 -0
  49. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/cli/templates/app_web.py.template +0 -0
  50. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/cli/templates/azure_function_function_app.py.template +0 -0
  51. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/cli/templates/azure_function_host.json.template +0 -0
  52. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/cli/templates/azure_function_local.settings.json.template +0 -0
  53. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/cli/templates/data_providers.py.template +0 -0
  54. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/cli/templates/env.example.template +0 -0
  55. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/cli/templates/env_azure_function.example.template +0 -0
  56. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/cli/templates/market_data_providers.py.template +0 -0
  57. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/cli/templates/readme.md.template +0 -0
  58. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/cli/templates/requirements.txt.template +0 -0
  59. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/cli/templates/requirements_azure_function.txt.template +0 -0
  60. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/cli/templates/run_backtest.py.template +0 -0
  61. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/cli/templates/strategy.py.template +0 -0
  62. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/create_app.py +0 -0
  63. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/dependency_container.py +0 -0
  64. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/__init__.py +0 -0
  65. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/config.py +0 -0
  66. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/constants.py +0 -0
  67. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/data_provider.py +0 -0
  68. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/data_structures.py +0 -0
  69. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/decimal_parsing.py +0 -0
  70. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/exceptions.py +0 -0
  71. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/models/__init__.py +0 -0
  72. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/models/app_mode.py +0 -0
  73. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/models/backtesting/__init__.py +0 -0
  74. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/models/backtesting/backtest_date_range.py +0 -0
  75. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/models/backtesting/backtest_position.py +0 -0
  76. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/models/backtesting/backtest_report.py +0 -0
  77. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/models/backtesting/backtest_reports_evaluation.py +0 -0
  78. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/models/base_model.py +0 -0
  79. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/models/data_source.py +0 -0
  80. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/models/date_range.py +0 -0
  81. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/models/event.py +0 -0
  82. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/models/market/__init__.py +0 -0
  83. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/models/market/market_credential.py +0 -0
  84. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/models/market_data_type.py +0 -0
  85. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/models/order/__init__.py +0 -0
  86. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/models/order/order.py +0 -0
  87. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/models/order/order_side.py +0 -0
  88. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/models/order/order_status.py +0 -0
  89. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/models/order/order_type.py +0 -0
  90. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/models/portfolio/__init__.py +0 -0
  91. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/models/portfolio/portfolio.py +0 -0
  92. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/models/portfolio/portfolio_configuration.py +0 -0
  93. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/models/portfolio/portfolio_snapshot.py +0 -0
  94. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/models/position/__init__.py +0 -0
  95. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/models/position/position.py +0 -0
  96. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/models/position/position_snapshot.py +0 -0
  97. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/models/snapshot_interval.py +0 -0
  98. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/models/strategy_profile.py +0 -0
  99. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/models/time_frame.py +0 -0
  100. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/models/time_interval.py +0 -0
  101. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/models/time_unit.py +0 -0
  102. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/models/tracing/__init__.py +0 -0
  103. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/models/tracing/trace.py +0 -0
  104. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/models/trade/__init__.py +0 -0
  105. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/models/trade/trade.py +0 -0
  106. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/models/trade/trade_risk_type.py +0 -0
  107. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/models/trade/trade_status.py +0 -0
  108. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/models/trade/trade_stop_loss.py +0 -0
  109. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/models/trade/trade_take_profit.py +0 -0
  110. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/models/trading_data_types.py +0 -0
  111. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/models/trading_time_frame.py +0 -0
  112. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/order_executor.py +0 -0
  113. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/portfolio_provider.py +0 -0
  114. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/services/__init__.py +0 -0
  115. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/services/market_credential_service.py +0 -0
  116. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/services/market_data_sources.py +0 -0
  117. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/services/market_service.py +0 -0
  118. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/services/observable.py +0 -0
  119. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/services/observer.py +0 -0
  120. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/services/portfolios/__init__.py +0 -0
  121. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/services/portfolios/portfolio_sync_service.py +0 -0
  122. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/services/rounding_service.py +0 -0
  123. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/services/state_handler.py +0 -0
  124. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/stateless_actions.py +0 -0
  125. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/strategy.py +0 -0
  126. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/utils/__init__.py +0 -0
  127. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/utils/backtesting.py +0 -0
  128. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/utils/csv.py +0 -0
  129. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/utils/dates.py +0 -0
  130. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/utils/polars.py +0 -0
  131. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/utils/random.py +0 -0
  132. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/utils/signatures.py +0 -0
  133. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/utils/stoppable_thread.py +0 -0
  134. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/domain/utils/synchronized.py +0 -0
  135. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/download_data.py +0 -0
  136. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/infrastructure/__init__.py +0 -0
  137. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/infrastructure/data_providers/__init__.py +0 -0
  138. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/infrastructure/data_providers/ccxt.py +0 -0
  139. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/infrastructure/data_providers/csv.py +0 -0
  140. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/infrastructure/database/__init__.py +0 -0
  141. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/infrastructure/database/sql_alchemy.py +0 -0
  142. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/infrastructure/models/__init__.py +0 -0
  143. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/infrastructure/models/decimal_parser.py +0 -0
  144. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/infrastructure/models/market_data_sources/__init__.py +0 -0
  145. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/infrastructure/models/market_data_sources/ccxt.py +0 -0
  146. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/infrastructure/models/market_data_sources/csv.py +0 -0
  147. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/infrastructure/models/market_data_sources/pandas.py +0 -0
  148. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/infrastructure/models/model_extension.py +0 -0
  149. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/infrastructure/models/order/__init__.py +0 -0
  150. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/infrastructure/models/order/order.py +0 -0
  151. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/infrastructure/models/order/order_metadata.py +0 -0
  152. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/infrastructure/models/order_trade_association.py +0 -0
  153. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/infrastructure/models/portfolio/__init__.py +0 -0
  154. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/infrastructure/models/portfolio/portfolio_snapshot.py +0 -0
  155. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/infrastructure/models/portfolio/sql_portfolio.py +0 -0
  156. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/infrastructure/models/position/__init__.py +0 -0
  157. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/infrastructure/models/position/position.py +0 -0
  158. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/infrastructure/models/position/position_snapshot.py +0 -0
  159. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/infrastructure/models/trades/__init__.py +0 -0
  160. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/infrastructure/models/trades/trade.py +0 -0
  161. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/infrastructure/models/trades/trade_stop_loss.py +0 -0
  162. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/infrastructure/models/trades/trade_take_profit.py +0 -0
  163. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/infrastructure/order_executors/__init__.py +0 -0
  164. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/infrastructure/order_executors/ccxt_order_executor.py +0 -0
  165. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/infrastructure/portfolio_providers/__init__.py +0 -0
  166. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/infrastructure/portfolio_providers/ccxt_portfolio_provider.py +0 -0
  167. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/infrastructure/repositories/__init__.py +0 -0
  168. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/infrastructure/repositories/order_metadata_repository.py +0 -0
  169. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/infrastructure/repositories/order_repository.py +0 -0
  170. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/infrastructure/repositories/portfolio_repository.py +0 -0
  171. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/infrastructure/repositories/portfolio_snapshot_repository.py +0 -0
  172. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/infrastructure/repositories/position_repository.py +0 -0
  173. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/infrastructure/repositories/position_snapshot_repository.py +0 -0
  174. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/infrastructure/repositories/repository.py +0 -0
  175. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/infrastructure/repositories/trade_repository.py +0 -0
  176. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/infrastructure/repositories/trade_stop_loss_repository.py +0 -0
  177. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/infrastructure/repositories/trade_take_profit_repository.py +0 -0
  178. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/infrastructure/services/__init__.py +0 -0
  179. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/infrastructure/services/azure/__init__.py +0 -0
  180. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/infrastructure/services/azure/state_handler.py +0 -0
  181. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/infrastructure/services/market_service/__init__.py +0 -0
  182. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/infrastructure/services/market_service/ccxt_market_service.py +0 -0
  183. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/infrastructure/services/performance_service/__init__.py +0 -0
  184. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/infrastructure/services/performance_service/backtest_performance_service.py +0 -0
  185. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/infrastructure/services/performance_service/performance_service.py +0 -0
  186. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/metrics/equity_curve.py +0 -0
  187. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/metrics/net_profit.py +0 -0
  188. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/metrics/price_efficiency.py +0 -0
  189. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/metrics/profit_factor.py +0 -0
  190. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/metrics/recovery.py +0 -0
  191. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/metrics/risk_free_rate.py +0 -0
  192. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/metrics/sharp_ratio.py +0 -0
  193. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/metrics/sortino_ratio.py +0 -0
  194. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/metrics/standard_deviation.py +0 -0
  195. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/metrics/volatility.py +0 -0
  196. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/overfitting/__init__.py +0 -0
  197. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/overfitting/permutations.py +0 -0
  198. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/services/__init__.py +0 -0
  199. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/services/backtesting/__init__.py +0 -0
  200. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/services/backtesting/backtest_service.py +0 -0
  201. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/services/configuration_service.py +0 -0
  202. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/services/market_credential_service.py +0 -0
  203. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/services/market_data_source_service/__init__.py +0 -0
  204. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/services/market_data_source_service/backtest_market_data_source_service.py +0 -0
  205. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/services/market_data_source_service/data_provider_service.py +0 -0
  206. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/services/market_data_source_service/market_data_source_service.py +0 -0
  207. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/services/order_service/__init__.py +0 -0
  208. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/services/order_service/order_backtest_service.py +0 -0
  209. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/services/order_service/order_executor_lookup.py +0 -0
  210. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/services/order_service/order_service.py +0 -0
  211. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/services/portfolios/__init__.py +0 -0
  212. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/services/portfolios/backtest_portfolio_service.py +0 -0
  213. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/services/portfolios/portfolio_configuration_service.py +0 -0
  214. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/services/portfolios/portfolio_provider_lookup.py +0 -0
  215. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/services/portfolios/portfolio_service.py +0 -0
  216. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/services/portfolios/portfolio_snapshot_service.py +0 -0
  217. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/services/portfolios/portfolio_sync_service.py +0 -0
  218. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/services/positions/__init__.py +0 -0
  219. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/services/positions/position_service.py +0 -0
  220. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/services/positions/position_snapshot_service.py +0 -0
  221. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/services/repository_service.py +0 -0
  222. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/services/strategy_orchestrator_service.py +0 -0
  223. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/investing_algorithm_framework/services/trade_service/__init__.py +0 -0
  224. {investing_algorithm_framework-6.7.1 → investing_algorithm_framework-6.8.0}/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: 6.7.1
3
+ Version: 6.8.0
4
4
  Summary: A framework for creating trading bots
5
5
  Author: MDUYN
6
6
  Requires-Python: >=3.10
@@ -31,7 +31,7 @@ from .metrics import get_volatility, get_sortino_ratio, get_profit_factor, \
31
31
  get_drawdown_series, get_max_drawdown, get_cagr, \
32
32
  get_standard_deviation_returns, get_standard_deviation_downside_returns, \
33
33
  get_max_drawdown_absolute, get_exposure_time, get_average_trade_duration, \
34
- get_net_profit
34
+ get_net_profit, get_win_rate, get_win_loss_ratio, get_calmar_ratio
35
35
 
36
36
  __all__ = [
37
37
  "Algorithm",
@@ -120,4 +120,7 @@ __all__ = [
120
120
  "get_exposure_time",
121
121
  "get_average_trade_duration",
122
122
  "get_net_profit",
123
+ "get_win_rate",
124
+ "get_win_loss_ratio",
125
+ "get_calmar_ratio",
123
126
  ]
@@ -16,6 +16,8 @@ from .standard_deviation import get_standard_deviation_downside_returns, \
16
16
  get_standard_deviation_returns
17
17
  from .net_profit import get_net_profit
18
18
  from .exposure import get_exposure_time, get_average_trade_duration
19
+ from .win_rate import get_win_rate, get_win_loss_ratio
20
+ from .calmar_ratio import get_calmar_ratio
19
21
 
20
22
  __all__ = [
21
23
  "get_volatility",
@@ -36,4 +38,7 @@ __all__ = [
36
38
  "get_net_profit",
37
39
  "get_exposure_time",
38
40
  "get_average_trade_duration",
41
+ "get_win_rate",
42
+ "get_win_loss_ratio",
43
+ "get_calmar_ratio",
39
44
  ]
@@ -45,12 +45,12 @@ def get_cagr(report: BacktestReport) -> float:
45
45
 
46
46
  # Convert snapshots to DataFrame
47
47
  data = [(s.total_value, s.created_at) for s in snapshots]
48
- df = pd.DataFrame(data, columns=["net_size", "created_at"])
48
+ df = pd.DataFrame(data, columns=["total_value", "created_at"])
49
49
  df['created_at'] = pd.to_datetime(df['created_at'])
50
50
  df = df.sort_values('created_at')
51
51
 
52
- start_value = df.iloc[0]['net_size']
53
- end_value = df.iloc[-1]['net_size']
52
+ start_value = df.iloc[0]['total_value']
53
+ end_value = df.iloc[-1]['total_value']
54
54
 
55
55
  start_date = df.iloc[0]['created_at']
56
56
  end_date = df.iloc[-1]['created_at']
@@ -61,7 +61,4 @@ def get_cagr(report: BacktestReport) -> float:
61
61
  return 0.0
62
62
 
63
63
  # CAGR formula
64
- cagr = (end_value / start_value) ** (365 / num_days) - 1
65
- # Return as percentage
66
- cagr = round(cagr * 100, 2) # Convert to percentage and 2 decimal places
67
- return cagr
64
+ return (end_value / start_value) ** (365 / num_days) - 1
@@ -0,0 +1,39 @@
1
+ """
2
+ | **Calmar Ratio** | **Interpretation** |
3
+ | ---------------- | ----------------------------------------------------------- |
4
+ | **> 3.0** | **Excellent** – strong return vs. drawdown |
5
+ | **2.0 – 3.0** | **Very Good** – solid risk-adjusted performance |
6
+ | **1.0 – 2.0** | **Acceptable** – decent, especially for volatile strategies |
7
+ | **< 1.0** | **Poor** – high drawdowns relative to return |
8
+ """
9
+
10
+
11
+ from investing_algorithm_framework.domain import BacktestReport
12
+ from .cagr import get_cagr
13
+ from .drawdown import get_max_drawdown
14
+
15
+
16
+ def get_calmar_ratio(report: BacktestReport):
17
+ """
18
+ Calculate the Calmar Ratio, which is the ratio of the annualized
19
+ return to the maximum drawdown.
20
+
21
+ Formula:
22
+ Calmar Ratio = CAGR / |Maximum Drawdown|
23
+
24
+ The Calmar Ratio is a measure of risk-adjusted return,
25
+ where a higher ratio indicates a more favorable risk-return profile.
26
+
27
+ Args:
28
+ report: An object that provides methods to get trades and equity curve.
29
+
30
+ Returns:
31
+ float: The Calmar Ratio.
32
+ """
33
+ cagr = get_cagr(report)
34
+ max_drawdown = get_max_drawdown(report)
35
+
36
+ if max_drawdown == 0 or max_drawdown is None:
37
+ return 0.0
38
+
39
+ return cagr / max_drawdown
@@ -79,7 +79,7 @@ def get_max_drawdown(backtest_report: BacktestReport) -> float:
79
79
  drawdown_pct = (equity - peak) / peak # Will be 0 or negative
80
80
  max_drawdown_pct = min(max_drawdown_pct, drawdown_pct)
81
81
 
82
- return max_drawdown_pct * 100.0 # Return as percentage (e.g., -10.0)
82
+ return abs(max_drawdown_pct)
83
83
 
84
84
 
85
85
  def get_max_drawdown_absolute(backtest_report: BacktestReport) -> float:
@@ -110,4 +110,4 @@ def get_max_drawdown_absolute(backtest_report: BacktestReport) -> float:
110
110
  drawdown = peak - equity # Drop from peak
111
111
  max_drawdown = max(max_drawdown, drawdown)
112
112
 
113
- return max_drawdown
113
+ return abs(max_drawdown) # Return as positive number (e.g., €10,000)
@@ -53,3 +53,23 @@ def get_average_trade_duration(report: BacktestReport):
53
53
 
54
54
  average_trade_duration = total_duration / len(trades)
55
55
  return average_trade_duration.total_seconds() / 3600.0 # Convert to hours
56
+
57
+
58
+ def get_trade_frequency(report: BacktestReport):
59
+ """
60
+ Calculates the trade frequency as the number of trades per day
61
+ during the backtest period.
62
+
63
+ Returns:
64
+ A float representing the average number of trades per day.
65
+ """
66
+ trades = report.get_trades()
67
+
68
+ if not trades:
69
+ return 0.0
70
+
71
+ total_days = (report.backtest_end_date - report.backtest_start_date).days + 1
72
+ if total_days <= 0:
73
+ return 0.0
74
+
75
+ return len(trades) / total_days
@@ -0,0 +1,81 @@
1
+ """
2
+ | Metric | High Value Means... | Weakness if Used Alone |
3
+ | ------------------ | --------------------------- | ----------------------------------- |
4
+ | **Win Rate** | Many trades are profitable | Doesn't say how big wins/losses are |
5
+ | **Win/Loss Ratio** | Big wins relative to losses | Doesn’t say how *often* you win |
6
+
7
+
8
+ Example of Non-Overlap:
9
+ Strategy A: 90% win rate, but average win is $1, average loss is $10 → not profitable.
10
+
11
+ Strategy B: 30% win rate, but average win is $300, average loss is $50 → highly profitable.
12
+ """
13
+
14
+ from investing_algorithm_framework import BacktestReport, TradeStatus
15
+
16
+
17
+ def get_win_rate(backtest_report: BacktestReport) -> float:
18
+ """
19
+ Calculate the win rate of the portfolio based on the backtest report.
20
+
21
+ Win Rate is defined as the percentage of trades that were profitable.
22
+ The percentage of trades that are profitable.
23
+
24
+ Formula:
25
+ Win Rate = (Number of Profitable Trades / Total Number of Trades) * 100
26
+
27
+ Example: If 60 out of 100 trades are profitable, the win rate is 60%.
28
+
29
+ Args:
30
+ backtest_report (BacktestReport): The backtest report containing
31
+ trade history.
32
+
33
+ Returns:
34
+ float: The win rate as a percentage (e.g., 75.0 for 75% win rate).
35
+ """
36
+ return backtest_report.percentage_positive_trades
37
+
38
+
39
+ def get_win_loss_ratio(backtest_report: BacktestReport) -> float:
40
+ """
41
+ Calculate the win/loss ratio of the portfolio based on the backtest report.
42
+
43
+ Win/Loss Ratio is defined as the average profit of winning trades divided by
44
+ the average loss of losing trades.
45
+
46
+ Formula:
47
+ Win/Loss Ratio = Average Profit of Winning Trades
48
+ / Average Loss of Losing Trades
49
+
50
+ Example: If the average profit of winning trades is $200 and the
51
+ average loss of losing trades is $100, the win/loss ratio is 2.0.
52
+
53
+ Args:
54
+ backtest_report (BacktestReport): The backtest report containing
55
+ trade history.
56
+
57
+ Returns:
58
+ float: The win/loss ratio.
59
+ """
60
+ trades = backtest_report.get_trades(trade_status=TradeStatus.CLOSED)
61
+
62
+ if not trades:
63
+ return 0.0
64
+
65
+ # Separate winning and losing trades
66
+ winning_trades = [t for t in trades if t.net_gain > 0]
67
+ losing_trades = [t for t in trades if t.net_gain < 0]
68
+
69
+ if not winning_trades or not losing_trades:
70
+ return 0.0
71
+
72
+ # Compute averages
73
+ avg_win = sum(t.net_gain for t in winning_trades) / len(winning_trades)
74
+ avg_loss = abs(
75
+ sum(t.net_gain for t in losing_trades) / len(losing_trades))
76
+
77
+ # Avoid division by zero
78
+ if avg_loss == 0:
79
+ return float('inf')
80
+
81
+ return avg_win / avg_loss
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "investing-algorithm-framework"
3
- version = "v6.7.1"
3
+ version = "v6.8.0"
4
4
  description = "A framework for creating trading bots"
5
5
  authors = ["MDUYN"]
6
6
  readme = "README.md"