investing-algorithm-framework 1.3.1__py3-none-any.whl → 7.25.6__py3-none-any.whl

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 (282) hide show
  1. investing_algorithm_framework/__init__.py +195 -16
  2. investing_algorithm_framework/analysis/__init__.py +16 -0
  3. investing_algorithm_framework/analysis/backtest_data_ranges.py +202 -0
  4. investing_algorithm_framework/analysis/data.py +170 -0
  5. investing_algorithm_framework/analysis/markdown.py +91 -0
  6. investing_algorithm_framework/analysis/ranking.py +298 -0
  7. investing_algorithm_framework/app/__init__.py +31 -4
  8. investing_algorithm_framework/app/algorithm/__init__.py +7 -0
  9. investing_algorithm_framework/app/algorithm/algorithm.py +193 -0
  10. investing_algorithm_framework/app/algorithm/algorithm_factory.py +118 -0
  11. investing_algorithm_framework/app/app.py +2233 -264
  12. investing_algorithm_framework/app/app_hook.py +28 -0
  13. investing_algorithm_framework/app/context.py +1724 -0
  14. investing_algorithm_framework/app/eventloop.py +620 -0
  15. investing_algorithm_framework/app/reporting/__init__.py +27 -0
  16. investing_algorithm_framework/app/reporting/ascii.py +921 -0
  17. investing_algorithm_framework/app/reporting/backtest_report.py +349 -0
  18. investing_algorithm_framework/app/reporting/charts/__init__.py +19 -0
  19. investing_algorithm_framework/app/reporting/charts/entry_exist_signals.py +66 -0
  20. investing_algorithm_framework/app/reporting/charts/equity_curve.py +37 -0
  21. investing_algorithm_framework/app/reporting/charts/equity_curve_drawdown.py +74 -0
  22. investing_algorithm_framework/app/reporting/charts/line_chart.py +11 -0
  23. investing_algorithm_framework/app/reporting/charts/monthly_returns_heatmap.py +70 -0
  24. investing_algorithm_framework/app/reporting/charts/ohlcv_data_completeness.py +51 -0
  25. investing_algorithm_framework/app/reporting/charts/rolling_sharp_ratio.py +79 -0
  26. investing_algorithm_framework/app/reporting/charts/yearly_returns_barchart.py +55 -0
  27. investing_algorithm_framework/app/reporting/generate.py +185 -0
  28. investing_algorithm_framework/app/reporting/tables/__init__.py +11 -0
  29. investing_algorithm_framework/app/reporting/tables/key_metrics_table.py +217 -0
  30. investing_algorithm_framework/app/reporting/tables/stop_loss_table.py +0 -0
  31. investing_algorithm_framework/app/reporting/tables/time_metrics_table.py +80 -0
  32. investing_algorithm_framework/app/reporting/tables/trade_metrics_table.py +147 -0
  33. investing_algorithm_framework/app/reporting/tables/trades_table.py +75 -0
  34. investing_algorithm_framework/app/reporting/tables/utils.py +29 -0
  35. investing_algorithm_framework/app/reporting/templates/report_template.html.j2 +154 -0
  36. investing_algorithm_framework/app/stateless/action_handlers/__init__.py +6 -3
  37. investing_algorithm_framework/app/stateless/action_handlers/action_handler_strategy.py +1 -1
  38. investing_algorithm_framework/app/stateless/action_handlers/check_online_handler.py +2 -1
  39. investing_algorithm_framework/app/stateless/action_handlers/run_strategy_handler.py +14 -7
  40. investing_algorithm_framework/app/stateless/exception_handler.py +1 -1
  41. investing_algorithm_framework/app/strategy.py +873 -52
  42. investing_algorithm_framework/app/task.py +5 -3
  43. investing_algorithm_framework/app/web/__init__.py +2 -1
  44. investing_algorithm_framework/app/web/controllers/__init__.py +2 -2
  45. investing_algorithm_framework/app/web/controllers/orders.py +4 -3
  46. investing_algorithm_framework/app/web/controllers/portfolio.py +1 -1
  47. investing_algorithm_framework/app/web/controllers/positions.py +3 -3
  48. investing_algorithm_framework/app/web/create_app.py +4 -2
  49. investing_algorithm_framework/app/web/error_handler.py +1 -1
  50. investing_algorithm_framework/app/web/schemas/order.py +2 -2
  51. investing_algorithm_framework/app/web/schemas/position.py +1 -0
  52. investing_algorithm_framework/cli/__init__.py +0 -0
  53. investing_algorithm_framework/cli/cli.py +231 -0
  54. investing_algorithm_framework/cli/deploy_to_aws_lambda.py +501 -0
  55. investing_algorithm_framework/cli/deploy_to_azure_function.py +718 -0
  56. investing_algorithm_framework/cli/initialize_app.py +603 -0
  57. investing_algorithm_framework/cli/templates/.gitignore.template +178 -0
  58. investing_algorithm_framework/cli/templates/app.py.template +18 -0
  59. investing_algorithm_framework/cli/templates/app_aws_lambda_function.py.template +48 -0
  60. investing_algorithm_framework/cli/templates/app_azure_function.py.template +14 -0
  61. investing_algorithm_framework/cli/templates/app_web.py.template +18 -0
  62. investing_algorithm_framework/cli/templates/aws_lambda_dockerfile.template +22 -0
  63. investing_algorithm_framework/cli/templates/aws_lambda_dockerignore.template +92 -0
  64. investing_algorithm_framework/cli/templates/aws_lambda_readme.md.template +110 -0
  65. investing_algorithm_framework/cli/templates/aws_lambda_requirements.txt.template +2 -0
  66. investing_algorithm_framework/cli/templates/azure_function_function_app.py.template +65 -0
  67. investing_algorithm_framework/cli/templates/azure_function_host.json.template +15 -0
  68. investing_algorithm_framework/cli/templates/azure_function_local.settings.json.template +8 -0
  69. investing_algorithm_framework/cli/templates/azure_function_requirements.txt.template +3 -0
  70. investing_algorithm_framework/cli/templates/data_providers.py.template +17 -0
  71. investing_algorithm_framework/cli/templates/env.example.template +2 -0
  72. investing_algorithm_framework/cli/templates/env_azure_function.example.template +4 -0
  73. investing_algorithm_framework/cli/templates/market_data_providers.py.template +9 -0
  74. investing_algorithm_framework/cli/templates/readme.md.template +135 -0
  75. investing_algorithm_framework/cli/templates/requirements.txt.template +2 -0
  76. investing_algorithm_framework/cli/templates/run_backtest.py.template +20 -0
  77. investing_algorithm_framework/cli/templates/strategy.py.template +124 -0
  78. investing_algorithm_framework/cli/validate_backtest_checkpoints.py +197 -0
  79. investing_algorithm_framework/create_app.py +43 -9
  80. investing_algorithm_framework/dependency_container.py +121 -33
  81. investing_algorithm_framework/domain/__init__.py +109 -22
  82. investing_algorithm_framework/domain/algorithm_id.py +69 -0
  83. investing_algorithm_framework/domain/backtesting/__init__.py +25 -0
  84. investing_algorithm_framework/domain/backtesting/backtest.py +548 -0
  85. investing_algorithm_framework/domain/backtesting/backtest_date_range.py +113 -0
  86. investing_algorithm_framework/domain/backtesting/backtest_evaluation_focuss.py +241 -0
  87. investing_algorithm_framework/domain/backtesting/backtest_metrics.py +470 -0
  88. investing_algorithm_framework/domain/backtesting/backtest_permutation_test.py +275 -0
  89. investing_algorithm_framework/domain/backtesting/backtest_run.py +663 -0
  90. investing_algorithm_framework/domain/backtesting/backtest_summary_metrics.py +162 -0
  91. investing_algorithm_framework/domain/backtesting/backtest_utils.py +198 -0
  92. investing_algorithm_framework/domain/backtesting/combine_backtests.py +392 -0
  93. investing_algorithm_framework/domain/config.py +60 -138
  94. investing_algorithm_framework/domain/constants.py +23 -34
  95. investing_algorithm_framework/domain/data_provider.py +334 -0
  96. investing_algorithm_framework/domain/data_structures.py +42 -0
  97. investing_algorithm_framework/domain/decimal_parsing.py +40 -0
  98. investing_algorithm_framework/domain/exceptions.py +51 -1
  99. investing_algorithm_framework/domain/models/__init__.py +29 -14
  100. investing_algorithm_framework/domain/models/app_mode.py +34 -0
  101. investing_algorithm_framework/domain/models/base_model.py +3 -1
  102. investing_algorithm_framework/domain/models/data/__init__.py +7 -0
  103. investing_algorithm_framework/domain/models/data/data_source.py +222 -0
  104. investing_algorithm_framework/domain/models/data/data_type.py +46 -0
  105. investing_algorithm_framework/domain/models/event.py +35 -0
  106. investing_algorithm_framework/domain/models/market/__init__.py +5 -0
  107. investing_algorithm_framework/domain/models/market/market_credential.py +88 -0
  108. investing_algorithm_framework/domain/models/order/__init__.py +3 -4
  109. investing_algorithm_framework/domain/models/order/order.py +243 -86
  110. investing_algorithm_framework/domain/models/order/order_status.py +2 -2
  111. investing_algorithm_framework/domain/models/order/order_type.py +1 -3
  112. investing_algorithm_framework/domain/models/portfolio/__init__.py +7 -2
  113. investing_algorithm_framework/domain/models/portfolio/portfolio.py +134 -1
  114. investing_algorithm_framework/domain/models/portfolio/portfolio_configuration.py +37 -37
  115. investing_algorithm_framework/domain/models/portfolio/portfolio_snapshot.py +208 -0
  116. investing_algorithm_framework/domain/models/position/__init__.py +3 -2
  117. investing_algorithm_framework/domain/models/position/position.py +29 -0
  118. investing_algorithm_framework/domain/models/position/position_size.py +41 -0
  119. investing_algorithm_framework/domain/models/position/{position_cost.py → position_snapshot.py} +16 -8
  120. investing_algorithm_framework/domain/models/risk_rules/__init__.py +7 -0
  121. investing_algorithm_framework/domain/models/risk_rules/stop_loss_rule.py +51 -0
  122. investing_algorithm_framework/domain/models/risk_rules/take_profit_rule.py +55 -0
  123. investing_algorithm_framework/domain/models/snapshot_interval.py +45 -0
  124. investing_algorithm_framework/domain/models/strategy_profile.py +33 -0
  125. investing_algorithm_framework/domain/models/time_frame.py +94 -98
  126. investing_algorithm_framework/domain/models/time_interval.py +33 -0
  127. investing_algorithm_framework/domain/models/time_unit.py +111 -2
  128. investing_algorithm_framework/domain/models/tracing/__init__.py +0 -0
  129. investing_algorithm_framework/domain/models/tracing/trace.py +23 -0
  130. investing_algorithm_framework/domain/models/trade/__init__.py +11 -0
  131. investing_algorithm_framework/domain/models/trade/trade.py +389 -0
  132. investing_algorithm_framework/domain/models/trade/trade_status.py +40 -0
  133. investing_algorithm_framework/domain/models/trade/trade_stop_loss.py +332 -0
  134. investing_algorithm_framework/domain/models/trade/trade_take_profit.py +365 -0
  135. investing_algorithm_framework/domain/order_executor.py +112 -0
  136. investing_algorithm_framework/domain/portfolio_provider.py +118 -0
  137. investing_algorithm_framework/domain/services/__init__.py +11 -0
  138. investing_algorithm_framework/domain/services/market_credential_service.py +37 -0
  139. investing_algorithm_framework/domain/services/portfolios/__init__.py +5 -0
  140. investing_algorithm_framework/domain/services/portfolios/portfolio_sync_service.py +9 -0
  141. investing_algorithm_framework/domain/services/rounding_service.py +27 -0
  142. investing_algorithm_framework/domain/services/state_handler.py +38 -0
  143. investing_algorithm_framework/domain/strategy.py +1 -29
  144. investing_algorithm_framework/domain/utils/__init__.py +16 -4
  145. investing_algorithm_framework/domain/utils/csv.py +22 -0
  146. investing_algorithm_framework/domain/utils/custom_tqdm.py +22 -0
  147. investing_algorithm_framework/domain/utils/dates.py +57 -0
  148. investing_algorithm_framework/domain/utils/jupyter_notebook_detection.py +19 -0
  149. investing_algorithm_framework/domain/utils/polars.py +53 -0
  150. investing_algorithm_framework/domain/utils/random.py +29 -0
  151. investing_algorithm_framework/download_data.py +244 -0
  152. investing_algorithm_framework/infrastructure/__init__.py +39 -11
  153. investing_algorithm_framework/infrastructure/data_providers/__init__.py +36 -0
  154. investing_algorithm_framework/infrastructure/data_providers/ccxt.py +1152 -0
  155. investing_algorithm_framework/infrastructure/data_providers/csv.py +568 -0
  156. investing_algorithm_framework/infrastructure/data_providers/pandas.py +599 -0
  157. investing_algorithm_framework/infrastructure/database/__init__.py +6 -2
  158. investing_algorithm_framework/infrastructure/database/sql_alchemy.py +87 -13
  159. investing_algorithm_framework/infrastructure/models/__init__.py +13 -4
  160. investing_algorithm_framework/infrastructure/models/decimal_parser.py +14 -0
  161. investing_algorithm_framework/infrastructure/models/order/__init__.py +2 -2
  162. investing_algorithm_framework/infrastructure/models/order/order.py +73 -73
  163. investing_algorithm_framework/infrastructure/models/order/order_metadata.py +44 -0
  164. investing_algorithm_framework/infrastructure/models/order_trade_association.py +10 -0
  165. investing_algorithm_framework/infrastructure/models/portfolio/__init__.py +3 -2
  166. investing_algorithm_framework/infrastructure/models/portfolio/portfolio_snapshot.py +37 -0
  167. investing_algorithm_framework/infrastructure/models/portfolio/{portfolio.py → sql_portfolio.py} +57 -3
  168. investing_algorithm_framework/infrastructure/models/position/__init__.py +2 -2
  169. investing_algorithm_framework/infrastructure/models/position/position.py +16 -11
  170. investing_algorithm_framework/infrastructure/models/position/position_snapshot.py +23 -0
  171. investing_algorithm_framework/infrastructure/models/trades/__init__.py +9 -0
  172. investing_algorithm_framework/infrastructure/models/trades/trade.py +130 -0
  173. investing_algorithm_framework/infrastructure/models/trades/trade_stop_loss.py +59 -0
  174. investing_algorithm_framework/infrastructure/models/trades/trade_take_profit.py +55 -0
  175. investing_algorithm_framework/infrastructure/order_executors/__init__.py +21 -0
  176. investing_algorithm_framework/infrastructure/order_executors/backtest_oder_executor.py +28 -0
  177. investing_algorithm_framework/infrastructure/order_executors/ccxt_order_executor.py +200 -0
  178. investing_algorithm_framework/infrastructure/portfolio_providers/__init__.py +19 -0
  179. investing_algorithm_framework/infrastructure/portfolio_providers/ccxt_portfolio_provider.py +199 -0
  180. investing_algorithm_framework/infrastructure/repositories/__init__.py +13 -5
  181. investing_algorithm_framework/infrastructure/repositories/order_metadata_repository.py +17 -0
  182. investing_algorithm_framework/infrastructure/repositories/order_repository.py +32 -19
  183. investing_algorithm_framework/infrastructure/repositories/portfolio_repository.py +2 -2
  184. investing_algorithm_framework/infrastructure/repositories/portfolio_snapshot_repository.py +56 -0
  185. investing_algorithm_framework/infrastructure/repositories/position_repository.py +47 -4
  186. investing_algorithm_framework/infrastructure/repositories/position_snapshot_repository.py +21 -0
  187. investing_algorithm_framework/infrastructure/repositories/repository.py +85 -31
  188. investing_algorithm_framework/infrastructure/repositories/trade_repository.py +71 -0
  189. investing_algorithm_framework/infrastructure/repositories/trade_stop_loss_repository.py +29 -0
  190. investing_algorithm_framework/infrastructure/repositories/trade_take_profit_repository.py +29 -0
  191. investing_algorithm_framework/infrastructure/services/__init__.py +9 -2
  192. investing_algorithm_framework/infrastructure/services/aws/__init__.py +6 -0
  193. investing_algorithm_framework/infrastructure/services/aws/state_handler.py +193 -0
  194. investing_algorithm_framework/infrastructure/services/azure/__init__.py +5 -0
  195. investing_algorithm_framework/infrastructure/services/azure/state_handler.py +158 -0
  196. investing_algorithm_framework/infrastructure/services/backtesting/__init__.py +9 -0
  197. investing_algorithm_framework/infrastructure/services/backtesting/backtest_service.py +2596 -0
  198. investing_algorithm_framework/infrastructure/services/backtesting/event_backtest_service.py +285 -0
  199. investing_algorithm_framework/infrastructure/services/backtesting/vector_backtest_service.py +468 -0
  200. investing_algorithm_framework/services/__init__.py +127 -10
  201. investing_algorithm_framework/services/configuration_service.py +95 -0
  202. investing_algorithm_framework/services/data_providers/__init__.py +5 -0
  203. investing_algorithm_framework/services/data_providers/data_provider_service.py +1058 -0
  204. investing_algorithm_framework/services/market_credential_service.py +40 -0
  205. investing_algorithm_framework/services/metrics/__init__.py +119 -0
  206. investing_algorithm_framework/services/metrics/alpha.py +0 -0
  207. investing_algorithm_framework/services/metrics/beta.py +0 -0
  208. investing_algorithm_framework/services/metrics/cagr.py +60 -0
  209. investing_algorithm_framework/services/metrics/calmar_ratio.py +40 -0
  210. investing_algorithm_framework/services/metrics/drawdown.py +218 -0
  211. investing_algorithm_framework/services/metrics/equity_curve.py +24 -0
  212. investing_algorithm_framework/services/metrics/exposure.py +210 -0
  213. investing_algorithm_framework/services/metrics/generate.py +358 -0
  214. investing_algorithm_framework/services/metrics/mean_daily_return.py +84 -0
  215. investing_algorithm_framework/services/metrics/price_efficiency.py +57 -0
  216. investing_algorithm_framework/services/metrics/profit_factor.py +165 -0
  217. investing_algorithm_framework/services/metrics/recovery.py +113 -0
  218. investing_algorithm_framework/services/metrics/returns.py +452 -0
  219. investing_algorithm_framework/services/metrics/risk_free_rate.py +28 -0
  220. investing_algorithm_framework/services/metrics/sharpe_ratio.py +137 -0
  221. investing_algorithm_framework/services/metrics/sortino_ratio.py +74 -0
  222. investing_algorithm_framework/services/metrics/standard_deviation.py +156 -0
  223. investing_algorithm_framework/services/metrics/trades.py +473 -0
  224. investing_algorithm_framework/services/metrics/treynor_ratio.py +0 -0
  225. investing_algorithm_framework/services/metrics/ulcer.py +0 -0
  226. investing_algorithm_framework/services/metrics/value_at_risk.py +0 -0
  227. investing_algorithm_framework/services/metrics/volatility.py +118 -0
  228. investing_algorithm_framework/services/metrics/win_rate.py +177 -0
  229. investing_algorithm_framework/services/order_service/__init__.py +9 -0
  230. investing_algorithm_framework/services/order_service/order_backtest_service.py +178 -0
  231. investing_algorithm_framework/services/order_service/order_executor_lookup.py +110 -0
  232. investing_algorithm_framework/services/order_service/order_service.py +826 -0
  233. investing_algorithm_framework/services/portfolios/__init__.py +16 -0
  234. investing_algorithm_framework/services/portfolios/backtest_portfolio_service.py +54 -0
  235. investing_algorithm_framework/services/{portfolio_configuration_service.py → portfolios/portfolio_configuration_service.py} +27 -12
  236. investing_algorithm_framework/services/portfolios/portfolio_provider_lookup.py +106 -0
  237. investing_algorithm_framework/services/portfolios/portfolio_service.py +188 -0
  238. investing_algorithm_framework/services/portfolios/portfolio_snapshot_service.py +136 -0
  239. investing_algorithm_framework/services/portfolios/portfolio_sync_service.py +182 -0
  240. investing_algorithm_framework/services/positions/__init__.py +7 -0
  241. investing_algorithm_framework/services/positions/position_service.py +210 -0
  242. investing_algorithm_framework/services/positions/position_snapshot_service.py +18 -0
  243. investing_algorithm_framework/services/repository_service.py +8 -2
  244. investing_algorithm_framework/services/trade_order_evaluator/__init__.py +9 -0
  245. investing_algorithm_framework/services/trade_order_evaluator/backtest_trade_oder_evaluator.py +117 -0
  246. investing_algorithm_framework/services/trade_order_evaluator/default_trade_order_evaluator.py +51 -0
  247. investing_algorithm_framework/services/trade_order_evaluator/trade_order_evaluator.py +80 -0
  248. investing_algorithm_framework/services/trade_service/__init__.py +9 -0
  249. investing_algorithm_framework/services/trade_service/trade_service.py +1099 -0
  250. investing_algorithm_framework/services/trade_service/trade_stop_loss_service.py +39 -0
  251. investing_algorithm_framework/services/trade_service/trade_take_profit_service.py +41 -0
  252. investing_algorithm_framework-7.25.6.dist-info/METADATA +535 -0
  253. investing_algorithm_framework-7.25.6.dist-info/RECORD +268 -0
  254. {investing_algorithm_framework-1.3.1.dist-info → investing_algorithm_framework-7.25.6.dist-info}/WHEEL +1 -2
  255. investing_algorithm_framework-7.25.6.dist-info/entry_points.txt +3 -0
  256. investing_algorithm_framework/app/algorithm.py +0 -410
  257. investing_algorithm_framework/domain/models/market_data/__init__.py +0 -11
  258. investing_algorithm_framework/domain/models/market_data/asset_price.py +0 -50
  259. investing_algorithm_framework/domain/models/market_data/ohlcv.py +0 -76
  260. investing_algorithm_framework/domain/models/market_data/order_book.py +0 -63
  261. investing_algorithm_framework/domain/models/market_data/ticker.py +0 -92
  262. investing_algorithm_framework/domain/models/order/order_fee.py +0 -45
  263. investing_algorithm_framework/domain/models/trading_data_types.py +0 -47
  264. investing_algorithm_framework/domain/models/trading_time_frame.py +0 -205
  265. investing_algorithm_framework/domain/singleton.py +0 -9
  266. investing_algorithm_framework/infrastructure/models/order/order_fee.py +0 -21
  267. investing_algorithm_framework/infrastructure/models/position/position_cost.py +0 -32
  268. investing_algorithm_framework/infrastructure/repositories/order_fee_repository.py +0 -15
  269. investing_algorithm_framework/infrastructure/repositories/position_cost_repository.py +0 -16
  270. investing_algorithm_framework/infrastructure/services/market_service.py +0 -422
  271. investing_algorithm_framework/services/market_data_service.py +0 -75
  272. investing_algorithm_framework/services/order_service.py +0 -464
  273. investing_algorithm_framework/services/portfolio_service.py +0 -105
  274. investing_algorithm_framework/services/position_cost_service.py +0 -5
  275. investing_algorithm_framework/services/position_service.py +0 -50
  276. investing_algorithm_framework/services/strategy_orchestrator_service.py +0 -219
  277. investing_algorithm_framework/setup_logging.py +0 -40
  278. investing_algorithm_framework-1.3.1.dist-info/AUTHORS.md +0 -8
  279. investing_algorithm_framework-1.3.1.dist-info/METADATA +0 -172
  280. investing_algorithm_framework-1.3.1.dist-info/RECORD +0 -103
  281. investing_algorithm_framework-1.3.1.dist-info/top_level.txt +0 -1
  282. {investing_algorithm_framework-1.3.1.dist-info → investing_algorithm_framework-7.25.6.dist-info}/LICENSE +0 -0
@@ -31,9 +31,11 @@ class Task:
31
31
  else:
32
32
  self.worker_id = self.__class__.__name__
33
33
 
34
- def run(self, algorithm):
34
+ def run(self, context):
35
35
 
36
36
  if self.decorated:
37
- self.decorated(algorithm=algorithm)
37
+ self.decorated(context=context)
38
38
  else:
39
- raise NotImplementedError("Apply strategy is not implemented")
39
+ raise NotImplementedError(
40
+ "run method must be implemented in the subclass"
41
+ )
@@ -1,4 +1,5 @@
1
1
  from .create_app import create_flask_app
2
2
  from .run_strategies import run_strategies
3
+ from .schemas import OrderSerializer
3
4
 
4
- __all__ = ["create_flask_app", "run_strategies"]
5
+ __all__ = ["create_flask_app", "run_strategies", 'OrderSerializer']
@@ -1,7 +1,7 @@
1
- from investing_algorithm_framework.app.web.controllers.portfolio \
2
- import blueprint as portfolio_blueprint
3
1
  from investing_algorithm_framework.app.web.controllers.orders import \
4
2
  blueprint as orders_blueprint
3
+ from investing_algorithm_framework.app.web.controllers.portfolio \
4
+ import blueprint as portfolio_blueprint
5
5
  from investing_algorithm_framework.app.web.controllers.positions import \
6
6
  blueprint as positions_blueprint
7
7
 
@@ -1,13 +1,14 @@
1
1
  import logging
2
2
 
3
- from flask import Blueprint, request
4
3
  from dependency_injector.wiring import inject, Provide
5
- from investing_algorithm_framework.app.web.schemas import OrderSerializer
4
+ from flask import Blueprint, request
5
+
6
6
  from investing_algorithm_framework.app.web.responses import create_response
7
+ from investing_algorithm_framework.app.web.schemas import OrderSerializer
7
8
  from investing_algorithm_framework.dependency_container import \
8
9
  DependencyContainer
9
10
 
10
- logger = logging.getLogger(__name__)
11
+ logger = logging.getLogger("investing_algorithm_framework")
11
12
 
12
13
  blueprint = Blueprint("order-views", __name__)
13
14
 
@@ -8,7 +8,7 @@ from investing_algorithm_framework.app.web.schemas import PortfolioSerializer
8
8
  from investing_algorithm_framework.dependency_container import \
9
9
  DependencyContainer
10
10
 
11
- logger = logging.getLogger(__name__)
11
+ logger = logging.getLogger("investing_algorithm_framework")
12
12
 
13
13
  blueprint = Blueprint("portfolio-views", __name__)
14
14
 
@@ -1,12 +1,12 @@
1
1
  import logging
2
2
 
3
- from flask import Blueprint, request
4
3
  from dependency_injector.wiring import inject, Provide
4
+ from flask import Blueprint, request
5
5
 
6
- from investing_algorithm_framework.app.web.schemas import PositionSerializer
7
6
  from investing_algorithm_framework.app.web.responses import create_response
7
+ from investing_algorithm_framework.app.web.schemas import PositionSerializer
8
8
 
9
- logger = logging.getLogger(__name__)
9
+ logger = logging.getLogger("investing_algorithm_framework")
10
10
 
11
11
  blueprint = Blueprint("position-views", __name__)
12
12
 
@@ -5,10 +5,12 @@ from investing_algorithm_framework.app.web.setup_cors import setup_cors
5
5
  from .error_handler import setup_error_handler
6
6
 
7
7
 
8
- def create_flask_app(config):
8
+ def create_flask_app(configuration_service):
9
9
  app = Flask(__name__.split('.')[0])
10
10
 
11
- for key, value in config.items():
11
+ flask_config = configuration_service.get_flask_config()
12
+
13
+ for key, value in flask_config.items():
12
14
  app.config[key] = value
13
15
 
14
16
  app = setup_cors(app)
@@ -7,7 +7,7 @@ from werkzeug.exceptions import HTTPException
7
7
 
8
8
  from investing_algorithm_framework.domain import ApiException
9
9
 
10
- logger = logging.getLogger(__name__)
10
+ logger = logging.getLogger("investing_algorithm_framework")
11
11
 
12
12
 
13
13
  def setup_error_handler(app) -> None:
@@ -8,5 +8,5 @@ class OrderSerializer(Schema):
8
8
  price = fields.Float(dump_only=True)
9
9
  amount = fields.Float(dump_only=True)
10
10
  status = fields.String(dump_only=True)
11
- type = fields.String(dump_only=True)
12
- side = fields.String(dump_only=True)
11
+ order_type = fields.String(dump_only=True)
12
+ order_side = fields.String(dump_only=True)
@@ -1,4 +1,5 @@
1
1
  from marshmallow import Schema, fields
2
+
2
3
  from investing_algorithm_framework.dependency_container import \
3
4
  DependencyContainer
4
5
 
File without changes
@@ -0,0 +1,231 @@
1
+ import click
2
+
3
+ from .deploy_to_aws_lambda import command as deploy_to_aws_lambda_command
4
+ from .deploy_to_azure_function import command as \
5
+ deploy_to_azure_function_command
6
+ from .initialize_app import command as initialize_app_command
7
+ from .validate_backtest_checkpoints import command as \
8
+ validate_backtest_checkpoints_command
9
+
10
+ """
11
+ CLI for Investing Algorithm Framework
12
+
13
+ This module provides a command-line interface (CLI) for the
14
+ Investing Algorithm Framework.
15
+ """
16
+
17
+
18
+ @click.group()
19
+ def cli():
20
+ """CLI for Investing Algorithm Framework"""
21
+ pass
22
+
23
+
24
+ @click.command()
25
+ @click.option(
26
+ '--type',
27
+ default="default",
28
+ help="Type of app to create. "
29
+ "Options are: 'default', 'default_web', 'azure_function', 'aws_lambda'."
30
+ )
31
+ @click.option(
32
+ '--path', default=None, help="Path to directory to initialize the app in"
33
+ )
34
+ @click.option(
35
+ '--replace',
36
+ is_flag=True,
37
+ default=False,
38
+ help="If True, duplicate files will be replaced."
39
+ "If False, files will not be replaced."
40
+ )
41
+ def init(type, path, replace):
42
+ """
43
+ Command-line tool for creating an app skeleton.
44
+
45
+ Args:
46
+ type (str): Type of app to create. Options are: 'default',
47
+ 'default-web', 'azure-function'.
48
+ path (str): Path to directory to initialize the app in
49
+ replace (bool): If True, existing files will be replaced.
50
+ If False, existing files will not be replaced.
51
+
52
+ Returns:
53
+ None
54
+ """
55
+ initialize_app_command(path=path, app_type=type, replace=replace)
56
+
57
+
58
+ @click.command()
59
+ @click.option(
60
+ '--resource_group',
61
+ required=True,
62
+ help='The name of the resource group.',
63
+ )
64
+ @click.option(
65
+ '--subscription_id',
66
+ required=False,
67
+ help='The subscription ID. If not provided, the default will be used.'
68
+ )
69
+ @click.option(
70
+ '--storage_account_name',
71
+ required=False,
72
+ help='The name of the storage account.',
73
+ )
74
+ @click.option(
75
+ '--container_name',
76
+ required=False,
77
+ help='The name of the blob container.',
78
+ default='iafcontainer'
79
+ )
80
+ @click.option(
81
+ '--deployment_name',
82
+ required=True,
83
+ help='The name of the deployment. This will be" + \
84
+ "used as the name of the Function App.'
85
+ )
86
+ @click.option(
87
+ '--region',
88
+ required=True,
89
+ help='The Azure region for the resources.'
90
+ )
91
+ @click.option(
92
+ '--create_resource_group_if_not_exists',
93
+ is_flag=True,
94
+ help='Flag to create the resource group if it does not exist.'
95
+ )
96
+ @click.option(
97
+ '--skip_login',
98
+ is_flag=True,
99
+ help='Flag to create the resource group if it does not exist.',
100
+ default=False
101
+ )
102
+ def deploy_azure_function(
103
+ resource_group,
104
+ subscription_id,
105
+ storage_account_name,
106
+ container_name,
107
+ deployment_name,
108
+ region,
109
+ create_resource_group_if_not_exists,
110
+ skip_login
111
+ ):
112
+ """
113
+ Command-line tool for deploying a trading bot to Azure Function.
114
+
115
+ Args:
116
+ path (str): Path to directory to initialize the app in
117
+ resource_group (str): The name of the resource group.
118
+ subscription_id (str): The subscription ID. If not provided,
119
+ the default will be used.
120
+ storage_account_name (str): The name of the storage account.
121
+ container_name (str): The name of the blob container.
122
+ deployment_name (str): The name of the deployment. This will be
123
+ used as the name of the Function App.
124
+ region (str): The Azure region for the resources.
125
+ create_resource_group_if_not_exists (bool): Flag to create the
126
+ resource group if it does not exist.
127
+ skip_login (bool): Flag to skip the login process. This is
128
+ useful for CI/CD pipelines where the login is handled
129
+ separately.
130
+ region (str): The Azure region for the resources.
131
+ create_resource_group_if_not_exists (bool): Flag to create the
132
+ resource group if it does not exist.
133
+ skip_login (bool): Flag to skip the login process. This is
134
+ useful for CI/CD pipelines where the login is handled
135
+ separately.
136
+
137
+ Returns:
138
+ None
139
+ """
140
+ crg = create_resource_group_if_not_exists
141
+ deploy_to_azure_function_command(
142
+ resource_group=resource_group,
143
+ subscription_id=subscription_id,
144
+ storage_account_name=storage_account_name,
145
+ container_name=container_name,
146
+ deployment_name=deployment_name,
147
+ region=region,
148
+ create_resource_group_if_not_exists=crg,
149
+ skip_login=skip_login
150
+ )
151
+
152
+
153
+ @click.command()
154
+ @click.option(
155
+ '--lambda_function_name',
156
+ required=True,
157
+ help='The name of the AWS Lambda function to deploy.'
158
+ )
159
+ @click.option(
160
+ '--region',
161
+ required=True,
162
+ help='The AWS region where the Lambda function will be deployed.'
163
+ )
164
+ @click.option(
165
+ '--project_dir',
166
+ default=None,
167
+ help='The path to the project directory containing '
168
+ 'the Lambda function code.'
169
+ )
170
+ @click.option(
171
+ '--memory_size',
172
+ default=3000,
173
+ type=int,
174
+ help='The memory size for the Lambda function in MB. Default is 3000 MB.'
175
+ )
176
+ @click.option(
177
+ '--env',
178
+ '-e',
179
+ multiple=True,
180
+ nargs=2,
181
+ type=str,
182
+ help='Environment variables to pass to the Lambda function. '
183
+ 'Can be used multiple times: -e KEY VALUE -e KEY2 VALUE2'
184
+ )
185
+ def deploy_aws_lambda(
186
+ lambda_function_name,
187
+ region,
188
+ project_dir=None,
189
+ memory_size=3000,
190
+ env=None
191
+ ):
192
+ """
193
+ Command-line tool for deploying a trading bot to AWS lambda
194
+
195
+ Args:
196
+ lambda_function_name (str): The name of the AWS Lambda function
197
+ to deploy.
198
+ region (str): The AWS region where the Lambda function will
199
+ be deployed.
200
+ project_dir (str): The path to the project directory containing the
201
+ Lambda function code. If not provided, it defaults to
202
+ the current directory.
203
+ memory_size (int): The memory size for the Lambda function in MB.
204
+ Default is 3000 MB.
205
+ env (tuple): Environment variables as tuples of (KEY, VALUE).
206
+ Can be specified multiple times.
207
+
208
+ Returns:
209
+ None
210
+ """
211
+ # Convert env tuples to dictionary
212
+ env_vars = {}
213
+ if env:
214
+ for key, value in env:
215
+ env_vars[key] = value
216
+
217
+ deploy_to_aws_lambda_command(
218
+ lambda_function_name=lambda_function_name,
219
+ region=region,
220
+ project_dir=project_dir,
221
+ memory_size=memory_size,
222
+ env_vars=env_vars
223
+ )
224
+
225
+
226
+ cli.add_command(init)
227
+ cli.add_command(deploy_azure_function)
228
+ cli.add_command(deploy_aws_lambda)
229
+ cli.add_command(
230
+ validate_backtest_checkpoints_command, name="validate-checkpoints"
231
+ )