investing-algorithm-framework 7.19.14__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.
Potentially problematic release.
This version of investing-algorithm-framework might be problematic. Click here for more details.
- investing_algorithm_framework/__init__.py +197 -0
- investing_algorithm_framework/app/__init__.py +47 -0
- investing_algorithm_framework/app/algorithm/__init__.py +7 -0
- investing_algorithm_framework/app/algorithm/algorithm.py +239 -0
- investing_algorithm_framework/app/algorithm/algorithm_factory.py +114 -0
- investing_algorithm_framework/app/analysis/__init__.py +15 -0
- investing_algorithm_framework/app/analysis/backtest_data_ranges.py +121 -0
- investing_algorithm_framework/app/analysis/backtest_utils.py +107 -0
- investing_algorithm_framework/app/analysis/permutation.py +116 -0
- investing_algorithm_framework/app/analysis/ranking.py +297 -0
- investing_algorithm_framework/app/app.py +2204 -0
- investing_algorithm_framework/app/app_hook.py +28 -0
- investing_algorithm_framework/app/context.py +1667 -0
- investing_algorithm_framework/app/eventloop.py +590 -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/stop_loss_table.py +0 -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/__init__.py +35 -0
- investing_algorithm_framework/app/stateless/action_handlers/__init__.py +84 -0
- investing_algorithm_framework/app/stateless/action_handlers/action_handler_strategy.py +8 -0
- investing_algorithm_framework/app/stateless/action_handlers/check_online_handler.py +15 -0
- investing_algorithm_framework/app/stateless/action_handlers/run_strategy_handler.py +40 -0
- investing_algorithm_framework/app/stateless/exception_handler.py +40 -0
- investing_algorithm_framework/app/strategy.py +675 -0
- investing_algorithm_framework/app/task.py +41 -0
- investing_algorithm_framework/app/web/__init__.py +5 -0
- investing_algorithm_framework/app/web/controllers/__init__.py +13 -0
- investing_algorithm_framework/app/web/controllers/orders.py +20 -0
- investing_algorithm_framework/app/web/controllers/portfolio.py +20 -0
- investing_algorithm_framework/app/web/controllers/positions.py +18 -0
- investing_algorithm_framework/app/web/create_app.py +20 -0
- investing_algorithm_framework/app/web/error_handler.py +59 -0
- investing_algorithm_framework/app/web/responses.py +20 -0
- investing_algorithm_framework/app/web/run_strategies.py +4 -0
- investing_algorithm_framework/app/web/schemas/__init__.py +12 -0
- investing_algorithm_framework/app/web/schemas/order.py +12 -0
- investing_algorithm_framework/app/web/schemas/portfolio.py +22 -0
- investing_algorithm_framework/app/web/schemas/position.py +15 -0
- investing_algorithm_framework/app/web/setup_cors.py +6 -0
- investing_algorithm_framework/cli/__init__.py +0 -0
- investing_algorithm_framework/cli/cli.py +207 -0
- investing_algorithm_framework/cli/deploy_to_aws_lambda.py +499 -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/create_app.py +54 -0
- investing_algorithm_framework/dependency_container.py +155 -0
- investing_algorithm_framework/domain/__init__.py +148 -0
- investing_algorithm_framework/domain/backtesting/__init__.py +21 -0
- investing_algorithm_framework/domain/backtesting/backtest.py +503 -0
- investing_algorithm_framework/domain/backtesting/backtest_date_range.py +96 -0
- investing_algorithm_framework/domain/backtesting/backtest_evaluation_focuss.py +242 -0
- investing_algorithm_framework/domain/backtesting/backtest_metrics.py +459 -0
- investing_algorithm_framework/domain/backtesting/backtest_permutation_test.py +275 -0
- investing_algorithm_framework/domain/backtesting/backtest_run.py +435 -0
- investing_algorithm_framework/domain/backtesting/backtest_summary_metrics.py +162 -0
- investing_algorithm_framework/domain/backtesting/combine_backtests.py +280 -0
- investing_algorithm_framework/domain/config.py +111 -0
- investing_algorithm_framework/domain/constants.py +83 -0
- investing_algorithm_framework/domain/data_provider.py +334 -0
- investing_algorithm_framework/domain/data_structures.py +42 -0
- investing_algorithm_framework/domain/decimal_parsing.py +40 -0
- investing_algorithm_framework/domain/exceptions.py +112 -0
- investing_algorithm_framework/domain/models/__init__.py +43 -0
- investing_algorithm_framework/domain/models/app_mode.py +34 -0
- investing_algorithm_framework/domain/models/base_model.py +25 -0
- investing_algorithm_framework/domain/models/data/__init__.py +7 -0
- investing_algorithm_framework/domain/models/data/data_source.py +214 -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 +6 -0
- investing_algorithm_framework/domain/models/order/order.py +384 -0
- investing_algorithm_framework/domain/models/order/order_side.py +36 -0
- investing_algorithm_framework/domain/models/order/order_status.py +37 -0
- investing_algorithm_framework/domain/models/order/order_type.py +30 -0
- investing_algorithm_framework/domain/models/portfolio/__init__.py +9 -0
- investing_algorithm_framework/domain/models/portfolio/portfolio.py +169 -0
- investing_algorithm_framework/domain/models/portfolio/portfolio_configuration.py +93 -0
- investing_algorithm_framework/domain/models/portfolio/portfolio_snapshot.py +208 -0
- investing_algorithm_framework/domain/models/position/__init__.py +4 -0
- investing_algorithm_framework/domain/models/position/position.py +68 -0
- investing_algorithm_framework/domain/models/position/position_snapshot.py +47 -0
- investing_algorithm_framework/domain/models/snapshot_interval.py +45 -0
- investing_algorithm_framework/domain/models/strategy_profile.py +33 -0
- investing_algorithm_framework/domain/models/time_frame.py +153 -0
- investing_algorithm_framework/domain/models/time_interval.py +124 -0
- investing_algorithm_framework/domain/models/time_unit.py +149 -0
- 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 +13 -0
- investing_algorithm_framework/domain/models/trade/trade.py +388 -0
- investing_algorithm_framework/domain/models/trade/trade_risk_type.py +34 -0
- investing_algorithm_framework/domain/models/trade/trade_status.py +40 -0
- investing_algorithm_framework/domain/models/trade/trade_stop_loss.py +267 -0
- investing_algorithm_framework/domain/models/trade/trade_take_profit.py +303 -0
- investing_algorithm_framework/domain/order_executor.py +112 -0
- investing_algorithm_framework/domain/portfolio_provider.py +118 -0
- investing_algorithm_framework/domain/positions/__init__.py +4 -0
- investing_algorithm_framework/domain/positions/position_size.py +41 -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/stateless_actions.py +7 -0
- investing_algorithm_framework/domain/strategy.py +44 -0
- investing_algorithm_framework/domain/utils/__init__.py +27 -0
- investing_algorithm_framework/domain/utils/csv.py +104 -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 +41 -0
- investing_algorithm_framework/domain/utils/signatures.py +17 -0
- investing_algorithm_framework/domain/utils/stoppable_thread.py +26 -0
- investing_algorithm_framework/domain/utils/synchronized.py +12 -0
- investing_algorithm_framework/download_data.py +108 -0
- investing_algorithm_framework/infrastructure/__init__.py +50 -0
- investing_algorithm_framework/infrastructure/data_providers/__init__.py +36 -0
- investing_algorithm_framework/infrastructure/data_providers/ccxt.py +1143 -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 +10 -0
- investing_algorithm_framework/infrastructure/database/sql_alchemy.py +120 -0
- investing_algorithm_framework/infrastructure/models/__init__.py +16 -0
- investing_algorithm_framework/infrastructure/models/decimal_parser.py +14 -0
- investing_algorithm_framework/infrastructure/models/model_extension.py +6 -0
- investing_algorithm_framework/infrastructure/models/order/__init__.py +4 -0
- investing_algorithm_framework/infrastructure/models/order/order.py +124 -0
- 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 +4 -0
- investing_algorithm_framework/infrastructure/models/portfolio/portfolio_snapshot.py +37 -0
- investing_algorithm_framework/infrastructure/models/portfolio/sql_portfolio.py +114 -0
- investing_algorithm_framework/infrastructure/models/position/__init__.py +4 -0
- investing_algorithm_framework/infrastructure/models/position/position.py +63 -0
- investing_algorithm_framework/infrastructure/models/position/position_snapshot.py +23 -0
- 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 +40 -0
- investing_algorithm_framework/infrastructure/models/trades/trade_take_profit.py +41 -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 +21 -0
- investing_algorithm_framework/infrastructure/repositories/order_metadata_repository.py +17 -0
- investing_algorithm_framework/infrastructure/repositories/order_repository.py +96 -0
- investing_algorithm_framework/infrastructure/repositories/portfolio_repository.py +30 -0
- investing_algorithm_framework/infrastructure/repositories/portfolio_snapshot_repository.py +56 -0
- investing_algorithm_framework/infrastructure/repositories/position_repository.py +66 -0
- investing_algorithm_framework/infrastructure/repositories/position_snapshot_repository.py +21 -0
- investing_algorithm_framework/infrastructure/repositories/repository.py +299 -0
- investing_algorithm_framework/infrastructure/repositories/trade_repository.py +71 -0
- investing_algorithm_framework/infrastructure/repositories/trade_stop_loss_repository.py +23 -0
- investing_algorithm_framework/infrastructure/repositories/trade_take_profit_repository.py +23 -0
- investing_algorithm_framework/infrastructure/services/__init__.py +7 -0
- investing_algorithm_framework/infrastructure/services/aws/__init__.py +6 -0
- investing_algorithm_framework/infrastructure/services/aws/state_handler.py +113 -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/services/__init__.py +132 -0
- investing_algorithm_framework/services/backtesting/__init__.py +5 -0
- investing_algorithm_framework/services/backtesting/backtest_service.py +651 -0
- investing_algorithm_framework/services/configuration_service.py +96 -0
- investing_algorithm_framework/services/data_providers/__init__.py +5 -0
- investing_algorithm_framework/services/data_providers/data_provider_service.py +850 -0
- investing_algorithm_framework/services/market_credential_service.py +40 -0
- investing_algorithm_framework/services/metrics/__init__.py +114 -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 +181 -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 +83 -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 +157 -0
- investing_algorithm_framework/services/metrics/trades.py +500 -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 +97 -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/portfolios/portfolio_configuration_service.py +75 -0
- 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/positions/position_snapshot_service.py +18 -0
- investing_algorithm_framework/services/repository_service.py +40 -0
- investing_algorithm_framework/services/trade_order_evaluator/__init__.py +9 -0
- investing_algorithm_framework/services/trade_order_evaluator/backtest_trade_oder_evaluator.py +132 -0
- investing_algorithm_framework/services/trade_order_evaluator/default_trade_order_evaluator.py +66 -0
- investing_algorithm_framework/services/trade_order_evaluator/trade_order_evaluator.py +41 -0
- investing_algorithm_framework/services/trade_service/__init__.py +3 -0
- investing_algorithm_framework/services/trade_service/trade_service.py +1083 -0
- investing_algorithm_framework-7.19.14.dist-info/LICENSE +201 -0
- investing_algorithm_framework-7.19.14.dist-info/METADATA +459 -0
- investing_algorithm_framework-7.19.14.dist-info/RECORD +260 -0
- investing_algorithm_framework-7.19.14.dist-info/WHEEL +4 -0
- investing_algorithm_framework-7.19.14.dist-info/entry_points.txt +3 -0
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
# Byte-compiled / optimized / DLL files
|
|
2
|
+
__pycache__/
|
|
3
|
+
*.py[cod]
|
|
4
|
+
*$py.class
|
|
5
|
+
|
|
6
|
+
# C extensions
|
|
7
|
+
*.so
|
|
8
|
+
|
|
9
|
+
# Distribution / packaging
|
|
10
|
+
.Python
|
|
11
|
+
build/
|
|
12
|
+
develop-eggs/
|
|
13
|
+
dist/
|
|
14
|
+
downloads/
|
|
15
|
+
eggs/
|
|
16
|
+
.eggs/
|
|
17
|
+
lib/
|
|
18
|
+
lib64/
|
|
19
|
+
parts/
|
|
20
|
+
sdist/
|
|
21
|
+
var/
|
|
22
|
+
wheels/
|
|
23
|
+
share/python-wheels/
|
|
24
|
+
*.egg-info/
|
|
25
|
+
.installed.cfg
|
|
26
|
+
*.egg
|
|
27
|
+
MANIFEST
|
|
28
|
+
|
|
29
|
+
# PyInstaller
|
|
30
|
+
# Usually these files are written by a python script from a template
|
|
31
|
+
# before PyInstaller builds the exe, so as to inject date/other infos into it.
|
|
32
|
+
*.manifest
|
|
33
|
+
*.spec
|
|
34
|
+
|
|
35
|
+
# Installer logs
|
|
36
|
+
pip-log.txt
|
|
37
|
+
pip-delete-this-directory.txt
|
|
38
|
+
|
|
39
|
+
# Unit test / coverage reports
|
|
40
|
+
htmlcov/
|
|
41
|
+
.tox/
|
|
42
|
+
.nox/
|
|
43
|
+
.coverage
|
|
44
|
+
.coverage.*
|
|
45
|
+
.cache
|
|
46
|
+
nosetests.xml
|
|
47
|
+
coverage.xml
|
|
48
|
+
*.cover
|
|
49
|
+
*.py,cover
|
|
50
|
+
.hypothesis/
|
|
51
|
+
.pytest_cache/
|
|
52
|
+
cover/
|
|
53
|
+
|
|
54
|
+
# Translations
|
|
55
|
+
*.mo
|
|
56
|
+
*.pot
|
|
57
|
+
|
|
58
|
+
# Django stuff:
|
|
59
|
+
*.log
|
|
60
|
+
local_settings.py
|
|
61
|
+
db.sqlite3
|
|
62
|
+
db.sqlite3-journal
|
|
63
|
+
|
|
64
|
+
# Flask stuff:
|
|
65
|
+
instance/
|
|
66
|
+
.webassets-cache
|
|
67
|
+
|
|
68
|
+
# Scrapy stuff:
|
|
69
|
+
.scrapy
|
|
70
|
+
|
|
71
|
+
# Sphinx documentation
|
|
72
|
+
docs/_build/
|
|
73
|
+
|
|
74
|
+
# PyBuilder
|
|
75
|
+
.pybuilder/
|
|
76
|
+
target/
|
|
77
|
+
|
|
78
|
+
# Jupyter Notebook
|
|
79
|
+
.ipynb_checkpoints
|
|
80
|
+
|
|
81
|
+
# IPython
|
|
82
|
+
profile_default/
|
|
83
|
+
ipython_config.py
|
|
84
|
+
|
|
85
|
+
# pyenv
|
|
86
|
+
# For a library or package, you might want to ignore these files since the code is
|
|
87
|
+
# intended to run in multiple environments; otherwise, check them in:
|
|
88
|
+
# .python-version
|
|
89
|
+
|
|
90
|
+
# pipenv
|
|
91
|
+
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
|
|
92
|
+
# However, in case of collaboration, if having platform-specific dependencies or dependencies
|
|
93
|
+
# having no cross-platform support, pipenv may install dependencies that don't work, or not
|
|
94
|
+
# install all needed dependencies.
|
|
95
|
+
#Pipfile.lock
|
|
96
|
+
|
|
97
|
+
# UV
|
|
98
|
+
# Similar to Pipfile.lock, it is generally recommended to include uv.lock in version control.
|
|
99
|
+
# This is especially recommended for binary packages to ensure reproducibility, and is more
|
|
100
|
+
# commonly ignored for libraries.
|
|
101
|
+
#uv.lock
|
|
102
|
+
|
|
103
|
+
# poetry
|
|
104
|
+
# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
|
|
105
|
+
# This is especially recommended for binary packages to ensure reproducibility, and is more
|
|
106
|
+
# commonly ignored for libraries.
|
|
107
|
+
# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
|
|
108
|
+
#poetry.lock
|
|
109
|
+
|
|
110
|
+
# pdm
|
|
111
|
+
# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
|
|
112
|
+
#pdm.lock
|
|
113
|
+
# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
|
|
114
|
+
# in version control.
|
|
115
|
+
# https://pdm.fming.dev/latest/usage/project/#working-with-version-control
|
|
116
|
+
.pdm.toml
|
|
117
|
+
.pdm-python
|
|
118
|
+
.pdm-build/
|
|
119
|
+
|
|
120
|
+
# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
|
|
121
|
+
__pypackages__/
|
|
122
|
+
|
|
123
|
+
# Celery stuff
|
|
124
|
+
celerybeat-schedule
|
|
125
|
+
celerybeat.pid
|
|
126
|
+
|
|
127
|
+
# SageMath parsed files
|
|
128
|
+
*.sage.py
|
|
129
|
+
|
|
130
|
+
# Environments
|
|
131
|
+
.env
|
|
132
|
+
.venv
|
|
133
|
+
env/
|
|
134
|
+
venv/
|
|
135
|
+
ENV/
|
|
136
|
+
env.bak/
|
|
137
|
+
venv.bak/
|
|
138
|
+
|
|
139
|
+
# Spyder project settings
|
|
140
|
+
.spyderproject
|
|
141
|
+
.spyproject
|
|
142
|
+
|
|
143
|
+
# Rope project settings
|
|
144
|
+
.ropeproject
|
|
145
|
+
|
|
146
|
+
# mkdocs documentation
|
|
147
|
+
/site
|
|
148
|
+
|
|
149
|
+
# mypy
|
|
150
|
+
.mypy_cache/
|
|
151
|
+
.dmypy.json
|
|
152
|
+
dmypy.json
|
|
153
|
+
|
|
154
|
+
# Pyre type checker
|
|
155
|
+
.pyre/
|
|
156
|
+
|
|
157
|
+
# pytype static type analyzer
|
|
158
|
+
.pytype/
|
|
159
|
+
|
|
160
|
+
# Cython debug symbols
|
|
161
|
+
cython_debug/
|
|
162
|
+
|
|
163
|
+
# PyCharm
|
|
164
|
+
# JetBrains specific template is maintained in a separate JetBrains.gitignore that can
|
|
165
|
+
# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
|
|
166
|
+
# and can be added to the global gitignore or merged into this file. For a more nuclear
|
|
167
|
+
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
|
|
168
|
+
#.idea/
|
|
169
|
+
|
|
170
|
+
# Ruff stuff:
|
|
171
|
+
.ruff_cache/
|
|
172
|
+
|
|
173
|
+
# PyPI configuration file
|
|
174
|
+
.pypirc
|
|
175
|
+
|
|
176
|
+
|
|
177
|
+
# Framework related files
|
|
178
|
+
# The following files are related to the investing_algorithm_framework framework.
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import logging.config
|
|
2
|
+
from dotenv import load_dotenv
|
|
3
|
+
|
|
4
|
+
from investing_algorithm_framework import create_app, \
|
|
5
|
+
DEFAULT_LOGGING_CONFIG, Algorithm, PortfolioConfiguration
|
|
6
|
+
from strategies.strategy import MyTradingStrategy
|
|
7
|
+
|
|
8
|
+
load_dotenv()
|
|
9
|
+
logging.config.dictConfig(DEFAULT_LOGGING_CONFIG)
|
|
10
|
+
|
|
11
|
+
app = create_app()
|
|
12
|
+
app.add_market(market="binance", initial_balance=1000, trading_symbol="EUR")
|
|
13
|
+
algorithm = Algorithm(name="MyTradingBot")
|
|
14
|
+
algorithm.add_strategy(MyTradingStrategy)
|
|
15
|
+
app.add_algorithm(algorithm)
|
|
16
|
+
|
|
17
|
+
if __name__ == "__main__":
|
|
18
|
+
app.run()
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import logging.config
|
|
2
|
+
import os
|
|
3
|
+
from logging import getLogger
|
|
4
|
+
|
|
5
|
+
from dotenv import load_dotenv
|
|
6
|
+
from finterion_investing_algorithm_framework import FinterionOrderExecutor, \
|
|
7
|
+
FinterionPingAction, FinterionPortfolioProvider
|
|
8
|
+
from investing_algorithm_framework import create_app, RESOURCE_DIRECTORY, \
|
|
9
|
+
AWSS3StorageStateHandler, AWS_S3_STATE_BUCKET_NAME, AWS_LAMBDA_LOGGING_CONFIG
|
|
10
|
+
|
|
11
|
+
from strategies.strategy import MyTradingStrategy
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
# Make sure to set the resource directory to /tmp because this dir is writable
|
|
15
|
+
app = create_app(config={RESOURCE_DIRECTORY: os.path.join("/tmp", "resources")})
|
|
16
|
+
logging.config.dictConfig(AWS_LAMBDA_LOGGING_CONFIG)
|
|
17
|
+
logger = logging.getLogger(__name__)
|
|
18
|
+
|
|
19
|
+
# Get the s3 state bucket name from environment variables for database
|
|
20
|
+
# state storage, this is set during the deployment
|
|
21
|
+
# to AWS Lambda with the `deploy_aws_lambda` cli command.
|
|
22
|
+
app.add_state_handler(
|
|
23
|
+
AWSS3StorageStateHandler(bucket_name=os.getenv(AWS_S3_STATE_BUCKET_NAME))
|
|
24
|
+
)
|
|
25
|
+
app.add_strategy(MyTradingStrategy)
|
|
26
|
+
app.add_market(market="BITVAVO", trading_symbol="EUR")
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
def lambda_handler(event, context):
|
|
30
|
+
"""
|
|
31
|
+
AWS Lambda handler function for executing a trading strategy.
|
|
32
|
+
|
|
33
|
+
Args:
|
|
34
|
+
event: dict, the event data passed to the Lambda function.
|
|
35
|
+
context: object, the context object provided by AWS Lambda.
|
|
36
|
+
|
|
37
|
+
Returns:
|
|
38
|
+
dict: The result of the trading strategy execution.
|
|
39
|
+
"""
|
|
40
|
+
try:
|
|
41
|
+
app.run(payload={"ACTION": "RUN_STRATEGY"})
|
|
42
|
+
return {
|
|
43
|
+
"statusCode": 200,
|
|
44
|
+
"body": "Trading strategy executed successfully."
|
|
45
|
+
}
|
|
46
|
+
except Exception as e:
|
|
47
|
+
logger.exception(e)
|
|
48
|
+
return {"statusCode": 500, "body": str(e)}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
from dotenv import load_dotenv
|
|
2
|
+
|
|
3
|
+
from investing_algorithm_framework import create_app, PortfolioConfiguration, \
|
|
4
|
+
TimeUnit, CCXTOHLCVMarketDataSource, Algorithm, \
|
|
5
|
+
CCXTTickerMarketDataSource, MarketCredential, AzureBlobStorageStateHandler
|
|
6
|
+
from strategies.strategy import MyTradingStrategy
|
|
7
|
+
|
|
8
|
+
load_dotenv()
|
|
9
|
+
|
|
10
|
+
app = create_app()
|
|
11
|
+
app.add_market(market="binance", initial_balance=1000, trading_symbol="EUR")
|
|
12
|
+
algorithm = Algorithm(name="MyTradingBot")
|
|
13
|
+
algorithm.add_strategy(MyTradingStrategy)
|
|
14
|
+
app.add_algorithm(algorithm)
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import logging.config
|
|
2
|
+
from dotenv import load_dotenv
|
|
3
|
+
|
|
4
|
+
from investing_algorithm_framework import create_app, \
|
|
5
|
+
DEFAULT_LOGGING_CONFIG, Algorithm
|
|
6
|
+
from strategies.strategy import MyTradingStrategy
|
|
7
|
+
|
|
8
|
+
load_dotenv()
|
|
9
|
+
logging.config.dictConfig(DEFAULT_LOGGING_CONFIG)
|
|
10
|
+
|
|
11
|
+
app = create_app(web=True)
|
|
12
|
+
app.add_market(market="binance", initial_balance=1000, trading_symbol="EUR")
|
|
13
|
+
algorithm = Algorithm(name="MyTradingBot")
|
|
14
|
+
algorithm.add_strategy(MyTradingStrategy)
|
|
15
|
+
app.add_algorithm(algorithm)
|
|
16
|
+
|
|
17
|
+
if __name__ == "__main__":
|
|
18
|
+
app.run()
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
FROM public.ecr.aws/lambda/python:3.10
|
|
2
|
+
|
|
3
|
+
# Install build tools (add this block)
|
|
4
|
+
RUN yum install -y \
|
|
5
|
+
gcc \
|
|
6
|
+
gcc-c++ \
|
|
7
|
+
make \
|
|
8
|
+
cmake \
|
|
9
|
+
&& yum clean all
|
|
10
|
+
|
|
11
|
+
# Set the working directory
|
|
12
|
+
WORKDIR /var/task
|
|
13
|
+
|
|
14
|
+
# Install Python dependencies
|
|
15
|
+
COPY requirements.txt .
|
|
16
|
+
RUN pip install --upgrade pip
|
|
17
|
+
RUN pip install --no-cache-dir -r requirements.txt
|
|
18
|
+
|
|
19
|
+
# Copy the function code
|
|
20
|
+
COPY . .
|
|
21
|
+
|
|
22
|
+
CMD ["aws_function.lambda_handler"]
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
# Git
|
|
2
|
+
.git
|
|
3
|
+
.gitignore
|
|
4
|
+
.gitattributes
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
# CI
|
|
8
|
+
.codeclimate.yml
|
|
9
|
+
.travis.yml
|
|
10
|
+
.taskcluster.yml
|
|
11
|
+
|
|
12
|
+
# Docker
|
|
13
|
+
docker-compose.yml
|
|
14
|
+
Dockerfile
|
|
15
|
+
.docker
|
|
16
|
+
.dockerignore
|
|
17
|
+
|
|
18
|
+
# Byte-compiled / optimized / DLL files
|
|
19
|
+
**/__pycache__/
|
|
20
|
+
**/*.py[cod]
|
|
21
|
+
|
|
22
|
+
# C extensions
|
|
23
|
+
*.so
|
|
24
|
+
|
|
25
|
+
# Distribution / packaging
|
|
26
|
+
.Python
|
|
27
|
+
env/
|
|
28
|
+
build/
|
|
29
|
+
develop-eggs/
|
|
30
|
+
dist/
|
|
31
|
+
downloads/
|
|
32
|
+
eggs/
|
|
33
|
+
lib/
|
|
34
|
+
lib64/
|
|
35
|
+
parts/
|
|
36
|
+
sdist/
|
|
37
|
+
var/
|
|
38
|
+
*.egg-info/
|
|
39
|
+
.installed.cfg
|
|
40
|
+
*.egg
|
|
41
|
+
|
|
42
|
+
# PyInstaller
|
|
43
|
+
# Usually these files are written by a python script from a template
|
|
44
|
+
# before PyInstaller builds the exe, so as to inject date/other infos into it.
|
|
45
|
+
*.manifest
|
|
46
|
+
*.spec
|
|
47
|
+
|
|
48
|
+
# Installer logs
|
|
49
|
+
pip-log.txt
|
|
50
|
+
pip-delete-this-directory.txt
|
|
51
|
+
|
|
52
|
+
# Unit test / coverage reports
|
|
53
|
+
htmlcov/
|
|
54
|
+
.tox/
|
|
55
|
+
.coverage
|
|
56
|
+
.cache
|
|
57
|
+
nosetests.xml
|
|
58
|
+
coverage.xml
|
|
59
|
+
|
|
60
|
+
# Translations
|
|
61
|
+
*.mo
|
|
62
|
+
*.pot
|
|
63
|
+
|
|
64
|
+
# Django stuff:
|
|
65
|
+
*.log
|
|
66
|
+
|
|
67
|
+
# Sphinx documentation
|
|
68
|
+
docs/_build/
|
|
69
|
+
|
|
70
|
+
# PyBuilder
|
|
71
|
+
target/
|
|
72
|
+
|
|
73
|
+
# Virtual environment
|
|
74
|
+
.env
|
|
75
|
+
.venv/
|
|
76
|
+
venv/
|
|
77
|
+
|
|
78
|
+
# PyCharm
|
|
79
|
+
.idea
|
|
80
|
+
|
|
81
|
+
# Python mode for VIM
|
|
82
|
+
.ropeproject
|
|
83
|
+
**/.ropeproject
|
|
84
|
+
|
|
85
|
+
# Vim swap files
|
|
86
|
+
**/*.swp
|
|
87
|
+
|
|
88
|
+
# VS Code
|
|
89
|
+
.vscode/
|
|
90
|
+
|
|
91
|
+
# Investing algorithm specific files
|
|
92
|
+
/resources
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
# README created by investing_algorithm_framework
|
|
2
|
+
|
|
3
|
+
You can find the documentation for the investing_algorithm_framework
|
|
4
|
+
[here](https://coding-kitties.github.io/investing-algorithm-framework).
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
## Getting Started
|
|
8
|
+
|
|
9
|
+
This project was created using the investing_algorithm_framework CLI. It provides a template for building a trading algorithm using the investing_algorithm_framework.
|
|
10
|
+
|
|
11
|
+
This repository contains a simple trading algorithm that uses the
|
|
12
|
+
`investing_algorithm_framework` to fetch data from [bitvavo](https://www.bitvavo.com/en/) and execute trades on the [bitvavo exchange](https://www.bitvavo.com/en/).
|
|
13
|
+
|
|
14
|
+
The trading strategy is a simple moving average crossover strategy that uses the 50 and 100 day moving averages and the 200 day moving average as a trend filter. The strategy is implemented in the `strategy.py` file. The data provider is implemented in the `data_providers.py` file.
|
|
15
|
+
|
|
16
|
+
All indicators are implemented with the [pyindicators](https://github.com/coding-kitties/PyIndicators) library.
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
#### 1. Install the requirements
|
|
20
|
+
|
|
21
|
+
You can install the requirements using the following command:
|
|
22
|
+
```bash
|
|
23
|
+
pip install -r requirements.txt
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
This will install the `investing_algorithm_framework`, `pyindicators`, and
|
|
27
|
+
`python-dotenv` libraries. If you use the azure functions type option, it will also install the `azure-functions` library.
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
#### 2. Create a `.env` file
|
|
31
|
+
You need to create a `.env` file in the root of the project.
|
|
32
|
+
You can use the `.env.example` file as a template. The `.env` file should
|
|
33
|
+
contain the following environment variables:
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
<MARKET>_API_KEY=your_api_key
|
|
37
|
+
<MARKET>_API_SECRET=your_api_secret
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
##### 2.1 Changing the exchange
|
|
41
|
+
You can change the exchange in the `aws_function.py` file. The default is set to `bitvavo`,
|
|
42
|
+
but you can change it to any exchange you want. You can find the list of supported exchanges [here](https://investing-algorithm-framework.com/Getting%20Started/markets).
|
|
43
|
+
|
|
44
|
+
##### 2.2 AWS Lambda state handler
|
|
45
|
+
Given that this project is created with the `aws_lambda` type option,
|
|
46
|
+
it will use the AWS S3 state handler by default. This state handler
|
|
47
|
+
will store the state of the trading bot in an AWS S3 bucket. When deploying
|
|
48
|
+
the trading bot this bucket will be created automatically and configured
|
|
49
|
+
with your Lambda function.
|
|
50
|
+
|
|
51
|
+
#### 3. Deployment
|
|
52
|
+
You can deploy your trading bot to aws lambda using the following command:
|
|
53
|
+
|
|
54
|
+
This will deploy your trading bot to aws. You can find the
|
|
55
|
+
deployment instructions [here](https://investing-algorithm-framework.com/Getting%20Started/deployment).
|
|
56
|
+
|
|
57
|
+
> !Important: Make sure you have installed all your dependencies
|
|
58
|
+
> from the `requirements.txt` file in a local virtual environment
|
|
59
|
+
> before deploying. This is required for AWS Lambda to work correctly. The best
|
|
60
|
+
> way to do this is to create a virtual environment name .venv in the
|
|
61
|
+
> root of the project and install the requirements.txt file.
|
|
62
|
+
|
|
63
|
+
```bash
|
|
64
|
+
investing-algorithm-framework deploy_aws_lambda
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
#### 4. Backtesting
|
|
68
|
+
You can run the backtest using the following command:
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
python run_backtest.py
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
## Project Structure
|
|
75
|
+
|
|
76
|
+
> We highly recommend to keep the file structure as is, as it is
|
|
77
|
+
> designed to work with the investing_algorithm_framework CLI.
|
|
78
|
+
> You can add your own files and folders as needed, however, we
|
|
79
|
+
> recommend to keep the `strategies` folder for your strategies
|
|
80
|
+
> and the `app.py` file for your app entry point.
|
|
81
|
+
|
|
82
|
+
```yaml
|
|
83
|
+
.
|
|
84
|
+
├── .venv
|
|
85
|
+
├── aws_function.py
|
|
86
|
+
├── run_backtest.py
|
|
87
|
+
├── requirements.txt
|
|
88
|
+
├── strategies
|
|
89
|
+
│ ├── data_providers.py
|
|
90
|
+
│ └── strategy.py
|
|
91
|
+
├── .gitignore
|
|
92
|
+
├── .env
|
|
93
|
+
└── README.md
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
## Requirements
|
|
97
|
+
|
|
98
|
+
The project requires Python 3.10 or higher. You can create a virtual
|
|
99
|
+
environment and install the requirements using the following commands:
|
|
100
|
+
|
|
101
|
+
```bash
|
|
102
|
+
virtualenv venv
|
|
103
|
+
source venv/bin/activate # On Windows use `venv\Scripts\activate`
|
|
104
|
+
pip install -r requirements.txt
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
By default pyindicators is installed as its
|
|
108
|
+
specified in the requirements.txt file. This is a requirement for the
|
|
109
|
+
example strategy in the `strategy.py` file. You can always remove it from
|
|
110
|
+
the requirements.txt file if you don't need it.
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import azure.functions as func
|
|
2
|
+
import logging
|
|
3
|
+
import logging.config
|
|
4
|
+
from investing_algorithm_framework import DEFAULT_LOGGING_CONFIG,\
|
|
5
|
+
StatelessAction, AzureBlobStorageStateHandler
|
|
6
|
+
from app import app as trading_bot_app
|
|
7
|
+
|
|
8
|
+
trading_bot_app.add_state_handler(
|
|
9
|
+
state_handler=AzureBlobStorageStateHandler
|
|
10
|
+
)
|
|
11
|
+
|
|
12
|
+
logging.config.dictConfig(DEFAULT_LOGGING_CONFIG)
|
|
13
|
+
app = func.FunctionApp()
|
|
14
|
+
|
|
15
|
+
@app.route(route="ping", auth_level=func.AuthLevel.ANONYMOUS)
|
|
16
|
+
def trading_bot(req: func.HttpRequest) -> func.HttpResponse:
|
|
17
|
+
logging.info("Ping request received.")
|
|
18
|
+
|
|
19
|
+
try:
|
|
20
|
+
response = trading_bot_app.run(
|
|
21
|
+
payload={"action": StatelessAction.RUN_STRATEGY.value}
|
|
22
|
+
)
|
|
23
|
+
return func.HttpResponse(response, status_code=200)
|
|
24
|
+
except Exception as e:
|
|
25
|
+
return func.HttpResponse(
|
|
26
|
+
f"Error running ping action: {e}",
|
|
27
|
+
status_code=500
|
|
28
|
+
)
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
@app.route(route="run", auth_level=func.AuthLevel.ANONYMOUS)
|
|
32
|
+
def run_trading_bot(req: func.HttpRequest) -> func.HttpResponse:
|
|
33
|
+
logging.info("Run request received.")
|
|
34
|
+
try:
|
|
35
|
+
trading_bot_app.run(
|
|
36
|
+
payload={"action": StatelessAction.RUN_STRATEGY.value}
|
|
37
|
+
)
|
|
38
|
+
except Exception as e:
|
|
39
|
+
return func.HttpResponse(
|
|
40
|
+
f"Error running trading bot: {e}",
|
|
41
|
+
status_code=500
|
|
42
|
+
)
|
|
43
|
+
|
|
44
|
+
return func.HttpResponse(
|
|
45
|
+
"Trading bot executed successfully.",
|
|
46
|
+
status_code=200
|
|
47
|
+
)
|
|
48
|
+
|
|
49
|
+
@app.function_name(name="scheduled_trading_bot_run")
|
|
50
|
+
@app.schedule(
|
|
51
|
+
schedule="*/30 * * * * *", # Every 30 seconds Change as needed
|
|
52
|
+
arg_name="timer",
|
|
53
|
+
auth_level=func.AuthLevel.ANONYMOUS,
|
|
54
|
+
run_on_startup=True
|
|
55
|
+
)
|
|
56
|
+
def scheduled_trading_bot(timer: func.TimerRequest) -> None:
|
|
57
|
+
logging.info("Scheduled trading bot triggered.")
|
|
58
|
+
try:
|
|
59
|
+
trading_bot_app.run(
|
|
60
|
+
payload={"action": StatelessAction.RUN_STRATEGY.value}
|
|
61
|
+
)
|
|
62
|
+
except Exception as e:
|
|
63
|
+
logging.error(f"Error running scheduled trading bot: {e}")
|
|
64
|
+
raise e
|
|
65
|
+
logging.info("Scheduled trading bot executed successfully.")
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": "2.0",
|
|
3
|
+
"logging": {
|
|
4
|
+
"applicationInsights": {
|
|
5
|
+
"samplingSettings": {
|
|
6
|
+
"isEnabled": true,
|
|
7
|
+
"excludedTypes": "Request"
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
},
|
|
11
|
+
"extensionBundle": {
|
|
12
|
+
"id": "Microsoft.Azure.Functions.ExtensionBundle",
|
|
13
|
+
"version": "[4.*, 5.0.0)"
|
|
14
|
+
}
|
|
15
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
from investing_algorithm_framework import CCXTOHLCVMarketDataSource, \
|
|
2
|
+
CCXTTickerMarketDataSource
|
|
3
|
+
|
|
4
|
+
btc_eur_ohlcv_2h = CCXTOHLCVMarketDataSource(
|
|
5
|
+
identifier="BTC/EUR-ohlcv-2h",
|
|
6
|
+
market="BITVAVO",
|
|
7
|
+
symbol="BTC/EUR",
|
|
8
|
+
time_frame="2h",
|
|
9
|
+
window_size=200
|
|
10
|
+
)
|
|
11
|
+
|
|
12
|
+
btc_eur_ticker = CCXTTickerMarketDataSource(
|
|
13
|
+
identifier="BTC/EUR-ticker",
|
|
14
|
+
market="BITVAVO",
|
|
15
|
+
symbol="BTC/EUR",
|
|
16
|
+
backtest_time_frame="2h",
|
|
17
|
+
)
|