Compare commits

..

1831 Commits

Author SHA1 Message Date
Matthias
ab42f84daa Merge pull request #11011 from freqtrade/new_release
New release 2024.11
2024-12-01 20:11:57 +01:00
Matthias
f83a57ae5c chore: version bump to 2024.11 2024-12-01 19:35:02 +01:00
Matthias
56d747818d Merge branch 'stable' into new_release 2024-12-01 19:34:50 +01:00
Matthias
64b50d13fa chore: Add typehint for consolidated method 2024-12-01 16:25:00 +01:00
Matthias
0ada6fbd46 test: Add test case for kraken balance rewards 2024-12-01 15:34:36 +01:00
Matthias
2c8840b7e0 fix(kraken): consolidate balances from "rewards"
These currencies show up as <currency>.F -
but can be traded normally - hence we should count them as "tradable" balance.

closes #11007
closes #10925
2024-12-01 15:33:53 +01:00
Matthias
55247b4e12 chore: bump ccxt to 4.4.35 2024-12-01 15:19:45 +01:00
Matthias
f31b26b1ab tests: Improve sample_order online testing 2024-11-30 18:12:32 +01:00
Matthias
2b350eb872 tests: improve assert accuracy 2024-11-30 13:50:12 +01:00
Matthias
88d77658f8 tests: extract strategy_safe_wrapper tests 2024-11-30 13:49:04 +01:00
Matthias
cbbc386170 docs: update Hyperliquid docs to guide users to use API Wallets 2024-11-30 07:05:19 +01:00
Matthias
7f9226861a docs: slight formatting improvement 2024-11-30 07:04:19 +01:00
Matthias
9ff4298475 docs: update documentation for expanding pairs
This needs quoting otherwise zsh tries to expand the command,
causing failures.

closes #10996
2024-11-28 19:22:08 +01:00
Matthias
5793216d5c properly account for fee when assigning order.cost in backtesting
(although it's not relevant for operations, it shouldn't be obivously wrong).

closes #11003
2024-11-28 18:15:55 +01:00
Matthias
cf9c9fe278 Merge pull request #11001 from freqtrade/update/binance-leverage-tiers
Update Binance Leverage Tiers
2024-11-28 06:53:38 +01:00
xmatthias
7571ae19a0 chore: update pre-commit hooks 2024-11-28 03:14:33 +00:00
Matthias
58cde3253d docs: Fix rendering of $ signs 2024-11-27 06:41:45 +01:00
Matthias
47262b9350 docs: align character used for lists 2024-11-27 06:41:39 +01:00
Matthias
183909f474 chore: kwonly for cached arguments 2024-11-26 18:29:33 +01:00
Matthias
06bb43b13e chore: add missing docstring 2024-11-26 18:29:28 +01:00
Matthias
2ed8e1639f chore: move comment to where it belongs 2024-11-26 18:29:21 +01:00
Matthias
e78d5b7787 chore: improved typing of rpc class 2024-11-26 18:29:17 +01:00
Matthias
e0c6cc1563 feat: add log_responses to /balance endpoint
part of #10994
2024-11-26 10:23:03 +01:00
Matthias
472132c236 tests: update test for renamed prop 2024-11-26 07:08:55 +01:00
Matthias
1262aa19ec chore: make start_cap in wallets private 2024-11-26 06:37:35 +01:00
Matthias
e9e3f7ef16 Merge pull request #10992 from freqtrade/update/pre-commit-hooks
Update pre-commit hooks
2024-11-26 06:01:23 +01:00
xmatthias
d9d4c478cc chore: update pre-commit hooks 2024-11-26 03:13:21 +00:00
Matthias
db56fc158f test: update test market 2024-11-25 19:35:25 +01:00
Matthias
af8d2490e2 feat: improve is_futures market check 2024-11-25 19:35:25 +01:00
Matthias
fdc77bfd5b Merge pull request #10986 from freqtrade/dependabot/pip/develop/ruff-0.8.0
chore(deps-dev): bump ruff from 0.7.4 to 0.8.0
2024-11-25 07:55:15 +01:00
Matthias
5572d37c7f Merge pull request #10985 from freqtrade/dependabot/pip/develop/stable-baselines3-2.4.0
chore(deps): bump stable-baselines3 from 2.3.2 to 2.4.0
2024-11-25 07:39:01 +01:00
Matthias
57f2ab2f67 Merge pull request #10983 from freqtrade/dependabot/pip/develop/pydantic-2.10.1
chore(deps): bump pydantic from 2.9.2 to 2.10.1
2024-11-25 07:22:20 +01:00
Matthias
1cab52f555 Merge pull request #10988 from freqtrade/dependabot/pip/develop/numexpr-2.10.2
chore(deps): bump numexpr from 2.10.1 to 2.10.2
2024-11-25 07:07:41 +01:00
Matthias
748233ca70 chore: update imports to prevent shadowing internal exceptions 2024-11-25 06:39:18 +01:00
dependabot[bot]
f76108c5b5 chore(deps): bump pydantic from 2.9.2 to 2.10.1
Bumps [pydantic](https://github.com/pydantic/pydantic) from 2.9.2 to 2.10.1.
- [Release notes](https://github.com/pydantic/pydantic/releases)
- [Changelog](https://github.com/pydantic/pydantic/blob/main/HISTORY.md)
- [Commits](https://github.com/pydantic/pydantic/compare/v2.9.2...v2.10.1)

---
updated-dependencies:
- dependency-name: pydantic
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-11-25 05:31:31 +00:00
dependabot[bot]
09f94f7b56 chore(deps): bump stable-baselines3 from 2.3.2 to 2.4.0
Bumps [stable-baselines3](https://github.com/DLR-RM/stable-baselines3) from 2.3.2 to 2.4.0.
- [Release notes](https://github.com/DLR-RM/stable-baselines3/releases)
- [Commits](https://github.com/DLR-RM/stable-baselines3/compare/v2.3.2...v2.4.0)

---
updated-dependencies:
- dependency-name: stable-baselines3
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-11-25 05:31:16 +00:00
Matthias
a85b8d6edc Merge pull request #10984 from freqtrade/dependabot/pip/develop/uvicorn-0.32.1
chore(deps): bump uvicorn from 0.32.0 to 0.32.1
2024-11-25 06:30:54 +01:00
Matthias
52c9761e5b Merge pull request #10980 from freqtrade/dependabot/pip/develop/mkdocs-f608445ecc
chore(deps): bump mkdocs-material from 9.5.44 to 9.5.45 in the mkdocs group
2024-11-25 06:30:41 +01:00
Matthias
c2dbb9cb43 Merge pull request #10981 from freqtrade/dependabot/pip/develop/tqdm-4.67.1
chore(deps): bump tqdm from 4.67.0 to 4.67.1
2024-11-25 06:30:26 +01:00
Matthias
59c3743f77 Merge pull request #10982 from freqtrade/dependabot/pip/develop/orjson-3.10.12
chore(deps): bump orjson from 3.10.11 to 3.10.12
2024-11-25 06:30:09 +01:00
dependabot[bot]
98422f8476 chore(deps): bump numexpr from 2.10.1 to 2.10.2
Bumps [numexpr](https://github.com/pydata/numexpr) from 2.10.1 to 2.10.2.
- [Release notes](https://github.com/pydata/numexpr/releases)
- [Changelog](https://github.com/pydata/numexpr/blob/master/RELEASE_NOTES.rst)
- [Commits](https://github.com/pydata/numexpr/compare/v2.10.1...v2.10.2)

---
updated-dependencies:
- dependency-name: numexpr
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-11-25 03:46:25 +00:00
dependabot[bot]
8c6283a687 chore(deps-dev): bump ruff from 0.7.4 to 0.8.0
Bumps [ruff](https://github.com/astral-sh/ruff) from 0.7.4 to 0.8.0.
- [Release notes](https://github.com/astral-sh/ruff/releases)
- [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md)
- [Commits](https://github.com/astral-sh/ruff/compare/0.7.4...0.8.0)

---
updated-dependencies:
- dependency-name: ruff
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-11-25 03:45:45 +00:00
dependabot[bot]
1fd492d838 chore(deps): bump uvicorn from 0.32.0 to 0.32.1
Bumps [uvicorn](https://github.com/encode/uvicorn) from 0.32.0 to 0.32.1.
- [Release notes](https://github.com/encode/uvicorn/releases)
- [Changelog](https://github.com/encode/uvicorn/blob/master/CHANGELOG.md)
- [Commits](https://github.com/encode/uvicorn/compare/0.32.0...0.32.1)

---
updated-dependencies:
- dependency-name: uvicorn
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-11-25 03:45:25 +00:00
dependabot[bot]
fc63a713fd chore(deps): bump orjson from 3.10.11 to 3.10.12
Bumps [orjson](https://github.com/ijl/orjson) from 3.10.11 to 3.10.12.
- [Release notes](https://github.com/ijl/orjson/releases)
- [Changelog](https://github.com/ijl/orjson/blob/master/CHANGELOG.md)
- [Commits](https://github.com/ijl/orjson/compare/3.10.11...3.10.12)

---
updated-dependencies:
- dependency-name: orjson
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-11-25 03:45:09 +00:00
dependabot[bot]
e97b9820a4 chore(deps): bump tqdm from 4.67.0 to 4.67.1
Bumps [tqdm](https://github.com/tqdm/tqdm) from 4.67.0 to 4.67.1.
- [Release notes](https://github.com/tqdm/tqdm/releases)
- [Commits](https://github.com/tqdm/tqdm/compare/v4.67.0...v4.67.1)

---
updated-dependencies:
- dependency-name: tqdm
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-11-25 03:45:01 +00:00
dependabot[bot]
52f24af701 chore(deps): bump mkdocs-material in the mkdocs group
Bumps the mkdocs group with 1 update: [mkdocs-material](https://github.com/squidfunk/mkdocs-material).


Updates `mkdocs-material` from 9.5.44 to 9.5.45
- [Release notes](https://github.com/squidfunk/mkdocs-material/releases)
- [Changelog](https://github.com/squidfunk/mkdocs-material/blob/master/CHANGELOG)
- [Commits](https://github.com/squidfunk/mkdocs-material/compare/9.5.44...9.5.45)

---
updated-dependencies:
- dependency-name: mkdocs-material
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: mkdocs
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-11-25 03:44:56 +00:00
Matthias
b30c1523e3 chore: don't use e if not used 2024-11-24 10:36:31 +01:00
Matthias
6e1c4c2efd test: add test-case for improved error-handling 2024-11-24 10:36:09 +01:00
Matthias
3b542ea008 fix: add better error-handling for dataloading
closes #10978
2024-11-24 10:36:02 +01:00
Matthias
5841b56f2d chore: NotRequired from typing_extensions 2024-11-23 14:18:05 +01:00
Matthias
85ea29c93c fix: pydantic - typing_extensions type-dict 2024-11-23 14:05:52 +01:00
Matthias
f7e979141b chore: simplify imports 2024-11-23 13:09:17 +01:00
Matthias
e0bdc68a9e feat: support all parameters 2024-11-23 12:55:54 +01:00
Matthias
e6cfde211b feat: enhance api_download capabilities 2024-11-22 16:18:28 +01:00
Matthias
978aaa5c4b chore: improve API server cleanup 2024-11-22 16:17:26 +01:00
Matthias
b67beaa35a chore: simplify progress-tracker typing 2024-11-22 15:24:52 +01:00
Matthias
19f23106e7 tests: add test for download_data api method 2024-11-22 15:06:58 +01:00
Matthias
d8a2c59b04 chore: Add proper typing to jobContainer response 2024-11-22 15:06:58 +01:00
Matthias
dea785f562 feat: add progress_tasks to /background endpoint 2024-11-22 15:06:58 +01:00
Matthias
ca42f86900 feat: set progressTasks in Callback correctly 2024-11-22 15:06:58 +01:00
Matthias
de9294d1f4 feat: return progressTasks in API 2024-11-22 15:06:58 +01:00
Matthias
91b83519f5 feat: update types to support multiple progressbars 2024-11-22 15:06:58 +01:00
Matthias
3eb7f296aa fix: callback must be called after parent call 2024-11-22 15:06:58 +01:00
Matthias
f3b0e404f0 chore: update to new syntax 2024-11-22 15:06:58 +01:00
Matthias
3ba3d7ffcf feat: increment api_version 2024-11-22 15:06:58 +01:00
Matthias
832fa88f08 feat: api-download-data shouldn't require stake-currency 2024-11-22 15:06:58 +01:00
Matthias
6e9d349ceb feat: api progressbar handling 2024-11-22 15:06:57 +01:00
Matthias
8bd1524abc feat: pass progressbar into download-data functions 2024-11-22 15:06:57 +01:00
Matthias
72f5633061 feat: add ProgressLike protocol 2024-11-22 15:06:57 +01:00
Matthias
3b25bdc1cb feat(data-dl): Simplify download-data calls 2024-11-22 15:06:57 +01:00
Matthias
3690609519 feat: simplify api_download_data code duplication 2024-11-22 15:06:57 +01:00
Matthias
43c9d14ac2 refactor: extract exchangeInit from download-data main 2024-11-22 15:06:57 +01:00
Matthias
83122fa58b feat: add initial download-data api endpoints 2024-11-22 15:06:57 +01:00
Matthias
f23da7ea75 feat: Add initial data-download api schema 2024-11-22 15:06:57 +01:00
Matthias
7ef93e92e6 feat: Log if user has a Gate unified account 2024-11-21 20:57:20 +01:00
Matthias
945f9f8c47 docs: update unfilledtimeout.entry comment to remove false statement
closes #10966
2024-11-21 20:38:38 +01:00
Matthias
29b40d27e7 fix: hyperliquid doesn't provide "average" in fetch_order
therefore this needs to be filled from trades to have a good price
 for market orders
2024-11-21 20:31:56 +01:00
Matthias
cd83ed699c chore: add rejected to canceled order states 2024-11-21 20:04:52 +01:00
Matthias
02fcded368 chore: bump ccxt to 4.4.33
closes #10942
2024-11-21 18:17:14 +01:00
Matthias
18b0dfe28c fix: add stop_price_prop for hyperliquid
temporary workaround for #10960
2024-11-21 06:45:03 +01:00
Matthias
69be62f1e6 Merge pull request #10965 from freqtrade/update/binance-leverage-tiers
Update Binance Leverage Tiers
2024-11-21 06:28:15 +01:00
xmatthias
7136c5b414 chore: update pre-commit hooks 2024-11-21 03:10:53 +00:00
Matthias
b637e7dde4 docs: add "impossible to load" FAQ entry 2024-11-20 07:00:29 +01:00
Matthias
f545274a0e test: add test for bybit classic account behavior
related: #10872
2024-11-19 18:19:27 +01:00
Matthias
e8c122d5ed fix: bybit classic market buy orders require price
closes #10872
2024-11-19 18:18:47 +01:00
Matthias
9457f63e01 Merge pull request #10954 from freqtrade/dependabot/pip/aiohttp-3.10.11
chore(deps): bump aiohttp from 3.10.10 to 3.10.11
2024-11-19 06:28:51 +01:00
Matthias
df004a2c7a Merge pull request #10955 from freqtrade/update/pre-commit-hooks
Update pre-commit hooks
2024-11-19 06:26:43 +01:00
xmatthias
a698ee8bc8 chore: update pre-commit hooks 2024-11-19 03:12:02 +00:00
dependabot[bot]
1228ffe109 chore(deps): bump aiohttp from 3.10.10 to 3.10.11
Bumps [aiohttp](https://github.com/aio-libs/aiohttp) from 3.10.10 to 3.10.11.
- [Release notes](https://github.com/aio-libs/aiohttp/releases)
- [Changelog](https://github.com/aio-libs/aiohttp/blob/master/CHANGES.rst)
- [Commits](https://github.com/aio-libs/aiohttp/compare/v3.10.10...v3.10.11)

---
updated-dependencies:
- dependency-name: aiohttp
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-11-18 21:04:54 +00:00
Matthias
076a10887b Merge pull request #10947 from freqtrade/dependabot/pip/develop/pycoingecko-3.2.0
chore(deps): bump pycoingecko from 3.1.0 to 3.2.0
2024-11-18 07:48:22 +01:00
Matthias
fc3db2d29c chore: force pycoingecko to be > 3.2.0
that's the first version supporting demo API keys
2024-11-18 07:13:21 +01:00
Matthias
971cdbb918 chore: Simplify coingecko wrapper after update 2024-11-18 07:13:21 +01:00
dependabot[bot]
73adbe9e0c chore(deps): bump pycoingecko from 3.1.0 to 3.2.0
Bumps [pycoingecko](https://github.com/man-c/pycoingecko) from 3.1.0 to 3.2.0.
- [Changelog](https://github.com/man-c/pycoingecko/blob/master/CHANGELOG.md)
- [Commits](https://github.com/man-c/pycoingecko/compare/3.1.0...3.2.0)

---
updated-dependencies:
- dependency-name: pycoingecko
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-11-18 07:13:02 +01:00
Matthias
8363609637 chore: fix typo in comment 2024-11-18 07:05:13 +01:00
Matthias
705c3a408a Merge pull request #10953 from freqtrade/dependabot/pip/develop/fastapi-0.115.5
chore(deps): bump fastapi from 0.115.4 to 0.115.5
2024-11-18 06:35:26 +01:00
Matthias
228fc5ce73 Merge pull request #10949 from freqtrade/dependabot/pip/develop/pyjwt-2.10.0
chore(deps): bump pyjwt from 2.9.0 to 2.10.0
2024-11-18 06:35:04 +01:00
Matthias
09885535ac Merge pull request #10950 from freqtrade/dependabot/pip/develop/ruff-0.7.4
chore(deps-dev): bump ruff from 0.7.3 to 0.7.4
2024-11-18 06:34:42 +01:00
Matthias
de139af5a5 Merge pull request #10951 from freqtrade/dependabot/pip/develop/websockets-14.1
chore(deps): bump websockets from 14.0 to 14.1
2024-11-18 06:33:56 +01:00
dependabot[bot]
d9c7790e82 chore(deps): bump fastapi from 0.115.4 to 0.115.5
Bumps [fastapi](https://github.com/fastapi/fastapi) from 0.115.4 to 0.115.5.
- [Release notes](https://github.com/fastapi/fastapi/releases)
- [Commits](https://github.com/fastapi/fastapi/compare/0.115.4...0.115.5)

---
updated-dependencies:
- dependency-name: fastapi
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-11-18 03:58:03 +00:00
dependabot[bot]
aa03b7d9a0 chore(deps): bump websockets from 14.0 to 14.1
Bumps [websockets](https://github.com/python-websockets/websockets) from 14.0 to 14.1.
- [Release notes](https://github.com/python-websockets/websockets/releases)
- [Commits](https://github.com/python-websockets/websockets/compare/14.0...14.1)

---
updated-dependencies:
- dependency-name: websockets
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-11-18 03:57:52 +00:00
dependabot[bot]
8f9d0019e6 chore(deps-dev): bump ruff from 0.7.3 to 0.7.4
Bumps [ruff](https://github.com/astral-sh/ruff) from 0.7.3 to 0.7.4.
- [Release notes](https://github.com/astral-sh/ruff/releases)
- [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md)
- [Commits](https://github.com/astral-sh/ruff/compare/0.7.3...0.7.4)

---
updated-dependencies:
- dependency-name: ruff
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-11-18 03:57:42 +00:00
dependabot[bot]
9e3fae1991 chore(deps): bump pyjwt from 2.9.0 to 2.10.0
Bumps [pyjwt](https://github.com/jpadilla/pyjwt) from 2.9.0 to 2.10.0.
- [Release notes](https://github.com/jpadilla/pyjwt/releases)
- [Changelog](https://github.com/jpadilla/pyjwt/blob/master/CHANGELOG.rst)
- [Commits](https://github.com/jpadilla/pyjwt/compare/2.9.0...2.10.0)

---
updated-dependencies:
- dependency-name: pyjwt
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-11-18 03:57:19 +00:00
Matthias
5dcb239253 Merge pull request #10944 from smith558/patch-1
Fix typo
2024-11-17 09:04:38 +01:00
Stanislav (Stanley) Modrak
9fcdea14d7 Fix typo 2024-11-16 20:52:31 +00:00
Matthias
85dbe83154 Merge pull request #10943 from emmanuel-ferdman/develop
docs: update `VolumePairList` reference
2024-11-16 17:07:16 +01:00
Matthias
ee48da2a0a docs: slightly reword data message 2024-11-16 15:51:33 +01:00
Emmanuel Ferdman
f477389159 docs: update VolumePairList reference
Signed-off-by: Emmanuel Ferdman <emmanuelferdman@gmail.com>
2024-11-16 06:26:56 -08:00
Matthias
3bb7f78255 chore: fix import sorting 2024-11-16 13:25:54 +01:00
Matthias
25aecfa9b2 docs: slightly update download-data docs 2024-11-16 13:07:23 +01:00
Matthias
f821e504c3 tests: update test for new behavior 2024-11-16 12:58:31 +01:00
Matthias
d66381863e feat: don't force-redownload all data
If the given timerange starts prior to the available data,
the bot shouldn't force-download everything unless forced via `--erase`
or via `--prepend`.
2024-11-16 12:58:23 +01:00
Matthias
68712c884e chore: fix line length 2024-11-16 12:51:13 +01:00
Matthias
db9b31cb85 chore: don't use unsupported syntax 2024-11-16 12:40:03 +01:00
Matthias
7090d4e5ba fix: override gate funding fee limit to 90
(seems to be the new limit)
2024-11-16 11:56:05 +01:00
Matthias
b2423fa390 chore: remove explicit ohlcv_candle_limit in favor of config option 2024-11-16 11:54:54 +01:00
Matthias
83b87cb812 feat: add explicit funding_fee_candle_limit for simplified overriding 2024-11-16 11:54:28 +01:00
Matthias
44dcb4cc78 Merge pull request #10839 from gaardiolor/hyperliquid
Hyperliquid
2024-11-16 11:18:03 +01:00
Matthias
64803a735d tests: update commands tests to early fail approach 2024-11-16 11:07:19 +01:00
Matthias
20e77bb5d9 test: update tests to recognize early failing 2024-11-16 11:02:22 +01:00
Matthias
f11e5128ad tests: update tests for new dl-trades behavior 2024-11-16 10:58:25 +01:00
Matthias
bbe13cafcb tests: Remove pointless test 2024-11-16 10:46:48 +01:00
Matthias
1acca87fbf chore: early-exit when no pairs are available 2024-11-16 10:46:23 +01:00
Matthias
2012bb7c53 chore: improve logging sequence 2024-11-16 10:43:01 +01:00
Matthias
14d384a30a feat: don't auto-delete trades data due to invalid timerange
trades-data is already slow enough to download
2024-11-16 10:34:24 +01:00
Matthias
927f5e2c8b tests: enhanced test for get_trade_history on binance 2024-11-16 10:10:30 +01:00
Matthias
d59bedf977 feat: download-trades-data on binance has limited history
with from=0, we can get the initial data available.

closes #10941
2024-11-16 10:02:22 +01:00
Matthias
c61a71a36e fix: percent_change from candle must provide percentage, not ratio
closes #10937
2024-11-16 08:50:41 +01:00
Matthias
46f2e693bc chore: bump ccxt to 4.4.31 2024-11-15 21:57:58 +01:00
Matthias
cbc4bb5420 chore: use __all__ for hyperopt main export 2024-11-15 07:24:46 +01:00
Matthias
49e85e0680 docs: update migration docs to new syntax
only update the "after" parts.
No changs to highlighting, as the actual syntax used is not relevant for the strategy.
2024-11-15 07:21:22 +01:00
Matthias
e8d724680a chore: improved log msg wording 2024-11-15 07:19:05 +01:00
Matthias
6d9ab5e9ff docs: update more typing wordings 2024-11-15 07:18:41 +01:00
Matthias
a6d513a0e6 docs: update callback docs to new syntax 2024-11-15 07:15:31 +01:00
Matthias
d565c40f4b docs: Updated syntax 2024-11-15 07:11:54 +01:00
Matthias
52b4ae5eae Docs: Align to 3.10 syntax 2024-11-15 07:10:31 +01:00
Matthias
5c4b9e59d1 chore: add Hyperliquid as supported exchange to docs 2024-11-14 07:08:27 +01:00
Matthias
a02f63dcc3 chore: add hyperliquid to supported exchange list 2024-11-14 07:06:43 +01:00
Matthias
a3a94e6ea4 chore: reorder hyperliquid docs, add note about order types 2024-11-14 07:06:09 +01:00
Matthias
c039a45def fix: hyperliquid market orders don't exist and always require price 2024-11-14 07:04:39 +01:00
Matthias
3276dd6b94 Merge pull request #10931 from freqtrade/update/binance-leverage-tiers
Update Binance Leverage Tiers
2024-11-14 06:34:32 +01:00
xmatthias
de306de78b chore: update pre-commit hooks 2024-11-14 03:06:23 +00:00
Matthias
9360c109a9 docs: fix spelling 2024-11-12 19:32:42 +01:00
Matthias
5d9af5a7da test: update tests with new formatting 2024-11-12 19:27:17 +01:00
Matthias
88e0fed4c4 fix: Consistently format pair rate between entry and exit messages
closes #10922
2024-11-12 19:27:17 +01:00
Matthias
98dcc08c6d feat: add fmt_coin2 2024-11-12 19:27:17 +01:00
gaardiolor
702b50e7e9 Update exchanges.md - less details on the private key conversion 2024-11-12 18:22:19 +01:00
gaardiolor
8f946ea1b2 Update exchanges.md - further clarify private key best practices 2024-11-12 18:13:31 +01:00
Matthias
4e5ae0af84 Merge pull request #10919 from freqtrade/refactor/hyperopt
Restore hyperopt logging, refactor hyperopt layout
2024-11-12 18:13:02 +01:00
Matthias
ca00871362 chore: adopt hyperopt class to new ruff formatting 2024-11-12 18:05:51 +01:00
Matthias
a1d8658297 Merge branch 'develop' into pr/gaardiolor/10839 2024-11-12 18:05:25 +01:00
gaardiolor
31814e8bf9 Update docs/stoploss.md - clarify that stoploss_on_exchange is only supported for hyperliquid futures
Co-authored-by: Matthias <xmatthias@outlook.com>
2024-11-12 17:55:12 +01:00
Matthias
0028df2564 feat(hyperliquid): fix a few settings to make spot work properly 2024-11-12 06:58:21 +01:00
Matthias
9b3764212f chore: fix bad import 2024-11-12 06:30:55 +01:00
Matthias
8128b85706 Merge pull request #10921 from freqtrade/update/pre-commit-hooks
Update pre-commit hooks
2024-11-12 06:24:15 +01:00
xmatthias
d7c88a38fc chore: update pre-commit hooks 2024-11-12 03:04:16 +00:00
Matthias
0b0b221c02 chore: update advanced template to new formatting 2024-11-11 20:25:15 +01:00
Matthias
d9b8f46282 docs: update doc samples to use lowercased tuple and dict 2024-11-11 20:24:01 +01:00
Matthias
fbb64db3ae define log_queue globally 2024-11-11 20:14:37 +01:00
Matthias
33d8e67a87 docs: add note about logging 2024-11-11 20:12:31 +01:00
Matthias
f05f173d23 chore: improved docstring for logging_mp_handle 2024-11-11 19:53:59 +01:00
Matthias
81a622a9fa chore: remove unnecessary log messages 2024-11-11 19:53:26 +01:00
Matthias
67415dd7e2 chore: improved module docstring 2024-11-11 19:53:04 +01:00
Matthias
e8cd6b3be3 Merge pull request #10910 from freqtrade/dependabot/pip/develop/websockets-14.0
chore(deps): bump websockets from 13.1 to 14.0
2024-11-11 19:48:05 +01:00
Matthias
7e96e7af83 feat: add hyperopt log handlers to allow for multiprocessing logging 2024-11-11 19:43:37 +01:00
Matthias
119b73ead2 chore: improtve method sorting 2024-11-11 19:43:37 +01:00
Matthias
365c454da1 chore: Improve import comments 2024-11-11 19:43:37 +01:00
Matthias
b6d1f9f754 test: update hyperopt tests for new structure 2024-11-11 19:43:37 +01:00
Matthias
6719d9670d feat: split hyperopt class
this ensures it's clear which parts are passed to workers
2024-11-11 19:43:37 +01:00
Matthias
62234878a1 test: update mocks for new layout 2024-11-11 19:43:37 +01:00
Matthias
851a9a7620 refactor: move hyperopt-auto 2024-11-11 19:43:37 +01:00
Matthias
61d9002cb1 refactor: move hyperopt-output 2024-11-11 19:43:37 +01:00
Matthias
84fc5dfcf7 refactor: move hyperopt-loss interface 2024-11-11 19:43:37 +01:00
Matthias
e1b3ae208d chore: move hyperopt to it's own module 2024-11-11 19:43:37 +01:00
Matthias
60ec9739c2 chore: update websocket implementation to new asyncio api 2024-11-11 19:21:45 +01:00
Matthias
c9fb3dfb1d chore: Update websocket imports to use "legacy" client
temporary - must be updated to the new implementation
2024-11-11 07:09:13 +01:00
Matthias
8230d1b515 Merge pull request #10913 from freqtrade/dependabot/pip/develop/ccxt-4.4.29
chore(deps): bump ccxt from 4.4.26 to 4.4.29
2024-11-11 06:29:59 +01:00
dependabot[bot]
838b4f4e52 chore(deps): bump websockets from 13.1 to 14.0
Bumps [websockets](https://github.com/python-websockets/websockets) from 13.1 to 14.0.
- [Release notes](https://github.com/python-websockets/websockets/releases)
- [Commits](https://github.com/python-websockets/websockets/compare/13.1...14.0)

---
updated-dependencies:
- dependency-name: websockets
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-11-11 05:29:17 +00:00
Matthias
eae5b154c9 Merge pull request #10908 from freqtrade/dependabot/pip/develop/mkdocs-54fce57b69
chore(deps): bump mkdocs-material from 9.5.43 to 9.5.44 in the mkdocs group
2024-11-11 06:28:51 +01:00
Matthias
ebc870d2d4 Merge pull request #10911 from freqtrade/dependabot/pip/develop/packaging-24.2
chore(deps): bump packaging from 24.1 to 24.2
2024-11-11 06:28:15 +01:00
Matthias
986b1aadbf Merge pull request #10912 from freqtrade/dependabot/pip/develop/tqdm-4.67.0
chore(deps): bump tqdm from 4.66.6 to 4.67.0
2024-11-11 06:27:16 +01:00
Matthias
9ced73bf19 Merge pull request #10914 from freqtrade/dependabot/pip/develop/ruff-0.7.3
chore(deps-dev): bump ruff from 0.7.2 to 0.7.3
2024-11-11 06:26:38 +01:00
Matthias
f0428d5c99 Merge pull request #10915 from freqtrade/dependabot/pip/develop/python-telegram-bot-21.7
chore(deps): bump python-telegram-bot from 21.6 to 21.7
2024-11-11 06:26:11 +01:00
Matthias
486a0d2c6e Merge pull request #10916 from freqtrade/dependabot/github_actions/develop/pypa/gh-action-pypi-publish-1.12.2
chore(deps): bump pypa/gh-action-pypi-publish from 1.11.0 to 1.12.2
2024-11-11 06:25:47 +01:00
dependabot[bot]
13cf6a1007 chore(deps): bump pypa/gh-action-pypi-publish from 1.11.0 to 1.12.2
Bumps [pypa/gh-action-pypi-publish](https://github.com/pypa/gh-action-pypi-publish) from 1.11.0 to 1.12.2.
- [Release notes](https://github.com/pypa/gh-action-pypi-publish/releases)
- [Commits](https://github.com/pypa/gh-action-pypi-publish/compare/v1.11.0...v1.12.2)

---
updated-dependencies:
- dependency-name: pypa/gh-action-pypi-publish
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-11-11 03:54:30 +00:00
dependabot[bot]
4c59bcc1bb chore(deps): bump python-telegram-bot from 21.6 to 21.7
Bumps [python-telegram-bot](https://github.com/python-telegram-bot/python-telegram-bot) from 21.6 to 21.7.
- [Release notes](https://github.com/python-telegram-bot/python-telegram-bot/releases)
- [Changelog](https://github.com/python-telegram-bot/python-telegram-bot/blob/master/CHANGES.rst)
- [Commits](https://github.com/python-telegram-bot/python-telegram-bot/compare/v21.6...v21.7)

---
updated-dependencies:
- dependency-name: python-telegram-bot
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-11-11 03:11:15 +00:00
dependabot[bot]
057bb31d94 chore(deps-dev): bump ruff from 0.7.2 to 0.7.3
Bumps [ruff](https://github.com/astral-sh/ruff) from 0.7.2 to 0.7.3.
- [Release notes](https://github.com/astral-sh/ruff/releases)
- [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md)
- [Commits](https://github.com/astral-sh/ruff/compare/0.7.2...0.7.3)

---
updated-dependencies:
- dependency-name: ruff
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-11-11 03:11:00 +00:00
dependabot[bot]
6258c0671b chore(deps): bump ccxt from 4.4.26 to 4.4.29
Bumps [ccxt](https://github.com/ccxt/ccxt) from 4.4.26 to 4.4.29.
- [Release notes](https://github.com/ccxt/ccxt/releases)
- [Changelog](https://github.com/ccxt/ccxt/blob/master/CHANGELOG.md)
- [Commits](https://github.com/ccxt/ccxt/compare/4.4.26...4.4.29)

---
updated-dependencies:
- dependency-name: ccxt
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-11-11 03:10:48 +00:00
dependabot[bot]
b3b45458f6 chore(deps): bump tqdm from 4.66.6 to 4.67.0
Bumps [tqdm](https://github.com/tqdm/tqdm) from 4.66.6 to 4.67.0.
- [Release notes](https://github.com/tqdm/tqdm/releases)
- [Commits](https://github.com/tqdm/tqdm/compare/v4.66.6...v4.67.0)

---
updated-dependencies:
- dependency-name: tqdm
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-11-11 03:10:40 +00:00
dependabot[bot]
54047a98b3 chore(deps): bump packaging from 24.1 to 24.2
Bumps [packaging](https://github.com/pypa/packaging) from 24.1 to 24.2.
- [Release notes](https://github.com/pypa/packaging/releases)
- [Changelog](https://github.com/pypa/packaging/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/pypa/packaging/compare/24.1...24.2)

---
updated-dependencies:
- dependency-name: packaging
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-11-11 03:10:35 +00:00
dependabot[bot]
6411dcbf72 chore(deps): bump mkdocs-material in the mkdocs group
Bumps the mkdocs group with 1 update: [mkdocs-material](https://github.com/squidfunk/mkdocs-material).


Updates `mkdocs-material` from 9.5.43 to 9.5.44
- [Release notes](https://github.com/squidfunk/mkdocs-material/releases)
- [Changelog](https://github.com/squidfunk/mkdocs-material/blob/master/CHANGELOG)
- [Commits](https://github.com/squidfunk/mkdocs-material/compare/9.5.43...9.5.44)

---
updated-dependencies:
- dependency-name: mkdocs-material
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: mkdocs
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-11-11 03:10:03 +00:00
Matthias
1818215fee feat: add MultiMetricLoss to "builtin hyperopt loss" list 2024-11-10 10:11:15 +01:00
Matthias
1ffceef9f0 tests: Improve test further 2024-11-10 09:27:10 +01:00
Matthias
be1426a5f6 feat: create strategy-dir if it doesn't exist 2024-11-10 09:18:56 +01:00
Matthias
3ebb819ba3 tests: update new-strategy test to use tmpdir 2024-11-10 09:18:56 +01:00
Matthias
5f16e534ee feat: add support for --strategy-path to new-strategy 2024-11-10 09:18:56 +01:00
Matthias
8f8e6f16b4 chore: remove unused mock imports 2024-11-10 09:18:56 +01:00
Matthias
b5592b88fa Merge pull request #10898 from xzmeng/ruff310
chore: bump ruff target-version to 3.10
2024-11-10 09:06:28 +01:00
Matthias
ba06269ed7 chore: update commented type 2024-11-10 08:47:24 +01:00
Matthias
e450baeac4 Merge pull request #10902 from 14790897/develop
feat: enhance data fetching logic with pagination to increase market …
2024-11-09 18:39:47 +01:00
Matthias
3a81b6a08f chore: improve warning wording 2024-11-09 18:18:54 +01:00
Matthias
b7a2efcd6a docs: update docs with new marketcaplist behavior 2024-11-09 18:12:48 +01:00
Meng Xiangzhuo
a605d50d69 chore: revert minimum python version check 2024-11-10 00:22:32 +08:00
liuweiqing
27d894b8e9 chore: remove warnings 2024-11-09 18:40:32 +08:00
liuweiqing
14f1ef8e30 Merge branch 'develop' of https://github.com/freqtrade/freqtrade into develop 2024-11-09 18:23:30 +08:00
liuweiqing
7b471d59c5 chore: add warning when max_rank exceeds 250 in MarketCapPairList 2024-11-09 18:23:27 +08:00
Matthias
5ca102ffee Merge pull request #10901 from freqtrade/remove_brew
Attempt Remove brew hdf5 installs
2024-11-09 09:02:15 +01:00
Matthias
0e04f79b6d docs: add macos libomp to docs
closes #10900
2024-11-09 08:30:19 +01:00
Matthias
c141b873c3 docs: Update install docs 2024-11-09 08:24:37 +01:00
Matthias
3cc97690a4 tests: add hyperliquid lev_prep test 2024-11-09 08:11:23 +01:00
Matthias
5b7f08137f tests: improve hyperliquid tests 2024-11-09 08:09:57 +01:00
liuweiqing
00318be59f chore: Convert page number to string to ensure type compatibility 2024-11-09 11:25:31 +08:00
Matthias
37c00d4eeb chore: keep libomp brew install 2024-11-08 07:59:47 +01:00
liuweiqing
3300d25e57 feat: enhance data fetching logic with pagination to increase market cap rank limit 2024-11-08 14:50:21 +08:00
Matthias
f443b1426f chore: try removing all brew install steps
(hdf5 provides proper wheels now)
2024-11-08 07:03:03 +01:00
Matthias
96354ee1d8 docs: fix hyperliquid docs formatting 2024-11-08 06:45:45 +01:00
Meng Xiangzhuo
41b725714f chore: bump ruff target-version to 3.10 2024-11-08 04:37:33 +08:00
Matthias
12560e983c docs: Add note about custom-stoploss exit reasons 2024-11-07 19:57:41 +01:00
Matthias
44ff6d50ec docs: further clarify telegram docs 2024-11-07 07:22:54 +01:00
Matthias
29c1cca990 chore: don't modify original dict when initializing ccxt 2024-11-07 07:03:01 +01:00
Matthias
979f7ba78c docs: improved wording on telegram docs 2024-11-07 06:38:22 +01:00
Matthias
b6dfe01628 chore: improve loudness call structure 2024-11-07 06:32:23 +01:00
Matthias
d4cd5ba231 chore: Add loudness docstring 2024-11-07 06:29:23 +01:00
Matthias
e7cf1e34cf docs: update docs to better explain options for telegram settings
closes #10895
2024-11-07 06:29:23 +01:00
Matthias
c9718de24c feat: Update config_schema with support for exit_fill 2024-11-07 06:29:23 +01:00
Matthias
c58b1f0fd2 feat: add "*" to define custom default for non-defined exit reasons 2024-11-07 06:29:23 +01:00
Matthias
b720ae5d75 feat: Support individual exits for both exit-fill and exit messages 2024-11-07 06:29:23 +01:00
Matthias
3cea1a99b7 tests: add explicit notification enablement test 2024-11-07 06:29:23 +01:00
Matthias
03eb079a5e chore: slightly refactor telegram loudness control 2024-11-07 06:29:23 +01:00
Matthias
899db2de78 docs: improve formatting of telegram docs page 2024-11-07 06:29:23 +01:00
Matthias
22338d7058 Merge pull request #10896 from freqtrade/update/binance-leverage-tiers
Update Binance Leverage Tiers
2024-11-07 06:29:11 +01:00
xmatthias
db6d7714a4 chore: update pre-commit hooks 2024-11-07 03:07:11 +00:00
gaardiolor
2de4f425ff Update stoploss.md - add hyperliquid 2024-11-06 21:41:59 +01:00
gaardiolor
a71ab6e2ae Update exchanges.md - add hyperliquid stoploss_on_exchange note 2024-11-06 21:39:56 +01:00
gaardiolor
0b6bf701ef Update exchanges.md - typo 2024-11-06 10:29:23 +01:00
gaardiolor
38eb4eed97 Reverted changes related to create_order_has_all_data 2024-11-05 22:37:12 +01:00
gaardiolor
bdb54f56d9 Update exchanges.md - add Hyperliquid 2024-11-05 21:21:11 +01:00
Matthias
3eb2981fb4 chore: add explaining comment for "not fill" branch 2024-11-05 20:45:58 +01:00
Matthias
835269825d fix: improve stake-amount in order "created" message 2024-11-05 20:35:59 +01:00
Matthias
12ab1cb2c4 tests: add explicit test for stake_amount_filled 2024-11-05 07:19:49 +01:00
Matthias
07f0e3803a docs: add stake_amount_filled documentation 2024-11-05 07:19:39 +01:00
Matthias
3d307fe8ff feat: add stake_amount_filled order attribute 2024-11-05 07:19:09 +01:00
Matthias
5cb4a65cbd fix: use order.safe_amount for "order created" entry message 2024-11-05 07:06:07 +01:00
Matthias
84ce065f76 Merge pull request #10890 from freqtrade/update/pre-commit-hooks
Update pre-commit hooks
2024-11-05 06:24:12 +01:00
xmatthias
6398d7ff23 chore: update pre-commit hooks 2024-11-05 03:05:06 +00:00
Matthias
7e3f8ad012 tests: update test to not test for non-existing property 2024-11-04 20:14:30 +01:00
Matthias
8703c87880 chore: improve a few more types 2024-11-04 19:40:11 +01:00
Matthias
7e010c88b9 chore: Improve type safety 2024-11-04 19:32:46 +01:00
Matthias
dad921bf5b chore: use CcxtOrder in more places 2024-11-04 19:30:51 +01:00
Matthias
e020bafc38 chore: simplify calculation by reducing dict lookups 2024-11-04 18:22:20 +01:00
Matthias
ecf5e1ce6b chore: first step to improved ccxtOrder Typing 2024-11-04 18:16:00 +01:00
Matthias
31bcee1a13 Merge pull request #10887 from freqtrade/dependabot/pip/develop/pyarrow-18.0.0
chore(deps): bump pyarrow from 17.0.0 to 18.0.0
2024-11-04 09:55:54 +01:00
Matthias
6245127ce1 chore: update pyarrow armhf prebuilt wheel 2024-11-04 09:27:51 +01:00
Matthias
d1a4b9ad85 Merge pull request #10885 from freqtrade/dependabot/pip/develop/pymdown-extensions-10.12
chore(deps): bump pymdown-extensions from 10.11.2 to 10.12
2024-11-04 07:48:05 +01:00
Matthias
167e615f67 Merge pull request #10886 from freqtrade/dependabot/pip/develop/ccxt-4.4.26
chore(deps): bump ccxt from 4.4.24 to 4.4.26
2024-11-04 07:37:56 +01:00
Matthias
9c1b0471ca Merge pull request #10884 from freqtrade/dependabot/pip/develop/torch-2.5.1
chore(deps): bump torch from 2.5.0 to 2.5.1
2024-11-04 07:25:27 +01:00
Matthias
96a8a94309 Merge pull request #10883 from freqtrade/dependabot/pip/develop/orjson-3.10.11
chore(deps): bump orjson from 3.10.10 to 3.10.11
2024-11-04 07:15:13 +01:00
Matthias
d2960aae3c Merge pull request #10882 from freqtrade/dependabot/pip/develop/ruff-0.7.2
chore(deps-dev): bump ruff from 0.7.1 to 0.7.2
2024-11-04 07:11:01 +01:00
Matthias
3f1a23615a Merge pull request #10881 from freqtrade/dependabot/pip/develop/janus-1.1.0
chore(deps): bump janus from 1.0.0 to 1.1.0
2024-11-04 07:10:33 +01:00
dependabot[bot]
78de0f3167 chore(deps): bump pyarrow from 17.0.0 to 18.0.0
Bumps [pyarrow](https://github.com/apache/arrow) from 17.0.0 to 18.0.0.
- [Release notes](https://github.com/apache/arrow/releases)
- [Commits](https://github.com/apache/arrow/compare/go/v17.0.0...apache-arrow-18.0.0)

---
updated-dependencies:
- dependency-name: pyarrow
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-11-04 05:40:36 +00:00
Matthias
718e900a39 Merge pull request #10879 from freqtrade/dependabot/pip/develop/rich-13.9.4
chore(deps): bump rich from 13.9.3 to 13.9.4
2024-11-04 06:39:56 +01:00
Matthias
eff2a857c0 Merge pull request #10878 from freqtrade/dependabot/pip/develop/tqdm-4.66.6
chore(deps): bump tqdm from 4.66.5 to 4.66.6
2024-11-04 06:39:42 +01:00
Matthias
cf2b5cc24d Merge pull request #10876 from freqtrade/dependabot/pip/develop/pytest-01f0e07c3f
chore(deps-dev): bump pytest-cov from 5.0.0 to 6.0.0 in the pytest group
2024-11-04 06:39:14 +01:00
dependabot[bot]
7859fadf6b chore(deps): bump pymdown-extensions from 10.11.2 to 10.12
Bumps [pymdown-extensions](https://github.com/facelessuser/pymdown-extensions) from 10.11.2 to 10.12.
- [Release notes](https://github.com/facelessuser/pymdown-extensions/releases)
- [Commits](https://github.com/facelessuser/pymdown-extensions/compare/10.11.2...10.12)

---
updated-dependencies:
- dependency-name: pymdown-extensions
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-11-04 05:27:37 +00:00
Matthias
34588b7dc0 Merge pull request #10875 from freqtrade/dependabot/github_actions/develop/pypa/gh-action-pypi-publish-1.11.0
chore(deps): bump pypa/gh-action-pypi-publish from 1.10.3 to 1.11.0
2024-11-04 06:26:39 +01:00
Matthias
f6999898d5 Merge pull request #10877 from freqtrade/dependabot/pip/develop/mkdocs-0610082a93
chore(deps): bump mkdocs-material from 9.5.42 to 9.5.43 in the mkdocs group
2024-11-04 06:26:25 +01:00
dependabot[bot]
821243ce7c chore(deps): bump ccxt from 4.4.24 to 4.4.26
Bumps [ccxt](https://github.com/ccxt/ccxt) from 4.4.24 to 4.4.26.
- [Release notes](https://github.com/ccxt/ccxt/releases)
- [Changelog](https://github.com/ccxt/ccxt/blob/master/CHANGELOG.md)
- [Commits](https://github.com/ccxt/ccxt/compare/4.4.24...4.4.26)

---
updated-dependencies:
- dependency-name: ccxt
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-11-04 03:35:00 +00:00
dependabot[bot]
44d0abb111 chore(deps): bump torch from 2.2.2 to 2.5.1
Bumps [torch](https://github.com/pytorch/pytorch) from 2.2.2 to 2.5.1.
- [Release notes](https://github.com/pytorch/pytorch/releases)
- [Changelog](https://github.com/pytorch/pytorch/blob/main/RELEASE.md)
- [Commits](https://github.com/pytorch/pytorch/compare/v2.2.2...v2.5.1)

---
updated-dependencies:
- dependency-name: torch
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-11-04 03:34:44 +00:00
dependabot[bot]
10fd2b291e chore(deps): bump orjson from 3.10.10 to 3.10.11
Bumps [orjson](https://github.com/ijl/orjson) from 3.10.10 to 3.10.11.
- [Release notes](https://github.com/ijl/orjson/releases)
- [Changelog](https://github.com/ijl/orjson/blob/master/CHANGELOG.md)
- [Commits](https://github.com/ijl/orjson/compare/3.10.10...3.10.11)

---
updated-dependencies:
- dependency-name: orjson
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-11-04 03:34:35 +00:00
dependabot[bot]
5034c7c312 chore(deps-dev): bump ruff from 0.7.1 to 0.7.2
Bumps [ruff](https://github.com/astral-sh/ruff) from 0.7.1 to 0.7.2.
- [Release notes](https://github.com/astral-sh/ruff/releases)
- [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md)
- [Commits](https://github.com/astral-sh/ruff/compare/0.7.1...0.7.2)

---
updated-dependencies:
- dependency-name: ruff
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-11-04 03:34:25 +00:00
dependabot[bot]
ff36ba7742 chore(deps): bump janus from 1.0.0 to 1.1.0
Bumps [janus](https://github.com/aio-libs/janus) from 1.0.0 to 1.1.0.
- [Release notes](https://github.com/aio-libs/janus/releases)
- [Changelog](https://github.com/aio-libs/janus/blob/master/CHANGES.rst)
- [Commits](https://github.com/aio-libs/janus/compare/v1.0.0...v1.1.0)

---
updated-dependencies:
- dependency-name: janus
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-11-04 03:34:10 +00:00
dependabot[bot]
9b2fabfb3e chore(deps): bump rich from 13.9.3 to 13.9.4
Bumps [rich](https://github.com/Textualize/rich) from 13.9.3 to 13.9.4.
- [Release notes](https://github.com/Textualize/rich/releases)
- [Changelog](https://github.com/Textualize/rich/blob/master/CHANGELOG.md)
- [Commits](https://github.com/Textualize/rich/compare/v13.9.3...v13.9.4)

---
updated-dependencies:
- dependency-name: rich
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-11-04 03:33:48 +00:00
dependabot[bot]
4008eb20a3 chore(deps): bump tqdm from 4.66.5 to 4.66.6
Bumps [tqdm](https://github.com/tqdm/tqdm) from 4.66.5 to 4.66.6.
- [Release notes](https://github.com/tqdm/tqdm/releases)
- [Commits](https://github.com/tqdm/tqdm/compare/v4.66.5...v4.66.6)

---
updated-dependencies:
- dependency-name: tqdm
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-11-04 03:33:44 +00:00
dependabot[bot]
e224ee8277 chore(deps): bump mkdocs-material in the mkdocs group
Bumps the mkdocs group with 1 update: [mkdocs-material](https://github.com/squidfunk/mkdocs-material).


Updates `mkdocs-material` from 9.5.42 to 9.5.43
- [Release notes](https://github.com/squidfunk/mkdocs-material/releases)
- [Changelog](https://github.com/squidfunk/mkdocs-material/blob/master/CHANGELOG)
- [Commits](https://github.com/squidfunk/mkdocs-material/compare/9.5.42...9.5.43)

---
updated-dependencies:
- dependency-name: mkdocs-material
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: mkdocs
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-11-04 03:33:34 +00:00
dependabot[bot]
d236f97605 chore(deps-dev): bump pytest-cov from 5.0.0 to 6.0.0 in the pytest group
Bumps the pytest group with 1 update: [pytest-cov](https://github.com/pytest-dev/pytest-cov).


Updates `pytest-cov` from 5.0.0 to 6.0.0
- [Changelog](https://github.com/pytest-dev/pytest-cov/blob/master/CHANGELOG.rst)
- [Commits](https://github.com/pytest-dev/pytest-cov/compare/v5.0.0...v6.0.0)

---
updated-dependencies:
- dependency-name: pytest-cov
  dependency-type: direct:development
  update-type: version-update:semver-major
  dependency-group: pytest
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-11-04 03:33:20 +00:00
dependabot[bot]
0efb966b68 chore(deps): bump pypa/gh-action-pypi-publish from 1.10.3 to 1.11.0
Bumps [pypa/gh-action-pypi-publish](https://github.com/pypa/gh-action-pypi-publish) from 1.10.3 to 1.11.0.
- [Release notes](https://github.com/pypa/gh-action-pypi-publish/releases)
- [Commits](https://github.com/pypa/gh-action-pypi-publish/compare/v1.10.3...v1.11.0)

---
updated-dependencies:
- dependency-name: pypa/gh-action-pypi-publish
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-11-04 03:04:18 +00:00
Matthias
63dfa52ea8 chore: Fix missing space in log message 2024-11-03 13:43:30 +01:00
Matthias
74507e9981 docs: remove more --dmmp docs 2024-11-02 17:24:31 +01:00
Matthias
d24bef7883 tests: remove --dmmp from tests 2024-11-02 16:54:54 +01:00
Matthias
59bf0c080a docs: update docs about removed --dmmp option 2024-11-02 16:54:45 +01:00
Matthias
e8553cfac0 docs: Update documentation about dmmp 2024-11-02 16:50:20 +01:00
Matthias
baadf62fc3 chore: remove --dmmp option 2024-11-02 16:49:26 +01:00
gaardiolor
c4312fbb31 _lev_prep: fixed typo. dry_run_liquidation_price: use wallet_balance instead of stake_amount 2024-11-01 19:14:37 +01:00
Matthias
1bf71b47df docs: add gate documentation about new permissions 2024-11-01 17:49:00 +01:00
Matthias
67f26fa1ac Merge pull request #10782 from freqtrade/feat/bt_reverse
Enable future positions to reverse their position
2024-11-01 09:29:35 +01:00
Matthias
dafabd5b99 Merge pull request #10860 from xzmeng/fix-test-download-data-timerange
tests: fix failure when local timezone is not utc
2024-11-01 09:19:39 +01:00
Matthias
878adfb0c0 tests: expand tests to cover several times and timezones 2024-11-01 08:57:03 +01:00
Matthias
3da9f6d0e3 Merge pull request #10857 from freqtrade/ci_mypy_cache
Improved caching
2024-11-01 08:44:13 +01:00
Matthias
f5fdd8a6ab Merge pull request #10866 from xzmeng/fix-strategy101-link
docs: fix strategy 101 link
2024-10-31 15:47:02 +01:00
Meng Xiangzhuo
47e4599fe2 docs: fix strategy 101 link 2024-10-31 22:20:45 +08:00
Matthias
81b432dc0e chore: bump dev-version to 2024.11-dev 2024-10-31 08:08:02 +01:00
Matthias
87c5668b14 Merge pull request #10863 from freqtrade/new_release
New release 2024.10
2024-10-31 08:04:45 +01:00
Matthias
84da133e95 chore: bump version to 2024.10 2024-10-31 07:14:12 +01:00
Matthias
80e254d46b Merge branch 'stable' into new_release 2024-10-31 07:13:50 +01:00
Matthias
7bce16f811 Merge pull request #10861 from freqtrade/update/binance-leverage-tiers
Update Binance Leverage Tiers
2024-10-31 06:43:24 +01:00
xmatthias
0d430be1fa chore: update pre-commit hooks 2024-10-31 03:08:41 +00:00
Meng Xiangzhuo
a8516ff0f5 tests: fix failure when local timezone is not utc 2024-10-31 01:37:24 +08:00
Matthias
e99adc339e chore: re-use 3.12 cache for online tests 2024-10-30 15:55:50 +01:00
Matthias
1f237db2b5 Merge pull request #10856 from freqtrade/fix/bt_parallel
Fix backtest parallelism with timeframe-detail
2024-10-29 20:27:14 +01:00
Matthias
04e8c3ceea chore: try improve caching 2024-10-29 19:31:08 +01:00
Matthias
592848ad03 test: re-add excluded assert 2024-10-29 19:27:03 +01:00
Matthias
22318eb80e chore: fix bad usage of variables 2024-10-29 18:14:53 +01:00
Matthias
c03f8afca1 docs: document new behavior 2024-10-29 07:15:47 +01:00
Matthias
88f8e0b8b1 test: improve test for long/short switch 2024-10-29 07:15:47 +01:00
Matthias
8f6b831512 tests: adjust test_locked_pairs for new auto-lock 2024-10-29 07:15:47 +01:00
Matthias
85a2c12768 feat: Lock pairs in direction of the trade only 2024-10-29 07:15:47 +01:00
Matthias
1b8fd63853 tests: BT Detail tests should cover position switch 2024-10-29 07:15:47 +01:00
Matthias
ae325ff124 tests: fix test based on changed behavior 2024-10-29 07:15:47 +01:00
Matthias
1698d96883 feat: Allow Backtesting to reverse position 2024-10-29 07:15:47 +01:00
Matthias
e35f5c9fde tests: update test to account for newly added prop 2024-10-29 07:13:36 +01:00
Matthias
26a59e2cc5 fix: Don't allow backtesting to exceed max_open_trades in odd edge-cases
closes #10853
2024-10-29 07:13:02 +01:00
Matthias
56df7ad9fc chore: remove unnecessary commented log statement 2024-10-29 06:57:52 +01:00
Matthias
52ae7c3615 Merge pull request #10854 from freqtrade/update/pre-commit-hooks
Update pre-commit hooks
2024-10-29 06:39:42 +01:00
xmatthias
c9e56ab04b chore: update pre-commit hooks 2024-10-29 03:08:45 +00:00
gaardiolor
cfa527e9af added tests for hyperliquid 2024-10-28 20:34:24 +01:00
Matthias
6cb17caf91 tests: Add test showing behavior from #10853 2024-10-28 20:28:26 +01:00
gaardiolor
67a0040732 added hyperliquid to conftest 2024-10-28 19:32:43 +01:00
gaardiolor
3913b450b6 check for tickers_have_bid_ask 2024-10-28 19:30:59 +01:00
Matthias
13d61e15f4 Merge pull request #10846 from freqtrade/dependabot/pip/develop/fastapi-0.115.4
chore(deps): bump fastapi from 0.115.2 to 0.115.4
2024-10-28 07:25:53 +01:00
Matthias
7d46236900 Merge pull request #10849 from freqtrade/dependabot/pip/develop/ruff-0.7.1
chore(deps-dev): bump ruff from 0.7.0 to 0.7.1
2024-10-28 07:15:44 +01:00
Matthias
a7e54967c3 Merge pull request #10847 from freqtrade/dependabot/pip/develop/rich-13.9.3
chore(deps): bump rich from 13.9.2 to 13.9.3
2024-10-28 06:41:13 +01:00
Matthias
a440e4ef79 Merge pull request #10843 from freqtrade/dependabot/pip/develop/ccxt-4.4.24
chore(deps): bump ccxt from 4.4.20 to 4.4.24
2024-10-28 06:39:15 +01:00
dependabot[bot]
b5a52129fb chore(deps-dev): bump ruff from 0.7.0 to 0.7.1
Bumps [ruff](https://github.com/astral-sh/ruff) from 0.7.0 to 0.7.1.
- [Release notes](https://github.com/astral-sh/ruff/releases)
- [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md)
- [Commits](https://github.com/astral-sh/ruff/compare/0.7.0...0.7.1)

---
updated-dependencies:
- dependency-name: ruff
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-28 05:39:02 +00:00
Matthias
8e72e0ec07 Merge pull request #10842 from freqtrade/dependabot/pip/develop/orjson-3.10.10
chore(deps): bump orjson from 3.10.9 to 3.10.10
2024-10-28 06:38:08 +01:00
Matthias
8204ecc131 Merge pull request #10844 from freqtrade/dependabot/pip/develop/mypy-1.13.0
chore(deps-dev): bump mypy from 1.12.1 to 1.13.0
2024-10-28 06:37:28 +01:00
dependabot[bot]
beaf5215b7 chore(deps): bump rich from 13.9.2 to 13.9.3
Bumps [rich](https://github.com/Textualize/rich) from 13.9.2 to 13.9.3.
- [Release notes](https://github.com/Textualize/rich/releases)
- [Changelog](https://github.com/Textualize/rich/blob/master/CHANGELOG.md)
- [Commits](https://github.com/Textualize/rich/compare/v13.9.2...v13.9.3)

---
updated-dependencies:
- dependency-name: rich
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-28 03:33:21 +00:00
dependabot[bot]
b3fa997bea chore(deps): bump fastapi from 0.115.2 to 0.115.4
Bumps [fastapi](https://github.com/fastapi/fastapi) from 0.115.2 to 0.115.4.
- [Release notes](https://github.com/fastapi/fastapi/releases)
- [Commits](https://github.com/fastapi/fastapi/compare/0.115.2...0.115.4)

---
updated-dependencies:
- dependency-name: fastapi
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-28 03:32:56 +00:00
dependabot[bot]
eab5bfb475 chore(deps-dev): bump mypy from 1.12.1 to 1.13.0
Bumps [mypy](https://github.com/python/mypy) from 1.12.1 to 1.13.0.
- [Changelog](https://github.com/python/mypy/blob/master/CHANGELOG.md)
- [Commits](https://github.com/python/mypy/compare/v1.12.1...v1.13.0)

---
updated-dependencies:
- dependency-name: mypy
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-28 03:32:38 +00:00
dependabot[bot]
9f5d4dd67f chore(deps): bump ccxt from 4.4.20 to 4.4.24
Bumps [ccxt](https://github.com/ccxt/ccxt) from 4.4.20 to 4.4.24.
- [Release notes](https://github.com/ccxt/ccxt/releases)
- [Changelog](https://github.com/ccxt/ccxt/blob/master/CHANGELOG.md)
- [Commits](https://github.com/ccxt/ccxt/compare/4.4.20...4.4.24)

---
updated-dependencies:
- dependency-name: ccxt
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-28 03:32:33 +00:00
dependabot[bot]
fc757f6cf7 chore(deps): bump orjson from 3.10.9 to 3.10.10
Bumps [orjson](https://github.com/ijl/orjson) from 3.10.9 to 3.10.10.
- [Release notes](https://github.com/ijl/orjson/releases)
- [Changelog](https://github.com/ijl/orjson/blob/master/CHANGELOG.md)
- [Commits](https://github.com/ijl/orjson/compare/3.10.9...3.10.10)

---
updated-dependencies:
- dependency-name: orjson
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-28 03:32:23 +00:00
gaardiolor
fd619de1d3 typo 2024-10-27 22:00:52 +01:00
Matthias
4c0341b232 Merge pull request #10827 from freqtrade/fix/freqai-zeros
fix: guarantee crash resiliency, as long as users reload bot gracefully
2024-10-27 21:51:07 +01:00
Matthias
a3bcc9d91e chore: schema.json updated 2024-10-27 21:28:36 +01:00
Robert Caulk
d215e3ca68 chore: add documentation and add wait_for_training to config schema 2024-10-27 19:20:19 +01:00
gaardiolor
493fa8541b fixes related to ruff and mypy 2024-10-27 17:06:56 +01:00
Matthias
930b5e07f8 tests: adapt tests for improved createMarketBuyOrderRequiresPrice validation 2024-10-27 13:56:46 +01:00
Matthias
5174717ca9 fix: ensure createMarketBuyOrderRequiresPrice is only applied to buys
closes #10833
2024-10-27 13:56:38 +01:00
gaardiolor
a7681fc712 revert ccxt version bump 2024-10-27 12:27:54 +01:00
gaardiolor
7d1976ad05 fix ohlcv_candle_limit funding_rate candles
Co-authored-by: Matthias <xmatthias@outlook.com>
2024-10-27 12:09:20 +01:00
Matthias
d317f33f4e chore: improve potentially erroneous comparison 2024-10-27 09:53:51 +01:00
Matthias
9e53b0742c docs: update documentation code to align with comment
closes #10838
2024-10-27 07:57:52 +01:00
gaardiolor
4c78b8c6d1 updated dry_run_liquidation_price to match new signature
fixed comment
2024-10-26 14:13:57 +02:00
gaardiolor
b88db55db3 Initial implementation of hyperliquid.
- Spot
- Swap (long, short, leverage, stoploss_on_exchange)
- dry_run_liquidation_price()
2024-10-25 17:47:53 +02:00
Matthias
b8f8d1d4b1 Merge pull request #10831 from xzmeng/fix-log
feat: auto-create logs dir if it's absent
2024-10-25 07:38:53 +02:00
Matthias
c4cbf6de3b tests: reset permissions on tmp-path
to facilitate cleanup
2024-10-25 07:22:11 +02:00
Matthias
e7b0e3293d feat: Exit with exception, not with exit1
this aligns to how other parts of the code work - leaving "exit" to the outermost caller.
2024-10-25 06:34:46 +02:00
Meng Xiangzhuo
87c8e85068 feat: add user friendly message on permission error 2024-10-25 00:01:41 +08:00
Matthias
c9ae5e1e9f Merge pull request #10834 from freqtrade/update/binance-leverage-tiers
Update Binance Leverage Tiers
2024-10-24 09:29:03 +02:00
xmatthias
3d9514d266 chore: update pre-commit hooks 2024-10-24 06:07:00 +02:00
Matthias
3d9cbf52b9 chore: improve import sorting 2024-10-24 06:06:31 +02:00
Matthias
5b4043db85 chore: use Class for parse_timerange 2024-10-24 06:06:31 +02:00
Matthias
661d36614f Merge pull request #10824 from freqtrade/dependabot/pip/develop/torch-2.5.0
chore(deps): bump torch from 2.2.2 to 2.5.0
2024-10-23 18:06:09 +02:00
Matthias
11cef55c03 test: update mock to new pairlist location 2024-10-23 17:59:34 +02:00
Matthias
667d08d003 refactor: extract pairlist_api from background_tasks file 2024-10-23 17:57:36 +02:00
Meng Xiangzhuo
ba780276a2 feat: auto-create logs dir if it's absent 2024-10-23 00:22:23 +08:00
Matthias
46db0bc08c feat: rename endpoint to be better aligned 2024-10-22 06:40:01 +02:00
Matthias
0de3c6945b test: add test for api/hyperopt-loss 2024-10-22 06:39:55 +02:00
Matthias
0bf30aaa6b feat: add hyperopt-loss api endpoint 2024-10-22 06:39:43 +02:00
Matthias
faac205464 tests: add test for list-hyperoptloss 2024-10-22 06:39:30 +02:00
Matthias
1d5d7048d6 chore: improve test imports 2024-10-22 06:38:20 +02:00
Matthias
033643c4ca docs: add documentation for list-hyperoptloss 2024-10-22 06:38:20 +02:00
Matthias
8b8b5cfac4 feat: add list-hyperoptloss subcommand 2024-10-22 06:38:20 +02:00
Matthias
9ad32fd846 fix: improved defaultHyperoptLoss alias
this gives the class it's proper name.
2024-10-22 06:38:20 +02:00
Matthias
d9766bfd7e Merge pull request #10829 from freqtrade/update/pre-commit-hooks
Update pre-commit hooks
2024-10-22 06:35:18 +02:00
xmatthias
186f2a8392 chore: update pre-commit hooks 2024-10-22 03:08:05 +00:00
Matthias
c6a43b0d0c Merge pull request #10820 from freqtrade/dependabot/pip/develop/mypy-1.12.1
chore(deps-dev): bump mypy from 1.11.2 to 1.12.1
2024-10-21 11:46:41 +02:00
Robert Caulk
a1513b7c7c fix: allow user to break training 2024-10-21 11:40:46 +02:00
Robert Caulk
6571ef4e45 fix: guarantee crash resiliency, as long as users reload bot gracefully 2024-10-21 11:14:28 +02:00
Matthias
a3f8a4f45e Merge pull request #10817 from freqtrade/dependabot/pip/develop/sqlalchemy-2.0.36
chore(deps): bump sqlalchemy from 2.0.35 to 2.0.36
2024-10-21 10:46:07 +02:00
Matthias
336111fbd4 chore: update sqlalchemy pre-commit 2024-10-21 10:19:27 +02:00
Matthias
f100ad12e0 chore: fix whitespace error after merge 2024-10-21 10:18:01 +02:00
Matthias
7adc505a00 Merge branch 'develop' into dependabot/pip/develop/mypy-1.12.1 2024-10-21 10:17:19 +02:00
Matthias
d781ee0596 Merge pull request #10814 from freqtrade/dependabot/pip/develop/types-9987b1e203
chore(deps-dev): bump types-requests from 2.32.0.20240914 to 2.32.0.20241016 in the types group
2024-10-21 09:44:14 +02:00
Matthias
0ea9240226 Merge pull request #10822 from freqtrade/dependabot/pip/develop/ccxt-4.4.20
chore(deps): bump ccxt from 4.4.17 to 4.4.20
2024-10-21 09:24:59 +02:00
Matthias
dbbdb7cd7e Merge pull request #10818 from freqtrade/dependabot/pip/develop/psutil-6.1.0
chore(deps): bump psutil from 6.0.0 to 6.1.0
2024-10-21 08:56:25 +02:00
Matthias
2f98d2a781 Merge pull request #10825 from freqtrade/dependabot/pip/develop/orjson-3.10.9
chore(deps): bump orjson from 3.10.7 to 3.10.9
2024-10-21 08:32:40 +02:00
dependabot[bot]
d9ea89857c chore(deps): bump sqlalchemy from 2.0.35 to 2.0.36
Bumps [sqlalchemy](https://github.com/sqlalchemy/sqlalchemy) from 2.0.35 to 2.0.36.
- [Release notes](https://github.com/sqlalchemy/sqlalchemy/releases)
- [Changelog](https://github.com/sqlalchemy/sqlalchemy/blob/main/CHANGES.rst)
- [Commits](https://github.com/sqlalchemy/sqlalchemy/commits)

---
updated-dependencies:
- dependency-name: sqlalchemy
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-21 06:05:10 +00:00
dependabot[bot]
a29a697012 chore(deps): bump ccxt from 4.4.17 to 4.4.20
Bumps [ccxt](https://github.com/ccxt/ccxt) from 4.4.17 to 4.4.20.
- [Release notes](https://github.com/ccxt/ccxt/releases)
- [Changelog](https://github.com/ccxt/ccxt/blob/master/CHANGELOG.md)
- [Commits](https://github.com/ccxt/ccxt/compare/4.4.17...4.4.20)

---
updated-dependencies:
- dependency-name: ccxt
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-21 06:05:02 +00:00
Matthias
430706529a Merge pull request #10823 from freqtrade/dependabot/pip/develop/cryptography-43.0.3
chore(deps): bump cryptography from 42.0.8 to 43.0.3
2024-10-21 08:04:08 +02:00
Matthias
9b1999bc02 Merge pull request #10821 from freqtrade/dependabot/pip/develop/ruff-0.7.0
chore(deps-dev): bump ruff from 0.6.9 to 0.7.0
2024-10-21 07:53:50 +02:00
Matthias
196e82d3ab Merge pull request #10819 from freqtrade/dependabot/pip/develop/bottleneck-1.4.2
chore(deps): bump bottleneck from 1.4.1 to 1.4.2
2024-10-21 07:53:40 +02:00
dependabot[bot]
1761d0e65c chore(deps): bump psutil from 6.0.0 to 6.1.0
Bumps [psutil](https://github.com/giampaolo/psutil) from 6.0.0 to 6.1.0.
- [Changelog](https://github.com/giampaolo/psutil/blob/master/HISTORY.rst)
- [Commits](https://github.com/giampaolo/psutil/compare/release-6.0.0...release-6.1.0)

---
updated-dependencies:
- dependency-name: psutil
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-21 05:33:28 +00:00
Matthias
9465723026 Merge pull request #10816 from freqtrade/dependabot/pip/develop/uvicorn-0.32.0
chore(deps): bump uvicorn from 0.31.1 to 0.32.0
2024-10-21 07:32:37 +02:00
Matthias
c9246bf946 Merge pull request #10815 from freqtrade/dependabot/pip/develop/mkdocs-d0ead33a76
chore(deps): bump mkdocs-material from 9.5.40 to 9.5.42 in the mkdocs group
2024-10-21 07:32:10 +02:00
Matthias
4f0380bb2c Merge pull request #10779 from froggleston/frog-strat101-docs-1
Improve strategy development documentation
2024-10-21 06:41:59 +02:00
Matthias
41a4c7c39f chore: improve type safety 2024-10-21 06:39:55 +02:00
Matthias
e3bdf89cab chore: bump pre-commit types-requests 2024-10-21 06:33:55 +02:00
dependabot[bot]
0843f09c86 chore(deps): bump orjson from 3.10.7 to 3.10.9
Bumps [orjson](https://github.com/ijl/orjson) from 3.10.7 to 3.10.9.
- [Release notes](https://github.com/ijl/orjson/releases)
- [Changelog](https://github.com/ijl/orjson/blob/master/CHANGELOG.md)
- [Commits](https://github.com/ijl/orjson/compare/3.10.7...3.10.9)

---
updated-dependencies:
- dependency-name: orjson
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-21 03:18:32 +00:00
dependabot[bot]
93afe00205 chore(deps): bump torch from 2.2.2 to 2.5.0
Bumps [torch](https://github.com/pytorch/pytorch) from 2.2.2 to 2.5.0.
- [Release notes](https://github.com/pytorch/pytorch/releases)
- [Changelog](https://github.com/pytorch/pytorch/blob/main/RELEASE.md)
- [Commits](https://github.com/pytorch/pytorch/compare/v2.2.2...v2.5.0)

---
updated-dependencies:
- dependency-name: torch
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-21 03:18:20 +00:00
dependabot[bot]
0f978bbcc7 chore(deps): bump cryptography from 42.0.8 to 43.0.3
Bumps [cryptography](https://github.com/pyca/cryptography) from 42.0.8 to 43.0.3.
- [Changelog](https://github.com/pyca/cryptography/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/pyca/cryptography/compare/42.0.8...43.0.3)

---
updated-dependencies:
- dependency-name: cryptography
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-21 03:18:10 +00:00
dependabot[bot]
88c49a9f7c chore(deps-dev): bump ruff from 0.6.9 to 0.7.0
Bumps [ruff](https://github.com/astral-sh/ruff) from 0.6.9 to 0.7.0.
- [Release notes](https://github.com/astral-sh/ruff/releases)
- [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md)
- [Commits](https://github.com/astral-sh/ruff/compare/0.6.9...0.7.0)

---
updated-dependencies:
- dependency-name: ruff
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-21 03:17:52 +00:00
dependabot[bot]
83f285c913 chore(deps-dev): bump mypy from 1.11.2 to 1.12.1
Bumps [mypy](https://github.com/python/mypy) from 1.11.2 to 1.12.1.
- [Changelog](https://github.com/python/mypy/blob/master/CHANGELOG.md)
- [Commits](https://github.com/python/mypy/compare/v1.11.2...v1.12.1)

---
updated-dependencies:
- dependency-name: mypy
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-21 03:17:35 +00:00
dependabot[bot]
24499c5ea9 chore(deps): bump bottleneck from 1.4.1 to 1.4.2
Bumps [bottleneck](https://github.com/pydata/bottleneck) from 1.4.1 to 1.4.2.
- [Release notes](https://github.com/pydata/bottleneck/releases)
- [Changelog](https://github.com/pydata/bottleneck/blob/master/RELEASE.rst)
- [Commits](https://github.com/pydata/bottleneck/compare/v1.4.1...v1.4.2)

---
updated-dependencies:
- dependency-name: bottleneck
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-21 03:17:23 +00:00
dependabot[bot]
d02b1f04e2 chore(deps): bump uvicorn from 0.31.1 to 0.32.0
Bumps [uvicorn](https://github.com/encode/uvicorn) from 0.31.1 to 0.32.0.
- [Release notes](https://github.com/encode/uvicorn/releases)
- [Changelog](https://github.com/encode/uvicorn/blob/master/CHANGELOG.md)
- [Commits](https://github.com/encode/uvicorn/compare/0.31.1...0.32.0)

---
updated-dependencies:
- dependency-name: uvicorn
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-21 03:16:42 +00:00
dependabot[bot]
c818003399 chore(deps): bump mkdocs-material in the mkdocs group
Bumps the mkdocs group with 1 update: [mkdocs-material](https://github.com/squidfunk/mkdocs-material).


Updates `mkdocs-material` from 9.5.40 to 9.5.42
- [Release notes](https://github.com/squidfunk/mkdocs-material/releases)
- [Changelog](https://github.com/squidfunk/mkdocs-material/blob/master/CHANGELOG)
- [Commits](https://github.com/squidfunk/mkdocs-material/compare/9.5.40...9.5.42)

---
updated-dependencies:
- dependency-name: mkdocs-material
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: mkdocs
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-21 03:16:38 +00:00
dependabot[bot]
306db6d026 chore(deps-dev): bump types-requests in the types group
Bumps the types group with 1 update: [types-requests](https://github.com/python/typeshed).


Updates `types-requests` from 2.32.0.20240914 to 2.32.0.20241016
- [Commits](https://github.com/python/typeshed/commits)

---
updated-dependencies:
- dependency-name: types-requests
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: types
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-21 03:15:50 +00:00
froggleston
b75ff4bdf5 Adjust docs based on review 2024-10-20 21:53:12 +01:00
Matthias
60439c7d8e chore: enhanced pyright configuration
this should get rid of most errors in recent pylance versions
by disabling them all.
2024-10-20 15:29:37 +02:00
Matthias
3518a4167c chore: minor typing fix 2024-10-20 15:24:45 +02:00
Matthias
51dd7fa58e chore: ensure empty leverage tiers files don't cause an exception 2024-10-20 15:22:50 +02:00
Matthias
0a5549ebc9 docs: add canonical_version 2024-10-20 12:35:26 +02:00
Matthias
607167ebe7 fix: improve resilience of ft_rest_client 2024-10-20 11:52:29 +02:00
Matthias
1183517c3a chore: remove non-needed type_checking import 2024-10-20 11:45:39 +02:00
Matthias
6d169784ed chore: remove mypy override for telegram module
it's no longer necessary.
2024-10-20 10:41:19 +02:00
Matthias
9b16cc6266 Merge pull request #10810 from xzmeng/delete-market-change
fix: delete market change file when deleting backtest result
2024-10-19 13:37:43 +02:00
Matthias
d56f46e1b1 Merge pull request #10805 from bearvar/ComplexHyperOptLoss
Add new hyperopt loss function
2024-10-19 13:32:46 +02:00
Matthias
6a5feacd38 tests: Skip binanceus websocket tests
binance.us volume is currently too low for this test to run reliably.
2024-10-19 13:32:27 +02:00
Matthias
0a91189e6a chore: remove unused kwargs 2024-10-19 13:10:40 +02:00
Matthias
e9d9ebf156 docs: Update documentation for MultiMetricHyperOptLoss 2024-10-19 13:05:59 +02:00
Matthias
1a85dc9b99 chore: Update to new code standard 2024-10-19 13:02:45 +02:00
Matthias
660af7ec70 chore: Fix test failure, sort imports 2024-10-19 13:02:27 +02:00
Matthias
102d44a7b8 chore: improve lbank comment message 2024-10-19 12:35:23 +02:00
Matthias
549b0f8ef4 feat: delete all files when deleting a backtest result 2024-10-19 12:33:42 +02:00
Matthias
c6fe8ae70c feat: add lbank candle limit parameters 2024-10-19 11:51:25 +02:00
Meng Xiangzhuo
9e1af0db63 delete market change when deleting backtest result 2024-10-19 10:55:24 +08:00
Matthias
43b6cb9bff docs: Update 101 docs 2024-10-18 18:21:27 +02:00
Matthias
9b7acf33c6 docs: rename file to strategy-101 2024-10-18 18:16:29 +02:00
Matthias
3914abda20 Merge pull request #10808 from freqtrade/update_macos_images
ci: update macos version to new images
2024-10-18 07:29:20 +02:00
Matthias
e47042d1cb Merge pull request #10773 from freqtrade/fix/freqai_m3
fix: Support mps device where available
2024-10-18 07:07:23 +02:00
Matthias
a40a2f96b5 chore: attempt to speed up CI
Coveralls is only needed by one matrix run ...
2024-10-18 06:26:36 +02:00
Matthias
efc689a937 chore: update macos version to new images 2024-10-17 20:40:13 +02:00
bearvar
78bf40eaa9 Edit EXPECTANCY_CONST to show it can be decimal. 2024-10-17 22:09:00 +05:00
bearvar
578604619a Edit PF_CONST to show it can be decimal. 2024-10-17 22:07:32 +05:00
bearvar
6eac798d91 Rename ComplexHyperOptLoss to MultiMetricHyperOptLoss. Add it to test_loss_functions_better_profits. 2024-10-17 21:54:25 +05:00
Alex
121bdbad84 Update and rename hyperopt_loss_complex.py to hyperopt_loss_multi_metric.py 2024-10-17 21:42:34 +05:00
Matthias
aaeaa02406 Merge pull request #10807 from freqtrade/update/binance-leverage-tiers
Update Binance Leverage Tiers
2024-10-17 06:24:20 +02:00
xmatthias
5b2b2d1a5c chore: update pre-commit hooks 2024-10-17 03:06:56 +00:00
bearvar
9209d11084 Add new hyperopt loss function 2024-10-16 21:52:42 +05:00
froggleston
60f54f1bc9 Improve 101 docs 2024-10-15 12:37:55 +01:00
Robert Davey
8b1de5d9b5 Update docs/freqtrade-101.md
Co-authored-by: Matthias <xmatthias@outlook.com>
2024-10-15 11:54:26 +01:00
Matthias
b2095481b3 Merge pull request #10783 from xzmeng/remove-setuppy
Remove setup.py
2024-10-15 06:39:29 +02:00
froggleston
a8e8517364 Minor typo 2024-10-15 00:11:16 +01:00
Matthias
c9b31c62cd docs: improved wording for developer docs 2024-10-14 19:10:49 +02:00
froggleston
c72cf64c8a Americanize *sigh* 2024-10-14 17:36:43 +01:00
froggleston
8c2f841972 Update 101 and customisation docs 2024-10-14 17:33:55 +01:00
Meng Xiangzhuo
0c1c750005 Add and dependency groups 2024-10-14 19:51:04 +08:00
Matthias
33d98dfe8c Merge pull request #10791 from freqtrade/dependabot/pip/develop/ccxt-4.4.17
chore(deps): bump ccxt from 4.4.14 to 4.4.17
2024-10-14 08:55:13 +02:00
Matthias
256815e148 Merge pull request #10793 from freqtrade/dependabot/pip/develop/fastapi-0.115.2
chore(deps): bump fastapi from 0.115.0 to 0.115.2
2024-10-14 08:32:01 +02:00
dependabot[bot]
cdbfbb5504 chore(deps): bump ccxt from 4.4.14 to 4.4.17
Bumps [ccxt](https://github.com/ccxt/ccxt) from 4.4.14 to 4.4.17.
- [Release notes](https://github.com/ccxt/ccxt/releases)
- [Changelog](https://github.com/ccxt/ccxt/blob/master/CHANGELOG.md)
- [Commits](https://github.com/ccxt/ccxt/compare/4.4.14...4.4.17)

---
updated-dependencies:
- dependency-name: ccxt
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-14 06:13:50 +00:00
Matthias
753a88c409 Merge pull request #10797 from freqtrade/dependabot/pip/develop/aiohttp-3.10.10
chore(deps): bump aiohttp from 3.10.9 to 3.10.10
2024-10-14 08:13:00 +02:00
Matthias
eef6966a85 Merge pull request #10796 from freqtrade/dependabot/pip/develop/bottleneck-1.4.1
chore(deps): bump bottleneck from 1.4.0 to 1.4.1
2024-10-14 07:58:00 +02:00
Matthias
d1d6a30884 Merge pull request #10795 from freqtrade/dependabot/pip/develop/pre-commit-4.0.1
chore(deps-dev): bump pre-commit from 4.0.0 to 4.0.1
2024-10-14 07:39:14 +02:00
dependabot[bot]
3a190a1c37 chore(deps): bump fastapi from 0.115.0 to 0.115.2
Bumps [fastapi](https://github.com/fastapi/fastapi) from 0.115.0 to 0.115.2.
- [Release notes](https://github.com/fastapi/fastapi/releases)
- [Commits](https://github.com/fastapi/fastapi/compare/0.115.0...0.115.2)

---
updated-dependencies:
- dependency-name: fastapi
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-14 05:15:21 +00:00
Matthias
ae70902921 Merge pull request #10792 from freqtrade/dependabot/pip/develop/time-machine-2.16.0
chore(deps-dev): bump time-machine from 2.15.0 to 2.16.0
2024-10-14 07:14:59 +02:00
Matthias
5418237919 Merge pull request #10790 from freqtrade/dependabot/pip/develop/uvicorn-0.31.1
chore(deps): bump uvicorn from 0.31.0 to 0.31.1
2024-10-14 07:14:31 +02:00
Matthias
42fcdb33a1 Merge pull request #10789 from freqtrade/dependabot/pip/develop/mkdocs-2fa875aea2
chore(deps): bump mkdocs-material from 9.5.39 to 9.5.40 in the mkdocs group
2024-10-14 07:12:14 +02:00
dependabot[bot]
2098e69fb4 chore(deps): bump aiohttp from 3.10.9 to 3.10.10
Bumps [aiohttp](https://github.com/aio-libs/aiohttp) from 3.10.9 to 3.10.10.
- [Release notes](https://github.com/aio-libs/aiohttp/releases)
- [Changelog](https://github.com/aio-libs/aiohttp/blob/master/CHANGES.rst)
- [Commits](https://github.com/aio-libs/aiohttp/compare/v3.10.9...v3.10.10)

---
updated-dependencies:
- dependency-name: aiohttp
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-14 03:48:48 +00:00
dependabot[bot]
2415275e90 chore(deps): bump bottleneck from 1.4.0 to 1.4.1
Bumps [bottleneck](https://github.com/pydata/bottleneck) from 1.4.0 to 1.4.1.
- [Release notes](https://github.com/pydata/bottleneck/releases)
- [Changelog](https://github.com/pydata/bottleneck/blob/master/RELEASE.rst)
- [Commits](https://github.com/pydata/bottleneck/compare/v1.4.0...v1.4.1)

---
updated-dependencies:
- dependency-name: bottleneck
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-14 03:48:29 +00:00
dependabot[bot]
83fcc92f75 chore(deps-dev): bump pre-commit from 4.0.0 to 4.0.1
Bumps [pre-commit](https://github.com/pre-commit/pre-commit) from 4.0.0 to 4.0.1.
- [Release notes](https://github.com/pre-commit/pre-commit/releases)
- [Changelog](https://github.com/pre-commit/pre-commit/blob/main/CHANGELOG.md)
- [Commits](https://github.com/pre-commit/pre-commit/compare/v4.0.0...v4.0.1)

---
updated-dependencies:
- dependency-name: pre-commit
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-14 03:48:21 +00:00
dependabot[bot]
64a7ab6e2e chore(deps-dev): bump time-machine from 2.15.0 to 2.16.0
Bumps [time-machine](https://github.com/adamchainz/time-machine) from 2.15.0 to 2.16.0.
- [Changelog](https://github.com/adamchainz/time-machine/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/adamchainz/time-machine/compare/2.15.0...2.16.0)

---
updated-dependencies:
- dependency-name: time-machine
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-14 03:48:01 +00:00
dependabot[bot]
a772e1f9ca chore(deps): bump uvicorn from 0.31.0 to 0.31.1
Bumps [uvicorn](https://github.com/encode/uvicorn) from 0.31.0 to 0.31.1.
- [Release notes](https://github.com/encode/uvicorn/releases)
- [Changelog](https://github.com/encode/uvicorn/blob/master/CHANGELOG.md)
- [Commits](https://github.com/encode/uvicorn/compare/0.31.0...0.31.1)

---
updated-dependencies:
- dependency-name: uvicorn
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-14 03:47:30 +00:00
dependabot[bot]
7bbed1705c chore(deps): bump mkdocs-material in the mkdocs group
Bumps the mkdocs group with 1 update: [mkdocs-material](https://github.com/squidfunk/mkdocs-material).


Updates `mkdocs-material` from 9.5.39 to 9.5.40
- [Release notes](https://github.com/squidfunk/mkdocs-material/releases)
- [Changelog](https://github.com/squidfunk/mkdocs-material/blob/master/CHANGELOG)
- [Commits](https://github.com/squidfunk/mkdocs-material/compare/9.5.39...9.5.40)

---
updated-dependencies:
- dependency-name: mkdocs-material
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: mkdocs
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-14 03:47:26 +00:00
Meng Xiangzhuo
4cd4660357 Remove setup.py 2024-10-13 23:22:10 +08:00
Matthias
d503724bda chore: improve backtest comment 2024-10-12 13:04:09 +02:00
Matthias
2756a1f1a0 chore: improve statement sequence for improved short circuiting 2024-10-12 11:44:29 +02:00
Matthias
883122a98b refactor: Simplify backtest code slightly
This should also slighly improve performance for detail backtests
as it removes one comparison
2024-10-12 11:34:13 +02:00
Matthias
bd7f0383d1 chore: improve clarity of argument name 2024-10-12 11:25:15 +02:00
Matthias
aa8cefc110 fix: minor missing statement in detail backtest fallback 2024-10-12 11:06:13 +02:00
Matthias
48740f5032 docs: add new document to index 2024-10-12 08:41:03 +02:00
froggleston
35b81a2f38 Initial work on strategy dev docs 2024-10-11 23:00:09 +01:00
Matthias
4b582b9d7e fix(bybit): Override fetchOrder to false for spot markets
closes #10777
2024-10-10 19:48:30 +02:00
Matthias
d72f45a94b Merge pull request #10776 from freqtrade/update/binance-leverage-tiers
Update Binance Leverage Tiers
2024-10-10 06:28:32 +02:00
xmatthias
a71ed3ec5a chore: update pre-commit hooks 2024-10-10 03:06:38 +00:00
Matthias
92b2a6fa24 fix: Support mps device where available 2024-10-08 07:20:49 +02:00
Matthias
ddeb64964d Merge pull request #10770 from freqtrade/update/pre-commit-hooks
Update pre-commit hooks
2024-10-08 06:36:12 +02:00
xmatthias
b2d6c5b6a7 chore: update pre-commit hooks 2024-10-08 03:09:02 +00:00
Matthias
271375d171 Merge pull request #10758 from stash86/recursive-str
add is_number check to make sure we skip non-number columns
2024-10-07 21:09:58 +02:00
Matthias
5693039f0d tests: Add test-column to ensure string columns won't regress 2024-10-07 20:33:12 +02:00
Matthias
52304b37a2 feat: Allow strategies to not define enter_long 2024-10-07 20:28:29 +02:00
Matthias
fe8eabda37 Merge pull request #10759 from freqtrade/dependabot/pip/develop/types-9d35b667ff
chore(deps-dev): bump types-python-dateutil from 2.9.0.20240906 to 2.9.0.20241003 in the types group
2024-10-07 08:27:26 +02:00
Matthias
a00032de53 Merge pull request #10768 from freqtrade/dependabot/github_actions/develop/pypa/gh-action-pypi-publish-1.10.3
chore(deps): bump pypa/gh-action-pypi-publish from 1.10.2 to 1.10.3
2024-10-07 08:01:39 +02:00
Matthias
b320358dc4 Merge pull request #10766 from freqtrade/dependabot/pip/develop/pymdown-extensions-10.11.2
chore(deps): bump pymdown-extensions from 10.11.1 to 10.11.2
2024-10-07 07:50:40 +02:00
Matthias
f81ab8e4d4 Merge pull request #10765 from freqtrade/dependabot/pip/develop/rich-13.9.2
chore(deps): bump rich from 13.8.1 to 13.9.2
2024-10-07 07:24:49 +02:00
Matthias
9a537248a4 Merge pull request #10764 from freqtrade/dependabot/pip/develop/humanize-4.11.0
chore(deps): bump humanize from 4.10.0 to 4.11.0
2024-10-07 07:07:49 +02:00
Matthias
eeed65b354 chore: Bump pre-commit types-python-dateutil 2024-10-07 07:07:25 +02:00
Matthias
3c6711c590 Merge pull request #10763 from freqtrade/dependabot/pip/develop/aiohttp-3.10.9
chore(deps): bump aiohttp from 3.10.8 to 3.10.9
2024-10-07 06:53:44 +02:00
Matthias
90d8dfcf12 Merge pull request #10762 from freqtrade/dependabot/pip/develop/pre-commit-4.0.0
chore(deps-dev): bump pre-commit from 3.8.0 to 4.0.0
2024-10-07 06:53:18 +02:00
Matthias
03b76f3c8a Merge pull request #10761 from freqtrade/dependabot/pip/develop/ccxt-4.4.14
chore(deps): bump ccxt from 4.4.9 to 4.4.14
2024-10-07 06:53:04 +02:00
Matthias
b9caed4392 Merge pull request #10760 from freqtrade/dependabot/pip/develop/ruff-0.6.9
chore(deps-dev): bump ruff from 0.6.8 to 0.6.9
2024-10-07 06:52:56 +02:00
dependabot[bot]
6993a650b0 chore(deps): bump pypa/gh-action-pypi-publish from 1.10.2 to 1.10.3
Bumps [pypa/gh-action-pypi-publish](https://github.com/pypa/gh-action-pypi-publish) from 1.10.2 to 1.10.3.
- [Release notes](https://github.com/pypa/gh-action-pypi-publish/releases)
- [Commits](https://github.com/pypa/gh-action-pypi-publish/compare/v1.10.2...v1.10.3)

---
updated-dependencies:
- dependency-name: pypa/gh-action-pypi-publish
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-07 03:45:40 +00:00
dependabot[bot]
4000794af6 chore(deps): bump pymdown-extensions from 10.11.1 to 10.11.2
Bumps [pymdown-extensions](https://github.com/facelessuser/pymdown-extensions) from 10.11.1 to 10.11.2.
- [Release notes](https://github.com/facelessuser/pymdown-extensions/releases)
- [Commits](https://github.com/facelessuser/pymdown-extensions/compare/10.11.1...10.11.2)

---
updated-dependencies:
- dependency-name: pymdown-extensions
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-07 03:17:55 +00:00
dependabot[bot]
7c9e6779c6 chore(deps): bump rich from 13.8.1 to 13.9.2
Bumps [rich](https://github.com/Textualize/rich) from 13.8.1 to 13.9.2.
- [Release notes](https://github.com/Textualize/rich/releases)
- [Changelog](https://github.com/Textualize/rich/blob/master/CHANGELOG.md)
- [Commits](https://github.com/Textualize/rich/compare/v13.8.1...v13.9.2)

---
updated-dependencies:
- dependency-name: rich
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-07 03:17:51 +00:00
dependabot[bot]
ec6d9ec7de chore(deps): bump humanize from 4.10.0 to 4.11.0
Bumps [humanize](https://github.com/python-humanize/humanize) from 4.10.0 to 4.11.0.
- [Release notes](https://github.com/python-humanize/humanize/releases)
- [Commits](https://github.com/python-humanize/humanize/compare/4.10.0...4.11.0)

---
updated-dependencies:
- dependency-name: humanize
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-07 03:17:48 +00:00
dependabot[bot]
58fccadf08 chore(deps): bump aiohttp from 3.10.8 to 3.10.9
Bumps [aiohttp](https://github.com/aio-libs/aiohttp) from 3.10.8 to 3.10.9.
- [Release notes](https://github.com/aio-libs/aiohttp/releases)
- [Changelog](https://github.com/aio-libs/aiohttp/blob/master/CHANGES.rst)
- [Commits](https://github.com/aio-libs/aiohttp/compare/v3.10.8...v3.10.9)

---
updated-dependencies:
- dependency-name: aiohttp
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-07 03:17:45 +00:00
dependabot[bot]
34e7362132 chore(deps-dev): bump pre-commit from 3.8.0 to 4.0.0
Bumps [pre-commit](https://github.com/pre-commit/pre-commit) from 3.8.0 to 4.0.0.
- [Release notes](https://github.com/pre-commit/pre-commit/releases)
- [Changelog](https://github.com/pre-commit/pre-commit/blob/main/CHANGELOG.md)
- [Commits](https://github.com/pre-commit/pre-commit/compare/v3.8.0...v4.0.0)

---
updated-dependencies:
- dependency-name: pre-commit
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-07 03:17:30 +00:00
dependabot[bot]
fca39a7809 chore(deps): bump ccxt from 4.4.9 to 4.4.14
Bumps [ccxt](https://github.com/ccxt/ccxt) from 4.4.9 to 4.4.14.
- [Release notes](https://github.com/ccxt/ccxt/releases)
- [Changelog](https://github.com/ccxt/ccxt/blob/master/CHANGELOG.md)
- [Commits](https://github.com/ccxt/ccxt/compare/4.4.9...4.4.14)

---
updated-dependencies:
- dependency-name: ccxt
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-07 03:17:24 +00:00
dependabot[bot]
278404f47c chore(deps-dev): bump ruff from 0.6.8 to 0.6.9
Bumps [ruff](https://github.com/astral-sh/ruff) from 0.6.8 to 0.6.9.
- [Release notes](https://github.com/astral-sh/ruff/releases)
- [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md)
- [Commits](https://github.com/astral-sh/ruff/compare/0.6.8...0.6.9)

---
updated-dependencies:
- dependency-name: ruff
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-07 03:17:11 +00:00
dependabot[bot]
64612712a5 chore(deps-dev): bump types-python-dateutil in the types group
Bumps the types group with 1 update: [types-python-dateutil](https://github.com/python/typeshed).


Updates `types-python-dateutil` from 2.9.0.20240906 to 2.9.0.20241003
- [Commits](https://github.com/python/typeshed/commits)

---
updated-dependencies:
- dependency-name: types-python-dateutil
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: types
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-07 03:15:59 +00:00
Stefano Ariestasia
9ffd0ad982 add is_number check 2024-10-07 11:17:15 +09:00
Matthias
e703fec3af Merge pull request #10748 from freqtrade/maint/bump_ruff_minpython
Bump ruff target version to 3.9
2024-10-06 08:56:50 +02:00
Matthias
78e9eac64a chore: Fix remaining violations after merge 2024-10-06 08:28:55 +02:00
Matthias
2b1fc8725e Merge branch 'develop' into maint/bump_ruff_minpython 2024-10-06 08:28:09 +02:00
Matthias
b885c3dda3 Merge pull request #10746 from xzmeng/startup-time
Postpone imports on demand
2024-10-06 08:21:54 +02:00
Matthias
aa2c1501da chore: fix missed dependencies for deploy_ui 2024-10-05 13:20:43 +02:00
Matthias
ed5c929b23 chore: remove rapidjson from "default" imports 2024-10-05 13:17:35 +02:00
Matthias
672a23dbcd chore: revert changes to btanalysis - they have no impact 2024-10-05 13:09:30 +02:00
Matthias
24c09d0319 refactor: move ui deployment to it's own file 2024-10-05 13:06:19 +02:00
Matthias
092275a981 refactor: move config deployment to it's own file 2024-10-05 13:00:11 +02:00
Matthias
3fe97e1709 chore: Remove __futures__ import and corresponding ruff skips 2024-10-05 11:43:28 +02:00
Matthias
1ad4f0c9b5 chore: re-export from system module 2024-10-05 11:30:17 +02:00
Matthias
27a327402b chore: improve behavior by validating earlier
(and with exception handling)
2024-10-05 11:09:39 +02:00
Matthias
e2adfe9eab Merge pull request #10749 from xzmeng/fix-setuppy
Fix setup.py
2024-10-04 13:00:21 +02:00
Meng Xiangzhuo
67690c9e8e Fix setup.py 2024-10-04 18:11:36 +08:00
Matthias
4c3c2eaa3b chore: update ruff target version to 3.9 2024-10-04 07:11:06 +02:00
Matthias
cf6c41f9db chore: remove no longer required imports 2024-10-04 07:10:49 +02:00
Matthias
2e0a597ee4 chore: update tests to modern typing syntax 2024-10-04 07:09:51 +02:00
Matthias
628983d123 chore: update ft_client to modern typing syntax 2024-10-04 07:08:56 +02:00
Matthias
8ec5dd6def chore: update to modern typing syntax 2024-10-04 07:08:30 +02:00
Matthias
acc40c73f3 chore: update strategy to modern typing syntax 2024-10-04 07:07:32 +02:00
Matthias
1d4658e978 chore: update rpc to modern typing syntax 2024-10-04 07:06:27 +02:00
Matthias
b8bbf3b69e chore: update resolvers to modern typing syntax 2024-10-04 07:02:57 +02:00
Matthias
d8e41fa8b1 chore: update plugins to modern typing syntax 2024-10-04 07:02:20 +02:00
Matthias
e9a6ba03f9 chore: update persistence to modern typing syntax 2024-10-04 06:55:05 +02:00
Matthias
2e69e38adb chore: update optimize to modern typing syntax 2024-10-04 06:53:50 +02:00
Matthias
c5ed876c09 chore: update types config to modern typing syntax 2024-10-04 06:50:53 +02:00
Matthias
96f737f13e chore: update freqai to modern typing syntax 2024-10-04 06:50:34 +02:00
Matthias
f369151e8e chore: update exchange config to modern typing syntax 2024-10-04 06:46:45 +02:00
Matthias
d1b9990e4e chore: update edge config to modern typing syntax 2024-10-04 06:42:29 +02:00
Matthias
ed7eb01d1b chore: update data to modern typing syntax 2024-10-04 06:42:04 +02:00
Matthias
6601127693 chore: update config to modern typing syntax 2024-10-04 06:39:58 +02:00
Matthias
43236c1cc4 chore: update config to modern typing syntax 2024-10-04 06:39:20 +02:00
Matthias
65bbf7b2a2 chore: update commands to modern typing syntax 2024-10-04 06:38:06 +02:00
Matthias
74b8dca63e chore: update to modern typing syntax 2024-10-04 06:36:00 +02:00
Matthias
7db0e3ac3f chore: remove obsolete version check 2024-10-04 06:31:19 +02:00
Meng Xiangzhuo
f889c24497 Fix test 2024-10-04 11:56:38 +08:00
Meng Xiangzhuo
852a1900b4 Fix test 2024-10-04 11:52:07 +08:00
Meng Xiangzhuo
30a273c946 Revert lazy import requests 2024-10-04 11:36:51 +08:00
Meng Xiangzhuo
903614140a Eliminate unnecessary lazy import 2024-10-04 11:22:47 +08:00
Meng Xiangzhuo
0fe772efa8 Eliminate unnecessary TYPE_CHECKING 2024-10-04 11:10:39 +08:00
Meng Xiangzhuo
e6dedee56f Split freqtrade.system into a package 2024-10-04 11:05:49 +08:00
Meng Xiangzhuo
66605e91aa Merge branch 'develop' into startup-time 2024-10-04 08:38:55 +08:00
Matthias
137db2c86c Merge pull request #10745 from freqtrade/update/binance-leverage-tiers
Update Binance Leverage Tiers
2024-10-03 06:45:16 +02:00
Meng Xiangzhuo
9c28a6ff4a Add test 2024-10-03 12:07:03 +08:00
Meng Xiangzhuo
48a8d7de1c Postpone imports on demand 2024-10-03 11:33:52 +08:00
xmatthias
5fa96c944d chore: update pre-commit hooks 2024-10-03 03:07:14 +00:00
Matthias
fe270bd9ae Merge pull request #10741 from freqtrade/feat/improve_liquidation_logic
Improved liquidation price logic
2024-10-02 19:49:03 +02:00
Matthias
a0912ad6b4 tests: update ccxt compat test 2024-10-02 18:10:28 +02:00
Matthias
9ba0c54295 chore: cleanup test code 2024-10-02 07:05:00 +02:00
Matthias
86721b88ce chore: improve import logic 2024-10-02 07:05:00 +02:00
Matthias
9bdee1b82d feat: improve typing of fetch_funding_rates 2024-10-02 07:05:00 +02:00
Matthias
abe01f8f48 feat: implement liquidation price update on all order fills 2024-10-02 07:05:00 +02:00
Matthias
c5525d356e feat: support backtesting with cross configuration 2024-10-02 07:05:00 +02:00
Matthias
36ae564d26 feat: update liquidation price on startup 2024-10-02 07:05:00 +02:00
Matthias
cba6bd6ef5 fix: use t.leverage, not trade.leverage for cross liq calculations 2024-10-02 07:05:00 +02:00
Matthias
4d40ffedff fix: allow setting 0 as liquidation price 2024-10-02 07:05:00 +02:00
Matthias
319e8d746f feat: use proper trade objects for liquidation calc 2024-10-02 07:05:00 +02:00
Matthias
fe7a88362b feat: add method to fetch binance funding fees
which is necessary to calculate accurate liquidation prices
2024-10-02 07:05:00 +02:00
Matthias
8bf314202f chore: simplify call to liquidation price for cross futures 2024-10-02 07:05:00 +02:00
Matthias
ac8bc7dec2 fix: use "other trades" logic for binance cross calc 2024-10-02 07:05:00 +02:00
Matthias
0d5919392e test: update binance test 2024-10-02 07:05:00 +02:00
Matthias
1473abf19a refactor: rename dry-liquidation parameter
passing all open trades will be more flexible for the future.
2024-10-02 07:05:00 +02:00
Matthias
45e75f3d09 chore: improve arguments to get_liquidation_price 2024-10-02 07:05:00 +02:00
Matthias
5358f2fb9e feat: allow liquidation-price update without trades for cross mode 2024-10-02 07:05:00 +02:00
Matthias
c316d27444 refactor: move exception handler into helper function 2024-10-02 07:05:00 +02:00
Matthias
0c0bb29f83 chore: add other_trades param to liquidation_price calls 2024-10-02 07:05:00 +02:00
Matthias
82bc3270e7 test: Update binance test for new approach 2024-10-02 07:05:00 +02:00
Matthias
ec79b0b17b feat: update dry-run calculation params to be more generic 2024-10-02 07:05:00 +02:00
Matthias
0560567058 test: add test for liquidation_price update function 2024-10-02 07:05:00 +02:00
Matthias
3de740b35f feat: create shared method for liquidation price update 2024-10-02 07:05:00 +02:00
Matthias
b69f598e51 refactor: move more code into cross conditional 2024-10-02 07:05:00 +02:00
Matthias
1ad177fca7 feat: add liquidation_price update support for cross mode 2024-10-02 07:05:00 +02:00
Matthias
c3ad3ff348 Merge pull request #10737 from xzmeng/fix-doc
Correct admonition indent
2024-10-02 07:03:23 +02:00
Matthias
ad578bb171 Merge pull request #10739 from freqtrade/dependabot/docker/python-3.12.7-slim-bookworm
chore(deps): bump python from 3.12.6-slim-bookworm to 3.12.7-slim-bookworm
2024-10-02 06:23:44 +02:00
dependabot[bot]
9538c49ac8 chore(deps): bump python
Bumps python from 3.12.6-slim-bookworm to 3.12.7-slim-bookworm.

---
updated-dependencies:
- dependency-name: python
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-02 03:28:37 +00:00
Meng Xiangzhuo
84d43db500 Correct admonition indent 2024-10-02 05:12:24 +08:00
Matthias
bf2d0468f9 tests: fix test-data setup for btc test trades 2024-10-01 20:48:43 +02:00
Matthias
d2bc47cfe8 tests: fix test-data setup for usdt trades 2024-10-01 20:31:02 +02:00
Matthias
d8c6c766b9 Merge pull request #10735 from freqtrade/maint/3.9_removal
Remove support for python 3.9
2024-10-01 19:46:31 +02:00
Matthias
98f4bf2f65 chore: remove Ta-lib binaries for 3.9 2024-10-01 18:18:46 +02:00
Matthias
f9c8b7f4ab chore: fix ps syntax error 2024-10-01 08:16:13 +02:00
Matthias
a92532c0c9 chore: Remove now pointless helper function 2024-10-01 07:11:10 +02:00
Matthias
bede81632d chore: remove conditional requirements 2024-10-01 07:04:25 +02:00
Matthias
e975062e0e chore: don't run CI on 3.9 2024-10-01 07:03:48 +02:00
Matthias
0cd051cee2 chore: update conditional check for python version 2024-10-01 06:44:49 +02:00
Matthias
682980be49 chore: drop 3.9 support from setup.ps1 2024-10-01 06:44:27 +02:00
Matthias
878043ea3d chore: drop 3.9 support from setup.sh 2024-10-01 06:44:19 +02:00
Matthias
757ae65189 chore: remove pointless conditional (we can't hit this point) 2024-10-01 06:41:58 +02:00
Matthias
cd63abba5b chore: update documentation to mention 3.10+ compat 2024-10-01 06:41:05 +02:00
Matthias
a0f00d0c83 Merge pull request #10734 from freqtrade/update/pre-commit-hooks
Update pre-commit hooks
2024-10-01 06:28:22 +02:00
xmatthias
915591c6d6 chore: update pre-commit hooks 2024-10-01 03:13:31 +00:00
Matthias
157cb7d982 Merge pull request #10725 from freqtrade/new_release
New release 2024.9
2024-09-30 11:25:43 +02:00
Matthias
cdcb21b841 Merge pull request #10730 from freqtrade/dependabot/pip/develop/aiohttp-3.10.8
chore(deps): bump aiohttp from 3.10.5 to 3.10.8
2024-09-30 09:26:31 +02:00
Matthias
2bf79a5298 Merge pull request #10729 from freqtrade/dependabot/pip/develop/pymdown-extensions-10.11.1
chore(deps): bump pymdown-extensions from 10.10.1 to 10.11.1
2024-09-30 09:05:30 +02:00
Matthias
ebefefa0eb Merge pull request #10733 from freqtrade/dependabot/pip/develop/ruff-0.6.8
chore(deps-dev): bump ruff from 0.6.7 to 0.6.8
2024-09-30 08:49:46 +02:00
dependabot[bot]
a740883c8d chore(deps): bump aiohttp from 3.10.5 to 3.10.8
Bumps [aiohttp](https://github.com/aio-libs/aiohttp) from 3.10.5 to 3.10.8.
- [Release notes](https://github.com/aio-libs/aiohttp/releases)
- [Changelog](https://github.com/aio-libs/aiohttp/blob/master/CHANGES.rst)
- [Commits](https://github.com/aio-libs/aiohttp/compare/v3.10.5...v3.10.8)

---
updated-dependencies:
- dependency-name: aiohttp
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-30 06:21:31 +00:00
Matthias
da760075d2 Merge pull request #10732 from freqtrade/dependabot/pip/develop/ccxt-4.4.9
chore(deps): bump ccxt from 4.4.6 to 4.4.9
2024-09-30 08:20:09 +02:00
Matthias
b8833772a3 Merge pull request #10731 from freqtrade/dependabot/pip/develop/uvicorn-0.31.0
chore(deps): bump uvicorn from 0.30.6 to 0.31.0
2024-09-30 08:06:09 +02:00
Matthias
131c6e761e Merge pull request #10727 from freqtrade/dependabot/pip/develop/tensorboard-2.18.0
chore(deps): bump tensorboard from 2.17.1 to 2.18.0
2024-09-30 07:30:54 +02:00
dependabot[bot]
1fb0f2f048 chore(deps): bump pymdown-extensions from 10.10.1 to 10.11.1
Bumps [pymdown-extensions](https://github.com/facelessuser/pymdown-extensions) from 10.10.1 to 10.11.1.
- [Release notes](https://github.com/facelessuser/pymdown-extensions/releases)
- [Commits](https://github.com/facelessuser/pymdown-extensions/compare/10.10.1...10.11.1)

---
updated-dependencies:
- dependency-name: pymdown-extensions
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-30 05:25:20 +00:00
Matthias
2a25ac9d1f Merge pull request #10726 from freqtrade/dependabot/pip/develop/mkdocs-5d708111c2
chore(deps): bump mkdocs-material from 9.5.36 to 9.5.39 in the mkdocs group
2024-09-30 07:24:31 +02:00
Matthias
773bf765ad feat(hyperliquid): Remove precision override
part of #10377
2024-09-30 07:06:16 +02:00
Matthias
b0b866eec5 Merge pull request #10723 from freqtrade/remove/deprecated_protection-setting
Remove long deprecated protections from config setting
2024-09-30 06:41:22 +02:00
dependabot[bot]
8cc928c841 chore(deps-dev): bump ruff from 0.6.7 to 0.6.8
Bumps [ruff](https://github.com/astral-sh/ruff) from 0.6.7 to 0.6.8.
- [Release notes](https://github.com/astral-sh/ruff/releases)
- [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md)
- [Commits](https://github.com/astral-sh/ruff/compare/0.6.7...0.6.8)

---
updated-dependencies:
- dependency-name: ruff
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-30 03:42:21 +00:00
dependabot[bot]
4180420765 chore(deps): bump ccxt from 4.4.6 to 4.4.9
Bumps [ccxt](https://github.com/ccxt/ccxt) from 4.4.6 to 4.4.9.
- [Release notes](https://github.com/ccxt/ccxt/releases)
- [Changelog](https://github.com/ccxt/ccxt/blob/master/CHANGELOG.md)
- [Commits](https://github.com/ccxt/ccxt/compare/4.4.6...4.4.9)

---
updated-dependencies:
- dependency-name: ccxt
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-30 03:42:05 +00:00
dependabot[bot]
30945dc240 chore(deps): bump uvicorn from 0.30.6 to 0.31.0
Bumps [uvicorn](https://github.com/encode/uvicorn) from 0.30.6 to 0.31.0.
- [Release notes](https://github.com/encode/uvicorn/releases)
- [Changelog](https://github.com/encode/uvicorn/blob/master/CHANGELOG.md)
- [Commits](https://github.com/encode/uvicorn/compare/0.30.6...0.31.0)

---
updated-dependencies:
- dependency-name: uvicorn
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-30 03:41:58 +00:00
dependabot[bot]
4ef87e3419 chore(deps): bump tensorboard from 2.17.1 to 2.18.0
Bumps [tensorboard](https://github.com/tensorflow/tensorboard) from 2.17.1 to 2.18.0.
- [Release notes](https://github.com/tensorflow/tensorboard/releases)
- [Changelog](https://github.com/tensorflow/tensorboard/blob/master/RELEASE.md)
- [Commits](https://github.com/tensorflow/tensorboard/compare/2.17.1...2.18.0)

---
updated-dependencies:
- dependency-name: tensorboard
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-30 03:41:22 +00:00
dependabot[bot]
4785194527 chore(deps): bump mkdocs-material in the mkdocs group
Bumps the mkdocs group with 1 update: [mkdocs-material](https://github.com/squidfunk/mkdocs-material).


Updates `mkdocs-material` from 9.5.36 to 9.5.39
- [Release notes](https://github.com/squidfunk/mkdocs-material/releases)
- [Changelog](https://github.com/squidfunk/mkdocs-material/blob/master/CHANGELOG)
- [Commits](https://github.com/squidfunk/mkdocs-material/compare/9.5.36...9.5.39)

---
updated-dependencies:
- dependency-name: mkdocs-material
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: mkdocs
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-30 03:41:18 +00:00
Matthias
8a742ce3ec chore: bump version to 2024.10-dev 2024-09-29 20:01:11 +02:00
Matthias
27af9455f5 chore: bump version to 2024.9 2024-09-29 19:53:20 +02:00
Matthias
98ff572afe Merge branch 'stable' into new_release 2024-09-29 19:53:03 +02:00
Matthias
f77fedbea4 chore: move available_protections constant to test file (it's only used there) 2024-09-29 15:08:57 +02:00
Matthias
39c582dac2 tests: move protection-validation test to protection test file 2024-09-29 15:06:43 +02:00
Matthias
8736728478 chore: remove unused import 2024-09-29 15:06:22 +02:00
Matthias
23cf9f47b0 chore: move protection validation to protectionManager 2024-09-29 15:06:15 +02:00
Matthias
b8feefc541 tests: update protection tests 2024-09-29 09:44:07 +02:00
Matthias
e3a6c71087 chore: Remove protections from config logic 2024-09-29 09:41:02 +02:00
Matthias
d6cc88fa99 chore: remove schema syntax highlighting for protections 2024-09-29 09:27:40 +02:00
Matthias
428d451e55 chore: remove long-deprecated setting 2024-09-29 09:07:43 +02:00
Matthias
aa67abad94 docs: simplify protections intro
this had way too many consecutive "boxes"
2024-09-29 08:38:07 +02:00
Matthias
415b8354f4 fix: if coingecko when no pair returned
fails to return valid pairs, the pairlist should be empty
2024-09-28 19:45:01 +02:00
Matthias
51c596a21f chore: add test for "no pair from coingecko" case
this should return an empty list
2024-09-28 19:44:38 +02:00
Matthias
5816a594fd Merge pull request #10671 from jakubikan/category-for-market-cap-pairlist
Category for market cap pairlist
2024-09-28 11:51:42 +02:00
Matthias
f4d76aa360 chore: improved wording 2024-09-28 10:18:59 +02:00
Matthias
56835f5f09 chore: manually check for symlink 2024-09-28 10:17:52 +02:00
Matthias
255ad7cac5 tests: test invalid category in list 2024-09-28 10:14:31 +02:00
Matthias
8c097a81ea tests: enhance test for marketcappairlist 2024-09-28 10:10:07 +02:00
Matthias
3dc92b42fe fix: Check if sub-directories are actually directories and fail otherwise.
This will explicitly fail if a file (or an invalid symlink) is present.
Freqtrade requires these files to be valid files - so failing here is correct behavior.

closes #10720
2024-09-28 09:54:49 +02:00
Jakub W.
1ed5a37280 Update freqtrade/plugins/pairlist/IPairList.py
Co-authored-by: Matthias <xmatthias@outlook.com>
2024-09-26 23:38:17 +02:00
Matthias
cb36f2844e chore: Improve "wrong category" error. 2024-09-26 20:21:27 +02:00
Matthias
7b93b55b78 docs: rephrase categories docs and add performance warning 2024-09-26 20:07:41 +02:00
Matthias
6837196e44 fix: treat marketcap as optional parameter 2024-09-26 19:59:23 +02:00
Matthias
31680f3b59 chore: Improve UI wording 2024-09-26 19:31:43 +02:00
Matthias
91d9c9b4d5 Merge pull request #10711 from freqtrade/fix/pytorch-scaling
fix: Update BasePyTorchRegressor.py
2024-09-26 18:53:14 +02:00
Robert Caulk
d18d8cf0ea freqai_info -> ft_params 2024-09-26 17:54:14 +02:00
Robert Caulk
123909cdac fix: Update BasePyTorchRegressor.py 2024-09-26 16:31:43 +02:00
Matthias
f0eaccc6ac Merge pull request #10709 from freqtrade/update/binance-leverage-tiers
Update Binance Leverage Tiers
2024-09-26 06:20:14 +02:00
xmatthias
1d66ef2f2d chore: update pre-commit hooks 2024-09-26 03:17:36 +00:00
Jakub Werner (jakubikan)
8aefae3aff format 2024-09-25 21:22:40 +02:00
Jakub Werner (jakubikan)
514558796b double quotes 2024-09-25 21:21:56 +02:00
Jakub Werner (jakubikan)
b00ca54707 adding docu 2024-09-25 21:20:35 +02:00
Jakub Werner (jakubikan)
0dbe507b26 making list of categories available 2024-09-25 21:11:52 +02:00
Matthias
4b70bea21f chore: reset params for emulated call 2024-09-25 19:11:12 +02:00
Matthias
096a051b99 test: update test 2024-09-25 19:03:03 +02:00
Matthias
a3ca1ff1e9 fix: send acknoledged to bybit fetch_order calls 2024-09-25 19:02:32 +02:00
Matthias
28eabfe477 tests: update test for retryable okx behavior 2024-09-25 06:20:49 +02:00
Matthias
0a68b0515c chore: reduce retry count for stop orders 2024-09-24 20:20:33 +02:00
Matthias
566c0c8f72 refactor: split okx fetch stop fallback 2024-09-24 20:20:33 +02:00
Matthias
333f2cb472 fix: Improve error handling for OKX stop orders
closes #10704
2024-09-24 19:38:36 +02:00
Matthias
3d1acc65af tests: add test for #10704 2024-09-24 19:38:11 +02:00
Matthias
5907de90c1 Merge pull request #10687 from freqtrade/refactor/trade_init_0
Initialize Trade objects with amount=0
2024-09-24 06:30:24 +02:00
Matthias
25d8a9d1f8 Merge pull request #10701 from freqtrade/update/pre-commit-hooks
Update pre-commit hooks
2024-09-24 06:30:09 +02:00
xmatthias
b44e8199b5 chore: update pre-commit hooks 2024-09-24 03:06:51 +00:00
Matthias
91449d0c8b Merge pull request #10699 from freqtrade/dependabot/pip/develop/ccxt-4.4.6
chore(deps): bump ccxt from 4.4.5 to 4.4.6
2024-09-23 13:05:49 +02:00
dependabot[bot]
b228f177f3 chore(deps): bump ccxt from 4.4.5 to 4.4.6
Bumps [ccxt](https://github.com/ccxt/ccxt) from 4.4.5 to 4.4.6.
- [Release notes](https://github.com/ccxt/ccxt/releases)
- [Changelog](https://github.com/ccxt/ccxt/blob/master/CHANGELOG.md)
- [Commits](https://github.com/ccxt/ccxt/compare/4.4.5...4.4.6)

---
updated-dependencies:
- dependency-name: ccxt
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-23 09:57:20 +00:00
Matthias
9a40a2d4f2 Merge pull request #10695 from freqtrade/dependabot/pip/develop/sqlalchemy-2.0.35
chore(deps): bump sqlalchemy from 2.0.34 to 2.0.35
2024-09-23 11:56:28 +02:00
Matthias
cdc3dabba1 Merge pull request #10693 from freqtrade/dependabot/pip/develop/fastapi-0.115.0
chore(deps): bump fastapi from 0.114.2 to 0.115.0
2024-09-23 11:30:26 +02:00
Matthias
40ba2cbe79 Merge pull request #10690 from freqtrade/dependabot/pip/develop/pymdown-extensions-10.10.1
chore(deps): bump pymdown-extensions from 10.9 to 10.10.1
2024-09-23 11:03:54 +02:00
Matthias
7ede8af193 Merge branch 'develop' into dependabot/pip/develop/sqlalchemy-2.0.35 2024-09-23 10:52:07 +02:00
Matthias
a835b8cc8f Merge pull request #10698 from freqtrade/dependabot/pip/develop/filelock-3.16.1
chore(deps): bump filelock from 3.16.0 to 3.16.1
2024-09-23 09:44:11 +02:00
Matthias
e54b47b857 Merge pull request #10697 from freqtrade/dependabot/pip/develop/python-telegram-bot-21.6
chore(deps): bump python-telegram-bot from 21.5 to 21.6
2024-09-23 09:28:28 +02:00
Matthias
c93c25829b Merge pull request #10696 from freqtrade/dependabot/pip/develop/ruff-0.6.7
chore(deps-dev): bump ruff from 0.6.5 to 0.6.7
2024-09-23 09:24:19 +02:00
dependabot[bot]
1cdf8b29a5 chore(deps): bump fastapi from 0.114.2 to 0.115.0
Bumps [fastapi](https://github.com/fastapi/fastapi) from 0.114.2 to 0.115.0.
- [Release notes](https://github.com/fastapi/fastapi/releases)
- [Commits](https://github.com/fastapi/fastapi/compare/0.114.2...0.115.0)

---
updated-dependencies:
- dependency-name: fastapi
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-23 06:38:27 +00:00
Matthias
b6eacf0771 Merge pull request #10694 from freqtrade/dependabot/pip/develop/pandas-2.2.3
chore(deps): bump pandas from 2.2.2 to 2.2.3
2024-09-23 08:37:49 +02:00
Matthias
4ea23c1bd8 Merge pull request #10692 from freqtrade/dependabot/pip/develop/websockets-13.1
chore(deps): bump websockets from 13.0.1 to 13.1
2024-09-23 08:37:01 +02:00
Matthias
70398820c0 Merge pull request #10691 from freqtrade/dependabot/pip/develop/pydantic-2.9.2
chore(deps): bump pydantic from 2.9.1 to 2.9.2
2024-09-23 08:36:21 +02:00
dependabot[bot]
04abc4d12f chore(deps): bump pymdown-extensions from 10.9 to 10.10.1
Bumps [pymdown-extensions](https://github.com/facelessuser/pymdown-extensions) from 10.9 to 10.10.1.
- [Release notes](https://github.com/facelessuser/pymdown-extensions/releases)
- [Commits](https://github.com/facelessuser/pymdown-extensions/compare/10.9...10.10.1)

---
updated-dependencies:
- dependency-name: pymdown-extensions
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-23 06:24:37 +00:00
Matthias
8491f46045 Merge pull request #10689 from freqtrade/dependabot/pip/develop/mkdocs-73612938eb
chore(deps): bump mkdocs-material from 9.5.34 to 9.5.36 in the mkdocs group
2024-09-23 08:23:40 +02:00
Matthias
4aa909e587 Merge pull request #10688 from freqtrade/dependabot/github_actions/develop/pypa/gh-action-pypi-publish-1.10.2
chore(deps): bump pypa/gh-action-pypi-publish from 1.10.1 to 1.10.2
2024-09-23 08:23:22 +02:00
Matthias
9f5e4b5812 chore: update sqlalchemy in pre-commit config 2024-09-23 06:34:12 +02:00
dependabot[bot]
06eb5abf11 chore(deps): bump filelock from 3.16.0 to 3.16.1
Bumps [filelock](https://github.com/tox-dev/py-filelock) from 3.16.0 to 3.16.1.
- [Release notes](https://github.com/tox-dev/py-filelock/releases)
- [Changelog](https://github.com/tox-dev/filelock/blob/main/docs/changelog.rst)
- [Commits](https://github.com/tox-dev/py-filelock/compare/3.16.0...3.16.1)

---
updated-dependencies:
- dependency-name: filelock
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-23 03:48:44 +00:00
dependabot[bot]
29e6e3b374 chore(deps): bump python-telegram-bot from 21.5 to 21.6
Bumps [python-telegram-bot](https://github.com/python-telegram-bot/python-telegram-bot) from 21.5 to 21.6.
- [Release notes](https://github.com/python-telegram-bot/python-telegram-bot/releases)
- [Changelog](https://github.com/python-telegram-bot/python-telegram-bot/blob/master/CHANGES.rst)
- [Commits](https://github.com/python-telegram-bot/python-telegram-bot/compare/v21.5...v21.6)

---
updated-dependencies:
- dependency-name: python-telegram-bot
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-23 03:48:38 +00:00
dependabot[bot]
2fc97f83f4 chore(deps-dev): bump ruff from 0.6.5 to 0.6.7
Bumps [ruff](https://github.com/astral-sh/ruff) from 0.6.5 to 0.6.7.
- [Release notes](https://github.com/astral-sh/ruff/releases)
- [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md)
- [Commits](https://github.com/astral-sh/ruff/compare/0.6.5...0.6.7)

---
updated-dependencies:
- dependency-name: ruff
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-23 03:48:26 +00:00
dependabot[bot]
1e761b4c7d chore(deps): bump sqlalchemy from 2.0.34 to 2.0.35
Bumps [sqlalchemy](https://github.com/sqlalchemy/sqlalchemy) from 2.0.34 to 2.0.35.
- [Release notes](https://github.com/sqlalchemy/sqlalchemy/releases)
- [Changelog](https://github.com/sqlalchemy/sqlalchemy/blob/main/CHANGES.rst)
- [Commits](https://github.com/sqlalchemy/sqlalchemy/commits)

---
updated-dependencies:
- dependency-name: sqlalchemy
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-23 03:48:12 +00:00
dependabot[bot]
a2ca136f1f chore(deps): bump pandas from 2.2.2 to 2.2.3
Bumps [pandas](https://github.com/pandas-dev/pandas) from 2.2.2 to 2.2.3.
- [Release notes](https://github.com/pandas-dev/pandas/releases)
- [Commits](https://github.com/pandas-dev/pandas/compare/v2.2.2...v2.2.3)

---
updated-dependencies:
- dependency-name: pandas
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-23 03:47:58 +00:00
dependabot[bot]
94322664f2 chore(deps): bump websockets from 13.0.1 to 13.1
Bumps [websockets](https://github.com/python-websockets/websockets) from 13.0.1 to 13.1.
- [Release notes](https://github.com/python-websockets/websockets/releases)
- [Commits](https://github.com/python-websockets/websockets/compare/13.0.1...13.1)

---
updated-dependencies:
- dependency-name: websockets
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-23 03:47:39 +00:00
dependabot[bot]
cbd5c6d3e9 chore(deps): bump pydantic from 2.9.1 to 2.9.2
Bumps [pydantic](https://github.com/pydantic/pydantic) from 2.9.1 to 2.9.2.
- [Release notes](https://github.com/pydantic/pydantic/releases)
- [Changelog](https://github.com/pydantic/pydantic/blob/main/HISTORY.md)
- [Commits](https://github.com/pydantic/pydantic/compare/v2.9.1...v2.9.2)

---
updated-dependencies:
- dependency-name: pydantic
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-23 03:47:32 +00:00
dependabot[bot]
0428dc8381 chore(deps): bump mkdocs-material in the mkdocs group
Bumps the mkdocs group with 1 update: [mkdocs-material](https://github.com/squidfunk/mkdocs-material).


Updates `mkdocs-material` from 9.5.34 to 9.5.36
- [Release notes](https://github.com/squidfunk/mkdocs-material/releases)
- [Changelog](https://github.com/squidfunk/mkdocs-material/blob/master/CHANGELOG)
- [Commits](https://github.com/squidfunk/mkdocs-material/compare/9.5.34...9.5.36)

---
updated-dependencies:
- dependency-name: mkdocs-material
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: mkdocs
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-23 03:47:22 +00:00
dependabot[bot]
01e7b0da46 chore(deps): bump pypa/gh-action-pypi-publish from 1.10.1 to 1.10.2
Bumps [pypa/gh-action-pypi-publish](https://github.com/pypa/gh-action-pypi-publish) from 1.10.1 to 1.10.2.
- [Release notes](https://github.com/pypa/gh-action-pypi-publish/releases)
- [Commits](https://github.com/pypa/gh-action-pypi-publish/compare/v1.10.1...v1.10.2)

---
updated-dependencies:
- dependency-name: pypa/gh-action-pypi-publish
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-23 03:22:42 +00:00
Matthias
b37dadcc05 tests: dry-wallets test update 2024-09-22 13:22:37 +02:00
Matthias
8e6151fe65 fix: properly consider open order values as "tied up" stake. 2024-09-22 13:17:27 +02:00
Matthias
9b346c0937 docs: add hint about amount being 0 2024-09-22 09:20:49 +02:00
Matthias
b09f80ca30 tests: improve create_trade test 2024-09-22 08:47:52 +02:00
Matthias
0e0af82290 fix: odd calculation in calc_profit_ratio 2024-09-22 08:47:52 +02:00
Matthias
c69b09cbff tests: fix amount=0 test 2024-09-22 08:47:52 +02:00
Matthias
b8ba6cd970 tests: update rpc_status 2024-09-22 08:47:52 +02:00
Matthias
004e30d6be tests: update force_sell test to not use empty amount column 2024-09-22 08:47:52 +02:00
Matthias
b084efdd06 feat: initialize trade objects with 0 amount
This way, it'll represent the owned amount
which will be updated once the order fills
2024-09-22 08:47:52 +02:00
Matthias
d377d8462f fix: improve resiliance of order parsing
closes #10676
2024-09-22 08:28:29 +02:00
Matthias
2bbec9f9b1 tests: fix random test failure by reading time only once 2024-09-21 16:59:02 +02:00
Matthias
b326908487 tests: Improve test resiliance 2024-09-21 16:40:00 +02:00
Matthias
b21156a886 tests: improve stoploss test 2024-09-21 16:34:58 +02:00
Matthias
85138b0bc8 tests: Have exchange test get_historic_ohlcv properly 2024-09-21 09:06:26 +02:00
Matthias
e0df0257d1 tests: Update history tests for new response 2024-09-20 07:26:45 +02:00
Matthias
d23c1e8f92 refactor: Move dataframe parsing into get_historic_ohlcv 2024-09-20 07:23:52 +02:00
Matthias
670a40e67b chore: remove no longer valid todo 2024-09-20 07:06:21 +02:00
Matthias
3bbc6cbab1 chore: bump ccxt to 4.4.5
closes #10677
2024-09-19 20:41:32 +02:00
Matthias
15de53a22d chore: bump ccxt to 4.4.5
closes #10677
2024-09-19 20:36:56 +02:00
Matthias
59a44d6973 Merge pull request #10679 from freqtrade/update/binance-leverage-tiers
Update Binance Leverage Tiers
2024-09-19 06:29:02 +02:00
xmatthias
7561692352 chore: update pre-commit hooks 2024-09-19 03:15:32 +00:00
Matthias
f50a633f87 docs: order table formatting 2024-09-18 07:11:12 +02:00
Jakub Werner (jakubikan)
50f07e7b11 only doing this if the category is set 2024-09-17 23:03:51 +02:00
Jakub Werner (jakubikan)
660623181a adding category list if the category is not from the category 2024-09-17 22:36:21 +02:00
Jakub Werner (jakubikan)
03ee3aaf40 adding category list if the category is not from the category 2024-09-17 22:35:00 +02:00
Matthias
ad295946c0 fix: use precise calculation for decrease adjustment calculations 2024-09-17 20:19:22 +02:00
Matthias
c28446dad0 Merge pull request #10672 from freqtrade/update/pre-commit-hooks
Update pre-commit hooks
2024-09-17 06:28:16 +02:00
xmatthias
ff9d1f2728 chore: update pre-commit hooks 2024-09-17 03:03:39 +00:00
Jakub Werner (jakubikan)
0b7cb2a1a8 cleanup 2024-09-16 22:52:26 +02:00
Jakub Werner (jakubikan)
92af01b0cb adding category for MarketCapPairList.py 2024-09-16 22:51:42 +02:00
Jakub Werner (jakubikan)
dc26d0d7ba adding category for MarketCapPairList.py 2024-09-16 22:50:08 +02:00
Matthias
2fe67edab3 chore: update link to okx liquidation formula 2024-09-16 19:05:00 +02:00
Matthias
167e43cbef Merge pull request #10655 from freqtrade/dependabot/pip/develop/types-dda07fe7e8
chore(deps-dev): bump types-requests from 2.32.0.20240907 to 2.32.0.20240914 in the types group
2024-09-16 11:12:07 +02:00
Matthias
d8cb407c25 Merge pull request #10666 from freqtrade/dependabot/pip/develop/pydantic-2.9.1
chore(deps): bump pydantic from 2.9.0 to 2.9.1
2024-09-16 10:56:51 +02:00
Matthias
9452afe3f7 Merge pull request #10660 from freqtrade/dependabot/pip/develop/ruff-0.6.5
chore(deps-dev): bump ruff from 0.6.4 to 0.6.5
2024-09-16 10:21:12 +02:00
Matthias
8dc6d9ce7d Merge pull request #10665 from freqtrade/dependabot/pip/develop/rich-13.8.1
chore(deps): bump rich from 13.8.0 to 13.8.1
2024-09-16 09:45:01 +02:00
Matthias
bf4b8a318d Merge pull request #10661 from freqtrade/dependabot/pip/develop/scikit-learn-1.5.2
chore(deps): bump scikit-learn from 1.5.1 to 1.5.2
2024-09-16 09:44:31 +02:00
Matthias
20f6022050 Merge pull request #10663 from freqtrade/dependabot/pip/develop/ccxt-4.4.3
chore(deps): bump ccxt from 4.3.98 to 4.4.3
2024-09-16 09:33:16 +02:00
dependabot[bot]
65e6c737cd chore(deps): bump pydantic from 2.9.0 to 2.9.1
Bumps [pydantic](https://github.com/pydantic/pydantic) from 2.9.0 to 2.9.1.
- [Release notes](https://github.com/pydantic/pydantic/releases)
- [Changelog](https://github.com/pydantic/pydantic/blob/main/HISTORY.md)
- [Commits](https://github.com/pydantic/pydantic/compare/v2.9.0...v2.9.1)

---
updated-dependencies:
- dependency-name: pydantic
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-16 07:07:06 +00:00
Matthias
6d2572e347 Merge pull request #10662 from freqtrade/dependabot/pip/develop/fastapi-0.114.2
chore(deps): bump fastapi from 0.114.0 to 0.114.2
2024-09-16 09:06:12 +02:00
Matthias
52a35197c7 Merge pull request #10659 from freqtrade/dependabot/pip/develop/pytz-2024.2
chore(deps): bump pytz from 2024.1 to 2024.2
2024-09-16 08:33:08 +02:00
Matthias
2b3a41db3e Merge pull request #10658 from freqtrade/dependabot/pip/develop/urllib3-2.2.3
chore(deps): bump urllib3 from 2.2.2 to 2.2.3
2024-09-16 08:32:52 +02:00
dependabot[bot]
09c1459411 chore(deps-dev): bump ruff from 0.6.4 to 0.6.5
Bumps [ruff](https://github.com/astral-sh/ruff) from 0.6.4 to 0.6.5.
- [Release notes](https://github.com/astral-sh/ruff/releases)
- [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md)
- [Commits](https://github.com/astral-sh/ruff/compare/0.6.4...0.6.5)

---
updated-dependencies:
- dependency-name: ruff
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-16 06:17:40 +00:00
Matthias
98f18b89da Merge pull request #10657 from freqtrade/dependabot/pip/develop/plotly-5.24.1
chore(deps): bump plotly from 5.24.0 to 5.24.1
2024-09-16 08:16:56 +02:00
Matthias
4249db4330 Merge pull request #10656 from freqtrade/dependabot/pip/develop/pytest-baa91b6655
chore(deps-dev): bump pytest from 8.3.2 to 8.3.3 in the pytest group
2024-09-16 08:16:43 +02:00
Matthias
a7f46500ed chore: bump types-requests in pre-commit 2024-09-16 06:38:45 +02:00
dependabot[bot]
c73fa2b0eb chore(deps): bump rich from 13.8.0 to 13.8.1
Bumps [rich](https://github.com/Textualize/rich) from 13.8.0 to 13.8.1.
- [Release notes](https://github.com/Textualize/rich/releases)
- [Changelog](https://github.com/Textualize/rich/blob/master/CHANGELOG.md)
- [Commits](https://github.com/Textualize/rich/compare/v13.8.0...v13.8.1)

---
updated-dependencies:
- dependency-name: rich
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-16 03:18:09 +00:00
dependabot[bot]
db4c4b971a chore(deps): bump ccxt from 4.3.98 to 4.4.3
Bumps [ccxt](https://github.com/ccxt/ccxt) from 4.3.98 to 4.4.3.
- [Release notes](https://github.com/ccxt/ccxt/releases)
- [Changelog](https://github.com/ccxt/ccxt/blob/master/CHANGELOG.md)
- [Commits](https://github.com/ccxt/ccxt/compare/4.3.98...4.4.3)

---
updated-dependencies:
- dependency-name: ccxt
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-16 03:17:58 +00:00
dependabot[bot]
e9ccc98ada chore(deps): bump fastapi from 0.114.0 to 0.114.2
Bumps [fastapi](https://github.com/fastapi/fastapi) from 0.114.0 to 0.114.2.
- [Release notes](https://github.com/fastapi/fastapi/releases)
- [Commits](https://github.com/fastapi/fastapi/compare/0.114.0...0.114.2)

---
updated-dependencies:
- dependency-name: fastapi
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-16 03:17:46 +00:00
dependabot[bot]
11d6ec33b3 chore(deps): bump scikit-learn from 1.5.1 to 1.5.2
Bumps [scikit-learn](https://github.com/scikit-learn/scikit-learn) from 1.5.1 to 1.5.2.
- [Release notes](https://github.com/scikit-learn/scikit-learn/releases)
- [Commits](https://github.com/scikit-learn/scikit-learn/compare/1.5.1...1.5.2)

---
updated-dependencies:
- dependency-name: scikit-learn
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-16 03:17:39 +00:00
dependabot[bot]
c3b6f4ca85 chore(deps): bump pytz from 2024.1 to 2024.2
Bumps [pytz](https://github.com/stub42/pytz) from 2024.1 to 2024.2.
- [Release notes](https://github.com/stub42/pytz/releases)
- [Commits](https://github.com/stub42/pytz/compare/release_2024.1...release_2024.2)

---
updated-dependencies:
- dependency-name: pytz
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-16 03:17:21 +00:00
dependabot[bot]
d37405a307 chore(deps): bump urllib3 from 2.2.2 to 2.2.3
Bumps [urllib3](https://github.com/urllib3/urllib3) from 2.2.2 to 2.2.3.
- [Release notes](https://github.com/urllib3/urllib3/releases)
- [Changelog](https://github.com/urllib3/urllib3/blob/main/CHANGES.rst)
- [Commits](https://github.com/urllib3/urllib3/compare/2.2.2...2.2.3)

---
updated-dependencies:
- dependency-name: urllib3
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-16 03:17:05 +00:00
dependabot[bot]
d7a9841328 chore(deps): bump plotly from 5.24.0 to 5.24.1
Bumps [plotly](https://github.com/plotly/plotly.py) from 5.24.0 to 5.24.1.
- [Release notes](https://github.com/plotly/plotly.py/releases)
- [Changelog](https://github.com/plotly/plotly.py/blob/master/CHANGELOG.md)
- [Commits](https://github.com/plotly/plotly.py/compare/v5.24.0...v5.24.1)

---
updated-dependencies:
- dependency-name: plotly
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-16 03:17:01 +00:00
dependabot[bot]
cf3af42477 chore(deps-dev): bump pytest from 8.3.2 to 8.3.3 in the pytest group
Bumps the pytest group with 1 update: [pytest](https://github.com/pytest-dev/pytest).


Updates `pytest` from 8.3.2 to 8.3.3
- [Release notes](https://github.com/pytest-dev/pytest/releases)
- [Changelog](https://github.com/pytest-dev/pytest/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/pytest-dev/pytest/compare/8.3.2...8.3.3)

---
updated-dependencies:
- dependency-name: pytest
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: pytest
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-16 03:16:39 +00:00
dependabot[bot]
ad8e6e7d67 chore(deps-dev): bump types-requests in the types group
Bumps the types group with 1 update: [types-requests](https://github.com/python/typeshed).


Updates `types-requests` from 2.32.0.20240907 to 2.32.0.20240914
- [Commits](https://github.com/python/typeshed/commits)

---
updated-dependencies:
- dependency-name: types-requests
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: types
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-16 03:15:58 +00:00
Matthias
ae41ab101a docs: remove skip_pair_validation - it's no longer used. 2024-09-15 11:28:57 +02:00
Matthias
f4881e7c6f tests: Adjust tests for removed validate_pairlist functionality 2024-09-15 11:28:57 +02:00
Matthias
94ef4380d4 chore: remove validate_pairs from exchange class
Invalid pairs were filtered out before this was called in most cases.
in cases where it's not - regular pairlist-filtering provides proper warnings.
2024-09-15 11:28:57 +02:00
Matthias
7ebe1b8c14 chore: remove pointless validation
pairs are validated through expand_pairlist.
If they're not in markets, they'll no longer be in the
pairlist once this function function is hit.
2024-09-15 11:02:49 +02:00
Matthias
79020bba28 chore: Remove "prohibitedIn" check
it's only been used for bitrex, which does no longer exist.
apparently this was forgotten when decomissioning bittrex.
2024-09-15 10:49:26 +02:00
Matthias
95c250ebcc chore: add explaining comment 2024-09-15 10:37:28 +02:00
Matthias
bfb14614cc chore: enhance change with comment 2024-09-15 09:48:44 +02:00
Matthias
12299d4810 feat: staticPairlist to warn for invalid pairs
Warnings about invalid pairs were "covered" by the implicit
filtering of `expand_pairlist()`
2024-09-15 09:46:47 +02:00
Matthias
c67a9d4e84 docs: update pairlist creation docs 2024-09-15 09:29:45 +02:00
Matthias
af422c7cd4 Merge pull request #10645 from dxbstyle/develop
added check for Kraken exchange
2024-09-14 10:44:23 +02:00
Matthias
51bdecea53 Improve check to cover more potential api oddities 2024-09-14 10:09:15 +02:00
Matthias
0f505c6d7b Improve check to cover more potential api oddities 2024-09-14 10:04:28 +02:00
Matthias
ae72f10448 Merge pull request #10619 from KingND/pixel/feat/freqai_labels_are_okay_in_lookahead_analysis
feat: include lookahead-analysis table caption when biased_indicator is likely from FreqAI target
2024-09-14 09:51:38 +02:00
Matthias
9f34153c84 chore: update typing for reload function 2024-09-13 19:45:30 +02:00
Matthias
c04cf6c5cb test: Improve test coverage of retry/fail logic 2024-09-13 07:24:08 +02:00
Matthias
5112736385 feat: Simplify reload_markets logic 2024-09-13 07:24:08 +02:00
Matthias
11eaa6d77c test: Add tests for new behavior 2024-09-13 07:24:08 +02:00
Matthias
6024903bde feat: conditionally apply retrier to market-reload
closes #10641
2024-09-13 07:23:58 +02:00
Matthias
e96928588e Merge pull request #10639 from jainanuj94/backtesting
Add entry-only and exit-only filters to --indicator-list in backtesting analysis
2024-09-12 06:43:24 +02:00
Matthias
94e38d4cdd Merge pull request #10646 from freqtrade/update/binance-leverage-tiers
Update Binance Leverage Tiers
2024-09-12 06:36:11 +02:00
xmatthias
d15921b3f2 chore: update pre-commit hooks 2024-09-12 03:12:54 +00:00
Matthias
3c6e2b89a4 Merge pull request #10640 from TheJoeSchr/fix/plot-orderflow-data-missing
fix: orderflow data was missing for plotting
2024-09-11 19:11:55 +02:00
Joe Schr
439658fcf1 fix: remove tests for orderflow data missing of other runmodes 2024-09-11 17:12:35 +02:00
Joe Schr
c9acb1466c fix: orderflow data missing for plotting and other runmodes 2024-09-11 17:12:35 +02:00
Anuj Jain
addd27faf8 Update tests and docs 2024-09-11 15:33:26 +05:30
Matthias
5605bdc7a3 Merge pull request #10644 from iridescentGray/develop
chore: remove redundant method
2024-09-11 06:40:53 +02:00
colorfulgray0
f1df7e9bdc chore: remove redundant method 2024-09-11 11:33:38 +08:00
Anuj Jain
4765656f87 Add filter for entry and exit only parameter 2024-09-10 15:21:56 +05:30
Matthias
c3a00b93c2 Merge pull request #10637 from freqtrade/dependabot/docker/docker/python-3.12.6-slim-bookworm
chore(deps): bump python from 3.11.9-slim-bookworm to 3.11.10-slim-bookworm in /docker
2024-09-10 07:20:36 +02:00
Matthias
e5d2ba7835 Merge pull request #10636 from freqtrade/dependabot/docker/python-3.12.6-slim-bookworm
chore(deps): bump python from 3.12.5-slim-bookworm to 3.12.6-slim-bookworm
2024-09-10 06:53:17 +02:00
Matthias
8c1b119e84 chore: rpi image should remain on 3.11 series 2024-09-10 06:25:17 +02:00
Matthias
593a54e6cb Merge pull request #10635 from freqtrade/update/pre-commit-hooks
Update pre-commit hooks
2024-09-10 06:23:20 +02:00
dependabot[bot]
95fa7083a9 chore(deps): bump python in /docker
Bumps python from 3.11.9-slim-bookworm to 3.12.6-slim-bookworm.

---
updated-dependencies:
- dependency-name: python
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-10 04:07:33 +00:00
dependabot[bot]
98e08df807 chore(deps): bump python
Bumps python from 3.12.5-slim-bookworm to 3.12.6-slim-bookworm.

---
updated-dependencies:
- dependency-name: python
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-10 04:07:26 +00:00
xmatthias
01da36f984 chore: update pre-commit hooks 2024-09-10 03:03:23 +00:00
dxbstyle
ae155c78c2 added check 2024-09-09 21:29:49 +02:00
Matthias
9742216479 chore: run ruff-format on pre-commit 2024-09-09 18:23:07 +02:00
Matthias
f720183281 Merge pull request #10630 from freqtrade/dependabot/pip/develop/sqlalchemy-2.0.34
chore(deps): bump sqlalchemy from 2.0.32 to 2.0.34
2024-09-09 14:54:33 +02:00
Matthias
4bc84acac6 Merge branch 'develop' into dependabot/pip/develop/sqlalchemy-2.0.34 2024-09-09 13:37:43 +02:00
Matthias
14a8086677 Merge pull request #10631 from freqtrade/dependabot/pip/develop/fastapi-0.114.0
chore(deps): bump fastapi from 0.112.2 to 0.114.0
2024-09-09 13:37:09 +02:00
Matthias
686b96222e Merge pull request #10621 from freqtrade/dependabot/pip/develop/types-a674cee9e2
chore(deps-dev): bump the types group with 2 updates
2024-09-09 10:57:28 +02:00
Matthias
0962f37f55 Merge pull request #10632 from freqtrade/dependabot/github_actions/develop/peter-evans/create-pull-request-7
chore(deps): bump peter-evans/create-pull-request from 6 to 7
2024-09-09 10:43:52 +02:00
Matthias
2c17551b27 chore: bump sqlalchemy in mypy additional deps 2024-09-09 10:15:18 +02:00
Matthias
3f5a5e35c2 Merge pull request #10633 from freqtrade/dependabot/github_actions/develop/pypa/gh-action-pypi-publish-1.10.1
chore(deps): bump pypa/gh-action-pypi-publish from 1.10.0 to 1.10.1
2024-09-09 09:56:28 +02:00
Matthias
07c6d37ff0 Merge pull request #10628 from freqtrade/dependabot/pip/develop/ccxt-4.3.98
chore(deps): bump ccxt from 4.3.93 to 4.3.98
2024-09-09 09:12:56 +02:00
Matthias
916ea7acc0 Merge pull request #10627 from freqtrade/dependabot/pip/develop/ruff-0.6.4
chore(deps-dev): bump ruff from 0.6.3 to 0.6.4
2024-09-09 09:12:28 +02:00
Matthias
eae7e865a5 Merge pull request #10626 from freqtrade/dependabot/pip/develop/filelock-3.16.0
chore(deps): bump filelock from 3.15.4 to 3.16.0
2024-09-09 09:10:55 +02:00
Matthias
776e5054aa Merge pull request #10624 from freqtrade/dependabot/pip/develop/torch-2.4.1
chore(deps): bump torch from 2.2.2 to 2.4.1
2024-09-09 09:10:27 +02:00
Matthias
bf2b8b280e Merge pull request #10623 from freqtrade/dependabot/pip/develop/catboost-1.2.7
chore(deps): bump catboost from 1.2.5 to 1.2.7
2024-09-09 09:10:15 +02:00
dependabot[bot]
7aa7027a34 chore(deps): bump fastapi from 0.112.2 to 0.114.0
Bumps [fastapi](https://github.com/fastapi/fastapi) from 0.112.2 to 0.114.0.
- [Release notes](https://github.com/fastapi/fastapi/releases)
- [Commits](https://github.com/fastapi/fastapi/compare/0.112.2...0.114.0)

---
updated-dependencies:
- dependency-name: fastapi
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-09 06:55:07 +00:00
Matthias
d4713b2091 Merge pull request #10622 from freqtrade/dependabot/pip/develop/pydantic-2.9.0
chore(deps): bump pydantic from 2.8.2 to 2.9.0
2024-09-09 08:54:14 +02:00
Matthias
9b97be4aa4 Bump pre-commit dependencies 2024-09-09 06:44:35 +02:00
dependabot[bot]
621be11395 chore(deps): bump pypa/gh-action-pypi-publish from 1.10.0 to 1.10.1
Bumps [pypa/gh-action-pypi-publish](https://github.com/pypa/gh-action-pypi-publish) from 1.10.0 to 1.10.1.
- [Release notes](https://github.com/pypa/gh-action-pypi-publish/releases)
- [Commits](https://github.com/pypa/gh-action-pypi-publish/compare/v1.10.0...v1.10.1)

---
updated-dependencies:
- dependency-name: pypa/gh-action-pypi-publish
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-09 03:59:34 +00:00
dependabot[bot]
05af6df536 chore(deps): bump peter-evans/create-pull-request from 6 to 7
Bumps [peter-evans/create-pull-request](https://github.com/peter-evans/create-pull-request) from 6 to 7.
- [Release notes](https://github.com/peter-evans/create-pull-request/releases)
- [Commits](https://github.com/peter-evans/create-pull-request/compare/v6...v7)

---
updated-dependencies:
- dependency-name: peter-evans/create-pull-request
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-09 03:59:29 +00:00
dependabot[bot]
b7bda2355d chore(deps): bump sqlalchemy from 2.0.32 to 2.0.34
Bumps [sqlalchemy](https://github.com/sqlalchemy/sqlalchemy) from 2.0.32 to 2.0.34.
- [Release notes](https://github.com/sqlalchemy/sqlalchemy/releases)
- [Changelog](https://github.com/sqlalchemy/sqlalchemy/blob/main/CHANGES.rst)
- [Commits](https://github.com/sqlalchemy/sqlalchemy/commits)

---
updated-dependencies:
- dependency-name: sqlalchemy
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-09 03:46:24 +00:00
dependabot[bot]
b0976031ae chore(deps): bump ccxt from 4.3.93 to 4.3.98
Bumps [ccxt](https://github.com/ccxt/ccxt) from 4.3.93 to 4.3.98.
- [Release notes](https://github.com/ccxt/ccxt/releases)
- [Changelog](https://github.com/ccxt/ccxt/blob/master/CHANGELOG.md)
- [Commits](https://github.com/ccxt/ccxt/compare/4.3.93...4.3.98)

---
updated-dependencies:
- dependency-name: ccxt
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-09 03:46:05 +00:00
dependabot[bot]
d099f30a34 chore(deps-dev): bump ruff from 0.6.3 to 0.6.4
Bumps [ruff](https://github.com/astral-sh/ruff) from 0.6.3 to 0.6.4.
- [Release notes](https://github.com/astral-sh/ruff/releases)
- [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md)
- [Commits](https://github.com/astral-sh/ruff/compare/0.6.3...0.6.4)

---
updated-dependencies:
- dependency-name: ruff
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-09 03:45:51 +00:00
dependabot[bot]
699be03bb7 chore(deps): bump filelock from 3.15.4 to 3.16.0
Bumps [filelock](https://github.com/tox-dev/py-filelock) from 3.15.4 to 3.16.0.
- [Release notes](https://github.com/tox-dev/py-filelock/releases)
- [Changelog](https://github.com/tox-dev/filelock/blob/main/docs/changelog.rst)
- [Commits](https://github.com/tox-dev/py-filelock/compare/3.15.4...3.16.0)

---
updated-dependencies:
- dependency-name: filelock
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-09 03:45:29 +00:00
dependabot[bot]
ccf93cfdcd chore(deps): bump torch from 2.2.2 to 2.4.1
Bumps [torch](https://github.com/pytorch/pytorch) from 2.2.2 to 2.4.1.
- [Release notes](https://github.com/pytorch/pytorch/releases)
- [Changelog](https://github.com/pytorch/pytorch/blob/main/RELEASE.md)
- [Commits](https://github.com/pytorch/pytorch/compare/v2.2.2...v2.4.1)

---
updated-dependencies:
- dependency-name: torch
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-09 03:45:14 +00:00
dependabot[bot]
47358a8229 chore(deps): bump catboost from 1.2.5 to 1.2.7
Bumps [catboost](https://github.com/catboost/catboost) from 1.2.5 to 1.2.7.
- [Release notes](https://github.com/catboost/catboost/releases)
- [Changelog](https://github.com/catboost/catboost/blob/master/RELEASE.md)
- [Commits](https://github.com/catboost/catboost/compare/v1.2.5...v1.2.7)

---
updated-dependencies:
- dependency-name: catboost
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-09 03:45:03 +00:00
dependabot[bot]
9856c2cfc4 chore(deps): bump pydantic from 2.8.2 to 2.9.0
Bumps [pydantic](https://github.com/pydantic/pydantic) from 2.8.2 to 2.9.0.
- [Release notes](https://github.com/pydantic/pydantic/releases)
- [Changelog](https://github.com/pydantic/pydantic/blob/main/HISTORY.md)
- [Commits](https://github.com/pydantic/pydantic/compare/v2.8.2...v2.9.0)

---
updated-dependencies:
- dependency-name: pydantic
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-09 03:44:57 +00:00
dependabot[bot]
df9669ba2c chore(deps-dev): bump the types group with 2 updates
Bumps the types group with 2 updates: [types-requests](https://github.com/python/typeshed) and [types-python-dateutil](https://github.com/python/typeshed).


Updates `types-requests` from 2.32.0.20240712 to 2.32.0.20240907
- [Commits](https://github.com/python/typeshed/commits)

Updates `types-python-dateutil` from 2.9.0.20240821 to 2.9.0.20240906
- [Commits](https://github.com/python/typeshed/commits)

---
updated-dependencies:
- dependency-name: types-requests
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: types
- dependency-name: types-python-dateutil
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: types
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-09 03:43:50 +00:00
KingND
f970454cb4 chore: ruff format 2024-09-08 13:57:48 -04:00
KingND
69678574d4 fix: support python 3.9 union type hinting 2024-09-08 12:04:58 -04:00
KingND
53cab5074b chore: refactor and cleanup tests 2024-09-08 12:04:58 -04:00
KingND
c6c65b1799 chore: flake8 2024-09-08 12:04:58 -04:00
KingND
bb9f64027a chore: improve language in docs 2024-09-08 12:04:58 -04:00
KingND
5f52fc4338 feat: update lookahead-analysis doc caveats to include info regarding the false positive on FreqAI targets 2024-09-08 12:04:58 -04:00
KingND
82e30c8519 feat: if a biased_indicator starting with & appears in a lookahead-analysis, caption the table with a note that freqai targets appearing here can be ignored 2024-09-08 12:04:58 -04:00
Matthias
6e2aa6b4b8 tests: remove unused imports 2024-09-08 08:28:40 +02:00
Matthias
a1681cdd63 chore: improve typing 2024-09-08 08:28:40 +02:00
Matthias
611a3ce138 Merge pull request #10485 from jainanuj94/feature/8902
Add exit signals to export in backtesting
2024-09-07 20:12:05 +02:00
Matthias
396d933e34 feat(bybit): add support for unified Accounts 2024-09-07 18:28:56 +02:00
Matthias
0858e0a21e Minor update to docs 2024-09-07 15:29:23 +02:00
Matthias
704e32b0dc feat: properly parse marginmode on startup 2024-09-07 09:28:35 +02:00
Matthias
f95cc960e1 test: tests should consider additional ff-update call 2024-09-07 09:25:20 +02:00
Matthias
1b00f512c1 fix: call order_filled callback for left open trades 2024-09-07 09:24:21 +02:00
Matthias
d9ec66695c docs: update backtesting docs with new row 2024-09-07 08:49:30 +02:00
Matthias
1a2578a4b7 feat: Add margin/Trading mode output to bt-output 2024-09-07 08:47:45 +02:00
Matthias
f714e306da test: add margin and trading mode to test config 2024-09-06 21:15:10 +02:00
Matthias
6a4b641250 feat: implement __str__ for marign and tradingmode enums 2024-09-06 20:58:54 +02:00
Anuj Jain
8d96844312 use BT_DATA_COLUMNS for trade wide indicators 2024-09-06 12:28:02 +05:30
Anuj Jain
b7145debfb handle trade wide indicators 2024-09-05 21:52:09 +05:30
Matthias
990dbb6c06 Merge pull request #10616 from freqtrade/update/binance-leverage-tiers
Update Binance Leverage Tiers
2024-09-05 05:57:37 +02:00
xmatthias
c6a66a8fac chore: update pre-commit hooks 2024-09-05 03:12:48 +00:00
Matthias
65ba67dedc chore: re-add analytics. 2024-09-04 21:08:34 +02:00
Matthias
824db78234 chore: update site_url again 2024-09-04 21:07:16 +02:00
Matthias
2fdf108198 chore: update site_url to work correctly 2024-09-04 21:04:39 +02:00
Matthias
63092d7d1a chore: re-add analytics to docs page 2024-09-04 20:44:18 +02:00
Matthias
964d437c7a chore: type _ft_has 2024-09-04 07:15:17 +02:00
Matthias
d49c556291 chore: rename ft_has setting from ws.enabled to ws_enabled 2024-09-04 06:57:13 +02:00
Matthias
d6b2748293 chore: rename types to ft_types 2024-09-04 06:44:48 +02:00
Matthias
e3a5831d64 refactor: rename exchange.types 2024-09-04 06:42:51 +02:00
Anuj Jain
08d5174d02 update documentation and add default values 2024-09-04 09:56:12 +05:30
Matthias
dacb926db5 Merge pull request #10614 from freqtrade/dependabot/pip/cryptography-43.0.1
chore(deps): bump cryptography from 42.0.8 to 43.0.1
2024-09-04 06:11:59 +02:00
dependabot[bot]
c0e9173c9b chore(deps): bump cryptography from 42.0.8 to 43.0.1
Bumps [cryptography](https://github.com/pyca/cryptography) from 42.0.8 to 43.0.1.
- [Changelog](https://github.com/pyca/cryptography/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/pyca/cryptography/compare/42.0.8...43.0.1)

---
updated-dependencies:
- dependency-name: cryptography
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-04 00:25:37 +00:00
Matthias
f46308bbdb Merge pull request #10612 from freqtrade/update/pre-commit-hooks
Update pre-commit hooks
2024-09-03 06:18:55 +02:00
xmatthias
331db99a4e chore: update pre-commit hooks 2024-09-03 03:02:47 +00:00
Matthias
d84f32f27d Merge pull request #10607 from freqtrade/dependabot/pip/develop/ccxt-4.3.93
chore(deps): bump ccxt from 4.3.88 to 4.3.93
2024-09-02 08:33:44 +02:00
Matthias
ac28a44b92 Merge pull request #10609 from freqtrade/dependabot/github_actions/develop/pypa/gh-action-pypi-publish-1.10.0
chore(deps): bump pypa/gh-action-pypi-publish from 1.9.0 to 1.10.0
2024-09-02 08:13:28 +02:00
Matthias
003a41b920 Merge pull request #10608 from freqtrade/dependabot/pip/develop/python-telegram-bot-21.5
chore(deps): bump python-telegram-bot from 21.4 to 21.5
2024-09-02 07:49:17 +02:00
dependabot[bot]
bc4c693525 chore(deps): bump ccxt from 4.3.88 to 4.3.93
Bumps [ccxt](https://github.com/ccxt/ccxt) from 4.3.88 to 4.3.93.
- [Release notes](https://github.com/ccxt/ccxt/releases)
- [Changelog](https://github.com/ccxt/ccxt/blob/master/CHANGELOG.md)
- [Commits](https://github.com/ccxt/ccxt/compare/4.3.88...4.3.93)

---
updated-dependencies:
- dependency-name: ccxt
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-02 05:08:37 +00:00
Matthias
d4ba837641 chore: mark Bybit as supported exchange 2024-09-02 07:03:04 +02:00
Matthias
4a1592dd92 feat: initialize hyperliquid in spot mode by default 2024-09-02 07:03:04 +02:00
Matthias
ac145a0b65 Merge pull request #10606 from freqtrade/dependabot/pip/develop/websockets-13.0.1
chore(deps): bump websockets from 13.0 to 13.0.1
2024-09-02 06:58:04 +02:00
Matthias
50c00dcae6 Merge pull request #10605 from freqtrade/dependabot/pip/develop/plotly-5.24.0
chore(deps): bump plotly from 5.23.0 to 5.24.0
2024-09-02 06:57:47 +02:00
Matthias
95d964140b Merge pull request #10604 from freqtrade/dependabot/pip/develop/rich-13.8.0
chore(deps): bump rich from 13.7.1 to 13.8.0
2024-09-02 06:57:34 +02:00
Matthias
0a73a7eb52 Merge pull request #10603 from freqtrade/dependabot/pip/develop/ruff-0.6.3
chore(deps-dev): bump ruff from 0.6.2 to 0.6.3
2024-09-02 06:57:25 +02:00
Matthias
0aecb24930 Merge pull request #10602 from freqtrade/dependabot/pip/develop/mkdocs-4a19445461
chore(deps): bump the mkdocs group with 2 updates
2024-09-02 06:57:03 +02:00
dependabot[bot]
904f5303a6 chore(deps): bump pypa/gh-action-pypi-publish from 1.9.0 to 1.10.0
Bumps [pypa/gh-action-pypi-publish](https://github.com/pypa/gh-action-pypi-publish) from 1.9.0 to 1.10.0.
- [Release notes](https://github.com/pypa/gh-action-pypi-publish/releases)
- [Commits](https://github.com/pypa/gh-action-pypi-publish/compare/v1.9.0...v1.10.0)

---
updated-dependencies:
- dependency-name: pypa/gh-action-pypi-publish
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-02 03:05:58 +00:00
dependabot[bot]
585761e931 chore(deps): bump python-telegram-bot from 21.4 to 21.5
Bumps [python-telegram-bot](https://github.com/python-telegram-bot/python-telegram-bot) from 21.4 to 21.5.
- [Release notes](https://github.com/python-telegram-bot/python-telegram-bot/releases)
- [Changelog](https://github.com/python-telegram-bot/python-telegram-bot/blob/master/CHANGES.rst)
- [Commits](https://github.com/python-telegram-bot/python-telegram-bot/compare/v21.4...v21.5)

---
updated-dependencies:
- dependency-name: python-telegram-bot
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-02 03:05:45 +00:00
dependabot[bot]
4d53797cba chore(deps): bump websockets from 13.0 to 13.0.1
Bumps [websockets](https://github.com/python-websockets/websockets) from 13.0 to 13.0.1.
- [Release notes](https://github.com/python-websockets/websockets/releases)
- [Commits](https://github.com/python-websockets/websockets/compare/13.0...13.0.1)

---
updated-dependencies:
- dependency-name: websockets
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-02 03:05:21 +00:00
dependabot[bot]
803677e884 chore(deps): bump plotly from 5.23.0 to 5.24.0
Bumps [plotly](https://github.com/plotly/plotly.py) from 5.23.0 to 5.24.0.
- [Release notes](https://github.com/plotly/plotly.py/releases)
- [Changelog](https://github.com/plotly/plotly.py/blob/master/CHANGELOG.md)
- [Commits](https://github.com/plotly/plotly.py/compare/v5.23.0...v5.24.0)

---
updated-dependencies:
- dependency-name: plotly
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-02 03:05:14 +00:00
dependabot[bot]
17617c58d7 chore(deps): bump rich from 13.7.1 to 13.8.0
Bumps [rich](https://github.com/Textualize/rich) from 13.7.1 to 13.8.0.
- [Release notes](https://github.com/Textualize/rich/releases)
- [Changelog](https://github.com/Textualize/rich/blob/master/CHANGELOG.md)
- [Commits](https://github.com/Textualize/rich/compare/v13.7.1...v13.8.0)

---
updated-dependencies:
- dependency-name: rich
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-02 03:05:10 +00:00
dependabot[bot]
96d03ec13d chore(deps-dev): bump ruff from 0.6.2 to 0.6.3
Bumps [ruff](https://github.com/astral-sh/ruff) from 0.6.2 to 0.6.3.
- [Release notes](https://github.com/astral-sh/ruff/releases)
- [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md)
- [Commits](https://github.com/astral-sh/ruff/compare/0.6.2...0.6.3)

---
updated-dependencies:
- dependency-name: ruff
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-02 03:05:06 +00:00
dependabot[bot]
4726afbebf chore(deps): bump the mkdocs group with 2 updates
Bumps the mkdocs group with 2 updates: [mkdocs](https://github.com/mkdocs/mkdocs) and [mkdocs-material](https://github.com/squidfunk/mkdocs-material).


Updates `mkdocs` from 1.6.0 to 1.6.1
- [Release notes](https://github.com/mkdocs/mkdocs/releases)
- [Commits](https://github.com/mkdocs/mkdocs/compare/1.6.0...1.6.1)

Updates `mkdocs-material` from 9.5.33 to 9.5.34
- [Release notes](https://github.com/squidfunk/mkdocs-material/releases)
- [Changelog](https://github.com/squidfunk/mkdocs-material/blob/master/CHANGELOG)
- [Commits](https://github.com/squidfunk/mkdocs-material/compare/9.5.33...9.5.34)

---
updated-dependencies:
- dependency-name: mkdocs
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: mkdocs
- dependency-name: mkdocs-material
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: mkdocs
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-02 03:04:55 +00:00
Matthias
97c937e554 chore: add Bugbear Ruff checking 2024-09-01 08:32:42 +02:00
Matthias
b25520cf18 chore: improve rhci_progress typing, remove mutable arguments 2024-09-01 08:27:53 +02:00
Matthias
c6b46d75cb chore: fix B018 violation 2024-09-01 08:24:47 +02:00
Matthias
a554352ae0 test: remove unused mutable argument 2024-09-01 08:24:21 +02:00
Matthias
a7fd03f1b7 chore: improve ccxt test 2024-09-01 08:22:58 +02:00
Matthias
ef96116c3f docs: add note about freqUI support of dp.current_whitelist
closes #10600
2024-08-31 20:34:02 +02:00
Matthias
01d10aebca Merge pull request #10599 from freqtrade/new_release
New release 2024.8
2024-08-31 16:03:49 +02:00
Matthias
7edc50865f docs: improve release documentation 2024-08-31 08:34:48 +02:00
Matthias
a881d3fd81 chore: bump version to 2024.9-dev 2024-08-31 08:31:42 +02:00
Matthias
5e9d2323e3 chore: bump version to 2024.8 2024-08-31 08:25:52 +02:00
Matthias
a98b5dd86e Merge branch 'stable' into new_release 2024-08-31 08:25:20 +02:00
Matthias
a250cf7ebe test: Remove unnecessary asyncio decorators 2024-08-29 20:38:57 +02:00
Matthias
1c5ca0f022 chore: improved fix for terminal error 2024-08-29 20:38:25 +02:00
Matthias
ca3dee7b37 chore: add setting to avoid deprecation warning from pytest-asyncio 2024-08-29 20:24:52 +02:00
Matthias
59d47955a0 chore: fix test failure due to terminal error 2024-08-29 20:05:48 +02:00
Matthias
d05ca3db0b fix: handle small terminal width
closes #10572
2024-08-29 07:14:32 +02:00
Matthias
87678eff98 fix: avoid hyperopt-results not showing past terminal height 2024-08-29 07:14:32 +02:00
Matthias
c1f54b14d0 Merge pull request #10594 from freqtrade/update/binance-leverage-tiers
Update Binance Leverage Tiers
2024-08-29 06:32:13 +02:00
xmatthias
4c487d666f chore: update pre-commit hooks 2024-08-29 03:12:45 +00:00
Matthias
655a300acb docs: re-establish search box on develop documentation 2024-08-28 20:27:36 +02:00
Matthias
8d61d66d79 Merge pull request #10573 from freqtrade/dependabot/pip/develop/types-451e0821cf
chore(deps-dev): bump the types group with 2 updates
2024-08-27 20:27:36 +02:00
Matthias
13f391fe4a Merge pull request #10577 from freqtrade/dependabot/pip/develop/websockets-13.0
chore(deps): bump websockets from 12.0 to 13.0
2024-08-27 19:48:21 +02:00
Matthias
660a5d910a chore: bump pre-commit type deps 2024-08-27 19:44:09 +02:00
Matthias
a58c5b372c Merge pull request #10588 from freqtrade/update/pre-commit-hooks
Update pre-commit hooks
2024-08-27 07:26:19 +02:00
xmatthias
ec55fdb8d8 chore: update pre-commit hooks 2024-08-27 03:02:41 +00:00
Matthias
19d670826d Merge pull request #10582 from freqtrade/dependabot/pip/develop/mypy-1.11.2
chore(deps-dev): bump mypy from 1.11.1 to 1.11.2
2024-08-26 11:58:55 +02:00
Matthias
7033bd19fe Merge pull request #10580 from freqtrade/dependabot/pip/develop/aiohttp-3.10.5
chore(deps): bump aiohttp from 3.10.4 to 3.10.5
2024-08-26 10:45:35 +02:00
Matthias
aea75b9e52 Merge pull request #10581 from freqtrade/dependabot/pip/develop/fastapi-0.112.2
chore(deps): bump fastapi from 0.112.1 to 0.112.2
2024-08-26 09:55:02 +02:00
dependabot[bot]
eaf68fe105 chore(deps): bump aiohttp from 3.10.4 to 3.10.5
Bumps [aiohttp](https://github.com/aio-libs/aiohttp) from 3.10.4 to 3.10.5.
- [Release notes](https://github.com/aio-libs/aiohttp/releases)
- [Changelog](https://github.com/aio-libs/aiohttp/blob/master/CHANGES.rst)
- [Commits](https://github.com/aio-libs/aiohttp/compare/v3.10.4...v3.10.5)

---
updated-dependencies:
- dependency-name: aiohttp
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-26 07:29:04 +00:00
Matthias
a27237286c Merge pull request #10578 from freqtrade/dependabot/pip/develop/ccxt-4.3.88
chore(deps): bump ccxt from 4.3.85 to 4.3.88
2024-08-26 09:27:25 +02:00
Matthias
502ca6b612 Merge pull request #10579 from freqtrade/dependabot/pip/develop/scipy-1.14.1
chore(deps): bump scipy from 1.14.0 to 1.14.1
2024-08-26 09:09:24 +02:00
dependabot[bot]
a9451a5413 chore(deps-dev): bump mypy from 1.11.1 to 1.11.2
Bumps [mypy](https://github.com/python/mypy) from 1.11.1 to 1.11.2.
- [Changelog](https://github.com/python/mypy/blob/master/CHANGELOG.md)
- [Commits](https://github.com/python/mypy/compare/v1.11.1...v1.11.2)

---
updated-dependencies:
- dependency-name: mypy
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-26 06:40:25 +00:00
Matthias
ee54047b94 Merge pull request #10576 from freqtrade/dependabot/pip/develop/ruff-0.6.2
chore(deps-dev): bump ruff from 0.6.1 to 0.6.2
2024-08-26 08:39:58 +02:00
Matthias
a2e2c0a41a Merge pull request #10575 from freqtrade/dependabot/pip/develop/mkdocs-d35dd8fcd7
chore(deps): bump mkdocs-material from 9.5.32 to 9.5.33 in the mkdocs group
2024-08-26 08:39:39 +02:00
Matthias
8e7bfba0ab Merge pull request #10574 from freqtrade/dependabot/pip/develop/pytest-c16e4178ec
chore(deps-dev): bump pytest-asyncio from 0.23.8 to 0.24.0 in the pytest group
2024-08-26 08:39:00 +02:00
dependabot[bot]
6d280be081 chore(deps): bump fastapi from 0.112.1 to 0.112.2
Bumps [fastapi](https://github.com/fastapi/fastapi) from 0.112.1 to 0.112.2.
- [Release notes](https://github.com/fastapi/fastapi/releases)
- [Commits](https://github.com/fastapi/fastapi/compare/0.112.1...0.112.2)

---
updated-dependencies:
- dependency-name: fastapi
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-26 04:01:39 +00:00
dependabot[bot]
877c6635e4 chore(deps): bump scipy from 1.14.0 to 1.14.1
Bumps [scipy](https://github.com/scipy/scipy) from 1.14.0 to 1.14.1.
- [Release notes](https://github.com/scipy/scipy/releases)
- [Commits](https://github.com/scipy/scipy/compare/v1.14.0...v1.14.1)

---
updated-dependencies:
- dependency-name: scipy
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-26 04:01:13 +00:00
dependabot[bot]
ca0be181bc chore(deps): bump ccxt from 4.3.85 to 4.3.88
Bumps [ccxt](https://github.com/ccxt/ccxt) from 4.3.85 to 4.3.88.
- [Release notes](https://github.com/ccxt/ccxt/releases)
- [Changelog](https://github.com/ccxt/ccxt/blob/master/CHANGELOG.md)
- [Commits](https://github.com/ccxt/ccxt/compare/4.3.85...4.3.88)

---
updated-dependencies:
- dependency-name: ccxt
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-26 04:00:57 +00:00
dependabot[bot]
ba2cf8015b chore(deps): bump websockets from 12.0 to 13.0
Bumps [websockets](https://github.com/python-websockets/websockets) from 12.0 to 13.0.
- [Release notes](https://github.com/python-websockets/websockets/releases)
- [Commits](https://github.com/python-websockets/websockets/compare/12.0...13.0)

---
updated-dependencies:
- dependency-name: websockets
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-26 04:00:51 +00:00
dependabot[bot]
f1f4ed97ca chore(deps-dev): bump ruff from 0.6.1 to 0.6.2
Bumps [ruff](https://github.com/astral-sh/ruff) from 0.6.1 to 0.6.2.
- [Release notes](https://github.com/astral-sh/ruff/releases)
- [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md)
- [Commits](https://github.com/astral-sh/ruff/compare/0.6.1...0.6.2)

---
updated-dependencies:
- dependency-name: ruff
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-26 04:00:46 +00:00
dependabot[bot]
24785d28e6 chore(deps): bump mkdocs-material in the mkdocs group
Bumps the mkdocs group with 1 update: [mkdocs-material](https://github.com/squidfunk/mkdocs-material).


Updates `mkdocs-material` from 9.5.32 to 9.5.33
- [Release notes](https://github.com/squidfunk/mkdocs-material/releases)
- [Changelog](https://github.com/squidfunk/mkdocs-material/blob/master/CHANGELOG)
- [Commits](https://github.com/squidfunk/mkdocs-material/compare/9.5.32...9.5.33)

---
updated-dependencies:
- dependency-name: mkdocs-material
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: mkdocs
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-26 04:00:35 +00:00
dependabot[bot]
0076205da6 chore(deps-dev): bump pytest-asyncio in the pytest group
Bumps the pytest group with 1 update: [pytest-asyncio](https://github.com/pytest-dev/pytest-asyncio).


Updates `pytest-asyncio` from 0.23.8 to 0.24.0
- [Release notes](https://github.com/pytest-dev/pytest-asyncio/releases)
- [Commits](https://github.com/pytest-dev/pytest-asyncio/compare/v0.23.8...v0.24.0)

---
updated-dependencies:
- dependency-name: pytest-asyncio
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: pytest
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-26 04:00:21 +00:00
dependabot[bot]
6235b50c9d chore(deps-dev): bump the types group with 2 updates
Bumps the types group with 2 updates: [types-cachetools](https://github.com/python/typeshed) and [types-python-dateutil](https://github.com/python/typeshed).


Updates `types-cachetools` from 5.4.0.20240717 to 5.5.0.20240820
- [Commits](https://github.com/python/typeshed/commits)

Updates `types-python-dateutil` from 2.9.0.20240316 to 2.9.0.20240821
- [Commits](https://github.com/python/typeshed/commits)

---
updated-dependencies:
- dependency-name: types-cachetools
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: types
- dependency-name: types-python-dateutil
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: types
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-26 03:59:43 +00:00
Matthias
5cca19bb83 refactor: simplify binance liquidation test setup 2024-08-24 18:07:19 +02:00
Matthias
1b7056853b refactor: move test_liquidation_price_binance to binance test file 2024-08-24 18:06:19 +02:00
Matthias
d1bc519599 docs: Show version alias on versions 2024-08-24 09:33:33 +02:00
Matthias
bcae1dce7b docs: reduce font-weight of version_list 2024-08-24 09:19:07 +02:00
Matthias
e87927564b chore: Improve typing 2024-08-23 18:18:05 +02:00
Matthias
01b7ad4a3f feat: prevent freqAI startup on exchanges without history
closes #10570
2024-08-23 18:16:06 +02:00
Matthias
235d38752c Merge pull request #10566 from freqtrade/update/binance-leverage-tiers
Update Binance Leverage Tiers
2024-08-22 06:33:17 +02:00
xmatthias
fd30edf2bb chore: update pre-commit hooks 2024-08-22 03:13:36 +00:00
Matthias
0a2be142ff Merge pull request #10565 from froggleston/develop
Add clarification for untradeable pairs vs markets
2024-08-21 20:25:12 +02:00
Matthias
33614d8ff0 docs: Improve wording for untradeable pairs 2024-08-21 19:51:24 +02:00
Matthias
3dce1d32f9 Merge pull request #10564 from iridescentGray/develop
chore: fix test param
2024-08-21 18:15:55 +02:00
Robert Davey
4a62199682 Add clarification for untradeable pairs vs markets 2024-08-21 15:26:19 +01:00
colorfulgray0
68be56240d chore: fix test param 2024-08-21 17:46:58 +08:00
Matthias
19ccb27dbd chore: deploy through github internal pipeline 2024-08-20 21:19:26 +02:00
Matthias
a7e2bf071b chore: Move deployment to gh native actions 2024-08-20 20:32:53 +02:00
Matthias
e05a6e976e chore: add Ci for gha deployment 2024-08-20 20:20:25 +02:00
Matthias
c7485e3fd4 chore: add mike to mkdocs config 2024-08-20 20:17:36 +02:00
Matthias
80ad1a68e7 Merge pull request #10554 from freqtrade/dependabot/pip/develop/tables-3.10.1
chore(deps): bump tables from 3.9.1 to 3.10.1
2024-08-20 07:45:55 +02:00
Matthias
f4440d43de chore: increase wait time on ws to avoid flukes 2024-08-20 06:45:09 +02:00
Matthias
201a5c06fe Merge pull request #10553 from freqtrade/dependabot/pip/develop/ruff-0.6.1
chore(deps-dev): bump ruff from 0.5.7 to 0.6.1
2024-08-19 20:37:12 +02:00
Matthias
6bd21b8995 chore: pin tables for python 3.9 2024-08-19 20:01:19 +02:00
Matthias
ce66fbb595 chore: ruff format notebook 2024-08-19 19:59:15 +02:00
Matthias
226ebdd935 Merge pull request #10560 from freqtrade/dependabot/pip/develop/ccxt-4.3.85
chore(deps): bump ccxt from 4.3.84 to 4.3.85
2024-08-19 19:10:41 +02:00
Matthias
fcc400b20d Merge pull request #10559 from freqtrade/dependabot/pip/develop/mkdocs-ffd8a664e0
chore(deps): bump mkdocs-material from 9.5.31 to 9.5.32 in the mkdocs group
2024-08-19 18:54:50 +02:00
Matthias
d2c908b1ab chore: bump ruff pre-commit version 2024-08-19 18:23:53 +02:00
Matthias
976f9b2590 chore: re-format ipynb notebook 2024-08-19 18:23:36 +02:00
dependabot[bot]
4d175a466e chore(deps): bump ccxt from 4.3.84 to 4.3.85
Bumps [ccxt](https://github.com/ccxt/ccxt) from 4.3.84 to 4.3.85.
- [Release notes](https://github.com/ccxt/ccxt/releases)
- [Changelog](https://github.com/ccxt/ccxt/blob/master/CHANGELOG.md)
- [Commits](https://github.com/ccxt/ccxt/compare/4.3.84...4.3.85)

---
updated-dependencies:
- dependency-name: ccxt
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-19 16:20:09 +00:00
Matthias
986ff7d1b1 chore: rename parameter to avoid naming collision 2024-08-19 18:19:42 +02:00
dependabot[bot]
bc719feb5d chore(deps): bump mkdocs-material in the mkdocs group
Bumps the mkdocs group with 1 update: [mkdocs-material](https://github.com/squidfunk/mkdocs-material).


Updates `mkdocs-material` from 9.5.31 to 9.5.32
- [Release notes](https://github.com/squidfunk/mkdocs-material/releases)
- [Changelog](https://github.com/squidfunk/mkdocs-material/blob/master/CHANGELOG)
- [Commits](https://github.com/squidfunk/mkdocs-material/compare/9.5.31...9.5.32)

---
updated-dependencies:
- dependency-name: mkdocs-material
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: mkdocs
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-19 16:19:33 +00:00
Matthias
fe41612738 Merge pull request #10557 from freqtrade/dependabot/pip/develop/fastapi-0.112.1
chore(deps): bump fastapi from 0.112.0 to 0.112.1
2024-08-19 10:31:32 +02:00
Matthias
91f36ae42a Merge pull request #10552 from freqtrade/dependabot/pip/develop/matplotlib-3.9.2
chore(deps): bump matplotlib from 3.9.1.post1 to 3.9.2
2024-08-19 10:02:02 +02:00
Matthias
2750981b64 Merge pull request #10551 from freqtrade/dependabot/pip/develop/ccxt-4.3.84
chore(deps): bump ccxt from 4.3.79 to 4.3.84
2024-08-19 09:45:43 +02:00
jainanuj94
268683f8ea update documentation 2024-08-19 12:50:54 +05:30
Matthias
5737165f37 Merge pull request #10547 from freqtrade/dependabot/pip/develop/cachetools-5.5.0
chore(deps): bump cachetools from 5.4.0 to 5.5.0
2024-08-19 09:16:40 +02:00
dependabot[bot]
a70116ed4d chore(deps): bump fastapi from 0.112.0 to 0.112.1
Bumps [fastapi](https://github.com/fastapi/fastapi) from 0.112.0 to 0.112.1.
- [Release notes](https://github.com/fastapi/fastapi/releases)
- [Commits](https://github.com/fastapi/fastapi/compare/0.112.0...0.112.1)

---
updated-dependencies:
- dependency-name: fastapi
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-19 06:50:46 +00:00
Matthias
31d2296777 Merge pull request #10555 from freqtrade/dependabot/pip/develop/uvicorn-0.30.6
chore(deps): bump uvicorn from 0.30.5 to 0.30.6
2024-08-19 08:49:35 +02:00
dependabot[bot]
b859d7f3a5 chore(deps): bump ccxt from 4.3.79 to 4.3.84
Bumps [ccxt](https://github.com/ccxt/ccxt) from 4.3.79 to 4.3.84.
- [Release notes](https://github.com/ccxt/ccxt/releases)
- [Changelog](https://github.com/ccxt/ccxt/blob/master/CHANGELOG.md)
- [Commits](https://github.com/ccxt/ccxt/compare/4.3.79...4.3.84)

---
updated-dependencies:
- dependency-name: ccxt
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-19 06:00:52 +00:00
dependabot[bot]
75714ae84a chore(deps): bump matplotlib from 3.9.1.post1 to 3.9.2
Bumps [matplotlib](https://github.com/matplotlib/matplotlib) from 3.9.1.post1 to 3.9.2.
- [Release notes](https://github.com/matplotlib/matplotlib/releases)
- [Commits](https://github.com/matplotlib/matplotlib/compare/v3.9.1.post1...v3.9.2)

---
updated-dependencies:
- dependency-name: matplotlib
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-19 06:00:50 +00:00
Matthias
be221c5a3e Merge pull request #10550 from freqtrade/dependabot/pip/develop/tensorboard-2.17.1
chore(deps): bump tensorboard from 2.17.0 to 2.17.1
2024-08-19 08:00:15 +02:00
Matthias
064ff34866 Merge pull request #10549 from freqtrade/dependabot/pip/develop/aiohttp-3.10.4
chore(deps): bump aiohttp from 3.10.3 to 3.10.4
2024-08-19 08:00:03 +02:00
Matthias
9807d6bb2c Merge pull request #10548 from freqtrade/dependabot/pip/develop/markdown-3.7
chore(deps): bump markdown from 3.6 to 3.7
2024-08-19 07:59:54 +02:00
dependabot[bot]
8321425e62 chore(deps): bump uvicorn from 0.30.5 to 0.30.6
Bumps [uvicorn](https://github.com/encode/uvicorn) from 0.30.5 to 0.30.6.
- [Release notes](https://github.com/encode/uvicorn/releases)
- [Changelog](https://github.com/encode/uvicorn/blob/master/CHANGELOG.md)
- [Commits](https://github.com/encode/uvicorn/compare/0.30.5...0.30.6)

---
updated-dependencies:
- dependency-name: uvicorn
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-19 03:49:10 +00:00
dependabot[bot]
ba3223a9a3 chore(deps): bump tables from 3.9.1 to 3.10.1
Bumps [tables](https://github.com/PyTables/PyTables) from 3.9.1 to 3.10.1.
- [Release notes](https://github.com/PyTables/PyTables/releases)
- [Changelog](https://github.com/PyTables/PyTables/blob/master/RELEASE_NOTES.rst)
- [Commits](https://github.com/PyTables/PyTables/compare/v3.9.1...v3.10.1)

---
updated-dependencies:
- dependency-name: tables
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-19 03:49:05 +00:00
dependabot[bot]
a266997b69 chore(deps-dev): bump ruff from 0.5.7 to 0.6.1
Bumps [ruff](https://github.com/astral-sh/ruff) from 0.5.7 to 0.6.1.
- [Release notes](https://github.com/astral-sh/ruff/releases)
- [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md)
- [Commits](https://github.com/astral-sh/ruff/compare/0.5.7...0.6.1)

---
updated-dependencies:
- dependency-name: ruff
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-19 03:49:02 +00:00
dependabot[bot]
314983b139 chore(deps): bump tensorboard from 2.17.0 to 2.17.1
Bumps [tensorboard](https://github.com/tensorflow/tensorboard) from 2.17.0 to 2.17.1.
- [Release notes](https://github.com/tensorflow/tensorboard/releases)
- [Changelog](https://github.com/tensorflow/tensorboard/blob/master/RELEASE.md)
- [Commits](https://github.com/tensorflow/tensorboard/compare/2.17.0...2.17.1)

---
updated-dependencies:
- dependency-name: tensorboard
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-19 03:48:37 +00:00
dependabot[bot]
8896b0ae7c chore(deps): bump aiohttp from 3.10.3 to 3.10.4
Bumps [aiohttp](https://github.com/aio-libs/aiohttp) from 3.10.3 to 3.10.4.
- [Release notes](https://github.com/aio-libs/aiohttp/releases)
- [Changelog](https://github.com/aio-libs/aiohttp/blob/master/CHANGES.rst)
- [Commits](https://github.com/aio-libs/aiohttp/compare/v3.10.3...v3.10.4)

---
updated-dependencies:
- dependency-name: aiohttp
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-19 03:48:31 +00:00
dependabot[bot]
b6aa922c09 chore(deps): bump markdown from 3.6 to 3.7
Bumps [markdown](https://github.com/Python-Markdown/markdown) from 3.6 to 3.7.
- [Release notes](https://github.com/Python-Markdown/markdown/releases)
- [Changelog](https://github.com/Python-Markdown/markdown/blob/master/docs/changelog.md)
- [Commits](https://github.com/Python-Markdown/markdown/compare/3.6...3.7)

---
updated-dependencies:
- dependency-name: markdown
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-19 03:48:17 +00:00
dependabot[bot]
95732f4170 chore(deps): bump cachetools from 5.4.0 to 5.5.0
Bumps [cachetools](https://github.com/tkem/cachetools) from 5.4.0 to 5.5.0.
- [Changelog](https://github.com/tkem/cachetools/blob/master/CHANGELOG.rst)
- [Commits](https://github.com/tkem/cachetools/compare/v5.4.0...v5.5.0)

---
updated-dependencies:
- dependency-name: cachetools
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-19 03:48:14 +00:00
jainanuj94
b6702d1d32 simplify merging logic 2024-08-18 23:22:20 +05:30
jainanuj94
c3679910a4 remove additional argument 2024-08-18 23:14:21 +05:30
Matthias
624dfdf6ac Merge pull request #10546 from stash86/fix-recursive
add startup count from strategy to the analysis
2024-08-18 17:16:56 +02:00
Stefano Ariestasia
83e0cf75c5 add startup count from strategy to the analysis 2024-08-18 23:48:11 +09:00
jainanuj94
19a2e06c0b #000 | Anuj | Merge Dfs for entry and exit in one table 2024-08-18 18:41:04 +05:30
Matthias
7fe23ad8c9 chore: add alias_for to tests 2024-08-18 13:15:10 +02:00
Matthias
fd9ec438dc feat: show name, class name and eventually the replacement alias 2024-08-18 11:36:34 +02:00
Matthias
7cab973cbf feat: get new name for aliased ccxt exchanges 2024-08-18 11:36:06 +02:00
Matthias
9e3e5038f7 Merge pull request #10544 from freqtrade/feat/strategy_star_import
Improved imports for strategy
2024-08-18 09:53:45 +02:00
Matthias
7952712c5e chore: update samples to use doublequotes 2024-08-18 08:44:37 +02:00
Matthias
d754a2e295 feat: improve default imports 2024-08-18 08:38:59 +02:00
Matthias
768b4e5e2b chore: Update formatting of default export sequence 2024-08-18 08:38:11 +02:00
Matthias
b1ae09c003 docs: remove callback examples imports 2024-08-18 08:37:34 +02:00
Matthias
9408e858cd chore: use aligned quoting strategy for templtae 2024-08-17 16:43:46 +02:00
Matthias
0995164110 feat: improve formatting of generated strategy 2024-08-17 16:36:21 +02:00
Matthias
b3a042a63b feat: don't use commented typehints
Imports are correct now
2024-08-17 16:32:38 +02:00
Matthias
c2ac70ff10 feat: update base_strategy to include all imports 2024-08-17 16:30:06 +02:00
Matthias
e7b57d8dee chore: Update import for qtpylib to technical 2024-08-17 16:28:56 +02:00
Matthias
5bc8b02b0f feat: Update imports for sample strategy 2024-08-17 16:28:19 +02:00
Matthias
d6f96b2c53 chore: remove typing imports
These shouldn't be star imported, but should be explicitly imported.
2024-08-17 16:26:21 +02:00
Matthias
6c131b5648 chore: add comment to better explain imports 2024-08-17 16:25:47 +02:00
Matthias
27a4a502d7 docs: Add section explaining strategy imports 2024-08-17 16:25:02 +02:00
Matthias
f0a25ea485 feat: Add __all__ export to strategy's init file 2024-08-17 16:24:59 +02:00
Matthias
4ca6e61726 fix: use dynamic trading_mode for trades loading
closes #10540
2024-08-16 18:27:30 +02:00
Matthias
e26ac6ed00 test: speed up detail test 2024-08-15 20:02:45 +02:00
Matthias
f341edb975 feat: Enable websocket support for okx 2024-08-15 19:54:08 +02:00
Matthias
fdad24aaac feat: add leverage to telegram's /status table 2024-08-15 17:57:00 +02:00
Matthias
3a676f98db test: improve telegram balance test 2024-08-15 17:36:14 +02:00
Matthias
8498cb17e7 test: add explicit test for telegram's short behavior 2024-08-15 17:36:14 +02:00
Matthias
36098f6b78 test: update tests for removal of leverage 2024-08-15 17:36:14 +02:00
Matthias
34667c69d3 chore: remove leverage from /balance endpoint 2024-08-15 17:00:11 +02:00
Matthias
756fef53f9 refactor: improve live positions update 2024-08-15 17:00:08 +02:00
Matthias
2ffe938206 test: update test behavior - wallets has 0, never none 2024-08-15 08:21:25 +02:00
Matthias
d521699305 refactor: type fetch_positions response 2024-08-15 08:08:50 +02:00
Matthias
5ad23405b7 chore: align safevalue_fallback types 2024-08-15 08:06:50 +02:00
Matthias
04cdd807ba chore: improved type ordering 2024-08-15 07:30:21 +02:00
Matthias
646ed50f37 chore: improve typing for balance endpoint 2024-08-15 07:29:19 +02:00
Matthias
1b0ba0fa68 fix: typo in armhf dockerfile causing build to fail 2024-08-15 06:58:43 +02:00
Matthias
21c5c919ea chore: Improve typehinting for hyperopt 2024-08-15 06:50:22 +02:00
Matthias
d9f6f0847d docs: improve readability of hyperopt-loss sample 2024-08-15 06:50:04 +02:00
Matthias
59c897b53e Merge pull request #10534 from freqtrade/update/binance-leverage-tiers
Update Binance Leverage Tiers
2024-08-15 06:21:15 +02:00
xmatthias
77b32e94f1 chore: update pre-commit hooks 2024-08-15 03:12:42 +00:00
Matthias
331159a3d8 fix: ensure handle_onexchange_order works without false warnings
futures were not properly handled in this command.

closes #10533
2024-08-14 21:18:51 +02:00
Matthias
23510c80be fix: don't auto-populate non-existing secret entries 2024-08-14 08:19:58 +02:00
Matthias
ef497beaea Merge pull request #10484 from freqtrade/feat/trades_async
Move trades-refresh to async
2024-08-13 15:18:26 +02:00
Matthias
6ea450a4e1 chore: bitvavo uses DECIMAL_PLACES for amount rounding
closes #9560
2024-08-13 14:30:01 +02:00
Matthias
f64786543d feat: hyperliquid requires different precision modes 2024-08-13 12:21:13 +02:00
Matthias
c60e00c77f Merge pull request #10530 from freqtrade/feat/price_precision_mode
add price_precision_mode
2024-08-13 12:20:53 +02:00
Matthias
7e502beafc Merge pull request #10527 from freqtrade/feat/bt_generator
Backtesting - dynamic pairlist sorting
2024-08-13 09:56:19 +02:00
Matthias
aa6c30ade6 chore: fix line too long issue 2024-08-13 09:50:34 +02:00
Matthias
0b8dfa6878 chore: improved docstring for precision_mode_price 2024-08-13 09:29:36 +02:00
Matthias
d7bee0c9e0 test: update further tests for precision_mode_price 2024-08-13 09:23:43 +02:00
Matthias
350c2241c4 test: adjust test mocks for precision_mode_price 2024-08-13 09:20:40 +02:00
Matthias
cfa591838f feat: use "precision_mode_price" where applicable 2024-08-13 09:13:10 +02:00
Matthias
ac1ac0debe feat: set precision_mode_price when creating trade objects 2024-08-13 09:11:44 +02:00
Matthias
54bc60b08f test: Update test for new to-json field 2024-08-13 09:10:50 +02:00
Matthias
f8de46cea9 feat: Add precision_mode_price column 2024-08-13 09:09:12 +02:00
Matthias
6fc2a604b4 Merge pull request #10529 from freqtrade/feat/list-data-trades
add --trades to list-data command
2024-08-13 08:13:23 +02:00
Matthias
1e410feed1 test: fix missing test arg 2024-08-13 07:33:13 +02:00
Matthias
948e67a2b7 docs: improved wording 2024-08-13 07:14:08 +02:00
Matthias
0f820e4498 chore: Fix 3.9 syntax error 2024-08-13 07:12:57 +02:00
Matthias
c7bc1b10e2 docs: fix messed up formatting 2024-08-13 07:04:51 +02:00
Matthias
ef04324f9d docs: update --help output docs 2024-08-13 07:03:00 +02:00
Matthias
2b86865b9b chore: improve wording in subcommand helptext 2024-08-13 07:02:53 +02:00
Matthias
f009625c1a docs: update list-data documentation 2024-08-13 07:01:23 +02:00
Matthias
a991c76842 feat: add test for test_list_data command 2024-08-13 06:54:35 +02:00
Matthias
d02ea3244a feat: add "trades" switch to list-data command 2024-08-13 06:46:02 +02:00
Matthias
5a9f87ac63 feat: add start_list_trades_data command to output trades data 2024-08-13 06:44:28 +02:00
Matthias
9bfd0cb63c feat: add test for trades_data_minmax 2024-08-13 06:43:26 +02:00
Matthias
3f4c19abbc chore: add test for trades_get_available_data 2024-08-13 06:40:11 +02:00
Matthias
cf26635e3c feat: add trades helper functions
trades_get_available data and trades_data_min_max
2024-08-13 06:36:39 +02:00
Matthias
e540862401 Merge pull request #10528 from freqtrade/update/pre-commit-hooks
Update pre-commit hooks
2024-08-13 06:34:44 +02:00
xmatthias
263be72c11 chore: update pre-commit hooks 2024-08-13 03:02:59 +00:00
Matthias
b63c04df4f chore: update help wording 2024-08-12 20:11:43 +02:00
Matthias
784208dd87 chore: improve variable naming for ohlcv 2024-08-12 19:44:55 +02:00
Matthias
5cb6c234c4 chore: improve naming for refresh_latest_trades 2024-08-12 19:44:45 +02:00
Matthias
7972a023ed fix: oddly wrong fee_cost calculation 2024-08-12 16:45:51 +02:00
Matthias
6cf92c2a90 chore: enhanced aggregation syntax 2024-08-12 16:41:07 +02:00
Matthias
50835c878e chore: add more test coverage 2024-08-12 15:35:31 +02:00
Matthias
b727e5ca1c chore: simplify update code 2024-08-12 14:51:42 +02:00
Matthias
5773d1fd8d docs: Update documentation for new flow 2024-08-12 14:51:42 +02:00
Matthias
530226dbe8 chore: Add "use_detail" to detail test 2024-08-12 14:51:42 +02:00
Matthias
4882a18bf9 chore: add pair_detail test 2024-08-12 14:51:42 +02:00
Matthias
70f3018e67 feat: remove "open_trade_count_start" workaround
Due to the updated pair ordering logic, we can open trades on
different pairs during the same candle without
superating the max_open_trades limit
2024-08-12 14:51:42 +02:00
Matthias
08c10c1f9b chore: exclude right boundary from parallelism test 2024-08-12 14:51:42 +02:00
Matthias
7945eba386 feat: Evaluate pairs with open trades first
This will enable further improved logic for pairs with no open trade.
2024-08-12 14:51:42 +02:00
Matthias
b6f4e124ce chore: improve backtesting test details
ensure all candles used the same pairlist ordering
2024-08-12 14:51:42 +02:00
Matthias
f01e101447 feat: extract backtest iteration into generator 2024-08-12 14:51:42 +02:00
Matthias
980b81f009 chore: Simplify futures backtest 2024-08-12 14:51:37 +02:00
Matthias
10f0522a6b chore: update attribute wording to bt_profit 2024-08-12 10:57:53 +02:00
Matthias
2bc9cdafb2 chore: update attribute wording to bt_trades 2024-08-12 10:57:53 +02:00
Matthias
e643a2ea32 chore: update attribute wording to bt_trades_open 2024-08-12 10:57:53 +02:00
Matthias
b456afa2ac chore: improve backtesting test 2024-08-12 10:20:36 +02:00
Matthias
50b55c3f31 Merge pull request #10522 from freqtrade/dependabot/pip/develop/ccxt-4.3.79
chore(deps): bump ccxt from 4.3.76 to 4.3.79
2024-08-12 09:45:55 +02:00
Matthias
88b754e38c chore: update test to reflect a fix in ccxt 2024-08-12 09:14:36 +02:00
Matthias
b3868a77f1 Merge pull request #10525 from freqtrade/dependabot/pip/develop/orjson-3.10.7
chore(deps): bump orjson from 3.10.6 to 3.10.7
2024-08-12 07:11:24 +02:00
dependabot[bot]
16d5d7b318 chore(deps): bump ccxt from 4.3.76 to 4.3.79
Bumps [ccxt](https://github.com/ccxt/ccxt) from 4.3.76 to 4.3.79.
- [Release notes](https://github.com/ccxt/ccxt/releases)
- [Changelog](https://github.com/ccxt/ccxt/blob/master/CHANGELOG.md)
- [Commits](https://github.com/ccxt/ccxt/compare/4.3.76...4.3.79)

---
updated-dependencies:
- dependency-name: ccxt
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-12 04:43:08 +00:00
Matthias
dbef33fe00 Merge pull request #10524 from freqtrade/dependabot/pip/develop/ruff-0.5.7
chore(deps-dev): bump ruff from 0.5.6 to 0.5.7
2024-08-12 06:42:31 +02:00
Matthias
8c11ea69a0 Merge pull request #10523 from freqtrade/dependabot/pip/develop/aiohttp-3.10.3
chore(deps): bump aiohttp from 3.10.2 to 3.10.3
2024-08-12 06:39:37 +02:00
dependabot[bot]
fa0ee035e9 chore(deps): bump orjson from 3.10.6 to 3.10.7
Bumps [orjson](https://github.com/ijl/orjson) from 3.10.6 to 3.10.7.
- [Release notes](https://github.com/ijl/orjson/releases)
- [Changelog](https://github.com/ijl/orjson/blob/master/CHANGELOG.md)
- [Commits](https://github.com/ijl/orjson/compare/3.10.6...3.10.7)

---
updated-dependencies:
- dependency-name: orjson
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-12 03:26:27 +00:00
dependabot[bot]
010dbf82f3 chore(deps-dev): bump ruff from 0.5.6 to 0.5.7
Bumps [ruff](https://github.com/astral-sh/ruff) from 0.5.6 to 0.5.7.
- [Release notes](https://github.com/astral-sh/ruff/releases)
- [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md)
- [Commits](https://github.com/astral-sh/ruff/compare/0.5.6...0.5.7)

---
updated-dependencies:
- dependency-name: ruff
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-12 03:26:18 +00:00
dependabot[bot]
9a9d27b862 chore(deps): bump aiohttp from 3.10.2 to 3.10.3
Bumps [aiohttp](https://github.com/aio-libs/aiohttp) from 3.10.2 to 3.10.3.
- [Release notes](https://github.com/aio-libs/aiohttp/releases)
- [Changelog](https://github.com/aio-libs/aiohttp/blob/master/CHANGES.rst)
- [Commits](https://github.com/aio-libs/aiohttp/compare/v3.10.2...v3.10.3)

---
updated-dependencies:
- dependency-name: aiohttp
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-12 03:25:59 +00:00
Matthias
0afd3fc5e1 fix: improved handling for corrupt trades files
part of #10515
2024-08-10 20:13:36 +02:00
Matthias
f5ebfcca5a chore: accept that trades dataframes may be empty for some reason
part of #10515
2024-08-10 20:13:30 +02:00
Matthias
6f33115187 Merge pull request #10400 from simwai/feature/stoploss-start-at
Added unlock_at field for protection config
2024-08-10 16:40:09 +02:00
Matthias
58c65ab48c Merge pull request #10519 from freqtrade/dependabot/pip/aiohttp-3.10.2
chore(deps): bump aiohttp from 3.10.1 to 3.10.2
2024-08-10 08:06:29 +02:00
dependabot[bot]
42294ff695 chore(deps): bump aiohttp from 3.10.1 to 3.10.2
Bumps [aiohttp](https://github.com/aio-libs/aiohttp) from 3.10.1 to 3.10.2.
- [Release notes](https://github.com/aio-libs/aiohttp/releases)
- [Changelog](https://github.com/aio-libs/aiohttp/blob/master/CHANGES.rst)
- [Commits](https://github.com/aio-libs/aiohttp/compare/v3.10.1...v3.10.2)

---
updated-dependencies:
- dependency-name: aiohttp
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-09 17:02:14 +00:00
Matthias
ed59f74cb8 chore: move asyncio import to only import when necessary 2024-08-09 06:45:08 +02:00
Matthias
d91dee141d Merge pull request #10500 from freqtrade/dependabot/pip/develop/aiohttp-3.10.1
chore(deps): bump aiohttp from 3.9.5 to 3.10.1
2024-08-09 06:44:19 +02:00
Matthias
2b4438720c chore: call selectorPolicy 2024-08-09 06:16:44 +02:00
Matthias
758e532a6a chore: add todo to uvicorn workaround 2024-08-08 20:25:17 +02:00
Matthias
d4ca6617de chore: set asyncio-policy for windows 2024-08-08 20:25:09 +02:00
Matthias
67fe7f8d3b Merge pull request #10513 from freqtrade/dependabot/pip/develop/matplotlib-3.9.1.post1
chore(deps): bump matplotlib from 3.9.0 to 3.9.1.post1
2024-08-08 18:18:11 +02:00
dependabot[bot]
f6040c5f06 chore(deps): bump aiohttp from 3.9.5 to 3.10.1
Bumps [aiohttp](https://github.com/aio-libs/aiohttp) from 3.9.5 to 3.10.1.
- [Release notes](https://github.com/aio-libs/aiohttp/releases)
- [Changelog](https://github.com/aio-libs/aiohttp/blob/master/CHANGES.rst)
- [Commits](https://github.com/aio-libs/aiohttp/compare/v3.9.5...v3.10.1)

---
updated-dependencies:
- dependency-name: aiohttp
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-08 07:53:56 +00:00
Matthias
324c384fdf Merge pull request #10514 from freqtrade/dependabot/pip/develop/ccxt-4.3.76
chore(deps): bump ccxt from 4.3.73 to 4.3.76
2024-08-08 09:53:00 +02:00
dependabot[bot]
de70ee117c chore(deps): bump matplotlib from 3.9.0 to 3.9.1.post1
Bumps [matplotlib](https://github.com/matplotlib/matplotlib) from 3.9.0 to 3.9.1.post1.
- [Release notes](https://github.com/matplotlib/matplotlib/releases)
- [Commits](https://github.com/matplotlib/matplotlib/compare/v3.9.0...v3.9.1.post1)

---
updated-dependencies:
- dependency-name: matplotlib
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-08 06:37:43 +00:00
dependabot[bot]
85844c8ed4 chore(deps): bump ccxt from 4.3.73 to 4.3.76
Bumps [ccxt](https://github.com/ccxt/ccxt) from 4.3.73 to 4.3.76.
- [Release notes](https://github.com/ccxt/ccxt/releases)
- [Changelog](https://github.com/ccxt/ccxt/blob/master/CHANGELOG.md)
- [Commits](https://github.com/ccxt/ccxt/compare/4.3.73...4.3.76)

---
updated-dependencies:
- dependency-name: ccxt
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-08 06:37:18 +00:00
Matthias
101dc850a2 Update pre-commit sqlalchemy types 2024-08-08 08:36:14 +02:00
Matthias
d88c7c76c6 Merge pull request #10512 from freqtrade/dependabot/pip/develop/time-machine-2.15.0
chore(deps-dev): bump time-machine from 2.14.2 to 2.15.0
2024-08-08 08:26:51 +02:00
Matthias
1fea5f53bd Merge pull request #10511 from freqtrade/dependabot/pip/develop/python-rapidjson-1.20
chore(deps): bump python-rapidjson from 1.19 to 1.20
2024-08-08 08:08:22 +02:00
Matthias
ca13109a20 Merge pull request #10510 from freqtrade/dependabot/pip/develop/sqlalchemy-2.0.32
chore(deps): bump sqlalchemy from 2.0.31 to 2.0.32
2024-08-08 07:19:16 +02:00
Matthias
5650de0627 chore: dependabot shouldn't update major versions 2024-08-08 06:25:52 +02:00
dependabot[bot]
999ee981f7 chore(deps-dev): bump time-machine from 2.14.2 to 2.15.0
Bumps [time-machine](https://github.com/adamchainz/time-machine) from 2.14.2 to 2.15.0.
- [Changelog](https://github.com/adamchainz/time-machine/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/adamchainz/time-machine/compare/2.14.2...2.15.0)

---
updated-dependencies:
- dependency-name: time-machine
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-08 04:22:36 +00:00
dependabot[bot]
ee6e78927f chore(deps): bump python-rapidjson from 1.19 to 1.20
Bumps [python-rapidjson](https://github.com/python-rapidjson/python-rapidjson) from 1.19 to 1.20.
- [Changelog](https://github.com/python-rapidjson/python-rapidjson/blob/master/CHANGES.rst)
- [Commits](https://github.com/python-rapidjson/python-rapidjson/compare/v1.19...v1.20)

---
updated-dependencies:
- dependency-name: python-rapidjson
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-08 04:22:22 +00:00
dependabot[bot]
9dd9ae7a2f chore(deps): bump sqlalchemy from 2.0.31 to 2.0.32
Bumps [sqlalchemy](https://github.com/sqlalchemy/sqlalchemy) from 2.0.31 to 2.0.32.
- [Release notes](https://github.com/sqlalchemy/sqlalchemy/releases)
- [Changelog](https://github.com/sqlalchemy/sqlalchemy/blob/main/CHANGES.rst)
- [Commits](https://github.com/sqlalchemy/sqlalchemy/commits)

---
updated-dependencies:
- dependency-name: sqlalchemy
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-08 04:22:06 +00:00
Matthias
cbd178dab2 chore: bump armhf dockerfile to 3.11 2024-08-08 06:20:58 +02:00
Matthias
e34a28ee53 chore: dependabot should monitor /docker, too 2024-08-08 06:18:31 +02:00
Matthias
ffcc55b42b Merge pull request #10508 from freqtrade/dependabot/docker/python-3.12.5-slim-bookworm
chore(deps): bump python from 3.12.4-slim-bookworm to 3.12.5-slim-bookworm
2024-08-08 06:09:43 +02:00
Matthias
72028a9a2e Merge pull request #10507 from freqtrade/update/binance-leverage-tiers
Update Binance Leverage Tiers
2024-08-08 06:09:28 +02:00
dependabot[bot]
d453aa849a chore(deps): bump python
Bumps python from 3.12.4-slim-bookworm to 3.12.5-slim-bookworm.

---
updated-dependencies:
- dependency-name: python
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-08 03:26:08 +00:00
xmatthias
9d0cd961b4 chore: update pre-commit hooks 2024-08-08 03:12:08 +00:00
Matthias
900922760a feat: add json schema validation docs 2024-08-07 20:20:08 +02:00
Matthias
af462fa086 Bump version to 2024.7.1 2024-08-07 18:22:07 +02:00
Matthias
bc728d3a31 chore: Downgrade cryptography for RPI
https://github.com/piwheels/packages/issues/464
2024-08-07 18:21:43 +02:00
jainanuj94
8085e24dcd update tests 2024-08-06 20:00:05 +05:30
jainanuj94
d351ed0173 refactor: change analyse_on variable name to date_col 2024-08-06 15:16:30 +05:30
jainanuj94
3ebc5b136c review comments and update test for exit signals 2024-08-06 12:55:48 +05:30
Matthias
a1d02ca689 Merge pull request #10505 from freqtrade/update/pre-commit-hooks
Update pre-commit hooks
2024-08-06 06:23:30 +02:00
xmatthias
95546e0a7b chore: update pre-commit hooks 2024-08-06 03:02:53 +00:00
jainanuj94
103991746b chore: type safety and refactoring 2024-08-05 23:57:24 +05:30
jainanuj94
7f0e5dd335 Refactor and add documentation 2024-08-05 23:19:38 +05:30
Matthias
fa2fc63b7c Merge pull request #10498 from freqtrade/dependabot/pip/develop/pyjwt-2.9.0
chore(deps): bump pyjwt from 2.8.0 to 2.9.0
2024-08-05 13:35:16 +02:00
Matthias
4ad915761b Merge pull request #10495 from freqtrade/dependabot/pip/develop/ccxt-4.3.73
chore(deps): bump ccxt from 4.3.68 to 4.3.73
2024-08-05 12:02:22 +02:00
Matthias
d6a29c1ad5 Merge pull request #10501 from freqtrade/dependabot/pip/develop/mypy-1.11.1
chore(deps-dev): bump mypy from 1.11.0 to 1.11.1
2024-08-05 11:44:23 +02:00
dependabot[bot]
3d439c8c01 chore(deps): bump pyjwt from 2.8.0 to 2.9.0
Bumps [pyjwt](https://github.com/jpadilla/pyjwt) from 2.8.0 to 2.9.0.
- [Release notes](https://github.com/jpadilla/pyjwt/releases)
- [Changelog](https://github.com/jpadilla/pyjwt/blob/master/CHANGELOG.rst)
- [Commits](https://github.com/jpadilla/pyjwt/compare/2.8.0...2.9.0)

---
updated-dependencies:
- dependency-name: pyjwt
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-05 08:58:46 +00:00
Matthias
af00374cb0 Merge pull request #10494 from freqtrade/dependabot/pip/develop/uvicorn-0.30.5
chore(deps): bump uvicorn from 0.30.3 to 0.30.5
2024-08-05 10:57:56 +02:00
Matthias
0bb46aaef4 Merge pull request #10489 from freqtrade/dependabot/pip/develop/mkdocs-fecff3054d
chore(deps): bump mkdocs-material from 9.5.30 to 9.5.31 in the mkdocs group
2024-08-05 10:29:46 +02:00
Matthias
00377e91b4 Merge pull request #10496 from freqtrade/dependabot/pip/develop/tqdm-4.66.5
chore(deps): bump tqdm from 4.66.4 to 4.66.5
2024-08-05 09:33:01 +02:00
dependabot[bot]
477448114a chore(deps-dev): bump mypy from 1.11.0 to 1.11.1
Bumps [mypy](https://github.com/python/mypy) from 1.11.0 to 1.11.1.
- [Changelog](https://github.com/python/mypy/blob/master/CHANGELOG.md)
- [Commits](https://github.com/python/mypy/compare/v1.11...v1.11.1)

---
updated-dependencies:
- dependency-name: mypy
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-05 06:34:01 +00:00
dependabot[bot]
91da1c3f8b chore(deps): bump uvicorn from 0.30.3 to 0.30.5
Bumps [uvicorn](https://github.com/encode/uvicorn) from 0.30.3 to 0.30.5.
- [Release notes](https://github.com/encode/uvicorn/releases)
- [Changelog](https://github.com/encode/uvicorn/blob/master/CHANGELOG.md)
- [Commits](https://github.com/encode/uvicorn/compare/0.30.3...0.30.5)

---
updated-dependencies:
- dependency-name: uvicorn
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-05 06:33:26 +00:00
Matthias
eddf99ddd0 Merge pull request #10492 from freqtrade/dependabot/pip/develop/ruff-0.5.6
chore(deps-dev): bump ruff from 0.5.5 to 0.5.6
2024-08-05 08:33:23 +02:00
Matthias
f27580b5ae Merge pull request #10493 from freqtrade/dependabot/pip/develop/technical-1.4.4
chore(deps): bump technical from 1.4.3 to 1.4.4
2024-08-05 08:33:15 +02:00
Matthias
b2d35751b4 Merge pull request #10490 from freqtrade/dependabot/pip/develop/fastapi-0.112.0
chore(deps): bump fastapi from 0.111.1 to 0.112.0
2024-08-05 08:32:31 +02:00
Matthias
18df06a7ce Merge pull request #10487 from froggleston/develop
Add rich table width if jupyter in modules
2024-08-05 06:53:43 +02:00
dependabot[bot]
0bee3c9db0 chore(deps): bump tqdm from 4.66.4 to 4.66.5
Bumps [tqdm](https://github.com/tqdm/tqdm) from 4.66.4 to 4.66.5.
- [Release notes](https://github.com/tqdm/tqdm/releases)
- [Commits](https://github.com/tqdm/tqdm/compare/v4.66.4...v4.66.5)

---
updated-dependencies:
- dependency-name: tqdm
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-05 03:27:30 +00:00
dependabot[bot]
e3ba28d767 chore(deps): bump ccxt from 4.3.68 to 4.3.73
Bumps [ccxt](https://github.com/ccxt/ccxt) from 4.3.68 to 4.3.73.
- [Release notes](https://github.com/ccxt/ccxt/releases)
- [Changelog](https://github.com/ccxt/ccxt/blob/master/CHANGELOG.md)
- [Commits](https://github.com/ccxt/ccxt/compare/4.3.68...4.3.73)

---
updated-dependencies:
- dependency-name: ccxt
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-05 03:27:23 +00:00
dependabot[bot]
1f9c2cd181 chore(deps): bump technical from 1.4.3 to 1.4.4
Bumps [technical](https://github.com/freqtrade/technical) from 1.4.3 to 1.4.4.
- [Release notes](https://github.com/freqtrade/technical/releases)
- [Commits](https://github.com/freqtrade/technical/compare/1.4.3...1.4.4)

---
updated-dependencies:
- dependency-name: technical
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-05 03:27:08 +00:00
dependabot[bot]
ea2b12a548 chore(deps-dev): bump ruff from 0.5.5 to 0.5.6
Bumps [ruff](https://github.com/astral-sh/ruff) from 0.5.5 to 0.5.6.
- [Release notes](https://github.com/astral-sh/ruff/releases)
- [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md)
- [Commits](https://github.com/astral-sh/ruff/compare/0.5.5...0.5.6)

---
updated-dependencies:
- dependency-name: ruff
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-05 03:27:05 +00:00
dependabot[bot]
c9f4db2a4f chore(deps): bump fastapi from 0.111.1 to 0.112.0
Bumps [fastapi](https://github.com/fastapi/fastapi) from 0.111.1 to 0.112.0.
- [Release notes](https://github.com/fastapi/fastapi/releases)
- [Commits](https://github.com/fastapi/fastapi/compare/0.111.1...0.112.0)

---
updated-dependencies:
- dependency-name: fastapi
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-05 03:26:45 +00:00
dependabot[bot]
1e5154c901 chore(deps): bump mkdocs-material in the mkdocs group
Bumps the mkdocs group with 1 update: [mkdocs-material](https://github.com/squidfunk/mkdocs-material).


Updates `mkdocs-material` from 9.5.30 to 9.5.31
- [Release notes](https://github.com/squidfunk/mkdocs-material/releases)
- [Changelog](https://github.com/squidfunk/mkdocs-material/blob/master/CHANGELOG)
- [Commits](https://github.com/squidfunk/mkdocs-material/compare/9.5.30...9.5.31)

---
updated-dependencies:
- dependency-name: mkdocs-material
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: mkdocs
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-05 03:26:37 +00:00
froggleston
17dc41279c Ruff formatting 2024-08-04 21:59:07 +01:00
froggleston
cb4747aed2 Add rich table width if jupyter in modules 2024-08-04 21:43:00 +01:00
Matthias
ce8d03ddce chore: improve comment as to why matplotlib is pinned in the first place 2024-08-04 19:55:40 +02:00
Matthias
366c7e2b91 fix: pin matplotlib to 3.9.0 to fix windows wheels
caused by the partial yank of 3.9.1 (only the windows wheels have been deleted).

Ref: https://github.com/matplotlib/matplotlib/issues/28551
2024-08-04 19:54:51 +02:00
Matthias
6c5fb5e22b chore: add_config_files to config_schema 2024-08-04 09:03:32 +02:00
Matthias
4854bdd02f chore: Add log_responses to config schema 2024-08-04 08:29:15 +02:00
Matthias
d7ecdc9b07 chore: Downgrade cryptography for RPI
https://github.com/piwheels/packages/issues/464
2024-08-03 18:31:39 +02:00
Matthias
c8d30ae801 chore: fix oneline exchange-list output 2024-08-03 18:30:21 +02:00
Matthias
9eebe82b34 chore: fix api-server tests 2024-08-03 18:29:16 +02:00
Matthias
b3915ff8fd chore: use classname to show exchanges 2024-08-03 18:25:31 +02:00
Matthias
805c946b33 feat: improve structure of list_exchange endpoints 2024-08-03 18:24:52 +02:00
Matthias
8bc1949466 docs: update link to technical documentation 2024-08-03 16:41:22 +02:00
Matthias
a6689b1035 chore: Remove unnecessary, duplicate mkdocs install 2024-08-03 13:29:54 +02:00
Matthias
f63910d355 chore: improve wording for cooldown_period 2024-08-02 20:15:46 +02:00
Matthias
98c8521057 chore: fix minor gotcha 2024-08-02 20:13:59 +02:00
Matthias
57139295b5 tests: Add unlock_at test 2024-08-02 20:12:44 +02:00
Matthias
79d4dc1646 Merge branch 'develop' into feature/stoploss-start-at 2024-08-02 19:51:28 +02:00
Matthias
1760624954 test: Test "invalid date format" 2024-08-02 19:48:43 +02:00
jainanuj94
ecf9c173c4 Add test for backtesitng-analysis 2024-08-02 20:46:19 +05:30
jainanuj94
b0e863dbbb Introduce --exit-signals flag to backtesting-analysis command 2024-08-02 20:09:56 +05:30
jainanuj94
8f8859a5f5 Initial commit - create a different file for signals 2024-08-02 15:54:03 +05:30
Matthias
9429657a2b chore: make Hyperliquid class actually usable 2024-08-02 07:28:09 +02:00
Matthias
2b0b1e23eb chore: enhance error message on ohlcv error 2024-08-02 07:26:54 +02:00
Matthias
dd55baf148 chore: support snake_case for api keys 2024-08-02 07:26:54 +02:00
Matthias
4542157192 Merge pull request #10470 from freqtrade/dependabot/pip/develop/torch-2.4.0
chore(deps): bump torch from 2.2.2 to 2.4.0
2024-08-02 06:56:13 +02:00
Matthias
9e47172d69 chore: Reduce test flakyness of ws test 2024-08-01 20:37:40 +02:00
jainanuj94
2ad921f99e Merge remote-tracking branch 'upstream/develop' into develop 2024-08-01 23:55:01 +05:30
Matthias
a840969512 feat: move trades-refresh to async 2024-08-01 19:58:17 +02:00
Matthias
67fdfdf584 chore: Update schema file 2024-08-01 19:39:06 +02:00
Matthias
abef8e376c feat: add $schema to config examples 2024-08-01 07:03:34 +02:00
Matthias
8a85077e70 chore: add download_trades config key, reorder some keys 2024-08-01 07:02:47 +02:00
Matthias
b3ac296cac chore: Improve schema wording 2024-08-01 06:58:17 +02:00
Matthias
b2db733c83 Merge pull request #10482 from freqtrade/maint/remove_pip_24_lock
chore: Remove pip pin from ci
2024-08-01 06:43:31 +02:00
Matthias
92dfcf3b6d Merge pull request #10483 from freqtrade/update/binance-leverage-tiers
Update Binance Leverage Tiers
2024-08-01 06:43:19 +02:00
xmatthias
af554fc3f7 chore: update pre-commit hooks 2024-08-01 03:15:58 +00:00
Matthias
02621eee74 chore: remove pip version lock from instal scripts 2024-07-31 20:39:21 +02:00
Matthias
8105f51603 chore: remove pip lock from Dockerfiles 2024-07-31 20:39:12 +02:00
Matthias
c40ac27d71 chore: Remove pip pin from ci 2024-07-31 20:36:48 +02:00
Matthias
d33c930f26 Merge pull request #10454 from jainanuj94/feature/10348
Add  percent change pairlist
2024-07-30 20:58:27 +02:00
Matthias
eb0fc0fc80 docs: Fix minor typo 2024-07-30 20:29:21 +02:00
Matthias
a6563543a3 Merge pull request #10477 from freqtrade/update/pre-commit-hooks
Update pre-commit hooks
2024-07-30 06:10:05 +02:00
xmatthias
40b20c5595 chore: update pre-commit hooks 2024-07-30 03:02:51 +00:00
Matthias
1ebbfffd2a chore: hyperliquid doesn't have historic ohlcv 2024-07-29 19:42:28 +02:00
Matthias
8954857481 Merge pull request #10464 from freqtrade/new_release
New release 2024.7
2024-07-29 19:32:28 +02:00
Matthias
24d3e09618 Merge pull request #10467 from freqtrade/dependabot/pip/develop/pre-commit-3.8.0
chore(deps-dev): bump pre-commit from 3.7.1 to 3.8.0
2024-07-29 14:24:09 +02:00
Matthias
d92ddc4c7a Merge pull request #10471 from freqtrade/dependabot/pip/develop/pymdown-extensions-10.9
chore(deps): bump pymdown-extensions from 10.8.1 to 10.9
2024-07-29 11:38:11 +02:00
dependabot[bot]
c8b7580830 chore(deps-dev): bump pre-commit from 3.7.1 to 3.8.0
Bumps [pre-commit](https://github.com/pre-commit/pre-commit) from 3.7.1 to 3.8.0.
- [Release notes](https://github.com/pre-commit/pre-commit/releases)
- [Changelog](https://github.com/pre-commit/pre-commit/blob/main/CHANGELOG.md)
- [Commits](https://github.com/pre-commit/pre-commit/compare/v3.7.1...v3.8.0)

---
updated-dependencies:
- dependency-name: pre-commit
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-07-29 08:27:01 +00:00
Matthias
a9d0c052bc Merge pull request #10468 from freqtrade/dependabot/pip/develop/ruff-0.5.5
chore(deps-dev): bump ruff from 0.5.4 to 0.5.5
2024-07-29 10:26:15 +02:00
Matthias
ad0b349a3f Merge pull request #10474 from freqtrade/dependabot/pip/develop/lightgbm-4.5.0
chore(deps): bump lightgbm from 4.4.0 to 4.5.0
2024-07-29 08:50:36 +02:00
Matthias
9da51a8d85 Merge pull request #10473 from freqtrade/dependabot/pip/develop/plotly-5.23.0
chore(deps): bump plotly from 5.22.0 to 5.23.0
2024-07-29 08:50:23 +02:00
Matthias
814f21a50e Merge pull request #10472 from freqtrade/dependabot/pip/develop/python-rapidjson-1.19
chore(deps): bump python-rapidjson from 1.18 to 1.19
2024-07-29 08:49:54 +02:00
Matthias
092669fb9d Merge pull request #10469 from freqtrade/dependabot/pip/develop/ccxt-4.3.68
chore(deps): bump ccxt from 4.3.65 to 4.3.68
2024-07-29 07:45:22 +02:00
dependabot[bot]
3789e1339b chore(deps): bump pymdown-extensions from 10.8.1 to 10.9
Bumps [pymdown-extensions](https://github.com/facelessuser/pymdown-extensions) from 10.8.1 to 10.9.
- [Release notes](https://github.com/facelessuser/pymdown-extensions/releases)
- [Commits](https://github.com/facelessuser/pymdown-extensions/compare/10.8.1...10.9)

---
updated-dependencies:
- dependency-name: pymdown-extensions
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-07-29 05:32:28 +00:00
dependabot[bot]
a1490d07b4 chore(deps-dev): bump ruff from 0.5.4 to 0.5.5
Bumps [ruff](https://github.com/astral-sh/ruff) from 0.5.4 to 0.5.5.
- [Release notes](https://github.com/astral-sh/ruff/releases)
- [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md)
- [Commits](https://github.com/astral-sh/ruff/compare/0.5.4...0.5.5)

---
updated-dependencies:
- dependency-name: ruff
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-07-29 05:32:28 +00:00
Matthias
08144382b8 Merge pull request #10466 from freqtrade/dependabot/pip/develop/mkdocs-1c45c0a9b7
chore(deps): bump mkdocs-material from 9.5.29 to 9.5.30 in the mkdocs group
2024-07-29 07:31:51 +02:00
Matthias
cb90e1388f Merge pull request #10465 from freqtrade/dependabot/pip/develop/pytest-d2133643f0
chore(deps-dev): bump pytest from 8.3.1 to 8.3.2 in the pytest group
2024-07-29 07:31:37 +02:00
Matthias
5e1038dc67 chore: Fix torch version bump 2024-07-29 07:00:17 +02:00
Matthias
b117f085ce chore: Bump version to 2024.7 2024-07-29 06:22:00 +02:00
Matthias
c7dc908aa7 Merge branch 'stable' into new_release 2024-07-29 06:21:32 +02:00
dependabot[bot]
5e852ebb5d chore(deps): bump lightgbm from 4.4.0 to 4.5.0
Bumps [lightgbm](https://github.com/microsoft/LightGBM) from 4.4.0 to 4.5.0.
- [Release notes](https://github.com/microsoft/LightGBM/releases)
- [Commits](https://github.com/microsoft/LightGBM/compare/v4.4.0...v4.5.0)

---
updated-dependencies:
- dependency-name: lightgbm
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-07-29 03:08:24 +00:00
dependabot[bot]
097786c62d chore(deps): bump plotly from 5.22.0 to 5.23.0
Bumps [plotly](https://github.com/plotly/plotly.py) from 5.22.0 to 5.23.0.
- [Release notes](https://github.com/plotly/plotly.py/releases)
- [Changelog](https://github.com/plotly/plotly.py/blob/master/CHANGELOG.md)
- [Commits](https://github.com/plotly/plotly.py/compare/v5.22.0...v5.23.0)

---
updated-dependencies:
- dependency-name: plotly
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-07-29 03:08:18 +00:00
dependabot[bot]
baeced32c3 chore(deps): bump python-rapidjson from 1.18 to 1.19
Bumps [python-rapidjson](https://github.com/python-rapidjson/python-rapidjson) from 1.18 to 1.19.
- [Changelog](https://github.com/python-rapidjson/python-rapidjson/blob/master/CHANGES.rst)
- [Commits](https://github.com/python-rapidjson/python-rapidjson/compare/v1.18...v1.19)

---
updated-dependencies:
- dependency-name: python-rapidjson
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-07-29 03:08:10 +00:00
dependabot[bot]
2f4e4343c2 chore(deps): bump torch from 2.2.2 to 2.4.0
Bumps [torch](https://github.com/pytorch/pytorch) from 2.2.2 to 2.4.0.
- [Release notes](https://github.com/pytorch/pytorch/releases)
- [Changelog](https://github.com/pytorch/pytorch/blob/main/RELEASE.md)
- [Commits](https://github.com/pytorch/pytorch/compare/v2.2.2...v2.4.0)

---
updated-dependencies:
- dependency-name: torch
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-07-29 03:07:44 +00:00
dependabot[bot]
9fd6d7318e chore(deps): bump ccxt from 4.3.65 to 4.3.68
Bumps [ccxt](https://github.com/ccxt/ccxt) from 4.3.65 to 4.3.68.
- [Release notes](https://github.com/ccxt/ccxt/releases)
- [Changelog](https://github.com/ccxt/ccxt/blob/master/CHANGELOG.md)
- [Commits](https://github.com/ccxt/ccxt/compare/4.3.65...4.3.68)

---
updated-dependencies:
- dependency-name: ccxt
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-07-29 03:07:22 +00:00
dependabot[bot]
fd2be958ba chore(deps): bump mkdocs-material in the mkdocs group
Bumps the mkdocs group with 1 update: [mkdocs-material](https://github.com/squidfunk/mkdocs-material).


Updates `mkdocs-material` from 9.5.29 to 9.5.30
- [Release notes](https://github.com/squidfunk/mkdocs-material/releases)
- [Changelog](https://github.com/squidfunk/mkdocs-material/blob/master/CHANGELOG)
- [Commits](https://github.com/squidfunk/mkdocs-material/compare/9.5.29...9.5.30)

---
updated-dependencies:
- dependency-name: mkdocs-material
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: mkdocs
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-07-29 03:06:12 +00:00
dependabot[bot]
719889b27a chore(deps-dev): bump pytest from 8.3.1 to 8.3.2 in the pytest group
Bumps the pytest group with 1 update: [pytest](https://github.com/pytest-dev/pytest).


Updates `pytest` from 8.3.1 to 8.3.2
- [Release notes](https://github.com/pytest-dev/pytest/releases)
- [Changelog](https://github.com/pytest-dev/pytest/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/pytest-dev/pytest/compare/8.3.1...8.3.2)

---
updated-dependencies:
- dependency-name: pytest
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: pytest
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-07-29 03:05:45 +00:00
Matthias
faaa1050da chore: Bump dev version to 2024.8 2024-07-28 20:10:30 +02:00
jainanuj94
27aed5cd7e Update schema.json 2024-07-28 22:34:34 +05:30
jainanuj94
aa327643f5 Merge remote-tracking branch 'upstream/develop' into feature/10348 2024-07-28 22:26:58 +05:30
jainanuj94
3a481df45d Merge remote-tracking branch 'upstream/develop' into develop 2024-07-28 22:26:00 +05:30
jainanuj94
ac1e405c34 Update documentation and fix doc test 2024-07-28 21:10:20 +05:30
Matthias
df7d5d2cb1 Merge pull request #10463 from freqtrade/feat/conf_schema
Add Config schema with description
2024-07-28 16:27:08 +02:00
Matthias
2d90cf48b3 run a check for uptodate json schema 2024-07-28 15:34:19 +02:00
Matthias
2fd6c962d2 chore: improve extract json script 2024-07-28 15:33:21 +02:00
Matthias
1226593f3b chore: Add initial version of json schema 2024-07-28 15:32:01 +02:00
Matthias
25569686aa chore: Update Path to write json schema to 2024-07-28 15:30:06 +02:00
Matthias
61b573bb89 feat: Add "strategy override" hints 2024-07-28 08:25:35 +02:00
jainanuj94
4932473b3f Add documentation 2024-07-27 23:41:32 +05:30
Matthias
a368c00302 feat: add freqAI remaining parameters 2024-07-27 16:58:10 +02:00
Matthias
06bbcf4c9f feat: add some freqAI parameter descriptions 2024-07-27 16:57:56 +02:00
Matthias
edf66deb96 feat: add RL parameter descriptions 2024-07-27 16:57:47 +02:00
Matthias
075f6b9412 feat: more config schema descriptions - emc 2024-07-27 16:56:06 +02:00
Matthias
05b202caa6 feat: more config schema descriptions (exchange) 2024-07-27 16:56:06 +02:00
Matthias
aaac080dfb feat: more config schema descriptions 2024-07-27 16:56:06 +02:00
Matthias
14a20c703b feat: more config schema descriptions 2024-07-27 16:56:06 +02:00
Matthias
6cfba2c225 feat: more config schema descriptions (api_server) 2024-07-27 16:56:06 +02:00
Matthias
29e9dd44e9 feat: more config schema descriptions (telegram) 2024-07-27 16:56:06 +02:00
Matthias
00729a87ff chore: remove validation for deprecated settings 2024-07-27 16:56:06 +02:00
Matthias
ca47e3489c feat: more config schema descriptions 2024-07-27 16:56:06 +02:00
Matthias
abde1a1c39 feat: more config schema descriptions 2024-07-27 16:56:06 +02:00
Matthias
d42b5b7733 feat: Add more descriptions to config schema 2024-07-27 16:56:06 +02:00
Matthias
4e51140506 feat: Add initial descriptions for config schema 2024-07-27 16:56:06 +02:00
Matthias
08ed99d20c feat: Add build-helpers json schema extract script 2024-07-27 16:56:06 +02:00
Matthias
206baf7d80 chore: add a bit of typehinting 2024-07-27 16:13:17 +02:00
Matthias
4ac7a4fdab Allow empty min_Value setting... 2024-07-27 16:07:51 +02:00
Matthias
283e8045d8 PercentChangePairlist should partecipate in regular tests 2024-07-27 16:05:59 +02:00
Matthias
8637f4a70d Remove SortKey dynamics and setting 2024-07-27 16:04:51 +02:00
Matthias
6454a7a453 chore: Remove Phemex from blocklist.
not providing history is not necessarily a reason to hard-block an exchange.
2024-07-27 15:57:07 +02:00
Matthias
6645fd5d8a chore: fix flake8 error 2024-07-26 08:20:42 +00:00
jainanuj94
4a768682ea Remove unnecessary logs and up description 2024-07-26 13:13:26 +05:30
jainanuj94
dad4f30597 Correct calculation for percent calculation and use tickers 2024-07-25 23:33:28 +05:30
Matthias
b88b1cbbdb fix: Update /trades to include L/S indicator
closes #10457
2024-07-25 07:00:11 +02:00
Matthias
818e4d86bf docs: explain that the strategy may be called with dataframe of length 1 2024-07-25 06:39:35 +02:00
jainanuj94
1b81de01b4 10348 | run ruff formatter 2024-07-25 00:04:06 +05:30
jainanuj94
b09f9e8c12 10348 | Update tests and add pairlist constants 2024-07-24 19:12:11 +05:30
jainanuj94
4b1177e07e 10348 | Create new pair list to dynamically fetch pairs based on percent volume change 2024-07-24 19:09:45 +05:30
Matthias
bf9aa2c388 chore: Extract config validation schema 2024-07-23 18:14:31 +02:00
Matthias
b2c2fedbc1 Merge pull request #10449 from freqtrade/dependabot/pip/develop/cryptography-43.0.0
chore(deps): bump cryptography from 42.0.8 to 43.0.0
2024-07-23 18:12:35 +02:00
Matthias
5eab5b1135 Merge pull request #10452 from freqtrade/update/pre-commit-hooks
Update pre-commit hooks
2024-07-23 06:22:51 +02:00
xmatthias
a3e6e34bdc chore: update pre-commit hooks 2024-07-23 03:02:43 +00:00
Matthias
2642e22824 Merge pull request #10445 from freqtrade/dependabot/pip/develop/mypy-1.11.0
chore(deps-dev): bump mypy from 1.10.1 to 1.11.0
2024-07-22 20:50:02 +02:00
Matthias
152b2c6a00 chore: Bump pre-commit 2024-07-22 19:31:44 +02:00
Matthias
a964884077 chore: Remove now unused type ignore comment 2024-07-22 19:31:44 +02:00
dependabot[bot]
97a374909f chore(deps-dev): bump mypy from 1.10.1 to 1.11.0
Bumps [mypy](https://github.com/python/mypy) from 1.10.1 to 1.11.0.
- [Changelog](https://github.com/python/mypy/blob/master/CHANGELOG.md)
- [Commits](https://github.com/python/mypy/compare/v1.10.1...v1.11)

---
updated-dependencies:
- dependency-name: mypy
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-07-22 19:31:44 +02:00
Matthias
0d7400fff4 chore: fix pre-commit error 2024-07-22 19:31:30 +02:00
Matthias
5093349732 chore: remove potential flakyness from test 2024-07-22 19:29:44 +02:00
Matthias
b3e3dff560 Improve log message uppon pair watchlist removal 2024-07-22 19:27:55 +02:00
Matthias
d4db87e017 Merge pull request #10451 from cowleyb/Fix-typo-in-docs
Typo in docs
2024-07-22 18:42:08 +02:00
Matthias
dfe1a42b74 docs: Migrate "different db system" to advanced setup 2024-07-22 18:30:10 +02:00
Matthias
a1e73ffe93 docs: update sql cheatsheet with a few warnings 2024-07-22 18:30:07 +02:00
Matthias
72f6ee8e8b feat: Add Orderflow -> exchange support validation 2024-07-22 18:07:32 +02:00
cowleyb
cb1539463e Typo in docs 2024-07-22 15:57:24 +01:00
Matthias
8591b9f0c8 Merge pull request #10447 from freqtrade/dependabot/pip/develop/pyarrow-17.0.0
chore(deps): bump pyarrow from 16.1.0 to 17.0.0
2024-07-22 12:41:21 +02:00
Matthias
cc34435b9e Merge pull request #10446 from freqtrade/dependabot/pip/develop/uvicorn-0.30.3
chore(deps): bump uvicorn from 0.30.1 to 0.30.3
2024-07-22 12:30:06 +02:00
Matthias
5c4075228e Merge pull request #10441 from freqtrade/dependabot/pip/develop/pytest-ad4c89e6dc
chore(deps-dev): bump the pytest group with 2 updates
2024-07-22 09:34:58 +02:00
dependabot[bot]
7b459336ab chore(deps): bump cryptography from 42.0.8 to 43.0.0
Bumps [cryptography](https://github.com/pyca/cryptography) from 42.0.8 to 43.0.0.
- [Changelog](https://github.com/pyca/cryptography/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/pyca/cryptography/compare/42.0.8...43.0.0)

---
updated-dependencies:
- dependency-name: cryptography
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-07-22 07:11:49 +00:00
Matthias
54aa05ae23 Merge pull request #10448 from freqtrade/dependabot/pip/develop/ccxt-4.3.65
chore(deps): bump ccxt from 4.3.61 to 4.3.65
2024-07-22 09:10:55 +02:00
Matthias
cc8afffaa9 Merge pull request #10440 from freqtrade/dependabot/pip/develop/types-5f7a719065
chore(deps-dev): bump types-cachetools from 5.3.0.7 to 5.4.0.20240717 in the types group
2024-07-22 08:53:10 +02:00
dependabot[bot]
1e23f7442c chore(deps-dev): bump the pytest group with 2 updates
Bumps the pytest group with 2 updates: [pytest](https://github.com/pytest-dev/pytest) and [pytest-asyncio](https://github.com/pytest-dev/pytest-asyncio).


Updates `pytest` from 8.2.2 to 8.3.1
- [Release notes](https://github.com/pytest-dev/pytest/releases)
- [Changelog](https://github.com/pytest-dev/pytest/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/pytest-dev/pytest/compare/8.2.2...8.3.1)

Updates `pytest-asyncio` from 0.23.7 to 0.23.8
- [Release notes](https://github.com/pytest-dev/pytest-asyncio/releases)
- [Commits](https://github.com/pytest-dev/pytest-asyncio/compare/v0.23.7...v0.23.8)

---
updated-dependencies:
- dependency-name: pytest
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: pytest
- dependency-name: pytest-asyncio
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: pytest
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-07-22 05:23:32 +00:00
Matthias
38a737c913 Merge pull request #10444 from freqtrade/dependabot/pip/develop/cachetools-5.4.0
chore(deps): bump cachetools from 5.3.3 to 5.4.0
2024-07-22 07:22:37 +02:00
Matthias
723d60d24d Merge pull request #10443 from freqtrade/dependabot/pip/develop/ruff-0.5.4
chore(deps-dev): bump ruff from 0.5.2 to 0.5.4
2024-07-22 07:22:14 +02:00
Matthias
4a57805864 chore: bump pyarrow pre-built wheels
Drop support for 3.9 - the image we're using is 3.11 since a long time now.
2024-07-22 07:14:56 +02:00
Matthias
ac17bfbf4f types-cachetools - pre-commit 2024-07-22 06:50:42 +02:00
dependabot[bot]
328cb5e9ca chore(deps): bump ccxt from 4.3.61 to 4.3.65
Bumps [ccxt](https://github.com/ccxt/ccxt) from 4.3.61 to 4.3.65.
- [Release notes](https://github.com/ccxt/ccxt/releases)
- [Changelog](https://github.com/ccxt/ccxt/blob/master/CHANGELOG.md)
- [Commits](https://github.com/ccxt/ccxt/compare/4.3.61...4.3.65)

---
updated-dependencies:
- dependency-name: ccxt
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-07-22 03:15:48 +00:00
dependabot[bot]
2598895d70 chore(deps): bump pyarrow from 16.1.0 to 17.0.0
Bumps [pyarrow](https://github.com/apache/arrow) from 16.1.0 to 17.0.0.
- [Release notes](https://github.com/apache/arrow/releases)
- [Commits](https://github.com/apache/arrow/compare/r-16.1.0...go/v17.0.0)

---
updated-dependencies:
- dependency-name: pyarrow
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-07-22 03:15:37 +00:00
dependabot[bot]
f0e1ac6e4b chore(deps): bump uvicorn from 0.30.1 to 0.30.3
Bumps [uvicorn](https://github.com/encode/uvicorn) from 0.30.1 to 0.30.3.
- [Release notes](https://github.com/encode/uvicorn/releases)
- [Changelog](https://github.com/encode/uvicorn/blob/master/CHANGELOG.md)
- [Commits](https://github.com/encode/uvicorn/compare/0.30.1...0.30.3)

---
updated-dependencies:
- dependency-name: uvicorn
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-07-22 03:15:15 +00:00
dependabot[bot]
86b4973866 chore(deps): bump cachetools from 5.3.3 to 5.4.0
Bumps [cachetools](https://github.com/tkem/cachetools) from 5.3.3 to 5.4.0.
- [Changelog](https://github.com/tkem/cachetools/blob/master/CHANGELOG.rst)
- [Commits](https://github.com/tkem/cachetools/compare/v5.3.3...v5.4.0)

---
updated-dependencies:
- dependency-name: cachetools
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-07-22 03:14:49 +00:00
dependabot[bot]
6fc2be25ba chore(deps-dev): bump ruff from 0.5.2 to 0.5.4
Bumps [ruff](https://github.com/astral-sh/ruff) from 0.5.2 to 0.5.4.
- [Release notes](https://github.com/astral-sh/ruff/releases)
- [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md)
- [Commits](https://github.com/astral-sh/ruff/compare/0.5.2...0.5.4)

---
updated-dependencies:
- dependency-name: ruff
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-07-22 03:14:40 +00:00
dependabot[bot]
fdeb9355a5 chore(deps-dev): bump types-cachetools in the types group
Bumps the types group with 1 update: [types-cachetools](https://github.com/python/typeshed).


Updates `types-cachetools` from 5.3.0.7 to 5.4.0.20240717
- [Commits](https://github.com/python/typeshed/commits)

---
updated-dependencies:
- dependency-name: types-cachetools
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: types
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-07-22 03:11:52 +00:00
Matthias
4ee7c3741f Merge pull request #9066 from TheJoeSchr/feature/fetch-public-trades
[Feature] fetch public trades
2024-07-21 20:00:54 +02:00
Matthias
faf7b830c9 fix: Fix WS restart bug after network outage
This could lead to messed up candles in case of an outage that took more than 1 candle.
2024-07-21 19:56:51 +02:00
Matthias
0ad8fcf834 Merge pull request #10438 from freqtrade/update/binance-leverage-tiers
Update Binance Leverage Tiers
2024-07-20 13:30:30 +02:00
xmatthias
8cd20f1914 chore: update pre-commit hooks 2024-07-20 06:43:19 +00:00
Matthias
a8f707eee2 Merge branch 'develop' into feature/fetch-public-trades 2024-07-20 08:15:34 +02:00
Matthias
3b05d680c8 Merge pull request #10437 from iridescentGray/develop
chore: remove redundant raise
2024-07-20 08:14:42 +02:00
colorfulgray0
b5e7c6406a chore: remove redundant raise 2024-07-19 15:49:30 +08:00
Joe Schr
00724fdff4 chore: renames orderflow tests file 2024-07-19 09:37:34 +02:00
Joe Schr
9eb5993833 chore: drop candle_start and candle_end from trades and add test asserting trades columns 2024-07-18 20:04:34 +02:00
simwai
f714d1ab28 Added unlock_at field to protections document 2024-07-18 15:08:12 +02:00
Matthias
2560090a68 chore: Remove "version" field from compose file
it's been deprecated since at least 3 years.
2024-07-17 20:03:40 +02:00
Matthias
f5a92fcfc5 Support accountId as exchange secret 2024-07-16 18:26:51 +02:00
Matthias
5c371133a0 chore: Improve wording 2024-07-16 18:21:01 +02:00
Matthias
aec749fdb6 Merge pull request #10434 from freqtrade/update/pre-commit-hooks
Update pre-commit hooks
2024-07-16 07:36:35 +02:00
Matthias
dcc9d20cca Remove unnecessary statement 2024-07-16 07:31:11 +02:00
Matthias
d590ab003f Add unlock_at config test, simplify validation 2024-07-16 07:26:41 +02:00
Matthias
a3c52445ee Simplify validation 2024-07-16 07:14:46 +02:00
Matthias
be3fcd90e2 Remove unneeded property 2024-07-16 07:14:33 +02:00
Matthias
26aa336450 Combine "until" logic into calculate_lock_end 2024-07-16 07:05:42 +02:00
Matthias
65972d9c0c Add cooldown with timeperiod test 2024-07-16 06:51:31 +02:00
Matthias
d13f47ec0b align wording to simplify "locking for" element 2024-07-16 06:48:30 +02:00
Matthias
1e36bc98b9 chore: Remove unused method 2024-07-16 06:35:32 +02:00
Matthias
16dd86e732 _unlock_at should be private 2024-07-16 06:31:12 +02:00
xmatthias
c52e6d1cc8 chore: update pre-commit hooks 2024-07-16 03:03:00 +00:00
Joe Schr
4cd75c9753 docs: replace orderflow dataframe with dict in code comment 2024-07-15 20:49:56 +02:00
Matthias
5930813df9 docs: Updated orderflow documentation 2024-07-15 20:30:31 +02:00
Matthias
353dc79aa9 chore: invert some asserts 2024-07-15 20:25:21 +02:00
Matthias
e043797a82 chore: Tests should use dict format 2024-07-15 20:25:09 +02:00
Matthias
8922f0cdf3 feat: use dicts instead of nested dataframes 2024-07-15 20:08:55 +02:00
Matthias
beceacc3c5 Merge pull request #10424 from iridescentGray/develop
fix: remove contextmanager
2024-07-15 13:19:42 +02:00
Matthias
391e062c3d Merge pull request #10429 from freqtrade/dependabot/pip/develop/humanize-4.10.0
chore(deps): bump humanize from 4.9.0 to 4.10.0
2024-07-15 09:37:12 +02:00
Matthias
dab1a2889f Merge pull request #10425 from freqtrade/dependabot/pip/develop/types-ebb7b2ebf3
chore(deps-dev): bump types-requests from 2.32.0.20240622 to 2.32.0.20240712 in the types group
2024-07-15 09:22:34 +02:00
Matthias
ee29f27ed6 Merge pull request #10432 from freqtrade/dependabot/pip/develop/fastapi-0.111.1
chore(deps): bump fastapi from 0.111.0 to 0.111.1
2024-07-15 08:53:32 +02:00
dependabot[bot]
ad23ba6a1b chore(deps): bump humanize from 4.9.0 to 4.10.0
Bumps [humanize](https://github.com/python-humanize/humanize) from 4.9.0 to 4.10.0.
- [Release notes](https://github.com/python-humanize/humanize/releases)
- [Commits](https://github.com/python-humanize/humanize/compare/4.9.0...4.10.0)

---
updated-dependencies:
- dependency-name: humanize
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-07-15 06:27:53 +00:00
Matthias
fc50d374e8 Merge pull request #10431 from freqtrade/dependabot/pip/develop/python-telegram-bot-21.4
chore(deps): bump python-telegram-bot from 21.3 to 21.4
2024-07-15 08:26:59 +02:00
Matthias
28795e0706 Merge pull request #10430 from freqtrade/dependabot/pip/develop/ccxt-4.3.61
chore(deps): bump ccxt from 4.3.58 to 4.3.61
2024-07-15 08:26:34 +02:00
colorfulgray0
eba0aaf3c2 chore: remove contextmanager 2024-07-15 14:08:10 +08:00
Matthias
144ff15795 Merge pull request #10428 from freqtrade/dependabot/pip/develop/ruff-0.5.2
chore(deps-dev): bump ruff from 0.5.1 to 0.5.2
2024-07-15 07:56:00 +02:00
Matthias
55f63b59d4 Merge pull request #10427 from freqtrade/dependabot/pip/develop/jsonschema-4.23.0
chore(deps): bump jsonschema from 4.22.0 to 4.23.0
2024-07-15 07:38:07 +02:00
Matthias
2cf351aaf3 Merge pull request #10426 from freqtrade/dependabot/pip/develop/mkdocs-2f8b0ef7df
chore(deps): bump mkdocs-material from 9.5.28 to 9.5.29 in the mkdocs group
2024-07-15 07:37:38 +02:00
Matthias
663d9daef5 chore: types-requests - bump version 2024-07-15 06:45:53 +02:00
dependabot[bot]
2d3e741f01 chore(deps): bump fastapi from 0.111.0 to 0.111.1
Bumps [fastapi](https://github.com/tiangolo/fastapi) from 0.111.0 to 0.111.1.
- [Release notes](https://github.com/tiangolo/fastapi/releases)
- [Commits](https://github.com/tiangolo/fastapi/compare/0.111.0...0.111.1)

---
updated-dependencies:
- dependency-name: fastapi
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-07-15 03:34:22 +00:00
dependabot[bot]
af5eef3e59 chore(deps): bump python-telegram-bot from 21.3 to 21.4
Bumps [python-telegram-bot](https://github.com/python-telegram-bot/python-telegram-bot) from 21.3 to 21.4.
- [Release notes](https://github.com/python-telegram-bot/python-telegram-bot/releases)
- [Changelog](https://github.com/python-telegram-bot/python-telegram-bot/blob/master/CHANGES.rst)
- [Commits](https://github.com/python-telegram-bot/python-telegram-bot/compare/v21.3...v21.4)

---
updated-dependencies:
- dependency-name: python-telegram-bot
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-07-15 03:34:17 +00:00
dependabot[bot]
b704545abb chore(deps): bump ccxt from 4.3.58 to 4.3.61
Bumps [ccxt](https://github.com/ccxt/ccxt) from 4.3.58 to 4.3.61.
- [Release notes](https://github.com/ccxt/ccxt/releases)
- [Changelog](https://github.com/ccxt/ccxt/blob/master/CHANGELOG.md)
- [Commits](https://github.com/ccxt/ccxt/compare/4.3.58...4.3.61)

---
updated-dependencies:
- dependency-name: ccxt
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-07-15 03:34:10 +00:00
dependabot[bot]
2b082f1808 chore(deps-dev): bump ruff from 0.5.1 to 0.5.2
Bumps [ruff](https://github.com/astral-sh/ruff) from 0.5.1 to 0.5.2.
- [Release notes](https://github.com/astral-sh/ruff/releases)
- [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md)
- [Commits](https://github.com/astral-sh/ruff/compare/0.5.1...0.5.2)

---
updated-dependencies:
- dependency-name: ruff
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-07-15 03:33:54 +00:00
dependabot[bot]
ddab71844e chore(deps): bump jsonschema from 4.22.0 to 4.23.0
Bumps [jsonschema](https://github.com/python-jsonschema/jsonschema) from 4.22.0 to 4.23.0.
- [Release notes](https://github.com/python-jsonschema/jsonschema/releases)
- [Changelog](https://github.com/python-jsonschema/jsonschema/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/python-jsonschema/jsonschema/compare/v4.22.0...v4.23.0)

---
updated-dependencies:
- dependency-name: jsonschema
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-07-15 03:33:44 +00:00
dependabot[bot]
2b36a7e318 chore(deps): bump mkdocs-material in the mkdocs group
Bumps the mkdocs group with 1 update: [mkdocs-material](https://github.com/squidfunk/mkdocs-material).


Updates `mkdocs-material` from 9.5.28 to 9.5.29
- [Release notes](https://github.com/squidfunk/mkdocs-material/releases)
- [Changelog](https://github.com/squidfunk/mkdocs-material/blob/master/CHANGELOG)
- [Commits](https://github.com/squidfunk/mkdocs-material/compare/9.5.28...9.5.29)

---
updated-dependencies:
- dependency-name: mkdocs-material
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: mkdocs
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-07-15 03:33:27 +00:00
dependabot[bot]
aa8165cfbb chore(deps-dev): bump types-requests in the types group
Bumps the types group with 1 update: [types-requests](https://github.com/python/typeshed).


Updates `types-requests` from 2.32.0.20240622 to 2.32.0.20240712
- [Commits](https://github.com/python/typeshed/commits)

---
updated-dependencies:
- dependency-name: types-requests
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: types
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-07-15 03:32:42 +00:00
simwai
be894664ef Fixed building of wrong reason texts
Removed unnecessary method set_unlock_at_as_stop_duration()
2024-07-14 21:47:43 +02:00
Matthias
5cabd49bec Fix comment
closes #10422
2024-07-14 17:28:08 +02:00
Matthias
103db9a025 Add hyperliquid exchange overrides
part of #10377
2024-07-14 09:14:44 +02:00
Matthias
9736e0d13f Update docstring alignment 2024-07-14 09:08:36 +02:00
Matthias
1c46b287d7 chore: add support for "walletAddress" and "privateKey"
part of #10377
2024-07-14 09:05:25 +02:00
Matthias
5b2b5285ed chore: Support apiKey as config value
(aligns secret configuration with ccxt)
2024-07-14 08:57:23 +02:00
Matthias
b9c2868dff Merge pull request #10420 from freqtrade/feat/dl_data_progress
Download Data - progressbar
2024-07-14 08:03:51 +02:00
Matthias
b163f8fcf4 Improve test 2024-07-13 18:29:00 +02:00
Matthias
ba352522d4 Implement progress tracker to trades download 2024-07-13 18:01:22 +02:00
Matthias
b41cdfb683 Simplify by extracting progressbar definition 2024-07-13 15:47:50 +02:00
Matthias
04c9626c8c feat: Implement rich Progress to download-data 2024-07-13 10:54:23 +02:00
Matthias
87b78b5ec5 Add default to customProgress cust_objs 2024-07-13 10:52:03 +02:00
Matthias
8a166b04f9 Align test directory with working directory 2024-07-13 10:10:12 +02:00
Matthias
d3ffdbf300 chore: Add small todo 2024-07-13 09:49:21 +02:00
Matthias
79e6034656 docs: Improve orderflow documentation 2024-07-13 09:49:09 +02:00
Matthias
646ca5e3b3 Docs wording 2024-07-12 20:00:46 +02:00
Matthias
50dcd04816 chore: Add cryptocom base exchange class
adjust candle-limit to the appropriate number
2024-07-12 07:09:52 +02:00
Matthias
9ebd34daba Merge branch 'develop' into feature/fetch-public-trades 2024-07-11 07:06:58 +02:00
Matthias
2dfa9ac13c applymap -> map 2024-07-11 07:05:58 +02:00
Matthias
c0d729bcd9 chore: remove deprecated read_csv options 2024-07-11 07:05:58 +02:00
Matthias
7eb38f7e5e Merge pull request #10419 from freqtrade/update/binance-leverage-tiers
Update Binance Leverage Tiers
2024-07-11 06:40:05 +02:00
xmatthias
d25c76698c chore: update pre-commit hooks 2024-07-11 03:12:39 +00:00
Matthias
9975788f57 Add workaround to drop orderflow columns before sending to plotting 2024-07-10 20:21:32 +02:00
Matthias
e5f6ce9724 Fix "needed_candle_for*" logic
we can't compare this to "required_candle_call_count" - that'd yield 1 ...
2024-07-10 20:19:01 +02:00
Matthias
dcedc1c652 Merge pull request #10417 from freqtrade/feat/rich_tables_bt
Backtest tables -> Rich
2024-07-10 06:48:26 +02:00
Matthias
a7fcd1263b chore: Fix typing 2024-07-09 19:39:47 +02:00
Matthias
9c41ab10ff chore: remove tabulate output 2024-07-09 07:15:18 +02:00
Matthias
f9af659153 feat: edge-cli output to rich 2024-07-09 07:08:10 +02:00
Matthias
2d31314eb4 feat: bt-result to tabulate 2024-07-09 06:54:04 +02:00
Matthias
06a0264f2b feat: period breakdown -> rich table 2024-07-09 06:51:11 +02:00
Matthias
315351b573 feat: Tag table -> rich 2024-07-09 06:49:33 +02:00
Matthias
a605ae20a7 feat: initial backtest table to rich 2024-07-09 06:43:12 +02:00
Matthias
5765bb4a4f feat: Update initial bt table 2024-07-09 06:38:10 +02:00
Matthias
8393205489 Merge pull request #10405 from freqtrade/feat/rich_tables
Add rich table output
2024-07-09 06:37:52 +02:00
Matthias
f1993766ee Merge pull request #10416 from freqtrade/update/pre-commit-hooks
Update pre-commit hooks
2024-07-09 06:31:42 +02:00
xmatthias
c679a6aab2 chore: update pre-commit hooks 2024-07-09 03:03:43 +00:00
Matthias
0e870ab47c chore: don't use pipe operator, not supported on 3.9 2024-07-08 19:15:05 +02:00
Matthias
64d22bbd89 chore: Fix fstring incompatibility with older python versions 2024-07-08 18:20:39 +02:00
Matthias
e2def42932 Merge pull request #10413 from freqtrade/dependabot/pip/develop/ruff-0.5.1
chore(deps-dev): bump ruff from 0.5.0 to 0.5.1
2024-07-08 07:52:50 +02:00
Matthias
43ac867747 Merge pull request #10408 from freqtrade/dependabot/pip/develop/mkdocs-852807f2c9
chore(deps): bump mkdocs-material from 9.5.27 to 9.5.28 in the mkdocs group
2024-07-08 07:39:59 +02:00
Matthias
76a34efe36 chore: improve backtest test resiliance 2024-07-08 07:21:24 +02:00
Matthias
ae92807b5c chore: Update more test reliability 2024-07-08 07:21:24 +02:00
Matthias
453ea0dbcc update test for bt-output stability 2024-07-08 07:21:24 +02:00
Matthias
432f45484e Merge pull request #10412 from freqtrade/dependabot/pip/develop/pydantic-2.8.2
chore(deps): bump pydantic from 2.7.4 to 2.8.2
2024-07-08 07:21:00 +02:00
Matthias
caa6fe859c Merge pull request #10411 from freqtrade/dependabot/pip/develop/orjson-3.10.6
chore(deps): bump orjson from 3.10.5 to 3.10.6
2024-07-08 07:07:28 +02:00
Matthias
b208f978db Remove dependency on colorama 2024-07-08 06:44:52 +02:00
Matthias
49a60fa67f Properly support "--no-color" for hyperopt 2024-07-08 06:44:21 +02:00
Matthias
1744205bf1 Merge pull request #10410 from freqtrade/dependabot/pip/develop/ccxt-4.3.58
chore(deps): bump ccxt from 4.3.54 to 4.3.58
2024-07-08 06:43:14 +02:00
Matthias
beca37e102 Merge pull request #10409 from freqtrade/dependabot/pip/develop/scikit-learn-1.5.1
chore(deps): bump scikit-learn from 1.5.0 to 1.5.1
2024-07-08 06:42:20 +02:00
Matthias
28f4e1c068 Colorama is not necessary for hyperopt commands anymore 2024-07-08 06:38:29 +02:00
dependabot[bot]
4d2b6d6d6e chore(deps-dev): bump ruff from 0.5.0 to 0.5.1
Bumps [ruff](https://github.com/astral-sh/ruff) from 0.5.0 to 0.5.1.
- [Release notes](https://github.com/astral-sh/ruff/releases)
- [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md)
- [Commits](https://github.com/astral-sh/ruff/compare/0.5.0...0.5.1)

---
updated-dependencies:
- dependency-name: ruff
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-07-08 03:11:11 +00:00
dependabot[bot]
ddb4cb853a chore(deps): bump pydantic from 2.7.4 to 2.8.2
Bumps [pydantic](https://github.com/pydantic/pydantic) from 2.7.4 to 2.8.2.
- [Release notes](https://github.com/pydantic/pydantic/releases)
- [Changelog](https://github.com/pydantic/pydantic/blob/main/HISTORY.md)
- [Commits](https://github.com/pydantic/pydantic/compare/v2.7.4...v2.8.2)

---
updated-dependencies:
- dependency-name: pydantic
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-07-08 03:11:01 +00:00
dependabot[bot]
91fe16344e chore(deps): bump orjson from 3.10.5 to 3.10.6
Bumps [orjson](https://github.com/ijl/orjson) from 3.10.5 to 3.10.6.
- [Release notes](https://github.com/ijl/orjson/releases)
- [Changelog](https://github.com/ijl/orjson/blob/master/CHANGELOG.md)
- [Commits](https://github.com/ijl/orjson/compare/3.10.5...3.10.6)

---
updated-dependencies:
- dependency-name: orjson
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-07-08 03:10:42 +00:00
dependabot[bot]
7e52124d8a chore(deps): bump ccxt from 4.3.54 to 4.3.58
Bumps [ccxt](https://github.com/ccxt/ccxt) from 4.3.54 to 4.3.58.
- [Release notes](https://github.com/ccxt/ccxt/releases)
- [Changelog](https://github.com/ccxt/ccxt/blob/master/CHANGELOG.md)
- [Commits](https://github.com/ccxt/ccxt/compare/4.3.54...4.3.58)

---
updated-dependencies:
- dependency-name: ccxt
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-07-08 03:10:32 +00:00
dependabot[bot]
71c29aa367 chore(deps): bump scikit-learn from 1.5.0 to 1.5.1
Bumps [scikit-learn](https://github.com/scikit-learn/scikit-learn) from 1.5.0 to 1.5.1.
- [Release notes](https://github.com/scikit-learn/scikit-learn/releases)
- [Commits](https://github.com/scikit-learn/scikit-learn/compare/1.5.0...1.5.1)

---
updated-dependencies:
- dependency-name: scikit-learn
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-07-08 03:10:19 +00:00
dependabot[bot]
c0b20f88a5 chore(deps): bump mkdocs-material in the mkdocs group
Bumps the mkdocs group with 1 update: [mkdocs-material](https://github.com/squidfunk/mkdocs-material).


Updates `mkdocs-material` from 9.5.27 to 9.5.28
- [Release notes](https://github.com/squidfunk/mkdocs-material/releases)
- [Changelog](https://github.com/squidfunk/mkdocs-material/blob/master/CHANGELOG)
- [Commits](https://github.com/squidfunk/mkdocs-material/compare/9.5.27...9.5.28)

---
updated-dependencies:
- dependency-name: mkdocs-material
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: mkdocs
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-07-08 03:10:12 +00:00
Matthias
94565d0d39 "best" should be shown in gold 2024-07-07 20:03:49 +02:00
Matthias
004e1101e7 Improve resiliance, drop compatibility test 2024-07-07 17:12:30 +02:00
Matthias
62320a361e chore: fix now failing test 2024-07-07 17:12:30 +02:00
Matthias
879797e7c5 chore: remove no longer used result formatting methods 2024-07-07 17:12:30 +02:00
Matthias
f51b63fc37 Fix wrong type for live running 2024-07-07 16:33:47 +02:00
Matthias
4d6f399131 Implement colors for hyperopt-output 2024-07-07 16:28:02 +02:00
Matthias
8f0ac0aaea Remove old output from hyperopt-list 2024-07-07 16:27:53 +02:00
Matthias
f05c019757 feat: Update output for hyperopt to Rich 2024-07-07 16:15:09 +02:00
Matthias
befefd449c Add a generic Progressbar which allows printing additional objects 2024-07-07 16:13:55 +02:00
Matthias
69628736b2 feat: add hyperopt output functionality 2024-07-07 15:29:58 +02:00
Matthias
483a829d0e Revert "chore: pre-commit now needs rich types"
This reverts commit bc60855b93.
2024-07-07 15:10:33 +02:00
Matthias
8c807f00bb Extract row before exploding for better typing 2024-07-07 15:10:14 +02:00
Matthias
bc60855b93 chore: pre-commit now needs rich types 2024-07-07 13:22:09 +02:00
Matthias
4d5b330b77 Improve rich generic 2024-07-07 13:08:52 +02:00
Matthias
296bf9dc1d chore: Fix unused import 2024-07-07 13:05:37 +02:00
Matthias
dba7f9968b chore: fix minor type gotcha 2024-07-07 12:58:44 +02:00
Matthias
7adc3c2ef5 Improve rich_tables generic 2024-07-07 12:47:27 +02:00
Matthias
8e2f28955e feat: rich table for recursive analysis 2024-07-07 10:05:17 +02:00
Matthias
5e88bd231d feat: lookahead-heplpers -> rich table 2024-07-07 10:00:36 +02:00
Matthias
e705471946 chore: don't return what ain't being needed 2024-07-07 09:49:15 +02:00
Matthias
cdae61e155 feat: use rich tables for entryexitanalysis 2024-07-07 09:49:15 +02:00
Matthias
ffb0cf1a2c chore: Improve typing 2024-07-07 08:36:51 +02:00
Matthias
9f628309e9 feat: Update list-pairs command to use rich tables 2024-07-06 21:00:34 +02:00
Matthias
c296a8cf82 Improve rich tables interface 2024-07-06 20:59:50 +02:00
Matthias
c9b3987d33 chore: update rich-table print helper 2024-07-06 18:30:48 +02:00
Matthias
768a51cb9b Extract rich_table print to utils 2024-07-06 18:26:36 +02:00
Matthias
2d8470b254 Remove unused imports 2024-07-06 18:26:08 +02:00
Matthias
8d00e1d929 feat: Use Rich for list-strategies command 2024-07-06 18:09:03 +02:00
Matthias
2e0372d247 extract print_rich_table 2024-07-06 13:12:16 +02:00
Matthias
bafb6507c4 Use Rich table for pair list output 2024-07-06 13:09:37 +02:00
Matthias
b6b589b1f0 Update list-exchanges to use rich tables 2024-07-06 12:59:50 +02:00
Matthias
95097d1f51 chore: don't overwrite exchanges variable 2024-07-06 11:49:26 +02:00
Matthias
6b98bfe9b7 Simplify output 2024-07-06 11:42:40 +02:00
Matthias
7a67771e46 feat: include orderbook / fetchTicker to exchange_has
this will ensure one of the "get price" methods is available.
2024-07-06 10:55:10 +02:00
Matthias
bfe18573f3 Improve wording for list-exchanges command 2024-07-06 10:52:03 +02:00
Simon Waiblinger
f126120421 Merge branch 'freqtrade:develop' into feature/stoploss-start-at 2024-07-05 22:23:56 +02:00
simwai
af505b346c Fixed an access on the config by a wrong config key 2024-07-05 22:17:40 +02:00
simwai
77b4689ac8 Fixed implementation of unlock_at and updated unit tests 2024-07-05 22:14:35 +02:00
Matthias
f3e2dcd342 chore: update get_patched_exchange argument 2024-07-05 09:22:12 +02:00
Matthias
8b50973411 chore: Fix misuse of asyncio.sleep in test 2024-07-05 09:11:58 +02:00
Matthias
36a44575c7 chore: update patch_exchange to not override builtins 2024-07-05 09:10:55 +02:00
Matthias
1e287de589 chore: fix mote A violations in tests and scripts 2024-07-05 08:54:49 +02:00
Matthias
4a4e6bc952 chore: fix flake8-builtins overrides 2024-07-05 08:51:23 +02:00
Matthias
deeabbca12 chore: Don't override builtins 2024-07-05 08:51:20 +02:00
Matthias
8296e7010c chore: enable NPY ruff rules 2024-07-05 08:41:25 +02:00
Matthias
059fb16a35 docs: improve dev setup docs 2024-07-05 08:28:09 +02:00
Matthias
8d9825ac95 chore: noqa S404
we're using static parameters with subpross, so it should be safe.
2024-07-05 08:25:24 +02:00
Matthias
0eadd51ff3 chore: Highlight non-used variable in test 2024-07-05 08:18:39 +02:00
Matthias
ab0fd461ed chore: Replace np.NAN with np.nan
properly implements what #10402 tried to do.
2024-07-05 08:18:36 +02:00
Matthias
53043d1978 Pin numpy install to <2.0 in setup.py 2024-07-05 07:33:26 +02:00
Joe Schr
aa86e95650 refresh_latest_trades: use max_candles to determine trades download count 2024-07-04 18:33:05 +02:00
Matthias
cd8bd9038e fix: Reassign "options" on market reload
Ensures that all data is available after init or reload.
2024-07-04 18:12:14 +02:00
Matthias
72c7f118a0 Improve test naming to be clearer 2024-07-04 17:43:50 +02:00
Joe Schr
3486327e78 Extract global cached_grouped_trades_per_pair into IStrategy 2024-07-04 17:23:59 +02:00
Joe Schr
e5221bded7 Align constant defaults for cache_size with max_candles 2024-07-04 17:06:59 +02:00
Matthias
7c697d4ded fix: Validate trades for fee
We can't rely on the "trades" subarray from the order
to contain everything we need
As such, we need to ensure that required properties are present and not None.

closes #10398
2024-07-04 16:38:12 +02:00
Matthias
d1a0f5a4e1 Add test with invalid trade object 2024-07-04 16:32:29 +02:00
Matthias
6b99033164 Improve trades-cached handling 2024-07-04 15:21:16 +02:00
Matthias
c891e38f2b Merge branch 'develop' into feature/fetch-public-trades 2024-07-04 14:39:17 +02:00
Matthias
0e51baeb10 Better structure for config docs 2024-07-04 14:32:45 +02:00
Matthias
371819d26e Merge pull request #10273 from freqtrade/ci/ccxt.pro
ccxt.pro support - using websockets to get data
2024-07-04 14:32:36 +02:00
Matthias
b3bcbfa803 Add extended Websocket documentation 2024-07-04 12:47:44 +02:00
Matthias
57316e1875 Don't evaluate comment in waves exchange 2024-07-04 12:39:19 +02:00
Matthias
7ab4eecb18 Fix header indentation 2024-07-04 12:10:39 +02:00
Matthias
a0a5ccc445 Merge branch 'develop' into ci/ccxt.pro 2024-07-04 12:08:36 +02:00
Matthias
8a246b831b Update non-working ccxt doc links 2024-07-04 12:07:18 +02:00
Matthias
db8d4dc990 Add exchange.enable_ws setting to doc 2024-07-04 12:06:17 +02:00
Joe Schr
05b2d8a2bf Merge remote-tracking branch 'upstream/develop' into feature/fetch-public-trades 2024-07-04 11:01:17 +02:00
simwai
57118691d8 Removed entry in gitignore 2024-07-04 10:53:14 +02:00
simwai
2b456cbdeb Added unlock_at field for protection config 2024-07-04 10:29:13 +02:00
Matthias
7b6cd0cb9c Merge pull request #10399 from freqtrade/update/binance-leverage-tiers
Update Binance Leverage Tiers
2024-07-04 08:24:08 +02:00
xmatthias
01506a2ad3 chore: update pre-commit hooks 2024-07-04 03:12:01 +00:00
Matthias
04b65eae3c docs: Fix format used for backtesting-predictions 2024-07-03 17:24:48 +02:00
Matthias
d953226459 use correct sleep method in tests 2024-07-03 13:44:36 +02:00
Matthias
3348283b05 Test api with new dex attribute 2024-07-03 13:36:41 +02:00
Matthias
b58e412982 feat: Add "DEX" output for list- exchanges subcommand 2024-07-03 13:34:00 +02:00
Matthias
7209b2e71a Merge branch 'develop' into ci/ccxt.pro 2024-07-03 13:13:13 +02:00
Matthias
d8eb6e59fa Fix missing import 2024-07-03 12:01:22 +02:00
Matthias
e5a453a1f3 Improve clarity on argument definition 2024-07-03 12:01:13 +02:00
Matthias
44c9358ac1 Simplify argparse imports 2024-07-03 11:55:55 +02:00
Matthias
0f1894037d Increased Args typehint 2024-07-03 11:51:11 +02:00
Matthias
dcb442f1df Fix / Improve supported options for lookahead-analysis 2024-07-03 11:42:44 +02:00
Matthias
027cd44944 Clarify dry-run market order slippage logic
closes #10384
2024-07-03 11:26:38 +02:00
Matthias
b18563c3bd Merge pull request #10390 from freqtrade/dependabot/pip/develop/scipy-1.14.0
Bump scipy from 1.13.1 to 1.14.0
2024-07-03 11:14:30 +02:00
Matthias
f294aafbf5 Merge pull request #10352 from freqtrade/feat/pairlist_bt_check
Feat/pairlist_bt_check
2024-07-03 09:58:45 +02:00
Matthias
5af449fcf9 Merge pull request #10392 from freqtrade/dependabot/pip/develop/python-rapidjson-1.18
Bump python-rapidjson from 1.17 to 1.18
2024-07-03 09:51:28 +02:00
Matthias
1482a5c78e Scipy 1.14 dropped support for python 3.9. 2024-07-03 09:37:01 +02:00
Matthias
a800152a43 Update gzip open mode to text mode
It's slightly faster this way, as json files are text anyway.
2024-07-03 09:19:23 +02:00
Matthias
0aab0fa40c Merge pull request #10388 from freqtrade/dependabot/pip/develop/ta-lib-0.4.32
Bump ta-lib from 0.4.31 to 0.4.32
2024-07-03 08:31:59 +02:00
Matthias
68b62e6d90 Bump TA-Lib binary packages 2024-07-03 07:36:49 +02:00
Matthias
c4bc5356d1 Add Ruff Async checks 2024-07-02 20:53:18 +02:00
Matthias
c2275009a8 Merge pull request #10393 from freqtrade/update/pre-commit-hooks
Update pre-commit hooks
2024-07-02 07:18:57 +02:00
xmatthias
fa8e95819b chore: update pre-commit hooks 2024-07-02 03:02:46 +00:00
Matthias
26b7733371 Merge pull request #10386 from freqtrade/dependabot/pip/develop/ruff-0.5.0
Bump ruff from 0.4.10 to 0.5.0
2024-07-01 10:56:52 +02:00
Matthias
78d8a5f790 Merge pull request #10387 from freqtrade/dependabot/pip/develop/ccxt-4.3.54
Bump ccxt from 4.3.50 to 4.3.54
2024-07-01 10:41:46 +02:00
Matthias
3ed9bdf38c Merge pull request #10389 from freqtrade/dependabot/pip/develop/aiofiles-24.1.0
Bump aiofiles from 23.2.1 to 24.1.0
2024-07-01 10:38:42 +02:00
dependabot[bot]
a26176a9da Bump ruff from 0.4.10 to 0.5.0
Bumps [ruff](https://github.com/astral-sh/ruff) from 0.4.10 to 0.5.0.
- [Release notes](https://github.com/astral-sh/ruff/releases)
- [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md)
- [Commits](https://github.com/astral-sh/ruff/compare/v0.4.10...0.5.0)

---
updated-dependencies:
- dependency-name: ruff
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-07-01 07:16:07 +00:00
Matthias
ff78e02933 Merge pull request #10385 from freqtrade/dependabot/pip/develop/time-machine-2.14.2
Bump time-machine from 2.14.1 to 2.14.2
2024-07-01 09:15:43 +02:00
Matthias
53182a1831 Merge pull request #10391 from freqtrade/dependabot/pip/develop/mypy-1.10.1
Bump mypy from 1.10.0 to 1.10.1
2024-07-01 09:15:11 +02:00
dependabot[bot]
33aea106d1 Bump python-rapidjson from 1.17 to 1.18
Bumps [python-rapidjson](https://github.com/python-rapidjson/python-rapidjson) from 1.17 to 1.18.
- [Changelog](https://github.com/python-rapidjson/python-rapidjson/blob/master/CHANGES.rst)
- [Commits](https://github.com/python-rapidjson/python-rapidjson/compare/v1.17...v1.18)

---
updated-dependencies:
- dependency-name: python-rapidjson
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-07-01 03:42:52 +00:00
dependabot[bot]
5aceea7280 Bump mypy from 1.10.0 to 1.10.1
Bumps [mypy](https://github.com/python/mypy) from 1.10.0 to 1.10.1.
- [Changelog](https://github.com/python/mypy/blob/master/CHANGELOG.md)
- [Commits](https://github.com/python/mypy/compare/v1.10.0...v1.10.1)

---
updated-dependencies:
- dependency-name: mypy
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-07-01 03:42:46 +00:00
dependabot[bot]
7fe7e1da44 Bump scipy from 1.13.1 to 1.14.0
Bumps [scipy](https://github.com/scipy/scipy) from 1.13.1 to 1.14.0.
- [Release notes](https://github.com/scipy/scipy/releases)
- [Commits](https://github.com/scipy/scipy/compare/v1.13.1...v1.14.0)

---
updated-dependencies:
- dependency-name: scipy
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-07-01 03:42:34 +00:00
dependabot[bot]
958abecb23 Bump aiofiles from 23.2.1 to 24.1.0
Bumps [aiofiles](https://github.com/Tinche/aiofiles) from 23.2.1 to 24.1.0.
- [Release notes](https://github.com/Tinche/aiofiles/releases)
- [Commits](https://github.com/Tinche/aiofiles/compare/v23.2.1...v24.1.0)

---
updated-dependencies:
- dependency-name: aiofiles
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-07-01 03:42:23 +00:00
dependabot[bot]
870a3ea5cc Bump ta-lib from 0.4.31 to 0.4.32
Bumps [ta-lib](https://github.com/ta-lib/ta-lib-python) from 0.4.31 to 0.4.32.
- [Changelog](https://github.com/TA-Lib/ta-lib-python/blob/master/CHANGELOG)
- [Commits](https://github.com/ta-lib/ta-lib-python/compare/TA_Lib-0.4.31...TA_Lib-0.4.32)

---
updated-dependencies:
- dependency-name: ta-lib
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-07-01 03:42:20 +00:00
dependabot[bot]
dd060f1044 Bump ccxt from 4.3.50 to 4.3.54
Bumps [ccxt](https://github.com/ccxt/ccxt) from 4.3.50 to 4.3.54.
- [Release notes](https://github.com/ccxt/ccxt/releases)
- [Changelog](https://github.com/ccxt/ccxt/blob/master/CHANGELOG.md)
- [Commits](https://github.com/ccxt/ccxt/compare/4.3.50...4.3.54)

---
updated-dependencies:
- dependency-name: ccxt
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-07-01 03:42:16 +00:00
dependabot[bot]
a882e9e478 Bump time-machine from 2.14.1 to 2.14.2
Bumps [time-machine](https://github.com/adamchainz/time-machine) from 2.14.1 to 2.14.2.
- [Changelog](https://github.com/adamchainz/time-machine/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/adamchainz/time-machine/compare/2.14.1...2.14.2)

---
updated-dependencies:
- dependency-name: time-machine
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-07-01 03:41:51 +00:00
Matthias
11798ae018 chore: update version to 2024.7-dev 2024-06-30 09:42:08 +00:00
Simon Waiblinger
1d3ca5743b Merge branch 'freqtrade:develop' into develop 2024-06-27 16:38:13 +02:00
Joe Schr
0e0c585aee orderflow tests: removes unused import 2024-06-27 15:25:40 +02:00
Joe Schr
b2bcac8447 Merge remote-tracking branch 'upstream/develop' into feature/fetch-public-trades 2024-06-27 15:23:12 +02:00
Joe Schr
7de102320c orderflow: use cache per pair 2024-06-27 15:06:16 +02:00
Joe Schr
dad2cad525 orderflow: fixing typing 2024-06-26 19:54:13 +02:00
Joe Schr
323274ecee orderflow: clean code 2024-06-24 18:07:17 +02:00
Joe Schr
5379400ab3 Merge branch 'feature/fetch-public-trades-cached' into feature/fetch-public-trades 2024-06-24 18:07:01 +02:00
Joe Schr
4735835aab orderflow tests: reset orderflow cache between tests 2024-06-24 17:40:54 +02:00
Joe Schr
54df6f5b9c orderflow: adds cache_size to config 2024-06-24 17:40:24 +02:00
Joe Schr
390373cb9b orderflow: ruff format 2024-06-24 17:15:39 +02:00
Joe Schr
ecd2118941 fix: copying orderflow dataframe from cache doesn't work 2024-06-24 17:14:22 +02:00
Matthias
605f53a602 Add test for new warning modes 2024-06-21 17:57:38 +02:00
Matthias
282198a81c update enum value to Biased 2024-06-21 17:43:27 +02:00
Joe Schr
08a27abbdc orderflow: clean up populate_dataframe_with_trades code 2024-06-21 16:10:27 +02:00
Joe Schr
d23c33a47f feat: add caching to populate_dataframe_with_trades 2024-06-21 15:28:11 +02:00
Matthias
dd42a79234 Remove most explicit "supports backtesting" checks 2024-06-21 14:57:57 +02:00
Matthias
23256466e7 Update pairlist tests accordingly 2024-06-21 14:57:57 +02:00
Matthias
ea58be2705 Classify individual pairlists for backtestability 2024-06-21 14:57:57 +02:00
Matthias
c1e938ccda Add "BacktestnigSupport" method to pairlists 2024-06-21 14:57:57 +02:00
Joe Schr
ffda564f05 Merge remote-tracking branch 'upstream/develop' into feature/fetch-public-trades 2024-06-19 20:38:50 +02:00
Matthias
2bc5756326 Update proxy documentation 2024-06-19 20:27:47 +02:00
Matthias
094dc18e86 set wsProxy for exchange calls 2024-06-19 20:27:40 +02:00
Joe Schr
2d6408a363 feat: adds max_candles to orderflow config 2024-06-19 19:23:26 +02:00
Matthias
b43d578bb0 Merge branch 'develop' into ci/ccxt.pro 2024-06-18 20:34:18 +02:00
Matthias
1775d86af2 Merge branch 'develop' into ci/ccxt.pro 2024-06-14 19:46:14 +02:00
Matthias
0eeaee21fb Avoid "restart" failure - reset ccxt cache 2024-06-07 19:03:28 +02:00
Matthias
84e8a19bd3 Remove duplicate log message 2024-06-06 18:05:58 +02:00
Matthias
31219299d2 Don't fail trades loop if one pair fails 2024-06-06 18:05:45 +02:00
Matthias
4e319765ed Slightly update docs with warnings 2024-06-06 17:37:54 +02:00
Matthias
9da0437e3d Improve exchange_ws shutdown 2024-06-04 19:52:19 +02:00
Matthias
50bf770351 Merge branch 'develop' into feature/fetch-public-trades 2024-06-04 19:49:27 +02:00
Matthias
0f9335d242 Merge branch 'develop' into ci/ccxt.pro 2024-06-04 19:45:22 +02:00
Joe Schr
f075d728c5 constants: make "orderflow" fields required 2024-06-04 19:23:23 +02:00
Matthias
d4ccc7909d Control pytest log formatting 2024-06-03 21:00:43 +02:00
Matthias
0993d12955 Add timeout to some tests 2024-06-03 20:57:15 +02:00
Matthias
d5361d84fa use np.where instead of apply 2024-06-02 17:09:23 +02:00
Simon Waiblinger
5f0a27d355 Merge branch 'freqtrade:develop' into develop 2024-06-02 15:38:56 +02:00
Matthias
79ffa66656 Merge branch 'develop' into ci/ccxt.pro 2024-06-01 17:32:13 +02:00
Matthias
6913aed027 Merge branch 'develop' into ci/ccxt.pro 2024-06-01 08:48:50 +02:00
Joe Schr
bfb29d3c14 orderflow: fix ask/bid & buy/sell mixup 2024-05-31 21:25:36 +02:00
Matthias
87eda5fc2a Properly mock ccxt_async init 2024-05-31 20:18:36 +02:00
Matthias
122896f9ab Improved "task done" message 2024-05-31 07:12:02 +02:00
Matthias
8b90643f3a Don't show "exchange closed by user" exceptions 2024-05-31 07:03:40 +02:00
Matthias
12852438a5 Call connection at intervals 2024-05-31 06:52:11 +02:00
Matthias
33e61b1308 Extract connection reset from exchange_ws 2024-05-31 06:48:38 +02:00
Matthias
7e736a34dd Reduce ccxt.pro verbosity 2024-05-31 06:40:14 +02:00
Matthias
f33c4db572 Apply ruff formatting to ws branch 2024-05-31 06:40:14 +02:00
Matthias
cabd36253e Reduce level of "reuse watch result" . . . 2024-05-31 06:40:14 +02:00
Matthias
212ac2073e Don't multiply klines_last_refresh
with 1000 - it's already in ms
2024-05-31 06:40:14 +02:00
Matthias
627154cb66 improve ws "removing" condition 2024-05-31 06:40:14 +02:00
Matthias
7ec8b28be3 Re-adjust ts handling to not use time.time() 2024-05-31 06:40:14 +02:00
Matthias
765fa06daa Deepcopy ccxt ws result 2024-05-31 06:40:14 +02:00
Matthias
d5d818be8b Remove unused import 2024-05-31 06:40:14 +02:00
Matthias
ed8b9018c5 Properly handle shutdown (canceled coroutines)
This will imrove shutdown behavior
2024-05-31 06:40:14 +02:00
Matthias
68c36ce07d Fix typo 2024-05-31 06:40:14 +02:00
Matthias
b5239f06ae Improve log formatting 2024-05-31 06:40:14 +02:00
Matthias
7bc4fdca27 remove pairs from _pairs_schedules when their coroutine stops 2024-05-31 06:40:14 +02:00
Matthias
93cdf1bb54 Simplify logging 2024-05-31 06:40:14 +02:00
Matthias
554d4134ff Add humanized date to debug log 2024-05-31 06:40:14 +02:00
Matthias
45c17f2448 Reduce excessive log again 2024-05-31 06:40:14 +02:00
Matthias
ce33b031f2 Show pair for task finished 2024-05-31 06:40:14 +02:00
Matthias
fc66a12c14 Improve "stopped" messages 2024-05-31 06:40:14 +02:00
Matthias
85725b5472 Improved exception message 2024-05-31 06:40:14 +02:00
Matthias
c482b7e40f Add log for "removal" tracking 2024-05-31 06:40:14 +02:00
Matthias
80c7d4eb5f Improve debug logging 2024-05-31 06:40:14 +02:00
Matthias
d3962a7c07 Remove websocket init for non-trade modes 2024-05-31 06:40:14 +02:00
Matthias
2ade5191e6 Ensure shutdown of async exchange, fix test 2024-05-31 06:40:14 +02:00
Matthias
d42e012ec3 ws - Improve cleanup behavior 2024-05-31 06:40:14 +02:00
Matthias
4e75e59476 Skip futures tests on exchnages not supporting futures ... 2024-05-31 06:40:14 +02:00
Matthias
9f2708247a Enable ws for bybit 2024-05-31 06:40:14 +02:00
Matthias
f324af938a Improve WS logic to assume a candle is complete if time rolled over 2024-05-31 06:40:14 +02:00
Matthias
b5dc54072e Ensure exchange objects are not undefined 2024-05-31 06:40:14 +02:00
Matthias
c61d9e0dec Reduce verbosity 2024-05-31 06:40:14 +02:00
Matthias
c0c775114e Slightly improved loggign 2024-05-31 06:40:14 +02:00
Matthias
0ec751826b Opt in binance to websocket support 2024-05-31 06:40:14 +02:00
Matthias
137ddb2ec3 Require opt-in for ws enablement to allow slow rollout 2024-05-31 06:40:14 +02:00
Matthias
e31d8313f2 Improve ccxt_ws test setup 2024-05-31 06:40:14 +02:00
Matthias
e3887a33b9 Add Helping comment to ws_compat_tests 2024-05-31 06:40:14 +02:00
Matthias
bd9ebe4a72 Improve ccxt.ws live test 2024-05-31 06:40:14 +02:00
Matthias
f9ce0bb9ab Improve exchange formatting 2024-05-31 06:40:14 +02:00
Matthias
35e2e58a5c Improve formatting 2024-05-31 06:40:14 +02:00
Matthias
a835177597 Initial swat at online WS test 2024-05-31 06:40:14 +02:00
Matthias
8375209a8e Add fixtures for exchange_ws 2024-05-31 06:40:14 +02:00
Matthias
55bd7db022 Don't forget to close WS session 2024-05-31 06:40:14 +02:00
Matthias
c18b6cdb74 Improve stop behavior 2024-05-31 06:40:14 +02:00
Matthias
4832c10973 Only import ccxt.async when necessary 2024-05-31 06:40:14 +02:00
Matthias
e0b4e16d19 Remove ob_test stuff 2024-05-31 06:40:14 +02:00
Matthias
67a6c11f6d No longer import ccxt.async_support 2024-05-31 06:40:14 +02:00
Matthias
55ed505f94 Update exchange_ws get_ohlcv logic 2024-05-31 06:40:14 +02:00
Matthias
f90574abee use OHLCVResponse in ws 2024-05-31 06:40:14 +02:00
Matthias
0b620817a2 Don't append fake candle 2024-05-31 06:40:14 +02:00
Matthias
fcaee33706 Improve log msg 2024-05-31 06:40:14 +02:00
Matthias
3d6cef3555 ccxt.pro - first attempt at test 2024-05-31 06:40:14 +02:00
Matthias
ec6c54367b Add exchange_ws test case 2024-05-31 06:40:14 +02:00
Matthias
f223319909 Improve typehint for ohlcv endpoint 2024-05-31 06:40:14 +02:00
Matthias
e8b4bcc65d use default argument 2024-05-31 06:40:14 +02:00
Matthias
dadc96306f Better define what interface is external 2024-05-31 06:40:14 +02:00
Matthias
8a00bf3188 Use proper typehint 2024-05-31 06:40:14 +02:00
Matthias
aef0324aa7 set markets for ws exchange on reload 2024-05-31 06:40:14 +02:00
Matthias
f4f8b910fe Improve exchange_ws terminology 2024-05-31 06:40:14 +02:00
Matthias
60cfda5d52 Add very basic exception handling 2024-05-31 06:40:14 +02:00
Matthias
f9524aebe9 Improve temporary log output for exchange_ws 2024-05-31 06:40:14 +02:00
Matthias
eda8a767ca Improve ws exchange 2024-05-31 06:40:14 +02:00
Matthias
18dabd519a ccxt.pro - move get_klines to ws_exchange 2024-05-31 06:40:13 +02:00
Matthias
e2b567165c remove double log 2024-05-31 06:40:13 +02:00
Matthias
972b932e5d Implement ws cleanup 2024-05-31 06:40:13 +02:00
Matthias
2fd5b4a6e1 Use websocket results 2024-05-31 06:40:13 +02:00
Matthias
1d12985b70 Update exchange_ws with cleanup function 2024-05-31 06:40:13 +02:00
Matthias
bd494ed67a Cleanup exchange changes 2024-05-31 06:40:13 +02:00
Matthias
3468edddf6 Add enable_ws config setting 2024-05-31 06:40:13 +02:00
Matthias
51890f80c4 Add parameter for ws enablin 2024-05-31 06:40:13 +02:00
Matthias
34ccada909 Tests with seperate thread 2024-05-31 06:40:13 +02:00
Matthias
e985c1890b Implement basic ccxt.pro to test 2024-05-31 06:40:13 +02:00
Matthias
ad7b78ec93 Update exchange init to use .pro if available 2024-05-31 06:40:13 +02:00
Matthias
c9b1071baa Use api_async for exchange_has 2024-05-31 06:40:13 +02:00
Matthias
feeccfedaa Update list-exchanges with watchOHLCV 2024-05-31 06:40:13 +02:00
Simon Waiblinger
42d0f342b2 Merge branch 'freqtrade:develop' into develop 2024-05-30 10:10:03 +02:00
Joe Schr
41def8b28b orderflow: removes unnecessary code 2024-05-29 20:09:34 +02:00
Joe Schr
5dcf75f648 exchange: replace OperationalException with logger.error message 2024-05-29 19:52:37 +02:00
Joe Schr
82e8901db4 orderflow: remove unused function orderflow_to_volume_profile 2024-05-29 19:49:33 +02:00
Joe Schr
07034ed7a6 orderflow: add comment with insight about imbalances 2024-05-29 19:49:33 +02:00
Joe Schr
24707ab7b9 orderflow: raise DependencyException instead of raising generic exception 2024-05-29 19:49:33 +02:00
Joe Schr
4629362a60 Fixing merge error 2024-05-29 19:46:27 +02:00
Joe Schr
bf3eeeb0fc Use .exception instead of .error for trace logging 2024-05-29 19:46:27 +02:00
Joe Schr
32f931ca25 Revert "refresh_latest_trades: remove "-cached" from trades pair files"
This reverts commit 839827c0d7.
2024-05-29 19:46:27 +02:00
Simon Waiblinger
c12adea655 Merge branch 'freqtrade:develop' into develop 2024-05-26 15:59:29 +02:00
Simon Waiblinger
2a82e00857 Merge branch 'freqtrade:develop' into develop 2024-05-24 20:47:41 +02:00
Matthias
0673f3ec6c Remove unused function 2024-05-18 16:46:17 +02:00
Matthias
d0eb55a0be Small type fixes 2024-05-18 16:45:49 +02:00
Joe Schr
1167917cf6 constants: add ranges for orderflow config properties 2024-05-17 16:14:54 +02:00
Joe Schr
8afcaeeed9 trades(): add lookahead warning to docstring 2024-05-17 15:58:29 +02:00
Joe Schr
ab7f8b3a0f imbalance_ratio: use ratio instead of percentage 2024-05-17 15:49:53 +02:00
Joe Schr
0460ce45ff ruff format: exchange/trades_load 2024-05-16 14:28:30 +02:00
Joe Schr
f99e8f18bc refresh_latest_trades: removes TODO 2024-05-16 14:10:08 +02:00
Joe Schr
839827c0d7 refresh_latest_trades: remove "-cached" from trades pair files 2024-05-16 14:08:02 +02:00
Joe Schr
d33a14aab1 test_refresh_latest_trades: removes TODO 2024-05-16 13:58:08 +02:00
Joe Schr
a56faf503b ruff format: orderflow / public trades 2024-05-15 17:09:32 +02:00
Joe Schr
6c696e14f0 test_refresh_latest_trades: mock datadir with tmp_path 2024-05-15 16:19:36 +02:00
Joe Schr
f87cd5daca Enables use_public_trades only in test_refresh_latest_trades 2024-05-15 14:57:22 +02:00
Joe Schr
b9035da981 Merge remote-tracking branch 'upstream/develop' into feature/fetch-public-trades 2024-05-15 14:43:00 +02:00
Joe Schr
ec9d1812c6 add test_refresh_latest_trades to test_exchange 2024-05-14 18:06:57 +02:00
Joe Schr
dd432ffbde cleanup ruff and isort errors 2024-05-14 17:28:07 +02:00
Joe Schr
10cbc76482 use timeframe_to_next_date and date to calculate candle_start/candle_end 2024-05-08 15:12:52 +02:00
Joe Schr
56b07386ae fix _now_is_time_to_refresh_trades so it checks for latest fetched trades 2024-05-08 15:12:42 +02:00
Matthias
69d098e265 Dataprovider test 2024-04-05 07:16:37 +02:00
Matthias
f32154f380 Exchange assert is only relevant for live mode. 2024-04-05 07:09:54 +02:00
Matthias
28e4711ee9 Enhance test for dataprovider 2024-04-05 07:07:12 +02:00
Matthias
e0f1b1e48e Attempt to reduce diff as much as possible 2024-04-05 06:53:48 +02:00
Matthias
34d3389b23 Avoid some unnecessary linebreaks 2024-04-05 06:45:12 +02:00
Matthias
843c68b072 Don't use noqa. 2024-04-05 06:41:46 +02:00
Matthias
59dee5f6da Update config test exception due to changes on dev 2024-04-05 06:41:40 +02:00
Matthias
63ac183e91 Merge branch 'develop' into feature/fetch-public-trades 2024-04-05 06:35:35 +02:00
Joe Schr
53702bfdfe fix: make until non-optional 2024-03-28 15:35:19 +01:00
Joe Schr
d226e7054c fix: remove unused stop_on_from_id 2024-03-28 15:26:28 +01:00
Matthias
f663b53ac9 Add basic config validation 2024-03-17 19:34:03 +01:00
Matthias
1d5f2b64a2 Add simple verification that orderflow is configured correctly 2024-03-17 19:31:29 +01:00
Matthias
7e387f96ab Fix comments in config sample 2024-03-16 19:03:56 +01:00
Matthias
b5307f8281 Fix bug caused by any typing 2024-03-16 17:19:01 +01:00
Matthias
21bca95b6a Group things logically in exchange class 2024-03-16 17:05:18 +01:00
Matthias
86fe765180 Improved naming on max_trades 2024-03-16 17:01:27 +01:00
Matthias
9020c3290c Fix imports after dev merge 2024-03-16 16:45:48 +01:00
Matthias
88e25df78c Merge branch 'develop' into feature/fetch-public-trades 2024-03-16 16:34:57 +01:00
Matthias
0f3d538f6c Avoid duplicate pandas imports 2024-03-16 16:26:17 +01:00
Matthias
bce5dc4a49 Simplify formatting 2024-03-16 16:23:20 +01:00
Joe Schr
c12e203054 Merge remote-tracking branch 'upstream/develop' into feature/fetch-public-trades 2024-03-11 12:29:00 +01:00
Joe Schr
6827e17d17 raise error if populate_dataframe_with_trades fails 2024-03-11 11:34:59 +01:00
Joe Schr
174c830b2a formatting changes 2024-03-11 11:34:45 +01:00
Joe Schr
1f6046df97 work through open TODOs 2024-03-11 11:34:03 +01:00
Joe Schr
6c1d70df89 Merge remote-tracking branch 'upstream/develop' into feature/fetch-public-trades 2024-03-05 17:29:24 +01:00
Matthias
baf2cf6967 Fix import error in one test case 2024-03-01 06:55:52 +01:00
TheJoeSchr
091d8275f5 Merge branch 'develop' into feature/fetch-public-trades 2024-02-27 11:27:18 +01:00
dependabot[bot]
9c0c578b03 Bump fastapi from 0.109.2 to 0.110.0
Bumps [fastapi](https://github.com/tiangolo/fastapi) from 0.109.2 to 0.110.0.
- [Release notes](https://github.com/tiangolo/fastapi/releases)
- [Commits](https://github.com/tiangolo/fastapi/compare/0.109.2...0.110.0)

---
updated-dependencies:
- dependency-name: fastapi
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-02-26 13:54:19 +01:00
dependabot[bot]
2b6a38bff6 Bump cryptography from 42.0.4 to 42.0.5
Bumps [cryptography](https://github.com/pyca/cryptography) from 42.0.4 to 42.0.5.
- [Changelog](https://github.com/pyca/cryptography/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/pyca/cryptography/compare/42.0.4...42.0.5)

---
updated-dependencies:
- dependency-name: cryptography
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-02-26 13:54:19 +01:00
Matthias
c66d7bc43b Add warning about excessive use of position_adjustment 2024-02-26 13:54:19 +01:00
dependabot[bot]
36fede76dc Bump nbconvert from 7.16.0 to 7.16.1
Bumps [nbconvert](https://github.com/jupyter/nbconvert) from 7.16.0 to 7.16.1.
- [Release notes](https://github.com/jupyter/nbconvert/releases)
- [Changelog](https://github.com/jupyter/nbconvert/blob/main/CHANGELOG.md)
- [Commits](https://github.com/jupyter/nbconvert/compare/v7.16.0...v7.16.1)

---
updated-dependencies:
- dependency-name: nbconvert
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-02-26 13:54:19 +01:00
dependabot[bot]
4b6eab2637 Bump pydantic from 2.6.1 to 2.6.2
Bumps [pydantic](https://github.com/pydantic/pydantic) from 2.6.1 to 2.6.2.
- [Release notes](https://github.com/pydantic/pydantic/releases)
- [Changelog](https://github.com/pydantic/pydantic/blob/main/HISTORY.md)
- [Commits](https://github.com/pydantic/pydantic/compare/v2.6.1...v2.6.2)

---
updated-dependencies:
- dependency-name: pydantic
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-02-26 13:54:19 +01:00
dependabot[bot]
8944615c0f Bump orjson from 3.9.14 to 3.9.15
Bumps [orjson](https://github.com/ijl/orjson) from 3.9.14 to 3.9.15.
- [Release notes](https://github.com/ijl/orjson/releases)
- [Changelog](https://github.com/ijl/orjson/blob/master/CHANGELOG.md)
- [Commits](https://github.com/ijl/orjson/compare/3.9.14...3.9.15)

---
updated-dependencies:
- dependency-name: orjson
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-02-26 13:54:19 +01:00
dependabot[bot]
27e0054603 Bump mkdocs-material from 9.5.9 to 9.5.11
Bumps [mkdocs-material](https://github.com/squidfunk/mkdocs-material) from 9.5.9 to 9.5.11.
- [Release notes](https://github.com/squidfunk/mkdocs-material/releases)
- [Changelog](https://github.com/squidfunk/mkdocs-material/blob/master/CHANGELOG)
- [Commits](https://github.com/squidfunk/mkdocs-material/compare/9.5.9...9.5.11)

---
updated-dependencies:
- dependency-name: mkdocs-material
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-02-26 13:54:19 +01:00
dependabot[bot]
cb00cd71b1 Bump the pytest group with 1 update
Bumps the pytest group with 1 update: [pytest](https://github.com/pytest-dev/pytest).


Updates `pytest` from 8.0.1 to 8.0.2
- [Release notes](https://github.com/pytest-dev/pytest/releases)
- [Changelog](https://github.com/pytest-dev/pytest/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/pytest-dev/pytest/compare/8.0.1...8.0.2)

---
updated-dependencies:
- dependency-name: pytest
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: pytest
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-02-26 13:54:19 +01:00
Matthias
1620c1edda Bump Docker Python version from 3.11.7 to 3.11.8 2024-02-26 13:54:19 +01:00
Matthias
74f01c4374 Clearer wallets variable/parameter wording 2024-02-26 13:54:19 +01:00
Matthias
0649fe3551 Update comment around funding fees 2024-02-26 13:54:19 +01:00
Matthias
b8117759d6 Enhance funding-fee call test to account for different timezones 2024-02-26 13:54:19 +01:00
Matthias
21eecb2170 Ensure pytz is updated regularily by pinning it 2024-02-26 13:54:19 +01:00
Matthias
f3f4a659e8 Improve some type safety 2024-02-26 13:54:19 +01:00
Matthias
7d9ecb7bea Add check to verify that "since" is properly respected. 2024-02-26 13:54:19 +01:00
Matthias
cfa8fd825d Remove pointless comment 2024-02-26 13:54:19 +01:00
Matthias
f16d1a707e chore: Remove wrong typehint 2024-02-26 13:54:19 +01:00
Matthias
983aefeab5 Remove duplicate pairlistmanager init 2024-02-26 13:54:19 +01:00
Matthias
426e7c48e4 Update typehint for candle_cache 2024-02-26 13:54:19 +01:00
Matthias
7db2367de9 Improve ohlcv pair cache with since_ms
avoids some rare bugs in more complex configurations.
2024-02-26 13:54:19 +01:00
Matthias
0b9e7be8f0 Fix range-stability filter downloading too little data 2024-02-26 13:54:19 +01:00
Matthias
392d5ae09a Use set to reduce iterations 2024-02-26 13:54:19 +01:00
dependabot[bot]
b9f361b33c Bump cryptography from 42.0.3 to 42.0.4
Bumps [cryptography](https://github.com/pyca/cryptography) from 42.0.3 to 42.0.4.
- [Changelog](https://github.com/pyca/cryptography/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/pyca/cryptography/compare/42.0.3...42.0.4)

---
updated-dependencies:
- dependency-name: cryptography
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-02-26 13:54:19 +01:00
Matthias
eb175eeeb7 Add type-hint to exchange_has dict 2024-02-26 13:54:19 +01:00
Matthias
acb34c5821 Bump ccxt to 4.2.47 2024-02-26 13:54:19 +01:00
Matthias
fc343984fc Fix some tests due to new method 2024-02-26 13:54:19 +01:00
Matthias
b18733831e Update "exchange_has" validation with new fallbacks 2024-02-26 13:54:19 +01:00
Matthias
35be790f59 Add test for fetch_order_emulated 2024-02-26 13:54:19 +01:00
Matthias
322a3a3bbd Add fetch_order_emulated to support exchanges without proper fetch_order method 2024-02-26 13:54:19 +01:00
dependabot[bot]
871fa255fc Bump tensorboard from 2.15.2 to 2.16.2
Bumps [tensorboard](https://github.com/tensorflow/tensorboard) from 2.15.2 to 2.16.2.
- [Release notes](https://github.com/tensorflow/tensorboard/releases)
- [Changelog](https://github.com/tensorflow/tensorboard/blob/master/RELEASE.md)
- [Commits](https://github.com/tensorflow/tensorboard/compare/2.15.2...2.16.2)

---
updated-dependencies:
- dependency-name: tensorboard
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-02-26 13:54:19 +01:00
xmatthias
0eb16023b1 chore: update pre-commit hooks 2024-02-26 13:54:19 +01:00
Matthias
80e9e200e3 Fix / improve styling in test class 2024-02-26 13:54:19 +01:00
Matthias
2de303e2b5 bump types-requests pre-commit 2024-02-26 13:54:19 +01:00
dependabot[bot]
45bf3c8d43 Bump the types group with 1 update
Bumps the types group with 1 update: [types-requests](https://github.com/python/typeshed).


Updates `types-requests` from 2.31.0.20240125 to 2.31.0.20240218
- [Commits](https://github.com/python/typeshed/commits)

---
updated-dependencies:
- dependency-name: types-requests
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: types
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-02-26 13:54:19 +01:00
dependabot[bot]
fca9147433 Bump ruff from 0.2.1 to 0.2.2
Bumps [ruff](https://github.com/astral-sh/ruff) from 0.2.1 to 0.2.2.
- [Release notes](https://github.com/astral-sh/ruff/releases)
- [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md)
- [Commits](https://github.com/astral-sh/ruff/compare/v0.2.1...v0.2.2)

---
updated-dependencies:
- dependency-name: ruff
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-02-26 13:54:19 +01:00
Matthias
c38c3c7191 Update sqlalchemy in pre-commit 2024-02-26 13:54:19 +01:00
dependabot[bot]
96efaca830 Bump sqlalchemy from 2.0.26 to 2.0.27
Bumps [sqlalchemy](https://github.com/sqlalchemy/sqlalchemy) from 2.0.26 to 2.0.27.
- [Release notes](https://github.com/sqlalchemy/sqlalchemy/releases)
- [Changelog](https://github.com/sqlalchemy/sqlalchemy/blob/main/CHANGES.rst)
- [Commits](https://github.com/sqlalchemy/sqlalchemy/commits)

---
updated-dependencies:
- dependency-name: sqlalchemy
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-02-26 13:54:19 +01:00
dependabot[bot]
82791bbb0f Bump pre-commit from 3.6.1 to 3.6.2
Bumps [pre-commit](https://github.com/pre-commit/pre-commit) from 3.6.1 to 3.6.2.
- [Release notes](https://github.com/pre-commit/pre-commit/releases)
- [Changelog](https://github.com/pre-commit/pre-commit/blob/main/CHANGELOG.md)
- [Commits](https://github.com/pre-commit/pre-commit/compare/v3.6.1...v3.6.2)

---
updated-dependencies:
- dependency-name: pre-commit
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-02-26 13:54:19 +01:00
dependabot[bot]
77e0dfd469 Bump scikit-learn from 1.4.0 to 1.4.1.post1
Bumps [scikit-learn](https://github.com/scikit-learn/scikit-learn) from 1.4.0 to 1.4.1.post1.
- [Release notes](https://github.com/scikit-learn/scikit-learn/releases)
- [Commits](https://github.com/scikit-learn/scikit-learn/compare/1.4.0...1.4.1.post1)

---
updated-dependencies:
- dependency-name: scikit-learn
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-02-26 13:54:19 +01:00
dependabot[bot]
e3a128f3c6 Bump orjson from 3.9.13 to 3.9.14
Bumps [orjson](https://github.com/ijl/orjson) from 3.9.13 to 3.9.14.
- [Release notes](https://github.com/ijl/orjson/releases)
- [Changelog](https://github.com/ijl/orjson/blob/master/CHANGELOG.md)
- [Commits](https://github.com/ijl/orjson/compare/3.9.13...3.9.14)

---
updated-dependencies:
- dependency-name: orjson
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-02-26 13:54:19 +01:00
Matthias
bb6c31c55a Improve formatting in drawdown calc 2024-02-26 13:54:19 +01:00
Matthias
b6c19252c9 Further increase test coverate of max_drawdown 2024-02-26 13:54:19 +01:00
dependabot[bot]
1b00f4ad45 Bump plotly from 5.18.0 to 5.19.0
Bumps [plotly](https://github.com/plotly/plotly.py) from 5.18.0 to 5.19.0.
- [Release notes](https://github.com/plotly/plotly.py/releases)
- [Changelog](https://github.com/plotly/plotly.py/blob/master/CHANGELOG.md)
- [Commits](https://github.com/plotly/plotly.py/compare/v5.18.0...v5.19.0)

---
updated-dependencies:
- dependency-name: plotly
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-02-26 13:54:19 +01:00
dependabot[bot]
9aa01c0201 Bump cryptography from 42.0.2 to 42.0.3
Bumps [cryptography](https://github.com/pyca/cryptography) from 42.0.2 to 42.0.3.
- [Changelog](https://github.com/pyca/cryptography/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/pyca/cryptography/compare/42.0.2...42.0.3)

---
updated-dependencies:
- dependency-name: cryptography
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-02-26 13:54:19 +01:00
dependabot[bot]
e65199d5fc Bump urllib3 from 2.2.0 to 2.2.1
Bumps [urllib3](https://github.com/urllib3/urllib3) from 2.2.0 to 2.2.1.
- [Release notes](https://github.com/urllib3/urllib3/releases)
- [Changelog](https://github.com/urllib3/urllib3/blob/main/CHANGES.rst)
- [Commits](https://github.com/urllib3/urllib3/compare/2.2.0...2.2.1)

---
updated-dependencies:
- dependency-name: urllib3
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-02-26 13:54:19 +01:00
dependabot[bot]
d5543302ea Bump the pytest group with 1 update
Bumps the pytest group with 1 update: [pytest](https://github.com/pytest-dev/pytest).


Updates `pytest` from 8.0.0 to 8.0.1
- [Release notes](https://github.com/pytest-dev/pytest/releases)
- [Changelog](https://github.com/pytest-dev/pytest/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/pytest-dev/pytest/compare/8.0.0...8.0.1)

---
updated-dependencies:
- dependency-name: pytest
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: pytest
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-02-26 13:54:19 +01:00
Matthias
9792e447e8 Fix bybit spot live tests 2024-02-26 13:54:19 +01:00
Matthias
b67f2ddb4e Update telegram help with new wording 2024-02-26 13:54:19 +01:00
Matthias
165003e17f Fail if unified account is detected. 2024-02-26 13:54:19 +01:00
Matthias
24735945fd Add log message for Bybit accout type 2024-02-26 13:54:19 +01:00
Matthias
0f4bffca9c Remove unused import 2024-02-26 13:54:19 +01:00
Matthias
440a843d06 Use "ohlcv_with_cache" for further pairlists 2024-02-26 13:54:19 +01:00
Matthias
6a68ced6ec Add explicit test for ohlcv_with_cache 2024-02-26 13:54:19 +01:00
Matthias
671426540e Refactor ohlcv caching to exchange class 2024-02-26 13:54:16 +01:00
Matthias
a19dafe8fa Update pairlist cache behavior in VolumePairList 2024-02-26 13:53:10 +01:00
Matthias
a0dc21e17c Enable caching for "filter only" Volumepairlist 2024-02-26 13:53:10 +01:00
Matthias
099996ced5 Add additional test case for VolumePairlist in range mode 2024-02-26 13:53:10 +01:00
Matthias
6da684258e enhance volumpairlist range test 2024-02-26 13:53:10 +01:00
Matthias
4c07d2fb86 Improve validate_exchange
returns now both required and optional dependencies
2024-02-26 13:53:10 +01:00
William Wong
0a04cacc96 docs: Update sql_cheatsheet.md 2024-02-26 13:53:10 +01:00
Matthias
25ee332dc8 Don't tick on ttl cache 2024-02-26 13:53:10 +01:00
Matthias
103af46e70 Use Markdown V1 - update tests 2024-02-26 13:53:10 +01:00
CaffeinatedTech
51d799828b Change enter_tag, exit_reason, mix_tag performance messages from HTML to Markdown to fix some string encoding issues. 2024-02-26 13:53:10 +01:00
CaffeinatedTech
c99184af21 Added escaping to enter and exit tags on telegram performance messages. 2024-02-26 13:53:10 +01:00
Matthias
ec1b676ab4 Fix edge-case when calculating cagr
edge-case with leveraged trades - yielding a negative final balance.
closes #9820
2024-02-26 13:53:10 +01:00
Matthias
aa1d54993f Double newlines between functions ... 2024-02-26 13:53:10 +01:00
Matthias
ff5364ae5b Fix duplicate parentheses 2024-02-26 13:53:10 +01:00
Matthias
90c0b554aa Adjust tests for new fields 2024-02-26 13:53:10 +01:00
Matthias
f7eb14ae0e Add open_fill_date stuff to json schema 2024-02-26 13:53:10 +01:00
Matthias
d004509176 Simplify trade_model serializations 2024-02-26 13:53:10 +01:00
Matthias
cb95298936 Add dt_ts_none helper 2024-02-26 13:53:10 +01:00
Matthias
c491c2a8ee Adjust for ccxt exception hierarchy change
caused by https://github.com/ccxt/ccxt/pull/21035
2024-02-26 13:53:10 +01:00
Matthias
731fbe6f1e Improve log message 2024-02-26 13:53:10 +01:00
Matthias
e63da230d8 Simplify some pairlist conditions 2024-02-26 13:53:10 +01:00
Robert Davey
e696c92a0f Clarify processing_mode for RemotePairlist
No default value is specified in the docs for the processing_mode, making it unclear that the default behaviour is to filter out pairs, rather than append.
2024-02-26 13:53:10 +01:00
Matthias
27556f934e Don't load empty dataframes - skip these
closes #9811
2024-02-26 13:53:10 +01:00
Matthias
9a8ae99fc7 Add debug output showing the pair to be converted
part of #9811
2024-02-26 13:53:10 +01:00
dependabot[bot]
0a3b27622d Bump the pytest group with 2 updates
Bumps the pytest group with 2 updates: [pytest](https://github.com/pytest-dev/pytest) and [pytest-asyncio](https://github.com/pytest-dev/pytest-asyncio).


Updates `pytest` from 7.4.4 to 8.0.0
- [Release notes](https://github.com/pytest-dev/pytest/releases)
- [Changelog](https://github.com/pytest-dev/pytest/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/pytest-dev/pytest/compare/7.4.4...8.0.0)

Updates `pytest-asyncio` from 0.23.4 to 0.23.5
- [Release notes](https://github.com/pytest-dev/pytest-asyncio/releases)
- [Commits](https://github.com/pytest-dev/pytest-asyncio/compare/v0.23.4...v0.23.5)

---
updated-dependencies:
- dependency-name: pytest
  dependency-type: direct:development
  update-type: version-update:semver-major
  dependency-group: pytest
- dependency-name: pytest-asyncio
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: pytest
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-02-26 13:53:10 +01:00
dependabot[bot]
7c33c82102 Bump tensorboard from 2.15.1 to 2.15.2
Bumps [tensorboard](https://github.com/tensorflow/tensorboard) from 2.15.1 to 2.15.2.
- [Release notes](https://github.com/tensorflow/tensorboard/releases)
- [Changelog](https://github.com/tensorflow/tensorboard/blob/2.15.2/RELEASE.md)
- [Commits](https://github.com/tensorflow/tensorboard/compare/2.15.1...2.15.2)

---
updated-dependencies:
- dependency-name: tensorboard
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-02-26 13:53:10 +01:00
Matthias
0796f49761 telegram: ensure msg update test uses the correct edit_message_text call 2024-02-26 13:53:10 +01:00
Matthias
3341964417 use query.edit_message_text to simplify telegram class 2024-02-26 13:53:10 +01:00
dependabot[bot]
541b7a2800 Bump python-telegram-bot from 20.7 to 20.8
Bumps [python-telegram-bot](https://github.com/python-telegram-bot/python-telegram-bot) from 20.7 to 20.8.
- [Release notes](https://github.com/python-telegram-bot/python-telegram-bot/releases)
- [Changelog](https://github.com/python-telegram-bot/python-telegram-bot/blob/master/CHANGES.rst)
- [Commits](https://github.com/python-telegram-bot/python-telegram-bot/compare/v20.7...v20.8)

---
updated-dependencies:
- dependency-name: python-telegram-bot
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-02-26 13:53:07 +01:00
dependabot[bot]
aeb5e90678 Bump mkdocs-material from 9.5.8 to 9.5.9
Bumps [mkdocs-material](https://github.com/squidfunk/mkdocs-material) from 9.5.8 to 9.5.9.
- [Release notes](https://github.com/squidfunk/mkdocs-material/releases)
- [Changelog](https://github.com/squidfunk/mkdocs-material/blob/master/CHANGELOG)
- [Commits](https://github.com/squidfunk/mkdocs-material/compare/9.5.8...9.5.9)

---
updated-dependencies:
- dependency-name: mkdocs-material
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-02-26 13:51:39 +01:00
Matthias
f15b931d4a Update sqlalchemy pre-commit 2024-02-26 13:51:39 +01:00
dependabot[bot]
cf4f57182c Bump sqlalchemy from 2.0.25 to 2.0.26
Bumps [sqlalchemy](https://github.com/sqlalchemy/sqlalchemy) from 2.0.25 to 2.0.26.
- [Release notes](https://github.com/sqlalchemy/sqlalchemy/releases)
- [Changelog](https://github.com/sqlalchemy/sqlalchemy/blob/main/CHANGES.rst)
- [Commits](https://github.com/sqlalchemy/sqlalchemy/commits)

---
updated-dependencies:
- dependency-name: sqlalchemy
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-02-26 13:51:39 +01:00
dependabot[bot]
a51f7a31dd Bump tqdm from 4.66.1 to 4.66.2
Bumps [tqdm](https://github.com/tqdm/tqdm) from 4.66.1 to 4.66.2.
- [Release notes](https://github.com/tqdm/tqdm/releases)
- [Commits](https://github.com/tqdm/tqdm/compare/v4.66.1...v4.66.2)

---
updated-dependencies:
- dependency-name: tqdm
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-02-26 13:51:39 +01:00
dependabot[bot]
7f584966ae Bump ccxt from 4.2.39 to 4.2.42
Bumps [ccxt](https://github.com/ccxt/ccxt) from 4.2.39 to 4.2.42.
- [Release notes](https://github.com/ccxt/ccxt/releases)
- [Changelog](https://github.com/ccxt/ccxt/blob/master/CHANGELOG.md)
- [Commits](https://github.com/ccxt/ccxt/compare/4.2.39...4.2.42)

---
updated-dependencies:
- dependency-name: ccxt
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-02-26 13:51:39 +01:00
dependabot[bot]
ee4ff45c17 Bump pre-commit from 3.6.0 to 3.6.1
Bumps [pre-commit](https://github.com/pre-commit/pre-commit) from 3.6.0 to 3.6.1.
- [Release notes](https://github.com/pre-commit/pre-commit/releases)
- [Changelog](https://github.com/pre-commit/pre-commit/blob/main/CHANGELOG.md)
- [Commits](https://github.com/pre-commit/pre-commit/compare/v3.6.0...v3.6.1)

---
updated-dependencies:
- dependency-name: pre-commit
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-02-26 13:51:39 +01:00
dependabot[bot]
329039d095 Bump uvicorn from 0.27.0.post1 to 0.27.1
Bumps [uvicorn](https://github.com/encode/uvicorn) from 0.27.0.post1 to 0.27.1.
- [Release notes](https://github.com/encode/uvicorn/releases)
- [Changelog](https://github.com/encode/uvicorn/blob/master/CHANGELOG.md)
- [Commits](https://github.com/encode/uvicorn/compare/0.27.0.post1...0.27.1)

---
updated-dependencies:
- dependency-name: uvicorn
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-02-26 13:51:39 +01:00
Matthias
82771cf85c Slightly improve memory-usage of kraken-convert 2024-02-26 13:51:39 +01:00
Matthias
34b046355a Allow wildcards for pairs filter 2024-02-26 13:51:39 +01:00
Matthias
4351d93f23 Allow limiting kraken pairs to --pairs selection 2024-02-26 13:51:39 +01:00
Matthias
bbd68a5d0d Align new-config documentation examples
closes #9790
2024-02-26 13:51:39 +01:00
dependabot[bot]
2d7efca7cd Bump nbconvert from 7.14.2 to 7.16.0
Bumps [nbconvert](https://github.com/jupyter/nbconvert) from 7.14.2 to 7.16.0.
- [Release notes](https://github.com/jupyter/nbconvert/releases)
- [Changelog](https://github.com/jupyter/nbconvert/blob/main/CHANGELOG.md)
- [Commits](https://github.com/jupyter/nbconvert/compare/v7.14.2...v7.16.0)

---
updated-dependencies:
- dependency-name: nbconvert
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-02-26 13:51:39 +01:00
dependabot[bot]
df1f07397f Bump mkdocs-material from 9.5.7 to 9.5.8
Bumps [mkdocs-material](https://github.com/squidfunk/mkdocs-material) from 9.5.7 to 9.5.8.
- [Release notes](https://github.com/squidfunk/mkdocs-material/releases)
- [Changelog](https://github.com/squidfunk/mkdocs-material/blob/master/CHANGELOG)
- [Commits](https://github.com/squidfunk/mkdocs-material/compare/9.5.7...9.5.8)

---
updated-dependencies:
- dependency-name: mkdocs-material
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-02-26 13:51:39 +01:00
dependabot[bot]
9c72eedb75 Bump ruff from 0.2.0 to 0.2.1
Bumps [ruff](https://github.com/astral-sh/ruff) from 0.2.0 to 0.2.1.
- [Release notes](https://github.com/astral-sh/ruff/releases)
- [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md)
- [Commits](https://github.com/astral-sh/ruff/compare/v0.2.0...v0.2.1)

---
updated-dependencies:
- dependency-name: ruff
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-02-26 13:51:39 +01:00
dependabot[bot]
9a3955dc06 Bump numpy from 1.26.3 to 1.26.4
Bumps [numpy](https://github.com/numpy/numpy) from 1.26.3 to 1.26.4.
- [Release notes](https://github.com/numpy/numpy/releases)
- [Changelog](https://github.com/numpy/numpy/blob/main/doc/RELEASE_WALKTHROUGH.rst)
- [Commits](https://github.com/numpy/numpy/compare/v1.26.3...v1.26.4)

---
updated-dependencies:
- dependency-name: numpy
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-02-26 13:51:39 +01:00
dependabot[bot]
992faad4d5 Bump ccxt from 4.2.35 to 4.2.39
Bumps [ccxt](https://github.com/ccxt/ccxt) from 4.2.35 to 4.2.39.
- [Release notes](https://github.com/ccxt/ccxt/releases)
- [Changelog](https://github.com/ccxt/ccxt/blob/master/CHANGELOG.md)
- [Commits](https://github.com/ccxt/ccxt/compare/4.2.35...4.2.39)

---
updated-dependencies:
- dependency-name: ccxt
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-02-26 13:51:39 +01:00
dependabot[bot]
3ca0130a81 Bump pre-commit/action from 3.0.0 to 3.0.1
Bumps [pre-commit/action](https://github.com/pre-commit/action) from 3.0.0 to 3.0.1.
- [Release notes](https://github.com/pre-commit/action/releases)
- [Commits](https://github.com/pre-commit/action/compare/v3.0.0...v3.0.1)

---
updated-dependencies:
- dependency-name: pre-commit/action
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-02-26 13:51:39 +01:00
Matthias
705ee7d2f4 chore: add dependency groups for regular updates,
reschedule to run at 3am UTC (hope this works now ...)
2024-02-26 13:51:39 +01:00
Matthias
5dd856af6e Allow int as trade-id parameter
closes #9780
2024-02-26 13:51:39 +01:00
Stefano Ariestasia
5b13540bc9 fix strategy-updater docs 2024-02-26 13:51:39 +01:00
Matthias
e84bc14944 Fix wording fully. 2024-02-26 13:51:39 +01:00
Shane
caf169cabc fix: logical error
Fix logical error in the conditional checks for model classes. The `elif` statement that looks for "lightgbm.sklearn" or "xgb" in the model class string is now broken into two separate conditions because the old condition would always evaluate to `True` due to the non-empty string "xgb".
2024-02-26 13:51:39 +01:00
Matthias
51a4d25ae3 chore: Update ordering of requirements in setup.py 2024-02-26 13:51:39 +01:00
Matthias
52c7105554 Bump technical to 1.4.3 2024-02-26 13:51:39 +01:00
xmatthias
cc9d4d3f08 chore: update pre-commit hooks 2024-02-26 13:51:39 +01:00
Matthias
1255517c5f update tool.ruff configuration to match 2.0 version 2024-02-26 13:51:39 +01:00
Matthias
3e89343b43 Remove unused argument 2024-02-26 13:51:39 +01:00
dependabot[bot]
5b988784df Bump ruff from 0.1.15 to 0.2.0
Bumps [ruff](https://github.com/astral-sh/ruff) from 0.1.15 to 0.2.0.
- [Release notes](https://github.com/astral-sh/ruff/releases)
- [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md)
- [Commits](https://github.com/astral-sh/ruff/compare/v0.1.15...v0.2.0)

---
updated-dependencies:
- dependency-name: ruff
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-02-26 13:51:39 +01:00
dependabot[bot]
a11aacc131 Bump pydantic from 2.5.3 to 2.6.1
Bumps [pydantic](https://github.com/pydantic/pydantic) from 2.5.3 to 2.6.1.
- [Release notes](https://github.com/pydantic/pydantic/releases)
- [Changelog](https://github.com/pydantic/pydantic/blob/main/HISTORY.md)
- [Commits](https://github.com/pydantic/pydantic/compare/v2.5.3...v2.6.1)

---
updated-dependencies:
- dependency-name: pydantic
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-02-26 13:51:39 +01:00
dependabot[bot]
470a05130b Bump orjson from 3.9.12 to 3.9.13
Bumps [orjson](https://github.com/ijl/orjson) from 3.9.12 to 3.9.13.
- [Release notes](https://github.com/ijl/orjson/releases)
- [Changelog](https://github.com/ijl/orjson/blob/master/CHANGELOG.md)
- [Commits](https://github.com/ijl/orjson/compare/3.9.12...3.9.13)

---
updated-dependencies:
- dependency-name: orjson
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-02-26 13:51:39 +01:00
dependabot[bot]
43e23d2520 Bump fastapi from 0.109.0 to 0.109.2
Bumps [fastapi](https://github.com/tiangolo/fastapi) from 0.109.0 to 0.109.2.
- [Release notes](https://github.com/tiangolo/fastapi/releases)
- [Commits](https://github.com/tiangolo/fastapi/compare/0.109.0...0.109.2)

---
updated-dependencies:
- dependency-name: fastapi
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-02-26 13:51:39 +01:00
dependabot[bot]
1a79dc16f8 Bump cryptography from 42.0.1 to 42.0.2
Bumps [cryptography](https://github.com/pyca/cryptography) from 42.0.1 to 42.0.2.
- [Changelog](https://github.com/pyca/cryptography/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/pyca/cryptography/compare/42.0.1...42.0.2)

---
updated-dependencies:
- dependency-name: cryptography
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-02-26 13:51:39 +01:00
dependabot[bot]
ef5b71dc12 Bump peter-evans/create-pull-request from 5 to 6
Bumps [peter-evans/create-pull-request](https://github.com/peter-evans/create-pull-request) from 5 to 6.
- [Release notes](https://github.com/peter-evans/create-pull-request/releases)
- [Commits](https://github.com/peter-evans/create-pull-request/compare/v5...v6)

---
updated-dependencies:
- dependency-name: peter-evans/create-pull-request
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-02-26 13:51:39 +01:00
dependabot[bot]
d4e1b22c82 Bump mkdocs-material from 9.5.6 to 9.5.7
Bumps [mkdocs-material](https://github.com/squidfunk/mkdocs-material) from 9.5.6 to 9.5.7.
- [Release notes](https://github.com/squidfunk/mkdocs-material/releases)
- [Changelog](https://github.com/squidfunk/mkdocs-material/blob/master/CHANGELOG)
- [Commits](https://github.com/squidfunk/mkdocs-material/compare/9.5.6...9.5.7)

---
updated-dependencies:
- dependency-name: mkdocs-material
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-02-26 13:51:39 +01:00
dependabot[bot]
693ca56fb2 Bump aiohttp from 3.9.2 to 3.9.3
Bumps [aiohttp](https://github.com/aio-libs/aiohttp) from 3.9.2 to 3.9.3.
- [Release notes](https://github.com/aio-libs/aiohttp/releases)
- [Changelog](https://github.com/aio-libs/aiohttp/blob/master/CHANGES.rst)
- [Commits](https://github.com/aio-libs/aiohttp/compare/v3.9.2...v3.9.3)

---
updated-dependencies:
- dependency-name: aiohttp
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-02-26 13:51:39 +01:00
dependabot[bot]
9c70c65e03 Bump ccxt from 4.2.25 to 4.2.35
Bumps [ccxt](https://github.com/ccxt/ccxt) from 4.2.25 to 4.2.35.
- [Release notes](https://github.com/ccxt/ccxt/releases)
- [Changelog](https://github.com/ccxt/ccxt/blob/master/CHANGELOG.md)
- [Commits](https://github.com/ccxt/ccxt/compare/4.2.25...4.2.35)

---
updated-dependencies:
- dependency-name: ccxt
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-02-26 13:51:39 +01:00
dependabot[bot]
4a8553beb1 Bump urllib3 from 2.1.0 to 2.2.0
Bumps [urllib3](https://github.com/urllib3/urllib3) from 2.1.0 to 2.2.0.
- [Release notes](https://github.com/urllib3/urllib3/releases)
- [Changelog](https://github.com/urllib3/urllib3/blob/main/CHANGES.rst)
- [Commits](https://github.com/urllib3/urllib3/compare/2.1.0...2.2.0)

---
updated-dependencies:
- dependency-name: urllib3
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-02-26 13:51:39 +01:00
dependabot[bot]
0a97d03a76 Bump uvicorn from 0.27.0 to 0.27.0.post1
Bumps [uvicorn](https://github.com/encode/uvicorn) from 0.27.0 to 0.27.0.post1.
- [Release notes](https://github.com/encode/uvicorn/releases)
- [Changelog](https://github.com/encode/uvicorn/blob/master/CHANGELOG.md)
- [Commits](https://github.com/encode/uvicorn/compare/0.27.0...0.27.0.post1)

---
updated-dependencies:
- dependency-name: uvicorn
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-02-26 13:51:39 +01:00
Matthias
c1eadb17d9 Update Tests data to work with new cached levtiers 2024-02-26 13:50:50 +01:00
Matthias
7bfb6a0c65 Update cached binance leverage tiers 2024-02-26 13:50:50 +01:00
Matthias
d530dd5900 Improve formatting of leverage
closes #9759
2024-02-26 13:50:50 +01:00
Matthias
79066c3d3c enable sub-minute backtest detail timeframes
closes #9635
2024-02-26 13:50:50 +01:00
Joe Schr
d15f17a03f chore: remove unused parameter pairs from populate_dataframe_with_trades 2024-02-26 12:00:36 +01:00
Joe Schr
6bdf6bed7b fix tests: add comments 2024-02-26 11:53:55 +01:00
Joe Schr
5b637bc9fc tests: use orderflow row that actually has stacked imbalances 2024-02-26 11:22:24 +01:00
Joe Schr
3df04008d6 fix tests: move orderflow tests into own dir 2024-02-26 11:09:08 +01:00
Joe Schr
b15e47ded4 fix tests: use testdatadir 2024-02-26 10:57:12 +01:00
Joe Schr
c4a024e627 Improve docs 2024-02-20 20:12:50 +01:00
Joe Schr
7248f20938 Direct import to avoid circular import error 2024-02-13 12:00:24 +01:00
Joe Schr
3a1bb83f99 EOF fix 2024-02-13 11:32:58 +01:00
Joe Schr
7296ce72cb Adds more infos to docs 2024-02-13 11:28:28 +01:00
Joe Schr
b68afb4063 Fix markdown 2024-02-13 10:54:59 +01:00
Joe Schr
bff93e31c8 Moves orderflow logic to it's own file 2024-02-12 13:45:56 +01:00
Joe Schr
64e9784d1f Remove formatting changes 2024-02-12 13:45:56 +01:00
Joe Schr
d7b88194e0 Resolve various issues and comments 2024-02-12 13:45:56 +01:00
Joe Schr
6e7a536c7a Replaces public_trades_to_dataframe with trades_list_to_df 2024-02-12 13:45:56 +01:00
Joe Schr
c610c44a43 Removes unrequired drop_incomplete 2024-02-12 12:12:20 +01:00
Joe Schr
a7e4a5e2dc Removes clean_duplicate_trades 2024-02-12 12:11:52 +01:00
Joe Schr
c85ded14d1 Extract _if_enabled_populate_trades 2024-02-12 10:18:17 +01:00
Joe Schr
71e36be34b Use get_historic_trades directly 2024-02-12 10:10:45 +01:00
Joe Schr
aab3c07b87 Use _max_trades_candle_limit directly 2024-02-12 10:10:36 +01:00
Joe Schr
50070bc2ca Removes unused import 2024-02-12 09:39:09 +01:00
Joe Schr
e60b997fd0 Pass on missed argument stop_on_from_id 2024-02-12 09:38:49 +01:00
Joe Schr
e8714d52cd Removes nonsensical if gate 2024-02-12 09:31:37 +01:00
Joe Schr
0a4da26f2d Resolve using trades directly from trades_load when backtesting 2024-02-12 09:29:30 +01:00
Joe Schr
eaa85e8651 Removes do_plot and old comments 2024-02-11 13:16:16 +01:00
Joe Schr
0fd2aca47e Remove if since 2024-02-11 13:14:17 +01:00
Joe Schr
e8c911e7b4 Remove since/until superfluous arguments 2024-02-11 13:04:39 +01:00
Matthias
d23079f837 improve tests slighly 2024-02-10 20:13:17 +01:00
Matthias
fc15f98b80 Reduce unnecessary newlines 2024-02-10 17:45:03 +01:00
Matthias
4b0383f197 Fix overly long lines 2024-02-10 17:40:24 +01:00
Matthias
a216a08f09 Formatting ... 2024-02-10 17:29:17 +01:00
Matthias
7ae69a9cde update imports 2024-02-10 17:27:11 +01:00
Matthias
cfcc8f9fde Ensure docs are rendered in the navigation pane 2024-02-10 17:26:59 +01:00
Joe Schr
849413c5ea Changes scale from type int to float 2024-02-10 11:53:40 +01:00
Joe Schr
4ae63d7ecb Fix superfluous formatting 2024-02-09 13:15:12 +01:00
Joe Schr
9ec45ce042 Ruff fix 2024-02-08 19:48:53 +01:00
Joe Schr
3d92b40ad3 Ruff fix: E303 too many blank lines 2024-02-08 19:48:53 +01:00
Joe Schr
5b264d66e0 Ruff and flake fixes 2024-02-08 19:38:21 +01:00
Joe Schr
c40f3d91d4 Ruff fix 2024-02-08 19:06:43 +01:00
Joe Schr
1a0610f3e4 mypy fixes 2024-02-08 12:11:10 +01:00
Joe Schr
14fb29516a Removes unused code path 2024-02-08 11:56:57 +01:00
Joe Schr
0647ce59e7 Fix error if until is undefined 2024-02-08 11:06:15 +01:00
Joe Schr
2925a2a2fa Fix regression BaseException 2024-02-07 17:39:49 +01:00
Joe Schr
d6e3464973 Flake8 fix 2024-02-07 13:39:02 +01:00
Joe Schr
ca8cb73efa Ruff fixes 2024-02-07 13:37:17 +01:00
Joe Schr
69eb35deff Ruff fixes 2024-02-07 13:35:20 +01:00
Joe Schr
b8f92ecc52 Ruff fixes 2024-02-07 13:23:43 +01:00
Joe Schr
118ca784e8 Adds TRADESResponse 2024-02-07 13:20:39 +01:00
Joe Schr
634e81c7e0 Fix ruff 2024-02-07 13:10:04 +01:00
Joe Schr
79074ea4b3 Fix untrue ruff error by adding line ignore 2024-02-07 12:51:18 +01:00
Joe Schr
39ba6fe56b Ruff --fix 2024-02-07 12:48:15 +01:00
Joe Schr
72a20e9928 Ruff changes for clean_duplicate_trades, populate_dataframe_with_trades, public_trades_to_dataframe 2024-02-07 12:42:30 +01:00
Joe Schr
b117f1b474 Fix superfluous changes 2024-02-07 12:30:50 +01:00
Joe Schr
e6c1c3d60b Fix immediate rename of argument 2024-02-07 12:30:50 +01:00
Joe Schr
9c070431e1 Fix isort after ruff changes 2024-02-07 12:30:48 +01:00
Joe Schr
f61c75ffcc Fix isort imports 2024-02-06 20:35:16 +01:00
Joe Schr
3ae5667684 Fix merge regression regarding _pairs_last_refresh_time 2024-02-06 20:23:10 +01:00
Joe Schr
c04cce52ea Fix unnecessary deep intend 2024-02-06 20:13:23 +01:00
Joe Schr
aa663b926a Fix tests for use public trades 2024-02-06 14:33:13 +01:00
Joe Schr
1f783b2995 Start writing orderflow documentation 2024-02-06 14:10:18 +01:00
TheJoeSchr
5487e02ba2 Merge branch 'develop' into feature/fetch-public-trades 2024-02-02 15:14:04 +01:00
Joe Schr
8337bf3c47 Fix typo 2024-02-02 15:12:05 +01:00
TheJoeSchr
0153fd8d70 Update constants.py
Fix formatting change
2024-02-02 14:59:45 +01:00
Joe Schr
f6a8e03b59 Remove invoke self code for test_converter_public_trades 2024-02-02 14:54:28 +01:00
Joe Schr
43645729a0 Don't fetch trades for informatitve pairs 2024-02-02 14:33:45 +01:00
Joe Schr
6aaf5d6069 Explain why not using IDataHandler 2024-02-02 14:17:18 +01:00
Joe Schr
e405c42097 Copy trades dataframe directly instead of using deepcopy 2024-02-02 14:15:17 +01:00
Joe Schr
62cec9f043 Revert "Add .envrc to .gitignore"
This reverts commit 1f0077b1b5.
2024-02-02 14:03:42 +01:00
Joe Schr
b79aeb0a0d Shrink public trades testdata by using BCH 2024-02-01 13:42:58 +01:00
Joe Schr
2833169955 Merge remote-tracking branch 'upstream/develop' into feature/fetch-public-trades 2024-02-01 11:46:38 +01:00
Joe Schr
1f0077b1b5 Add .envrc to .gitignore
Affected files:
2024-02-01 11:41:00 +01:00
Joe Schr
18be79c906 Merge remote-tracking branch 'upstream/develop' into feature/fetch-public-trades 2023-12-18 10:34:20 +01:00
Joe Schr
1a4eabc0bb converter: use new trades_df_remove_duplicates 2023-10-24 12:22:23 +02:00
Joe Schr
6243c0e4bb exchange: fix import of clean_ohlcv_dataframe, raise exception when no trades received 2023-10-24 12:21:20 +02:00
Joe Schr
bb8ced525a exchange: re-add hardcoded required candle call count max 2023-10-24 12:20:01 +02:00
Joe Schr
8adf776218 fix imports for orderflow 2023-10-23 13:39:20 +02:00
Joe Schr
2c995977e8 exchange: fix last arrow use 2023-10-23 13:39:20 +02:00
Joe Schr
0c9df2ed61 exchange: removes duplicate _now_is_time_to_refresh_trades method 2023-10-23 11:17:42 +02:00
Joe Schr
4ef901e5e3 add back DEFAULT_ORDERFLOW_COLUMNS 2023-10-23 11:00:38 +02:00
Joe Schr
d514d3aec1 fix docstring back 2023-10-23 10:58:24 +02:00
Joe Schr
d4890eade2 exchange: re-remove arrow use 2023-10-23 10:50:00 +02:00
Joe Schr
a81a3be8d6 Fix imports and handling of trade regarding changes from PR#9065 2023-10-23 10:16:59 +02:00
TheJoeSchr
9f507e0146 Update converter.py, revert random formatting changes 2023-10-09 11:37:56 +02:00
Joe Schr
a9bd9b506b use fetch_trades' public trades to populate dataframe 2023-10-09 11:37:56 +02:00
TheJoeSchr
4478f72492 Update converter.py, revert random formatting changes 2023-10-09 11:34:31 +02:00
Joe Schr
1530bb6a40 fix: unfinished trades data for last candle 2023-10-09 11:34:31 +02:00
Joe Schr
2e1c661449 fix: remove obsolete infer_datetime 2023-10-09 11:34:31 +02:00
Joe Schr
387a36e730 fix: fetches only every second OHLCV candle 2023-10-09 11:34:31 +02:00
Joe Schr
4abac1364a refactor(move function): refresh_latest_trades into dataprovider
needed here to be used for call before analyze
also removes need for internal exchange function checking if
public_trades is enabled
2023-10-09 11:34:30 +02:00
Joe Schr
64a072e207 Converter: fix wrong return type 2023-10-09 11:34:30 +02:00
Joe Schr
b0074cbf8b Converter: log exception instead of error 2023-10-09 11:34:30 +02:00
Joe Schr
33af450034 tests: replace load config from file with static dict 2023-10-09 11:34:30 +02:00
Joe Schr
bdca2ac96f tests: removes cached and stratgey specific tests 2023-10-09 11:34:30 +02:00
Joe Schr
0796bfadd5 optimize and fix issues with refresh_latest_trades
return types, timings and other issues
2023-10-09 11:34:30 +02:00
Joe Schr
d96f314f16 converter: revert cache for public trades because of memleak 2023-10-09 11:34:29 +02:00
Joe Schr
1bc206ea8e adds tests for public trades branch (no data, too big) 2023-10-09 11:34:29 +02:00
Joe Schr
070d28b6d8 Exchange: make required_candle_call_count configurable 2023-10-09 11:34:29 +02:00
Joe Schr
0f4e147035 use fetch_trades' public trades to populate dataframe 2023-10-09 11:34:29 +02:00
413 changed files with 42016 additions and 15556 deletions

View File

@@ -1,9 +1,14 @@
version: 2
updates:
- package-ecosystem: docker
directory: "/"
directories:
- "/"
- "/docker"
schedule:
interval: daily
ignore:
- dependency-name: "*"
update-types: ["version-update:semver-major"]
open-pull-requests-limit: 10
- package-ecosystem: pip

View File

@@ -32,7 +32,7 @@ jobs:
run: python build_helpers/binance_update_lev_tiers.py
- uses: peter-evans/create-pull-request@v6
- uses: peter-evans/create-pull-request@v7
with:
token: ${{ secrets.REPO_SCOPED_TOKEN }}
add-paths: freqtrade/exchange/binance_leverage_tiers.json

View File

@@ -25,7 +25,7 @@ jobs:
strategy:
matrix:
os: [ "ubuntu-20.04", "ubuntu-22.04", "ubuntu-24.04" ]
python-version: ["3.9", "3.10", "3.11", "3.12"]
python-version: ["3.10", "3.11", "3.12"]
steps:
- uses: actions/checkout@v4
@@ -46,7 +46,7 @@ jobs:
uses: actions/cache@v4
with:
path: ~/.cache/pip
key: test-${{ matrix.os }}-${{ matrix.python-version }}-pip
key: pip-${{ matrix.python-version }}-ubuntu
- name: TA binary *nix
if: steps.cache.outputs.cache-hit != 'true'
@@ -55,7 +55,7 @@ jobs:
- name: Installation - *nix
run: |
python -m pip install --upgrade "pip<=24.0" wheel
python -m pip install --upgrade pip wheel
export LD_LIBRARY_PATH=${HOME}/dependencies/lib:$LD_LIBRARY_PATH
export TA_LIBRARY_PATH=${HOME}/dependencies/lib
export TA_INCLUDE_PATH=${HOME}/dependencies/include
@@ -68,11 +68,17 @@ jobs:
python build_helpers/freqtrade_client_version_align.py
- name: Tests
if: (!(runner.os == 'Linux' && matrix.python-version == '3.12' && matrix.os == 'ubuntu-22.04'))
run: |
pytest --random-order
- name: Tests with Coveralls
if: (runner.os == 'Linux' && matrix.python-version == '3.12' && matrix.os == 'ubuntu-22.04')
run: |
pytest --random-order --cov=freqtrade --cov=freqtrade_client --cov-config=.coveragerc
- name: Coveralls
if: (runner.os == 'Linux' && matrix.python-version == '3.10' && matrix.os == 'ubuntu-22.04')
if: (runner.os == 'Linux' && matrix.python-version == '3.12' && matrix.os == 'ubuntu-22.04')
env:
# Coveralls token. Not used as secret due to github not providing secrets to forked repositories
COVERALLS_REPO_TOKEN: 6D1m0xupS3FgutfuGao8keFf9Hc0FpIXu
@@ -80,6 +86,11 @@ jobs:
# Allow failure for coveralls
coveralls || true
- name: Run json schema extract
# This should be kept before the repository check to ensure that the schema is up-to-date
run: |
python build_helpers/extract_config_json_schema.py
- name: Check for repository changes
run: |
if [ -n "$(git status --porcelain)" ]; then
@@ -133,11 +144,8 @@ jobs:
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ "macos-12", "macos-13", "macos-14" ]
python-version: ["3.9", "3.10", "3.11", "3.12"]
exclude:
- os: "macos-14"
python-version: "3.9"
os: [ "macos-13", "macos-14", "macos-15" ]
python-version: ["3.10", "3.11", "3.12"]
steps:
- uses: actions/checkout@v4
@@ -159,7 +167,7 @@ jobs:
uses: actions/cache@v4
with:
path: ~/Library/Caches/pip
key: ${{ matrix.os }}-${{ matrix.python-version }}-pip
key: pip-${{ matrix.os }}-${{ matrix.python-version }}
- name: TA binary *nix
if: steps.cache.outputs.cache-hit != 'true'
@@ -188,11 +196,11 @@ jobs:
rm /usr/local/bin/python3.11-config || true
rm /usr/local/bin/python3.12-config || true
brew install hdf5 c-blosc libomp
brew install libomp
- name: Installation (python)
run: |
python -m pip install --upgrade "pip<=24.0" wheel
python -m pip install --upgrade pip wheel
export LD_LIBRARY_PATH=${HOME}/dependencies/lib:$LD_LIBRARY_PATH
export TA_LIBRARY_PATH=${HOME}/dependencies/lib
export TA_INCLUDE_PATH=${HOME}/dependencies/include
@@ -258,7 +266,7 @@ jobs:
strategy:
matrix:
os: [ windows-latest ]
python-version: ["3.9", "3.10", "3.11", "3.12"]
python-version: ["3.10", "3.11", "3.12"]
steps:
- uses: actions/checkout@v4
@@ -272,7 +280,7 @@ jobs:
uses: actions/cache@v4
with:
path: ~\AppData\Local\pip\Cache
key: ${{ matrix.os }}-${{ matrix.python-version }}-pip
key: pip-${{ matrix.os }}-${{ matrix.python-version }}
- name: Installation
run: |
@@ -379,7 +387,6 @@ jobs:
- name: Documentation build
run: |
pip install -r docs/requirements-docs.txt
pip install mkdocs
mkdocs build
- name: Discord notification
@@ -413,7 +420,7 @@ jobs:
uses: actions/cache@v4
with:
path: ~/.cache/pip
key: test-${{ matrix.os }}-${{ matrix.python-version }}-pip
key: pip-3.12-ubuntu
- name: TA binary *nix
if: steps.cache.outputs.cache-hit != 'true'
@@ -422,7 +429,7 @@ jobs:
- name: Installation - *nix
run: |
python -m pip install --upgrade "pip<=24.0" wheel
python -m pip install --upgrade pip wheel
export LD_LIBRARY_PATH=${HOME}/dependencies/lib:$LD_LIBRARY_PATH
export TA_LIBRARY_PATH=${HOME}/dependencies/lib
export TA_INCLUDE_PATH=${HOME}/dependencies/include
@@ -533,12 +540,12 @@ jobs:
- name: Publish to PyPI (Test)
uses: pypa/gh-action-pypi-publish@v1.9.0
uses: pypa/gh-action-pypi-publish@v1.12.2
with:
repository-url: https://test.pypi.org/legacy/
- name: Publish to PyPI
uses: pypa/gh-action-pypi-publish@v1.9.0
uses: pypa/gh-action-pypi-publish@v1.12.2
deploy-docker:

55
.github/workflows/deploy-docs.yml vendored Normal file
View File

@@ -0,0 +1,55 @@
name: Build Documentation
on:
push:
branches:
- develop
release:
types: [published]
# disable permissions for all of the available permissions
permissions: {}
jobs:
build-docs:
permissions:
contents: write # for mike to push
name: Deploy Docs through mike
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.12'
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -r docs/requirements-docs.txt
- name: Fetch gh-pages branch
run: |
git fetch origin gh-pages --depth=1
- name: Configure Git user
run: |
git config --local user.email "github-actions[bot]@users.noreply.github.com"
git config --local user.name "github-actions[bot]"
- name: Build and push Mike
if: ${{ github.event_name == 'push' }}
run: |
mike deploy ${{ github.ref_name }} latest --push --update-aliases
- name: Build and push Mike - Release
if: ${{ github.event_name == 'release' }}
run: |
mike deploy ${{ github.ref_name }} stable --push --update-aliases
- name: Show mike versions
run: |
mike list

View File

@@ -26,7 +26,7 @@ jobs:
- name: Run auto-update
run: pre-commit autoupdate
- uses: peter-evans/create-pull-request@v6
- uses: peter-evans/create-pull-request@v7
with:
token: ${{ secrets.REPO_SCOPED_TOKEN }}
add-paths: .pre-commit-config.yaml

2
.gitignore vendored
View File

@@ -114,3 +114,5 @@ target/
!config_examples/config_full.example.json
!config_examples/config_kraken.example.json
!config_examples/config_freqai.example.json
docker-compose-*.yml

View File

@@ -2,24 +2,24 @@
# See https://pre-commit.com/hooks.html for more hooks
repos:
- repo: https://github.com/pycqa/flake8
rev: "7.1.0"
rev: "7.1.1"
hooks:
- id: flake8
additional_dependencies: [Flake8-pyproject]
# stages: [push]
- repo: https://github.com/pre-commit/mirrors-mypy
rev: "v1.10.0"
rev: "v1.13.0"
hooks:
- id: mypy
exclude: build_helpers
additional_dependencies:
- types-cachetools==5.3.0.7
- types-cachetools==5.5.0.20240820
- types-filelock==3.2.7
- types-requests==2.32.0.20240622
- types-requests==2.32.0.20241016
- types-tabulate==0.9.0.20240106
- types-python-dateutil==2.9.0.20240316
- SQLAlchemy==2.0.31
- types-python-dateutil==2.9.0.20241003
- SQLAlchemy==2.0.36
# stages: [push]
- repo: https://github.com/pycqa/isort
@@ -31,12 +31,13 @@ repos:
- repo: https://github.com/charliermarsh/ruff-pre-commit
# Ruff version.
rev: 'v0.4.10'
rev: 'v0.8.0'
hooks:
- id: ruff
- id: ruff-format
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v4.6.0
rev: v5.0.0
hooks:
- id: end-of-file-fixer
exclude: |

View File

@@ -1,4 +1,4 @@
FROM python:3.12.4-slim-bookworm as base
FROM python:3.12.7-slim-bookworm as base
# Setup env
ENV LANG C.UTF-8
@@ -25,7 +25,7 @@ FROM base as python-deps
RUN apt-get update \
&& apt-get -y install build-essential libssl-dev git libffi-dev libgfortran5 pkg-config cmake gcc \
&& apt-get clean \
&& pip install --upgrade "pip<=24.0" wheel
&& pip install --upgrade pip wheel
# Install TA-lib
COPY build_helpers/* /tmp/

View File

@@ -30,8 +30,10 @@ Please read the [exchange specific notes](docs/exchanges.md) to learn about even
- [X] [Binance](https://www.binance.com/)
- [X] [Bitmart](https://bitmart.com/)
- [X] [BingX](https://bingx.com/invite/0EM9RX)
- [X] [Bybit](https://bybit.com/)
- [X] [Gate.io](https://www.gate.io/ref/6266643)
- [X] [HTX](https://www.htx.com/) (Former Huobi)
- [X] [Hyperliquid](https://hyperliquid.xyz/) (A decentralized exchange, or DEX)
- [X] [Kraken](https://kraken.com/)
- [X] [OKX](https://okx.com/) (Former OKEX)
- [ ] [potentially many others](https://github.com/ccxt/ccxt/). _(We cannot guarantee they will work)_
@@ -40,6 +42,7 @@ Please read the [exchange specific notes](docs/exchanges.md) to learn about even
- [X] [Binance](https://www.binance.com/)
- [X] [Gate.io](https://www.gate.io/ref/6266643)
- [X] [Hyperliquid](https://hyperliquid.xyz/) (A decentralized exchange, or DEX)
- [X] [OKX](https://okx.com/)
- [X] [Bybit](https://bybit.com/)
@@ -60,7 +63,7 @@ Please find the complete documentation on the [freqtrade website](https://www.fr
## Features
- [x] **Based on Python 3.9+**: For botting on any operating system - Windows, macOS and Linux.
- [x] **Based on Python 3.10+**: For botting on any operating system - Windows, macOS and Linux.
- [x] **Persistence**: Persistence is achieved through sqlite.
- [x] **Dry-run**: Run the bot without paying money.
- [x] **Backtesting**: Run a simulation of your buy/sell strategy.
@@ -86,41 +89,50 @@ For further (native) installation methods, please refer to the [Installation doc
```
usage: freqtrade [-h] [-V]
{trade,create-userdir,new-config,new-strategy,download-data,convert-data,convert-trade-data,list-data,backtesting,edge,hyperopt,hyperopt-list,hyperopt-show,list-exchanges,list-hyperopts,list-markets,list-pairs,list-strategies,list-timeframes,show-trades,test-pairlist,install-ui,plot-dataframe,plot-profit,webserver}
{trade,create-userdir,new-config,show-config,new-strategy,download-data,convert-data,convert-trade-data,trades-to-ohlcv,list-data,backtesting,backtesting-show,backtesting-analysis,edge,hyperopt,hyperopt-list,hyperopt-show,list-exchanges,list-markets,list-pairs,list-strategies,list-freqaimodels,list-timeframes,show-trades,test-pairlist,convert-db,install-ui,plot-dataframe,plot-profit,webserver,strategy-updater,lookahead-analysis,recursive-analysis}
...
Free, open source crypto trading bot
positional arguments:
{trade,create-userdir,new-config,new-strategy,download-data,convert-data,convert-trade-data,list-data,backtesting,edge,hyperopt,hyperopt-list,hyperopt-show,list-exchanges,list-hyperopts,list-markets,list-pairs,list-strategies,list-timeframes,show-trades,test-pairlist,install-ui,plot-dataframe,plot-profit,webserver}
{trade,create-userdir,new-config,show-config,new-strategy,download-data,convert-data,convert-trade-data,trades-to-ohlcv,list-data,backtesting,backtesting-show,backtesting-analysis,edge,hyperopt,hyperopt-list,hyperopt-show,list-exchanges,list-markets,list-pairs,list-strategies,list-freqaimodels,list-timeframes,show-trades,test-pairlist,convert-db,install-ui,plot-dataframe,plot-profit,webserver,strategy-updater,lookahead-analysis,recursive-analysis}
trade Trade module.
create-userdir Create user-data directory.
new-config Create new config
show-config Show resolved config
new-strategy Create new strategy
download-data Download backtesting data.
convert-data Convert candle (OHLCV) data from one format to
another.
convert-trade-data Convert trade data from one format to another.
trades-to-ohlcv Convert trade data to OHLCV data.
list-data List downloaded data.
backtesting Backtesting module.
backtesting-show Show past Backtest results
backtesting-analysis
Backtest Analysis module.
edge Edge module.
hyperopt Hyperopt module.
hyperopt-list List Hyperopt results
hyperopt-show Show details of Hyperopt results
list-exchanges Print available exchanges.
list-hyperopts Print available hyperopt classes.
list-markets Print markets on exchange.
list-pairs Print pairs on exchange.
list-strategies Print available strategies.
list-freqaimodels Print available freqAI models.
list-timeframes Print available timeframes for the exchange.
show-trades Show trades.
test-pairlist Test your pairlist configuration.
convert-db Migrate database to different system
install-ui Install FreqUI
plot-dataframe Plot candles with indicators.
plot-profit Generate plot showing profits.
webserver Webserver module.
strategy-updater updates outdated strategy files to the current version
lookahead-analysis Check for potential look ahead bias.
recursive-analysis Check for potential recursive formula issue.
optional arguments:
options:
-h, --help show this help message and exit
-V, --version show program's version number and exit
@@ -208,7 +220,7 @@ To run this bot we recommend you a cloud instance with a minimum of:
### Software requirements
- [Python >= 3.9](http://docs.python-guide.org/en/latest/starting/installation/)
- [Python >= 3.10](http://docs.python-guide.org/en/latest/starting/installation/)
- [pip](https://pip.pypa.io/en/stable/installing/)
- [git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git)
- [TA-Lib](https://ta-lib.github.io/ta-lib-python/)

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,17 @@
"""Script to extract the configuration json schema from config_schema.py file."""
from pathlib import Path
import rapidjson
from freqtrade.configuration.config_schema import CONF_SCHEMA
def extract_config_json_schema():
schema_filename = Path(__file__).parent / "schema.json"
with schema_filename.open("w") as f:
rapidjson.dump(CONF_SCHEMA, f, indent=2)
if __name__ == "__main__":
extract_config_json_schema()

View File

@@ -1,6 +1,6 @@
# vendored Wheels compiled via https://github.com/xmatthias/ta-lib-python/tree/ta_bundled_040
python -m pip install --upgrade "pip<=24.0" wheel
python -m pip install --upgrade pip wheel
$pyv = python -c "import sys; print(f'{sys.version_info.major}.{sys.version_info.minor}')"

1582
build_helpers/schema.json Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -1,4 +1,5 @@
{
"$schema": "https://schema.freqtrade.io/schema.json",
"max_open_trades": 3,
"stake_currency": "USDT",
"stake_amount": 0.05,

View File

@@ -1,4 +1,5 @@
{
"$schema": "https://schema.freqtrade.io/schema.json",
"trading_mode": "futures",
"margin_mode": "isolated",
"max_open_trades": 5,

View File

@@ -1,4 +1,5 @@
{
"$schema": "https://schema.freqtrade.io/schema.json",
"max_open_trades": 3,
"stake_currency": "BTC",
"stake_amount": 0.05,

View File

@@ -1,4 +1,5 @@
{
"$schema": "https://schema.freqtrade.io/schema.json",
"max_open_trades": 5,
"stake_currency": "EUR",
"stake_amount": 10,

View File

@@ -1,5 +1,4 @@
---
version: '3'
services:
freqtrade:
image: freqtradeorg/freqtrade:stable

View File

@@ -1,4 +1,4 @@
FROM python:3.11.8-slim-bookworm as base
FROM python:3.11.10-slim-bookworm as base
# Setup env
ENV LANG C.UTF-8
@@ -17,7 +17,7 @@ RUN mkdir /freqtrade \
&& chown ftuser:ftuser /freqtrade \
# Allow sudoers
&& echo "ftuser ALL=(ALL) NOPASSWD: /bin/chown" >> /etc/sudoers \
&& pip install --upgrade "pip<=24.0"
&& pip install --upgrade pip
WORKDIR /freqtrade

View File

@@ -1,5 +1,4 @@
---
version: '3'
services:
freqtrade:
image: freqtradeorg/freqtrade:stable_freqaitorch

View File

@@ -1,5 +1,4 @@
---
version: '3'
services:
ft_jupyterlab:
build:

View File

@@ -18,15 +18,13 @@ freqtrade backtesting -c <config.json> --timeframe <tf> --strategy <strategy_nam
```
This will tell freqtrade to output a pickled dictionary of strategy, pairs and corresponding
DataFrame of the candles that resulted in buy signals. Depending on how many buys your strategy
makes, this file may get quite large, so periodically check your `user_data/backtest_results`
folder to delete old exports.
DataFrame of the candles that resulted in entry and exit signals.
Depending on how many entries your strategy makes, this file may get quite large, so periodically check your `user_data/backtest_results` folder to delete old exports.
Before running your next backtest, make sure you either delete your old backtest results or run
backtesting with the `--cache none` option to make sure no cached results are used.
If all goes well, you should now see a `backtest-result-{timestamp}_signals.pkl` file in the
`user_data/backtest_results` folder.
If all goes well, you should now see a `backtest-result-{timestamp}_signals.pkl` and `backtest-result-{timestamp}_exited.pkl` files in the `user_data/backtest_results` folder.
To analyze the entry/exit tags, we now need to use the `freqtrade backtesting-analysis` command
with `--analysis-groups` option provided with space-separated arguments:
@@ -103,6 +101,10 @@ The indicators have to be present in your strategy's main DataFrame (either for
timeframe or for informative timeframes) otherwise they will simply be ignored in the script
output.
!!! Note "Indicator List"
The indicator values will be displayed for both entry and exit points. If `--indicator-list all` is specified,
only the indicators at the entry point will be shown to avoid excessively large lists, which could occur depending on the strategy.
There are a range of candle and trade-related fields that are included in the analysis so are
automatically accessible by including them on the indicator-list, and these include:
@@ -118,6 +120,53 @@ automatically accessible by including them on the indicator-list, and these incl
- **profit_ratio :** trade profit ratio
- **profit_abs :** absolute profit return of the trade
#### Sample Output for Indicator Values
```bash
freqtrade backtesting-analysis -c user_data/config.json --analysis-groups 0 --indicator-list chikou_span tenkan_sen
```
In this example,
we aim to display the `chikou_span` and `tenkan_sen` indicator values at both the entry and exit points of trades.
A sample output for indicators might look like this:
| pair | open_date | enter_reason | exit_reason | chikou_span (entry) | tenkan_sen (entry) | chikou_span (exit) | tenkan_sen (exit) |
|-----------|---------------------------|--------------|-------------|---------------------|--------------------|--------------------|-------------------|
| DOGE/USDT | 2024-07-06 00:35:00+00:00 | | exit_signal | 0.105 | 0.106 | 0.105 | 0.107 |
| BTC/USDT | 2024-08-05 14:20:00+00:00 | | roi | 54643.440 | 51696.400 | 54386.000 | 52072.010 |
As shown in the table, `chikou_span (entry)` represents the indicator value at the time of trade entry,
while `chikou_span (exit)` reflects its value at the time of exit.
This detailed view of indicator values enhances the analysis.
The `(entry)` and `(exit)` suffixes are added to indicators
to distinguish the values at the entry and exit points of the trade.
!!! Note "Trade-wide Indicators"
Certain trade-wide indicators do not have the `(entry)` or `(exit)` suffix. These indicators include: `pair`, `stake_amount`,
`max_stake_amount`, `amount`, `open_date`, `close_date`, `open_rate`, `close_rate`, `fee_open`, `fee_close`, `trade_duration`,
`profit_ratio`, `profit_abs`, `exit_reason`,`initial_stop_loss_abs`, `initial_stop_loss_ratio`, `stop_loss_abs`, `stop_loss_ratio`,
`min_rate`, `max_rate`, `is_open`, `enter_tag`, `leverage`, `is_short`, `open_timestamp`, `close_timestamp` and `orders`
#### Filtering Indicators Based on Entry or Exit Signals
The `--indicator-list` option, by default, displays indicator values for both entry and exit signals. To filter the indicator values exclusively for entry signals, you can use the `--entry-only` argument. Similarly, to display indicator values only at exit signals, use the `--exit-only` argument.
Example: Display indicator values at entry signals:
```bash
freqtrade backtesting-analysis -c user_data/config.json --analysis-groups 0 --indicator-list chikou_span tenkan_sen --entry-only
```
Example: Display indicator values at exit signals:
```bash
freqtrade backtesting-analysis -c user_data/config.json --analysis-groups 0 --indicator-list chikou_span tenkan_sen --exit-only
```
!!! note
When using these filters, the indicator names will not be suffixed with `(entry)` or `(exit)`.
### Filtering the trade output by date

View File

@@ -30,11 +30,17 @@ class SuperDuperHyperOptLoss(IHyperOptLoss):
"""
@staticmethod
def hyperopt_loss_function(results: DataFrame, trade_count: int,
min_date: datetime, max_date: datetime,
config: Config, processed: Dict[str, DataFrame],
backtest_stats: Dict[str, Any],
*args, **kwargs) -> float:
def hyperopt_loss_function(
*,
results: DataFrame,
trade_count: int,
min_date: datetime,
max_date: datetime,
config: Config,
processed: dict[str, DataFrame],
backtest_stats: dict[str, Any],
**kwargs,
) -> float:
"""
Objective function, returns smaller number for better results
This is the legacy algorithm (used until now in freqtrade).
@@ -97,7 +103,7 @@ class MyAwesomeStrategy(IStrategy):
SKDecimal(0.01, 0.20, decimals=3, name='roi_p3'),
]
def generate_roi_table(params: Dict) -> Dict[int, float]:
def generate_roi_table(params: Dict) -> dict[int, float]:
roi_table = {}
roi_table[0] = params['roi_p1'] + params['roi_p2'] + params['roi_p3']

152
docs/advanced-orderflow.md Normal file
View File

@@ -0,0 +1,152 @@
# Orderflow data
This guide walks you through utilizing public trade data for advanced orderflow analysis in Freqtrade.
!!! Warning "Experimental Feature"
The orderflow feature is currently in beta and may be subject to changes in future releases. Please report any issues or feedback on the [Freqtrade GitHub repository](https://github.com/freqtrade/freqtrade/issues).
!!! Warning "Performance"
Orderflow requires raw trades data. This data is rather large, and can cause a slow initial startup, when freqtrade needs to download the trades data for the last X candles. Additionally, enabling this feature will cause increased memory usage. Please ensure to have sufficient resources available.
## Getting Started
### Enable Public Trades
In your `config.json` file, set the `use_public_trades` option to true under the `exchange` section.
```json
"exchange": {
...
"use_public_trades": true,
}
```
### Configure Orderflow Processing
Define your desired settings for orderflow processing within the orderflow section of config.json. Here, you can adjust factors like:
- `cache_size`: How many previous orderflow candles are saved into cache instead of calculated every new candle
- `max_candles`: Filter how many candles would you like to get trades data for.
- `scale`: This controls the price bin size for the footprint chart.
- `stacked_imbalance_range`: Defines the minimum consecutive imbalanced price levels required for consideration.
- `imbalance_volume`: Filters out imbalances with volume below this threshold.
- `imbalance_ratio`: Filters out imbalances with a ratio (difference between ask and bid volume) lower than this value.
```json
"orderflow": {
"cache_size": 1000,
"max_candles": 1500,
"scale": 0.5,
"stacked_imbalance_range": 3, // needs at least this amount of imbalance next to each other
"imbalance_volume": 1, // filters out below
"imbalance_ratio": 3 // filters out ratio lower than
},
```
## Downloading Trade Data for Backtesting
To download historical trade data for backtesting, use the --dl-trades flag with the freqtrade download-data command.
```bash
freqtrade download-data -p BTC/USDT:USDT --timerange 20230101- --trading-mode futures --timeframes 5m --dl-trades
```
!!! Warning "Data availability"
Not all exchanges provide public trade data. For supported exchanges, freqtrade will warn you if public trade data is not available if you start downloading data with the `--dl-trades` flag.
## Accessing Orderflow Data
Once activated, several new columns become available in your dataframe:
``` python
dataframe["trades"] # Contains information about each individual trade.
dataframe["orderflow"] # Represents a footprint chart dict (see below)
dataframe["imbalances"] # Contains information about imbalances in the order flow.
dataframe["bid"] # Total bid volume
dataframe["ask"] # Total ask volume
dataframe["delta"] # Difference between ask and bid volume.
dataframe["min_delta"] # Minimum delta within the candle
dataframe["max_delta"] # Maximum delta within the candle
dataframe["total_trades"] # Total number of trades
dataframe["stacked_imbalances_bid"] # Price level of stacked bid imbalance
dataframe["stacked_imbalances_ask"] # Price level of stacked ask imbalance
```
You can access these columns in your strategy code for further analysis. Here's an example:
``` python
def populate_indicators(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
# Calculating cumulative delta
dataframe["cum_delta"] = cumulative_delta(dataframe["delta"])
# Accessing total trades
total_trades = dataframe["total_trades"]
...
def cumulative_delta(delta: Series):
cumdelta = delta.cumsum()
return cumdelta
```
### Footprint chart (`dataframe["orderflow"]`)
This column provides a detailed breakdown of buy and sell orders at different price levels, offering valuable insights into order flow dynamics. The `scale` parameter in your configuration determines the price bin size for this representation
The `orderflow` column contains a dict with the following structure:
``` output
{
"price": {
"bid_amount": 0.0,
"ask_amount": 0.0,
"bid": 0,
"ask": 0,
"delta": 0.0,
"total_volume": 0.0,
"total_trades": 0
}
}
```
#### Orderflow column explanation
- key: Price bin - binned at `scale` intervals
- `bid_amount`: Total volume bought at each price level.
- `ask_amount`: Total volume sold at each price level.
- `bid`: Number of buy orders at each price level.
- `ask`: Number of sell orders at each price level.
- `delta`: Difference between ask and bid volume at each price level.
- `total_volume`: Total volume (ask amount + bid amount) at each price level.
- `total_trades`: Total number of trades (ask + bid) at each price level.
By leveraging these features, you can gain valuable insights into market sentiment and potential trading opportunities based on order flow analysis.
### Raw trades data (`dataframe["trades"]`)
List with the individual trades that occurred during the candle. This data can be used for more granular analysis of order flow dynamics.
Each individual entry contains a dict with the following keys:
- `timestamp`: Timestamp of the trade.
- `date`: Date of the trade.
- `price`: Price of the trade.
- `amount`: Volume of the trade.
- `side`: Buy or sell.
- `id`: Unique identifier for the trade.
- `cost`: Total cost of the trade (price * amount).
### Imbalances (`dataframe["imbalances"]`)
This column provides a dict with information about imbalances in the order flow. An imbalance occurs when there is a significant difference between the ask and bid volume at a given price level.
Each row looks as follows - with price as index, and the corresponding bid and ask imbalance values as columns
``` output
{
"price": {
"bid_imbalance": False,
"ask_imbalance": False
}
}
```

View File

@@ -114,8 +114,46 @@ services:
--strategy SampleStrategy
```
You can use whatever naming convention you want, freqtrade1 and 2 are arbitrary. Note, that you will need to use different database files, port mappings and telegram configurations for each instance, as mentioned above.
## Use a different database system
Freqtrade is using SQLAlchemy, which supports multiple different database systems. As such, a multitude of database systems should be supported.
Freqtrade does not depend or install any additional database driver. Please refer to the [SQLAlchemy docs](https://docs.sqlalchemy.org/en/14/core/engines.html#database-urls) on installation instructions for the respective database systems.
The following systems have been tested and are known to work with freqtrade:
* sqlite (default)
* PostgreSQL
* MariaDB
!!! Warning
By using one of the below database systems, you acknowledge that you know how to manage such a system. The freqtrade team will not provide any support with setup or maintenance (or backups) of the below database systems.
### PostgreSQL
Installation:
`pip install psycopg2-binary`
Usage:
`... --db-url postgresql+psycopg2://<username>:<password>@localhost:5432/<database>`
Freqtrade will automatically create the tables necessary upon startup.
If you're running different instances of Freqtrade, you must either setup one database per Instance or use different users / schemas for your connections.
### MariaDB / MySQL
Freqtrade supports MariaDB by using SQLAlchemy, which supports multiple different database systems.
Installation:
`pip install pymysql`
Usage:
`... --db-url mysql+pymysql://<username>:<password>@localhost:3306/<database>`
## Configure the bot running as a systemd service

View File

@@ -10,12 +10,14 @@ To learn how to get data for the pairs and exchange you're interested in, head o
```
usage: freqtrade backtesting [-h] [-v] [--logfile FILE] [-V] [-c PATH]
[-d PATH] [--userdir PATH] [-s NAME]
[--strategy-path PATH] [-i TIMEFRAME]
[--timerange TIMERANGE]
[--data-format-ohlcv {json,jsongz,hdf5}]
[--strategy-path PATH]
[--recursive-strategy-search]
[--freqaimodel NAME] [--freqaimodel-path PATH]
[-i TIMEFRAME] [--timerange TIMERANGE]
[--data-format-ohlcv {json,jsongz,hdf5,feather,parquet}]
[--max-open-trades INT]
[--stake-amount STAKE_AMOUNT] [--fee FLOAT]
[-p PAIRS [PAIRS ...]] [--eps] [--dmmp]
[-p PAIRS [PAIRS ...]] [--eps]
[--enable-protections]
[--dry-run-wallet DRY_RUN_WALLET]
[--timeframe-detail TIMEFRAME_DETAIL]
@@ -24,8 +26,9 @@ usage: freqtrade backtesting [-h] [-v] [--logfile FILE] [-V] [-c PATH]
[--export-filename PATH]
[--breakdown {day,week,month} [{day,week,month} ...]]
[--cache {none,day,week,month}]
[--freqai-backtest-live-models]
optional arguments:
options:
-h, --help show this help message and exit
-i TIMEFRAME, --timeframe TIMEFRAME
Specify timeframe (`1m`, `5m`, `30m`, `1h`, `1d`).
@@ -48,10 +51,6 @@ optional arguments:
--eps, --enable-position-stacking
Allow buying the same pair multiple times (position
stacking).
--dmmp, --disable-max-market-positions
Disable applying `max_open_trades` during backtest
(same as setting `max_open_trades` to a very high
number).
--enable-protections, --enableprotections
Enable protections for backtesting.Will slow
backtesting down by a considerable amount, but will
@@ -80,10 +79,13 @@ optional arguments:
--cache {none,day,week,month}
Load a cached backtest result no older than specified
age (default: day).
--freqai-backtest-live-models
Run backtest with ready models.
Common arguments:
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
--logfile FILE Log to the file specified. Special values are:
--logfile FILE, --log-file FILE
Log to the file specified. Special values are:
'syslog', 'journald'. See the documentation for more
details.
-V, --version show program's version number and exit
@@ -92,7 +94,7 @@ Common arguments:
`userdir/config.json` or `config.json` whichever
exists). Multiple --config options may be used. Can be
set to `-` to read config from stdin.
-d PATH, --datadir PATH
-d PATH, --datadir PATH, --data-dir PATH
Path to directory with historical backtesting data.
--userdir PATH, --user-data-dir PATH
Path to userdata directory.
@@ -102,6 +104,12 @@ Strategy arguments:
Specify strategy class name which will be used by the
bot.
--strategy-path PATH Specify additional strategy lookup path.
--recursive-strategy-search
Recursively search for a strategy in the strategies
folder.
--freqaimodel NAME Specify a custom freqaimodels.
--freqaimodel-path PATH
Specify additional lookup path for freqaimodels.
```
@@ -293,6 +301,7 @@ A backtesting result will look like that:
|-----------------------------+---------------------|
| Backtesting from | 2019-01-01 00:00:00 |
| Backtesting to | 2019-05-01 00:00:00 |
| Trading Mode | Spot |
| Max open trades | 3 |
| | |
| Total/Daily Avg Trades | 429 / 3.575 |
@@ -398,6 +407,7 @@ It contains some useful key metrics about performance of your strategy on backte
|-----------------------------+---------------------|
| Backtesting from | 2019-01-01 00:00:00 |
| Backtesting to | 2019-05-01 00:00:00 |
| Trading Mode | Spot |
| Max open trades | 3 |
| | |
| Total/Daily Avg Trades | 429 / 3.575 |
@@ -452,6 +462,7 @@ It contains some useful key metrics about performance of your strategy on backte
- `Backtesting from` / `Backtesting to`: Backtesting range (usually defined with the `--timerange` option).
- `Max open trades`: Setting of `max_open_trades` (or `--max-open-trades`) - or number of pairs in the pairlist (whatever is lower).
- `Trading Mode`: Spot or Futures trading.
- `Total/Daily Avg Trades`: Identical to the total trades of the backtest output table / Total trades divided by the backtesting duration in days (this will give you information about how many trades to expect from the strategy).
- `Starting balance`: Start balance - as given by dry-run-wallet (config or command line).
- `Final balance`: Final balance - starting balance + absolute profit.
@@ -530,10 +541,10 @@ You can then load the trades to perform further analysis as shown in the [data a
Since backtesting lacks some detailed information about what happens within a candle, it needs to take a few assumptions:
- Exchange [trading limits](#trading-limits-in-backtesting) are respected
- Entries happen at open-price
- Entries happen at open-price unless a custom price logic has been specified
- All orders are filled at the requested price (no slippage) as long as the price is within the candle's high/low range
- Exit-signal exits happen at open-price of the consecutive candle
- Exits don't free their trade slot for a new trade until the next candle
- Exits free their trade slot for a new trade with a different pair
- Exit-signal is favored over Stoploss, because exit-signals are assumed to trigger on candle's open
- ROI
- Exits are compared to high - but the ROI value is used (e.g. ROI = 2%, high=5% - so the exit will be at 2%)
@@ -555,6 +566,7 @@ Since backtesting lacks some detailed information about what happens within a ca
- Stoploss
- ROI
- Trailing stoploss
- Position reversals (futures only) happen if an entry signal in the other direction than the closing trade triggers at the candle the existing trade closes.
Taking these assumptions, backtesting tries to mirror real trading as closely as possible. However, backtesting will **never** replace running a strategy in dry-run mode.
Also, keep in mind that past results don't guarantee future success.
@@ -569,7 +581,7 @@ These limits are usually listed in the exchange documentation as "trading rules"
Backtesting (as well as live and dry-run) does honor these limits, and will ensure that a stoploss can be placed below this value - so the value will be slightly higher than what the exchange specifies.
Freqtrade has however no information about historic limits.
This can lead to situations where trading-limits are inflated by using a historic price, resulting in minimum amounts > 50$.
This can lead to situations where trading-limits are inflated by using a historic price, resulting in minimum amounts > 50\$.
For example:

View File

@@ -12,41 +12,50 @@ This page explains the different parameters of the bot and how to run it.
```
usage: freqtrade [-h] [-V]
{trade,create-userdir,new-config,new-strategy,download-data,convert-data,convert-trade-data,list-data,backtesting,edge,hyperopt,hyperopt-list,hyperopt-show,list-exchanges,list-hyperopts,list-markets,list-pairs,list-strategies,list-timeframes,show-trades,test-pairlist,install-ui,plot-dataframe,plot-profit,webserver}
{trade,create-userdir,new-config,show-config,new-strategy,download-data,convert-data,convert-trade-data,trades-to-ohlcv,list-data,backtesting,backtesting-show,backtesting-analysis,edge,hyperopt,hyperopt-list,hyperopt-show,list-exchanges,list-markets,list-pairs,list-strategies,list-freqaimodels,list-timeframes,show-trades,test-pairlist,convert-db,install-ui,plot-dataframe,plot-profit,webserver,strategy-updater,lookahead-analysis,recursive-analysis}
...
Free, open source crypto trading bot
positional arguments:
{trade,create-userdir,new-config,new-strategy,download-data,convert-data,convert-trade-data,list-data,backtesting,edge,hyperopt,hyperopt-list,hyperopt-show,list-exchanges,list-hyperopts,list-markets,list-pairs,list-strategies,list-timeframes,show-trades,test-pairlist,install-ui,plot-dataframe,plot-profit,webserver}
{trade,create-userdir,new-config,show-config,new-strategy,download-data,convert-data,convert-trade-data,trades-to-ohlcv,list-data,backtesting,backtesting-show,backtesting-analysis,edge,hyperopt,hyperopt-list,hyperopt-show,list-exchanges,list-markets,list-pairs,list-strategies,list-freqaimodels,list-timeframes,show-trades,test-pairlist,convert-db,install-ui,plot-dataframe,plot-profit,webserver,strategy-updater,lookahead-analysis,recursive-analysis}
trade Trade module.
create-userdir Create user-data directory.
new-config Create new config
show-config Show resolved config
new-strategy Create new strategy
download-data Download backtesting data.
convert-data Convert candle (OHLCV) data from one format to
another.
convert-trade-data Convert trade data from one format to another.
trades-to-ohlcv Convert trade data to OHLCV data.
list-data List downloaded data.
backtesting Backtesting module.
backtesting-show Show past Backtest results
backtesting-analysis
Backtest Analysis module.
edge Edge module.
hyperopt Hyperopt module.
hyperopt-list List Hyperopt results
hyperopt-show Show details of Hyperopt results
list-exchanges Print available exchanges.
list-hyperopts Print available hyperopt classes.
list-markets Print markets on exchange.
list-pairs Print pairs on exchange.
list-strategies Print available strategies.
list-freqaimodels Print available freqAI models.
list-timeframes Print available timeframes for the exchange.
show-trades Show trades.
test-pairlist Test your pairlist configuration.
convert-db Migrate database to different system
install-ui Install FreqUI
plot-dataframe Plot candles with indicators.
plot-profit Generate plot showing profits.
webserver Webserver module.
strategy-updater updates outdated strategy files to the current version
lookahead-analysis Check for potential look ahead bias.
recursive-analysis Check for potential recursive formula issue.
optional arguments:
options:
-h, --help show this help message and exit
-V, --version show program's version number and exit

View File

@@ -123,6 +123,19 @@ This is similar to using multiple `--config` parameters, but simpler in usage as
If multiple files are in the `add_config_files` section, then they will be assumed to be at identical levels, having the last occurrence override the earlier config (unless a parent already defined such a key).
## Editor autocomplete and validation
If you are using an editor that supports JSON schema, you can use the schema provided by Freqtrade to get autocompletion and validation of your configuration file by adding the following line to the top of your configuration file:
``` json
{
"$schema": "https://schema.freqtrade.io/schema.json",
}
```
??? Note "Develop version"
The develop schema is available as `https://schema.freqtrade.io/schema_dev.json` - though we recommend to stick to the stable version for the best experience.
## Configuration parameters
The table below will list all configuration parameters available.
@@ -133,10 +146,10 @@ Freqtrade can also load many options via command line (CLI) arguments (check out
The prevalence for all Options is as follows:
- CLI arguments override any other option
- [Environment Variables](#environment-variables)
- Configuration files are used in sequence (the last file wins) and override Strategy configurations.
- Strategy configurations are only used if they are not set via configuration or command-line arguments. These options are marked with [Strategy Override](#parameters-in-the-strategy) in the below table.
* CLI arguments override any other option
* [Environment Variables](#environment-variables)
* Configuration files are used in sequence (the last file wins) and override Strategy configurations.
* Strategy configurations are only used if they are not set via configuration or command-line arguments. These options are marked with [Strategy Override](#parameters-in-the-strategy) in the below table.
### Parameters table
@@ -170,7 +183,7 @@ Mandatory parameters are marked as **Required**, which means that they are requi
| `margin_mode` | When trading with leverage, this determines if the collateral owned by the trader will be shared or isolated to each trading pair [leverage documentation](leverage.md). <br> **Datatype:** String
| `liquidation_buffer` | A ratio specifying how large of a safety net to place between the liquidation price and the stoploss to prevent a position from reaching the liquidation price [leverage documentation](leverage.md). <br>*Defaults to `0.05`.* <br> **Datatype:** Float
| | **Unfilled timeout**
| `unfilledtimeout.entry` | **Required.** How long (in minutes or seconds) the bot will wait for an unfilled entry order to complete, after which the order will be cancelled and repeated at current (new) price, as long as there is a signal. [Strategy Override](#parameters-in-the-strategy).<br> **Datatype:** Integer
| `unfilledtimeout.entry` | **Required.** How long (in minutes or seconds) the bot will wait for an unfilled entry order to complete, after which the order will be cancelled. [Strategy Override](#parameters-in-the-strategy).<br> **Datatype:** Integer
| `unfilledtimeout.exit` | **Required.** How long (in minutes or seconds) the bot will wait for an unfilled exit order to complete, after which the order will be cancelled and repeated at current (new) price, as long as there is a signal. [Strategy Override](#parameters-in-the-strategy).<br> **Datatype:** Integer
| `unfilledtimeout.unit` | Unit to use in unfilledtimeout setting. Note: If you set unfilledtimeout.unit to "seconds", "internals.process_throttle_secs" must be inferior or equal to timeout [Strategy Override](#parameters-in-the-strategy). <br> *Defaults to `"minutes"`.* <br> **Datatype:** String
| `unfilledtimeout.exit_timeout_count` | How many times can exit orders time out. Once this number of timeouts is reached, an emergency exit is triggered. 0 to disable and allow unlimited order cancels. [Strategy Override](#parameters-in-the-strategy).<br>*Defaults to `0`.* <br> **Datatype:** Integer
@@ -204,11 +217,11 @@ Mandatory parameters are marked as **Required**, which means that they are requi
| `exchange.uid` | API uid to use for the exchange. Only required when you are in production mode and for exchanges that use uid for API requests.<br>**Keep it in secret, do not disclose publicly.** <br> **Datatype:** String
| `exchange.pair_whitelist` | List of pairs to use by the bot for trading and to check for potential trades during backtesting. Supports regex pairs as `.*/BTC`. Not used by VolumePairList. [More information](plugins.md#pairlists-and-pairlist-handlers). <br> **Datatype:** List
| `exchange.pair_blacklist` | List of pairs the bot must absolutely avoid for trading and backtesting. [More information](plugins.md#pairlists-and-pairlist-handlers). <br> **Datatype:** List
| `exchange.ccxt_config` | Additional CCXT parameters passed to both ccxt instances (sync and async). This is usually the correct place for additional ccxt configurations. Parameters may differ from exchange to exchange and are documented in the [ccxt documentation](https://ccxt.readthedocs.io/en/latest/manual.html#instantiation). Please avoid adding exchange secrets here (use the dedicated fields instead), as they may be contained in logs. <br> **Datatype:** Dict
| `exchange.ccxt_sync_config` | Additional CCXT parameters passed to the regular (sync) ccxt instance. Parameters may differ from exchange to exchange and are documented in the [ccxt documentation](https://ccxt.readthedocs.io/en/latest/manual.html#instantiation) <br> **Datatype:** Dict
| `exchange.ccxt_async_config` | Additional CCXT parameters passed to the async ccxt instance. Parameters may differ from exchange to exchange and are documented in the [ccxt documentation](https://ccxt.readthedocs.io/en/latest/manual.html#instantiation) <br> **Datatype:** Dict
| `exchange.ccxt_config` | Additional CCXT parameters passed to both ccxt instances (sync and async). This is usually the correct place for additional ccxt configurations. Parameters may differ from exchange to exchange and are documented in the [ccxt documentation](https://docs.ccxt.com/#/README?id=overriding-exchange-properties-upon-instantiation). Please avoid adding exchange secrets here (use the dedicated fields instead), as they may be contained in logs. <br> **Datatype:** Dict
| `exchange.ccxt_sync_config` | Additional CCXT parameters passed to the regular (sync) ccxt instance. Parameters may differ from exchange to exchange and are documented in the [ccxt documentation](https://docs.ccxt.com/#/README?id=overriding-exchange-properties-upon-instantiation) <br> **Datatype:** Dict
| `exchange.ccxt_async_config` | Additional CCXT parameters passed to the async ccxt instance. Parameters may differ from exchange to exchange and are documented in the [ccxt documentation](https://docs.ccxt.com/#/README?id=overriding-exchange-properties-upon-instantiation) <br> **Datatype:** Dict
| `exchange.enable_ws` | Enable the usage of Websockets for the exchange. <br>[More information](#consuming-exchange-websockets).<br>*Defaults to `true`.* <br> **Datatype:** Boolean
| `exchange.markets_refresh_interval` | The interval in minutes in which markets are reloaded. <br>*Defaults to `60` minutes.* <br> **Datatype:** Positive Integer
| `exchange.skip_pair_validation` | Skip pairlist validation on startup.<br>*Defaults to `false`*<br> **Datatype:** Boolean
| `exchange.skip_open_order_update` | Skips open order updates on startup should the exchange cause problems. Only relevant in live conditions.<br>*Defaults to `false`*<br> **Datatype:** Boolean
| `exchange.unknown_fee_rate` | Fallback value to use when calculating trading fees. This can be useful for exchanges which have fees in non-tradable currencies. The value provided here will be multiplied with the "fee cost".<br>*Defaults to `None`<br> **Datatype:** float
| `exchange.log_responses` | Log relevant exchange responses. For debug mode only - use with care.<br>*Defaults to `false`*<br> **Datatype:** Boolean
@@ -216,7 +229,6 @@ Mandatory parameters are marked as **Required**, which means that they are requi
| | **Plugins**
| `edge.*` | Please refer to [edge configuration document](edge.md) for detailed explanation of all possible configuration options.
| `pairlists` | Define one or more pairlists to be used. [More information](plugins.md#pairlists-and-pairlist-handlers). <br>*Defaults to `StaticPairList`.* <br> **Datatype:** List of Dicts
| `protections` | Define one or more protections to be used. [More information](plugins.md#protections). <br> **Datatype:** List of Dicts
| | **Telegram**
| `telegram.enabled` | Enable the usage of Telegram. <br> **Datatype:** Boolean
| `telegram.token` | Your Telegram bot token. Only required if `telegram.enabled` is `true`. <br>**Keep it in secret, do not disclose publicly.** <br> **Datatype:** String
@@ -283,10 +295,10 @@ Values set in the configuration file always overwrite values set in the strategy
* `order_time_in_force`
* `unfilledtimeout`
* `disable_dataframe_checks`
- `use_exit_signal`
* `use_exit_signal`
* `exit_profit_only`
- `exit_profit_offset`
- `ignore_roi_if_entry_signal`
* `exit_profit_offset`
* `ignore_roi_if_entry_signal`
* `ignore_buying_expired_candle_after`
* `position_adjustment_enable`
* `max_entry_position_adjustment`
@@ -299,12 +311,12 @@ There are several methods to configure how much of the stake currency the bot wi
The minimum stake amount will depend on exchange and pair and is usually listed in the exchange support pages.
Assuming the minimum tradable amount for XRP/USD is 20 XRP (given by the exchange), and the price is 0.6$, the minimum stake amount to buy this pair is `20 * 0.6 ~= 12`.
This exchange has also a limit on USD - where all orders must be > 10$ - which however does not apply in this case.
Assuming the minimum tradable amount for XRP/USD is 20 XRP (given by the exchange), and the price is 0.6\$, the minimum stake amount to buy this pair is `20 * 0.6 ~= 12`.
This exchange has also a limit on USD - where all orders must be > 10\$ - which however does not apply in this case.
To guarantee safe execution, freqtrade will not allow buying with a stake-amount of 10.1$, instead, it'll make sure that there's enough space to place a stoploss below the pair (+ an offset, defined by `amount_reserve_percent`, which defaults to 5%).
To guarantee safe execution, freqtrade will not allow buying with a stake-amount of 10.1\$, instead, it'll make sure that there's enough space to place a stoploss below the pair (+ an offset, defined by `amount_reserve_percent`, which defaults to 5%).
With a reserve of 5%, the minimum stake amount would be ~12.6$ (`12 * (1 + 0.05)`). If we take into account a stoploss of 10% on top of that - we'd end up with a value of ~14$ (`12.6 / (1 - 0.1)`).
With a reserve of 5%, the minimum stake amount would be ~12.6\$ (`12 * (1 + 0.05)`). If we take into account a stoploss of 10% on top of that - we'd end up with a value of ~14\$ (`12.6 / (1 - 0.1)`).
To limit this calculation in case of large stoploss values, the calculated minimum stake-limit will never be more than 50% above the real limit.
@@ -350,9 +362,9 @@ To overcome this, the option `amend_last_stake_amount` can be set to `True`, whi
In the example above this would mean:
- Trade1: 400 USDT
- Trade2: 400 USDT
- Trade3: 200 USDT
* Trade1: 400 USDT
* Trade2: 400 USDT
* Trade3: 200 USDT
!!! Note
This option only applies with [Static stake amount](#static-stake-amount) - since [Dynamic stake amount](#dynamic-stake-amount) divides the balances evenly.
@@ -409,6 +421,8 @@ Or another example if your position adjustment assumes it can do 1 additional bu
--8<-- "includes/pricing.md"
## Further Configuration details
### Understand minimal_roi
The `minimal_roi` configuration parameter is a JSON object where the key is a duration
@@ -614,6 +628,30 @@ Freqtrade supports both Demo and Pro coingecko API keys.
The Coingecko API key is NOT required for the bot to function correctly.
It is only used for the conversion of coin to fiat in the Telegram reports, which usually also work without API key.
## Consuming exchange Websockets
Freqtrade can consume websockets through ccxt.pro.
Freqtrade aims ensure data is available at all times.
Should the websocket connection fail (or be disabled), the bot will fall back to REST API calls.
Should you experience problems you suspect are caused by websockets, you can disable these via the setting `exchange.enable_ws`, which defaults to true.
```jsonc
"exchange": {
// ...
"enable_ws": false,
// ...
}
```
Should you be required to use a proxy, please refer to the [proxy section](#using-proxy-with-freqtrade) for more information.
!!! Info "Rollout"
We're implementing this out slowly, ensuring stability of your bots.
Currently, usage is limited to ohlcv data streams.
It's also limited to a few exchanges, with new exchanges being added on an ongoing basis.
## Using Dry-run mode
We recommend starting the bot in the Dry-run mode to see how your bot will
@@ -650,9 +688,9 @@ Once you will be happy with your bot performance running in the Dry-run mode, yo
* API-keys may or may not be provided. Only Read-Only operations (i.e. operations that do not alter account state) on the exchange are performed in dry-run mode.
* Wallets (`/balance`) are simulated based on `dry_run_wallet`.
* Orders are simulated, and will not be posted to the exchange.
* Market orders fill based on orderbook volume the moment the order is placed.
* Market orders fill based on orderbook volume the moment the order is placed, with a maximum slippage of 5%.
* Limit orders fill once the price reaches the defined level - or time out based on `unfilledtimeout` settings.
* Limit orders will be converted to market orders if they cross the price by more than 1%.
* Limit orders will be converted to market orders if they cross the price by more than 1%, and will be filled immediately based regular market order rules (see point about Market orders above).
* In combination with `stoploss_on_exchange`, the stop_loss price is assumed to be filled.
* Open orders (not trades, which are stored in the database) are kept open after bot restarts, with the assumption that they were not filled while being offline.
@@ -702,7 +740,7 @@ You should also make sure to read the [Exchanges](exchanges.md) section of the d
**NEVER** share your private configuration file or your exchange keys with anyone!
### Using proxy with Freqtrade
## Using a proxy with Freqtrade
To use a proxy with freqtrade, export your proxy settings using the variables `"HTTP_PROXY"` and `"HTTPS_PROXY"` set to the appropriate values.
This will have the proxy settings applied to everything (telegram, coingecko, ...) **except** for exchange requests.
@@ -713,7 +751,7 @@ export HTTPS_PROXY="http://addr:port"
freqtrade
```
#### Proxy exchange requests
### Proxy exchange requests
To use a proxy for exchange connections - you will have to define the proxies as part of the ccxt configuration.
@@ -722,6 +760,7 @@ To use a proxy for exchange connections - you will have to define the proxies as
"exchange": {
"ccxt_config": {
"httpsProxy": "http://addr:port",
"wsProxy": "http://addr:port",
}
}
}

View File

@@ -11,9 +11,8 @@ Without provided configuration, `--exchange` becomes mandatory.
You can use a relative timerange (`--days 20`) or an absolute starting point (`--timerange 20200101-`). For incremental downloads, the relative approach should be used.
!!! Tip "Tip: Updating existing data"
If you already have backtesting data available in your data-directory and would like to refresh this data up to today, freqtrade will automatically calculate the data missing for the existing pairs and the download will occur from the latest available point until "now", neither --days or --timerange parameters are required. Freqtrade will keep the available data and only download the missing data.
If you are updating existing data after inserting new pairs that you have no data for, use `--new-pairs-days xx` parameter. Specified number of days will be downloaded for new pairs while old pairs will be updated with missing data only.
If you use `--days xx` parameter alone - data for specified number of days will be downloaded for _all_ pairs. Be careful, if specified number of days is smaller than gap between now and last downloaded candle - freqtrade will delete all existing data to avoid gaps in candle data.
If you already have backtesting data available in your data-directory and would like to refresh this data up to today, freqtrade will automatically calculate the missing timerange for the existing pairs and the download will occur from the latest available point until "now", neither `--days` or `--timerange` parameters are required. Freqtrade will keep the available data and only download the missing data.
If you are updating existing data after inserting new pairs that you have no data for, use the `--new-pairs-days xx` parameter. Specified number of days will be downloaded for new pairs while old pairs will be updated with missing data only.
### Usage
@@ -90,7 +89,7 @@ Common arguments:
!!! Tip "Downloading all data for one quote currency"
Often, you'll want to download data for all pairs of a specific quote-currency. In such cases, you can use the following shorthand:
`freqtrade download-data --exchange binance --pairs .*/USDT <...>`. The provided "pairs" string will be expanded to contain all active pairs on the exchange.
`freqtrade download-data --exchange binance --pairs ".*/USDT" <...>`. The provided "pairs" string will be expanded to contain all active pairs on the exchange.
To also download data for inactive (delisted) pairs, add `--include-inactive-pairs` to the command.
!!! Note "Startup period"
@@ -117,16 +116,17 @@ freqtrade download-data --exchange binance --pairs ETH/USDT XRP/USDT BTC/USDT
or as regex (in this case, to download all active USDT pairs)
```bash
freqtrade download-data --exchange binance --pairs .*/USDT
freqtrade download-data --exchange binance --pairs ".*/USDT"
```
### Other Notes
* To use a different directory than the exchange specific default, use `--datadir user_data/data/some_directory`.
* To change the exchange used to download the historical data from, please use a different configuration file (you'll probably need to adjust rate limits etc.)
* To change the exchange used to download the historical data from, either use `--exchange <exchange>` - or specify a different configuration file.
* To use `pairs.json` from some other directory, use `--pairs-file some_other_dir/pairs.json`.
* To download historical candle (OHLCV) data for only 10 days, use `--days 10` (defaults to 30 days).
* To download historical candle (OHLCV) data from a fixed starting point, use `--timerange 20200101-` - which will download all data from January 1st, 2020.
* Given starting points are ignored if data is already available, downloading only missing data up to today.
* Use `--timeframes` to specify what timeframe download the historical candle (OHLCV) data for. Default is `--timeframes 1m 5m` which will download 1-minute and 5-minute data.
* To use exchange, timeframe and list of pairs as defined in your configuration file, use the `-c/--config` option. With this, the script uses the whitelist defined in the config as the list of currency pairs to download data for and does not require the pairs.json file. You can combine `-c/--config` with most other options.
@@ -423,7 +423,8 @@ You can get a list of downloaded data using the `list-data` sub-command.
usage: freqtrade list-data [-h] [-v] [--logfile FILE] [-V] [-c PATH] [-d PATH]
[--userdir PATH] [--exchange EXCHANGE]
[--data-format-ohlcv {json,jsongz,hdf5,feather,parquet}]
[-p PAIRS [PAIRS ...]]
[--data-format-trades {json,jsongz,hdf5,feather,parquet}]
[--trades] [-p PAIRS [PAIRS ...]]
[--trading-mode {spot,margin,futures}]
[--show-timerange]
@@ -433,6 +434,10 @@ options:
--data-format-ohlcv {json,jsongz,hdf5,feather,parquet}
Storage format for downloaded candle (OHLCV) data.
(default: `feather`).
--data-format-trades {json,jsongz,hdf5,feather,parquet}
Storage format for downloaded trades data. (default:
`feather`).
--trades Work on trades data instead of OHLCV data.
-p PAIRS [PAIRS ...], --pairs PAIRS [PAIRS ...]
Limit command to these pairs. Pairs are space-
separated.
@@ -465,13 +470,29 @@ Common arguments:
```bash
> freqtrade list-data --userdir ~/.freqtrade/user_data/
Found 33 pair / timeframe combinations.
pairs timeframe
---------- -----------------------------------------
ADA/BTC 5m, 15m, 30m, 1h, 2h, 4h, 6h, 12h, 1d
ADA/ETH 5m, 15m, 30m, 1h, 2h, 4h, 6h, 12h, 1d
ETH/BTC 5m, 15m, 30m, 1h, 2h, 4h, 6h, 12h, 1d
ETH/USDT 5m, 15m, 30m, 1h, 2h, 4h
Found 33 pair / timeframe combinations.
┏━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━┓
┃ Pair ┃ Timeframe ┃ Type ┃
┡━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━┩
│ ADA/BTC │ 5m, 15m, 30m, 1h, 2h, 4h, 6h, 12h, 1d │ spot │
│ ADA/ETH │ 5m, 15m, 30m, 1h, 2h, 4h, 6h, 12h, 1d │ spot │
│ ETH/BTC │ 5m, 15m, 30m, 1h, 2h, 4h, 6h, 12h, 1d │ spot │
│ ETH/USDT │ 5m, 15m, 30m, 1h, 2h, 4h │ spot │
└───────────────┴───────────────────────────────────────────┴──────┘
```
Show all trades data including from/to timerange
``` bash
> freqtrade list-data --show --trades
Found trades data for 1 pair.
┏━━━━━━━━━┳━━━━━━┳━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━┓
┃ Pair ┃ Type ┃ From ┃ To ┃ Trades ┃
┡━━━━━━━━━╇━━━━━━╇━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━┩
│ XRP/ETH │ spot │ 2019-10-11 00:00:11 │ 2019-10-13 11:19:28 │ 12477 │
└─────────┴──────┴─────────────────────┴─────────────────────┴────────┘
```
## Trades (tick) data

View File

@@ -75,7 +75,10 @@ Webhook terminology changed from "sell" to "exit", and from "buy" to "entry", re
* `webhooksellfill`, `webhookexitfill` -> `exit_fill`
* `webhooksellcancel`, `webhookexitcancel` -> `exit_cancel`
## Removal of `populate_any_indicators`
version 2023.3 saw the removal of `populate_any_indicators` in favor of split methods for feature engineering and targets. Please read the [migration document](strategy_migration.md#freqai-strategy) for full details.
## Removal of `protections` from configuration
Setting protections from the configuration via `"protections": [],` has been removed in 2024.10, after having raised deprecation warnings for over 3 years.

View File

@@ -22,7 +22,7 @@ This will spin up a local server (usually on port 8000) so you can see if everyt
## Developer setup
To configure a development environment, you can either use the provided [DevContainer](#devcontainer-setup), or use the `setup.sh` script and answer "y" when asked "Do you want to install dependencies for dev [y/N]? ".
Alternatively (e.g. if your system is not supported by the setup.sh script), follow the manual installation process and run `pip3 install -e .[all]`.
Alternatively (e.g. if your system is not supported by the setup.sh script), follow the manual installation process and run `pip3 install -r requirements-dev.txt` - followed by `pip3 install -e .[all]`.
This will install all required tools for development, including `pytest`, `ruff`, `mypy`, and `coveralls`.
@@ -116,7 +116,7 @@ A similar setup can also be taken for Pycharm - using `freqtrade` as module name
![Pycharm debug configuration](assets/pycharm_debug.png)
!!! Note "Startup directory"
This assumes that you have the repository checked out, and the editor is started at the repository root level (so setup.py is at the top level of your repository).
This assumes that you have the repository checked out, and the editor is started at the repository root level (so pyproject.toml is at the top level of your repository).
## ErrorHandling
@@ -162,7 +162,7 @@ Hopefully you also want to contribute this back upstream.
Whatever your motivations are - This should get you off the ground in trying to develop a new Pairlist Handler.
First of all, have a look at the [VolumePairList](https://github.com/freqtrade/freqtrade/blob/develop/freqtrade/pairlist/VolumePairList.py) Handler, and best copy this file with a name of your new Pairlist Handler.
First of all, have a look at the [VolumePairList](https://github.com/freqtrade/freqtrade/blob/develop/freqtrade/plugins/pairlist/VolumePairList.py) Handler, and best copy this file with a name of your new Pairlist Handler.
This is a simple Handler, which however serves as a good example on how to start developing.
@@ -205,7 +205,7 @@ This is called with each iteration of the bot (only if the Pairlist Handler is a
It must return the resulting pairlist (which may then be passed into the chain of Pairlist Handlers).
Validations are optional, the parent class exposes a `_verify_blacklist(pairlist)` and `_whitelist_for_active_markets(pairlist)` to do default filtering. Use this if you limit your result to a certain number of pairs - so the end-result is not shorter than expected.
Validations are optional, the parent class exposes a `verify_blacklist(pairlist)` and `_whitelist_for_active_markets(pairlist)` to do default filtering. Use this if you limit your result to a certain number of pairs - so the end-result is not shorter than expected.
#### filter_pairlist
@@ -219,14 +219,14 @@ The default implementation in the base class simply calls the `_validate_pair()`
If overridden, it must return the resulting pairlist (which may then be passed into the next Pairlist Handler in the chain).
Validations are optional, the parent class exposes a `_verify_blacklist(pairlist)` and `_whitelist_for_active_markets(pairlist)` to do default filters. Use this if you limit your result to a certain number of pairs - so the end result is not shorter than expected.
Validations are optional, the parent class exposes a `verify_blacklist(pairlist)` and `_whitelist_for_active_markets(pairlist)` to do default filters. Use this if you limit your result to a certain number of pairs - so the end result is not shorter than expected.
In `VolumePairList`, this implements different methods of sorting, does early validation so only the expected number of pairs is returned.
##### sample
``` python
def filter_pairlist(self, pairlist: List[str], tickers: Dict) -> List[str]:
def filter_pairlist(self, pairlist: list[str], tickers: dict) -> List[str]:
# Generate dynamic whitelist
pairs = self._calculate_pairlist(pairlist, tickers)
return pairs
@@ -241,7 +241,6 @@ No protection should use datetime directly, but use the provided `date_now` vari
!!! Tip "Writing a new Protection"
Best copy one of the existing Protections to have a good example.
Don't forget to register your protection in `constants.py` under the variable `AVAILABLE_PROTECTIONS` - otherwise it will not be selectable.
#### Implementation of a new protection
@@ -481,21 +480,24 @@ Once the PR against stable is merged (best right after merging):
### pypi
!!! Note
This process is now automated as part of Github Actions.
!!! Warning "Manual Releases"
This process is automated as part of Github Actions.
Manual pypi pushes should not be necessary.
To create a pypi release, please run the following commands:
??? example "Manual release"
To manually create a pypi release, please run the following commands:
Additional requirement: `wheel`, `twine` (for uploading), account on pypi with proper permissions.
Additional requirement: `wheel`, `twine` (for uploading), account on pypi with proper permissions.
``` bash
python setup.py sdist bdist_wheel
``` bash
pip install -U build
python -m build --sdist --wheel
# For pypi test (to check if some change to the installation did work)
twine upload --repository-url https://test.pypi.org/legacy/ dist/*
# For pypi test (to check if some change to the installation did work)
twine upload --repository-url https://test.pypi.org/legacy/ dist/*
# For production:
twine upload dist/*
```
# For production:
twine upload dist/*
```
Please don't push non-releases to the productive / real pypi instance.
Please don't push non-releases to the productive / real pypi instance.

View File

@@ -252,21 +252,36 @@ OKX requires a passphrase for each api key, you will therefore need to add this
Gate.io allows the use of `POINT` to pay for fees. As this is not a tradable currency (no regular market available), automatic fee calculations will fail (and default to a fee of 0).
The configuration parameter `exchange.unknown_fee_rate` can be used to specify the exchange rate between Point and the stake currency. Obviously, changing the stake-currency will also require changes to this value.
Gate API keys require the following permissions on top of the market type you want to trade:
* "Spot Trade" _or_ "Perpetual Futures" (Read and Write) (either select both, or the one matching the market you want to trade)
* "Wallet" (read only)
* "Account" (read only)
Without these permissions, the bot will not start correctly and show errors like "permission missing".
## Bybit
Futures trading on bybit is currently supported for USDT markets, and will use isolated futures mode.
Users with unified accounts (there's no way back) can create a Sub-account which will start as "non-unified", and can therefore use isolated futures.
On startup, freqtrade will set the position mode to "One-way Mode" for the whole (sub)account. This avoids making this call over and over again (slowing down bot operations), but means that changes to this setting may result in exceptions and errors
On startup, freqtrade will set the position mode to "One-way Mode" for the whole (sub)account. This avoids making this call over and over again (slowing down bot operations), but means that changes to this setting may result in exceptions and errors.
As bybit doesn't provide funding rate history, the dry-run calculation is used for live trades as well.
API Keys for live futures trading (Subaccount on non-unified) must have the following permissions:
API Keys for live futures trading must have the following permissions:
* Read-write
* Contract - Orders
* Contract - Positions
We do strongly recommend to limit all API keys to the IP you're going to use it from.
!!! Warning "Unified accounts"
Freqtrade assumes accounts to be dedicated to the bot.
We therefore recommend the usage of one subaccount per bot. This is especially important when using unified accounts.
Other configurations (multiple bots on one account, manual non-bot trades on the bot account) are not supported and may lead to unexpected behavior.
!!! Tip "Stoploss on Exchange"
Bybit (futures only) supports `stoploss_on_exchange` and uses `stop-loss-limit` orders. It provides great advantages, so we recommend to benefit from it by enabling stoploss on exchange.
On futures, Bybit supports both `stop-limit` as well as `stop-market` orders. You can use either `"limit"` or `"market"` in the `order_types.stoploss` configuration setting to decide which type to use.
@@ -289,6 +304,41 @@ It's therefore required to pass the UID as well.
!!! Warning "Necessary Verification"
Bitmart requires Verification Lvl2 to successfully trade on the spot market through the API - even though trading via UI works just fine with just Lvl1 verification.
## Hyperliquid
!!! Tip "Stoploss on Exchange"
Hyperliquid supports `stoploss_on_exchange` and uses `stop-loss-limit` orders. It provides great advantages, so we recommend to benefit from it.
Hyperliquid is a Decentralized Exchange (DEX). Decentralized exchanges work a bit different compared to normal exchanges. Instead of authenticating private API calls using an API key, private API calls need to be signed with the private key of your wallet (We recommend using an api Wallet for this, generated either on Hyperliquid or in your wallet of choice).
This needs to be configured like this:
```json
"exchange": {
"name": "hyperliquid",
"walletAddress": "your_eth_wallet_address",
"privateKey": "your_api_private_key",
// ...
}
```
* walletAddress in hex format: `0x<40 hex characters>` - Can be easily copied from your wallet - and should be your wallet address, not your API Wallet Address.
* privateKey in hex format: `0x<64 hex characters>` - Use the key the API Wallet shows on creation.
Hyperliquid handles deposits and withdrawals on the Arbitrum One chain, a Layer 2 scaling solution built on top of Ethereum. Hyperliquid uses USDC as quote / collateral. The process of depositing USDC on Hyperliquid requires a couple of steps, see [how to start trading](https://hyperliquid.gitbook.io/hyperliquid-docs/onboarding/how-to-start-trading) for details on what steps are needed.
!!! Note "Hyperliquid general usage Notes"
Hyperliquid does not support market orders, however ccxt will simulate market orders by placing limit orders with a maximum slippage of 5%.
Unfortunately, hyperliquid only offers 5000 historic candles, so backtesting will either need to build candles historically (by waiting and downloading the data incrementally over time) - or will be limited to the last 5000 candles.
!!! Info "Some general best practices (non exhaustive)"
* Beware of supply chain attacks, like pip package poisoning etcetera. Whenever you use your private key, make sure your environment is safe.
* Don't use your actual wallet private key for trading. Use the Hyperliquid [API generator](https://app.hyperliquid.xyz/API) to create a separate API wallet.
* Don't store your actual wallet private key on the server you use for freqtrade. Use the API wallet private key instead. This key won't allow withdrawals, only trading.
* Always keep your mnemonic phrase and private key private.
* Don't use the same mnemonic as the one you had to backup when initializing a hardware wallet, using the same mnemonic basically deletes the security of your hardware wallet.
* Create a different software wallet, only transfer the funds you want to trade with to that wallet, and use that wallet to trade on Hyperliquid.
* If you have funds you don't want to use for trading (after making a profit for example), transfer them back to your hardware wallet.
## All exchanges
Should you experience constant errors with Nonce (like `InvalidNonce`), it is best to regenerate the API keys. Resetting Nonce is difficult and it's usually easier to regenerate the API keys.
@@ -298,7 +348,7 @@ Should you experience constant errors with Nonce (like `InvalidNonce`), it is be
* The Ocean (exchange id: `theocean`) exchange uses Web3 functionality and requires `web3` python package to be installed:
```shell
$ pip3 install web3
pip3 install web3
```
### Getting latest price / Incomplete candles

View File

@@ -100,6 +100,19 @@ You can use the `/stopentry` command in Telegram to prevent future trade entry,
Please look at the [advanced setup documentation Page](advanced-setup.md#running-multiple-instances-of-freqtrade).
### I'm getting "Impossible to load Strategy" when starting the bot
This error message is shown when the bot cannot load the strategy.
Usually, you can use `freqtrade list-strategies` to list all available strategies.
The output of this command will also include a status column, showing if the strategy can be loaded.
Please check the following:
* Are you using the correct strategy name? The strategy name is case-sensitive and must correspond to the Strategy class name (not the filename!).
* Is the strategy in the `user_data/strategies` directory, and has the file-ending `.py`?
* Does the bot show other warnings before this error? Maybe you're missing some dependencies for the strategy - which would be highlighted in the log.
* In case of docker - is the strategy directory mounted correctly (check the volumes part of the docker-compose file)?
### I'm getting "Missing data fillup" messages in the log
This message is just a warning that the latest candles had missing candles in them.
@@ -146,9 +159,9 @@ The same fix should be applied in the configuration file, if order types are def
### I'm trying to start the bot live, but get an API permission error
Errors like `Invalid API-key, IP, or permissions for action` mean exactly what they actually say.
Your API key is either invalid (copy/paste error? check for leading/trailing spaces in the config), expired, or the IP you're running the bot from is not enabled in the Exchange's API console.
Usually, the permission "Spot Trading" (or the equivalent in the exchange you use) will be necessary.
Errors like `Invalid API-key, IP, or permissions for action` mean exactly what they actually say.
Your API key is either invalid (copy/paste error? check for leading/trailing spaces in the config), expired, or the IP you're running the bot from is not enabled in the Exchange's API console.
Usually, the permission "Spot Trading" (or the equivalent in the exchange you use) will be necessary.
Futures will usually have to be enabled specifically.
### How do I search the bot logs for something?

View File

@@ -58,7 +58,6 @@ The plot configuration can be accessed via the "Plot Configurator" (Cog icon) bu
### Settings
Several UI related settings can be changed by accessing the settings page.
Things you can change (among others):

View File

@@ -293,10 +293,10 @@ class MyCoolPyTorchClassifier(BasePyTorchClassifier):
super().__init__(**kwargs)
config = self.freqai_info.get("model_training_parameters", {})
self.learning_rate: float = config.get("learning_rate", 3e-4)
self.model_kwargs: Dict[str, Any] = config.get("model_kwargs", {})
self.trainer_kwargs: Dict[str, Any] = config.get("trainer_kwargs", {})
self.model_kwargs: dict[str, Any] = config.get("model_kwargs", {})
self.trainer_kwargs: dict[str, Any] = config.get("trainer_kwargs", {})
def fit(self, data_dictionary: Dict, dk: FreqaiDataKitchen, **kwargs) -> Any:
def fit(self, data_dictionary: dict, dk: FreqaiDataKitchen, **kwargs) -> Any:
"""
User sets up the training and test data to fit their desired model here
:param data_dictionary: the dictionary holding all data for train, test,
@@ -359,10 +359,10 @@ class PyTorchMLPRegressor(BasePyTorchRegressor):
super().__init__(**kwargs)
config = self.freqai_info.get("model_training_parameters", {})
self.learning_rate: float = config.get("learning_rate", 3e-4)
self.model_kwargs: Dict[str, Any] = config.get("model_kwargs", {})
self.trainer_kwargs: Dict[str, Any] = config.get("trainer_kwargs", {})
self.model_kwargs: dict[str, Any] = config.get("model_kwargs", {})
self.trainer_kwargs: dict[str, Any] = config.get("trainer_kwargs", {})
def fit(self, data_dictionary: Dict, dk: FreqaiDataKitchen, **kwargs) -> Any:
def fit(self, data_dictionary: dict, dk: FreqaiDataKitchen, **kwargs) -> Any:
n_features = data_dictionary["train_features"].shape[-1]
model = PyTorchMLPModel(
input_dim=n_features,
@@ -393,7 +393,7 @@ Here we create a `PyTorchMLPRegressor` class that implements the `fit` method. T
For example, if you are using a binary classifier to predict price movements as up or down, you can set the class names as follows:
```python
def set_freqai_targets(self, dataframe: DataFrame, metadata: Dict, **kwargs) -> DataFrame:
def set_freqai_targets(self, dataframe: DataFrame, metadata: dict, **kwargs) -> DataFrame:
self.freqai.class_names = ["down", "up"]
dataframe['&s-up_or_down'] = np.where(dataframe["close"].shift(-100) >
dataframe["close"], 'up', 'down')

View File

@@ -22,6 +22,7 @@ Mandatory parameters are marked as **Required** and have to be set in one of the
| `write_metrics_to_disk` | Collect train timings, inference timings and cpu usage in json file. <br> **Datatype:** Boolean. <br> Default: `False`
| `data_kitchen_thread_count` | <br> Designate the number of threads you want to use for data processing (outlier methods, normalization, etc.). This has no impact on the number of threads used for training. If user does not set it (default), FreqAI will use max number of threads - 2 (leaving 1 physical core available for Freqtrade bot and FreqUI) <br> **Datatype:** Positive integer.
| `activate_tensorboard` | <br> Indicate whether or not to activate tensorboard for the tensorboard enabled modules (currently Reinforcment Learning, XGBoost, Catboost, and PyTorch). Tensorboard needs Torch installed, which means you will need the torch/RL docker image or you need to answer "yes" to the install question about whether or not you wish to install Torch. <br> **Datatype:** Boolean. <br> Default: `True`.
| `wait_for_training_iteration_on_reload` | <br> When using /reload or ctrl-c, wait for the current training iteration to finish before completing graceful shutdown. If set to `False`, FreqAI will break the current training iteration, allowing you to shutdown gracefully more quickly, but you will lose your current training iteration. <br> **Datatype:** Boolean. <br> Default: `True`.
### Feature parameters

View File

@@ -73,23 +73,26 @@ Backtesting mode requires [downloading the necessary data](#downloading-data-to-
---
### Saving prediction data
### Saving backtesting prediction data
To allow for tweaking your strategy (**not** the features!), FreqAI will automatically save the predictions during backtesting so that they can be reused for future backtests and live runs using the same `identifier` model. This provides a performance enhancement geared towards enabling **high-level hyperopting** of entry/exit criteria.
An additional directory called `backtesting_predictions`, which contains all the predictions stored in `hdf` format, will be created in the `unique-id` folder.
An additional directory called `backtesting_predictions`, which contains all the predictions stored in `feather` format, will be created in the `unique-id` folder.
To change your **features**, you **must** set a new `identifier` in the config to signal to FreqAI to train new models.
To save the models generated during a particular backtest so that you can start a live deployment from one of them instead of training a new model, you must set `save_backtest_models` to `True` in the config.
!!! Note
To ensure that the model can be reused, freqAI will call your strategy with a dataframe of length 1.
If your strategy requires more data than this to generate the same features, you can't reuse backtest predictions for live deployment and need to update your `identifier` for each new backtest.
### Backtest live collected predictions
FreqAI allow you to reuse live historic predictions through the backtest parameter `--freqai-backtest-live-models`. This can be useful when you want to reuse predictions generated in dry/run for comparison or other study.
The `--timerange` parameter must not be informed, as it will be automatically calculated through the data in the historic predictions file.
### Downloading data to cover the full backtest period
For live/dry deployments, FreqAI will download the necessary data automatically. However, to use backtesting functionality, you need to download the necessary data using `download-data` (details [here](data-download.md#data-downloading)). You need to pay careful attention to understanding how much *additional* data needs to be downloaded to ensure that there is a sufficient amount of training data *before* the start of the backtesting time range. The amount of additional data can be roughly estimated by moving the start date of the time range backwards by `train_period_days` and the `startup_candle_count` (see the [parameter table](freqai-parameter-table.md) for detailed descriptions of these parameters) from the beginning of the desired backtesting time range.

View File

@@ -42,11 +42,11 @@ usage: freqtrade hyperopt [-h] [-v] [--logfile FILE] [-V] [-c PATH] [-d PATH]
[--recursive-strategy-search] [--freqaimodel NAME]
[--freqaimodel-path PATH] [-i TIMEFRAME]
[--timerange TIMERANGE]
[--data-format-ohlcv {json,jsongz,hdf5}]
[--data-format-ohlcv {json,jsongz,hdf5,feather,parquet}]
[--max-open-trades INT]
[--stake-amount STAKE_AMOUNT] [--fee FLOAT]
[-p PAIRS [PAIRS ...]] [--hyperopt-path PATH]
[--eps] [--dmmp] [--enable-protections]
[--eps] [--enable-protections]
[--dry-run-wallet DRY_RUN_WALLET]
[--timeframe-detail TIMEFRAME_DETAIL] [-e INT]
[--spaces {all,buy,sell,roi,stoploss,trailing,protection,trades,default} [{all,buy,sell,roi,stoploss,trailing,protection,trades,default} ...]]
@@ -55,15 +55,15 @@ usage: freqtrade hyperopt [-h] [-v] [--logfile FILE] [-V] [-c PATH] [-d PATH]
[--hyperopt-loss NAME] [--disable-param-export]
[--ignore-missing-spaces] [--analyze-per-epoch]
optional arguments:
options:
-h, --help show this help message and exit
-i TIMEFRAME, --timeframe TIMEFRAME
Specify timeframe (`1m`, `5m`, `30m`, `1h`, `1d`).
--timerange TIMERANGE
Specify what timerange of data to use.
--data-format-ohlcv {json,jsongz,hdf5}
--data-format-ohlcv {json,jsongz,hdf5,feather,parquet}
Storage format for downloaded candle (OHLCV) data.
(default: `json`).
(default: `feather`).
--max-open-trades INT
Override the value of the `max_open_trades`
configuration setting.
@@ -80,10 +80,6 @@ optional arguments:
--eps, --enable-position-stacking
Allow buying the same pair multiple times (position
stacking).
--dmmp, --disable-max-market-positions
Disable applying `max_open_trades` during backtest
(same as setting `max_open_trades` to a very high
number).
--enable-protections, --enableprotections
Enable protections for backtesting.Will slow
backtesting down by a considerable amount, but will
@@ -133,7 +129,8 @@ optional arguments:
Common arguments:
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
--logfile FILE Log to the file specified. Special values are:
--logfile FILE, --log-file FILE
Log to the file specified. Special values are:
'syslog', 'journald'. See the documentation for more
details.
-V, --version show program's version number and exit
@@ -142,7 +139,7 @@ Common arguments:
`userdir/config.json` or `config.json` whichever
exists). Multiple --config options may be used. Can be
set to `-` to read config from stdin.
-d PATH, --datadir PATH
-d PATH, --datadir PATH, --data-dir PATH
Path to directory with historical backtesting data.
--userdir PATH, --user-data-dir PATH
Path to userdata directory.
@@ -445,7 +442,6 @@ While this strategy is most likely too simple to provide consistent profit, it s
Whether you are using `.range` functionality or the alternatives above, you should try to use space ranges as small as possible since this will improve CPU/RAM usage.
## Optimizing protections
Freqtrade can also optimize protections. How you optimize protections is up to you, and the following should be considered as example only.
@@ -589,14 +585,15 @@ Currently, the following loss functions are builtin:
* `ShortTradeDurHyperOptLoss` - (default legacy Freqtrade hyperoptimization loss function) - Mostly for short trade duration and avoiding losses.
* `OnlyProfitHyperOptLoss` - takes only amount of profit into consideration.
* `SharpeHyperOptLoss` - optimizes Sharpe Ratio calculated on trade returns relative to standard deviation.
* `SharpeHyperOptLossDaily` - optimizes Sharpe Ratio calculated on **daily** trade returns relative to standard deviation.
* `SortinoHyperOptLoss` - optimizes Sortino Ratio calculated on trade returns relative to **downside** standard deviation.
* `SharpeHyperOptLoss` - Optimizes Sharpe Ratio calculated on trade returns relative to standard deviation.
* `SharpeHyperOptLossDaily` - Optimizes Sharpe Ratio calculated on **daily** trade returns relative to standard deviation.
* `SortinoHyperOptLoss` - Optimizes Sortino Ratio calculated on trade returns relative to **downside** standard deviation.
* `SortinoHyperOptLossDaily` - optimizes Sortino Ratio calculated on **daily** trade returns relative to **downside** standard deviation.
* `MaxDrawDownHyperOptLoss` - Optimizes Maximum absolute drawdown.
* `MaxDrawDownRelativeHyperOptLoss` - Optimizes both maximum absolute drawdown while also adjusting for maximum relative drawdown.
* `CalmarHyperOptLoss` - Optimizes Calmar Ratio calculated on trade returns relative to max drawdown.
* `ProfitDrawDownHyperOptLoss` - Optimizes by max Profit & min Drawdown objective. `DRAWDOWN_MULT` variable within the hyperoptloss file can be adjusted to be stricter or more flexible on drawdown purposes.
* `MultiMetricHyperOptLoss` - Optimizes by several key metrics to achieve balanced performance. The primary focus is on maximizing Profit and minimizing Drawdown, while also considering additional metrics such as Profit Factor, Expectancy Ratio and Winrate. Moreover, it applies a penalty for epochs with a low number of trades, encouraging strategies with adequate trade frequency.
Creation of a custom loss function is covered in the [Advanced Hyperopt](advanced-hyperopt.md) part of the documentation.
@@ -867,18 +864,15 @@ You can use the `--print-all` command line option if you would like to see all r
## Position stacking and disabling max market positions
In some situations, you may need to run Hyperopt (and Backtesting) with the
`--eps`/`--enable-position-staking` and `--dmmp`/`--disable-max-market-positions` arguments.
In some situations, you may need to run Hyperopt (and Backtesting) with the `--eps`/`--enable-position-staking` argument, or you may need to set `max_open_trades` to a very high number to disable the limit on the number of open trades.
By default, hyperopt emulates the behavior of the Freqtrade Live Run/Dry Run, where only one
open trade is allowed for every traded pair. The total number of trades open for all pairs
open trade per pair is allowed. The total number of trades open for all pairs
is also limited by the `max_open_trades` setting. During Hyperopt/Backtesting this may lead to
some potential trades to be hidden (or masked) by previously open trades.
potential trades being hidden (or masked) by already open trades.
The `--eps`/`--enable-position-stacking` argument allows emulation of buying the same pair multiple times,
while `--dmmp`/`--disable-max-market-positions` disables applying `max_open_trades`
during Hyperopt/Backtesting (which is equal to setting `max_open_trades` to a very high
number).
The `--eps`/`--enable-position-stacking` argument allows emulation of buying the same pair multiple times.
Using `--max-open-trades` with a very high number will disable the limit on the number of open trades.
!!! Note
Dry/live runs will **NOT** use position stacking - therefore it does make sense to also validate the strategy without this as it's closer to reality.
@@ -919,13 +913,39 @@ Your epochs should therefore be aligned to the possible values - or you should b
After you run Hyperopt for the desired amount of epochs, you can later list all results for analysis, select only best or profitable once, and show the details for any of the epochs previously evaluated. This can be done with the `hyperopt-list` and `hyperopt-show` sub-commands. The usage of these sub-commands is described in the [Utils](utils.md#list-hyperopt-results) chapter.
## Output debug messages from your strategy
If you want to output debug messages from your strategy, you can use the `logging` module. By default, Freqtrade will output all messages with a level of `INFO` or higher.
``` python
import logging
logger = logging.getLogger(__name__)
class MyAwesomeStrategy(IStrategy):
...
def populate_entry_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
logger.info("This is a debug message")
...
```
!!! Note "using print"
Messages printed via `print()` will not be shown in the hyperopt output unless parallelism is disabled (`-j 1`).
It is recommended to use the `logging` module instead.
## Validate backtesting results
Once the optimized strategy has been implemented into your strategy, you should backtest this strategy to make sure everything is working as expected.
To achieve same the results (number of trades, their durations, profit, etc.) as during Hyperopt, please use the same configuration and parameters (timerange, timeframe, ...) used for hyperopt `--dmmp`/`--disable-max-market-positions` and `--eps`/`--enable-position-stacking` for Backtesting.
To achieve same the results (number of trades, their durations, profit, etc.) as during Hyperopt, please use the same configuration and parameters (timerange, timeframe, ...) used for hyperopt for Backtesting.
### Why do my backtest results not match my hyperopt results?
Should results not match, check the following factors:
* You may have added parameters to hyperopt in `populate_indicators()` where they will be calculated only once **for all epochs**. If you are, for example, trying to optimise multiple SMA timeperiod values, the hyperoptable timeperiod parameter should be placed in `populate_entry_trend()` which is calculated every epoch. See [Optimizing an indicator parameter](https://www.freqtrade.io/en/stable/hyperopt/#optimizing-an-indicator-parameter).

View File

@@ -2,11 +2,11 @@
Pairlist Handlers define the list of pairs (pairlist) that the bot should trade. They are configured in the `pairlists` section of the configuration settings.
In your configuration, you can use Static Pairlist (defined by the [`StaticPairList`](#static-pair-list) Pairlist Handler) and Dynamic Pairlist (defined by the [`VolumePairList`](#volume-pair-list) Pairlist Handler).
In your configuration, you can use Static Pairlist (defined by the [`StaticPairList`](#static-pair-list) Pairlist Handler) and Dynamic Pairlist (defined by the [`VolumePairList`](#volume-pair-list) and [`PercentChangePairList`](#percent-change-pair-list) Pairlist Handlers).
Additionally, [`AgeFilter`](#agefilter), [`PrecisionFilter`](#precisionfilter), [`PriceFilter`](#pricefilter), [`ShuffleFilter`](#shufflefilter), [`SpreadFilter`](#spreadfilter) and [`VolatilityFilter`](#volatilityfilter) act as Pairlist Filters, removing certain pairs and/or moving their positions in the pairlist.
If multiple Pairlist Handlers are used, they are chained and a combination of all Pairlist Handlers forms the resulting pairlist the bot uses for trading and backtesting. Pairlist Handlers are executed in the sequence they are configured. You can define either `StaticPairList`, `VolumePairList`, `ProducerPairList`, `RemotePairList` or `MarketCapPairList` as the starting Pairlist Handler.
If multiple Pairlist Handlers are used, they are chained and a combination of all Pairlist Handlers forms the resulting pairlist the bot uses for trading and backtesting. Pairlist Handlers are executed in the sequence they are configured. You can define either `StaticPairList`, `VolumePairList`, `ProducerPairList`, `RemotePairList`, `MarketCapPairList` or `PercentChangePairList` as the starting Pairlist Handler.
Inactive markets are always removed from the resulting pairlist. Explicitly blacklisted pairs (those in the `pair_blacklist` configuration setting) are also always removed from the resulting pairlist.
@@ -22,6 +22,7 @@ You may also use something like `.*DOWN/BTC` or `.*UP/BTC` to exclude leveraged
* [`StaticPairList`](#static-pair-list) (default, if not configured differently)
* [`VolumePairList`](#volume-pair-list)
* [`PercentChangePairList`](#percent-change-pair-list)
* [`ProducerPairList`](#producerpairlist)
* [`RemotePairList`](#remotepairlist)
* [`MarketCapPairList`](#marketcappairlist)
@@ -54,7 +55,6 @@ It uses configuration from `exchange.pair_whitelist` and `exchange.pair_blacklis
By default, only currently enabled pairs are allowed.
To skip pair validation against active markets, set `"allow_inactive": true` within the `StaticPairList` configuration.
This can be useful for backtesting expired pairs (like quarterly spot-markets).
This option must be configured along with `exchange.skip_pair_validation` in the exchange configuration.
When used in a "follow-up" position (e.g. after VolumePairlist), all pairs in `'pair_whitelist'` will be added to the end of the pairlist.
@@ -152,6 +152,89 @@ More sophisticated approach can be used, by using `lookback_timeframe` for candl
!!! Note
`VolumePairList` does not support backtesting mode.
#### Percent Change Pair List
`PercentChangePairList` filters and sorts pairs based on the percentage change in their price over the last 24 hours or any defined timeframe as part of advanced options. This allows traders to focus on assets that have experienced significant price movements, either positive or negative.
**Configuration Options**
* `number_assets`: Specifies the number of top pairs to select based on the 24-hour percentage change.
* `min_value`: Sets a minimum percentage change threshold. Pairs with a percentage change below this value will be filtered out.
* `max_value`: Sets a maximum percentage change threshold. Pairs with a percentage change above this value will be filtered out.
* `sort_direction`: Specifies the order in which pairs are sorted based on their percentage change. Accepts two values: `asc` for ascending order and `desc` for descending order.
* `refresh_period`: Defines the interval (in seconds) at which the pairlist will be refreshed. The default is 1800 seconds (30 minutes).
* `lookback_days`: Number of days to look back. When `lookback_days` is selected, the `lookback_timeframe` is defaulted to 1 day.
* `lookback_timeframe`: Timeframe to use for the lookback period.
* `lookback_period`: Number of periods to look back at.
When PercentChangePairList is used after other Pairlist Handlers, it will operate on the outputs of those handlers. If it is the leading Pairlist Handler, it will select pairs from all available markets with the specified stake currency.
`PercentChangePairList` uses ticker data from the exchange, provided via the ccxt library:
The percentage change is calculated as the change in price over the last 24 hours.
??? Note "Unsupported exchanges"
On some exchanges (like HTX), regular PercentChangePairList does not work as the api does not natively provide 24h percent change in price. This can be worked around by using candle data to calculate the percentage change. To roughly simulate 24h percent change, you can use the following configuration. Please note that these pairlists will only refresh once per day.
```json
"pairlists": [
{
"method": "PercentChangePairList",
"number_assets": 20,
"min_value": 0,
"refresh_period": 86400,
"lookback_days": 1
}
],
```
**Example Configuration to Read from Ticker**
```json
"pairlists": [
{
"method": "PercentChangePairList",
"number_assets": 15,
"min_value": -10,
"max_value": 50
}
],
```
In this configuration:
1. The top 15 pairs are selected based on the highest percentage change in price over the last 24 hours.
2. Only pairs with a percentage change between -10% and 50% are considered.
**Example Configuration to Read from Candles**
```json
"pairlists": [
{
"method": "PercentChangePairList",
"number_assets": 15,
"sort_key": "percentage",
"min_value": 0,
"refresh_period": 3600,
"lookback_timeframe": "1h",
"lookback_period": 72
}
],
```
This example builds the percent change pairs based on a rolling period of 3 days of 1-hour candles by using `lookback_timeframe` for candle size and `lookback_period` which specifies the number of candles.
The percent change in price is calculated using the following formula, which expresses the percentage difference between the current candle's close price and the previous candle's close price, as defined by the specified timeframe and lookback period:
$$ Percent Change = (\frac{Current Close - Previous Close}{Previous Close}) * 100 $$
!!! Warning "Range look back and refresh period"
When used in conjunction with `lookback_days` and `lookback_timeframe` the `refresh_period` can not be smaller than the candle size in seconds. As this will result in unnecessary requests to the exchanges API.
!!! Warning "Performance implications when using lookback range"
If used in first position in combination with lookback, the computation of the range-based percent change can be time and resource consuming, as it downloads candles for all tradable pairs. Hence it's highly advised to use the standard approach with `PercentChangePairList` to narrow the pairlist down for further percent-change calculation.
!!! Note "Backtesting"
`PercentChangePairList` does not support backtesting mode.
#### ProducerPairList
With `ProducerPairList`, you can reuse the pairlist from a [Producer](producer-consumer.md) without explicitly defining the pairlist on each consumer.
@@ -269,7 +352,7 @@ The optional `bearer_token` will be included in the requests Authorization Heade
#### MarketCapPairList
`MarketCapPairList` employs sorting/filtering of pairs by their marketcap rank based of CoinGecko. It will only recognize coins up to the coin placed at rank 250. The returned pairlist will be sorted based of their marketcap ranks.
`MarketCapPairList` employs sorting/filtering of pairs by their marketcap rank based of CoinGecko. The returned pairlist will be sorted based of their marketcap ranks.
```json
"pairlists": [
@@ -277,14 +360,22 @@ The optional `bearer_token` will be included in the requests Authorization Heade
"method": "MarketCapPairList",
"number_assets": 20,
"max_rank": 50,
"refresh_period": 86400
"refresh_period": 86400,
"categories": ["layer-1"]
}
]
```
`number_assets` defines the maximum number of pairs returned by the pairlist. `max_rank` will determine the maximum rank used in creating/filtering the pairlist. It's expected that some coins within the top `max_rank` marketcap will not be included in the resulting pairlist since not all pairs will have active trading pairs in your preferred market/stake/exchange combination.
`number_assets` defines the maximum number of pairs returned by the pairlist. `max_rank` will determine the maximum rank used in creating/filtering the pairlist. It's expected that some coins within the top `max_rank` marketcap will not be included in the resulting pairlist since not all pairs will have active trading pairs in your preferred market/stake/exchange combination.
While using a `max_rank` bigger than 250 is supported, it's not recommended, as it'll cause multiple API calls to CoinGecko, which can lead to rate limit issues.
`refresh_period` setting defines the period (in seconds) at which the marketcap rank data will be refreshed. Defaults to 86,400s (1 day). The pairlist cache (`refresh_period`) is applicable on both generating pairlists (first position in the list) and filtering instances (not the first position in the list).
The `refresh_period` setting defines the interval (in seconds) at which the marketcap rank data will be refreshed. The default is 86,400 seconds (1 day). The pairlist cache (`refresh_period`) applies to both generating pairlists (when in the first position in the list) and filtering instances (when not in the first position in the list).
The `categories` setting specifies the [coingecko categories](https://www.coingecko.com/en/categories) from which to select coins from. The default is an empty list `[]`, meaning no category filtering is applied.
If an incorrect category string is chosen, the plugin will print the available categories from CoinGecko and fail. The category should be the ID of the category, for example, for `https://www.coingecko.com/en/categories/layer-1`, the category ID would be `layer-1`. You can pass multiple categories such as `["layer-1", "meme-token"]` to select from several categories.
!!! Warning "Many categories"
Each added category corresponds to one API call to CoinGecko. The more categories you add, the longer the pairlist generation will take, potentially causing rate limit issues.
#### AgeFilter

View File

@@ -1,24 +1,16 @@
## Protections
!!! Warning "Beta feature"
This feature is still in it's testing phase. Should you notice something you think is wrong please let us know via Discord or via Github Issue.
Protections will protect your strategy from unexpected events and market conditions by temporarily stop trading for either one pair, or for all pairs.
All protection end times are rounded up to the next candle to avoid sudden, unexpected intra-candle buys.
!!! Note
!!! Tip "Usage tips"
Not all Protections will work for all strategies, and parameters will need to be tuned for your strategy to improve performance.
!!! Tip
Each Protection can be configured multiple times with different parameters, to allow different levels of protection (short-term / long-term).
!!! Note "Backtesting"
Protections are supported by backtesting and hyperopt, but must be explicitly enabled by using the `--enable-protections` flag.
!!! Warning "Setting protections from the configuration"
Setting protections from the configuration via `"protections": [],` key should be considered deprecated and will be removed in a future version.
It is also no longer guaranteed that your protections apply to the strategy in cases where the strategy defines [protections as property](hyperopt.md#optimizing-protections).
### Available Protections
* [`StoplossGuard`](#stoploss-guard) Stop trading if a certain amount of stoploss occurred within a certain time window.
@@ -36,6 +28,7 @@ All protection end times are rounded up to the next candle to avoid sudden, unex
| `lookback_period_candles` | Only trades that completed within the last `lookback_period_candles` candles will be considered. This setting may be ignored by some Protections. <br> **Datatype:** Positive integer (in candles).
| `lookback_period` | Only trades that completed after `current_time - lookback_period` will be considered. <br>Cannot be used together with `lookback_period_candles`. <br>This setting may be ignored by some Protections. <br> **Datatype:** Float (in minutes)
| `trade_limit` | Number of trades required at minimum (not used by all Protections). <br> **Datatype:** Positive integer
| `unlock_at` | Time when trading will be unlocked regularly (not used by all Protections). <br> **Datatype:** string <br>**Input Format:** "HH:MM" (24-hours)
!!! Note "Durations"
Durations (`stop_duration*` and `lookback_period*` can be defined in either minutes or candles).
@@ -44,7 +37,7 @@ All protection end times are rounded up to the next candle to avoid sudden, unex
#### Stoploss Guard
`StoplossGuard` selects all trades within `lookback_period` in minutes (or in candles when using `lookback_period_candles`).
If `trade_limit` or more trades resulted in stoploss, trading will stop for `stop_duration` in minutes (or in candles when using `stop_duration_candles`).
If `trade_limit` or more trades resulted in stoploss, trading will stop for `stop_duration` in minutes (or in candles when using `stop_duration_candles`, or until the set time when using `unlock_at`).
This applies across all pairs, unless `only_per_pair` is set to true, which will then only look at one pair at a time.
@@ -97,7 +90,7 @@ def protections(self):
#### Low Profit Pairs
`LowProfitPairs` uses all trades for a pair within `lookback_period` in minutes (or in candles when using `lookback_period_candles`) to determine the overall profit ratio.
If that ratio is below `required_profit`, that pair will be locked for `stop_duration` in minutes (or in candles when using `stop_duration_candles`).
If that ratio is below `required_profit`, that pair will be locked for `stop_duration` in minutes (or in candles when using `stop_duration_candles`, or until the set time when using `unlock_at`).
For futures bots, setting `only_per_side` will make the bot only consider one side, and will then only lock this one side, allowing for example shorts to continue after a series of long losses.
@@ -120,7 +113,7 @@ def protections(self):
#### Cooldown Period
`CooldownPeriod` locks a pair for `stop_duration` in minutes (or in candles when using `stop_duration_candles`) after selling, avoiding a re-entry for this pair for `stop_duration` minutes.
`CooldownPeriod` locks a pair for `stop_duration` in minutes (or in candles when using `stop_duration_candles`, or until the set time when using `unlock_at`) after exiting, avoiding a re-entry for this pair for `stop_duration` minutes.
The below example will stop trading a pair for 2 candles after closing a trade, allowing this pair to "cool down".

View File

@@ -0,0 +1,45 @@
## Imports necessary for a strategy
When creating a strategy, you will need to import the necessary modules and classes. The following imports are required for a strategy:
By default, we recommend the following imports as a base line for your strategy:
This will cover all imports necessary for freqtrade functions to work.
Obviously you can add more imports as needed for your strategy.
``` python
# flake8: noqa: F401
# isort: skip_file
# --- Do not remove these imports ---
import numpy as np
import pandas as pd
from datetime import datetime, timedelta, timezone
from pandas import DataFrame
from typing import Dict, Optional, Union, Tuple
from freqtrade.strategy import (
IStrategy,
Trade,
Order,
PairLocks,
informative, # @informative decorator
# Hyperopt Parameters
BooleanParameter,
CategoricalParameter,
DecimalParameter,
IntParameter,
RealParameter,
# timeframe helpers
timeframe_to_minutes,
timeframe_to_next_date,
timeframe_to_prev_date,
# Strategy helper functions
merge_informative_pair,
stoploss_from_absolute,
stoploss_from_open,
)
# --------------------------------
# Add your lib to import here
import talib.abstract as ta
from technical import qtpylib
```

View File

@@ -28,7 +28,7 @@ Freqtrade is a free and open source crypto trading bot written in Python. It is
- Develop your Strategy: Write your strategy in python, using [pandas](https://pandas.pydata.org/). Example strategies to inspire you are available in the [strategy repository](https://github.com/freqtrade/freqtrade-strategies).
- Download market data: Download historical data of the exchange and the markets your may want to trade with.
- Backtest: Test your strategy on downloaded historical data.
- Optimize: Find the best parameters for your strategy using hyperoptimization which employs machining learning methods. You can optimize buy, sell, take profit (ROI), stop-loss and trailing stop-loss parameters for your strategy.
- Optimize: Find the best parameters for your strategy using hyperoptimization which employs machine learning methods. You can optimize buy, sell, take profit (ROI), stop-loss and trailing stop-loss parameters for your strategy.
- Select markets: Create your static list or use an automatic one based on top traded volumes and/or prices (not available during backtesting). You can also explicitly blacklist markets you don't want to trade.
- Run: Test your strategy with simulated money (Dry-Run mode) or deploy it with real money (Live-Trade mode).
- Run using Edge (optional module): The concept is to find the best historical [trade expectancy](edge.md#expectancy) by markets based on variation of the stop-loss and then allow/reject markets to trade. The sizing of the trade is based on a risk of a percentage of your capital.
@@ -40,10 +40,12 @@ Freqtrade is a free and open source crypto trading bot written in Python. It is
Please read the [exchange specific notes](exchanges.md) to learn about eventual, special configurations needed for each exchange.
- [X] [Binance](https://www.binance.com/)
- [X] [Bitmart](https://bitmart.com/)
- [X] [BingX](https://bingx.com/invite/0EM9RX)
- [X] [Bitmart](https://bitmart.com/)
- [X] [Bybit](https://bybit.com/)
- [X] [Gate.io](https://www.gate.io/ref/6266643)
- [X] [HTX](https://www.htx.com/) (Former Huobi)
- [X] [Hyperliquid](https://hyperliquid.xyz/) (A decentralized exchange, or DEX)
- [X] [Kraken](https://kraken.com/)
- [X] [OKX](https://okx.com/) (Former OKEX)
- [ ] [potentially many others through <img alt="ccxt" width="30px" src="assets/ccxt-logo.svg" />](https://github.com/ccxt/ccxt/). _(We cannot guarantee they will work)_
@@ -51,9 +53,10 @@ Please read the [exchange specific notes](exchanges.md) to learn about eventual,
### Supported Futures Exchanges (experimental)
- [X] [Binance](https://www.binance.com/)
- [X] [Gate.io](https://www.gate.io/ref/6266643)
- [X] [OKX](https://okx.com/)
- [X] [Bybit](https://bybit.com/)
- [X] [Gate.io](https://www.gate.io/ref/6266643)
- [X] [Hyperliquid](https://hyperliquid.xyz/) (A decentralized exchange, or DEX)
- [X] [OKX](https://okx.com/)
Please make sure to read the [exchange specific notes](exchanges.md), as well as the [trading with leverage](leverage.md) documentation before diving in.
@@ -84,7 +87,7 @@ To run this bot we recommend you a linux cloud instance with a minimum of:
Alternatively
- Python 3.9+
- Python 3.10+
- pip (pip3)
- git
- TA-Lib

View File

@@ -24,7 +24,7 @@ The easiest way to install and run Freqtrade is to clone the bot Github reposito
The `stable` branch contains the code of the last release (done usually once per month on an approximately one week old snapshot of the `develop` branch to prevent packaging bugs, so potentially it's more stable).
!!! Note
Python3.9 or higher and the corresponding `pip` are assumed to be available. The install-script will warn you and stop if that's not the case. `git` is also needed to clone the Freqtrade repository.
Python3.10 or higher and the corresponding `pip` are assumed to be available. The install-script will warn you and stop if that's not the case. `git` is also needed to clone the Freqtrade repository.
Also, python headers (`python<yourversion>-dev` / `python<yourversion>-devel`) must be available for the installation to complete successfully.
!!! Warning "Up-to-date clock"
@@ -42,7 +42,7 @@ These requirements apply to both [Script Installation](#script-installation) and
### Install guide
* [Python >= 3.9](http://docs.python-guide.org/en/latest/starting/installation/)
* [Python >= 3.10](http://docs.python-guide.org/en/latest/starting/installation/)
* [pip](https://pip.pypa.io/en/stable/installing/)
* [git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git)
* [virtualenv](https://virtualenv.pypa.io/en/stable/installation.html) (Recommended)
@@ -54,7 +54,7 @@ We've included/collected install instructions for Ubuntu, MacOS, and Windows. Th
OS Specific steps are listed first, the common section below is necessary for all systems.
!!! Note
Python3.9 or higher and the corresponding pip are assumed to be available.
Python3.10 or higher and the corresponding pip are assumed to be available.
=== "Debian/Ubuntu"
#### Install necessary dependencies
@@ -67,16 +67,28 @@ OS Specific steps are listed first, the common section below is necessary for al
sudo apt install -y python3-pip python3-venv python3-dev python3-pandas git curl
```
=== "MacOS"
#### Install necessary dependencies
Install [Homebrew](https://brew.sh/) if you don't have it already.
```bash
# install packages
brew install gettext libomp
```
!!! Note
The `setup.sh` script will install these dependencies for you - assuming brew is installed on your system.
=== "RaspberryPi/Raspbian"
The following assumes the latest [Raspbian Buster lite image](https://www.raspberrypi.org/downloads/raspbian/).
This image comes with python3.9 preinstalled, making it easy to get freqtrade up and running.
This image comes with python3.11 preinstalled, making it easy to get freqtrade up and running.
Tested using a Raspberry Pi 3 with the Raspbian Buster lite image, all updates applied.
```bash
sudo apt-get install python3-venv libatlas-base-dev cmake curl
# Use pywheels.org to speed up installation
# Use piwheels.org to speed up installation
sudo echo "[global]\nextra-index-url=https://www.piwheels.org/simple" > tee /etc/pip.conf
git clone https://github.com/freqtrade/freqtrade.git
@@ -150,9 +162,7 @@ Each time you open a new terminal, you must run `source .venv/bin/activate` to a
source ./.venv/bin/activate
```
### Congratulations
[You are ready](#you-are-ready), and run the bot
[You are now ready](#you-are-ready) to run the bot.
### Other options of /setup.sh script
@@ -169,7 +179,7 @@ You can as well update, configure and reset the codebase of your bot with `./scr
** --install **
With this option, the script will install the bot and most dependencies:
You will need to have git and python3.9+ installed beforehand for this to work.
You will need to have git and python3.10+ installed beforehand for this to work.
* Mandatory software as: `ta-lib`
* Setup your virtualenv under `.venv/`
@@ -220,7 +230,7 @@ cd ..
rm -rf ./ta-lib*
```
#### Setup Python virtual environment (virtualenv)
### Setup Python virtual environment (virtualenv)
You will run freqtrade in separated `virtual environment`
@@ -232,19 +242,18 @@ python3 -m venv .venv
source .venv/bin/activate
```
#### Install python dependencies
### Install python dependencies
```bash
python3 -m pip install --upgrade pip
python3 -m pip install -r requirements.txt
# install freqtrade
python3 -m pip install -e .
```
### Congratulations
[You are now ready](#you-are-ready) to run the bot.
[You are ready](#you-are-ready), and run the bot
#### (Optional) Post-installation Tasks
### (Optional) Post-installation Tasks
!!! Note
If you run the bot on a server, you should consider using [Docker](docker_quickstart.md) or a terminal multiplexer like `screen` or [`tmux`](https://en.wikipedia.org/wiki/Tmux) to avoid that the bot is stopped on logout.
@@ -333,9 +342,7 @@ cd build_helpers
bash install_ta-lib.sh ${CONDA_PREFIX} nosudo
```
### Congratulations
[You are ready](#you-are-ready), and run the bot
[You are now ready](#you-are-ready) to run the bot.
### Important shortcuts

View File

@@ -101,3 +101,4 @@ This could lead to a false-negative (the strategy will then be reported as non-b
- `lookahead-analysis` has access to everything that backtesting has too.
Please don't provoke any configs like enabling position stacking.
If you decide to do so, then make doubly sure that you won't ever run out of `max_open_trades` amount and neither leftover money in your wallet.
- In the results table, the `biased_indicators` column will falsely flag FreqAI target indicators defined in `set_freqai_targets()` as biased. These are not biased and can safely be ignored.

View File

@@ -1,6 +1,7 @@
markdown==3.6
mkdocs==1.6.0
mkdocs-material==9.5.27
markdown==3.7
mkdocs==1.6.1
mkdocs-material==9.5.45
mdx_truly_sane_lists==1.3
pymdown-extensions==10.8.1
pymdown-extensions==10.12
jinja2==3.1.4
mike==2.1.3

View File

@@ -2,7 +2,7 @@
## FreqUI
FreqUI now has it's own dedicated [documentation section](frequi.md) - please refer to that section for all information regarding the FreqUI.
FreqUI now has it's own dedicated [documentation section](freq-ui.md) - please refer to that section for all information regarding the FreqUI.
## Configuration

View File

@@ -1,6 +1,13 @@
# SQL Helper
This page contains some help if you want to edit your sqlite db.
This page contains some help if you want to query your sqlite db.
!!! Tip "Other Database systems"
To use other Database Systems like PostgreSQL or MariaDB, you can use the same queries, but you need to use the respective client for the database system. [Click here](advanced-setup.md#use-a-different-database-system) to learn how to setup a different database system with freqtrade.
!!! Warning
If you are not familiar with SQL, you should be very careful when running queries on your database.
Always make sure to have a backup of your database before running any queries.
## Install sqlite3
@@ -43,13 +50,25 @@ sqlite3
.schema <table_name>
```
## Get all trades in the table
### Get all trades in the table
```sql
SELECT * FROM trades;
```
## Fix trade still open after a manual exit on the exchange
## Destructive queries
Queries that write to the database.
These queries should usually not be necessary as freqtrade tries to handle all database operations itself - or exposes them via API or telegram commands.
!!! Warning
Please make sure you have a backup of your database before running any of the below queries.
!!! Danger
You should also **never** run any writing query (`update`, `insert`, `delete`) while a bot is connected to the database.
This can and will lead to data corruption - most likely, without the possibility of recovery.
### Fix trade still open after a manual exit on the exchange
!!! Warning
Manually selling a pair on the exchange will not be detected by the bot and it will try to sell anyway. Whenever possible, /forceexit <tradeid> should be used to accomplish the same thing.
@@ -69,7 +88,7 @@ SET is_open=0,
WHERE id=<trade_ID_to_update>;
```
### Example
#### Example
```sql
UPDATE trades
@@ -82,7 +101,7 @@ SET is_open=0,
WHERE id=31;
```
## Remove trade from the database
### Remove trade from the database
!!! Tip "Use RPC Methods to delete trades"
Consider using `/delete <tradeid>` via telegram or rest API. That's the recommended way to deleting trades.
@@ -100,39 +119,3 @@ DELETE FROM trades WHERE id = 31;
!!! Warning
This will remove this trade from the database. Please make sure you got the correct id and **NEVER** run this query without the `where` clause.
## Use a different database system
Freqtrade is using SQLAlchemy, which supports multiple different database systems. As such, a multitude of database systems should be supported.
Freqtrade does not depend or install any additional database driver. Please refer to the [SQLAlchemy docs](https://docs.sqlalchemy.org/en/14/core/engines.html#database-urls) on installation instructions for the respective database systems.
The following systems have been tested and are known to work with freqtrade:
* sqlite (default)
* PostgreSQL
* MariaDB
!!! Warning
By using one of the below database systems, you acknowledge that you know how to manage such a system. The freqtrade team will not provide any support with setup or maintenance (or backups) of the below database systems.
### PostgreSQL
Installation:
`pip install psycopg2-binary`
Usage:
`... --db-url postgresql+psycopg2://<username>:<password>@localhost:5432/<database>`
Freqtrade will automatically create the tables necessary upon startup.
If you're running different instances of Freqtrade, you must either setup one database per Instance or use different users / schemas for your connections.
### MariaDB / MySQL
Freqtrade supports MariaDB by using SQLAlchemy, which supports multiple different database systems.
Installation:
`pip install pymysql`
Usage:
`... --db-url mysql+pymysql://<username>:<password>@localhost:3306/<database>`

View File

@@ -36,6 +36,7 @@ The Order-type will be ignored if only one mode is available.
| Gate | limit |
| Okx | limit |
| Kucoin | stop-limit, stop-market|
| Hyperliquid (futures only) | limit |
!!! Note "Tight stoploss"
<ins>Do not set too low/tight stoploss value when using stop loss on exchange!</ins>

196
docs/strategy-101.md Normal file
View File

@@ -0,0 +1,196 @@
# Freqtrade Strategies 101: A Quick Start for Strategy Development
For the purposes of this quick start, we are assuming you are familiar with the basics of trading, and have read the
[Freqtrade basics](bot-basics.md) page.
## Required Knowledge
A strategy in Freqtrade is a Python class that defines the logic for buying and selling cryptocurrency `assets`.
Assets are defined as `pairs`, which represent the `coin` and the `stake`. The coin is the asset you are trading using another currency as the stake.
Data is supplied by the exchange in the form of `candles`, which are made up of a six values: `date`, `open`, `high`, `low`, `close` and `volume`.
`Technical analysis` functions analyse the candle data using various computational and statistical formulae, and produce secondary values called `indicators`.
Indicators are analysed on the asset pair candles to generate `signals`.
Signals are turned into `orders` on a cryptocurrency `exchange`, i.e. `trades`.
We use the terms `entry` and `exit` instead of `buying` and `selling` because Freqtrade supports both `long` and `short` trades.
- **long**: You buy the coin based on a stake, e.g. buying the coin BTC using USDT as your stake, and you make a profit by selling the coin at a higher rate than you paid for. In long trades, profits are made by the coin value going up versus the stake.
- **short**: You borrow capital from the exchange in the form of the coin, and you pay back the stake value of the coin later. In short trades profits are made by the coin value going down versus the stake (you pay the loan off at a lower rate).
Whilst Freqtrade supports spot and futures markets for certain exchanges, for simplicity we will focus on spot (long) trades only.
## Structure of a Basic Strategy
### Main dataframe
Freqtrade strategies use a tabular data structure with rows and columns known as a `dataframe` to generate signals to enter and exit trades.
Each pair in your configured pairlist has its own dataframe. Dataframes are indexed by the `date` column, e.g. `2024-06-31 12:00`.
The next 5 columns represent the `open`, `high`, `low`, `close` and `volume` (OHLCV) data.
### Populate indicator values
The `populate_indicators` function adds columns to the dataframe that represent the technical analysis indicator values.
Examples of common indicators include Relative Strength Index, Bollinger Bands, Money Flow Index, Moving Average, and Average True Range.
Columns are added to the dataframe by calling technical analysis functions, e.g. ta-lib's RSI function `ta.RSI()`, and assigning them to a column name, e.g. `rsi`
```python
dataframe['rsi'] = ta.RSI(dataframe)
```
??? Hint "Technical Analysis libraries"
Different libraries work in different ways to generate indicator values. Please check the documentation of each library to understand
how to integrate it into your strategy. You can also check the [Freqtrade example strategies](https://github.com/freqtrade/freqtrade-strategies) to give you ideas.
### Populate entry signals
The `populate_entry_trend` function defines conditions for an entry signal.
The dataframe column `enter_long` is added to the dataframe, and when a value of `1` is in this column, Freqtrade sees an entry signal.
??? Hint "Shorting"
To enter short trades, use the `enter_short` column.
### Populate exit signals
The `populate_exit_trend` function defines conditions for an exit signal.
The dataframe column `exit_long` is added to the dataframe, and when a value of `1` is in this column, Freqtrade sees an exit signal.
??? Hint "Shorting"
To exit short trades, use the `exit_short` column.
## A simple strategy
Here is a minimal example of a Freqtrade strategy:
```python
from freqtrade.strategy import IStrategy
from pandas import DataFrame
import talib.abstract as ta
class MyStrategy(IStrategy):
# set the initial stoploss to -10%
stoploss = -0.10
# exit profitable positions at any time when the profit is greater than 1%
minimal_roi = {"0": 0.01}
def populate_indicators(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
# generate values for technical analysis indicators
dataframe['rsi'] = ta.RSI(dataframe, timeperiod=14)
return dataframe
def populate_entry_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
# generate entry signals based on indicator values
dataframe.loc[
(dataframe['rsi'] < 30),
'enter_long'] = 1
return dataframe
def populate_exit_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
# generate exit signals based on indicator values
dataframe.loc[
(dataframe['rsi'] > 70),
'exit_long'] = 1
return dataframe
```
## Making trades
When a signal is found (a `1` in an entry or exit column), Freqtrade will attempt to make an order, i.e. a `trade` or `position`.
Each new trade position takes up a `slot`. Slots represent the maximum number of concurrent new trades that can be opened.
The number of slots is defined by the `max_open_trades` [configuration](configuration.md) option.
However, there can be a range of scenarios where generating a signal does not always create a trade order. These include:
- not enough remaining stake to buy an asset, or funds in your wallet to sell an asset (including any fees)
- not enough remaining free slots for a new trade to be opened (the number of positions you have open equals the `max_open_trades` option)
- there is already an open trade for a pair (Freqtrade cannot stack positions - however it can [adjust existing positions](strategy-callbacks.md#adjust-trade-position))
- if an entry and exit signal is present on the same candle, they are considered as [colliding](strategy-customization.md#colliding-signals), and no order will be raised
- the strategy actively rejects the trade order due to logic you specify by using one of the relevant [entry](strategy-callbacks.md#trade-entry-buy-order-confirmation) or [exit](strategy-callbacks.md#trade-exit-sell-order-confirmation) callbacks
Read through the [strategy customization](strategy-customization.md) documentation for more details.
## Backtesting and forward testing
Strategy development can be a long and frustrating process, as turning our human "gut instincts" into a working computer-controlled
("algo") strategy is not always straightforward.
Therefore a strategy should be tested to verify that it is going to work as intended.
Freqtrade has two testing modes:
- **backtesting**: using historical data that you [download from an exchange](data-download.md), backtesting is a quick way to assess performance of a strategy. However, it can be very easy to distort results so a strategy will look a lot more profitable than it really is. Check the [backtesting documentation](backtesting.md) for more information.
- **dry run**: often referred to as _forward testing_, dry runs use real time data from the exchange. However, any signals that would result in trades are tracked as normal by Freqtrade, but do not have any trades opened on the exchange itself. Forward testing runs in real time, so whilst it takes longer to get results it is a much more reliable indicator of **potential** performance than backtesting.
Dry runs are enabled by setting `dry_run` to true in your [configuration](configuration.md#using-dry-run-mode).
!!! Warning "Backtests can be very inaccurate"
There are many reasons why backtest results may not match reality. Please check the [backtesting assumptions](backtesting.md#assumptions-made-by-backtesting) and [common strategy mistakes](strategy-customization.md#common-mistakes-when-developing-strategies) documentation.
Some websites that list and rank Freqtrade strategies show impressive backtest results. Do not assume these results are achieveable or realistic.
??? Hint "Useful commands"
Freqtrade includes two useful commands to check for basic flaws in strategies: [lookahead-analysis](lookahead-analysis.md) and [recursive-analysis](recursive-analysis.md).
### Assessing backtesting and dry run results
Always dry run your strategy after backtesting it to see if backtesting and dry run results are sufficiently similar.
If there is any significant difference, verify that your entry and exit signals are consistent and appear on the same candles between the two modes. However, there will always be differences between dry runs and backtests:
- Backtesting assumes all orders fill. In dry runs this might not be the case if using limit orders or there is no volume on the exchange.
- Following an entry signal on candle close, backtesting assumes trades enter at the next candle's open price (unless you have custom pricing callbacks in your strategy). In dry runs, there is often a delay between signals and trades opening.
This is because when new candles come in on your main timeframe, e.g. every 5 minutes, it takes time for Freqtrade to analyse all pair dataframes. Therefore, Freqtrade will attempt to open trades a few seconds (ideally a small a delay as possible)
after candle open.
- As entry rates in dry runs might not match backtesting, this means profit calculations will also differ. Therefore, it is normal if ROI, stoploss, trailing stoploss and callback exits are not identical.
- The more computational "lag" you have between new candles coming in and your signals being raised and trades being opened will result in greater price unpredictability. Make sure your computer is powerful enough to process the data for the number
of pairs you have in your pairlist within a reasonable time. Freqtrade will warn you in the logs if there are significant data processing delays.
## Controlling or monitoring a running bot
Once your bot is running in dry or live mode, Freqtrade has five mechanisms to control or monitor a running bot:
- **[FreqUI](freq-ui.md)**: The easiest to get started with, FreqUI is a web interface to see and control current activity of your bot.
- **[Telegram](telegram-usage.md)**: On mobile devices, Telegram integration is available to get alerts about your bot activity and to control certain aspects.
- **[FTUI](https://github.com/freqtrade/ftui)**: FTUI is a terminal (command line) interface to Freqtrade, and allows monitoring of a running bot only.
- **[REST API](rest-api.md)**: The REST API allows programmers to develop their own tools to interact with a Freqtrade bot.
- **[Webhooks](webhook-config.md)**: Freqtrade can send information to other services, e.g. discord, by webhooks.
### Logs
Freqtrade generates extensive debugging logs to help you understand what's happening. Please familiarise yourself with the information and error messages you might see in your bot logs.
## Final Thoughts
Algo trading is difficult, and most public strategies are not good performers due to the time and effort to make a strategy work profitably in multiple scenarios.
Therefore, taking public strategies and using backtests as a way to assess performance is often problematic. However, Freqtrade provides useful ways to help you make decisions and do your due diligence.
There are many different ways to achieve profitability, and there is no one single tip, trick or config option that will fix a poorly performing strategy.
Freqtrade is an open source platform with a large and helpful community - make sure to visit our [discord channel](https://discord.gg/p7nuUNVfP7) to discuss your strategy with others!
As always, only invest what you are willing to lose.
## Conclusion
Developing a strategy in Freqtrade involves defining entry and exit signals based on technical indicators. By following the structure and methods outlined above, you can create and test your own trading strategies.
Common questions and answers are available on our [FAQ](faq.md).
To continue, refer to the more in-depth [Freqtrade strategy customization documentation](strategy-customization.md).

View File

@@ -38,9 +38,9 @@ class AwesomeStrategy(IStrategy):
trade.set_custom_data(key='entry_type', value=trade_entry_type)
return super().bot_loop_start(**kwargs)
def adjust_entry_price(self, trade: Trade, order: Optional[Order], pair: str,
def adjust_entry_price(self, trade: Trade, order: Order | None, pair: str,
current_time: datetime, proposed_rate: float, current_order_rate: float,
entry_tag: Optional[str], side: str, **kwargs) -> float:
entry_tag: str | None, side: str, **kwargs) -> float:
# Limit orders to use and follow SMA200 as price target for the first 10 minutes since entry trigger for BTC/USDT pair.
if (
pair == 'BTC/USDT'

View File

@@ -24,6 +24,8 @@ Currently available callbacks:
!!! Tip "Callback calling sequence"
You can find the callback calling sequence in [bot-basics](bot-basics.md#bot-execution-logic)
--8<-- "includes/strategy-imports.md"
## Bot start
A simple callback which is called once when the strategy is loaded.
@@ -41,10 +43,10 @@ class AwesomeStrategy(IStrategy):
Called only once after bot instantiation.
:param **kwargs: Ensure to keep this here so updates to this won't break your strategy.
"""
if self.config['runmode'].value in ('live', 'dry_run'):
if self.config["runmode"].value in ("live", "dry_run"):
# Assign this to the class by using self.*
# can then be used by populate_* methods
self.custom_remote_data = requests.get('https://some_remote_source.example.com')
self.custom_remote_data = requests.get("https://some_remote_source.example.com")
```
@@ -57,6 +59,7 @@ seconds, unless configured differently) or once per candle in backtest/hyperopt
This can be used to perform calculations which are pair independent (apply to all pairs), loading of external data, etc.
``` python
# Default imports
import requests
class AwesomeStrategy(IStrategy):
@@ -71,10 +74,10 @@ class AwesomeStrategy(IStrategy):
:param current_time: datetime object, containing the current datetime
:param **kwargs: Ensure to keep this here so updates to this won't break your strategy.
"""
if self.config['runmode'].value in ('live', 'dry_run'):
if self.config["runmode"].value in ("live", "dry_run"):
# Assign this to the class by using self.*
# can then be used by populate_* methods
self.remote_data = requests.get('https://some_remote_source.example.com')
self.remote_data = requests.get("https://some_remote_source.example.com")
```
@@ -83,22 +86,24 @@ class AwesomeStrategy(IStrategy):
Called before entering a trade, makes it possible to manage your position size when placing a new trade.
```python
# Default imports
class AwesomeStrategy(IStrategy):
def custom_stake_amount(self, pair: str, current_time: datetime, current_rate: float,
proposed_stake: float, min_stake: Optional[float], max_stake: float,
leverage: float, entry_tag: Optional[str], side: str,
proposed_stake: float, min_stake: float | None, max_stake: float,
leverage: float, entry_tag: str | None, side: str,
**kwargs) -> float:
dataframe, _ = self.dp.get_analyzed_dataframe(pair=pair, timeframe=self.timeframe)
current_candle = dataframe.iloc[-1].squeeze()
if current_candle['fastk_rsi_1h'] > current_candle['fastd_rsi_1h']:
if self.config['stake_amount'] == 'unlimited':
if current_candle["fastk_rsi_1h"] > current_candle["fastd_rsi_1h"]:
if self.config["stake_amount"] == "unlimited":
# Use entire available wallet during favorable conditions when in compounding mode.
return max_stake
else:
# Compound profits during favorable conditions instead of using a static stake.
return self.wallets.get_total_stake_amount() / self.config['max_open_trades']
return self.wallets.get_total_stake_amount() / self.config["max_open_trades"]
# Use default stake amount.
return proposed_stake
@@ -129,25 +134,27 @@ Using `custom_exit()` signals in place of stoploss though *is not recommended*.
An example of how we can use different indicators depending on the current profit and also exit trades that were open longer than one day:
``` python
# Default imports
class AwesomeStrategy(IStrategy):
def custom_exit(self, pair: str, trade: 'Trade', current_time: 'datetime', current_rate: float,
def custom_exit(self, pair: str, trade: Trade, current_time: datetime, current_rate: float,
current_profit: float, **kwargs):
dataframe, _ = self.dp.get_analyzed_dataframe(pair, self.timeframe)
last_candle = dataframe.iloc[-1].squeeze()
# Above 20% profit, sell when rsi < 80
if current_profit > 0.2:
if last_candle['rsi'] < 80:
return 'rsi_below_80'
if last_candle["rsi"] < 80:
return "rsi_below_80"
# Between 2% and 10%, sell if EMA-long above EMA-short
if 0.02 < current_profit < 0.1:
if last_candle['emalong'] > last_candle['emashort']:
return 'ema_long_below_80'
if last_candle["emalong"] > last_candle["emashort"]:
return "ema_long_below_80"
# Sell any positions at a loss if they are held for more than one day.
if current_profit < 0.0 and (current_time - trade.open_date_utc).days >= 1:
return 'unclog'
return "unclog"
```
See [Dataframe access](strategy-advanced.md#dataframe-access) for more information about dataframe use in strategy callbacks.
@@ -158,7 +165,8 @@ Called for open trade every iteration (roughly every 5 seconds) until a trade is
The usage of the custom stoploss method must be enabled by setting `use_custom_stoploss=True` on the strategy object.
The stoploss price can only ever move upwards - if the stoploss value returned from `custom_stoploss` would result in a lower stoploss price than was previously set, it will be ignored. The traditional `stoploss` value serves as an absolute lower level and will be instated as the initial stoploss (before this method is called for the first time for a trade), and is still mandatory.
The stoploss price can only ever move upwards - if the stoploss value returned from `custom_stoploss` would result in a lower stoploss price than was previously set, it will be ignored. The traditional `stoploss` value serves as an absolute lower level and will be instated as the initial stoploss (before this method is called for the first time for a trade), and is still mandatory.
As custom stoploss acts as regular, changing stoploss, it will behave similar to `trailing_stop` - and trades exiting due to this will have the exit_reason of `"trailing_stop_loss"`.
The method must return a stoploss value (float / number) as a percentage of the current price.
E.g. If the `current_rate` is 200 USD, then returning `0.02` will set the stoploss price 2% lower, at 196 USD.
@@ -168,7 +176,6 @@ The absolute value of the return value is used (the sign is ignored), so returni
Returning `None` will be interpreted as "no desire to change", and is the only safe way to return when you'd like to not modify the stoploss.
`NaN` and `inf` values are considered invalid and will be ignored (identical to `None`).
Stoploss on exchange works similar to `trailing_stop`, and the stoploss on exchange is updated as configured in `stoploss_on_exchange_interval` ([More details about stoploss on exchange](stoploss.md#stop-loss-on-exchangefreqtrade)).
!!! Note "Use of dates"
@@ -196,9 +203,7 @@ Of course, many more things are possible, and all examples can be combined at wi
To simulate a regular trailing stoploss of 4% (trailing 4% behind the maximum reached price) you would use the following very simple method:
``` python
# additional imports required
from datetime import datetime
from freqtrade.persistence import Trade
# Default imports
class AwesomeStrategy(IStrategy):
@@ -206,9 +211,9 @@ class AwesomeStrategy(IStrategy):
use_custom_stoploss = True
def custom_stoploss(self, pair: str, trade: 'Trade', current_time: datetime,
def custom_stoploss(self, pair: str, trade: Trade, current_time: datetime,
current_rate: float, current_profit: float, after_fill: bool,
**kwargs) -> Optional[float]:
**kwargs) -> float | None:
"""
Custom stoploss logic, returning the new distance relative to current_rate (as ratio).
e.g. returning -0.05 would create a stoploss 5% below current_rate.
@@ -236,8 +241,7 @@ class AwesomeStrategy(IStrategy):
Use the initial stoploss for the first 60 minutes, after this change to 10% trailing stoploss, and after 2 hours (120 minutes) we use a 5% trailing stoploss.
``` python
from datetime import datetime, timedelta
from freqtrade.persistence import Trade
# Default imports
class AwesomeStrategy(IStrategy):
@@ -245,9 +249,9 @@ class AwesomeStrategy(IStrategy):
use_custom_stoploss = True
def custom_stoploss(self, pair: str, trade: 'Trade', current_time: datetime,
def custom_stoploss(self, pair: str, trade: Trade, current_time: datetime,
current_rate: float, current_profit: float, after_fill: bool,
**kwargs) -> Optional[float]:
**kwargs) -> float | None:
# Make sure you have the longest interval first - these conditions are evaluated from top to bottom.
if current_time - timedelta(minutes=120) > trade.open_date_utc:
@@ -263,8 +267,7 @@ Use the initial stoploss for the first 60 minutes, after this change to 10% trai
If an additional order fills, set stoploss to -10% below the new `open_rate` ([Averaged across all entries](#position-adjust-calculations)).
``` python
from datetime import datetime, timedelta
from freqtrade.persistence import Trade
# Default imports
class AwesomeStrategy(IStrategy):
@@ -272,9 +275,9 @@ class AwesomeStrategy(IStrategy):
use_custom_stoploss = True
def custom_stoploss(self, pair: str, trade: 'Trade', current_time: datetime,
def custom_stoploss(self, pair: str, trade: Trade, current_time: datetime,
current_rate: float, current_profit: float, after_fill: bool,
**kwargs) -> Optional[float]:
**kwargs) -> float | None:
if after_fill:
# After an additional order, start with a stoploss of 10% below the new open rate
@@ -293,8 +296,7 @@ Use a different stoploss depending on the pair.
In this example, we'll trail the highest price with 10% trailing stoploss for `ETH/BTC` and `XRP/BTC`, with 5% trailing stoploss for `LTC/BTC` and with 15% for all other pairs.
``` python
from datetime import datetime
from freqtrade.persistence import Trade
# Default imports
class AwesomeStrategy(IStrategy):
@@ -302,13 +304,13 @@ class AwesomeStrategy(IStrategy):
use_custom_stoploss = True
def custom_stoploss(self, pair: str, trade: 'Trade', current_time: datetime,
def custom_stoploss(self, pair: str, trade: Trade, current_time: datetime,
current_rate: float, current_profit: float, after_fill: bool,
**kwargs) -> Optional[float]:
**kwargs) -> float | None:
if pair in ('ETH/BTC', 'XRP/BTC'):
if pair in ("ETH/BTC", "XRP/BTC"):
return -0.10
elif pair in ('LTC/BTC'):
elif pair in ("LTC/BTC"):
return -0.05
return -0.15
```
@@ -320,8 +322,7 @@ Use the initial stoploss until the profit is above 4%, then use a trailing stopl
Please note that the stoploss can only increase, values lower than the current stoploss are ignored.
``` python
from datetime import datetime, timedelta
from freqtrade.persistence import Trade
# Default imports
class AwesomeStrategy(IStrategy):
@@ -329,9 +330,9 @@ class AwesomeStrategy(IStrategy):
use_custom_stoploss = True
def custom_stoploss(self, pair: str, trade: 'Trade', current_time: datetime,
def custom_stoploss(self, pair: str, trade: Trade, current_time: datetime,
current_rate: float, current_profit: float, after_fill: bool,
**kwargs) -> Optional[float]:
**kwargs) -> float | None:
if current_profit < 0.04:
return None # return None to keep using the initial stoploss
@@ -353,9 +354,7 @@ Instead of continuously trailing behind the current price, this example sets fix
* Once profit is > 40% - set stoploss to 25% above open price.
``` python
from datetime import datetime
from freqtrade.persistence import Trade
from freqtrade.strategy import stoploss_from_open
# Default imports
class AwesomeStrategy(IStrategy):
@@ -363,9 +362,9 @@ class AwesomeStrategy(IStrategy):
use_custom_stoploss = True
def custom_stoploss(self, pair: str, trade: 'Trade', current_time: datetime,
def custom_stoploss(self, pair: str, trade: Trade, current_time: datetime,
current_rate: float, current_profit: float, after_fill: bool,
**kwargs) -> Optional[float]:
**kwargs) -> float | None:
# evaluate highest to lowest, so that highest possible stop is used
if current_profit > 0.40:
@@ -384,23 +383,25 @@ class AwesomeStrategy(IStrategy):
Absolute stoploss value may be derived from indicators stored in dataframe. Example uses parabolic SAR below the price as stoploss.
``` python
# Default imports
class AwesomeStrategy(IStrategy):
def populate_indicators(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
# <...>
dataframe['sar'] = ta.SAR(dataframe)
dataframe["sar"] = ta.SAR(dataframe)
use_custom_stoploss = True
def custom_stoploss(self, pair: str, trade: 'Trade', current_time: datetime,
def custom_stoploss(self, pair: str, trade: Trade, current_time: datetime,
current_rate: float, current_profit: float, after_fill: bool,
**kwargs) -> Optional[float]:
**kwargs) -> float | None:
dataframe, _ = self.dp.get_analyzed_dataframe(pair, self.timeframe)
last_candle = dataframe.iloc[-1].squeeze()
# Use parabolic sar as absolute stoploss price
stoploss_price = last_candle['sar']
stoploss_price = last_candle["sar"]
# Convert absolute price to percentage relative to current_rate
if stoploss_price < current_rate:
@@ -429,10 +430,7 @@ Stoploss values returned from `custom_stoploss()` must specify a percentage rela
``` python
from datetime import datetime
from freqtrade.persistence import Trade
from freqtrade.strategy import IStrategy, stoploss_from_open
# Default imports
class AwesomeStrategy(IStrategy):
@@ -440,9 +438,9 @@ Stoploss values returned from `custom_stoploss()` must specify a percentage rela
use_custom_stoploss = True
def custom_stoploss(self, pair: str, trade: 'Trade', current_time: datetime,
def custom_stoploss(self, pair: str, trade: Trade, current_time: datetime,
current_rate: float, current_profit: float, after_fill: bool,
**kwargs) -> Optional[float]:
**kwargs) -> float | None:
# once the profit has risen above 10%, keep the stoploss at 7% above the open price
if current_profit > 0.10:
@@ -469,38 +467,34 @@ The helper function `stoploss_from_absolute()` can be used to convert from an ab
??? Example "Returning a stoploss using absolute price from the custom stoploss function"
If we want to trail a stop price at 2xATR below current price we can call `stoploss_from_absolute(current_rate + (side * candle['atr'] * 2), current_rate=current_rate, is_short=trade.is_short, leverage=trade.leverage)`.
If we want to trail a stop price at 2xATR below current price we can call `stoploss_from_absolute(current_rate + (side * candle["atr"] * 2), current_rate=current_rate, is_short=trade.is_short, leverage=trade.leverage)`.
For futures, we need to adjust the direction (up or down), as well as adjust for leverage, since the [`custom_stoploss`](strategy-callbacks.md#custom-stoploss) callback returns the ["risk for this trade"](stoploss.md#stoploss-and-leverage) - not the relative price movement.
``` python
from datetime import datetime
from freqtrade.persistence import Trade
from freqtrade.strategy import IStrategy, stoploss_from_absolute, timeframe_to_prev_date
# Default imports
class AwesomeStrategy(IStrategy):
use_custom_stoploss = True
def populate_indicators_1h(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
dataframe['atr'] = ta.ATR(dataframe, timeperiod=14)
def populate_indicators(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
dataframe["atr"] = ta.ATR(dataframe, timeperiod=14)
return dataframe
def custom_stoploss(self, pair: str, trade: 'Trade', current_time: datetime,
def custom_stoploss(self, pair: str, trade: Trade, current_time: datetime,
current_rate: float, current_profit: float, after_fill: bool,
**kwargs) -> Optional[float]:
**kwargs) -> float | None:
dataframe, _ = self.dp.get_analyzed_dataframe(pair, self.timeframe)
trade_date = timeframe_to_prev_date(self.timeframe, trade.open_date_utc)
candle = dataframe.iloc[-1].squeeze()
side = 1 if trade.is_short else -1
return stoploss_from_absolute(current_rate + (side * candle['atr'] * 2),
return stoploss_from_absolute(current_rate + (side * candle["atr"] * 2),
current_rate=current_rate,
is_short=trade.is_short,
leverage=trade.leverage)
```
---
## Custom order price rules
@@ -520,29 +514,28 @@ Each of these methods are called right before placing an order on the exchange.
### Custom order entry and exit price example
``` python
from datetime import datetime, timedelta, timezone
from freqtrade.persistence import Trade
# Default imports
class AwesomeStrategy(IStrategy):
# ... populate_* methods
def custom_entry_price(self, pair: str, trade: Optional['Trade'], current_time: datetime, proposed_rate: float,
entry_tag: Optional[str], side: str, **kwargs) -> float:
def custom_entry_price(self, pair: str, trade: Trade | None, current_time: datetime, proposed_rate: float,
entry_tag: str | None, side: str, **kwargs) -> float:
dataframe, last_updated = self.dp.get_analyzed_dataframe(pair=pair,
timeframe=self.timeframe)
new_entryprice = dataframe['bollinger_10_lowerband'].iat[-1]
new_entryprice = dataframe["bollinger_10_lowerband"].iat[-1]
return new_entryprice
def custom_exit_price(self, pair: str, trade: Trade,
current_time: datetime, proposed_rate: float,
current_profit: float, exit_tag: Optional[str], **kwargs) -> float:
current_profit: float, exit_tag: str | None, **kwargs) -> float:
dataframe, last_updated = self.dp.get_analyzed_dataframe(pair=pair,
timeframe=self.timeframe)
new_exitprice = dataframe['bollinger_10_upperband'].iat[-1]
new_exitprice = dataframe["bollinger_10_upperband"].iat[-1]
return new_exitprice
@@ -579,8 +572,7 @@ It applies a tight timeout for higher priced assets, while allowing more time to
The function must return either `True` (cancel order) or `False` (keep order alive).
``` python
from datetime import datetime, timedelta
from freqtrade.persistence import Trade, Order
# Default imports
class AwesomeStrategy(IStrategy):
@@ -588,11 +580,11 @@ class AwesomeStrategy(IStrategy):
# Set unfilledtimeout to 25 hours, since the maximum timeout from below is 24 hours.
unfilledtimeout = {
'entry': 60 * 25,
'exit': 60 * 25
"entry": 60 * 25,
"exit": 60 * 25
}
def check_entry_timeout(self, pair: str, trade: 'Trade', order: 'Order',
def check_entry_timeout(self, pair: str, trade: Trade, order: Order,
current_time: datetime, **kwargs) -> bool:
if trade.open_rate > 100 and trade.open_date_utc < current_time - timedelta(minutes=5):
return True
@@ -603,7 +595,7 @@ class AwesomeStrategy(IStrategy):
return False
def check_exit_timeout(self, pair: str, trade: Trade, order: 'Order',
def check_exit_timeout(self, pair: str, trade: Trade, order: Order,
current_time: datetime, **kwargs) -> bool:
if trade.open_rate > 100 and trade.open_date_utc < current_time - timedelta(minutes=5):
return True
@@ -620,8 +612,7 @@ class AwesomeStrategy(IStrategy):
### Custom order timeout example (using additional data)
``` python
from datetime import datetime
from freqtrade.persistence import Trade, Order
# Default imports
class AwesomeStrategy(IStrategy):
@@ -629,24 +620,24 @@ class AwesomeStrategy(IStrategy):
# Set unfilledtimeout to 25 hours, since the maximum timeout from below is 24 hours.
unfilledtimeout = {
'entry': 60 * 25,
'exit': 60 * 25
"entry": 60 * 25,
"exit": 60 * 25
}
def check_entry_timeout(self, pair: str, trade: 'Trade', order: 'Order',
def check_entry_timeout(self, pair: str, trade: Trade, order: Order,
current_time: datetime, **kwargs) -> bool:
ob = self.dp.orderbook(pair, 1)
current_price = ob['bids'][0][0]
current_price = ob["bids"][0][0]
# Cancel buy order if price is more than 2% above the order.
if current_price > order.price * 1.02:
return True
return False
def check_exit_timeout(self, pair: str, trade: 'Trade', order: 'Order',
def check_exit_timeout(self, pair: str, trade: Trade, order: Order,
current_time: datetime, **kwargs) -> bool:
ob = self.dp.orderbook(pair, 1)
current_price = ob['asks'][0][0]
current_price = ob["asks"][0][0]
# Cancel sell order if price is more than 2% below the order.
if current_price < order.price * 0.98:
return True
@@ -665,12 +656,14 @@ This are the last methods that will be called before an order is placed.
`confirm_trade_entry()` can be used to abort a trade entry at the latest second (maybe because the price is not what we expect).
``` python
# Default imports
class AwesomeStrategy(IStrategy):
# ... populate_* methods
def confirm_trade_entry(self, pair: str, order_type: str, amount: float, rate: float,
time_in_force: str, current_time: datetime, entry_tag: Optional[str],
time_in_force: str, current_time: datetime, entry_tag: str | None,
side: str, **kwargs) -> bool:
"""
Called right before placing a entry order.
@@ -689,7 +682,7 @@ class AwesomeStrategy(IStrategy):
:param time_in_force: Time in force. Defaults to GTC (Good-til-cancelled).
:param current_time: datetime object, containing the current datetime
:param entry_tag: Optional entry_tag (buy_tag) if provided with the buy signal.
:param side: 'long' or 'short' - indicating the direction of the proposed trade
:param side: "long" or "short" - indicating the direction of the proposed trade
:param **kwargs: Ensure to keep this here so updates to this won't break your strategy.
:return bool: When True is returned, then the buy-order is placed on the exchange.
False aborts the process
@@ -711,8 +704,7 @@ The exit-reasons (if applicable) will be in the following sequence:
* `trailing_stop_loss`
``` python
from freqtrade.persistence import Trade
# Default imports
class AwesomeStrategy(IStrategy):
@@ -738,14 +730,14 @@ class AwesomeStrategy(IStrategy):
or current rate for market orders.
:param time_in_force: Time in force. Defaults to GTC (Good-til-cancelled).
:param exit_reason: Exit reason.
Can be any of ['roi', 'stop_loss', 'stoploss_on_exchange', 'trailing_stop_loss',
'exit_signal', 'force_exit', 'emergency_exit']
Can be any of ["roi", "stop_loss", "stoploss_on_exchange", "trailing_stop_loss",
"exit_signal", "force_exit", "emergency_exit"]
:param current_time: datetime object, containing the current datetime
:param **kwargs: Ensure to keep this here so updates to this won't break your strategy.
:return bool: When True, then the exit-order is placed on the exchange.
False aborts the process
"""
if exit_reason == 'force_exit' and trade.calc_profit_ratio(rate) < 0:
if exit_reason == "force_exit" and trade.calc_profit_ratio(rate) < 0:
# Reject force-sells with negative profit
# This is just a sample, please adjust to your needs
# (this does not necessarily make sense, assuming you know when you're force-selling)
@@ -771,7 +763,7 @@ This callback is **not** called when there is an open order (either buy or sell)
`adjust_trade_position()` is called very frequently for the duration of a trade, so you must keep your implementation as performant as possible.
Position adjustments will always be applied in the direction of the trade, so a positive value will always increase your position (negative values will decrease your position), no matter if it's a long or short trade.
Adjustment orders can be assigned with a tag by returning a 2 element Tuple, with the first element being the adjustment amount, and the 2nd element the tag (e.g. `return 250, 'increase_favorable_conditions'`).
Adjustment orders can be assigned with a tag by returning a 2 element Tuple, with the first element being the adjustment amount, and the 2nd element the tag (e.g. `return 250, "increase_favorable_conditions"`).
Modifications to leverage are not possible, and the stake-amount returned is assumed to be before applying leverage.
@@ -793,7 +785,7 @@ Returning a value more than the above (so remaining stake_amount would become ne
!!! Note "About stake size"
Using fixed stake size means it will be the amount used for the first order, just like without position adjustment.
If you wish to buy additional orders with DCA, then make sure to leave enough funds in the wallet for that.
Using 'unlimited' stake amount with DCA orders requires you to also implement the `custom_stake_amount()` callback to avoid allocating all funds to the initial order.
Using `"unlimited"` stake amount with DCA orders requires you to also implement the `custom_stake_amount()` callback to avoid allocating all funds to the initial order.
!!! Warning "Stoploss calculation"
Stoploss is still calculated from the initial opening price, not averaged price.
@@ -811,9 +803,7 @@ Returning a value more than the above (so remaining stake_amount would become ne
Trades with long duration and 10s or even 100ds of position adjustments are therefore not recommended, and should be closed at regular intervals to not affect performance.
``` python
from freqtrade.persistence import Trade
from typing import Optional, Tuple, Union
# Default imports
class DigDeeperStrategy(IStrategy):
@@ -831,8 +821,8 @@ class DigDeeperStrategy(IStrategy):
# This is called when placing the initial order (opening trade)
def custom_stake_amount(self, pair: str, current_time: datetime, current_rate: float,
proposed_stake: float, min_stake: Optional[float], max_stake: float,
leverage: float, entry_tag: Optional[str], side: str,
proposed_stake: float, min_stake: float | None, max_stake: float,
leverage: float, entry_tag: str | None, side: str,
**kwargs) -> float:
# We need to leave most of the funds for possible further DCA orders
@@ -841,11 +831,11 @@ class DigDeeperStrategy(IStrategy):
def adjust_trade_position(self, trade: Trade, current_time: datetime,
current_rate: float, current_profit: float,
min_stake: Optional[float], max_stake: float,
min_stake: float | None, max_stake: float,
current_entry_rate: float, current_exit_rate: float,
current_entry_profit: float, current_exit_profit: float,
**kwargs
) -> Union[Optional[float], Tuple[Optional[float], Optional[str]]]:
) -> float | None | tuple[float | None, str | None]:
"""
Custom trade adjustment logic, returning the stake amount that a trade should be
increased or decreased.
@@ -876,7 +866,7 @@ class DigDeeperStrategy(IStrategy):
if current_profit > 0.05 and trade.nr_of_successful_exits == 0:
# Take half of the profit at +5%
return -(trade.stake_amount / 2), 'half_profit_5%'
return -(trade.stake_amount / 2), "half_profit_5%"
if current_profit > -0.05:
return None
@@ -886,7 +876,7 @@ class DigDeeperStrategy(IStrategy):
# Only buy when not actively falling price.
last_candle = dataframe.iloc[-1].squeeze()
previous_candle = dataframe.iloc[-2].squeeze()
if last_candle['close'] < previous_candle['close']:
if last_candle["close"] < previous_candle["close"]:
return None
filled_entries = trade.select_filled_orders(trade.entry_side)
@@ -901,10 +891,10 @@ class DigDeeperStrategy(IStrategy):
# Hope you have a deep wallet!
try:
# This returns first order stake size
stake_amount = filled_entries[0].stake_amount
stake_amount = filled_entries[0].stake_amount_filled
# This then calculates current safety order size
stake_amount = stake_amount * (1 + (count_of_entries * 0.25))
return stake_amount, '1/3rd_increase'
return stake_amount, "1/3rd_increase"
except Exception as exception:
return None
@@ -951,16 +941,15 @@ If the cancellation of the original order fails, then the order will not be repl
Entry Orders that are cancelled via the above methods will not have this callback called. Be sure to update timeout values to match your expectations.
```python
from freqtrade.persistence import Trade
from datetime import timedelta, datetime
# Default imports
class AwesomeStrategy(IStrategy):
# ... populate_* methods
def adjust_entry_price(self, trade: Trade, order: Optional[Order], pair: str,
def adjust_entry_price(self, trade: Trade, order: Order | None, pair: str,
current_time: datetime, proposed_rate: float, current_order_rate: float,
entry_tag: Optional[str], side: str, **kwargs) -> float:
entry_tag: str | None, side: str, **kwargs) -> float:
"""
Entry price re-adjustment logic, returning the user desired limit price.
This only executes when a order was already placed, still open (unfilled fully or partially)
@@ -977,13 +966,18 @@ class AwesomeStrategy(IStrategy):
:param proposed_rate: Rate, calculated based on pricing settings in entry_pricing.
:param current_order_rate: Rate of the existing order in place.
:param entry_tag: Optional entry_tag (buy_tag) if provided with the buy signal.
:param side: 'long' or 'short' - indicating the direction of the proposed trade
:param side: "long" or "short" - indicating the direction of the proposed trade
:param **kwargs: Ensure to keep this here so updates to this won't break your strategy.
:return float: New entry price value if provided
"""
# Limit orders to use and follow SMA200 as price target for the first 10 minutes since entry trigger for BTC/USDT pair.
if pair == 'BTC/USDT' and entry_tag == 'long_sma200' and side == 'long' and (current_time - timedelta(minutes=10)) > trade.open_date_utc:
if (
pair == "BTC/USDT"
and entry_tag == "long_sma200"
and side == "long"
and (current_time - timedelta(minutes=10)) <= trade.open_date_utc
):
# just cancel the order if it has been filled more than half of the amount
if order.filled > order.remaining:
return None
@@ -991,7 +985,7 @@ class AwesomeStrategy(IStrategy):
dataframe, _ = self.dp.get_analyzed_dataframe(pair=pair, timeframe=self.timeframe)
current_candle = dataframe.iloc[-1].squeeze()
# desired price
return current_candle['sma_200']
return current_candle["sma_200"]
# default: maintain existing order
return current_order_rate
```
@@ -1006,9 +1000,11 @@ Values that are above `max_leverage` will be adjusted to `max_leverage`.
For markets / exchanges that don't support leverage, this method is ignored.
``` python
# Default imports
class AwesomeStrategy(IStrategy):
def leverage(self, pair: str, current_time: datetime, current_rate: float,
proposed_leverage: float, max_leverage: float, entry_tag: Optional[str], side: str,
proposed_leverage: float, max_leverage: float, entry_tag: str | None, side: str,
**kwargs) -> float:
"""
Customize leverage for each new trade. This method is only called in futures mode.
@@ -1019,7 +1015,7 @@ class AwesomeStrategy(IStrategy):
:param proposed_leverage: A leverage proposed by the bot.
:param max_leverage: Max leverage allowed on this pair
:param entry_tag: Optional entry_tag (buy_tag) if provided with the buy signal.
:param side: 'long' or 'short' - indicating the direction of the proposed trade
:param side: "long" or "short" - indicating the direction of the proposed trade
:return: A leverage amount, which is between 1.0 and max_leverage.
"""
return 1.0
@@ -1036,6 +1032,8 @@ It will be called independent of the order type (entry, exit, stoploss or positi
Assuming that your strategy needs to store the high value of the candle at trade entry, this is possible with this callback as the following example show.
``` python
# Default imports
class AwesomeStrategy(IStrategy):
def order_filled(self, pair: str, trade: Trade, order: Order, current_time: datetime, **kwargs) -> None:
"""
@@ -1052,7 +1050,7 @@ class AwesomeStrategy(IStrategy):
last_candle = dataframe.iloc[-1].squeeze()
if (trade.nr_of_successful_entries == 1) and (order.ft_order_side == trade.entry_side):
trade.set_custom_data(key='entry_candle_high', value=last_candle['high'])
trade.set_custom_data(key="entry_candle_high", value=last_candle["high"])
return None

View File

@@ -2,52 +2,93 @@
This page explains how to customize your strategies, add new indicators and set up trading rules.
Please familiarize yourself with [Freqtrade basics](bot-basics.md) first, which provides overall info on how the bot operates.
If you haven't already, please familiarize yourself with:
- the [Freqtrade strategy 101](strategy-101.md), which provides a quick start to strategy development
- the [Freqtrade bot basics](bot-basics.md), which provides overall info on how the bot operates
## Develop your own strategy
The bot includes a default strategy file.
Also, several other strategies are available in the [strategy repository](https://github.com/freqtrade/freqtrade-strategies).
You will however most likely have your own idea for a strategy.
This document intends to help you convert your strategy idea into your own strategy.
To get started, use `freqtrade new-strategy --strategy AwesomeStrategy` (you can obviously use your own naming for your strategy).
This will create a new strategy file from a template, which will be located under `user_data/strategies/AwesomeStrategy.py`.
This document intends to help you convert your ideas into a working strategy.
### Generating a strategy template
To get started, you can use the command:
```bash
freqtrade new-strategy --strategy AwesomeStrategy
```
This will create a new strategy called `AwesomeStrategy` from a template, which will be located using the filename `user_data/strategies/AwesomeStrategy.py`.
!!! Note
This is just a template file, which will most likely not be profitable out of the box.
There is a difference between the *name* of the strategy and the filename. In most commands, Freqtrade uses the *name* of the strategy, *not the filename*.
!!! Note
The `new-strategy` command generates starting examples which will not be profitable out of the box.
??? Hint "Different template levels"
`freqtrade new-strategy` has an additional parameter, `--template`, which controls the amount of pre-build information you get in the created strategy. Use `--template minimal` to get an empty strategy without any indicator examples, or `--template advanced` to get a template with most callbacks defined.
`freqtrade new-strategy` has an additional parameter, `--template`, which controls the amount of pre-build information you get in the created strategy. Use `--template minimal` to get an empty strategy without any indicator examples, or `--template advanced` to get a template with more complicated features defined.
### Anatomy of a strategy
A strategy file contains all the information needed to build a good strategy:
A strategy file contains all the information needed to build the strategy logic:
- Candle data in OHLCV format
- Indicators
- Entry strategy rules
- Exit strategy rules
- Minimal ROI recommended
- Stoploss strongly recommended
- Entry logic
- Signals
- Exit logic
- Signals
- Minimal ROI
- Callbacks ("custom functions")
- Stoploss
- Fixed/absolute
- Trailing
- Callbacks ("custom functions")
- Pricing [optional]
- Position adjustment [optional]
The bot also include a sample strategy called `SampleStrategy` you can update: `user_data/strategies/sample_strategy.py`.
You can test it with the parameter: `--strategy SampleStrategy`
The bot includes a sample strategy called `SampleStrategy` that you can use as a basis: `user_data/strategies/sample_strategy.py`.
You can test it with the parameter: `--strategy SampleStrategy`. Remember that you use the strategy class name, not the filename.
Additionally, there is an attribute called `INTERFACE_VERSION`, which defines the version of the strategy interface the bot should use.
The current version is 3 - which is also the default when it's not set explicitly in the strategy.
Future versions will require this to be set.
You may see older strategies set to interface version 2, and these will need to be updated to v3 terminology as future versions will require this to be set.
Starting the bot in dry or live mode is accomplished using the `trade` command:
```bash
freqtrade trade --strategy AwesomeStrategy
```
### Bot modes
Freqtrade strategies can be processed by the Freqtrade bot in 5 main modes:
- backtesting
- hyperopting
- dry ("forward testing")
- live
- FreqAI (not covered here)
Check the [configuration documentation](configuration.md) about how to set the bot to dry or live mode.
**Always use dry mode when testing as this gives you an idea of how your strategy will work in reality without risking capital.**
## Diving in deeper
**For the following section we will use the [user_data/strategies/sample_strategy.py](https://github.com/freqtrade/freqtrade/blob/develop/freqtrade/templates/sample_strategy.py)
file as reference.**
!!! Note "Strategies and Backtesting"
To avoid problems and unexpected differences between Backtesting and dry/live modes, please be aware
To avoid problems and unexpected differences between backtesting and dry/live modes, please be aware
that during backtesting the full time range is passed to the `populate_*()` methods at once.
It is therefore best to use vectorized operations (across the whole dataframe, not loops) and
avoid index referencing (`df.iloc[-1]`), but instead use `df.shift()` to get to the previous candle.
@@ -57,14 +98,22 @@ file as reference.**
needs to take care to avoid having the strategy utilize data from the future.
Some common patterns for this are listed in the [Common Mistakes](#common-mistakes-when-developing-strategies) section of this document.
??? Hint "Lookahead and recursive analysis"
Freqtrade includes two helpful commands to help assess common lookahead (using future data) and
recursive bias (variance in indicator values) issues. Before running a strategy in dry or live more,
you should always use these commands first. Please check the relevant documentation for
[lookahead](lookahead-analysis.md) and [recursive](recursive-analysis.md) analysis.
### Dataframe
Freqtrade uses [pandas](https://pandas.pydata.org/) to store/provide the candlestick (OHLCV) data.
Pandas is a great library developed for processing large amounts of data.
Pandas is a great library developed for processing large amounts of data in tabular format.
Each row in a dataframe corresponds to one candle on a chart, with the latest candle always being the last in the dataframe (sorted by date).
Each row in a dataframe corresponds to one candle on a chart, with the latest complete candle always being the last in the dataframe (sorted by date).
``` output
If we were to look at the first few rows of the main dataframe using the pandas `head()` function, we would see:
```output
> dataframe.head()
date open high low close volume
0 2021-11-09 23:25:00+00:00 67279.67 67321.84 67255.01 67300.97 44.62253
@@ -74,20 +123,16 @@ Each row in a dataframe corresponds to one candle on a chart, with the latest ca
4 2021-11-09 23:45:00+00:00 67160.48 67160.48 66901.26 66943.37 111.39292
```
Pandas provides fast ways to calculate metrics. To benefit from this speed, it's advised to not use loops, but use vectorized methods instead.
Vectorized operations perform calculations across the whole range of data and are therefore, compared to looping through each row, a lot faster when calculating indicators.
As a dataframe is a table, simple python comparisons like the following will not work
A dataframe is a table where columns are not single values, but a series of data values. As such, simple python comparisons like the following will not work:
``` python
if dataframe['rsi'] > 30:
dataframe['enter_long'] = 1
```
The above section will fail with `The truth value of a Series is ambiguous. [...]`.
The above section will fail with `The truth value of a Series is ambiguous [...]`.
This must instead be written in a pandas-compatible way, so the operation is performed across the whole dataframe.
This must instead be written in a pandas-compatible way, so the operation is performed across the whole dataframe, i.e. `vectorisation`.
``` python
dataframe.loc[
@@ -97,13 +142,38 @@ This must instead be written in a pandas-compatible way, so the operation is per
With this section, you have a new column in your dataframe, which has `1` assigned whenever RSI is above 30.
Freqtrade uses this new column as an entry signal, where it is assumed that a trade will subsequently open on the next open candle.
Pandas provides fast ways to calculate metrics, i.e. "vectorisation". To benefit from this speed, it is advised to not use loops, but use vectorized methods instead.
Vectorized operations perform calculations across the whole range of data and are therefore, compared to looping through each row, a lot faster when calculating indicators.
??? Hint "Signals vs Trades"
- Signals are generated from indicators at candle close, and are intentions to enter a trade.
- Trades are orders that are executed (on the exchange in live mode) where a trade will then open as close to next candle open as possible.
!!! Warning "Trade order assumptions"
In backtesting, signals are generated on candle close. Trades are then initiated immeditely on next candle open.
In dry and live, this may be delayed due to all pair dataframes needing to be analysed first, then trade processing
for each of those pairs happens. This means that in dry/live you need to be mindful of having as low a computation
delay as possible, usually by running a low number of pairs and having a CPU with a good clock speed.
#### Why can't I see "real time" candle data?
Freqtrade does not store incomplete/unfinished candles in the dataframe.
The use of incomplete data for making strategy decisions is called "repainting" and you might see other platforms allow this.
Freqtrade does not. Only complete/finished candle data is available in the dataframe.
### Customize Indicators
Buy and sell signals need indicators. You can add more indicators by extending the list contained in the method `populate_indicators()` from your strategy file.
Entry and exit signals need indicators. You can add more indicators by extending the list contained in the method `populate_indicators()` from your strategy file.
You should only add the indicators used in either `populate_entry_trend()`, `populate_exit_trend()`, or to populate another indicator, otherwise performance may suffer.
It's important to always return the dataframe without removing/modifying the columns `"open", "high", "low", "close", "volume"`, otherwise these fields would contain something unexpected.
It's important to always return the dataframe from these three functions without removing/modifying the columns `"open", "high", "low", "close", "volume"`, otherwise these fields would contain something unexpected.
Sample:
@@ -124,7 +194,7 @@ def populate_indicators(self, dataframe: DataFrame, metadata: dict) -> DataFrame
stoch = ta.STOCHF(dataframe)
dataframe['fastd'] = stoch['fastd']
dataframe['fastk'] = stoch['fastk']
dataframe['blower'] = ta.BBANDS(dataframe, nbdevup=2, nbdevdn=2)['lowerband']
dataframe['bb_lower'] = ta.BBANDS(dataframe, nbdevup=2, nbdevdn=2)['lowerband']
dataframe['sma'] = ta.SMA(dataframe, timeperiod=40)
dataframe['tema'] = ta.TEMA(dataframe, timeperiod=9)
dataframe['mfi'] = ta.MFI(dataframe)
@@ -145,6 +215,8 @@ def populate_indicators(self, dataframe: DataFrame, metadata: dict) -> DataFrame
dataframe['plus_di'] = ta.PLUS_DI(dataframe)
dataframe['minus_dm'] = ta.MINUS_DM(dataframe)
dataframe['minus_di'] = ta.MINUS_DI(dataframe)
# remember to always return the dataframe
return dataframe
```
@@ -158,17 +230,19 @@ Out of the box, freqtrade installs the following technical libraries:
- [ta-lib](https://ta-lib.github.io/ta-lib-python/)
- [pandas-ta](https://twopirllc.github.io/pandas-ta/)
- [technical](https://github.com/freqtrade/technical/)
- [technical](https://technical.freqtrade.io)
Additional technical libraries can be installed as necessary, or custom indicators may be written / invented by the strategy author.
### Strategy startup period
Most indicators have an instable startup period, in which they are either not available (NaN), or the calculation is incorrect. This can lead to inconsistencies, since Freqtrade does not know how long this instable period should be.
Some indicators have an unstable startup period in which there isn't enough candle data to calculate any values (NaN), or the calculation is incorrect. This can lead to inconsistencies, since Freqtrade does not know how long this unstable period is and uses whatever indicator values are in the dataframe.
To account for this, the strategy can be assigned the `startup_candle_count` attribute.
This should be set to the maximum number of candles that the strategy requires to calculate stable indicators. In the case where a user includes higher timeframes with informative pairs, the `startup_candle_count` does not necessarily change. The value is the maximum period (in candles) that any of the informatives timeframes need to compute stable indicators.
You can use [recursive-analysis](recursive-analysis.md) to check and find the correct `startup_candle_count` to be used.
You can use [recursive-analysis](recursive-analysis.md) to check and find the correct `startup_candle_count` to be used. When recursive analysis shows a variance of 0%, then you can be sure that you have enough startup candle data.
In this example strategy, this should be set to 400 (`startup_candle_count = 400`), since the minimum needed history for ema100 calculation to make sure the value is correct is 400 candles.
@@ -195,19 +269,22 @@ Let's try to backtest 1 month (January 2019) of 5m candles using an example stra
freqtrade backtesting --timerange 20190101-20190201 --timeframe 5m
```
Assuming `startup_candle_count` is set to 400, backtesting knows it needs 400 candles to generate valid buy signals. It will load data from `20190101 - (400 * 5m)` - which is ~2018-12-30 11:40:00.
If this data is available, indicators will be calculated with this extended timerange. The instable startup period (up to 2019-01-01 00:00:00) will then be removed before starting backtesting.
Assuming `startup_candle_count` is set to 400, backtesting knows it needs 400 candles to generate valid entry signals. It will load data from `20190101 - (400 * 5m)` - which is ~2018-12-30 11:40:00.
!!! Note
If data for the startup period is not available, then the timerange will be adjusted to account for this startup period - so Backtesting would start at 2019-01-02 09:20:00.
If this data is available, indicators will be calculated with this extended timerange. The unstable startup period (up to 2019-01-01 00:00:00) will then be removed before backtesting is carried out.
!!! Note "Unavailable startup candle data"
If data for the startup period is not available, then the timerange will be adjusted to account for this startup period. In our example, backtesting would then start from 2019-01-02 09:20:00.
### Entry signal rules
Edit the method `populate_entry_trend()` in your strategy file to update your entry strategy.
It's important to always return the dataframe without removing/modifying the columns `"open", "high", "low", "close", "volume"`, otherwise these fields would contain something unexpected.
It's important to always return the dataframe without removing/modifying the columns `"open", "high", "low", "close", "volume"`, otherwise these fields would contain something unexpected. The strategy may then produce invalid values, or cease to work entirely.
This method will also define a new column, `"enter_long"` (`"enter_short"` for shorts), which needs to contain 1 for entries, and 0 for "no action". `enter_long` is a mandatory column that must be set even if the strategy is shorting only.
This method will also define a new column, `"enter_long"` (`"enter_short"` for shorts), which needs to contain `1` for entries, and `0` for "no action". `enter_long` is a mandatory column that must be set even if the strategy is shorting only.
You can name your entry signals by using the `"enter_tag"` column, which can help debug and assess your strategy later.
Sample from `user_data/strategies/sample_strategy.py`:
@@ -232,12 +309,15 @@ def populate_entry_trend(self, dataframe: DataFrame, metadata: dict) -> DataFram
```
??? Note "Enter short trades"
Short-entries can be created by setting `enter_short` (corresponds to `enter_long` for long trades).
Short entries can be created by setting `enter_short` (corresponds to `enter_long` for long trades).
The `enter_tag` column remains identical.
Short-trades need to be supported by your exchange and market configuration!
Please make sure to set [`can_short`]() appropriately on your strategy if you intend to short.
Shorting needs to be supported by your exchange and market configuration!
Also, make sure you set [`can_short`](#can-short) appropriately on your strategy if you intend to short.
```python
# allow both long and short trades
can_short = True
def populate_entry_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
dataframe.loc[
(
@@ -261,17 +341,21 @@ def populate_entry_trend(self, dataframe: DataFrame, metadata: dict) -> DataFram
```
!!! Note
Buying requires sellers to buy from - therefore volume needs to be > 0 (`dataframe['volume'] > 0`) to make sure that the bot does not buy/sell in no-activity periods.
Buying requires sellers to buy from. Therefore volume needs to be > 0 (`dataframe['volume'] > 0`) to make sure that the bot does not buy/sell in no-activity periods.
### Exit signal rules
Edit the method `populate_exit_trend()` into your strategy file to update your exit strategy.
The exit-signal can be suppressed by setting `use_exit_signal` to false in the configuration or strategy.
`use_exit_signal` will not influence [signal collision rules](#colliding-signals) - which will still apply and can prevent entries.
It's important to always return the dataframe without removing/modifying the columns `"open", "high", "low", "close", "volume"`, otherwise these fields would contain something unexpected.
It's important to always return the dataframe without removing/modifying the columns `"open", "high", "low", "close", "volume"`, otherwise these fields would contain something unexpected. The strategy may then produce invalid values, or cease to work entirely.
This method will also define a new column, `"exit_long"` (`"exit_short"` for shorts), which needs to contain 1 for exits, and 0 for "no action".
This method will also define a new column, `"exit_long"` (`"exit_short"` for shorts), which needs to contain `1` for exits, and `0` for "no action".
You can name your exit signals by using the `"exit_tag"` column, which can help debug and assess your strategy later.
Sample from `user_data/strategies/sample_strategy.py`:
@@ -295,11 +379,15 @@ def populate_exit_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame
```
??? Note "Exit short trades"
Short-exits can be created by setting `exit_short` (corresponds to `exit_long`).
Short exits can be created by setting `exit_short` (corresponds to `exit_long`).
The `exit_tag` column remains identical.
Short-trades need to be supported by your exchange and market configuration!
Shorting needs to be supported by your exchange and market configuration!
Also, make sure you set [`can_short`](#can-short) appropriately on your strategy if you intend to short.
```python
# allow both long and short trades
can_short = True
def populate_exit_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
dataframe.loc[
(
@@ -322,9 +410,9 @@ def populate_exit_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame
### Minimal ROI
This dict defines the minimal Return On Investment (ROI) a trade should reach before exiting, independent from the exit signal.
The `minimal_roi` strategy variable defines the minimal Return On Investment (ROI) a trade should reach before exiting, independent from the exit signal.
It is of the following format, with the dict key (left side of the colon) being the minutes passed since the trade opened, and the value (right side of the colon) being the percentage.
It is of the following format, i.e. a python `dict`, with the dict key (left side of the colon) being the minutes passed since the trade opened, and the value (right side of the colon) being the percentage.
```python
minimal_roi = {
@@ -344,14 +432,19 @@ The above configuration would therefore mean:
The calculation does include fees.
#### Disabling minimal ROI
To disable ROI completely, set it to an empty dictionary:
```python
minimal_roi = {}
```
#### Using calculations in minimal ROI
To use times based on candle duration (timeframe), the following snippet can be handy.
This will allow you to change the timeframe for the strategy, and ROI times will still be set as candles (e.g. after 3 candles ...)
This will allow you to change the timeframe for the strategy, but the minimal ROI times will still be set as candles, e.g. after 3 candles.
``` python
from freqtrade.exchange import timeframe_to_minutes
@@ -368,9 +461,9 @@ class AwesomeStrategy(IStrategy):
```
??? info "Orders that don't fill immediately"
`minimal_roi` will take the `trade.open_date` as reference, which is the time the trade was initialized / the first order for this trade was placed.
This will also hold true for limit orders that don't fill immediately (usually in combination with "off-spot" prices through `custom_entry_price()`), as well as for cases where the initial order is replaced through `adjust_entry_price()`.
The time used will still be from the initial `trade.open_date` (when the initial order was first placed), not from the newly placed order date.
`minimal_roi` will take the `trade.open_date` as reference, which is the time the trade was initialized, i.e. when the first order for this trade was placed.
This will also hold true for limit orders that don't fill immediately (usually in combination with "off-spot" prices through `custom_entry_price()`), as well as for cases where the initial order price is replaced through `adjust_entry_price()`.
The time used will still be from the initial `trade.open_date` (when the initial order was first placed), not from the newly placed or adjusted order date.
### Stoploss
@@ -386,33 +479,44 @@ For the full documentation on stoploss features, look at the dedicated [stoploss
### Timeframe
This is the set of candles the bot should download and use for the analysis.
This is the periodicity of candles the bot should use in the strategy.
Common values are `"1m"`, `"5m"`, `"15m"`, `"1h"`, however all values supported by your exchange should work.
Please note that the same entry/exit signals may work well with one timeframe, but not with the others.
Please note that the same entry/exit signals may work well with one timeframe, but not with others.
This setting is accessible within the strategy methods as the `self.timeframe` attribute.
### Can short
To use short signals in futures markets, you will have to let us know to do so by setting `can_short=True`.
To use short signals in futures markets, you will have to set `can_short = True`.
Strategies which enable this will fail to load on spot markets.
Disabling of this will have short signals ignored (also in futures markets).
If you have `1` values in the `enter_short` column to raise short signals, setting `can_short = False` (which is the default) will mean that these short signals are ignored, even if you have specified futures markets in your configuration.
### Metadata dict
The metadata-dict (available for `populate_entry_trend`, `populate_exit_trend`, `populate_indicators`) contains additional information.
Currently this is `pair`, which can be accessed using `metadata['pair']` - and will return a pair in the format `XRP/BTC`.
The `metadata` dict (available for `populate_entry_trend`, `populate_exit_trend`, `populate_indicators`) contains additional information.
Currently this is `pair`, which can be accessed using `metadata['pair']`, and will return a pair in the format `XRP/BTC` (or `XRP/BTC:BTC` for futures markets).
The Metadata-dict should not be modified and does not persist information across multiple calls.
Instead, have a look at the [Storing information](strategy-advanced.md#storing-information-persistent) section.
The metadata dict should not be modified and does not persist information across multiple functions in your strategy.
Instead, please check the [Storing information](strategy-advanced.md#storing-information-persistent) section.
--8<-- "includes/strategy-imports.md"
## Strategy file loading
By default, freqtrade will attempt to load strategies from all `.py` files within `user_data/strategies`.
By default, freqtrade will attempt to load strategies from all `.py` files within the `userdir` (default `user_data/strategies`).
Assuming your strategy is called `AwesomeStrategy`, stored in the file `user_data/strategies/AwesomeStrategy.py`, then you can start freqtrade with `freqtrade trade --strategy AwesomeStrategy`.
Note that we're using the class-name, not the file name.
Assuming your strategy is called `AwesomeStrategy`, stored in the file `user_data/strategies/AwesomeStrategy.py`, then you can start freqtrade in dry (or live, depending on your configuration) mode with:
```bash
freqtrade trade --strategy AwesomeStrategy`
```
Note that we're using the class name, not the file name.
You can use `freqtrade list-strategies` to see a list of all strategies Freqtrade is able to load (all strategies in the correct folder).
It will also include a "status" field, highlighting potential problems.
@@ -424,9 +528,11 @@ It will also include a "status" field, highlighting potential problems.
### Get data for non-tradeable pairs
Data for additional, informative pairs (reference pairs) can be beneficial for some strategies.
Data for additional, informative pairs (reference pairs) can be beneficial for some strategies to see data on a wider timeframe.
OHLCV data for these pairs will be downloaded as part of the regular whitelist refresh process and is available via `DataProvider` just as other pairs (see below).
These parts will **not** be traded unless they are also specified in the pair whitelist, or have been selected by Dynamic Whitelisting.
These pairs will **not** be traded unless they are also specified in the pair whitelist, or have been selected by Dynamic Whitelisting, e.g. `VolumePairlist`.
The pairs need to be specified as tuples in the format `("pair", "timeframe")`, with pair as the first and timeframe as the second argument.
@@ -466,18 +572,24 @@ A full sample can be found [in the DataProvider section](#complete-data-provider
### Informative pairs decorator (`@informative()`)
In most common case it is possible to easily define informative pairs by using a decorator. All decorated `populate_indicators_*` methods run in isolation,
not having access to data from other informative pairs, in the end all informative dataframes are merged and passed to main `populate_indicators()` method.
When hyperopting, use of hyperoptable parameter `.value` attribute is not supported. Please use `.range` attribute. See [optimizing an indicator parameter](hyperopt.md#optimizing-an-indicator-parameter)
for more information.
To easily define informative pairs, use the `@informative` decorator. All decorated `populate_indicators_*` methods run in isolation,
and do not have access to data from other informative pairs. However, all informative dataframes for each pair are merged and passed to main `populate_indicators()` method.
!!! Note
Do not use the `@informative` decorator if you need to use data from one informative pair when generating another informative pair. Instead, define informative pairs manually as described [in the DataProvider section](#complete-data-provider-sample).
When hyperopting, use of the hyperoptable parameter `.value` attribute is not supported. Please use the `.range` attribute. See [optimizing an indicator parameter](hyperopt.md#optimizing-an-indicator-parameter) for more information.
??? info "Full documentation"
``` python
def informative(timeframe: str, asset: str = '',
fmt: Optional[Union[str, Callable[[KwArg(str)], str]]] = None,
*,
candle_type: Optional[CandleType] = None,
ffill: bool = True) -> Callable[[PopulateIndicators], PopulateIndicators]:
def informative(
timeframe: str,
asset: str = "",
fmt: str | Callable[[Any], str] | None = None,
*,
candle_type: CandleType | str | None = None,
ffill: bool = True,
) -> Callable[[PopulateIndicators], PopulateIndicators]:
"""
A decorator for populate_indicators_Nn(self, dataframe, metadata), allowing these functions to
define informative indicators.
@@ -566,10 +678,6 @@ for more information.
```
!!! Note
Do not use `@informative` decorator if you need to use data of one informative pair when generating another informative pair. Instead, define informative pairs
manually as described [in the DataProvider section](#complete-data-provider-sample).
!!! Note
Use string formatting when accessing informative dataframes of other pairs. This will allow easily changing stake currency in config without having to adjust strategy code.
@@ -590,18 +698,15 @@ for more information.
Alternatively column renaming may be used to remove stake currency from column names: `@informative('1h', 'BTC/{stake}', fmt='{base}_{column}_{timeframe}')`.
!!! Warning "Duplicate method names"
Methods tagged with `@informative()` decorator must always have unique names! Re-using same name (for example when copy-pasting already defined informative method)
will overwrite previously defined method and not produce any errors due to limitations of Python programming language. In such cases you will find that indicators
created in earlier-defined methods are not available in the dataframe. Carefully review method names and make sure they are unique!
Methods tagged with the `@informative()` decorator must always have unique names! Reusing the same name (for example when copy-pasting already defined informative methods) will overwrite previously defined methods and not produce any errors due to limitations of Python programming language. In such cases you will find that indicators created in methods higher up in the strategy file are not available in the dataframe. Carefully review method names and make sure they are unique!
### *merge_informative_pair()*
This method helps you merge an informative pair to a regular dataframe without lookahead bias.
It's there to help you merge the dataframe in a safe and consistent way.
This method helps you merge an informative pair to the regular main dataframe safely and consistently, without lookahead bias.
Options:
- Rename the columns for you to create unique columns
- Rename the columns to create unique columns
- Merge the dataframe without lookahead bias
- Forward-fill (optional)
@@ -652,20 +757,20 @@ All columns of the informative dataframe will be available on the returning data
```
!!! Warning "Informative timeframe < timeframe"
Using informative timeframes smaller than the dataframe timeframe is not recommended with this method, as it will not use any of the additional information this would provide.
To use the more detailed information properly, more advanced methods should be applied (which are out of scope for freqtrade documentation, as it'll depend on the respective need).
Using informative timeframes smaller than the main dataframe timeframe is not recommended with this method, as it will not use any of the additional information this would provide.
To use the more detailed information properly, more advanced methods should be applied (which are out of scope for this documentation).
## Additional data (DataProvider)
The strategy provides access to the `DataProvider`. This allows you to get additional data to use in your strategy.
All methods return `None` in case of failure (do not raise an exception).
All methods return `None` in case of failure, i.e. failures do not raise an exception.
Please always check the mode of operation to select the correct method to get data (samples see below).
Please always check the mode of operation to select the correct method to get data (see below for examples).
!!! Warning "Hyperopt"
Dataprovider is available during hyperopt, however it can only be used in `populate_indicators()` within a strategy.
It is not available in `populate_buy()` and `populate_sell()` methods, nor in `populate_indicators()`, if this method located in the hyperopt file.
!!! Warning "Hyperopt Limitations"
The DataProvider is available during hyperopt, however it can only be used in `populate_indicators()` **within a strategy**, not within a hyperopt class file.
It is also not available in `populate_entry_trend()` and `populate_exit_trend()` methods.
### Possible options for DataProvider
@@ -691,30 +796,31 @@ for pair, timeframe in self.dp.available_pairs:
### *current_whitelist()*
Imagine you've developed a strategy that trades the `5m` timeframe using signals generated from a `1d` timeframe on the top 10 volume pairs by volume.
Imagine you've developed a strategy that trades the `5m` timeframe using signals generated from a `1d` timeframe on the top 10 exchange pairs by volume.
The strategy might look something like this:
The strategy logic might look something like this:
*Scan through the top 10 pairs by volume using the `VolumePairList` every 5 minutes and use a 14 day RSI to buy and sell.*
*Scan through the top 10 pairs by volume using the `VolumePairList` every 5 minutes and use a 14 day RSI to enter and exit.*
Due to the limited available data, it's very difficult to resample `5m` candles into daily candles for use in a 14 day RSI. Most exchanges limit us to just 500-1000 candles which effectively gives us around 1.74 daily candles. We need 14 days at least!
Due to the limited available data, it's very difficult to resample `5m` candles into daily candles for use in a 14 day RSI. Most exchanges limit users to just 500-1000 candles which effectively gives us around 1.74 daily candles. We need 14 days at least!
Since we can't resample the data we will have to use an informative pair; and since the whitelist will be dynamic we don't know which pair(s) to use.
Since we can't resample the data we will have to use an informative pair, and since the whitelist will be dynamic we don't know which pair(s) to use! We have a problem!
This is where calling `self.dp.current_whitelist()` comes in handy.
This is where calling `self.dp.current_whitelist()` comes in handy to retrieve only those pairs in the whitelist.
```python
def informative_pairs(self):
# get access to all pairs available in whitelist.
pairs = self.dp.current_whitelist()
# Assign tf to each pair so they can be downloaded and cached for strategy.
# Assign timeframe to each pair so they can be downloaded and cached for strategy.
informative_pairs = [(pair, '1d') for pair in pairs]
return informative_pairs
```
??? Note "Plotting with current_whitelist"
Current whitelist is not supported for `plot-dataframe`, as this command is usually used by providing an explicit pairlist - and would therefore make the return values of this method misleading.
Current whitelist is not supported for `plot-dataframe`, as this command is usually used by providing an explicit pairlist and would therefore make the return values of this method misleading.
It's also not supported for FreqUI visualization in [webserver mode](utils.md#webserver-mode), as the configuration for webserver mode doesn't require a pairlist to be set.
### *get_pair_dataframe(pair, timeframe)*
@@ -755,7 +861,7 @@ if self.dp.runmode.value in ('live', 'dry_run'):
dataframe['best_ask'] = ob['asks'][0][0]
```
The orderbook structure is aligned with the order structure from [ccxt](https://github.com/ccxt/ccxt/wiki/Manual#order-book-structure), so the result will look as follows:
The orderbook structure is aligned with the order structure from [ccxt](https://github.com/ccxt/ccxt/wiki/Manual#order-book-structure), so the result will be formatted as follows:
``` js
{
@@ -773,7 +879,7 @@ The orderbook structure is aligned with the order structure from [ccxt](https://
}
```
Therefore, using `ob['bids'][0][0]` as demonstrated above will result in using the best bid price. `ob['bids'][0][1]` would look at the amount at this orderbook position.
Therefore, using `ob['bids'][0][0]` as demonstrated above will use the best bid price. `ob['bids'][0][1]` would look at the amount at this orderbook position.
!!! Warning "Warning about backtesting"
The order book is not part of the historic data which means backtesting and hyperopt will not work correctly if this method is used, as the method will return up-to-date values.
@@ -790,12 +896,12 @@ if self.dp.runmode.value in ('live', 'dry_run'):
!!! Warning
Although the ticker data structure is a part of the ccxt Unified Interface, the values returned by this method can
vary for different exchanges. For instance, many exchanges do not return `vwap` values, some exchanges
does not always fills in the `last` field (so it can be None), etc. So you need to carefully verify the ticker
vary for different exchanges. For instance, many exchanges do not return `vwap` values, and some exchanges
do not always fill in the `last` field (so it can be None), etc. So you need to carefully verify the ticker
data returned from the exchange and add appropriate error handling / defaults.
!!! Warning "Warning about backtesting"
This method will always return up-to-date values - so usage during backtesting / hyperopt without runmode checks will lead to wrong results.
This method will always return up-to-date / real-time values. As such, usage during backtesting / hyperopt without runmode checks will lead to wrong results, e.g. your whole dataframe will contain the same single value in all rows.
### Send Notification
@@ -814,7 +920,7 @@ Notifications will only be sent in trading modes (Live/Dry-run) - so this method
!!! Warning "Spamming"
You can spam yourself pretty good by setting `always_send=True` in this method. Use this with great care and only in conditions you know will not happen throughout a candle to avoid a message every 5 seconds.
### Complete Data-provider sample
### Complete DataProvider sample
```python
from freqtrade.strategy import IStrategy, merge_informative_pair
@@ -881,14 +987,14 @@ class SampleStrategy(IStrategy):
## Additional data (Wallets)
The strategy provides access to the `wallets` object. This contains the current balances on the exchange.
The strategy provides access to the `wallets` object. This contains the current balances of your wallets/accounts on the exchange.
!!! Note "Backtesting / Hyperopt"
Wallets behaves differently depending on the function it's called.
Wallets behaves differently depending on the function from which it is called.
Within `populate_*()` methods, it'll return the full wallet as configured.
Within [callbacks](strategy-callbacks.md), you'll get the wallet state corresponding to the actual simulated wallet at that point in the simulation process.
Please always check if `wallets` is available to avoid failures during backtesting.
Always check if `wallets` is available to avoid failures during backtesting.
``` python
if self.wallets:
@@ -907,15 +1013,15 @@ if self.wallets:
## Additional data (Trades)
A history of Trades can be retrieved in the strategy by querying the database.
A history of trades can be retrieved in the strategy by querying the database.
At the top of the file, import Trade.
At the top of the file, import the required object:
```python
from freqtrade.persistence import Trade
```
The following example queries for the current pair and trades from today, however other filters can easily be added.
The following example queries trades from today for the current pair (`metadata['pair']`). Other filters can easily be added.
``` python
trades = Trade.get_trades_proxy(pair=metadata['pair'],
@@ -933,7 +1039,9 @@ For a full list of available methods, please consult the [Trade object](trade-ob
## Prevent trades from happening for a specific pair
Freqtrade locks pairs automatically for the current candle (until that candle is over) when a pair is sold, preventing an immediate re-buy of that pair.
Freqtrade locks pairs automatically for the current candle (until that candle is over) when a pair exits, preventing an immediate re-entry of that pair.
This is to prevent "waterfalls" of many and frequent trades within a single candle.
Locked pairs will show the message `Pair <pair> is currently locked.`.
@@ -944,7 +1052,7 @@ Sometimes it may be desired to lock a pair after certain events happen (e.g. mul
Freqtrade has an easy method to do this from within the strategy, by calling `self.lock_pair(pair, until, [reason])`.
`until` must be a datetime object in the future, after which trading will be re-enabled for that pair, while `reason` is an optional string detailing why the pair was locked.
Locks can also be lifted manually, by calling `self.unlock_pair(pair)` or `self.unlock_reason(<reason>)` - providing reason the pair was locked with.
Locks can also be lifted manually, by calling `self.unlock_pair(pair)` or `self.unlock_reason(<reason>)`, providing the reason the pair was unlocked.
`self.unlock_reason(<reason>)` will unlock all pairs currently locked with the provided reason.
To verify if a pair is currently locked, use `self.is_pair_locked(pair)`.
@@ -953,7 +1061,7 @@ To verify if a pair is currently locked, use `self.is_pair_locked(pair)`.
Locked pairs will always be rounded up to the next candle. So assuming a `5m` timeframe, a lock with `until` set to 10:18 will lock the pair until the candle from 10:15-10:20 will be finished.
!!! Warning
Manually locking pairs is not available during backtesting, only locks via Protections are allowed.
Manually locking pairs is not available during backtesting. Only locks via Protections are allowed.
#### Pair locking example
@@ -963,7 +1071,7 @@ from datetime import timedelta, datetime, timezone
# Put the above lines a the top of the strategy file, next to all the other imports
# --------
# Within populate indicators (or populate_buy):
# Within populate indicators (or populate_entry_trend):
if self.config['runmode'].value in ('live', 'dry_run'):
# fetch closed trades for the last 2 days
trades = Trade.get_trades_proxy(
@@ -976,9 +1084,9 @@ if self.config['runmode'].value in ('live', 'dry_run'):
self.lock_pair(metadata['pair'], until=datetime.now(timezone.utc) + timedelta(hours=12))
```
## Print created dataframe
## Print the main dataframe
To inspect the created dataframe, you can issue a print-statement in either `populate_entry_trend()` or `populate_exit_trend()`.
To inspect the current main dataframe, you can issue a print-statement in either `populate_entry_trend()` or `populate_exit_trend()`.
You may also want to print the pair so it's clear what data is currently shown.
``` python
@@ -998,29 +1106,30 @@ def populate_entry_trend(self, dataframe: DataFrame, metadata: dict) -> DataFram
return dataframe
```
Printing more than a few rows is also possible (simply use `print(dataframe)` instead of `print(dataframe.tail())`), however not recommended, as that will be very verbose (~500 lines per pair every 5 seconds).
Printing more than a few rows is also possible by using `print(dataframe)` instead of `print(dataframe.tail())`. However this is not recommended, as can results in a lot of output (~500 lines per pair every 5 seconds).
## Common mistakes when developing strategies
### Peeking into the future while backtesting
### Looking into the future while backtesting
Backtesting analyzes the whole time-range at once for performance reasons. Because of this, strategy authors need to make sure that strategies do not look-ahead into the future.
This is a common pain-point, which can cause huge differences between backtesting and dry/live run methods, since they all use data which is not available during dry/live runs, so these strategies will perform well during backtesting, but will fail / perform badly in real conditions.
Backtesting analyzes the whole dataframe timerange at once for performance reasons. Because of this, strategy authors need to make sure that strategies do not lookahead into the future, i.e. using data that would not be available in dry or live mode.
The following lists some common patterns which should be avoided to prevent frustration:
This is a common pain-point, which can cause huge differences between backtesting and dry/live run methods. Strategies that look into the future will perform well during backtesting, often with incredible profits or winrates, but will fail or perform badly in real conditions.
The following list contains some common patterns which should be avoided to prevent frustration:
- don't use `shift(-1)` or other negative values. This uses data from the future in backtesting, which is not available in dry or live modes.
- don't use `.iloc[-1]` or any other absolute position in the dataframe within `populate_` functions, as this will be different between dry-run and backtesting. Absolute `iloc` indexing is safe to use in callbacks however - see [Strategy Callbacks](strategy-callbacks.md).
- don't use `dataframe['volume'].mean()`. This uses the full DataFrame for backtesting, including data from the future. Use `dataframe['volume'].rolling(<window>).mean()` instead
- don't use `.resample('1h')`. This uses the left border of the interval, so moves data from an hour to the start of the hour. Use `.resample('1h', label='right')` instead.
- don't use functions that use all dataframe or column values, e.g. `dataframe['mean_volume'] = dataframe['volume'].mean()`. As backtesting uses the full dataframe, at any point in the dataframe, the `'mean_volume'` series would include data from the future. Use rolling() calculations instead, e.g. `dataframe['volume'].rolling(<window>).mean()`.
- don't use `.resample('1h')`. This uses the left border of the period interval, so moves data from an hour boundary to the start of the hour. Use `.resample('1h', label='right')` instead.
!!! Tip "Identifying problems"
You may also want to check the 2 helper commands [lookahead-analysis](lookahead-analysis.md) and [recursive-analysis](recursive-analysis.md), which can each help you figure out problems with your strategy in different ways.
Please treat them as what they are - helpers to identify most common problems. A negative result of each does not guarantee that there's none of the above errors included.
You should always use the two helper commands [lookahead-analysis](lookahead-analysis.md) and [recursive-analysis](recursive-analysis.md), which can each help you figure out problems with your strategy in different ways.
Please treat them as what they are - helpers to identify most common problems. A negative result of each does not guarantee that there are none of the above errors included.
### Colliding signals
When conflicting signals collide (e.g. both `'enter_long'` and `'exit_long'` are 1), freqtrade will do nothing and ignore the entry signal. This will avoid trades that enter, and exit immediately. Obviously, this can potentially lead to missed entries.
When conflicting signals collide (e.g. both `'enter_long'` and `'exit_long'` are set to `1`), freqtrade will do nothing and ignore the entry signal. This will avoid trades that enter, and exit immediately. Obviously, this can potentially lead to missed entries.
The following rules apply, and entry signals will be ignored if more than one of the 3 signals is set:
@@ -1029,11 +1138,11 @@ The following rules apply, and entry signals will be ignored if more than one of
## Further strategy ideas
To get additional Ideas for strategies, head over to the [strategy repository](https://github.com/freqtrade/freqtrade-strategies). Feel free to use them as they are - but results will depend on the current market situation, pairs used etc. - therefore please backtest the strategy for your exchange/desired pairs first, evaluate carefully, use at your own risk.
Feel free to use any of them as inspiration for your own strategies.
We're happy to accept Pull Requests containing new Strategies to that repo.
To get additional ideas for strategies, head over to the [strategy repository](https://github.com/freqtrade/freqtrade-strategies). Feel free to use them as examples, but results will depend on the current market situation, pairs used, etc. Therefore, these strategies should be considered only for learning purposes, not real world trading. Please backtest the strategy for your exchange/desired pairs first, then dry run to evaluate carefully, and use at your own risk.
## Next step
Feel free to use any of them as inspiration for your own strategies. We're happy to accept Pull Requests containing new strategies to the repository.
## Next steps
Now you have a perfect strategy you probably want to backtest it.
Your next step is to learn [How to use the Backtesting](backtesting.md).
Your next step is to learn [how to use backtesting](backtesting.md).

View File

@@ -13,19 +13,22 @@ Please follow the [documentation](https://www.freqtrade.io/en/stable/data-downlo
import os
from pathlib import Path
# Change directory
# Modify this cell to insure that the output shows the correct path.
# Define all paths relative to the project root shown in the cell output
project_root = "somedir/freqtrade"
i=0
i = 0
try:
os.chdir(project_root)
assert Path('LICENSE').is_file()
except:
while i<4 and (not Path('LICENSE').is_file()):
os.chdir(Path(Path.cwd(), '../'))
i+=1
project_root = Path.cwd()
if not Path("LICENSE").is_file():
i = 0
while i < 4 and (not Path("LICENSE").is_file()):
os.chdir(Path(Path.cwd(), "../"))
i += 1
project_root = Path.cwd()
except FileNotFoundError:
print("Please define the project root relative to the current directory")
print(Path.cwd())
```
@@ -35,6 +38,7 @@ print(Path.cwd())
```python
from freqtrade.configuration import Configuration
# Customize these according to your needs.
# Initialize empty configuration object
@@ -58,12 +62,14 @@ pair = "BTC/USDT"
from freqtrade.data.history import load_pair_history
from freqtrade.enums import CandleType
candles = load_pair_history(datadir=data_location,
timeframe=config["timeframe"],
pair=pair,
data_format = "json", # Make sure to update this to your data
candle_type=CandleType.SPOT,
)
candles = load_pair_history(
datadir=data_location,
timeframe=config["timeframe"],
pair=pair,
data_format="json", # Make sure to update this to your data
candle_type=CandleType.SPOT,
)
# Confirm success
print(f"Loaded {len(candles)} rows of data for {pair} from {data_location}")
@@ -76,14 +82,16 @@ candles.head()
```python
# Load strategy using values set above
from freqtrade.resolvers import StrategyResolver
from freqtrade.data.dataprovider import DataProvider
from freqtrade.resolvers import StrategyResolver
strategy = StrategyResolver.load_strategy(config)
strategy.dp = DataProvider(config, None, None)
strategy.ft_bot_start()
# Generate buy/sell signals using strategy
df = strategy.analyze_ticker(candles, {'pair': pair})
df = strategy.analyze_ticker(candles, {"pair": pair})
df.tail()
```
@@ -102,7 +110,7 @@ df.tail()
```python
# Report results
print(f"Generated {df['enter_long'].sum()} entry signals")
data = df.set_index('date', drop=False)
data = df.set_index("date", drop=False)
data.tail()
```
@@ -119,10 +127,13 @@ Analyze a trades dataframe (also used below for plotting)
```python
from freqtrade.data.btanalysis import load_backtest_data, load_backtest_stats
# if backtest_dir points to a directory, it'll automatically load the last backtest file.
backtest_dir = config["user_data_dir"] / "backtest_results"
# backtest_dir can also point to a specific file
# backtest_dir = config["user_data_dir"] / "backtest_results/backtest-result-2020-07-01_20-04-22.json"
# backtest_dir can also point to a specific file
# backtest_dir = (
# config["user_data_dir"] / "backtest_results/backtest-result-2020-07-01_20-04-22.json"
# )
```
@@ -131,24 +142,24 @@ backtest_dir = config["user_data_dir"] / "backtest_results"
# This contains all information used to generate the backtest result.
stats = load_backtest_stats(backtest_dir)
strategy = 'SampleStrategy'
# All statistics are available per strategy, so if `--strategy-list` was used during backtest, this will be reflected here as well.
strategy = "SampleStrategy"
# All statistics are available per strategy, so if `--strategy-list` was used during backtest,
# this will be reflected here as well.
# Example usages:
print(stats['strategy'][strategy]['results_per_pair'])
print(stats["strategy"][strategy]["results_per_pair"])
# Get pairlist used for this backtest
print(stats['strategy'][strategy]['pairlist'])
print(stats["strategy"][strategy]["pairlist"])
# Get market change (average change of all pairs from start to end of the backtest period)
print(stats['strategy'][strategy]['market_change'])
print(stats["strategy"][strategy]["market_change"])
# Maximum drawdown ()
print(stats['strategy'][strategy]['max_drawdown'])
print(stats["strategy"][strategy]["max_drawdown"])
# Maximum drawdown start and end
print(stats['strategy'][strategy]['drawdown_start'])
print(stats['strategy'][strategy]['drawdown_end'])
print(stats["strategy"][strategy]["drawdown_start"])
print(stats["strategy"][strategy]["drawdown_end"])
# Get strategy comparison (only relevant if multiple strategies were compared)
print(stats['strategy_comparison'])
print(stats["strategy_comparison"])
```
@@ -166,24 +177,25 @@ trades.groupby("pair")["exit_reason"].value_counts()
```python
# Plotting equity line (starting with 0 on day 1 and adding daily profit for each backtested day)
import pandas as pd
import plotly.express as px
from freqtrade.configuration import Configuration
from freqtrade.data.btanalysis import load_backtest_stats
import plotly.express as px
import pandas as pd
# strategy = 'SampleStrategy'
# config = Configuration.from_files(["user_data/config.json"])
# backtest_dir = config["user_data_dir"] / "backtest_results"
stats = load_backtest_stats(backtest_dir)
strategy_stats = stats['strategy'][strategy]
strategy_stats = stats["strategy"][strategy]
df = pd.DataFrame(columns=['dates','equity'], data=strategy_stats['daily_profit'])
df['equity_daily'] = df['equity'].cumsum()
df = pd.DataFrame(columns=["dates", "equity"], data=strategy_stats["daily_profit"])
df["equity_daily"] = df["equity"].cumsum()
fig = px.line(df, x="dates", y="equity_daily")
fig.show()
```
### Load live trading results into a pandas dataframe
@@ -194,6 +206,7 @@ In case you did already some trading and want to analyze your performance
```python
from freqtrade.data.btanalysis import load_trades_from_db
# Fetch trades from database
trades = load_trades_from_db("sqlite:///tradesv3.sqlite")
@@ -202,7 +215,7 @@ trades.groupby("pair")["exit_reason"].value_counts()
```
## Analyze the loaded trades for trade parallelism
This can be useful to find the best `max_open_trades` parameter, when used with backtesting in conjunction with `--disable-max-market-positions`.
This can be useful to find the best `max_open_trades` parameter, when used with backtesting in conjunction with a very high `max_open_trades` setting.
`analyze_trade_parallelism()` returns a timeseries dataframe with an "open_trades" column, specifying the number of open trades for each candle.
@@ -210,8 +223,9 @@ This can be useful to find the best `max_open_trades` parameter, when used with
```python
from freqtrade.data.btanalysis import analyze_trade_parallelism
# Analyze the above
parallel_trades = analyze_trade_parallelism(trades, '5m')
parallel_trades = analyze_trade_parallelism(trades, "5m")
parallel_trades.plot()
```
@@ -222,23 +236,23 @@ Freqtrade offers interactive plotting capabilities based on plotly.
```python
from freqtrade.plot.plotting import generate_candlestick_graph
from freqtrade.plot.plotting import generate_candlestick_graph
# Limit graph period to keep plotly quick and reactive
# Filter trades to one pair
trades_red = trades.loc[trades['pair'] == pair]
trades_red = trades.loc[trades["pair"] == pair]
data_red = data['2019-06-01':'2019-06-10']
data_red = data["2019-06-01":"2019-06-10"]
# Generate candlestick graph
graph = generate_candlestick_graph(pair=pair,
data=data_red,
trades=trades_red,
indicators1=['sma20', 'ema50', 'ema55'],
indicators2=['rsi', 'macd', 'macdsignal', 'macdhist']
)
graph = generate_candlestick_graph(
pair=pair,
data=data_red,
trades=trades_red,
indicators1=["sma20", "ema50", "ema55"],
indicators2=["rsi", "macd", "macdsignal", "macdhist"],
)
```
@@ -248,7 +262,6 @@ graph = generate_candlestick_graph(pair=pair,
# Render graph in a separate window
graph.show(renderer="browser")
```
## Plot average profit per trade as distribution graph
@@ -257,12 +270,12 @@ graph.show(renderer="browser")
```python
import plotly.figure_factory as ff
hist_data = [trades.profit_ratio]
group_labels = ['profit_ratio'] # name of the dataset
group_labels = ["profit_ratio"] # name of the dataset
fig = ff.create_distplot(hist_data, group_labels, bin_size=0.01)
fig.show()
```
Feel free to submit an issue or Pull Request enhancing this document if you would like to share ideas on how to best analyze the data.

View File

@@ -214,8 +214,8 @@ class AwesomeStrategy(IStrategy):
``` python hl_lines="4"
class AwesomeStrategy(IStrategy):
def custom_stake_amount(self, pair: str, current_time: datetime, current_rate: float,
proposed_stake: float, min_stake: Optional[float], max_stake: float,
entry_tag: Optional[str], side: str, **kwargs) -> float:
proposed_stake: float, min_stake: float | None, max_stake: float,
entry_tag: str | None, side: str, **kwargs) -> float:
# ...
return proposed_stake
```
@@ -237,7 +237,7 @@ After:
``` python hl_lines="4"
class AwesomeStrategy(IStrategy):
def confirm_trade_entry(self, pair: str, order_type: str, amount: float, rate: float,
time_in_force: str, current_time: datetime, entry_tag: Optional[str],
time_in_force: str, current_time: datetime, entry_tag: str | None,
side: str, **kwargs) -> bool:
return True
```
@@ -280,8 +280,8 @@ After:
``` python hl_lines="3"
class AwesomeStrategy(IStrategy):
def custom_entry_price(self, pair: str, trade: Optional[Trade], current_time: datetime, proposed_rate: float,
entry_tag: Optional[str], side: str, **kwargs) -> float:
def custom_entry_price(self, pair: str, trade: Trade | None, current_time: datetime, proposed_rate: float,
entry_tag: str | None, side: str, **kwargs) -> float:
return proposed_rate
```
@@ -312,7 +312,7 @@ After:
``` python hl_lines="5 7"
def custom_stoploss(self, pair: str, trade: 'Trade', current_time: datetime,
current_rate: float, current_profit: float, after_fill: bool,
**kwargs) -> Optional[float]:
**kwargs) -> float | None:
# once the profit has risen above 10%, keep the stoploss at 7% above the open price
if current_profit > 0.10:
return stoploss_from_open(0.07, current_profit, is_short=trade.is_short)
@@ -329,7 +329,7 @@ After:
`order_time_in_force` attributes changed from `"buy"` to `"entry"` and `"sell"` to `"exit"`.
``` python
order_time_in_force: Dict = {
order_time_in_force: dict = {
"buy": "gtc",
"sell": "gtc",
}
@@ -338,7 +338,7 @@ After:
After:
``` python hl_lines="2 3"
order_time_in_force: Dict = {
order_time_in_force: dict = {
"entry": "GTC",
"exit": "GTC",
}
@@ -780,7 +780,7 @@ class MyCoolFreqaiModel(BaseRegressionModel):
def predict(
self, unfiltered_df: DataFrame, dk: FreqaiDataKitchen, **kwargs
) -> Tuple[DataFrame, npt.NDArray[np.int_]]:
) -> tuple[DataFrame, npt.NDArray[np.int_]]:
# ... your custom stuff

View File

@@ -11,3 +11,7 @@
.rst-versions .rst-other-versions {
color: white;
}
.md-version__list {
font-weight: 500 !important;
}

View File

@@ -58,6 +58,7 @@ For the Freqtrade configuration, you can then use the full value (including `-`
```json
"chat_id": "-1001332619709"
```
!!! Warning "Using telegram groups"
When using telegram groups, you're giving every member of the telegram group access to your freqtrade bot and to all commands possible via telegram. Please make sure that you can trust everyone in the telegram group to avoid unpleasant surprises.
@@ -93,9 +94,12 @@ Example configuration showing the different settings:
"trailing_stop_loss": "on",
"stop_loss": "on",
"stoploss_on_exchange": "on",
"custom_exit": "silent",
"partial_exit": "on"
"custom_exit": "silent", // custom_exit without specifying an exit reason
"partial_exit": "on",
// "custom_exit_message": "silent", // Disable individual custom exit reasons
"*": "off" // Disable all other exit reasons
},
// "exit": "off", // Simplistic configuration to disable all exit messages
"exit_cancel": "on",
"exit_fill": "off",
"protection_trigger": "off",
@@ -108,16 +112,16 @@ Example configuration showing the different settings:
},
```
`entry` notifications are sent when the order is placed, while `entry_fill` notifications are sent when the order is filled on the exchange.
`exit` notifications are sent when the order is placed, while `exit_fill` notifications are sent when the order is filled on the exchange.
`*_fill` notifications are off by default and must be explicitly enabled.
`protection_trigger` notifications are sent when a protection triggers and `protection_trigger_global` notifications trigger when global protections are triggered.
`strategy_msg` - Receive notifications from the strategy, sent via `self.dp.send_msg()` from the strategy [more details](strategy-customization.md#send-notification).
`show_candle` - show candle values as part of entry/exit messages. Only possible values are `"ohlc"` or `"off"`.
`balance_dust_level` will define what the `/balance` command takes as "dust" - Currencies with a balance below this will be shown.
`allow_custom_messages` completely disable strategy messages.
`reload` allows you to disable reload-buttons on selected messages.
* `entry` notifications are sent when the order is placed, while `entry_fill` notifications are sent when the order is filled on the exchange.
* `exit` notifications are sent when the order is placed, while `exit_fill` notifications are sent when the order is filled on the exchange.
Exit messages (`exit` and `exit_fill`) can be further controlled at individual exit reasons level, with the specific exit reason as the key. the default for all exit reasons is `on` - but can be configured via special `*` key - which will act as a wildcard for all exit reasons that are not explicitly defined.
* `*_fill` notifications are off by default and must be explicitly enabled.
* `protection_trigger` notifications are sent when a protection triggers and `protection_trigger_global` notifications trigger when global protections are triggered.
* `strategy_msg` - Receive notifications from the strategy, sent via `self.dp.send_msg()` from the strategy [more details](strategy-customization.md#send-notification).
* `show_candle` - show candle values as part of entry/exit messages. Only possible values are `"ohlc"` or `"off"`.
* `balance_dust_level` will define what the `/balance` command takes as "dust" - Currencies with a balance below this will be shown.
* `allow_custom_messages` completely disable strategy messages.
* `reload` allows you to disable reload-buttons on selected messages.
## Create a custom keyboard (command shortcut buttons)
@@ -231,23 +235,23 @@ Once all positions are sold, run `/stop` to completely stop the bot.
`/reload_config` resets "max_open_trades" to the value set in the configuration and resets this command.
!!! Warning
The stop-buy signal is ONLY active while the bot is running, and is not persisted anyway, so restarting the bot will cause this to reset.
The stop-buy signal is ONLY active while the bot is running, and is not persisted anyway, so restarting the bot will cause this to reset.
### /status
For each open trade, the bot will send you the following message.
Enter Tag is configurable via Strategy.
> **Trade ID:** `123` `(since 1 days ago)`
> **Current Pair:** CVC/BTC
> **Direction:** Long
> **Leverage:** 1.0
> **Amount:** `26.64180098`
> **Enter Tag:** Awesome Long Signal
> **Open Rate:** `0.00007489`
> **Current Rate:** `0.00007489`
> **Unrealized Profit:** `12.95%`
> **Stoploss:** `0.00007389 (-0.02%)`
> **Trade ID:** `123` `(since 1 days ago)`
> **Current Pair:** CVC/BTC
> **Direction:** Long
> **Leverage:** 1.0
> **Amount:** `26.64180098`
> **Enter Tag:** Awesome Long Signal
> **Open Rate:** `0.00007489`
> **Current Rate:** `0.00007489`
> **Unrealized Profit:** `12.95%`
> **Stoploss:** `0.00007389 (-0.02%)`
### /status table
@@ -274,34 +278,34 @@ current max
Return a summary of your profit/loss and performance.
> **ROI:** Close trades
> ∙ `0.00485701 BTC (2.2%) (15.2 Σ%)`
> ∙ `62.968 USD`
> **ROI:** All trades
> ∙ `0.00255280 BTC (1.5%) (6.43 Σ%)`
> ∙ `33.095 EUR`
>
> **Total Trade Count:** `138`
> **Bot started:** `2022-07-11 18:40:44`
> **First Trade opened:** `3 days ago`
> **Latest Trade opened:** `2 minutes ago`
> **Avg. Duration:** `2:33:45`
> **Best Performing:** `PAY/BTC: 50.23%`
> **Trading volume:** `0.5 BTC`
> **Profit factor:** `1.04`
> **Win / Loss:** `102 / 36`
> **Winrate:** `73.91%`
> **Expectancy (Ratio):** `4.87 (1.66)`
> **Max Drawdown:** `9.23% (0.01255 BTC)`
> **ROI:** Close trades
> ∙ `0.00485701 BTC (2.2%) (15.2 Σ%)`
> ∙ `62.968 USD`
> **ROI:** All trades
> ∙ `0.00255280 BTC (1.5%) (6.43 Σ%)`
> ∙ `33.095 EUR`
>
> **Total Trade Count:** `138`
> **Bot started:** `2022-07-11 18:40:44`
> **First Trade opened:** `3 days ago`
> **Latest Trade opened:** `2 minutes ago`
> **Avg. Duration:** `2:33:45`
> **Best Performing:** `PAY/BTC: 50.23%`
> **Trading volume:** `0.5 BTC`
> **Profit factor:** `1.04`
> **Win / Loss:** `102 / 36`
> **Winrate:** `73.91%`
> **Expectancy (Ratio):** `4.87 (1.66)`
> **Max Drawdown:** `9.23% (0.01255 BTC)`
The relative profit of `1.2%` is the average profit per trade.
The relative profit of `15.2 Σ%` is be based on the starting capital - so in this case, the starting capital was `0.00485701 * 1.152 = 0.00738 BTC`.
Starting capital is either taken from the `available_capital` setting, or calculated by using current wallet size - profits.
Profit Factor is calculated as gross profits / gross losses - and should serve as an overall metric for the strategy.
Expectancy corresponds to the average return per currency unit at risk, i.e. the winrate and the risk-reward ratio (the average gain of winning trades compared to the average loss of losing trades).
Expectancy Ratio is expected profit or loss of a subsequent trade based on the performance of all past trades.
Max drawdown corresponds to the backtesting metric `Absolute Drawdown (Account)` - calculated as `(Absolute Drawdown) / (DrawdownHigh + startingBalance)`.
Bot started date will refer to the date the bot was first started. For older bots, this will default to the first trade's open date.
The relative profit of `1.2%` is the average profit per trade.
The relative profit of `15.2 Σ%` is be based on the starting capital - so in this case, the starting capital was `0.00485701 * 1.152 = 0.00738 BTC`.
**Starting capital(**) is either taken from the `available_capital` setting, or calculated by using current wallet size - profits.
**Profit Factor** is calculated as gross profits / gross losses - and should serve as an overall metric for the strategy.
**Expectancy** corresponds to the average return per currency unit at risk, i.e. the winrate and the risk-reward ratio (the average gain of winning trades compared to the average loss of losing trades).
**Expectancy Ratio** is expected profit or loss of a subsequent trade based on the performance of all past trades.
**Max drawdown** corresponds to the backtesting metric `Absolute Drawdown (Account)` - calculated as `(Absolute Drawdown) / (DrawdownHigh + startingBalance)`.
**Bot started date** will refer to the date the bot was first started. For older bots, this will default to the first trade's open date.
### /forceexit <trade_id>
@@ -329,33 +333,34 @@ Note that for this to work, `force_entry_enable` needs to be set to true.
### /performance
Return the performance of each crypto-currency the bot has sold.
> Performance:
> 1. `RCN/BTC 0.003 BTC (57.77%) (1)`
> 2. `PAY/BTC 0.0012 BTC (56.91%) (1)`
> 3. `VIB/BTC 0.0011 BTC (47.07%) (1)`
> 4. `SALT/BTC 0.0010 BTC (30.24%) (1)`
> 5. `STORJ/BTC 0.0009 BTC (27.24%) (1)`
> ...
> Performance:
> 1. `RCN/BTC 0.003 BTC (57.77%) (1)`
> 2. `PAY/BTC 0.0012 BTC (56.91%) (1)`
> 3. `VIB/BTC 0.0011 BTC (47.07%) (1)`
> 4. `SALT/BTC 0.0010 BTC (30.24%) (1)`
> 5. `STORJ/BTC 0.0009 BTC (27.24%) (1)`
> ...
### /balance
Return the balance of all crypto-currency your have on the exchange.
> **Currency:** BTC
> **Available:** 3.05890234
> **Balance:** 3.05890234
> **Pending:** 0.0
> **Currency:** CVC
> **Available:** 86.64180098
> **Balance:** 86.64180098
> **Pending:** 0.0
> **Currency:** BTC
> **Available:** 3.05890234
> **Balance:** 3.05890234
> **Pending:** 0.0
>
> **Currency:** CVC
> **Available:** 86.64180098
> **Balance:** 86.64180098
> **Pending:** 0.0
### /daily <n>
Per default `/daily` will return the 7 last days. The example below if for `/daily 3`:
> **Daily Profit over the last 3 days:**
```
Day (count) USDT USD Profit %
-------------- ------------ ---------- ----------
@@ -370,6 +375,7 @@ Per default `/weekly` will return the 8 last weeks, including the current week.
from Monday. The example below if for `/weekly 3`:
> **Weekly Profit over the last 3 weeks (starting from Monday):**
```
Monday (count) Profit BTC Profit USD Profit %
------------- -------------- ------------ ----------
@@ -396,18 +402,18 @@ Month (count) Profit BTC Profit USD Profit %
Shows the current whitelist
> Using whitelist `StaticPairList` with 22 pairs
> Using whitelist `StaticPairList` with 22 pairs
> `IOTA/BTC, NEO/BTC, TRX/BTC, VET/BTC, ADA/BTC, ETC/BTC, NCASH/BTC, DASH/BTC, XRP/BTC, XVG/BTC, EOS/BTC, LTC/BTC, OMG/BTC, BTG/BTC, LSK/BTC, ZEC/BTC, HOT/BTC, IOTX/BTC, XMR/BTC, AST/BTC, XLM/BTC, NANO/BTC`
### /blacklist [pair]
Shows the current blacklist.
If Pair is set, then this pair will be added to the pairlist.
Also supports multiple pairs, separated by a space.
Also supports multiple pairs, separated by a space.
Use `/reload_config` to reset the blacklist.
> Using blacklist `StaticPairList` with 2 pairs
>`DODGE/BTC`, `HOT/BTC`.
> Using blacklist `StaticPairList` with 2 pairs
>`DODGE/BTC`, `HOT/BTC`.
### /edge

View File

@@ -18,7 +18,7 @@ The following attributes / properties are available for each individual trade -
| `open_rate` | float | Rate this trade was entered at (Avg. entry rate in case of trade-adjustments). |
| `close_rate` | float | Close rate - only set when is_open = False. |
| `stake_amount` | float | Amount in Stake (or Quote) currency. |
| `amount` | float | Amount in Asset / Base currency that is currently owned. |
| `amount` | float | Amount in Asset / Base currency that is currently owned. Will be 0.0 until the initial order fills. |
| `open_date` | datetime | Timestamp when trade was opened **use `open_date_utc` instead** |
| `open_date_utc` | datetime | Timestamp when trade was opened - in UTC. |
| `close_date` | datetime | Timestamp when trade was closed **use `close_date_utc` instead** |
@@ -130,20 +130,21 @@ Most properties here can be None as they are dependent on the exchange response.
| Attribute | DataType | Description |
|------------|-------------|-------------|
`trade` | Trade | Trade object this order is attached to
`ft_pair` | string | Pair this order is for
`ft_is_open` | boolean | is the order filled?
`order_type` | string | Order type as defined on the exchange - usually market, limit or stoploss
`status` | string | Status as defined by ccxt. Usually open, closed, expired or canceled
`side` | string | Buy or Sell
`price` | float | Price the order was placed at
`average` | float | Average price the order filled at
`amount` | float | Amount in base currency
`filled` | float | Filled amount (in base currency)
`remaining` | float | Remaining amount
`cost` | float | Cost of the order - usually average * filled (*Exchange dependent on futures, may contain the cost with or without leverage and may be in contracts.*)
`stake_amount` | float | Stake amount used for this order. *Added in 2023.7.*
`order_date` | datetime | Order creation date **use `order_date_utc` instead**
`order_date_utc` | datetime | Order creation date (in UTC)
`order_fill_date` | datetime | Order fill date **use `order_fill_utc` instead**
`order_fill_date_utc` | datetime | Order fill date
| `trade` | Trade | Trade object this order is attached to |
| `ft_pair` | string | Pair this order is for |
| `ft_is_open` | boolean | is the order filled? |
| `order_type` | string | Order type as defined on the exchange - usually market, limit or stoploss |
| `status` | string | Status as defined by ccxt. Usually open, closed, expired or canceled |
| `side` | string | Buy or Sell |
| `price` | float | Price the order was placed at |
| `average` | float | Average price the order filled at |
| `amount` | float | Amount in base currency |
| `filled` | float | Filled amount (in base currency) |
| `remaining` | float | Remaining amount |
| `cost` | float | Cost of the order - usually average * filled (*Exchange dependent on futures, may contain the cost with or without leverage and may be in contracts.*) |
| `stake_amount` | float | Stake amount used for this order. *Added in 2023.7.* |
| `stake_amount_filled` | float | Filled Stake amount used for this order. *Added in 2024.11.* |
| `order_date` | datetime | Order creation date **use `order_date_utc` instead** |
| `order_date_utc` | datetime | Order creation date (in UTC) |
| `order_fill_date` | datetime | Order fill date **use `order_fill_utc` instead** |
| `order_fill_date_utc` | datetime | Order fill date |

View File

@@ -216,6 +216,45 @@ Example: Search dedicated strategy path.
freqtrade list-strategies --strategy-path ~/.freqtrade/strategies/
```
## List Hyperopt-Loss functions
Use the `list-hyperoptloss` subcommand to see all hyperopt loss functions available.
It provides a quick list of all available loss functions in your environment.
This subcommand can be useful for finding problems in your environment with loading loss functions: modules with Hyperopt-Loss functions that contain errors and failed to load are printed in red (LOAD FAILED), while hyperopt-Loss functions with duplicate names are printed in yellow (DUPLICATE NAME).
```
usage: freqtrade list-hyperoptloss [-h] [-v] [--logfile FILE] [-V] [-c PATH]
[-d PATH] [--userdir PATH]
[--hyperopt-path PATH] [-1] [--no-color]
options:
-h, --help show this help message and exit
--hyperopt-path PATH Specify additional lookup path for Hyperopt Loss
functions.
-1, --one-column Print output in one column.
--no-color Disable colorization of hyperopt results. May be
useful if you are redirecting output to a file.
Common arguments:
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
--logfile FILE, --log-file FILE
Log to the file specified. Special values are:
'syslog', 'journald'. See the documentation for more
details.
-V, --version show program's version number and exit
-c PATH, --config PATH
Specify configuration file (default:
`userdir/config.json` or `config.json` whichever
exists). Multiple --config options may be used. Can be
set to `-` to read config from stdin.
-d PATH, --datadir PATH, --data-dir PATH
Path to directory with historical backtesting data.
--userdir PATH, --user-data-dir PATH
Path to userdata directory.
```
## List freqAI models
Use the `list-freqaimodels` subcommand to see all freqAI models available.
@@ -418,8 +457,9 @@ Common arguments:
```
By default, only active pairs/markets are shown. Active pairs/markets are those that can currently be traded
on the exchange. The see the list of all pairs/markets (not only the active ones), use the `-a`/`-all` option.
By default, only active pairs/markets are shown. Active pairs/markets are those that can currently be traded on the exchange.
You can use the `-a`/`-all` option to see the list of all pairs/markets, including the inactive ones.
Pairs may be listed as untradeable if the smallest tradeable price for the market is very small, i.e. less than `1e-11` (`0.00000000001`)
Pairs/markets are sorted by its symbol string in the printed output.
@@ -488,7 +528,7 @@ freqtrade test-pairlist --config config.json --quote USDT BTC
`freqtrade convert-db` can be used to convert your database from one system to another (sqlite -> postgres, postgres -> other postgres), migrating all trades, orders and Pairlocks.
Please refer to the [SQL cheatsheet](sql_cheatsheet.md#use-a-different-database-system) to learn about requirements for different database systems.
Please refer to the [corresponding documentation](advanced-setup.md#use-a-different-database-system) to learn about requirements for different database systems.
```
usage: freqtrade convert-db [-h] [--db-url PATH] [--db-url-from PATH]

View File

@@ -5,7 +5,7 @@ We **strongly** recommend that Windows users use [Docker](docker_quickstart.md)
If that is not possible, try using the Windows Linux subsystem (WSL) - for which the Ubuntu instructions should work.
Otherwise, please follow the instructions below.
All instructions assume that python 3.9+ is installed and available.
All instructions assume that python 3.10+ is installed and available.
## Clone the git repository
@@ -42,7 +42,7 @@ cd freqtrade
Install ta-lib according to the [ta-lib documentation](https://github.com/TA-Lib/ta-lib-python#windows).
As compiling from source on windows has heavy dependencies (requires a partial visual studio installation), Freqtrade provides these dependencies (in the binary wheel format) for the latest 3 Python versions (3.9, 3.10, 3.11 and 3.12) and for 64bit Windows.
As compiling from source on windows has heavy dependencies (requires a partial visual studio installation), Freqtrade provides these dependencies (in the binary wheel format) for the latest 3 Python versions (3.10, 3.11 and 3.12) and for 64bit Windows.
These Wheels are also used by CI running on windows, and are therefore tested together with freqtrade.
Other versions must be downloaded from the above link.

View File

@@ -1,12 +1,12 @@
"""Freqtrade bot"""
__version__ = "2024.6"
__version__ = "2024.11"
if "dev" in __version__:
from pathlib import Path
try:
import subprocess
import subprocess # noqa: S404
freqtrade_basedir = Path(__file__).parent

View File

@@ -3,7 +3,7 @@
__main__.py for Freqtrade
To launch Freqtrade as a module
> python -m freqtrade (with Python >= 3.9)
> python -m freqtrade (with Python >= 3.10)
"""
from freqtrade import main

View File

@@ -15,6 +15,7 @@ from freqtrade.commands.data_commands import (
start_convert_trades,
start_download_data,
start_list_data,
start_list_trades_data,
)
from freqtrade.commands.db_commands import start_convert_db
from freqtrade.commands.deploy_commands import (
@@ -26,6 +27,7 @@ from freqtrade.commands.hyperopt_commands import start_hyperopt_list, start_hype
from freqtrade.commands.list_commands import (
start_list_exchanges,
start_list_freqAI_models,
start_list_hyperopt_loss_functions,
start_list_markets,
start_list_strategies,
start_list_timeframes,

View File

@@ -1,8 +1,7 @@
import logging
from pathlib import Path
from typing import Any, Dict
from typing import Any
from freqtrade.configuration import setup_utils_configuration
from freqtrade.enums import RunMode
from freqtrade.exceptions import ConfigurationError, OperationalException
@@ -10,13 +9,15 @@ from freqtrade.exceptions import ConfigurationError, OperationalException
logger = logging.getLogger(__name__)
def setup_analyze_configuration(args: Dict[str, Any], method: RunMode) -> Dict[str, Any]:
def setup_analyze_configuration(args: dict[str, Any], method: RunMode) -> dict[str, Any]:
"""
Prepare the configuration for the entry/exit reason analysis module
:param args: Cli args from Arguments()
:param method: Bot running mode
:return: Configuration
"""
from freqtrade.configuration import setup_utils_configuration
config = setup_utils_configuration(args, method)
no_unlimited_runmodes = {
@@ -47,7 +48,7 @@ def setup_analyze_configuration(args: Dict[str, Any], method: RunMode) -> Dict[s
return config
def start_analysis_entries_exits(args: Dict[str, Any]) -> None:
def start_analysis_entries_exits(args: dict[str, Any]) -> None:
"""
Start analysis script
:param args: Cli args from Arguments()

View File

@@ -2,10 +2,10 @@
This module contains the argument manager class
"""
import argparse
from argparse import ArgumentParser, Namespace, _ArgumentGroup
from functools import partial
from pathlib import Path
from typing import Any, Dict, List, Optional
from typing import Any
from freqtrade.commands.cli_options import AVAILABLE_CLI_OPTIONS
from freqtrade.constants import DEFAULT_CONFIG
@@ -23,7 +23,7 @@ ARGS_STRATEGY = [
ARGS_TRADE = ["db_url", "sd_notify", "dry_run", "dry_run_wallet", "fee"]
ARGS_WEBSERVER: List[str] = []
ARGS_WEBSERVER: list[str] = []
ARGS_COMMON_OPTIMIZE = [
"timeframe",
@@ -37,7 +37,6 @@ ARGS_COMMON_OPTIMIZE = [
ARGS_BACKTEST = ARGS_COMMON_OPTIMIZE + [
"position_stacking",
"use_max_market_positions",
"enable_protections",
"dry_run_wallet",
"timeframe_detail",
@@ -53,7 +52,6 @@ ARGS_HYPEROPT = ARGS_COMMON_OPTIMIZE + [
"hyperopt",
"hyperopt_path",
"position_stacking",
"use_max_market_positions",
"enable_protections",
"dry_run_wallet",
"timeframe_detail",
@@ -117,7 +115,7 @@ ARGS_CREATE_USERDIR = ["user_data_dir", "reset"]
ARGS_BUILD_CONFIG = ["config"]
ARGS_SHOW_CONFIG = ["user_data_dir", "config", "show_sensitive"]
ARGS_BUILD_STRATEGY = ["user_data_dir", "strategy", "template"]
ARGS_BUILD_STRATEGY = ["user_data_dir", "strategy", "strategy_path", "template"]
ARGS_CONVERT_DATA_TRADES = ["pairs", "format_from_trades", "format_to", "erase", "exchange"]
ARGS_CONVERT_DATA = ["pairs", "format_from", "format_to", "erase", "exchange"]
@@ -132,7 +130,15 @@ ARGS_CONVERT_TRADES = [
"trading_mode",
]
ARGS_LIST_DATA = ["exchange", "dataformat_ohlcv", "pairs", "trading_mode", "show_timerange"]
ARGS_LIST_DATA = [
"exchange",
"dataformat_ohlcv",
"dataformat_trades",
"trades",
"pairs",
"trading_mode",
"show_timerange",
]
ARGS_DOWNLOAD_DATA = [
"pairs",
@@ -220,12 +226,26 @@ ARGS_ANALYZE_ENTRIES_EXITS = [
"enter_reason_list",
"exit_reason_list",
"indicator_list",
"entry_only",
"exit_only",
"timerange",
"analysis_rejected",
"analysis_to_csv",
"analysis_csv_path",
]
ARGS_STRATEGY_UPDATER = ["strategy_list", "strategy_path", "recursive_strategy_search"]
ARGS_LOOKAHEAD_ANALYSIS = [
a
for a in ARGS_BACKTEST
if a not in ("position_stacking", "backtest_cache", "backtest_breakdown")
] + ["minimum_trade_amount", "targeted_trade_amount", "lookahead_analysis_exportfilename"]
ARGS_RECURSIVE_ANALYSIS = ["timeframe", "timerange", "dataformat_ohlcv", "pairs", "startup_candle"]
# Command level configs - keep at the bottom of the above definitions
NO_CONF_REQURIED = [
"convert-data",
"convert-trade-data",
@@ -235,6 +255,7 @@ NO_CONF_REQURIED = [
"list-pairs",
"list-strategies",
"list-freqaimodels",
"list-hyperoptloss",
"list-data",
"hyperopt-list",
"hyperopt-show",
@@ -248,25 +269,17 @@ NO_CONF_REQURIED = [
NO_CONF_ALLOWED = ["create-userdir", "list-exchanges", "new-strategy"]
ARGS_STRATEGY_UPDATER = ["strategy_list", "strategy_path", "recursive_strategy_search"]
ARGS_LOOKAHEAD_ANALYSIS = [
a for a in ARGS_BACKTEST if a not in ("position_stacking", "use_max_market_positions", "cache")
] + ["minimum_trade_amount", "targeted_trade_amount", "lookahead_analysis_exportfilename"]
ARGS_RECURSIVE_ANALYSIS = ["timeframe", "timerange", "dataformat_ohlcv", "pairs", "startup_candle"]
class Arguments:
"""
Arguments Class. Manage the arguments received by the cli
"""
def __init__(self, args: Optional[List[str]]) -> None:
def __init__(self, args: list[str] | None) -> None:
self.args = args
self._parsed_arg: Optional[argparse.Namespace] = None
self._parsed_arg: Namespace | None = None
def get_parsed_arg(self) -> Dict[str, Any]:
def get_parsed_arg(self) -> dict[str, Any]:
"""
Return the list of arguments
:return: List[str] List of arguments
@@ -277,7 +290,7 @@ class Arguments:
return vars(self._parsed_arg)
def _parse_args(self) -> argparse.Namespace:
def _parse_args(self) -> Namespace:
"""
Parses given arguments and returns an argparse Namespace instance.
"""
@@ -306,7 +319,7 @@ class Arguments:
return parsed_arg
def _build_args(self, optionlist, parser):
def _build_args(self, optionlist: list[str], parser: ArgumentParser | _ArgumentGroup) -> None:
for val in optionlist:
opt = AVAILABLE_CLI_OPTIONS[val]
parser.add_argument(*opt.cli, dest=val, **opt.kwargs)
@@ -317,16 +330,16 @@ class Arguments:
:return: None
"""
# Build shared arguments (as group Common Options)
_common_parser = argparse.ArgumentParser(add_help=False)
_common_parser = ArgumentParser(add_help=False)
group = _common_parser.add_argument_group("Common arguments")
self._build_args(optionlist=ARGS_COMMON, parser=group)
_strategy_parser = argparse.ArgumentParser(add_help=False)
_strategy_parser = ArgumentParser(add_help=False)
strategy_group = _strategy_parser.add_argument_group("Strategy arguments")
self._build_args(optionlist=ARGS_STRATEGY, parser=strategy_group)
# Build main command
self.parser = argparse.ArgumentParser(
self.parser = ArgumentParser(
prog="freqtrade", description="Free, open source crypto trading bot"
)
self._build_args(optionlist=["version"], parser=self.parser)
@@ -348,6 +361,7 @@ class Arguments:
start_list_data,
start_list_exchanges,
start_list_freqAI_models,
start_list_hyperopt_loss_functions,
start_list_markets,
start_list_strategies,
start_list_timeframes,
@@ -549,6 +563,15 @@ class Arguments:
list_strategies_cmd.set_defaults(func=start_list_strategies)
self._build_args(optionlist=ARGS_LIST_STRATEGIES, parser=list_strategies_cmd)
# Add list-Hyperopt loss subcommand
list_hyperopt_loss_cmd = subparsers.add_parser(
"list-hyperoptloss",
help="Print available hyperopt loss functions.",
parents=[_common_parser],
)
list_hyperopt_loss_cmd.set_defaults(func=start_list_hyperopt_loss_functions)
self._build_args(optionlist=ARGS_LIST_HYPEROPTS, parser=list_hyperopt_loss_cmd)
# Add list-freqAI Models subcommand
list_freqaimodels_cmd = subparsers.add_parser(
"list-freqaimodels",

View File

@@ -1,261 +1,27 @@
import logging
import secrets
from pathlib import Path
from typing import Any, Dict, List
from typing import Any
from questionary import Separator, prompt
from freqtrade.configuration import sanitize_config
from freqtrade.configuration.config_setup import setup_utils_configuration
from freqtrade.configuration.detect_environment import running_in_docker
from freqtrade.configuration.directory_operations import chown_user_directory
from freqtrade.constants import UNLIMITED_STAKE_AMOUNT
from freqtrade.enums import RunMode
from freqtrade.exceptions import OperationalException
from freqtrade.exchange import MAP_EXCHANGE_CHILDCLASS, available_exchanges
from freqtrade.util import render_template
logger = logging.getLogger(__name__)
def validate_is_int(val):
try:
_ = int(val)
return True
except Exception:
return False
def validate_is_float(val):
try:
_ = float(val)
return True
except Exception:
return False
def ask_user_overwrite(config_path: Path) -> bool:
questions = [
{
"type": "confirm",
"name": "overwrite",
"message": f"File {config_path} already exists. Overwrite?",
"default": False,
},
]
answers = prompt(questions)
return answers["overwrite"]
def ask_user_config() -> Dict[str, Any]:
"""
Ask user a few questions to build the configuration.
Interactive questions built using https://github.com/tmbo/questionary
:returns: Dict with keys to put into template
"""
questions: List[Dict[str, Any]] = [
{
"type": "confirm",
"name": "dry_run",
"message": "Do you want to enable Dry-run (simulated trades)?",
"default": True,
},
{
"type": "text",
"name": "stake_currency",
"message": "Please insert your stake currency:",
"default": "USDT",
},
{
"type": "text",
"name": "stake_amount",
"message": f"Please insert your stake amount (Number or '{UNLIMITED_STAKE_AMOUNT}'):",
"default": "unlimited",
"validate": lambda val: val == UNLIMITED_STAKE_AMOUNT or validate_is_float(val),
"filter": lambda val: (
'"' + UNLIMITED_STAKE_AMOUNT + '"' if val == UNLIMITED_STAKE_AMOUNT else val
),
},
{
"type": "text",
"name": "max_open_trades",
"message": "Please insert max_open_trades (Integer or -1 for unlimited open trades):",
"default": "3",
"validate": lambda val: validate_is_int(val),
},
{
"type": "select",
"name": "timeframe_in_config",
"message": "Time",
"choices": ["Have the strategy define timeframe.", "Override in configuration."],
},
{
"type": "text",
"name": "timeframe",
"message": "Please insert your desired timeframe (e.g. 5m):",
"default": "5m",
"when": lambda x: x["timeframe_in_config"] == "Override in configuration.",
},
{
"type": "text",
"name": "fiat_display_currency",
"message": (
"Please insert your display Currency for reporting "
"(leave empty to disable FIAT conversion):"
),
"default": "USD",
},
{
"type": "select",
"name": "exchange_name",
"message": "Select exchange",
"choices": [
"binance",
"binanceus",
"bingx",
"gate",
"htx",
"kraken",
"kucoin",
"okx",
Separator("------------------"),
"other",
],
},
{
"type": "confirm",
"name": "trading_mode",
"message": "Do you want to trade Perpetual Swaps (perpetual futures)?",
"default": False,
"filter": lambda val: "futures" if val else "spot",
"when": lambda x: x["exchange_name"] in ["binance", "gate", "okx", "bybit"],
},
{
"type": "autocomplete",
"name": "exchange_name",
"message": "Type your exchange name (Must be supported by ccxt)",
"choices": available_exchanges(),
"when": lambda x: x["exchange_name"] == "other",
},
{
"type": "password",
"name": "exchange_key",
"message": "Insert Exchange Key",
"when": lambda x: not x["dry_run"],
},
{
"type": "password",
"name": "exchange_secret",
"message": "Insert Exchange Secret",
"when": lambda x: not x["dry_run"],
},
{
"type": "password",
"name": "exchange_key_password",
"message": "Insert Exchange API Key password",
"when": lambda x: not x["dry_run"] and x["exchange_name"] in ("kucoin", "okx"),
},
{
"type": "confirm",
"name": "telegram",
"message": "Do you want to enable Telegram?",
"default": False,
},
{
"type": "password",
"name": "telegram_token",
"message": "Insert Telegram token",
"when": lambda x: x["telegram"],
},
{
"type": "password",
"name": "telegram_chat_id",
"message": "Insert Telegram chat id",
"when": lambda x: x["telegram"],
},
{
"type": "confirm",
"name": "api_server",
"message": "Do you want to enable the Rest API (includes FreqUI)?",
"default": False,
},
{
"type": "text",
"name": "api_server_listen_addr",
"message": (
"Insert Api server Listen Address (0.0.0.0 for docker, "
"otherwise best left untouched)"
),
"default": "127.0.0.1" if not running_in_docker() else "0.0.0.0", # noqa: S104
"when": lambda x: x["api_server"],
},
{
"type": "text",
"name": "api_server_username",
"message": "Insert api-server username",
"default": "freqtrader",
"when": lambda x: x["api_server"],
},
{
"type": "password",
"name": "api_server_password",
"message": "Insert api-server password",
"when": lambda x: x["api_server"],
},
]
answers = prompt(questions)
if not answers:
# Interrupted questionary sessions return an empty dict.
raise OperationalException("User interrupted interactive questions.")
# Ensure default is set for non-futures exchanges
answers["trading_mode"] = answers.get("trading_mode", "spot")
answers["margin_mode"] = "isolated" if answers.get("trading_mode") == "futures" else ""
# Force JWT token to be a random string
answers["api_server_jwt_key"] = secrets.token_hex()
answers["api_server_ws_token"] = secrets.token_urlsafe(25)
return answers
def deploy_new_config(config_path: Path, selections: Dict[str, Any]) -> None:
"""
Applies selections to the template and writes the result to config_path
:param config_path: Path object for new config file. Should not exist yet
:param selections: Dict containing selections taken by the user.
"""
from jinja2.exceptions import TemplateNotFound
try:
exchange_template = MAP_EXCHANGE_CHILDCLASS.get(
selections["exchange_name"], selections["exchange_name"]
)
selections["exchange"] = render_template(
templatefile=f"subtemplates/exchange_{exchange_template}.j2", arguments=selections
)
except TemplateNotFound:
selections["exchange"] = render_template(
templatefile="subtemplates/exchange_generic.j2", arguments=selections
)
config_text = render_template(templatefile="base_config.json.j2", arguments=selections)
logger.info(f"Writing config to `{config_path}`.")
logger.info(
"Please make sure to check the configuration contents and adjust settings to your needs."
)
config_path.write_text(config_text)
def start_new_config(args: Dict[str, Any]) -> None:
def start_new_config(args: dict[str, Any]) -> None:
"""
Create a new strategy from a template
Asking the user questions to fill out the template accordingly.
"""
from freqtrade.configuration.deploy_config import (
ask_user_config,
ask_user_overwrite,
deploy_new_config,
)
from freqtrade.configuration.directory_operations import chown_user_directory
config_path = Path(args["config"][0])
chown_user_directory(config_path.parent)
if config_path.exists():
@@ -271,10 +37,11 @@ def start_new_config(args: Dict[str, Any]) -> None:
deploy_new_config(config_path, selections)
def start_show_config(args: Dict[str, Any]) -> None:
config = setup_utils_configuration(args, RunMode.UTIL_EXCHANGE, set_dry=False)
def start_show_config(args: dict[str, Any]) -> None:
from freqtrade.configuration import sanitize_config
from freqtrade.configuration.config_setup import setup_utils_configuration
# TODO: Sanitize from sensitive info before printing
config = setup_utils_configuration(args, RunMode.UTIL_EXCHANGE, set_dry=False)
print("Your combined configuration is:")
config_sanitized = sanitize_config(

View File

@@ -168,14 +168,6 @@ AVAILABLE_CLI_OPTIONS = {
action="store_true",
default=False,
),
"use_max_market_positions": Arg(
"--dmmp",
"--disable-max-market-positions",
help="Disable applying `max_open_trades` during backtest "
"(same as setting `max_open_trades` to a very high number).",
action="store_false",
default=True,
),
"backtest_show_pair_list": Arg(
"--show-pair-list",
help="Show backtesting pairlist sorted by profit.",
@@ -446,8 +438,12 @@ AVAILABLE_CLI_OPTIONS = {
),
"download_trades": Arg(
"--dl-trades",
help="Download trades instead of OHLCV data. The bot will resample trades to the "
"desired timeframe as specified as --timeframes/-t.",
help="Download trades instead of OHLCV data.",
action="store_true",
),
"trades": Arg(
"--trades",
help="Work on trades data instead of OHLCV data.",
action="store_true",
),
"convert_trades": Arg(
@@ -715,6 +711,12 @@ AVAILABLE_CLI_OPTIONS = {
nargs="+",
default=[],
),
"entry_only": Arg(
"--entry-only", help=("Only analyze entry signals."), action="store_true", default=False
),
"exit_only": Arg(
"--exit-only", help=("Only analyze exit signals."), action="store_true", default=False
),
"analysis_rejected": Arg(
"--rejected-signals",
help="Analyse rejected signals",

View File

@@ -1,22 +1,12 @@
import logging
import sys
from collections import defaultdict
from typing import Any, Dict
from typing import Any
from freqtrade.configuration import TimeRange, setup_utils_configuration
from freqtrade.constants import DATETIME_PRINT_FORMAT, DL_DATA_TIMEFRAMES, Config
from freqtrade.data.converter import (
convert_ohlcv_format,
convert_trades_format,
convert_trades_to_ohlcv,
)
from freqtrade.data.history import download_data_main
from freqtrade.enums import CandleType, RunMode, TradingMode
from freqtrade.exceptions import ConfigurationError
from freqtrade.exchange import timeframe_to_minutes
from freqtrade.plugins.pairlist.pairlist_helpers import dynamic_expand_pairlist
from freqtrade.resolvers import ExchangeResolver
from freqtrade.util.migrations import migrate_data
logger = logging.getLogger(__name__)
@@ -36,10 +26,13 @@ def _check_data_config_download_sanity(config: Config) -> None:
)
def start_download_data(args: Dict[str, Any]) -> None:
def start_download_data(args: dict[str, Any]) -> None:
"""
Download data (former download_backtest_data.py script)
"""
from freqtrade.configuration import setup_utils_configuration
from freqtrade.data.history import download_data_main
config = setup_utils_configuration(args, RunMode.UTIL_EXCHANGE)
_check_data_config_download_sanity(config)
@@ -51,7 +44,11 @@ def start_download_data(args: Dict[str, Any]) -> None:
sys.exit("SIGINT received, aborting ...")
def start_convert_trades(args: Dict[str, Any]) -> None:
def start_convert_trades(args: dict[str, Any]) -> None:
from freqtrade.configuration import TimeRange, setup_utils_configuration
from freqtrade.data.converter import convert_trades_to_ohlcv
from freqtrade.resolvers import ExchangeResolver
config = setup_utils_configuration(args, RunMode.UTIL_EXCHANGE)
timerange = TimeRange()
@@ -90,10 +87,14 @@ def start_convert_trades(args: Dict[str, Any]) -> None:
)
def start_convert_data(args: Dict[str, Any], ohlcv: bool = True) -> None:
def start_convert_data(args: dict[str, Any], ohlcv: bool = True) -> None:
"""
Convert data from one format to another
"""
from freqtrade.configuration import setup_utils_configuration
from freqtrade.data.converter import convert_ohlcv_format, convert_trades_format
from freqtrade.util.migrations import migrate_data
config = setup_utils_configuration(args, RunMode.UTIL_NO_EXCHANGE)
if ohlcv:
migrate_data(config)
@@ -112,15 +113,20 @@ def start_convert_data(args: Dict[str, Any], ohlcv: bool = True) -> None:
)
def start_list_data(args: Dict[str, Any]) -> None:
def start_list_data(args: dict[str, Any]) -> None:
"""
List available backtest data
List available OHLCV data
"""
from freqtrade.configuration import setup_utils_configuration
from freqtrade.exchange import timeframe_to_minutes
from freqtrade.util import print_rich_table
if args["trades"]:
start_list_trades_data(args)
return
config = setup_utils_configuration(args, RunMode.UTIL_NO_EXCHANGE)
from tabulate import tabulate
from freqtrade.data.history import get_datahandler
dhc = get_datahandler(config["datadir"], config["dataformat_ohlcv"])
@@ -128,11 +134,9 @@ def start_list_data(args: Dict[str, Any]) -> None:
paircombs = dhc.ohlcv_get_available_data(
config["datadir"], config.get("trading_mode", TradingMode.SPOT)
)
if args["pairs"]:
paircombs = [comb for comb in paircombs if comb[0] in args["pairs"]]
print(f"Found {len(paircombs)} pair / timeframe combinations.")
title = f"Found {len(paircombs)} pair / timeframe combinations."
if not config.get("show_timerange"):
groupedpair = defaultdict(list)
for pair, timeframe, candle_type in sorted(
@@ -141,40 +145,86 @@ def start_list_data(args: Dict[str, Any]) -> None:
groupedpair[(pair, candle_type)].append(timeframe)
if groupedpair:
print(
tabulate(
[
(pair, ", ".join(timeframes), candle_type)
for (pair, candle_type), timeframes in groupedpair.items()
],
headers=("Pair", "Timeframe", "Type"),
tablefmt="psql",
stralign="right",
)
print_rich_table(
[
(pair, ", ".join(timeframes), candle_type)
for (pair, candle_type), timeframes in groupedpair.items()
],
("Pair", "Timeframe", "Type"),
title,
table_kwargs={"min_width": 50},
)
else:
paircombs1 = [
(pair, timeframe, candle_type, *dhc.ohlcv_data_min_max(pair, timeframe, candle_type))
for pair, timeframe, candle_type in paircombs
]
print(
tabulate(
[
(
pair,
timeframe,
candle_type,
start.strftime(DATETIME_PRINT_FORMAT),
end.strftime(DATETIME_PRINT_FORMAT),
length,
)
for pair, timeframe, candle_type, start, end, length in sorted(
paircombs1, key=lambda x: (x[0], timeframe_to_minutes(x[1]), x[2])
)
],
headers=("Pair", "Timeframe", "Type", "From", "To", "Candles"),
tablefmt="psql",
stralign="right",
)
print_rich_table(
[
(
pair,
timeframe,
candle_type,
start.strftime(DATETIME_PRINT_FORMAT),
end.strftime(DATETIME_PRINT_FORMAT),
str(length),
)
for pair, timeframe, candle_type, start, end, length in sorted(
paircombs1, key=lambda x: (x[0], timeframe_to_minutes(x[1]), x[2])
)
],
("Pair", "Timeframe", "Type", "From", "To", "Candles"),
summary=title,
table_kwargs={"min_width": 50},
)
def start_list_trades_data(args: dict[str, Any]) -> None:
"""
List available Trades data
"""
from freqtrade.configuration import setup_utils_configuration
from freqtrade.misc import plural
from freqtrade.util import print_rich_table
config = setup_utils_configuration(args, RunMode.UTIL_NO_EXCHANGE)
from freqtrade.data.history import get_datahandler
dhc = get_datahandler(config["datadir"], config["dataformat_trades"])
paircombs = dhc.trades_get_available_data(
config["datadir"], config.get("trading_mode", TradingMode.SPOT)
)
if args["pairs"]:
paircombs = [comb for comb in paircombs if comb in args["pairs"]]
title = f"Found trades data for {len(paircombs)} {plural(len(paircombs), 'pair')}."
if not config.get("show_timerange"):
print_rich_table(
[(pair, config.get("candle_type_def", CandleType.SPOT)) for pair in sorted(paircombs)],
("Pair", "Type"),
title,
table_kwargs={"min_width": 50},
)
else:
paircombs1 = [
(pair, *dhc.trades_data_min_max(pair, config.get("trading_mode", TradingMode.SPOT)))
for pair in paircombs
]
print_rich_table(
[
(
pair,
config.get("candle_type_def", CandleType.SPOT),
start.strftime(DATETIME_PRINT_FORMAT),
end.strftime(DATETIME_PRINT_FORMAT),
str(length),
)
for pair, start, end, length in sorted(paircombs1, key=lambda x: (x[0]))
],
("Pair", "Type", "From", "To", "Trades"),
summary=title,
table_kwargs={"min_width": 50},
)

View File

@@ -1,18 +1,17 @@
import logging
from typing import Any, Dict
from typing import Any
from sqlalchemy import func, select
from freqtrade.configuration.config_setup import setup_utils_configuration
from freqtrade.enums import RunMode
logger = logging.getLogger(__name__)
def start_convert_db(args: Dict[str, Any]) -> None:
def start_convert_db(args: dict[str, Any]) -> None:
from sqlalchemy import func, select
from sqlalchemy.orm import make_transient
from freqtrade.configuration.config_setup import setup_utils_configuration
from freqtrade.persistence import Order, Trade, init_db
from freqtrade.persistence.migrations import set_sequence_ids
from freqtrade.persistence.pairlock import PairLock

View File

@@ -1,16 +1,11 @@
import logging
import sys
from pathlib import Path
from typing import Any, Dict, Optional, Tuple
from typing import Any
import requests
from freqtrade.configuration import setup_utils_configuration
from freqtrade.configuration.directory_operations import copy_sample_files, create_userdata_dir
from freqtrade.constants import USERPATH_STRATEGIES
from freqtrade.enums import RunMode
from freqtrade.exceptions import ConfigurationError, OperationalException
from freqtrade.util import render_template, render_template_with_fallback
logger = logging.getLogger(__name__)
@@ -20,12 +15,14 @@ logger = logging.getLogger(__name__)
req_timeout = 30
def start_create_userdir(args: Dict[str, Any]) -> None:
def start_create_userdir(args: dict[str, Any]) -> None:
"""
Create "user_data" directory to contain user data strategies, hyperopt, ...)
:param args: Cli args from Arguments()
:return: None
"""
from freqtrade.configuration.directory_operations import copy_sample_files, create_userdata_dir
if "user_data_dir" in args and args["user_data_dir"]:
userdir = create_userdata_dir(args["user_data_dir"], create_dir=True)
copy_sample_files(userdir, overwrite=args["reset"])
@@ -38,6 +35,8 @@ def deploy_new_strategy(strategy_name: str, strategy_path: Path, subtemplate: st
"""
Deploy new strategy from template to strategy_path
"""
from freqtrade.util import render_template, render_template_with_fallback
fallback = "full"
attributes = render_template_with_fallback(
templatefile=f"strategy_subtemplates/strategy_attributes_{subtemplate}.j2",
@@ -81,11 +80,20 @@ def deploy_new_strategy(strategy_name: str, strategy_path: Path, subtemplate: st
strategy_path.write_text(strategy_text)
def start_new_strategy(args: Dict[str, Any]) -> None:
def start_new_strategy(args: dict[str, Any]) -> None:
from freqtrade.configuration import setup_utils_configuration
config = setup_utils_configuration(args, RunMode.UTIL_NO_EXCHANGE)
if "strategy" in args and args["strategy"]:
new_path = config["user_data_dir"] / USERPATH_STRATEGIES / (args["strategy"] + ".py")
if "strategy_path" in args and args["strategy_path"]:
strategy_dir = Path(args["strategy_path"])
else:
strategy_dir = config["user_data_dir"] / USERPATH_STRATEGIES
if not strategy_dir.is_dir():
logger.info(f"Creating strategy directory {strategy_dir}")
strategy_dir.mkdir(parents=True)
new_path = strategy_dir / (args["strategy"] + ".py")
if new_path.exists():
raise OperationalException(
@@ -98,80 +106,14 @@ def start_new_strategy(args: Dict[str, Any]) -> None:
raise ConfigurationError("`new-strategy` requires --strategy to be set.")
def clean_ui_subdir(directory: Path):
if directory.is_dir():
logger.info("Removing UI directory content.")
def start_install_ui(args: dict[str, Any]) -> None:
from freqtrade.commands.deploy_ui import (
clean_ui_subdir,
download_and_install_ui,
get_ui_download_url,
read_ui_version,
)
for p in reversed(list(directory.glob("**/*"))): # iterate contents from leaves to root
if p.name in (".gitkeep", "fallback_file.html"):
continue
if p.is_file():
p.unlink()
elif p.is_dir():
p.rmdir()
def read_ui_version(dest_folder: Path) -> Optional[str]:
file = dest_folder / ".uiversion"
if not file.is_file():
return None
with file.open("r") as f:
return f.read()
def download_and_install_ui(dest_folder: Path, dl_url: str, version: str):
from io import BytesIO
from zipfile import ZipFile
logger.info(f"Downloading {dl_url}")
resp = requests.get(dl_url, timeout=req_timeout).content
dest_folder.mkdir(parents=True, exist_ok=True)
with ZipFile(BytesIO(resp)) as zf:
for fn in zf.filelist:
with zf.open(fn) as x:
destfile = dest_folder / fn.filename
if fn.is_dir():
destfile.mkdir(exist_ok=True)
else:
destfile.write_bytes(x.read())
with (dest_folder / ".uiversion").open("w") as f:
f.write(version)
def get_ui_download_url(version: Optional[str] = None) -> Tuple[str, str]:
base_url = "https://api.github.com/repos/freqtrade/frequi/"
# Get base UI Repo path
resp = requests.get(f"{base_url}releases", timeout=req_timeout)
resp.raise_for_status()
r = resp.json()
if version:
tmp = [x for x in r if x["name"] == version]
if tmp:
latest_version = tmp[0]["name"]
assets = tmp[0].get("assets", [])
else:
raise ValueError("UI-Version not found.")
else:
latest_version = r[0]["name"]
assets = r[0].get("assets", [])
dl_url = ""
if assets and len(assets) > 0:
dl_url = assets[0]["browser_download_url"]
# URL not found - try assets url
if not dl_url:
assets = r[0]["assets_url"]
resp = requests.get(assets, timeout=req_timeout)
r = resp.json()
dl_url = r[0]["browser_download_url"]
return dl_url, latest_version
def start_install_ui(args: Dict[str, Any]) -> None:
dest_folder = Path(__file__).parents[1] / "rpc/api_server/ui/installed/"
# First make sure the assets are removed.
dl_url, latest_version = get_ui_download_url(args.get("ui_version"))

View File

@@ -0,0 +1,83 @@
import logging
from pathlib import Path
import requests
logger = logging.getLogger(__name__)
# Timeout for requests
req_timeout = 30
def clean_ui_subdir(directory: Path):
if directory.is_dir():
logger.info("Removing UI directory content.")
for p in reversed(list(directory.glob("**/*"))): # iterate contents from leaves to root
if p.name in (".gitkeep", "fallback_file.html"):
continue
if p.is_file():
p.unlink()
elif p.is_dir():
p.rmdir()
def read_ui_version(dest_folder: Path) -> str | None:
file = dest_folder / ".uiversion"
if not file.is_file():
return None
with file.open("r") as f:
return f.read()
def download_and_install_ui(dest_folder: Path, dl_url: str, version: str):
from io import BytesIO
from zipfile import ZipFile
logger.info(f"Downloading {dl_url}")
resp = requests.get(dl_url, timeout=req_timeout).content
dest_folder.mkdir(parents=True, exist_ok=True)
with ZipFile(BytesIO(resp)) as zf:
for fn in zf.filelist:
with zf.open(fn) as x:
destfile = dest_folder / fn.filename
if fn.is_dir():
destfile.mkdir(exist_ok=True)
else:
destfile.write_bytes(x.read())
with (dest_folder / ".uiversion").open("w") as f:
f.write(version)
def get_ui_download_url(version: str | None = None) -> tuple[str, str]:
base_url = "https://api.github.com/repos/freqtrade/frequi/"
# Get base UI Repo path
resp = requests.get(f"{base_url}releases", timeout=req_timeout)
resp.raise_for_status()
r = resp.json()
if version:
tmp = [x for x in r if x["name"] == version]
if tmp:
latest_version = tmp[0]["name"]
assets = tmp[0].get("assets", [])
else:
raise ValueError("UI-Version not found.")
else:
latest_version = r[0]["name"]
assets = r[0].get("assets", [])
dl_url = ""
if assets and len(assets) > 0:
dl_url = assets[0]["browser_download_url"]
# URL not found - try assets url
if not dl_url:
assets = r[0]["assets_url"]
resp = requests.get(assets, timeout=req_timeout)
r = resp.json()
dl_url = r[0]["browser_download_url"]
return dl_url, latest_version

View File

@@ -1,23 +1,21 @@
import logging
from operator import itemgetter
from typing import Any, Dict
from typing import Any
from colorama import init as colorama_init
from freqtrade.configuration import setup_utils_configuration
from freqtrade.data.btanalysis import get_latest_hyperopt_file
from freqtrade.enums import RunMode
from freqtrade.exceptions import OperationalException
from freqtrade.optimize.optimize_reports import show_backtest_result
logger = logging.getLogger(__name__)
def start_hyperopt_list(args: Dict[str, Any]) -> None:
def start_hyperopt_list(args: dict[str, Any]) -> None:
"""
List hyperopt epochs previously evaluated
"""
from freqtrade.configuration import setup_utils_configuration
from freqtrade.data.btanalysis import get_latest_hyperopt_file
from freqtrade.optimize.hyperopt.hyperopt_output import HyperoptOutput
from freqtrade.optimize.hyperopt_tools import HyperoptTools
config = setup_utils_configuration(args, RunMode.UTIL_NO_EXCHANGE)
@@ -35,21 +33,17 @@ def start_hyperopt_list(args: Dict[str, Any]) -> None:
# Previous evaluations
epochs, total_epochs = HyperoptTools.load_filtered_results(results_file, config)
if print_colorized:
colorama_init(autoreset=True)
if not export_csv:
try:
print(
HyperoptTools.get_result_table(
config,
epochs,
total_epochs,
not config.get("hyperopt_list_best", False),
print_colorized,
0,
)
h_out = HyperoptOutput()
h_out.add_data(
config,
epochs,
total_epochs,
not config.get("hyperopt_list_best", False),
)
h_out.print(print_colorized=print_colorized)
except KeyboardInterrupt:
print("User interrupted..")
@@ -62,11 +56,14 @@ def start_hyperopt_list(args: Dict[str, Any]) -> None:
HyperoptTools.export_csv_file(config, epochs, export_csv)
def start_hyperopt_show(args: Dict[str, Any]) -> None:
def start_hyperopt_show(args: dict[str, Any]) -> None:
"""
Show details of a hyperopt epoch previously evaluated
"""
from freqtrade.configuration import setup_utils_configuration
from freqtrade.data.btanalysis import get_latest_hyperopt_file
from freqtrade.optimize.hyperopt_tools import HyperoptTools
from freqtrade.optimize.optimize_reports import show_backtest_result
config = setup_utils_configuration(args, RunMode.UTIL_NO_EXCHANGE)

View File

@@ -1,96 +1,102 @@
import csv
import logging
import sys
from typing import Any, Dict, List, Union
from typing import Any
import rapidjson
from colorama import Fore, Style
from colorama import init as colorama_init
from tabulate import tabulate
from freqtrade.configuration import setup_utils_configuration
from freqtrade.enums import RunMode
from freqtrade.exceptions import ConfigurationError, OperationalException
from freqtrade.exchange import list_available_exchanges, market_is_active
from freqtrade.misc import parse_db_uri_for_logging, plural
from freqtrade.resolvers import ExchangeResolver, StrategyResolver
from freqtrade.types import ValidExchangesType
from freqtrade.ft_types import ValidExchangesType
logger = logging.getLogger(__name__)
def start_list_exchanges(args: Dict[str, Any]) -> None:
def start_list_exchanges(args: dict[str, Any]) -> None:
"""
Print available exchanges
:param args: Cli args from Arguments()
:return: None
"""
exchanges = list_available_exchanges(args["list_exchanges_all"])
from rich.console import Console
from rich.table import Table
from rich.text import Text
from freqtrade.exchange import list_available_exchanges
available_exchanges: list[ValidExchangesType] = list_available_exchanges(
args["list_exchanges_all"]
)
if args["print_one_column"]:
print("\n".join([e["name"] for e in exchanges]))
print("\n".join([e["classname"] for e in available_exchanges]))
else:
headers = {
"name": "Exchange name",
"supported": "Supported",
"trade_modes": "Markets",
"comment": "Reason",
}
headers.update({"valid": "Valid"} if args["list_exchanges_all"] else {})
if args["list_exchanges_all"]:
title = (
f"All exchanges supported by the ccxt library "
f"({len(available_exchanges)} exchanges):"
)
else:
available_exchanges = [e for e in available_exchanges if e["valid"] is not False]
title = f"Exchanges available for Freqtrade ({len(available_exchanges)} exchanges):"
def build_entry(exchange: ValidExchangesType, valid: bool):
valid_entry = {"valid": exchange["valid"]} if valid else {}
result: Dict[str, Union[str, bool]] = {
"name": exchange["name"],
**valid_entry,
"supported": "Official" if exchange["supported"] else "",
"trade_modes": ", ".join(
(f"{a['margin_mode']} " if a["margin_mode"] else "") + a["trading_mode"]
table = Table(title=title)
table.add_column("Exchange Name")
table.add_column("Class Name")
table.add_column("Markets")
table.add_column("Reason")
for exchange in available_exchanges:
name = Text(exchange["name"])
if exchange["supported"]:
name.append(" (Supported)", style="italic")
name.stylize("green bold")
classname = Text(exchange["classname"])
if exchange["is_alias"]:
name.stylize("strike")
classname.stylize("strike")
classname.append(f" (use {exchange['alias_for']})", style="italic")
trade_modes = Text(
", ".join(
(f"{a.get('margin_mode', '')} {a['trading_mode']}").lstrip()
for a in exchange["trade_modes"]
),
"comment": exchange["comment"],
}
return result
if args["list_exchanges_all"]:
print("All exchanges supported by the ccxt library:")
exchanges = [build_entry(e, True) for e in exchanges]
else:
print("Exchanges available for Freqtrade:")
exchanges = [build_entry(e, False) for e in exchanges if e["valid"] is not False]
print(
tabulate(
exchanges,
headers=headers,
style="",
)
)
if exchange["dex"]:
trade_modes = Text("DEX: ") + trade_modes
trade_modes.stylize("bold", 0, 3)
table.add_row(
name,
classname,
trade_modes,
exchange["comment"],
style=None if exchange["valid"] else "red",
)
# table.add_row(*[exchange[header] for header in headers])
console = Console()
console.print(table)
def _print_objs_tabular(objs: List, print_colorized: bool) -> None:
if print_colorized:
colorama_init(autoreset=True)
red = Fore.RED
yellow = Fore.YELLOW
reset = Style.RESET_ALL
else:
red = ""
yellow = ""
reset = ""
def _print_objs_tabular(objs: list, print_colorized: bool) -> None:
from rich.console import Console
from rich.table import Table
from rich.text import Text
names = [s["name"] for s in objs]
objs_to_print = [
objs_to_print: list[dict[str, Text | str]] = [
{
"name": s["name"] if s["name"] else "--",
"name": Text(s["name"] if s["name"] else "--"),
"location": s["location_rel"],
"status": (
red + "LOAD FAILED" + reset
Text("LOAD FAILED", style="bold red")
if s["class"] is None
else "OK"
else Text("OK", style="bold green")
if names.count(s["name"]) == 1
else yellow + "DUPLICATE NAME" + reset
else Text("DUPLICATE NAME", style="bold yellow")
),
}
for s in objs
@@ -100,17 +106,32 @@ def _print_objs_tabular(objs: List, print_colorized: bool) -> None:
objs_to_print[idx].update(
{
"hyperoptable": "Yes" if s["hyperoptable"]["count"] > 0 else "No",
"buy-Params": len(s["hyperoptable"].get("buy", [])),
"sell-Params": len(s["hyperoptable"].get("sell", [])),
"buy-Params": str(len(s["hyperoptable"].get("buy", []))),
"sell-Params": str(len(s["hyperoptable"].get("sell", []))),
}
)
print(tabulate(objs_to_print, headers="keys", tablefmt="psql", stralign="right"))
table = Table()
for header in objs_to_print[0].keys():
table.add_column(header.capitalize(), justify="right")
for row in objs_to_print:
table.add_row(*[row[header] for header in objs_to_print[0].keys()])
console = Console(
color_system="auto" if print_colorized else None,
width=200 if "pytest" in sys.modules else None,
)
console.print(table)
def start_list_strategies(args: Dict[str, Any]) -> None:
def start_list_strategies(args: dict[str, Any]) -> None:
"""
Print files with Strategy custom classes available in the directory
"""
from freqtrade.configuration import setup_utils_configuration
from freqtrade.resolvers import StrategyResolver
config = setup_utils_configuration(args, RunMode.UTIL_NO_EXCHANGE)
strategy_objs = StrategyResolver.search_all_objects(
@@ -130,13 +151,15 @@ def start_list_strategies(args: Dict[str, Any]) -> None:
_print_objs_tabular(strategy_objs, config.get("print_colorized", False))
def start_list_freqAI_models(args: Dict[str, Any]) -> None:
def start_list_freqAI_models(args: dict[str, Any]) -> None:
"""
Print files with FreqAI models custom classes available in the directory
"""
config = setup_utils_configuration(args, RunMode.UTIL_NO_EXCHANGE)
from freqtrade.configuration import setup_utils_configuration
from freqtrade.resolvers.freqaimodel_resolver import FreqaiModelResolver
config = setup_utils_configuration(args, RunMode.UTIL_NO_EXCHANGE)
model_objs = FreqaiModelResolver.search_all_objects(config, not args["print_one_column"])
# Sort alphabetically
model_objs = sorted(model_objs, key=lambda x: x["name"])
@@ -146,10 +169,31 @@ def start_list_freqAI_models(args: Dict[str, Any]) -> None:
_print_objs_tabular(model_objs, config.get("print_colorized", False))
def start_list_timeframes(args: Dict[str, Any]) -> None:
def start_list_hyperopt_loss_functions(args: dict[str, Any]) -> None:
"""
Print files with FreqAI models custom classes available in the directory
"""
from freqtrade.configuration import setup_utils_configuration
from freqtrade.resolvers.hyperopt_resolver import HyperOptLossResolver
config = setup_utils_configuration(args, RunMode.UTIL_NO_EXCHANGE)
model_objs = HyperOptLossResolver.search_all_objects(config, not args["print_one_column"])
# Sort alphabetically
model_objs = sorted(model_objs, key=lambda x: x["name"])
if args["print_one_column"]:
print("\n".join([s["name"] for s in model_objs]))
else:
_print_objs_tabular(model_objs, config.get("print_colorized", False))
def start_list_timeframes(args: dict[str, Any]) -> None:
"""
Print timeframes available on Exchange
"""
from freqtrade.configuration import setup_utils_configuration
from freqtrade.resolvers import ExchangeResolver
config = setup_utils_configuration(args, RunMode.UTIL_EXCHANGE)
# Do not use timeframe set in the config
config["timeframe"] = None
@@ -166,13 +210,19 @@ def start_list_timeframes(args: Dict[str, Any]) -> None:
)
def start_list_markets(args: Dict[str, Any], pairs_only: bool = False) -> None:
def start_list_markets(args: dict[str, Any], pairs_only: bool = False) -> None:
"""
Print pairs/markets on the exchange
:param args: Cli args from Arguments()
:param pairs_only: if True print only pairs, otherwise print all instruments (markets)
:return: None
"""
from freqtrade.configuration import setup_utils_configuration
from freqtrade.exchange import market_is_active
from freqtrade.misc import plural
from freqtrade.resolvers import ExchangeResolver
from freqtrade.util import print_rich_table
config = setup_utils_configuration(args, RunMode.UTIL_EXCHANGE)
# Init exchange
@@ -263,15 +313,15 @@ def start_list_markets(args: Dict[str, Any], pairs_only: bool = False) -> None:
elif args.get("print_one_column", False):
print("\n".join(pairs.keys()))
elif args.get("list_pairs_print_json", False):
import rapidjson
print(rapidjson.dumps(list(pairs.keys()), default=str))
elif args.get("print_csv", False):
writer = csv.DictWriter(sys.stdout, fieldnames=headers)
writer.writeheader()
writer.writerows(tabular_data)
else:
# print data as a table, with the human-readable summary
print(f"{summary_str}:")
print(tabulate(tabular_data, headers="keys", tablefmt="psql", stralign="right"))
print_rich_table(tabular_data, headers, summary_str)
elif not (
args.get("print_one_column", False)
or args.get("list_pairs_print_json", False)
@@ -280,12 +330,14 @@ def start_list_markets(args: Dict[str, Any], pairs_only: bool = False) -> None:
print(f"{summary_str}.")
def start_show_trades(args: Dict[str, Any]) -> None:
def start_show_trades(args: dict[str, Any]) -> None:
"""
Show trades
"""
import json
from freqtrade.configuration import setup_utils_configuration
from freqtrade.misc import parse_db_uri_for_logging
from freqtrade.persistence import Trade, init_db
config = setup_utils_configuration(args, RunMode.UTIL_NO_EXCHANGE)

View File

@@ -1,23 +1,24 @@
import logging
from typing import Any, Dict
from typing import Any
from freqtrade import constants
from freqtrade.configuration import setup_utils_configuration
from freqtrade.enums import RunMode
from freqtrade.exceptions import ConfigurationError, OperationalException
from freqtrade.util import fmt_coin
logger = logging.getLogger(__name__)
def setup_optimize_configuration(args: Dict[str, Any], method: RunMode) -> Dict[str, Any]:
def setup_optimize_configuration(args: dict[str, Any], method: RunMode) -> dict[str, Any]:
"""
Prepare the configuration for the Hyperopt module
:param args: Cli args from Arguments()
:param method: Bot running mode
:return: Configuration
"""
from freqtrade.configuration import setup_utils_configuration
from freqtrade.util import fmt_coin
config = setup_utils_configuration(args, method)
no_unlimited_runmodes = {
@@ -41,7 +42,7 @@ def setup_optimize_configuration(args: Dict[str, Any], method: RunMode) -> Dict[
return config
def start_backtesting(args: Dict[str, Any]) -> None:
def start_backtesting(args: dict[str, Any]) -> None:
"""
Start Backtesting script
:param args: Cli args from Arguments()
@@ -60,10 +61,11 @@ def start_backtesting(args: Dict[str, Any]) -> None:
backtesting.start()
def start_backtesting_show(args: Dict[str, Any]) -> None:
def start_backtesting_show(args: dict[str, Any]) -> None:
"""
Show previous backtest result
"""
from freqtrade.configuration import setup_utils_configuration
config = setup_utils_configuration(args, RunMode.UTIL_NO_EXCHANGE)
@@ -76,7 +78,7 @@ def start_backtesting_show(args: Dict[str, Any]) -> None:
show_sorted_pairlist(config, results)
def start_hyperopt(args: Dict[str, Any]) -> None:
def start_hyperopt(args: dict[str, Any]) -> None:
"""
Start hyperopt script
:param args: Cli args from Arguments()
@@ -121,7 +123,7 @@ def start_hyperopt(args: Dict[str, Any]) -> None:
# Same in Edge and Backtesting start() functions.
def start_edge(args: Dict[str, Any]) -> None:
def start_edge(args: dict[str, Any]) -> None:
"""
Start Edge script
:param args: Cli args from Arguments()
@@ -138,24 +140,26 @@ def start_edge(args: Dict[str, Any]) -> None:
edge_cli.start()
def start_lookahead_analysis(args: Dict[str, Any]) -> None:
def start_lookahead_analysis(args: dict[str, Any]) -> None:
"""
Start the backtest bias tester script
:param args: Cli args from Arguments()
:return: None
"""
from freqtrade.configuration import setup_utils_configuration
from freqtrade.optimize.analysis.lookahead_helpers import LookaheadAnalysisSubFunctions
config = setup_utils_configuration(args, RunMode.UTIL_NO_EXCHANGE)
LookaheadAnalysisSubFunctions.start(config)
def start_recursive_analysis(args: Dict[str, Any]) -> None:
def start_recursive_analysis(args: dict[str, Any]) -> None:
"""
Start the backtest recursive tester script
:param args: Cli args from Arguments()
:return: None
"""
from freqtrade.configuration import setup_utils_configuration
from freqtrade.optimize.analysis.recursive_helpers import RecursiveAnalysisSubFunctions
config = setup_utils_configuration(args, RunMode.UTIL_NO_EXCHANGE)

View File

@@ -1,22 +1,22 @@
import logging
from typing import Any, Dict
from typing import Any
import rapidjson
from freqtrade.configuration import setup_utils_configuration
from freqtrade.enums import RunMode
from freqtrade.resolvers import ExchangeResolver
logger = logging.getLogger(__name__)
def start_test_pairlist(args: Dict[str, Any]) -> None:
def start_test_pairlist(args: dict[str, Any]) -> None:
"""
Test Pairlist configuration
"""
from freqtrade.configuration import setup_utils_configuration
from freqtrade.persistence import FtNoDBContext
from freqtrade.plugins.pairlistmanager import PairListManager
from freqtrade.resolvers import ExchangeResolver
config = setup_utils_configuration(args, RunMode.UTIL_EXCHANGE)

View File

@@ -1,11 +1,10 @@
from typing import Any, Dict
from typing import Any
from freqtrade.configuration import setup_utils_configuration
from freqtrade.enums import RunMode
from freqtrade.exceptions import ConfigurationError
def validate_plot_args(args: Dict[str, Any]) -> None:
def validate_plot_args(args: dict[str, Any]) -> None:
if not args.get("datadir") and not args.get("config"):
raise ConfigurationError(
"You need to specify either `--datadir` or `--config` "
@@ -13,11 +12,12 @@ def validate_plot_args(args: Dict[str, Any]) -> None:
)
def start_plot_dataframe(args: Dict[str, Any]) -> None:
def start_plot_dataframe(args: dict[str, Any]) -> None:
"""
Entrypoint for dataframe plotting
"""
# Import here to avoid errors if plot-dependencies are not installed.
from freqtrade.configuration import setup_utils_configuration
from freqtrade.plot.plotting import load_and_plot_trades
validate_plot_args(args)
@@ -26,11 +26,12 @@ def start_plot_dataframe(args: Dict[str, Any]) -> None:
load_and_plot_trades(config)
def start_plot_profit(args: Dict[str, Any]) -> None:
def start_plot_profit(args: dict[str, Any]) -> None:
"""
Entrypoint for plot_profit
"""
# Import here to avoid errors if plot-dependencies are not installed.
from freqtrade.configuration import setup_utils_configuration
from freqtrade.plot.plotting import plot_profit
validate_plot_args(args)

View File

@@ -1,27 +1,22 @@
import logging
import sys
import time
from pathlib import Path
from typing import Any, Dict
from typing import Any
from freqtrade.configuration import setup_utils_configuration
from freqtrade.enums import RunMode
from freqtrade.resolvers import StrategyResolver
from freqtrade.strategy.strategyupdater import StrategyUpdater
logger = logging.getLogger(__name__)
def start_strategy_update(args: Dict[str, Any]) -> None:
def start_strategy_update(args: dict[str, Any]) -> None:
"""
Start the strategy updating script
:param args: Cli args from Arguments()
:return: None
"""
if sys.version_info == (3, 8): # pragma: no cover
sys.exit("Freqtrade strategy updater requires Python version >= 3.9")
from freqtrade.configuration import setup_utils_configuration
from freqtrade.resolvers import StrategyResolver
config = setup_utils_configuration(args, RunMode.UTIL_NO_EXCHANGE)
@@ -49,6 +44,8 @@ def start_strategy_update(args: Dict[str, Any]) -> None:
def start_conversion(strategy_obj, config):
from freqtrade.strategy.strategyupdater import StrategyUpdater
print(f"Conversion of {Path(strategy_obj['location']).name} started.")
instance_strategy_updater = StrategyUpdater()
start = time.perf_counter()

View File

@@ -1,12 +1,12 @@
import logging
import signal
from typing import Any, Dict
from typing import Any
logger = logging.getLogger(__name__)
def start_trading(args: Dict[str, Any]) -> int:
def start_trading(args: dict[str, Any]) -> int:
"""
Main entry point for trading mode
"""

View File

@@ -1,9 +1,9 @@
from typing import Any, Dict
from typing import Any
from freqtrade.enums import RunMode
def start_webserver(args: Dict[str, Any]) -> None:
def start_webserver(args: dict[str, Any]) -> None:
"""
Main entry point for webserver mode
"""

File diff suppressed because it is too large Load Diff

View File

@@ -14,9 +14,17 @@ def sanitize_config(config: Config, *, show_sensitive: bool = False) -> Config:
return config
keys_to_remove = [
"exchange.key",
"exchange.api_key",
"exchange.apiKey",
"exchange.secret",
"exchange.password",
"exchange.uid",
"exchange.account_id",
"exchange.accountId",
"exchange.wallet_address",
"exchange.walletAddress",
"exchange.private_key",
"exchange.privateKey",
"telegram.token",
"telegram.chat_id",
"discord.webhook_url",
@@ -29,8 +37,10 @@ def sanitize_config(config: Config, *, show_sensitive: bool = False) -> Config:
nested_config = config
for nested_key in nested_keys[:-1]:
nested_config = nested_config.get(nested_key, {})
nested_config[nested_keys[-1]] = "REDACTED"
if nested_keys[-1] in nested_config:
nested_config[nested_keys[-1]] = "REDACTED"
else:
config[key] = "REDACTED"
if key in config:
config[key] = "REDACTED"
return config

View File

@@ -1,5 +1,5 @@
import logging
from typing import Any, Dict
from typing import Any
from freqtrade.enums import RunMode
@@ -11,8 +11,8 @@ logger = logging.getLogger(__name__)
def setup_utils_configuration(
args: Dict[str, Any], method: RunMode, *, set_dry: bool = True
) -> Dict[str, Any]:
args: dict[str, Any], method: RunMode, *, set_dry: bool = True
) -> dict[str, Any]:
"""
Prepare the configuration for utils subcommands
:param args: Cli args from Arguments()

View File

@@ -1,13 +1,21 @@
import logging
from collections import Counter
from copy import deepcopy
from typing import Any, Dict
from typing import Any
from jsonschema import Draft4Validator, validators
from jsonschema.exceptions import ValidationError, best_match
from freqtrade import constants
from freqtrade.configuration.config_schema import (
CONF_SCHEMA,
SCHEMA_BACKTEST_REQUIRED,
SCHEMA_BACKTEST_REQUIRED_FINAL,
SCHEMA_MINIMAL_REQUIRED,
SCHEMA_MINIMAL_WEBSERVER,
SCHEMA_TRADE_REQUIRED,
)
from freqtrade.configuration.deprecated_settings import process_deprecated_setting
from freqtrade.constants import UNLIMITED_STAKE_AMOUNT
from freqtrade.enums import RunMode, TradingMode
from freqtrade.exceptions import ConfigurationError
@@ -35,24 +43,24 @@ def _extend_validator(validator_class):
FreqtradeValidator = _extend_validator(Draft4Validator)
def validate_config_schema(conf: Dict[str, Any], preliminary: bool = False) -> Dict[str, Any]:
def validate_config_schema(conf: dict[str, Any], preliminary: bool = False) -> dict[str, Any]:
"""
Validate the configuration follow the Config Schema
:param conf: Config in JSON format
:return: Returns the config if valid, otherwise throw an exception
"""
conf_schema = deepcopy(constants.CONF_SCHEMA)
conf_schema = deepcopy(CONF_SCHEMA)
if conf.get("runmode", RunMode.OTHER) in (RunMode.DRY_RUN, RunMode.LIVE):
conf_schema["required"] = constants.SCHEMA_TRADE_REQUIRED
conf_schema["required"] = SCHEMA_TRADE_REQUIRED
elif conf.get("runmode", RunMode.OTHER) in (RunMode.BACKTEST, RunMode.HYPEROPT):
if preliminary:
conf_schema["required"] = constants.SCHEMA_BACKTEST_REQUIRED
conf_schema["required"] = SCHEMA_BACKTEST_REQUIRED
else:
conf_schema["required"] = constants.SCHEMA_BACKTEST_REQUIRED_FINAL
conf_schema["required"] = SCHEMA_BACKTEST_REQUIRED_FINAL
elif conf.get("runmode", RunMode.OTHER) == RunMode.WEBSERVER:
conf_schema["required"] = constants.SCHEMA_MINIMAL_WEBSERVER
conf_schema["required"] = SCHEMA_MINIMAL_WEBSERVER
else:
conf_schema["required"] = constants.SCHEMA_MINIMAL_REQUIRED
conf_schema["required"] = SCHEMA_MINIMAL_REQUIRED
try:
FreqtradeValidator(conf_schema).validate(conf)
return conf
@@ -61,7 +69,7 @@ def validate_config_schema(conf: Dict[str, Any], preliminary: bool = False) -> D
raise ValidationError(best_match(Draft4Validator(conf_schema).iter_errors(conf)).message)
def validate_config_consistency(conf: Dict[str, Any], *, preliminary: bool = False) -> None:
def validate_config_consistency(conf: dict[str, Any], *, preliminary: bool = False) -> None:
"""
Validate the configuration consistency.
Should be ran after loading both configuration and strategy,
@@ -75,7 +83,6 @@ def validate_config_consistency(conf: Dict[str, Any], *, preliminary: bool = Fal
_validate_price_config(conf)
_validate_edge(conf)
_validate_whitelist(conf)
_validate_protections(conf)
_validate_unlimited_amount(conf)
_validate_ask_orderbook(conf)
_validate_freqai_hyperopt(conf)
@@ -83,13 +90,14 @@ def validate_config_consistency(conf: Dict[str, Any], *, preliminary: bool = Fal
_validate_freqai_include_timeframes(conf, preliminary=preliminary)
_validate_consumers(conf)
validate_migrated_strategy_settings(conf)
_validate_orderflow(conf)
# validate configuration before returning
logger.info("Validating configuration ...")
validate_config_schema(conf, preliminary=preliminary)
def _validate_unlimited_amount(conf: Dict[str, Any]) -> None:
def _validate_unlimited_amount(conf: dict[str, Any]) -> None:
"""
If edge is disabled, either max_open_trades or stake_amount need to be set.
:raise: ConfigurationError if config validation failed
@@ -97,12 +105,12 @@ def _validate_unlimited_amount(conf: Dict[str, Any]) -> None:
if (
not conf.get("edge", {}).get("enabled")
and conf.get("max_open_trades") == float("inf")
and conf.get("stake_amount") == constants.UNLIMITED_STAKE_AMOUNT
and conf.get("stake_amount") == UNLIMITED_STAKE_AMOUNT
):
raise ConfigurationError("`max_open_trades` and `stake_amount` cannot both be unlimited.")
def _validate_price_config(conf: Dict[str, Any]) -> None:
def _validate_price_config(conf: dict[str, Any]) -> None:
"""
When using market orders, price sides must be using the "other" side of the price
"""
@@ -118,7 +126,7 @@ def _validate_price_config(conf: Dict[str, Any]) -> None:
raise ConfigurationError('Market exit orders require exit_pricing.price_side = "other".')
def _validate_trailing_stoploss(conf: Dict[str, Any]) -> None:
def _validate_trailing_stoploss(conf: dict[str, Any]) -> None:
if conf.get("stoploss") == 0.0:
raise ConfigurationError(
"The config stoploss needs to be different from 0 to avoid problems with sell orders."
@@ -151,7 +159,7 @@ def _validate_trailing_stoploss(conf: Dict[str, Any]) -> None:
)
def _validate_edge(conf: Dict[str, Any]) -> None:
def _validate_edge(conf: dict[str, Any]) -> None:
"""
Edge and Dynamic whitelist should not both be enabled, since edge overrides dynamic whitelists.
"""
@@ -165,7 +173,7 @@ def _validate_edge(conf: Dict[str, Any]) -> None:
)
def _validate_whitelist(conf: Dict[str, Any]) -> None:
def _validate_whitelist(conf: dict[str, Any]) -> None:
"""
Dynamic whitelist does not require pair_whitelist to be set - however StaticWhitelist does.
"""
@@ -186,26 +194,7 @@ def _validate_whitelist(conf: Dict[str, Any]) -> None:
raise ConfigurationError("StaticPairList requires pair_whitelist to be set.")
def _validate_protections(conf: Dict[str, Any]) -> None:
"""
Validate protection configuration validity
"""
for prot in conf.get("protections", []):
if "stop_duration" in prot and "stop_duration_candles" in prot:
raise ConfigurationError(
"Protections must specify either `stop_duration` or `stop_duration_candles`.\n"
f"Please fix the protection {prot.get('method')}"
)
if "lookback_period" in prot and "lookback_period_candles" in prot:
raise ConfigurationError(
"Protections must specify either `lookback_period` or `lookback_period_candles`.\n"
f"Please fix the protection {prot.get('method')}"
)
def _validate_ask_orderbook(conf: Dict[str, Any]) -> None:
def _validate_ask_orderbook(conf: dict[str, Any]) -> None:
ask_strategy = conf.get("exit_pricing", {})
ob_min = ask_strategy.get("order_book_min")
ob_max = ask_strategy.get("order_book_max")
@@ -225,7 +214,7 @@ def _validate_ask_orderbook(conf: Dict[str, Any]) -> None:
)
def validate_migrated_strategy_settings(conf: Dict[str, Any]) -> None:
def validate_migrated_strategy_settings(conf: dict[str, Any]) -> None:
_validate_time_in_force(conf)
_validate_order_types(conf)
_validate_unfilledtimeout(conf)
@@ -233,7 +222,7 @@ def validate_migrated_strategy_settings(conf: Dict[str, Any]) -> None:
_strategy_settings(conf)
def _validate_time_in_force(conf: Dict[str, Any]) -> None:
def _validate_time_in_force(conf: dict[str, Any]) -> None:
time_in_force = conf.get("order_time_in_force", {})
if "buy" in time_in_force or "sell" in time_in_force:
if conf.get("trading_mode", TradingMode.SPOT) != TradingMode.SPOT:
@@ -254,7 +243,7 @@ def _validate_time_in_force(conf: Dict[str, Any]) -> None:
)
def _validate_order_types(conf: Dict[str, Any]) -> None:
def _validate_order_types(conf: dict[str, Any]) -> None:
order_types = conf.get("order_types", {})
old_order_types = [
"buy",
@@ -289,7 +278,7 @@ def _validate_order_types(conf: Dict[str, Any]) -> None:
process_deprecated_setting(conf, "order_types", o, "order_types", n)
def _validate_unfilledtimeout(conf: Dict[str, Any]) -> None:
def _validate_unfilledtimeout(conf: dict[str, Any]) -> None:
unfilledtimeout = conf.get("unfilledtimeout", {})
if any(x in unfilledtimeout for x in ["buy", "sell"]):
if conf.get("trading_mode", TradingMode.SPOT) != TradingMode.SPOT:
@@ -308,7 +297,7 @@ def _validate_unfilledtimeout(conf: Dict[str, Any]) -> None:
process_deprecated_setting(conf, "unfilledtimeout", o, "unfilledtimeout", n)
def _validate_pricing_rules(conf: Dict[str, Any]) -> None:
def _validate_pricing_rules(conf: dict[str, Any]) -> None:
if conf.get("ask_strategy") or conf.get("bid_strategy"):
if conf.get("trading_mode", TradingMode.SPOT) != TradingMode.SPOT:
raise ConfigurationError("Please migrate your pricing settings to use the new wording.")
@@ -338,7 +327,7 @@ def _validate_pricing_rules(conf: Dict[str, Any]) -> None:
del conf["ask_strategy"]
def _validate_freqai_hyperopt(conf: Dict[str, Any]) -> None:
def _validate_freqai_hyperopt(conf: dict[str, Any]) -> None:
freqai_enabled = conf.get("freqai", {}).get("enabled", False)
analyze_per_epoch = conf.get("analyze_per_epoch", False)
if analyze_per_epoch and freqai_enabled:
@@ -347,7 +336,7 @@ def _validate_freqai_hyperopt(conf: Dict[str, Any]) -> None:
)
def _validate_freqai_include_timeframes(conf: Dict[str, Any], preliminary: bool) -> None:
def _validate_freqai_include_timeframes(conf: dict[str, Any], preliminary: bool) -> None:
freqai_enabled = conf.get("freqai", {}).get("enabled", False)
if freqai_enabled:
main_tf = conf.get("timeframe", "5m")
@@ -378,7 +367,7 @@ def _validate_freqai_include_timeframes(conf: Dict[str, Any], preliminary: bool)
)
def _validate_freqai_backtest(conf: Dict[str, Any]) -> None:
def _validate_freqai_backtest(conf: dict[str, Any]) -> None:
if conf.get("runmode", RunMode.OTHER) == RunMode.BACKTEST:
freqai_enabled = conf.get("freqai", {}).get("enabled", False)
timerange = conf.get("timerange")
@@ -401,7 +390,7 @@ def _validate_freqai_backtest(conf: Dict[str, Any]) -> None:
)
def _validate_consumers(conf: Dict[str, Any]) -> None:
def _validate_consumers(conf: dict[str, Any]) -> None:
emc_conf = conf.get("external_message_consumer", {})
if emc_conf.get("enabled", False):
if len(emc_conf.get("producers", [])) < 1:
@@ -421,7 +410,15 @@ def _validate_consumers(conf: Dict[str, Any]) -> None:
)
def _strategy_settings(conf: Dict[str, Any]) -> None:
def _validate_orderflow(conf: dict[str, Any]) -> None:
if conf.get("exchange", {}).get("use_public_trades"):
if "orderflow" not in conf:
raise ConfigurationError(
"Orderflow is a required configuration key when using public trades."
)
def _strategy_settings(conf: dict[str, Any]) -> None:
process_deprecated_setting(conf, None, "use_sell_signal", None, "use_exit_signal")
process_deprecated_setting(conf, None, "sell_profit_only", None, "exit_profit_only")
process_deprecated_setting(conf, None, "sell_profit_offset", None, "exit_profit_offset")

View File

@@ -5,9 +5,10 @@ This module contains the configuration class
import ast
import logging
import warnings
from collections.abc import Callable
from copy import deepcopy
from pathlib import Path
from typing import Any, Callable, Dict, List, Optional, Tuple
from typing import Any
from freqtrade import constants
from freqtrade.configuration.deprecated_settings import process_temporary_deprecated_settings
@@ -15,7 +16,14 @@ from freqtrade.configuration.directory_operations import create_datadir, create_
from freqtrade.configuration.environment_vars import enironment_vars_to_dict
from freqtrade.configuration.load_config import load_file, load_from_files
from freqtrade.constants import Config
from freqtrade.enums import NON_UTIL_MODES, TRADE_MODES, CandleType, RunMode, TradingMode
from freqtrade.enums import (
NON_UTIL_MODES,
TRADE_MODES,
CandleType,
MarginMode,
RunMode,
TradingMode,
)
from freqtrade.exceptions import OperationalException
from freqtrade.loggers import setup_logging
from freqtrade.misc import deep_merge_dicts, parse_db_uri_for_logging
@@ -30,9 +38,9 @@ class Configuration:
Reuse this class for the bot, backtesting, hyperopt and every script that required configuration
"""
def __init__(self, args: Dict[str, Any], runmode: Optional[RunMode] = None) -> None:
def __init__(self, args: dict[str, Any], runmode: RunMode | None = None) -> None:
self.args = args
self.config: Optional[Config] = None
self.config: Config | None = None
self.runmode = runmode
def get_config(self) -> Config:
@@ -46,7 +54,7 @@ class Configuration:
return self.config
@staticmethod
def from_files(files: List[str]) -> Dict[str, Any]:
def from_files(files: list[str]) -> dict[str, Any]:
"""
Iterate through the config files passed in, loading all of them
and merging their contents.
@@ -61,7 +69,7 @@ class Configuration:
c = Configuration({"config": files}, RunMode.OTHER)
return c.get_config()
def load_config(self) -> Dict[str, Any]:
def load_config(self) -> dict[str, Any]:
"""
Extract information for sys.argv and load the bot configuration
:return: Configuration dictionary
@@ -234,11 +242,7 @@ class Configuration:
logstring="Parameter --enable-protections detected, enabling Protections. ...",
)
if "use_max_market_positions" in self.args and not self.args["use_max_market_positions"]:
config.update({"use_max_market_positions": False})
logger.info("Parameter --disable-max-market-positions detected ...")
logger.info("max_open_trades set to unlimited ...")
elif "max_open_trades" in self.args and self.args["max_open_trades"]:
if "max_open_trades" in self.args and self.args["max_open_trades"]:
config.update({"max_open_trades": self.args["max_open_trades"]})
logger.info(
"Parameter --max-open-trades detected, overriding max_open_trades to: %s ...",
@@ -389,6 +393,7 @@ class Configuration:
config.get("trading_mode", "spot") or "spot"
)
config["trading_mode"] = TradingMode(config.get("trading_mode", "spot") or "spot")
config["margin_mode"] = MarginMode(config.get("margin_mode", "") or "")
self._args_to_config(
config, argname="candle_types", logstring="Detected --candle-types: {}"
)
@@ -399,6 +404,8 @@ class Configuration:
("enter_reason_list", "Analysis enter tag list: {}"),
("exit_reason_list", "Analysis exit tag list: {}"),
("indicator_list", "Analysis indicator list: {}"),
("entry_only", "Only analyze entry signals: {}"),
("exit_only", "Only analyze exit signals: {}"),
("timerange", "Filter trades by timerange: {}"),
("analysis_rejected", "Analyse rejected signals: {}"),
("analysis_to_csv", "Store analysis tables to CSV: {}"),
@@ -411,7 +418,7 @@ class Configuration:
]
self._args_to_config_loop(config, configurations)
def _args_to_config_loop(self, config, configurations: List[Tuple[str, str]]) -> None:
def _args_to_config_loop(self, config, configurations: list[tuple[str, str]]) -> None:
for argname, logstring in configurations:
self._args_to_config(config, argname=argname, logstring=logstring)
@@ -445,8 +452,8 @@ class Configuration:
config: Config,
argname: str,
logstring: str,
logfun: Optional[Callable] = None,
deprecated_msg: Optional[str] = None,
logfun: Callable | None = None,
deprecated_msg: str | None = None,
) -> None:
"""
:param config: Configuration dictionary
@@ -468,7 +475,7 @@ class Configuration:
else:
logger.info(logstring.format(config[argname]))
if deprecated_msg:
warnings.warn(f"DEPRECATED: {deprecated_msg}", DeprecationWarning)
warnings.warn(f"DEPRECATED: {deprecated_msg}", DeprecationWarning, stacklevel=1)
def _resolve_pairs_list(self, config: Config) -> None:
"""

View File

@@ -0,0 +1,250 @@
import logging
import secrets
from pathlib import Path
from typing import Any
from questionary import Separator, prompt
from freqtrade.constants import UNLIMITED_STAKE_AMOUNT
from freqtrade.exceptions import OperationalException
logger = logging.getLogger(__name__)
def validate_is_int(val):
try:
_ = int(val)
return True
except Exception:
return False
def validate_is_float(val):
try:
_ = float(val)
return True
except Exception:
return False
def ask_user_overwrite(config_path: Path) -> bool:
questions = [
{
"type": "confirm",
"name": "overwrite",
"message": f"File {config_path} already exists. Overwrite?",
"default": False,
},
]
answers = prompt(questions)
return answers["overwrite"]
def ask_user_config() -> dict[str, Any]:
"""
Ask user a few questions to build the configuration.
Interactive questions built using https://github.com/tmbo/questionary
:returns: Dict with keys to put into template
"""
from freqtrade.configuration.detect_environment import running_in_docker
from freqtrade.exchange import available_exchanges
questions: list[dict[str, Any]] = [
{
"type": "confirm",
"name": "dry_run",
"message": "Do you want to enable Dry-run (simulated trades)?",
"default": True,
},
{
"type": "text",
"name": "stake_currency",
"message": "Please insert your stake currency:",
"default": "USDT",
},
{
"type": "text",
"name": "stake_amount",
"message": f"Please insert your stake amount (Number or '{UNLIMITED_STAKE_AMOUNT}'):",
"default": "unlimited",
"validate": lambda val: val == UNLIMITED_STAKE_AMOUNT or validate_is_float(val),
"filter": lambda val: (
'"' + UNLIMITED_STAKE_AMOUNT + '"' if val == UNLIMITED_STAKE_AMOUNT else val
),
},
{
"type": "text",
"name": "max_open_trades",
"message": "Please insert max_open_trades (Integer or -1 for unlimited open trades):",
"default": "3",
"validate": lambda val: validate_is_int(val),
},
{
"type": "select",
"name": "timeframe_in_config",
"message": "Time",
"choices": ["Have the strategy define timeframe.", "Override in configuration."],
},
{
"type": "text",
"name": "timeframe",
"message": "Please insert your desired timeframe (e.g. 5m):",
"default": "5m",
"when": lambda x: x["timeframe_in_config"] == "Override in configuration.",
},
{
"type": "text",
"name": "fiat_display_currency",
"message": (
"Please insert your display Currency for reporting "
"(leave empty to disable FIAT conversion):"
),
"default": "USD",
},
{
"type": "select",
"name": "exchange_name",
"message": "Select exchange",
"choices": [
"binance",
"binanceus",
"bingx",
"gate",
"htx",
"kraken",
"kucoin",
"okx",
Separator("------------------"),
"other",
],
},
{
"type": "confirm",
"name": "trading_mode",
"message": "Do you want to trade Perpetual Swaps (perpetual futures)?",
"default": False,
"filter": lambda val: "futures" if val else "spot",
"when": lambda x: x["exchange_name"] in ["binance", "gate", "okx", "bybit"],
},
{
"type": "autocomplete",
"name": "exchange_name",
"message": "Type your exchange name (Must be supported by ccxt)",
"choices": available_exchanges(),
"when": lambda x: x["exchange_name"] == "other",
},
{
"type": "password",
"name": "exchange_key",
"message": "Insert Exchange Key",
"when": lambda x: not x["dry_run"],
},
{
"type": "password",
"name": "exchange_secret",
"message": "Insert Exchange Secret",
"when": lambda x: not x["dry_run"],
},
{
"type": "password",
"name": "exchange_key_password",
"message": "Insert Exchange API Key password",
"when": lambda x: not x["dry_run"] and x["exchange_name"] in ("kucoin", "okx"),
},
{
"type": "confirm",
"name": "telegram",
"message": "Do you want to enable Telegram?",
"default": False,
},
{
"type": "password",
"name": "telegram_token",
"message": "Insert Telegram token",
"when": lambda x: x["telegram"],
},
{
"type": "password",
"name": "telegram_chat_id",
"message": "Insert Telegram chat id",
"when": lambda x: x["telegram"],
},
{
"type": "confirm",
"name": "api_server",
"message": "Do you want to enable the Rest API (includes FreqUI)?",
"default": False,
},
{
"type": "text",
"name": "api_server_listen_addr",
"message": (
"Insert Api server Listen Address (0.0.0.0 for docker, "
"otherwise best left untouched)"
),
"default": "127.0.0.1" if not running_in_docker() else "0.0.0.0", # noqa: S104
"when": lambda x: x["api_server"],
},
{
"type": "text",
"name": "api_server_username",
"message": "Insert api-server username",
"default": "freqtrader",
"when": lambda x: x["api_server"],
},
{
"type": "password",
"name": "api_server_password",
"message": "Insert api-server password",
"when": lambda x: x["api_server"],
},
]
answers = prompt(questions)
if not answers:
# Interrupted questionary sessions return an empty dict.
raise OperationalException("User interrupted interactive questions.")
# Ensure default is set for non-futures exchanges
answers["trading_mode"] = answers.get("trading_mode", "spot")
answers["margin_mode"] = "isolated" if answers.get("trading_mode") == "futures" else ""
# Force JWT token to be a random string
answers["api_server_jwt_key"] = secrets.token_hex()
answers["api_server_ws_token"] = secrets.token_urlsafe(25)
return answers
def deploy_new_config(config_path: Path, selections: dict[str, Any]) -> None:
"""
Applies selections to the template and writes the result to config_path
:param config_path: Path object for new config file. Should not exist yet
:param selections: Dict containing selections taken by the user.
"""
from jinja2.exceptions import TemplateNotFound
from freqtrade.exchange import MAP_EXCHANGE_CHILDCLASS
from freqtrade.util import render_template
try:
exchange_template = MAP_EXCHANGE_CHILDCLASS.get(
selections["exchange_name"], selections["exchange_name"]
)
selections["exchange"] = render_template(
templatefile=f"subtemplates/exchange_{exchange_template}.j2", arguments=selections
)
except TemplateNotFound:
selections["exchange"] = render_template(
templatefile="subtemplates/exchange_generic.j2", arguments=selections
)
config_text = render_template(templatefile="base_config.json.j2", arguments=selections)
logger.info(f"Writing config to `{config_path}`.")
logger.info(
"Please make sure to check the configuration contents and adjust settings to your needs."
)
config_path.write_text(config_text)

View File

@@ -3,7 +3,6 @@ Functions to handle deprecated settings
"""
import logging
from typing import Optional
from freqtrade.constants import Config
from freqtrade.exceptions import ConfigurationError, OperationalException
@@ -14,9 +13,9 @@ logger = logging.getLogger(__name__)
def check_conflicting_settings(
config: Config,
section_old: Optional[str],
section_old: str | None,
name_old: str,
section_new: Optional[str],
section_new: str | None,
name_new: str,
) -> None:
section_new_config = config.get(section_new, {}) if section_new else config
@@ -34,7 +33,7 @@ def check_conflicting_settings(
def process_removed_setting(
config: Config, section1: str, name1: str, section2: Optional[str], name2: str
config: Config, section1: str, name1: str, section2: str | None, name2: str
) -> None:
"""
:param section1: Removed section
@@ -54,9 +53,9 @@ def process_removed_setting(
def process_deprecated_setting(
config: Config,
section_old: Optional[str],
section_old: str | None,
name_old: str,
section_new: Optional[str],
section_new: str | None,
name_new: str,
) -> None:
check_conflicting_settings(config, section_old, name_old, section_new, name_new)
@@ -177,4 +176,6 @@ def process_temporary_deprecated_settings(config: Config) -> None:
)
if "protections" in config:
logger.warning("DEPRECATED: Setting 'protections' in the configuration is deprecated.")
raise ConfigurationError(
"DEPRECATED: Setting 'protections' in the configuration is deprecated."
)

View File

@@ -1,7 +1,6 @@
import logging
import shutil
from pathlib import Path
from typing import Optional
from freqtrade.configuration.detect_environment import running_in_docker
from freqtrade.constants import (
@@ -18,7 +17,7 @@ from freqtrade.exceptions import OperationalException
logger = logging.getLogger(__name__)
def create_datadir(config: Config, datadir: Optional[str] = None) -> Path:
def create_datadir(config: Config, datadir: str | None = None) -> Path:
folder = Path(datadir) if datadir else Path(f"{config['user_data_dir']}/data")
if not datadir:
# set datadir
@@ -38,7 +37,7 @@ def chown_user_directory(directory: Path) -> None:
"""
if running_in_docker():
try:
import subprocess
import subprocess # noqa: S404
subprocess.check_output(["sudo", "chown", "-R", "ftuser:", str(directory.resolve())])
except Exception:
@@ -82,6 +81,11 @@ def create_userdata_dir(directory: str, create_dir: bool = False) -> Path:
for f in sub_dirs:
subfolder = folder / f
if not subfolder.is_dir():
if subfolder.exists() or subfolder.is_symlink():
raise OperationalException(
f"File `{subfolder}` exists already and is not a directory. "
"Freqtrade requires this to be a directory."
)
subfolder.mkdir(parents=False)
return folder

View File

@@ -1,6 +1,6 @@
import logging
import os
from typing import Any, Dict
from typing import Any
from freqtrade.constants import ENV_VAR_PREFIX
from freqtrade.misc import deep_merge_dicts
@@ -24,7 +24,7 @@ def _get_var_typed(val):
return val
def _flat_vars_to_nested_dict(env_dict: Dict[str, Any], prefix: str) -> Dict[str, Any]:
def _flat_vars_to_nested_dict(env_dict: dict[str, Any], prefix: str) -> dict[str, Any]:
"""
Environment variables must be prefixed with FREQTRADE.
FREQTRADE__{section}__{key}
@@ -33,7 +33,7 @@ def _flat_vars_to_nested_dict(env_dict: Dict[str, Any], prefix: str) -> Dict[str
:return: Nested dict based on available and relevant variables.
"""
no_convert = ["CHAT_ID", "PASSWORD"]
relevant_vars: Dict[str, Any] = {}
relevant_vars: dict[str, Any] = {}
for env_var, val in sorted(env_dict.items()):
if env_var.startswith(prefix):
@@ -51,7 +51,7 @@ def _flat_vars_to_nested_dict(env_dict: Dict[str, Any], prefix: str) -> Dict[str
return relevant_vars
def enironment_vars_to_dict() -> Dict[str, Any]:
def enironment_vars_to_dict() -> dict[str, Any]:
"""
Read environment variables and return a nested dict for relevant variables
Relevant variables must follow the FREQTRADE__{section}__{key} pattern

View File

@@ -7,7 +7,7 @@ import re
import sys
from copy import deepcopy
from pathlib import Path
from typing import Any, Dict, List, Optional
from typing import Any
import rapidjson
@@ -42,7 +42,7 @@ def log_config_error_range(path: str, errmsg: str) -> str:
return ""
def load_file(path: Path) -> Dict[str, Any]:
def load_file(path: Path) -> dict[str, Any]:
try:
with path.open("r") as file:
config = rapidjson.load(file, parse_mode=CONFIG_PARSE_MODE)
@@ -51,7 +51,7 @@ def load_file(path: Path) -> Dict[str, Any]:
return config
def load_config_file(path: str) -> Dict[str, Any]:
def load_config_file(path: str) -> dict[str, Any]:
"""
Loads a config file from the given path
:param path: path as str
@@ -78,8 +78,8 @@ def load_config_file(path: str) -> Dict[str, Any]:
def load_from_files(
files: List[str], base_path: Optional[Path] = None, level: int = 0
) -> Dict[str, Any]:
files: list[str], base_path: Path | None = None, level: int = 0
) -> dict[str, Any]:
"""
Recursively load configuration files if specified.
Sub-files are assumed to be relative to the initial config.

View File

@@ -5,7 +5,6 @@ This module contains the argument manager class
import logging
import re
from datetime import datetime, timezone
from typing import Optional
from typing_extensions import Self
@@ -25,24 +24,24 @@ class TimeRange:
def __init__(
self,
starttype: Optional[str] = None,
stoptype: Optional[str] = None,
starttype: str | None = None,
stoptype: str | None = None,
startts: int = 0,
stopts: int = 0,
):
self.starttype: Optional[str] = starttype
self.stoptype: Optional[str] = stoptype
self.starttype: str | None = starttype
self.stoptype: str | None = stoptype
self.startts: int = startts
self.stopts: int = stopts
@property
def startdt(self) -> Optional[datetime]:
def startdt(self) -> datetime | None:
if self.startts:
return datetime.fromtimestamp(self.startts, tz=timezone.utc)
return None
@property
def stopdt(self) -> Optional[datetime]:
def stopdt(self) -> datetime | None:
if self.stopts:
return datetime.fromtimestamp(self.stopts, tz=timezone.utc)
return None
@@ -120,7 +119,7 @@ class TimeRange:
self.starttype = "date"
@classmethod
def parse_timerange(cls, text: Optional[str]) -> Self:
def parse_timerange(cls, text: str | None) -> Self:
"""
Parse the value of the argument --timerange to determine what is the range desired
:param text: value from --timerange

Some files were not shown because too many files have changed in this diff Show More