investing-algorithm-framework 1.5__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.
- investing_algorithm_framework/__init__.py +192 -16
- investing_algorithm_framework/analysis/__init__.py +16 -0
- investing_algorithm_framework/analysis/backtest_data_ranges.py +202 -0
- investing_algorithm_framework/analysis/data.py +170 -0
- investing_algorithm_framework/analysis/markdown.py +91 -0
- investing_algorithm_framework/analysis/ranking.py +298 -0
- investing_algorithm_framework/app/__init__.py +29 -4
- investing_algorithm_framework/app/algorithm/__init__.py +7 -0
- investing_algorithm_framework/app/algorithm/algorithm.py +193 -0
- investing_algorithm_framework/app/algorithm/algorithm_factory.py +118 -0
- investing_algorithm_framework/app/app.py +2220 -379
- investing_algorithm_framework/app/app_hook.py +28 -0
- investing_algorithm_framework/app/context.py +1724 -0
- investing_algorithm_framework/app/eventloop.py +620 -0
- investing_algorithm_framework/app/reporting/__init__.py +27 -0
- investing_algorithm_framework/app/reporting/ascii.py +921 -0
- investing_algorithm_framework/app/reporting/backtest_report.py +349 -0
- investing_algorithm_framework/app/reporting/charts/__init__.py +19 -0
- investing_algorithm_framework/app/reporting/charts/entry_exist_signals.py +66 -0
- investing_algorithm_framework/app/reporting/charts/equity_curve.py +37 -0
- investing_algorithm_framework/app/reporting/charts/equity_curve_drawdown.py +74 -0
- investing_algorithm_framework/app/reporting/charts/line_chart.py +11 -0
- investing_algorithm_framework/app/reporting/charts/monthly_returns_heatmap.py +70 -0
- investing_algorithm_framework/app/reporting/charts/ohlcv_data_completeness.py +51 -0
- investing_algorithm_framework/app/reporting/charts/rolling_sharp_ratio.py +79 -0
- investing_algorithm_framework/app/reporting/charts/yearly_returns_barchart.py +55 -0
- investing_algorithm_framework/app/reporting/generate.py +185 -0
- investing_algorithm_framework/app/reporting/tables/__init__.py +11 -0
- investing_algorithm_framework/app/reporting/tables/key_metrics_table.py +217 -0
- investing_algorithm_framework/app/reporting/tables/time_metrics_table.py +80 -0
- investing_algorithm_framework/app/reporting/tables/trade_metrics_table.py +147 -0
- investing_algorithm_framework/app/reporting/tables/trades_table.py +75 -0
- investing_algorithm_framework/app/reporting/tables/utils.py +29 -0
- investing_algorithm_framework/app/reporting/templates/report_template.html.j2 +154 -0
- investing_algorithm_framework/app/stateless/action_handlers/__init__.py +6 -3
- investing_algorithm_framework/app/stateless/action_handlers/action_handler_strategy.py +1 -1
- investing_algorithm_framework/app/stateless/action_handlers/check_online_handler.py +2 -1
- investing_algorithm_framework/app/stateless/action_handlers/run_strategy_handler.py +14 -7
- investing_algorithm_framework/app/strategy.py +867 -60
- investing_algorithm_framework/app/task.py +5 -3
- investing_algorithm_framework/app/web/__init__.py +2 -1
- investing_algorithm_framework/app/web/controllers/__init__.py +2 -2
- investing_algorithm_framework/app/web/controllers/orders.py +3 -2
- investing_algorithm_framework/app/web/controllers/positions.py +2 -2
- investing_algorithm_framework/app/web/create_app.py +4 -2
- investing_algorithm_framework/app/web/schemas/position.py +1 -0
- investing_algorithm_framework/cli/__init__.py +0 -0
- investing_algorithm_framework/cli/cli.py +231 -0
- investing_algorithm_framework/cli/deploy_to_aws_lambda.py +501 -0
- investing_algorithm_framework/cli/deploy_to_azure_function.py +718 -0
- investing_algorithm_framework/cli/initialize_app.py +603 -0
- investing_algorithm_framework/cli/templates/.gitignore.template +178 -0
- investing_algorithm_framework/cli/templates/app.py.template +18 -0
- investing_algorithm_framework/cli/templates/app_aws_lambda_function.py.template +48 -0
- investing_algorithm_framework/cli/templates/app_azure_function.py.template +14 -0
- investing_algorithm_framework/cli/templates/app_web.py.template +18 -0
- investing_algorithm_framework/cli/templates/aws_lambda_dockerfile.template +22 -0
- investing_algorithm_framework/cli/templates/aws_lambda_dockerignore.template +92 -0
- investing_algorithm_framework/cli/templates/aws_lambda_readme.md.template +110 -0
- investing_algorithm_framework/cli/templates/aws_lambda_requirements.txt.template +2 -0
- investing_algorithm_framework/cli/templates/azure_function_function_app.py.template +65 -0
- investing_algorithm_framework/cli/templates/azure_function_host.json.template +15 -0
- investing_algorithm_framework/cli/templates/azure_function_local.settings.json.template +8 -0
- investing_algorithm_framework/cli/templates/azure_function_requirements.txt.template +3 -0
- investing_algorithm_framework/cli/templates/data_providers.py.template +17 -0
- investing_algorithm_framework/cli/templates/env.example.template +2 -0
- investing_algorithm_framework/cli/templates/env_azure_function.example.template +4 -0
- investing_algorithm_framework/cli/templates/market_data_providers.py.template +9 -0
- investing_algorithm_framework/cli/templates/readme.md.template +135 -0
- investing_algorithm_framework/cli/templates/requirements.txt.template +2 -0
- investing_algorithm_framework/cli/templates/run_backtest.py.template +20 -0
- investing_algorithm_framework/cli/templates/strategy.py.template +124 -0
- investing_algorithm_framework/cli/validate_backtest_checkpoints.py +197 -0
- investing_algorithm_framework/create_app.py +40 -7
- investing_algorithm_framework/dependency_container.py +100 -47
- investing_algorithm_framework/domain/__init__.py +97 -30
- investing_algorithm_framework/domain/algorithm_id.py +69 -0
- investing_algorithm_framework/domain/backtesting/__init__.py +25 -0
- investing_algorithm_framework/domain/backtesting/backtest.py +548 -0
- investing_algorithm_framework/domain/backtesting/backtest_date_range.py +113 -0
- investing_algorithm_framework/domain/backtesting/backtest_evaluation_focuss.py +241 -0
- investing_algorithm_framework/domain/backtesting/backtest_metrics.py +470 -0
- investing_algorithm_framework/domain/backtesting/backtest_permutation_test.py +275 -0
- investing_algorithm_framework/domain/backtesting/backtest_run.py +663 -0
- investing_algorithm_framework/domain/backtesting/backtest_summary_metrics.py +162 -0
- investing_algorithm_framework/domain/backtesting/backtest_utils.py +198 -0
- investing_algorithm_framework/domain/backtesting/combine_backtests.py +392 -0
- investing_algorithm_framework/domain/config.py +59 -136
- investing_algorithm_framework/domain/constants.py +18 -37
- investing_algorithm_framework/domain/data_provider.py +334 -0
- investing_algorithm_framework/domain/data_structures.py +42 -0
- investing_algorithm_framework/domain/exceptions.py +51 -1
- investing_algorithm_framework/domain/models/__init__.py +26 -19
- investing_algorithm_framework/domain/models/app_mode.py +34 -0
- investing_algorithm_framework/domain/models/data/__init__.py +7 -0
- investing_algorithm_framework/domain/models/data/data_source.py +222 -0
- investing_algorithm_framework/domain/models/data/data_type.py +46 -0
- investing_algorithm_framework/domain/models/event.py +35 -0
- investing_algorithm_framework/domain/models/market/__init__.py +5 -0
- investing_algorithm_framework/domain/models/market/market_credential.py +88 -0
- investing_algorithm_framework/domain/models/order/__init__.py +3 -4
- investing_algorithm_framework/domain/models/order/order.py +198 -65
- investing_algorithm_framework/domain/models/order/order_status.py +2 -2
- investing_algorithm_framework/domain/models/order/order_type.py +1 -3
- investing_algorithm_framework/domain/models/portfolio/__init__.py +6 -2
- investing_algorithm_framework/domain/models/portfolio/portfolio.py +98 -3
- investing_algorithm_framework/domain/models/portfolio/portfolio_configuration.py +37 -43
- investing_algorithm_framework/domain/models/portfolio/portfolio_snapshot.py +108 -11
- investing_algorithm_framework/domain/models/position/__init__.py +2 -1
- investing_algorithm_framework/domain/models/position/position.py +20 -0
- investing_algorithm_framework/domain/models/position/position_size.py +41 -0
- investing_algorithm_framework/domain/models/position/position_snapshot.py +0 -2
- investing_algorithm_framework/domain/models/risk_rules/__init__.py +7 -0
- investing_algorithm_framework/domain/models/risk_rules/stop_loss_rule.py +51 -0
- investing_algorithm_framework/domain/models/risk_rules/take_profit_rule.py +55 -0
- investing_algorithm_framework/domain/models/snapshot_interval.py +45 -0
- investing_algorithm_framework/domain/models/strategy_profile.py +19 -141
- investing_algorithm_framework/domain/models/time_frame.py +94 -98
- investing_algorithm_framework/domain/models/time_interval.py +33 -0
- investing_algorithm_framework/domain/models/time_unit.py +66 -2
- investing_algorithm_framework/domain/models/tracing/__init__.py +0 -0
- investing_algorithm_framework/domain/models/tracing/trace.py +23 -0
- investing_algorithm_framework/domain/models/trade/__init__.py +11 -0
- investing_algorithm_framework/domain/models/trade/trade.py +389 -0
- investing_algorithm_framework/domain/models/trade/trade_status.py +40 -0
- investing_algorithm_framework/domain/models/trade/trade_stop_loss.py +332 -0
- investing_algorithm_framework/domain/models/trade/trade_take_profit.py +365 -0
- investing_algorithm_framework/domain/order_executor.py +112 -0
- investing_algorithm_framework/domain/portfolio_provider.py +118 -0
- investing_algorithm_framework/domain/services/__init__.py +11 -0
- investing_algorithm_framework/domain/services/market_credential_service.py +37 -0
- investing_algorithm_framework/domain/services/portfolios/__init__.py +5 -0
- investing_algorithm_framework/domain/services/portfolios/portfolio_sync_service.py +9 -0
- investing_algorithm_framework/domain/services/rounding_service.py +27 -0
- investing_algorithm_framework/domain/services/state_handler.py +38 -0
- investing_algorithm_framework/domain/strategy.py +1 -29
- investing_algorithm_framework/domain/utils/__init__.py +15 -5
- investing_algorithm_framework/domain/utils/csv.py +22 -0
- investing_algorithm_framework/domain/utils/custom_tqdm.py +22 -0
- investing_algorithm_framework/domain/utils/dates.py +57 -0
- investing_algorithm_framework/domain/utils/jupyter_notebook_detection.py +19 -0
- investing_algorithm_framework/domain/utils/polars.py +53 -0
- investing_algorithm_framework/domain/utils/random.py +29 -0
- investing_algorithm_framework/download_data.py +244 -0
- investing_algorithm_framework/infrastructure/__init__.py +37 -11
- investing_algorithm_framework/infrastructure/data_providers/__init__.py +36 -0
- investing_algorithm_framework/infrastructure/data_providers/ccxt.py +1152 -0
- investing_algorithm_framework/infrastructure/data_providers/csv.py +568 -0
- investing_algorithm_framework/infrastructure/data_providers/pandas.py +599 -0
- investing_algorithm_framework/infrastructure/database/__init__.py +6 -2
- investing_algorithm_framework/infrastructure/database/sql_alchemy.py +86 -12
- investing_algorithm_framework/infrastructure/models/__init__.py +7 -3
- investing_algorithm_framework/infrastructure/models/order/__init__.py +2 -2
- investing_algorithm_framework/infrastructure/models/order/order.py +53 -53
- investing_algorithm_framework/infrastructure/models/order/order_metadata.py +44 -0
- investing_algorithm_framework/infrastructure/models/order_trade_association.py +10 -0
- investing_algorithm_framework/infrastructure/models/portfolio/__init__.py +1 -1
- investing_algorithm_framework/infrastructure/models/portfolio/portfolio_snapshot.py +8 -2
- investing_algorithm_framework/infrastructure/models/portfolio/{portfolio.py → sql_portfolio.py} +17 -6
- investing_algorithm_framework/infrastructure/models/position/position_snapshot.py +3 -1
- investing_algorithm_framework/infrastructure/models/trades/__init__.py +9 -0
- investing_algorithm_framework/infrastructure/models/trades/trade.py +130 -0
- investing_algorithm_framework/infrastructure/models/trades/trade_stop_loss.py +59 -0
- investing_algorithm_framework/infrastructure/models/trades/trade_take_profit.py +55 -0
- investing_algorithm_framework/infrastructure/order_executors/__init__.py +21 -0
- investing_algorithm_framework/infrastructure/order_executors/backtest_oder_executor.py +28 -0
- investing_algorithm_framework/infrastructure/order_executors/ccxt_order_executor.py +200 -0
- investing_algorithm_framework/infrastructure/portfolio_providers/__init__.py +19 -0
- investing_algorithm_framework/infrastructure/portfolio_providers/ccxt_portfolio_provider.py +199 -0
- investing_algorithm_framework/infrastructure/repositories/__init__.py +10 -4
- investing_algorithm_framework/infrastructure/repositories/order_metadata_repository.py +17 -0
- investing_algorithm_framework/infrastructure/repositories/order_repository.py +16 -5
- investing_algorithm_framework/infrastructure/repositories/portfolio_repository.py +2 -2
- investing_algorithm_framework/infrastructure/repositories/position_repository.py +11 -0
- investing_algorithm_framework/infrastructure/repositories/repository.py +84 -30
- investing_algorithm_framework/infrastructure/repositories/trade_repository.py +71 -0
- investing_algorithm_framework/infrastructure/repositories/trade_stop_loss_repository.py +29 -0
- investing_algorithm_framework/infrastructure/repositories/trade_take_profit_repository.py +29 -0
- investing_algorithm_framework/infrastructure/services/__init__.py +9 -4
- investing_algorithm_framework/infrastructure/services/aws/__init__.py +6 -0
- investing_algorithm_framework/infrastructure/services/aws/state_handler.py +193 -0
- investing_algorithm_framework/infrastructure/services/azure/__init__.py +5 -0
- investing_algorithm_framework/infrastructure/services/azure/state_handler.py +158 -0
- investing_algorithm_framework/infrastructure/services/backtesting/__init__.py +9 -0
- investing_algorithm_framework/infrastructure/services/backtesting/backtest_service.py +2596 -0
- investing_algorithm_framework/infrastructure/services/backtesting/event_backtest_service.py +285 -0
- investing_algorithm_framework/infrastructure/services/backtesting/vector_backtest_service.py +468 -0
- investing_algorithm_framework/services/__init__.py +123 -15
- investing_algorithm_framework/services/configuration_service.py +77 -11
- investing_algorithm_framework/services/data_providers/__init__.py +5 -0
- investing_algorithm_framework/services/data_providers/data_provider_service.py +1058 -0
- investing_algorithm_framework/services/market_credential_service.py +40 -0
- investing_algorithm_framework/services/metrics/__init__.py +119 -0
- investing_algorithm_framework/services/metrics/alpha.py +0 -0
- investing_algorithm_framework/services/metrics/beta.py +0 -0
- investing_algorithm_framework/services/metrics/cagr.py +60 -0
- investing_algorithm_framework/services/metrics/calmar_ratio.py +40 -0
- investing_algorithm_framework/services/metrics/drawdown.py +218 -0
- investing_algorithm_framework/services/metrics/equity_curve.py +24 -0
- investing_algorithm_framework/services/metrics/exposure.py +210 -0
- investing_algorithm_framework/services/metrics/generate.py +358 -0
- investing_algorithm_framework/services/metrics/mean_daily_return.py +84 -0
- investing_algorithm_framework/services/metrics/price_efficiency.py +57 -0
- investing_algorithm_framework/services/metrics/profit_factor.py +165 -0
- investing_algorithm_framework/services/metrics/recovery.py +113 -0
- investing_algorithm_framework/services/metrics/returns.py +452 -0
- investing_algorithm_framework/services/metrics/risk_free_rate.py +28 -0
- investing_algorithm_framework/services/metrics/sharpe_ratio.py +137 -0
- investing_algorithm_framework/services/metrics/sortino_ratio.py +74 -0
- investing_algorithm_framework/services/metrics/standard_deviation.py +156 -0
- investing_algorithm_framework/services/metrics/trades.py +473 -0
- investing_algorithm_framework/services/metrics/treynor_ratio.py +0 -0
- investing_algorithm_framework/services/metrics/ulcer.py +0 -0
- investing_algorithm_framework/services/metrics/value_at_risk.py +0 -0
- investing_algorithm_framework/services/metrics/volatility.py +118 -0
- investing_algorithm_framework/services/metrics/win_rate.py +177 -0
- investing_algorithm_framework/services/order_service/__init__.py +9 -0
- investing_algorithm_framework/services/order_service/order_backtest_service.py +178 -0
- investing_algorithm_framework/services/order_service/order_executor_lookup.py +110 -0
- investing_algorithm_framework/services/order_service/order_service.py +826 -0
- investing_algorithm_framework/services/portfolios/__init__.py +16 -0
- investing_algorithm_framework/services/portfolios/backtest_portfolio_service.py +54 -0
- investing_algorithm_framework/services/{portfolio_configuration_service.py → portfolios/portfolio_configuration_service.py} +27 -12
- investing_algorithm_framework/services/portfolios/portfolio_provider_lookup.py +106 -0
- investing_algorithm_framework/services/portfolios/portfolio_service.py +188 -0
- investing_algorithm_framework/services/portfolios/portfolio_snapshot_service.py +136 -0
- investing_algorithm_framework/services/portfolios/portfolio_sync_service.py +182 -0
- investing_algorithm_framework/services/positions/__init__.py +7 -0
- investing_algorithm_framework/services/positions/position_service.py +210 -0
- investing_algorithm_framework/services/repository_service.py +8 -2
- investing_algorithm_framework/services/trade_order_evaluator/__init__.py +9 -0
- investing_algorithm_framework/services/trade_order_evaluator/backtest_trade_oder_evaluator.py +117 -0
- investing_algorithm_framework/services/trade_order_evaluator/default_trade_order_evaluator.py +51 -0
- investing_algorithm_framework/services/trade_order_evaluator/trade_order_evaluator.py +80 -0
- investing_algorithm_framework/services/trade_service/__init__.py +9 -0
- investing_algorithm_framework/services/trade_service/trade_service.py +1099 -0
- investing_algorithm_framework/services/trade_service/trade_stop_loss_service.py +39 -0
- investing_algorithm_framework/services/trade_service/trade_take_profit_service.py +41 -0
- investing_algorithm_framework-7.25.6.dist-info/METADATA +535 -0
- investing_algorithm_framework-7.25.6.dist-info/RECORD +268 -0
- {investing_algorithm_framework-1.5.dist-info → investing_algorithm_framework-7.25.6.dist-info}/WHEEL +1 -2
- investing_algorithm_framework-7.25.6.dist-info/entry_points.txt +3 -0
- investing_algorithm_framework/app/algorithm.py +0 -630
- investing_algorithm_framework/domain/models/backtest_profile.py +0 -414
- investing_algorithm_framework/domain/models/market_data/__init__.py +0 -11
- investing_algorithm_framework/domain/models/market_data/asset_price.py +0 -50
- investing_algorithm_framework/domain/models/market_data/ohlcv.py +0 -105
- investing_algorithm_framework/domain/models/market_data/order_book.py +0 -63
- investing_algorithm_framework/domain/models/market_data/ticker.py +0 -92
- investing_algorithm_framework/domain/models/order/order_fee.py +0 -45
- investing_algorithm_framework/domain/models/trade.py +0 -78
- investing_algorithm_framework/domain/models/trading_data_types.py +0 -47
- investing_algorithm_framework/domain/models/trading_time_frame.py +0 -223
- investing_algorithm_framework/domain/singleton.py +0 -9
- investing_algorithm_framework/domain/utils/backtesting.py +0 -82
- investing_algorithm_framework/infrastructure/models/order/order_fee.py +0 -21
- investing_algorithm_framework/infrastructure/repositories/order_fee_repository.py +0 -15
- investing_algorithm_framework/infrastructure/services/market_backtest_service.py +0 -360
- investing_algorithm_framework/infrastructure/services/market_service.py +0 -410
- investing_algorithm_framework/infrastructure/services/performance_service.py +0 -192
- investing_algorithm_framework/services/backtest_service.py +0 -268
- investing_algorithm_framework/services/market_data_service.py +0 -77
- investing_algorithm_framework/services/order_backtest_service.py +0 -122
- investing_algorithm_framework/services/order_service.py +0 -752
- investing_algorithm_framework/services/portfolio_service.py +0 -164
- investing_algorithm_framework/services/portfolio_snapshot_service.py +0 -68
- investing_algorithm_framework/services/position_cost_service.py +0 -5
- investing_algorithm_framework/services/position_service.py +0 -63
- investing_algorithm_framework/services/strategy_orchestrator_service.py +0 -225
- investing_algorithm_framework-1.5.dist-info/AUTHORS.md +0 -8
- investing_algorithm_framework-1.5.dist-info/METADATA +0 -230
- investing_algorithm_framework-1.5.dist-info/RECORD +0 -119
- investing_algorithm_framework-1.5.dist-info/top_level.txt +0 -1
- /investing_algorithm_framework/{infrastructure/services/performance_backtest_service.py → app/reporting/tables/stop_loss_table.py} +0 -0
- /investing_algorithm_framework/services/{position_snapshot_service.py → positions/position_snapshot_service.py} +0 -0
- {investing_algorithm_framework-1.5.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,
|
|
34
|
+
def run(self, context):
|
|
35
35
|
|
|
36
36
|
if self.decorated:
|
|
37
|
-
self.decorated(
|
|
37
|
+
self.decorated(context=context)
|
|
38
38
|
else:
|
|
39
|
-
raise NotImplementedError(
|
|
39
|
+
raise NotImplementedError(
|
|
40
|
+
"run method must be implemented in the subclass"
|
|
41
|
+
)
|
|
@@ -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,9 +1,10 @@
|
|
|
1
1
|
import logging
|
|
2
2
|
|
|
3
|
-
from flask import Blueprint, request
|
|
4
3
|
from dependency_injector.wiring import inject, Provide
|
|
5
|
-
from
|
|
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
|
|
|
@@ -1,10 +1,10 @@
|
|
|
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
9
|
logger = logging.getLogger("investing_algorithm_framework")
|
|
10
10
|
|
|
@@ -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(
|
|
8
|
+
def create_flask_app(configuration_service):
|
|
9
9
|
app = Flask(__name__.split('.')[0])
|
|
10
10
|
|
|
11
|
-
|
|
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)
|
|
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
|
+
)
|