investing-algorithm-framework 6.5.0__tar.gz → 7.25.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 (323) hide show
  1. investing_algorithm_framework-7.25.0/PKG-INFO +533 -0
  2. investing_algorithm_framework-7.25.0/README.md +497 -0
  3. investing_algorithm_framework-7.25.0/investing_algorithm_framework/__init__.py +203 -0
  4. investing_algorithm_framework-7.25.0/investing_algorithm_framework/app/__init__.py +47 -0
  5. investing_algorithm_framework-7.25.0/investing_algorithm_framework/app/algorithm/__init__.py +7 -0
  6. investing_algorithm_framework-7.25.0/investing_algorithm_framework/app/algorithm/algorithm.py +241 -0
  7. investing_algorithm_framework-7.25.0/investing_algorithm_framework/app/algorithm/algorithm_factory.py +114 -0
  8. investing_algorithm_framework-7.25.0/investing_algorithm_framework/app/analysis/__init__.py +15 -0
  9. investing_algorithm_framework-7.25.0/investing_algorithm_framework/app/analysis/algorithm_id.py +40 -0
  10. investing_algorithm_framework-7.25.0/investing_algorithm_framework/app/analysis/backtest_data_ranges.py +293 -0
  11. investing_algorithm_framework-7.25.0/investing_algorithm_framework/app/analysis/permutation.py +135 -0
  12. investing_algorithm_framework-7.25.0/investing_algorithm_framework/app/analysis/ranking.py +298 -0
  13. investing_algorithm_framework-7.25.0/investing_algorithm_framework/app/app.py +2292 -0
  14. investing_algorithm_framework-7.25.0/investing_algorithm_framework/app/app_hook.py +28 -0
  15. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/app/context.py +369 -94
  16. investing_algorithm_framework-7.25.0/investing_algorithm_framework/app/eventloop.py +620 -0
  17. investing_algorithm_framework-7.25.0/investing_algorithm_framework/app/reporting/__init__.py +27 -0
  18. investing_algorithm_framework-6.5.0/investing_algorithm_framework/domain/utils/backtesting.py → investing_algorithm_framework-7.25.0/investing_algorithm_framework/app/reporting/ascii.py +92 -433
  19. investing_algorithm_framework-7.25.0/investing_algorithm_framework/app/reporting/backtest_report.py +349 -0
  20. investing_algorithm_framework-7.25.0/investing_algorithm_framework/app/reporting/charts/__init__.py +19 -0
  21. investing_algorithm_framework-7.25.0/investing_algorithm_framework/app/reporting/charts/entry_exist_signals.py +66 -0
  22. investing_algorithm_framework-7.25.0/investing_algorithm_framework/app/reporting/charts/equity_curve.py +37 -0
  23. investing_algorithm_framework-7.25.0/investing_algorithm_framework/app/reporting/charts/equity_curve_drawdown.py +74 -0
  24. investing_algorithm_framework-7.25.0/investing_algorithm_framework/app/reporting/charts/line_chart.py +11 -0
  25. investing_algorithm_framework-7.25.0/investing_algorithm_framework/app/reporting/charts/monthly_returns_heatmap.py +70 -0
  26. investing_algorithm_framework-7.25.0/investing_algorithm_framework/app/reporting/charts/ohlcv_data_completeness.py +51 -0
  27. investing_algorithm_framework-7.25.0/investing_algorithm_framework/app/reporting/charts/rolling_sharp_ratio.py +79 -0
  28. investing_algorithm_framework-7.25.0/investing_algorithm_framework/app/reporting/charts/yearly_returns_barchart.py +55 -0
  29. investing_algorithm_framework-7.25.0/investing_algorithm_framework/app/reporting/generate.py +185 -0
  30. investing_algorithm_framework-7.25.0/investing_algorithm_framework/app/reporting/tables/__init__.py +11 -0
  31. investing_algorithm_framework-7.25.0/investing_algorithm_framework/app/reporting/tables/key_metrics_table.py +217 -0
  32. investing_algorithm_framework-7.25.0/investing_algorithm_framework/app/reporting/tables/time_metrics_table.py +80 -0
  33. investing_algorithm_framework-7.25.0/investing_algorithm_framework/app/reporting/tables/trade_metrics_table.py +147 -0
  34. investing_algorithm_framework-7.25.0/investing_algorithm_framework/app/reporting/tables/trades_table.py +75 -0
  35. investing_algorithm_framework-7.25.0/investing_algorithm_framework/app/reporting/tables/utils.py +29 -0
  36. investing_algorithm_framework-7.25.0/investing_algorithm_framework/app/reporting/templates/report_template.html.j2 +154 -0
  37. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/app/stateless/action_handlers/__init__.py +4 -2
  38. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/app/stateless/action_handlers/action_handler_strategy.py +1 -1
  39. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/app/stateless/action_handlers/check_online_handler.py +1 -1
  40. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/app/stateless/action_handlers/run_strategy_handler.py +13 -7
  41. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/app/strategy.py +363 -189
  42. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/app/task.py +5 -3
  43. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/cli/cli.py +87 -5
  44. investing_algorithm_framework-7.25.0/investing_algorithm_framework/cli/deploy_to_aws_lambda.py +501 -0
  45. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/cli/deploy_to_azure_function.py +0 -1
  46. investing_algorithm_framework-7.25.0/investing_algorithm_framework/cli/initialize_app.py +603 -0
  47. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/cli/templates/app.py.template +1 -7
  48. investing_algorithm_framework-7.25.0/investing_algorithm_framework/cli/templates/app_aws_lambda_function.py.template +48 -0
  49. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/cli/templates/app_azure_function.py.template +1 -7
  50. investing_algorithm_framework-6.5.0/investing_algorithm_framework/cli/templates/app-web.py.template → investing_algorithm_framework-7.25.0/investing_algorithm_framework/cli/templates/app_web.py.template +1 -0
  51. investing_algorithm_framework-7.25.0/investing_algorithm_framework/cli/templates/aws_lambda_dockerfile.template +22 -0
  52. investing_algorithm_framework-7.25.0/investing_algorithm_framework/cli/templates/aws_lambda_dockerignore.template +92 -0
  53. investing_algorithm_framework-7.25.0/investing_algorithm_framework/cli/templates/aws_lambda_readme.md.template +110 -0
  54. investing_algorithm_framework-7.25.0/investing_algorithm_framework/cli/templates/aws_lambda_requirements.txt.template +2 -0
  55. investing_algorithm_framework-7.25.0/investing_algorithm_framework/cli/templates/azure_function_requirements.txt.template +3 -0
  56. investing_algorithm_framework-7.25.0/investing_algorithm_framework/cli/templates/env.example.template +2 -0
  57. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/cli/templates/readme.md.template +1 -1
  58. investing_algorithm_framework-7.25.0/investing_algorithm_framework/cli/templates/requirements.txt.template +2 -0
  59. investing_algorithm_framework-7.25.0/investing_algorithm_framework/cli/templates/run_backtest.py.template +20 -0
  60. investing_algorithm_framework-7.25.0/investing_algorithm_framework/cli/validate_backtest_checkpoints.py +197 -0
  61. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/create_app.py +3 -5
  62. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/dependency_container.py +33 -37
  63. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/domain/__init__.py +58 -52
  64. investing_algorithm_framework-7.25.0/investing_algorithm_framework/domain/backtesting/__init__.py +25 -0
  65. investing_algorithm_framework-7.25.0/investing_algorithm_framework/domain/backtesting/backtest.py +548 -0
  66. investing_algorithm_framework-7.25.0/investing_algorithm_framework/domain/backtesting/backtest_date_range.py +113 -0
  67. investing_algorithm_framework-7.25.0/investing_algorithm_framework/domain/backtesting/backtest_evaluation_focuss.py +241 -0
  68. investing_algorithm_framework-7.25.0/investing_algorithm_framework/domain/backtesting/backtest_metrics.py +470 -0
  69. investing_algorithm_framework-7.25.0/investing_algorithm_framework/domain/backtesting/backtest_permutation_test.py +275 -0
  70. investing_algorithm_framework-7.25.0/investing_algorithm_framework/domain/backtesting/backtest_run.py +663 -0
  71. investing_algorithm_framework-7.25.0/investing_algorithm_framework/domain/backtesting/backtest_summary_metrics.py +162 -0
  72. investing_algorithm_framework-7.25.0/investing_algorithm_framework/domain/backtesting/backtest_utils.py +198 -0
  73. investing_algorithm_framework-7.25.0/investing_algorithm_framework/domain/backtesting/combine_backtests.py +290 -0
  74. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/domain/config.py +27 -0
  75. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/domain/constants.py +9 -33
  76. investing_algorithm_framework-7.25.0/investing_algorithm_framework/domain/data_provider.py +334 -0
  77. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/domain/exceptions.py +34 -1
  78. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/domain/models/__init__.py +15 -20
  79. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/domain/models/base_model.py +0 -6
  80. investing_algorithm_framework-7.25.0/investing_algorithm_framework/domain/models/data/__init__.py +7 -0
  81. investing_algorithm_framework-7.25.0/investing_algorithm_framework/domain/models/data/data_source.py +222 -0
  82. investing_algorithm_framework-6.5.0/investing_algorithm_framework/domain/models/market_data_type.py → investing_algorithm_framework-7.25.0/investing_algorithm_framework/domain/models/data/data_type.py +7 -7
  83. investing_algorithm_framework-7.25.0/investing_algorithm_framework/domain/models/event.py +35 -0
  84. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/domain/models/market/market_credential.py +7 -8
  85. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/domain/models/order/order.py +34 -13
  86. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/domain/models/order/order_status.py +1 -1
  87. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/domain/models/order/order_type.py +1 -1
  88. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/domain/models/portfolio/portfolio.py +14 -1
  89. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/domain/models/portfolio/portfolio_configuration.py +5 -1
  90. investing_algorithm_framework-7.25.0/investing_algorithm_framework/domain/models/portfolio/portfolio_snapshot.py +208 -0
  91. investing_algorithm_framework-7.25.0/investing_algorithm_framework/domain/models/position/__init__.py +5 -0
  92. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/domain/models/position/position.py +9 -0
  93. investing_algorithm_framework-7.25.0/investing_algorithm_framework/domain/models/position/position_size.py +41 -0
  94. investing_algorithm_framework-7.25.0/investing_algorithm_framework/domain/models/risk_rules/__init__.py +7 -0
  95. investing_algorithm_framework-7.25.0/investing_algorithm_framework/domain/models/risk_rules/stop_loss_rule.py +51 -0
  96. investing_algorithm_framework-7.25.0/investing_algorithm_framework/domain/models/risk_rules/take_profit_rule.py +55 -0
  97. investing_algorithm_framework-7.25.0/investing_algorithm_framework/domain/models/snapshot_interval.py +45 -0
  98. investing_algorithm_framework-7.25.0/investing_algorithm_framework/domain/models/strategy_profile.py +33 -0
  99. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/domain/models/time_frame.py +7 -0
  100. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/domain/models/time_interval.py +33 -0
  101. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/domain/models/time_unit.py +63 -1
  102. investing_algorithm_framework-7.25.0/investing_algorithm_framework/domain/models/tracing/__init__.py +0 -0
  103. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/domain/models/trade/__init__.py +0 -2
  104. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/domain/models/trade/trade.py +64 -111
  105. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/domain/models/trade/trade_status.py +8 -2
  106. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/domain/models/trade/trade_stop_loss.py +130 -39
  107. investing_algorithm_framework-7.25.0/investing_algorithm_framework/domain/models/trade/trade_take_profit.py +365 -0
  108. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/domain/order_executor.py +25 -0
  109. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/domain/portfolio_provider.py +30 -1
  110. investing_algorithm_framework-7.25.0/investing_algorithm_framework/domain/services/__init__.py +11 -0
  111. investing_algorithm_framework-7.25.0/investing_algorithm_framework/domain/strategy.py +44 -0
  112. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/domain/utils/__init__.py +8 -12
  113. investing_algorithm_framework-7.25.0/investing_algorithm_framework/domain/utils/custom_tqdm.py +22 -0
  114. investing_algorithm_framework-7.25.0/investing_algorithm_framework/domain/utils/dates.py +57 -0
  115. investing_algorithm_framework-7.25.0/investing_algorithm_framework/domain/utils/jupyter_notebook_detection.py +19 -0
  116. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/domain/utils/polars.py +19 -16
  117. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/download_data.py +44 -10
  118. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/infrastructure/__init__.py +16 -20
  119. investing_algorithm_framework-7.25.0/investing_algorithm_framework/infrastructure/data_providers/__init__.py +36 -0
  120. investing_algorithm_framework-7.25.0/investing_algorithm_framework/infrastructure/data_providers/ccxt.py +1152 -0
  121. investing_algorithm_framework-7.25.0/investing_algorithm_framework/infrastructure/data_providers/csv.py +568 -0
  122. investing_algorithm_framework-7.25.0/investing_algorithm_framework/infrastructure/data_providers/pandas.py +599 -0
  123. investing_algorithm_framework-7.25.0/investing_algorithm_framework/infrastructure/database/__init__.py +10 -0
  124. investing_algorithm_framework-7.25.0/investing_algorithm_framework/infrastructure/database/sql_alchemy.py +127 -0
  125. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/infrastructure/models/__init__.py +0 -10
  126. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/infrastructure/models/order/order.py +9 -3
  127. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/infrastructure/models/portfolio/portfolio_snapshot.py +8 -0
  128. investing_algorithm_framework-7.25.0/investing_algorithm_framework/infrastructure/models/trades/trade_stop_loss.py +59 -0
  129. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/infrastructure/models/trades/trade_take_profit.py +21 -7
  130. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/infrastructure/order_executors/__init__.py +2 -0
  131. investing_algorithm_framework-7.25.0/investing_algorithm_framework/infrastructure/order_executors/backtest_oder_executor.py +28 -0
  132. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/infrastructure/order_executors/ccxt_order_executor.py +45 -1
  133. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/infrastructure/portfolio_providers/ccxt_portfolio_provider.py +56 -1
  134. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/infrastructure/repositories/repository.py +16 -2
  135. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/infrastructure/repositories/trade_repository.py +2 -2
  136. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/infrastructure/repositories/trade_stop_loss_repository.py +6 -0
  137. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/infrastructure/repositories/trade_take_profit_repository.py +6 -0
  138. investing_algorithm_framework-7.25.0/investing_algorithm_framework/infrastructure/services/__init__.py +9 -0
  139. investing_algorithm_framework-7.25.0/investing_algorithm_framework/infrastructure/services/aws/__init__.py +6 -0
  140. investing_algorithm_framework-7.25.0/investing_algorithm_framework/infrastructure/services/aws/state_handler.py +193 -0
  141. investing_algorithm_framework-7.25.0/investing_algorithm_framework/infrastructure/services/backtesting/backtest_service.py +1503 -0
  142. investing_algorithm_framework-7.25.0/investing_algorithm_framework/infrastructure/services/backtesting/vector_backtest_service.py +393 -0
  143. investing_algorithm_framework-7.25.0/investing_algorithm_framework/services/__init__.py +135 -0
  144. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/services/configuration_service.py +14 -4
  145. investing_algorithm_framework-7.25.0/investing_algorithm_framework/services/data_providers/__init__.py +5 -0
  146. investing_algorithm_framework-7.25.0/investing_algorithm_framework/services/data_providers/data_provider_service.py +1058 -0
  147. investing_algorithm_framework-7.25.0/investing_algorithm_framework/services/metrics/__init__.py +118 -0
  148. investing_algorithm_framework-7.25.0/investing_algorithm_framework/services/metrics/alpha.py +0 -0
  149. investing_algorithm_framework-7.25.0/investing_algorithm_framework/services/metrics/beta.py +0 -0
  150. investing_algorithm_framework-7.25.0/investing_algorithm_framework/services/metrics/cagr.py +60 -0
  151. investing_algorithm_framework-7.25.0/investing_algorithm_framework/services/metrics/calmar_ratio.py +40 -0
  152. investing_algorithm_framework-7.25.0/investing_algorithm_framework/services/metrics/drawdown.py +181 -0
  153. investing_algorithm_framework-7.25.0/investing_algorithm_framework/services/metrics/equity_curve.py +24 -0
  154. investing_algorithm_framework-7.25.0/investing_algorithm_framework/services/metrics/exposure.py +210 -0
  155. investing_algorithm_framework-7.25.0/investing_algorithm_framework/services/metrics/generate.py +358 -0
  156. investing_algorithm_framework-7.25.0/investing_algorithm_framework/services/metrics/mean_daily_return.py +84 -0
  157. investing_algorithm_framework-7.25.0/investing_algorithm_framework/services/metrics/profit_factor.py +165 -0
  158. investing_algorithm_framework-7.25.0/investing_algorithm_framework/services/metrics/recovery.py +113 -0
  159. investing_algorithm_framework-7.25.0/investing_algorithm_framework/services/metrics/returns.py +452 -0
  160. investing_algorithm_framework-7.25.0/investing_algorithm_framework/services/metrics/risk_free_rate.py +28 -0
  161. investing_algorithm_framework-7.25.0/investing_algorithm_framework/services/metrics/sharpe_ratio.py +137 -0
  162. investing_algorithm_framework-7.25.0/investing_algorithm_framework/services/metrics/sortino_ratio.py +74 -0
  163. investing_algorithm_framework-7.25.0/investing_algorithm_framework/services/metrics/standard_deviation.py +156 -0
  164. investing_algorithm_framework-7.25.0/investing_algorithm_framework/services/metrics/trades.py +473 -0
  165. investing_algorithm_framework-7.25.0/investing_algorithm_framework/services/metrics/treynor_ratio.py +0 -0
  166. investing_algorithm_framework-7.25.0/investing_algorithm_framework/services/metrics/ulcer.py +0 -0
  167. investing_algorithm_framework-7.25.0/investing_algorithm_framework/services/metrics/value_at_risk.py +0 -0
  168. investing_algorithm_framework-7.25.0/investing_algorithm_framework/services/metrics/volatility.py +118 -0
  169. investing_algorithm_framework-7.25.0/investing_algorithm_framework/services/metrics/win_rate.py +177 -0
  170. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/services/order_service/order_backtest_service.py +30 -39
  171. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/services/order_service/order_service.py +11 -75
  172. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/services/portfolios/backtest_portfolio_service.py +11 -3
  173. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/services/portfolios/portfolio_provider_lookup.py +0 -2
  174. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/services/portfolios/portfolio_service.py +15 -27
  175. investing_algorithm_framework-7.25.0/investing_algorithm_framework/services/portfolios/portfolio_snapshot_service.py +136 -0
  176. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/services/portfolios/portfolio_sync_service.py +0 -4
  177. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/services/repository_service.py +5 -2
  178. investing_algorithm_framework-7.25.0/investing_algorithm_framework/services/trade_order_evaluator/__init__.py +9 -0
  179. investing_algorithm_framework-7.25.0/investing_algorithm_framework/services/trade_order_evaluator/backtest_trade_oder_evaluator.py +113 -0
  180. investing_algorithm_framework-7.25.0/investing_algorithm_framework/services/trade_order_evaluator/default_trade_order_evaluator.py +51 -0
  181. investing_algorithm_framework-7.25.0/investing_algorithm_framework/services/trade_order_evaluator/trade_order_evaluator.py +80 -0
  182. investing_algorithm_framework-7.25.0/investing_algorithm_framework/services/trade_service/__init__.py +9 -0
  183. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/services/trade_service/trade_service.py +53 -29
  184. investing_algorithm_framework-7.25.0/investing_algorithm_framework/services/trade_service/trade_stop_loss_service.py +39 -0
  185. investing_algorithm_framework-7.25.0/investing_algorithm_framework/services/trade_service/trade_take_profit_service.py +41 -0
  186. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/pyproject.toml +5 -2
  187. investing_algorithm_framework-6.5.0/PKG-INFO +0 -380
  188. investing_algorithm_framework-6.5.0/README.md +0 -346
  189. investing_algorithm_framework-6.5.0/investing_algorithm_framework/__init__.py +0 -88
  190. investing_algorithm_framework-6.5.0/investing_algorithm_framework/app/__init__.py +0 -18
  191. investing_algorithm_framework-6.5.0/investing_algorithm_framework/app/algorithm.py +0 -383
  192. investing_algorithm_framework-6.5.0/investing_algorithm_framework/app/app.py +0 -1224
  193. investing_algorithm_framework-6.5.0/investing_algorithm_framework/cli/initialize_app.py +0 -311
  194. investing_algorithm_framework-6.5.0/investing_algorithm_framework/cli/templates/app_web.py.template +0 -24
  195. investing_algorithm_framework-6.5.0/investing_algorithm_framework/cli/templates/env.example.template +0 -2
  196. investing_algorithm_framework-6.5.0/investing_algorithm_framework/cli/templates/requirements.txt.template +0 -2
  197. investing_algorithm_framework-6.5.0/investing_algorithm_framework/cli/templates/requirements_azure_function.txt.template +0 -3
  198. investing_algorithm_framework-6.5.0/investing_algorithm_framework/cli/templates/run_backtest.py.template +0 -13
  199. investing_algorithm_framework-6.5.0/investing_algorithm_framework/domain/data_provider.py +0 -187
  200. investing_algorithm_framework-6.5.0/investing_algorithm_framework/domain/metrics/__init__.py +0 -6
  201. investing_algorithm_framework-6.5.0/investing_algorithm_framework/domain/models/backtesting/__init__.py +0 -11
  202. investing_algorithm_framework-6.5.0/investing_algorithm_framework/domain/models/backtesting/backtest_date_range.py +0 -47
  203. investing_algorithm_framework-6.5.0/investing_algorithm_framework/domain/models/backtesting/backtest_position.py +0 -120
  204. investing_algorithm_framework-6.5.0/investing_algorithm_framework/domain/models/backtesting/backtest_report.py +0 -726
  205. investing_algorithm_framework-6.5.0/investing_algorithm_framework/domain/models/backtesting/backtest_reports_evaluation.py +0 -243
  206. investing_algorithm_framework-6.5.0/investing_algorithm_framework/domain/models/data_source.py +0 -21
  207. investing_algorithm_framework-6.5.0/investing_algorithm_framework/domain/models/date_range.py +0 -64
  208. investing_algorithm_framework-6.5.0/investing_algorithm_framework/domain/models/portfolio/portfolio_snapshot.py +0 -111
  209. investing_algorithm_framework-6.5.0/investing_algorithm_framework/domain/models/position/__init__.py +0 -4
  210. investing_algorithm_framework-6.5.0/investing_algorithm_framework/domain/models/strategy_profile.py +0 -165
  211. investing_algorithm_framework-6.5.0/investing_algorithm_framework/domain/models/trade/trade_risk_type.py +0 -34
  212. investing_algorithm_framework-6.5.0/investing_algorithm_framework/domain/models/trade/trade_take_profit.py +0 -279
  213. investing_algorithm_framework-6.5.0/investing_algorithm_framework/domain/models/trading_data_types.py +0 -48
  214. investing_algorithm_framework-6.5.0/investing_algorithm_framework/domain/models/trading_time_frame.py +0 -223
  215. investing_algorithm_framework-6.5.0/investing_algorithm_framework/domain/services/__init__.py +0 -20
  216. investing_algorithm_framework-6.5.0/investing_algorithm_framework/domain/services/market_data_sources.py +0 -542
  217. investing_algorithm_framework-6.5.0/investing_algorithm_framework/domain/services/market_service.py +0 -153
  218. investing_algorithm_framework-6.5.0/investing_algorithm_framework/domain/strategy.py +0 -72
  219. investing_algorithm_framework-6.5.0/investing_algorithm_framework/infrastructure/data_providers/__init__.py +0 -19
  220. investing_algorithm_framework-6.5.0/investing_algorithm_framework/infrastructure/data_providers/ccxt.py +0 -313
  221. investing_algorithm_framework-6.5.0/investing_algorithm_framework/infrastructure/data_providers/csv.py +0 -257
  222. investing_algorithm_framework-6.5.0/investing_algorithm_framework/infrastructure/database/__init__.py +0 -6
  223. investing_algorithm_framework-6.5.0/investing_algorithm_framework/infrastructure/database/sql_alchemy.py +0 -46
  224. investing_algorithm_framework-6.5.0/investing_algorithm_framework/infrastructure/models/market_data_sources/__init__.py +0 -12
  225. investing_algorithm_framework-6.5.0/investing_algorithm_framework/infrastructure/models/market_data_sources/ccxt.py +0 -731
  226. investing_algorithm_framework-6.5.0/investing_algorithm_framework/infrastructure/models/market_data_sources/csv.py +0 -270
  227. investing_algorithm_framework-6.5.0/investing_algorithm_framework/infrastructure/models/market_data_sources/pandas.py +0 -144
  228. investing_algorithm_framework-6.5.0/investing_algorithm_framework/infrastructure/models/market_data_sources/us_treasury_yield.py +0 -47
  229. investing_algorithm_framework-6.5.0/investing_algorithm_framework/infrastructure/models/trades/trade_stop_loss.py +0 -40
  230. investing_algorithm_framework-6.5.0/investing_algorithm_framework/infrastructure/services/__init__.py +0 -9
  231. investing_algorithm_framework-6.5.0/investing_algorithm_framework/infrastructure/services/market_service/__init__.py +0 -5
  232. investing_algorithm_framework-6.5.0/investing_algorithm_framework/infrastructure/services/market_service/ccxt_market_service.py +0 -471
  233. investing_algorithm_framework-6.5.0/investing_algorithm_framework/infrastructure/services/performance_service/__init__.py +0 -7
  234. investing_algorithm_framework-6.5.0/investing_algorithm_framework/infrastructure/services/performance_service/backtest_performance_service.py +0 -2
  235. investing_algorithm_framework-6.5.0/investing_algorithm_framework/infrastructure/services/performance_service/performance_service.py +0 -322
  236. investing_algorithm_framework-6.5.0/investing_algorithm_framework/services/__init__.py +0 -38
  237. investing_algorithm_framework-6.5.0/investing_algorithm_framework/services/backtesting/backtest_service.py +0 -953
  238. investing_algorithm_framework-6.5.0/investing_algorithm_framework/services/market_data_source_service/__init__.py +0 -10
  239. investing_algorithm_framework-6.5.0/investing_algorithm_framework/services/market_data_source_service/backtest_market_data_source_service.py +0 -207
  240. investing_algorithm_framework-6.5.0/investing_algorithm_framework/services/market_data_source_service/data_provider_service.py +0 -238
  241. investing_algorithm_framework-6.5.0/investing_algorithm_framework/services/market_data_source_service/market_data_source_service.py +0 -345
  242. investing_algorithm_framework-6.5.0/investing_algorithm_framework/services/portfolios/portfolio_snapshot_service.py +0 -67
  243. investing_algorithm_framework-6.5.0/investing_algorithm_framework/services/strategy_orchestrator_service.py +0 -277
  244. investing_algorithm_framework-6.5.0/investing_algorithm_framework/services/trade_service/__init__.py +0 -3
  245. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/LICENSE +0 -0
  246. /investing_algorithm_framework-6.5.0/investing_algorithm_framework/cli/__init__.py → /investing_algorithm_framework-7.25.0/investing_algorithm_framework/app/reporting/tables/stop_loss_table.py +0 -0
  247. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/app/stateless/__init__.py +0 -0
  248. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/app/stateless/exception_handler.py +0 -0
  249. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/app/web/__init__.py +0 -0
  250. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/app/web/controllers/__init__.py +0 -0
  251. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/app/web/controllers/orders.py +0 -0
  252. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/app/web/controllers/portfolio.py +0 -0
  253. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/app/web/controllers/positions.py +0 -0
  254. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/app/web/create_app.py +0 -0
  255. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/app/web/error_handler.py +0 -0
  256. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/app/web/responses.py +0 -0
  257. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/app/web/run_strategies.py +0 -0
  258. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/app/web/schemas/__init__.py +0 -0
  259. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/app/web/schemas/order.py +0 -0
  260. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/app/web/schemas/portfolio.py +0 -0
  261. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/app/web/schemas/position.py +0 -0
  262. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/app/web/setup_cors.py +0 -0
  263. {investing_algorithm_framework-6.5.0/investing_algorithm_framework/domain/models/tracing → investing_algorithm_framework-7.25.0/investing_algorithm_framework/cli}/__init__.py +0 -0
  264. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/cli/templates/.gitignore.template +0 -0
  265. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/cli/templates/azure_function_function_app.py.template +0 -0
  266. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/cli/templates/azure_function_host.json.template +0 -0
  267. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/cli/templates/azure_function_local.settings.json.template +0 -0
  268. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/cli/templates/data_providers.py.template +0 -0
  269. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/cli/templates/env_azure_function.example.template +0 -0
  270. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/cli/templates/market_data_providers.py.template +0 -0
  271. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/cli/templates/strategy.py.template +0 -0
  272. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/domain/data_structures.py +0 -0
  273. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/domain/decimal_parsing.py +0 -0
  274. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/domain/models/app_mode.py +0 -0
  275. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/domain/models/market/__init__.py +0 -0
  276. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/domain/models/order/__init__.py +0 -0
  277. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/domain/models/order/order_side.py +0 -0
  278. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/domain/models/portfolio/__init__.py +0 -0
  279. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/domain/models/position/position_snapshot.py +0 -0
  280. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/domain/models/tracing/trace.py +0 -0
  281. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/domain/services/market_credential_service.py +0 -0
  282. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/domain/services/portfolios/__init__.py +0 -0
  283. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/domain/services/portfolios/portfolio_sync_service.py +0 -0
  284. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/domain/services/rounding_service.py +0 -0
  285. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/domain/services/state_handler.py +0 -0
  286. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/domain/stateless_actions.py +0 -0
  287. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/domain/utils/csv.py +0 -0
  288. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/domain/utils/random.py +0 -0
  289. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/domain/utils/signatures.py +0 -0
  290. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/domain/utils/stoppable_thread.py +0 -0
  291. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/domain/utils/synchronized.py +0 -0
  292. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/infrastructure/models/decimal_parser.py +0 -0
  293. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/infrastructure/models/model_extension.py +0 -0
  294. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/infrastructure/models/order/__init__.py +0 -0
  295. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/infrastructure/models/order/order_metadata.py +0 -0
  296. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/infrastructure/models/order_trade_association.py +0 -0
  297. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/infrastructure/models/portfolio/__init__.py +0 -0
  298. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/infrastructure/models/portfolio/sql_portfolio.py +0 -0
  299. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/infrastructure/models/position/__init__.py +0 -0
  300. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/infrastructure/models/position/position.py +0 -0
  301. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/infrastructure/models/position/position_snapshot.py +0 -0
  302. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/infrastructure/models/trades/__init__.py +0 -0
  303. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/infrastructure/models/trades/trade.py +0 -0
  304. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/infrastructure/portfolio_providers/__init__.py +0 -0
  305. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/infrastructure/repositories/__init__.py +0 -0
  306. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/infrastructure/repositories/order_metadata_repository.py +0 -0
  307. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/infrastructure/repositories/order_repository.py +0 -0
  308. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/infrastructure/repositories/portfolio_repository.py +0 -0
  309. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/infrastructure/repositories/portfolio_snapshot_repository.py +0 -0
  310. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/infrastructure/repositories/position_repository.py +0 -0
  311. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/infrastructure/repositories/position_snapshot_repository.py +0 -0
  312. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/infrastructure/services/azure/__init__.py +0 -0
  313. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/infrastructure/services/azure/state_handler.py +0 -0
  314. {investing_algorithm_framework-6.5.0/investing_algorithm_framework → investing_algorithm_framework-7.25.0/investing_algorithm_framework/infrastructure}/services/backtesting/__init__.py +0 -0
  315. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/services/market_credential_service.py +0 -0
  316. {investing_algorithm_framework-6.5.0/investing_algorithm_framework/domain → investing_algorithm_framework-7.25.0/investing_algorithm_framework/services}/metrics/price_efficiency.py +0 -0
  317. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/services/order_service/__init__.py +0 -0
  318. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/services/order_service/order_executor_lookup.py +0 -0
  319. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/services/portfolios/__init__.py +0 -0
  320. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/services/portfolios/portfolio_configuration_service.py +0 -0
  321. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/services/positions/__init__.py +0 -0
  322. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/services/positions/position_service.py +0 -0
  323. {investing_algorithm_framework-6.5.0 → investing_algorithm_framework-7.25.0}/investing_algorithm_framework/services/positions/position_snapshot_service.py +0 -0
@@ -0,0 +1,533 @@
1
+ Metadata-Version: 2.1
2
+ Name: investing-algorithm-framework
3
+ Version: 7.25.0
4
+ Summary: A framework for creating trading bots
5
+ Author: MDUYN
6
+ Requires-Python: >=3.10
7
+ Classifier: Programming Language :: Python :: 3
8
+ Classifier: Programming Language :: Python :: 3.10
9
+ Classifier: Programming Language :: Python :: 3.11
10
+ Classifier: Programming Language :: Python :: 3.12
11
+ Requires-Dist: Flask (>=3.1.0)
12
+ Requires-Dist: Flask-Cors (>=3.0.9,<5.0.0)
13
+ Requires-Dist: Flask-Migrate (>=2.6.0)
14
+ Requires-Dist: SQLAlchemy (>=2.0.18)
15
+ Requires-Dist: azure-identity (>=1.19.0,<2.0.0)
16
+ Requires-Dist: azure-mgmt-resource (>=23.2.0,<24.0.0)
17
+ Requires-Dist: azure-mgmt-storage (>=21.2.1,<22.0.0)
18
+ Requires-Dist: azure-mgmt-web (>=7.3.1,<8.0.0)
19
+ Requires-Dist: azure-storage-blob (>=12.24.0,<13.0.0)
20
+ Requires-Dist: boto3 (>=1.38.41,<2.0.0)
21
+ Requires-Dist: ccxt (>=4.2.48)
22
+ Requires-Dist: dependency-injector (>=4.40.0)
23
+ Requires-Dist: jupyter (>=1.0.0)
24
+ Requires-Dist: marshmallow (>=3.5.0)
25
+ Requires-Dist: plotly (>=6.1.2,<7.0.0)
26
+ Requires-Dist: polars[numpy,pandas] (>=0.20.10)
27
+ Requires-Dist: python-dateutil (>=2.8.2)
28
+ Requires-Dist: python-dotenv (>=1.0.1,<2.0.0)
29
+ Requires-Dist: schedule (>=1.1.0)
30
+ Requires-Dist: tabulate (>=0.9.0)
31
+ Requires-Dist: tqdm (>=4.66.1)
32
+ Requires-Dist: wrapt (>=1.16.0)
33
+ Requires-Dist: yfinance (>=0.2.61,<0.3.0)
34
+ Description-Content-Type: text/markdown
35
+
36
+ <div align="center">
37
+ <h1>⚡ Investing Algorithm Framework</h1>
38
+
39
+ <p style="font-size: 18px; font-weight: 600; margin: 15px 0;">
40
+ 🚀 <b>Build. Backtest. Deploy.</b> Quantitative Trading Strategies at Scale
41
+ </p>
42
+
43
+ <p style="font-size: 14px; color: #666; margin-bottom: 25px;">
44
+ The fastest way to go from trading idea to production-ready trading bot
45
+ </p>
46
+
47
+ <!-- Quick Links -->
48
+ <div style="margin: 20px 0;">
49
+ <a target="_blank" href="https://coding-kitties.github.io/investing-algorithm-framework/">
50
+ <img src="https://img.shields.io/badge/📖_Documentation-blue?style=for-the-badge">
51
+ </a>
52
+ &nbsp;
53
+ <a href="https://coding-kitties.github.io/investing-algorithm-framework/Getting%20Started/installation">
54
+ <img src="https://img.shields.io/badge/🚀_Quick_Start-green?style=for-the-badge">
55
+ </a>
56
+ </div>
57
+
58
+ <!-- Badges -->
59
+ <div style="margin-bottom: 20px;">
60
+ <a target="_blank" href="https://discord.gg/dQsRmGZP"><img src="https://img.shields.io/discord/1345358169777635410.svg?color=7289da&label=Discord&logo=discord&style=flat-square" alt="Discord"></a>
61
+ &nbsp;
62
+ <a href="https://github.com/coding-kitties/investing-algorithm-framework/actions/workflows/test.yml"><img src="https://github.com/coding-kitties/investing-algorithm-framework/actions/workflows/test.yml/badge.svg?style=flat-square" alt="Tests"></a>
63
+ &nbsp;
64
+ <a href="https://pypi.org/project/investing-algorithm-framework/"><img src="https://img.shields.io/pypi/v/investing-algorithm-framework.svg?style=flat-square" alt="PyPI"></a>
65
+ &nbsp;
66
+ <a href="https://pepy.tech/project/investing-algorithm-framework"><img src="https://pepy.tech/badge/investing-algorithm-framework/month?style=flat-square" alt="Downloads"></a>
67
+ &nbsp;
68
+ <a href="https://github.com/coding-kitties/investing-algorithm-framework/stargazers"><img src="https://img.shields.io/github/stars/coding-kitties/investing-algorithm-framework?style=flat-square" alt="Stars"></a>
69
+ </div>
70
+
71
+ <img src="static/showcase.svg" alt="Investing Algorithm Framework" style="height: 400px; max-width: 100%; margin: 30px 0;">
72
+
73
+ <hr style="margin: 30px 0; border: none; border-top: 2px solid #ddd;">
74
+
75
+ > ⭐ **If you like this project, please consider [starring](https://github.com/coding-kitties/investing-algorithm-framework) it!** Your support helps us build better tools for the community.
76
+
77
+ </div>
78
+
79
+ ---
80
+
81
+ ## 💡 Why Investing Algorithm Framework?
82
+
83
+ Stop wasting time on boilerplate. The **Investing Algorithm Framework** handles all the heavy lifting:
84
+
85
+ ✨ **From Idea to Production** — Write your strategy once, deploy everywhere
86
+ 📊 **Accurate Backtesting** — Event-driven and vectorized engines for realistic results
87
+ ⚡ **Lightning Fast** — Optimized for speed and efficiency
88
+ 🔧 **Extensible** — Connect any exchange, broker, or data source
89
+ 📈 **Production Ready** — Built for real money trading
90
+
91
+ ## Sponsors
92
+
93
+ <a href="https://www.finterion.com/" target="_blank">
94
+ <picture style="height: 30px;">
95
+ <source media="(prefers-color-scheme: dark)" srcset="static/sponsors/finterion-dark.png">
96
+ <source media="(prefers-color-scheme: light)" srcset="static/sponsors/finterion-light.png">
97
+ <img src="static/sponsors/finterion-light.png" alt="Finterion Logo" width="200px" height="50px">
98
+ </picture>
99
+ </a>
100
+
101
+
102
+ ## 🔌 Plugins & Integrations
103
+
104
+ Extend your trading bot with powerful plugins:
105
+
106
+ | Plugin | Description |
107
+ |--------|-----------------------------------------------------------------------------|
108
+ | 🎯 **[PyIndicators](https://github.com/coding-kitties/PyIndicators)** | Technical analysis indicators for strategy development |
109
+ | 🏪 **[Finterion Plugin](https://github.com/Finterion/finterion-investing-algorithm-framework-plugin)** | Monetize & share your strategies with the public on Finterion's marketplace |
110
+
111
+ ## 🌟 Powerful Features
112
+
113
+ | Feature | Description |
114
+ |---------|-------------|
115
+ | 🐍 **Python 3.10+** | Cross-platform support for Windows, macOS, and Linux |
116
+ | ⚙️ **Event-Driven Backtest** | Accurate, realistic backtesting with event-driven architecture |
117
+ | ⚡ **Vectorized Backtest** | Lightning-fast signal research and prototyping |
118
+ | 📊 **Advanced Metrics** | CAGR, Sharpe ratio, max drawdown, win rate, and 50+ more metrics |
119
+ | 📈 **Backtest Reports** | Generate detailed, comparison-ready reports |
120
+ | 🎯 **Statistical Testing** | Permutation testing for strategy significance evaluation |
121
+ | 💱 **Live Trading** | Real-time execution across multiple exchanges (via CCXT) |
122
+ | 💼 **Portfolio Management** | Full position and trade management with persistence |
123
+ | 📉 **Market Data** | OHLCV, tickers, custom data — Polars & Pandas native |
124
+ | 🔗 **Data Integrations** | PyIndicators, multiple data sources, custom providers |
125
+ | ☁️ **Cloud Deployment** | Azure Functions, AWS Lambda, and more |
126
+ | 🌐 **Web API** | REST API for bot interaction and monitoring |
127
+ | 🧩 **Fully Extensible** | Custom strategies, data providers, order executors |
128
+ | 🏗️ **Modular Design** | Build with reusable, composable components |
129
+
130
+
131
+
132
+ ## 🚀 Quickstart
133
+
134
+ ### 📦 Installation
135
+
136
+ Install the framework via [PyPI](https://pypi.org/project/investing-algorithm-framework/):
137
+
138
+ ```bash
139
+ pip install investing-algorithm-framework
140
+ ```
141
+
142
+ ### 🎯 Initialize Your Project
143
+
144
+ Run the following command to scaffold a new trading bot:
145
+
146
+ ```bash
147
+ investing-algorithm-framework init
148
+ ```
149
+
150
+ For an AWS Lambda-ready project:
151
+
152
+ ```bash
153
+ investing-algorithm-framework init --type aws_lambda
154
+ ```
155
+
156
+ This creates:
157
+ - **app.py** — Your bot's entry point (keep as-is)
158
+ - **strategy.py** — Your trading strategy (customize this!)
159
+
160
+ > 💡 **Tip:** You can also create `default_web` or `azure_function` projects
161
+
162
+ ## 📈 Example: A Simple Trading Bot
163
+ The following example trading bot implements a simple moving average strategy.
164
+ The strategy will use data from bitvavo exchange and will calculate
165
+ the 20, 50 and 100 period exponential moving averages (EMA) and the
166
+ 14 period relative strength index (RSI).
167
+
168
+ > This example uses [PyIndicators](https://github.com/coding-kitties/pyindicators) for technical analysis.
169
+ > This dependency is not part of the framework, but is used to perform technical analysis on the dataframes.
170
+ > You can install it using pip: pip install pyindicators.
171
+
172
+ ```python
173
+ from typing import Dict, Any
174
+ from datetime import datetime, timezone
175
+
176
+ import pandas as pd
177
+ from pyindicators import ema, rsi, crossover, crossunder
178
+
179
+ from investing_algorithm_framework import TradingStrategy, DataSource, \
180
+ TimeUnit, DataType, PositionSize, create_app, RESOURCE_DIRECTORY, \
181
+ BacktestDateRange, BacktestReport, TakeProfitRule, StopLossRule
182
+
183
+
184
+ class RSIEMACrossoverStrategy(TradingStrategy):
185
+ time_unit = TimeUnit.HOUR
186
+ interval = 2
187
+ symbols = ["BTC"]
188
+ position_sizes = [
189
+ PositionSize(
190
+ symbol="BTC", percentage_of_portfolio=20.0
191
+ ),
192
+ PositionSize(
193
+ symbol="ETH", percentage_of_portfolio=20.0
194
+ )
195
+ ]
196
+ take_profits = [
197
+ TakeProfitRule(
198
+ symbol="BTC",
199
+ percentage_threshold=10,
200
+ trailing=True,
201
+ sell_percentage=100
202
+ ),
203
+ TakeProfitRule(
204
+ symbol="ETH",
205
+ percentage_threshold=10,
206
+ trailing=True,
207
+ sell_percentage=100
208
+ )
209
+ ]
210
+ stop_losses = [
211
+ StopLossRule(
212
+ symbol="BTC",
213
+ percentage_threshold=5,
214
+ trailing=False,
215
+ sell_percentage=100
216
+ ),
217
+ StopLossRule(
218
+ symbol="ETH",
219
+ percentage_threshold=5,
220
+ trailing=False,
221
+ sell_percentage=100
222
+ )
223
+ ]
224
+
225
+ def __init__(
226
+ self,
227
+ time_unit: TimeUnit,
228
+ interval: int,
229
+ market: str,
230
+ rsi_time_frame: str,
231
+ rsi_period: int,
232
+ rsi_overbought_threshold,
233
+ rsi_oversold_threshold,
234
+ ema_time_frame,
235
+ ema_short_period,
236
+ ema_long_period,
237
+ ema_cross_lookback_window: int = 10
238
+ ):
239
+ self.rsi_time_frame = rsi_time_frame
240
+ self.rsi_period = rsi_period
241
+ self.rsi_result_column = f"rsi_{self.rsi_period}"
242
+ self.rsi_overbought_threshold = rsi_overbought_threshold
243
+ self.rsi_oversold_threshold = rsi_oversold_threshold
244
+ self.ema_time_frame = ema_time_frame
245
+ self.ema_short_result_column = f"ema_{ema_short_period}"
246
+ self.ema_long_result_column = f"ema_{ema_long_period}"
247
+ self.ema_crossunder_result_column = "ema_crossunder"
248
+ self.ema_crossover_result_column = "ema_crossover"
249
+ self.ema_short_period = ema_short_period
250
+ self.ema_long_period = ema_long_period
251
+ self.ema_cross_lookback_window = ema_cross_lookback_window
252
+ data_sources = []
253
+
254
+ for symbol in self.symbols:
255
+ full_symbol = f"{symbol}/EUR"
256
+ data_sources.append(
257
+ DataSource(
258
+ identifier=f"{symbol}_rsi_data",
259
+ data_type=DataType.OHLCV,
260
+ time_frame=self.rsi_time_frame,
261
+ market=market,
262
+ symbol=full_symbol,
263
+ pandas=True,
264
+ window_size=800
265
+ )
266
+ )
267
+ data_sources.append(
268
+ DataSource(
269
+ identifier=f"{symbol}_ema_data",
270
+ data_type=DataType.OHLCV,
271
+ time_frame=self.ema_time_frame,
272
+ market=market,
273
+ symbol=full_symbol,
274
+ pandas=True,
275
+ window_size=800
276
+ )
277
+ )
278
+
279
+ super().__init__(
280
+ data_sources=data_sources, time_unit=time_unit, interval=interval
281
+ )
282
+
283
+ def _prepare_indicators(
284
+ self,
285
+ rsi_data,
286
+ ema_data
287
+ ):
288
+ """
289
+ Helper function to prepare the indicators
290
+ for the strategy. The indicators are calculated
291
+ using the pyindicators library: https://github.com/coding-kitties/PyIndicators
292
+ """
293
+ ema_data = ema(
294
+ ema_data,
295
+ period=self.ema_short_period,
296
+ source_column="Close",
297
+ result_column=self.ema_short_result_column
298
+ )
299
+ ema_data = ema(
300
+ ema_data,
301
+ period=self.ema_long_period,
302
+ source_column="Close",
303
+ result_column=self.ema_long_result_column
304
+ )
305
+ # Detect crossover (short EMA crosses above long EMA)
306
+ ema_data = crossover(
307
+ ema_data,
308
+ first_column=self.ema_short_result_column,
309
+ second_column=self.ema_long_result_column,
310
+ result_column=self.ema_crossover_result_column
311
+ )
312
+ # Detect crossunder (short EMA crosses below long EMA)
313
+ ema_data = crossunder(
314
+ ema_data,
315
+ first_column=self.ema_short_result_column,
316
+ second_column=self.ema_long_result_column,
317
+ result_column=self.ema_crossunder_result_column
318
+ )
319
+ rsi_data = rsi(
320
+ rsi_data,
321
+ period=self.rsi_period,
322
+ source_column="Close",
323
+ result_column=self.rsi_result_column
324
+ )
325
+
326
+ return ema_data, rsi_data
327
+
328
+ def generate_buy_signals(self, data: Dict[str, Any]) -> Dict[str, pd.Series]:
329
+ """
330
+ Generate buy signals based on the moving average crossover.
331
+
332
+ data (Dict[str, Any]): Dictionary containing all the data for
333
+ the strategy data sources.
334
+
335
+ Returns:
336
+ Dict[str, pd.Series]: A dictionary where keys are symbols and values
337
+ are pandas Series indicating buy signals (True/False).
338
+ """
339
+
340
+ signals = {}
341
+
342
+ for symbol in self.symbols:
343
+ ema_data_identifier = f"{symbol}_ema_data"
344
+ rsi_data_identifier = f"{symbol}_rsi_data"
345
+ ema_data, rsi_data = self._prepare_indicators(
346
+ data[ema_data_identifier].copy(),
347
+ data[rsi_data_identifier].copy()
348
+ )
349
+
350
+ # crossover confirmed
351
+ ema_crossover_lookback = ema_data[
352
+ self.ema_crossover_result_column].rolling(
353
+ window=self.ema_cross_lookback_window
354
+ ).max().astype(bool)
355
+
356
+ # use only RSI column
357
+ rsi_oversold = rsi_data[self.rsi_result_column] \
358
+ < self.rsi_oversold_threshold
359
+
360
+ buy_signal = rsi_oversold & ema_crossover_lookback
361
+ buy_signals = buy_signal.fillna(False).astype(bool)
362
+ signals[symbol] = buy_signals
363
+ return signals
364
+
365
+ def generate_sell_signals(self, data: Dict[str, Any]) -> Dict[str, pd.Series]:
366
+ """
367
+ Generate sell signals based on the moving average crossover.
368
+
369
+ Args:
370
+ data (Dict[str, Any]): Dictionary containing all the data for
371
+ the strategy data sources.
372
+
373
+ Returns:
374
+ Dict[str, pd.Series]: A dictionary where keys are symbols and values
375
+ are pandas Series indicating sell signals (True/False).
376
+ """
377
+
378
+ signals = {}
379
+ for symbol in self.symbols:
380
+ ema_data_identifier = f"{symbol}_ema_data"
381
+ rsi_data_identifier = f"{symbol}_rsi_data"
382
+ ema_data, rsi_data = self._prepare_indicators(
383
+ data[ema_data_identifier].copy(),
384
+ data[rsi_data_identifier].copy()
385
+ )
386
+
387
+ # Confirmed by crossover between short-term EMA and long-term EMA
388
+ # within a given lookback window
389
+ ema_crossunder_lookback = ema_data[
390
+ self.ema_crossunder_result_column].rolling(
391
+ window=self.ema_cross_lookback_window
392
+ ).max().astype(bool)
393
+
394
+ # use only RSI column
395
+ rsi_overbought = rsi_data[self.rsi_result_column] \
396
+ >= self.rsi_overbought_threshold
397
+
398
+ # Combine both conditions
399
+ sell_signal = rsi_overbought & ema_crossunder_lookback
400
+ sell_signal = sell_signal.fillna(False).astype(bool)
401
+ signals[symbol] = sell_signal
402
+ return signals
403
+
404
+
405
+ if __name__ == "__main__":
406
+ app = create_app()
407
+ app.add_strategy(
408
+ RSIEMACrossoverStrategy(
409
+ time_unit=TimeUnit.HOUR,
410
+ interval=2,
411
+ market="bitvavo",
412
+ rsi_time_frame="2h",
413
+ rsi_period=14,
414
+ rsi_overbought_threshold=70,
415
+ rsi_oversold_threshold=30,
416
+ ema_time_frame="2h",
417
+ ema_short_period=12,
418
+ ema_long_period=26,
419
+ ema_cross_lookback_window=10
420
+ )
421
+ )
422
+
423
+ # Market credentials for coinbase for both the portfolio connection and data sources will
424
+ # be read from .env file, when not registering a market credential object in the app.
425
+ app.add_market(
426
+ market="bitvavo",
427
+ trading_symbol="EUR",
428
+ )
429
+ backtest_range = BacktestDateRange(
430
+ start_date=datetime(2023, 1, 1, tzinfo=timezone.utc),
431
+ end_date=datetime(2024, 6, 1, tzinfo=timezone.utc)
432
+ )
433
+ backtest = app.run_backtest(
434
+ backtest_date_range=backtest_range, initial_amount=1000
435
+ )
436
+ report = BacktestReport(backtest)
437
+ report.show(backtest_date_range=backtest_range, browser=True)
438
+ ```
439
+
440
+ > You can find more examples [here](./examples) folder.
441
+
442
+ ## 📚 Documentation
443
+ Comprehensive documentation is available at [github pages](https://coding-kitties.github.io/investing-algorithm-framework/).
444
+
445
+ ## 🛠️ Development
446
+
447
+ ### Setup
448
+
449
+ Clone the repository and install dependencies using Poetry:
450
+
451
+ > Make sure you have [Poetry](https://python-poetry.org/docs/#installation) installed.
452
+
453
+ ```bash
454
+ git clone https://github.com/coding-kitties/investing-algorithm-framework.git
455
+ cd investing-algorithm-framework
456
+ poetry install
457
+ ```
458
+
459
+ ### Running Tests
460
+
461
+ ```bash
462
+ # Run all tests
463
+ python -m unittest discover -s tests
464
+
465
+ # Run specific test
466
+ python -m unittest tests.services.test_trade_service.TestTradeService
467
+ ```
468
+
469
+ ## ⚠️ Risk Disclaimer
470
+
471
+ 🚨 **Use at Your Own Risk**
472
+
473
+ If you use this framework for your investments, **do not risk money which you are afraid to lose** until you have a clear understanding of how the framework works.
474
+
475
+ **BEFORE YOU START USING MONEY WITH THE FRAMEWORK:**
476
+ - ✅ Test your strategies thoroughly with backtesting
477
+ - ✅ Review the source code of any plugins you use
478
+ - ✅ Start with small amounts on paper trading first
479
+ - ✅ Understand the risks involved
480
+
481
+ **We assume no responsibility for your investment results. The authors and all affiliates disclaim any liability for losses.**
482
+
483
+ ---
484
+
485
+ ## 🤝 Contributing
486
+
487
+ The investing algorithm framework is a **community-driven project**. We welcome contributions at all levels:
488
+
489
+ - 🐛 **Found a bug?** [Open an issue](https://github.com/coding-kitties/investing-algorithm-framework/issues/new)
490
+ - 💡 **Have an idea?** [Share it with us](https://github.com/coding-kitties/investing-algorithm-framework/issues/new)
491
+ - 🔧 **Want to code?** Check the [project board](https://github.com/coding-kitties/investing-algorithm-framework/projects?query=is%3Aopen)
492
+
493
+ **Guidelines:**
494
+ - Read the [Contributing Guide](https://coding-kitties.github.io/investing-algorithm-framework/Contributing%20Guide/contributing)
495
+ - Always create PRs against the `develop` branch, not `main`
496
+ - Open an issue before starting major feature work
497
+
498
+ ---
499
+
500
+ ## 📚 Documentation
501
+
502
+ Comprehensive documentation is available at [GitHub Pages](https://coding-kitties.github.io/investing-algorithm-framework/)
503
+
504
+ ---
505
+
506
+ ## 📬 Community
507
+
508
+ Join us and connect with other traders and developers:
509
+
510
+ * 💬 [Discord Community](https://discord.gg/dQsRmGZP) — Real-time chat and support
511
+ * 🔗 [Reddit Community](https://www.reddit.com/r/InvestingBots/) — Share strategies and discuss
512
+ * 📖 [Documentation](https://coding-kitties.github.io/investing-algorithm-framework/) — Guides and API references
513
+
514
+ ---
515
+
516
+ ## 🏆 Acknowledgements
517
+
518
+ We want to thank all contributors to this project. A full list can be found in [AUTHORS.md](https://github.com/coding-kitties/investing-algorithm-framework/blob/master/AUTHORS.md)
519
+
520
+ ### Report Issues
521
+
522
+ If you discover a bug in the framework, please [search our issue tracker](https://github.com/coding-kitties/investing-algorithm-framework/issues?q=is%3Aissue) first. If it hasn't been reported, please [create a new issue](https://github.com/coding-kitties/investing-algorithm-framework/issues/new).
523
+
524
+ ---
525
+
526
+ <div align="center">
527
+ <p>
528
+ <a href="https://github.com/coding-kitties/investing-algorithm-framework/stargazers">⭐ Star us on GitHub</a> ·
529
+ <a href="https://discord.gg/dQsRmGZP">💬 Join Discord</a> ·
530
+ <a href="https://github.com/coding-kitties/investing-algorithm-framework/issues/new">🐛 Report Bug</a>
531
+ </p>
532
+ </div>
533
+