Compare commits

..

127 Commits

Author SHA1 Message Date
Matthias 9adf0316f1 Merge pull request #13179 from freqtrade/dependabot/pip/develop/uvicorn-0.47.0
chore(deps): bump uvicorn from 0.46.0 to 0.47.0
2026-05-25 10:00:07 +02:00
Matthias 830166e1c7 Merge pull request #13182 from freqtrade/dependabot/github_actions/develop/zizmorcore/zizmor-action-0.5.6
chore(deps): bump zizmorcore/zizmor-action from 0.5.3 to 0.5.6
2026-05-25 09:59:49 +02:00
Matthias 50aaf2cfc9 Merge pull request #13187 from freqtrade/dependabot/pip/develop/types-96391afc29
chore(deps-dev): bump the types group across 1 directory with 3 updates
2026-05-25 09:57:48 +02:00
Matthias 1b741f9c58 Merge pull request #13186 from freqtrade/dependabot/pip/develop/pandas-3.0.3
chore(deps): bump pandas from 3.0.2 to 3.0.3
2026-05-25 09:53:50 +02:00
Matthias 606f3b7dfe Merge pull request #13181 from freqtrade/dependabot/pip/develop/requests-2.34.2
chore(deps): bump requests from 2.33.1 to 2.34.2
2026-05-25 09:53:35 +02:00
Matthias 2d9b13e65a Merge pull request #13180 from freqtrade/dependabot/pip/develop/mypy-2.1.0
chore(deps-dev): bump mypy from 2.0.0 to 2.1.0
2026-05-25 09:40:04 +02:00
dependabot[bot] 1a476c4078 chore(deps): bump requests from 2.33.1 to 2.34.2
Bumps [requests](https://github.com/psf/requests) from 2.33.1 to 2.34.2.
- [Release notes](https://github.com/psf/requests/releases)
- [Changelog](https://github.com/psf/requests/blob/main/HISTORY.md)
- [Commits](https://github.com/psf/requests/compare/v2.33.1...v2.34.2)

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

Signed-off-by: dependabot[bot] <support@github.com>
2026-05-25 07:14:52 +00:00
dependabot[bot] 0c1c0990e8 chore(deps): bump uvicorn from 0.46.0 to 0.47.0
Bumps [uvicorn](https://github.com/Kludex/uvicorn) from 0.46.0 to 0.47.0.
- [Release notes](https://github.com/Kludex/uvicorn/releases)
- [Changelog](https://github.com/Kludex/uvicorn/blob/main/docs/release-notes.md)
- [Commits](https://github.com/Kludex/uvicorn/compare/0.46.0...0.47.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2026-05-25 07:14:51 +00:00
Freqtrade Bot be37cafcb9 chore(deps): Apply pre-commit types update 2026-05-25 06:56:04 +00:00
dependabot[bot] 87a9f11773 chore(deps): bump pandas from 3.0.2 to 3.0.3
Bumps [pandas](https://github.com/pandas-dev/pandas) from 3.0.2 to 3.0.3.
- [Release notes](https://github.com/pandas-dev/pandas/releases)
- [Commits](https://github.com/pandas-dev/pandas/compare/v3.0.2...v3.0.3)

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

Signed-off-by: dependabot[bot] <support@github.com>
2026-05-25 06:53:42 +00:00
dependabot[bot] 0fedcf9eb1 chore(deps): bump zizmorcore/zizmor-action from 0.5.3 to 0.5.6
Bumps [zizmorcore/zizmor-action](https://github.com/zizmorcore/zizmor-action) from 0.5.3 to 0.5.6.
- [Release notes](https://github.com/zizmorcore/zizmor-action/releases)
- [Commits](https://github.com/zizmorcore/zizmor-action/compare/b1d7e1fb5de872772f31590499237e7cce841e8e...5f14fd08f7cf1cb1609c1e344975f152c7ee938d)

---
updated-dependencies:
- dependency-name: zizmorcore/zizmor-action
  dependency-version: 0.5.6
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-05-25 06:49:57 +00:00
dependabot[bot] a54464905b chore(deps-dev): bump the types group across 1 directory with 3 updates
Bumps the types group with 3 updates in the / directory: [types-cachetools](https://github.com/python/typeshed), [types-requests](https://github.com/python/typeshed) and [types-python-dateutil](https://github.com/python/typeshed).


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

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

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

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

Signed-off-by: dependabot[bot] <support@github.com>
2026-05-25 06:43:40 +00:00
Matthias 7c8aeed806 Merge pull request #13183 from freqtrade/dependabot/pip/develop/numpy-2.4.5
chore(deps): bump numpy from 2.4.4 to 2.4.5
2026-05-25 08:42:59 +02:00
dependabot[bot] bd706557bd chore(deps-dev): bump mypy from 2.0.0 to 2.1.0
Bumps [mypy](https://github.com/python/mypy) from 2.0.0 to 2.1.0.
- [Changelog](https://github.com/python/mypy/blob/master/CHANGELOG.md)
- [Commits](https://github.com/python/mypy/compare/v2.0.0...v2.1.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2026-05-25 06:38:34 +00:00
Matthias d657a9760a Merge pull request #13178 from freqtrade/dependabot/pip/develop/cachetools-7.1.2
chore(deps): bump cachetools from 7.1.1 to 7.1.2
2026-05-25 08:38:06 +02:00
Matthias 0333e7e227 Merge pull request #13184 from freqtrade/dependabot/github_actions/develop/codecov/codecov-action-6.0.1
chore(deps): bump codecov/codecov-action from 6.0.0 to 6.0.1
2026-05-25 08:24:23 +02:00
dependabot[bot] 90945675bc chore(deps): bump numpy from 2.4.4 to 2.4.5
Bumps [numpy](https://github.com/numpy/numpy) from 2.4.4 to 2.4.5.
- [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/v2.4.4...v2.4.5)

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

Signed-off-by: dependabot[bot] <support@github.com>
2026-05-25 06:22:25 +00:00
Matthias d3713cbf09 fix: typo 2026-05-25 08:21:21 +02:00
Matthias 9003d5e9e0 fix: disable failing okx live test 2026-05-25 08:19:34 +02:00
dependabot[bot] 7b197aa974 chore(deps): bump codecov/codecov-action from 6.0.0 to 6.0.1
Bumps [codecov/codecov-action](https://github.com/codecov/codecov-action) from 6.0.0 to 6.0.1.
- [Release notes](https://github.com/codecov/codecov-action/releases)
- [Changelog](https://github.com/codecov/codecov-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/codecov/codecov-action/compare/57e3a136b779b570ffcdbf80b3bdc90e7fab3de2...e79a6962e0d4c0c17b229090214935d2e33f8354)

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

Signed-off-by: dependabot[bot] <support@github.com>
2026-05-25 03:25:14 +00:00
dependabot[bot] ec65c88797 chore(deps): bump cachetools from 7.1.1 to 7.1.2
Bumps [cachetools](https://github.com/tkem/cachetools) from 7.1.1 to 7.1.2.
- [Changelog](https://github.com/tkem/cachetools/blob/master/CHANGELOG.rst)
- [Commits](https://github.com/tkem/cachetools/compare/v7.1.1...v7.1.2)

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

Signed-off-by: dependabot[bot] <support@github.com>
2026-05-25 03:24:40 +00:00
Matthias ba6627cd13 chore: update schedule for pre-commit update 2026-05-24 08:59:54 +02:00
Matthias 22a6fdab13 Merge pull request #13161 from ducky-duke/fix/historic-balance-bot-managed-bool
fix: /api/v1/historic_balance returns 500 on MySQL/MariaDB backends
2026-05-23 20:58:58 +02:00
Matthias 580e5b945f test: improve test for bot_balance from mariadb 2026-05-23 20:43:13 +02:00
Matthias 83649ab787 chore: revert unnecessary comment 2026-05-23 20:39:57 +02:00
Matthias 8165fd6310 Merge pull request #13166 from stash86/main-stash
add return type of check_delisting docs section
2026-05-22 17:07:52 +02:00
Stefano 6cf46338ef add return type of check_delisting docs section 2026-05-22 16:53:27 +09:00
Matthias 0d84e80eb7 Merge pull request #13163 from freqtrade/update/binance-leverage-tiers
Update Binance Leverage Tiers
2026-05-21 06:30:27 +02:00
Freqtrade Bot 476abf80cc chore: update binance leverage tiers 2026-05-21 03:38:09 +00:00
ducky-duke a03ebc8472 fix: coerce bot_managed to bool in _rpc_get_historic_balance
read_sql may return the wallet_history `bot_managed` Boolean column as an
integer dtype (e.g. MySQL/MariaDB TINYINT). results.loc[results["bot_managed"]]
then does label-based indexing instead of boolean masking, raising a KeyError
on GET /api/v1/historic_balance (HTTP 500). Coerce with .astype(bool).
2026-05-20 17:57:59 +07:00
Matthias 1182c03b73 Merge pull request #13160 from freqtrade/dependabot/pip/pymdown-extensions-10.21.3
chore(deps): bump pymdown-extensions from 10.21.2 to 10.21.3
2026-05-20 06:31:34 +02:00
Matthias 2152fd7325 chore: temporarily decrase cooldown for pymdown 2026-05-20 06:16:15 +02:00
dependabot[bot] c7f84403d8 chore(deps): bump pymdown-extensions from 10.21.2 to 10.21.3
Bumps [pymdown-extensions](https://github.com/facelessuser/pymdown-extensions) from 10.21.2 to 10.21.3.
- [Release notes](https://github.com/facelessuser/pymdown-extensions/releases)
- [Commits](https://github.com/facelessuser/pymdown-extensions/compare/10.21.2...10.21.3)

---
updated-dependencies:
- dependency-name: pymdown-extensions
  dependency-version: 10.21.3
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-05-19 21:43:30 +00:00
Matthias 6dcea8bac1 Merge pull request #13158 from freqtrade/update/pre-commit-hooks
Update pre-commit hooks
2026-05-19 06:44:17 +02:00
Matthias 217a71b834 chore: temporarily revert the zizmor pre-commit update 2026-05-19 06:31:07 +02:00
Freqtrade Bot cf578a4b76 chore: update pre-commit hooks 2026-05-19 04:17:16 +00:00
Matthias f645d3e21a fix: live pair data must respect end-date 2026-05-18 18:25:14 +02:00
Matthias 9c480b4f4d chore: remove urlilb3 newer exclusion 2026-05-18 18:00:52 +02:00
Matthias 3a714cef14 Merge pull request #13154 from freqtrade/dependabot/pip/develop/ccxt-4.5.54
chore(deps): bump ccxt from 4.5.52 to 4.5.54
2026-05-18 06:57:08 +02:00
Matthias d67b54bcb5 chore(ci): work around powershell install failure
happens on northcentralus region (sometimes) ...
2026-05-18 06:34:13 +02:00
Matthias 9aebce306d Merge pull request #13151 from freqtrade/dependabot/pip/develop/types-83c091f25c
chore(deps-dev): bump the types group with 3 updates
2026-05-18 06:26:57 +02:00
Matthias 8e7aed5013 Merge pull request #13157 from freqtrade/dependabot/pip/develop/pydantic-2.13.4
chore(deps): bump pydantic from 2.13.3 to 2.13.4
2026-05-18 06:21:45 +02:00
dependabot[bot] 4cee997d11 chore(deps): bump ccxt from 4.5.52 to 4.5.54
Bumps [ccxt](https://github.com/ccxt/ccxt) from 4.5.52 to 4.5.54.
- [Release notes](https://github.com/ccxt/ccxt/releases)
- [Commits](https://github.com/ccxt/ccxt/compare/v4.5.52...v4.5.54)

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

Signed-off-by: dependabot[bot] <support@github.com>
2026-05-18 04:21:17 +00:00
Matthias 806a11c63a Merge pull request #13156 from freqtrade/dependabot/pip/develop/orjson-3.11.9
chore(deps): bump orjson from 3.11.8 to 3.11.9
2026-05-18 06:19:39 +02:00
Matthias 2e760ae1c5 Merge pull request #13155 from freqtrade/dependabot/pip/develop/mypy-2.0.0
chore(deps-dev): bump mypy from 1.20.2 to 2.0.0
2026-05-18 06:19:20 +02:00
Matthias 674b2c11bd Merge pull request #13153 from freqtrade/dependabot/pip/develop/cryptography-48.0.0
chore(deps): bump cryptography from 47.0.0 to 48.0.0
2026-05-18 06:19:00 +02:00
Freqtrade Bot 5a5dae22d3 chore(deps): Apply pre-commit types update 2026-05-18 03:33:22 +00:00
dependabot[bot] 0a1498af2d chore(deps): bump pydantic from 2.13.3 to 2.13.4
Bumps [pydantic](https://github.com/pydantic/pydantic) from 2.13.3 to 2.13.4.
- [Release notes](https://github.com/pydantic/pydantic/releases)
- [Changelog](https://github.com/pydantic/pydantic/blob/v2.13.4/HISTORY.md)
- [Commits](https://github.com/pydantic/pydantic/compare/v2.13.3...v2.13.4)

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

Signed-off-by: dependabot[bot] <support@github.com>
2026-05-18 03:29:40 +00:00
dependabot[bot] e8cdbf0a8e chore(deps): bump orjson from 3.11.8 to 3.11.9
Bumps [orjson](https://github.com/ijl/orjson) from 3.11.8 to 3.11.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.11.8...3.11.9)

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

Signed-off-by: dependabot[bot] <support@github.com>
2026-05-18 03:29:32 +00:00
dependabot[bot] c0ee618bd0 chore(deps-dev): bump mypy from 1.20.2 to 2.0.0
Bumps [mypy](https://github.com/python/mypy) from 1.20.2 to 2.0.0.
- [Changelog](https://github.com/python/mypy/blob/master/CHANGELOG.md)
- [Commits](https://github.com/python/mypy/compare/v1.20.2...v2.0.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2026-05-18 03:29:14 +00:00
dependabot[bot] a4ed0a03f1 chore(deps): bump cryptography from 47.0.0 to 48.0.0
Bumps [cryptography](https://github.com/pyca/cryptography) from 47.0.0 to 48.0.0.
- [Changelog](https://github.com/pyca/cryptography/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/pyca/cryptography/compare/47.0.0...48.0.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2026-05-18 03:28:58 +00:00
dependabot[bot] 25d8d831ec chore(deps-dev): bump the types group with 3 updates
Bumps the types group with 3 updates: [types-requests](https://github.com/python/typeshed), [types-tabulate](https://github.com/python/typeshed) and [types-python-dateutil](https://github.com/python/typeshed).


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

Updates `types-tabulate` from 0.10.0.20260408 to 0.10.0.20260508
- [Commits](https://github.com/python/typeshed/commits)

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

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

Signed-off-by: dependabot[bot] <support@github.com>
2026-05-18 03:28:08 +00:00
Matthias 3d91223c2b refactor: further improve hyper function wording 2026-05-17 20:17:43 +02:00
Matthias 875daac375 refactor: improve naming to reflect method functionality 2026-05-17 20:13:42 +02:00
Matthias 03fac42047 chore: fix docstring typo 2026-05-17 17:20:38 +02:00
Matthias 5bcc4fbf03 Merge pull request #13147 from freqtrade/dependabot/docker/python-3.14.5-slim-trixie
chore(deps): bump python from 3.14.3-slim-trixie to 3.14.5-slim-trixie
2026-05-15 06:31:31 +02:00
dependabot[bot] 0ea2258fa8 chore(deps): bump python from 3.14.3-slim-trixie to 3.14.5-slim-trixie
Bumps python from 3.14.3-slim-trixie to 3.14.5-slim-trixie.

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

Signed-off-by: dependabot[bot] <support@github.com>
2026-05-15 03:15:25 +00:00
Matthias a0627aa2fc docs: improve freqai docs formatting 2026-05-14 19:14:05 +02:00
Matthias 764b32a0cf Merge pull request #13145 from freqtrade/update/binance-leverage-tiers
Update Binance Leverage Tiers
2026-05-14 06:21:48 +02:00
Freqtrade Bot fc634f42f6 chore: update binance leverage tiers 2026-05-14 03:37:42 +00:00
Matthias 8cce4be23c Merge pull request #13141 from freqtrade/update/pre-commit-hooks
Update pre-commit hooks
2026-05-12 06:29:32 +02:00
Freqtrade Bot 11ab80bfc4 chore: update pre-commit hooks 2026-05-12 04:15:44 +00:00
Matthias e00a1fd28c Merge pull request #13140 from freqtrade/dependabot/pip/urllib3-2.7.0
chore(deps): bump urllib3 from 2.6.3 to 2.7.0
2026-05-11 19:36:08 +02:00
Matthias b132a49f40 chore(ci): use better name for mypy-version-update 2026-05-11 19:23:17 +02:00
Matthias f82e4ce9ec chore: urllib exclude for security fix 2026-05-11 19:17:13 +02:00
Matthias fac00475a1 Merge pull request #13132 from freqtrade/dependabot/pip/develop/types-67d33dbf9b
chore(deps-dev): bump the types group across 1 directory with 2 updates
2026-05-11 19:16:02 +02:00
Matthias 2ac99fc2bf chore: switch environment for security 2026-05-11 19:15:20 +02:00
Freqtrade Bot d935de08fe Apply pre-commit types update 2026-05-11 16:36:09 +00:00
Matthias a92e0b2545 chore(ci): improved condition syntax 2026-05-11 18:34:32 +02:00
Matthias 8abdd496f6 chore: fix pre-commit updates misconception 2026-05-11 18:32:11 +02:00
dependabot[bot] 443a245d82 chore(deps-dev): bump the types group across 1 directory with 2 updates
Bumps the types group with 2 updates in the / directory: [types-cachetools](https://github.com/python/typeshed) and [types-requests](https://github.com/python/typeshed).


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

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

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

Signed-off-by: dependabot[bot] <support@github.com>
2026-05-11 16:18:16 +00:00
Matthias d95789a2e0 feat(ci): add pre-commit types update workflow 2026-05-11 18:13:06 +02:00
Matthias 3a4adfac52 feat: auto-update pre-commit config 2026-05-11 18:05:52 +02:00
Matthias 523216a39c fix: work around to_json pandas deprecation 2026-05-11 18:05:35 +02:00
Matthias e5d4fd6b62 chore: simplify rpc code 2026-05-11 18:05:21 +02:00
dependabot[bot] 939ea01d12 chore(deps): bump urllib3 from 2.6.3 to 2.7.0
Bumps [urllib3](https://github.com/urllib3/urllib3) from 2.6.3 to 2.7.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.6.3...2.7.0)

---
updated-dependencies:
- dependency-name: urllib3
  dependency-version: 2.7.0
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-05-11 16:04:30 +00:00
Matthias c587a1ccda Merge pull request #13136 from freqtrade/dependabot/pip/develop/ccxt-4.5.52
chore(deps): bump ccxt from 4.5.51 to 4.5.52
2026-05-11 06:38:12 +02:00
Matthias 6751b8e468 Merge pull request #13134 from freqtrade/dependabot/pip/develop/cachetools-7.1.1
chore(deps): bump cachetools from 7.0.6 to 7.1.1
2026-05-11 06:34:59 +02:00
Matthias ef1dca92eb Merge pull request #13137 from freqtrade/dependabot/pip/develop/pytz-2026.2
chore(deps): bump pytz from 2026.1.post1 to 2026.2
2026-05-11 06:34:49 +02:00
Matthias 0e33e69d8e Merge pull request #13135 from freqtrade/dependabot/pip/develop/build-1.5.0
chore(deps-dev): bump build from 1.4.4 to 1.5.0
2026-05-11 06:34:31 +02:00
dependabot[bot] 021011df31 chore(deps): bump pytz from 2026.1.post1 to 2026.2
Bumps [pytz](https://github.com/stub42/pytz) from 2026.1.post1 to 2026.2.
- [Release notes](https://github.com/stub42/pytz/releases)
- [Commits](https://github.com/stub42/pytz/compare/release_2026.1.post1...release_2026.2)

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

Signed-off-by: dependabot[bot] <support@github.com>
2026-05-11 03:04:36 +00:00
dependabot[bot] c2e89e5f11 chore(deps): bump ccxt from 4.5.51 to 4.5.52
Bumps [ccxt](https://github.com/ccxt/ccxt) from 4.5.51 to 4.5.52.
- [Release notes](https://github.com/ccxt/ccxt/releases)
- [Commits](https://github.com/ccxt/ccxt/compare/v4.5.51...v4.5.52)

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

Signed-off-by: dependabot[bot] <support@github.com>
2026-05-11 03:04:29 +00:00
dependabot[bot] ba89faab6a chore(deps-dev): bump build from 1.4.4 to 1.5.0
Bumps [build](https://github.com/pypa/build) from 1.4.4 to 1.5.0.
- [Release notes](https://github.com/pypa/build/releases)
- [Changelog](https://github.com/pypa/build/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/pypa/build/compare/1.4.4...1.5.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2026-05-11 03:04:16 +00:00
dependabot[bot] ef38cb325b chore(deps): bump cachetools from 7.0.6 to 7.1.1
Bumps [cachetools](https://github.com/tkem/cachetools) from 7.0.6 to 7.1.1.
- [Changelog](https://github.com/tkem/cachetools/blob/master/CHANGELOG.rst)
- [Commits](https://github.com/tkem/cachetools/compare/v7.0.6...v7.1.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2026-05-11 03:03:56 +00:00
Matthias e0df17ef33 chore: take some endpoints out of alpha 2026-05-10 15:07:58 +02:00
Matthias c2578dca06 chore: update json schema 2026-05-09 09:09:32 +02:00
Matthias c8605ae8fb fix: require minimum 32 characters for JWT secrets 2026-05-09 08:55:35 +02:00
Matthias 22ef7697e8 chore: remove unused variable 2026-05-09 08:34:49 +02:00
Matthias 77cabd291f Merge pull request #13128 from freqtrade/update/binance-leverage-tiers
Update Binance Leverage Tiers
2026-05-07 07:48:26 +02:00
Freqtrade Bot 59b47a9a67 chore: update binance leverage tiers 2026-05-07 03:37:17 +00:00
Matthias e8eb5cdb4c Merge pull request #13115 from freqtrade/dependabot/pip/develop/uvicorn-0.46.0
chore(deps): bump uvicorn from 0.44.0 to 0.46.0
2026-05-04 09:31:26 +02:00
Matthias c9274a7d04 Merge pull request #13116 from freqtrade/dependabot/pip/develop/ruff-0.15.12
chore(deps-dev): bump ruff from 0.15.11 to 0.15.12
2026-05-04 07:57:25 +02:00
dependabot[bot] c6a481a2dc chore(deps): bump uvicorn from 0.44.0 to 0.46.0
Bumps [uvicorn](https://github.com/Kludex/uvicorn) from 0.44.0 to 0.46.0.
- [Release notes](https://github.com/Kludex/uvicorn/releases)
- [Changelog](https://github.com/Kludex/uvicorn/blob/main/docs/release-notes.md)
- [Commits](https://github.com/Kludex/uvicorn/compare/0.44.0...0.46.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2026-05-04 05:49:07 +00:00
Matthias 0188d68a85 Merge pull request #13120 from freqtrade/dependabot/pip/develop/fastapi-0.136.1
chore(deps): bump fastapi from 0.136.0 to 0.136.1
2026-05-04 07:47:49 +02:00
Matthias 10c2ec39db Merge pull request #13122 from freqtrade/dependabot/pip/develop/cachetools-7.0.6
chore(deps): bump cachetools from 7.0.5 to 7.0.6
2026-05-04 07:43:53 +02:00
Matthias d0bf09b7e1 Merge pull request #13121 from freqtrade/dependabot/pip/develop/ccxt-4.5.51
chore(deps): bump ccxt from 4.5.50 to 4.5.51
2026-05-04 07:37:35 +02:00
Matthias d2cbae6f50 Merge pull request #13117 from freqtrade/dependabot/pip/develop/pyarrow-24.0.0
chore(deps): bump pyarrow from 23.0.1 to 24.0.0
2026-05-04 07:36:39 +02:00
dependabot[bot] 7e41443db8 chore(deps-dev): bump ruff from 0.15.11 to 0.15.12
Bumps [ruff](https://github.com/astral-sh/ruff) from 0.15.11 to 0.15.12.
- [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.15.11...0.15.12)

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

Signed-off-by: dependabot[bot] <support@github.com>
2026-05-04 05:33:30 +00:00
Matthias 011098209a Merge pull request #13118 from freqtrade/dependabot/pip/develop/pre-commit-4.6.0
chore(deps-dev): bump pre-commit from 4.5.1 to 4.6.0
2026-05-04 07:29:31 +02:00
dependabot[bot] 885a147b48 chore(deps): bump ccxt from 4.5.50 to 4.5.51
Bumps [ccxt](https://github.com/ccxt/ccxt) from 4.5.50 to 4.5.51.
- [Release notes](https://github.com/ccxt/ccxt/releases)
- [Commits](https://github.com/ccxt/ccxt/compare/v4.5.50...v4.5.51)

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

Signed-off-by: dependabot[bot] <support@github.com>
2026-05-04 04:50:13 +00:00
Matthias 1ad03ecb13 Merge pull request #13119 from freqtrade/dependabot/pip/develop/cryptography-47.0.0
chore(deps): bump cryptography from 46.0.7 to 47.0.0
2026-05-04 06:42:38 +02:00
Matthias c46272a7fc chore(dependabot): group bymnasium/sb3 dependencies 2026-05-04 06:41:47 +02:00
Matthias 1d8034ab66 chore: package naming in freqai-rl 2026-05-04 06:41:47 +02:00
Matthias 0b12dcfec9 chore: bump pyarrow armv7 wheel 2026-05-04 06:35:55 +02:00
dependabot[bot] cf541f8e7c chore(deps): bump fastapi from 0.136.0 to 0.136.1
Bumps [fastapi](https://github.com/fastapi/fastapi) from 0.136.0 to 0.136.1.
- [Release notes](https://github.com/fastapi/fastapi/releases)
- [Commits](https://github.com/fastapi/fastapi/compare/0.136.0...0.136.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2026-05-04 04:35:04 +00:00
dependabot[bot] 7c46980e9d chore(deps): bump cachetools from 7.0.5 to 7.0.6
Bumps [cachetools](https://github.com/tkem/cachetools) from 7.0.5 to 7.0.6.
- [Changelog](https://github.com/tkem/cachetools/blob/master/CHANGELOG.rst)
- [Commits](https://github.com/tkem/cachetools/compare/v7.0.5...v7.0.6)

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

Signed-off-by: dependabot[bot] <support@github.com>
2026-05-04 04:34:50 +00:00
dependabot[bot] 7c9554349d chore(deps-dev): bump pre-commit from 4.5.1 to 4.6.0
Bumps [pre-commit](https://github.com/pre-commit/pre-commit) from 4.5.1 to 4.6.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/v4.5.1...v4.6.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2026-05-04 04:33:58 +00:00
Matthias 2d3ccb841d Merge pull request #13114 from freqtrade/dependabot/pip/develop/certifi-2026.4.22
chore(deps): bump certifi from 2026.2.25 to 2026.4.22
2026-05-04 06:33:43 +02:00
Matthias 68768748dc Merge pull request #13113 from freqtrade/dependabot/pip/develop/pydantic-2.13.3
chore(deps): bump pydantic from 2.13.2 to 2.13.3
2026-05-04 06:33:17 +02:00
Matthias 0b0a4e5df1 Merge pull request #13112 from freqtrade/dependabot/pip/develop/mypy-1.20.2
chore(deps-dev): bump mypy from 1.20.1 to 1.20.2
2026-05-04 06:33:04 +02:00
Matthias 2b47d2e91d Merge pull request #13111 from freqtrade/dependabot/pip/develop/build-1.4.4
chore(deps-dev): bump build from 1.4.3 to 1.4.4
2026-05-04 06:32:27 +02:00
Matthias 60cbf93b8f Merge pull request #13110 from freqtrade/dependabot/pip/develop/packaging-26.2
chore(deps): bump packaging from 26.1 to 26.2
2026-05-04 06:32:18 +02:00
dependabot[bot] 1b67a5b533 chore(deps): bump cryptography from 46.0.7 to 47.0.0
Bumps [cryptography](https://github.com/pyca/cryptography) from 46.0.7 to 47.0.0.
- [Changelog](https://github.com/pyca/cryptography/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/pyca/cryptography/compare/46.0.7...47.0.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2026-05-04 03:04:35 +00:00
dependabot[bot] 30832e702c chore(deps): bump pyarrow from 23.0.1 to 24.0.0
Bumps [pyarrow](https://github.com/apache/arrow) from 23.0.1 to 24.0.0.
- [Release notes](https://github.com/apache/arrow/releases)
- [Commits](https://github.com/apache/arrow/compare/apache-arrow-23.0.1...apache-arrow-24.0.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2026-05-04 03:04:22 +00:00
dependabot[bot] 8c8738e5f9 chore(deps): bump certifi from 2026.2.25 to 2026.4.22
Bumps [certifi](https://github.com/certifi/python-certifi) from 2026.2.25 to 2026.4.22.
- [Commits](https://github.com/certifi/python-certifi/compare/2026.02.25...2026.04.22)

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

Signed-off-by: dependabot[bot] <support@github.com>
2026-05-04 03:03:49 +00:00
dependabot[bot] f72d734e8c chore(deps): bump pydantic from 2.13.2 to 2.13.3
Bumps [pydantic](https://github.com/pydantic/pydantic) from 2.13.2 to 2.13.3.
- [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.13.2...v2.13.3)

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

Signed-off-by: dependabot[bot] <support@github.com>
2026-05-04 03:03:44 +00:00
dependabot[bot] 110ffde14e chore(deps-dev): bump mypy from 1.20.1 to 1.20.2
Bumps [mypy](https://github.com/python/mypy) from 1.20.1 to 1.20.2.
- [Changelog](https://github.com/python/mypy/blob/master/CHANGELOG.md)
- [Commits](https://github.com/python/mypy/compare/v1.20.1...v1.20.2)

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

Signed-off-by: dependabot[bot] <support@github.com>
2026-05-04 03:03:35 +00:00
dependabot[bot] 2d0ab2d973 chore(deps-dev): bump build from 1.4.3 to 1.4.4
Bumps [build](https://github.com/pypa/build) from 1.4.3 to 1.4.4.
- [Release notes](https://github.com/pypa/build/releases)
- [Changelog](https://github.com/pypa/build/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/pypa/build/compare/1.4.3...1.4.4)

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

Signed-off-by: dependabot[bot] <support@github.com>
2026-05-04 03:03:27 +00:00
dependabot[bot] 8e9615ba6c chore(deps): bump packaging from 26.1 to 26.2
Bumps [packaging](https://github.com/pypa/packaging) from 26.1 to 26.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/26.1...26.2)

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

Signed-off-by: dependabot[bot] <support@github.com>
2026-05-04 03:03:19 +00:00
Matthias 55244fb098 Merge pull request #13109 from dtmkeng/improve/maxsize-marketcappairlist
fix: increase marketcap cache size to improve performance
2026-05-03 19:16:28 +02:00
dtmkeng 2087e04a62 fix: reduce marketcap cache size to optimize memory usage 2026-05-03 15:22:31 +07:00
Matthias 5ecd64d17e fix: realized_profit calculation for open trades
while the trade is open, funding fees need to be added on every exit
this keeps realized_profit in line with prior close profits.

closes #13102
2026-05-03 08:50:03 +02:00
dtmkeng 047a107ff3 fix: increase marketcap cache size to improve performance 2026-05-03 02:36:06 +07:00
Matthias 4acdb2eb0c chore: ensure __repr__ always has an order side 2026-05-02 16:25:13 +02:00
Matthias 58a18e1e9c fix: use "toint" for show-trades 2026-05-02 16:21:54 +02:00
Matthias 17b5e9bac7 chore: minor typo fix 2026-05-02 08:27:08 +02:00
Matthias 610d03570c chore: bump version to 2026.5-dev 2026-04-30 07:13:14 +02:00
37 changed files with 7287 additions and 3848 deletions
+5 -1
View File
@@ -49,7 +49,11 @@ updates:
patterns: patterns:
- "scipy" - "scipy"
- "scipy-stubs" - "scipy-stubs"
gymnasium:
patterns:
- "gymnasium"
- "stable-baselines3"
- "sb3-contrib"
- package-ecosystem: "github-actions" - package-ecosystem: "github-actions"
directory: "/" directory: "/"
cooldown: cooldown:
+5 -2
View File
@@ -68,7 +68,7 @@ jobs:
run: | run: |
pytest --random-order --cov=freqtrade --cov=freqtrade_client --cov-config=.coveragerc pytest --random-order --cov=freqtrade --cov=freqtrade_client --cov-config=.coveragerc
- uses: codecov/codecov-action@57e3a136b779b570ffcdbf80b3bdc90e7fab3de2 # v6.0.0 - uses: codecov/codecov-action@e79a6962e0d4c0c17b229090214935d2e33f8354 # v6.0.1
if: (runner.os == 'Linux' && matrix.python-version == '3.12' && matrix.os == 'ubuntu-24.04') if: (runner.os == 'Linux' && matrix.python-version == '3.12' && matrix.os == 'ubuntu-24.04')
with: with:
fail_ci_if_error: true fail_ci_if_error: true
@@ -150,7 +150,10 @@ jobs:
run: | run: |
$PSVersionTable $PSVersionTable
Get-PSRepository | Format-List * Get-PSRepository | Format-List *
Set-PSRepository psgallery -InstallationPolicy trusted if (-not (Get-PSRepository -Name PSGallery -ErrorAction SilentlyContinue)) {
Register-PSRepository -Default
}
Set-PSRepository PSGallery -InstallationPolicy Trusted
Install-Module -Name Pester -RequiredVersion 5.7.1 -Confirm:$false -Force -SkipPublisherCheck Install-Module -Name Pester -RequiredVersion 5.7.1 -Confirm:$false -Force -SkipPublisherCheck
$Error.clear() $Error.clear()
Invoke-Pester -Path "tests" -CI Invoke-Pester -Path "tests" -CI
@@ -0,0 +1,53 @@
name: Pre-commit Types update
on:
pull_request:
branches:
- "develop"
concurrency:
group: "${{ github.workflow }}-${{ github.ref }}-${{ github.event_name }}"
cancel-in-progress: true
permissions: {}
jobs:
mypy-version-update:
name: "Pre-commit mypy type versions update"
runs-on: ubuntu-24.04
# Only run this job for pull requests created by dependabot[bot]
if: >
github.event.pull_request.user.login == 'dependabot[bot]' &&
github.repository == github.event.pull_request.head.repo.full_name &&
github.event_name == 'pull_request' &&
startsWith(github.head_ref, 'dependabot/')
environment:
name: dependabot-pulls
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
persist-credentials: true
token: ${{ secrets.REPO_SCOPED_TOKEN_DEP }}
ref: ${{ github.head_ref || github.ref }}
- name: Install uv and Python 🐍
uses: astral-sh/setup-uv@08807647e7069bb48b6ef5acd8ec9567f424441b # v8.1.0
with:
activate-environment: true
python-version: "3.13"
- name: Install PyYAML
run: |
- name: pre-commit dependencies
run: |
uv pip install $(grep -E "^pyyaml==" requirements-dev.txt)
python build_helpers/pre_commit_update.py --update
- uses: stefanzweifel/git-auto-commit-action@04702edda442b2e678b25b537cec683a1493fcb9 # v7
with:
commit_message: "chore(deps): Apply pre-commit types update"
commit_user_name: Freqtrade Bot
commit_user_email: 154552126+freqtrade-bot@users.noreply.github.com
commit_author: Freqtrade Bot <154552126+freqtrade-bot@users.noreply.github.com>
+1 -1
View File
@@ -2,7 +2,7 @@ name: Pre-commit auto-update
on: on:
schedule: schedule:
- cron: "0 3 * * 2" - cron: "13 1 * * 2"
# on demand # on demand
workflow_dispatch: workflow_dispatch:
+1 -1
View File
@@ -31,4 +31,4 @@ jobs:
persist-credentials: false persist-credentials: false
- name: Run zizmor 🌈 - name: Run zizmor 🌈
uses: zizmorcore/zizmor-action@b1d7e1fb5de872772f31590499237e7cce841e8e # v0.5.3 uses: zizmorcore/zizmor-action@5f14fd08f7cf1cb1609c1e344975f152c7ee938d # v0.5.6
+6 -6
View File
@@ -15,23 +15,23 @@ repos:
- repo: https://github.com/pre-commit/mirrors-mypy - repo: https://github.com/pre-commit/mirrors-mypy
rev: "v1.20.2" rev: "v2.1.0"
hooks: hooks:
- id: mypy - id: mypy
exclude: build_helpers exclude: build_helpers
additional_dependencies: additional_dependencies:
- types-cachetools==6.2.0.20260408 - types-cachetools==7.0.0.20260518
- types-filelock==3.2.7 - types-filelock==3.2.7
- types-requests==2.33.0.20260408 - types-requests==2.33.0.20260518
- types-tabulate==0.10.0.20260408 - types-tabulate==0.10.0.20260508
- types-python-dateutil==2.9.0.20260408 - types-python-dateutil==2.9.0.20260518
- scipy-stubs==1.17.1.4 - scipy-stubs==1.17.1.4
- SQLAlchemy==2.0.49 - SQLAlchemy==2.0.49
# stages: [push] # stages: [push]
- repo: https://github.com/charliermarsh/ruff-pre-commit - repo: https://github.com/charliermarsh/ruff-pre-commit
# Ruff version. # Ruff version.
rev: 'v0.15.12' rev: 'v0.15.13'
hooks: hooks:
- id: ruff - id: ruff
- id: ruff-format - id: ruff-format
+1 -1
View File
@@ -1,4 +1,4 @@
FROM python:3.14.3-slim-trixie AS base FROM python:3.14.5-slim-trixie AS base
# Setup env # Setup env
ENV LANG=C.UTF-8 ENV LANG=C.UTF-8
+42 -2
View File
@@ -1,5 +1,7 @@
# File used in CI to ensure pre-commit dependencies are kept up-to-date. # File used in CI to ensure pre-commit dependencies are kept up-to-date.
import argparse
import re
import sys import sys
from pathlib import Path from pathlib import Path
@@ -10,6 +12,24 @@ pre_commit_file = Path(".pre-commit-config.yaml")
require_dev = Path("requirements-dev.txt") require_dev = Path("requirements-dev.txt")
require = Path("requirements.txt") require = Path("requirements.txt")
parser = argparse.ArgumentParser()
parser.add_argument("--update", action="store_true")
args = parser.parse_args()
def replace_dependency_version(pre_commit_text: str, dependency: str) -> tuple[str, bool]:
"""
Regex-based replacement of a dependency version in the pre-commit config file.
using regex here ensures we only replace the version of the dependency while
keeping the overall file intact.
"""
package_name = dependency.split("==", 1)[0]
pattern = re.compile(rf"^(\s*-\s+){re.escape(package_name)}==.*$", re.MULTILINE)
updated_text, replacements = pattern.subn(rf"\1{dependency}", pre_commit_text, count=1)
return updated_text, replacements > 0 and updated_text != pre_commit_text
with require_dev.open("r") as rfile: with require_dev.open("r") as rfile:
requirements = rfile.readlines() requirements = rfile.readlines()
@@ -23,6 +43,18 @@ supported = ("types-", "SQLAlchemy", "scipy-stubs")
# Only keep the first part of the line up to the first space # Only keep the first part of the line up to the first space
type_reqs = [r.strip("\n").split()[0] for r in requirements if r.startswith(supported)] type_reqs = [r.strip("\n").split()[0] for r in requirements if r.startswith(supported)]
with pre_commit_file.open("r") as file:
pre_commit_text = file.read()
updated = False
for req in type_reqs:
pre_commit_text, req_updated = replace_dependency_version(pre_commit_text, req)
updated = updated or req_updated
if args.update and updated:
with pre_commit_file.open("w") as file:
file.write(pre_commit_text)
with pre_commit_file.open("r") as file: with pre_commit_file.open("r") as file:
f = yaml.load(file, Loader=yaml.SafeLoader) f = yaml.load(file, Loader=yaml.SafeLoader)
@@ -40,12 +72,20 @@ for hook in hooks:
for req in type_reqs: for req in type_reqs:
if req not in hooks: if req not in hooks:
errors.append(f"{req} is missing in pre-config file.") errors.append(f"{req} is missing in pre-commit config file.")
if updated:
if args.update:
errors.append(".pre-commit-config.yaml was updated to match the requirements files.")
else:
errors.append(
".pre-commit-config.yaml is outdated. Run build_helpers/pre_commit_update.py --update."
)
if errors: if errors:
for e in errors: for e in errors:
print(e) print(e)
sys.exit(1) sys.exit(1 if not (args.update and updated) else 0)
sys.exit(0) sys.exit(0)
+2 -1
View File
@@ -1063,7 +1063,8 @@
"jwt_secret_key": { "jwt_secret_key": {
"description": "Secret key for JWT authentication.", "description": "Secret key for JWT authentication.",
"type": "string", "type": "string",
"default": "somethingRandomSomethingRandom123" "default": "somethingRandomSomethingRandom123",
"minLength": 32
}, },
"CORS_origins": { "CORS_origins": {
"description": "List of allowed CORS origins.", "description": "List of allowed CORS origins.",
+1 -1
View File
@@ -166,7 +166,7 @@ Below are the values you can expect to include/use inside a typical strategy dat
| `df['do_predict']` | Indication of an outlier data point. The return value is integer between -2 and 2, which lets you know if the prediction is trustworthy or not. `do_predict==1` means that the prediction is trustworthy. If the Dissimilarity Index (DI, see details [here](freqai-feature-engineering.md#identifying-outliers-with-the-dissimilarity-index-di)) of the input data point is above the threshold defined in the config, FreqAI will subtract 1 from `do_predict`, resulting in `do_predict==0`. If `use_SVM_to_remove_outliers` is active, the Support Vector Machine (SVM, see details [here](freqai-feature-engineering.md#identifying-outliers-using-a-support-vector-machine-svm)) may also detect outliers in training and prediction data. In this case, the SVM will also subtract 1 from `do_predict`. If the input data point was considered an outlier by the SVM but not by the DI, or vice versa, the result will be `do_predict==0`. If both the DI and the SVM considers the input data point to be an outlier, the result will be `do_predict==-1`. As with the SVM, if `use_DBSCAN_to_remove_outliers` is active, DBSCAN (see details [here](freqai-feature-engineering.md#identifying-outliers-with-dbscan)) may also detect outliers and subtract 1 from `do_predict`. Hence, if both the SVM and DBSCAN are active and identify a datapoint that was above the DI threshold as an outlier, the result will be `do_predict==-2`. A particular case is when `do_predict == 2`, which means that the model has expired due to exceeding `expired_hours`. <br> **Datatype:** Integer between -2 and 2. | `df['do_predict']` | Indication of an outlier data point. The return value is integer between -2 and 2, which lets you know if the prediction is trustworthy or not. `do_predict==1` means that the prediction is trustworthy. If the Dissimilarity Index (DI, see details [here](freqai-feature-engineering.md#identifying-outliers-with-the-dissimilarity-index-di)) of the input data point is above the threshold defined in the config, FreqAI will subtract 1 from `do_predict`, resulting in `do_predict==0`. If `use_SVM_to_remove_outliers` is active, the Support Vector Machine (SVM, see details [here](freqai-feature-engineering.md#identifying-outliers-using-a-support-vector-machine-svm)) may also detect outliers in training and prediction data. In this case, the SVM will also subtract 1 from `do_predict`. If the input data point was considered an outlier by the SVM but not by the DI, or vice versa, the result will be `do_predict==0`. If both the DI and the SVM considers the input data point to be an outlier, the result will be `do_predict==-1`. As with the SVM, if `use_DBSCAN_to_remove_outliers` is active, DBSCAN (see details [here](freqai-feature-engineering.md#identifying-outliers-with-dbscan)) may also detect outliers and subtract 1 from `do_predict`. Hence, if both the SVM and DBSCAN are active and identify a datapoint that was above the DI threshold as an outlier, the result will be `do_predict==-2`. A particular case is when `do_predict == 2`, which means that the model has expired due to exceeding `expired_hours`. <br> **Datatype:** Integer between -2 and 2.
| `df['DI_values']` | Dissimilarity Index (DI) values are proxies for the level of confidence FreqAI has in the prediction. A lower DI means the prediction is close to the training data, i.e., higher prediction confidence. See details about the DI [here](freqai-feature-engineering.md#identifying-outliers-with-the-dissimilarity-index-di). <br> **Datatype:** Float. | `df['DI_values']` | Dissimilarity Index (DI) values are proxies for the level of confidence FreqAI has in the prediction. A lower DI means the prediction is close to the training data, i.e., higher prediction confidence. See details about the DI [here](freqai-feature-engineering.md#identifying-outliers-with-the-dissimilarity-index-di). <br> **Datatype:** Float.
| `df['%*']` | Any dataframe column prepended with `%` in `feature_engineering_*()` is treated as a training feature. For example, you can include the RSI in the training feature set (similar to in `templates/FreqaiExampleStrategy.py`) by setting `df['%-rsi']`. See more details on how this is done [here](freqai-feature-engineering.md). <br> **Note:** Since the number of features prepended with `%` can multiply very quickly (10s of thousands of features are easily engineered using the multiplictative functionality of, e.g., `include_shifted_candles` and `include_timeframes` as described in the [parameter table](freqai-parameter-table.md)), these features are removed from the dataframe that is returned from FreqAI to the strategy. To keep a particular type of feature for plotting purposes, you would prepend it with `%%` (see details below). <br> **Datatype:** Depends on the feature created by the user. | `df['%*']` | Any dataframe column prepended with `%` in `feature_engineering_*()` is treated as a training feature. For example, you can include the RSI in the training feature set (similar to in `templates/FreqaiExampleStrategy.py`) by setting `df['%-rsi']`. See more details on how this is done [here](freqai-feature-engineering.md). <br> **Note:** Since the number of features prepended with `%` can multiply very quickly (10s of thousands of features are easily engineered using the multiplictative functionality of, e.g., `include_shifted_candles` and `include_timeframes` as described in the [parameter table](freqai-parameter-table.md)), these features are removed from the dataframe that is returned from FreqAI to the strategy. To keep a particular type of feature for plotting purposes, you would prepend it with `%%` (see details below). <br> **Datatype:** Depends on the feature created by the user.
| `df['%%*']` | Any dataframe column prepended with `%%` in `feature_engineering_*()` is treated as a training feature, just the same as the above `%` prepend. However, in this case, the features are returned back to the strategy for FreqUI/plot-dataframe plotting and monitoring in Dry/Live/Backtesting <br> **Datatype:** Depends on the feature created by the user. Please note that features created in `feature_engineering_expand()` will have automatic FreqAI naming schemas depending on the expansions that you configured (i.e. `include_timeframes`, `include_corr_pairlist`, `indicators_periods_candles`, `include_shifted_candles`). So if you want to plot `%%-rsi` from `feature_engineering_expand_all()`, the final naming scheme for your plotting config would be: `%%-rsi-period_10_ETH/USDT:USDT_1h` for the `rsi` feature with `period=10`, `timeframe=1h`, and `pair=ETH/USDT:USDT` (the `:USDT` is added if you are using futures pairs). It is useful to simply add `print(dataframe.columns)` in your `populate_indicators()` after `self.freqai.start()` to see the full list of available features that are returned to the strategy for plotting purposes. | `df['%%*']` | Any dataframe column prepended with `%%` in `feature_engineering_*()` is treated as a training feature, just the same as the above `%` prepend. However, in this case, the features are returned back to the strategy for FreqUI/plot-dataframe plotting and monitoring in Dry/Live/Backtesting <br> **Datatype:** Depends on the feature created by the user. <br>*Please note* that features created in `feature_engineering_expand()` will have automatic FreqAI naming schemas depending on the expansions that you configured (i.e. `include_timeframes`, `include_corr_pairlist`, `indicators_periods_candles`, `include_shifted_candles`). So if you want to plot `%%-rsi` from `feature_engineering_expand_all()`, the final naming scheme for your plotting config would be: `%%-rsi-period_10_ETH/USDT:USDT_1h` for the `rsi` feature with `period=10`, `timeframe=1h`, and `pair=ETH/USDT:USDT` (the `:USDT` is added if you are using futures pairs). It is useful to simply add `print(dataframe.columns)` in your `populate_indicators()` after `self.freqai.start()` to see the full list of available features that are returned to the strategy for plotting purposes.
## Setting the `startup_candle_count` ## Setting the `startup_candle_count`
+1 -1
View File
@@ -2,6 +2,6 @@ markdown==3.10.2
mkdocs==1.6.1 mkdocs==1.6.1
mkdocs-material==9.7.6 mkdocs-material==9.7.6
mdx_truly_sane_lists==1.3 mdx_truly_sane_lists==1.3
pymdown-extensions==10.21.2 pymdown-extensions==10.21.3
jinja2==3.1.6 jinja2==3.1.6
mike==2.2.0 mike==2.2.0
+9 -9
View File
@@ -202,20 +202,20 @@ All endpoints in the below table need to be prefixed with the base URL of the AP
| `/blacklist` | GET | Show the current blacklist. | `/blacklist` | GET | Show the current blacklist.
| `/blacklist` | POST | Adds the specified pair to the blacklist.<br/>*Params:*<br/>- `blacklist` (`str`) | `/blacklist` | POST | Adds the specified pair to the blacklist.<br/>*Params:*<br/>- `blacklist` (`str`)
| `/blacklist` | DELETE | Deletes the specified list of pairs from the blacklist.<br/>*Params:*<br/>- `[pair,pair]` (`list[str]`) | `/blacklist` | DELETE | Deletes the specified list of pairs from the blacklist.<br/>*Params:*<br/>- `[pair,pair]` (`list[str]`)
| `/pair_candles` | GET | Returns dataframe for a pair / timeframe combination while the bot is running. **Alpha** | `/pair_candles` | GET | Returns dataframe for a pair / timeframe combination while the bot is running.
| `/pair_candles` | POST | Returns dataframe for a pair / timeframe combination while the bot is running, filtered by a provided list of columns to return. **Alpha**<br/>*Params:*<br/>- `<column_list>` (`list[str]`) | `/pair_candles` | POST | Returns dataframe for a pair / timeframe combination while the bot is running, filtered by a provided list of columns to return.<br/>*Params:*<br/>- `<column_list>` (`list[str]`)
| `/pair_history` | GET | Returns an analyzed dataframe for a given timerange, analyzed by a given strategy. **Alpha** | `/pair_history` | GET | Returns an analyzed dataframe for a given timerange, analyzed by a given strategy.
| `/pair_history` | POST | Returns an analyzed dataframe for a given timerange, analyzed by a given strategy, filtered by a provided list of columns to return. **Alpha**<br/>*Params:*<br/>- `<column_list>` (`list[str]`) | `/pair_history` | POST | Returns an analyzed dataframe for a given timerange, analyzed by a given strategy, filtered by a provided list of columns to return.<br/>*Params:*<br/>- `<column_list>` (`list[str]`)
| `/plot_config` | GET | Get plot config from the strategy (or nothing if not configured). **Alpha** | `/plot_config` | GET | Get plot config from the strategy (or nothing if not configured).
| `/strategies` | GET | List strategies in strategy directory. **Alpha** | `/strategies` | GET | List strategies in strategy directory.
| `/strategy/<strategy>` | GET | Get specific Strategy content by strategy class name. **Alpha**<br/>*Params:*<br/>- `<strategy>` (`str`) | `/strategy/<strategy>` | GET | Get specific Strategy content by strategy class name.<br/>*Params:*<br/>- `<strategy>` (`str`)
| `/available_pairs` | GET | List available backtest data. **Alpha** | `/available_pairs` | GET | List available backtest data.
| `/version` | GET | Show version. | `/version` | GET | Show version.
| `/sysinfo` | GET | Show information about the system load. | `/sysinfo` | GET | Show information about the system load.
| `/health` | GET | Show bot health (last bot loop). | `/health` | GET | Show bot health (last bot loop).
!!! Warning "Alpha status" !!! Warning "Alpha status"
Endpoints labeled with *Alpha status* above may change at any time without notice. Endpoints labeled with *Alpha status* or *Beta status* above may change at any time without notice.
### Message WebSocket ### Message WebSocket
+2
View File
@@ -910,6 +910,8 @@ if self.dp.runmode.value in ('live', 'dry_run'):
### *check_delisting(pair)* ### *check_delisting(pair)*
Return Datetime of the pair delisting schedule if any, otherwise return None
```python ```python
def custom_exit(self, pair: str, trade: Trade, current_time: datetime, current_rate: float, current_profit: float, **kwargs): def custom_exit(self, pair: str, trade: Trade, current_time: datetime, current_rate: float, current_profit: float, **kwargs):
if self.dp.runmode.value in ('live', 'dry_run'): if self.dp.runmode.value in ('live', 'dry_run'):
+1 -1
View File
@@ -1,6 +1,6 @@
"""Freqtrade bot""" """Freqtrade bot"""
__version__ = "2026.4" __version__ = "2026.5-dev"
if "dev" in __version__: if "dev" in __version__:
from pathlib import Path from pathlib import Path
+1 -1
View File
@@ -393,7 +393,7 @@ def start_show_trades(args: dict[str, Any]) -> None:
tfilter = [] tfilter = []
if config.get("trade_ids"): if config.get("trade_ids"):
tfilter.append(Trade.id.in_(config["trade_ids"])) tfilter.append(Trade.id.in_(int(tid) for tid in config["trade_ids"]))
trades = Trade.get_trades(tfilter).all() trades = Trade.get_trades(tfilter).all()
logger.info(f"Printing {len(trades)} Trades: ") logger.info(f"Printing {len(trades)} Trades: ")
+1
View File
@@ -757,6 +757,7 @@ CONF_SCHEMA = {
"description": "Secret key for JWT authentication.", "description": "Secret key for JWT authentication.",
"type": "string", "type": "string",
"default": "somethingRandomSomethingRandom123", "default": "somethingRandomSomethingRandom123",
"minLength": 32,
}, },
"CORS_origins": { "CORS_origins": {
"description": "List of allowed CORS origins.", "description": "List of allowed CORS origins.",
+1 -1
View File
@@ -559,7 +559,7 @@ class Binance(Exchange):
class Binanceusdm(Binance): class Binanceusdm(Binance):
"""Binacne USDM Exchange """Binance USDM Exchange
Same as Binance - only futures trading is supported (via ccxt). Same as Binance - only futures trading is supported (via ccxt).
Not actually necessary, binance should be preferred. Not actually necessary, binance should be preferred.
File diff suppressed because it is too large Load Diff
+6
View File
@@ -214,6 +214,12 @@ def dataframe_to_json(dataframe: pd.DataFrame) -> str:
:param dataframe: A pandas DataFrame :param dataframe: A pandas DataFrame
:returns: A JSON string of the pandas DataFrame :returns: A JSON string of the pandas DataFrame
""" """
date_columns = dataframe.select_dtypes(include=["datetime", "datetime64", "datetimetz"])
# Explicit conversion to ms
# This used to be part of to_json, but was deprecated in pandas 3
for date_column in date_columns:
dataframe[date_column] = date_columns[date_column].dt.as_unit("ms").astype("int64")
return dataframe.to_json(orient="split") return dataframe.to_json(orient="split")
+14 -11
View File
@@ -189,8 +189,8 @@ class Order(ModelBase):
def __repr__(self): def __repr__(self):
return ( return (
f"Order(id={self.id}, trade={self.ft_trade_id}, order_id={self.order_id}, " f"Order(id={self.id}, trade={self.ft_trade_id}, order_id={self.order_id}, "
f"side={self.side}, filled={self.safe_filled}, price={self.safe_price}, " f"side={self.side or self.ft_order_side}, filled={self.safe_filled}, "
f"amount={self.amount}, " f"price={self.safe_price}, amount={self.amount}, "
f"status={self.status}, date={self.order_date_utc:{DATETIME_PRINT_FORMAT}})" f"status={self.status}, date={self.order_date_utc:{DATETIME_PRINT_FORMAT}})"
) )
@@ -1248,12 +1248,16 @@ class LocalTrade:
close_profit_abs = 0.0 close_profit_abs = 0.0
# Reset funding fees # Reset funding fees
self.funding_fees = 0.0 self.funding_fees = 0.0
funding_fees = 0.0 # Total funding fees - cumulated over all orders
ordercount = len(self.orders) - 1 total_funding_fees = 0.0
# current funding fees - resetting on every exit to be aligned with profit calculation,
# as funding fees are part of the profit
current_funding_fee = 0.0
for i, o in enumerate(self.orders): for i, o in enumerate(self.orders):
if o.ft_is_open or not o.filled: if o.ft_is_open or not o.filled:
continue continue
funding_fees += o.funding_fee or 0.0 current_funding_fee += o.funding_fee or 0.0
total_funding_fees += o.funding_fee or 0.0
tmp_amount = FtPrecise(o.safe_amount_after_fee) tmp_amount = FtPrecise(o.safe_amount_after_fee)
tmp_price = FtPrecise(o.safe_price) tmp_price = FtPrecise(o.safe_price)
@@ -1268,11 +1272,8 @@ class LocalTrade:
avg_price = current_stake / current_amount avg_price = current_stake / current_amount
if is_exit: if is_exit:
# Process exits # Intermediate funding fees for profit calculation
if i == ordercount and is_closing: self.funding_fees = current_funding_fee
# Apply funding fees only to the last closing order
self.funding_fees = funding_fees
exit_rate = o.safe_price exit_rate = o.safe_price
exit_amount = o.safe_amount_after_fee exit_amount = o.safe_amount_after_fee
prof = self.calculate_profit(exit_rate, exit_amount, float(avg_price)) prof = self.calculate_profit(exit_rate, exit_amount, float(avg_price))
@@ -1281,10 +1282,12 @@ class LocalTrade:
# This needs to be calculated based on the last occurring exit to be aligned # This needs to be calculated based on the last occurring exit to be aligned
# with realized_profit. # with realized_profit.
close_profit = (close_profit_abs / total_stake) * self.leverage close_profit = (close_profit_abs / total_stake) * self.leverage
current_funding_fee = 0.0
else: else:
total_stake += self._calc_open_trade_value(tmp_amount, price) total_stake += self._calc_open_trade_value(tmp_amount, price)
max_stake_amount += tmp_amount * price max_stake_amount += tmp_amount * price
self.funding_fees = funding_fees # Assign cumulated funding fees after all orders have been processed
self.funding_fees = total_funding_fees
self.max_stake_amount = float(max_stake_amount) / (self.leverage or 1.0) self.max_stake_amount = float(max_stake_amount) / (self.leverage or 1.0)
if close_profit: if close_profit:
@@ -38,7 +38,7 @@ class MarketCapPairList(IPairList):
self._max_rank = self._pairlistconfig.get("max_rank", 30) self._max_rank = self._pairlistconfig.get("max_rank", 30)
self._refresh_period = self._pairlistconfig.get("refresh_period", 86400) self._refresh_period = self._pairlistconfig.get("refresh_period", 86400)
self._categories = self._pairlistconfig.get("categories", []) self._categories = self._pairlistconfig.get("categories", [])
self._marketcap_cache: FtTTLCache = FtTTLCache(maxsize=1, ttl=self._refresh_period) self._marketcap_cache: FtTTLCache = FtTTLCache(maxsize=2, ttl=self._refresh_period)
_coingecko_config = self._config.get("coingecko", {}) _coingecko_config = self._config.get("coingecko", {})
+1 -1
View File
@@ -51,7 +51,7 @@ class StrategyResolver(IResolver):
strategy: IStrategy = StrategyResolver._load_strategy( strategy: IStrategy = StrategyResolver._load_strategy(
strategy_name, config=config, extra_dir=config.get("strategy_path") strategy_name, config=config, extra_dir=config.get("strategy_path")
) )
strategy.ft_load_params_from_file() strategy.ft_set_special_params_from_file()
# Set attributes # Set attributes
# Check if we need to override configuration # Check if we need to override configuration
# (Attribute name, default, subkey) # (Attribute name, default, subkey)
-1
View File
@@ -15,7 +15,6 @@ from freqtrade.rpc.api_server.deps import get_api_config
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
ALGORITHM = "HS256" ALGORITHM = "HS256"
__DEFAULT_JWT = "somethingRandomSomethingRandom123"
router_login = APIRouter() router_login = APIRouter()
+6 -4
View File
@@ -796,7 +796,7 @@ class RPC:
results = results.rename({"timestamp": "date"}, axis=1) results = results.rename({"timestamp": "date"}, axis=1)
results.loc[:, "__date_ts"] = results.loc[:, "date"].dt.as_unit("ms").astype("int64") results.loc[:, "__date_ts"] = results.loc[:, "date"].dt.as_unit("ms").astype("int64")
# Exclude non-bot managed for now # Exclude non-bot managed for now
results_filtered = results.loc[results["bot_managed"]] results_filtered = results.loc[results["bot_managed"].astype(bool)]
results_final = ( results_final = (
results_filtered.groupby(["date", "__date_ts"]) results_filtered.groupby(["date", "__date_ts"])
@@ -1548,8 +1548,7 @@ class RPC:
# band-aid until this is fixed: # band-aid until this is fixed:
# https://github.com/pandas-dev/pandas/issues/45836 # https://github.com/pandas-dev/pandas/issues/45836
datetime_types = ["datetime", "datetime64", "datetimetz"] date_columns = dataframe.select_dtypes(include=["datetime", "datetime64", "datetimetz"])
date_columns = dataframe.select_dtypes(include=datetime_types)
for date_column in date_columns: for date_column in date_columns:
# replace NaT with `None` # replace NaT with `None`
dataframe[date_column] = dataframe[date_column].astype(object).replace({NaT: None}) dataframe[date_column] = dataframe[date_column].astype(object).replace({NaT: None})
@@ -1695,8 +1694,11 @@ class RPC:
else dt_ts(dt_now() - timedelta(days=30)), else dt_ts(dt_now() - timedelta(days=30)),
is_new_pair=True, # history is never available - so always treat as new pair is_new_pair=True, # history is never available - so always treat as new pair
candle_type=config.get("candle_type_def", CandleType.SPOT), candle_type=config.get("candle_type_def", CandleType.SPOT),
until_ms=timerange_parsed.stopts, until_ms=timerange_parsed.stopts * 1000 if timerange_parsed.stopts else None,
) )
if timerange_parsed.stopts and len(data) > 1:
# trim last candle if it is newer than the stop time
data = data.loc[data["date"] <= timerange_parsed.stopdt]
else: else:
_data = load_data( _data = load_data(
datadir=config["datadir"], datadir=config["datadir"],
+8 -4
View File
@@ -51,9 +51,10 @@ class HyperStrategyMixin:
for par in self._ft_hyper_params[space].values(): for par in self._ft_hyper_params[space].values():
yield par.name, par yield par.name, par
def ft_load_params_from_file(self) -> None: def ft_set_special_params_from_file(self) -> None:
""" """
Load Parameters from parameter file Sets special parameters (stoploss, roi, trailing, max_open_trades) from the
previously loaded file.
Should/must run before config values are loaded in strategy_resolver. Should/must run before config values are loaded in strategy_resolver.
""" """
if self._ft_params_from_file: if self._ft_params_from_file:
@@ -96,7 +97,7 @@ class HyperStrategyMixin:
params_values = deep_merge_dicts( params_values = deep_merge_dicts(
self._ft_params_from_file.get(space, {}), getattr(self, f"{space}_params", {}) self._ft_params_from_file.get(space, {}), getattr(self, f"{space}_params", {})
) )
self._ft_load_params(self._ft_hyper_params[space], params_values, space, hyperopt) self._ft_set_param(self._ft_hyper_params[space], params_values, space, hyperopt)
def load_params_from_file(self) -> dict: def load_params_from_file(self) -> dict:
filename_str = getattr(self, "__file__", "") filename_str = getattr(self, "__file__", "")
@@ -118,12 +119,15 @@ class HyperStrategyMixin:
return {} return {}
def _ft_load_params( def _ft_set_param(
self, params: SpaceParams, param_values: dict, space: str, hyperopt: bool = False self, params: SpaceParams, param_values: dict, space: str, hyperopt: bool = False
) -> None: ) -> None:
""" """
Set optimizable parameter values. Set optimizable parameter values.
:param params: Dictionary with new parameter values. :param params: Dictionary with new parameter values.
:param param_values: Dictionary with values to set.
:param space: The space to which the parameters belong.
:param hyperopt: Flag indicating if we are in hyperopt mode.
""" """
if not param_values: if not param_values:
logger.info(f"No params for {space} found, using default values.") logger.info(f"No params for {space} found, using default values.")
+1 -1
View File
@@ -1,7 +1,7 @@
from freqtrade_client.ft_rest_client import FtRestClient from freqtrade_client.ft_rest_client import FtRestClient
__version__ = "2026.4" __version__ = "2026.5-dev"
if "dev" in __version__: if "dev" in __version__:
from pathlib import Path from pathlib import Path
+1 -1
View File
@@ -1,3 +1,3 @@
# Requirements for freqtrade client library # Requirements for freqtrade client library
requests==2.33.1 requests==2.34.2
python-rapidjson==1.23 python-rapidjson==1.23
+1
View File
@@ -222,6 +222,7 @@ exclude-newer = "1 week"
[tool.uv.exclude-newer-package] [tool.uv.exclude-newer-package]
ccxt = false ccxt = false
pymdown-extensions = "6 days"
[tool.ruff] [tool.ruff]
line-length = 100 line-length = 100
+8 -8
View File
@@ -6,9 +6,9 @@
-r requirements-freqai-rl.txt -r requirements-freqai-rl.txt
-r docs/requirements-docs.txt -r docs/requirements-docs.txt
ruff==0.15.11 ruff==0.15.12
mypy==1.20.1 mypy==2.1.0
pre-commit==4.5.1 pre-commit==4.6.0
pytest==9.0.3 pytest==9.0.3
pytest-asyncio==1.3.0 pytest-asyncio==1.3.0
pytest-cov==7.1.0 pytest-cov==7.1.0
@@ -24,13 +24,13 @@ nbconvert==7.17.1
# mypy types # mypy types
scipy-stubs==1.17.1.4 # keep in sync with `scipy` in `requirements-hyperopt.txt` scipy-stubs==1.17.1.4 # keep in sync with `scipy` in `requirements-hyperopt.txt`
types-cachetools==6.2.0.20260408 types-cachetools==7.0.0.20260518
types-filelock==3.2.7 types-filelock==3.2.7
types-requests==2.33.0.20260408 types-requests==2.33.0.20260518
types-tabulate==0.10.0.20260408 types-tabulate==0.10.0.20260508
types-python-dateutil==2.9.0.20260408 types-python-dateutil==2.9.0.20260518
pip-audit==2.10.0 pip-audit==2.10.0
# For build step in CI # For build step in CI
build==1.4.3 build==1.5.0
# For pre-commit-update check # For pre-commit-update check
pyyaml==6.0.3 pyyaml==6.0.3
+2 -2
View File
@@ -5,7 +5,7 @@
torch==2.11.0; sys_platform != 'darwin' or platform_machine != 'x86_64' torch==2.11.0; sys_platform != 'darwin' or platform_machine != 'x86_64'
gymnasium==1.2.3 gymnasium==1.2.3
# SB3 >=2.5.0 depends on torch 2.3.0 - which implies it dropped support x86 macos # SB3 >=2.5.0 depends on torch 2.3.0 - which implies it dropped support x86 macos
stable_baselines3==2.8.0; sys_platform != 'darwin' or platform_machine != 'x86_64' stable-baselines3==2.8.0; sys_platform != 'darwin' or platform_machine != 'x86_64'
sb3_contrib==2.8.0; sys_platform != 'darwin' or platform_machine != 'x86_64' sb3-contrib==2.8.0; sys_platform != 'darwin' or platform_machine != 'x86_64'
# Progress bar for stable-baselines3 and sb3-contrib # Progress bar for stable-baselines3 and sb3-contrib
tqdm==4.67.3 tqdm==4.67.3
+15 -15
View File
@@ -1,5 +1,5 @@
numpy==2.4.4 numpy==2.4.5
pandas==3.0.2 pandas==3.0.3
bottleneck==1.6.0 bottleneck==1.6.0
numexpr==2.14.1 numexpr==2.14.1
# Indicator libraries # Indicator libraries
@@ -7,39 +7,39 @@ ft-pandas-ta==0.3.16
ta-lib==0.6.8 ta-lib==0.6.8
technical==1.6.0 technical==1.6.0
ccxt==4.5.50 ccxt==4.5.54
cryptography==46.0.7 cryptography==48.0.0
aiohttp==3.13.5 aiohttp==3.13.5
SQLAlchemy==2.0.49 SQLAlchemy==2.0.49
python-telegram-bot==22.7 python-telegram-bot==22.7
# can't be hard-pinned due to telegram-bot pinning httpx with ~ # can't be hard-pinned due to telegram-bot pinning httpx with ~
httpx>=0.24.1 httpx>=0.24.1
humanize==4.15.0 humanize==4.15.0
cachetools==7.0.5 cachetools==7.1.2
requests==2.33.1 requests==2.34.2
urllib3==2.6.3 urllib3==2.7.0
certifi==2026.2.25 certifi==2026.4.22
jsonschema==4.26.0 jsonschema==4.26.0
tabulate==0.10.0 tabulate==0.10.0
pycoingecko==3.2.0 pycoingecko==3.2.0
jinja2==3.1.6 jinja2==3.1.6
joblib==1.5.3 joblib==1.5.3
rich==15.0.0 rich==15.0.0
pyarrow==23.0.1; platform_machine != 'armv7l' pyarrow==24.0.0; platform_machine != 'armv7l'
# Load ticker files 30% faster # Load ticker files 30% faster
python-rapidjson==1.23 python-rapidjson==1.23
# Properly format api responses # Properly format api responses
orjson==3.11.8 orjson==3.11.9
# Notify systemd # Notify systemd
sdnotify==0.3.2 sdnotify==0.3.2
# API Server # API Server
fastapi==0.136.0 fastapi==0.136.1
pydantic==2.13.2 pydantic==2.13.4
uvicorn==0.44.0 uvicorn==0.47.0
pyjwt==2.12.1 pyjwt==2.12.1
aiofiles==25.1.0 aiofiles==25.1.0
psutil==7.2.2 psutil==7.2.2
@@ -49,7 +49,7 @@ questionary==2.1.1
prompt-toolkit==3.0.52 prompt-toolkit==3.0.52
# Extensions to datetime library # Extensions to datetime library
python-dateutil==2.9.0.post0 python-dateutil==2.9.0.post0
pytz==2026.1.post1 pytz==2026.2
#Futures #Futures
schedule==1.2.2 schedule==1.2.2
@@ -59,4 +59,4 @@ websockets==16.0
janus==2.0.0 janus==2.0.0
ast-comments==1.3.0 ast-comments==1.3.0
packaging==26.1 packaging==26.2
+1 -1
View File
@@ -190,7 +190,7 @@ class ClientProtocol:
self.logger.info("Empty DataFrame") self.logger.info("Empty DataFrame")
async def _handle_default(self, name, msgtype, data): async def _handle_default(self, name, msgtype, data):
self.logger.info("Unknown message of type {msgtype} received...") self.logger.info(f"Unknown message of type {msgtype} received...")
self.logger.info(data) self.logger.info(data)
+4 -2
View File
@@ -163,9 +163,11 @@ class TestCCXTExchange:
pytest.skip(f"No sample Balances available for exchange {exchangename}") pytest.skip(f"No sample Balances available for exchange {exchangename}")
def test_ccxt_fetch_tickers(self, exchange: EXCHANGE_FIXTURE_TYPE): def test_ccxt_fetch_tickers(self, exchange: EXCHANGE_FIXTURE_TYPE):
exch, _, exchange_params = exchange exch, exchangename, exchange_params = exchange
pair = exchange_params["pair"] pair = exchange_params["pair"]
if exchangename == "okx":
# TODO: re-enable test once ccxt has this fixed.
pytest.skip("OKX fetch_tickers is currently broken, skipping test")
tickers = exch.get_tickers() tickers = exch.get_tickers()
assert pair in tickers assert pair in tickers
assert "ask" in tickers[pair] assert "ask" in tickers[pair]
+38
View File
@@ -1471,6 +1471,44 @@ def test_api_historic_balance(botclient, mocker, ticker, fee, markets, is_short)
assert "total_quote" in resp1["columns"] assert "total_quote" in resp1["columns"]
def test_api_historic_balance_int_bot_managed(botclient, mocker):
"""
read_sql may return the wallet_history `bot_managed` column as an
integer (e.g. MySQL/MariaDB TINYINT)
"""
_, client = botclient
# Single row: with an int64 `bot_managed`
one_row = pd.DataFrame(
{
"timestamp": pd.to_datetime(["2024-01-01"]),
"total_quote": [100.0],
"bot_managed": [1],
}
).astype({"bot_managed": "int64"})
mocker.patch("freqtrade.rpc.rpc.read_sql", return_value=one_row)
rc = client_get(client, f"{BASE_URI}/historic_balance")
assert_response(rc, 200)
assert rc.json()["length"] == 1
assert rc.json()["data"][0][0] == "2024-01-01T00:00:00"
assert rc.json()["data"][0][2] == 100.0
# Mixed rows: the non-bot-managed row (bot_managed=0) must be excluded.
two_rows = pd.DataFrame(
{
"timestamp": pd.to_datetime(["2024-01-01", "2024-01-02"]),
"total_quote": [100.0, 200.0],
"bot_managed": [0, 1],
}
).astype({"bot_managed": "int64"})
mocker.patch("freqtrade.rpc.rpc.read_sql", return_value=two_rows)
rc = client_get(client, f"{BASE_URI}/historic_balance")
assert_response(rc, 200)
assert rc.json()["length"] == 1
assert rc.json()["data"][0][0] == "2024-01-02T00:00:00"
assert rc.json()["data"][0][2] == 200.0
def test_api_performance(botclient, fee): def test_api_performance(botclient, fee):
ftbot, client = botclient ftbot, client = botclient
patch_get_signal(ftbot) patch_get_signal(ftbot)
+1 -1
View File
@@ -531,7 +531,7 @@ def test_strategy_interface_versioning(dataframe_1m, default_conf):
assert "exit_long" in exitdf assert "exit_long" in exitdf
def test_strategy_ft_load_params_from_file(mocker, default_conf): def test_strategy_ft_set_special_params_from_file(mocker, default_conf):
default_conf.update({"strategy": "StrategyTestV2"}) default_conf.update({"strategy": "StrategyTestV2"})
del default_conf["max_open_trades"] del default_conf["max_open_trades"]
mocker.patch( mocker.patch(
+2 -2
View File
@@ -230,7 +230,7 @@ def test_deep_merge_dicts():
def test_dataframe_json(ohlcv_history): def test_dataframe_json(ohlcv_history):
from pandas.testing import assert_frame_equal from pandas.testing import assert_frame_equal
json = dataframe_to_json(ohlcv_history) json = dataframe_to_json(ohlcv_history.copy())
dataframe = json_to_dataframe(json) dataframe = json_to_dataframe(json)
assert list(ohlcv_history.columns) == list(dataframe.columns) assert list(ohlcv_history.columns) == list(dataframe.columns)
@@ -238,6 +238,6 @@ def test_dataframe_json(ohlcv_history):
assert_frame_equal(ohlcv_history, dataframe) assert_frame_equal(ohlcv_history, dataframe)
ohlcv_history.at[1, "date"] = pd.NaT ohlcv_history.at[1, "date"] = pd.NaT
json = dataframe_to_json(ohlcv_history) json = dataframe_to_json(ohlcv_history.copy())
dataframe = json_to_dataframe(json) dataframe = json_to_dataframe(json)