Compare commits

...

590 Commits

Author SHA1 Message Date
Matthias
a23409b72f Merge pull request #11436 from freqtrade/new_release
New release 2025.2
2025-02-28 10:33:14 +01:00
Matthias
186bc4d272 chore: bump version to 2025.2 2025-02-28 06:30:43 +01:00
Matthias
06fd176286 Merge branch 'stable' into develop 2025-02-28 06:30:27 +01:00
Matthias
c5fd6f4519 Merge pull request #11432 from freqtrade/update/pre-commit-hooks
Update pre-commit hooks
2025-02-27 07:25:48 +01:00
Freqtrade Bot
efe0275ae1 chore: update pre-commit hooks 2025-02-27 05:50:03 +00:00
Matthias
ba98f1a9be chore: update pre-commit author to freqtradeBot 2025-02-27 06:49:19 +01:00
Matthias
5380b22729 chore: update leverage tiers author to use the bot email 2025-02-27 06:48:54 +01:00
Matthias
338bc7c677 chore: Bump docker image to 3.12.9 2025-02-27 06:33:05 +01:00
Matthias
449a5e85b4 Merge pull request #11431 from freqtrade/update/binance-leverage-tiers
Update Binance Leverage Tiers
2025-02-27 06:20:15 +01:00
xmatthias
0f5cb87c65 chore: update pre-commit hooks 2025-02-27 03:08:16 +00:00
Matthias
822e7bad1f Merge pull request #11426 from freqtrade/update/pre-commit-hooks
Update pre-commit hooks
2025-02-25 06:23:10 +01:00
xmatthias
86a5240174 chore: update pre-commit hooks 2025-02-25 03:08:51 +00:00
Matthias
7b7c8d9374 chore(deps): bump ccxt from 4.4.61 to 4.4.62
closes #11405
2025-02-24 19:51:54 +01:00
Matthias
fde3547dbb docs: add warning about duplicate symbols in coingecko 2025-02-24 18:06:52 +01:00
Matthias
9bd7fac86f Merge pull request #11424 from freqtrade/dependabot/pip/develop/pyarrow-19.0.1
chore(deps): bump pyarrow from 19.0.0 to 19.0.1
2025-02-24 09:57:58 +01:00
Matthias
8085d8cd00 chore: update prebuilt pyarrow binary 2025-02-24 09:40:06 +01:00
Matthias
3f656a9758 Merge pull request #11421 from freqtrade/dependabot/pip/develop/humanize-4.12.1
chore(deps): bump humanize from 4.12.0 to 4.12.1
2025-02-24 08:12:28 +01:00
Matthias
38f1981d6f Merge pull request #11412 from freqtrade/feat/adjust_order_price
Add adjust_order_price callback
2025-02-24 07:02:27 +01:00
Matthias
d55b3e0228 Merge pull request #11420 from freqtrade/dependabot/pip/develop/ccxt-4.4.61
chore(deps): bump ccxt from 4.4.59 to 4.4.61
2025-02-24 06:55:12 +01:00
Matthias
d3f8bef2ef Merge pull request #11422 from freqtrade/dependabot/pip/develop/ruff-0.9.7
chore(deps-dev): bump ruff from 0.9.6 to 0.9.7
2025-02-24 06:45:43 +01:00
dependabot[bot]
f78f52f78e chore(deps): bump humanize from 4.12.0 to 4.12.1
Bumps [humanize](https://github.com/python-humanize/humanize) from 4.12.0 to 4.12.1.
- [Release notes](https://github.com/python-humanize/humanize/releases)
- [Commits](https://github.com/python-humanize/humanize/compare/4.12.0...4.12.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-24 05:26:05 +00:00
Matthias
d451dcf28b Merge pull request #11419 from freqtrade/dependabot/pip/develop/mkdocs-ab7c602706
chore(deps): bump mkdocs-material from 9.6.4 to 9.6.5 in the mkdocs group
2025-02-24 06:25:31 +01:00
Matthias
063964ed38 Merge pull request #11423 from freqtrade/dependabot/pip/develop/cachetools-5.5.2
chore(deps): bump cachetools from 5.5.1 to 5.5.2
2025-02-24 06:24:15 +01:00
dependabot[bot]
ac70d559a4 chore(deps): bump pyarrow from 19.0.0 to 19.0.1
Bumps [pyarrow](https://github.com/apache/arrow) from 19.0.0 to 19.0.1.
- [Release notes](https://github.com/apache/arrow/releases)
- [Commits](https://github.com/apache/arrow/compare/apache-arrow-19.0.0...apache-arrow-19.0.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-24 03:24:23 +00:00
dependabot[bot]
685e575f6b chore(deps): bump cachetools from 5.5.1 to 5.5.2
Bumps [cachetools](https://github.com/tkem/cachetools) from 5.5.1 to 5.5.2.
- [Changelog](https://github.com/tkem/cachetools/blob/master/CHANGELOG.rst)
- [Commits](https://github.com/tkem/cachetools/compare/v5.5.1...v5.5.2)

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

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-24 03:24:18 +00:00
dependabot[bot]
1640267798 chore(deps-dev): bump ruff from 0.9.6 to 0.9.7
Bumps [ruff](https://github.com/astral-sh/ruff) from 0.9.6 to 0.9.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.9.6...0.9.7)

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

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-24 03:24:14 +00:00
dependabot[bot]
d5585dd5e3 chore(deps): bump ccxt from 4.4.59 to 4.4.61
Bumps [ccxt](https://github.com/ccxt/ccxt) from 4.4.59 to 4.4.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/go/v4.4.59...go/v4.4.61)

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

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-24 03:23:46 +00:00
dependabot[bot]
90e2db708e 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.6.4 to 9.6.5
- [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.6.4...9.6.5)

---
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>
2025-02-24 03:23:30 +00:00
Matthias
64303e90d6 feat: Be more verbose on startup regarding what the bot is doing
closes #11416
2025-02-23 17:16:46 +01:00
Matthias
901dfa21fc Merge pull request #11418 from Cygra/patch-1
fix: typo in strategy-customization.md
2025-02-23 16:24:55 +01:00
Cygra Wang
5e7d883732 fix: typo in strategy-customization.md 2025-02-23 15:11:05 +08:00
Matthias
840f074c66 chore: simplify rpc imports 2025-02-22 12:50:51 +01:00
Matthias
0408ad1095 fix: exception when rounded price is nan
closes #11414
2025-02-22 08:21:24 +01:00
Matthias
e262110c3b test: add test case for #11414 2025-02-22 08:19:38 +01:00
Matthias
09b9ff2c68 fix: provide default for exit reason 2025-02-20 20:32:51 +01:00
Matthias
e76574b79f docs: update documentation for adjust_order_price() 2025-02-20 20:25:35 +01:00
Matthias
08587d826e test: Long adjust-exit-price test 2025-02-20 20:07:44 +01:00
Matthias
584b84a941 test: extend backtest-detail tests for exit_adjust 2025-02-20 20:02:18 +01:00
Matthias
44182783c0 feat: don't limit backtest calls to entry orders 2025-02-20 20:02:03 +01:00
Matthias
90f52ba8ad test: add integration test for adjust_exit_price 2025-02-20 19:45:34 +01:00
Matthias
f8f10f27e9 chore: improved variable naming 2025-02-20 19:39:33 +01:00
Matthias
7f393252e2 docs: update bot-basics with new callback 2025-02-20 19:24:03 +01:00
Matthias
dd8938ced2 test: add test for adjust_order_price and adjust_entry_price collision 2025-02-20 19:22:03 +01:00
Matthias
67ce9a41f2 feat: implement load error when colliding methods are decected 2025-02-20 19:21:37 +01:00
Matthias
756bada570 feat: Add "replace-exit_order" to backtesting 2025-02-20 19:09:36 +01:00
Matthias
25c0036012 feat: Update strategy template 2025-02-20 07:25:38 +01:00
Matthias
3b03fae939 chore: improve variable naming 2025-02-20 07:24:07 +01:00
Matthias
0f9e61371c feat: Implement live "replace_exit_order" functionality 2025-02-20 07:23:36 +01:00
Matthias
1970cc65c0 feat: add "is_entry" attribute for order_replacement 2025-02-20 07:04:59 +01:00
Matthias
8d74e8b8dd feat: add adjust_order_price callback 2025-02-20 06:55:54 +01:00
Matthias
fc4e09f398 Merge pull request #11404 from freqtrade/update/binance-leverage-tiers
Update Binance Leverage Tiers
2025-02-20 06:35:26 +01:00
xmatthias
a45d941b11 chore: update pre-commit hooks 2025-02-20 03:05:52 +00:00
Matthias
39fd27c7ec Merge pull request #11396 from freqtrade/fix/constant_exit_cancels
Fix constant exit cancels and replacements
2025-02-18 19:43:54 +01:00
Matthias
fa939a7f66 Merge pull request #11399 from freqtrade/update/pre-commit-hooks
Update pre-commit hooks
2025-02-18 06:36:19 +01:00
xmatthias
6fc81fa9c7 chore: update pre-commit hooks 2025-02-18 03:04:55 +00:00
Matthias
89cd46d2e5 test: adapt test for "evaluate exit signal once once" behavior 2025-02-17 20:00:44 +01:00
Matthias
f287d0ad24 chore: improve variable naming 2025-02-17 20:00:27 +01:00
Matthias
93e3bbea5a fix: only evaluate the same exit-reason once
Limit this behavior to if it caused an actual exit.
2025-02-17 19:51:39 +01:00
Matthias
6be25bd86a chore: simplify IF condition 2025-02-17 19:40:56 +01:00
Matthias
ec82894990 Merge pull request #11390 from freqtrade/dependabot/pip/develop/cryptography-44.0.1
chore(deps): bump cryptography from 42.0.8 to 44.0.1
2025-02-17 08:20:57 +01:00
Matthias
ea1b7c692a Merge pull request #11384 from freqtrade/dependabot/pip/develop/websockets-15.0
chore(deps): bump websockets from 14.2 to 15.0
2025-02-17 08:04:01 +01:00
Matthias
0e08173235 Merge pull request #11394 from freqtrade/dependabot/pip/develop/lightgbm-4.6.0
chore(deps): bump lightgbm from 4.5.0 to 4.6.0
2025-02-17 07:46:26 +01:00
Matthias
cdf33761c0 Merge pull request #11383 from freqtrade/dependabot/pip/develop/mkdocs-f2d694b1ef
chore(deps): bump mkdocs-material from 9.6.3 to 9.6.4 in the mkdocs group
2025-02-17 07:11:37 +01:00
Matthias
63ca07aeac chore: bump cryptography for armv7
Starting with 44.0.0, cryptography provides wheels for armv7.

Testing these, it installs fine on the rpi image, so the split hard pin can be removed.
2025-02-17 06:52:30 +01:00
Matthias
5022407021 Merge pull request #11392 from freqtrade/dependabot/pip/develop/psutil-7.0.0
chore(deps): bump psutil from 6.1.1 to 7.0.0
2025-02-17 06:51:50 +01:00
dependabot[bot]
f54b7d56d3 chore(deps): bump lightgbm from 4.5.0 to 4.6.0
Bumps [lightgbm](https://github.com/microsoft/LightGBM) from 4.5.0 to 4.6.0.
- [Release notes](https://github.com/microsoft/LightGBM/releases)
- [Commits](https://github.com/microsoft/LightGBM/compare/v4.5.0...v4.6.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-17 05:30:51 +00:00
dependabot[bot]
382befb053 chore(deps): bump cryptography from 42.0.8 to 44.0.1
Bumps [cryptography](https://github.com/pyca/cryptography) from 42.0.8 to 44.0.1.
- [Changelog](https://github.com/pyca/cryptography/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/pyca/cryptography/compare/42.0.8...44.0.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-17 05:30:25 +00:00
Matthias
11404ef230 Merge pull request #11385 from freqtrade/dependabot/pip/develop/scipy-1.15.2
chore(deps): bump scipy from 1.15.1 to 1.15.2
2025-02-17 06:29:32 +01:00
Matthias
8964cfc123 Merge pull request #11391 from freqtrade/dependabot/pip/develop/humanize-4.12.0
chore(deps): bump humanize from 4.11.0 to 4.12.0
2025-02-17 06:28:45 +01:00
Matthias
ec97723c54 Merge pull request #11386 from freqtrade/dependabot/pip/develop/tensorboard-2.19.0
chore(deps): bump tensorboard from 2.18.0 to 2.19.0
2025-02-17 06:28:19 +01:00
Matthias
4cfbcefb33 Merge pull request #11388 from freqtrade/dependabot/pip/develop/ccxt-4.4.59
chore(deps): bump ccxt from 4.4.58 to 4.4.59
2025-02-17 06:27:48 +01:00
Matthias
1f575d95e6 Merge pull request #11389 from freqtrade/dependabot/pip/develop/ruff-0.9.6
chore(deps-dev): bump ruff from 0.9.5 to 0.9.6
2025-02-17 06:26:59 +01:00
dependabot[bot]
d4900c28e1 chore(deps): bump psutil from 6.1.1 to 7.0.0
Bumps [psutil](https://github.com/giampaolo/psutil) from 6.1.1 to 7.0.0.
- [Changelog](https://github.com/giampaolo/psutil/blob/master/HISTORY.rst)
- [Commits](https://github.com/giampaolo/psutil/compare/release-6.1.1...release-7.0.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-17 03:27:29 +00:00
dependabot[bot]
f12964f543 chore(deps): bump humanize from 4.11.0 to 4.12.0
Bumps [humanize](https://github.com/python-humanize/humanize) from 4.11.0 to 4.12.0.
- [Release notes](https://github.com/python-humanize/humanize/releases)
- [Commits](https://github.com/python-humanize/humanize/compare/4.11.0...4.12.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-17 03:27:25 +00:00
dependabot[bot]
c339853ec0 chore(deps-dev): bump ruff from 0.9.5 to 0.9.6
Bumps [ruff](https://github.com/astral-sh/ruff) from 0.9.5 to 0.9.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.9.5...0.9.6)

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

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-17 03:27:13 +00:00
dependabot[bot]
3924514d2b chore(deps): bump ccxt from 4.4.58 to 4.4.59
Bumps [ccxt](https://github.com/ccxt/ccxt) from 4.4.58 to 4.4.59.
- [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/go/v4.4.58...go/v4.4.59)

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

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-17 03:27:04 +00:00
dependabot[bot]
aae92c29db chore(deps): bump tensorboard from 2.18.0 to 2.19.0
Bumps [tensorboard](https://github.com/tensorflow/tensorboard) from 2.18.0 to 2.19.0.
- [Release notes](https://github.com/tensorflow/tensorboard/releases)
- [Changelog](https://github.com/tensorflow/tensorboard/blob/2.19.0/RELEASE.md)
- [Commits](https://github.com/tensorflow/tensorboard/compare/2.18.0...2.19.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-17 03:26:45 +00:00
dependabot[bot]
5683063379 chore(deps): bump scipy from 1.15.1 to 1.15.2
Bumps [scipy](https://github.com/scipy/scipy) from 1.15.1 to 1.15.2.
- [Release notes](https://github.com/scipy/scipy/releases)
- [Commits](https://github.com/scipy/scipy/compare/v1.15.1...v1.15.2)

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

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-17 03:26:40 +00:00
dependabot[bot]
5ab993b6d5 chore(deps): bump websockets from 14.2 to 15.0
Bumps [websockets](https://github.com/python-websockets/websockets) from 14.2 to 15.0.
- [Release notes](https://github.com/python-websockets/websockets/releases)
- [Commits](https://github.com/python-websockets/websockets/compare/14.2...15.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-17 03:26:30 +00:00
dependabot[bot]
9584f6c549 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.6.3 to 9.6.4
- [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.6.3...9.6.4)

---
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>
2025-02-17 03:26:27 +00:00
Matthias
2a95a3aefe Merge pull request #11306 from Vaadasch/patch-1
Add some distinction on the trailing_only_offset_is_reached
2025-02-16 17:28:24 +01:00
Matthias
4a190bd13c chore(ci): Move permissions into job 2025-02-16 17:03:18 +01:00
Matthias
cf6a89e161 chore: use zizmor to scan actions for security problems 2025-02-16 16:55:44 +01:00
Matthias
a29c5322ab chore(ci): Improve CI security 2025-02-16 16:55:13 +01:00
Matthias
4e2d2639ae fix: dockerfile.armhf should pin numpy<2 2025-02-16 16:48:22 +01:00
Matthias
a54f895ea9 chore(ci): don't persist credentials 2025-02-16 15:31:17 +01:00
Matthias
ad55615ecb chore(ci): Improve structure in devcontainer build 2025-02-16 15:30:47 +01:00
Matthias
c8aff5687d chore(ci): don't persist credentials 2025-02-16 15:30:21 +01:00
Matthias
02c2e451b1 chore(ci): don't persist credentials 2025-02-16 15:29:34 +01:00
Matthias
84d49a0f53 chore: disable all permissions on dockerhub permission update ci 2025-02-16 15:25:01 +01:00
Matthias
22b096be25 chore: Improve security of workflows 2025-02-16 15:24:23 +01:00
Matthias
b285cdd491 doc: add timeframe to 101 strategy so it's "auto-runnable"
closes #11379
2025-02-16 15:11:14 +01:00
Matthias
b2881affc0 fix: accidental modification 2025-02-16 15:09:02 +01:00
Matthias
b3e0b42155 test: add test for backtest-from_json 2025-02-16 13:27:48 +01:00
Matthias
314c017dd3 feat: enable trade.from_json to import backtested trades 2025-02-16 13:27:42 +01:00
Matthias
f14c4ebcc8 chore: improve code structure in logging module 2025-02-15 08:24:35 +01:00
Robert Caulk
c3c6207cda Merge pull request #11368 from freqtrade/fix/nan_metadata
Allow NAN in Freqai datadrawer metadata
2025-02-13 13:46:36 +01:00
Matthias
8a5ff4ed0d Merge pull request #11373 from freqtrade/update/binance-leverage-tiers
Update Binance Leverage Tiers
2025-02-13 06:33:55 +01:00
xmatthias
7d19e0e692 chore: update pre-commit hooks 2025-02-13 03:05:01 +00:00
Matthias
e3a9b0aa17 Merge pull request #11371 from freqtrade/dependabot/pip/develop/ccxt-4.4.58
chore(deps): bump ccxt from 4.4.52 to 4.4.58
2025-02-12 06:23:01 +01:00
dependabot[bot]
7caa22c7a7 chore(deps): bump ccxt from 4.4.52 to 4.4.58
Bumps [ccxt](https://github.com/ccxt/ccxt) from 4.4.52 to 4.4.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.4.52...go/v4.4.58)

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

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-11 20:13:52 +00:00
Matthias
91131d7884 Merge pull request #11370 from freqtrade/dependabot/pip/cryptography-44.0.1
chore(deps): bump cryptography from 42.0.8 to 44.0.1
2025-02-11 21:12:25 +01:00
dependabot[bot]
967ad2f8ff chore(deps): bump cryptography from 42.0.8 to 44.0.1
Bumps [cryptography](https://github.com/pyca/cryptography) from 42.0.8 to 44.0.1.
- [Changelog](https://github.com/pyca/cryptography/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/pyca/cryptography/compare/42.0.8...44.0.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-11 18:41:14 +00:00
Matthias
d00f82a641 chore: remove deprecated image form CI matrix 2025-02-11 18:15:16 +01:00
Matthias
2f83f07fd3 fix: use constant for metadata number mode 2025-02-11 09:22:39 +01:00
Matthias
78d213a8a0 test: add test coverage for unwatch_ohlcv 2025-02-11 09:15:03 +01:00
Matthias
44d798239d feat: unwatch_ohlcv - improved error handling 2025-02-11 09:15:03 +01:00
Matthias
08e1a616a0 feat: use unwatch to stop watching a websocket 2025-02-11 09:14:57 +01:00
Matthias
8009c03629 Merge pull request #11117 from arenstar/ftclient_timeout
feat: add timeout to FtRestClient
2025-02-11 08:09:45 +01:00
Matthias
ae068bd6f5 chore: fix formatting 2025-02-11 07:53:33 +01:00
Matthias
2350aa6a27 Merge branch 'develop' into ftclient_timeout 2025-02-11 07:52:25 +01:00
Matthias
8394826d62 docs: improve wording in trailing stop docs 2025-02-11 07:21:24 +01:00
Matthias
a46d41a594 Merge pull request #11367 from freqtrade/update/pre-commit-hooks
Update pre-commit hooks
2025-02-11 06:39:25 +01:00
xmatthias
a0d8055917 chore: update pre-commit hooks 2025-02-11 03:06:02 +00:00
Matthias
3ec892a5ab Merge pull request #11355 from freqtrade/dependabot/pip/develop/ta-lib-0.6.2
chore(deps): bump ta-lib from 0.4.34 to 0.4.38
2025-02-10 10:53:09 +01:00
Matthias
3deffb57ce chore: update ta-lib pre-built binaries 2025-02-10 08:25:01 +01:00
Matthias
db8c1917e0 Merge pull request #11360 from freqtrade/dependabot/pip/develop/mypy-1.15.0
chore(deps-dev): bump mypy from 1.14.1 to 1.15.0
2025-02-10 07:57:42 +01:00
Matthias
57f55d416c Merge pull request #11357 from freqtrade/dependabot/pip/develop/sqlalchemy-2.0.38
chore(deps): bump sqlalchemy from 2.0.37 to 2.0.38
2025-02-10 07:35:26 +01:00
dependabot[bot]
0b4a6e7e11 chore(deps-dev): bump mypy from 1.14.1 to 1.15.0
Bumps [mypy](https://github.com/python/mypy) from 1.14.1 to 1.15.0.
- [Changelog](https://github.com/python/mypy/blob/master/CHANGELOG.md)
- [Commits](https://github.com/python/mypy/compare/v1.14.1...v1.15.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-10 05:57:49 +00:00
Matthias
f918a66292 Merge pull request #11359 from freqtrade/dependabot/pip/develop/ruff-0.9.5
chore(deps-dev): bump ruff from 0.9.4 to 0.9.5
2025-02-10 06:56:44 +01:00
Matthias
d795af5921 chore: bump sqlalchemy in pre-commit config 2025-02-10 06:36:25 +01:00
Matthias
21b8982e55 chore: ta-lib bump to 0.4.38 2025-02-10 06:34:07 +01:00
Matthias
5a9f66e6d6 Merge pull request #11351 from freqtrade/dependabot/pip/develop/mkdocs-694d3e3e45
chore(deps): bump mkdocs-material from 9.6.1 to 9.6.3 in the mkdocs group
2025-02-10 06:30:34 +01:00
Matthias
4fd77e7ee7 Merge pull request #11356 from freqtrade/dependabot/pip/develop/xgboost-2.1.4
chore(deps): bump xgboost from 2.1.3 to 2.1.4
2025-02-10 06:30:22 +01:00
dependabot[bot]
428ca972e2 chore(deps-dev): bump ruff from 0.9.4 to 0.9.5
Bumps [ruff](https://github.com/astral-sh/ruff) from 0.9.4 to 0.9.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.9.4...0.9.5)

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

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-10 03:28:24 +00:00
dependabot[bot]
3913e4fa96 chore(deps): bump sqlalchemy from 2.0.37 to 2.0.38
Bumps [sqlalchemy](https://github.com/sqlalchemy/sqlalchemy) from 2.0.37 to 2.0.38.
- [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>
2025-02-10 03:27:58 +00:00
dependabot[bot]
e296242072 chore(deps): bump xgboost from 2.1.3 to 2.1.4
Bumps [xgboost](https://github.com/dmlc/xgboost) from 2.1.3 to 2.1.4.
- [Release notes](https://github.com/dmlc/xgboost/releases)
- [Changelog](https://github.com/dmlc/xgboost/blob/master/NEWS.md)
- [Commits](https://github.com/dmlc/xgboost/compare/v2.1.3...v2.1.4)

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

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-10 03:27:46 +00:00
dependabot[bot]
82001d1e8b chore(deps): bump ta-lib from 0.4.34 to 0.6.2
Bumps [ta-lib](https://github.com/ta-lib/ta-lib-python) from 0.4.34 to 0.6.2.
- [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.34...TA_Lib-0.6.2)

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

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-10 03:27:40 +00:00
dependabot[bot]
137bfc2b56 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.6.1 to 9.6.3
- [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.6.1...9.6.3)

---
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>
2025-02-10 03:27:15 +00:00
Matthias
a8ae767576 fix: Hyperopt-magic - allow parent classes within the same file 2025-02-09 19:48:26 +01:00
Matthias
b9c77124fc chore: add typing for hyperopt-pickle-magic 2025-02-09 19:43:32 +01:00
Matthias
f060548134 chore: remove unused method 2025-02-09 08:10:10 +01:00
Matthias
18ce8af084 fix: validate config when calling pair_history
closes #11271
2025-02-08 16:51:51 +01:00
Matthias
7f7cff85c1 chore: use dt_now in backtesting 2025-02-07 20:39:14 +01:00
Matthias
9a22e5c775 chore: try downgrade aiohttp
part of #11317
2025-02-07 06:56:42 +01:00
Matthias
2cfb8834b6 chore: rework docstring of MultiOutputRegressor
closes #11309
2025-02-06 06:34:19 +01:00
Matthias
013006050f chore: add comment to clarify usage of retrier 2025-02-06 06:33:55 +01:00
Matthias
99df346bf5 Merge pull request #11339 from freqtrade/update/binance-leverage-tiers
Update Binance Leverage Tiers
2025-02-06 06:30:49 +01:00
xmatthias
2e57158556 chore: update pre-commit hooks 2025-02-06 03:04:59 +00:00
Matthias
b75eb85e66 fix: Calculate liquidation price only once the initial order filled
closes #11318
2025-02-05 18:13:52 +01:00
Matthias
dbb9f225d0 fix: Runtime error on ohlcv deepcopy
closes #11335
2025-02-05 18:07:03 +01:00
Matthias
85753be7cb chore: Bump armhf dockerversion to 3.11.11 2025-02-05 07:02:44 +01:00
Matthias
18b35b0657 chore: bump dockerfile base from 3.12.7 to 3.12.8 2025-02-05 07:01:59 +01:00
Matthias
857aeaa9eb chore: fix init sequence to avoid risk of "unbound error" 2025-02-04 19:34:26 +01:00
Matthias
3e06971038 Merge pull request #11333 from freqtrade/update/pre-commit-hooks
Update pre-commit hooks
2025-02-04 06:47:37 +01:00
Matthias
323b9f8693 fix(api): only write export when backtest happened
closes freqtrade/frequi#2282
2025-02-04 06:35:37 +01:00
xmatthias
a412ff76bc chore: update pre-commit hooks 2025-02-04 03:03:58 +00:00
Matthias
2bfd66d271 chore: use loop_lock for all run_until_complete usages 2025-02-03 19:43:08 +01:00
Matthias
8cad9c8436 chore: add improved exception logging 2025-02-03 19:43:08 +01:00
Matthias
3504073428 fix: random fail on parallel webserver requests 2025-02-03 19:43:08 +01:00
Matthias
b4af89380b Merge pull request #11326 from freqtrade/dependabot/pip/develop/torch-2.6.0
chore(deps): bump torch from 2.5.1 to 2.6.0
2025-02-03 19:40:45 +01:00
Matthias
c131493eca Merge pull request #11328 from freqtrade/dependabot/pip/develop/stable-baselines3-2.5.0
chore(deps): bump stable-baselines3 from 2.4.1 to 2.5.0
2025-02-03 11:55:31 +01:00
Matthias
37031ba83d chore: pin sb3 for macos x86 2025-02-03 11:13:36 +01:00
Matthias
69106633cd Merge pull request #11331 from freqtrade/dependabot/pip/develop/fastapi-0.115.8
chore(deps): bump fastapi from 0.115.7 to 0.115.8
2025-02-03 09:42:17 +01:00
Matthias
a2e674b237 Merge pull request #11329 from freqtrade/dependabot/pip/develop/isort-6.0.0
chore(deps-dev): bump isort from 5.13.2 to 6.0.0
2025-02-03 09:20:38 +01:00
Matthias
c1c9f0151e Merge pull request #11332 from freqtrade/dependabot/pip/develop/pymdown-extensions-10.14.3
chore(deps): bump pymdown-extensions from 10.14.1 to 10.14.3
2025-02-03 08:01:03 +01:00
Matthias
963ec23ae2 Merge pull request #11330 from freqtrade/dependabot/pip/develop/plotly-6.0.0
chore(deps): bump plotly from 5.24.1 to 6.0.0
2025-02-03 07:14:18 +01:00
dependabot[bot]
0c35f3a47a chore(deps): bump pymdown-extensions from 10.14.1 to 10.14.3
Bumps [pymdown-extensions](https://github.com/facelessuser/pymdown-extensions) from 10.14.1 to 10.14.3.
- [Release notes](https://github.com/facelessuser/pymdown-extensions/releases)
- [Commits](https://github.com/facelessuser/pymdown-extensions/compare/10.14.1...10.14.3)

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

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-03 05:58:16 +00:00
Matthias
f4fdcfc78d Merge pull request #11323 from freqtrade/dependabot/pip/develop/ccxt-4.4.52
chore(deps): bump ccxt from 4.4.50 to 4.4.52
2025-02-03 06:57:17 +01:00
Matthias
97c67d55c6 Merge pull request #11322 from freqtrade/dependabot/pip/develop/mkdocs-03e80ceb70
chore(deps): bump mkdocs-material from 9.5.50 to 9.6.1 in the mkdocs group
2025-02-03 06:53:46 +01:00
Matthias
9983b44e6f Merge pull request #11325 from freqtrade/dependabot/pip/develop/pytz-2025.1
chore(deps): bump pytz from 2024.2 to 2025.1
2025-02-03 06:53:05 +01:00
dependabot[bot]
78bf9bf60d chore(deps-dev): bump isort from 5.13.2 to 6.0.0
Bumps [isort](https://github.com/pycqa/isort) from 5.13.2 to 6.0.0.
- [Release notes](https://github.com/pycqa/isort/releases)
- [Changelog](https://github.com/PyCQA/isort/blob/main/CHANGELOG.md)
- [Commits](https://github.com/pycqa/isort/compare/5.13.2...6.0.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-03 05:44:16 +00:00
Matthias
9d22dac28d Merge pull request #11327 from freqtrade/dependabot/pip/develop/nbconvert-7.16.6
chore(deps-dev): bump nbconvert from 7.16.5 to 7.16.6
2025-02-03 06:34:17 +01:00
Matthias
37e16acc80 Merge pull request #11324 from freqtrade/dependabot/pip/develop/ruff-0.9.4
chore(deps-dev): bump ruff from 0.9.3 to 0.9.4
2025-02-03 06:23:55 +01:00
Matthias
6d5cd69764 Merge pull request #11321 from freqtrade/dependabot/pip/develop/pytest-ccc7fb3faf
chore(deps-dev): bump pytest-asyncio from 0.25.2 to 0.25.3 in the pytest group
2025-02-03 06:23:43 +01:00
dependabot[bot]
3a8c594ae8 chore(deps): bump fastapi from 0.115.7 to 0.115.8
Bumps [fastapi](https://github.com/fastapi/fastapi) from 0.115.7 to 0.115.8.
- [Release notes](https://github.com/fastapi/fastapi/releases)
- [Commits](https://github.com/fastapi/fastapi/compare/0.115.7...0.115.8)

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

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-03 03:30:46 +00:00
dependabot[bot]
5f72ed9b3c chore(deps): bump plotly from 5.24.1 to 6.0.0
Bumps [plotly](https://github.com/plotly/plotly.py) from 5.24.1 to 6.0.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.24.1...v6.0.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-03 03:30:42 +00:00
dependabot[bot]
bee897f5b7 chore(deps): bump stable-baselines3 from 2.4.1 to 2.5.0
Bumps [stable-baselines3](https://github.com/DLR-RM/stable-baselines3) from 2.4.1 to 2.5.0.
- [Release notes](https://github.com/DLR-RM/stable-baselines3/releases)
- [Commits](https://github.com/DLR-RM/stable-baselines3/compare/v2.4.1...v2.5.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>
2025-02-03 03:30:27 +00:00
dependabot[bot]
75542cdd93 chore(deps-dev): bump nbconvert from 7.16.5 to 7.16.6
Bumps [nbconvert](https://github.com/jupyter/nbconvert) from 7.16.5 to 7.16.6.
- [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.5...v7.16.6)

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

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-03 03:30:24 +00:00
dependabot[bot]
97da78c499 chore(deps): bump torch from 2.2.2 to 2.6.0
Bumps [torch](https://github.com/pytorch/pytorch) from 2.2.2 to 2.6.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.6.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-03 03:30:20 +00:00
dependabot[bot]
d8d35ec234 chore(deps): bump pytz from 2024.2 to 2025.1
Bumps [pytz](https://github.com/stub42/pytz) from 2024.2 to 2025.1.
- [Release notes](https://github.com/stub42/pytz/releases)
- [Commits](https://github.com/stub42/pytz/compare/release_2024.2...release_2025.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-03 03:30:10 +00:00
dependabot[bot]
86d65f8428 chore(deps-dev): bump ruff from 0.9.3 to 0.9.4
Bumps [ruff](https://github.com/astral-sh/ruff) from 0.9.3 to 0.9.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.9.3...0.9.4)

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

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-03 03:30:06 +00:00
dependabot[bot]
973aa6a0c3 chore(deps): bump ccxt from 4.4.50 to 4.4.52
Bumps [ccxt](https://github.com/ccxt/ccxt) from 4.4.50 to 4.4.52.
- [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.50...4.4.52)

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

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-03 03:29:58 +00:00
dependabot[bot]
aaab2a1c86 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.50 to 9.6.1
- [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.50...9.6.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-03 03:29:48 +00:00
dependabot[bot]
16924525ff 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.25.2 to 0.25.3
- [Release notes](https://github.com/pytest-dev/pytest-asyncio/releases)
- [Commits](https://github.com/pytest-dev/pytest-asyncio/compare/v0.25.2...v0.25.3)

---
updated-dependencies:
- 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>
2025-02-03 03:29:40 +00:00
Matthias
f1f355330c chore: re-add candle-limit for funding fee candles 2025-02-02 17:15:21 +01:00
Matthias
4c5c054bca fix: since_ms is mandatory 2025-02-02 14:33:45 +01:00
Matthias
0181e00c19 test: add test for /markets endpoint 2025-02-02 14:33:13 +01:00
Matthias
ecf013dd18 feat: include exchangeID in /markets response 2025-02-02 13:30:17 +01:00
Matthias
59837ef6ac feat: add "/markets" endpoint 2025-02-02 13:22:54 +01:00
Matthias
b42a91d783 test: remove unused parameter 2025-02-02 13:17:06 +01:00
Matthias
187c8b8070 test: add test for "live" mode of /pair_history 2025-02-01 18:20:27 +01:00
Matthias
a807d2d6c8 test: Add test for /pair_history without strategy 2025-02-01 18:09:35 +01:00
Matthias
fda7b0f1ef chore: increment api_version 2025-02-01 17:39:40 +01:00
Matthias
ae42f8d512 feat: api /pair_history - make Strategy optional 2025-02-01 17:39:28 +01:00
Matthias
6fb74fa166 feat: add "live_mode" flag to pair_history 2025-02-01 17:25:58 +01:00
Matthias
7dd0f2174c feat: Add "exchange" fields to pair_history 2025-02-01 15:47:33 +01:00
Matthias
e1cc7dcfdf feat: allow pair-history from "live" candles 2025-02-01 15:47:10 +01:00
Matthias
6b3fff6b7e refactor: pair_history should only be available in webserver mode 2025-02-01 14:09:56 +01:00
Matthias
5d4324dd55 test: update percentChange pairlist test
there's little reason to have this test for a particular number
2025-02-01 13:53:14 +01:00
Matthias
fc0cae21e6 fix: improve reliability when fetching from "features" 2025-02-01 13:49:17 +01:00
Matthias
89b6cc89a3 test: update test for removed manual limits 2025-02-01 13:49:04 +01:00
Matthias
26af62e4dd feat: remove manual ohlcv limit definitions where possible 2025-02-01 08:13:33 +01:00
Matthias
f90cd44a9e feat: default ohlcv_limit to ccxt's features definition 2025-02-01 08:12:19 +01:00
Matthias
35f7c97c76 test: add "ohlcv_limit" live test 2025-01-31 18:27:47 +01:00
Matthias
d530527f11 test: add test for exchange.features 2025-01-31 07:03:06 +01:00
Matthias
8af8260b7c feat: initial "features" support 2025-01-31 06:56:41 +01:00
Matthias
7a17cd781a chore: remove coinbasepro exchange
ccxt removed this exchange in https://github.com/ccxt/ccxt/pull/22502.
2025-01-31 06:30:39 +01:00
Matthias
7c8b934c1d Merge pull request #11307 from freqtrade/new_release
New release 2025.1
2025-01-31 06:22:51 +01:00
Matthias
ba244cd2f6 chore: bump develop version to 2025.2 2025-01-30 19:43:51 +01:00
Matthias
10eef02e58 chore: bump version to 2025.1 2025-01-30 19:41:27 +01:00
Matthias
20380b616a Merge branch 'stable' into new_release 2025-01-30 19:41:09 +01:00
Vaadasch
7d3c8b48dd Add some distinction on the trailing_only_offset_is_reached 2025-01-30 14:48:15 +01:00
Matthias
94010287cc Merge pull request #11304 from freqtrade/update/binance-leverage-tiers
Update Binance Leverage Tiers
2025-01-30 06:30:58 +01:00
xmatthias
24ebe1a205 chore: update pre-commit hooks 2025-01-30 03:02:38 +00:00
Matthias
63ca884dbe chore: remove unused import 2025-01-29 19:42:57 +01:00
Matthias
a6005fde28 feat: simplify traceback display
The Rich way to display is confusing and pretty verbose.
2025-01-29 18:21:07 +01:00
Matthias
486a4ed5c0 chore: remove unused fixture 2025-01-28 19:27:50 +01:00
Matthias
fd4cd11de2 test: simplify api_ws_test 2025-01-28 19:27:50 +01:00
Matthias
262cfedfc9 Merge pull request #11302 from freqtrade/update/pre-commit-hooks
Update pre-commit hooks
2025-01-28 06:48:46 +01:00
Matthias
0e807d4a18 chore: fix typo as identified by codespell 2025-01-28 06:29:54 +01:00
xmatthias
de8b3a89fd chore: update pre-commit hooks 2025-01-28 03:03:24 +00:00
Matthias
62e3f408a6 chore: make some internal fetch-trades methods require since 2025-01-27 20:36:14 +01:00
Matthias
9b0beb0e6d Merge pull request #11300 from freqtrade/dependabot/pip/develop/prompt-toolkit-3.0.50
chore(deps): bump prompt-toolkit from 3.0.36 to 3.0.50
2025-01-27 19:13:43 +01:00
Matthias
939e3e4a53 Merge pull request #11299 from freqtrade/dependabot/pip/develop/cachetools-5.5.1
chore(deps): bump cachetools from 5.5.0 to 5.5.1
2025-01-27 08:12:44 +01:00
Matthias
e257589fdb Merge pull request #11298 from freqtrade/dependabot/pip/develop/ccxt-4.4.50
chore(deps): bump ccxt from 4.4.49 to 4.4.50
2025-01-27 08:12:07 +01:00
Matthias
4d00309717 Merge pull request #11297 from freqtrade/dependabot/pip/develop/pydantic-2.10.6
chore(deps): bump pydantic from 2.10.5 to 2.10.6
2025-01-27 08:10:38 +01:00
Matthias
41535bef1f Merge pull request #11296 from freqtrade/dependabot/pip/develop/pre-commit-4.1.0
chore(deps-dev): bump pre-commit from 4.0.1 to 4.1.0
2025-01-27 07:26:03 +01:00
Matthias
ddad3ba616 Merge pull request #11301 from freqtrade/dependabot/github_actions/develop/pypa/gh-action-pypi-publish-1.12.4
chore(deps): bump pypa/gh-action-pypi-publish from 1.12.3 to 1.12.4
2025-01-27 07:05:52 +01:00
Matthias
d70a48970d Merge pull request #11295 from freqtrade/dependabot/pip/develop/filelock-3.17.0
chore(deps): bump filelock from 3.16.1 to 3.17.0
2025-01-27 07:03:14 +01:00
dependabot[bot]
b91deaa0cd chore(deps): bump pydantic from 2.10.5 to 2.10.6
Bumps [pydantic](https://github.com/pydantic/pydantic) from 2.10.5 to 2.10.6.
- [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.10.5...v2.10.6)

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

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-27 05:31:26 +00:00
dependabot[bot]
152705bc62 chore(deps-dev): bump pre-commit from 4.0.1 to 4.1.0
Bumps [pre-commit](https://github.com/pre-commit/pre-commit) from 4.0.1 to 4.1.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.0.1...v4.1.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>
2025-01-27 05:31:08 +00:00
Matthias
f288381a08 Merge pull request #11294 from freqtrade/dependabot/pip/develop/pymdown-extensions-10.14.1
chore(deps): bump pymdown-extensions from 10.14 to 10.14.1
2025-01-27 06:30:35 +01:00
Matthias
cfbc6a524c Merge pull request #11293 from freqtrade/dependabot/pip/develop/fastapi-0.115.7
chore(deps): bump fastapi from 0.115.6 to 0.115.7
2025-01-27 06:30:16 +01:00
Matthias
1495a15563 Merge pull request #11292 from freqtrade/dependabot/pip/develop/ruff-0.9.3
chore(deps-dev): bump ruff from 0.9.2 to 0.9.3
2025-01-27 06:30:00 +01:00
dependabot[bot]
4a582e5ce5 chore(deps): bump pypa/gh-action-pypi-publish from 1.12.3 to 1.12.4
Bumps [pypa/gh-action-pypi-publish](https://github.com/pypa/gh-action-pypi-publish) from 1.12.3 to 1.12.4.
- [Release notes](https://github.com/pypa/gh-action-pypi-publish/releases)
- [Commits](https://github.com/pypa/gh-action-pypi-publish/compare/v1.12.3...v1.12.4)

---
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>
2025-01-27 04:09:13 +00:00
dependabot[bot]
5b06db2529 chore(deps): bump prompt-toolkit from 3.0.36 to 3.0.50
Bumps [prompt-toolkit](https://github.com/prompt-toolkit/python-prompt-toolkit) from 3.0.36 to 3.0.50.
- [Release notes](https://github.com/prompt-toolkit/python-prompt-toolkit/releases)
- [Changelog](https://github.com/prompt-toolkit/python-prompt-toolkit/blob/master/CHANGELOG)
- [Commits](https://github.com/prompt-toolkit/python-prompt-toolkit/compare/3.0.36...3.0.50)

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

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-27 03:37:10 +00:00
dependabot[bot]
8e357934ed chore(deps): bump cachetools from 5.5.0 to 5.5.1
Bumps [cachetools](https://github.com/tkem/cachetools) from 5.5.0 to 5.5.1.
- [Changelog](https://github.com/tkem/cachetools/blob/master/CHANGELOG.rst)
- [Commits](https://github.com/tkem/cachetools/compare/v5.5.0...v5.5.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-27 03:37:05 +00:00
dependabot[bot]
223ea8acec chore(deps): bump ccxt from 4.4.49 to 4.4.50
Bumps [ccxt](https://github.com/ccxt/ccxt) from 4.4.49 to 4.4.50.
- [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.49...4.4.50)

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

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-27 03:36:58 +00:00
dependabot[bot]
567a4f9aad chore(deps): bump filelock from 3.16.1 to 3.17.0
Bumps [filelock](https://github.com/tox-dev/py-filelock) from 3.16.1 to 3.17.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.16.1...3.17.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-27 03:36:41 +00:00
dependabot[bot]
997f914d56 chore(deps): bump pymdown-extensions from 10.14 to 10.14.1
Bumps [pymdown-extensions](https://github.com/facelessuser/pymdown-extensions) from 10.14 to 10.14.1.
- [Release notes](https://github.com/facelessuser/pymdown-extensions/releases)
- [Commits](https://github.com/facelessuser/pymdown-extensions/compare/10.14...10.14.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-27 03:36:32 +00:00
dependabot[bot]
4a9483c669 chore(deps): bump fastapi from 0.115.6 to 0.115.7
Bumps [fastapi](https://github.com/fastapi/fastapi) from 0.115.6 to 0.115.7.
- [Release notes](https://github.com/fastapi/fastapi/releases)
- [Commits](https://github.com/fastapi/fastapi/compare/0.115.6...0.115.7)

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

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-27 03:36:28 +00:00
dependabot[bot]
319ea1072d chore(deps-dev): bump ruff from 0.9.2 to 0.9.3
Bumps [ruff](https://github.com/astral-sh/ruff) from 0.9.2 to 0.9.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.9.2...0.9.3)

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

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-27 03:36:22 +00:00
Matthias
33eaa4b53e chore: add bt note to _generic_performance_query 2025-01-26 23:23:45 +01:00
Matthias
cf563c1a56 test: update tests for new best-pair logic 2025-01-26 23:19:35 +01:00
Matthias
99b2857d3d fix: align profit calculations between best pair and /performance
part of #11236
2025-01-26 20:16:27 +01:00
Matthias
eb24d11259 chore: improve method docstring 2025-01-26 20:11:01 +01:00
Matthias
f9d4d38523 fix: only consider filled orders 2025-01-26 20:07:00 +01:00
Matthias
b01de10ab2 test: adjust further tests 2025-01-26 20:04:28 +01:00
Matthias
fa4a540f9e test: adjust tests for new performance calculation 2025-01-26 19:56:29 +01:00
Matthias
4ee875ce2a fix: use properly calculated relative ratio for /entries and /exits 2025-01-26 19:49:34 +01:00
Matthias
78c71cdf87 refactor: make performance_query work in a dynamic way 2025-01-26 19:43:39 +01:00
Matthias
1aac8dfa59 chore: align interface of get_overall_performance 2025-01-26 17:54:11 +01:00
Matthias
33549a6cef fix: add small offset to allow since to be slightly different 2025-01-26 12:57:12 +01:00
Matthias
a0bc3d968b refactor: simplify binance_public_data 2025-01-26 10:56:45 +01:00
Matthias
8aab8bc528 refactor: improve binance_vision method naming 2025-01-26 09:46:47 +01:00
Matthias
aa595ae8cb refactor: extract binance candle url_segment 2025-01-26 09:41:58 +01:00
Matthias
b657e349a2 chore: remove obsolete comment 2025-01-26 09:22:10 +01:00
Matthias
77e6b2a108 fix: remove potentially problematic call 2025-01-25 18:21:01 +01:00
Matthias
d3f6227d3f chore: improve ohlcvs interface 2025-01-25 18:13:11 +01:00
Matthias
2a370aecd8 chore: ws: make ccxt_object internal 2025-01-25 14:03:41 +01:00
Matthias
0cfb73b74b chore: add wrapper for ws ohlcvs
this avoids access to internal objects
2025-01-25 14:02:09 +01:00
Matthias
867020606c feat: simplify wallet by extracting log
disabling logging in backtesting can be done in one place
2025-01-25 13:52:54 +01:00
Matthias
222da034d1 chore: fix wrong config property in api_server verbosity 2025-01-25 12:51:43 +01:00
Matthias
63b72fb4eb chore: add help-text to --version 2025-01-24 20:01:10 +01:00
Matthias
7e08828537 chore: Remove unused import 2025-01-24 19:43:51 +01:00
Matthias
d843216343 test: update tests for new --version handling 2025-01-24 19:43:18 +01:00
Matthias
120194ff1e chore: improved formatting 2025-01-24 19:43:18 +01:00
Matthias
27a9cbf5e4 feat: print version info on "-V" calls
closes #11222
2025-01-24 19:43:07 +01:00
Matthias
08b18b7ff6 feat: add print_version_info function
part of #11222
2025-01-24 07:16:27 +01:00
Matthias
c3cc58a1af Merge pull request #11248 from xmatthias/fix/backtest_max_detail_2
Improved Backtest timeframe-detail execution logic
2025-01-24 06:39:36 +01:00
Matthias
713979d80c Merge pull request #11275 from freqtrade/update/binance-leverage-tiers
Update Binance Leverage Tiers
2025-01-23 06:31:11 +01:00
xmatthias
3d28765238 chore: update pre-commit hooks 2025-01-23 03:03:23 +00:00
Matthias
9efa48f2a8 chore: ensure that logged message actually make sense 2025-01-22 19:03:40 +01:00
Matthias
4a7a51035d docs: improve doc formatting 2025-01-22 18:56:33 +01:00
Matthias
7f2e6966a6 fix: update total_volume calculation to actually reflect volume
closes #11268
2025-01-22 18:50:39 +01:00
Matthias
1d22cf98c8 feat: add cost to minimized order json output 2025-01-22 07:19:09 +01:00
Matthias
03a22186bb chore: have backtest exit orders account for fee 2025-01-22 07:12:54 +01:00
Matthias
f4bc956b1b chore: fix type declaration 2025-01-22 07:08:54 +01:00
Matthias
f8f21cfc9c fix: Improve error message for download-data edgecase
hyperliquid doesn't provide historic data, neither klines nor trades.
This made the error message missleading.

closes #11270
2025-01-22 06:58:22 +01:00
Matthias
2b915a76df Merge pull request #11264 from freqtrade/update/pre-commit-hooks
Update pre-commit hooks
2025-01-21 06:42:34 +01:00
xmatthias
eb41cc3b00 chore: update pre-commit hooks 2025-01-21 03:03:18 +00:00
Matthias
c1d812c307 Merge pull request #11254 from freqtrade/dependabot/pip/develop/pyarrow-19.0.0
chore(deps): bump pyarrow from 18.1.0 to 19.0.0
2025-01-20 19:52:16 +01:00
Matthias
952a647c69 chore: add pre-built pyarrow wheels 2025-01-20 19:30:54 +01:00
dependabot[bot]
dff308062e chore(deps): bump pyarrow from 18.1.0 to 19.0.0
Bumps [pyarrow](https://github.com/apache/arrow) from 18.1.0 to 19.0.0.
- [Release notes](https://github.com/apache/arrow/releases)
- [Commits](https://github.com/apache/arrow/compare/apache-arrow-18.1.0...apache-arrow-19.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>
2025-01-20 19:30:53 +01:00
Matthias
81b4285d17 test: avoid potential odd timing issues in test 2025-01-20 19:23:04 +01:00
Matthias
822521136f docs: improve location of "many position adjustment" warning 2025-01-20 19:01:45 +01:00
Matthias
6f307e1e3d test: add more sleep 2025-01-20 19:00:35 +01:00
Matthias
588bf357a9 test: add more sleep 2025-01-20 18:26:57 +01:00
Matthias
9158a3d7d9 test: add small wait to reduce test flakyness 2025-01-20 10:25:27 +01:00
Matthias
47a86c3d54 Merge pull request #11253 from freqtrade/dependabot/pip/develop/mkdocs-2f8f3f13ab
chore(deps): bump mkdocs-material from 9.5.49 to 9.5.50 in the mkdocs group
2025-01-20 07:09:04 +01:00
Matthias
1e27c8af0a Merge pull request #11259 from freqtrade/dependabot/pip/develop/ccxt-4.4.49
chore(deps): bump ccxt from 4.4.48 to 4.4.49
2025-01-20 07:08:48 +01:00
Matthias
38bf71f02f Merge pull request #11257 from freqtrade/dependabot/pip/develop/websockets-14.2
chore(deps): bump websockets from 14.1 to 14.2
2025-01-20 07:02:44 +01:00
Matthias
ffef87f7d1 docs: improve FAQ entry 2025-01-20 06:57:11 +01:00
Matthias
fc1feb9abc chore: try fix random test failure 2025-01-20 06:45:27 +01:00
Matthias
a3b1428d28 Merge pull request #11256 from freqtrade/dependabot/pip/develop/orjson-3.10.15
chore(deps): bump orjson from 3.10.14 to 3.10.15
2025-01-20 06:34:51 +01:00
Matthias
63c63560dd Merge pull request #11260 from freqtrade/dependabot/pip/develop/ruff-0.9.2
chore(deps-dev): bump ruff from 0.9.1 to 0.9.2
2025-01-20 06:34:13 +01:00
dependabot[bot]
0358a4d23b chore(deps-dev): bump ruff from 0.9.1 to 0.9.2
Bumps [ruff](https://github.com/astral-sh/ruff) from 0.9.1 to 0.9.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.9.1...0.9.2)

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

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-20 03:07:52 +00:00
dependabot[bot]
df71670e6d chore(deps): bump ccxt from 4.4.48 to 4.4.49
Bumps [ccxt](https://github.com/ccxt/ccxt) from 4.4.48 to 4.4.49.
- [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.48...4.4.49)

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

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-20 03:07:36 +00:00
dependabot[bot]
0a09c6cbd7 chore(deps): bump websockets from 14.1 to 14.2
Bumps [websockets](https://github.com/python-websockets/websockets) from 14.1 to 14.2.
- [Release notes](https://github.com/python-websockets/websockets/releases)
- [Commits](https://github.com/python-websockets/websockets/compare/14.1...14.2)

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

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-20 03:07:09 +00:00
dependabot[bot]
152358ee18 chore(deps): bump orjson from 3.10.14 to 3.10.15
Bumps [orjson](https://github.com/ijl/orjson) from 3.10.14 to 3.10.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.10.14...3.10.15)

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

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-20 03:07:03 +00:00
dependabot[bot]
d710ea448f 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.49 to 9.5.50
- [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.49...9.5.50)

---
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>
2025-01-20 03:06:38 +00:00
Matthias
36e4842fe9 chore: remove unnecessary commented line 2025-01-19 13:57:27 +01:00
Matthias
141286a88c feat: have performance account for leverage correctly 2025-01-19 13:57:00 +01:00
Matthias
1e2450d5b9 docs: improved telegram performance docs 2025-01-18 20:13:51 +01:00
Matthias
f773905d8e test: adjust rpc tests for new calculation 2025-01-18 20:08:19 +01:00
Matthias
2044af24a3 feat: improve performance query reliability 2025-01-18 20:08:19 +01:00
Matthias
6bca604bf9 feat: Add more comprehensive Relative % to performance list
closes #11236
2025-01-18 20:08:03 +01:00
Matthias
5d3a056ae5 test: update api_performance test to USDT 2025-01-18 20:03:12 +01:00
Matthias
e9eee11b2e test: simplify api_performance test setup 2025-01-18 20:00:28 +01:00
Matthias
cf5b6e5e20 test: improve test resiliance 2025-01-18 19:49:23 +01:00
Matthias
13050f0d67 chore: bump version to 2024.12.1 2025-01-18 14:22:50 +01:00
Matthias
61e5b4755c chore: Bump ccxt to 4.4.48
fixes a critical issue with bybit
2025-01-18 14:22:28 +01:00
Matthias
5e0ea48011 test: improve test_exit_positions slightly 2025-01-18 14:01:12 +01:00
Matthias
aceb3ac764 Merge pull request #10062 from Axel-CH/feature/proceed-exit-while-open-order
Feature: Proceed exit while having open order, for backtesting and live
2025-01-18 08:10:33 +01:00
Matthias
6b1af9b9a2 chore: move docstring to the right place 2025-01-17 19:37:15 +01:00
Matthias
e350dbd552 refactor: simplify backtesting class 2025-01-17 19:18:28 +01:00
Matthias
f7f78ad2a4 test: fix test comment 2025-01-17 19:01:11 +01:00
Matthias
26983c637a docs: document timeframe-detail potential difference 2025-01-17 07:07:25 +01:00
Matthias
733cd22dee chore: remove bt_open_open_trade_count_candle
it's no longer necessary if we support in-candle entries
2025-01-17 06:48:01 +01:00
Matthias
1e61aea23b feat: allow in-candle entries 2025-01-17 06:45:56 +01:00
Matthias
419d5d9946 feat: add backtesting support for ignore_buying_expired_candle_after
this is only relevant for detail candles - otherwise entries will never happen within a candle.
2025-01-17 06:38:39 +01:00
Matthias
d02b4d4c3f test: Fix detail futures test 2025-01-17 06:38:39 +01:00
Matthias
5f89708be4 test: fix long_short switch test 2025-01-16 19:47:12 +01:00
Matthias
e80ddcabe7 Merge pull request #11242 from freqtrade/update/binance-leverage-tiers
Update Binance Leverage Tiers
2025-01-16 06:26:20 +01:00
xmatthias
12e0dcd523 chore: update pre-commit hooks 2025-01-16 03:04:05 +00:00
Matthias
4a6027b43f test: update pair_detail_simplified test
parallel analysis should cover more detailed cases to prevent intra-candle parallelism
2025-01-15 18:15:15 +01:00
Matthias
e81489807d fix: prevent multiple intra-candle trades 2025-01-15 18:11:46 +01:00
Matthias
a6601ba7d2 refactor: mark time_generators private 2025-01-15 07:11:44 +01:00
Matthias
2b4d3b3f15 refactor: extract detail/pair loop to separate generator 2025-01-15 07:10:37 +01:00
Matthias
a326af830f chore: simplify backtest loop interface 2025-01-15 07:05:52 +01:00
Matthias
cbe38c6f41 fix: don't detail-loop pairs if a trade closed within the current candle. 2025-01-15 06:46:33 +01:00
Matthias
d54af598ac Merge pull request #11237 from koistya/koistya/upgrade-ccxt
chore(deps): upgrade CCXT from 4.4.47 to 4.4.48
2025-01-14 21:44:14 +01:00
Matthias
1e1b4239e7 chore: improve a few typings 2025-01-14 21:29:43 +01:00
Matthias
f5be8fc70a fix: switch backtest loop to have linear timing
By running with timeframe-detail first, then pair, we can
have linear timing
This will avoid odd bugs due to in-candle closures

closes #11217
2025-01-14 21:10:11 +01:00
Matthias
807fcffdae chore: move more logic to generator 2025-01-14 20:15:17 +01:00
Matthias
96cea99d4f refactor: move index-handling into generator 2025-01-14 20:13:51 +01:00
Matthias
14acc6609f chore: remove unused statement 2025-01-14 20:00:00 +01:00
Matthias
8029729ab1 refactor: move more stuff into generator 2025-01-14 19:38:05 +01:00
Matthias
b525ba85c8 refactor: extract backtest detail_data_spread to function 2025-01-14 19:25:05 +01:00
Konstantin Tarkus
6db42f5fbc chore(deps): upgrade CCXT from 4.4.47 to 4.4.48 2025-01-14 17:22:18 +01:00
Matthias
1f0b23c5fc chore: fix typo in dataprovider 2025-01-14 06:33:53 +01:00
Matthias
a13feaf49f test: Update tests for short-circuit behavior 2025-01-14 06:33:45 +01:00
Matthias
2697ac3581 chore: stop detail processing once a trade closed 2025-01-14 06:33:31 +01:00
Matthias
70d9ac09d1 Merge pull request #11230 from freqtrade/dependabot/pip/develop/ruff-0.9.1
chore(deps-dev): bump ruff from 0.8.6 to 0.9.1
2025-01-13 19:10:51 +01:00
Matthias
be2907acca chore: bump ruff pre-commit version 2025-01-13 18:12:21 +01:00
Matthias
5b555cca57 Merge pull request #11231 from freqtrade/dependabot/pip/develop/orjson-3.10.14
chore(deps): bump orjson from 3.10.13 to 3.10.14
2025-01-13 18:11:52 +01:00
Matthias
f1c5d4a970 chore: ruff format updates 2025-01-13 18:05:20 +01:00
Matthias
2e482fbb3a Merge pull request #11227 from freqtrade/dependabot/pip/develop/sqlalchemy-2.0.37
chore(deps): bump sqlalchemy from 2.0.36 to 2.0.37
2025-01-13 07:47:34 +01:00
Matthias
35f914afa3 Merge pull request #11229 from freqtrade/dependabot/pip/develop/scipy-1.15.1
chore(deps): bump scipy from 1.15.0 to 1.15.1
2025-01-13 07:37:38 +01:00
Matthias
5356fc3191 Merge pull request #11226 from freqtrade/dependabot/pip/develop/stable-baselines3-2.4.1
chore(deps): bump stable-baselines3 from 2.4.0 to 2.4.1
2025-01-13 07:37:16 +01:00
Matthias
16ef348222 chore: improve docstring 2025-01-13 07:10:54 +01:00
Matthias
01ce4e42c6 chore: update type file name 2025-01-13 07:10:42 +01:00
Matthias
6addab2eae chore: update sqlalchemy in pre-commit 2025-01-13 07:04:42 +01:00
dependabot[bot]
f428e81469 chore(deps): bump scipy from 1.15.0 to 1.15.1
Bumps [scipy](https://github.com/scipy/scipy) from 1.15.0 to 1.15.1.
- [Release notes](https://github.com/scipy/scipy/releases)
- [Commits](https://github.com/scipy/scipy/compare/v1.15.0...v1.15.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-13 06:02:14 +00:00
Matthias
039bffb0e6 Merge pull request #11232 from freqtrade/dependabot/pip/develop/ccxt-4.4.47
chore(deps): bump ccxt from 4.4.46 to 4.4.47
2025-01-13 07:01:21 +01:00
Matthias
ea649fbdbf Merge pull request #11234 from freqtrade/dependabot/pip/develop/pymdown-extensions-10.14
chore(deps): bump pymdown-extensions from 10.13 to 10.14
2025-01-13 06:59:56 +01:00
Matthias
15a99b02bd Merge pull request #11228 from freqtrade/dependabot/pip/develop/pydantic-2.10.5
chore(deps): bump pydantic from 2.10.4 to 2.10.5
2025-01-13 06:59:34 +01:00
Matthias
f7c94f7e44 Merge pull request #11233 from freqtrade/dependabot/pip/develop/scikit-learn-1.6.1
chore(deps): bump scikit-learn from 1.6.0 to 1.6.1
2025-01-13 06:58:24 +01:00
dependabot[bot]
76ab888714 chore(deps-dev): bump ruff from 0.8.6 to 0.9.1
Bumps [ruff](https://github.com/astral-sh/ruff) from 0.8.6 to 0.9.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.8.6...0.9.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-13 05:53:18 +00:00
Matthias
c52a07f2f1 Merge pull request #11225 from freqtrade/dependabot/pip/develop/pytest-43126348c1
chore(deps-dev): bump pytest-asyncio from 0.25.1 to 0.25.2 in the pytest group
2025-01-13 06:51:26 +01:00
dependabot[bot]
e987858109 chore(deps): bump pymdown-extensions from 10.13 to 10.14
Bumps [pymdown-extensions](https://github.com/facelessuser/pymdown-extensions) from 10.13 to 10.14.
- [Release notes](https://github.com/facelessuser/pymdown-extensions/releases)
- [Commits](https://github.com/facelessuser/pymdown-extensions/compare/10.13...10.14)

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

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-13 03:19:24 +00:00
dependabot[bot]
a8dc5339ab chore(deps): bump scikit-learn from 1.6.0 to 1.6.1
Bumps [scikit-learn](https://github.com/scikit-learn/scikit-learn) from 1.6.0 to 1.6.1.
- [Release notes](https://github.com/scikit-learn/scikit-learn/releases)
- [Commits](https://github.com/scikit-learn/scikit-learn/compare/1.6.0...1.6.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>
2025-01-13 03:19:20 +00:00
dependabot[bot]
fb09d4c534 chore(deps): bump ccxt from 4.4.46 to 4.4.47
Bumps [ccxt](https://github.com/ccxt/ccxt) from 4.4.46 to 4.4.47.
- [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.46...4.4.47)

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

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-13 03:19:14 +00:00
dependabot[bot]
538c8c9805 chore(deps): bump orjson from 3.10.13 to 3.10.14
Bumps [orjson](https://github.com/ijl/orjson) from 3.10.13 to 3.10.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.10.13...3.10.14)

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

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-13 03:19:03 +00:00
dependabot[bot]
0e5f072f6c chore(deps): bump pydantic from 2.10.4 to 2.10.5
Bumps [pydantic](https://github.com/pydantic/pydantic) from 2.10.4 to 2.10.5.
- [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.10.4...v2.10.5)

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

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-13 03:18:34 +00:00
dependabot[bot]
ca6153715a chore(deps): bump sqlalchemy from 2.0.36 to 2.0.37
Bumps [sqlalchemy](https://github.com/sqlalchemy/sqlalchemy) from 2.0.36 to 2.0.37.
- [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>
2025-01-13 03:18:16 +00:00
dependabot[bot]
2a1144c827 chore(deps): bump stable-baselines3 from 2.4.0 to 2.4.1
Bumps [stable-baselines3](https://github.com/DLR-RM/stable-baselines3) from 2.4.0 to 2.4.1.
- [Release notes](https://github.com/DLR-RM/stable-baselines3/releases)
- [Commits](https://github.com/DLR-RM/stable-baselines3/compare/v2.4.0...v2.4.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-13 03:18:02 +00:00
dependabot[bot]
ffaf648d5c 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.25.1 to 0.25.2
- [Release notes](https://github.com/pytest-dev/pytest-asyncio/releases)
- [Commits](https://github.com/pytest-dev/pytest-asyncio/compare/v0.25.1...v0.25.2)

---
updated-dependencies:
- 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>
2025-01-13 03:17:49 +00:00
Matthias
b1c5e0458c chore: use uv pip for CI runs 2025-01-11 14:47:34 +01:00
Matthias
cf1e8934aa chore: Update CI to use uv 2025-01-11 14:45:01 +01:00
Matthias
153e2f9628 chore: use UV action venv setup 2025-01-11 14:06:41 +01:00
Matthias
1b28be974c test: update tests for new behavior 2025-01-11 08:12:27 +01:00
Matthias
5bfd503cd8 fix: allow setting verbosity via Environment variable 2025-01-11 08:12:19 +01:00
Matthias
c90cfa896c test: never have more than 1 open order at a time. 2025-01-10 07:19:57 +01:00
Matthias
1a59ecf98e docs: update callback docs for new behavior 2025-01-10 07:16:24 +01:00
Matthias
711e680198 chore: improve log on adjust_entry_price cancels 2025-01-09 20:05:34 +01:00
Matthias
e5d508a507 docs: update adjust-entry docs about partial fills
These are canceled and NOT replaced - this needs to be pointed out.

closes #11212
2025-01-09 20:05:23 +01:00
Matthias
75fb2a0c86 fix: catch error when getting the last candle fails
It's unknown when this actually happens - but this should be the safer bet than crashing completely.

closes #11213
2025-01-09 18:21:51 +01:00
Matthias
092a9ff5db chore: fix error if precision.price is None 2025-01-09 18:06:58 +01:00
Matthias
dc7246413b chore: add futures only exchange variants to "bad exchanges" 2025-01-09 07:13:08 +01:00
Matthias
fbad2d5c89 Merge pull request #11211 from freqtrade/update/binance-leverage-tiers
Update Binance Leverage Tiers
2025-01-09 06:32:39 +01:00
xmatthias
a6e44c9e4a chore: update pre-commit hooks 2025-01-09 03:19:10 +00:00
Matthias
cb0fc9c1a9 fix: don't show "**" for /status table 2025-01-07 19:19:38 +01:00
Matthias
b57cedeab7 Merge pull request #11178 from TheJoeSchr/fix/orderflow_imbalance_list
Fix:orderflow returns a list for stacked imbalances
2025-01-07 19:10:14 +01:00
Matthias
b863c6830d Merge pull request #11200 from freqtrade/feat/remove_hdf5
Remove hdf5 support
2025-01-07 06:48:48 +01:00
Matthias
3a8aba13d9 Merge pull request #11204 from freqtrade/update/pre-commit-hooks
Update pre-commit hooks
2025-01-07 05:59:55 +01:00
xmatthias
09c272515e chore: update pre-commit hooks 2025-01-07 03:08:22 +00:00
Matthias
c266490ee4 fix: Try fix api_log test error in unfortunate timing scenarios 2025-01-06 14:19:16 +01:00
Matthias
ecd2d013df chore: remove hdf5 from data comparison 2025-01-06 13:59:02 +01:00
Matthias
fa306b090e feat: Add create-command-partials to CI to ensure we remain aligned 2025-01-06 13:56:33 +01:00
Matthias
6ca5d42c89 chore: add Script to auto-export create_command_partials 2025-01-06 13:55:12 +01:00
Matthias
353e3da2f8 docs: add "main" commands section 2025-01-06 13:55:01 +01:00
Matthias
054bccf24e docs: update Readme.md command output 2025-01-06 13:54:48 +01:00
Matthias
96490b7b7a docs: use includes for command help output 2025-01-06 13:51:56 +01:00
Matthias
fc9ea6d153 docs: improve hdf5 deprecation message 2025-01-06 13:33:25 +01:00
Matthias
817707711d Remove binary hdf5 dependencies 2025-01-06 13:32:42 +01:00
Matthias
e2bdf2a97f tests: fix remaining hdf5 occurance 2025-01-06 13:31:29 +01:00
Matthias
5bb109884c test: remove hdf5 testdata 2025-01-06 13:31:21 +01:00
Matthias
64c2c6a524 Merge pull request #11195 from freqtrade/dependabot/pip/develop/scipy-1.15.0
chore(deps): bump scipy from 1.14.1 to 1.15.0
2025-01-06 13:28:30 +01:00
Matthias
6760d44761 tests: Update tests with removed hdf5 handler 2025-01-06 13:26:06 +01:00
Matthias
1f0d304190 chore: remove hdf5 from supported data handlers 2025-01-06 13:25:30 +01:00
Matthias
de2b8dcfdd feat: remove hdf5 dependencies and install logic 2025-01-06 13:21:16 +01:00
Matthias
0e5a88bf93 feat: remove hdf5 datahandler, raise exception when still configured 2025-01-06 13:20:18 +01:00
Matthias
a19872d640 chore: clean up running event loops after test 2025-01-06 13:10:02 +01:00
Matthias
ee63e51cc5 chore: remove deprecated sklearn function call 2025-01-06 13:08:50 +01:00
Matthias
82e3e3d66e Merge pull request #11188 from jerome-benoit/docs
docs(freqai): point link anchor to right section
2025-01-06 12:40:49 +01:00
Matthias
cb5fd6ea71 Merge pull request #11190 from freqtrade/dependabot/pip/develop/nbconvert-7.16.5
chore(deps-dev): bump nbconvert from 7.16.4 to 7.16.5
2025-01-06 12:16:37 +01:00
Matthias
d12d3ac0b3 Merge pull request #11194 from freqtrade/dependabot/pip/develop/ruff-0.8.6
chore(deps-dev): bump ruff from 0.8.4 to 0.8.6
2025-01-06 11:48:44 +01:00
dependabot[bot]
489440fbc3 chore(deps-dev): bump ruff from 0.8.4 to 0.8.6
Bumps [ruff](https://github.com/astral-sh/ruff) from 0.8.4 to 0.8.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.8.4...0.8.6)

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

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-06 07:34:46 +00:00
Matthias
5a3b7f8915 Merge pull request #11189 from freqtrade/dependabot/pip/develop/pytest-60ad21c7c8
chore(deps-dev): bump pytest-asyncio from 0.25.0 to 0.25.1 in the pytest group
2025-01-06 08:33:25 +01:00
Matthias
49ef2393fb Merge pull request #11191 from freqtrade/dependabot/pip/develop/ccxt-4.4.46
chore(deps): bump ccxt from 4.4.43 to 4.4.46
2025-01-06 08:30:00 +01:00
dependabot[bot]
af673f568d 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.25.0 to 0.25.1
- [Release notes](https://github.com/pytest-dev/pytest-asyncio/releases)
- [Commits](https://github.com/pytest-dev/pytest-asyncio/compare/v0.25.0...v0.25.1)

---
updated-dependencies:
- 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>
2025-01-06 06:56:15 +00:00
Matthias
eed89d2749 Merge pull request #11197 from freqtrade/dependabot/pip/develop/mypy-1.14.1
chore(deps-dev): bump mypy from 1.14.0 to 1.14.1
2025-01-06 07:53:57 +01:00
Matthias
a883114c92 Merge pull request #11196 from freqtrade/dependabot/pip/develop/python-telegram-bot-21.10
chore(deps): bump python-telegram-bot from 21.9 to 21.10
2025-01-06 07:53:16 +01:00
dependabot[bot]
22905baf55 chore(deps-dev): bump mypy from 1.14.0 to 1.14.1
Bumps [mypy](https://github.com/python/mypy) from 1.14.0 to 1.14.1.
- [Changelog](https://github.com/python/mypy/blob/master/CHANGELOG.md)
- [Commits](https://github.com/python/mypy/compare/v1.14.0...v1.14.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-06 03:12:39 +00:00
dependabot[bot]
999fc2208a chore(deps): bump python-telegram-bot from 21.9 to 21.10
Bumps [python-telegram-bot](https://github.com/python-telegram-bot/python-telegram-bot) from 21.9 to 21.10.
- [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.9...v21.10)

---
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>
2025-01-06 03:12:21 +00:00
dependabot[bot]
767a145374 chore(deps): bump scipy from 1.14.1 to 1.15.0
Bumps [scipy](https://github.com/scipy/scipy) from 1.14.1 to 1.15.0.
- [Release notes](https://github.com/scipy/scipy/releases)
- [Commits](https://github.com/scipy/scipy/compare/v1.14.1...v1.15.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-06 03:12:17 +00:00
dependabot[bot]
4ef5a878d6 chore(deps): bump ccxt from 4.4.43 to 4.4.46
Bumps [ccxt](https://github.com/ccxt/ccxt) from 4.4.43 to 4.4.46.
- [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.43...4.4.46)

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

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-06 03:11:46 +00:00
dependabot[bot]
70a53d68a4 chore(deps-dev): bump nbconvert from 7.16.4 to 7.16.5
Bumps [nbconvert](https://github.com/jupyter/nbconvert) from 7.16.4 to 7.16.5.
- [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.4...v7.16.5)

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

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-06 03:11:39 +00:00
Jérôme Benoit
4297c5830f docs(freqai): point link anchor to right section
Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
2025-01-06 01:59:45 +01:00
Matthias
00d1f14bcc Merge pull request #11184 from jerome-benoit/docs
docs: reference stable freqai docker images
2025-01-05 19:35:47 +01:00
Jérôme Benoit
c100009b00 docs: reference stable freqai docker images
Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
2025-01-05 16:58:48 +01:00
Matthias
93c2d6a7ad tests: Add test for get_ohlcv to ensure behavior is and stays correct 2025-01-05 13:13:51 +01:00
Matthias
649739b8e4 test: fix test failure due to missing commonCurrencies attr 2025-01-05 13:05:03 +01:00
Matthias
f109d08bd0 tests: add test for exchange_ws cleanup error 2025-01-05 13:00:57 +01:00
Matthias
6b96d4d145 test: improve exchange_ws tests 2025-01-05 13:00:47 +01:00
Matthias
98e49ab187 fix: add workaround for missing kraken balance mapping
closes #11118
2025-01-05 11:30:25 +01:00
Matthias
b70d02e46d test: add test for kraken balance problem
part of #11118
2025-01-05 11:29:15 +01:00
Matthias
4f1bf6a1f0 test: add test for kraken balance response parsing
part of #11118
2025-01-05 11:21:37 +01:00
Matthias
5f0df2c1de chore: Improve websocket behavior with unsynched time
closes #11139
2025-01-05 11:11:34 +01:00
Matthias
ece7b0d9f2 feat: add format_ms_time_detailed view 2025-01-05 10:49:53 +01:00
Matthias
e620f55cd6 chore: improve variable naming in exchange_ws 2025-01-05 10:13:20 +01:00
Matthias
08fa82dc53 test: adjust test for new value unit 2025-01-05 10:08:20 +01:00
Matthias
a9483edaac chore: convert _pairs_last_refresh_time to milliseconds 2025-01-05 10:06:27 +01:00
Matthias
2fe9ceab8d chore: improve variable naming 2025-01-05 09:55:17 +01:00
Matthias
f6bf6c52c5 chore: use dt_ts to convert timestamp 2025-01-05 09:54:59 +01:00
Joe Schr
5f5e51326f chore: modify orderflow docs re. stacked imbalance changes 2025-01-04 23:59:11 +01:00
Joe Schr
7c148a0123 fix: remove superfluous territory return statement 2025-01-04 23:48:55 +01:00
Matthias
452358541b refactor: simplify some date calculations 2025-01-04 17:40:51 +01:00
Matthias
37c10c9b06 Merge pull request #11182 from 14790897/fix-docs-link-error
fix: link error in strategy-customization
2025-01-04 17:14:33 +01:00
liuweiqing
3682fcba4d fix: link error in strategy-customization 2025-01-04 23:55:45 +08:00
Matthias
046e1534f3 chore: Improve exchange_ws debug logging 2025-01-04 14:18:25 +01:00
Joe Schr
fd7272ba63 chore: fix unterminated string literal in test runner 2025-01-03 19:01:59 +01:00
Joe Schr
12adbeb7f3 fix: don't sort stacked imbalances, return empty list if no found...
... also removes helper functions `stacked_imbalance_bid` & `stacked_imbalance_ask`
2025-01-03 18:42:00 +01:00
Joe Schr
11976f11b0 fix: Improve stacked imbalance detection in orderflow converter 2025-01-03 18:42:00 +01:00
Joe Schr
ea96abecd0 test: Add comprehensive test for stacked_imbalances with multiple price entries 2025-01-03 18:42:00 +01:00
Joe Schr
5589578872 test: Update tests for stacked imbalances returning lists 2025-01-03 18:42:00 +01:00
Joe Schr
fb4aae080b refactor: Modify stacked_imbalance to return list of prices instead of max price 2025-01-03 16:21:54 +01:00
Matthias
471df70f62 test: add test for improved safe_wrapper behavior 2025-01-03 15:29:01 +01:00
Matthias
90b1e15eb2 feat: Skip trade deepcopy if the callback isn't implemented
closes #10946
2025-01-03 15:28:41 +01:00
Matthias
9c825fb156 chore: remove unnecessary verbosity of offset filter 2025-01-03 14:43:45 +01:00
Matthias
676cdab9a9 docs: improve adjust_entry_price documentation
closes #11177
2025-01-03 13:23:12 +01:00
Matthias
c4b34ea60c fix: Improve MultiMetricHyperoptLoss
Capping expectancy_ratio makes sense - but must be done in a better way

closes #11174
2025-01-03 13:20:11 +01:00
Matthias
af0d719b2c chore: prevent error exiting when an order is already open and due for cancelation 2025-01-02 15:03:29 +01:00
Matthias
0866b8fdca chore: bump py_find_1st to 1.1.7 2025-01-02 12:57:32 +01:00
Matthias
32d966a8a6 Merge pull request #11173 from freqtrade/update/binance-leverage-tiers
Update Binance Leverage Tiers
2025-01-02 07:52:08 +01:00
xmatthias
b6f6afa15e chore: update pre-commit hooks 2025-01-02 03:05:14 +00:00
Matthias
9f69b4f1b6 Merge pull request #11172 from froggleston/frog-docs-adjust-1
Clarify trade.stake_amount as combined stake for all adjusted orders
2025-01-01 17:08:34 +01:00
froggleston
d23c3120e6 Clarify trade.stake_amount as combined stake for all adjusted orders 2025-01-01 15:07:40 +00:00
Matthias
9beae3d164 fix: download-data progressbars should work properly 2024-12-31 10:01:02 +01:00
Matthias
503eb1e55d Merge pull request #11120 from freqtrade/feat/BNFCR
Add support for BNFCR
2024-12-30 17:31:47 +01:00
Matthias
0919d4c274 test: improve integration test case 2024-12-30 13:56:02 +01:00
Matthias
f4c004347e chore: backtesting should avoid unnecessary logging 2024-12-30 13:47:36 +01:00
Matthias
d2beb07eef Merge pull request #11164 from freqtrade/dependabot/pip/develop/orjson-3.10.13
chore(deps): bump orjson from 3.10.12 to 3.10.13
2024-12-30 07:00:44 +01:00
Matthias
5266f74708 Merge pull request #11163 from freqtrade/dependabot/pip/develop/pymdown-extensions-10.13
chore(deps): bump pymdown-extensions from 10.12 to 10.13
2024-12-30 06:47:49 +01:00
Matthias
243f219e22 Merge pull request #11162 from freqtrade/dependabot/pip/develop/questionary-2.1.0
chore(deps): bump questionary from 2.0.1 to 2.1.0
2024-12-30 06:47:27 +01:00
dependabot[bot]
0f5ef03dc9 chore(deps): bump orjson from 3.10.12 to 3.10.13
Bumps [orjson](https://github.com/ijl/orjson) from 3.10.12 to 3.10.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.10.12...3.10.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-12-30 03:30:51 +00:00
dependabot[bot]
c1e032a4f0 chore(deps): bump pymdown-extensions from 10.12 to 10.13
Bumps [pymdown-extensions](https://github.com/facelessuser/pymdown-extensions) from 10.12 to 10.13.
- [Release notes](https://github.com/facelessuser/pymdown-extensions/releases)
- [Commits](https://github.com/facelessuser/pymdown-extensions/compare/10.12...10.13)

---
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-12-30 03:30:38 +00:00
dependabot[bot]
c460511574 chore(deps): bump questionary from 2.0.1 to 2.1.0
Bumps [questionary](https://github.com/tmbo/questionary) from 2.0.1 to 2.1.0.
- [Commits](https://github.com/tmbo/questionary/compare/2.0.1...2.1.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-12-30 03:30:22 +00:00
Matthias
8624a9c306 Revert "chore: windows CI -> -n logical"
This reverts commit 1f6a0dccd5.
2024-12-29 18:01:06 +01:00
Matthias
1f6a0dccd5 chore: windows CI -> -n logical 2024-12-29 17:20:34 +01:00
Matthias
99ba489874 chore(CI): run windows tests in parallel 2024-12-29 17:20:34 +01:00
Matthias
ea00260e79 chore: bump version to 2025.1-dev 2024-12-29 17:20:34 +01:00
Matthias
fcc7c5cf5c Merge pull request #11159 from xmatthias/rich_console
Add rich log handler
2024-12-29 15:45:56 +01:00
Matthias
4285602323 Merge pull request #11154 from freqtrade/feat/zip_backtest
Zip backtest results
2024-12-29 15:40:17 +01:00
Matthias
10969b7139 chore: improved error handling 2024-12-29 14:27:29 +01:00
Matthias
a4f3fe70c5 feat: add "no-color" argument to general arguments 2024-12-29 11:52:56 +01:00
Matthias
3903e4455c chore: remove unused variable in hyperopt 2024-12-29 11:49:49 +01:00
Matthias
0f2d3f2638 test: Update tests to use rich Handler 2024-12-29 11:47:51 +01:00
Matthias
3ed1454168 chore: reduce traceback verbosity 2024-12-29 11:44:21 +01:00
Matthias
b6867d956c feat: improve Rich traceback rendering 2024-12-29 11:42:36 +01:00
Matthias
392486bc17 feat: Add rich traceback output 2024-12-29 11:32:28 +01:00
Matthias
dfcf4ba7fd chore: Improved types for rich_handler 2024-12-29 10:57:57 +01:00
Matthias
0f4330a6bb feat: properly set color_system 2024-12-29 10:50:05 +01:00
Matthias
e5da4d4be1 chore: move print_colorized to transfer to config before logging setup 2024-12-29 10:49:19 +01:00
Matthias
44d9cb85a0 chore: don't change time color for improved readability 2024-12-29 10:45:22 +01:00
Matthias
59f3d88c58 feat: allow disabling color output 2024-12-29 10:42:19 +01:00
Matthias
3e5ab8549f feat: add ftRichColorHandler 2024-12-29 10:11:10 +01:00
Matthias
af28656138 Add rich as loghandler instead of stdout 2024-12-29 08:53:31 +01:00
Matthias
10063b205c chore: refresh liquidation prices at regular intervals 2024-12-26 16:55:54 +01:00
Matthias
6c94b75172 chore: improve zip loading errorhandling 2024-12-26 15:29:25 +01:00
Matthias
7a619594f6 chore: improve zip file loading interface 2024-12-26 15:29:25 +01:00
Matthias
0682d12fe3 feat: get_backtest_market_change should support zip files 2024-12-26 14:57:37 +01:00
Matthias
1119ee1cdd chore: load zip reusability 2024-12-26 14:57:37 +01:00
Matthias
8fe1f3cb95 feat: load backtest data via API from both zip and json 2024-12-26 14:57:37 +01:00
Matthias
6121fb30a9 chore: improved error-message when exportfilename wasn't found 2024-12-26 14:57:37 +01:00
Matthias
a40b2816a1 chore: greatly simplify analyze_commands 2024-12-26 14:57:37 +01:00
Matthias
bb372e380d test: clean up optimize_report tests 2024-12-26 14:57:37 +01:00
Matthias
aa99baf268 test: update a few tests 2024-12-26 14:57:37 +01:00
Matthias
606013a697 chore: import ZipFile directly 2024-12-26 14:57:37 +01:00
Matthias
a88675b693 test: improve test_metadata_filename test 2024-12-26 14:57:37 +01:00
Matthias
b08a93a287 feat: Detect both .json and .zip backtest results 2024-12-26 14:57:37 +01:00
Matthias
2768155e7d fix: use .json metadata file 2024-12-26 14:57:37 +01:00
Matthias
9f2142135e refactor: move load-analysis-data logic to btanalysis file 2024-12-26 14:57:37 +01:00
Matthias
258b85a860 feat: load backtest-analysis-data files from zipfile 2024-12-26 14:57:37 +01:00
Matthias
b1bf56cfab chore: use exception logging for exceptions 2024-12-26 14:57:37 +01:00
Matthias
d2d6c6fa81 feat: load backtest-results from either file or zip file 2024-12-26 14:57:37 +01:00
Matthias
b1fc271a7e chore: Update storage to store backtest results as zip file
this will enable further additions to files without polluting the filesystem further.
2024-12-26 14:57:37 +01:00
Matthias
37bbb0e0e0 refactor: move joblib_writer to use file interface 2024-12-26 14:57:37 +01:00
Matthias
2a9a3e020c chore: move joblib export to bt_storage function 2024-12-26 14:57:37 +01:00
Matthias
cd2520603a refactor: move json file dumping to separate method 2024-12-26 14:57:37 +01:00
Matthias
cefacf4a6d chore: fix typo causing double negation 2024-12-23 12:51:41 +01:00
Matthias
c9aa202be8 test: add additional Test case 2024-12-23 12:37:21 +01:00
Matthias
84e5a9521d chore: improve left open trades handling 2024-12-22 20:11:32 +01:00
Matthias
48b0ffac06 chore: fix using non-existing attribute 2024-12-22 18:15:59 +01:00
Matthias
5c42c89505 Merge branch 'develop' into pr/Axel-CH/10062 2024-12-22 18:07:32 +01:00
Matthias
d37e23f68e feat: implement order replacement for backtesting 2024-12-22 18:07:07 +01:00
Matthias
9953903193 test: close mock order for funding-fee test 2024-12-22 18:06:07 +01:00
Matthias
48506f2945 fix: always cancel al open orders if the order ain't identical 2024-12-22 18:03:04 +01:00
Matthias
0a27a7ad38 docs: fix typo 2024-12-21 20:21:08 +01:00
Matthias
daf655cd24 docs: add documentation for BNFCR futures 2024-12-21 19:50:07 +01:00
Matthias
44c29aa998 test: update tests for new calculate_fee_rate logic 2024-12-21 15:06:04 +01:00
Matthias
2a45ff08e4 fix: update "calculate_fee_rate" to use get_conversation_rate 2024-12-21 15:06:04 +01:00
Matthias
7b1ea81a27 chore: use safe_value_fallback to get currency rate 2024-12-21 15:06:04 +01:00
Matthias
d559572718 fix: exclude balances matching trades in futures mode 2024-12-21 15:06:04 +01:00
Matthias
2c1400a9ff test: update trading mode test for binance cross support 2024-12-21 15:06:04 +01:00
Matthias
85af1c91a2 feat: enable cross futures on binance 2024-12-21 15:06:04 +01:00
Matthias
dcc8c8800f feat: conversion_rate should map both sides 2024-12-21 15:06:04 +01:00
Matthias
5a24292d34 chore: update config_schema 2024-12-21 15:06:04 +01:00
Matthias
c492dcc7ba feat: make proxy_coin dynamic (config setting) 2024-12-21 15:06:04 +01:00
Matthias
c5f89f34fd tests: improve rpc_handle test 2024-12-21 15:06:04 +01:00
Matthias
1ef4b063ea test: adjust test to reflect that futures uses "free", not "total" 2024-12-21 15:06:04 +01:00
Matthias
d05cae10f7 test: remove duplicate test assertion 2024-12-21 15:06:04 +01:00
Matthias
478387531d feat: Updates for proxy coin functionalities 2024-12-21 15:06:04 +01:00
Matthias
0b9cca27e2 feat: add "get_proxy_coin" method
used for BNFCR mode
2024-12-21 15:06:04 +01:00
Matthias
ca9589b2e8 chore: reduce pointless verbosity of cross liquidation update 2024-12-21 15:06:04 +01:00
Matthias
e7b1a7e493 test: add test for proxy coin conversion 2024-12-21 15:05:37 +01:00
Matthias
c112b84d0f feat: support dynamic proxy coin conversion 2024-12-21 15:05:37 +01:00
David Arena
7d5f021717 feat: add timeout to FtRestClient 2024-12-20 23:47:18 +01:00
Matthias
23d6c362c4 feat: cancel orders of both sides in one go 2024-12-13 15:51:01 +01:00
Matthias
41a548d625 chore: move logging to "handle_similar_open_order" 2024-12-13 15:28:22 +01:00
Axel-CH
309adb2ffd Merge branch 'develop' into feature/proceed-exit-while-open-order 2024-12-01 11:36:10 -04:00
Axel-CH
16d2dbc9d7 on backtesting try to create exit orders also if there is open order without position yet, to allow entry order adjustment 2024-12-01 11:13:59 -04:00
Axel-CH
73d53579d9 remove Optinal property of replacing param in cancel_open_orders_of_trade 2024-12-01 11:05:38 -04:00
Axel-CH
fbd6a58e3d Merge branch 'develop' into feature/proceed-exit-while-open-order 2024-12-01 10:51:41 -04:00
Axel-CH
4717f716de fix test_dca_exiting 2024-12-01 10:41:41 -04:00
Axel-CH
02a089cb64 fix test_dca_order_adjust_entry_replace_fails 2024-12-01 10:36:49 -04:00
Axel-CH
8f15bce680 fix test_check_and_call_adjust_trade_position 2024-12-01 10:32:04 -04:00
Axel-CH
0a51006da2 update process_open_trade_positions to handle position adjustment for initial entry order (before filling) 2024-11-28 22:27:07 -04:00
Axel-CH
4c365f6afc update test_dca_handle_similar_open_order 2024-11-28 22:25:58 -04:00
Axel-CH
a49b0a922a enhance check_and_call_adjust_trade_position logging 2024-11-28 22:17:53 -04:00
Axel-CH
0c79c32b0d add test_dca_handle_similar_open_order (wip) 2024-11-25 19:25:54 -04:00
Axel-CH
12424aef69 improve handle_similar_open_order description 2024-10-30 15:19:29 -04:00
Axel-CH
091fe6be88 improve handle_similar_open_order log message 2024-10-30 14:38:54 -04:00
Axel-CH
9432865bcd updated test_dca_order_adjust: if an exit order is open, a new one with same price, amount and side can't be created. 2024-10-30 14:27:33 -04:00
Axel-CH
c0754587bf add handle_similar_open_order for execute_trade_exit 2024-10-29 23:30:36 -04:00
Axel-CH
7ecf1b18c1 consider price in handle_similar_open_order 2024-10-29 22:05:42 -04:00
Axel-CH
9b8e485f00 fix handle_similar_open_order operator 2024-10-29 21:20:44 -04:00
Axel-CH
5c9ec37609 abort execute_entry if similar_open_order found 2024-10-14 05:52:38 -04:00
Axel-CH
4dc20effb8 fix codespell 2024-10-14 05:40:21 -04:00
Axel-CH
084d951ffd mypy fix for handle_similar_open_order 2024-10-14 05:34:01 -04:00
Axel-CH
092fbe25b8 enhancement on cancel_open_orders_of_trade 2024-10-14 05:23:05 -04:00
Axel-CH
7d5d84763f add handling of simital open order 2024-10-14 05:12:03 -04:00
Axel-CH
95f709ae14 fix formating 2024-10-08 01:40:56 -04:00
Axel-CH
43b2ec1e3f replace existing entry order before placing new one in execute_entry 2024-10-08 01:31:47 -04:00
Axel-CH
acb3941776 fix typo for list type 2024-10-08 00:57:06 -04:00
Axel CH
f8807cf659 Merge branch 'develop' into feature/proceed-exit-while-open-order 2024-10-08 00:51:30 -04:00
Axel-CH
c01996d1d1 fix tests related to position adjustment 2024-10-07 15:31:26 -04:00
Axel-CH
3d6e186b30 allow position ajustment if position open 2024-10-07 12:35:09 -04:00
Matthias
584bbd93e0 tests: fix test to expected call count 2024-10-01 20:55:58 +02:00
Matthias
7e2d55743e Merge branch 'develop' into pr/Axel-CH/10062 2024-10-01 20:51:39 +02:00
Matthias
a194ef0b78 tests: revert accidental removal of leverage test case 2024-10-01 20:04:54 +02:00
Matthias
476960b5b7 tests: have apply different fix to exit_positions test 2024-10-01 20:01:49 +02:00
Axel-CH
69f0ea5199 remove unused import 2024-09-24 13:53:16 -04:00
Axel-CH
3fea958faf test cleanup 2024-09-24 13:47:28 -04:00
Axel-CH
5efc2a09e5 restore not having open order check before trying to retreive an exchange order 2024-09-24 13:00:59 -04:00
Axel-CH
9dd887f2ff update exit_positions, add trade.has_open_position check before trade handling, update comment 2024-09-24 12:39:16 -04:00
Axel-CH
bfaf9e690d add trade.has_open_position check to stoploss on exchange handling, remove deprecated comment 2024-09-24 12:26:36 -04:00
Axel-CH
beebc1743a simplify has_open_position property, restore process_open_trades_positions comment 2024-09-24 12:17:11 -04:00
Axel-CH
5ba592ff47 Merge remote-tracking branch 'origin/develop' into feature/proceed-exit-while-open-order 2024-09-24 11:58:15 -04:00
Axel-CH
bb4db022f0 remove unused properties 2024-09-24 11:11:42 -04:00
Axel-CH
418356f383 fix codespell 2024-09-20 19:23:30 -04:00
Axel-CH
c6d7ae9d27 fix ruff format 2024-09-20 19:10:52 -04:00
Axel-CH
0d3ab37eb7 fix test_trade_custom_data and test_backtest_results 2024-09-20 18:44:58 -04:00
Axel-CH
6b8ca7217b flake8 fix and cleanup 2024-09-11 21:48:48 -04:00
Axel-CH
2811a470aa handle pre existing open order cancelation on trade exit 2024-09-11 21:11:20 -04:00
Axel-CH
1fccdd8cda fix test_exit_positions 2024-09-11 18:59:29 -04:00
Axel-CH
33b421014d remove irrelevant trade.has_open_orders conditions 2024-09-11 18:42:51 -04:00
Axel-CH
730bef2920 add comments and logs for failing test, create untied_assets propertyto Trade 2024-09-09 19:28:04 -04:00
Axel-CH
79ce1ddaef rollback on process_open_trade_positions. Adjust position only if there is no open order, change will be made on other PR 2024-09-09 13:30:07 -04:00
Axel-CH
714822c93c add ETC/BTC pair to conftest get_markets 2024-09-09 13:15:17 -04:00
Axel-CH
fb3787173f fix test_exit_positions_exception 2024-09-09 12:07:50 -04:00
Axel-CH
e9ba0d2ce8 Merge remote-tracking branch 'origin/develop' into feature/proceed-exit-while-open-order 2024-09-06 17:29:07 -04:00
Axel-CH
6a580176ea Merge branch 'develop' into feature/proceed-exit-while-open-order 2024-07-01 17:49:40 -04:00
Axel-CH
910b3ad536 allow adjust trade position, even if there is an open order 2024-04-15 15:40:57 -04:00
Axel-CH
05cf4cab8e add has_open_entry_orders property to trade 2024-04-15 15:18:39 -04:00
Axel-CH
6752c3e288 add has_untied_assets, replace one has_open_orders condition by has_untied_assets in exit_positions 2024-04-15 14:43:40 -04:00
Axel-CH
faeda2a166 fix mypy error on has_open_position function 2024-04-14 00:40:12 -04:00
Axel-CH
3d67e0893a edit backtest_loop to check exit if trade has open position 2024-04-14 00:25:40 -04:00
216 changed files with 11967 additions and 5634 deletions

View File

@@ -16,6 +16,8 @@ jobs:
name: develop
steps:
- uses: actions/checkout@v4
with:
persist-credentials: false
- uses: actions/setup-python@v5
with:
@@ -42,6 +44,7 @@ jobs:
branch: update/binance-leverage-tiers
title: Update Binance Leverage Tiers
commit-message: "chore: update pre-commit hooks"
committer: Freqtrade Bot <noreply@github.com>
committer: Freqtrade Bot <154552126+freqtrade-bot@users.noreply.github.com>
author: Freqtrade Bot <154552126+freqtrade-bot@users.noreply.github.com>
body: Update binance leverage tiers.
delete-branch: true

View File

@@ -24,17 +24,28 @@ jobs:
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ "ubuntu-20.04", "ubuntu-22.04", "ubuntu-24.04" ]
os: [ "ubuntu-22.04", "ubuntu-24.04" ]
python-version: ["3.10", "3.11", "3.12"]
steps:
- uses: actions/checkout@v4
with:
persist-credentials: false
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
- name: Install uv
uses: astral-sh/setup-uv@v5
with:
enable-cache: true
python-version: ${{ matrix.python-version }}
cache-dependency-glob: "requirements**.txt"
cache-suffix: "${{ matrix.python-version }}"
prune-cache: false
- name: Cache_dependencies
uses: actions/cache@v4
id: cache
@@ -42,12 +53,6 @@ jobs:
path: ~/dependencies/
key: ${{ runner.os }}-dependencies
- name: pip cache (linux)
uses: actions/cache@v4
with:
path: ~/.cache/pip
key: pip-${{ matrix.python-version }}-ubuntu
- name: TA binary *nix
if: steps.cache.outputs.cache-hit != 'true'
run: |
@@ -55,13 +60,13 @@ jobs:
- name: Installation - *nix
run: |
python -m pip install --upgrade pip wheel
uv pip install --upgrade 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
pip install -r requirements-dev.txt
pip install -e ft_client/
pip install -e .
uv pip install -r requirements-dev.txt
uv pip install -e ft_client/
uv pip install -e .
- name: Check for version alignment
run: |
@@ -91,6 +96,11 @@ jobs:
run: |
python build_helpers/extract_config_json_schema.py
- name: Run command docs partials extract
# This should be kept before the repository check to ensure that the docs are up-to-date
run: |
python build_helpers/create_command_partials.py
- name: Check for repository changes
run: |
if [ -n "$(git status --porcelain)" ]; then
@@ -149,6 +159,8 @@ jobs:
steps:
- uses: actions/checkout@v4
with:
persist-credentials: false
- name: Set up Python
uses: actions/setup-python@v5
@@ -156,6 +168,15 @@ jobs:
python-version: ${{ matrix.python-version }}
check-latest: true
- name: Install uv
uses: astral-sh/setup-uv@v5
with:
enable-cache: true
python-version: ${{ matrix.python-version }}
cache-dependency-glob: "requirements**.txt"
cache-suffix: "${{ matrix.python-version }}"
prune-cache: false
- name: Cache_dependencies
uses: actions/cache@v4
id: cache
@@ -163,12 +184,6 @@ jobs:
path: ~/dependencies/
key: ${{ matrix.os }}-dependencies
- name: pip cache (macOS)
uses: actions/cache@v4
with:
path: ~/Library/Caches/pip
key: pip-${{ matrix.os }}-${{ matrix.python-version }}
- name: TA binary *nix
if: steps.cache.outputs.cache-hit != 'true'
run: |
@@ -200,13 +215,13 @@ jobs:
- name: Installation (python)
run: |
python -m pip install --upgrade pip wheel
uv pip install 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
pip install -r requirements-dev.txt
pip install -e ft_client/
pip install -e .
uv pip install -r requirements-dev.txt
uv pip install -e ft_client/
uv pip install -e .
- name: Tests
run: |
@@ -270,6 +285,8 @@ jobs:
steps:
- uses: actions/checkout@v4
with:
persist-credentials: false
- name: Set up Python
uses: actions/setup-python@v5
@@ -280,24 +297,21 @@ jobs:
uses: astral-sh/setup-uv@v5
with:
enable-cache: true
python-version: ${{ matrix.python-version }}
cache-dependency-glob: "requirements**.txt"
cache-suffix: "${{ matrix.python-version }}"
prune-cache: false
- name: Installation
run: |
uv venv
.venv\Scripts\activate
# persist the venv path for future steps
"$(pwd)/.venv/Scripts" >> $env:GITHUB_PATH
function uvpipFunction { uv pip $args }
Set-Alias -name pip -value uvpipFunction
./build_helpers/install_windows.ps1
- name: Tests
run: |
pytest --random-order
pytest --random-order --durations 20 -n auto
- name: Check for repository changes
run: |
@@ -358,6 +372,8 @@ jobs:
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v4
with:
persist-credentials: false
- name: Set up Python
uses: actions/setup-python@v5
@@ -373,6 +389,8 @@ jobs:
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v4
with:
persist-credentials: false
- uses: actions/setup-python@v5
with:
@@ -383,6 +401,8 @@ jobs:
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v4
with:
persist-credentials: false
- name: Documentation syntax
run: |
@@ -412,12 +432,23 @@ jobs:
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v4
with:
persist-credentials: false
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: "3.12"
- name: Install uv
uses: astral-sh/setup-uv@v5
with:
enable-cache: true
python-version: "3.12"
cache-dependency-glob: "requirements**.txt"
cache-suffix: "3.12"
prune-cache: false
- name: Cache_dependencies
uses: actions/cache@v4
id: cache
@@ -425,11 +456,6 @@ jobs:
path: ~/dependencies/
key: ${{ runner.os }}-dependencies
- name: pip cache (linux)
uses: actions/cache@v4
with:
path: ~/.cache/pip
key: pip-3.12-ubuntu
- name: TA binary *nix
if: steps.cache.outputs.cache-hit != 'true'
@@ -438,13 +464,13 @@ jobs:
- name: Installation - *nix
run: |
python -m pip install --upgrade pip wheel
uv pip install --upgrade 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
pip install -r requirements-dev.txt
pip install -e ft_client/
pip install -e .
uv pip install -r requirements-dev.txt
uv pip install -e ft_client/
uv pip install -e .
- name: Tests incl. ccxt compatibility tests
env:
@@ -494,6 +520,8 @@ jobs:
steps:
- uses: actions/checkout@v4
with:
persist-credentials: false
- name: Set up Python
uses: actions/setup-python@v5
@@ -539,6 +567,8 @@ jobs:
steps:
- uses: actions/checkout@v4
with:
persist-credentials: false
- name: Download artifact 📦
uses: actions/download-artifact@v4
@@ -548,7 +578,7 @@ jobs:
merge-multiple: true
- name: Publish to PyPI (Test)
uses: pypa/gh-action-pypi-publish@v1.12.3
uses: pypa/gh-action-pypi-publish@v1.12.4
with:
repository-url: https://test.pypi.org/legacy/
@@ -566,6 +596,8 @@ jobs:
steps:
- uses: actions/checkout@v4
with:
persist-credentials: false
- name: Download artifact 📦
uses: actions/download-artifact@v4
@@ -575,7 +607,7 @@ jobs:
merge-multiple: true
- name: Publish to PyPI
uses: pypa/gh-action-pypi-publish@v1.12.3
uses: pypa/gh-action-pypi-publish@v1.12.4
deploy-docker:
@@ -586,6 +618,8 @@ jobs:
steps:
- uses: actions/checkout@v4
with:
persist-credentials: false
- name: Set up Python
uses: actions/setup-python@v5
@@ -621,7 +655,9 @@ jobs:
uses: docker/setup-buildx-action@v3
- name: Available platforms
run: echo ${{ steps.buildx.outputs.platforms }}
run: echo ${PLATFORMS}
env:
PLATFORMS: ${{ steps.buildx.outputs.platforms }}
- name: Build and test and push docker images
env:
@@ -640,6 +676,8 @@ jobs:
steps:
- uses: actions/checkout@v4
with:
persist-credentials: false
- name: Extract branch name
id: extract-branch

View File

@@ -20,6 +20,8 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
persist-credentials: true
- name: Set up Python
uses: actions/setup-python@v5
@@ -43,12 +45,16 @@ jobs:
- name: Build and push Mike
if: ${{ github.event_name == 'push' }}
run: |
mike deploy ${{ github.ref_name }} latest --push --update-aliases
mike deploy ${REF_NAME} latest --push --update-aliases
env:
REF_NAME: ${{ github.ref_name }}
- name: Build and push Mike - Release
if: ${{ github.event_name == 'release' }}
run: |
mike deploy ${{ github.ref_name }} stable --push --update-aliases
mike deploy ${REF_NAME} stable --push --update-aliases
env:
REF_NAME: ${{ github.ref_name }}
- name: Show mike versions
run: |

View File

@@ -17,29 +17,26 @@ concurrency:
group: "${{ github.workflow }}"
cancel-in-progress: true
permissions:
packages: write
jobs:
build-and-push:
permissions:
packages: write
runs-on: ubuntu-latest
steps:
-
name: Checkout
id: checkout
uses: actions/checkout@v4
-
name: Login to GitHub Container Registry
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
-
name: Pre-build dev container image
uses: devcontainers/ci@v0.3
with:
subFolder: .github
imageName: ghcr.io/${{ github.repository }}-devcontainer
cacheFrom: ghcr.io/${{ github.repository }}-devcontainer
push: always
- uses: actions/checkout@v4
with:
persist-credentials: false
- name: Login to GitHub Container Registry
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Pre-build dev container image
uses: devcontainers/ci@v0.3
with:
subFolder: .github
imageName: ghcr.io/${{ github.repository }}-devcontainer
cacheFrom: ghcr.io/${{ github.repository }}-devcontainer
push: always

View File

@@ -4,11 +4,16 @@ on:
branches:
- stable
# disable permissions for all of the available permissions
permissions: {}
jobs:
dockerHubDescription:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
persist-credentials: false
- name: Docker Hub Description
uses: peter-evans/dockerhub-description@v4

View File

@@ -14,6 +14,8 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
persist-credentials: false
- uses: actions/setup-python@v5
with:
@@ -36,6 +38,7 @@ jobs:
branch: update/pre-commit-hooks
title: Update pre-commit hooks
commit-message: "chore: update pre-commit hooks"
committer: Freqtrade Bot <noreply@github.com>
committer: Freqtrade Bot <154552126+freqtrade-bot@users.noreply.github.com>
author: Freqtrade Bot <154552126+freqtrade-bot@users.noreply.github.com>
body: Update versions of pre-commit hooks to latest version.
delete-branch: true

View File

@@ -2,14 +2,14 @@
# See https://pre-commit.com/hooks.html for more hooks
repos:
- repo: https://github.com/pycqa/flake8
rev: "7.1.1"
rev: "7.1.2"
hooks:
- id: flake8
additional_dependencies: [Flake8-pyproject]
# stages: [push]
- repo: https://github.com/pre-commit/mirrors-mypy
rev: "v1.14.0"
rev: "v1.15.0"
hooks:
- id: mypy
exclude: build_helpers
@@ -19,11 +19,11 @@ repos:
- types-requests==2.32.0.20241016
- types-tabulate==0.9.0.20241207
- types-python-dateutil==2.9.0.20241206
- SQLAlchemy==2.0.36
- SQLAlchemy==2.0.38
# stages: [push]
- repo: https://github.com/pycqa/isort
rev: "5.13.2"
rev: "6.0.1"
hooks:
- id: isort
name: isort (python)
@@ -31,7 +31,7 @@ repos:
- repo: https://github.com/charliermarsh/ruff-pre-commit
# Ruff version.
rev: 'v0.8.4'
rev: 'v0.9.7'
hooks:
- id: ruff
- id: ruff-format
@@ -57,13 +57,19 @@ repos:
)$
- repo: https://github.com/stefmolin/exif-stripper
rev: 0.6.1
rev: 0.6.2
hooks:
- id: strip-exif
- repo: https://github.com/codespell-project/codespell
rev: v2.3.0
rev: v2.4.1
hooks:
- id: codespell
additional_dependencies:
- tomli
# Ensure github actions remain safe
- repo: https://github.com/woodruffw/zizmor-pre-commit
rev: v1.4.1
hooks:
- id: zizmor

View File

@@ -1,4 +1,4 @@
FROM python:3.12.7-slim-bookworm as base
FROM python:3.12.9-slim-bookworm as base
# Setup env
ENV LANG C.UTF-8
@@ -11,7 +11,7 @@ ENV FT_APP_ENV="docker"
# Prepare environment
RUN mkdir /freqtrade \
&& apt-get update \
&& apt-get -y install sudo libatlas3-base curl sqlite3 libhdf5-serial-dev libgomp1 \
&& apt-get -y install sudo libatlas3-base curl sqlite3 libgomp1 \
&& apt-get clean \
&& useradd -u 1000 -G sudo -U -m -s /bin/bash ftuser \
&& chown ftuser:ftuser /freqtrade \

View File

@@ -90,13 +90,13 @@ For further (native) installation methods, please refer to the [Installation doc
```
usage: freqtrade [-h] [-V]
{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,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-hyperoptloss,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,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,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-hyperoptloss,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
@@ -120,6 +120,7 @@ positional arguments:
list-markets Print markets on exchange.
list-pairs Print pairs on exchange.
list-strategies Print available strategies.
list-hyperoptloss Print available hyperopt loss functions.
list-freqaimodels Print available freqAI models.
list-timeframes Print available timeframes for the exchange.
show-trades Show trades.
@@ -136,7 +137,6 @@ positional arguments:
options:
-h, --help show this help message and exit
-V, --version show program's version number and exit
```
### Telegram RPC commands

View File

@@ -0,0 +1,53 @@
import subprocess
from pathlib import Path
subcommands = [
"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-hyperoptloss",
"list-freqaimodels",
"list-timeframes",
"show-trades",
"test-pairlist",
"convert-db",
"install-ui",
"plot-dataframe",
"plot-profit",
"webserver",
"strategy-updater",
"lookahead-analysis",
"recursive-analysis",
]
result = subprocess.run(["freqtrade", "--help"], capture_output=True, text=True)
with Path("docs/commands/main.md").open("w") as f:
f.write(f"```\n{result.stdout}\n```\n")
for command in subcommands:
print(f"Running for {command}")
result = subprocess.run(["freqtrade", command, "--help"], capture_output=True, text=True)
with Path(f"docs/commands/{command}.md").open("w") as f:
f.write(f"```\n{result.stdout}\n```\n")

View File

@@ -13,6 +13,10 @@
"description": "The timeframe to use (e.g `1m`, `5m`, `15m`, `30m`, `1h` ...). \nUsually specified in the strategy and missing in the configuration.",
"type": "string"
},
"proxy_coin": {
"description": "Proxy coin - must be used for specific futures modes (e.g. BNFCR)",
"type": "string"
},
"stake_currency": {
"description": "Currency used for staking.",
"type": "string"
@@ -975,7 +979,7 @@
"type": "string"
}
},
"x": {
"verbosity": {
"description": "Logging verbosity level.",
"type": "string",
"enum": [
@@ -1051,7 +1055,6 @@
"enum": [
"json",
"jsongz",
"hdf5",
"feather",
"parquet"
],
@@ -1063,7 +1066,6 @@
"enum": [
"json",
"jsongz",
"hdf5",
"feather",
"parquet"
],

View File

@@ -1,4 +1,4 @@
FROM python:3.11.10-slim-bookworm as base
FROM python:3.11.11-slim-bookworm as base
# Setup env
ENV LANG C.UTF-8
@@ -11,7 +11,7 @@ ENV FT_APP_ENV="docker"
# Prepare environment
RUN mkdir /freqtrade \
&& apt-get update \
&& apt-get -y install sudo libatlas3-base libopenblas-dev curl sqlite3 libhdf5-dev libutf8proc-dev libsnappy-dev \
&& apt-get -y install sudo libatlas3-base libopenblas-dev curl sqlite3 libutf8proc-dev libsnappy-dev \
&& apt-get clean \
&& useradd -u 1000 -G sudo -U -m ftuser \
&& chown ftuser:ftuser /freqtrade \
@@ -34,7 +34,7 @@ COPY build_helpers/* /tmp/
# Install dependencies
COPY --chown=ftuser:ftuser requirements.txt /freqtrade/
USER ftuser
RUN pip install --user --no-cache-dir numpy \
RUN pip install --user --no-cache-dir "numpy<2" \
&& pip install --user --no-index --find-links /tmp/ pyarrow TA-Lib \
&& pip install --user --no-cache-dir -r requirements.txt

View File

@@ -70,8 +70,8 @@ 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
dataframe["stacked_imbalances_bid"] # List of price levels of stacked bid imbalance range beginnings
dataframe["stacked_imbalances_ask"] # List of price levels of stacked ask imbalance range beginnings
```
You can access these columns in your strategy code for further analysis. Here's an example:

View File

@@ -7,111 +7,7 @@ To learn how to get data for the pairs and exchange you're interested in, head o
## Backtesting command reference
```
usage: freqtrade backtesting [-h] [-v] [--logfile FILE] [-V] [-c PATH]
[-d PATH] [--userdir PATH] [-s NAME]
[--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]
[--enable-protections]
[--dry-run-wallet DRY_RUN_WALLET]
[--timeframe-detail TIMEFRAME_DETAIL]
[--strategy-list STRATEGY_LIST [STRATEGY_LIST ...]]
[--export {none,trades,signals}]
[--export-filename PATH]
[--breakdown {day,week,month} [{day,week,month} ...]]
[--cache {none,day,week,month}]
[--freqai-backtest-live-models]
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,feather,parquet}
Storage format for downloaded candle (OHLCV) data.
(default: `feather`).
--max-open-trades INT
Override the value of the `max_open_trades`
configuration setting.
--stake-amount STAKE_AMOUNT
Override the value of the `stake_amount` configuration
setting.
--fee FLOAT Specify fee ratio. Will be applied twice (on trade
entry and exit).
-p PAIRS [PAIRS ...], --pairs PAIRS [PAIRS ...]
Limit command to these pairs. Pairs are space-
separated.
--eps, --enable-position-stacking
Allow buying the same pair multiple times (position
stacking).
--enable-protections, --enableprotections
Enable protections for backtesting.Will slow
backtesting down by a considerable amount, but will
include configured protections
--dry-run-wallet DRY_RUN_WALLET, --starting-balance DRY_RUN_WALLET
Starting balance, used for backtesting / hyperopt and
dry-runs.
--timeframe-detail TIMEFRAME_DETAIL
Specify detail timeframe for backtesting (`1m`, `5m`,
`30m`, `1h`, `1d`).
--strategy-list STRATEGY_LIST [STRATEGY_LIST ...]
Provide a space-separated list of strategies to
backtest. Please note that timeframe needs to be set
either in config or via command line. When using this
together with `--export trades`, the strategy-name is
injected into the filename (so `backtest-data.json`
becomes `backtest-data-SampleStrategy.json`
--export {none,trades,signals}
Export backtest results (default: trades).
--export-filename PATH, --backtest-filename PATH
Use this filename for backtest results.Requires
`--export` to be set as well. Example: `--export-filen
ame=user_data/backtest_results/backtest_today.json`
--breakdown {day,week,month} [{day,week,month} ...]
Show backtesting breakdown per [day, week, month].
--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-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.
Strategy arguments:
-s NAME, --strategy NAME
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.
```
--8<-- "commands/backtesting.md"
## Test your strategy with Backtesting
@@ -612,7 +508,12 @@ To utilize this, you can append `--timeframe-detail 5m` to your regular backtest
freqtrade backtesting --strategy AwesomeStrategy --timeframe 1h --timeframe-detail 5m
```
This will load 1h data as well as 5m data for the timeframe. The strategy will be analyzed with the 1h timeframe, and Entry orders will only be placed at the main timeframe, however Order fills and exit signals will be evaluated at the 5m candle, simulating intra-candle movements.
This will load 1h data (the main timeframe) as well as 5m data (detail timeframe) for the selected timerange.
The strategy will be analyzed with the 1h timeframe.
Candles where activity may take place (there's an active signal, the pair is in a trade) are evaluated at the 5m timeframe.
This will allow for a more accurate simulation of intra-candle movements - and can lead to different results, especially on higher timeframes.
Entries will generally still happen at the main candle's open, however freed trade slots may be freed earlier (if the exit signal is triggered on the 5m candle), which can then be used for a new trade of a different pair.
All callback functions (`custom_exit()`, `custom_stoploss()`, ... ) will be running for each 5m candle once the trade is opened (so 12 times in the above example of 1h timeframe, and 5m detailed timeframe).
@@ -624,6 +525,27 @@ Also, data must be available / downloaded already.
!!! Tip
You can use this function as the last part of strategy development, to ensure your strategy is not exploiting one of the [backtesting assumptions](#assumptions-made-by-backtesting). Strategies that perform similarly well with this mode have a good chance to perform well in dry/live modes too (although only forward-testing (dry-mode) can really confirm a strategy).
??? Sample "Extreme Difference Example"
Using `--timeframe-detail` on an extreme example (all below pairs have the 10:00 candle with an entry signal) may lead to the following backtesting Trade sequence with 1 max_open_trades:
| Pair | Entry Time | Exit Time | Duration |
|------|------------|-----------| -------- |
| BTC/USDT | 2024-01-01 10:00:00 | 2021-01-01 10:05:00 | 5m |
| ETH/USDT | 2024-01-01 10:05:00 | 2021-01-01 10:15:00 | 10m |
| XRP/USDT | 2024-01-01 10:15:00 | 2021-01-01 10:30:00 | 15m |
| SOL/USDT | 2024-01-01 10:15:00 | 2021-01-01 11:05:00 | 50m |
| BTC/USDT | 2024-01-01 11:05:00 | 2021-01-01 12:00:00 | 55m |
Without timeframe-detail, this would look like:
| Pair | Entry Time | Exit Time | Duration |
|------|------------|-----------| -------- |
| BTC/USDT | 2024-01-01 10:00:00 | 2021-01-01 11:00:00 | 1h |
| BTC/USDT | 2024-01-01 11:00:00 | 2021-01-01 12:00:00 | 1h |
The difference is significant, as without detail data, only the first `max_open_trades` signals per candle are evaluated, and the trade slots are only freed at the end of the candle, allowing for a new trade to be opened at the next candle.
## Backtesting multiple strategies
To compare multiple strategies, a list of Strategies can be provided to backtesting.

View File

@@ -54,11 +54,13 @@ By default, the bot loop runs every few seconds (`internals.process_throttle_sec
* Check timeouts for open orders.
* Calls `check_entry_timeout()` strategy callback for open entry orders.
* Calls `check_exit_timeout()` strategy callback for open exit orders.
* Calls `adjust_entry_price()` strategy callback for open entry orders.
* Calls `adjust_order_price()` strategy callback for open orders.
* Calls `adjust_entry_price()` strategy callback for open entry orders. *only called when `adjust_order_price()` is not implemented*
* Calls `adjust_exit_price()` strategy callback for open exit orders. *only called when `adjust_order_price()` is not implemented*
* Verifies existing positions and eventually places exit orders.
* Considers stoploss, ROI and exit-signal, `custom_exit()` and `custom_stoploss()`.
* Determine exit-price based on `exit_pricing` configuration setting or by using the `custom_exit_price()` callback.
* Before a exit order is placed, `confirm_trade_exit()` strategy callback is called.
* Before an exit order is placed, `confirm_trade_exit()` strategy callback is called.
* Check position adjustments for open trades if enabled by calling `adjust_trade_position()` and place additional order if required.
* Check if trade-slots are still available (if `max_open_trades` is reached).
* Verifies entry signal trying to enter new positions.
@@ -80,7 +82,9 @@ This loop will be repeated again and again until the bot is stopped.
* Loops per candle simulating entry and exit points.
* Calls `bot_loop_start()` strategy callback.
* Check for Order timeouts, either via the `unfilledtimeout` configuration, or via `check_entry_timeout()` / `check_exit_timeout()` strategy callbacks.
* Calls `adjust_entry_price()` strategy callback for open entry orders.
* Calls `adjust_order_price()` strategy callback for open orders.
* Calls `adjust_entry_price()` strategy callback for open entry orders. *only called when `adjust_order_price()` is not implemented!*
* Calls `adjust_exit_price()` strategy callback for open exit orders. *only called when `adjust_order_price()` is not implemented!*
* Check for trade entry signals (`enter_long` / `enter_short` columns).
* Confirm trade entry / exits (calls `confirm_trade_entry()` and `confirm_trade_exit()` if implemented in the strategy).
* Call `custom_entry_price()` (if implemented in the strategy) to determine entry price (Prices are moved to be within the opening candle).

View File

@@ -10,101 +10,11 @@ This page explains the different parameters of the bot and how to run it.
## Bot commands
```
usage: freqtrade [-h] [-V]
{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,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-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.
options:
-h, --help show this help message and exit
-V, --version show program's version number and exit
```
--8<-- "commands/main.md"
### Bot trading commands
```
usage: freqtrade trade [-h] [-v] [--logfile FILE] [-V] [-c PATH] [-d PATH]
[--userdir PATH] [-s NAME] [--strategy-path PATH]
[--db-url PATH] [--sd-notify] [--dry-run]
[--dry-run-wallet DRY_RUN_WALLET]
optional arguments:
-h, --help show this help message and exit
--db-url PATH Override trades database URL, this is useful in custom
deployments (default: `sqlite:///tradesv3.sqlite` for
Live Run mode, `sqlite:///tradesv3.dryrun.sqlite` for
Dry Run).
--sd-notify Notify systemd service manager.
--dry-run Enforce dry-run for trading (removes Exchange secrets
and simulates trades).
--dry-run-wallet DRY_RUN_WALLET, --starting-balance DRY_RUN_WALLET
Starting balance, used for backtesting / hyperopt and
dry-runs.
Common arguments:
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
--logfile 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
Path to directory with historical backtesting data.
--userdir PATH, --user-data-dir PATH
Path to userdata directory.
Strategy arguments:
-s NAME, --strategy NAME
Specify strategy class name which will be used by the
bot.
--strategy-path PATH Specify additional strategy lookup path.
```
--8<-- "commands/trade.md"
### How to specify which configuration file be used?

View File

@@ -0,0 +1,66 @@
```
usage: freqtrade backtesting-analysis [-h] [-v] [--no-color] [--logfile FILE]
[-V] [-c PATH] [-d PATH]
[--userdir PATH]
[--export-filename PATH]
[--analysis-groups {0,1,2,3,4,5} [{0,1,2,3,4,5} ...]]
[--enter-reason-list ENTER_REASON_LIST [ENTER_REASON_LIST ...]]
[--exit-reason-list EXIT_REASON_LIST [EXIT_REASON_LIST ...]]
[--indicator-list INDICATOR_LIST [INDICATOR_LIST ...]]
[--entry-only] [--exit-only]
[--timerange TIMERANGE]
[--rejected-signals] [--analysis-to-csv]
[--analysis-csv-path ANALYSIS_CSV_PATH]
options:
-h, --help show this help message and exit
--export-filename PATH, --backtest-filename PATH
Use this filename for backtest results.Requires
`--export` to be set as well. Example: `--export-filen
ame=user_data/backtest_results/backtest_today.json`
--analysis-groups {0,1,2,3,4,5} [{0,1,2,3,4,5} ...]
grouping output - 0: simple wins/losses by enter tag,
1: by enter_tag, 2: by enter_tag and exit_tag, 3: by
pair and enter_tag, 4: by pair, enter_ and exit_tag
(this can get quite large), 5: by exit_tag
--enter-reason-list ENTER_REASON_LIST [ENTER_REASON_LIST ...]
Space separated list of entry signals to analyse.
Default: all. e.g. 'entry_tag_a entry_tag_b'
--exit-reason-list EXIT_REASON_LIST [EXIT_REASON_LIST ...]
Space separated list of exit signals to analyse.
Default: all. e.g. 'exit_tag_a roi stop_loss
trailing_stop_loss'
--indicator-list INDICATOR_LIST [INDICATOR_LIST ...]
Space separated list of indicators to analyse. e.g.
'close rsi bb_lowerband profit_abs'
--entry-only Only analyze entry signals.
--exit-only Only analyze exit signals.
--timerange TIMERANGE
Specify what timerange of data to use.
--rejected-signals Analyse rejected signals
--analysis-to-csv Save selected analysis tables to individual CSVs
--analysis-csv-path ANALYSIS_CSV_PATH
Specify a path to save the analysis CSVs if
--analysis-to-csv is enabled. Default:
user_data/basktesting_results/
Common arguments:
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
--no-color Disable colorization of hyperopt results. May be
useful if you are redirecting output to a file.
--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.
```

View File

@@ -0,0 +1,36 @@
```
usage: freqtrade backtesting-show [-h] [-v] [--no-color] [--logfile FILE] [-V]
[-c PATH] [-d PATH] [--userdir PATH]
[--export-filename PATH] [--show-pair-list]
[--breakdown {day,week,month} [{day,week,month} ...]]
options:
-h, --help show this help message and exit
--export-filename PATH, --backtest-filename PATH
Use this filename for backtest results.Requires
`--export` to be set as well. Example: `--export-filen
ame=user_data/backtest_results/backtest_today.json`
--show-pair-list Show backtesting pairlist sorted by profit.
--breakdown {day,week,month} [{day,week,month} ...]
Show backtesting breakdown per [day, week, month].
Common arguments:
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
--no-color Disable colorization of hyperopt results. May be
useful if you are redirecting output to a file.
--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.
```

View File

@@ -0,0 +1,107 @@
```
usage: freqtrade backtesting [-h] [-v] [--no-color] [--logfile FILE] [-V]
[-c PATH] [-d PATH] [--userdir PATH] [-s NAME]
[--strategy-path PATH]
[--recursive-strategy-search]
[--freqaimodel NAME] [--freqaimodel-path PATH]
[-i TIMEFRAME] [--timerange TIMERANGE]
[--data-format-ohlcv {json,jsongz,feather,parquet}]
[--max-open-trades INT]
[--stake-amount STAKE_AMOUNT] [--fee FLOAT]
[-p PAIRS [PAIRS ...]] [--eps]
[--enable-protections]
[--dry-run-wallet DRY_RUN_WALLET]
[--timeframe-detail TIMEFRAME_DETAIL]
[--strategy-list STRATEGY_LIST [STRATEGY_LIST ...]]
[--export {none,trades,signals}]
[--export-filename PATH]
[--breakdown {day,week,month} [{day,week,month} ...]]
[--cache {none,day,week,month}]
[--freqai-backtest-live-models]
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,feather,parquet}
Storage format for downloaded candle (OHLCV) data.
(default: `feather`).
--max-open-trades INT
Override the value of the `max_open_trades`
configuration setting.
--stake-amount STAKE_AMOUNT
Override the value of the `stake_amount` configuration
setting.
--fee FLOAT Specify fee ratio. Will be applied twice (on trade
entry and exit).
-p PAIRS [PAIRS ...], --pairs PAIRS [PAIRS ...]
Limit command to these pairs. Pairs are space-
separated.
--eps, --enable-position-stacking
Allow buying the same pair multiple times (position
stacking).
--enable-protections, --enableprotections
Enable protections for backtesting.Will slow
backtesting down by a considerable amount, but will
include configured protections
--dry-run-wallet DRY_RUN_WALLET, --starting-balance DRY_RUN_WALLET
Starting balance, used for backtesting / hyperopt and
dry-runs.
--timeframe-detail TIMEFRAME_DETAIL
Specify detail timeframe for backtesting (`1m`, `5m`,
`30m`, `1h`, `1d`).
--strategy-list STRATEGY_LIST [STRATEGY_LIST ...]
Provide a space-separated list of strategies to
backtest. Please note that timeframe needs to be set
either in config or via command line. When using this
together with `--export trades`, the strategy-name is
injected into the filename (so `backtest-data.json`
becomes `backtest-data-SampleStrategy.json`
--export {none,trades,signals}
Export backtest results (default: trades).
--export-filename PATH, --backtest-filename PATH
Use this filename for backtest results.Requires
`--export` to be set as well. Example: `--export-filen
ame=user_data/backtest_results/backtest_today.json`
--breakdown {day,week,month} [{day,week,month} ...]
Show backtesting breakdown per [day, week, month].
--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).
--no-color Disable colorization of hyperopt results. May be
useful if you are redirecting output to a file.
--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.
Strategy arguments:
-s NAME, --strategy NAME
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.
```

View File

@@ -0,0 +1,52 @@
```
usage: freqtrade convert-data [-h] [-v] [--no-color] [--logfile FILE] [-V]
[-c PATH] [-d PATH] [--userdir PATH]
[-p PAIRS [PAIRS ...]] --format-from
{json,jsongz,feather,parquet} --format-to
{json,jsongz,feather,parquet} [--erase]
[--exchange EXCHANGE]
[-t TIMEFRAMES [TIMEFRAMES ...]]
[--trading-mode {spot,margin,futures}]
[--candle-types {spot,futures,mark,index,premiumIndex,funding_rate} [{spot,futures,mark,index,premiumIndex,funding_rate} ...]]
options:
-h, --help show this help message and exit
-p PAIRS [PAIRS ...], --pairs PAIRS [PAIRS ...]
Limit command to these pairs. Pairs are space-
separated.
--format-from {json,jsongz,feather,parquet}
Source format for data conversion.
--format-to {json,jsongz,feather,parquet}
Destination format for data conversion.
--erase Clean all existing data for the selected
exchange/pairs/timeframes.
--exchange EXCHANGE Exchange name. Only valid if no config is provided.
-t TIMEFRAMES [TIMEFRAMES ...], --timeframes TIMEFRAMES [TIMEFRAMES ...]
Specify which tickers to download. Space-separated
list. Default: `1m 5m`.
--trading-mode {spot,margin,futures}, --tradingmode {spot,margin,futures}
Select Trading mode
--candle-types {spot,futures,mark,index,premiumIndex,funding_rate} [{spot,futures,mark,index,premiumIndex,funding_rate} ...]
Select candle type to convert. Defaults to all
available types.
Common arguments:
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
--no-color Disable colorization of hyperopt results. May be
useful if you are redirecting output to a file.
--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.
```

View File

@@ -0,0 +1,12 @@
```
usage: freqtrade convert-db [-h] [--db-url PATH] [--db-url-from PATH]
options:
-h, --help show this help message and exit
--db-url PATH Override trades database URL, this is useful in custom
deployments (default: `sqlite:///tradesv3.sqlite` for
Live Run mode, `sqlite:///tradesv3.dryrun.sqlite` for
Dry Run).
--db-url-from PATH Source db url to use when migrating a database.
```

View File

@@ -0,0 +1,41 @@
```
usage: freqtrade convert-trade-data [-h] [-v] [--no-color] [--logfile FILE]
[-V] [-c PATH] [-d PATH] [--userdir PATH]
[-p PAIRS [PAIRS ...]] --format-from
{json,jsongz,feather,parquet,kraken_csv}
--format-to {json,jsongz,feather,parquet}
[--erase] [--exchange EXCHANGE]
options:
-h, --help show this help message and exit
-p PAIRS [PAIRS ...], --pairs PAIRS [PAIRS ...]
Limit command to these pairs. Pairs are space-
separated.
--format-from {json,jsongz,feather,parquet,kraken_csv}
Source format for data conversion.
--format-to {json,jsongz,feather,parquet}
Destination format for data conversion.
--erase Clean all existing data for the selected
exchange/pairs/timeframes.
--exchange EXCHANGE Exchange name. Only valid if no config is provided.
Common arguments:
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
--no-color Disable colorization of hyperopt results. May be
useful if you are redirecting output to a file.
--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.
```

View File

@@ -0,0 +1,10 @@
```
usage: freqtrade create-userdir [-h] [--userdir PATH] [--reset]
options:
-h, --help show this help message and exit
--userdir PATH, --user-data-dir PATH
Path to userdata directory.
--reset Reset sample files to their original state.
```

View File

@@ -0,0 +1,70 @@
```
usage: freqtrade download-data [-h] [-v] [--no-color] [--logfile FILE] [-V]
[-c PATH] [-d PATH] [--userdir PATH]
[-p PAIRS [PAIRS ...]] [--pairs-file FILE]
[--days INT] [--new-pairs-days INT]
[--include-inactive-pairs]
[--timerange TIMERANGE] [--dl-trades]
[--convert] [--exchange EXCHANGE]
[-t TIMEFRAMES [TIMEFRAMES ...]] [--erase]
[--data-format-ohlcv {json,jsongz,feather,parquet}]
[--data-format-trades {json,jsongz,feather,parquet}]
[--trading-mode {spot,margin,futures}]
[--prepend]
options:
-h, --help show this help message and exit
-p PAIRS [PAIRS ...], --pairs PAIRS [PAIRS ...]
Limit command to these pairs. Pairs are space-
separated.
--pairs-file FILE File containing a list of pairs. Takes precedence over
--pairs or pairs configured in the configuration.
--days INT Download data for given number of days.
--new-pairs-days INT Download data of new pairs for given number of days.
Default: `None`.
--include-inactive-pairs
Also download data from inactive pairs.
--timerange TIMERANGE
Specify what timerange of data to use.
--dl-trades Download trades instead of OHLCV data.
--convert Convert downloaded trades to OHLCV data. Only
applicable in combination with `--dl-trades`. Will be
automatic for exchanges which don't have historic
OHLCV (e.g. Kraken). If not provided, use `trades-to-
ohlcv` to convert trades data to OHLCV data.
--exchange EXCHANGE Exchange name. Only valid if no config is provided.
-t TIMEFRAMES [TIMEFRAMES ...], --timeframes TIMEFRAMES [TIMEFRAMES ...]
Specify which tickers to download. Space-separated
list. Default: `1m 5m`.
--erase Clean all existing data for the selected
exchange/pairs/timeframes.
--data-format-ohlcv {json,jsongz,feather,parquet}
Storage format for downloaded candle (OHLCV) data.
(default: `feather`).
--data-format-trades {json,jsongz,feather,parquet}
Storage format for downloaded trades data. (default:
`feather`).
--trading-mode {spot,margin,futures}, --tradingmode {spot,margin,futures}
Select Trading mode
--prepend Allow data prepending. (Data-appending is disabled)
Common arguments:
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
--no-color Disable colorization of hyperopt results. May be
useful if you are redirecting output to a file.
--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.
```

69
docs/commands/edge.md Normal file
View File

@@ -0,0 +1,69 @@
```
usage: freqtrade edge [-h] [-v] [--no-color] [--logfile FILE] [-V] [-c PATH]
[-d PATH] [--userdir PATH] [-s NAME]
[--strategy-path PATH] [--recursive-strategy-search]
[--freqaimodel NAME] [--freqaimodel-path PATH]
[-i TIMEFRAME] [--timerange TIMERANGE]
[--data-format-ohlcv {json,jsongz,feather,parquet}]
[--max-open-trades INT] [--stake-amount STAKE_AMOUNT]
[--fee FLOAT] [-p PAIRS [PAIRS ...]]
[--stoplosses STOPLOSS_RANGE]
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,feather,parquet}
Storage format for downloaded candle (OHLCV) data.
(default: `feather`).
--max-open-trades INT
Override the value of the `max_open_trades`
configuration setting.
--stake-amount STAKE_AMOUNT
Override the value of the `stake_amount` configuration
setting.
--fee FLOAT Specify fee ratio. Will be applied twice (on trade
entry and exit).
-p PAIRS [PAIRS ...], --pairs PAIRS [PAIRS ...]
Limit command to these pairs. Pairs are space-
separated.
--stoplosses STOPLOSS_RANGE
Defines a range of stoploss values against which edge
will assess the strategy. The format is "min,max,step"
(without any space). Example:
`--stoplosses=-0.01,-0.1,-0.001`
Common arguments:
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
--no-color Disable colorization of hyperopt results. May be
useful if you are redirecting output to a file.
--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.
Strategy arguments:
-s NAME, --strategy NAME
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.
```

View File

@@ -0,0 +1,62 @@
```
usage: freqtrade hyperopt-list [-h] [-v] [--no-color] [--logfile FILE] [-V]
[-c PATH] [-d PATH] [--userdir PATH] [--best]
[--profitable] [--min-trades INT]
[--max-trades INT] [--min-avg-time FLOAT]
[--max-avg-time FLOAT] [--min-avg-profit FLOAT]
[--max-avg-profit FLOAT]
[--min-total-profit FLOAT]
[--max-total-profit FLOAT]
[--min-objective FLOAT] [--max-objective FLOAT]
[--print-json] [--no-details]
[--hyperopt-filename FILENAME]
[--export-csv FILE]
options:
-h, --help show this help message and exit
--best Select only best epochs.
--profitable Select only profitable epochs.
--min-trades INT Select epochs with more than INT trades.
--max-trades INT Select epochs with less than INT trades.
--min-avg-time FLOAT Select epochs above average time.
--max-avg-time FLOAT Select epochs below average time.
--min-avg-profit FLOAT
Select epochs above average profit.
--max-avg-profit FLOAT
Select epochs below average profit.
--min-total-profit FLOAT
Select epochs above total profit.
--max-total-profit FLOAT
Select epochs below total profit.
--min-objective FLOAT
Select epochs above objective.
--max-objective FLOAT
Select epochs below objective.
--print-json Print output in JSON format.
--no-details Do not print best epoch details.
--hyperopt-filename FILENAME
Hyperopt result filename.Example: `--hyperopt-
filename=hyperopt_results_2020-09-27_16-20-48.pickle`
--export-csv FILE Export to CSV-File. This will disable table print.
Example: --export-csv hyperopt.csv
Common arguments:
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
--no-color Disable colorization of hyperopt results. May be
useful if you are redirecting output to a file.
--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.
```

View File

@@ -0,0 +1,43 @@
```
usage: freqtrade hyperopt-show [-h] [-v] [--no-color] [--logfile FILE] [-V]
[-c PATH] [-d PATH] [--userdir PATH] [--best]
[--profitable] [-n INT] [--print-json]
[--hyperopt-filename FILENAME] [--no-header]
[--disable-param-export]
[--breakdown {day,week,month} [{day,week,month} ...]]
options:
-h, --help show this help message and exit
--best Select only best epochs.
--profitable Select only profitable epochs.
-n INT, --index INT Specify the index of the epoch to print details for.
--print-json Print output in JSON format.
--hyperopt-filename FILENAME
Hyperopt result filename.Example: `--hyperopt-
filename=hyperopt_results_2020-09-27_16-20-48.pickle`
--no-header Do not print epoch details header.
--disable-param-export
Disable automatic hyperopt parameter export.
--breakdown {day,week,month} [{day,week,month} ...]
Show backtesting breakdown per [day, week, month].
Common arguments:
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
--no-color Disable colorization of hyperopt results. May be
useful if you are redirecting output to a file.
--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.
```

121
docs/commands/hyperopt.md Normal file
View File

@@ -0,0 +1,121 @@
```
usage: freqtrade hyperopt [-h] [-v] [--no-color] [--logfile FILE] [-V]
[-c PATH] [-d PATH] [--userdir PATH] [-s NAME]
[--strategy-path PATH] [--recursive-strategy-search]
[--freqaimodel NAME] [--freqaimodel-path PATH]
[-i TIMEFRAME] [--timerange TIMERANGE]
[--data-format-ohlcv {json,jsongz,feather,parquet}]
[--max-open-trades INT]
[--stake-amount STAKE_AMOUNT] [--fee FLOAT]
[-p PAIRS [PAIRS ...]] [--hyperopt-path PATH]
[--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} ...]]
[--print-all] [--print-json] [-j JOBS]
[--random-state INT] [--min-trades INT]
[--hyperopt-loss NAME] [--disable-param-export]
[--ignore-missing-spaces] [--analyze-per-epoch]
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,feather,parquet}
Storage format for downloaded candle (OHLCV) data.
(default: `feather`).
--max-open-trades INT
Override the value of the `max_open_trades`
configuration setting.
--stake-amount STAKE_AMOUNT
Override the value of the `stake_amount` configuration
setting.
--fee FLOAT Specify fee ratio. Will be applied twice (on trade
entry and exit).
-p PAIRS [PAIRS ...], --pairs PAIRS [PAIRS ...]
Limit command to these pairs. Pairs are space-
separated.
--hyperopt-path PATH Specify additional lookup path for Hyperopt Loss
functions.
--eps, --enable-position-stacking
Allow buying the same pair multiple times (position
stacking).
--enable-protections, --enableprotections
Enable protections for backtesting.Will slow
backtesting down by a considerable amount, but will
include configured protections
--dry-run-wallet DRY_RUN_WALLET, --starting-balance DRY_RUN_WALLET
Starting balance, used for backtesting / hyperopt and
dry-runs.
--timeframe-detail TIMEFRAME_DETAIL
Specify detail timeframe for backtesting (`1m`, `5m`,
`30m`, `1h`, `1d`).
-e INT, --epochs INT Specify number of epochs (default: 100).
--spaces {all,buy,sell,roi,stoploss,trailing,protection,trades,default} [{all,buy,sell,roi,stoploss,trailing,protection,trades,default} ...]
Specify which parameters to hyperopt. Space-separated
list.
--print-all Print all results, not only the best ones.
--print-json Print output in JSON format.
-j JOBS, --job-workers JOBS
The number of concurrently running jobs for
hyperoptimization (hyperopt worker processes). If -1
(default), all CPUs are used, for -2, all CPUs but one
are used, etc. If 1 is given, no parallel computing
code is used at all.
--random-state INT Set random state to some positive integer for
reproducible hyperopt results.
--min-trades INT Set minimal desired number of trades for evaluations
in the hyperopt optimization path (default: 1).
--hyperopt-loss NAME, --hyperoptloss NAME
Specify the class name of the hyperopt loss function
class (IHyperOptLoss). Different functions can
generate completely different results, since the
target for optimization is different. Built-in
Hyperopt-loss-functions are:
ShortTradeDurHyperOptLoss, OnlyProfitHyperOptLoss,
SharpeHyperOptLoss, SharpeHyperOptLossDaily,
SortinoHyperOptLoss, SortinoHyperOptLossDaily,
CalmarHyperOptLoss, MaxDrawDownHyperOptLoss,
MaxDrawDownRelativeHyperOptLoss,
ProfitDrawDownHyperOptLoss, MultiMetricHyperOptLoss
--disable-param-export
Disable automatic hyperopt parameter export.
--ignore-missing-spaces, --ignore-unparameterized-spaces
Suppress errors for any requested Hyperopt spaces that
do not contain any parameters.
--analyze-per-epoch Run populate_indicators once per epoch.
Common arguments:
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
--no-color Disable colorization of hyperopt results. May be
useful if you are redirecting output to a file.
--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.
Strategy arguments:
-s NAME, --strategy NAME
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.
```

View File

@@ -0,0 +1,11 @@
```
usage: freqtrade install-ui [-h] [--erase] [--ui-version UI_VERSION]
options:
-h, --help show this help message and exit
--erase Clean UI folder, don't download new version.
--ui-version UI_VERSION
Specify a specific version of FreqUI to install. Not
specifying this installs the latest version.
```

View File

@@ -0,0 +1,48 @@
```
usage: freqtrade list-data [-h] [-v] [--no-color] [--logfile FILE] [-V]
[-c PATH] [-d PATH] [--userdir PATH]
[--exchange EXCHANGE]
[--data-format-ohlcv {json,jsongz,feather,parquet}]
[--data-format-trades {json,jsongz,feather,parquet}]
[--trades] [-p PAIRS [PAIRS ...]]
[--trading-mode {spot,margin,futures}]
[--show-timerange]
options:
-h, --help show this help message and exit
--exchange EXCHANGE Exchange name. Only valid if no config is provided.
--data-format-ohlcv {json,jsongz,feather,parquet}
Storage format for downloaded candle (OHLCV) data.
(default: `feather`).
--data-format-trades {json,jsongz,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.
--trading-mode {spot,margin,futures}, --tradingmode {spot,margin,futures}
Select Trading mode
--show-timerange Show timerange available for available data. (May take
a while to calculate).
Common arguments:
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
--no-color Disable colorization of hyperopt results. May be
useful if you are redirecting output to a file.
--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.
```

View File

@@ -0,0 +1,29 @@
```
usage: freqtrade list-exchanges [-h] [-v] [--no-color] [--logfile FILE] [-V]
[-c PATH] [-d PATH] [--userdir PATH] [-1] [-a]
options:
-h, --help show this help message and exit
-1, --one-column Print output in one column.
-a, --all Print all exchanges known to the ccxt library.
Common arguments:
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
--no-color Disable colorization of hyperopt results. May be
useful if you are redirecting output to a file.
--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.
```

View File

@@ -0,0 +1,31 @@
```
usage: freqtrade list-freqaimodels [-h] [-v] [--no-color] [--logfile FILE]
[-V] [-c PATH] [-d PATH] [--userdir PATH]
[--freqaimodel-path PATH] [-1]
options:
-h, --help show this help message and exit
--freqaimodel-path PATH
Specify additional lookup path for freqaimodels.
-1, --one-column Print output in one column.
Common arguments:
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
--no-color Disable colorization of hyperopt results. May be
useful if you are redirecting output to a file.
--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.
```

View File

@@ -0,0 +1,31 @@
```
usage: freqtrade list-hyperoptloss [-h] [-v] [--no-color] [--logfile FILE]
[-V] [-c PATH] [-d PATH] [--userdir PATH]
[--hyperopt-path PATH] [-1]
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.
Common arguments:
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
--no-color Disable colorization of hyperopt results. May be
useful if you are redirecting output to a file.
--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.
```

View File

@@ -0,0 +1,46 @@
```
usage: freqtrade list-markets [-h] [-v] [--no-color] [--logfile FILE] [-V]
[-c PATH] [-d PATH] [--userdir PATH]
[--exchange EXCHANGE] [--print-list]
[--print-json] [-1] [--print-csv]
[--base BASE_CURRENCY [BASE_CURRENCY ...]]
[--quote QUOTE_CURRENCY [QUOTE_CURRENCY ...]]
[-a] [--trading-mode {spot,margin,futures}]
options:
-h, --help show this help message and exit
--exchange EXCHANGE Exchange name. Only valid if no config is provided.
--print-list Print list of pairs or market symbols. By default data
is printed in the tabular format.
--print-json Print list of pairs or market symbols in JSON format.
-1, --one-column Print output in one column.
--print-csv Print exchange pair or market data in the csv format.
--base BASE_CURRENCY [BASE_CURRENCY ...]
Specify base currency(-ies). Space-separated list.
--quote QUOTE_CURRENCY [QUOTE_CURRENCY ...]
Specify quote currency(-ies). Space-separated list.
-a, --all Print all pairs or market symbols. By default only
active ones are shown.
--trading-mode {spot,margin,futures}, --tradingmode {spot,margin,futures}
Select Trading mode
Common arguments:
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
--no-color Disable colorization of hyperopt results. May be
useful if you are redirecting output to a file.
--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.
```

View File

@@ -0,0 +1,46 @@
```
usage: freqtrade list-pairs [-h] [-v] [--no-color] [--logfile FILE] [-V]
[-c PATH] [-d PATH] [--userdir PATH]
[--exchange EXCHANGE] [--print-list]
[--print-json] [-1] [--print-csv]
[--base BASE_CURRENCY [BASE_CURRENCY ...]]
[--quote QUOTE_CURRENCY [QUOTE_CURRENCY ...]] [-a]
[--trading-mode {spot,margin,futures}]
options:
-h, --help show this help message and exit
--exchange EXCHANGE Exchange name. Only valid if no config is provided.
--print-list Print list of pairs or market symbols. By default data
is printed in the tabular format.
--print-json Print list of pairs or market symbols in JSON format.
-1, --one-column Print output in one column.
--print-csv Print exchange pair or market data in the csv format.
--base BASE_CURRENCY [BASE_CURRENCY ...]
Specify base currency(-ies). Space-separated list.
--quote QUOTE_CURRENCY [QUOTE_CURRENCY ...]
Specify quote currency(-ies). Space-separated list.
-a, --all Print all pairs or market symbols. By default only
active ones are shown.
--trading-mode {spot,margin,futures}, --tradingmode {spot,margin,futures}
Select Trading mode
Common arguments:
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
--no-color Disable colorization of hyperopt results. May be
useful if you are redirecting output to a file.
--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.
```

View File

@@ -0,0 +1,34 @@
```
usage: freqtrade list-strategies [-h] [-v] [--no-color] [--logfile FILE] [-V]
[-c PATH] [-d PATH] [--userdir PATH]
[--strategy-path PATH] [-1]
[--recursive-strategy-search]
options:
-h, --help show this help message and exit
--strategy-path PATH Specify additional strategy lookup path.
-1, --one-column Print output in one column.
--recursive-strategy-search
Recursively search for a strategy in the strategies
folder.
Common arguments:
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
--no-color Disable colorization of hyperopt results. May be
useful if you are redirecting output to a file.
--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.
```

View File

@@ -0,0 +1,30 @@
```
usage: freqtrade list-timeframes [-h] [-v] [--no-color] [--logfile FILE] [-V]
[-c PATH] [-d PATH] [--userdir PATH]
[--exchange EXCHANGE] [-1]
options:
-h, --help show this help message and exit
--exchange EXCHANGE Exchange name. Only valid if no config is provided.
-1, --one-column Print output in one column.
Common arguments:
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
--no-color Disable colorization of hyperopt results. May be
useful if you are redirecting output to a file.
--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.
```

View File

@@ -0,0 +1,108 @@
```
usage: freqtrade lookahead-analysis [-h] [-v] [--no-color] [--logfile FILE]
[-V] [-c PATH] [-d PATH] [--userdir PATH]
[-s NAME] [--strategy-path PATH]
[--recursive-strategy-search]
[--freqaimodel NAME]
[--freqaimodel-path PATH] [-i TIMEFRAME]
[--timerange TIMERANGE]
[--data-format-ohlcv {json,jsongz,feather,parquet}]
[--max-open-trades INT]
[--stake-amount STAKE_AMOUNT]
[--fee FLOAT] [-p PAIRS [PAIRS ...]]
[--enable-protections]
[--dry-run-wallet DRY_RUN_WALLET]
[--timeframe-detail TIMEFRAME_DETAIL]
[--strategy-list STRATEGY_LIST [STRATEGY_LIST ...]]
[--export {none,trades,signals}]
[--export-filename PATH]
[--freqai-backtest-live-models]
[--minimum-trade-amount INT]
[--targeted-trade-amount INT]
[--lookahead-analysis-exportfilename LOOKAHEAD_ANALYSIS_EXPORTFILENAME]
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,feather,parquet}
Storage format for downloaded candle (OHLCV) data.
(default: `feather`).
--max-open-trades INT
Override the value of the `max_open_trades`
configuration setting.
--stake-amount STAKE_AMOUNT
Override the value of the `stake_amount` configuration
setting.
--fee FLOAT Specify fee ratio. Will be applied twice (on trade
entry and exit).
-p PAIRS [PAIRS ...], --pairs PAIRS [PAIRS ...]
Limit command to these pairs. Pairs are space-
separated.
--enable-protections, --enableprotections
Enable protections for backtesting.Will slow
backtesting down by a considerable amount, but will
include configured protections
--dry-run-wallet DRY_RUN_WALLET, --starting-balance DRY_RUN_WALLET
Starting balance, used for backtesting / hyperopt and
dry-runs.
--timeframe-detail TIMEFRAME_DETAIL
Specify detail timeframe for backtesting (`1m`, `5m`,
`30m`, `1h`, `1d`).
--strategy-list STRATEGY_LIST [STRATEGY_LIST ...]
Provide a space-separated list of strategies to
backtest. Please note that timeframe needs to be set
either in config or via command line. When using this
together with `--export trades`, the strategy-name is
injected into the filename (so `backtest-data.json`
becomes `backtest-data-SampleStrategy.json`
--export {none,trades,signals}
Export backtest results (default: trades).
--export-filename PATH, --backtest-filename PATH
Use this filename for backtest results.Requires
`--export` to be set as well. Example: `--export-filen
ame=user_data/backtest_results/backtest_today.json`
--freqai-backtest-live-models
Run backtest with ready models.
--minimum-trade-amount INT
Minimum trade amount for lookahead-analysis
--targeted-trade-amount INT
Targeted trade amount for lookahead analysis
--lookahead-analysis-exportfilename LOOKAHEAD_ANALYSIS_EXPORTFILENAME
Use this csv-filename to store lookahead-analysis-
results
Common arguments:
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
--no-color Disable colorization of hyperopt results. May be
useful if you are redirecting output to a file.
--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.
Strategy arguments:
-s NAME, --strategy NAME
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.
```

51
docs/commands/main.md Normal file
View File

@@ -0,0 +1,51 @@
```
usage: freqtrade [-h] [-V]
{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-hyperoptloss,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,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-hyperoptloss,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-markets Print markets on exchange.
list-pairs Print pairs on exchange.
list-strategies Print available strategies.
list-hyperoptloss Print available hyperopt loss functions.
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.
options:
-h, --help show this help message and exit
-V, --version show program's version number and exit
```

View File

@@ -0,0 +1,12 @@
```
usage: freqtrade new-config [-h] [-c PATH]
options:
-h, --help show this help message 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.
```

View File

@@ -0,0 +1,19 @@
```
usage: freqtrade new-strategy [-h] [--userdir PATH] [-s NAME]
[--strategy-path PATH]
[--template {full,minimal,advanced}]
options:
-h, --help show this help message and exit
--userdir PATH, --user-data-dir PATH
Path to userdata directory.
-s NAME, --strategy NAME
Specify strategy class name which will be used by the
bot.
--strategy-path PATH Specify additional strategy lookup path.
--template {full,minimal,advanced}
Use a template which is either `minimal`, `full`
(containing multiple sample indicators) or `advanced`.
Default: `full`.
```

View File

@@ -0,0 +1,82 @@
```
usage: freqtrade plot-dataframe [-h] [-v] [--no-color] [--logfile FILE] [-V]
[-c PATH] [-d PATH] [--userdir PATH] [-s NAME]
[--strategy-path PATH]
[--recursive-strategy-search]
[--freqaimodel NAME] [--freqaimodel-path PATH]
[-p PAIRS [PAIRS ...]]
[--indicators1 INDICATORS1 [INDICATORS1 ...]]
[--indicators2 INDICATORS2 [INDICATORS2 ...]]
[--plot-limit INT] [--db-url PATH]
[--trade-source {DB,file}]
[--export {none,trades,signals}]
[--export-filename PATH]
[--timerange TIMERANGE] [-i TIMEFRAME]
[--no-trades]
options:
-h, --help show this help message and exit
-p PAIRS [PAIRS ...], --pairs PAIRS [PAIRS ...]
Limit command to these pairs. Pairs are space-
separated.
--indicators1 INDICATORS1 [INDICATORS1 ...]
Set indicators from your strategy you want in the
first row of the graph. Space-separated list. Example:
`ema3 ema5`. Default: `['sma', 'ema3', 'ema5']`.
--indicators2 INDICATORS2 [INDICATORS2 ...]
Set indicators from your strategy you want in the
third row of the graph. Space-separated list. Example:
`fastd fastk`. Default: `['macd', 'macdsignal']`.
--plot-limit INT Specify tick limit for plotting. Notice: too high
values cause huge files. Default: 750.
--db-url PATH Override trades database URL, this is useful in custom
deployments (default: `sqlite:///tradesv3.sqlite` for
Live Run mode, `sqlite:///tradesv3.dryrun.sqlite` for
Dry Run).
--trade-source {DB,file}
Specify the source for trades (Can be DB or file
(backtest file)) Default: file
--export {none,trades,signals}
Export backtest results (default: trades).
--export-filename PATH, --backtest-filename PATH
Use this filename for backtest results.Requires
`--export` to be set as well. Example: `--export-filen
ame=user_data/backtest_results/backtest_today.json`
--timerange TIMERANGE
Specify what timerange of data to use.
-i TIMEFRAME, --timeframe TIMEFRAME
Specify timeframe (`1m`, `5m`, `30m`, `1h`, `1d`).
--no-trades Skip using trades from backtesting file and DB.
Common arguments:
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
--no-color Disable colorization of hyperopt results. May be
useful if you are redirecting output to a file.
--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.
Strategy arguments:
-s NAME, --strategy NAME
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.
```

View File

@@ -0,0 +1,68 @@
```
usage: freqtrade plot-profit [-h] [-v] [--no-color] [--logfile FILE] [-V]
[-c PATH] [-d PATH] [--userdir PATH] [-s NAME]
[--strategy-path PATH]
[--recursive-strategy-search]
[--freqaimodel NAME] [--freqaimodel-path PATH]
[-p PAIRS [PAIRS ...]] [--timerange TIMERANGE]
[--export {none,trades,signals}]
[--export-filename PATH] [--db-url PATH]
[--trade-source {DB,file}] [-i TIMEFRAME]
[--auto-open]
options:
-h, --help show this help message and exit
-p PAIRS [PAIRS ...], --pairs PAIRS [PAIRS ...]
Limit command to these pairs. Pairs are space-
separated.
--timerange TIMERANGE
Specify what timerange of data to use.
--export {none,trades,signals}
Export backtest results (default: trades).
--export-filename PATH, --backtest-filename PATH
Use this filename for backtest results.Requires
`--export` to be set as well. Example: `--export-filen
ame=user_data/backtest_results/backtest_today.json`
--db-url PATH Override trades database URL, this is useful in custom
deployments (default: `sqlite:///tradesv3.sqlite` for
Live Run mode, `sqlite:///tradesv3.dryrun.sqlite` for
Dry Run).
--trade-source {DB,file}
Specify the source for trades (Can be DB or file
(backtest file)) Default: file
-i TIMEFRAME, --timeframe TIMEFRAME
Specify timeframe (`1m`, `5m`, `30m`, `1h`, `1d`).
--auto-open Automatically open generated plot.
Common arguments:
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
--no-color Disable colorization of hyperopt results. May be
useful if you are redirecting output to a file.
--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.
Strategy arguments:
-s NAME, --strategy NAME
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.
```

View File

@@ -0,0 +1,60 @@
```
usage: freqtrade recursive-analysis [-h] [-v] [--no-color] [--logfile FILE]
[-V] [-c PATH] [-d PATH] [--userdir PATH]
[-s NAME] [--strategy-path PATH]
[--recursive-strategy-search]
[--freqaimodel NAME]
[--freqaimodel-path PATH] [-i TIMEFRAME]
[--timerange TIMERANGE]
[--data-format-ohlcv {json,jsongz,feather,parquet}]
[-p PAIRS [PAIRS ...]]
[--startup-candle STARTUP_CANDLE [STARTUP_CANDLE ...]]
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,feather,parquet}
Storage format for downloaded candle (OHLCV) data.
(default: `feather`).
-p PAIRS [PAIRS ...], --pairs PAIRS [PAIRS ...]
Limit command to these pairs. Pairs are space-
separated.
--startup-candle STARTUP_CANDLE [STARTUP_CANDLE ...]
Specify startup candles to be checked (`199`, `499`,
`999`, `1999`).
Common arguments:
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
--no-color Disable colorization of hyperopt results. May be
useful if you are redirecting output to a file.
--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.
Strategy arguments:
-s NAME, --strategy NAME
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.
```

View File

@@ -0,0 +1,16 @@
```
usage: freqtrade show-config [-h] [--userdir PATH] [-c PATH]
[--show-sensitive]
options:
-h, --help show this help message and exit
--userdir PATH, --user-data-dir PATH
Path to userdata directory.
-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.
--show-sensitive Show secrets in the output.
```

View File

@@ -0,0 +1,37 @@
```
usage: freqtrade show-trades [-h] [-v] [--no-color] [--logfile FILE] [-V]
[-c PATH] [-d PATH] [--userdir PATH]
[--db-url PATH]
[--trade-ids TRADE_IDS [TRADE_IDS ...]]
[--print-json]
options:
-h, --help show this help message and exit
--db-url PATH Override trades database URL, this is useful in custom
deployments (default: `sqlite:///tradesv3.sqlite` for
Live Run mode, `sqlite:///tradesv3.dryrun.sqlite` for
Dry Run).
--trade-ids TRADE_IDS [TRADE_IDS ...]
Specify the list of trade ids.
--print-json Print output in JSON format.
Common arguments:
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
--no-color Disable colorization of hyperopt results. May be
useful if you are redirecting output to a file.
--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.
```

View File

@@ -0,0 +1,41 @@
```
usage: freqtrade strategy-updater [-h] [-v] [--no-color] [--logfile FILE] [-V]
[-c PATH] [-d PATH] [--userdir PATH]
[--strategy-list STRATEGY_LIST [STRATEGY_LIST ...]]
[--strategy-path PATH]
[--recursive-strategy-search]
options:
-h, --help show this help message and exit
--strategy-list STRATEGY_LIST [STRATEGY_LIST ...]
Provide a space-separated list of strategies to
backtest. Please note that timeframe needs to be set
either in config or via command line. When using this
together with `--export trades`, the strategy-name is
injected into the filename (so `backtest-data.json`
becomes `backtest-data-SampleStrategy.json`
--strategy-path PATH Specify additional strategy lookup path.
--recursive-strategy-search
Recursively search for a strategy in the strategies
folder.
Common arguments:
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
--no-color Disable colorization of hyperopt results. May be
useful if you are redirecting output to a file.
--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.
```

View File

@@ -0,0 +1,22 @@
```
usage: freqtrade test-pairlist [-h] [--userdir PATH] [-v] [-c PATH]
[--quote QUOTE_CURRENCY [QUOTE_CURRENCY ...]]
[-1] [--print-json] [--exchange EXCHANGE]
options:
-h, --help show this help message and exit
--userdir PATH, --user-data-dir PATH
Path to userdata directory.
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
-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.
--quote QUOTE_CURRENCY [QUOTE_CURRENCY ...]
Specify quote currency(-ies). Space-separated list.
-1, --one-column Print output in one column.
--print-json Print list of pairs or market symbols in JSON format.
--exchange EXCHANGE Exchange name. Only valid if no config is provided.
```

55
docs/commands/trade.md Normal file
View File

@@ -0,0 +1,55 @@
```
usage: freqtrade trade [-h] [-v] [--no-color] [--logfile FILE] [-V] [-c PATH]
[-d PATH] [--userdir PATH] [-s NAME]
[--strategy-path PATH] [--recursive-strategy-search]
[--freqaimodel NAME] [--freqaimodel-path PATH]
[--db-url PATH] [--sd-notify] [--dry-run]
[--dry-run-wallet DRY_RUN_WALLET] [--fee FLOAT]
options:
-h, --help show this help message and exit
--db-url PATH Override trades database URL, this is useful in custom
deployments (default: `sqlite:///tradesv3.sqlite` for
Live Run mode, `sqlite:///tradesv3.dryrun.sqlite` for
Dry Run).
--sd-notify Notify systemd service manager.
--dry-run Enforce dry-run for trading (removes Exchange secrets
and simulates trades).
--dry-run-wallet DRY_RUN_WALLET, --starting-balance DRY_RUN_WALLET
Starting balance, used for backtesting / hyperopt and
dry-runs.
--fee FLOAT Specify fee ratio. Will be applied twice (on trade
entry and exit).
Common arguments:
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
--no-color Disable colorization of hyperopt results. May be
useful if you are redirecting output to a file.
--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.
Strategy arguments:
-s NAME, --strategy NAME
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.
```

View File

@@ -0,0 +1,48 @@
```
usage: freqtrade trades-to-ohlcv [-h] [-v] [--no-color] [--logfile FILE] [-V]
[-c PATH] [-d PATH] [--userdir PATH]
[-p PAIRS [PAIRS ...]]
[-t TIMEFRAMES [TIMEFRAMES ...]]
[--exchange EXCHANGE]
[--data-format-ohlcv {json,jsongz,feather,parquet}]
[--data-format-trades {json,jsongz,feather,parquet}]
[--trading-mode {spot,margin,futures}]
options:
-h, --help show this help message and exit
-p PAIRS [PAIRS ...], --pairs PAIRS [PAIRS ...]
Limit command to these pairs. Pairs are space-
separated.
-t TIMEFRAMES [TIMEFRAMES ...], --timeframes TIMEFRAMES [TIMEFRAMES ...]
Specify which tickers to download. Space-separated
list. Default: `1m 5m`.
--exchange EXCHANGE Exchange name. Only valid if no config is provided.
--data-format-ohlcv {json,jsongz,feather,parquet}
Storage format for downloaded candle (OHLCV) data.
(default: `feather`).
--data-format-trades {json,jsongz,feather,parquet}
Storage format for downloaded trades data. (default:
`feather`).
--trading-mode {spot,margin,futures}, --tradingmode {spot,margin,futures}
Select Trading mode
Common arguments:
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
--no-color Disable colorization of hyperopt results. May be
useful if you are redirecting output to a file.
--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.
```

View File

@@ -0,0 +1,27 @@
```
usage: freqtrade webserver [-h] [-v] [--no-color] [--logfile FILE] [-V]
[-c PATH] [-d PATH] [--userdir PATH]
options:
-h, --help show this help message and exit
Common arguments:
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
--no-color Disable colorization of hyperopt results. May be
useful if you are redirecting output to a file.
--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.
```

View File

@@ -16,76 +16,7 @@ You can use a relative timerange (`--days 20`) or an absolute starting point (`-
### Usage
```
usage: freqtrade download-data [-h] [-v] [--logfile FILE] [-V] [-c PATH]
[-d PATH] [--userdir PATH]
[-p PAIRS [PAIRS ...]] [--pairs-file FILE]
[--days INT] [--new-pairs-days INT]
[--include-inactive-pairs]
[--timerange TIMERANGE] [--dl-trades]
[--convert] [--exchange EXCHANGE]
[-t TIMEFRAMES [TIMEFRAMES ...]] [--erase]
[--data-format-ohlcv {json,jsongz,hdf5,feather,parquet}]
[--data-format-trades {json,jsongz,hdf5,feather,parquet}]
[--trading-mode {spot,margin,futures}]
[--prepend]
options:
-h, --help show this help message and exit
-p PAIRS [PAIRS ...], --pairs PAIRS [PAIRS ...]
Limit command to these pairs. Pairs are space-
separated.
--pairs-file FILE File containing a list of pairs. Takes precedence over
--pairs or pairs configured in the configuration.
--days INT Download data for given number of days.
--new-pairs-days INT Download data of new pairs for given number of days.
Default: `None`.
--include-inactive-pairs
Also download data from inactive pairs.
--timerange TIMERANGE
Specify what timerange of data to use.
--dl-trades Download trades instead of OHLCV data. The bot will
resample trades to the desired timeframe as specified
as --timeframes/-t.
--convert Convert downloaded trades to OHLCV data. Only
applicable in combination with `--dl-trades`. Will be
automatic for exchanges which don't have historic
OHLCV (e.g. Kraken). If not provided, use `trades-to-
ohlcv` to convert trades data to OHLCV data.
--exchange EXCHANGE Exchange name. Only valid if no config is provided.
-t TIMEFRAMES [TIMEFRAMES ...], --timeframes TIMEFRAMES [TIMEFRAMES ...]
Specify which tickers to download. Space-separated
list. Default: `1m 5m`.
--erase Clean all existing data for the selected
exchange/pairs/timeframes.
--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`).
--trading-mode {spot,margin,futures}, --tradingmode {spot,margin,futures}
Select Trading mode
--prepend Allow data prepending. (Data-appending is disabled)
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.
```
--8<-- "commands/download-data.md"
!!! 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:
@@ -162,7 +93,6 @@ Freqtrade currently supports the following data-formats:
* `feather` - a dataformat based on Apache Arrow
* `json` - plain "text" json files
* `jsongz` - a gzip-zipped version of json files
* `hdf5` - a high performance datastore (deprecated)
* `parquet` - columnar datastore (OHLCV only)
By default, both OHLCV data and trades data are stored in the `feather` format.
@@ -172,8 +102,8 @@ To persist this change, you should also add the following snippet to your config
``` jsonc
// ...
"dataformat_ohlcv": "hdf5",
"dataformat_trades": "hdf5",
"dataformat_ohlcv": "feather",
"dataformat_trades": "feather",
// ...
```
@@ -211,7 +141,6 @@ time freqtrade list-data --show-timerange --data-format-ohlcv <dataformat>
| `feather` | 72Mb | 3.5s |
| `json` | 149Mb | 25.6s |
| `jsongz` | 39Mb | 27s |
| `hdf5` | 145Mb | 3.9s |
| `parquet` | 83Mb | 3.8s |
Size has been taken from the BTC/USDT 1m spot combination for the timerange specified above.
@@ -249,55 +178,7 @@ Mixing different stake-currencies is allowed for this file, since it's only used
## Sub-command convert data
```
usage: freqtrade convert-data [-h] [-v] [--logfile FILE] [-V] [-c PATH]
[-d PATH] [--userdir PATH]
[-p PAIRS [PAIRS ...]] --format-from
{json,jsongz,hdf5,feather,parquet} --format-to
{json,jsongz,hdf5,feather,parquet} [--erase]
[--exchange EXCHANGE]
[-t TIMEFRAMES [TIMEFRAMES ...]]
[--trading-mode {spot,margin,futures}]
[--candle-types {spot,futures,mark,index,premiumIndex,funding_rate} [{spot,futures,mark,index,premiumIndex,funding_rate} ...]]
options:
-h, --help show this help message and exit
-p PAIRS [PAIRS ...], --pairs PAIRS [PAIRS ...]
Limit command to these pairs. Pairs are space-
separated.
--format-from {json,jsongz,hdf5,feather,parquet}
Source format for data conversion.
--format-to {json,jsongz,hdf5,feather,parquet}
Destination format for data conversion.
--erase Clean all existing data for the selected
exchange/pairs/timeframes.
--exchange EXCHANGE Exchange name. Only valid if no config is provided.
-t TIMEFRAMES [TIMEFRAMES ...], --timeframes TIMEFRAMES [TIMEFRAMES ...]
Specify which tickers to download. Space-separated
list. Default: `1m 5m`.
--trading-mode {spot,margin,futures}, --tradingmode {spot,margin,futures}
Select Trading mode
--candle-types {spot,futures,mark,index,premiumIndex,funding_rate} [{spot,futures,mark,index,premiumIndex,funding_rate} ...]
Select candle type to convert. Defaults to all
available types.
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.
```
--8<-- "commands/convert-data.md"
### Example converting data
@@ -310,46 +191,7 @@ freqtrade convert-data --format-from json --format-to jsongz --datadir ~/.freqtr
## Sub-command convert trade data
```
usage: freqtrade convert-trade-data [-h] [-v] [--logfile FILE] [-V] [-c PATH]
[-d PATH] [--userdir PATH]
[-p PAIRS [PAIRS ...]] --format-from
{json,jsongz,hdf5,feather,parquet}
--format-to
{json,jsongz,hdf5,feather,parquet}
[--erase] [--exchange EXCHANGE]
options:
-h, --help show this help message and exit
-p PAIRS [PAIRS ...], --pairs PAIRS [PAIRS ...]
Limit command to these pairs. Pairs are space-
separated.
--format-from {json,jsongz,hdf5,feather,parquet}
Source format for data conversion.
--format-to {json,jsongz,hdf5,feather,parquet}
Destination format for data conversion.
--erase Clean all existing data for the selected
exchange/pairs/timeframes.
--exchange EXCHANGE Exchange name. Only valid if no config is provided.
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.
```
--8<-- "commands/convert-trade-data.md"
### Example converting trades
@@ -365,49 +207,7 @@ freqtrade convert-trade-data --format-from jsongz --format-to json --datadir ~/.
When you need to use `--dl-trades` (kraken only) to download data, conversion of trades data to ohlcv data is the last step.
This command will allow you to repeat this last step for additional timeframes without re-downloading the data.
```
usage: freqtrade trades-to-ohlcv [-h] [-v] [--logfile FILE] [-V] [-c PATH]
[-d PATH] [--userdir PATH]
[-p PAIRS [PAIRS ...]]
[-t TIMEFRAMES [TIMEFRAMES ...]]
[--exchange EXCHANGE]
[--data-format-ohlcv {json,jsongz,hdf5,feather,parquet}]
[--data-format-trades {json,jsongz,hdf5,feather}]
options:
-h, --help show this help message and exit
-p PAIRS [PAIRS ...], --pairs PAIRS [PAIRS ...]
Limit command to these pairs. Pairs are space-
separated.
-t TIMEFRAMES [TIMEFRAMES ...], --timeframes TIMEFRAMES [TIMEFRAMES ...]
Specify which tickers to download. Space-separated
list. Default: `1m 5m`.
--exchange EXCHANGE Exchange name. Only valid if no config is provided.
--data-format-ohlcv {json,jsongz,hdf5,feather,parquet}
Storage format for downloaded candle (OHLCV) data.
(default: `feather`).
--data-format-trades {json,jsongz,hdf5,feather}
Storage format for downloaded trades data. (default:
`feather`).
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.
```
--8<-- "commands/trades-to-ohlcv.md"
### Example trade-to-ohlcv conversion
@@ -419,51 +219,7 @@ freqtrade trades-to-ohlcv --exchange kraken -t 5m 1h 1d --pairs BTC/EUR ETH/EUR
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}]
[--data-format-trades {json,jsongz,hdf5,feather,parquet}]
[--trades] [-p PAIRS [PAIRS ...]]
[--trading-mode {spot,margin,futures}]
[--show-timerange]
options:
-h, --help show this help message and exit
--exchange EXCHANGE Exchange name. Only valid if no config is provided.
--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.
--trading-mode {spot,margin,futures}, --tradingmode {spot,margin,futures}
Select Trading mode
--show-timerange Show timerange available for available data. (May take
a while to calculate).
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.
```
--8<-- "commands/list-data.md"
### Example list-data

View File

@@ -85,6 +85,6 @@ Setting protections from the configuration via `"protections": [],` has been rem
## hdf5 data storage
Using hdf5 as data storage has been deprecated in 2024.12 and will be removed in 2025.1. We recommend switching to the feather data format.
Using hdf5 as data storage has been deprecated in 2024.12 and was removed in 2025.1. We recommend switching to the feather data format.
Please use the [`convert-data` subcommand](data-download.md#sub-command-convert-data) to convert your existing data to one of the supported formats.
Please use the [`convert-data` subcommand](data-download.md#sub-command-convert-data) to convert your existing data to one of the supported formats before updating.

View File

@@ -215,64 +215,7 @@ Let's say the stake currency is **ETH** and there is $10$ **ETH** on the wallet.
## Edge command reference
```
usage: freqtrade edge [-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}]
[--max-open-trades INT] [--stake-amount STAKE_AMOUNT]
[--fee FLOAT] [-p PAIRS [PAIRS ...]]
[--stoplosses STOPLOSS_RANGE]
optional arguments:
-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}
Storage format for downloaded candle (OHLCV) data.
(default: `None`).
--max-open-trades INT
Override the value of the `max_open_trades`
configuration setting.
--stake-amount STAKE_AMOUNT
Override the value of the `stake_amount` configuration
setting.
--fee FLOAT Specify fee ratio. Will be applied twice (on trade
entry and exit).
-p PAIRS [PAIRS ...], --pairs PAIRS [PAIRS ...]
Limit command to these pairs. Pairs are space-
separated.
--stoplosses STOPLOSS_RANGE
Defines a range of stoploss values against which edge
will assess the strategy. The format is "min,max,step"
(without any space). Example:
`--stoplosses=-0.01,-0.1,-0.001`
Common arguments:
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
--logfile 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
Path to directory with historical backtesting data.
--userdir PATH, --user-data-dir PATH
Path to userdata directory.
Strategy arguments:
-s NAME, --strategy NAME
Specify strategy class name which will be used by the
bot.
--strategy-path PATH Specify additional strategy lookup path.
```
--8<-- "commands/edge.md"
## Configurations

View File

@@ -118,7 +118,7 @@ When trading on Binance Futures market, orderbook must be used because there is
},
```
#### Binance futures settings
#### Binance isolated futures settings
Users will also have to have the futures-setting "Position Mode" set to "One-way Mode", and "Asset Mode" set to "Single-Asset Mode".
These settings will be checked on startup, and freqtrade will show an error if this setting is wrong.
@@ -127,6 +127,27 @@ These settings will be checked on startup, and freqtrade will show an error if t
Freqtrade will not attempt to change these settings.
#### Binance BNFCR futures
BNFCR mode are a special type of futures mode on Binance to work around regulatory issues in Europe.
To use BNFCR futures, you will have to have the following combination of settings:
``` jsonc
{
// ...
"trading_mode": "futures",
"margin_mode": "cross",
"proxy_coin": "BNFCR",
"stake_currency": "USDT" // or "USDC"
// ...
}
```
The `stake_currency` setting defines the markets the bot will be operating in. This choice is really arbitrary.
On the exchange, you'll have to use "Multi-asset Mode" - and "Position Mode set to "One-way Mode".
Freqtrade will check these settings on startup, but won't attempt to change them.
## Bingx
BingX supports [time_in_force](configuration.md#understand-order_time_in_force) with settings "GTC" (good till cancelled), "IOC" (immediate-or-cancel) and "PO" (Post only) settings.
@@ -189,7 +210,7 @@ freqtrade download-data --exchange kraken --dl-trades -p BTC/EUR BCH/EUR
It will also take a long time, as freqtrade will need to download every single trade that happened on the exchange for the pair / timerange combination, therefore please be patient.
!!! Warning "rateLimit tuning"
Please pay attention that rateLimit configuration entry holds delay in milliseconds between requests, NOT requests\sec rate.
Please pay attention that rateLimit configuration entry holds delay in milliseconds between requests, NOT requests/sec rate.
So, in order to mitigate Kraken API "Rate limit exceeded" exception, this configuration should be increased, NOT decreased.
## Kucoin

View File

@@ -46,10 +46,12 @@ Make sure you set the `initial_state` config option to `"running"` in your confi
### I have waited 5 minutes, why hasn't the bot made any trades yet?
* Depending on the buy strategy, the amount of whitelisted coins, the
situation of the market etc, it can take up to hours to find a good entry
* Depending on the entry strategy, the amount of whitelisted coins, the
situation of the market etc, it can take up to hours or days to find a good entry
position for a trade. Be patient!
* Backtesting will tell you roughly how many trades to expect - but that won't guarantee that they'll be distributed evenly across time - so you could have 20 trades on one day, and 0 for the rest of the week.
* It may be because of a configuration error. It's best to check the logs, they usually tell you if the bot is simply not getting buy signals (only heartbeat messages), or if there is something wrong (errors / exceptions in the log).
### I have made 12 trades already, why is my total profit negative?

View File

@@ -18,7 +18,7 @@ Features include:
* **Extensibility** - The generalized and robust architecture allows for incorporating any [machine learning library/method](freqai-configuration.md#using-different-prediction-models) available in Python. Eight examples are currently available, including classifiers, regressors, and a convolutional neural network
* **Smart outlier removal** - Remove outliers from training and prediction data sets using a variety of [outlier detection techniques](freqai-feature-engineering.md#outlier-detection)
* **Crash resilience** - Store trained models to disk to make reloading from a crash fast and easy, and [purge obsolete files](freqai-running.md#purging-old-model-data) for sustained dry/live runs
* **Automatic data normalization** - [Normalize the data](freqai-feature-engineering.md#feature-normalization) in a smart and statistically safe way
* **Automatic data normalization** - [Normalize the data](freqai-feature-engineering.md#building-the-data-pipeline) in a smart and statistically safe way
* **Automatic data download** - Compute timeranges for data downloads and update historic data (in live deployments)
* **Cleaning of incoming data** - Handle NaNs safely before training and model inferencing
* **Dimensionality reduction** - Reduce the size of the training data via [Principal Component Analysis](freqai-feature-engineering.md#data-dimensionality-reduction-with-principal-component-analysis)
@@ -76,14 +76,14 @@ pip install -r requirements-freqai.txt
### Usage with docker
If you are using docker, a dedicated tag with FreqAI dependencies is available as `:freqai`. As such - you can replace the image line in your docker compose file with `image: freqtradeorg/freqtrade:develop_freqai`. This image contains the regular FreqAI dependencies. Similar to native installs, Catboost will not be available on ARM based devices. If you would like to use PyTorch or Reinforcement learning, you should use the torch or RL tags, `image: freqtradeorg/freqtrade:develop_freqaitorch`, `image: freqtradeorg/freqtrade:develop_freqairl`.
If you are using docker, a dedicated tag with FreqAI dependencies is available as `:freqai`. As such - you can replace the image line in your docker compose file with `image: freqtradeorg/freqtrade:stable_freqai`. This image contains the regular FreqAI dependencies. Similar to native installs, Catboost will not be available on ARM based devices. If you would like to use PyTorch or Reinforcement learning, you should use the torch or RL tags, `image: freqtradeorg/freqtrade:stable_freqaitorch`, `image: freqtradeorg/freqtrade:stable_freqairl`.
!!! note "docker-compose-freqai.yml"
We do provide an explicit docker-compose file for this in `docker/docker-compose-freqai.yml` - which can be used via `docker compose -f docker/docker-compose-freqai.yml run ...` - or can be copied to replace the original docker file. This docker-compose file also contains a (disabled) section to enable GPU resources within docker containers. This obviously assumes the system has GPU resources available.
### FreqAI position in open-source machine learning landscape
Forecasting chaotic time-series based systems, such as equity/cryptocurrency markets, requires a broad set of tools geared toward testing a wide range of hypotheses. Fortunately, a recent maturation of robust machine learning libraries (e.g. `scikit-learn`) has opened up a wide range of research possibilities. Scientists from a diverse range of fields can now easily prototype their studies on an abundance of established machine learning algorithms. Similarly, these user-friendly libraries enable "citzen scientists" to use their basic Python skills for data exploration. However, leveraging these machine learning libraries on historical and live chaotic data sources can be logistically difficult and expensive. Additionally, robust data collection, storage, and handling presents a disparate challenge. [`FreqAI`](#freqai) aims to provide a generalized and extensible open-sourced framework geared toward live deployments of adaptive modeling for market forecasting. The `FreqAI` framework is effectively a sandbox for the rich world of open-source machine learning libraries. Inside the `FreqAI` sandbox, users find they can combine a wide variety of third-party libraries to test creative hypotheses on a free live 24/7 chaotic data source - cryptocurrency exchange data.
Forecasting chaotic time-series based systems, such as equity/cryptocurrency markets, requires a broad set of tools geared toward testing a wide range of hypotheses. Fortunately, a recent maturation of robust machine learning libraries (e.g. `scikit-learn`) has opened up a wide range of research possibilities. Scientists from a diverse range of fields can now easily prototype their studies on an abundance of established machine learning algorithms. Similarly, these user-friendly libraries enable "citizen scientists" to use their basic Python skills for data exploration. However, leveraging these machine learning libraries on historical and live chaotic data sources can be logistically difficult and expensive. Additionally, robust data collection, storage, and handling presents a disparate challenge. [`FreqAI`](#freqai) aims to provide a generalized and extensible open-sourced framework geared toward live deployments of adaptive modeling for market forecasting. The `FreqAI` framework is effectively a sandbox for the rich world of open-source machine learning libraries. Inside the `FreqAI` sandbox, users find they can combine a wide variety of third-party libraries to test creative hypotheses on a free live 24/7 chaotic data source - cryptocurrency exchange data.
### Citing FreqAI

View File

@@ -36,127 +36,7 @@ pip install -r requirements-hyperopt.txt
## Hyperopt command reference
```
usage: freqtrade hyperopt [-h] [-v] [--logfile FILE] [-V] [-c PATH] [-d PATH]
[--userdir PATH] [-s NAME] [--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 ...]] [--hyperopt-path PATH]
[--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} ...]]
[--print-all] [--no-color] [--print-json] [-j JOBS]
[--random-state INT] [--min-trades INT]
[--hyperopt-loss NAME] [--disable-param-export]
[--ignore-missing-spaces] [--analyze-per-epoch]
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,feather,parquet}
Storage format for downloaded candle (OHLCV) data.
(default: `feather`).
--max-open-trades INT
Override the value of the `max_open_trades`
configuration setting.
--stake-amount STAKE_AMOUNT
Override the value of the `stake_amount` configuration
setting.
--fee FLOAT Specify fee ratio. Will be applied twice (on trade
entry and exit).
-p PAIRS [PAIRS ...], --pairs PAIRS [PAIRS ...]
Limit command to these pairs. Pairs are space-
separated.
--hyperopt-path PATH Specify additional lookup path for Hyperopt Loss
functions.
--eps, --enable-position-stacking
Allow buying the same pair multiple times (position
stacking).
--enable-protections, --enableprotections
Enable protections for backtesting.Will slow
backtesting down by a considerable amount, but will
include configured protections
--dry-run-wallet DRY_RUN_WALLET, --starting-balance DRY_RUN_WALLET
Starting balance, used for backtesting / hyperopt and
dry-runs.
--timeframe-detail TIMEFRAME_DETAIL
Specify detail timeframe for backtesting (`1m`, `5m`,
`30m`, `1h`, `1d`).
-e INT, --epochs INT Specify number of epochs (default: 100).
--spaces {all,buy,sell,roi,stoploss,trailing,protection,trades,default} [{all,buy,sell,roi,stoploss,trailing,protection,trades,default} ...]
Specify which parameters to hyperopt. Space-separated
list.
--print-all Print all results, not only the best ones.
--no-color Disable colorization of hyperopt results. May be
useful if you are redirecting output to a file.
--print-json Print output in JSON format.
-j JOBS, --job-workers JOBS
The number of concurrently running jobs for
hyperoptimization (hyperopt worker processes). If -1
(default), all CPUs are used, for -2, all CPUs but one
are used, etc. If 1 is given, no parallel computing
code is used at all.
--random-state INT Set random state to some positive integer for
reproducible hyperopt results.
--min-trades INT Set minimal desired number of trades for evaluations
in the hyperopt optimization path (default: 1).
--hyperopt-loss NAME, --hyperoptloss NAME
Specify the class name of the hyperopt loss function
class (IHyperOptLoss). Different functions can
generate completely different results, since the
target for optimization is different. Built-in
Hyperopt-loss-functions are:
ShortTradeDurHyperOptLoss, OnlyProfitHyperOptLoss,
SharpeHyperOptLoss, SharpeHyperOptLossDaily,
SortinoHyperOptLoss, SortinoHyperOptLossDaily,
CalmarHyperOptLoss, MaxDrawDownHyperOptLoss,
MaxDrawDownRelativeHyperOptLoss,
ProfitDrawDownHyperOptLoss
--disable-param-export
Disable automatic hyperopt parameter export.
--ignore-missing-spaces, --ignore-unparameterized-spaces
Suppress errors for any requested Hyperopt spaces that
do not contain any parameters.
--analyze-per-epoch Run populate_indicators once per epoch.
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.
Strategy arguments:
-s NAME, --strategy NAME
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.
```
--8<-- "commands/hyperopt.md"
### Hyperopt checklist

View File

@@ -377,6 +377,9 @@ If an incorrect category string is chosen, the plugin will print the available c
!!! 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.
!!! Danger "Duplicate symbols in coingecko"
Coingecko often has duplicate symbols, where the same symbol is used for different coins. Freqtrade will use the symbol as is and try to search for it on the exchange. If the symbol exists - it will be used. Freqtrade will however not check if the _intended_ symbol is the one coingecko meant. This can sometimes lead to unexpected results, especially on low volume coins or with meme coin categories.
#### AgeFilter
Removes pairs that have been listed on the exchange for less than `min_days_listed` days (defaults to `10`) or more than `max_days_listed` days (defaults `None` mean infinity).

View File

@@ -82,7 +82,7 @@ Each market(trading pair), keeps collateral in a separate account
"margin_mode": "isolated"
```
#### Cross margin mode (currently unavailable)
#### Cross margin mode
One account is used to share collateral between markets (trading pairs). Margin is taken from total account balance to avoid liquidation when needed.

View File

@@ -29,39 +29,7 @@ Those are set to avoid users accidentally generating false positives.
## Lookahead-analysis command reference
```
usage: freqtrade lookahead-analysis [-h] [-v] [--logfile FILE] [-V] [-c PATH]
[-d PATH] [--userdir PATH] [-s NAME]
[--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 ...]]
[--dry-run-wallet DRY_RUN_WALLET]
[--timeframe-detail TIMEFRAME_DETAIL]
[--strategy-list STRATEGY_LIST [STRATEGY_LIST ...]]
[--export {none,trades,signals}]
[--export-filename PATH]
[--breakdown {day,week,month} [{day,week,month} ...]]
[--cache {none,day,week,month}]
[--freqai-backtest-live-models]
[--minimum-trade-amount INT]
[--targeted-trade-amount INT]
[--lookahead-analysis-exportfilename LOOKAHEAD_ANALYSIS_EXPORTFILENAME]
options:
--minimum-trade-amount INT
Minimum trade amount for lookahead-analysis
--targeted-trade-amount INT
Targeted trade amount for lookahead analysis
--lookahead-analysis-exportfilename LOOKAHEAD_ANALYSIS_EXPORTFILENAME
Use this csv-filename to store lookahead-analysis-
results
```
--8<-- "commands/lookahead-analysis.md"
!!! Note ""
The above Output was reduced to options `lookahead-analysis` adds on top of regular backtesting commands.

View File

@@ -30,76 +30,7 @@ The `freqtrade plot-dataframe` subcommand shows an interactive graph with three
Possible arguments:
```
usage: freqtrade plot-dataframe [-h] [-v] [--logfile FILE] [-V] [-c PATH]
[-d PATH] [--userdir PATH] [-s NAME]
[--strategy-path PATH] [-p PAIRS [PAIRS ...]]
[--indicators1 INDICATORS1 [INDICATORS1 ...]]
[--indicators2 INDICATORS2 [INDICATORS2 ...]]
[--plot-limit INT] [--db-url PATH]
[--trade-source {DB,file}] [--export EXPORT]
[--export-filename PATH]
[--timerange TIMERANGE] [-i TIMEFRAME]
[--no-trades]
optional arguments:
-h, --help show this help message and exit
-p PAIRS [PAIRS ...], --pairs PAIRS [PAIRS ...]
Limit command to these pairs. Pairs are space-
separated.
--indicators1 INDICATORS1 [INDICATORS1 ...]
Set indicators from your strategy you want in the
first row of the graph. Space-separated list. Example:
`ema3 ema5`. Default: `['sma', 'ema3', 'ema5']`.
--indicators2 INDICATORS2 [INDICATORS2 ...]
Set indicators from your strategy you want in the
third row of the graph. Space-separated list. Example:
`fastd fastk`. Default: `['macd', 'macdsignal']`.
--plot-limit INT Specify tick limit for plotting. Notice: too high
values cause huge files. Default: 750.
--db-url PATH Override trades database URL, this is useful in custom
deployments (default: `sqlite:///tradesv3.sqlite` for
Live Run mode, `sqlite:///tradesv3.dryrun.sqlite` for
Dry Run).
--trade-source {DB,file}
Specify the source for trades (Can be DB or file
(backtest file)) Default: file
--export EXPORT Export backtest results, argument are: trades.
Example: `--export=trades`
--export-filename PATH
Save backtest results to the file with this filename.
Requires `--export` to be set as well. Example:
`--export-filename=user_data/backtest_results/backtest
_today.json`
--timerange TIMERANGE
Specify what timerange of data to use.
-i TIMEFRAME, --timeframe TIMEFRAME
Specify timeframe (`1m`, `5m`, `30m`, `1h`, `1d`).
--no-trades Skip using trades from backtesting file and DB.
Common arguments:
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
--logfile 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
Path to directory with historical backtesting data.
--userdir PATH, --user-data-dir PATH
Path to userdata directory.
Strategy arguments:
-s NAME, --strategy NAME
Specify strategy class name which will be used by the
bot.
--strategy-path PATH Specify additional strategy lookup path.
```
--8<-- "commands/plot-dataframe.md"
Example:
@@ -306,62 +237,7 @@ The forth graph can help you analyze trade parallelism, showing how often max_op
Possible options for the `freqtrade plot-profit` subcommand:
```
usage: freqtrade plot-profit [-h] [-v] [--logfile FILE] [-V] [-c PATH]
[-d PATH] [--userdir PATH] [-s NAME]
[--strategy-path PATH] [-p PAIRS [PAIRS ...]]
[--timerange TIMERANGE] [--export EXPORT]
[--export-filename PATH] [--db-url PATH]
[--trade-source {DB,file}] [-i TIMEFRAME]
optional arguments:
-h, --help show this help message and exit
-p PAIRS [PAIRS ...], --pairs PAIRS [PAIRS ...]
Limit command to these pairs. Pairs are space-
separated.
--timerange TIMERANGE
Specify what timerange of data to use.
--export EXPORT Export backtest results, argument are: trades.
Example: `--export=trades`
--export-filename PATH, --backtest-filename PATH
Use backtest results from this filename.
Requires `--export` to be set as well. Example:
`--export-filename=user_data/backtest_results/backtest
_today.json`
--db-url PATH Override trades database URL, this is useful in custom
deployments (default: `sqlite:///tradesv3.sqlite` for
Live Run mode, `sqlite:///tradesv3.dryrun.sqlite` for
Dry Run).
--trade-source {DB,file}
Specify the source for trades (Can be DB or file
(backtest file)) Default: file
-i TIMEFRAME, --timeframe TIMEFRAME
Specify timeframe (`1m`, `5m`, `30m`, `1h`, `1d`).
--auto-open Automatically open generated plot.
Common arguments:
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
--logfile 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
Path to directory with historical backtesting data.
--userdir PATH, --user-data-dir PATH
Path to userdata directory.
Strategy arguments:
-s NAME, --strategy NAME
Specify strategy class name which will be used by the
bot.
--strategy-path PATH Specify additional strategy lookup path.
```
--8<-- "commands/plot-profit.md"
The `-p/--pairs` argument, can be used to limit the pairs that are considered for this calculation.

View File

@@ -26,56 +26,7 @@ In addition to the recursive formula check, this command also carries out a simp
## Recursive-analysis command reference
```
usage: freqtrade recursive-analysis [-h] [-v] [--logfile FILE] [-V] [-c PATH]
[-d PATH] [--userdir PATH] [-s NAME]
[--strategy-path PATH]
[--recursive-strategy-search]
[--freqaimodel NAME]
[--freqaimodel-path PATH] [-i TIMEFRAME]
[--timerange TIMERANGE]
[--data-format-ohlcv {json,jsongz,hdf5,feather,parquet}]
[-p PAIR]
[--freqai-backtest-live-models]
[--startup-candle STARTUP_CANDLES [STARTUP_CANDLES ...]]
optional arguments:
-h, --help show this help message and exit
-i TIMEFRAME, --timeframe TIMEFRAME
Specify timeframe (`1m`, `5m`, `30m`, `1h`, `1d`).
--data-format-ohlcv {json,jsongz,hdf5,feather,parquet}
Storage format for downloaded candle (OHLCV) data.
(default: `feather`).
-p PAIR, --pairs PAIR
Limit command to this pair.
--startup-candle STARTUP_CANDLE [STARTUP_CANDLE ...]
Provide a space-separated list of startup_candle_count to
be checked. Default : `199 399 499 999 1999`.
Common arguments:
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
--logfile 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
Path to directory with historical backtesting data.
--userdir PATH, --user-data-dir PATH
Path to userdata directory.
Strategy arguments:
-s NAME, --strategy NAME
Specify strategy class name which will be used by the
bot.
--strategy-path PATH Specify additional strategy lookup path.
--timerange TIMERANGE
Specify what timerange of data to use.
```
--8<-- "commands/recursive-analysis.md"
### Why are odd-numbered default startup candles used?

View File

@@ -1,7 +1,7 @@
markdown==3.7
mkdocs==1.6.1
mkdocs-material==9.5.49
mkdocs-material==9.6.5
mdx_truly_sane_lists==1.3
pymdown-extensions==10.12
pymdown-extensions==10.14.3
jinja2==3.1.5
mike==2.1.3

View File

@@ -154,10 +154,10 @@ For example, simplified math:
In summary: The stoploss will be adjusted to be always be -10% of the highest observed price.
### Trailing stop loss, custom positive loss
### Trailing stop loss, different positive loss
You could also have a default stop loss when you are in the red with your buy (buy - fee), but once you hit a positive result (or an offset you define) the system will utilize a new stop loss, which can have a different value.
For example, your default stop loss is -10%, but once you have more than 0% profit (example 0.1%) a different trailing stoploss will be used.
You could also have a default stop loss when you are in the red with your buy (buy - fee), but once you hit a positive result (or an offset you define) the system will utilize a new stop loss, with a different value.
For example, your default stop loss is -10%, but once you have reached profitability (example 0.1%) a different trailing stoploss will be used.
!!! Note
If you want the stoploss to only be changed when you break even of making a profit (what most users want) please refer to next section with [offset enabled](#trailing-stop-loss-only-once-the-trade-has-reached-a-certain-offset).
@@ -208,7 +208,9 @@ Before this, `stoploss` is used for the trailing stoploss.
You can also keep a static stoploss until the offset is reached, and then trail the trade to take profits once the market turns.
If `trailing_only_offset_is_reached = True` then the trailing stoploss is only activated once the offset is reached. Until then, the stoploss remains at the configured `stoploss`.
If `trailing_only_offset_is_reached = True` then the trailing stoploss is only activated once the offset is reached. Until then, the stoploss remains at the configured `stoploss` and is not trailing.
Leaving this value as `trailing_only_offset_is_reached=False` will allow the trailing stoploss to start trailing as soon as the asset price increases above the initial entry price.
This option can be used with or without `trailing_stop_positive`, but uses `trailing_stop_positive_offset` as offset.
Configuration (offset is buy-price + 3%):

View File

@@ -79,6 +79,8 @@ import talib.abstract as ta
class MyStrategy(IStrategy):
timeframe = '15m'
# set the initial stoploss to -10%
stoploss = -0.10

View File

@@ -758,7 +758,7 @@ For performance reasons, it's disabled by default and freqtrade will show a warn
Additional orders also result in additional fees and those orders don't count towards `max_open_trades`.
This callback is **not** called when there is an open order (either buy or sell) waiting for execution.
This callback is also called when there is an open order (either buy or sell) waiting for execution - and will cancel the existing open order to place a new order if the amount, price or direction is different.
`adjust_trade_position()` is called very frequently for the duration of a trade, so you must keep your implementation as performant as possible.
@@ -767,11 +767,18 @@ Adjustment orders can be assigned with a tag by returning a 2 element Tuple, wit
Modifications to leverage are not possible, and the stake-amount returned is assumed to be before applying leverage.
The combined stake currently allocated to the position is held in `trade.stake_amount`. Therefore `trade.stake_amount` will always be updated on every additional entry and partial exit made through `adjust_trade_position()`.
!!! Danger "Loose Logic"
On dry and live run, this function will be called every `throttle_process_secs` (default to 5s). If you have a loose logic, for example your logic for extra entry is only to check RSI of last candle is below 30, then when such condition fulfilled, your bot will do extra re-entry every 5 secs until either it run out of money, it hit the `max_position_adjustment` limit, or a new candle with RSI more than 30 arrived.
Same thing also can happen with partial exit. So be sure to have a strict logic and/or check for the last filled order.
!!! Warning "Performance with many position adjustments"
Position adjustments can be a good approach to increase a strategy's output - but it can also have drawbacks if using this feature extensively.
Each of the orders will be attached to the trade object for the duration of the trade - hence increasing memory usage.
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.
!!! Warning "Backtesting"
During backtesting this callback is called for each candle in `timeframe` or `timeframe_detail`, so run-time performance will be affected.
This can also cause deviating results between live and backtesting, since backtesting can adjust the trade only once per candle, whereas live could adjust the trade multiple times per candle.
@@ -808,11 +815,6 @@ Back to the example above, since current rate is 200, the current USDT value of
While `/stopentry` command stops the bot from entering new trades, the position adjustment feature will continue buying new orders on existing trades.
!!! Warning "Performance with many position adjustments"
Position adjustments can be a good approach to increase a strategy's output - but it can also have drawbacks if using this feature extensively.
Each of the orders will be attached to the trade object for the duration of the trade - hence increasing memory usage.
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
# Default imports
@@ -932,24 +934,25 @@ class DigDeeperStrategy(IStrategy):
The total profit for this trade was 950$ on a 3350$ investment (`100@8$ + 100@9$ + 150@11$`). As such - the final relative profit is 28.35% (`950 / 3350`).
## Adjust Entry Price
## Adjust order Price
The `adjust_entry_price()` callback may be used by strategy developer to refresh/replace limit orders upon arrival of new candles.
Be aware that `custom_entry_price()` is still the one dictating initial entry limit order price target at the time of entry trigger.
The `adjust_order_price()` callback may be used by strategy developer to refresh/replace limit orders upon arrival of new candles.
This callback is called once every iteration unless the order has been (re)placed within the current candle - limiting the maximum (re)placement of each order to once per candle.
This also means that the first call will be at the start of the next candle after the initial order was placed.
Be aware that `custom_entry_price()`/`custom_exit_price()` is still the one dictating initial limit order price target at the time of the signal.
Orders can be cancelled out of this callback by returning `None`.
Returning `current_order_rate` will keep the order on the exchange "as is".
Returning any other price will cancel the existing order, and replace it with a new order.
The trade open-date (`trade.open_date_utc`) will remain at the time of the very first order placed.
Please make sure to be aware of this - and eventually adjust your logic in other callbacks to account for this, and use the date of the first filled order instead.
If the cancellation of the original order fails, then the order will not be replaced - though the order will most likely have been canceled on exchange. Having this happen on initial entries will result in the deletion of the order, while on position adjustment orders, it'll result in the trade size remaining as is.
If the order has been partially filled, the order will not be replaced. You can however use [`adjust_trade_position()`](#adjust-trade-position) to adjust the trade size to the expected position size, should this be necessary / desired.
!!! Warning "Regular timeout"
Entry `unfilledtimeout` mechanism (as well as `check_entry_timeout()`) takes precedence over this.
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.
Entry `unfilledtimeout` mechanism (as well as `check_entry_timeout()`/`check_exit_timeout()`) takes precedence over this callback.
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
# Default imports
@@ -958,14 +961,26 @@ class AwesomeStrategy(IStrategy):
# ... populate_* methods
def adjust_entry_price(self, trade: Trade, order: Order | None, pair: str,
current_time: datetime, proposed_rate: float, current_order_rate: float,
entry_tag: str | None, side: str, **kwargs) -> float:
def adjust_order_price(
self,
trade: Trade,
order: Order | None,
pair: str,
current_time: datetime,
proposed_rate: float,
current_order_rate: float,
entry_tag: str | None,
side: str,
is_entry: bool,
**kwargs,
) -> float:
"""
Entry price re-adjustment logic, returning the user desired limit price.
Exit and entry order 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)
and not timed out on subsequent candles after entry trigger.
For full documentation please go to https://www.freqtrade.io/en/latest/strategy-callbacks/
When not implemented by a strategy, returns current_order_rate as default.
If current_order_rate is returned then the existing order is maintained.
If None is returned then order gets canceled but not replaced by a new one.
@@ -977,14 +992,16 @@ 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 is_entry: True if the order is an entry order, False if it's an exit order.
: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.
# Limit entry 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"
is_entry
and pair == "BTC/USDT"
and entry_tag == "long_sma200"
and side == "long"
and (current_time - timedelta(minutes=10)) <= trade.open_date_utc
@@ -1001,6 +1018,26 @@ class AwesomeStrategy(IStrategy):
return current_order_rate
```
!!! danger "Incompatibility with `adjust_*_price()`"
If you have both `adjust_order_price()` and `adjust_entry_price()`/`adjust_exit_price()` implemented, only `adjust_order_price()` will be used.
If you need to adjust entry/exit prices, you can either implement the logic in `adjust_order_price()`, or use the split `adjust_entry_price()` / `adjust_exit_price()` callbacks, but not both.
Mixing these is not supported and will raise an error during bot startup.
### Adjust Entry Price
The `adjust_entry_price()` callback may be used by strategy developer to refresh/replace entry limit orders upon arrival.
It's a sub-set of `adjust_order_price()` and is called only for entry orders.
All remaining behavior is identical to `adjust_order_price()`.
The trade open-date (`trade.open_date_utc`) will remain at the time of the very first order placed.
Please make sure to be aware of this - and eventually adjust your logic in other callbacks to account for this, and use the date of the first filled order instead.
### Adjust Exit Price
The `adjust_exit_price()` callback may be used by strategy developer to refresh/replace exit limit orders upon arrival.
It's a sub-set of `adjust_order_price()` and is called only for exit orders.
All remaining behavior is identical to `adjust_order_price()`.
## Leverage Callback
When trading in markets that allow leverage, this method must return the desired Leverage (Defaults to 1 -> No leverage).

View File

@@ -513,7 +513,7 @@ By default, freqtrade will attempt to load strategies from all `.py` files withi
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`
freqtrade trade --strategy AwesomeStrategy
```
Note that we're using the class name, not the file name.
@@ -545,7 +545,7 @@ def informative_pairs(self):
]
```
A full sample can be found [in the DataProvider section](#complete-data-provider-sample).
A full sample can be found [in the DataProvider section](#complete-dataprovider-sample).
!!! Warning
As these pairs will be refreshed as part of the regular whitelist refresh, it's best to keep this list short.
@@ -576,7 +576,7 @@ To easily define informative pairs, use the `@informative` decorator. All decora
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).
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-dataprovider-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.
@@ -710,7 +710,7 @@ Options:
- Merge the dataframe without lookahead bias
- Forward-fill (optional)
For a full sample, please refer to the [complete data provider example](#complete-data-provider-sample) below.
For a full sample, please refer to the [complete data provider example](#complete-dataprovider-sample) below.
All columns of the informative dataframe will be available on the returning dataframe in a renamed fashion:

View File

@@ -360,6 +360,8 @@ Return the performance of each crypto-currency the bot has sold.
> 5. `STORJ/BTC 0.0009 BTC (27.24%) (1)`
> ...
The relative performance is calculated against the total investment in the currency, aggregating all filled entries for the currency.
### /balance
Return the balance of all crypto-currency your have on the exchange.

View File

@@ -8,15 +8,7 @@ Creates the directory structure to hold your files for freqtrade.
Will also create strategy and hyperopt examples for you to get started.
Can be used multiple times - using `--reset` will reset the sample strategy and hyperopt files to their default state.
```
usage: freqtrade create-userdir [-h] [--userdir PATH] [--reset]
optional arguments:
-h, --help show this help message and exit
--userdir PATH, --user-data-dir PATH
Path to userdata directory.
--reset Reset sample files to their original state.
```
--8<-- "commands/create-userdir.md"
!!! Warning
Using `--reset` may result in loss of data, since this will overwrite all sample files without asking again.
@@ -38,15 +30,7 @@ optional arguments:
Creates a new configuration file, asking some questions which are important selections for a configuration.
```
usage: freqtrade new-config [-h] [-c PATH]
optional arguments:
-h, --help show this help message and exit
-c PATH, --config PATH
Specify configuration file (default: `config.json`). Multiple --config options may be used. Can be set to `-`
to read config from stdin.
```
--8<-- "commands/new-config.md"
!!! Warning
Only vital questions are asked. Freqtrade offers a lot more configuration possibilities, which are listed in the [Configuration documentation](configuration.md#configuration-parameters)
@@ -73,21 +57,7 @@ Especially useful with [split configuration files](configuration.md#multiple-con
![Show config output](assets/show-config-output.png)
```
usage: freqtrade show-config [-h] [--userdir PATH] [-c PATH]
[--show-sensitive]
options:
-h, --help show this help message and exit
--userdir PATH, --user-data-dir PATH
Path to userdata directory.
-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.
--show-sensitive Show secrets in the output.
```
--8<-- "commands/show-config.md"
``` output
Your combined configuration is:
@@ -120,23 +90,7 @@ The file will be named inline with your class name, and will not overwrite exist
Results will be located in `user_data/strategies/<strategyclassname>.py`.
``` output
usage: freqtrade new-strategy [-h] [--userdir PATH] [-s NAME]
[--template {full,minimal,advanced}]
optional arguments:
-h, --help show this help message and exit
--userdir PATH, --user-data-dir PATH
Path to userdata directory.
-s NAME, --strategy NAME
Specify strategy class name which will be used by the
bot.
--template {full,minimal,advanced}
Use a template which is either `minimal`, `full`
(containing multiple sample indicators) or `advanced`.
Default: `full`.
```
--8<-- "commands/new-strategy.md"
### Sample usage of new-strategy
@@ -162,38 +116,7 @@ Use the `list-strategies` subcommand to see all strategies in one particular dir
This subcommand is useful for finding problems in your environment with loading strategies: modules with strategies that contain errors and failed to load are printed in red (LOAD FAILED), while strategies with duplicate names are printed in yellow (DUPLICATE NAME).
```
usage: freqtrade list-strategies [-h] [-v] [--logfile FILE] [-V] [-c PATH]
[-d PATH] [--userdir PATH]
[--strategy-path PATH] [-1] [--no-color]
[--recursive-strategy-search]
optional arguments:
-h, --help show this help message and exit
--strategy-path PATH Specify additional strategy lookup path.
-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.
--recursive-strategy-search
Recursively search for a strategy in the strategies
folder.
Common arguments:
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
--logfile 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
Path to directory with historical backtesting data.
--userdir PATH, --user-data-dir PATH
Path to userdata directory.
```
--8<-- "commands/list-strategies.md"
!!! Warning
Using these commands will try to load all python files from a directory. This can be a security risk if untrusted files reside in this directory, since all module-level code is executed.
@@ -224,36 +147,7 @@ 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.
```
--8<-- "commands/list-hyperoptloss.md"
## List freqAI models
@@ -261,49 +155,13 @@ Use the `list-freqaimodels` subcommand to see all freqAI models available.
This subcommand is useful for finding problems in your environment with loading freqAI models: modules with models that contain errors and failed to load are printed in red (LOAD FAILED), while models with duplicate names are printed in yellow (DUPLICATE NAME).
```
usage: freqtrade list-freqaimodels [-h] [-v] [--logfile FILE] [-V] [-c PATH]
[-d PATH] [--userdir PATH]
[--freqaimodel-path PATH] [-1] [--no-color]
optional arguments:
-h, --help show this help message and exit
--freqaimodel-path PATH
Specify additional lookup path for freqaimodels.
-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 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.
```
--8<-- "commands/list-freqaimodels.md"
## List Exchanges
Use the `list-exchanges` subcommand to see the exchanges available for the bot.
```
usage: freqtrade list-exchanges [-h] [-1] [-a]
optional arguments:
-h, --help show this help message and exit
-1, --one-column Print output in one column.
-a, --all Print all exchanges known to the ccxt library.
```
--8<-- "commands/list-exchanges.md"
Example: see exchanges available for the bot:
@@ -352,35 +210,7 @@ okx True Official spot, isolated futures
Use the `list-timeframes` subcommand to see the list of timeframes available for the exchange.
```
usage: freqtrade list-timeframes [-h] [-v] [--logfile FILE] [-V] [-c PATH]
[-d PATH] [--userdir PATH]
[--exchange EXCHANGE] [-1]
options:
-h, --help show this help message and exit
--exchange EXCHANGE Exchange name. Only valid if no config is provided.
-1, --one-column Print output in one column.
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.
```
--8<-- "commands/list-timeframes.md"
* Example: see the timeframes for the 'binance' exchange, set in the configuration file:
@@ -408,54 +238,7 @@ You can print info about any pair/market with these subcommands - and you can fi
These subcommands have same usage and same set of available options:
```
usage: freqtrade list-markets [-h] [-v] [--logfile FILE] [-V] [-c PATH]
[-d PATH] [--userdir PATH] [--exchange EXCHANGE]
[--print-list] [--print-json] [-1] [--print-csv]
[--base BASE_CURRENCY [BASE_CURRENCY ...]]
[--quote QUOTE_CURRENCY [QUOTE_CURRENCY ...]]
[-a] [--trading-mode {spot,margin,futures}]
usage: freqtrade list-pairs [-h] [-v] [--logfile FILE] [-V] [-c PATH]
[-d PATH] [--userdir PATH] [--exchange EXCHANGE]
[--print-list] [--print-json] [-1] [--print-csv]
[--base BASE_CURRENCY [BASE_CURRENCY ...]]
[--quote QUOTE_CURRENCY [QUOTE_CURRENCY ...]] [-a]
[--trading-mode {spot,margin,futures}]
options:
-h, --help show this help message and exit
--exchange EXCHANGE Exchange name. Only valid if no config is provided.
--print-list Print list of pairs or market symbols. By default data
is printed in the tabular format.
--print-json Print list of pairs or market symbols in JSON format.
-1, --one-column Print output in one column.
--print-csv Print exchange pair or market data in the csv format.
--base BASE_CURRENCY [BASE_CURRENCY ...]
Specify base currency(-ies). Space-separated list.
--quote QUOTE_CURRENCY [QUOTE_CURRENCY ...]
Specify quote currency(-ies). Space-separated list.
-a, --all Print all pairs or market symbols. By default only
active ones are shown.
--trading-mode {spot,margin,futures}, --tradingmode {spot,margin,futures}
Select Trading mode
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.
```
--8<-- "commands/list-pairs.md"
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.
@@ -493,28 +276,7 @@ Use the `test-pairlist` subcommand to test the configuration of [dynamic pairlis
Requires a configuration with specified `pairlists` attribute.
Can be used to generate static pairlists to be used during backtesting / hyperopt.
```
usage: freqtrade test-pairlist [-h] [--userdir PATH] [-v] [-c PATH]
[--quote QUOTE_CURRENCY [QUOTE_CURRENCY ...]]
[-1] [--print-json] [--exchange EXCHANGE]
options:
-h, --help show this help message and exit
--userdir PATH, --user-data-dir PATH
Path to userdata directory.
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
-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.
--quote QUOTE_CURRENCY [QUOTE_CURRENCY ...]
Specify quote currency(-ies). Space-separated list.
-1, --one-column Print output in one column.
--print-json Print list of pairs or market symbols in JSON format.
--exchange EXCHANGE Exchange name. Only valid if no config is provided.
```
--8<-- "commands/test-pairlist.md"
### Examples
@@ -530,17 +292,7 @@ freqtrade test-pairlist --config config.json --quote USDT BTC
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]
optional arguments:
-h, --help show this help message and exit
--db-url PATH Override trades database URL, this is useful in custom
deployments (default: `sqlite:///tradesv3.sqlite` for
Live Run mode, `sqlite:///tradesv3.dryrun.sqlite` for
Dry Run).
--db-url-from PATH Source db url to use when migrating a database.
```
--8<-- "commands/convert-db.md"
!!! Warning
Please ensure to only use this on an empty target database. Freqtrade will perform a regular migration, but may fail if entries already existed.
@@ -556,30 +308,7 @@ Freqtrade will start the webserver and allow FreqUI to start and control backtes
This has the advantage that data will not be reloaded between backtesting runs (as long as timeframe and timerange remain identical).
FreqUI will also show the backtesting results.
```
usage: freqtrade webserver [-h] [-v] [--logfile FILE] [-V] [-c PATH] [-d PATH]
[--userdir PATH]
optional arguments:
-h, --help show this help message and exit
Common arguments:
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
--logfile 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
Path to directory with historical backtesting data.
--userdir PATH, --user-data-dir PATH
Path to userdata directory.
```
--8<-- "commands/webserver.md"
### Webserver mode - docker
@@ -609,37 +338,7 @@ Adding `--show-pair-list` outputs a sorted pair list you can easily copy/paste i
??? Warning "Strategy overfitting"
Only using winning pairs can lead to an overfitted strategy, which will not work well on future data. Make sure to extensively test your strategy in dry-run before risking real money.
```
usage: freqtrade backtesting-show [-h] [-v] [--logfile FILE] [-V] [-c PATH]
[-d PATH] [--userdir PATH]
[--export-filename PATH] [--show-pair-list]
optional arguments:
-h, --help show this help message and exit
--export-filename PATH
Save backtest results to the file with this filename.
Requires `--export` to be set as well. Example:
`--export-filename=user_data/backtest_results/backtest
_today.json`
--show-pair-list Show backtesting pairlist sorted by profit.
Common arguments:
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
--logfile 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
Path to directory with historical backtesting data.
--userdir PATH, --user-data-dir PATH
Path to userdata directory.
```
--8<-- "commands/backtesting-show.md"
## Detailed backtest analysis
@@ -647,134 +346,13 @@ Advanced backtest result analysis.
More details in the [Backtesting analysis](advanced-backtesting.md#analyze-the-buyentry-and-sellexit-tags) Section.
```
usage: freqtrade backtesting-analysis [-h] [-v] [--logfile FILE] [-V]
[-c PATH] [-d PATH] [--userdir PATH]
[--export-filename PATH]
[--analysis-groups {0,1,2,3,4} [{0,1,2,3,4} ...]]
[--enter-reason-list ENTER_REASON_LIST [ENTER_REASON_LIST ...]]
[--exit-reason-list EXIT_REASON_LIST [EXIT_REASON_LIST ...]]
[--indicator-list INDICATOR_LIST [INDICATOR_LIST ...]]
[--timerange YYYYMMDD-[YYYYMMDD]]
[--rejected]
[--analysis-to-csv]
[--analysis-csv-path PATH]
optional arguments:
-h, --help show this help message and exit
--export-filename PATH, --backtest-filename PATH
Use this filename for backtest results.Requires
`--export` to be set as well. Example: `--export-filen
ame=user_data/backtest_results/backtest_today.json`
--analysis-groups {0,1,2,3,4} [{0,1,2,3,4} ...]
grouping output - 0: simple wins/losses by enter tag,
1: by enter_tag, 2: by enter_tag and exit_tag, 3: by
pair and enter_tag, 4: by pair, enter_ and exit_tag
(this can get quite large)
--enter-reason-list ENTER_REASON_LIST [ENTER_REASON_LIST ...]
Space separated list of entry signals to analyse.
Default: all. e.g. 'entry_tag_a entry_tag_b'
--exit-reason-list EXIT_REASON_LIST [EXIT_REASON_LIST ...]
Space separated list of exit signals to analyse.
Default: all. e.g.
'exit_tag_a roi stop_loss trailing_stop_loss'
--indicator-list INDICATOR_LIST [INDICATOR_LIST ...]
Space separated list of indicators to analyse. e.g.
'close rsi bb_lowerband profit_abs'
--timerange YYYYMMDD-[YYYYMMDD]
Timerange to filter trades for analysis,
start inclusive, end exclusive. e.g.
20220101-20220201
--rejected
Print out rejected trades table
--analysis-to-csv
Write out tables to individual CSVs, by default to
'user_data/backtest_results' unless '--analysis-csv-path' is given.
--analysis-csv-path [PATH]
Optional path where individual CSVs will be written. If not used,
CSVs will be written to 'user_data/backtest_results'.
Common arguments:
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
--logfile 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
Path to directory with historical backtesting data.
--userdir PATH, --user-data-dir PATH
Path to userdata directory.
```
--8<-- "commands/backtesting-analysis.md"
## List Hyperopt results
You can list the hyperoptimization epochs the Hyperopt module evaluated previously with the `hyperopt-list` sub-command.
```
usage: freqtrade hyperopt-list [-h] [-v] [--logfile FILE] [-V] [-c PATH]
[-d PATH] [--userdir PATH] [--best]
[--profitable] [--min-trades INT]
[--max-trades INT] [--min-avg-time FLOAT]
[--max-avg-time FLOAT] [--min-avg-profit FLOAT]
[--max-avg-profit FLOAT]
[--min-total-profit FLOAT]
[--max-total-profit FLOAT]
[--min-objective FLOAT] [--max-objective FLOAT]
[--no-color] [--print-json] [--no-details]
[--hyperopt-filename PATH] [--export-csv FILE]
optional arguments:
-h, --help show this help message and exit
--best Select only best epochs.
--profitable Select only profitable epochs.
--min-trades INT Select epochs with more than INT trades.
--max-trades INT Select epochs with less than INT trades.
--min-avg-time FLOAT Select epochs above average time.
--max-avg-time FLOAT Select epochs below average time.
--min-avg-profit FLOAT
Select epochs above average profit.
--max-avg-profit FLOAT
Select epochs below average profit.
--min-total-profit FLOAT
Select epochs above total profit.
--max-total-profit FLOAT
Select epochs below total profit.
--min-objective FLOAT
Select epochs above objective.
--max-objective FLOAT
Select epochs below objective.
--no-color Disable colorization of hyperopt results. May be
useful if you are redirecting output to a file.
--print-json Print output in JSON format.
--no-details Do not print best epoch details.
--hyperopt-filename FILENAME
Hyperopt result filename.Example: `--hyperopt-
filename=hyperopt_results_2020-09-27_16-20-48.pickle`
--export-csv FILE Export to CSV-File. This will disable table print.
Example: --export-csv hyperopt.csv
Common arguments:
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
--logfile 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
Path to directory with historical backtesting data.
--userdir PATH, --user-data-dir PATH
Path to userdata directory.
```
--8<-- "commands/hyperopt-list.md"
!!! Note
`hyperopt-list` will automatically use the latest available hyperopt results file.
@@ -796,46 +374,7 @@ freqtrade hyperopt-list --profitable --no-details
You can show the details of any hyperoptimization epoch previously evaluated by the Hyperopt module with the `hyperopt-show` subcommand.
```
usage: freqtrade hyperopt-show [-h] [-v] [--logfile FILE] [-V] [-c PATH]
[-d PATH] [--userdir PATH] [--best]
[--profitable] [-n INT] [--print-json]
[--hyperopt-filename FILENAME] [--no-header]
[--disable-param-export]
[--breakdown {day,week,month} [{day,week,month} ...]]
optional arguments:
-h, --help show this help message and exit
--best Select only best epochs.
--profitable Select only profitable epochs.
-n INT, --index INT Specify the index of the epoch to print details for.
--print-json Print output in JSON format.
--hyperopt-filename FILENAME
Hyperopt result filename.Example: `--hyperopt-
filename=hyperopt_results_2020-09-27_16-20-48.pickle`
--no-header Do not print epoch details header.
--disable-param-export
Disable automatic hyperopt parameter export.
--breakdown {day,week,month} [{day,week,month} ...]
Show backtesting breakdown per [day, week, month].
Common arguments:
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
--logfile 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
Path to directory with historical backtesting data.
--userdir PATH, --user-data-dir PATH
Path to userdata directory.
```
--8<-- "commands/hyperopt-show.md"
!!! Note
`hyperopt-show` will automatically use the latest available hyperopt results file.
@@ -859,38 +398,7 @@ freqtrade hyperopt-show --best -n -1 --print-json --no-header
Print selected (or all) trades from database to screen.
```
usage: freqtrade show-trades [-h] [-v] [--logfile FILE] [-V] [-c PATH]
[-d PATH] [--userdir PATH] [--db-url PATH]
[--trade-ids TRADE_IDS [TRADE_IDS ...]]
[--print-json]
optional arguments:
-h, --help show this help message and exit
--db-url PATH Override trades database URL, this is useful in custom
deployments (default: `sqlite:///tradesv3.sqlite` for
Live Run mode, `sqlite:///tradesv3.dryrun.sqlite` for
Dry Run).
--trade-ids TRADE_IDS [TRADE_IDS ...]
Specify the list of trade ids.
--print-json Print output in JSON format.
Common arguments:
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
--logfile 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
Path to directory with historical backtesting data.
--userdir PATH, --user-data-dir PATH
Path to userdata directory.
```
--8<-- "commands/show-trades.md"
### Examples
@@ -910,32 +418,4 @@ Your original strategy will remain available in the `user_data/strategies_orig_u
Strategy updater will work on a "best effort" approach. Please do your due diligence and verify the results of the conversion.
We also recommend to run a python formatter (e.g. `black`) to format results in a sane manner.
```
usage: freqtrade strategy-updater [-h] [-v] [--logfile FILE] [-V] [-c PATH]
[-d PATH] [--userdir PATH]
[--strategy-list STRATEGY_LIST [STRATEGY_LIST ...]]
options:
-h, --help show this help message and exit
--strategy-list STRATEGY_LIST [STRATEGY_LIST ...]
Provide a space-separated list of strategies to
be converted.
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.
```
--8<-- "commands/strategy-updater.md"

View File

@@ -1,6 +1,6 @@
"""Freqtrade bot"""
__version__ = "2024.12"
__version__ = "2025.2"
if "dev" in __version__:
from pathlib import Path

View File

@@ -1,63 +1,23 @@
import logging
from pathlib import Path
from typing import Any
from freqtrade.enums import RunMode
from freqtrade.exceptions import ConfigurationError, OperationalException
logger = logging.getLogger(__name__)
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 = {
RunMode.BACKTEST: "backtesting",
}
if method in no_unlimited_runmodes.keys():
from freqtrade.data.btanalysis import get_latest_backtest_filename
if "exportfilename" in config:
if config["exportfilename"].is_dir():
btfile = Path(get_latest_backtest_filename(config["exportfilename"]))
signals_file = f"{config['exportfilename']}/{btfile.stem}_signals.pkl"
else:
if config["exportfilename"].exists():
btfile = Path(config["exportfilename"])
signals_file = f"{btfile.parent}/{btfile.stem}_signals.pkl"
else:
raise ConfigurationError(f"{config['exportfilename']} does not exist.")
else:
raise ConfigurationError("exportfilename not in config.")
if not Path(signals_file).exists():
raise OperationalException(
f"Cannot find latest backtest signals file: {signals_file}."
"Run backtesting with `--export signals`."
)
return config
def start_analysis_entries_exits(args: dict[str, Any]) -> None:
"""
Start analysis script
:param args: Cli args from Arguments()
:return: None
"""
from freqtrade.configuration import setup_utils_configuration
from freqtrade.data.entryexitanalysis import process_entry_exit_reasons
# Initialize configuration
config = setup_analyze_configuration(args, RunMode.BACKTEST)
config = setup_utils_configuration(args, RunMode.BACKTEST)
logger.info("Starting freqtrade in analysis mode")

View File

@@ -11,7 +11,15 @@ from freqtrade.commands.cli_options import AVAILABLE_CLI_OPTIONS
from freqtrade.constants import DEFAULT_CONFIG
ARGS_COMMON = ["verbosity", "logfile", "version", "config", "datadir", "user_data_dir"]
ARGS_COMMON = [
"verbosity",
"print_colorized",
"logfile",
"version",
"config",
"datadir",
"user_data_dir",
]
ARGS_STRATEGY = [
"strategy",
@@ -58,7 +66,6 @@ ARGS_HYPEROPT = ARGS_COMMON_OPTIMIZE + [
"epochs",
"spaces",
"print_all",
"print_colorized",
"print_json",
"hyperopt_jobs",
"hyperopt_random_state",
@@ -74,13 +81,12 @@ ARGS_EDGE = ARGS_COMMON_OPTIMIZE + ["stoploss_range"]
ARGS_LIST_STRATEGIES = [
"strategy_path",
"print_one_column",
"print_colorized",
"recursive_strategy_search",
]
ARGS_LIST_FREQAIMODELS = ["freqaimodel_path", "print_one_column", "print_colorized"]
ARGS_LIST_FREQAIMODELS = ["freqaimodel_path", "print_one_column"]
ARGS_LIST_HYPEROPTS = ["hyperopt_path", "print_one_column", "print_colorized"]
ARGS_LIST_HYPEROPTS = ["hyperopt_path", "print_one_column"]
ARGS_BACKTEST_SHOW = ["exportfilename", "backtest_show_pair_list", "backtest_breakdown"]
@@ -202,7 +208,6 @@ ARGS_HYPEROPT_LIST = [
"hyperopt_list_max_total_profit",
"hyperopt_list_min_objective",
"hyperopt_list_max_objective",
"print_colorized",
"print_json",
"hyperopt_list_no_details",
"hyperoptexportfilename",
@@ -342,7 +347,7 @@ class Arguments:
self.parser = ArgumentParser(
prog="freqtrade", description="Free, open source crypto trading bot"
)
self._build_args(optionlist=["version"], parser=self.parser)
self._build_args(optionlist=["version_main"], parser=self.parser)
from freqtrade.commands import (
start_analysis_entries_exits,

View File

@@ -4,7 +4,7 @@ Definition of cli arguments used in arguments.py
from argparse import SUPPRESS, ArgumentTypeError
from freqtrade import __version__, constants
from freqtrade import constants
from freqtrade.constants import HYPEROPT_LOSS_BUILTIN
from freqtrade.enums import CandleType
@@ -48,7 +48,6 @@ AVAILABLE_CLI_OPTIONS = {
"--verbose",
help="Verbose mode (-vv for more, -vvv to get all messages).",
action="count",
default=0,
),
"logfile": Arg(
"--logfile",
@@ -60,8 +59,15 @@ AVAILABLE_CLI_OPTIONS = {
"version": Arg(
"-V",
"--version",
action="version",
version=f"%(prog)s {__version__}",
help="show program's version number and exit",
action="store_true",
),
"version_main": Arg(
# Copy of version - used to have -V available with and without subcommand.
"-V",
"--version",
help="show program's version number and exit",
action="store_true",
),
"config": Arg(
"-c",
@@ -335,7 +341,7 @@ AVAILABLE_CLI_OPTIONS = {
help="Specify the class name of the hyperopt loss function class (IHyperOptLoss). "
"Different functions can generate completely different results, "
"since the target for optimization is different. Built-in Hyperopt-loss-functions are: "
f'{", ".join(HYPEROPT_LOSS_BUILTIN)}',
f"{', '.join(HYPEROPT_LOSS_BUILTIN)}",
metavar="NAME",
),
"hyperoptexportfilename": Arg(
@@ -664,8 +670,7 @@ AVAILABLE_CLI_OPTIONS = {
"--ignore-missing-spaces",
"--ignore-unparameterized-spaces",
help=(
"Suppress errors for any requested Hyperopt spaces "
"that do not contain any parameters."
"Suppress errors for any requested Hyperopt spaces that do not contain any parameters."
),
action="store_true",
),

View File

@@ -15,8 +15,7 @@ logger = logging.getLogger(__name__)
def _check_data_config_download_sanity(config: Config) -> None:
if "days" in config and "timerange" in config:
raise ConfigurationError(
"--days and --timerange are mutually exclusive. "
"You can only specify one or the other."
"--days and --timerange are mutually exclusive. You can only specify one or the other."
)
if "pairs" not in config:

View File

@@ -40,6 +40,10 @@ CONF_SCHEMA = {
),
"type": "string",
},
"proxy_coin": {
"description": "Proxy coin - must be used for specific futures modes (e.g. BNFCR)",
"type": "string",
},
"stake_currency": {
"description": "Currency used for staking.",
"type": "string",
@@ -649,7 +653,7 @@ CONF_SCHEMA = {
"type": "array",
"items": {"type": "string"},
},
"x": {
"verbosity": {
"description": "Logging verbosity level.",
"type": "string",
"enum": ["error", "info"],

View File

@@ -26,7 +26,7 @@ from freqtrade.enums import (
)
from freqtrade.exceptions import OperationalException
from freqtrade.loggers import setup_logging
from freqtrade.misc import deep_merge_dicts, parse_db_uri_for_logging
from freqtrade.misc import deep_merge_dicts, parse_db_uri_for_logging, safe_value_fallback
logger = logging.getLogger(__name__)
@@ -130,11 +130,20 @@ class Configuration:
the -v/--verbose, --logfile options
"""
# Log level
config.update({"verbosity": self.args.get("verbosity", 0)})
if "verbosity" not in config or self.args.get("verbosity") is not None:
config.update(
{"verbosity": safe_value_fallback(self.args, "verbosity", default_value=0)}
)
if "logfile" in self.args and self.args["logfile"]:
config.update({"logfile": self.args["logfile"]})
if "print_colorized" in self.args and not self.args["print_colorized"]:
logger.info("Parameter --no-color detected ...")
config.update({"print_colorized": False})
else:
config.update({"print_colorized": True})
setup_logging(config)
def _process_trading_options(self, config: Config) -> None:
@@ -326,12 +335,6 @@ class Configuration:
]
self._args_to_config_loop(config, configurations)
if "print_colorized" in self.args and not self.args["print_colorized"]:
logger.info("Parameter --no-color detected ...")
config.update({"print_colorized": False})
else:
config.update({"print_colorized": True})
configurations = [
("print_json", "Parameter --print-json detected ..."),
("export_csv", "Parameter --export-csv detected: {}"),

View File

@@ -10,6 +10,7 @@ from typing_extensions import Self
from freqtrade.constants import DATETIME_PRINT_FORMAT
from freqtrade.exceptions import ConfigurationError
from freqtrade.util import dt_from_ts
logger = logging.getLogger(__name__)
@@ -37,13 +38,13 @@ class TimeRange:
@property
def startdt(self) -> datetime | None:
if self.startts:
return datetime.fromtimestamp(self.startts, tz=timezone.utc)
return dt_from_ts(self.startts)
return None
@property
def stopdt(self) -> datetime | None:
if self.stopts:
return datetime.fromtimestamp(self.stopts, tz=timezone.utc)
return dt_from_ts(self.stopts)
return None
@property

View File

@@ -58,7 +58,7 @@ AVAILABLE_PAIRLISTS = [
"SpreadFilter",
"VolatilityFilter",
]
AVAILABLE_DATAHANDLERS = ["json", "jsongz", "hdf5", "feather", "parquet"]
AVAILABLE_DATAHANDLERS = ["json", "jsongz", "feather", "parquet"]
BACKTEST_BREAKDOWNS = ["day", "week", "month"]
BACKTEST_CACHE_AGE = ["none", "day", "week", "month"]
BACKTEST_CACHE_DEFAULT = "day"

View File

@@ -3,8 +3,10 @@ Helpers when analyzing backtest data
"""
import logging
import zipfile
from copy import copy
from datetime import datetime, timezone
from io import BytesIO, StringIO
from pathlib import Path
from typing import Any, Literal
@@ -165,8 +167,16 @@ def load_backtest_stats(filename: Path | str) -> BacktestResultType:
if not filename.is_file():
raise ValueError(f"File {filename} does not exist.")
logger.info(f"Loading backtest result from {filename}")
with filename.open() as file:
data = json_load(file)
if filename.suffix == ".zip":
data = json_load(
StringIO(
load_file_from_zip(filename, filename.with_suffix(".json").name).decode("utf-8")
)
)
else:
with filename.open() as file:
data = json_load(file)
# Legacy list format does not contain metadata.
if isinstance(data, dict):
@@ -194,8 +204,10 @@ def load_and_merge_backtest_result(strategy_name: str, filename: Path, results:
def _get_backtest_files(dirname: Path) -> list[Path]:
# Weird glob expression here avoids including .meta.json files.
return list(reversed(sorted(dirname.glob("backtest-result-*-[0-9][0-9].json"))))
# Get both json and zip files separately and combine the results
json_files = dirname.glob("backtest-result-*-[0-9][0-9]*.json")
zip_files = dirname.glob("backtest-result-*-[0-9][0-9]*.zip")
return list(reversed(sorted(list(json_files) + list(zip_files))))
def _extract_backtest_result(filename: Path) -> list[BacktestHistoryEntryType]:
@@ -267,7 +279,11 @@ def get_backtest_market_change(filename: Path, include_ts: bool = True) -> pd.Da
"""
Read backtest market change file.
"""
df = pd.read_feather(filename)
if filename.suffix == ".zip":
data = load_file_from_zip(filename, f"{filename.stem}_market_change.feather")
df = pd.read_feather(BytesIO(data))
else:
df = pd.read_feather(filename)
if include_ts:
df.loc[:, "__date_ts"] = df.loc[:, "date"].astype(np.int64) // 1000 // 1000
return df
@@ -388,6 +404,93 @@ def load_backtest_data(filename: Path | str, strategy: str | None = None) -> pd.
return df
def load_file_from_zip(zip_path: Path, filename: str) -> bytes:
"""
Load a file from a zip file
:param zip_path: Path to the zip file
:param filename: Name of the file to load
:return: Bytes of the file
:raises: ValueError if loading goes wrong.
"""
try:
with zipfile.ZipFile(zip_path) as zipf:
try:
with zipf.open(filename) as file:
return file.read()
except KeyError:
logger.error(f"File {filename} not found in zip: {zip_path}")
raise ValueError(f"File {filename} not found in zip: {zip_path}") from None
except FileNotFoundError:
raise ValueError(f"Zip file {zip_path} not found.")
except zipfile.BadZipFile:
logger.error(f"Bad zip file: {zip_path}.")
raise ValueError(f"Bad zip file: {zip_path}.") from None
def load_backtest_analysis_data(backtest_dir: Path, name: str):
"""
Load backtest analysis data either from a pickle file or from within a zip file
:param backtest_dir: Directory containing backtest results
:param name: Name of the analysis data to load (signals, rejected, exited)
:return: Analysis data
"""
import joblib
if backtest_dir.is_dir():
lbf = Path(get_latest_backtest_filename(backtest_dir))
zip_path = backtest_dir / lbf
else:
zip_path = backtest_dir
if zip_path.suffix == ".zip":
# Load from zip file
analysis_name = f"{zip_path.stem}_{name}.pkl"
data = load_file_from_zip(zip_path, analysis_name)
if not data:
return None
loaded_data = joblib.load(BytesIO(data))
logger.info(f"Loaded {name} candles from zip: {str(zip_path)}:{analysis_name}")
return loaded_data
else:
# Load from separate pickle file
if backtest_dir.is_dir():
scpf = Path(backtest_dir, f"{zip_path.stem}_{name}.pkl")
else:
scpf = Path(backtest_dir.parent / f"{backtest_dir.stem}_{name}.pkl")
try:
with scpf.open("rb") as scp:
loaded_data = joblib.load(scp)
logger.info(f"Loaded {name} candles: {str(scpf)}")
return loaded_data
except Exception:
logger.exception(f"Cannot load {name} data from pickled results.")
return None
def load_rejected_signals(backtest_dir: Path):
"""
Load rejected signals from backtest directory
"""
return load_backtest_analysis_data(backtest_dir, "rejected")
def load_signal_candles(backtest_dir: Path):
"""
Load signal candles from backtest directory
"""
return load_backtest_analysis_data(backtest_dir, "signals")
def load_exit_signal_candles(backtest_dir: Path) -> dict[str, dict[str, pd.DataFrame]]:
"""
Load exit signal candles from backtest directory
"""
return load_backtest_analysis_data(backtest_dir, "exited")
def analyze_trade_parallelism(results: pd.DataFrame, timeframe: str) -> pd.DataFrame:
"""
Find overlapping trades by expanding each trade once per period it was open

View File

@@ -164,12 +164,12 @@ def populate_dataframe_with_trades(
dataframe.at[index, "imbalances"] = imbalances.to_dict(orient="index")
stacked_imbalance_range = config_orderflow["stacked_imbalance_range"]
dataframe.at[index, "stacked_imbalances_bid"] = stacked_imbalance_bid(
imbalances, stacked_imbalance_range=stacked_imbalance_range
dataframe.at[index, "stacked_imbalances_bid"] = stacked_imbalance(
imbalances, label="bid", stacked_imbalance_range=stacked_imbalance_range
)
dataframe.at[index, "stacked_imbalances_ask"] = stacked_imbalance_ask(
imbalances, stacked_imbalance_range=stacked_imbalance_range
dataframe.at[index, "stacked_imbalances_ask"] = stacked_imbalance(
imbalances, label="ask", stacked_imbalance_range=stacked_imbalance_range
)
bid = np.where(
@@ -256,34 +256,24 @@ def trades_orderflow_to_imbalances(df: pd.DataFrame, imbalance_ratio: int, imbal
return dataframe
def stacked_imbalance(
df: pd.DataFrame, label: str, stacked_imbalance_range: int, should_reverse: bool
):
def stacked_imbalance(df: pd.DataFrame, label: str, stacked_imbalance_range: int):
"""
y * (y.groupby((y != y.shift()).cumsum()).cumcount() + 1)
https://stackoverflow.com/questions/27626542/counting-consecutive-positive-values-in-python-pandas-array
"""
imbalance = df[f"{label}_imbalance"]
int_series = pd.Series(np.where(imbalance, 1, 0))
stacked = int_series * (
int_series.groupby((int_series != int_series.shift()).cumsum()).cumcount() + 1
)
# Group consecutive True values and get their counts
groups = (int_series != int_series.shift()).cumsum()
counts = int_series.groupby(groups).cumsum()
max_stacked_imbalance_idx = stacked.index[stacked >= stacked_imbalance_range]
stacked_imbalance_price = np.nan
if not max_stacked_imbalance_idx.empty:
idx = (
max_stacked_imbalance_idx[0]
if not should_reverse
else np.flipud(max_stacked_imbalance_idx)[0]
)
stacked_imbalance_price = imbalance.index[idx]
return stacked_imbalance_price
# Find indices where count meets or exceeds the range requirement
valid_indices = counts[counts >= stacked_imbalance_range].index
def stacked_imbalance_ask(df: pd.DataFrame, stacked_imbalance_range: int):
return stacked_imbalance(df, "ask", stacked_imbalance_range, should_reverse=True)
def stacked_imbalance_bid(df: pd.DataFrame, stacked_imbalance_range: int):
return stacked_imbalance(df, "bid", stacked_imbalance_range, should_reverse=False)
stacked_imbalance_prices = []
if not valid_indices.empty:
# Get all prices from valid indices from beginning of the range
stacked_imbalance_prices = [
imbalance.index.values[idx - (stacked_imbalance_range - 1)] for idx in valid_indices
]
return stacked_imbalance_prices

View File

@@ -79,7 +79,7 @@ class DataProvider:
def _set_dataframe_max_date(self, limit_date: datetime):
"""
Limit infomrative dataframe to max specified index.
Limit informative dataframe to max specified index.
Only relevant in backtesting.
:param limit_date: "current date"
"""

View File

@@ -1,56 +1,25 @@
import logging
from pathlib import Path
import joblib
import pandas as pd
from freqtrade.configuration import TimeRange
from freqtrade.constants import Config
from freqtrade.data.btanalysis import (
BT_DATA_COLUMNS,
get_latest_backtest_filename,
load_backtest_data,
load_backtest_stats,
load_exit_signal_candles,
load_rejected_signals,
load_signal_candles,
)
from freqtrade.exceptions import OperationalException
from freqtrade.exceptions import ConfigurationError, OperationalException
from freqtrade.util import print_df_rich_table
logger = logging.getLogger(__name__)
def _load_backtest_analysis_data(backtest_dir: Path, name: str):
if backtest_dir.is_dir():
scpf = Path(
backtest_dir,
Path(get_latest_backtest_filename(backtest_dir)).stem + "_" + name + ".pkl",
)
else:
scpf = Path(backtest_dir.parent / f"{backtest_dir.stem}_{name}.pkl")
try:
with scpf.open("rb") as scp:
loaded_data = joblib.load(scp)
logger.info(f"Loaded {name} candles: {str(scpf)}")
except Exception as e:
logger.error(f"Cannot load {name} data from pickled results: ", e)
return None
return loaded_data
def _load_rejected_signals(backtest_dir: Path):
return _load_backtest_analysis_data(backtest_dir, "rejected")
def _load_signal_candles(backtest_dir: Path):
return _load_backtest_analysis_data(backtest_dir, "signals")
def _load_exit_signal_candles(backtest_dir: Path) -> dict[str, dict[str, pd.DataFrame]]:
return _load_backtest_analysis_data(backtest_dir, "exited")
def _process_candles_and_indicators(
pairlist, strategy_name, trades, signal_candles, date_col: str = "open_date"
):
@@ -374,19 +343,21 @@ def process_entry_exit_reasons(config: Config):
timerange = TimeRange.parse_timerange(
None if config.get("timerange") is None else str(config.get("timerange"))
)
backtest_stats = load_backtest_stats(config["exportfilename"])
try:
backtest_stats = load_backtest_stats(config["exportfilename"])
except ValueError as e:
raise ConfigurationError(e) from e
for strategy_name, results in backtest_stats["strategy"].items():
trades = load_backtest_data(config["exportfilename"], strategy_name)
if trades is not None and not trades.empty:
signal_candles = _load_signal_candles(config["exportfilename"])
exit_signals = _load_exit_signal_candles(config["exportfilename"])
signal_candles = load_signal_candles(config["exportfilename"])
exit_signals = load_exit_signal_candles(config["exportfilename"])
rej_df = None
if do_rejected:
rejected_signals_dict = _load_rejected_signals(config["exportfilename"])
rejected_signals_dict = load_rejected_signals(config["exportfilename"])
rej_df = prepare_results(
rejected_signals_dict,
strategy_name,

View File

@@ -1,181 +0,0 @@
import logging
import numpy as np
import pandas as pd
from freqtrade.configuration import TimeRange
from freqtrade.constants import DEFAULT_DATAFRAME_COLUMNS, DEFAULT_TRADES_COLUMNS
from freqtrade.enums import CandleType, TradingMode
from .idatahandler import IDataHandler
logger = logging.getLogger(__name__)
class HDF5DataHandler(IDataHandler):
_columns = DEFAULT_DATAFRAME_COLUMNS
def ohlcv_store(
self, pair: str, timeframe: str, data: pd.DataFrame, candle_type: CandleType
) -> None:
"""
Store data in hdf5 file.
:param pair: Pair - used to generate filename
:param timeframe: Timeframe - used to generate filename
:param data: Dataframe containing OHLCV data
:param candle_type: Any of the enum CandleType (must match trading mode!)
:return: None
"""
key = self._pair_ohlcv_key(pair, timeframe)
_data = data.copy()
filename = self._pair_data_filename(self._datadir, pair, timeframe, candle_type)
self.create_dir_if_needed(filename)
_data.loc[:, self._columns].to_hdf(
filename,
key=key,
mode="a",
complevel=9,
complib="blosc",
format="table",
data_columns=["date"],
)
def _ohlcv_load(
self, pair: str, timeframe: str, timerange: TimeRange | None, candle_type: CandleType
) -> pd.DataFrame:
"""
Internal method used to load data for one pair from disk.
Implements the loading and conversion to a Pandas dataframe.
Timerange trimming and dataframe validation happens outside of this method.
:param pair: Pair to load data
:param timeframe: Timeframe (e.g. "5m")
:param timerange: Limit data to be loaded to this timerange.
Optionally implemented by subclasses to avoid loading
all data where possible.
:param candle_type: Any of the enum CandleType (must match trading mode!)
:return: DataFrame with ohlcv data, or empty DataFrame
"""
key = self._pair_ohlcv_key(pair, timeframe)
filename = self._pair_data_filename(self._datadir, pair, timeframe, candle_type=candle_type)
if not filename.exists():
# Fallback mode for 1M files
filename = self._pair_data_filename(
self._datadir, pair, timeframe, candle_type=candle_type, no_timeframe_modify=True
)
if not filename.exists():
return pd.DataFrame(columns=self._columns)
try:
where = []
if timerange:
if timerange.starttype == "date":
where.append(f"date >= Timestamp({timerange.startts * 1e9})")
if timerange.stoptype == "date":
where.append(f"date <= Timestamp({timerange.stopts * 1e9})")
pairdata = pd.read_hdf(filename, key=key, mode="r", where=where)
if list(pairdata.columns) != self._columns:
raise ValueError("Wrong dataframe format")
pairdata = pairdata.astype(
dtype={
"open": "float",
"high": "float",
"low": "float",
"close": "float",
"volume": "float",
}
)
pairdata = pairdata.reset_index(drop=True)
return pairdata
except ValueError:
raise
except Exception as e:
logger.exception(
f"Error loading data from {filename}. Exception: {e}. Returning empty dataframe."
)
return pd.DataFrame(columns=self._columns)
def ohlcv_append(
self, pair: str, timeframe: str, data: pd.DataFrame, candle_type: CandleType
) -> None:
"""
Append data to existing data structures
:param pair: Pair
:param timeframe: Timeframe this ohlcv data is for
:param data: Data to append.
:param candle_type: Any of the enum CandleType (must match trading mode!)
"""
raise NotImplementedError()
def _trades_store(self, pair: str, data: pd.DataFrame, trading_mode: TradingMode) -> None:
"""
Store trades data (list of Dicts) to file
:param pair: Pair - used for filename
:param data: Dataframe containing trades
column sequence as in DEFAULT_TRADES_COLUMNS
:param trading_mode: Trading mode to use (used to determine the filename)
"""
key = self._pair_trades_key(pair)
data.to_hdf(
self._pair_trades_filename(self._datadir, pair, trading_mode),
key=key,
mode="a",
complevel=9,
complib="blosc",
format="table",
data_columns=["timestamp"],
)
def trades_append(self, pair: str, data: pd.DataFrame):
"""
Append data to existing files
:param pair: Pair - used for filename
:param data: Dataframe containing trades
column sequence as in DEFAULT_TRADES_COLUMNS
"""
raise NotImplementedError()
def _trades_load(
self, pair: str, trading_mode: TradingMode, timerange: TimeRange | None = None
) -> pd.DataFrame:
"""
Load a pair from h5 file.
:param pair: Load trades for this pair
:param trading_mode: Trading mode to use (used to determine the filename)
:param timerange: Timerange to load trades for - currently not implemented
:return: Dataframe containing trades
"""
key = self._pair_trades_key(pair)
filename = self._pair_trades_filename(self._datadir, pair, trading_mode)
if not filename.exists():
return pd.DataFrame(columns=DEFAULT_TRADES_COLUMNS)
where = []
if timerange:
if timerange.starttype == "date":
where.append(f"timestamp >= {timerange.startts * 1e3}")
if timerange.stoptype == "date":
where.append(f"timestamp < {timerange.stopts * 1e3}")
trades: pd.DataFrame = pd.read_hdf(filename, key=key, mode="r", where=where)
trades[["id", "type"]] = trades[["id", "type"]].replace({np.nan: None})
return trades
@classmethod
def _get_file_extension(cls):
return "h5"
@classmethod
def _pair_ohlcv_key(cls, pair: str, timeframe: str) -> str:
# Escape futures pairs to avoid warnings
pair_esc = pair.replace(":", "_")
return f"{pair_esc}/ohlcv/tf_{timeframe}"
@classmethod
def _pair_trades_key(cls, pair: str) -> str:
return f"{pair}/trades"

View File

@@ -23,6 +23,7 @@ from freqtrade.data.converter import (
trim_dataframe,
)
from freqtrade.enums import CandleType, TradingMode
from freqtrade.exceptions import OperationalException
from freqtrade.exchange import timeframe_to_seconds
@@ -549,16 +550,13 @@ def get_datahandlerclass(datatype: str) -> type[IDataHandler]:
return JsonGzDataHandler
elif datatype == "hdf5":
from .hdf5datahandler import HDF5DataHandler
logger.warning(
"DEPRECATED: The hdf5 dataformat is deprecated and will be removed in the "
"next release. "
"Please use the convert-data command to convert your data to a supported format."
raise OperationalException(
"DEPRECATED: The hdf5 dataformat is deprecated and has been removed in 2025.1. "
"Please downgrade to 2024.12 and use the convert-data command to convert your data "
"to a supported format."
"We recommend using the feather format, as it is faster and is more space-efficient."
)
return HDF5DataHandler
elif datatype == "feather":
from .featherdatahandler import FeatherDataHandler

View File

@@ -18,7 +18,7 @@ from freqtrade.enums import CandleType, TradingMode
from freqtrade.exceptions import OperationalException
from freqtrade.exchange import Exchange
from freqtrade.plugins.pairlist.pairlist_helpers import dynamic_expand_pairlist
from freqtrade.util import dt_now, dt_ts, format_ms_time
from freqtrade.util import dt_now, dt_ts, format_ms_time, format_ms_time_det
from freqtrade.util.migrations import migrate_data
from freqtrade.util.progress_tracker import CustomProgress, retrieve_progress_tracker
@@ -259,8 +259,8 @@ def _download_pair_history(
logger.info(
f'Download history data for "{pair}", {timeframe}, '
f"{candle_type} and store in {datadir}. "
f'From {format_ms_time(since_ms) if since_ms else "start"} to '
f'{format_ms_time(until_ms) if until_ms else "now"}'
f"From {format_ms_time(since_ms) if since_ms else 'start'} to "
f"{format_ms_time(until_ms) if until_ms else 'now'}"
)
logger.debug(
@@ -431,11 +431,11 @@ def _download_trades_history(
# DEFAULT_TRADES_COLUMNS: 0 -> timestamp
# DEFAULT_TRADES_COLUMNS: 1 -> id
if not trades.empty and since > 0 and since < trades.iloc[0]["timestamp"]:
if not trades.empty and since > 0 and (since + 1000) < trades.iloc[0]["timestamp"]:
# since is before the first trade
raise ValueError(
f"Start {format_ms_time(since)} earlier than "
f"available data ({trades.iloc[0]['date']:{DATETIME_PRINT_FORMAT}}). "
f"Start {format_ms_time_det(since)} earlier than "
f"available data ({format_ms_time_det(trades.iloc[0]['timestamp'])}). "
f"Please use `--erase` if you'd like to redownload {pair}."
)
@@ -443,7 +443,7 @@ def _download_trades_history(
if not trades.empty and since < trades.iloc[-1]["timestamp"]:
# Reset since to the last available point
# - 5 seconds (to ensure we're getting all trades)
since = trades.iloc[-1]["timestamp"] - (5 * 1000)
since = int(trades.iloc[-1]["timestamp"] - (5 * 1000))
logger.info(
f"Using last trade date -5s - Downloading trades for {pair} "
f"since: {format_ms_time(since)}."
@@ -462,7 +462,6 @@ def _download_trades_history(
)
logger.info(f"Current Amount of trades: {len(trades)}")
# Default since_ms to 30 days if nothing is given
new_trades = exchange.get_historic_trades(
pair=pair,
since=since,
@@ -679,11 +678,17 @@ def download_data(
)
else:
if not exchange.get_option("ohlcv_has_history", True):
raise OperationalException(
f"Historic klines not available for {exchange.name}. "
"Please use `--dl-trades` instead for this exchange "
"(will unfortunately take a long time)."
)
if not exchange.get_option("trades_has_history", True):
raise OperationalException(
f"Historic data not available for {exchange.name}. "
f"{exchange.name} does not support downloading trades or ohlcv data."
)
else:
raise OperationalException(
f"Historic klines not available for {exchange.name}. "
"Please use `--dl-trades` instead for this exchange "
"(will unfortunately take a long time)."
)
migrate_data(config, exchange)
pairs_not_available = refresh_backtest_ohlcv_data(
exchange,

View File

@@ -10,7 +10,6 @@ from freqtrade.exchange.bitmart import Bitmart
from freqtrade.exchange.bitpanda import Bitpanda
from freqtrade.exchange.bitvavo import Bitvavo
from freqtrade.exchange.bybit import Bybit
from freqtrade.exchange.coinbasepro import Coinbasepro
from freqtrade.exchange.cryptocom import Cryptocom
from freqtrade.exchange.exchange_utils import (
ROUND_DOWN,

View File

@@ -29,7 +29,6 @@ class Binance(Exchange):
"stop_price_prop": "stopPrice",
"stoploss_order_types": {"limit": "stop_loss_limit"},
"order_time_in_force": ["GTC", "FOK", "IOC", "PO"],
"ohlcv_candle_limit": 1000,
"trades_pagination": "id",
"trades_pagination_arg": "fromId",
"trades_has_history": True,
@@ -37,6 +36,7 @@ class Binance(Exchange):
"ws_enabled": True,
}
_ft_has_futures: FtHas = {
"funding_fee_candle_limit": 1000,
"stoploss_order_types": {"limit": "stop", "market": "stop_market"},
"order_time_in_force": ["GTC", "FOK", "IOC"],
"tickers_have_price": False,
@@ -48,15 +48,29 @@ class Binance(Exchange):
PriceType.MARK: "MARK_PRICE",
},
"ws_enabled": False,
"proxy_coin_mapping": {
"BNFCR": "USDC",
"BFUSD": "USDT",
},
}
_supported_trading_mode_margin_pairs: list[tuple[TradingMode, MarginMode]] = [
# TradingMode.SPOT always supported and not required in this list
# (TradingMode.MARGIN, MarginMode.CROSS),
# (TradingMode.FUTURES, MarginMode.CROSS),
(TradingMode.FUTURES, MarginMode.ISOLATED)
(TradingMode.FUTURES, MarginMode.CROSS),
(TradingMode.FUTURES, MarginMode.ISOLATED),
]
def get_proxy_coin(self) -> str:
"""
Get the proxy coin for the given coin
Falls back to the stake currency if no proxy coin is found
:return: Proxy coin or stake currency
"""
if self.margin_mode == MarginMode.CROSS:
return self._config.get("proxy_coin", self._config["stake_currency"])
return self._config["stake_currency"]
def get_tickers(
self,
symbols: list[str] | None = None,
@@ -126,9 +140,10 @@ class Binance(Exchange):
:param candle_type: Any of the enum CandleType (must match trading mode!)
"""
if is_new_pair:
x = self.loop.run_until_complete(
self._async_get_candle_history(pair, timeframe, candle_type, 0)
)
with self._loop_lock:
x = self.loop.run_until_complete(
self._async_get_candle_history(pair, timeframe, candle_type, 0)
)
if x and x[3] and x[3][0] and x[3][0][0] > since_ms:
# Set starting date to first available candle.
since_ms = x[3][0][0]
@@ -187,16 +202,17 @@ class Binance(Exchange):
"""
Fastly fetch OHLCV data by leveraging https://data.binance.vision.
"""
df = self.loop.run_until_complete(
download_archive_ohlcv(
candle_type=candle_type,
pair=pair,
timeframe=timeframe,
since_ms=since_ms,
until_ms=until_ms,
markets=self.markets,
with self._loop_lock:
df = self.loop.run_until_complete(
download_archive_ohlcv(
candle_type=candle_type,
pair=pair,
timeframe=timeframe,
since_ms=since_ms,
until_ms=until_ms,
markets=self.markets,
)
)
)
# download the remaining data from rest API
if df.empty:
@@ -349,7 +365,7 @@ class Binance(Exchange):
return {}
async def _async_get_trade_history_id_startup(
self, pair: str, since: int | None
self, pair: str, since: int
) -> tuple[list[list], str]:
"""
override for initial call

File diff suppressed because it is too large Load Diff

View File

@@ -63,13 +63,6 @@ async def download_archive_ohlcv(
available in the time range
"""
try:
if candle_type == CandleType.SPOT:
asset_type_url_segment = "spot"
elif candle_type == CandleType.FUTURES:
asset_type_url_segment = "futures/um"
else:
raise ValueError(f"Unsupported CandleType: {candle_type}")
symbol = markets[pair]["id"]
start = dt_from_ts(since_ms)
@@ -82,7 +75,7 @@ async def download_archive_ohlcv(
if start >= end:
return DataFrame()
df = await _download_archive_ohlcv(
asset_type_url_segment, symbol, pair, timeframe, start, end, stop_on_404
symbol, pair, timeframe, candle_type, start, end, stop_on_404
)
logger.debug(
f"Downloaded data for {pair} from https://data.binance.vision with length {len(df)}."
@@ -110,10 +103,10 @@ def concat_safe(dfs) -> DataFrame:
async def _download_archive_ohlcv(
asset_type_url_segment: str,
symbol: str,
pair: str,
timeframe: str,
candle_type: CandleType,
start: date,
end: date,
stop_on_404: bool,
@@ -128,9 +121,7 @@ async def _download_archive_ohlcv(
# the HTTP connections has been throttled by TCPConnector
for dates in chunks(list(date_range(start, end)), 1000):
tasks = [
asyncio.create_task(
get_daily_ohlcv(asset_type_url_segment, symbol, timeframe, date, session)
)
asyncio.create_task(get_daily_ohlcv(symbol, timeframe, candle_type, date, session))
for date in dates
]
for task in tasks:
@@ -196,14 +187,24 @@ def binance_vision_zip_name(symbol: str, timeframe: str, date: date) -> str:
return f"{symbol}-{timeframe}-{date.strftime('%Y-%m-%d')}.zip"
def binance_vision_zip_url(
asset_type_url_segment: str, symbol: str, timeframe: str, date: date
def candle_type_to_url_segment(candle_type: CandleType) -> str:
if candle_type == CandleType.SPOT:
return "spot"
elif candle_type == CandleType.FUTURES:
return "futures/um"
else:
raise ValueError(f"Unsupported CandleType: {candle_type}")
def binance_vision_ohlcv_zip_url(
symbol: str, timeframe: str, candle_type: CandleType, date: date
) -> str:
"""
example urls:
https://data.binance.vision/data/spot/daily/klines/BTCUSDT/1s/BTCUSDT-1s-2023-10-27.zip
https://data.binance.vision/data/futures/um/daily/klines/BTCUSDT/1h/BTCUSDT-1h-2023-10-27.zip
"""
asset_type_url_segment = candle_type_to_url_segment(candle_type)
url = (
f"https://data.binance.vision/data/{asset_type_url_segment}/daily/klines/{symbol}"
f"/{timeframe}/{binance_vision_zip_name(symbol, timeframe, date)}"
@@ -212,9 +213,9 @@ def binance_vision_zip_url(
async def get_daily_ohlcv(
asset_type_url_segment: str,
symbol: str,
timeframe: str,
candle_type: CandleType,
date: date,
session: aiohttp.ClientSession,
retry_count: int = 3,
@@ -224,9 +225,9 @@ async def get_daily_ohlcv(
Get daily OHLCV from https://data.binance.vision
See https://github.com/binance/binance-public-data
:asset_type_url_segment: `spot` or `futures/um`
:symbol: binance symbol name, e.g. BTCUSDT
:timeframe: e.g. 1m, 1h
:candle_type: SPOT or FUTURES
:date: the returned DataFrame will cover the entire day of `date` in UTC
:session: an aiohttp.ClientSession instance
:retry_count: times to retry before returning the exceptions
@@ -234,7 +235,7 @@ async def get_daily_ohlcv(
:return: A dataframe containing columns date,open,high,low,close,volume
"""
url = binance_vision_zip_url(asset_type_url_segment, symbol, timeframe, date)
url = binance_vision_ohlcv_zip_url(symbol, timeframe, candle_type, date)
logger.debug(f"download data from binance: {url}")

View File

@@ -31,7 +31,6 @@ class Bybit(Exchange):
unified_account = False
_ft_has: FtHas = {
"ohlcv_candle_limit": 1000,
"ohlcv_has_history": True,
"order_time_in_force": ["GTC", "FOK", "IOC", "PO"],
"ws_enabled": True,

View File

@@ -36,7 +36,7 @@ def check_exchange(config: Config, check_for_bad: bool = True) -> bool:
f"This command requires a configured exchange. You should either use "
f"`--exchange <exchange_name>` or specify a configuration file via `--config`.\n"
f"The following exchanges are available for Freqtrade: "
f'{", ".join(available_exchanges())}'
f"{', '.join(available_exchanges())}"
)
if not is_exchange_known_ccxt(exchange):
@@ -44,21 +44,21 @@ def check_exchange(config: Config, check_for_bad: bool = True) -> bool:
f'Exchange "{exchange}" is not known to the ccxt library '
f"and therefore not available for the bot.\n"
f"The following exchanges are available for Freqtrade: "
f'{", ".join(available_exchanges())}'
f"{', '.join(available_exchanges())}"
)
valid, reason, _ = validate_exchange(exchange)
if not valid:
if check_for_bad:
raise OperationalException(
f'Exchange "{exchange}" will not work with Freqtrade. ' f"Reason: {reason}"
f'Exchange "{exchange}" will not work with Freqtrade. Reason: {reason}'
)
else:
logger.warning(f'Exchange "{exchange}" will not work with Freqtrade. Reason: {reason}')
if MAP_EXCHANGE_CHILDCLASS.get(exchange, exchange) in SUPPORTED_EXCHANGES:
logger.info(
f'Exchange "{exchange}" is officially supported ' f"by the Freqtrade development team."
f'Exchange "{exchange}" is officially supported by the Freqtrade development team.'
)
else:
logger.warning(

View File

@@ -1,24 +0,0 @@
"""CoinbasePro exchange subclass"""
import logging
from freqtrade.exchange import Exchange
from freqtrade.exchange.exchange_types import FtHas
logger = logging.getLogger(__name__)
class Coinbasepro(Exchange):
"""
CoinbasePro exchange class. Contains adjustments needed for Freqtrade to work
with this exchange.
Please note that this exchange is not included in the list of exchanges
officially supported by the Freqtrade development team. So some features
may still not work as expected.
"""
_ft_has: FtHas = {
"ohlcv_candle_limit": 300,
}

View File

@@ -40,6 +40,9 @@ BAD_EXCHANGES = {
"bitmex": "Various reasons.",
"probit": "Requires additional, regular calls to `signIn()`.",
"poloniex": "Does not provide fetch_order endpoint to fetch both open and closed orders.",
"kucoinfutures": "Unsupported futures exchange.",
"poloniexfutures": "Unsupported futures exchange.",
"binancecoinm": "Unsupported futures exchange.",
}
MAP_EXCHANGE_CHILDCLASS = {

View File

@@ -12,7 +12,7 @@ from copy import deepcopy
from datetime import datetime, timedelta, timezone
from math import floor, isnan
from threading import Lock
from typing import Any, Literal, TypeGuard
from typing import Any, Literal, TypeGuard, TypeVar
import ccxt
import ccxt.pro as ccxt_pro
@@ -113,6 +113,8 @@ from freqtrade.util.periodic_cache import PeriodicCache
logger = logging.getLogger(__name__)
T = TypeVar("T")
class Exchange:
# Parameters to add directly to buy/sell calls (like agreeing to trading agreement)
@@ -131,7 +133,6 @@ class Exchange:
"stoploss_order_types": {},
"order_time_in_force": ["GTC"],
"ohlcv_params": {},
"ohlcv_candle_limit": 500,
"ohlcv_has_history": True, # Some exchanges (Kraken) don't provide history via ohlcv
"ohlcv_partial_candle": True,
"ohlcv_require_since": False,
@@ -156,6 +157,7 @@ class Exchange:
# Override createMarketBuyOrderRequiresPrice where ccxt has it wrong
"marketOrderRequiresPrice": False,
"exchange_has_overrides": {}, # Dictionary overriding ccxt's "has".
"proxy_coin_mapping": {}, # Mapping for proxy coins
# Expected to be in the format {"fetchOHLCV": True} or {"fetchOHLCV": False}
"ws_enabled": False, # Set to true for exchanges with tested websocket support
}
@@ -275,6 +277,11 @@ class Exchange:
logger.info(f'Using Exchange "{self.name}"')
self.required_candle_call_count = 1
# Converts the interval provided in minutes in config to seconds
self.markets_refresh_interval: int = (
exchange_conf.get("markets_refresh_interval", 60) * 60 * 1000
)
if validate:
# Initial markets load
self.reload_markets(True, load_leverage_tiers=False)
@@ -284,11 +291,6 @@ class Exchange:
self._startup_candle_count, config.get("timeframe", "")
)
# Converts the interval provided in minutes in config to seconds
self.markets_refresh_interval: int = (
exchange_conf.get("markets_refresh_interval", 60) * 60 * 1000
)
if self.trading_mode != TradingMode.SPOT and load_leverage_tiers:
self.fill_leverage_tiers()
self.additional_exchange_init()
@@ -465,7 +467,12 @@ class Exchange:
:return: Candle limit as integer
"""
fallback_val = self._ft_has.get("ohlcv_candle_limit")
ccxt_val = self.features(
"spot" if candle_type == CandleType.SPOT else "futures", "fetchOHLCV", "limit", 500
)
if not isinstance(ccxt_val, float | int):
ccxt_val = 500
fallback_val = self._ft_has.get("ohlcv_candle_limit", ccxt_val)
if candle_type == CandleType.FUNDING_RATE:
fallback_val = self._ft_has.get("funding_fee_candle_limit", fallback_val)
return int(
@@ -547,6 +554,7 @@ class Exchange:
and (
self.precisionMode != TICK_SIZE
# Too low precision will falsify calculations
or market.get("precision", {}).get("price") is None
or market.get("precision", {}).get("price") > 1e-11
)
and (
@@ -640,7 +648,8 @@ class Exchange:
def _load_async_markets(self, reload: bool = False) -> dict[str, Any]:
try:
markets = self.loop.run_until_complete(self._api_reload_markets(reload=reload))
with self._loop_lock:
markets = self.loop.run_until_complete(self._api_reload_markets(reload=reload))
if isinstance(markets, Exception):
raise markets
@@ -885,6 +894,24 @@ class Exchange:
return self._ft_has["exchange_has_overrides"][endpoint]
return endpoint in self._api_async.has and self._api_async.has[endpoint]
def features(
self, market_type: Literal["spot", "futures"], endpoint, attribute, default: T
) -> T:
"""
Returns the exchange features for the given markettype
https://docs.ccxt.com/#/README?id=features
attributes are in a nested dict, with spot and swap.linear
e.g. spot.fetchOHLCV.limit
swap.linear.fetchOHLCV.limit
"""
feat = (
self._api_async.features.get("spot", {})
if market_type == "spot"
else self._api_async.features.get("swap", {}).get("linear", {})
)
return feat.get(endpoint, {}).get(attribute, default)
def get_precision_amount(self, pair: str) -> float | None:
"""
Returns the amount precision of the exchange.
@@ -1863,6 +1890,14 @@ class Exchange:
except ccxt.BaseError as e:
raise OperationalException(e) from e
def get_proxy_coin(self) -> str:
"""
Get the proxy coin for the given coin
Falls back to the stake currency if no proxy coin is found
:return: Proxy coin or stake currency
"""
return self._config["stake_currency"]
def get_conversion_rate(self, coin: str, currency: str) -> float | None:
"""
Quick and cached way to get conversion rate one currency to the other.
@@ -1872,6 +1907,11 @@ class Exchange:
:returns: Conversion rate from coin to currency
:raises: ExchangeErrors
"""
if (proxy_coin := self._ft_has["proxy_coin_mapping"].get(coin, None)) is not None:
coin = proxy_coin
if (proxy_currency := self._ft_has["proxy_coin_mapping"].get(currency, None)) is not None:
currency = proxy_currency
if coin == currency:
return 1.0
tickers = self.get_tickers(cached=True)
@@ -1889,7 +1929,7 @@ class Exchange:
)
ticker = tickers_other.get(pair, None)
if ticker:
rate: float | None = ticker.get("last", None)
rate: float | None = safe_value_fallback2(ticker, ticker, "last", "ask", None)
if rate and pair.startswith(currency) and not pair.endswith(currency):
rate = 1.0 / rate
return rate
@@ -2251,13 +2291,11 @@ class Exchange:
# If cost is None or 0.0 -> falsy, return None
return None
try:
for comb in self.get_valid_pair_combination(
fee_to_quote_rate = self.get_conversion_rate(
fee_curr, self._config["stake_currency"]
):
tick = self.fetch_ticker(comb)
fee_to_quote_rate = safe_value_fallback2(tick, tick, "last", "ask")
if tick:
break
)
if not fee_to_quote_rate:
raise ValueError("Conversion rate not found.")
except (ValueError, ExchangeError):
fee_to_quote_rate = self._config["exchange"].get("unknown_fee_rate", None)
if not fee_to_quote_rate:
@@ -2305,15 +2343,16 @@ class Exchange:
:param until_ms: Timestamp in milliseconds to get history up to
:return: Dataframe with candle (OHLCV) data
"""
pair, _, _, data, _ = self.loop.run_until_complete(
self._async_get_historic_ohlcv(
pair=pair,
timeframe=timeframe,
since_ms=since_ms,
until_ms=until_ms,
candle_type=candle_type,
with self._loop_lock:
pair, _, _, data, _ = self.loop.run_until_complete(
self._async_get_historic_ohlcv(
pair=pair,
timeframe=timeframe,
since_ms=since_ms,
until_ms=until_ms,
candle_type=candle_type,
)
)
)
logger.debug(f"Downloaded data for {pair} from ccxt with length {len(data)}.")
return ohlcv_to_dataframe(data, timeframe, pair, fill_missing=False, drop_incomplete=True)
@@ -2379,35 +2418,35 @@ class Exchange:
if cache and (pair, timeframe, candle_type) in self._klines:
candle_limit = self.ohlcv_candle_limit(timeframe, candle_type)
min_date = int(date_minus_candles(timeframe, candle_limit - 5).timestamp())
min_ts = dt_ts(date_minus_candles(timeframe, candle_limit - 5))
if self._exchange_ws:
candle_date = int(timeframe_to_prev_date(timeframe).timestamp() * 1000)
prev_candle_date = int(date_minus_candles(timeframe, 1).timestamp() * 1000)
candles = self._exchange_ws.ccxt_object.ohlcvs.get(pair, {}).get(timeframe)
half_candle = int(candle_date - (candle_date - prev_candle_date) * 0.5)
candle_ts = dt_ts(timeframe_to_prev_date(timeframe))
prev_candle_ts = dt_ts(date_minus_candles(timeframe, 1))
candles = self._exchange_ws.ohlcvs(pair, timeframe)
half_candle = int(candle_ts - (candle_ts - prev_candle_ts) * 0.5)
last_refresh_time = int(
self._exchange_ws.klines_last_refresh.get((pair, timeframe, candle_type), 0)
)
if (
candles
and candles[-1][0] >= prev_candle_date
and candles[-1][0] >= prev_candle_ts
and last_refresh_time >= half_candle
):
# Usable result, candle contains the previous candle.
# Also, we check if the last refresh time is no more than half the candle ago.
logger.debug(f"reuse watch result for {pair}, {timeframe}, {last_refresh_time}")
return self._exchange_ws.get_ohlcv(pair, timeframe, candle_type, candle_date)
return self._exchange_ws.get_ohlcv(pair, timeframe, candle_type, candle_ts)
logger.info(
f"Failed to reuse watch {pair}, {timeframe}, {candle_date < last_refresh_time},"
f" {candle_date}, {last_refresh_time}, "
f"{format_ms_time(candle_date)}, {format_ms_time(last_refresh_time)} "
f"Failed to reuse watch {pair}, {timeframe}, {candle_ts < last_refresh_time},"
f" {candle_ts}, {last_refresh_time}, "
f"{format_ms_time(candle_ts)}, {format_ms_time(last_refresh_time)} "
)
# Check if 1 call can get us updated candles without hole in the data.
if min_date < self._pairs_last_refresh_time.get((pair, timeframe, candle_type), 0):
if min_ts < self._pairs_last_refresh_time.get((pair, timeframe, candle_type), 0):
# Cache can be used - do one-off call.
not_all_data = False
else:
@@ -2485,7 +2524,7 @@ class Exchange:
# keeping last candle time as last refreshed time of the pair
if ticks and cache:
idx = -2 if drop_incomplete and len(ticks) > 1 else -1
self._pairs_last_refresh_time[(pair, timeframe, c_type)] = ticks[idx][0] // 1000
self._pairs_last_refresh_time[(pair, timeframe, c_type)] = ticks[idx][0]
# keeping parsed dataframe in cache
ohlcv_df = ohlcv_to_dataframe(
ticks, timeframe, pair=pair, fill_missing=True, drop_incomplete=drop_incomplete
@@ -2598,10 +2637,10 @@ class Exchange:
def _now_is_time_to_refresh(self, pair: str, timeframe: str, candle_type: CandleType) -> bool:
# Timeframe in seconds
interval_in_sec = timeframe_to_seconds(timeframe)
interval_in_sec = timeframe_to_msecs(timeframe)
plr = self._pairs_last_refresh_time.get((pair, timeframe, candle_type), 0) + interval_in_sec
# current,active candle open date
now = int(timeframe_to_prev_date(timeframe).timestamp())
now = dt_ts(timeframe_to_prev_date(timeframe))
return plr < now
@retrier_async
@@ -2947,7 +2986,7 @@ class Exchange:
return trades[-1].get("timestamp")
async def _async_get_trade_history_id_startup(
self, pair: str, since: int | None
self, pair: str, since: int
) -> tuple[list[list], str]:
"""
override for initial trade_history_id call
@@ -2955,7 +2994,7 @@ class Exchange:
return await self._async_fetch_trades(pair, since=since)
async def _async_get_trade_history_id(
self, pair: str, until: int, since: int | None = None, from_id: str | None = None
self, pair: str, *, until: int, since: int, from_id: str | None = None
) -> tuple[str, list[list]]:
"""
Asynchronously gets trade history using fetch_trades
@@ -2991,8 +3030,7 @@ class Exchange:
trades.extend(t[x])
if from_id == from_id_next or t[-1][0] > until:
logger.debug(
f"Stopping because from_id did not change. "
f"Reached {t[-1][0]} > {until}"
f"Stopping because from_id did not change. Reached {t[-1][0]} > {until}"
)
# Reached the end of the defined-download period - add last trade as well.
if has_overlap:
@@ -3010,7 +3048,7 @@ class Exchange:
return (pair, trades)
async def _async_get_trade_history_time(
self, pair: str, until: int, since: int | None = None
self, pair: str, until: int, since: int
) -> tuple[str, list[list]]:
"""
Asynchronously gets trade history using fetch_trades,
@@ -3051,7 +3089,7 @@ class Exchange:
async def _async_get_trade_history(
self,
pair: str,
since: int | None = None,
since: int,
until: int | None = None,
from_id: str | None = None,
) -> tuple[str, list[list]]:
@@ -3082,7 +3120,7 @@ class Exchange:
def get_historic_trades(
self,
pair: str,
since: int | None = None,
since: int,
until: int | None = None,
from_id: str | None = None,
) -> tuple[str, list]:

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