Compare commits

...

1312 Commits

Author SHA1 Message Date
Matthias
1fc69ef114 Merge pull request #9876 from freqtrade/new_release
New release 2024.2
2024-02-29 06:38:44 +01:00
Matthias
0a8719c617 Bump Version to 2024.2 2024-02-27 06:54:21 +01:00
Matthias
e1fdc0c79c Merge branch 'stable' into new_release 2024-02-27 06:54:07 +01:00
Matthias
d6b01a6ffe Assert for exact equality 2024-02-26 19:17:50 +01:00
Matthias
01266ed7eb Align test results ... 2024-02-26 19:02:11 +01:00
Matthias
5402d276d6 Add header to warning box, reorder Boxes 2024-02-26 18:03:39 +01:00
Matthias
9d2bfa6594 Merge pull request #9872 from freqtrade/dependabot/pip/develop/ccxt-4.2.51
Bump ccxt from 4.2.47 to 4.2.51
2024-02-26 13:26:22 +01:00
dependabot[bot]
d5c01f7480 Bump ccxt from 4.2.47 to 4.2.51
Bumps [ccxt](https://github.com/ccxt/ccxt) from 4.2.47 to 4.2.51.
- [Release notes](https://github.com/ccxt/ccxt/releases)
- [Changelog](https://github.com/ccxt/ccxt/blob/master/CHANGELOG.md)
- [Commits](https://github.com/ccxt/ccxt/compare/4.2.47...4.2.51)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-02-26 07:47:19 +00:00
Matthias
e61a4ffc98 Merge pull request #9869 from freqtrade/dependabot/pip/develop/fastapi-0.110.0
Bump fastapi from 0.109.2 to 0.110.0
2024-02-26 08:46:03 +01:00
Matthias
1b8255a464 Merge pull request #9873 from freqtrade/dependabot/pip/develop/cryptography-42.0.5
Bump cryptography from 42.0.4 to 42.0.5
2024-02-26 08:45:14 +01:00
Matthias
d9f4c62f15 Add warning about excessive use of position_adjustment 2024-02-26 07:07:48 +01:00
Matthias
540ba4c769 Merge pull request #9870 from freqtrade/dependabot/pip/develop/nbconvert-7.16.1
Bump nbconvert from 7.16.0 to 7.16.1
2024-02-26 06:43:27 +01:00
dependabot[bot]
080d9b55f8 Bump fastapi from 0.109.2 to 0.110.0
Bumps [fastapi](https://github.com/tiangolo/fastapi) from 0.109.2 to 0.110.0.
- [Release notes](https://github.com/tiangolo/fastapi/releases)
- [Commits](https://github.com/tiangolo/fastapi/compare/0.109.2...0.110.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-02-26 05:29:59 +00:00
Matthias
74bdb94d07 Merge pull request #9867 from freqtrade/dependabot/pip/develop/pydantic-2.6.2
Bump pydantic from 2.6.1 to 2.6.2
2024-02-26 06:28:52 +01:00
Matthias
5854c63d05 Merge pull request #9866 from freqtrade/dependabot/pip/develop/orjson-3.9.15
Bump orjson from 3.9.14 to 3.9.15
2024-02-26 06:28:27 +01:00
Matthias
3957506db0 Merge pull request #9868 from freqtrade/dependabot/pip/develop/mkdocs-material-9.5.11
Bump mkdocs-material from 9.5.9 to 9.5.11
2024-02-26 06:27:55 +01:00
Matthias
1ac8210313 Merge pull request #9865 from freqtrade/dependabot/pip/develop/pytest-1fcd73377f
Bump the pytest group with 1 update
2024-02-26 06:27:34 +01:00
dependabot[bot]
4ff888488b Bump cryptography from 42.0.4 to 42.0.5
Bumps [cryptography](https://github.com/pyca/cryptography) from 42.0.4 to 42.0.5.
- [Changelog](https://github.com/pyca/cryptography/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/pyca/cryptography/compare/42.0.4...42.0.5)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-02-26 03:55:48 +00:00
dependabot[bot]
e2a486f85e Bump nbconvert from 7.16.0 to 7.16.1
Bumps [nbconvert](https://github.com/jupyter/nbconvert) from 7.16.0 to 7.16.1.
- [Release notes](https://github.com/jupyter/nbconvert/releases)
- [Changelog](https://github.com/jupyter/nbconvert/blob/main/CHANGELOG.md)
- [Commits](https://github.com/jupyter/nbconvert/compare/v7.16.0...v7.16.1)

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

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

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

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

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-02-26 03:55:06 +00:00
dependabot[bot]
9805cd768b Bump orjson from 3.9.14 to 3.9.15
Bumps [orjson](https://github.com/ijl/orjson) from 3.9.14 to 3.9.15.
- [Release notes](https://github.com/ijl/orjson/releases)
- [Changelog](https://github.com/ijl/orjson/blob/master/CHANGELOG.md)
- [Commits](https://github.com/ijl/orjson/compare/3.9.14...3.9.15)

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

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


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

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-02-26 03:54:50 +00:00
Matthias
d80ed7e33c Bump Docker Python version from 3.11.7 to 3.11.8 2024-02-25 15:17:42 +01:00
Matthias
e2d3774b07 Clearer wallets variable/parameter wording 2024-02-25 09:07:53 +01:00
Matthias
aad327b1fe Update comment around funding fees 2024-02-25 09:02:58 +01:00
Matthias
3e0755b8ad Enhance funding-fee call test to account for different timezones 2024-02-25 09:02:17 +01:00
Matthias
f164b89351 Ensure pytz is updated regularily by pinning it 2024-02-25 08:57:05 +01:00
Matthias
c663016b47 Improve some type safety 2024-02-24 08:06:06 +01:00
Matthias
9ac7149c47 Add check to verify that "since" is properly respected. 2024-02-22 22:14:29 +01:00
Matthias
0acde28902 Remove pointless comment 2024-02-22 19:28:02 +01:00
Matthias
f4ad1e8020 chore: Remove wrong typehint 2024-02-22 19:02:11 +01:00
Matthias
e30fa3a445 Remove duplicate pairlistmanager init 2024-02-22 18:17:58 +01:00
Matthias
db83b0cdb0 Update typehint for candle_cache 2024-02-22 07:09:47 +01:00
Matthias
4cfd5d004e Improve ohlcv pair cache with since_ms
avoids some rare bugs in more complex configurations.
2024-02-22 06:38:28 +01:00
Matthias
3680e199ce Fix range-stability filter downloading too little data 2024-02-22 06:29:08 +01:00
Matthias
4e87169a0c Use set to reduce iterations 2024-02-22 06:28:54 +01:00
Matthias
621e497e7b Merge pull request #9854 from freqtrade/dependabot/pip/cryptography-42.0.4
Bump cryptography from 42.0.3 to 42.0.4
2024-02-22 06:28:08 +01:00
dependabot[bot]
c013c76e64 Bump cryptography from 42.0.3 to 42.0.4
Bumps [cryptography](https://github.com/pyca/cryptography) from 42.0.3 to 42.0.4.
- [Changelog](https://github.com/pyca/cryptography/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/pyca/cryptography/compare/42.0.3...42.0.4)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-02-21 20:49:18 +00:00
Matthias
bfb0b535b7 Merge pull request #9847 from freqtrade/fix/bybit_unified
Bump ccxt to 4.2.47
2024-02-20 08:26:55 +01:00
Matthias
0199e7d3d8 Add type-hint to exchange_has dict 2024-02-20 06:30:10 +01:00
Matthias
b3ba2cee17 Bump ccxt to 4.2.47 2024-02-20 06:21:09 +01:00
Matthias
411f606476 Fix some tests due to new method 2024-02-20 06:21:03 +01:00
Matthias
f53c019d2a Update "exchange_has" validation with new fallbacks 2024-02-20 06:21:03 +01:00
Matthias
3497f7946e Add test for fetch_order_emulated 2024-02-20 06:21:03 +01:00
Matthias
65af7750e6 Add fetch_order_emulated to support exchanges without proper fetch_order method 2024-02-20 06:21:03 +01:00
Matthias
103c993591 Merge pull request #9843 from freqtrade/dependabot/pip/develop/tensorboard-2.16.2
Bump tensorboard from 2.15.2 to 2.16.2
2024-02-20 06:11:11 +01:00
Matthias
969128a74f Merge pull request #9846 from freqtrade/update/pre-commit-hooks
Update pre-commit hooks
2024-02-20 06:10:45 +01:00
xmatthias
f6e2030bf2 chore: update pre-commit hooks 2024-02-20 03:03:46 +00:00
Matthias
00bde70f73 Fix / improve styling in test class 2024-02-19 19:14:44 +01:00
Matthias
61e2170fc1 Merge pull request #9832 from freqtrade/dependabot/pip/develop/types-8a8455b0ec
Bump the types group with 1 update
2024-02-19 11:52:44 +01:00
Matthias
434b8a423c bump types-requests pre-commit 2024-02-19 09:33:09 +01:00
Matthias
0b149cbd6a Merge pull request #9840 from freqtrade/dependabot/pip/develop/ruff-0.2.2
Bump ruff from 0.2.1 to 0.2.2
2024-02-19 09:32:08 +01:00
Matthias
2323215aa7 Merge pull request #9838 from freqtrade/dependabot/pip/develop/sqlalchemy-2.0.27
Bump sqlalchemy from 2.0.26 to 2.0.27
2024-02-19 08:49:53 +01:00
dependabot[bot]
82876570a3 Bump ruff from 0.2.1 to 0.2.2
Bumps [ruff](https://github.com/astral-sh/ruff) from 0.2.1 to 0.2.2.
- [Release notes](https://github.com/astral-sh/ruff/releases)
- [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md)
- [Commits](https://github.com/astral-sh/ruff/compare/v0.2.1...v0.2.2)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-02-19 07:14:01 +00:00
Matthias
c329e71fa8 Merge pull request #9836 from freqtrade/dependabot/pip/develop/pre-commit-3.6.2
Bump pre-commit from 3.6.1 to 3.6.2
2024-02-19 08:13:14 +01:00
Matthias
a200b5524b Update sqlalchemy in pre-commit 2024-02-19 07:18:56 +01:00
Matthias
baf6725a9a Merge pull request #9839 from freqtrade/dependabot/pip/develop/scikit-learn-1.4.1.post1
Bump scikit-learn from 1.4.0 to 1.4.1.post1
2024-02-19 07:18:07 +01:00
Matthias
d655a0a638 Merge pull request #9842 from freqtrade/dependabot/pip/develop/orjson-3.9.14
Bump orjson from 3.9.13 to 3.9.14
2024-02-19 07:16:29 +01:00
Matthias
39941a7ac0 Improve formatting in drawdown calc 2024-02-19 07:09:23 +01:00
Matthias
66f4839101 Further increase test coverate of max_drawdown 2024-02-19 07:02:42 +01:00
dependabot[bot]
6aa1bbf574 Bump sqlalchemy from 2.0.26 to 2.0.27
Bumps [sqlalchemy](https://github.com/sqlalchemy/sqlalchemy) from 2.0.26 to 2.0.27.
- [Release notes](https://github.com/sqlalchemy/sqlalchemy/releases)
- [Changelog](https://github.com/sqlalchemy/sqlalchemy/blob/main/CHANGES.rst)
- [Commits](https://github.com/sqlalchemy/sqlalchemy/commits)

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

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

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-02-19 05:30:18 +00:00
Matthias
82814cb5fa Merge pull request #9837 from freqtrade/dependabot/pip/develop/plotly-5.19.0
Bump plotly from 5.18.0 to 5.19.0
2024-02-19 06:30:11 +01:00
Matthias
093b44928e Merge pull request #9835 from freqtrade/dependabot/pip/develop/cryptography-42.0.3
Bump cryptography from 42.0.2 to 42.0.3
2024-02-19 06:29:42 +01:00
Matthias
fa632311f3 Merge pull request #9834 from freqtrade/dependabot/pip/develop/urllib3-2.2.1
Bump urllib3 from 2.2.0 to 2.2.1
2024-02-19 06:28:35 +01:00
Matthias
5e86ee9de6 Merge pull request #9833 from freqtrade/dependabot/pip/develop/pytest-4c2ece7286
Bump the pytest group with 1 update
2024-02-19 06:28:12 +01:00
dependabot[bot]
549b9f62fd Bump tensorboard from 2.15.2 to 2.16.2
Bumps [tensorboard](https://github.com/tensorflow/tensorboard) from 2.15.2 to 2.16.2.
- [Release notes](https://github.com/tensorflow/tensorboard/releases)
- [Changelog](https://github.com/tensorflow/tensorboard/blob/master/RELEASE.md)
- [Commits](https://github.com/tensorflow/tensorboard/compare/2.15.2...2.16.2)

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

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

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

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

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-02-19 03:12:37 +00:00
dependabot[bot]
c966f83147 Bump plotly from 5.18.0 to 5.19.0
Bumps [plotly](https://github.com/plotly/plotly.py) from 5.18.0 to 5.19.0.
- [Release notes](https://github.com/plotly/plotly.py/releases)
- [Changelog](https://github.com/plotly/plotly.py/blob/master/CHANGELOG.md)
- [Commits](https://github.com/plotly/plotly.py/compare/v5.18.0...v5.19.0)

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

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

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

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

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-02-19 03:11:57 +00:00
dependabot[bot]
0979d0b6e4 Bump the pytest group with 1 update
Bumps the pytest group with 1 update: [pytest](https://github.com/pytest-dev/pytest).


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

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-02-19 03:11:53 +00:00
dependabot[bot]
4c3879cb57 Bump the types group with 1 update
Bumps the types group with 1 update: [types-requests](https://github.com/python/typeshed).


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

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-02-19 03:11:21 +00:00
Matthias
69a0f4c465 Fix bybit spot live tests 2024-02-18 16:09:59 +01:00
Matthias
61e09ac719 Update telegram help with new wording 2024-02-18 16:07:03 +01:00
Matthias
583b2fc690 Fail if unified account is detected. 2024-02-18 11:50:42 +01:00
Matthias
e06b70eb05 Add log message for Bybit accout type 2024-02-18 11:50:42 +01:00
Matthias
51a6a7b632 Merge pull request #9821 from freqtrade/feat/volumepairlist_caching
improve volumepairlist "advanced filter mode" caching
2024-02-18 11:46:31 +01:00
Matthias
3250f42257 Improve validate_exchange
returns now both required and optional dependencies
2024-02-18 11:21:34 +01:00
Matthias
a029d1f08e Merge pull request #9823 from tar-xz/develop
docs: Remove unnecessary bracket in sql_cheatsheet.md
2024-02-18 10:54:55 +01:00
William Wong
a5d1ae3191 docs: Update sql_cheatsheet.md 2024-02-18 03:21:50 +08:00
Matthias
ebd439cdd1 Remove unused import 2024-02-17 16:41:10 +01:00
Matthias
78d8a4df2e Use "ohlcv_with_cache" for further pairlists 2024-02-17 16:29:52 +01:00
Matthias
4bcf2c423a Don't tick on ttl cache 2024-02-17 16:27:43 +01:00
Matthias
7b36a0fc42 Add explicit test for ohlcv_with_cache 2024-02-17 16:26:53 +01:00
Matthias
bcfe7ef547 Refactor ohlcv caching to exchange class 2024-02-17 16:26:44 +01:00
Matthias
8033faa2f2 Update pairlist cache behavior in VolumePairList 2024-02-17 15:14:11 +01:00
Matthias
190ba272de Merge pull request #9818 from CaffeinatedTech/develop
Added escaping to enter and exit tags on telegram performance messages.
2024-02-17 13:36:52 +01:00
Matthias
3f3760c0ae Use Markdown V1 - update tests 2024-02-17 12:02:26 +01:00
CaffeinatedTech
4761bf2427 Change enter_tag, exit_reason, mix_tag performance messages from HTML to Markdown to fix some string encoding issues. 2024-02-17 09:12:49 +10:00
Matthias
c0da1b6922 Fix edge-case when calculating cagr
edge-case with leveraged trades - yielding a negative final balance.
closes #9820
2024-02-16 20:04:49 +01:00
CaffeinatedTech
a0b7df70d6 Added escaping to enter and exit tags on telegram performance messages. 2024-02-16 13:36:16 +10:00
Matthias
60b12c1d9e Double newlines between functions ... 2024-02-15 20:45:16 +01:00
Matthias
fd48991fb0 Fix duplicate parentheses 2024-02-15 20:44:16 +01:00
Matthias
1696aa3915 Adjust tests for new fields 2024-02-15 20:39:06 +01:00
Matthias
fb54c9ffe4 Add open_fill_date stuff to json schema 2024-02-15 20:35:34 +01:00
Matthias
0f85ef0997 Simplify trade_model serializations 2024-02-15 19:52:50 +01:00
Matthias
c6d1c1a980 Add dt_ts_none helper 2024-02-15 19:50:56 +01:00
Matthias
c1d7184849 Adjust for ccxt exception hierarchy change
caused by https://github.com/ccxt/ccxt/pull/21035
2024-02-15 19:20:08 +01:00
Matthias
a22181d721 Enable caching for "filter only" Volumepairlist 2024-02-15 18:20:19 +01:00
Matthias
7f7e9ec875 Add additional test case for VolumePairlist in range mode 2024-02-15 18:20:19 +01:00
Matthias
6c9b9e91e8 enhance volumpairlist range test 2024-02-15 18:20:19 +01:00
Matthias
d01e9cf299 Improve log message 2024-02-15 18:20:11 +01:00
Matthias
86da9cb659 Simplify some pairlist conditions 2024-02-15 18:20:11 +01:00
Matthias
d2b0dc2171 Merge pull request #9814 from freqtrade/frog-docs-remotepairlist-1
Clarify processing_mode for RemotePairlist docs
2024-02-15 18:10:18 +01:00
Robert Davey
57fd0e379a Clarify processing_mode for RemotePairlist
No default value is specified in the docs for the processing_mode, making it unclear that the default behaviour is to filter out pairs, rather than append.
2024-02-15 15:57:49 +00:00
Matthias
280737447c Don't load empty dataframes - skip these
closes #9811
2024-02-14 07:26:23 +01:00
Matthias
3d6079ae19 Add debug output showing the pair to be converted
part of #9811
2024-02-13 17:47:43 +01:00
Matthias
2c652a2ce6 Merge pull request #9803 from freqtrade/dependabot/pip/develop/sqlalchemy-2.0.26
Bump sqlalchemy from 2.0.25 to 2.0.26
2024-02-12 14:17:19 +01:00
Matthias
c99009d47e Merge branch 'develop' into dependabot/pip/develop/sqlalchemy-2.0.26 2024-02-12 10:52:10 +01:00
Matthias
05ab13592b Merge pull request #9796 from freqtrade/dependabot/pip/develop/pytest-859c960bd7
Bump the pytest group with 2 updates
2024-02-12 08:19:57 +01:00
Matthias
a02b1d0306 Merge pull request #9804 from freqtrade/dependabot/pip/develop/tensorboard-2.15.2
Bump tensorboard from 2.15.1 to 2.15.2
2024-02-12 08:17:47 +01:00
Matthias
ffe43be3fa Merge pull request #9802 from freqtrade/dependabot/pip/develop/python-telegram-bot-20.8
Bump python-telegram-bot from 20.7 to 20.8
2024-02-12 08:17:22 +01:00
Matthias
94a52a776c Merge pull request #9801 from freqtrade/dependabot/pip/develop/mkdocs-material-9.5.9
Bump mkdocs-material from 9.5.8 to 9.5.9
2024-02-12 06:47:12 +01:00
Matthias
f2a7312010 Update sqlalchemy pre-commit 2024-02-12 06:34:45 +01:00
Matthias
72290365db telegram: ensure msg update test uses the correct edit_message_text call 2024-02-12 06:31:39 +01:00
Matthias
fd737af69d use query.edit_message_text to simplify telegram class 2024-02-12 06:29:42 +01:00
dependabot[bot]
0740a13393 Bump sqlalchemy from 2.0.25 to 2.0.26
Bumps [sqlalchemy](https://github.com/sqlalchemy/sqlalchemy) from 2.0.25 to 2.0.26.
- [Release notes](https://github.com/sqlalchemy/sqlalchemy/releases)
- [Changelog](https://github.com/sqlalchemy/sqlalchemy/blob/main/CHANGES.rst)
- [Commits](https://github.com/sqlalchemy/sqlalchemy/commits)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-02-12 05:18:09 +00:00
Matthias
1f3047dce4 Merge pull request #9800 from freqtrade/dependabot/pip/develop/tqdm-4.66.2
Bump tqdm from 4.66.1 to 4.66.2
2024-02-12 06:17:42 +01:00
Matthias
ea0f4f6b86 Merge pull request #9799 from freqtrade/dependabot/pip/develop/ccxt-4.2.42
Bump ccxt from 4.2.39 to 4.2.42
2024-02-12 06:17:18 +01:00
dependabot[bot]
0ba27ddee6 Bump the pytest group with 2 updates
Bumps the pytest group with 2 updates: [pytest](https://github.com/pytest-dev/pytest) and [pytest-asyncio](https://github.com/pytest-dev/pytest-asyncio).


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

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

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-02-12 05:04:43 +00:00
Matthias
f19aed5349 Merge pull request #9798 from freqtrade/dependabot/pip/develop/pre-commit-3.6.1
Bump pre-commit from 3.6.0 to 3.6.1
2024-02-12 06:03:30 +01:00
Matthias
ca72b494bb Merge pull request #9797 from freqtrade/dependabot/pip/develop/uvicorn-0.27.1
Bump uvicorn from 0.27.0.post1 to 0.27.1
2024-02-12 06:03:06 +01:00
dependabot[bot]
2c1ea2d256 Bump tensorboard from 2.15.1 to 2.15.2
Bumps [tensorboard](https://github.com/tensorflow/tensorboard) from 2.15.1 to 2.15.2.
- [Release notes](https://github.com/tensorflow/tensorboard/releases)
- [Changelog](https://github.com/tensorflow/tensorboard/blob/2.15.2/RELEASE.md)
- [Commits](https://github.com/tensorflow/tensorboard/compare/2.15.1...2.15.2)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-02-12 03:30:19 +00:00
dependabot[bot]
8ca905b45f Bump python-telegram-bot from 20.7 to 20.8
Bumps [python-telegram-bot](https://github.com/python-telegram-bot/python-telegram-bot) from 20.7 to 20.8.
- [Release notes](https://github.com/python-telegram-bot/python-telegram-bot/releases)
- [Changelog](https://github.com/python-telegram-bot/python-telegram-bot/blob/master/CHANGES.rst)
- [Commits](https://github.com/python-telegram-bot/python-telegram-bot/compare/v20.7...v20.8)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-02-12 03:30:00 +00:00
dependabot[bot]
903ae33679 Bump mkdocs-material from 9.5.8 to 9.5.9
Bumps [mkdocs-material](https://github.com/squidfunk/mkdocs-material) from 9.5.8 to 9.5.9.
- [Release notes](https://github.com/squidfunk/mkdocs-material/releases)
- [Changelog](https://github.com/squidfunk/mkdocs-material/blob/master/CHANGELOG)
- [Commits](https://github.com/squidfunk/mkdocs-material/compare/9.5.8...9.5.9)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-02-12 03:29:52 +00:00
dependabot[bot]
7d74a4c193 Bump tqdm from 4.66.1 to 4.66.2
Bumps [tqdm](https://github.com/tqdm/tqdm) from 4.66.1 to 4.66.2.
- [Release notes](https://github.com/tqdm/tqdm/releases)
- [Commits](https://github.com/tqdm/tqdm/compare/v4.66.1...v4.66.2)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-02-12 03:29:45 +00:00
dependabot[bot]
7e8e36c6be Bump ccxt from 4.2.39 to 4.2.42
Bumps [ccxt](https://github.com/ccxt/ccxt) from 4.2.39 to 4.2.42.
- [Release notes](https://github.com/ccxt/ccxt/releases)
- [Changelog](https://github.com/ccxt/ccxt/blob/master/CHANGELOG.md)
- [Commits](https://github.com/ccxt/ccxt/compare/4.2.39...4.2.42)

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

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

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-02-12 03:29:27 +00:00
dependabot[bot]
f10c8f9c3b Bump uvicorn from 0.27.0.post1 to 0.27.1
Bumps [uvicorn](https://github.com/encode/uvicorn) from 0.27.0.post1 to 0.27.1.
- [Release notes](https://github.com/encode/uvicorn/releases)
- [Changelog](https://github.com/encode/uvicorn/blob/master/CHANGELOG.md)
- [Commits](https://github.com/encode/uvicorn/compare/0.27.0.post1...0.27.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-02-12 03:29:17 +00:00
Matthias
3aa2d0c30a Slightly improve memory-usage of kraken-convert 2024-02-10 09:37:59 +01:00
Matthias
a83b5abb51 Allow wildcards for pairs filter 2024-02-10 08:48:52 +01:00
Matthias
f89147fd44 Allow limiting kraken pairs to --pairs selection 2024-02-10 08:44:16 +01:00
Matthias
adf63a45cf Align new-config documentation examples
closes #9790
2024-02-09 21:38:15 +01:00
Matthias
5bb4fe16b1 Merge pull request #9789 from freqtrade/dependabot/pip/develop/nbconvert-7.16.0
Bump nbconvert from 7.14.2 to 7.16.0
2024-02-08 20:35:08 +01:00
Matthias
444d939f88 Merge pull request #9786 from freqtrade/dependabot/pip/develop/mkdocs-material-9.5.8
Bump mkdocs-material from 9.5.7 to 9.5.8
2024-02-08 20:34:58 +01:00
Matthias
f6f069511e Merge pull request #9787 from freqtrade/dependabot/pip/develop/ruff-0.2.1
Bump ruff from 0.2.0 to 0.2.1
2024-02-08 20:34:46 +01:00
Matthias
02742f36cd Merge pull request #9788 from freqtrade/dependabot/pip/develop/numpy-1.26.4
Bump numpy from 1.26.3 to 1.26.4
2024-02-08 20:34:34 +01:00
dependabot[bot]
ce6b62f865 Bump numpy from 1.26.3 to 1.26.4
Bumps [numpy](https://github.com/numpy/numpy) from 1.26.3 to 1.26.4.
- [Release notes](https://github.com/numpy/numpy/releases)
- [Changelog](https://github.com/numpy/numpy/blob/main/doc/RELEASE_WALKTHROUGH.rst)
- [Commits](https://github.com/numpy/numpy/compare/v1.26.3...v1.26.4)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-02-08 18:26:56 +00:00
Matthias
1d07ae4f3a Merge pull request #9785 from freqtrade/dependabot/pip/develop/ccxt-4.2.39
Bump ccxt from 4.2.35 to 4.2.39
2024-02-08 19:26:09 +01:00
Matthias
ba9e8d2bc5 Merge pull request #9783 from freqtrade/dependabot/github_actions/develop/pre-commit/action-3.0.1
Bump pre-commit/action from 3.0.0 to 3.0.1
2024-02-08 19:25:46 +01:00
dependabot[bot]
01a00ad048 Bump nbconvert from 7.14.2 to 7.16.0
Bumps [nbconvert](https://github.com/jupyter/nbconvert) from 7.14.2 to 7.16.0.
- [Release notes](https://github.com/jupyter/nbconvert/releases)
- [Changelog](https://github.com/jupyter/nbconvert/blob/main/CHANGELOG.md)
- [Commits](https://github.com/jupyter/nbconvert/compare/v7.14.2...v7.16.0)

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

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

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-02-08 17:06:05 +00:00
dependabot[bot]
68fd7d7ffd Bump mkdocs-material from 9.5.7 to 9.5.8
Bumps [mkdocs-material](https://github.com/squidfunk/mkdocs-material) from 9.5.7 to 9.5.8.
- [Release notes](https://github.com/squidfunk/mkdocs-material/releases)
- [Changelog](https://github.com/squidfunk/mkdocs-material/blob/master/CHANGELOG)
- [Commits](https://github.com/squidfunk/mkdocs-material/compare/9.5.7...9.5.8)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-02-08 17:05:44 +00:00
dependabot[bot]
a0c246fa9a Bump ccxt from 4.2.35 to 4.2.39
Bumps [ccxt](https://github.com/ccxt/ccxt) from 4.2.35 to 4.2.39.
- [Release notes](https://github.com/ccxt/ccxt/releases)
- [Changelog](https://github.com/ccxt/ccxt/blob/master/CHANGELOG.md)
- [Commits](https://github.com/ccxt/ccxt/compare/4.2.35...4.2.39)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-02-08 17:05:39 +00:00
dependabot[bot]
7223a6c504 Bump pre-commit/action from 3.0.0 to 3.0.1
Bumps [pre-commit/action](https://github.com/pre-commit/action) from 3.0.0 to 3.0.1.
- [Release notes](https://github.com/pre-commit/action/releases)
- [Commits](https://github.com/pre-commit/action/compare/v3.0.0...v3.0.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-02-08 17:04:19 +00:00
Matthias
bf1f08cd21 chore: add dependency groups for regular updates,
reschedule to run at 3am UTC (hope this works now ...)
2024-02-08 18:03:52 +01:00
Matthias
3e5a572fc6 Allow int as trade-id parameter
closes #9780
2024-02-08 07:16:56 +01:00
Matthias
386925f06b Merge pull request #9776 from stash86/bt-metrics2
fix strategy-updater docs
2024-02-08 06:44:01 +01:00
Stefano Ariestasia
43bab85b85 fix strategy-updater docs 2024-02-07 11:21:32 +09:00
Matthias
9e89567eeb Merge pull request #9704 from ShaneOss/patch-2
fix: logical error in the conditional checks for model classes
2024-02-06 19:53:04 +01:00
Matthias
d2e9d36dea chore: Update ordering of requirements in setup.py 2024-02-06 18:15:17 +01:00
Matthias
e50fac34a5 Bump technical to 1.4.3 2024-02-06 07:03:30 +01:00
Matthias
3fd8b2f1c3 Merge pull request #9774 from freqtrade/update/pre-commit-hooks
Update pre-commit hooks
2024-02-06 06:20:33 +01:00
xmatthias
8d02504072 chore: update pre-commit hooks 2024-02-06 03:03:17 +00:00
Matthias
4aef5676d7 update tool.ruff configuration to match 2.0 version 2024-02-05 18:10:11 +01:00
Matthias
73e2e034ae Remove unused argument 2024-02-05 18:03:28 +01:00
Matthias
b0da978999 Merge pull request #9767 from freqtrade/dependabot/pip/develop/ruff-0.2.0
Bump ruff from 0.1.15 to 0.2.0
2024-02-05 18:03:25 +01:00
Matthias
1eb27c8b87 Merge pull request #9773 from freqtrade/dependabot/pip/develop/pydantic-2.6.1
Bump pydantic from 2.5.3 to 2.6.1
2024-02-05 16:55:01 +01:00
dependabot[bot]
b4f030fd55 Bump pydantic from 2.5.3 to 2.6.1
Bumps [pydantic](https://github.com/pydantic/pydantic) from 2.5.3 to 2.6.1.
- [Release notes](https://github.com/pydantic/pydantic/releases)
- [Changelog](https://github.com/pydantic/pydantic/blob/main/HISTORY.md)
- [Commits](https://github.com/pydantic/pydantic/compare/v2.5.3...v2.6.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-02-05 14:18:28 +00:00
Matthias
e03ea80f79 Merge pull request #9769 from freqtrade/dependabot/pip/develop/orjson-3.9.13
Bump orjson from 3.9.12 to 3.9.13
2024-02-05 15:18:18 +01:00
Matthias
d505f98d12 Merge pull request #9768 from freqtrade/dependabot/pip/develop/fastapi-0.109.2
Bump fastapi from 0.109.0 to 0.109.2
2024-02-05 15:17:38 +01:00
dependabot[bot]
b9245aef2d Bump orjson from 3.9.12 to 3.9.13
Bumps [orjson](https://github.com/ijl/orjson) from 3.9.12 to 3.9.13.
- [Release notes](https://github.com/ijl/orjson/releases)
- [Changelog](https://github.com/ijl/orjson/blob/master/CHANGELOG.md)
- [Commits](https://github.com/ijl/orjson/compare/3.9.12...3.9.13)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-02-05 08:21:44 +00:00
dependabot[bot]
646aca7a36 Bump fastapi from 0.109.0 to 0.109.2
Bumps [fastapi](https://github.com/tiangolo/fastapi) from 0.109.0 to 0.109.2.
- [Release notes](https://github.com/tiangolo/fastapi/releases)
- [Commits](https://github.com/tiangolo/fastapi/compare/0.109.0...0.109.2)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-02-05 08:20:20 +00:00
Matthias
76fbe6ed1f Merge pull request #9770 from freqtrade/dependabot/pip/develop/cryptography-42.0.2
Bump cryptography from 42.0.1 to 42.0.2
2024-02-05 09:19:15 +01:00
Matthias
e526311c2c Merge pull request #9771 from freqtrade/dependabot/github_actions/develop/peter-evans/create-pull-request-6
Bump peter-evans/create-pull-request from 5 to 6
2024-02-05 09:18:35 +01:00
dependabot[bot]
a675d2b026 Bump cryptography from 42.0.1 to 42.0.2
Bumps [cryptography](https://github.com/pyca/cryptography) from 42.0.1 to 42.0.2.
- [Changelog](https://github.com/pyca/cryptography/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/pyca/cryptography/compare/42.0.1...42.0.2)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-02-05 06:02:59 +00:00
Matthias
fcfde31985 Merge pull request #9766 from freqtrade/dependabot/pip/develop/mkdocs-material-9.5.7
Bump mkdocs-material from 9.5.6 to 9.5.7
2024-02-05 07:02:30 +01:00
Matthias
5c672ce487 Merge pull request #9763 from freqtrade/dependabot/pip/develop/aiohttp-3.9.3
Bump aiohttp from 3.9.2 to 3.9.3
2024-02-05 07:02:04 +01:00
Matthias
5ef261d7a7 Merge pull request #9764 from freqtrade/dependabot/pip/develop/ccxt-4.2.35
Bump ccxt from 4.2.25 to 4.2.35
2024-02-05 07:01:43 +01:00
Matthias
36cd3c70e2 Merge pull request #9765 from freqtrade/dependabot/pip/develop/urllib3-2.2.0
Bump urllib3 from 2.1.0 to 2.2.0
2024-02-05 07:01:20 +01:00
Matthias
6c08f0a86b Merge pull request #9761 from freqtrade/dependabot/pip/develop/uvicorn-0.27.0.post1
Bump uvicorn from 0.27.0 to 0.27.0.post1
2024-02-05 07:01:07 +01:00
dependabot[bot]
667a8cc59f Bump peter-evans/create-pull-request from 5 to 6
Bumps [peter-evans/create-pull-request](https://github.com/peter-evans/create-pull-request) from 5 to 6.
- [Release notes](https://github.com/peter-evans/create-pull-request/releases)
- [Commits](https://github.com/peter-evans/create-pull-request/compare/v5...v6)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-02-05 03:59:04 +00:00
dependabot[bot]
e773276dde Bump ruff from 0.1.15 to 0.2.0
Bumps [ruff](https://github.com/astral-sh/ruff) from 0.1.15 to 0.2.0.
- [Release notes](https://github.com/astral-sh/ruff/releases)
- [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md)
- [Commits](https://github.com/astral-sh/ruff/compare/v0.1.15...v0.2.0)

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

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

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-02-05 03:51:20 +00:00
dependabot[bot]
5114be42cd Bump urllib3 from 2.1.0 to 2.2.0
Bumps [urllib3](https://github.com/urllib3/urllib3) from 2.1.0 to 2.2.0.
- [Release notes](https://github.com/urllib3/urllib3/releases)
- [Changelog](https://github.com/urllib3/urllib3/blob/main/CHANGES.rst)
- [Commits](https://github.com/urllib3/urllib3/compare/2.1.0...2.2.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-02-05 03:51:09 +00:00
dependabot[bot]
440382ae69 Bump ccxt from 4.2.25 to 4.2.35
Bumps [ccxt](https://github.com/ccxt/ccxt) from 4.2.25 to 4.2.35.
- [Release notes](https://github.com/ccxt/ccxt/releases)
- [Changelog](https://github.com/ccxt/ccxt/blob/master/CHANGELOG.md)
- [Commits](https://github.com/ccxt/ccxt/compare/4.2.25...4.2.35)

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

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

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-02-05 03:50:36 +00:00
dependabot[bot]
6961182680 Bump uvicorn from 0.27.0 to 0.27.0.post1
Bumps [uvicorn](https://github.com/encode/uvicorn) from 0.27.0 to 0.27.0.post1.
- [Release notes](https://github.com/encode/uvicorn/releases)
- [Changelog](https://github.com/encode/uvicorn/blob/master/CHANGELOG.md)
- [Commits](https://github.com/encode/uvicorn/compare/0.27.0...0.27.0.post1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-02-05 03:50:09 +00:00
Matthias
cb2aaa7bbb Fix wording fully. 2024-02-03 15:00:48 +01:00
Matthias
35e1421d59 Reduce whitespace 2024-02-03 13:42:25 +01:00
Matthias
0f9e846587 Update Tests data to work with new cached levtiers 2024-02-03 13:32:53 +01:00
Matthias
2989b42760 Update cached binance leverage tiers 2024-02-03 13:16:32 +01:00
Matthias
3711fa5098 Improve formatting of leverage
closes #9759
2024-02-03 13:14:50 +01:00
Matthias
c5948693a3 enable sub-minute backtest detail timeframes
closes #9635
2024-02-03 13:14:46 +01:00
Matthias
8469484998 chore: Split stoploss tests from freqtradebot
stoploss on exchange tests are quiet extensive, and deserve their own test file.
2024-02-02 07:25:53 +01:00
Matthias
57df7d9eca chore: convert test dir to package 2024-02-02 07:23:19 +01:00
Matthias
80f6fbbae9 chore: Move bot-related tests to test subdir 2024-02-02 07:07:58 +01:00
Matthias
0d14b7a800 perf: only create detail timedelta object once for detail backtests 2024-02-02 07:03:44 +01:00
Matthias
ad121c19b0 Allow <1m timeframes for utility modes 2024-02-02 06:57:12 +01:00
Matthias
67c3bad977 Fix misspelled comment 2024-02-02 06:43:41 +01:00
Matthias
9bfd34a4f3 Merge pull request #9267 from Axel-CH/feature/update_sl_order_mgt
Update stoploss order management
2024-02-02 06:43:02 +01:00
Matthias
f7472ca74c Merge pull request #9750 from freqtrade/feat/order_tags
Add tags per order
2024-02-01 07:11:06 +01:00
Matthias
44bc1b9aa1 Merge pull request #9743 from freqtrade/dependabot/pip/develop/lightgbm-4.3.0
Bump lightgbm from 4.2.0 to 4.3.0
2024-02-01 06:44:02 +01:00
Matthias
d3b6256f8a Update extract-branch-name to new syntax using GITHUB_OUTPUT 2024-01-30 21:48:32 +01:00
Matthias
0bc5c876c2 Fix GITHUB_REF variable interpolation in ci.yml 2024-01-30 20:47:48 +01:00
Matthias
13ee90725e Fix syntax error 2024-01-30 20:19:24 +01:00
Matthias
7082a8073c add debugging for GITHUB_REF 2024-01-30 19:42:32 +01:00
Matthias
cd484bd483 Update extract-branch-name to new syntax using GITHUB_OUTPUT 2024-01-30 19:40:16 +01:00
Matthias
f37c4e5935 Merge pull request #9749 from freqtrade/new_release
New release 2024.1
2024-01-30 18:00:25 +01:00
Matthias
d1a96af5e8 Add ft_order_Tag to backtest test 2024-01-30 07:28:36 +01:00
Matthias
6ba8966090 chore: Add minified parameter docstring to to_json method 2024-01-30 07:25:46 +01:00
Matthias
78a1c7247a keep ft_order_tag for backtest responses 2024-01-30 07:25:15 +01:00
Matthias
0fa0f49b75 Add adjustment order tagging in strategy callbacks docs 2024-01-30 07:24:36 +01:00
Matthias
6806fab1b5 Fix migration not triggering 2024-01-30 07:24:36 +01:00
Matthias
79b8496f38 Fix backtesting not setting entry_tag out of position adjustments 2024-01-30 07:24:36 +01:00
Matthias
d664e76834 Add some tests 2024-01-30 07:24:36 +01:00
Matthias
398b93beef Fix rpc test 2024-01-30 07:24:36 +01:00
Matthias
2d704a77b5 Improve formatting 2024-01-30 07:24:36 +01:00
Matthias
830a004dfd Move response handling to interface wrappermethod 2024-01-30 07:24:36 +01:00
Matthias
535ff387ff add order_tag handlig to running bot 2024-01-30 07:24:36 +01:00
Matthias
95e51bf816 allow adjust_trade_position to return tuples in backtesting 2024-01-30 07:24:36 +01:00
Matthias
e8288a34c9 add ft_order_tag to backtesting 2024-01-30 07:24:36 +01:00
Matthias
39ffee381b Improve type hint 2024-01-30 07:24:36 +01:00
Matthias
ccd4c715ca add order-tag to serialize / unserialize methods 2024-01-30 07:24:36 +01:00
Matthias
d82bfc9fad Add order_tag to orders model 2024-01-30 07:24:36 +01:00
Matthias
c59ae30e31 chore: Add minified parameter docs to to_json method 2024-01-30 07:24:26 +01:00
Matthias
cfc6d3b32f Apply "Dependencies" label to pull requests 2024-01-30 07:04:53 +01:00
Matthias
e58b7ea8e5 Merge pull request #9747 from freqtrade/update/pre-commit-hooks
Update pre-commit hooks
2024-01-30 07:03:51 +01:00
Matthias
d219983f5b Bump ruff version 2024-01-30 07:03:07 +01:00
Matthias
6c27b27d4f Bump version to 2024.2-dev 2024-01-30 07:03:07 +01:00
Matthias
fcedc7de0d Merge pull request #9659 from stash86/bt-metrics2
Add MarketCapPairList based on CoinGecko
2024-01-30 07:00:07 +01:00
Matthias
4342aa3bfd Update version number to 2024.1 2024-01-30 06:46:10 +01:00
Matthias
43188ca447 Merge branch 'stable' into new_release 2024-01-30 06:45:56 +01:00
xmatthias
36d4f10a60 chore: update pre-commit hooks 2024-01-30 03:03:17 +00:00
Matthias
470a239e82 Formatting ... 2024-01-29 20:10:50 +01:00
Matthias
01baea8aab Test exceptions / errors 2024-01-29 20:08:25 +01:00
Matthias
4a580fc72f Add test validating cache 2024-01-29 20:01:21 +01:00
Matthias
d691ffe9db Test more diff. scenario 2024-01-29 19:47:08 +01:00
Matthias
eb7fbb0096 Improve doc wording 2024-01-29 19:39:02 +01:00
Stefano Ariestasia
63aac1a2c9 update docs 2024-01-29 19:50:19 +09:00
Matthias
c35b9f8a3a Merge pull request #9742 from freqtrade/dependabot/pip/develop/aiohttp-3.9.2
Bump aiohttp from 3.9.1 to 3.9.2
2024-01-29 10:00:30 +01:00
Stefano
17af69435f remove mode, add max_rank, modify test 2024-01-29 17:57:14 +09:00
dependabot[bot]
7af524ff90 Bump aiohttp from 3.9.1 to 3.9.2
Bumps [aiohttp](https://github.com/aio-libs/aiohttp) from 3.9.1 to 3.9.2.
- [Release notes](https://github.com/aio-libs/aiohttp/releases)
- [Changelog](https://github.com/aio-libs/aiohttp/blob/master/CHANGES.rst)
- [Commits](https://github.com/aio-libs/aiohttp/compare/v3.9.1...v3.9.2)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-01-29 07:54:56 +00:00
Matthias
02a7f6398d Merge pull request #9739 from freqtrade/dependabot/pip/develop/types-requests-2.31.0.20240125
Bump types-requests from 2.31.0.20240106 to 2.31.0.20240125
2024-01-29 08:53:15 +01:00
Matthias
18723d2b6d Merge pull request #9745 from freqtrade/dependabot/github_actions/develop/peter-evans/dockerhub-description-4
Bump peter-evans/dockerhub-description from 3 to 4
2024-01-29 08:52:59 +01:00
Matthias
608a408c75 Merge pull request #9741 from freqtrade/dependabot/pip/develop/cryptography-42.0.1
Bump cryptography from 41.0.7 to 42.0.1
2024-01-29 08:52:08 +01:00
Matthias
e5d75c4454 Merge pull request #9744 from freqtrade/dependabot/pip/develop/mkdocs-material-9.5.6
Bump mkdocs-material from 9.5.4 to 9.5.6
2024-01-29 07:13:09 +01:00
dependabot[bot]
effe2b5367 Bump cryptography from 41.0.7 to 42.0.1
Bumps [cryptography](https://github.com/pyca/cryptography) from 41.0.7 to 42.0.1.
- [Changelog](https://github.com/pyca/cryptography/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/pyca/cryptography/compare/41.0.7...42.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>
2024-01-29 05:31:22 +00:00
Matthias
2f37385eb4 Merge pull request #9736 from freqtrade/dependabot/pip/develop/ccxt-4.2.25
Bump ccxt from 4.2.21 to 4.2.25
2024-01-29 06:29:06 +01:00
Matthias
0fa7f9e47f Bump types-requests pre-commit 2024-01-29 06:28:31 +01:00
Matthias
81c8e6b943 Merge pull request #9740 from freqtrade/dependabot/pip/develop/uvicorn-0.27.0
Bump uvicorn from 0.26.0 to 0.27.0
2024-01-29 06:27:27 +01:00
Matthias
b3843f0d53 Merge pull request #9737 from freqtrade/dependabot/pip/develop/pytest-asyncio-0.23.4
Bump pytest-asyncio from 0.21.1 to 0.23.4
2024-01-29 06:26:54 +01:00
dependabot[bot]
84913f2ea8 Bump peter-evans/dockerhub-description from 3 to 4
Bumps [peter-evans/dockerhub-description](https://github.com/peter-evans/dockerhub-description) from 3 to 4.
- [Release notes](https://github.com/peter-evans/dockerhub-description/releases)
- [Commits](https://github.com/peter-evans/dockerhub-description/compare/v3...v4)

---
updated-dependencies:
- dependency-name: peter-evans/dockerhub-description
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-01-29 03:33:46 +00:00
dependabot[bot]
1450d9e9cd Bump mkdocs-material from 9.5.4 to 9.5.6
Bumps [mkdocs-material](https://github.com/squidfunk/mkdocs-material) from 9.5.4 to 9.5.6.
- [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.4...9.5.6)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-01-29 03:28:12 +00:00
dependabot[bot]
b02e15b162 Bump lightgbm from 4.2.0 to 4.3.0
Bumps [lightgbm](https://github.com/microsoft/LightGBM) from 4.2.0 to 4.3.0.
- [Release notes](https://github.com/microsoft/LightGBM/releases)
- [Commits](https://github.com/microsoft/LightGBM/compare/v4.2.0...v4.3.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-01-29 03:27:55 +00:00
dependabot[bot]
4394fd1346 Bump uvicorn from 0.26.0 to 0.27.0
Bumps [uvicorn](https://github.com/encode/uvicorn) from 0.26.0 to 0.27.0.
- [Release notes](https://github.com/encode/uvicorn/releases)
- [Changelog](https://github.com/encode/uvicorn/blob/master/CHANGELOG.md)
- [Commits](https://github.com/encode/uvicorn/compare/0.26.0...0.27.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-01-29 03:27:28 +00:00
dependabot[bot]
3a6393e2d1 Bump types-requests from 2.31.0.20240106 to 2.31.0.20240125
Bumps [types-requests](https://github.com/python/typeshed) from 2.31.0.20240106 to 2.31.0.20240125.
- [Commits](https://github.com/python/typeshed/commits)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-01-29 03:27:24 +00:00
dependabot[bot]
990f9e03f8 Bump pytest-asyncio from 0.21.1 to 0.23.4
Bumps [pytest-asyncio](https://github.com/pytest-dev/pytest-asyncio) from 0.21.1 to 0.23.4.
- [Release notes](https://github.com/pytest-dev/pytest-asyncio/releases)
- [Commits](https://github.com/pytest-dev/pytest-asyncio/compare/v0.21.1...v0.23.4)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-01-29 03:27:15 +00:00
dependabot[bot]
0b549fc7f8 Bump ccxt from 4.2.21 to 4.2.25
Bumps [ccxt](https://github.com/ccxt/ccxt) from 4.2.21 to 4.2.25.
- [Release notes](https://github.com/ccxt/ccxt/releases)
- [Changelog](https://github.com/ccxt/ccxt/blob/master/CHANGELOG.md)
- [Commits](https://github.com/ccxt/ccxt/compare/4.2.21...4.2.25)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-01-29 03:27:12 +00:00
Matthias
23ac9e145a Fix generator test 2024-01-27 16:25:00 +01:00
Matthias
63d8239011 Merge branch 'develop' into bt-metrics2 2024-01-27 16:24:05 +01:00
Matthias
5890665931 Add BTC/USDT to test markets 2024-01-27 16:23:47 +01:00
Matthias
b72078e76e use get_pair_base_currency 2024-01-27 16:07:55 +01:00
Matthias
076ca75200 Slightly refactor pairlist test 2024-01-27 14:52:05 +01:00
Matthias
132e143b9a Minor comment fix 2024-01-27 14:49:50 +01:00
Matthias
e03e0e838b Merge pull request #9733 from Bloodhunter4rc/remotepairlist
Remotepairlist: fix parsing json exception , add saving to a file of processed pairlist + docs
2024-01-27 12:09:37 +01:00
Stefano
f8dc161ab4 add 2 more final tests 2024-01-27 19:33:12 +09:00
Stefano
e0f7b62b54 fix initial tests 2024-01-27 19:12:50 +09:00
Stefano Ariestasia
c854cef313 fix precommit 2024-01-27 18:12:19 +09:00
Stefano Ariestasia
006639820b add simple test 2024-01-27 18:10:10 +09:00
Stefano Ariestasia
bf17236e9b fix typo in the docs 2024-01-27 16:25:54 +09:00
Bloodhunter4rc
99b11c088b add available_parameters 2024-01-27 08:20:20 +01:00
Matthias
f42fd25800 Improve function naming better reflecting what it aims to do 2024-01-27 08:15:05 +01:00
Matthias
a20fe8cd09 Update docs example box 2024-01-27 08:14:48 +01:00
Bloodhunter4rc
c398504f23 fix tests 2024-01-26 20:55:24 +01:00
Bloodhunter4rc
dd3fbfcfda + return type 2024-01-26 18:56:47 +01:00
Bloodhunter4rc
f0562c391c remove debug, reduce duplicate code -> init_check, add docs example for save_to_file 2024-01-26 18:32:46 +01:00
Bloodhunter4rc
027ce4337d refresh_period not necessary for a local file 2024-01-26 17:08:38 +01:00
Bloodhunter4rc
fd21658523 extend error except, add saving to a file of processed pairlist + docs 2024-01-26 16:46:54 +01:00
Matthias
523864601a Merge pull request #9730 from freqtrade/frog-mistakes-docs-1
Improve common mistakes docs
2024-01-25 17:26:53 +01:00
Robert Davey
8f0dbc6be1 Improve common mistakes docs
Add more details to the common mistakes section of the strategy customisation docs.
2024-01-25 16:11:21 +00:00
Matthias
8d72ee358c Improve code styles ... 2024-01-24 20:31:38 +01:00
Matthias
0077f3c9a5 Code style improvements 2024-01-24 20:25:25 +01:00
Matthias
6aa4de4d29 Tests for enhanced list-data functionality 2024-01-24 20:17:39 +01:00
Matthias
817aaa164c Enhance list-data (detailed) view with "candles" column 2024-01-24 20:13:06 +01:00
Matthias
ea9c51570f use resample_freq where possible 2024-01-24 19:19:16 +01:00
Matthias
2fe6fe14aa Simplify volumepairlist footprint slightly 2024-01-24 18:27:41 +01:00
Matthias
85dd371ee3 use prepared timedelta object for backtesting 2024-01-24 17:57:18 +01:00
Matthias
0fc3c675b6 Merge pull request #9726 from freqtrade/dependabot/pip/develop/ccxt-4.2.21
Bump ccxt from 4.2.15 to 4.2.21
2024-01-24 06:34:02 +01:00
dependabot[bot]
55fe379e13 Bump ccxt from 4.2.15 to 4.2.21
Bumps [ccxt](https://github.com/ccxt/ccxt) from 4.2.15 to 4.2.21.
- [Release notes](https://github.com/ccxt/ccxt/releases)
- [Changelog](https://github.com/ccxt/ccxt/blob/master/CHANGELOG.md)
- [Commits](https://github.com/ccxt/ccxt/compare/4.2.15...4.2.21)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-01-23 19:17:31 +00:00
Matthias
96a8263c57 trades_to_ohlcv_multi test adjustment 2024-01-23 19:31:40 +01:00
Matthias
79ecca3e40 Add test for trades-conversation on different dates 2024-01-23 19:24:41 +01:00
Matthias
267f2e352e Add trades-generator 2024-01-23 19:24:41 +01:00
Matthias
1ae3b1e622 Fix weekly resamples to ensure they're on monday. 2024-01-23 19:21:06 +01:00
Matthias
34ac2dc9ae Further improve ohlcv test 2024-01-23 19:12:35 +01:00
Matthias
c15f811602 Merge pull request #9708 from PabloRuizCuevas/develop
shorten configuration code
2024-01-23 08:14:46 +01:00
Matthias
efe332a395 Fix wrong test comment 2024-01-23 07:25:30 +01:00
Matthias
8fd2dcd257 Impove tests for yearly resample 2024-01-23 07:22:38 +01:00
Matthias
48ea43f954 Fix yearly resample timeframe 2024-01-23 07:22:18 +01:00
Matthias
6b78dac6f0 Re-align naming for resample_freq generator 2024-01-23 07:12:27 +01:00
Matthias
0a40a345fe use timeframe_as_resample_freq for trade_parallel analysis 2024-01-23 07:11:59 +01:00
Matthias
656b32814b Have trade_converter use timeframe_as_resample_freq 2024-01-23 07:10:25 +01:00
Matthias
c9c44a4710 Extract resample_interval generation 2024-01-23 07:02:09 +01:00
Matthias
5167f6936d Prepare converter to work on 1s data. 2024-01-23 06:42:12 +01:00
Matthias
fdf88a8019 Improve test showing that 1m and 1s conversion is identical. 2024-01-23 06:42:12 +01:00
Matthias
087c59cfbf Fix data generation bug with 3m data 2024-01-23 06:42:12 +01:00
Matthias
83480d90f1 Extend test range to more timeframes 2024-01-23 06:42:12 +01:00
Matthias
67abfcf4d4 Add generic ohlcv_to_dataframe_multi test to ensure code works for diff. timeframe ranges 2024-01-23 06:42:12 +01:00
Matthias
00e4c51741 Prep conftest for 1s data generation 2024-01-23 06:42:12 +01:00
Matthias
a1b93dc915 Improve call sequence 2024-01-23 06:42:12 +01:00
Matthias
40011eb9a3 Merge pull request #9725 from freqtrade/update/pre-commit-hooks
Update pre-commit hooks
2024-01-23 06:38:57 +01:00
xmatthias
f1d002a735 chore: update pre-commit hooks 2024-01-23 03:03:27 +00:00
Pablo
991a279b23 Removed duplicated key
The key was already duplicated in the original version
2024-01-22 22:48:45 +01:00
Matthias
5b879df2b0 Improve indentation 2024-01-22 20:16:08 +01:00
Pablo
d191138009 restored accidentally deleted lines 2024-01-22 16:26:47 +01:00
Matthias
a8ee0cc4c8 Merge pull request #9716 from freqtrade/dependabot/pip/develop/pyarrow-15.0.0
Bump pyarrow from 14.0.2 to 15.0.0
2024-01-22 15:45:34 +01:00
Matthias
85658bb637 Update rpi wheels for pyarrow 15.0.0 2024-01-22 13:46:50 +01:00
Matthias
b4fb133702 Merge pull request #9706 from freqtrade/fix/kraken_datadl
improve data-download when using `--dl-trades`
2024-01-22 10:14:12 +01:00
Matthias
b7537b6ade Merge pull request #9721 from freqtrade/dependabot/pip/develop/scipy-1.12.0
Bump scipy from 1.11.4 to 1.12.0
2024-01-22 10:13:48 +01:00
Matthias
633992da52 Merge pull request #9722 from freqtrade/dependabot/pip/develop/psutil-5.9.8
Bump psutil from 5.9.7 to 5.9.8
2024-01-22 09:48:30 +01:00
Matthias
0be5ca7503 Merge pull request #9724 from freqtrade/dependabot/github_actions/develop/actions/cache-4
Bump actions/cache from 3 to 4
2024-01-22 08:37:28 +01:00
Matthias
e310e4abbb Merge pull request #9720 from freqtrade/dependabot/pip/develop/ruff-0.1.14
Bump ruff from 0.1.13 to 0.1.14
2024-01-22 08:19:05 +01:00
Matthias
1b132ee21d Merge pull request #9719 from freqtrade/dependabot/pip/develop/nbconvert-7.14.2
Bump nbconvert from 7.14.1 to 7.14.2
2024-01-22 08:17:09 +01:00
Matthias
7f0b6250d0 Merge pull request #9723 from freqtrade/dependabot/pip/develop/mkdocs-material-9.5.4
Bump mkdocs-material from 9.5.3 to 9.5.4
2024-01-22 08:16:56 +01:00
dependabot[bot]
3b5c2ea0d7 Bump scipy from 1.11.4 to 1.12.0
Bumps [scipy](https://github.com/scipy/scipy) from 1.11.4 to 1.12.0.
- [Release notes](https://github.com/scipy/scipy/releases)
- [Commits](https://github.com/scipy/scipy/compare/v1.11.4...v1.12.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-01-22 06:00:57 +00:00
Matthias
c6f4c82f44 Merge pull request #9718 from freqtrade/dependabot/pip/develop/pytest-random-order-1.1.1
Bump pytest-random-order from 1.1.0 to 1.1.1
2024-01-22 07:00:44 +01:00
Matthias
5bc0dcfb22 Merge pull request #9715 from freqtrade/dependabot/pip/develop/scikit-learn-1.4.0
Bump scikit-learn from 1.3.2 to 1.4.0
2024-01-22 06:59:30 +01:00
dependabot[bot]
06630a5991 Bump psutil from 5.9.7 to 5.9.8
Bumps [psutil](https://github.com/giampaolo/psutil) from 5.9.7 to 5.9.8.
- [Changelog](https://github.com/giampaolo/psutil/blob/master/HISTORY.rst)
- [Commits](https://github.com/giampaolo/psutil/compare/release-5.9.7...release-5.9.8)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-01-22 05:51:17 +00:00
Matthias
5f97374752 Merge pull request #9713 from freqtrade/dependabot/pip/develop/uvicorn-0.26.0
Bump uvicorn from 0.25.0 to 0.26.0
2024-01-22 06:50:34 +01:00
Matthias
3dd29437d5 Merge pull request #9714 from freqtrade/dependabot/pip/develop/orjson-3.9.12
Bump orjson from 3.9.10 to 3.9.12
2024-01-22 06:50:22 +01:00
Matthias
4e18c35727 Merge pull request #9717 from freqtrade/dependabot/pip/develop/jsonschema-4.21.1
Bump jsonschema from 4.20.0 to 4.21.1
2024-01-22 06:50:08 +01:00
dependabot[bot]
0f1e7ed652 Bump actions/cache from 3 to 4
Bumps [actions/cache](https://github.com/actions/cache) from 3 to 4.
- [Release notes](https://github.com/actions/cache/releases)
- [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md)
- [Commits](https://github.com/actions/cache/compare/v3...v4)

---
updated-dependencies:
- dependency-name: actions/cache
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-01-22 03:56:13 +00:00
dependabot[bot]
fbb91ca331 Bump mkdocs-material from 9.5.3 to 9.5.4
Bumps [mkdocs-material](https://github.com/squidfunk/mkdocs-material) from 9.5.3 to 9.5.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.5.3...9.5.4)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-01-22 03:31:08 +00:00
dependabot[bot]
713d9fdc8f Bump ruff from 0.1.13 to 0.1.14
Bumps [ruff](https://github.com/astral-sh/ruff) from 0.1.13 to 0.1.14.
- [Release notes](https://github.com/astral-sh/ruff/releases)
- [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md)
- [Commits](https://github.com/astral-sh/ruff/compare/v0.1.13...v0.1.14)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-01-22 03:30:38 +00:00
dependabot[bot]
3681e3e754 Bump nbconvert from 7.14.1 to 7.14.2
Bumps [nbconvert](https://github.com/jupyter/nbconvert) from 7.14.1 to 7.14.2.
- [Release notes](https://github.com/jupyter/nbconvert/releases)
- [Changelog](https://github.com/jupyter/nbconvert/blob/main/CHANGELOG.md)
- [Commits](https://github.com/jupyter/nbconvert/compare/v7.14.1...v7.14.2)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-01-22 03:30:22 +00:00
dependabot[bot]
32d77f808e Bump pytest-random-order from 1.1.0 to 1.1.1
Bumps [pytest-random-order](https://github.com/jbasko/pytest-random-order) from 1.1.0 to 1.1.1.
- [Release notes](https://github.com/jbasko/pytest-random-order/releases)
- [Commits](https://github.com/jbasko/pytest-random-order/compare/v1.1.0...v1.1.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-01-22 03:30:17 +00:00
dependabot[bot]
d58b941bf1 Bump jsonschema from 4.20.0 to 4.21.1
Bumps [jsonschema](https://github.com/python-jsonschema/jsonschema) from 4.20.0 to 4.21.1.
- [Release notes](https://github.com/python-jsonschema/jsonschema/releases)
- [Changelog](https://github.com/python-jsonschema/jsonschema/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/python-jsonschema/jsonschema/compare/v4.20.0...v4.21.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-01-22 03:30:09 +00:00
dependabot[bot]
34df710265 Bump pyarrow from 14.0.2 to 15.0.0
Bumps [pyarrow](https://github.com/apache/arrow) from 14.0.2 to 15.0.0.
- [Commits](https://github.com/apache/arrow/compare/go/v14.0.2...go/v15.0.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-01-22 03:30:02 +00:00
dependabot[bot]
f324f8775f Bump scikit-learn from 1.3.2 to 1.4.0
Bumps [scikit-learn](https://github.com/scikit-learn/scikit-learn) from 1.3.2 to 1.4.0.
- [Release notes](https://github.com/scikit-learn/scikit-learn/releases)
- [Commits](https://github.com/scikit-learn/scikit-learn/compare/1.3.2...1.4.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-01-22 03:29:56 +00:00
dependabot[bot]
00f8f05268 Bump orjson from 3.9.10 to 3.9.12
Bumps [orjson](https://github.com/ijl/orjson) from 3.9.10 to 3.9.12.
- [Release notes](https://github.com/ijl/orjson/releases)
- [Changelog](https://github.com/ijl/orjson/blob/master/CHANGELOG.md)
- [Commits](https://github.com/ijl/orjson/compare/3.9.10...3.9.12)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-01-22 03:29:47 +00:00
dependabot[bot]
3d5620a422 Bump uvicorn from 0.25.0 to 0.26.0
Bumps [uvicorn](https://github.com/encode/uvicorn) from 0.25.0 to 0.26.0.
- [Release notes](https://github.com/encode/uvicorn/releases)
- [Changelog](https://github.com/encode/uvicorn/blob/master/CHANGELOG.md)
- [Commits](https://github.com/encode/uvicorn/compare/0.25.0...0.26.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-01-22 03:29:32 +00:00
Pablo
e704c2def4 shorten configuration code 2024-01-21 19:56:00 +01:00
Matthias
d534f2014a Account for kraken specialcase in tests 2024-01-21 16:58:58 +01:00
Matthias
612ec38e57 Don't skip trades if the exchange doesn't do inclusive filtering 2024-01-21 16:50:49 +01:00
Matthias
ac5b12cfd2 Improve kraken pagination behavior 2024-01-21 15:55:34 +01:00
Matthias
f9b6830b78 update fetch_trades info data to kraken response format 2024-01-21 15:52:54 +01:00
Matthias
8a64f0b884 Fix fetch_trades tests 2024-01-21 15:37:39 +01:00
Matthias
15da4aa9bd Update tests for added fetch_trades arg 2024-01-21 15:25:11 +01:00
Matthias
c167575098 Move extracting trade pagination id to fetch_trades 2024-01-21 15:22:03 +01:00
Matthias
b56c663bea Add regular / fallback test. 2024-01-21 14:13:05 +01:00
Matthias
501a9a8c98 Improve error message, add test for trade_pagination_id validation 2024-01-21 14:11:59 +01:00
Matthias
c333c9c5a1 Improve kraken trades pagination logic 2024-01-21 14:08:35 +01:00
Matthias
11dd349c2b Update ccxt online test name to htx 2024-01-21 13:57:26 +01:00
Matthias
d355f011df Invert exchange_class mapping 2024-01-21 13:57:26 +01:00
Matthias
ef80772fc3 Rename class and tests 2024-01-21 13:57:26 +01:00
Matthias
ff95adb2eb Update supported exchanges, add mapping 2024-01-21 13:57:26 +01:00
Matthias
5b1cda9236 Update Huboi brandin to htx 2024-01-21 13:57:26 +01:00
Stefano Ariestasia
60812983e3 fix error 2024-01-21 13:33:38 +09:00
Stefano Ariestasia
bbec51685d remove can_filter, and use log_once 2024-01-21 13:28:50 +09:00
Matthias
32a4aa0ca8 Merge pull request #9703 from freqtrade/feat/allow-custom-feature-plot
feat: allow custom user features to be plotted in backtesting (freqai)
2024-01-20 18:08:19 +01:00
Shane
ad0f88796b fix: logical error
Fix logical error in the conditional checks for model classes. The `elif` statement that looks for "lightgbm.sklearn" or "xgb" in the model class string is now broken into two separate conditions because the old condition would always evaluate to `True` due to the non-empty string "xgb".
2024-01-20 10:42:37 +11:00
Matthias
e76888882d Fix typehint 2024-01-19 18:59:52 +01:00
Matthias
3ab226a096 Remove unused import 2024-01-19 18:24:03 +01:00
Matthias
58058f0197 Fix migration test 2024-01-19 18:20:23 +01:00
Matthias
6eaf42fe33 Default order_date to dt_now if it's not set via ccxt and wasn't previously set. 2024-01-19 18:17:53 +01:00
Matthias
88ba82d4fd Fix more tests 2024-01-19 18:17:31 +01:00
Matthias
acbea4e26f Fix some tests after update_stoploss_date removal 2024-01-19 18:16:36 +01:00
robcaulk
50864c731b chore: improve documentation for plotting custom features 2024-01-19 17:55:16 +01:00
robcaulk
5bfda534b2 feat: allow custom user features to be plotted in backtesting (freqai) 2024-01-19 17:46:34 +01:00
Matthias
b9a43b8e24 Don't store 'stoploss_last_updated' explicitly
it can easily be derived from the very last stoploss order.
2024-01-19 07:12:49 +01:00
Matthias
59b3486574 Update migrations 2024-01-19 06:49:49 +01:00
Matthias
9f3c6f2dcc Fix some tests and comments 2024-01-19 06:48:32 +01:00
Matthias
22a08c7c8d Merge pull request #9549 from freqtrade/freqai/fixdownloaddata
Only download tradable pairs
2024-01-18 18:12:25 +01:00
Matthias
73b30cf3fa Update ta-lib documentation links
closes #9697
2024-01-18 06:09:34 +01:00
Matthias
6ce1123136 Merge pull request #9695 from freqtrade/kraken/stop
kraken stoploss behavior
2024-01-17 20:21:05 +01:00
Matthias
8cbdcbd50d Bump ccxt min version 2024-01-17 19:47:16 +01:00
Matthias
42ea4821f4 Bump kraken to 4.2.15 2024-01-17 19:46:50 +01:00
Matthias
b7ab7dd25e Update tests for new kraken stoploss behavior 2024-01-17 19:44:18 +01:00
Matthias
c2d6ab2fa5 Add unified kraken stoploss settings 2024-01-17 19:44:09 +01:00
Matthias
6069670ce2 Remove kraken custom stoploss handling 2024-01-17 19:43:53 +01:00
Matthias
c248bb27e9 use safe_price for adjust_entry_price callback
closes #9692
2024-01-16 20:15:35 +01:00
Matthias
f3fd1f010c Merge pull request #9691 from freqtrade/update/pre-commit-hooks
Update pre-commit hooks
2024-01-16 06:21:06 +01:00
xmatthias
a4d078efd1 chore: update pre-commit hooks 2024-01-16 03:03:46 +00:00
Matthias
cfdf21942d Merge pull request #9681 from freqtrade/frog-hyperdocs-1
Add backtesting vs hyperopt result difference explanations
2024-01-15 17:59:33 +01:00
Robert Davey
e18fbbd972 Clarify points as per comments 2024-01-15 11:43:47 +00:00
Matthias
78ca939ae6 pin prompt-toolkit to compatible version in jupyter dockerfile
closes #9683
2024-01-15 07:22:23 +01:00
Matthias
eccc1498af Merge pull request #9685 from freqtrade/dependabot/pip/develop/ruff-0.1.13
Bump ruff from 0.1.11 to 0.1.13
2024-01-15 06:57:30 +01:00
Matthias
0a6a0a8b88 Merge pull request #9688 from freqtrade/dependabot/pip/develop/ccxt-4.2.14
Bump ccxt from 4.2.9 to 4.2.14
2024-01-15 06:57:01 +01:00
Matthias
6cfc2b2bdf Merge pull request #9687 from freqtrade/dependabot/pip/develop/markdown-3.5.2
Bump markdown from 3.5.1 to 3.5.2
2024-01-15 06:55:22 +01:00
Matthias
2d5f3c150b Merge pull request #9686 from freqtrade/dependabot/pip/develop/nbconvert-7.14.1
Bump nbconvert from 7.14.0 to 7.14.1
2024-01-15 06:55:10 +01:00
Matthias
3ccb612cd9 Merge pull request #9684 from freqtrade/dependabot/pip/develop/fastapi-0.109.0
Bump fastapi from 0.108.0 to 0.109.0
2024-01-15 06:54:54 +01:00
dependabot[bot]
dc5c1e1300 Bump ccxt from 4.2.9 to 4.2.14
Bumps [ccxt](https://github.com/ccxt/ccxt) from 4.2.9 to 4.2.14.
- [Release notes](https://github.com/ccxt/ccxt/releases)
- [Changelog](https://github.com/ccxt/ccxt/blob/master/CHANGELOG.md)
- [Commits](https://github.com/ccxt/ccxt/compare/4.2.9...4.2.14)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-01-15 03:06:34 +00:00
dependabot[bot]
91ceb5c19a Bump markdown from 3.5.1 to 3.5.2
Bumps [markdown](https://github.com/Python-Markdown/markdown) from 3.5.1 to 3.5.2.
- [Release notes](https://github.com/Python-Markdown/markdown/releases)
- [Changelog](https://github.com/Python-Markdown/markdown/blob/master/docs/changelog.md)
- [Commits](https://github.com/Python-Markdown/markdown/compare/3.5.1...3.5.2)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-01-15 03:06:17 +00:00
dependabot[bot]
d073692cae Bump nbconvert from 7.14.0 to 7.14.1
Bumps [nbconvert](https://github.com/jupyter/nbconvert) from 7.14.0 to 7.14.1.
- [Release notes](https://github.com/jupyter/nbconvert/releases)
- [Changelog](https://github.com/jupyter/nbconvert/blob/main/CHANGELOG.md)
- [Commits](https://github.com/jupyter/nbconvert/compare/v7.14.0...v7.14.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-01-15 03:06:07 +00:00
dependabot[bot]
e1b8742b1f Bump ruff from 0.1.11 to 0.1.13
Bumps [ruff](https://github.com/astral-sh/ruff) from 0.1.11 to 0.1.13.
- [Release notes](https://github.com/astral-sh/ruff/releases)
- [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md)
- [Commits](https://github.com/astral-sh/ruff/compare/v0.1.11...v0.1.13)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-01-15 03:05:54 +00:00
dependabot[bot]
d866bb6f01 Bump fastapi from 0.108.0 to 0.109.0
Bumps [fastapi](https://github.com/tiangolo/fastapi) from 0.108.0 to 0.109.0.
- [Release notes](https://github.com/tiangolo/fastapi/releases)
- [Commits](https://github.com/tiangolo/fastapi/compare/0.108.0...0.109.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-01-15 03:05:41 +00:00
Robert Davey
2737de1fdd Remove extra EOF newline 2024-01-14 22:20:41 +00:00
Robert Davey
a41b72ca19 Add backtesting vs hyperopt result difference explanations
- Add more detailed explanations as to why backtest results may not match hyperopt results.
- Remove small informal grammar issue from main docs.
2024-01-14 22:16:41 +00:00
Matthias
ea1b3c38f8 remove last utcnow usage 2024-01-14 20:00:30 +01:00
Matthias
31fb06fa80 Merge pull request #9680 from freqtrade/ci_py12
Ci py12
2024-01-14 19:26:22 +01:00
Matthias
291478a974 Bump docker images to 3.11.7 2024-01-14 18:07:04 +01:00
Matthias
29d2fc2e1b Skip freqAI tests on py3.12 2024-01-14 18:02:36 +01:00
Matthias
59cc607761 Don't force-patch torch if it ain't installed. 2024-01-14 16:08:18 +01:00
Matthias
c79502cb4b Pin torch to <3.12 2024-01-14 16:08:18 +01:00
Matthias
f124f2daaf Exclude further dependencies 2024-01-14 16:08:18 +01:00
Matthias
026f989625 Don't install catboost on 3.12 for now 2024-01-14 16:08:18 +01:00
Matthias
9a2ed35030 Run CI against 3.12 2024-01-14 16:08:18 +01:00
Matthias
d412a8fc1a Simplify emc test setup 2024-01-14 16:06:42 +01:00
Matthias
fbed3fad78 Fix non-asserting test 2024-01-14 15:18:42 +01:00
Matthias
393df83a91 Implement enter_tag initialization to avoid futures warning 2024-01-14 14:33:47 +01:00
Matthias
e967dfa145 Adjust api test after column expansion 2024-01-14 13:58:06 +01:00
Matthias
4aab57ce62 Add test for pandas deprecation warning 2024-01-14 13:56:05 +01:00
Matthias
5841c65430 Remove unused test param 2024-01-14 13:51:26 +01:00
Matthias
338ff66268 Only load environment variables when config is allowed 2024-01-13 17:09:02 +01:00
Matthias
629a6be269 Rename methods to make exposure explicit 2024-01-13 16:53:31 +01:00
Matthias
4896e04c41 Improve formatting 2024-01-13 16:46:22 +01:00
Matthias
a53adb95e1 Remove container-name from ft-jupyter compose file
closes #9678
2024-01-13 16:38:12 +01:00
Matthias
ab82f5cc69 Merge pull request #9677 from Bloodhunter4rc/patch-4
Update link
2024-01-13 13:34:19 +01:00
Bloodhunter4rc
6fc1884e8e Update link
due to dns failure on old page, site been migrated to strat.ninja
2024-01-13 10:40:34 +01:00
Matthias
cd392fbbdf Slightly update formatting in arguments 2024-01-13 08:18:30 +01:00
Matthias
893e2cbbc1 Merge pull request #9669 from freqtrade/dependabot/pip/jinja2-3.1.3
Bump jinja2 from 3.1.2 to 3.1.3
2024-01-12 06:24:28 +01:00
dependabot[bot]
bcebb4d804 Bump jinja2 from 3.1.2 to 3.1.3
Bumps [jinja2](https://github.com/pallets/jinja) from 3.1.2 to 3.1.3.
- [Release notes](https://github.com/pallets/jinja/releases)
- [Changelog](https://github.com/pallets/jinja/blob/main/CHANGES.rst)
- [Commits](https://github.com/pallets/jinja/compare/3.1.2...3.1.3)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-01-11 19:45:56 +00:00
Matthias
cd81897c84 Merge pull request #9665 from freqtrade/no-db-context
Add No db context to protect certain functions that run in a backtest-like mode
2024-01-11 06:53:51 +01:00
Matthias
cb9fa734d1 Improve test resiliance 2024-01-10 20:36:10 +01:00
Matthias
3f27c2792a Remove trailing newline 2024-01-10 20:12:57 +01:00
Matthias
883f508544 Add NoDBContext to pairlist evaluation functions 2024-01-10 20:09:47 +01:00
Matthias
3caf964c46 Add NoDbContext context manager 2024-01-10 20:01:56 +01:00
Matthias
7fcbe9788d Extract database cleanup functions to persistence package 2024-01-10 19:53:06 +01:00
Stefano
de91261f73 fix pre-commit 2024-01-09 15:03:10 +09:00
Matthias
225c94c0f5 Reduce log level in rpc default handler
This avoids additional "NoneType: None" lines when RPC triggers
exceptions
2024-01-09 06:39:11 +01:00
Stefano Ariestasia
e8fcac491a use number_assets instead of limit 2024-01-09 14:32:27 +09:00
Matthias
6a5847a157 Merge pull request #9658 from freqtrade/update/pre-commit-hooks
Update pre-commit hooks
2024-01-09 06:28:00 +01:00
Stefano Ariestasia
95af462e80 fix pre-commit 2024-01-09 14:21:07 +09:00
Stefano Ariestasia
d3506c249d update docs 2024-01-09 14:08:15 +09:00
xmatthias
a9287359a3 chore: update pre-commit hooks 2024-01-09 03:03:20 +00:00
Matthias
3741cbf3a9 Merge pull request #9656 from freqtrade/dependabot/pip/develop/sqlalchemy-2.0.25
Bump sqlalchemy from 2.0.23 to 2.0.25
2024-01-08 18:25:53 +01:00
Matthias
962417bdea Update typing to account for correctly typed sqlalchemy responses 2024-01-08 17:55:50 +01:00
Matthias
34c1838566 Bump Sqlalchemy in pre-commit 2024-01-08 17:55:50 +01:00
dependabot[bot]
3b7288edaa Bump sqlalchemy from 2.0.23 to 2.0.25
Bumps [sqlalchemy](https://github.com/sqlalchemy/sqlalchemy) from 2.0.23 to 2.0.25.
- [Release notes](https://github.com/sqlalchemy/sqlalchemy/releases)
- [Changelog](https://github.com/sqlalchemy/sqlalchemy/blob/main/CHANGES.rst)
- [Commits](https://github.com/sqlalchemy/sqlalchemy/commits)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-01-08 09:13:08 +00:00
Matthias
e28b2f44d3 Merge pull request #9652 from freqtrade/dependabot/pip/develop/types-tabulate-0.9.0.20240106
Bump types-tabulate from 0.9.0.3 to 0.9.0.20240106
2024-01-08 10:12:09 +01:00
Matthias
72c41ec2c5 Bump types-tabulate pre-commit 2024-01-08 09:44:14 +01:00
dependabot[bot]
5be32cd801 Bump types-tabulate from 0.9.0.3 to 0.9.0.20240106
Bumps [types-tabulate](https://github.com/python/typeshed) from 0.9.0.3 to 0.9.0.20240106.
- [Commits](https://github.com/python/typeshed/commits)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-01-08 08:30:39 +00:00
Matthias
6640c9e3d9 Merge pull request #9655 from freqtrade/dependabot/pip/develop/types-python-dateutil-2.8.19.20240106
Bump types-python-dateutil from 2.8.19.14 to 2.8.19.20240106
2024-01-08 09:28:58 +01:00
Stefano Ariestasia
bc8c5e743f rename to PairList 2024-01-08 16:38:30 +09:00
Stefano Ariestasia
ef8712f4d9 tidy up 2024-01-08 16:04:30 +09:00
Stefano Ariestasia
fdf9cc1b76 tidy up codes 2024-01-08 16:02:31 +09:00
Stefano Ariestasia
442ca86d15 add market check 2024-01-08 15:33:43 +09:00
Stefano Ariestasia
d578c910bc remove unused lines 2024-01-08 15:09:42 +09:00
Matthias
37dacdff0d Bump pre-commit dateutil 2024-01-08 06:57:07 +01:00
dependabot[bot]
671ce25a28 Bump types-python-dateutil from 2.8.19.14 to 2.8.19.20240106
Bumps [types-python-dateutil](https://github.com/python/typeshed) from 2.8.19.14 to 2.8.19.20240106.
- [Commits](https://github.com/python/typeshed/commits)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-01-08 05:56:48 +00:00
Matthias
dbc74f0d5e Merge pull request #9650 from freqtrade/dependabot/pip/develop/types-requests-2.31.0.20240106
Bump types-requests from 2.31.0.20231231 to 2.31.0.20240106
2024-01-08 06:56:05 +01:00
Matthias
f33e89e164 Merge pull request #9651 from freqtrade/dependabot/pip/develop/numpy-1.26.3
Bump numpy from 1.26.2 to 1.26.3
2024-01-08 06:39:36 +01:00
Matthias
4b320b0f2f Merge pull request #9653 from freqtrade/dependabot/pip/develop/ccxt-4.2.9
Bump ccxt from 4.2.2 to 4.2.9
2024-01-08 06:39:08 +01:00
Matthias
7a141abeca Merge pull request #9657 from freqtrade/dependabot/pip/develop/ruff-0.1.11
Bump ruff from 0.1.9 to 0.1.11
2024-01-08 06:37:45 +01:00
Matthias
a8228f0eac Bump types-requests pre-commit 2024-01-08 06:35:11 +01:00
Matthias
ad079f858d Merge pull request #9654 from freqtrade/dependabot/pip/develop/nbconvert-7.14.0
Bump nbconvert from 7.13.1 to 7.14.0
2024-01-08 06:34:13 +01:00
dependabot[bot]
0b3126a0fe Bump ruff from 0.1.9 to 0.1.11
Bumps [ruff](https://github.com/astral-sh/ruff) from 0.1.9 to 0.1.11.
- [Release notes](https://github.com/astral-sh/ruff/releases)
- [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md)
- [Commits](https://github.com/astral-sh/ruff/compare/v0.1.9...v0.1.11)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-01-08 03:34:09 +00:00
dependabot[bot]
4686d22020 Bump nbconvert from 7.13.1 to 7.14.0
Bumps [nbconvert](https://github.com/jupyter/nbconvert) from 7.13.1 to 7.14.0.
- [Release notes](https://github.com/jupyter/nbconvert/releases)
- [Changelog](https://github.com/jupyter/nbconvert/blob/main/CHANGELOG.md)
- [Commits](https://github.com/jupyter/nbconvert/compare/v7.13.1...v7.14.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-01-08 03:33:30 +00:00
dependabot[bot]
2304f852ff Bump ccxt from 4.2.2 to 4.2.9
Bumps [ccxt](https://github.com/ccxt/ccxt) from 4.2.2 to 4.2.9.
- [Release notes](https://github.com/ccxt/ccxt/releases)
- [Changelog](https://github.com/ccxt/ccxt/blob/master/CHANGELOG.md)
- [Commits](https://github.com/ccxt/ccxt/compare/4.2.2...4.2.9)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-01-08 03:33:25 +00:00
dependabot[bot]
68d2d24f2a Bump numpy from 1.26.2 to 1.26.3
Bumps [numpy](https://github.com/numpy/numpy) from 1.26.2 to 1.26.3.
- [Release notes](https://github.com/numpy/numpy/releases)
- [Changelog](https://github.com/numpy/numpy/blob/main/doc/RELEASE_WALKTHROUGH.rst)
- [Commits](https://github.com/numpy/numpy/compare/v1.26.2...v1.26.3)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-01-08 03:33:12 +00:00
dependabot[bot]
67f608fb5f Bump types-requests from 2.31.0.20231231 to 2.31.0.20240106
Bumps [types-requests](https://github.com/python/typeshed) from 2.31.0.20231231 to 2.31.0.20240106.
- [Commits](https://github.com/python/typeshed/commits)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-01-08 03:33:02 +00:00
Stefano Ariestasia
5bb4824aae add log print to see the time 2024-01-08 00:58:39 +09:00
Stefano Ariestasia
f29fcb31e0 debug 2024-01-08 00:54:21 +09:00
Stefano Ariestasia
8055140e66 simplify code 2024-01-08 00:53:37 +09:00
Stefano Ariestasia
96a6c00acc add mode 2024-01-08 00:42:33 +09:00
Stefano Ariestasia
09cb6cb02d remove debug 2024-01-08 00:21:58 +09:00
Stefano Ariestasia
1f0a2ab242 forgot () 2024-01-08 00:21:07 +09:00
Stefano Ariestasia
35467619c4 add logger 2024-01-08 00:20:09 +09:00
Stefano Ariestasia
bb684dd613 empty pairlist 2024-01-08 00:16:49 +09:00
Stefano Ariestasia
adf07dd3e1 remove cache for noe 2024-01-08 00:16:16 +09:00
Stefano Ariestasia
ef528fa69c option B 2024-01-08 00:14:55 +09:00
Stefano Ariestasia
e10ab8c543 test gen_pairlist 2024-01-08 00:04:58 +09:00
Stefano Ariestasia
a5862dcc4a add log message 2024-01-07 23:33:34 +09:00
Stefano Ariestasia
1cd08c96a1 filter the pairlist 2024-01-07 23:30:11 +09:00
Stefano Ariestasia
2eb3b73a93 cut the list to top x 2024-01-07 23:22:58 +09:00
Matthias
1b70e9b074 Point users to the pair naming docs when download-data yields no pairs. 2024-01-07 15:22:53 +01:00
Stefano Ariestasia
70cc2942d7 wrong arg name 2024-01-07 23:10:18 +09:00
Matthias
7c7ddb3b19 Fix improt sorting 2024-01-07 14:46:41 +01:00
Matthias
69e9ab90df Adjust tests for new messaging scheme 2024-01-07 14:43:16 +01:00
Matthias
28b5552231 Improve entry message 2024-01-07 14:30:27 +01:00
Matthias
b27f99dbc3 Add note about removing fiat_display_currency. 2024-01-07 13:51:30 +01:00
Stefano Ariestasia
1e49200596 early stage of marketcapfilter 2024-01-07 20:16:44 +09:00
Matthias
6121c7ed86 Remove pointless condition (freqtradebot only ever exists in dry/live modes). 2024-01-06 18:21:41 +01:00
Matthias
394c260eb2 Update runmode to 'backtest' in some test cases 2024-01-06 18:14:14 +01:00
Matthias
582f51ccdd Add runmode "dry_run" to default configuration 2024-01-06 18:07:40 +01:00
Matthias
74bb1a29b6 Fix indentation 2024-01-06 17:55:03 +01:00
Matthias
ddb42879ef Fix type errors 2024-01-06 17:32:56 +01:00
Matthias
53b24ea69b Update webhook documentation 2024-01-06 16:28:45 +01:00
Matthias
80071dd2d8 Adjust tests for improved telegram output 2024-01-06 16:25:49 +01:00
Matthias
545096cc47 feat: improve telegram message formatting 2024-01-06 16:13:27 +01:00
Matthias
9f682b5829 Improve Coin formatter naming 2024-01-06 16:02:47 +01:00
Matthias
209e7033cd Fix tests for newly added field 2024-01-06 15:48:49 +01:00
Matthias
7f69a06819 Use Type-hinting for telegram messages 2024-01-06 15:47:15 +01:00
Matthias
20b2f25067 Add quote currency to entry/exit msgs 2024-01-06 15:47:15 +01:00
Matthias
079330ac64 Merge pull request #9611 from freqtrade/rpc_final_exit_msg
Improve Telegram final exit msg
2024-01-06 15:46:56 +01:00
Matthias
88524db290 Remove leading whitespace 2024-01-06 13:04:49 +01:00
Matthias
e1ad87a565 Extract number-formatters from misc 2024-01-06 13:04:49 +01:00
Matthias
65009373ee add round_value incl. tests 2024-01-06 12:42:33 +01:00
Matthias
7f84996c1e Send correct Profit for both exit types 2024-01-06 11:53:14 +01:00
Matthias
90df6bcd54 Remove pointless parenteses 2024-01-06 11:49:40 +01:00
Matthias
3237cad8c8 Fix test naming from sell to exit 2024-01-06 11:32:58 +01:00
Matthias
2a11597ad3 Improve exit message wording 2024-01-06 11:30:45 +01:00
Matthias
59ec3fd860 Always send order-type to exit notifications 2024-01-06 11:29:02 +01:00
Matthias
685fef1ee8 Improve buy message FIAT formatting 2024-01-06 11:22:37 +01:00
Matthias
690a3599d0 Simplify exit msg method further 2024-01-06 11:14:43 +01:00
Matthias
e4977d4cbd Don't assign the original message dict for no reason 2024-01-06 10:55:00 +01:00
Matthias
7b78e66e7d Ajust some leverage calls 2024-01-06 10:51:50 +01:00
Matthias
8726d63923 Remove unnecessary calculations for exit msg 2024-01-06 10:50:55 +01:00
Matthias
5e9a929e9e Further simplify msg formatting 2024-01-06 10:50:35 +01:00
Matthias
c3ce11c222 Simplify enter_tag call 2024-01-06 10:50:13 +01:00
Matthias
0ab54b88cf Improve leverage formatting 2024-01-06 10:50:13 +01:00
Matthias
934e72656a Simplify exit message fiat handling 2024-01-06 10:50:13 +01:00
Robert Caulk
b950128c4d Update freqai-running.md 2024-01-06 09:26:17 +01:00
Matthias
c1982ab836 Merge pull request #9638 from freqtrade/fix/funding_rate_timeframe
Fix/funding rate timeframe
2024-01-06 09:25:17 +01:00
Matthias
86a9968bdd Fix bug in exit message formatting 2024-01-05 19:15:21 +01:00
Matthias
2bceb35b79 Circumvent edge-case in exit notifications
if order-amount == remaining amount, it caused a wrong exit msg
2024-01-05 19:10:43 +01:00
Matthias
e7eb1c132d Improve startup sequence to avoid certain timing errors
closes #9639
2024-01-05 17:26:25 +01:00
Matthias
fdc573f2f7 Add rudimentary test for funding_rate fix 2024-01-04 17:22:34 +01:00
Matthias
02d124b85b Improve naming of funding-rate migration 2024-01-04 17:17:32 +01:00
Matthias
3eade3e8db Move binance_mig test file to utils 2024-01-04 17:09:29 +01:00
Matthias
6cce455835 Test migrate_data wrapper 2024-01-04 17:08:57 +01:00
Matthias
f028bdf342 Improve funding fee migration logic 2024-01-04 17:06:15 +01:00
Matthias
983764ad0a Add "migrate funding fee timeframe" logic 2024-01-04 16:44:17 +01:00
Matthias
a12f368796 Move binance migration to behind migrations gate 2024-01-04 16:25:40 +01:00
Matthias
c9dd99a4b5 Enhance test to properly capture correct downloading of different futures types 2024-01-04 16:03:53 +01:00
Matthias
67d3dca49c Fix funding-fee downloading in the wrong timeframe 2024-01-04 15:52:19 +01:00
Matthias
d5d3188b99 Load "correct" timeframes (mark vs. funding fees)... 2024-01-04 15:30:06 +01:00
Matthias
50287ce556 ensure funding_fee_timeframe is always set 2024-01-04 15:29:28 +01:00
Matthias
3c1bbd9610 Improve funding_fee_calc method structure 2024-01-04 15:23:15 +01:00
Matthias
ec1b2e1da5 Remove further deprecated metric report 2024-01-04 14:51:21 +01:00
Matthias
73970d27bf Remove deprecated bt-output option 2024-01-04 14:45:42 +01:00
Matthias
0224c50c9e remove sell_reason from msg types 2024-01-04 14:44:00 +01:00
Matthias
b0fdf6ac52 Update Tests for removed sell_reason field 2024-01-04 14:42:37 +01:00
Matthias
682b462d82 Remove sell_reason from exit notification fields 2024-01-04 14:37:27 +01:00
Matthias
22307913d8 Reduce caching to 5min to speed up UI refreshes in case of open orders. 2024-01-04 14:22:02 +01:00
Matthias
b9786b979a Better test rate-caching logic 2024-01-04 14:13:02 +01:00
Matthias
abda629a72 Use time-machine for get_entry_rate test 2024-01-04 14:10:46 +01:00
Matthias
a4fca5b1fe Enhance test naming 2024-01-04 14:10:28 +01:00
Matthias
903062d479 Improve if formatting 2024-01-04 14:04:12 +01:00
Matthias
b6a71f2d2a __repr__ should use utc datetime... 2024-01-03 17:46:30 +01:00
Matthias
dc9c4da95e Improve integration test stability 2024-01-02 19:22:46 +01:00
Matthias
14660f54f8 Remove duplicate call to update_trade_state 2024-01-02 19:22:16 +01:00
Matthias
e199083287 Fix test ... 2024-01-02 17:10:33 +01:00
Matthias
206809d2e7 Update emergency sell test 2024-01-02 17:05:21 +01:00
Matthias
128807ff3b Merge remote-tracking branch 'origin/develop' into pr/Axel-CH/9267 2024-01-02 17:04:07 +01:00
Matthias
7a6888dfd3 Split stoploss test into 2 for easier testing 2024-01-02 16:58:58 +01:00
Matthias
f3da2c6fd8 Simplify and fix handle_stoploss_on_exchange test 2024-01-02 16:56:56 +01:00
Matthias
ce63eb30a2 Remove unused test param 2024-01-02 16:26:43 +01:00
Matthias
501e256c58 Fix further stoploss test 2024-01-02 16:25:42 +01:00
Matthias
b50a532284 Merge pull request #9631 from freqtrade/freqai-support
Help direct people to freqai support
2024-01-02 16:19:28 +01:00
Robert Caulk
a9380f0d53 Update freqai.md 2024-01-02 12:46:33 +01:00
Robert Caulk
316812f427 Help direct people to freqai support 2024-01-02 12:44:19 +01:00
Matthias
7ba9aa9acd Merge remote-tracking branch 'origin/develop' into pr/Axel-CH/9267 2024-01-02 12:11:44 +01:00
Matthias
fa368a9a4a Improve trailing stoploss test with time_machine 2024-01-02 12:11:06 +01:00
Matthias
f0073078e9 Fix stop order test 2024-01-02 11:27:42 +01:00
Matthias
9030e1041f Remove USDT from documentation about "supported crypto currencies". 2024-01-02 09:52:48 +01:00
Matthias
2c3cef5dee don't assume 'type' to be present at all times
closes #9629
2024-01-02 09:24:00 +01:00
Matthias
e722d81456 Fake order response should contain order_id 2024-01-02 09:24:00 +01:00
Matthias
10dbf47836 Improve exchange_response formatting 2024-01-02 08:53:13 +01:00
Matthias
a2160e4503 add exchange_response logging to funding_fee endpoint
help debug #9626
2024-01-01 19:33:21 +01:00
Matthias
842727202f Fix identifier_typos 2024-01-01 17:21:47 +01:00
Matthias
3526ba1a9b Merge pull request #9624 from konradbeck/patch-1
Update config_freqai.example.json
2024-01-01 17:18:53 +01:00
konradbeck
c07f2caa4a Update config_freqai.example.json
documentation refers to unique-id, e.g tensorboard --logdir user_data/models/unique-id

and not uniqe-id
2024-01-01 14:23:36 +02:00
Matthias
21e1f3d910 Merge pull request #9617 from freqtrade/dependabot/pip/develop/types-requests-2.31.0.20231231
Bump types-requests from 2.31.0.10 to 2.31.0.20231231
2024-01-01 09:44:58 +01:00
Matthias
c2d265e4b7 Merge pull request #9620 from freqtrade/dependabot/pip/develop/pytest-7.4.4
Bump pytest from 7.4.3 to 7.4.4
2024-01-01 09:44:38 +01:00
Matthias
f0e82592c3 Bump types-requests pre-commit 2024-01-01 08:47:33 +01:00
dependabot[bot]
501f629c05 Bump pytest from 7.4.3 to 7.4.4
Bumps [pytest](https://github.com/pytest-dev/pytest) from 7.4.3 to 7.4.4.
- [Release notes](https://github.com/pytest-dev/pytest/releases)
- [Changelog](https://github.com/pytest-dev/pytest/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/pytest-dev/pytest/compare/7.4.3...7.4.4)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-01-01 07:45:26 +00:00
Matthias
687ad05047 Merge pull request #9618 from freqtrade/dependabot/pip/develop/ccxt-4.2.2
Bump ccxt from 4.1.98 to 4.2.2
2024-01-01 08:37:46 +01:00
Matthias
3852757250 Merge pull request #9623 from freqtrade/dependabot/pip/develop/ast-comments-1.2.1
Bump ast-comments from 1.2.0 to 1.2.1
2024-01-01 08:36:31 +01:00
Matthias
256471dacd Merge pull request #9622 from freqtrade/dependabot/pip/develop/fastapi-0.108.0
Bump fastapi from 0.105.0 to 0.108.0
2024-01-01 08:36:17 +01:00
Matthias
ead7bd8c2e Merge pull request #9619 from freqtrade/dependabot/pip/develop/pymdown-extensions-10.7
Bump pymdown-extensions from 10.5 to 10.7
2024-01-01 08:34:42 +01:00
dependabot[bot]
80dbb0dd09 Bump ast-comments from 1.2.0 to 1.2.1
Bumps [ast-comments](https://github.com/t3rn0/ast-comments) from 1.2.0 to 1.2.1.
- [Release notes](https://github.com/t3rn0/ast-comments/releases)
- [Commits](https://github.com/t3rn0/ast-comments/compare/1.2.0...1.2.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-01-01 03:31:18 +00:00
dependabot[bot]
0552df2fe1 Bump fastapi from 0.105.0 to 0.108.0
Bumps [fastapi](https://github.com/tiangolo/fastapi) from 0.105.0 to 0.108.0.
- [Release notes](https://github.com/tiangolo/fastapi/releases)
- [Commits](https://github.com/tiangolo/fastapi/compare/0.105.0...0.108.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-01-01 03:31:14 +00:00
dependabot[bot]
e4b843405d Bump pymdown-extensions from 10.5 to 10.7
Bumps [pymdown-extensions](https://github.com/facelessuser/pymdown-extensions) from 10.5 to 10.7.
- [Release notes](https://github.com/facelessuser/pymdown-extensions/releases)
- [Commits](https://github.com/facelessuser/pymdown-extensions/compare/10.5...10.7)

---
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-01-01 03:30:41 +00:00
dependabot[bot]
d2802ad499 Bump ccxt from 4.1.98 to 4.2.2
Bumps [ccxt](https://github.com/ccxt/ccxt) from 4.1.98 to 4.2.2.
- [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.1.98...4.2.2)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-01-01 03:30:35 +00:00
dependabot[bot]
a9906f0788 Bump types-requests from 2.31.0.10 to 2.31.0.20231231
Bumps [types-requests](https://github.com/python/typeshed) from 2.31.0.10 to 2.31.0.20231231.
- [Commits](https://github.com/python/typeshed/commits)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-01-01 03:30:27 +00:00
Matthias
b17c0cd4a2 Add Note about minimal_roi time used
closes #6470
2023-12-31 18:34:09 +01:00
Matthias
0575e222b1 Fix random test failure due to missing backtesting cleanup 2023-12-31 16:15:18 +01:00
Matthias
1c5a699aef Fix typo and missing type def 2023-12-31 15:35:23 +01:00
Matthias
292ef85d96 Add additional, optional arguments to metadata files
closes #9517
2023-12-31 12:07:02 +01:00
Matthias
b3c9be1cd0 Refactor get_bt_resutlist to reduce code complexity 2023-12-31 10:15:55 +01:00
Matthias
13e329f176 Align methods 2023-12-31 10:07:31 +01:00
Matthias
b9f4a23548 Add documentation for kraken time-in-force 2023-12-31 09:56:35 +01:00
Matthias
9746d38060 Add post-only order test for kraken 2023-12-31 09:54:15 +01:00
Matthias
ae68d02038 Simplify test for kraken order creation 2023-12-31 09:53:57 +01:00
Matthias
9896ddf71e Add Kraken TimeInForce support
closes #9497
2023-12-31 09:47:39 +01:00
Matthias
0d4fcad285 Merge pull request #9613 from freqtrade/rpc/fix_telegram_forcebuy
Rpc/fix telegram forcebuy
2023-12-31 08:45:15 +01:00
Matthias
3e7d5bbae8 Merge pull request #9515 from stash86/bt-metrics
In partial exit, do full exit if remaining == 0
2023-12-30 16:39:46 +01:00
Robert Caulk
4d0ee014de Merge pull request #9602 from freqtrade/freqai_small_enhancements
Freqai small enhancements
2023-12-30 13:42:38 +01:00
Robert Caulk
ea8edbd23b Merge pull request #9552 from thojou/fix-freqai-populate-features-timerange
Fix duplicated data loading and timerange for populate_features
2023-12-30 13:42:08 +01:00
Matthias
f6de7d952a Add "wraps" handler to telegram wrapper 2023-12-30 10:44:02 +01:00
Matthias
3a87522070 Fix odd db caching problem in telegram 2023-12-30 10:42:09 +01:00
Matthias
7ccddb5d58 Fix typo 2023-12-30 10:15:28 +01:00
Matthias
e9c04debfb Fix tests due to new exit behavior 2023-12-30 08:58:44 +01:00
Matthias
5c8c53cff8 Merge pull request #9607 from freqtrade/new_release
New release 2023.12
2023-12-30 08:49:40 +01:00
Matthias
79e15591ef Improve condition for last exit
(should only show if we had subprofits taken).
2023-12-30 08:41:28 +01:00
Matthias
b62661d8cd Improve final exit message 2023-12-30 08:41:28 +01:00
Matthias
e5e3002d45 Simplify exit message 2023-12-30 08:41:28 +01:00
Matthias
e664527da6 Align backtest and bot method 2023-12-29 20:02:24 +01:00
Matthias
063b55d41a Fix doc typo 2023-12-29 20:02:24 +01:00
Matthias
ce7061c934 Bump version to 2024.1-dev 2023-12-29 18:29:13 +01:00
Matthias
846b7734e1 Bump version to 2023.12 2023-12-29 18:24:18 +01:00
Matthias
c72d18270e Merge branch 'stable' into new_release 2023-12-29 18:24:07 +01:00
Matthias
02836368fb add default --dist loadscope arg to pytest options 2023-12-28 11:07:41 +01:00
Matthias
d282027858 Bump CI python version to 3.11 2023-12-26 17:49:01 +01:00
Matthias
d78a5798e3 Fix further warning message due to old Parallel import 2023-12-25 16:09:42 +01:00
Matthias
16958eaef2 Update sklearn import 2023-12-25 16:04:02 +01:00
Matthias
2c5cca4be6 Reinforcement learning does support 3.11 just fine. 2023-12-25 15:58:33 +01:00
Matthias
d329ad28c2 Merge pull request #9590 from freqtrade/enable/xdist
add pytest-xdist to speed up tests
2023-12-25 15:57:06 +01:00
Matthias
2de86af51e Merge pull request #9601 from freqtrade/dependabot/pip/develop/pyarrow-14.0.2
Bump pyarrow from 14.0.1 to 14.0.2
2023-12-25 15:34:20 +01:00
Matthias
97780ee5bf Revert build-online to 3.9 for now 2023-12-25 15:07:06 +01:00
Matthias
e162f98cf5 Update pre-built wheels for pyarrow 2023-12-25 15:02:27 +01:00
Matthias
c6967b11be Align spelling of "cancelling" 2023-12-25 11:53:50 +01:00
Matthias
1e5d353cf7 use safe_value_fallback when parsing orders
closes #9591
2023-12-25 11:44:14 +01:00
Matthias
17a538b5ba Merge pull request #9596 from freqtrade/dependabot/pip/develop/lightgbm-4.2.0
Bump lightgbm from 4.1.0 to 4.2.0
2023-12-25 11:36:35 +01:00
Matthias
fc746214f6 Merge pull request #9600 from freqtrade/dependabot/pip/develop/ccxt-4.1.98
Bump ccxt from 4.1.91 to 4.1.98
2023-12-25 11:32:05 +01:00
dependabot[bot]
58432c1cfa Bump lightgbm from 4.1.0 to 4.2.0
Bumps [lightgbm](https://github.com/microsoft/LightGBM) from 4.1.0 to 4.2.0.
- [Release notes](https://github.com/microsoft/LightGBM/releases)
- [Commits](https://github.com/microsoft/LightGBM/compare/v4.1.0...v4.2.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-12-25 09:08:35 +00:00
Matthias
69119764bf Merge pull request #9594 from freqtrade/dependabot/pip/develop/xgboost-2.0.3
Bump xgboost from 2.0.2 to 2.0.3
2023-12-25 10:07:51 +01:00
Matthias
a20e641bcd Merge pull request #9595 from freqtrade/dependabot/pip/develop/pydantic-2.5.3
Bump pydantic from 2.5.2 to 2.5.3
2023-12-25 08:17:04 +01:00
Matthias
ad68eff8f4 Merge pull request #9592 from ArturoGamRod/docs/fix-typo
fix typo in stoploss_from_absolute code example doc
2023-12-25 08:16:40 +01:00
Matthias
68552a61bd Merge pull request #9598 from freqtrade/dependabot/pip/develop/mkdocs-material-9.5.3
Bump mkdocs-material from 9.5.2 to 9.5.3
2023-12-25 07:26:35 +01:00
Matthias
b7419305d4 Merge pull request #9599 from freqtrade/dependabot/pip/develop/ruff-0.1.9
Bump ruff from 0.1.8 to 0.1.9
2023-12-25 07:16:11 +01:00
dependabot[bot]
8cc2c5010a Bump pydantic from 2.5.2 to 2.5.3
Bumps [pydantic](https://github.com/pydantic/pydantic) from 2.5.2 to 2.5.3.
- [Release notes](https://github.com/pydantic/pydantic/releases)
- [Changelog](https://github.com/pydantic/pydantic/blob/v2.5.3/HISTORY.md)
- [Commits](https://github.com/pydantic/pydantic/compare/v2.5.2...v2.5.3)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-12-25 06:15:46 +00:00
Matthias
872154a6fc Merge pull request #9597 from freqtrade/dependabot/pip/develop/nbconvert-7.13.1
Bump nbconvert from 7.12.0 to 7.13.1
2023-12-25 07:15:07 +01:00
Matthias
c8ee8e82f9 Merge pull request #9593 from freqtrade/dependabot/pip/develop/uvicorn-0.25.0
Bump uvicorn from 0.24.0.post1 to 0.25.0
2023-12-25 07:14:37 +01:00
dependabot[bot]
5cbcf72501 Bump pyarrow from 14.0.1 to 14.0.2
Bumps [pyarrow](https://github.com/apache/arrow) from 14.0.1 to 14.0.2.
- [Commits](https://github.com/apache/arrow/compare/go/v14.0.1...go/v14.0.2)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-12-25 03:43:48 +00:00
dependabot[bot]
35876cf8ee Bump ccxt from 4.1.91 to 4.1.98
Bumps [ccxt](https://github.com/ccxt/ccxt) from 4.1.91 to 4.1.98.
- [Release notes](https://github.com/ccxt/ccxt/releases)
- [Changelog](https://github.com/ccxt/ccxt/blob/master/CHANGELOG.md)
- [Commits](https://github.com/ccxt/ccxt/compare/4.1.91...4.1.98)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-12-25 03:43:41 +00:00
dependabot[bot]
ac60871ff9 Bump ruff from 0.1.8 to 0.1.9
Bumps [ruff](https://github.com/astral-sh/ruff) from 0.1.8 to 0.1.9.
- [Release notes](https://github.com/astral-sh/ruff/releases)
- [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md)
- [Commits](https://github.com/astral-sh/ruff/compare/v0.1.8...v0.1.9)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-12-25 03:43:34 +00:00
dependabot[bot]
866e34a983 Bump mkdocs-material from 9.5.2 to 9.5.3
Bumps [mkdocs-material](https://github.com/squidfunk/mkdocs-material) from 9.5.2 to 9.5.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.5.2...9.5.3)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-12-25 03:43:17 +00:00
dependabot[bot]
7107971820 Bump nbconvert from 7.12.0 to 7.13.1
Bumps [nbconvert](https://github.com/jupyter/nbconvert) from 7.12.0 to 7.13.1.
- [Release notes](https://github.com/jupyter/nbconvert/releases)
- [Changelog](https://github.com/jupyter/nbconvert/blob/main/CHANGELOG.md)
- [Commits](https://github.com/jupyter/nbconvert/compare/v7.12.0...v7.13.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-12-25 03:43:07 +00:00
dependabot[bot]
3484590640 Bump xgboost from 2.0.2 to 2.0.3
Bumps [xgboost](https://github.com/dmlc/xgboost) from 2.0.2 to 2.0.3.
- [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.0.2...v2.0.3)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-12-25 03:42:48 +00:00
dependabot[bot]
971b7d074c Bump uvicorn from 0.24.0.post1 to 0.25.0
Bumps [uvicorn](https://github.com/encode/uvicorn) from 0.24.0.post1 to 0.25.0.
- [Release notes](https://github.com/encode/uvicorn/releases)
- [Changelog](https://github.com/encode/uvicorn/blob/master/CHANGELOG.md)
- [Commits](https://github.com/encode/uvicorn/compare/0.24.0.post1...0.25.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-12-25 03:42:42 +00:00
agamboa-caylent
ec89aad10b fix typo in stoploss_from_absolute code example 2023-12-24 21:02:22 -06:00
Matthias
fc13a99b33 Use intelligent scheduling to improve online test performance 2023-12-24 16:27:18 +01:00
Matthias
03fb204408 use Loadscope to improve parallel test performance 2023-12-24 13:57:42 +01:00
Matthias
0a96aa69b9 Only run parallel on online tests 2023-12-24 12:15:36 +01:00
Matthias
ddbfce01b5 Show slowest tests 2023-12-24 12:13:02 +01:00
Matthias
12e75e849d Don't do coverge on --longrun tests 2023-12-24 12:09:46 +01:00
Matthias
916a847639 add pytest-xdist to speed up tests 2023-12-24 08:30:21 +01:00
Matthias
a39b329e3b Fix line-length 2023-12-23 15:30:24 +01:00
Matthias
68f9402384 Fix further test 2023-12-23 15:19:56 +01:00
Matthias
600e311b3e Fix test test_handle_stoploss_on_exchange_custom_stop 2023-12-23 15:19:56 +01:00
Matthias
33bd433c22 Don't run against all orders, only consider open sl orders. 2023-12-23 15:19:56 +01:00
Matthias
1db4732648 Fix some more tests 2023-12-23 15:19:56 +01:00
Matthias
ae3f62cf9b Fix RPC tests 2023-12-23 15:19:56 +01:00
Matthias
cbfebd397c Use a trade for test that actually has an open stop order 2023-12-23 15:19:41 +01:00
Matthias
c6ffe82a7a Update more tests 2023-12-23 15:19:41 +01:00
Matthias
6427144934 Fix stoploss test 2023-12-23 15:19:41 +01:00
Matthias
c35b308ada Fix some tests 2023-12-23 15:19:41 +01:00
Matthias
28e2bfaf1c Fix types of "has" calls 2023-12-23 15:19:41 +01:00
Matthias
15058d3ce6 Add type hints to manage_trade_orders,
fix content ...
2023-12-23 15:19:41 +01:00
Matthias
931704abcc Merge branch 'develop' into feature/update_sl_order_mgt 2023-12-23 15:19:15 +01:00
Matthias
4769b50709 Fix RPC tests 2023-12-23 15:17:26 +01:00
Matthias
18dd9cf803 Use a trade for test that actually has an open stop order 2023-12-23 15:17:26 +01:00
Matthias
def204448a Merge pull request #9589 from freqtrade/update/pre-commit-hooks
Update pre-commit hooks
2023-12-23 10:06:49 +01:00
Matthias
63e652619f Bump mypy to 1.8.0 2023-12-23 09:11:40 +01:00
Matthias
3cb4b10656 Specify python version for pre-commit update 2023-12-23 09:08:55 +01:00
xmatthias
23c3757c7a chore: update pre-commit hooks 2023-12-23 08:04:51 +00:00
Matthias
8234879b58 stoploss_order_id removal tests 2023-12-22 17:38:14 +01:00
Matthias
b33a9059ab Fix some more tests 2023-12-22 17:35:02 +01:00
Matthias
13780d5963 Remove further usage 2023-12-22 17:22:33 +01:00
Matthias
279082b202 Merge branch 'develop' into pr/Axel-CH/9267 2023-12-22 17:21:05 +01:00
Matthias
39b2a096ab Ignore adjust_trade values that would invert position 2023-12-22 07:07:05 +01:00
Matthias
b20aee7653 Merge pull request #9585 from freqtrade/update/pre-commit-hooks
Update pre-commit hooks
2023-12-22 06:27:58 +01:00
Matthias
4d7c4352a7 Merge pull request #9519 from freqtrade/ci_mac_13
Add macos-13 to ci matrix
2023-12-21 20:24:08 +01:00
xmatthias
a5c914951f chore: update pre-commit hooks 2023-12-21 19:18:40 +00:00
Matthias
9ab08d513a Update committer in pre-commit workflow 2023-12-21 20:13:52 +01:00
Matthias
87ce7dc02c Reduce permissions 2023-12-21 20:12:23 +01:00
Matthias
3c7c4bc02f Use repo scoped token 2023-12-21 19:54:11 +01:00
Matthias
0484b891f1 Add tech maintenance label 2023-12-21 19:39:45 +01:00
Matthias
71689d9d6f Allow write access to action to allow creating the branch 2023-12-21 19:34:21 +01:00
Matthias
881247a823 use isinstance for type checks 2023-12-21 19:26:52 +01:00
Matthias
d26154f994 Import logging ... 2023-12-21 19:26:36 +01:00
Matthias
0e14dd6190 Set proper log-level for test 2023-12-21 19:20:27 +01:00
Matthias
3676514ba6 Add pre-commit auto-update workflow 2023-12-21 19:18:50 +01:00
Matthias
9ec23a0292 Improve rpc typing 2023-12-21 18:14:43 +01:00
Matthias
1272a15c35 Properly name Entry / exit types 2023-12-21 18:11:49 +01:00
Matthias
a3a175e332 Reduce logging verbosity message in webhooks 2023-12-21 06:49:26 +01:00
Stefano Ariestasia
f7c7990aff Merge branch 'freqtrade:develop' into bt-metrics 2023-12-20 20:33:45 +09:00
Matthias
71b777ef34 Fix missing rm line 2023-12-19 21:51:31 +01:00
Matthias
c4cd547451 Merge pull request #9579 from slimatic/develop
typo (configuration.md) fixed value USDT value  in example for clarity
2023-12-19 19:57:34 +01:00
Matthias
b4e8122fd3 Attempt to properly remove 3.12 symlinks 2023-12-19 19:55:18 +01:00
Thomas Joußen
3f44f56f6f Remove bool from get_required_startup because its unused. 2023-12-19 17:30:15 +00:00
Thomas Joußen
cd28244cf1 Add and optimized test cases to verify consitent timerange behaviour within freqai. 2023-12-19 17:14:02 +00:00
slimatic
b1393f1bd4 (configuration.md) fixed value USDT value in example for clarity 2023-12-19 10:58:22 -05:00
Matthias
34c5c68a91 Add macos-13 to ci matrix 2023-12-19 06:41:54 +01:00
Matthias
c9a018cf0e Improve output if a strategy wasn't found in the backtest result 2023-12-19 06:30:40 +01:00
Matthias
94363061ae Attempt fix timerange problem 2023-12-18 20:06:49 +00:00
Matthias
4f2d7b858f Slightly enhance logging for clarity 2023-12-18 20:06:49 +00:00
Thomas Joußen
663b1e11f8 Add timeframe info into 'increase startup_candle_count' log message 2023-12-18 20:06:49 +00:00
Thomas Joußen
2d6a49013f Fix duplicated data loading and timerange for populate_features 2023-12-18 20:06:49 +00:00
Matthias
0333abcbdc Merge pull request #9576 from freqtrade/simplify-freqai-example
Make freqai example strat *even* simpler
2023-12-18 20:01:02 +01:00
Matthias
0440b3ef75 Merge pull request #9577 from freqtrade/feat/add-random-forest-classifier
Add SKLearnRandomForestClassifier
2023-12-18 18:15:55 +01:00
Matthias
d9ed8c6560 Merge pull request #9568 from freqtrade/dependabot/pip/develop/ccxt-4.1.91
Bump ccxt from 4.1.84 to 4.1.91
2023-12-18 18:14:46 +01:00
robcaulk
2f2467256c feat: add SKLearnRandomForestClassifier 2023-12-18 12:56:04 +01:00
robcaulk
26f0fe2383 make example strat *even* simpler and make sure it buys and sells a lot ;) 2023-12-18 12:38:34 +01:00
Matthias
5e3da30ab9 Fix remaining bittrex instances 2023-12-18 07:15:24 +01:00
Matthias
651d2c06b9 Update tests to use new file 2023-12-18 07:15:24 +01:00
Matthias
b371593084 Move previous test config to tests 2023-12-18 07:15:24 +01:00
Matthias
3096cddbcf further remove bittrex from docs 2023-12-18 07:15:24 +01:00
Matthias
5bbe6aacfd Remove Bittrex subclass 2023-12-18 07:15:24 +01:00
Matthias
fe4bf271b4 Remove futher bittrex tests 2023-12-18 07:15:24 +01:00
Matthias
0d3d1e6d9a Remove bittrex from more tests 2023-12-18 07:15:24 +01:00
dependabot[bot]
57e01329ce Bump ccxt from 4.1.84 to 4.1.91
Bumps [ccxt](https://github.com/ccxt/ccxt) from 4.1.84 to 4.1.91.
- [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.1.84...4.1.91)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-12-18 05:49:40 +00:00
Matthias
99359a7f85 Merge pull request #9575 from freqtrade/dependabot/github_actions/develop/actions/download-artifact-4
Bump actions/download-artifact from 3 to 4
2023-12-18 06:37:53 +01:00
Matthias
5f0932f5ed Merge pull request #9574 from freqtrade/dependabot/github_actions/develop/actions/upload-artifact-4
Bump actions/upload-artifact from 3 to 4
2023-12-18 06:37:35 +01:00
Matthias
fece88e7cd Merge pull request #9570 from freqtrade/dependabot/pip/develop/fastapi-0.105.0
Bump fastapi from 0.104.1 to 0.105.0
2023-12-18 06:36:42 +01:00
Matthias
c8eb2523ac Merge pull request #9564 from freqtrade/dependabot/pip/develop/torch-2.1.2
Bump torch from 2.1.1 to 2.1.2
2023-12-18 06:35:15 +01:00
Matthias
964b439119 Merge pull request #9569 from freqtrade/dependabot/pip/develop/isort-5.13.2
Bump isort from 5.13.0 to 5.13.2
2023-12-18 06:34:51 +01:00
Matthias
ee4f4f2d0d Merge pull request #9566 from freqtrade/dependabot/pip/develop/ruff-0.1.8
Bump ruff from 0.1.7 to 0.1.8
2023-12-18 06:34:31 +01:00
Matthias
7c215688c0 Merge pull request #9565 from freqtrade/dependabot/pip/develop/python-rapidjson-1.14
Bump python-rapidjson from 1.13 to 1.14
2023-12-18 06:33:40 +01:00
Matthias
087ca2bd4a Merge pull request #9571 from freqtrade/dependabot/pip/develop/psutil-5.9.7
Bump psutil from 5.9.6 to 5.9.7
2023-12-18 06:33:20 +01:00
Matthias
6193df36a3 Merge pull request #9573 from freqtrade/dependabot/pip/develop/mkdocs-material-9.5.2
Bump mkdocs-material from 9.5.1 to 9.5.2
2023-12-18 06:33:08 +01:00
Matthias
893b43766f Merge pull request #9567 from freqtrade/dependabot/pip/develop/technical-1.4.2
Bump technical from 1.4.1 to 1.4.2
2023-12-18 06:32:56 +01:00
dependabot[bot]
a70ca6f612 Bump actions/download-artifact from 3 to 4
Bumps [actions/download-artifact](https://github.com/actions/download-artifact) from 3 to 4.
- [Release notes](https://github.com/actions/download-artifact/releases)
- [Commits](https://github.com/actions/download-artifact/compare/v3...v4)

---
updated-dependencies:
- dependency-name: actions/download-artifact
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-12-18 03:50:19 +00:00
dependabot[bot]
e5c783d2db Bump actions/upload-artifact from 3 to 4
Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 3 to 4.
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](https://github.com/actions/upload-artifact/compare/v3...v4)

---
updated-dependencies:
- dependency-name: actions/upload-artifact
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-12-18 03:50:16 +00:00
dependabot[bot]
e1b652d890 Bump mkdocs-material from 9.5.1 to 9.5.2
Bumps [mkdocs-material](https://github.com/squidfunk/mkdocs-material) from 9.5.1 to 9.5.2.
- [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.1...9.5.2)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-12-18 03:17:18 +00:00
dependabot[bot]
4e98b5f710 Bump psutil from 5.9.6 to 5.9.7
Bumps [psutil](https://github.com/giampaolo/psutil) from 5.9.6 to 5.9.7.
- [Changelog](https://github.com/giampaolo/psutil/blob/master/HISTORY.rst)
- [Commits](https://github.com/giampaolo/psutil/compare/release-5.9.6...release-5.9.7)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-12-18 03:17:09 +00:00
dependabot[bot]
901b3f6fe7 Bump fastapi from 0.104.1 to 0.105.0
Bumps [fastapi](https://github.com/tiangolo/fastapi) from 0.104.1 to 0.105.0.
- [Release notes](https://github.com/tiangolo/fastapi/releases)
- [Commits](https://github.com/tiangolo/fastapi/compare/0.104.1...0.105.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-12-18 03:17:03 +00:00
dependabot[bot]
d0a9d927dd Bump isort from 5.13.0 to 5.13.2
Bumps [isort](https://github.com/pycqa/isort) from 5.13.0 to 5.13.2.
- [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.0...5.13.2)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-12-18 03:16:57 +00:00
dependabot[bot]
16eb95c71d Bump technical from 1.4.1 to 1.4.2
Bumps [technical](https://github.com/freqtrade/technical) from 1.4.1 to 1.4.2.
- [Release notes](https://github.com/freqtrade/technical/releases)
- [Commits](https://github.com/freqtrade/technical/compare/1.4.1...1.4.2)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-12-18 03:16:40 +00:00
dependabot[bot]
054ed0a7b6 Bump ruff from 0.1.7 to 0.1.8
Bumps [ruff](https://github.com/astral-sh/ruff) from 0.1.7 to 0.1.8.
- [Release notes](https://github.com/astral-sh/ruff/releases)
- [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md)
- [Commits](https://github.com/astral-sh/ruff/compare/v0.1.7...v0.1.8)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-12-18 03:16:36 +00:00
dependabot[bot]
82853e37a1 Bump python-rapidjson from 1.13 to 1.14
Bumps [python-rapidjson](https://github.com/python-rapidjson/python-rapidjson) from 1.13 to 1.14.
- [Changelog](https://github.com/python-rapidjson/python-rapidjson/blob/master/CHANGES.rst)
- [Commits](https://github.com/python-rapidjson/python-rapidjson/compare/v1.13...v1.14)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-12-18 03:16:26 +00:00
dependabot[bot]
81c6336e11 Bump torch from 2.1.1 to 2.1.2
Bumps [torch](https://github.com/pytorch/pytorch) from 2.1.1 to 2.1.2.
- [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.1.1...v2.1.2)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-12-18 03:16:14 +00:00
Matthias
6404bd8b2b Merge pull request #9561 from freqtrade/revert/9450-freqai-startup-candle-mr
Revert "Merge pull request #9450 from freqtrade/fix/startup-candle-count"
2023-12-17 19:42:06 +01:00
robcaulk
9a9a6eaa63 Revert "Merge pull request #9450 from freqtrade/fix/startup-candle-count"
This reverts commit 15771043f7, reversing
changes made to b417a0297b.
2023-12-17 17:44:15 +01:00
Matthias
67cdab6ee9 Provide strategy timeframe via API 2023-12-17 15:03:11 +01:00
Matthias
546ea430c9 Merge pull request #9558 from freqtrade/pyproject_toml
Pyproject toml, improve release CI
2023-12-17 13:10:18 +01:00
Matthias
4cc4f0ffa2 Merge pull request #9559 from stevanStevic/improve-no-hyperopt-result-log
Improve log message when no good hyperopt result is found
2023-12-17 10:03:36 +01:00
Matthias
58470ba9d0 Fix missing files in wheels 2023-12-17 09:30:09 +01:00
Stevan Stevic
c580e8783f fixup 2023-12-16 22:36:56 +01:00
Stevan Stevic
bc1ad3acbd Improve logging 2023-12-16 22:09:02 +01:00
Matthias
d2e328b8bd Update artifact name 2023-12-16 21:32:36 +01:00
Matthias
93e9c4fa65 Update job names in ci.yml 2023-12-16 21:14:06 +01:00
Matthias
8d231dbf31 Update build-system to use "build" insead of "setup.py" 2023-12-16 20:54:30 +01:00
Matthias
b178cc5f31 Migrate from setup.cfg to pyproject.toml 2023-12-16 20:51:46 +01:00
Matthias
6ee0f16e4f Migrate flake8 config to pyproject.toml 2023-12-16 20:32:37 +01:00
Matthias
1d701967b7 exclude tests from build 2023-12-16 20:27:47 +01:00
Matthias
d6b43c5eed re-work deploy CI 2023-12-16 20:06:18 +01:00
Matthias
3670699ea2 Add trusted publishing for next release 2023-12-16 17:31:48 +01:00
Matthias
9b11091fc7 Merge pull request #9555 from amargedon/mapping-btc
Add FIAT mapping for BTC
2023-12-16 08:13:46 +01:00
amargedon
58dfffe87a Add FIAT mapping for BTC 2023-12-15 09:09:31 +01:00
Matthias
e573409925 Add windows ta-lib 3.12 wheels 2023-12-15 07:02:56 +01:00
Matthias
e3fda16d16 Don't overpopulate points at the first iteration
improves hyperopt-performance quite some.
2023-12-15 06:19:50 +01:00
Matthias
9e2e60e7ad Correct conditions for remaining stake checking 2023-12-14 20:34:58 +01:00
Matthias
bb2024f789 Add "full partial exit" logic to backtesting 2023-12-14 20:08:03 +01:00
Matthias
e96f4f0e53 Improve adjust_trade_position documentation 2023-12-14 20:06:45 +01:00
Matthias
71d3572c27 Support webserver strategy without max_open_trades 2023-12-14 18:17:10 +01:00
Matthias
6218d732b1 Only download tradable pairs
(excludes futures pairs on spot configurations and viceversa).

closes #9548
2023-12-14 07:13:46 +01:00
Matthias
62667d123f Merge pull request #9540 from freqtrade/fix/issue_9538
Prevent config modification during webserver startup
2023-12-14 06:36:50 +01:00
Matthias
cfd5af67ca Add max-open-trades param to get_trade_stake_amount 2023-12-13 06:51:26 +01:00
Matthias
47a952e41c Don't use config['stake_amount'] in wallets 2023-12-12 22:43:46 +01:00
Matthias
c9f43587ec Bump binance leverage tiers 2023-12-12 21:30:52 +01:00
Matthias
e79a58e1c4 Add test case to verify behavior in #9432 2023-12-12 19:59:56 +01:00
Matthias
c62e52c759 Add test for dp_get_required_startup 2023-12-12 19:48:17 +01:00
Matthias
5ab61d9da4 Improve missing data output 2023-12-12 07:08:26 +01:00
Matthias
55efaec83d Merge pull request #9522 from freqtrade/bt/improve_futures_speed
Improve funding fee calculation
2023-12-12 06:33:57 +01:00
Matthias
c5c2c8c185 Enforce kwargs for preliminary 2023-12-11 20:35:49 +01:00
Matthias
755ce3a858 Prevent config modification during webserver startup 2023-12-11 20:32:37 +01:00
Matthias
105cd99395 use max_open_trades from straetgy instead of config 2023-12-11 19:52:49 +01:00
Matthias
db7799d2fb Use variable instead of config for startup_candle_count 2023-12-11 19:42:13 +01:00
Matthias
30f94ef5b7 Use LocalTrade for typehint 2023-12-11 19:12:08 +01:00
Matthias
6c259ddca1 Merge pull request #9536 from freqtrade/dependabot/pip/develop/ccxt-4.1.84
Bump ccxt from 4.1.76 to 4.1.84
2023-12-11 18:18:44 +01:00
Matthias
0f82ea8767 Merge pull request #9533 from freqtrade/dependabot/pip/develop/pre-commit-3.6.0
Bump pre-commit from 3.5.0 to 3.6.0
2023-12-11 15:45:51 +01:00
Matthias
eac5d53a64 Add mock to backtest adjust position 2023-12-11 06:48:05 +01:00
dependabot[bot]
4b43ccae11 Bump ccxt from 4.1.76 to 4.1.84
Bumps [ccxt](https://github.com/ccxt/ccxt) from 4.1.76 to 4.1.84.
- [Release notes](https://github.com/ccxt/ccxt/releases)
- [Changelog](https://github.com/ccxt/ccxt/blob/master/CHANGELOG.md)
- [Commits](https://github.com/ccxt/ccxt/compare/4.1.76...4.1.84)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-12-11 05:29:11 +00:00
Matthias
8a2763d275 Merge pull request #9532 from freqtrade/dependabot/pip/develop/pandas-2.1.4
Bump pandas from 2.1.3 to 2.1.4
2023-12-11 06:28:16 +01:00
dependabot[bot]
4b3230689c Bump pre-commit from 3.5.0 to 3.6.0
Bumps [pre-commit](https://github.com/pre-commit/pre-commit) from 3.5.0 to 3.6.0.
- [Release notes](https://github.com/pre-commit/pre-commit/releases)
- [Changelog](https://github.com/pre-commit/pre-commit/blob/main/CHANGELOG.md)
- [Commits](https://github.com/pre-commit/pre-commit/compare/v3.5.0...v3.6.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>
2023-12-11 05:26:12 +00:00
Matthias
aa86c49640 Merge pull request #9529 from freqtrade/dependabot/pip/develop/ruff-0.1.7
Bump ruff from 0.1.6 to 0.1.7
2023-12-11 06:25:25 +01:00
Matthias
1adc8836dd Merge pull request #9530 from freqtrade/dependabot/pip/develop/mkdocs-material-9.5.1
Bump mkdocs-material from 9.4.14 to 9.5.1
2023-12-11 06:22:05 +01:00
Matthias
92993c0c4c Merge pull request #9527 from freqtrade/dependabot/pip/develop/technical-1.4.1
Bump technical from 1.4.0 to 1.4.1
2023-12-11 06:21:53 +01:00
Matthias
9b2c116d9b Merge pull request #9528 from freqtrade/dependabot/pip/develop/isort-5.13.0
Bump isort from 5.12.0 to 5.13.0
2023-12-11 06:21:42 +01:00
Matthias
2ad85a6957 Merge pull request #9526 from freqtrade/dependabot/github_actions/develop/actions/setup-python-5
Bump actions/setup-python from 4 to 5
2023-12-11 06:21:20 +01:00
dependabot[bot]
a0e92f5a47 Bump pandas from 2.1.3 to 2.1.4
Bumps [pandas](https://github.com/pandas-dev/pandas) from 2.1.3 to 2.1.4.
- [Release notes](https://github.com/pandas-dev/pandas/releases)
- [Commits](https://github.com/pandas-dev/pandas/compare/v2.1.3...v2.1.4)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-12-11 03:53:12 +00:00
dependabot[bot]
17f0697c43 Bump mkdocs-material from 9.4.14 to 9.5.1
Bumps [mkdocs-material](https://github.com/squidfunk/mkdocs-material) from 9.4.14 to 9.5.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.4.14...9.5.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-12-11 03:52:56 +00:00
dependabot[bot]
199e3f91f2 Bump ruff from 0.1.6 to 0.1.7
Bumps [ruff](https://github.com/astral-sh/ruff) from 0.1.6 to 0.1.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/v0.1.6...v0.1.7)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-12-11 03:52:51 +00:00
dependabot[bot]
cc14cf23b1 Bump isort from 5.12.0 to 5.13.0
Bumps [isort](https://github.com/pycqa/isort) from 5.12.0 to 5.13.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.12.0...5.13.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-12-11 03:52:41 +00:00
dependabot[bot]
327f750ead Bump technical from 1.4.0 to 1.4.1
Bumps [technical](https://github.com/freqtrade/technical) from 1.4.0 to 1.4.1.
- [Release notes](https://github.com/freqtrade/technical/releases)
- [Commits](https://github.com/freqtrade/technical/compare/1.4.0...1.4.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-12-11 03:52:31 +00:00
dependabot[bot]
a304080c08 Bump actions/setup-python from 4 to 5
Bumps [actions/setup-python](https://github.com/actions/setup-python) from 4 to 5.
- [Release notes](https://github.com/actions/setup-python/releases)
- [Commits](https://github.com/actions/setup-python/compare/v4...v5)

---
updated-dependencies:
- dependency-name: actions/setup-python
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-12-11 03:33:18 +00:00
Robert Caulk
020d4b5b4d Merge pull request #9523 from freqtrade/fix/freqai-append-bug
Bugfix: ensure zeros are properly appended after each inference
2023-12-10 17:29:51 +01:00
robcaulk
78cb1e608f fix: ensure we have a row of zeros appended (not the function) 2023-12-10 15:30:19 +01:00
Matthias
b84a2fcac7 Merge pull request #9521 from freqtrade/robcaulk-patch-1
Ensure the documentation gets read
2023-12-10 14:21:59 +01:00
Robert Caulk
c0119d7baa Merge pull request #9449 from freqtrade/dependabot/pip/develop/torch-2.1.1
Bump torch from 2.0.1 to 2.1.1
2023-12-10 14:11:01 +01:00
Matthias
0bd513012a enhance further test for funding-fee checking 2023-12-10 14:00:21 +01:00
Matthias
3f6cd9ee51 Patch funding_fee calculation for unrelated test 2023-12-10 14:00:06 +01:00
Matthias
8964c138f1 Call funding fee calculation whenever a trade is closed 2023-12-10 14:00:06 +01:00
Matthias
ef23f0fcba Fix test to account for new funding_fee count 2023-12-10 14:00:06 +01:00
Matthias
074343f0f1 Don't calculate funding_fees on every iteration 2023-12-10 14:00:06 +01:00
Matthias
966eb59fd3 Extract funding fee calculation to separate method 2023-12-10 14:00:06 +01:00
Matthias
778bd7b3b0 enhance further test for funding-fee checking 2023-12-10 13:57:52 +01:00
Matthias
b4cd46d6db Further improve funding_Fee test 2023-12-10 13:21:05 +01:00
Matthias
1d73b57e8c Extract some assert values from bt test 2023-12-10 12:57:55 +01:00
Robert Caulk
476703bf76 Update data_kitchen.py
Ensure our exception is raised when users dont download the data
2023-12-10 12:26:39 +01:00
Stefano
9f1599b7f0 fix pre-commit 2023-12-10 17:34:02 +09:00
Stefano
e541c95c46 fix partial exit test 2023-12-10 17:27:24 +09:00
Matthias
cd09d3567f Add spy test on funding_fees in backtesting 2023-12-09 19:42:13 +01:00
Matthias
4c25e9d21a Merge pull request #9387 from freqtrade/dependabot/pip/develop/scikit-learn-1.3.2
Bump scikit-learn from 1.1.3 to 1.3.2
2023-12-09 14:20:15 +01:00
Matthias
dd08c134b4 Remove macos 13 ci again 2023-12-09 13:40:00 +01:00
Matthias
aa8bb27cf0 Merge branch 'develop' into dependabot/pip/develop/scikit-learn-1.3.2 2023-12-09 13:39:46 +01:00
Matthias
d428d48393 Ease install dependencies for scikit-learn 2023-12-09 12:12:52 +01:00
Matthias
3bdfa85237 Update scikit-optimize to ft-scikit-optimize
Compatibility fork of scikit-optimize.
2023-12-09 12:12:30 +01:00
Matthias
95a824fbe7 Merge pull request #9509 from freqtrade/ci_mac_13
macos-13 CI
2023-12-09 07:55:42 +01:00
Matthias
bb85efd6ad Add test for informative weekly merging
closes #9518
2023-12-08 20:41:57 +01:00
Matthias
7321a14c35 Fix generate-test-data for 1w data 2023-12-08 20:38:41 +01:00
Matthias
2745a5d334 Rename informative_pair test 2023-12-08 20:07:44 +01:00
Stefano Ariestasia
bf8b3e831d Merge branch 'freqtrade:develop' into bt-metrics 2023-12-07 15:41:09 +09:00
Matthias
d123d3bb82 Completely mock Torch on macos
we already skip tests - now we also need to skip it's imports.
2023-12-07 07:25:34 +01:00
Matthias
b14873400d Fix odd import in freqai tests 2023-12-07 07:15:05 +01:00
Robert Caulk
d9b95a4c27 Merge pull request #9514 from freqtrade/freqai/xgboost_activate
Remove "activate" kwarg to xgboost calls
2023-12-06 21:18:07 +01:00
Matthias
71178ff1d2 Remove "activate" activator
they raise warnings as they're unused.
2023-12-06 19:48:19 +01:00
Matthias
d3d9f3281e Fix torch logging setup mess 2023-12-06 19:26:09 +01:00
Matthias
3b4b833dd0 Remove unused mock 2023-12-06 18:22:28 +01:00
Matthias
fcc87399cd Merge pull request #9505 from freqtrade/fix/merge-warning
Fix multiple new Pandas 2.1 future warnings in FreqAI startup
2023-12-05 19:25:57 +01:00
Matthias
654f8a7573 Merge pull request #9508 from freqtrade/dependabot/pip/develop/nbconvert-7.12.0
Bump nbconvert from 7.11.0 to 7.12.0
2023-12-05 19:24:22 +01:00
Matthias
2fdb9663d7 Merge branch 'develop' into fix/merge-warning 2023-12-05 18:12:34 +01:00
dependabot[bot]
3739a10735 Bump nbconvert from 7.11.0 to 7.12.0
Bumps [nbconvert](https://github.com/jupyter/nbconvert) from 7.11.0 to 7.12.0.
- [Release notes](https://github.com/jupyter/nbconvert/releases)
- [Changelog](https://github.com/jupyter/nbconvert/blob/main/CHANGELOG.md)
- [Commits](https://github.com/jupyter/nbconvert/compare/v7.11.0...v7.12.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-12-05 17:10:09 +00:00
Matthias
9a425af76f Remove unnecessary conditions in Ci run 2023-12-05 18:08:24 +01:00
Matthias
3c48208b31 Fix cache keys 2023-12-05 18:08:24 +01:00
Matthias
68db8d0201 install libomp 2023-12-05 18:08:24 +01:00
Matthias
2207773678 Attempt more granular cache for macos 2023-12-05 18:08:24 +01:00
Matthias
cbe6d52a73 Try macos-13 CI 2023-12-05 18:08:24 +01:00
Matthias
b7fc0190f7 Merge pull request #9512 from freqtrade/revert-9500-dependabot/pip/develop/tables-3.9.2
Revert "Bump tables from 3.9.1 to 3.9.2"
2023-12-05 18:04:56 +01:00
Matthias
4061eaf888 Remove online tests for bittrex 2023-12-05 18:03:55 +01:00
Matthias
ef042ae5ec Remove exchange tests on bittrex 2023-12-05 18:03:48 +01:00
Matthias
6ee792069d Remove bitrex-specific section 2023-12-05 18:03:34 +01:00
Matthias
46c81d7018 Revert "Bump tables from 3.9.1 to 3.9.2" 2023-12-05 17:04:16 +01:00
Robert Caulk
caac77c90b Update data_drawer.py 2023-12-05 12:16:08 +01:00
Stefano Ariestasia
90332128b1 allow trade to be closed via partial exit call if remaining amount is exactly 0 2023-12-05 17:10:15 +09:00
Matthias
af05e3d747 Merge pull request #9506 from freqtrade/dependabot/pip/develop/ccxt-4.1.76
Bump ccxt from 4.1.75 to 4.1.76
2023-12-04 20:48:37 +01:00
dependabot[bot]
59a287106d Bump ccxt from 4.1.75 to 4.1.76
Bumps [ccxt](https://github.com/ccxt/ccxt) from 4.1.75 to 4.1.76.
- [Release notes](https://github.com/ccxt/ccxt/releases)
- [Changelog](https://github.com/ccxt/ccxt/blob/master/CHANGELOG.md)
- [Commits](https://github.com/ccxt/ccxt/compare/4.1.75...4.1.76)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-12-04 18:21:30 +00:00
robcaulk
8b5e6bf9be chore: fix pandas warning about merging on datetime. fix pandas warning about inconsistent key lists in concat 2023-12-04 16:23:55 +01:00
Matthias
d9882978d5 Merge pull request #9500 from freqtrade/dependabot/pip/develop/tables-3.9.2
Bump tables from 3.9.1 to 3.9.2
2023-12-04 07:25:18 +01:00
Matthias
04f2b7bad6 Add support for different timeInForce for bybit 2023-12-04 07:23:52 +01:00
Matthias
8597709b2e Merge pull request #9501 from freqtrade/dependabot/pip/develop/ccxt-4.1.75
Bump ccxt from 4.1.66 to 4.1.75
2023-12-04 06:33:38 +01:00
Matthias
2fea75e312 Merge pull request #9498 from freqtrade/dependabot/github_actions/develop/pypa/gh-action-pypi-publish-1.8.11
Bump pypa/gh-action-pypi-publish from 1.8.10 to 1.8.11
2023-12-04 06:33:17 +01:00
Matthias
511e4d16d5 Merge pull request #9502 from freqtrade/dependabot/pip/develop/python-telegram-bot-20.7
Bump python-telegram-bot from 20.6 to 20.7
2023-12-04 06:32:46 +01:00
dependabot[bot]
e0f780f10e Bump python-telegram-bot from 20.6 to 20.7
Bumps [python-telegram-bot](https://github.com/python-telegram-bot/python-telegram-bot) from 20.6 to 20.7.
- [Release notes](https://github.com/python-telegram-bot/python-telegram-bot/releases)
- [Changelog](https://github.com/python-telegram-bot/python-telegram-bot/blob/master/CHANGES.rst)
- [Commits](https://github.com/python-telegram-bot/python-telegram-bot/compare/v20.6...v20.7)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-12-04 03:35:49 +00:00
dependabot[bot]
44689d058b Bump ccxt from 4.1.66 to 4.1.75
Bumps [ccxt](https://github.com/ccxt/ccxt) from 4.1.66 to 4.1.75.
- [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.1.66...4.1.75)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-12-04 03:35:42 +00:00
dependabot[bot]
1431b2b44a Bump tables from 3.9.1 to 3.9.2
Bumps [tables](https://github.com/PyTables/PyTables) from 3.9.1 to 3.9.2.
- [Release notes](https://github.com/PyTables/PyTables/releases)
- [Changelog](https://github.com/PyTables/PyTables/blob/master/RELEASE_NOTES.rst)
- [Commits](https://github.com/PyTables/PyTables/compare/v3.9.1...v3.9.2)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-12-04 03:35:27 +00:00
dependabot[bot]
106bda51d4 Bump pypa/gh-action-pypi-publish from 1.8.10 to 1.8.11
Bumps [pypa/gh-action-pypi-publish](https://github.com/pypa/gh-action-pypi-publish) from 1.8.10 to 1.8.11.
- [Release notes](https://github.com/pypa/gh-action-pypi-publish/releases)
- [Commits](https://github.com/pypa/gh-action-pypi-publish/compare/v1.8.10...v1.8.11)

---
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>
2023-12-04 03:10:11 +00:00
Matthias
90e4eb59b2 Improve multi-strategy backtest docs 2023-12-03 15:27:33 +01:00
Matthias
701f6fc050 Update outdated docs
closes #9489
2023-12-03 15:27:03 +01:00
Matthias
0235db48a8 Prevent merge artifacts in "informative" pair 2023-12-03 13:31:16 +01:00
Matthias
e9e7bf3caf Slight cleanup of unused comment 2023-12-03 13:31:16 +01:00
Matthias
4464b02719 Add handling to properly merge 1M data to
closes #9490
2023-12-03 13:31:16 +01:00
Matthias
4ed9ffbf31 Add test for behavior in #9490. 2023-12-03 13:31:16 +01:00
Matthias
c017366086 Ensure testdata generation works for 1M data 2023-12-03 13:31:16 +01:00
Matthias
34bce4d251 Merge pull request #9493 from freqtrade/chore/future-warning-datadrawer
chore: fix future warning on pandas
2023-12-03 13:25:01 +01:00
Robert Caulk
6754072bca chore: fix future warning on pandas 2023-12-03 12:55:16 +01:00
Robert Caulk
15771043f7 Merge pull request #9450 from freqtrade/fix/startup-candle-count
Bug: freqai backtesting startup_candle_count handling
2023-12-02 21:01:11 +01:00
Robert Caulk
b417a0297b Merge pull request #9468 from freqtrade/freqai/fix_dump
Use cloudpickle to pickle freqai models
2023-12-02 18:51:31 +01:00
Matthias
5daafaabc2 Add explicit test for "now_is_time_to_refresh 2023-12-01 07:05:33 +01:00
Matthias
08db2f05aa Merge pull request #9485 from stash86/bt-metrics
exposing bot_name to discord rpc field
2023-11-30 19:04:34 +01:00
Matthias
0654186400 Merge pull request #9486 from freqtrade/new_release
New release 2023.11
2023-11-30 17:25:25 +01:00
Matthias
d85518ccb2 Improve release documentation 2023-11-30 07:10:20 +01:00
Matthias
c34cb9eb12 Bump version to 2023.12-dev 2023-11-30 07:04:38 +01:00
Matthias
cb01a46089 Version bump to 2023.11 2023-11-30 07:00:25 +01:00
Matthias
0bcbb28d51 Merge branch 'stable' into new_release 2023-11-30 07:00:11 +01:00
Matthias
e2a47ee95a Merge pull request #9482 from freqtrade/bitmart
Add support for Bitmart
2023-11-30 06:49:41 +01:00
Stefano Ariestasia
36836ea803 add bot_name to discord rpc field 2023-11-30 14:11:09 +09:00
Matthias
19d9adaf9c Merge pull request #9483 from freqtrade/dependabot/pip/cryptography-41.0.6
Bump cryptography from 41.0.5 to 41.0.6
2023-11-29 12:43:15 +01:00
Matthias
cf078f8093 Bump to 41.0.7 to avoid install problems 2023-11-29 06:57:00 +01:00
dependabot[bot]
5ddca4e9f9 Bump cryptography from 41.0.5 to 41.0.6
Bumps [cryptography](https://github.com/pyca/cryptography) from 41.0.5 to 41.0.6.
- [Changelog](https://github.com/pyca/cryptography/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/pyca/cryptography/compare/41.0.5...41.0.6)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-11-29 05:27:01 +00:00
Matthias
6db66b1e58 Add bitmart to "official supported" exchanges 2023-11-28 18:18:19 +01:00
Matthias
0a903e45f2 Add Bitmart to list of supported exchnanges for spot 2023-11-28 18:14:42 +01:00
Matthias
d0a2b9403e Fix typo 2023-11-28 18:14:33 +01:00
Matthias
a18c85ec64 Explicitly disable stoploss on exchange for bitmart 2023-11-28 18:13:21 +01:00
Matthias
0914b8b5f4 Add note about verification on Bitmart 2023-11-28 18:13:21 +01:00
Matthias
cb2a871538 Bitmart: add section in exchange docs 2023-11-28 18:13:21 +01:00
Matthias
ef877b5fcc Add bitmart to ccxt compat tested exchanges 2023-11-28 18:13:21 +01:00
Matthias
2738f3e437 Add minimal Exchange class for bitmart 2023-11-28 18:13:21 +01:00
Matthias
41e40e6214 Update some initial tests 2023-11-28 06:48:27 +01:00
Matthias
c2b32769a1 Remove further occurance in bot file 2023-11-28 06:48:20 +01:00
Matthias
42d75b0754 Merge branch 'develop' into pr/Axel-CH/9267 2023-11-28 06:45:37 +01:00
Matthias
79f765a930 Merge pull request #9472 from freqtrade/dependabot/pip/develop/ccxt-4.1.66
Bump ccxt from 4.1.57 to 4.1.66
2023-11-27 07:56:47 +01:00
Matthias
696f8b308a Merge pull request #9476 from freqtrade/dependabot/pip/develop/aiohttp-3.9.1
Bump aiohttp from 3.9.0 to 3.9.1
2023-11-27 07:40:39 +01:00
Matthias
4a2473e7e9 Merge pull request #9475 from freqtrade/dependabot/pip/develop/mkdocs-material-9.4.14
Bump mkdocs-material from 9.4.10 to 9.4.14
2023-11-27 07:02:54 +01:00
Matthias
a0caa7c5a2 Merge pull request #9477 from freqtrade/dependabot/pip/develop/pydantic-2.5.2
Bump pydantic from 2.5.1 to 2.5.2
2023-11-27 07:02:25 +01:00
Matthias
388a0c605c Merge pull request #9470 from stash86/bt-metrics2
fix typo on API docs
2023-11-27 06:46:50 +01:00
Matthias
55e4d08fd8 Merge pull request #9436 from stash86/bt-metrics
Remove order list from /status, and add new /order command
2023-11-27 06:40:00 +01:00
Matthias
7c00a4ed13 Remove no longer existing exchange aliases from tests 2023-11-27 06:39:14 +01:00
dependabot[bot]
793cc1acc0 Bump mkdocs-material from 9.4.10 to 9.4.14
Bumps [mkdocs-material](https://github.com/squidfunk/mkdocs-material) from 9.4.10 to 9.4.14.
- [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.4.10...9.4.14)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-11-27 05:31:12 +00:00
Matthias
33d910ccea Merge pull request #9474 from freqtrade/dependabot/pip/develop/mypy-1.7.1
Bump mypy from 1.7.0 to 1.7.1
2023-11-27 06:29:46 +01:00
Matthias
8a44337c30 Merge pull request #9473 from freqtrade/dependabot/pip/develop/pymdown-extensions-10.5
Bump pymdown-extensions from 10.4 to 10.5
2023-11-27 06:28:44 +01:00
dependabot[bot]
35871d7b4b Bump pydantic from 2.5.1 to 2.5.2
Bumps [pydantic](https://github.com/pydantic/pydantic) from 2.5.1 to 2.5.2.
- [Release notes](https://github.com/pydantic/pydantic/releases)
- [Changelog](https://github.com/pydantic/pydantic/blob/v2.5.2/HISTORY.md)
- [Commits](https://github.com/pydantic/pydantic/compare/v2.5.1...v2.5.2)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-11-27 03:20:23 +00:00
dependabot[bot]
786d4e03fc Bump aiohttp from 3.9.0 to 3.9.1
Bumps [aiohttp](https://github.com/aio-libs/aiohttp) from 3.9.0 to 3.9.1.
- [Release notes](https://github.com/aio-libs/aiohttp/releases)
- [Changelog](https://github.com/aio-libs/aiohttp/blob/master/CHANGES.rst)
- [Commits](https://github.com/aio-libs/aiohttp/compare/v3.9.0...v3.9.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-11-27 03:20:08 +00:00
dependabot[bot]
5e5b56e445 Bump mypy from 1.7.0 to 1.7.1
Bumps [mypy](https://github.com/python/mypy) from 1.7.0 to 1.7.1.
- [Changelog](https://github.com/python/mypy/blob/master/CHANGELOG.md)
- [Commits](https://github.com/python/mypy/compare/v1.7.0...v1.7.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-11-27 03:19:43 +00:00
dependabot[bot]
384ebc5b38 Bump pymdown-extensions from 10.4 to 10.5
Bumps [pymdown-extensions](https://github.com/facelessuser/pymdown-extensions) from 10.4 to 10.5.
- [Release notes](https://github.com/facelessuser/pymdown-extensions/releases)
- [Commits](https://github.com/facelessuser/pymdown-extensions/compare/10.4...10.5)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-11-27 03:19:35 +00:00
dependabot[bot]
8567af8d28 Bump ccxt from 4.1.57 to 4.1.66
Bumps [ccxt](https://github.com/ccxt/ccxt) from 4.1.57 to 4.1.66.
- [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.1.57...4.1.66)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-11-27 03:19:22 +00:00
Stefano Ariestasia
88e818926a fix typo on API docs 2023-11-27 10:57:50 +09:00
Stefano Ariestasia
4bcb4fdd82 Merge branch 'freqtrade:develop' into bt-metrics 2023-11-27 10:46:21 +09:00
Matthias
0b3a6aa9de Merge pull request #9469 from freqtrade/ci/pi_image_3.11
Update various docker images
2023-11-26 19:23:03 +01:00
Matthias
12ea1cde80 Bump dockerfile to use bookworm (debian12) 2023-11-26 16:34:31 +01:00
Matthias
df73b8288c Bump armhf image to bookworm 2023-11-26 14:53:34 +01:00
Matthias
a50291cd90 RPI dockerfile - 3.11 2023-11-26 14:52:52 +01:00
Matthias
be8ea685de Remove unused function in freqAI example 2023-11-26 13:37:02 +01:00
dependabot[bot]
d050beb627 Bump torch from 2.0.1 to 2.1.1
Bumps [torch](https://github.com/pytorch/pytorch) from 2.0.1 to 2.1.1.
- [Release notes](https://github.com/pytorch/pytorch/releases)
- [Changelog](https://github.com/pytorch/pytorch/blob/main/RELEASE.md)
- [Commits](https://github.com/pytorch/pytorch/compare/v2.0.1...v2.1.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-11-26 11:40:46 +00:00
Robert Caulk
1380cadf15 Merge pull request #9448 from freqtrade/dependabot/pip/develop/stable-baselines3-2.2.1
Bump stable-baselines3 from 2.1.0 to 2.2.1
2023-11-26 12:39:46 +01:00
Matthias
72eeb6561c use Cloudpickle also for reading 2023-11-25 19:37:49 +01:00
Matthias
eeb460e55c Use cloudpickle throughout 2023-11-25 19:36:14 +01:00
Matthias
e8d0b01991 Correctly import time 2023-11-25 16:17:43 +01:00
Matthias
94020a664b Add slight sleep to avoid random test failure on windows 2023-11-25 15:58:28 +01:00
Matthias
8c5194d5e2 force-reload markets when BadSymbol appears
closes #9463
2023-11-25 15:05:56 +01:00
Matthias
67e81c9018 Fix wrong/faulty docstring 2023-11-25 13:10:45 +01:00
Matthias
25ebdb4cb3 use strategy_wrapper for bot_loop_start in plotting
closes #9464
2023-11-25 12:51:17 +01:00
Matthias
1657fd1f0f Merge pull request #9435 from freqtrade/revisit_relative_intratrade
Improve trade close profit assertions
2023-11-23 20:02:02 +01:00
Stefano Ariestasia
63e702a3bf remove unused comments 2023-11-23 15:55:21 +09:00
Matthias
e9f21d0209 Improve logging for #9460 2023-11-23 07:22:44 +01:00
Matthias
a044649eef Also have "badrequest" act as InvalidOrderException
causing an emergencyexit.

closes #9456
2023-11-23 06:51:29 +01:00
dependabot[bot]
48317c2307 Bump scikit-learn from 1.1.3 to 1.3.2
Bumps [scikit-learn](https://github.com/scikit-learn/scikit-learn) from 1.1.3 to 1.3.2.
- [Release notes](https://github.com/scikit-learn/scikit-learn/releases)
- [Commits](https://github.com/scikit-learn/scikit-learn/compare/1.1.3...1.3.2)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-11-22 11:13:58 +00:00
Matthias
d598c91de3 Merge pull request #9458 from freqtrade/hyperopt_tests
Improve hyperopt Tests
2023-11-22 12:13:14 +01:00
Matthias
5003c2af21 training_env is a property, also, so types can't be overridden 2023-11-22 07:22:40 +01:00
Matthias
6963a92332 Improve hyperopt Tests
ensure scikit-learn has to generate new random points by reducing initial points
this will uncover a failure in newer scikit-learn versions
2023-11-22 07:21:07 +01:00
Matthias
e2863e1620 fix: logger has been converted to a property
so it can't be assigned anymore
e9f0f23ce4 (diff-d668633497da171f21b8069c33d594b1ee2ad47c1be4848bea33292bc80b7f5c)
2023-11-22 06:54:41 +01:00
Matthias
869756d87d Merge pull request #9454 from freqtrade/ci/bittrex_removal
Remove Bittrex from supported exchanges
2023-11-21 20:52:43 +01:00
Matthias
203890844b Remove non-existing pairs 2023-11-21 19:16:34 +01:00
Matthias
ba76b87952 Merge pull request #9453 from chasdabigone/fixing-docs
Removed redundant 'cpu_count'
2023-11-21 18:06:24 +01:00
Matthias
fbab18b081 Add missing config file 2023-11-21 18:01:18 +01:00
Matthias
f7178ecd6f Update test config name and exchange 2023-11-21 07:10:23 +01:00
Matthias
59cbac7147 Merge pull request #9452 from chasdabigone/fix-hyperopt-typo
Removed redudant negative from sentence
2023-11-21 06:58:12 +01:00
Matthias
fbc70a60f7 Update test with no bittrex ... 2023-11-21 06:57:18 +01:00
Matthias
b45365d385 Update tests to run for binance 2023-11-21 06:47:50 +01:00
Matthias
9990780e6b Update binance config to be for usdt pairs 2023-11-21 06:44:44 +01:00
Matthias
65df2f30c1 Update some more docs with bittrex removal 2023-11-21 06:42:53 +01:00
Matthias
e7aa706f73 Update samples with binance 2023-11-21 06:39:38 +01:00
Matthias
3619247123 Remove bittrex from code for suppored exchanges 2023-11-21 06:39:29 +01:00
Matthias
047dac7b7d Remove bittrex from supported exchanges 2023-11-21 06:37:58 +01:00
chas s
7646849405 Removed redundant 'cpu_count' 2023-11-20 23:25:28 -06:00
chas s
10ae0ed9c1 Removed redudant negative from sentence 2023-11-20 16:33:22 -06:00
Matthias
e060e729df Merge pull request #9451 from freqtrade/remove_blosc
Remove dependency on blosc
2023-11-20 14:53:04 +01:00
Matthias
d81bbba4c2 Remove dependency on blosc 2023-11-20 13:50:59 +01:00
robcaulk
d52936fd42 chore: try to keep startup_candle_count behaving the same as a normal FT strat 2023-11-20 09:13:01 +01:00
robcaulk
21a5abf25d fix: make sure that get_required_startup is timeframe independent 2023-11-20 08:42:27 +01:00
Matthias
c3980a2746 Merge pull request #9442 from freqtrade/dependabot/pip/develop/ccxt-4.1.57
Bump ccxt from 4.1.52 to 4.1.57
2023-11-20 07:57:19 +01:00
Matthias
2cadbd1229 Merge pull request #9443 from freqtrade/dependabot/pip/develop/ruff-0.1.6
Bump ruff from 0.1.5 to 0.1.6
2023-11-20 07:42:58 +01:00
Matthias
0f57291aa7 Merge pull request #9446 from freqtrade/dependabot/pip/develop/urllib3-2.1.0
Bump urllib3 from 2.0.7 to 2.1.0
2023-11-20 07:36:33 +01:00
Stefano
0e9169e1ec update docs 2023-11-20 15:35:06 +09:00
Stefano
8680b5faa0 fix some tests, add new tests 2023-11-20 14:48:18 +09:00
Matthias
03149cfa42 Merge pull request #9445 from freqtrade/dependabot/pip/develop/pydantic-2.5.1
Bump pydantic from 2.4.2 to 2.5.1
2023-11-20 06:37:47 +01:00
Matthias
4eb4732de7 Merge pull request #9441 from freqtrade/dependabot/pip/develop/rich-13.7.0
Bump rich from 13.6.0 to 13.7.0
2023-11-20 06:36:20 +01:00
Matthias
3a5b22c397 Merge pull request #9438 from freqtrade/dependabot/pip/develop/scipy-1.11.4
Bump scipy from 1.11.3 to 1.11.4
2023-11-20 06:35:25 +01:00
Matthias
c3a5d4b4e4 Merge pull request #9439 from freqtrade/dependabot/pip/develop/mkdocs-material-9.4.10
Bump mkdocs-material from 9.4.8 to 9.4.10
2023-11-20 06:34:47 +01:00
dependabot[bot]
b97ff3a784 Bump ccxt from 4.1.52 to 4.1.57
Bumps [ccxt](https://github.com/ccxt/ccxt) from 4.1.52 to 4.1.57.
- [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.1.52...4.1.57)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-11-20 05:33:47 +00:00
dependabot[bot]
806af7d796 Bump urllib3 from 2.0.7 to 2.1.0
Bumps [urllib3](https://github.com/urllib3/urllib3) from 2.0.7 to 2.1.0.
- [Release notes](https://github.com/urllib3/urllib3/releases)
- [Changelog](https://github.com/urllib3/urllib3/blob/main/CHANGES.rst)
- [Commits](https://github.com/urllib3/urllib3/compare/2.0.7...2.1.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-11-20 05:33:14 +00:00
Matthias
3c25737f38 Merge pull request #9440 from freqtrade/dependabot/pip/develop/aiohttp-3.9.0
Bump aiohttp from 3.8.6 to 3.9.0
2023-11-20 06:32:58 +01:00
Matthias
bf98851dc1 Merge pull request #9444 from freqtrade/dependabot/pip/develop/jsonschema-4.20.0
Bump jsonschema from 4.19.2 to 4.20.0
2023-11-20 06:32:01 +01:00
dependabot[bot]
202b72fd8e Bump stable-baselines3 from 2.1.0 to 2.2.1
Bumps [stable-baselines3](https://github.com/DLR-RM/stable-baselines3) from 2.1.0 to 2.2.1.
- [Release notes](https://github.com/DLR-RM/stable-baselines3/releases)
- [Commits](https://github.com/DLR-RM/stable-baselines3/compare/v2.1.0...v2.2.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-11-20 03:12:31 +00:00
dependabot[bot]
6f60117319 Bump pydantic from 2.4.2 to 2.5.1
Bumps [pydantic](https://github.com/pydantic/pydantic) from 2.4.2 to 2.5.1.
- [Release notes](https://github.com/pydantic/pydantic/releases)
- [Changelog](https://github.com/pydantic/pydantic/blob/main/HISTORY.md)
- [Commits](https://github.com/pydantic/pydantic/compare/v2.4.2...v2.5.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-11-20 03:12:12 +00:00
dependabot[bot]
7070ec30e4 Bump jsonschema from 4.19.2 to 4.20.0
Bumps [jsonschema](https://github.com/python-jsonschema/jsonschema) from 4.19.2 to 4.20.0.
- [Release notes](https://github.com/python-jsonschema/jsonschema/releases)
- [Changelog](https://github.com/python-jsonschema/jsonschema/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/python-jsonschema/jsonschema/compare/v4.19.2...v4.20.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-11-20 03:12:05 +00:00
dependabot[bot]
bf77019d1c Bump ruff from 0.1.5 to 0.1.6
Bumps [ruff](https://github.com/astral-sh/ruff) from 0.1.5 to 0.1.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/v0.1.5...v0.1.6)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-11-20 03:12:00 +00:00
dependabot[bot]
b776e5a8e0 Bump rich from 13.6.0 to 13.7.0
Bumps [rich](https://github.com/Textualize/rich) from 13.6.0 to 13.7.0.
- [Release notes](https://github.com/Textualize/rich/releases)
- [Changelog](https://github.com/Textualize/rich/blob/master/CHANGELOG.md)
- [Commits](https://github.com/Textualize/rich/compare/v13.6.0...v13.7.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-11-20 03:11:43 +00:00
dependabot[bot]
ca208305a0 Bump aiohttp from 3.8.6 to 3.9.0
Bumps [aiohttp](https://github.com/aio-libs/aiohttp) from 3.8.6 to 3.9.0.
- [Release notes](https://github.com/aio-libs/aiohttp/releases)
- [Changelog](https://github.com/aio-libs/aiohttp/blob/master/CHANGES.rst)
- [Commits](https://github.com/aio-libs/aiohttp/compare/v3.8.6...v3.9.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-11-20 03:11:37 +00:00
dependabot[bot]
972c5c327c Bump mkdocs-material from 9.4.8 to 9.4.10
Bumps [mkdocs-material](https://github.com/squidfunk/mkdocs-material) from 9.4.8 to 9.4.10.
- [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.4.8...9.4.10)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-11-20 03:11:28 +00:00
dependabot[bot]
80edfd1531 Bump scipy from 1.11.3 to 1.11.4
Bumps [scipy](https://github.com/scipy/scipy) from 1.11.3 to 1.11.4.
- [Release notes](https://github.com/scipy/scipy/releases)
- [Commits](https://github.com/scipy/scipy/compare/v1.11.3...v1.11.4)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-11-20 03:11:23 +00:00
Stefano Ariestasia
58cd455642 fix unused vars 2023-11-19 20:32:28 +09:00
Stefano Ariestasia
caf59d25e8 forgot comma 2023-11-19 18:07:45 +09:00
Stefano Ariestasia
7df32a34a0 remove order list from /status and add new /order 2023-11-19 18:01:32 +09:00
Matthias
48097f4a7d Update tests according to calculation update 2023-11-18 19:47:20 +01:00
Matthias
ca3f349d84 Update intermediate close_profit calculation 2023-11-18 19:47:09 +01:00
Matthias
0815bb6244 Improve trade close profit assertions 2023-11-18 18:18:29 +01:00
Matthias
835cb54876 Merge pull request #9427 from froggleston/frog-bt-analysis-fix-1
Fix backtesting-analysis when no trades for a pair
2023-11-15 19:46:32 +01:00
Matthias
08c2765633 Merge pull request #9429 from froggleston/frog-hyperopt-docs-1
Clarify hyperopt docs for parameter options
2023-11-15 18:27:14 +01:00
froggleston
f9202c3f6b Clarify hyperopt docs for parameter options 2023-11-15 12:11:47 +00:00
froggleston
eb186e22d6 Fix backtesting-analysis when no trades for a pair 2023-11-15 11:52:25 +00:00
Matthias
cbc323875b Improve contribution wording 2023-11-15 07:12:11 +01:00
Matthias
736b583ff4 Merge pull request #9425 from freqtrade/dependabot/pip/develop/ccxt-4.1.52
Bump ccxt from 4.1.40 to 4.1.52
2023-11-14 20:56:58 +01:00
dependabot[bot]
757ec53877 Bump ccxt from 4.1.40 to 4.1.52
Bumps [ccxt](https://github.com/ccxt/ccxt) from 4.1.40 to 4.1.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.1.40...4.1.52)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-11-14 19:16:20 +00:00
Matthias
7814927dd1 Merge pull request #9418 from freqtrade/dependabot/pip/develop/mypy-1.7.0
Bump mypy from 1.6.1 to 1.7.0
2023-11-13 19:28:46 +01:00
Matthias
5f8ff373ab Update mypy to v1.7.0 in pre-commit-config.yaml 2023-11-13 18:15:10 +01:00
Matthias
f286cb0a90 Use BaseException in exception check 2023-11-13 18:14:18 +01:00
Matthias
59bd1a1f1f Merge pull request #9309 from freqtrade/dependabot/pip/develop/tables-3.9.1
Bump tables from 3.8.0 to 3.9.1
2023-11-13 13:49:20 +01:00
Matthias
e52f6ca6c0 Merge pull request #9421 from konradbeck/patch-2
Update strategy-customization.md
2023-11-13 13:48:58 +01:00
konradbeck
e6663c0304 Update strategy-customization.md
Shouldn't the timeperiod be 100 when defining a ema100?
2023-11-13 13:50:32 +02:00
dependabot[bot]
ced92300e0 Bump tables from 3.8.0 to 3.9.1
Bumps [tables](https://github.com/PyTables/PyTables) from 3.8.0 to 3.9.1.
- [Release notes](https://github.com/PyTables/PyTables/releases)
- [Changelog](https://github.com/PyTables/PyTables/blob/master/RELEASE_NOTES.rst)
- [Commits](https://github.com/PyTables/PyTables/compare/v3.8.0...v3.9.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-11-13 09:19:19 +00:00
Matthias
f9d061b648 Merge pull request #9413 from freqtrade/dependabot/pip/develop/xgboost-2.0.2
Bump xgboost from 2.0.1 to 2.0.2
2023-11-13 08:01:41 +01:00
Matthias
e6661a33f9 Merge pull request #9419 from freqtrade/dependabot/pip/develop/pandas-2.1.3
Bump pandas from 2.1.2 to 2.1.3
2023-11-13 07:26:36 +01:00
Matthias
d2afe281bf Add cancel order to new exchange docs 2023-11-13 07:23:50 +01:00
Matthias
c237aa00b8 Remove non-used imports 2023-11-13 07:15:35 +01:00
Matthias
23efa4c9c3 Remove deprecated json_encoders key from model_config 2023-11-13 07:15:35 +01:00
dependabot[bot]
8b028734c2 Bump pandas from 2.1.2 to 2.1.3
Bumps [pandas](https://github.com/pandas-dev/pandas) from 2.1.2 to 2.1.3.
- [Release notes](https://github.com/pandas-dev/pandas/releases)
- [Commits](https://github.com/pandas-dev/pandas/compare/v2.1.2...v2.1.3)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-11-13 05:29:27 +00:00
dependabot[bot]
51feeddc5c Bump mypy from 1.6.1 to 1.7.0
Bumps [mypy](https://github.com/python/mypy) from 1.6.1 to 1.7.0.
- [Changelog](https://github.com/python/mypy/blob/master/CHANGELOG.md)
- [Commits](https://github.com/python/mypy/compare/v1.6.1...v1.7.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-11-13 05:29:25 +00:00
Matthias
af3e42f59d Merge pull request #9415 from freqtrade/dependabot/pip/develop/numpy-1.26.2
Bump numpy from 1.26.1 to 1.26.2
2023-11-13 06:28:52 +01:00
Matthias
34d58eb7d5 Merge pull request #9417 from freqtrade/dependabot/pip/develop/ruff-0.1.5
Bump ruff from 0.1.4 to 0.1.5
2023-11-13 06:28:32 +01:00
Matthias
ca0a04fba5 Merge pull request #9416 from freqtrade/dependabot/pip/develop/pymdown-extensions-10.4
Bump pymdown-extensions from 10.3.1 to 10.4
2023-11-13 06:27:44 +01:00
dependabot[bot]
84b3f9924a Bump ruff from 0.1.4 to 0.1.5
Bumps [ruff](https://github.com/astral-sh/ruff) from 0.1.4 to 0.1.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/v0.1.4...v0.1.5)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-11-13 03:34:19 +00:00
dependabot[bot]
50b264c6f8 Bump pymdown-extensions from 10.3.1 to 10.4
Bumps [pymdown-extensions](https://github.com/facelessuser/pymdown-extensions) from 10.3.1 to 10.4.
- [Release notes](https://github.com/facelessuser/pymdown-extensions/releases)
- [Commits](https://github.com/facelessuser/pymdown-extensions/compare/10.3.1...10.4)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-11-13 03:34:07 +00:00
dependabot[bot]
88e8a9fe2b Bump numpy from 1.26.1 to 1.26.2
Bumps [numpy](https://github.com/numpy/numpy) from 1.26.1 to 1.26.2.
- [Release notes](https://github.com/numpy/numpy/releases)
- [Changelog](https://github.com/numpy/numpy/blob/main/doc/RELEASE_WALKTHROUGH.rst)
- [Commits](https://github.com/numpy/numpy/compare/v1.26.1...v1.26.2)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-11-13 03:33:57 +00:00
dependabot[bot]
d65aef72e8 Bump xgboost from 2.0.1 to 2.0.2
Bumps [xgboost](https://github.com/dmlc/xgboost) from 2.0.1 to 2.0.2.
- [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.0.1...v2.0.2)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-11-13 03:33:44 +00:00
Matthias
8273c0c2cd Skip exchange validation in API server dependencies
Especially when validating pairlists for non-main exchanges (the exchange not in the config),
validation can mess with the exchange loading.
2023-11-12 17:34:16 +01:00
Matthias
c7624b1ed6 Simplify LiveStats models 2023-11-11 17:18:18 +01:00
Matthias
54536a1c8e use profit_ratio for mix_tag_performance 2023-11-11 17:18:13 +01:00
Matthias
7daa06a207 Align mixtag response with other statistic models 2023-11-11 17:18:06 +01:00
Matthias
da647735b6 Merge pull request #9407 from stash86/bt-metrics
add entries, exits, and mix_tags API endpoints
2023-11-11 16:10:10 +01:00
Matthias
7d0ecfde93 Add tests to ensure responses are as expected 2023-11-11 14:43:43 +01:00
Matthias
2ef716e94c Add response_models for new endpoints 2023-11-11 14:43:30 +01:00
Matthias
de68850d28 Don't tag informative endpoints as "trading" 2023-11-11 14:31:18 +01:00
Matthias
59cefda283 Update strategy-callbacks.md with new information
on max_entry_position_adjustment
2023-11-11 13:11:17 +01:00
Matthias
babcd5887f Merge pull request #9408 from konradbeck/patch-1
Update freqai-feature-engineering.md
2023-11-11 10:54:27 +01:00
Matthias
c9a5e5a98c Fix another (identical) typo 2023-11-11 10:50:58 +01:00
konradbeck
51dc5811c2 Update freqai-feature-engineering.md
I cannot find any reference to 'include_periods_candles'
2023-11-11 09:38:52 +02:00
Stefano Ariestasia
05e36f7b21 increase API version 2023-11-11 15:33:15 +09:00
Stefano Ariestasia
0738cae4a0 fix pre-commit 2023-11-11 15:23:20 +09:00
Stefano Ariestasia
da3c42bbbc add entries, exits, and mix_tags API endpoints 2023-11-11 15:16:40 +09:00
Matthias
e728e3bc75 Merge pull request #9402 from freqtrade/dependabot/pip/pyarrow-14.0.1
Bump pyarrow from 14.0.0 to 14.0.1
2023-11-10 21:11:23 +01:00
Matthias
315783441d Update pyarrow wheels 2023-11-10 19:41:23 +01:00
dependabot[bot]
62f1421cfb Bump pyarrow from 14.0.0 to 14.0.1
Bumps [pyarrow](https://github.com/apache/arrow) from 14.0.0 to 14.0.1.
- [Commits](https://github.com/apache/arrow/compare/go/v14.0.0...apache-arrow-14.0.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-11-09 22:48:16 +00:00
Matthias
52f12b704b Avoid time colision when creating orders in test
avoid flakyness of test.
2023-11-06 19:42:16 +01:00
Matthias
ee5051f788 Merge pull request #9388 from freqtrade/dependabot/pip/develop/pyarrow-14.0.0
Bump pyarrow from 13.0.0 to 14.0.0
2023-11-06 17:46:19 +01:00
Matthias
b30b1227e3 Merge pull request #9394 from freqtrade/dependabot/pip/develop/sqlalchemy-2.0.23
Bump sqlalchemy from 2.0.22 to 2.0.23
2023-11-06 17:45:36 +01:00
Matthias
dd2f8db392 Merge pull request #9396 from freqtrade/dependabot/pip/develop/ccxt-4.1.40
Bump ccxt from 4.1.39 to 4.1.40
2023-11-06 17:45:20 +01:00
Matthias
5a76d81529 Merge pull request #9398 from freqtrade/dependabot/pip/develop/uvicorn-0.24.0.post1
Bump uvicorn from 0.23.2 to 0.24.0.post1
2023-11-06 17:21:57 +01:00
Matthias
b9851c78ad Merge pull request #9397 from freqtrade/dependabot/pip/develop/nbconvert-7.11.0
Bump nbconvert from 7.10.0 to 7.11.0
2023-11-06 17:21:35 +01:00
Matthias
777cf2ae7a Merge pull request #9399 from freqtrade/dependabot/pip/develop/ruff-0.1.4
Bump ruff from 0.1.3 to 0.1.4
2023-11-06 17:21:17 +01:00
dependabot[bot]
3729b3d793 Bump ruff from 0.1.3 to 0.1.4
Bumps [ruff](https://github.com/astral-sh/ruff) from 0.1.3 to 0.1.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/v0.1.3...v0.1.4)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-11-06 14:54:26 +00:00
dependabot[bot]
39fc78205d Bump uvicorn from 0.23.2 to 0.24.0.post1
Bumps [uvicorn](https://github.com/encode/uvicorn) from 0.23.2 to 0.24.0.post1.
- [Release notes](https://github.com/encode/uvicorn/releases)
- [Changelog](https://github.com/encode/uvicorn/blob/master/CHANGELOG.md)
- [Commits](https://github.com/encode/uvicorn/compare/0.23.2...0.24.0.post1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-11-06 14:54:11 +00:00
dependabot[bot]
46a67e8d4f Bump nbconvert from 7.10.0 to 7.11.0
Bumps [nbconvert](https://github.com/jupyter/nbconvert) from 7.10.0 to 7.11.0.
- [Release notes](https://github.com/jupyter/nbconvert/releases)
- [Changelog](https://github.com/jupyter/nbconvert/blob/main/CHANGELOG.md)
- [Commits](https://github.com/jupyter/nbconvert/compare/v7.10.0...v7.11.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-11-06 14:54:05 +00:00
dependabot[bot]
69017805c0 Bump ccxt from 4.1.39 to 4.1.40
Bumps [ccxt](https://github.com/ccxt/ccxt) from 4.1.39 to 4.1.40.
- [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.1.39...4.1.40)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-11-06 14:54:00 +00:00
Matthias
bcec611973 Add pre-built wheels for pyarrow 14 2023-11-06 15:43:55 +01:00
Matthias
fbb11a394a Bump sqlalchemy pre-commit 2023-11-06 15:42:18 +01:00
Matthias
5cb916977e Merge pull request #9390 from freqtrade/dependabot/pip/develop/cachetools-5.3.2
Bump cachetools from 5.3.1 to 5.3.2
2023-11-06 15:40:54 +01:00
Matthias
7d4c9bc0cf Merge pull request #9395 from freqtrade/dependabot/pip/develop/markdown-3.5.1
Bump markdown from 3.5 to 3.5.1
2023-11-06 15:40:39 +01:00
Matthias
ea2beb46e7 Merge pull request #9392 from freqtrade/dependabot/pip/develop/mkdocs-material-9.4.8
Bump mkdocs-material from 9.4.7 to 9.4.8
2023-11-06 15:40:29 +01:00
Matthias
216ee8117a Merge pull request #9393 from freqtrade/dependabot/pip/develop/tensorboard-2.15.1
Bump tensorboard from 2.15.0 to 2.15.1
2023-11-06 15:40:12 +01:00
Matthias
9c1210b34e Merge pull request #9391 from freqtrade/dependabot/pip/develop/filelock-3.13.1
Bump filelock from 3.12.4 to 3.13.1
2023-11-06 06:44:40 +01:00
dependabot[bot]
921e034266 Bump sqlalchemy from 2.0.22 to 2.0.23
Bumps [sqlalchemy](https://github.com/sqlalchemy/sqlalchemy) from 2.0.22 to 2.0.23.
- [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>
2023-11-06 05:43:11 +00:00
Matthias
6f358b16c0 Merge pull request #9385 from freqtrade/dependabot/pip/develop/ccxt-4.1.39
Bump ccxt from 4.1.31 to 4.1.39
2023-11-06 06:42:10 +01:00
dependabot[bot]
264ab2c471 Bump pyarrow from 13.0.0 to 14.0.0
Bumps [pyarrow](https://github.com/apache/arrow) from 13.0.0 to 14.0.0.
- [Commits](https://github.com/apache/arrow/compare/go/v13.0.0...go/v14.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>
2023-11-06 05:40:25 +00:00
Matthias
a9d6f0023a Merge pull request #9384 from freqtrade/dependabot/pip/develop/py-find-1st-1.1.6
Bump py-find-1st from 1.1.5 to 1.1.6
2023-11-06 06:39:37 +01:00
dependabot[bot]
31af1d5dc7 Bump markdown from 3.5 to 3.5.1
Bumps [markdown](https://github.com/Python-Markdown/markdown) from 3.5 to 3.5.1.
- [Release notes](https://github.com/Python-Markdown/markdown/releases)
- [Changelog](https://github.com/Python-Markdown/markdown/blob/master/docs/changelog.md)
- [Commits](https://github.com/Python-Markdown/markdown/compare/3.5...3.5.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-11-06 05:38:40 +00:00
dependabot[bot]
588bbb45b5 Bump cachetools from 5.3.1 to 5.3.2
Bumps [cachetools](https://github.com/tkem/cachetools) from 5.3.1 to 5.3.2.
- [Changelog](https://github.com/tkem/cachetools/blob/master/CHANGELOG.rst)
- [Commits](https://github.com/tkem/cachetools/compare/v5.3.1...v5.3.2)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-11-06 05:38:10 +00:00
Matthias
278c999f1f Merge pull request #9389 from freqtrade/dependabot/pip/develop/jsonschema-4.19.2
Bump jsonschema from 4.19.1 to 4.19.2
2023-11-06 06:38:09 +01:00
Matthias
825ae15109 Merge pull request #9386 from freqtrade/dependabot/pip/develop/nbconvert-7.10.0
Bump nbconvert from 7.9.2 to 7.10.0
2023-11-06 06:37:31 +01:00
Matthias
30cacc7cca Merge pull request #9383 from freqtrade/dependabot/pip/develop/fastapi-0.104.1
Bump fastapi from 0.104.0 to 0.104.1
2023-11-06 06:37:08 +01:00
dependabot[bot]
7ed037bad7 Bump tensorboard from 2.15.0 to 2.15.1
Bumps [tensorboard](https://github.com/tensorflow/tensorboard) from 2.15.0 to 2.15.1.
- [Release notes](https://github.com/tensorflow/tensorboard/releases)
- [Changelog](https://github.com/tensorflow/tensorboard/blob/2.15.1/RELEASE.md)
- [Commits](https://github.com/tensorflow/tensorboard/compare/2.15.0...2.15.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-11-06 03:52:46 +00:00
dependabot[bot]
77b00b2a12 Bump mkdocs-material from 9.4.7 to 9.4.8
Bumps [mkdocs-material](https://github.com/squidfunk/mkdocs-material) from 9.4.7 to 9.4.8.
- [Release notes](https://github.com/squidfunk/mkdocs-material/releases)
- [Changelog](https://github.com/squidfunk/mkdocs-material/blob/master/CHANGELOG)
- [Commits](https://github.com/squidfunk/mkdocs-material/compare/9.4.7...9.4.8)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-11-06 03:52:41 +00:00
dependabot[bot]
773bc386f7 Bump filelock from 3.12.4 to 3.13.1
Bumps [filelock](https://github.com/tox-dev/py-filelock) from 3.12.4 to 3.13.1.
- [Release notes](https://github.com/tox-dev/py-filelock/releases)
- [Changelog](https://github.com/tox-dev/filelock/blob/main/docs/changelog.rst)
- [Commits](https://github.com/tox-dev/py-filelock/compare/3.12.4...3.13.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-11-06 03:52:35 +00:00
dependabot[bot]
90dacaca09 Bump jsonschema from 4.19.1 to 4.19.2
Bumps [jsonschema](https://github.com/python-jsonschema/jsonschema) from 4.19.1 to 4.19.2.
- [Release notes](https://github.com/python-jsonschema/jsonschema/releases)
- [Changelog](https://github.com/python-jsonschema/jsonschema/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/python-jsonschema/jsonschema/compare/v4.19.1...v4.19.2)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-11-06 03:52:27 +00:00
dependabot[bot]
3689ad16b5 Bump nbconvert from 7.9.2 to 7.10.0
Bumps [nbconvert](https://github.com/jupyter/nbconvert) from 7.9.2 to 7.10.0.
- [Release notes](https://github.com/jupyter/nbconvert/releases)
- [Changelog](https://github.com/jupyter/nbconvert/blob/main/CHANGELOG.md)
- [Commits](https://github.com/jupyter/nbconvert/compare/v7.9.2...v7.10.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-11-06 03:52:09 +00:00
dependabot[bot]
ab9954350e Bump ccxt from 4.1.31 to 4.1.39
Bumps [ccxt](https://github.com/ccxt/ccxt) from 4.1.31 to 4.1.39.
- [Release notes](https://github.com/ccxt/ccxt/releases)
- [Changelog](https://github.com/ccxt/ccxt/blob/master/CHANGELOG.md)
- [Commits](https://github.com/ccxt/ccxt/compare/4.1.31...4.1.39)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-11-06 03:52:05 +00:00
dependabot[bot]
533f11d9eb Bump py-find-1st from 1.1.5 to 1.1.6
Bumps [py-find-1st](https://github.com/roebel/py_find_1st) from 1.1.5 to 1.1.6.
- [Release notes](https://github.com/roebel/py_find_1st/releases)
- [Commits](https://github.com/roebel/py_find_1st/commits)

---
updated-dependencies:
- dependency-name: py-find-1st
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-11-06 03:51:57 +00:00
dependabot[bot]
551033a7c3 Bump fastapi from 0.104.0 to 0.104.1
Bumps [fastapi](https://github.com/tiangolo/fastapi) from 0.104.0 to 0.104.1.
- [Release notes](https://github.com/tiangolo/fastapi/releases)
- [Commits](https://github.com/tiangolo/fastapi/compare/0.104.0...0.104.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-11-06 03:51:55 +00:00
Matthias
e003930e18 Merge pull request #9382 from freqtrade/test_reduce_time
Reduce wait for ws test
2023-11-05 18:09:50 +01:00
Matthias
2efef72ec2 Reduce wait for ws test 2023-11-05 17:17:07 +01:00
Matthias
eb40fc698d Merge pull request #9381 from freqtrade/test_refactor
Test refactor
2023-11-05 17:16:35 +01:00
Matthias
751db2be78 fix: test typo mishap 2023-11-05 16:35:49 +01:00
Matthias
6ea353447e use tmp_path instead of tmpdir 2023-11-05 16:25:36 +01:00
Matthias
5a3839320d Remove further usages of Path(tmpdir) 2023-11-05 16:25:23 +01:00
Matthias
555f4b51e1 Further improvements to test setup 2023-11-05 16:23:22 +01:00
Matthias
be82248e01 Remove futher usages of Path(tmpdir) 2023-11-05 16:18:28 +01:00
Matthias
7bed7801cc Further test simplifications 2023-11-05 16:15:36 +01:00
Matthias
eb409de916 use tmp_path instead of Path(tmpdir) 2023-11-05 16:15:21 +01:00
Matthias
8ce39a6d75 Merge pull request #9378 from freqtrade/fix/transformer-dimensions
Bugfix: PyTorchTransformer
2023-11-04 15:51:54 +01:00
robcaulk
72dc65cb6a fix: swap tensor dimension to play nicely with pandas 2023-11-04 14:29:51 +01:00
Matthias
c94c667fb1 Merge pull request #9375 from freqtrade/ci/pi_cache_talib
Update Dockerfile.armhf to use prebuilt wheels
2023-11-03 06:52:08 +01:00
Matthias
2a0175f629 Add "empty" config to disable default discord messages
closes #9372
2023-11-02 18:09:41 +01:00
Matthias
cd68173440 Update Dockerfile.armhf to use prebuilt wheels 2023-11-02 07:08:36 +01:00
Matthias
c920e3a031 Bump Dockerfile to 3.11.6 2023-11-02 07:05:10 +01:00
Matthias
83afc4ac7e Add pyarrow 3.11 wheel 2023-11-02 07:04:33 +01:00
Matthias
19f62649ea use "noindex" to install pyarrow on armhf 2023-11-02 07:03:22 +01:00
Matthias
e4186cde9e Merge pull request #9369 from freqtrade/feat/informative_base
informative assets -> {base}
2023-11-02 06:36:55 +01:00
Matthias
61ed6aee62 Add test for new formatting 2023-11-01 11:02:50 +01:00
Matthias
051b6e9458 Update documentation 2023-11-01 11:02:03 +01:00
Matthias
44a24685ac Add support for {base} and {quote} in informative decorator 2023-11-01 11:01:55 +01:00
Matthias
1cde980c08 Extract pair_formating options 2023-11-01 10:14:19 +01:00
Matthias
05ef4f9b6f Fix forceenter - cancel dialog not working
closes #9368
2023-11-01 09:10:21 +01:00
Matthias
53f00f248e Merge pull request #9362 from freqtrade/dependabot/pip/develop/pandas-2.1.2
Bump pandas from 2.0.3 to 2.1.2
2023-10-31 14:29:09 +01:00
Matthias
a9cd282500 Merge pull request #9349 from freqtrade/fix/issue_9346
Fix/issue 9346
2023-10-31 06:44:37 +01:00
Matthias
f142abfb76 Merge pull request #9348 from freqtrade/new_release
New release 2023.10
2023-10-31 06:42:58 +01:00
Matthias
c98c6c38dc update binance leverage tiers 2023-10-30 20:10:07 +01:00
Matthias
26aa14dbfc update binance leverage tiers 2023-10-30 20:10:01 +01:00
Matthias
04cd931cc8 Pass explicit stringIO type to pandas read_json 2023-10-30 19:20:59 +01:00
Matthias
b8a6330c3f Improve pandas handling 2023-10-30 19:16:22 +01:00
Matthias
949c3c660b Ignore "nan" enter and exit tags
these happen if strings are assigned to individual rows without initializing the whole column
2023-10-30 19:05:15 +01:00
Matthias
9297a90d7f Use proper indexing to avoid deprecation warnings 2023-10-30 18:26:25 +01:00
Matthias
b19f17fdfa Improve handling of bt results in optimize_reports 2023-10-30 18:26:01 +01:00
Matthias
bbdc6c0f5c improve pandas syntax to avoid deprecation error 2023-10-30 18:11:38 +01:00
dependabot[bot]
528c65c194 Bump pandas from 2.0.3 to 2.1.2
Bumps [pandas](https://github.com/pandas-dev/pandas) from 2.0.3 to 2.1.2.
- [Release notes](https://github.com/pandas-dev/pandas/releases)
- [Commits](https://github.com/pandas-dev/pandas/compare/v2.0.3...v2.1.2)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-30 09:13:28 +00:00
Matthias
a932df7320 Merge pull request #9356 from freqtrade/dependabot/pip/develop/orjson-3.9.10
Bump orjson from 3.9.9 to 3.9.10
2023-10-30 10:12:34 +01:00
Matthias
2d9b05a3ab Merge pull request #9354 from freqtrade/dependabot/pip/develop/ccxt-4.1.31
Bump ccxt from 4.1.22 to 4.1.31
2023-10-30 10:12:16 +01:00
Matthias
7cf1d25dc6 Merge pull request #9361 from freqtrade/dependabot/pip/develop/types-cachetools-5.3.0.7
Bump types-cachetools from 5.3.0.6 to 5.3.0.7
2023-10-30 10:11:57 +01:00
Matthias
19c955d505 Merge pull request #9358 from freqtrade/dependabot/pip/develop/pytest-7.4.3
Bump pytest from 7.4.2 to 7.4.3
2023-10-30 10:11:21 +01:00
Matthias
bd243da47e Merge pull request #9352 from freqtrade/dependabot/pip/develop/plotly-5.18.0
Bump plotly from 5.17.0 to 5.18.0
2023-10-30 07:14:59 +01:00
Matthias
bf24c3b279 BUmp cachetools types in pre-commit ocnfig 2023-10-30 07:07:51 +01:00
Matthias
e9c72acff2 Merge pull request #9360 from freqtrade/dependabot/pip/develop/ast-comments-1.2.0
Bump ast-comments from 1.1.2 to 1.2.0
2023-10-30 06:55:35 +01:00
Matthias
09fd22c2f8 Merge pull request #9347 from freqtrade/ci/numpy_bump
Bump numpy on armhf devices
2023-10-30 06:48:46 +01:00
Matthias
45721ed62e Merge pull request #9355 from freqtrade/dependabot/pip/develop/xgboost-2.0.1
Bump xgboost from 2.0.0 to 2.0.1
2023-10-30 06:48:22 +01:00
dependabot[bot]
5182045cda Bump pytest from 7.4.2 to 7.4.3
Bumps [pytest](https://github.com/pytest-dev/pytest) from 7.4.2 to 7.4.3.
- [Release notes](https://github.com/pytest-dev/pytest/releases)
- [Changelog](https://github.com/pytest-dev/pytest/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/pytest-dev/pytest/compare/7.4.2...7.4.3)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-30 05:45:34 +00:00
Matthias
51ab8fecfc Merge pull request #9359 from freqtrade/dependabot/pip/develop/ruff-0.1.3
Bump ruff from 0.1.1 to 0.1.3
2023-10-30 06:44:45 +01:00
dependabot[bot]
b36907133c Bump ccxt from 4.1.22 to 4.1.31
Bumps [ccxt](https://github.com/ccxt/ccxt) from 4.1.22 to 4.1.31.
- [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.1.22...4.1.31)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-30 05:43:21 +00:00
Matthias
b6d899344e Merge pull request #9357 from freqtrade/dependabot/pip/develop/mkdocs-material-9.4.7
Bump mkdocs-material from 9.4.6 to 9.4.7
2023-10-30 06:42:47 +01:00
Matthias
095f9fc1ab Merge pull request #9351 from freqtrade/dependabot/pip/develop/cryptography-41.0.5
Bump cryptography from 41.0.4 to 41.0.5
2023-10-30 06:42:32 +01:00
dependabot[bot]
0ab9eb7b05 Bump orjson from 3.9.9 to 3.9.10
Bumps [orjson](https://github.com/ijl/orjson) from 3.9.9 to 3.9.10.
- [Release notes](https://github.com/ijl/orjson/releases)
- [Changelog](https://github.com/ijl/orjson/blob/master/CHANGELOG.md)
- [Commits](https://github.com/ijl/orjson/compare/3.9.9...3.9.10)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-30 05:42:04 +00:00
Matthias
d0c582e137 Merge pull request #9353 from freqtrade/dependabot/pip/develop/python-rapidjson-1.13
Bump python-rapidjson from 1.12 to 1.13
2023-10-30 06:40:54 +01:00
dependabot[bot]
d3d4464983 Bump types-cachetools from 5.3.0.6 to 5.3.0.7
Bumps [types-cachetools](https://github.com/python/typeshed) from 5.3.0.6 to 5.3.0.7.
- [Commits](https://github.com/python/typeshed/commits)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-30 03:37:57 +00:00
dependabot[bot]
1d0934074c Bump ast-comments from 1.1.2 to 1.2.0
Bumps [ast-comments](https://github.com/t3rn0/ast-comments) from 1.1.2 to 1.2.0.
- [Release notes](https://github.com/t3rn0/ast-comments/releases)
- [Commits](https://github.com/t3rn0/ast-comments/compare/1.1.2...1.2.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-30 03:37:53 +00:00
dependabot[bot]
9382fb3be8 Bump ruff from 0.1.1 to 0.1.3
Bumps [ruff](https://github.com/astral-sh/ruff) from 0.1.1 to 0.1.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/v0.1.1...v0.1.3)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-30 03:37:49 +00:00
dependabot[bot]
223af95da7 Bump mkdocs-material from 9.4.6 to 9.4.7
Bumps [mkdocs-material](https://github.com/squidfunk/mkdocs-material) from 9.4.6 to 9.4.7.
- [Release notes](https://github.com/squidfunk/mkdocs-material/releases)
- [Changelog](https://github.com/squidfunk/mkdocs-material/blob/master/CHANGELOG)
- [Commits](https://github.com/squidfunk/mkdocs-material/compare/9.4.6...9.4.7)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-30 03:37:23 +00:00
dependabot[bot]
8b68b55de4 Bump xgboost from 2.0.0 to 2.0.1
Bumps [xgboost](https://github.com/dmlc/xgboost) from 2.0.0 to 2.0.1.
- [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.0.0...v2.0.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-30 03:37:06 +00:00
dependabot[bot]
99592d1a12 Bump python-rapidjson from 1.12 to 1.13
Bumps [python-rapidjson](https://github.com/python-rapidjson/python-rapidjson) from 1.12 to 1.13.
- [Changelog](https://github.com/python-rapidjson/python-rapidjson/blob/master/CHANGES.rst)
- [Commits](https://github.com/python-rapidjson/python-rapidjson/compare/v1.12...v1.13)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-30 03:36:47 +00:00
dependabot[bot]
b69f5aaac3 Bump plotly from 5.17.0 to 5.18.0
Bumps [plotly](https://github.com/plotly/plotly.py) from 5.17.0 to 5.18.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.17.0...v5.18.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-30 03:36:34 +00:00
dependabot[bot]
0c1fefe6e7 Bump cryptography from 41.0.4 to 41.0.5
Bumps [cryptography](https://github.com/pyca/cryptography) from 41.0.4 to 41.0.5.
- [Changelog](https://github.com/pyca/cryptography/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/pyca/cryptography/compare/41.0.4...41.0.5)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-30 03:36:27 +00:00
Matthias
a049ff9371 Improve special testcase 2023-10-29 14:32:15 +01:00
Matthias
0c51e2637f Fix calculation issue for #9346
Closes #9346
2023-10-29 14:29:07 +01:00
Matthias
7492b75e1c Bump version to 2023.11-dev 2023-10-29 13:55:51 +01:00
Matthias
9a73f7a7b8 Bump version to 2023.10 2023-10-29 13:51:19 +01:00
Matthias
7813d1acd6 Merge branch 'stable' into new_release 2023-10-29 13:51:10 +01:00
Matthias
24dfd9b93b Add test for #9346, showing current behavior 2023-10-29 10:52:45 +01:00
Matthias
7d65b3e1b4 install libopenblas-base to base image 2023-10-29 10:48:19 +01:00
Matthias
2c20464983 Reinit orders list on "local" objects to instance variable 2023-10-29 09:18:00 +01:00
Matthias
e97d9013d5 Avoid having orders leak after multiple "from_json" calls 2023-10-29 09:17:07 +01:00
Matthias
cf43427be5 armhf: Move pip install to base image 2023-10-28 10:22:54 +02:00
Matthias
7ae41be975 Remove numpy armv7l lock since wheels are now available 2023-10-28 08:30:27 +02:00
Matthias
1e18b35f22 Change box type to tip 2023-10-27 07:08:38 +02:00
Matthias
bb78285661 Add hint about helper commands to common mistakes section 2023-10-27 06:38:35 +02:00
Matthias
b47ba8cfd3 Merge pull request #9339 from freqtrade/fix/returndf-bug
fix: bug in startup candle offset
2023-10-26 19:49:44 +02:00
Matthias
1dccdf0594 bump ruff in pre-commit 2023-10-26 19:49:25 +02:00
robcaulk
5da48d8ffc chore: fix tests 2023-10-25 18:38:30 +02:00
robcaulk
4f4b7c5625 fix: bug in startup candle offset 2023-10-23 20:31:51 +02:00
Matthias
9dcf236387 Align flake and ruff configs further 2023-10-23 18:06:31 +02:00
Matthias
97bc5804fd Merge pull request #9334 from freqtrade/dependabot/pip/develop/tensorboard-2.15.0
Bump tensorboard from 2.14.1 to 2.15.0
2023-10-23 09:00:42 +02:00
Matthias
beab966851 Merge pull request #9328 from freqtrade/dependabot/pip/develop/websockets-12.0
Bump websockets from 11.0.3 to 12.0
2023-10-23 09:00:17 +02:00
Matthias
00a7e8f9a2 Merge pull request #9338 from freqtrade/dependabot/pip/develop/ccxt-4.1.22
Bump ccxt from 4.1.13 to 4.1.22
2023-10-23 08:57:12 +02:00
Matthias
59dc526683 Merge pull request #9335 from freqtrade/dependabot/pip/develop/types-requests-2.31.0.10
Bump types-requests from 2.31.0.9 to 2.31.0.10
2023-10-23 08:56:50 +02:00
Matthias
aef7f9dc03 Merge pull request #9337 from freqtrade/dependabot/pip/develop/pytest-mock-3.12.0
Bump pytest-mock from 3.11.1 to 3.12.0
2023-10-23 08:56:36 +02:00
Matthias
abc6a08397 Merge pull request #9336 from freqtrade/dependabot/pip/develop/fastapi-0.104.0
Bump fastapi from 0.103.2 to 0.104.0
2023-10-23 08:56:20 +02:00
Matthias
eb4da8a6f6 Merge pull request #9332 from freqtrade/dependabot/pip/develop/ruff-0.1.1
Bump ruff from 0.0.292 to 0.1.1
2023-10-23 08:56:00 +02:00
dependabot[bot]
494fd734bc Bump ruff from 0.0.292 to 0.1.1
Bumps [ruff](https://github.com/astral-sh/ruff) from 0.0.292 to 0.1.1.
- [Release notes](https://github.com/astral-sh/ruff/releases)
- [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md)
- [Commits](https://github.com/astral-sh/ruff/compare/v0.0.292...v0.1.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-23 04:47:44 +00:00
Matthias
9174f60b1d Merge pull request #9330 from freqtrade/dependabot/pip/develop/mypy-1.6.1
Bump mypy from 1.6.0 to 1.6.1
2023-10-23 06:46:57 +02:00
Matthias
c2905a4522 use --output-format in ruff CI 2023-10-23 06:43:50 +02:00
Matthias
adf03e2ee3 Merge pull request #9329 from freqtrade/dependabot/pip/develop/pymdown-extensions-10.3.1
Bump pymdown-extensions from 10.3 to 10.3.1
2023-10-23 06:32:13 +02:00
Matthias
fe5f085ec1 types-requests pre-commit 2023-10-23 06:31:22 +02:00
dependabot[bot]
748ac50d83 Bump ccxt from 4.1.13 to 4.1.22
Bumps [ccxt](https://github.com/ccxt/ccxt) from 4.1.13 to 4.1.22.
- [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.1.13...4.1.22)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-23 03:47:08 +00:00
dependabot[bot]
d2069c1729 Bump pytest-mock from 3.11.1 to 3.12.0
Bumps [pytest-mock](https://github.com/pytest-dev/pytest-mock) from 3.11.1 to 3.12.0.
- [Release notes](https://github.com/pytest-dev/pytest-mock/releases)
- [Changelog](https://github.com/pytest-dev/pytest-mock/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/pytest-dev/pytest-mock/compare/v3.11.1...v3.12.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-23 03:47:01 +00:00
dependabot[bot]
38cf50830a Bump fastapi from 0.103.2 to 0.104.0
Bumps [fastapi](https://github.com/tiangolo/fastapi) from 0.103.2 to 0.104.0.
- [Release notes](https://github.com/tiangolo/fastapi/releases)
- [Commits](https://github.com/tiangolo/fastapi/compare/0.103.2...0.104.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-23 03:46:55 +00:00
dependabot[bot]
bf96a43efb Bump types-requests from 2.31.0.9 to 2.31.0.10
Bumps [types-requests](https://github.com/python/typeshed) from 2.31.0.9 to 2.31.0.10.
- [Commits](https://github.com/python/typeshed/commits)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-23 03:46:50 +00:00
dependabot[bot]
22b4555926 Bump tensorboard from 2.14.1 to 2.15.0
Bumps [tensorboard](https://github.com/tensorflow/tensorboard) from 2.14.1 to 2.15.0.
- [Release notes](https://github.com/tensorflow/tensorboard/releases)
- [Changelog](https://github.com/tensorflow/tensorboard/blob/2.15.0/RELEASE.md)
- [Commits](https://github.com/tensorflow/tensorboard/compare/2.14.1...2.15.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-23 03:46:46 +00:00
dependabot[bot]
7fb3632e7b Bump mypy from 1.6.0 to 1.6.1
Bumps [mypy](https://github.com/python/mypy) from 1.6.0 to 1.6.1.
- [Changelog](https://github.com/python/mypy/blob/master/CHANGELOG.md)
- [Commits](https://github.com/python/mypy/compare/v1.6.0...v1.6.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-23 03:46:11 +00:00
dependabot[bot]
e5f0fe288a Bump pymdown-extensions from 10.3 to 10.3.1
Bumps [pymdown-extensions](https://github.com/facelessuser/pymdown-extensions) from 10.3 to 10.3.1.
- [Release notes](https://github.com/facelessuser/pymdown-extensions/releases)
- [Commits](https://github.com/facelessuser/pymdown-extensions/compare/10.3...10.3.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>
2023-10-23 03:46:06 +00:00
dependabot[bot]
58aaaffe2b Bump websockets from 11.0.3 to 12.0
Bumps [websockets](https://github.com/python-websockets/websockets) from 11.0.3 to 12.0.
- [Release notes](https://github.com/python-websockets/websockets/releases)
- [Commits](https://github.com/python-websockets/websockets/compare/11.0.3...12.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-23 03:46:02 +00:00
Matthias
c62aefbfde Merge pull request #9327 from amargedon/mapping-fiat-usdc
Add FIAT mapping for USDC
2023-10-22 20:12:42 +02:00
amargedon
16dfde22fc Add FIAT mapping for USDC 2023-10-22 18:43:35 +02:00
Matthias
bbbc8a760c Fix stop evaluation sequence to have stop before liquidation
Adjust test to have liquidation above stop
closes #9296
2023-10-22 09:24:28 +02:00
Matthias
9b45bb2e24 Merge pull request #9325 from freqtrade/revert-9281-dependabot/pip/develop/torch-2.1.0
Revert "Bump torch from 2.0.1 to 2.1.0"
2023-10-22 09:23:58 +02:00
Matthias
e69c21c9f5 Revert "Bump torch from 2.0.1 to 2.1.0" 2023-10-22 08:59:23 +02:00
Robert Caulk
72933859cf Merge pull request #9281 from freqtrade/dependabot/pip/develop/torch-2.1.0
Bump torch from 2.0.1 to 2.1.0
2023-10-22 08:01:16 +02:00
Matthias
0a5cee6a73 Ensure we're not erroring on invalid custom_entry / exit prices
closes #9323
2023-10-19 22:06:21 +02:00
Matthias
a80c979482 Improve behavior when downloading trades data on time-based pagination
closes #9307
2023-10-18 20:26:51 +02:00
Matthias
4a4b695b94 Merge pull request #9321 from freqtrade/dependabot/pip/urllib3-2.0.7
Bump urllib3 from 2.0.6 to 2.0.7
2023-10-18 06:26:10 +02:00
dependabot[bot]
a8c246ce0d Bump urllib3 from 2.0.6 to 2.0.7
Bumps [urllib3](https://github.com/urllib3/urllib3) from 2.0.6 to 2.0.7.
- [Release notes](https://github.com/urllib3/urllib3/releases)
- [Changelog](https://github.com/urllib3/urllib3/blob/main/CHANGES.rst)
- [Commits](https://github.com/urllib3/urllib3/compare/2.0.6...2.0.7)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-17 21:02:44 +00:00
Matthias
c6e979ddda Merge pull request #9303 from freqtrade/fix/progressbarCallback
Improve freqAI RL (error) behavior
2023-10-17 18:01:31 +02:00
Matthias
1a78346cf1 Add further ebug log message for stopping clarity for --dl-data 2023-10-17 07:11:06 +02:00
Matthias
e6d0d53e47 Add further ebug log message for stopping clarity 2023-10-17 07:03:03 +02:00
Matthias
68680bb2c6 Merge pull request #9314 from freqtrade/dependabot/pip/develop/numpy-1.26.1
Bump numpy from 1.25.2 to 1.26.1
2023-10-16 19:33:07 +02:00
Matthias
7de415a6a4 Don't bump numpy for armhf just yet 2023-10-16 18:28:00 +02:00
dependabot[bot]
f46fa440f0 Bump numpy from 1.25.2 to 1.26.1
Bumps [numpy](https://github.com/numpy/numpy) from 1.25.2 to 1.26.1.
- [Release notes](https://github.com/numpy/numpy/releases)
- [Changelog](https://github.com/numpy/numpy/blob/main/doc/RELEASE_WALKTHROUGH.rst)
- [Commits](https://github.com/numpy/numpy/compare/v1.25.2...v1.26.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-16 16:27:50 +00:00
Matthias
56177d7e92 Merge pull request #9317 from freqtrade/dependabot/pip/develop/ccxt-4.1.13
Bump ccxt from 4.1.8 to 4.1.13
2023-10-16 18:27:02 +02:00
Matthias
41584317e4 Merge pull request #9311 from freqtrade/dependabot/pip/develop/types-requests-2.31.0.9
Bump types-requests from 2.31.0.8 to 2.31.0.9
2023-10-16 14:52:35 +02:00
Matthias
3264e2c31d pre-commit requests bump 2023-10-16 13:38:01 +02:00
dependabot[bot]
fadc7a2051 Bump types-requests from 2.31.0.8 to 2.31.0.9
Bumps [types-requests](https://github.com/python/typeshed) from 2.31.0.8 to 2.31.0.9.
- [Commits](https://github.com/python/typeshed/commits)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-16 09:59:18 +00:00
Matthias
cebc55687b Merge pull request #9316 from freqtrade/dependabot/pip/develop/mypy-1.6.0
Bump mypy from 1.5.1 to 1.6.0
2023-10-16 11:58:20 +02:00
dependabot[bot]
5940279f7b Bump mypy from 1.5.1 to 1.6.0
Bumps [mypy](https://github.com/python/mypy) from 1.5.1 to 1.6.0.
- [Commits](https://github.com/python/mypy/compare/v1.5.1...v1.6.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-16 07:01:34 +00:00
dependabot[bot]
35f6333b67 Bump ccxt from 4.1.8 to 4.1.13
Bumps [ccxt](https://github.com/ccxt/ccxt) from 4.1.8 to 4.1.13.
- [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.1.8...4.1.13)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-16 07:01:30 +00:00
Matthias
262b044969 Merge pull request #9312 from freqtrade/dependabot/pip/develop/sqlalchemy-2.0.22
Bump sqlalchemy from 2.0.21 to 2.0.22
2023-10-16 09:00:55 +02:00
Matthias
a571df784c Merge pull request #9318 from freqtrade/dependabot/pip/develop/pre-commit-3.5.0
Bump pre-commit from 3.4.0 to 3.5.0
2023-10-16 09:00:36 +02:00
Matthias
078aa8327b Merge pull request #9315 from freqtrade/dependabot/pip/develop/ast-comments-1.1.2
Bump ast-comments from 1.1.0 to 1.1.2
2023-10-16 07:25:41 +02:00
Matthias
10945edbe6 Merge pull request #9313 from freqtrade/dependabot/pip/develop/mkdocs-material-9.4.6
Bump mkdocs-material from 9.4.4 to 9.4.6
2023-10-16 07:03:05 +02:00
Matthias
5d9b69cbfe sqlalchemy - precommit 2023-10-16 06:33:53 +02:00
Matthias
89117dd53f Merge pull request #9310 from freqtrade/dependabot/pip/develop/psutil-5.9.6
Bump psutil from 5.9.5 to 5.9.6
2023-10-16 06:33:03 +02:00
Matthias
4af9654696 Merge pull request #9308 from freqtrade/dependabot/pip/develop/orjson-3.9.9
Bump orjson from 3.9.7 to 3.9.9
2023-10-16 06:32:33 +02:00
dependabot[bot]
1e0ce7d47a Bump pre-commit from 3.4.0 to 3.5.0
Bumps [pre-commit](https://github.com/pre-commit/pre-commit) from 3.4.0 to 3.5.0.
- [Release notes](https://github.com/pre-commit/pre-commit/releases)
- [Changelog](https://github.com/pre-commit/pre-commit/blob/main/CHANGELOG.md)
- [Commits](https://github.com/pre-commit/pre-commit/compare/v3.4.0...v3.5.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>
2023-10-16 03:49:38 +00:00
dependabot[bot]
27cd54b42c Bump ast-comments from 1.1.0 to 1.1.2
Bumps [ast-comments](https://github.com/t3rn0/ast-comments) from 1.1.0 to 1.1.2.
- [Release notes](https://github.com/t3rn0/ast-comments/releases)
- [Commits](https://github.com/t3rn0/ast-comments/compare/1.1.0...1.1.2)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-16 03:49:12 +00:00
dependabot[bot]
ec64a182f9 Bump mkdocs-material from 9.4.4 to 9.4.6
Bumps [mkdocs-material](https://github.com/squidfunk/mkdocs-material) from 9.4.4 to 9.4.6.
- [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.4.4...9.4.6)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-16 03:48:51 +00:00
dependabot[bot]
dd30df7057 Bump sqlalchemy from 2.0.21 to 2.0.22
Bumps [sqlalchemy](https://github.com/sqlalchemy/sqlalchemy) from 2.0.21 to 2.0.22.
- [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>
2023-10-16 03:48:44 +00:00
dependabot[bot]
4c6e33aa82 Bump psutil from 5.9.5 to 5.9.6
Bumps [psutil](https://github.com/giampaolo/psutil) from 5.9.5 to 5.9.6.
- [Changelog](https://github.com/giampaolo/psutil/blob/master/HISTORY.rst)
- [Commits](https://github.com/giampaolo/psutil/compare/release-5.9.5...release-5.9.6)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-16 03:48:10 +00:00
dependabot[bot]
8cb934849a Bump orjson from 3.9.7 to 3.9.9
Bumps [orjson](https://github.com/ijl/orjson) from 3.9.7 to 3.9.9.
- [Release notes](https://github.com/ijl/orjson/releases)
- [Changelog](https://github.com/ijl/orjson/blob/master/CHANGELOG.md)
- [Commits](https://github.com/ijl/orjson/compare/3.9.7...3.9.9)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-16 03:47:58 +00:00
Matthias
c627aee096 Merge pull request #9304 from stash86/bt-metrics
have to use bitwise operator on series comparison, otherwise ambiguous error is thrown
2023-10-15 13:07:54 +02:00
Stefano Ariestasia
9d552d45c2 have to use bitwise operator, otherwise ambiguous error is thrown 2023-10-15 19:32:03 +09:00
Matthias
1e1b8dbe53 Handle multiproc calls for now 2023-10-15 12:03:18 +02:00
Matthias
2d9d8dc976 Improve logic for progressbarcallback handling 2023-10-15 11:20:25 +02:00
Matthias
ba674fc796 Type-ignore training-envs 2023-10-15 11:20:11 +02:00
Matthias
58550515ad Fix deprecation warning from tensorboard-callback 2023-10-15 11:04:05 +02:00
Matthias
27bae60b68 Fix typo 2023-10-15 10:51:36 +02:00
Matthias
646dd63faf Properly close out progressbarCallback
based on suggestions provided in https://github.com/DLR-RM/stable-baselines3/issues/1645
2023-10-15 10:41:07 +02:00
Matthias
8d2b389e27 Fix wording in log msg 2023-10-15 10:40:45 +02:00
Matthias
fa174a392a Merge pull request #9298 from freqtrade/funding_fees
improve Funding fee behavior
2023-10-13 16:38:16 +02:00
Matthias
042e35e8d3 Improve funding fee startup behavior 2023-10-13 06:45:00 +02:00
Matthias
b76513ce33 Fix typo in trade_model 2023-10-12 10:18:57 +00:00
Matthias
368bfcf476 Add comment for funding fees running 2023-10-12 07:25:46 +02:00
Matthias
fee3c598d0 Move schedule to 1 minute after the hour
This will avoid congestion at :00, and make sure that the dry-run funding fees are actually already available
2023-10-12 07:16:56 +02:00
Matthias
69264cc164 Reduce funding fee update calls
Funding fees update every 4-8 hours - calling this every 15 minutes is way overboard.
2023-10-12 07:13:30 +02:00
Matthias
e81929bc55 Have test use funding_fee_running 2023-10-12 07:01:43 +02:00
Matthias
0843b19b6c Implement logic around funding_fees runnign 2023-10-12 06:53:46 +02:00
Matthias
813b472c6c Add funding_fee_running column 2023-10-12 06:48:35 +02:00
Matthias
2f079711ec Add explicit test for get_funding_fees logic 2023-10-12 06:27:57 +02:00
Matthias
97e9d2dc42 Remove get_funding_fee error handling - it's no longer raising this error. 2023-10-12 06:27:35 +02:00
Matthias
7344f20803 Handle funding_fee error in exchange class 2023-10-12 06:27:29 +02:00
Matthias
bfe04464b4 Handle funding fee errors for regular trades per trade 2023-10-11 20:27:54 +02:00
Matthias
2225f5661b Additional funding fee update after additional entry orders 2023-10-11 20:27:03 +02:00
Matthias
9e77c93a54 Tighten funding-fee variance for backtest 2023-10-11 19:49:33 +02:00
Matthias
b65fa98cee Simplify backtesting by using current_time more consequently 2023-10-11 19:45:00 +02:00
Matthias
b57821b273 Add set_funding_fees to backtesting 2023-10-11 19:38:58 +02:00
Matthias
db7f9598b0 add set_funding_fees method 2023-10-11 19:38:46 +02:00
Matthias
e547da10de Move funding fee assignment to update_trade 2023-10-11 18:28:15 +02:00
Matthias
5a0c15f377 Update Idem test 2023-10-10 18:21:52 +02:00
Matthias
0f5b69b4f2 Move from_json to LocalTrade class 2023-10-10 07:13:32 +02:00
Matthias
86d4497aaf Add additional test for from_json 2023-10-09 20:01:41 +02:00
Matthias
4b80961c65 Merge pull request #9276 from freqtrade/cancel_behavior
Improve Cancel order messaging behavior
2023-10-09 18:13:04 +02:00
Matthias
785cc9df85 Merge pull request #9293 from freqtrade/revert-9285-dependabot/pip/develop/tables-3.9.1
Revert "Bump tables from 3.8.0 to 3.9.1"
2023-10-09 18:11:16 +02:00
Matthias
1bfecb0313 Revert "Bump tables from 3.8.0 to 3.9.1" 2023-10-09 18:11:01 +02:00
Matthias
b88a561eb5 Merge pull request #9283 from freqtrade/dependabot/pip/develop/types-requests-2.31.0.8
Bump types-requests from 2.31.0.7 to 2.31.0.8
2023-10-09 09:42:26 +02:00
Matthias
4bf026605e Merge pull request #9289 from freqtrade/dependabot/pip/develop/markdown-3.5
Bump markdown from 3.4.4 to 3.5
2023-10-09 09:42:13 +02:00
Matthias
db6933856f Merge pull request #9288 from freqtrade/dependabot/pip/develop/aiohttp-3.8.6
Bump aiohttp from 3.8.5 to 3.8.6
2023-10-09 09:41:49 +02:00
Matthias
01107ffa59 Merge pull request #9282 from freqtrade/dependabot/pip/develop/python-telegram-bot-20.6
Bump python-telegram-bot from 20.5 to 20.6
2023-10-09 09:41:32 +02:00
dependabot[bot]
74f678a26f Bump markdown from 3.4.4 to 3.5
Bumps [markdown](https://github.com/Python-Markdown/markdown) from 3.4.4 to 3.5.
- [Changelog](https://github.com/Python-Markdown/markdown/blob/master/docs/changelog.md)
- [Commits](https://github.com/Python-Markdown/markdown/compare/3.4.4...3.5)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-09 06:13:16 +00:00
Matthias
bf93648198 Merge pull request #9287 from freqtrade/dependabot/pip/develop/nbconvert-7.9.2
Bump nbconvert from 7.8.0 to 7.9.2
2023-10-09 08:12:34 +02:00
Matthias
51dccaeb4c Merge pull request #9280 from freqtrade/dependabot/pip/develop/mkdocs-material-9.4.4
Bump mkdocs-material from 9.4.2 to 9.4.4
2023-10-09 08:11:04 +02:00
Matthias
ed4252af53 Merge pull request #9285 from freqtrade/dependabot/pip/develop/tables-3.9.1
Bump tables from 3.8.0 to 3.9.1
2023-10-09 08:09:33 +02:00
Matthias
2fde902c82 Merge pull request #9284 from freqtrade/dependabot/pip/develop/python-rapidjson-1.12
Bump python-rapidjson from 1.11 to 1.12
2023-10-09 08:07:24 +02:00
Matthias
4ea75af2d9 Merge pull request #9286 from freqtrade/dependabot/pip/develop/ruff-0.0.292
Bump ruff from 0.0.291 to 0.0.292
2023-10-09 08:07:00 +02:00
Matthias
1bba0cf7fc Bump pre-commit types-requests 2023-10-09 07:06:33 +02:00
Matthias
b1fd0c73c7 Add additional test case for funding-fee calculation 2023-10-09 07:05:39 +02:00
Matthias
29eb6d938b Update test for fixed funding_fee logic 2023-10-09 07:04:13 +02:00
Matthias
19620470bd Improve funding fee cutof logic 2023-10-09 07:04:13 +02:00
Matthias
7a69b01b9b avoid edge-case in test 2023-10-09 07:04:13 +02:00
Matthias
bc531cf846 Improve variable naming 2023-10-09 07:04:13 +02:00
Matthias
14908e52e2 Improv variable naming 2023-10-09 07:04:13 +02:00
dependabot[bot]
a86bf8d6d7 Bump aiohttp from 3.8.5 to 3.8.6
Bumps [aiohttp](https://github.com/aio-libs/aiohttp) from 3.8.5 to 3.8.6.
- [Release notes](https://github.com/aio-libs/aiohttp/releases)
- [Changelog](https://github.com/aio-libs/aiohttp/blob/master/CHANGES.rst)
- [Commits](https://github.com/aio-libs/aiohttp/compare/v3.8.5...v3.8.6)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-09 05:02:10 +00:00
Matthias
3662ca3ca6 Merge pull request #9279 from freqtrade/dependabot/pip/develop/ccxt-4.1.8
Bump ccxt from 4.0.112 to 4.1.8
2023-10-09 07:01:04 +02:00
dependabot[bot]
5fae03f7be Bump nbconvert from 7.8.0 to 7.9.2
Bumps [nbconvert](https://github.com/jupyter/nbconvert) from 7.8.0 to 7.9.2.
- [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.8.0...v7.9.2)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-09 03:54:23 +00:00
dependabot[bot]
f7f0f3bebb Bump ruff from 0.0.291 to 0.0.292
Bumps [ruff](https://github.com/astral-sh/ruff) from 0.0.291 to 0.0.292.
- [Release notes](https://github.com/astral-sh/ruff/releases)
- [Changelog](https://github.com/astral-sh/ruff/blob/main/BREAKING_CHANGES.md)
- [Commits](https://github.com/astral-sh/ruff/compare/v0.0.291...v0.0.292)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-09 03:54:13 +00:00
dependabot[bot]
ccbab6ee6f Bump tables from 3.8.0 to 3.9.1
Bumps [tables](https://github.com/PyTables/PyTables) from 3.8.0 to 3.9.1.
- [Release notes](https://github.com/PyTables/PyTables/releases)
- [Changelog](https://github.com/PyTables/PyTables/blob/master/RELEASE_NOTES.rst)
- [Commits](https://github.com/PyTables/PyTables/compare/v3.8.0...v3.9.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-09 03:53:53 +00:00
dependabot[bot]
ef12dafea8 Bump python-rapidjson from 1.11 to 1.12
Bumps [python-rapidjson](https://github.com/python-rapidjson/python-rapidjson) from 1.11 to 1.12.
- [Changelog](https://github.com/python-rapidjson/python-rapidjson/blob/master/CHANGES.rst)
- [Commits](https://github.com/python-rapidjson/python-rapidjson/compare/v1.11...v1.12)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-09 03:53:42 +00:00
dependabot[bot]
08a65b50aa Bump types-requests from 2.31.0.7 to 2.31.0.8
Bumps [types-requests](https://github.com/python/typeshed) from 2.31.0.7 to 2.31.0.8.
- [Commits](https://github.com/python/typeshed/commits)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-09 03:53:37 +00:00
dependabot[bot]
d28d6cbdb4 Bump python-telegram-bot from 20.5 to 20.6
Bumps [python-telegram-bot](https://github.com/python-telegram-bot/python-telegram-bot) from 20.5 to 20.6.
- [Release notes](https://github.com/python-telegram-bot/python-telegram-bot/releases)
- [Changelog](https://github.com/python-telegram-bot/python-telegram-bot/blob/master/CHANGES.rst)
- [Commits](https://github.com/python-telegram-bot/python-telegram-bot/compare/v20.5...v20.6)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-09 03:53:34 +00:00
dependabot[bot]
41a6709ece Bump torch from 2.0.1 to 2.1.0
Bumps [torch](https://github.com/pytorch/pytorch) from 2.0.1 to 2.1.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.0.1...v2.1.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-09 03:53:23 +00:00
dependabot[bot]
756f5d5408 Bump mkdocs-material from 9.4.2 to 9.4.4
Bumps [mkdocs-material](https://github.com/squidfunk/mkdocs-material) from 9.4.2 to 9.4.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.4.2...9.4.4)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-09 03:53:10 +00:00
dependabot[bot]
422b9c8fbc Bump ccxt from 4.0.112 to 4.1.8
Bumps [ccxt](https://github.com/ccxt/ccxt) from 4.0.112 to 4.1.8.
- [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.0.112...4.1.8)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-09 03:53:01 +00:00
Matthias
40ec2c4921 Improve messaging in case of delayed exchange cancel 2023-10-08 11:17:29 +02:00
Matthias
5cf7ad85a0 Adjust tests for new interface to handle_cancel_* methods 2023-10-08 10:44:37 +02:00
Matthias
f02c9f0435 Pass order object to handle_cancel* methods 2023-10-08 10:26:27 +02:00
Matthias
c59b5e7781 Improve type hinting 2023-10-08 09:58:06 +02:00
Matthias
e525c6694b Add ft_cancel_reason column to order object 2023-10-08 09:46:12 +02:00
Matthias
897c14e2e5 Don't check for "open orders" in handle_cancel_enter
it's actually irrelenant (closes #9273).
2023-10-08 09:40:46 +02:00
Matthias
6c00bf423b Fix comment 2023-10-08 08:59:18 +02:00
Matthias
094984eb2f Fix wrong typehint 2023-10-07 15:09:44 +02:00
Matthias
081411fba4 Improve bot typehints 2023-10-07 15:09:34 +02:00
Matthias
178c0972ff Read funding_fee on order objects in "from_json" 2023-10-07 08:43:06 +02:00
Axel-CH
e8be011e2b update manage_trade_stoploss_orders: remove unrelevant TODO 2023-10-06 17:01:12 -04:00
Axel-CH
aaa82e1fa9 remove all occurence of stoploss_order_id in trade_model, update api schemas, update rpc_delete 2023-10-06 16:34:03 -04:00
Axel-CH
2bb68ca53d remove stoploss_order_id from LocalTrade class 2023-10-06 16:08:40 -04:00
Axel-CH
df8f1b9328 update manage_trade_stoploss_orders description 2023-10-06 15:58:51 -04:00
Axel-CH
9d82de15d4 first updated proposition of handle_stoploss_on_exchange, add sl_orders helper 2023-10-06 15:56:08 -04:00
Matthias
910e317a45 Fix unhandled exception
closes #9270
2023-10-06 20:13:37 +02:00
Matthias
1ef5adbb0e Test for #9270 2023-10-06 20:13:11 +02:00
Axel-CH
ea828ccb4a remove legacy sl management code from create_stoploss_order 2023-10-06 10:40:23 -04:00
Axel-CH
2565d509a6 remove legacy sl management code from handle_insufficient_funds 2023-10-06 10:38:14 -04:00
Axel-CH
d5a0759051 add open_sl_orders helper, use it in cancel_stoploss_on_exchange 2023-10-06 10:29:57 -04:00
Axel-CH
9214af6901 update cancel_stoploss_on_exchange to cancel all sl orders of trade 2023-10-05 22:24:17 -04:00
Matthias
f5db856a75 re-align adjust_entry_price between backtest and live 2023-10-05 18:11:35 +02:00
Matthias
b2ad40253f Hide most non-freqtrade logs in -v mode 2023-10-05 07:03:29 +02:00
Matthias
1e0d622d80 Don't run "recovery" when stop-orders are open 2023-10-05 06:45:00 +02:00
Matthias
1d941249ed Revert "Remove numpy armv7l lock since wheels are now available"
This reverts commit 04409602a6.
2023-10-04 19:57:26 +02:00
Axel-CH
cac777cb21 add property has_open_sl_orders to trade model 2023-10-04 13:09:44 -04:00
Matthias
5bfd3fdc33 Add openblas to armhf image 2023-10-04 17:55:15 +02:00
Matthias
753b807a45 Merge pull request #9211 from freqtrade/dependabot/pip/cryptography-41.0.4
Bump cryptography from 41.0.3 to 41.0.4
2023-10-04 07:12:01 +02:00
Matthias
04409602a6 Remove numpy armv7l lock since wheels are now available 2023-10-04 07:10:51 +02:00
Matthias
b2796b850b Add funding_fee export to order object
Helps debugging #9163
2023-10-04 06:36:39 +02:00
Matthias
8c633aab19 Merge pull request #9261 from stash86/bt-metrics
Fix visual issues and docs
2023-10-03 07:06:03 +02:00
Stefano Ariestasia
f14b4133c3 fix wording 2023-10-03 13:36:31 +09:00
Matthias
8f2e4aa4fd Merge pull request #9262 from freqtrade/dependabot/pip/urllib3-2.0.6
Bump urllib3 from 2.0.5 to 2.0.6
2023-10-03 06:17:44 +02:00
dependabot[bot]
3c2e043e82 Bump urllib3 from 2.0.5 to 2.0.6
Bumps [urllib3](https://github.com/urllib3/urllib3) from 2.0.5 to 2.0.6.
- [Release notes](https://github.com/urllib3/urllib3/releases)
- [Changelog](https://github.com/urllib3/urllib3/blob/main/CHANGES.rst)
- [Commits](https://github.com/urllib3/urllib3/compare/v2.0.5...2.0.6)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-03 00:22:39 +00:00
Stefano
609ed2d7b3 fix return values 2023-10-03 08:41:05 +09:00
Stefano Ariestasia
183166b3fb fix output if no variance, and fix docs 2023-10-03 08:27:28 +09:00
Matthias
12dc91719e Merge pull request #9247 from freqtrade/dependabot/pip/develop/pydantic-2.4.2
Bump pydantic from 2.3.0 to 2.4.2
2023-10-02 19:26:33 +02:00
dependabot[bot]
cd071c3bdc Bump cryptography from 41.0.3 to 41.0.4
Bumps [cryptography](https://github.com/pyca/cryptography) from 41.0.3 to 41.0.4.
- [Changelog](https://github.com/pyca/cryptography/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/pyca/cryptography/compare/41.0.3...41.0.4)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-02 17:21:57 +00:00
Matthias
0618ecce47 Merge pull request #9249 from freqtrade/dependabot/pip/develop/ccxt-4.0.112
Bump ccxt from 4.0.105 to 4.0.112
2023-10-02 19:21:00 +02:00
Matthias
13438ad8de Merge pull request #9260 from freqtrade/revert-9250-dependabot/pip/develop/ast-comments-1.1.1
Revert "Bump ast-comments from 1.1.0 to 1.1.1"
2023-10-02 18:30:22 +02:00
Matthias
60c2b1d6ca Revert "Bump ast-comments from 1.1.0 to 1.1.1" 2023-10-02 18:02:36 +02:00
Matthias
eaf4ffcbaf Merge pull request #9253 from freqtrade/dependabot/pip/develop/types-requests-2.31.0.7
Bump types-requests from 2.31.0.4 to 2.31.0.7
2023-10-02 16:11:00 +02:00
Matthias
79e59bdda0 Bump types-requests pre-commit 2023-10-02 13:37:49 +02:00
dependabot[bot]
b409ab5ead Bump pydantic from 2.3.0 to 2.4.2
Bumps [pydantic](https://github.com/pydantic/pydantic) from 2.3.0 to 2.4.2.
- [Release notes](https://github.com/pydantic/pydantic/releases)
- [Changelog](https://github.com/pydantic/pydantic/blob/main/HISTORY.md)
- [Commits](https://github.com/pydantic/pydantic/compare/v2.3.0...v2.4.2)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-02 07:59:35 +00:00
Matthias
790c7036a1 Merge pull request #9258 from freqtrade/dependabot/pip/develop/fastapi-0.103.2
Bump fastapi from 0.103.1 to 0.103.2
2023-10-02 09:58:33 +02:00
Matthias
73902f507a Merge pull request #9250 from freqtrade/dependabot/pip/develop/ast-comments-1.1.1
Bump ast-comments from 1.1.0 to 1.1.1
2023-10-02 09:43:39 +02:00
Matthias
1a80f6bc4e Merge pull request #9257 from freqtrade/dependabot/pip/develop/arrow-1.3.0
Bump arrow from 1.2.3 to 1.3.0
2023-10-02 09:43:18 +02:00
dependabot[bot]
5feb7fe654 Bump ast-comments from 1.1.0 to 1.1.1
Bumps [ast-comments](https://github.com/t3rn0/ast-comments) from 1.1.0 to 1.1.1.
- [Release notes](https://github.com/t3rn0/ast-comments/releases)
- [Commits](https://github.com/t3rn0/ast-comments/compare/1.1.0...1.1.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-02 06:19:59 +00:00
dependabot[bot]
980960bc6a Bump arrow from 1.2.3 to 1.3.0
Bumps [arrow](https://github.com/arrow-py/arrow) from 1.2.3 to 1.3.0.
- [Release notes](https://github.com/arrow-py/arrow/releases)
- [Changelog](https://github.com/arrow-py/arrow/blob/master/CHANGELOG.rst)
- [Commits](https://github.com/arrow-py/arrow/compare/1.2.3...1.3.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-02 06:18:56 +00:00
Matthias
52c614733f Merge pull request #9255 from freqtrade/dependabot/pip/develop/tensorboard-2.14.1
Bump tensorboard from 2.14.0 to 2.14.1
2023-10-02 08:18:48 +02:00
Matthias
e913d12c71 Merge pull request #9252 from freqtrade/dependabot/pip/develop/mkdocs-material-9.4.2
Bump mkdocs-material from 9.4.1 to 9.4.2
2023-10-02 08:18:08 +02:00
Matthias
5dc24232ca Merge pull request #9254 from freqtrade/dependabot/pip/develop/packaging-23.2
Bump packaging from 23.1 to 23.2
2023-10-02 08:17:53 +02:00
Matthias
ef2115d667 Merge pull request #9256 from freqtrade/dependabot/pip/develop/rich-13.6.0
Bump rich from 13.5.3 to 13.6.0
2023-10-02 08:17:31 +02:00
Matthias
74476eae43 Merge pull request #9251 from freqtrade/dependabot/pip/develop/scipy-1.11.3
Bump scipy from 1.11.2 to 1.11.3
2023-10-02 08:17:14 +02:00
Matthias
84335d58b3 Greatly speed up recursive by caching exchange 2023-10-02 06:34:35 +02:00
Matthias
f175fc6e9b Merge pull request #9248 from freqtrade/dependabot/pip/develop/schedule-1.2.1
Bump schedule from 1.2.0 to 1.2.1
2023-10-02 06:20:44 +02:00
dependabot[bot]
9edd7e6bc8 Bump fastapi from 0.103.1 to 0.103.2
Bumps [fastapi](https://github.com/tiangolo/fastapi) from 0.103.1 to 0.103.2.
- [Release notes](https://github.com/tiangolo/fastapi/releases)
- [Commits](https://github.com/tiangolo/fastapi/compare/0.103.1...0.103.2)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-02 03:41:42 +00:00
dependabot[bot]
7478c56ca5 Bump rich from 13.5.3 to 13.6.0
Bumps [rich](https://github.com/Textualize/rich) from 13.5.3 to 13.6.0.
- [Release notes](https://github.com/Textualize/rich/releases)
- [Changelog](https://github.com/Textualize/rich/blob/master/CHANGELOG.md)
- [Commits](https://github.com/Textualize/rich/compare/v13.5.3...v13.6.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-02 03:41:29 +00:00
dependabot[bot]
1f36f4802a Bump tensorboard from 2.14.0 to 2.14.1
Bumps [tensorboard](https://github.com/tensorflow/tensorboard) from 2.14.0 to 2.14.1.
- [Release notes](https://github.com/tensorflow/tensorboard/releases)
- [Changelog](https://github.com/tensorflow/tensorboard/blob/master/RELEASE.md)
- [Commits](https://github.com/tensorflow/tensorboard/compare/2.14.0...2.14.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-02 03:41:23 +00:00
dependabot[bot]
4d920d7866 Bump packaging from 23.1 to 23.2
Bumps [packaging](https://github.com/pypa/packaging) from 23.1 to 23.2.
- [Release notes](https://github.com/pypa/packaging/releases)
- [Changelog](https://github.com/pypa/packaging/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/pypa/packaging/compare/23.1...23.2)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-02 03:41:09 +00:00
dependabot[bot]
19fb3f9b54 Bump types-requests from 2.31.0.4 to 2.31.0.7
Bumps [types-requests](https://github.com/python/typeshed) from 2.31.0.4 to 2.31.0.7.
- [Commits](https://github.com/python/typeshed/commits)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-02 03:40:59 +00:00
dependabot[bot]
fafc102573 Bump mkdocs-material from 9.4.1 to 9.4.2
Bumps [mkdocs-material](https://github.com/squidfunk/mkdocs-material) from 9.4.1 to 9.4.2.
- [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.4.1...9.4.2)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-02 03:40:52 +00:00
dependabot[bot]
3868f9c698 Bump scipy from 1.11.2 to 1.11.3
Bumps [scipy](https://github.com/scipy/scipy) from 1.11.2 to 1.11.3.
- [Release notes](https://github.com/scipy/scipy/releases)
- [Commits](https://github.com/scipy/scipy/compare/v1.11.2...v1.11.3)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-02 03:40:40 +00:00
dependabot[bot]
0204f666b3 Bump ccxt from 4.0.105 to 4.0.112
Bumps [ccxt](https://github.com/ccxt/ccxt) from 4.0.105 to 4.0.112.
- [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.0.105...4.0.112)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-02 03:40:23 +00:00
dependabot[bot]
f32a13bfb0 Bump schedule from 1.2.0 to 1.2.1
Bumps [schedule](https://github.com/dbader/schedule) from 1.2.0 to 1.2.1.
- [Changelog](https://github.com/dbader/schedule/blob/master/HISTORY.rst)
- [Commits](https://github.com/dbader/schedule/compare/1.2.0...1.2.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-02 03:40:10 +00:00
Matthias
4809c9f07a Adjust tests for new naming 2023-10-01 08:00:09 +02:00
Matthias
19af144b33 Improve of analysis files further 2023-10-01 07:58:46 +02:00
Matthias
4db7962048 Update tests to new structure 2023-10-01 07:55:03 +02:00
Matthias
7e6f2cba53 Move analysis command into their own subspace 2023-10-01 07:54:09 +02:00
Matthias
c6199e5ca6 Merge pull request #9232 from freqtrade/kraken/dldata
Kraken - dataimport
2023-10-01 07:13:54 +02:00
Matthias
f7ff1dc610 Bump develop version to 2023.10-dev 2023-09-30 13:13:18 +02:00
Matthias
8ad6eb9896 Update parameter value to be clearer 2023-09-25 19:55:58 +02:00
Matthias
74709461e3 Improve exception wording 2023-09-25 19:48:09 +02:00
Matthias
9e6cc5ebbd Improve comment on special handling 2023-09-25 19:46:27 +02:00
Matthias
a2d8f92e05 Add rudimentary test for test_trade_converter 2023-09-25 19:46:15 +02:00
Matthias
a7d90e2a25 Minor adjustments to conversions 2023-09-25 19:45:03 +02:00
Matthias
83b37e2f78 Add documentation for kraken data mode 2023-09-25 18:23:20 +02:00
Matthias
488629096b Improve logging in kraken-converter 2023-09-25 18:23:20 +02:00
Matthias
a3f167f6df Split format-from for trades to allow for trades special case 2023-09-25 18:23:20 +02:00
Matthias
1e8814b43e Improve handling of kraken dataconvert 2023-09-25 18:23:20 +02:00
Matthias
2e430519e3 Call kraken-convert in special cases 2023-09-25 18:23:20 +02:00
Matthias
2164b02c66 Add initial code for trade_kraken import 2023-09-25 18:23:20 +02:00
228 changed files with 15715 additions and 9050 deletions

View File

@@ -10,8 +10,17 @@ updates:
directory: "/"
schedule:
interval: weekly
time: "03:00"
timezone: "Etc/UTC"
open-pull-requests-limit: 15
target-branch: develop
groups:
types:
patterns:
- "types-*"
pytest:
patterns:
- "pytest*"
- package-ecosystem: "github-actions"
directory: "/"

View File

@@ -25,26 +25,25 @@ jobs:
strategy:
matrix:
os: [ ubuntu-20.04, ubuntu-22.04 ]
python-version: ["3.9", "3.10", "3.11"]
python-version: ["3.9", "3.10", "3.11", "3.12"]
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v4
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
- name: Cache_dependencies
uses: actions/cache@v3
uses: actions/cache@v4
id: cache
with:
path: ~/dependencies/
key: ${{ runner.os }}-dependencies
- name: pip cache (linux)
uses: actions/cache@v3
if: runner.os == 'Linux'
uses: actions/cache@v4
with:
path: ~/.cache/pip
key: test-${{ matrix.os }}-${{ matrix.python-version }}-pip
@@ -55,7 +54,6 @@ jobs:
cd build_helpers && ./install_ta-lib.sh ${HOME}/dependencies/; cd ..
- name: Installation - *nix
if: runner.os == 'Linux'
run: |
python -m pip install --upgrade pip wheel
export LD_LIBRARY_PATH=${HOME}/dependencies/lib:$LD_LIBRARY_PATH
@@ -90,7 +88,7 @@ jobs:
- name: Backtesting (multi)
run: |
cp config_examples/config_bittrex.example.json config.json
cp tests/testdata/config.tests.json config.json
freqtrade create-userdir --userdir user_data
freqtrade new-strategy -s AwesomeStrategy
freqtrade new-strategy -s AwesomeStrategyMin --template minimal
@@ -98,7 +96,7 @@ jobs:
- name: Hyperopt
run: |
cp config_examples/config_bittrex.example.json config.json
cp tests/testdata/config.tests.json config.json
freqtrade create-userdir --userdir user_data
freqtrade hyperopt --datadir tests/testdata -e 6 --strategy SampleStrategy --hyperopt-loss SharpeHyperOptLossDaily --print-all
@@ -108,7 +106,7 @@ jobs:
- name: Run Ruff
run: |
ruff check --format=github .
ruff check --output-format=github .
- name: Mypy
run: |
@@ -122,35 +120,34 @@ jobs:
details: Freqtrade CI failed on ${{ matrix.os }}
webhookUrl: ${{ secrets.DISCORD_WEBHOOK }}
build_macos:
build-macos:
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ macos-latest ]
python-version: ["3.9", "3.10", "3.11"]
os: [ "macos-latest", "macos-13" ]
python-version: ["3.9", "3.10", "3.11", "3.12"]
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v4
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
check-latest: true
- name: Cache_dependencies
uses: actions/cache@v3
uses: actions/cache@v4
id: cache
with:
path: ~/dependencies/
key: ${{ runner.os }}-dependencies
key: ${{ matrix.os }}-dependencies
- name: pip cache (macOS)
uses: actions/cache@v3
if: runner.os == 'macOS'
uses: actions/cache@v4
with:
path: ~/Library/Caches/pip
key: test-${{ matrix.os }}-${{ matrix.python-version }}-pip
key: ${{ matrix.os }}-${{ matrix.python-version }}-pip
- name: TA binary *nix
if: steps.cache.outputs.cache-hit != 'true'
@@ -158,7 +155,6 @@ jobs:
cd build_helpers && ./install_ta-lib.sh ${HOME}/dependencies/; cd ..
- name: Installation - macOS
if: runner.os == 'macOS'
run: |
# brew update
# TODO: Should be the brew upgrade
@@ -166,16 +162,21 @@ jobs:
# https://github.com/actions/runner-images/issues/6817
rm /usr/local/bin/2to3 || true
rm /usr/local/bin/2to3-3.11 || true
rm /usr/local/bin/2to3-3.12 || true
rm /usr/local/bin/idle3 || true
rm /usr/local/bin/idle3.11 || true
rm /usr/local/bin/idle3.12 || true
rm /usr/local/bin/pydoc3 || true
rm /usr/local/bin/pydoc3.11 || true
rm /usr/local/bin/pydoc3.12 || true
rm /usr/local/bin/python3 || true
rm /usr/local/bin/python3.11 || true
rm /usr/local/bin/python3.12 || true
rm /usr/local/bin/python3-config || true
rm /usr/local/bin/python3.11-config || true
rm /usr/local/bin/python3.12-config || true
brew install hdf5 c-blosc
brew install hdf5 c-blosc libomp
python -m pip install --upgrade pip wheel
export LD_LIBRARY_PATH=${HOME}/dependencies/lib:$LD_LIBRARY_PATH
export TA_LIBRARY_PATH=${HOME}/dependencies/lib
@@ -200,14 +201,14 @@ jobs:
- name: Backtesting
run: |
cp config_examples/config_bittrex.example.json config.json
cp tests/testdata/config.tests.json config.json
freqtrade create-userdir --userdir user_data
freqtrade new-strategy -s AwesomeStrategyAdv --template advanced
freqtrade backtesting --datadir tests/testdata --strategy AwesomeStrategyAdv
- name: Hyperopt
run: |
cp config_examples/config_bittrex.example.json config.json
cp tests/testdata/config.tests.json config.json
freqtrade create-userdir --userdir user_data
freqtrade hyperopt --datadir tests/testdata -e 5 --strategy SampleStrategy --hyperopt-loss SharpeHyperOptLossDaily --print-all
@@ -217,7 +218,7 @@ jobs:
- name: Run Ruff
run: |
ruff check --format=github .
ruff check --output-format=github .
- name: Mypy
run: |
@@ -231,24 +232,24 @@ jobs:
details: Test Succeeded!
webhookUrl: ${{ secrets.DISCORD_WEBHOOK }}
build_windows:
build-windows:
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ windows-latest ]
python-version: ["3.9", "3.10", "3.11"]
python-version: ["3.9", "3.10", "3.11", "3.12"]
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v4
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
- name: Pip cache (Windows)
uses: actions/cache@v3
uses: actions/cache@v4
with:
path: ~\AppData\Local\pip\Cache
key: ${{ matrix.os }}-${{ matrix.python-version }}-pip
@@ -275,19 +276,19 @@ jobs:
- name: Backtesting
run: |
cp config_examples/config_bittrex.example.json config.json
cp tests/testdata/config.tests.json config.json
freqtrade create-userdir --userdir user_data
freqtrade backtesting --datadir tests/testdata --strategy SampleStrategy
- name: Hyperopt
run: |
cp config_examples/config_bittrex.example.json config.json
cp tests/testdata/config.tests.json config.json
freqtrade create-userdir --userdir user_data
freqtrade hyperopt --datadir tests/testdata -e 5 --strategy SampleStrategy --hyperopt-loss SharpeHyperOptLossDaily --print-all
- name: Run Ruff
run: |
ruff check --format=github .
ruff check --output-format=github .
- name: Mypy
run: |
@@ -301,13 +302,13 @@ jobs:
details: Test Failed
webhookUrl: ${{ secrets.DISCORD_WEBHOOK }}
mypy_version_check:
mypy-version-check:
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v4
uses: actions/setup-python@v5
with:
python-version: "3.10"
@@ -321,12 +322,12 @@ jobs:
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v4
- uses: actions/setup-python@v5
with:
python-version: "3.10"
- uses: pre-commit/action@v3.0.0
- uses: pre-commit/action@v3.0.1
docs_check:
docs-check:
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v4
@@ -336,7 +337,7 @@ jobs:
./tests/test_docs.sh
- name: Set up Python
uses: actions/setup-python@v4
uses: actions/setup-python@v5
with:
python-version: "3.11"
@@ -362,20 +363,19 @@ jobs:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v4
uses: actions/setup-python@v5
with:
python-version: "3.9"
python-version: "3.11"
- name: Cache_dependencies
uses: actions/cache@v3
uses: actions/cache@v4
id: cache
with:
path: ~/dependencies/
key: ${{ runner.os }}-dependencies
- name: pip cache (linux)
uses: actions/cache@v3
if: runner.os == 'Linux'
uses: actions/cache@v4
with:
path: ~/.cache/pip
key: test-${{ matrix.os }}-${{ matrix.python-version }}-pip
@@ -386,7 +386,6 @@ jobs:
cd build_helpers && ./install_ta-lib.sh ${HOME}/dependencies/; cd ..
- name: Installation - *nix
if: runner.os == 'Linux'
run: |
python -m pip install --upgrade pip wheel
export LD_LIBRARY_PATH=${HOME}/dependencies/lib:$LD_LIBRARY_PATH
@@ -399,17 +398,17 @@ jobs:
env:
CI_WEB_PROXY: http://152.67.78.211:13128
run: |
pytest --random-order --cov=freqtrade --cov-config=.coveragerc --longrun
pytest --random-order --longrun --durations 20 -n auto --dist loadscope
# Notify only once - when CI completes (and after deploy) in case it's successfull
notify-complete:
needs: [
build_linux,
build_macos,
build_windows,
docs_check,
mypy_version_check,
build-macos,
build-windows,
docs-check,
mypy-version-check,
pre-commit,
build_linux_online
]
@@ -436,8 +435,63 @@ jobs:
details: Test Completed!
webhookUrl: ${{ secrets.DISCORD_WEBHOOK }}
deploy:
needs: [ build_linux, build_macos, build_windows, docs_check, mypy_version_check, pre-commit ]
build:
name: "Build"
needs: [ build_linux, build-macos, build-windows, docs-check, mypy-version-check, pre-commit ]
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: "3.11"
- name: Build distribution
run: |
pip install -U build
python -m build --sdist --wheel
- name: Upload artifacts 📦
uses: actions/upload-artifact@v4
with:
name: freqtrade-build
path: |
dist
retention-days: 10
deploy-pypi:
name: "Deploy to PyPI"
needs: [ build ]
runs-on: ubuntu-22.04
if: (github.event_name == 'release')
environment:
name: release
url: https://pypi.org/p/freqtrade
permissions:
id-token: write
steps:
- uses: actions/checkout@v4
- name: Download artifact 📦
uses: actions/download-artifact@v4
with:
name: freqtrade-build
path: dist
- name: Publish to PyPI (Test)
uses: pypa/gh-action-pypi-publish@v1.8.11
with:
repository-url: https://test.pypi.org/legacy/
- name: Publish to PyPI
uses: pypa/gh-action-pypi-publish@v1.8.11
deploy-docker:
needs: [ build_linux, build-macos, build-windows, docs-check, mypy-version-check, pre-commit ]
runs-on: ubuntu-22.04
if: (github.event_name == 'push' || github.event_name == 'schedule' || github.event_name == 'release') && github.repository == 'freqtrade/freqtrade'
@@ -446,34 +500,15 @@ jobs:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v4
uses: actions/setup-python@v5
with:
python-version: "3.11"
- name: Extract branch name
shell: bash
run: echo "##[set-output name=branch;]$(echo ${GITHUB_REF##*/})"
id: extract_branch
- name: Build distribution
id: extract-branch
run: |
pip install -U setuptools wheel
python setup.py sdist bdist_wheel
- name: Publish to PyPI (Test)
uses: pypa/gh-action-pypi-publish@v1.8.10
if: (github.event_name == 'release')
with:
user: __token__
password: ${{ secrets.pypi_test_password }}
repository_url: https://test.pypi.org/legacy/
- name: Publish to PyPI
uses: pypa/gh-action-pypi-publish@v1.8.10
if: (github.event_name == 'release')
with:
user: __token__
password: ${{ secrets.pypi_password }}
echo "GITHUB_REF='${GITHUB_REF}'"
echo "branch=${GITHUB_REF##*/}" >> "$GITHUB_OUTPUT"
- name: Dockerhub login
env:
@@ -502,14 +537,15 @@ jobs:
- name: Build and test and push docker images
env:
BRANCH_NAME: ${{ steps.extract_branch.outputs.branch }}
BRANCH_NAME: ${{ steps.extract-branch.outputs.branch }}
run: |
build_helpers/publish_docker_multi.sh
deploy_arm:
deploy-arm:
name: "Deploy Docker"
permissions:
packages: write
needs: [ deploy ]
needs: [ deploy-docker ]
# Only run on 64bit machines
runs-on: [self-hosted, linux, ARM64]
if: (github.event_name == 'push' || github.event_name == 'schedule' || github.event_name == 'release') && github.repository == 'freqtrade/freqtrade'
@@ -518,9 +554,10 @@ jobs:
- uses: actions/checkout@v4
- name: Extract branch name
shell: bash
run: echo "##[set-output name=branch;]$(echo ${GITHUB_REF##*/})"
id: extract_branch
id: extract-branch
run: |
echo "GITHUB_REF='${GITHUB_REF}'"
echo "branch=${GITHUB_REF##*/}" >> "$GITHUB_OUTPUT"
- name: Dockerhub login
env:
@@ -531,7 +568,7 @@ jobs:
- name: Build and test and push docker images
env:
BRANCH_NAME: ${{ steps.extract_branch.outputs.branch }}
BRANCH_NAME: ${{ steps.extract-branch.outputs.branch }}
GHCR_USERNAME: ${{ github.actor }}
GHCR_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |

View File

@@ -10,7 +10,7 @@ jobs:
steps:
- uses: actions/checkout@v4
- name: Docker Hub Description
uses: peter-evans/dockerhub-description@v3
uses: peter-evans/dockerhub-description@v4
env:
DOCKERHUB_USERNAME: ${{ secrets.DOCKER_USERNAME }}
DOCKERHUB_PASSWORD: ${{ secrets.DOCKER_PASSWORD }}

45
.github/workflows/pre-commit-update.yml vendored Normal file
View File

@@ -0,0 +1,45 @@
name: Pre-commit auto-update
on:
# every day at midnight
schedule:
- cron: "0 3 * * 2"
# on demand
workflow_dispatch:
permissions:
contents: read
jobs:
auto-update:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: "3.11"
- name: Install pre-commit
run: pip install pre-commit
- name: Run auto-update
run: pre-commit autoupdate
- name: Run pre-commit
run: pre-commit run --all-files
- uses: peter-evans/create-pull-request@v6
with:
token: ${{ secrets.REPO_SCOPED_TOKEN }}
add-paths: .pre-commit-config.yaml
labels: |
Tech maintenance
Dependencies
branch: update/pre-commit-hooks
title: Update pre-commit hooks
commit-message: "chore: update pre-commit hooks"
committer: Freqtrade Bot <noreply@github.com>
body: Update versions of pre-commit hooks to latest version.
delete-branch: true

1
.gitignore vendored
View File

@@ -111,7 +111,6 @@ target/
#exceptions
!*.gitkeep
!config_examples/config_binance.example.json
!config_examples/config_bittrex.example.json
!config_examples/config_full.example.json
!config_examples/config_kraken.example.json
!config_examples/config_freqai.example.json

View File

@@ -2,27 +2,28 @@
# See https://pre-commit.com/hooks.html for more hooks
repos:
- repo: https://github.com/pycqa/flake8
rev: "6.0.0"
rev: "7.0.0"
hooks:
- id: flake8
additional_dependencies: [Flake8-pyproject]
# stages: [push]
- repo: https://github.com/pre-commit/mirrors-mypy
rev: "v1.5.1"
rev: "v1.8.0"
hooks:
- id: mypy
exclude: build_helpers
additional_dependencies:
- types-cachetools==5.3.0.6
- types-cachetools==5.3.0.7
- types-filelock==3.2.7
- types-requests==2.31.0.4
- types-tabulate==0.9.0.3
- types-python-dateutil==2.8.19.14
- SQLAlchemy==2.0.21
- types-requests==2.31.0.20240218
- types-tabulate==0.9.0.20240106
- types-python-dateutil==2.8.19.20240106
- SQLAlchemy==2.0.27
# stages: [push]
- repo: https://github.com/pycqa/isort
rev: "5.12.0"
rev: "5.13.2"
hooks:
- id: isort
name: isort (python)
@@ -30,12 +31,12 @@ repos:
- repo: https://github.com/charliermarsh/ruff-pre-commit
# Ruff version.
rev: 'v0.0.270'
rev: 'v0.2.2'
hooks:
- id: ruff
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v4.4.0
rev: v4.5.0
hooks:
- id: end-of-file-fixer
exclude: |

View File

@@ -125,7 +125,7 @@ Exceptions:
Contributors may be given commit privileges. Preference will be given to those with:
1. Past contributions to Freqtrade and other related open-source projects. Contributions to Freqtrade include both code (both accepted and pending) and friendly participation in the issue tracker and Pull request reviews. Quantity and quality are considered.
1. Past contributions to Freqtrade and other related open-source projects. Contributions to Freqtrade include both code (both accepted and pending) and friendly participation in the issue tracker and Pull request reviews. Both quantity and quality are considered.
1. A coding style that the other core committers find simple, minimal, and clean.
1. Access to resources for cross-platform development and testing.
1. Time to devote to the project regularly.

View File

@@ -1,4 +1,4 @@
FROM python:3.11.5-slim-bullseye as base
FROM python:3.11.8-slim-bookworm as base
# Setup env
ENV LANG C.UTF-8

View File

@@ -5,3 +5,5 @@ recursive-include freqtrade/templates/ *.j2 *.ipynb
include freqtrade/exchange/binance_leverage_tiers.json
include freqtrade/rpc/api_server/ui/fallback_file.html
include freqtrade/rpc/api_server/ui/favicon.ico
prune tests

View File

@@ -28,9 +28,9 @@ hesitate to read the source code and understand the mechanism of this bot.
Please read the [exchange specific notes](docs/exchanges.md) to learn about eventual, special configurations needed for each exchange.
- [X] [Binance](https://www.binance.com/)
- [X] [Bittrex](https://bittrex.com/)
- [X] [Bitmart](https://bitmart.com/)
- [X] [Gate.io](https://www.gate.io/ref/6266643)
- [X] [Huobi](http://huobi.com/)
- [X] [HTX](https://www.htx.com/) (Former Huobi)
- [X] [Kraken](https://kraken.com/)
- [X] [OKX](https://okx.com/) (Former OKEX)
- [ ] [potentially many others](https://github.com/ccxt/ccxt/). _(We cannot guarantee they will work)_

Binary file not shown.

Binary file not shown.

View File

@@ -54,7 +54,7 @@ docker tag freqtrade:$TAG_FREQAI_ARM ${CACHE_IMAGE}:$TAG_FREQAI_ARM
docker tag freqtrade:$TAG_FREQAI_RL_ARM ${CACHE_IMAGE}:$TAG_FREQAI_RL_ARM
# Run backtest
docker run --rm -v $(pwd)/config_examples/config_bittrex.example.json:/freqtrade/config.json:ro -v $(pwd)/tests:/tests freqtrade:${TAG_ARM} backtesting --datadir /tests/testdata --strategy-path /tests/strategy/strats/ --strategy StrategyTestV3
docker run --rm -v $(pwd)/tests/testdata/config.tests.json:/freqtrade/config.json:ro -v $(pwd)/tests:/tests freqtrade:${TAG_ARM} backtesting --datadir /tests/testdata --strategy-path /tests/strategy/strats/ --strategy StrategyTestV3
if [ $? -ne 0 ]; then
echo "failed running backtest"

View File

@@ -67,7 +67,7 @@ docker tag freqtrade:$TAG_FREQAI ${CACHE_IMAGE}:$TAG_FREQAI
docker tag freqtrade:$TAG_FREQAI_RL ${CACHE_IMAGE}:$TAG_FREQAI_RL
# Run backtest
docker run --rm -v $(pwd)/config_examples/config_bittrex.example.json:/freqtrade/config.json:ro -v $(pwd)/tests:/tests freqtrade:${TAG} backtesting --datadir /tests/testdata --strategy-path /tests/strategy/strats/ --strategy StrategyTestV3
docker run --rm -v $(pwd)/tests/testdata/config.tests.json:/freqtrade/config.json:ro -v $(pwd)/tests:/tests freqtrade:${TAG} backtesting --datadir /tests/testdata --strategy-path /tests/strategy/strats/ --strategy StrategyTestV3
if [ $? -ne 0 ]; then
echo "failed running backtest"

View File

@@ -1,6 +1,6 @@
{
"max_open_trades": 3,
"stake_currency": "BTC",
"stake_currency": "USDT",
"stake_amount": 0.05,
"tradable_balance_ratio": 0.99,
"fiat_display_currency": "USD",
@@ -36,21 +36,21 @@
"ccxt_async_config": {
},
"pair_whitelist": [
"ALGO/BTC",
"ATOM/BTC",
"BAT/BTC",
"BCH/BTC",
"BRD/BTC",
"EOS/BTC",
"ETH/BTC",
"IOTA/BTC",
"LINK/BTC",
"LTC/BTC",
"NEO/BTC",
"NXS/BTC",
"XMR/BTC",
"XRP/BTC",
"XTZ/BTC"
"ALGO/USDT",
"ATOM/USDT",
"BAT/USDT",
"BCH/USDT",
"BRD/USDT",
"EOS/USDT",
"ETH/USDT",
"IOTA/USDT",
"LINK/USDT",
"LTC/USDT",
"NEO/USDT",
"NXS/USDT",
"XMR/USDT",
"XRP/USDT",
"XTZ/USDT"
],
"pair_blacklist": [
"BNB/.*"

View File

@@ -52,7 +52,7 @@
"train_period_days": 15,
"backtest_period_days": 7,
"live_retrain_hours": 0,
"identifier": "uniqe-id",
"identifier": "unique-id",
"feature_parameters": {
"include_timeframes": [
"3m",

View File

@@ -1,4 +1,4 @@
FROM python:3.9.16-slim-bullseye as base
FROM python:3.11.8-slim-bookworm as base
# Setup env
ENV LANG C.UTF-8
@@ -11,12 +11,13 @@ ENV FT_APP_ENV="docker"
# Prepare environment
RUN mkdir /freqtrade \
&& apt-get update \
&& apt-get -y install sudo libatlas3-base curl sqlite3 libhdf5-dev libutf8proc-dev libsnappy-dev \
&& apt-get -y install sudo libatlas3-base libopenblas-dev curl sqlite3 libhdf5-dev libutf8proc-dev libsnappy-dev \
&& apt-get clean \
&& useradd -u 1000 -G sudo -U -m ftuser \
&& chown ftuser:ftuser /freqtrade \
# Allow sudoers
&& echo "ftuser ALL=(ALL) NOPASSWD: /bin/chown" >> /etc/sudoers
&& echo "ftuser ALL=(ALL) NOPASSWD: /bin/chown" >> /etc/sudoers \
&& pip install --upgrade pip
WORKDIR /freqtrade
@@ -25,20 +26,16 @@ FROM base as python-deps
RUN apt-get update \
&& apt-get -y install build-essential libssl-dev libffi-dev libgfortran5 pkg-config cmake gcc \
&& apt-get clean \
&& pip install --upgrade pip \
&& echo "[global]\nextra-index-url=https://www.piwheels.org/simple" > /etc/pip.conf
# Install TA-lib
COPY build_helpers/* /tmp/
RUN cd /tmp && /tmp/install_ta-lib.sh && rm -r /tmp/*ta-lib*
ENV LD_LIBRARY_PATH /usr/local/lib
# Install dependencies
COPY --chown=ftuser:ftuser requirements.txt /freqtrade/
USER ftuser
RUN pip install --user --no-cache-dir numpy==1.25.2 \
&& pip install --user /tmp/pyarrow-*.whl \
&& pip install --user --no-build-isolation TA-Lib==0.4.28 \
RUN pip install --user --no-cache-dir numpy \
&& pip install --user --no-index --find-links /tmp/ pyarrow TA-Lib==0.4.28 \
&& pip install --user --no-cache-dir -r requirements.txt
# Copy dependencies to runtime-image

View File

@@ -1,8 +1,8 @@
FROM freqtradeorg/freqtrade:develop_plot
# Pin jupyter-client to avoid tornado version conflict
RUN pip install jupyterlab jupyter-client==7.3.4 --user --no-cache-dir
# Pin prompt-toolkit to avoid questionary version conflict
RUN pip install jupyterlab "prompt-toolkit<=3.0.36" jupyter-client --user --no-cache-dir
# Empty the ENTRYPOINT to allow all commands
ENTRYPOINT []

View File

@@ -6,7 +6,7 @@ services:
context: ..
dockerfile: docker/Dockerfile.jupyter
restart: unless-stopped
container_name: freqtrade
# container_name: freqtrade
ports:
- "127.0.0.1:8888:8888"
volumes:

View File

@@ -31,9 +31,9 @@ optional arguments:
Specify timeframe (`1m`, `5m`, `30m`, `1h`, `1d`).
--timerange TIMERANGE
Specify what timerange of data to use.
--data-format-ohlcv {json,jsongz,hdf5}
--data-format-ohlcv {json,jsongz,hdf5,feather,parquet}
Storage format for downloaded candle (OHLCV) data.
(default: `json`).
(default: `feather`).
--max-open-trades INT
Override the value of the `max_open_trades`
configuration setting.
@@ -170,11 +170,11 @@ freqtrade backtesting --strategy AwesomeStrategy --dry-run-wallet 1000
Using a different on-disk historical candle (OHLCV) data source
Assume you downloaded the history data from the Bittrex exchange and kept it in the `user_data/data/bittrex-20180101` directory.
Assume you downloaded the history data from the Binance exchange and kept it in the `user_data/data/binance-20180101` directory.
You can then use this data for backtesting as follows:
```bash
freqtrade backtesting --strategy AwesomeStrategy --datadir user_data/data/bittrex-20180101
freqtrade backtesting --strategy AwesomeStrategy --datadir user_data/data/binance-20180101
```
---
@@ -618,13 +618,13 @@ To compare multiple strategies, a list of Strategies can be provided to backtest
This is limited to 1 timeframe value per run. However, data is only loaded once from disk so if you have multiple
strategies you'd like to compare, this will give a nice runtime boost.
All listed Strategies need to be in the same directory.
All listed Strategies need to be in the same directory, unless also `--recursive-strategy-search` is specified, where sub-directories within the strategy directory are also considered.
``` bash
freqtrade backtesting --timerange 20180401-20180410 --timeframe 5m --strategy-list Strategy001 Strategy002 --export trades
```
This will save the results to `user_data/backtest_results/backtest-result-<strategy>.json`, injecting the strategy-name into the target filename.
This will save the results to `user_data/backtest_results/backtest-result-<datetime>.json`, including results for both `Strategy001` and `Strategy002`.
There will be an additional table comparing win/losses of the different strategies (identical to the "Total" row in the first table).
Detailed output for all strategies one after the other will be available, so make sure to scroll up to see the details per strategy.

View File

@@ -14,7 +14,7 @@ You can specify a different configuration file used by the bot with the `-c/--co
If you used the [Quick start](docker_quickstart.md#docker-quick-start) method for installing
the bot, the installation script should have already created the default configuration file (`config.json`) for you.
If the default configuration file is not created we recommend to use `freqtrade new-config --config config.json` to generate a basic configuration file.
If the default configuration file is not created we recommend to use `freqtrade new-config --config user_data/config.json` to generate a basic configuration file.
The Freqtrade configuration file is to be written in JSON format.
@@ -321,7 +321,7 @@ For example, if you have 10 ETH available in your wallet on the exchange and `tr
To fully utilize compounding profits when using multiple bots on the same exchange account, you'll want to limit each bot to a certain starting balance.
This can be accomplished by setting `available_capital` to the desired starting balance.
Assuming your account has 10.000 USDT and you want to run 2 different strategies on this exchange.
Assuming your account has 10000 USDT and you want to run 2 different strategies on this exchange.
You'd set `available_capital=5000` - granting each bot an initial capital of 5000 USDT.
The bot will then split this starting balance equally into `max_open_trades` buckets.
Profitable trades will result in increased stake-sizes for this bot - without affecting the stake-sizes of the other bot.
@@ -572,9 +572,11 @@ In addition to fiat currencies, a range of crypto currencies is supported.
The valid values are:
```json
"BTC", "ETH", "XRP", "LTC", "BCH", "USDT"
"BTC", "ETH", "XRP", "LTC", "BCH", "BNB"
```
Removing `fiat_display_currency` completely from the configuration will skip initializing coingecko, and will not show any FIAT currency conversion. This has no importance for the correct functioning of the bot.
## Using Dry-run mode
We recommend starting the bot in the Dry-run mode to see how your bot will
@@ -594,7 +596,7 @@ creating trades on the exchange.
```json
"exchange": {
"name": "bittrex",
"name": "binance",
"key": "key",
"secret": "secret",
...
@@ -644,7 +646,7 @@ API Keys are usually only required for live trading (trading for real money, bot
```json
{
"exchange": {
"name": "bittrex",
"name": "binance",
"key": "af8ddd35195e9dc500b9a6f799f6f5c93d89193b",
"secret": "08a9dc6db3d7b53e1acebd9275677f4b0a04f1a5",
//"password": "", // Optional, not needed by all exchanges)

View File

@@ -318,6 +318,7 @@ Additional tests / steps to complete:
* Check if balance shows correctly (*)
* Create market order (*)
* Create limit order (*)
* Cancel order (*)
* Complete trade (enter + exit) (*)
* Compare result calculation between exchange and bot
* Ensure fees are applied correctly (check the database against the exchange)
@@ -418,6 +419,9 @@ This part of the documentation is aimed at maintainers, and shows how to create
### Create release branch
!!! Note
Make sure that the `stable` branch is up-to-date!
First, pick a commit that's about one week old (to not include latest additions to releases).
``` bash
@@ -430,14 +434,11 @@ Determine if crucial bugfixes have been made between this commit and the current
* Merge the release branch (stable) into this branch.
* Edit `freqtrade/__init__.py` and add the version matching the current date (for example `2019.7` for July 2019). Minor versions can be `2019.7.1` should we need to do a second release that month. Version numbers must follow allowed versions from PEP0440 to avoid failures pushing to pypi.
* Commit this part.
* push that branch to the remote and create a PR against the stable branch.
* Push that branch to the remote and create a PR against the **stable branch**.
* Update develop version to next version following the pattern `2019.8-dev`.
### Create changelog from git commits
!!! Note
Make sure that the `stable` branch is up-to-date!
``` bash
# Needs to be done before merging / pulling that branch.
git log --oneline --no-decorate --no-merges stable..new_release

View File

@@ -127,6 +127,8 @@ Freqtrade will not attempt to change these settings.
## Kraken
Kraken 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.
!!! Tip "Stoploss on Exchange"
Kraken supports `stoploss_on_exchange` and can use both stop-loss-market and stop-loss-limit orders. It provides great advantages, so we recommend to benefit from it.
You can use either `"limit"` or `"market"` in the `order_types.stoploss` configuration setting to decide which type to use.
@@ -136,6 +138,43 @@ Freqtrade will not attempt to change these settings.
The Kraken API does only provide 720 historic candles, which is sufficient for Freqtrade dry-run and live trade modes, but is a problem for backtesting.
To download data for the Kraken exchange, using `--dl-trades` is mandatory, otherwise the bot will download the same 720 candles over and over, and you'll not have enough backtest data.
To speed up downloading, you can download the [trades zip files](https://support.kraken.com/hc/en-us/articles/360047543791-Downloadable-historical-market-data-time-and-sales-) kraken provides.
These are usually updated once per quarter. Freqtrade expects these files to be placed in `user_data/data/kraken/trades_csv`.
A structure as follows can make sense if using incremental files, with the "full" history in one directory, and incremental files in different directories.
The assumption for this mode is that the data is downloaded and unzipped keeping filenames as they are.
Duplicate content will be ignored (based on timestamp) - though the assumption is that there is no gap in the data.
This means, if your "full" history ends in Q4 2022 - then both incremental updates Q1 2023 and Q2 2023 are available.
Not having this will lead to incomplete data, and therefore invalid results while using the data.
```
└── trades_csv
    ├── Kraken_full_history
   │   ├── BCHEUR.csv
   │   └── XBTEUR.csv
   ├── Kraken_Trading_History_Q1_2023
   │   ├── BCHEUR.csv
   │   └── XBTEUR.csv
   └── Kraken_Trading_History_Q2_2023
      ├── BCHEUR.csv
      └── XBTEUR.csv
```
You can convert these files into freqtrade files:
``` bash
freqtrade convert-trade-data --exchange kraken --format-from kraken_csv --format-to feather
# Convert trade data to different ohlcv timeframes
freqtrade trades-to-ohlcv -p BTC/EUR BCH/EUR --exchange kraken -t 1m 5m 15m 1h
```
The converted data also makes downloading data possible, and will start the download after the latest loaded trade.
``` bash
freqtrade download-data --exchange kraken --dl-trades -p BTC/EUR BCH/EUR
```
!!! Warning "Downloading data from kraken"
Downloading kraken data will require significantly more memory (RAM) than any other exchange, as the trades-data needs to be converted into candles on your machine.
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.
@@ -144,48 +183,6 @@ To download data for the Kraken exchange, using `--dl-trades` is mandatory, othe
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.
## Bittrex
### Order types
Bittrex does not support market orders. If you have a message at the bot startup about this, you should change order type values set in your configuration and/or in the strategy from `"market"` to `"limit"`. See some more details on this [here in the FAQ](faq.md#im-getting-the-exchange-bittrex-does-not-support-market-orders-message-and-cannot-run-my-strategy).
Bittrex also does not support `VolumePairlist` due to limited / split API constellation at the moment.
Please use `StaticPairlist`. Other pairlists (other than `VolumePairlist`) should not be affected.
### Volume pairlist
Bittrex does not support the direct usage of VolumePairList. This can however be worked around by using the advanced mode with `lookback_days: 1` (or more), which will emulate 24h volume.
Read more in the [pairlist documentation](plugins.md#volumepairlist-advanced-mode).
### Restricted markets
Bittrex split its exchange into US and International versions.
The International version has more pairs available, however the API always returns all pairs, so there is currently no automated way to detect if you're affected by the restriction.
If you have restricted pairs in your whitelist, you'll get a warning message in the log on Freqtrade startup for each restricted pair.
The warning message will look similar to the following:
``` output
[...] Message: bittrex {"success":false,"message":"RESTRICTED_MARKET","result":null,"explanation":null}"
```
If you're an "International" customer on the Bittrex exchange, then this warning will probably not impact you.
If you're a US customer, the bot will fail to create orders for these pairs, and you should remove them from your whitelist.
You can get a list of restricted markets by using the following snippet:
``` python
import ccxt
ct = ccxt.bittrex()
lm = ct.load_markets()
res = [p for p, x in lm.items() if 'US' in x['info']['prohibitedIn']]
print(res)
```
## Kucoin
Kucoin requires a passphrase for each api key, you will therefore need to add this key into the configuration so your exchange section looks as follows:
@@ -211,10 +208,10 @@ Kucoin supports [time_in_force](configuration.md#understand-order_time_in_force)
For Kucoin, it is suggested to add `"KCS/<STAKE>"` to your blacklist to avoid issues, unless you are willing to maintain enough extra `KCS` on the account or unless you're willing to disable using `KCS` for fees.
Kucoin accounts may use `KCS` for fees, and if a trade happens to be on `KCS`, further trades may consume this position and make the initial `KCS` trade unsellable as the expected amount is not there anymore.
## Huobi
## HTX (formerly Huobi)
!!! Tip "Stoploss on Exchange"
Huobi supports `stoploss_on_exchange` and uses `stop-limit` orders. It provides great advantages, so we recommend to benefit from it by enabling stoploss on exchange.
HTX supports `stoploss_on_exchange` and uses `stop-limit` orders. It provides great advantages, so we recommend to benefit from it by enabling stoploss on exchange.
## OKX (former OKEX)
@@ -265,6 +262,24 @@ We do strongly recommend to limit all API keys to the IP you're going to use it
Bybit (futures only) supports `stoploss_on_exchange` and uses `stop-loss-limit` orders. It provides great advantages, so we recommend to benefit from it by enabling stoploss on exchange.
On futures, Bybit supports both `stop-limit` as well as `stop-market` orders. You can use either `"limit"` or `"market"` in the `order_types.stoploss` configuration setting to decide which type to use.
## Bitmart
Bitmart requires the API key Memo (the name you give the API key) to go along with the exchange key and secret.
It's therefore required to pass the UID as well.
```json
"exchange": {
"name": "bitmart",
"uid": "your_bitmart_api_key_memo",
"secret": "your_exchange_secret",
"password": "your_exchange_api_key_password",
// ...
}
```
!!! Warning "Necessary Verification"
Bitmart requires Verification Lvl2 to successfully trade on the spot market through the API - even though trading via UI works just fine with just Lvl1 verification.
## All exchanges
Should you experience constant errors with Nonce (like `InvalidNonce`), it is best to regenerate the API keys. Resetting Nonce is difficult and it's usually easier to regenerate the API keys.

View File

@@ -128,15 +128,9 @@ This warning can point to one of the below problems:
* Barely traded pair -> Check the pair on the exchange webpage, look at the timeframe your strategy uses. If the pair does not have any volume in some candles (usually visualized with a "volume 0" bar, and a "_" as candle), this pair did not have any trades in this timeframe. These pairs should ideally be avoided, as they can cause problems with order-filling.
* API problem -> API returns wrong data (this only here for completeness, and should not happen with supported exchanges).
### I'm getting the "RESTRICTED_MARKET" message in the log
Currently known to happen for US Bittrex users.
Read [the Bittrex section about restricted markets](exchanges.md#restricted-markets) for more information.
### I'm getting the "Exchange XXX does not support market orders." message and cannot run my strategy
As the message says, your exchange does not support market orders and you have one of the [order types](configuration.md/#understand-order_types) set to "market". Your strategy was probably written with other exchanges in mind and sets "market" orders for "stoploss" orders, which is correct and preferable for most of the exchanges supporting market orders (but not for Bittrex and Gate.io).
As the message says, your exchange does not support market orders and you have one of the [order types](configuration.md/#understand-order_types) set to "market". Your strategy was probably written with other exchanges in mind and sets "market" orders for "stoploss" orders, which is correct and preferable for most of the exchanges supporting market orders (but not for Gate.io).
To fix this, redefine order types in the strategy to use "limit" instead of "market":

View File

@@ -162,7 +162,8 @@ Below are the values you can expect to include/use inside a typical strategy dat
| `df['&*_std/mean']` | Standard deviation and mean values of the defined labels during training (or live tracking with `fit_live_predictions_candles`). Commonly used to understand the rarity of a prediction (use the z-score as shown in `templates/FreqaiExampleStrategy.py` and explained [here](#creating-a-dynamic-target-threshold) to evaluate how often a particular prediction was observed during training or historically with `fit_live_predictions_candles`). <br> **Datatype:** Float.
| `df['do_predict']` | Indication of an outlier data point. The return value is integer between -2 and 2, which lets you know if the prediction is trustworthy or not. `do_predict==1` means that the prediction is trustworthy. If the Dissimilarity Index (DI, see details [here](freqai-feature-engineering.md#identifying-outliers-with-the-dissimilarity-index-di)) of the input data point is above the threshold defined in the config, FreqAI will subtract 1 from `do_predict`, resulting in `do_predict==0`. If `use_SVM_to_remove_outliers` is active, the Support Vector Machine (SVM, see details [here](freqai-feature-engineering.md#identifying-outliers-using-a-support-vector-machine-svm)) may also detect outliers in training and prediction data. In this case, the SVM will also subtract 1 from `do_predict`. If the input data point was considered an outlier by the SVM but not by the DI, or vice versa, the result will be `do_predict==0`. If both the DI and the SVM considers the input data point to be an outlier, the result will be `do_predict==-1`. As with the SVM, if `use_DBSCAN_to_remove_outliers` is active, DBSCAN (see details [here](freqai-feature-engineering.md#identifying-outliers-with-dbscan)) may also detect outliers and subtract 1 from `do_predict`. Hence, if both the SVM and DBSCAN are active and identify a datapoint that was above the DI threshold as an outlier, the result will be `do_predict==-2`. A particular case is when `do_predict == 2`, which means that the model has expired due to exceeding `expired_hours`. <br> **Datatype:** Integer between -2 and 2.
| `df['DI_values']` | Dissimilarity Index (DI) values are proxies for the level of confidence FreqAI has in the prediction. A lower DI means the prediction is close to the training data, i.e., higher prediction confidence. See details about the DI [here](freqai-feature-engineering.md#identifying-outliers-with-the-dissimilarity-index-di). <br> **Datatype:** Float.
| `df['%*']` | Any dataframe column prepended with `%` in `feature_engineering_*()` is treated as a training feature. For example, you can include the RSI in the training feature set (similar to in `templates/FreqaiExampleStrategy.py`) by setting `df['%-rsi']`. See more details on how this is done [here](freqai-feature-engineering.md). <br> **Note:** Since the number of features prepended with `%` can multiply very quickly (10s of thousands of features are easily engineered using the multiplictative functionality of, e.g., `include_shifted_candles` and `include_timeframes` as described in the [parameter table](freqai-parameter-table.md)), these features are removed from the dataframe that is returned from FreqAI to the strategy. To keep a particular type of feature for plotting purposes, you would prepend it with `%%`. <br> **Datatype:** Depends on the output of the model.
| `df['%*']` | Any dataframe column prepended with `%` in `feature_engineering_*()` is treated as a training feature. For example, you can include the RSI in the training feature set (similar to in `templates/FreqaiExampleStrategy.py`) by setting `df['%-rsi']`. See more details on how this is done [here](freqai-feature-engineering.md). <br> **Note:** Since the number of features prepended with `%` can multiply very quickly (10s of thousands of features are easily engineered using the multiplictative functionality of, e.g., `include_shifted_candles` and `include_timeframes` as described in the [parameter table](freqai-parameter-table.md)), these features are removed from the dataframe that is returned from FreqAI to the strategy. To keep a particular type of feature for plotting purposes, you would prepend it with `%%` (see details below). <br> **Datatype:** Depends on the feature created by the user.
| `df['%%*']` | Any dataframe column prepended with `%%` in `feature_engineering_*()` is treated as a training feature, just the same as the above `%` prepend. However, in this case, the features are returned back to the strategy for FreqUI/plot-dataframe plotting and monitoring in Dry/Live/Backtesting <br> **Datatype:** Depends on the feature created by the user. Please note that features created in `feature_engineering_expand()` will have automatic FreqAI naming schemas depending on the expansions that you configured (i.e. `include_timeframes`, `include_corr_pairlist`, `indicators_periods_candles`, `include_shifted_candles`). So if you want to plot `%%-rsi` from `feature_engineering_expand_all()`, the final naming scheme for your plotting config would be: `%%-rsi-period_10_ETH/USDT:USDT_1h` for the `rsi` feature with `period=10`, `timeframe=1h`, and `pair=ETH/USDT:USDT` (the `:USDT` is added if you are using futures pairs). It is useful to simply add `print(dataframe.columns)` in your `populate_indicators()` after `self.freqai.start()` to see the full list of available features that are returned to the strategy for plotting purposes.
## Setting the `startup_candle_count`

View File

@@ -7,7 +7,7 @@ Low level feature engineering is performed in the user strategy within a set of
| Function | Description |
|---------------|-------------|
| `feature_engineering_expand_all()` | This optional function will automatically expand the defined features on the config defined `indicator_periods_candles`, `include_timeframes`, `include_shifted_candles`, and `include_corr_pairs`.
| `feature_engineering_expand_basic()` | This optional function will automatically expand the defined features on the config defined `include_timeframes`, `include_shifted_candles`, and `include_corr_pairs`. Note: this function does *not* expand across `include_periods_candles`.
| `feature_engineering_expand_basic()` | This optional function will automatically expand the defined features on the config defined `include_timeframes`, `include_shifted_candles`, and `include_corr_pairs`. Note: this function does *not* expand across `indicator_periods_candles`.
| `feature_engineering_standard()` | This optional function will be called once with the dataframe of the base timeframe. This is the final function to be called, which means that the dataframe entering this function will contain all the features and columns from the base asset created by the other `feature_engineering_expand` functions. This function is a good place to do custom exotic feature extractions (e.g. tsfresh). This function is also a good place for any feature that should not be auto-expanded upon (e.g., day of the week).
| `set_freqai_targets()` | Required function to set the targets for the model. All targets must be prepended with `&` to be recognized by the FreqAI internals.

View File

@@ -74,7 +74,6 @@ Mandatory parameters are marked as **Required** and have to be set in one of the
| | **Reinforcement Learning Parameters within the `freqai.rl_config` sub dictionary**
| `rl_config` | A dictionary containing the control parameters for a Reinforcement Learning model. <br> **Datatype:** Dictionary.
| `train_cycles` | Training time steps will be set based on the `train_cycles * number of training data points. <br> **Datatype:** Integer.
| `cpu_count` | Number of processors to dedicate to the Reinforcement Learning training process. <br> **Datatype:** int.
| `max_trade_duration_candles`| Guides the agent training to keep trades below desired length. Example usage shown in `prediction_models/ReinforcementLearner.py` within the customizable `calculate_reward()` function. <br> **Datatype:** int.
| `model_type` | Model string from stable_baselines3 or SBcontrib. Available strings include: `'TRPO', 'ARS', 'RecurrentPPO', 'MaskablePPO', 'PPO', 'A2C', 'DQN'`. User should ensure that `model_training_parameters` match those available to the corresponding stable_baselines3 model by visiting their documentaiton. [PPO doc](https://stable-baselines3.readthedocs.io/en/master/modules/ppo.html) (external website) <br> **Datatype:** string.
| `policy_type` | One of the available policy types from stable_baselines3 <br> **Datatype:** string.

View File

@@ -41,11 +41,11 @@ FreqAI stores new model files after each successful training. These files become
```json
"freqai": {
"purge_old_models": true,
"purge_old_models": 4,
}
```
This will automatically purge all models older than the two most recently trained ones to save disk space.
This will automatically purge all models older than the four most recently trained ones to save disk space. Inputing "0" will never purge any models.
## Backtesting
@@ -68,7 +68,7 @@ Backtesting mode requires [downloading the necessary data](#downloading-data-to-
This way, you can return to using any model you wish by simply specifying the `identifier`.
!!! Note
Backtesting calls `set_freqai_targets()` one time for each backtest window (where the number of windows is the full backtest timerange divided by the `backtest_period_days` parameter). Doing this means that the targets simulate dry/live behavior without look ahead bias. However, the definition of the features in `feature_engineering_*()` is performed once on the entire backtest timerange. This means that you should be sure that features do look-ahead into the future.
Backtesting calls `set_freqai_targets()` one time for each backtest window (where the number of windows is the full backtest timerange divided by the `backtest_period_days` parameter). Doing this means that the targets simulate dry/live behavior without look ahead bias. However, the definition of the features in `feature_engineering_*()` is performed once on the entire training timerange. This means that you should be sure that features do not look-ahead into the future.
More details about look-ahead bias can be found in [Common Mistakes](strategy-customization.md#common-mistakes-when-developing-strategies).
---

View File

@@ -114,6 +114,11 @@ Here we compile some external materials that provide deeper looks into various c
- [Real-time head-to-head: Adaptive modeling of financial market data using XGBoost and CatBoost](https://emergentmethods.medium.com/real-time-head-to-head-adaptive-modeling-of-financial-market-data-using-xgboost-and-catboost-995a115a7495)
- [FreqAI - from price to prediction](https://emergentmethods.medium.com/freqai-from-price-to-prediction-6fadac18b665)
## Support
You can find support for FreqAI in a variety of places, including the [Freqtrade discord](https://discord.gg/Jd8JYeWHc4), the dedicated [FreqAI discord](https://discord.gg/7AMWACmbjT), and in [github issues](https://github.com/freqtrade/freqtrade/issues).
## Credits
FreqAI is developed by a group of individuals who all contribute specific skillsets to the project.

View File

@@ -337,11 +337,15 @@ There are four parameter types each suited for different purposes.
* `CategoricalParameter` - defines a parameter with a predetermined number of choices.
* `BooleanParameter` - Shorthand for `CategoricalParameter([True, False])` - great for "enable" parameters.
!!! Tip "Disabling parameter optimization"
Each parameter takes two boolean parameters:
* `load` - when set to `False` it will not load values configured in `buy_params` and `sell_params`.
* `optimize` - when set to `False` parameter will not be included in optimization process.
Use these parameters to quickly prototype various ideas.
### Parameter options
There are two parameter options that can help you to quickly test various ideas:
* `optimize` - when set to `False`, the parameter will not be included in optimization process. (Default: True)
* `load` - when set to `False`, results of a previous hyperopt run (in `buy_params` and `sell_params` either in your strategy or the JSON output file) will not be used as the starting value for subsequent hyperopts. The default value specified in the parameter will be used instead. (Default: True)
!!! Tip "Effects of `load=False` on backtesting"
Be aware that setting the `load` option to `False` will mean backtesting will also use the default value specified in the parameter and *not* the value found through hyperoptimisation.
!!! Warning
Hyperoptable parameters cannot be used in `populate_indicators` - as hyperopt does not recalculate indicators for each epoch, so the starting value would be used in this case.
@@ -435,7 +439,7 @@ While this strategy is most likely too simple to provide consistent profit, it s
??? Hint "Performance tip"
During normal hyperopting, indicators are calculated once and supplied to each epoch, linearly increasing RAM usage as a factor of increasing cores. As this also has performance implications, there are two alternatives to reduce RAM usage
* Move `ema_short` and `ema_long` calculations from `populate_indicators()` to `populate_entry_trend()`. Since `populate_entry_trend()` gonna be calculated every epochs, you don't need to use `.range` functionality.
* Move `ema_short` and `ema_long` calculations from `populate_indicators()` to `populate_entry_trend()`. Since `populate_entry_trend()` will be calculated every epoch, you don't need to use `.range` functionality.
* hyperopt provides `--analyze-per-epoch` which will move the execution of `populate_indicators()` to the epoch process, calculating a single value per parameter per epoch instead of using the `.range` functionality. In this case, `.range` functionality will only return the actually used value.
These alternatives will reduce RAM usage, but increase CPU usage. However, your hyperopting run will be less likely to fail due to Out Of Memory (OOM) issues.
@@ -922,6 +926,12 @@ Once the optimized strategy has been implemented into your strategy, you should
To achieve same the results (number of trades, their durations, profit, etc.) as during Hyperopt, please use the same configuration and parameters (timerange, timeframe, ...) used for hyperopt `--dmmp`/`--disable-max-market-positions` and `--eps`/`--enable-position-stacking` for Backtesting.
Should results not match, please double-check to make sure you transferred all conditions correctly.
Pay special care to the stoploss, max_open_trades and trailing stoploss parameters, as these are often set in configuration files, which override changes to the strategy.
You should also carefully review the log of your backtest to ensure that there were no parameters inadvertently set by the configuration (like `stoploss`, `max_open_trades` or `trailing_stop`).
### Why do my backtest results not match my hyperopt results?
Should results not match, check the following factors:
* You may have added parameters to hyperopt in `populate_indicators()` where they will be calculated only once **for all epochs**. If you are, for example, trying to optimise multiple SMA timeperiod values, the hyperoptable timeperiod parameter should be placed in `populate_entry_trend()` which is calculated every epoch. See [Optimizing an indicator parameter](https://www.freqtrade.io/en/stable/hyperopt/#optimizing-an-indicator-parameter).
* If you have disabled the auto-export of hyperopt parameters into the JSON parameters file, double-check to make sure you transferred all hyperopted values into your strategy correctly.
* Check the logs to verify what parameters are being set and what values are being used.
* Pay special care to the stoploss, max_open_trades and trailing stoploss parameters, as these are often set in configuration files, which override changes to the strategy. Check the logs of your backtest to ensure that there were no parameters inadvertently set by the configuration (like `stoploss`, `max_open_trades` or `trailing_stop`).
* Verify that you do not have an unexpected parameters JSON file overriding the parameters or the default hyperopt settings in your strategy.
* Verify that any protections that are enabled in backtesting are also enabled when hyperopting, and vice versa. When using `--space protection`, protections are auto-enabled for hyperopting.

View File

@@ -6,7 +6,7 @@ In your configuration, you can use Static Pairlist (defined by the [`StaticPairL
Additionally, [`AgeFilter`](#agefilter), [`PrecisionFilter`](#precisionfilter), [`PriceFilter`](#pricefilter), [`ShuffleFilter`](#shufflefilter), [`SpreadFilter`](#spreadfilter) and [`VolatilityFilter`](#volatilityfilter) act as Pairlist Filters, removing certain pairs and/or moving their positions in the pairlist.
If multiple Pairlist Handlers are used, they are chained and a combination of all Pairlist Handlers forms the resulting pairlist the bot uses for trading and backtesting. Pairlist Handlers are executed in the sequence they are configured. You should always configure either `StaticPairList` or `VolumePairList` as the starting Pairlist Handler.
If multiple Pairlist Handlers are used, they are chained and a combination of all Pairlist Handlers forms the resulting pairlist the bot uses for trading and backtesting. Pairlist Handlers are executed in the sequence they are configured. You can define either `StaticPairList`, `VolumePairList`, `ProducerPairList`, `RemotePairList` or `MarketCapPairList` as the starting Pairlist Handler.
Inactive markets are always removed from the resulting pairlist. Explicitly blacklisted pairs (those in the `pair_blacklist` configuration setting) are also always removed from the resulting pairlist.
@@ -24,6 +24,7 @@ You may also use something like `.*DOWN/BTC` or `.*UP/BTC` to exclude leveraged
* [`VolumePairList`](#volume-pair-list)
* [`ProducerPairList`](#producerpairlist)
* [`RemotePairList`](#remotepairlist)
* [`MarketCapPairList`](#marketcappairlist)
* [`AgeFilter`](#agefilter)
* [`FullTradesFilter`](#fulltradesfilter)
* [`OffsetFilter`](#offsetfilter)
@@ -67,7 +68,7 @@ When used in the leading position of the chain of Pairlist Handlers, the `pair_w
The `refresh_period` setting allows to define the period (in seconds), at which the pairlist will be refreshed. Defaults to 1800s (30 minutes).
The pairlist cache (`refresh_period`) on `VolumePairList` is only applicable to generating pairlists.
Filtering instances (not the first position in the list) will not apply any cache and will always use up-to-date data.
Filtering instances (not the first position in the list) will not apply any cache (beyond caching candles for the duration of the candle in advanced mode) and will always use up-to-date data.
`VolumePairList` is per default based on the ticker data from exchange, as reported by the ccxt library:
@@ -112,8 +113,8 @@ For convenience `lookback_days` can be specified, which will imply that 1d candl
!!! Warning "Performance implications when using lookback range"
If used in first position in combination with lookback, the computation of the range based volume can be time and resource consuming, as it downloads candles for all tradable pairs. Hence it's highly advised to use the standard approach with `VolumeFilter` to narrow the pairlist down for further range volume calculation.
??? Tip "Unsupported exchanges (Bittrex, Gemini)"
On some exchanges (like Bittrex and Gemini), regular VolumePairList does not work as the api does not natively provide 24h volume. This can be worked around by using candle data to build the volume.
??? Tip "Unsupported exchanges"
On some exchanges (like Gemini), regular VolumePairList does not work as the api does not natively provide 24h volume. This can be worked around by using candle data to build the volume.
To roughly simulate 24h volume, you can use the following configuration.
Please note that These pairlists will only refresh once per day.
@@ -192,14 +193,15 @@ The RemotePairList is defined in the pairlists section of the configuration sett
"refresh_period": 1800,
"keep_pairlist_on_failure": true,
"read_timeout": 60,
"bearer_token": "my-bearer-token"
"bearer_token": "my-bearer-token",
"save_to_file": "user_data/filename.json"
}
]
```
The optional `mode` option specifies if the pairlist should be used as a `blacklist` or as a `whitelist`. The default value is "whitelist".
The optional `processing_mode` option in the RemotePairList configuration determines how the retrieved pairlist is processed. It can have two values: "filter" or "append".
The optional `processing_mode` option in the RemotePairList configuration determines how the retrieved pairlist is processed. It can have two values: "filter" or "append". The default value is "filter".
In "filter" mode, the retrieved pairlist is used as a filter. Only the pairs present in both the original pairlist and the retrieved pairlist are included in the final pairlist. Other pairs are filtered out.
@@ -207,6 +209,42 @@ In "append" mode, the retrieved pairlist is added to the original pairlist. All
The `pairlist_url` option specifies the URL of the remote server where the pairlist is located, or the path to a local file (if file:/// is prepended). This allows the user to use either a remote server or a local file as the source for the pairlist.
The `save_to_file` option, when provided with a valid filename, saves the processed pairlist to that file in JSON format. This option is optional, and by default, the pairlist is not saved to a file.
??? Example "Multi bot with shared pairlist example"
`save_to_file` can be used to save the pairlist to a file with Bot1:
```json
"pairlists": [
{
"method": "RemotePairList",
"mode": "whitelist",
"pairlist_url": "https://example.com/pairlist",
"number_assets": 10,
"refresh_period": 1800,
"keep_pairlist_on_failure": true,
"read_timeout": 60,
"save_to_file": "user_data/filename.json"
}
]
```
This saved pairlist file can be loaded by Bot2, or any additional bot with this configuration:
```json
"pairlists": [
{
"method": "RemotePairList",
"mode": "whitelist",
"pairlist_url": "file:///user_data/filename.json",
"number_assets": 10,
"refresh_period": 10,
"keep_pairlist_on_failure": true,
}
]
```
The user is responsible for providing a server or local file that returns a JSON object with the following structure:
```json
@@ -227,6 +265,25 @@ The optional `bearer_token` will be included in the requests Authorization Heade
!!! Note
In case of a server error the last received pairlist will be kept if `keep_pairlist_on_failure` is set to true, when set to false a empty pairlist is returned.
#### MarketCapPairList
`MarketCapPairList` employs sorting/filtering of pairs by their marketcap rank based of CoinGecko. It will only recognize coins up to the coin placed at rank 250. The returned pairlist will be sorted based of their marketcap ranks.
```json
"pairlists": [
{
"method": "MarketCapPairList",
"number_assets": 20,
"max_rank": 50,
"refresh_period": 86400
}
]
```
`number_assets` defines the maximum number of pairs returned by the pairlist. `max_rank` will determine the maximum rank used in creating/filtering the pairlist. It's expected that some coins within the top `max_rank` marketcap will not be included in the resulting pairlist since not all pairs will have active trading pairs in your preferred market/stake/exchange combination.
`refresh_period` setting defines the period (in seconds) at which the marketcap rank data will be refreshed. Defaults to 86,400s (1 day). The pairlist cache (`refresh_period`) is applicable on both generating pairlists (first position in the list) and filtering instances (not the first position in the list).
#### 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

@@ -5,7 +5,7 @@ This section will highlight a few projects from members of the community.
- [Example freqtrade strategies](https://github.com/freqtrade/freqtrade-strategies/)
- [FrequentHippo - Grafana dashboard with dry/live runs and backtests](http://frequenthippo.ddns.net:3000/) (by hippocritical).
- [Online pairlist generator](https://remotepairlist.com/) (by Blood4rc).
- [Freqtrade Backtesting Project](https://bt.robot.co.network/) (by Blood4rc).
- [Freqtrade Backtesting Project](https://strat.ninja/) (by Blood4rc).
- [Freqtrade analysis notebook](https://github.com/froggleston/freqtrade_analysis_notebook) (by Froggleston).
- [TUI for freqtrade](https://github.com/froggleston/freqtrade-frogtrade9000) (by Froggleston).
- [Bot Academy](https://botacademy.ddns.net/) (by stash86) - Blog about crypto bot projects.

View File

@@ -40,9 +40,9 @@ Freqtrade is a free and open source crypto trading bot written in Python. It is
Please read the [exchange specific notes](exchanges.md) to learn about eventual, special configurations needed for each exchange.
- [X] [Binance](https://www.binance.com/)
- [X] [Bittrex](https://bittrex.com/)
- [X] [Bitmart](https://bitmart.com/)
- [X] [Gate.io](https://www.gate.io/ref/6266643)
- [X] [Huobi](http://huobi.com/)
- [X] [HTX](https://www.htx.com/) (Former Huobi)
- [X] [Kraken](https://kraken.com/)
- [X] [OKX](https://okx.com/) (Former OKEX)
- [ ] [potentially many others through <img alt="ccxt" width="30px" src="assets/ccxt-logo.svg" />](https://github.com/ccxt/ccxt/). _(We cannot guarantee they will work)_

View File

@@ -40,11 +40,41 @@ usage: freqtrade recursive-analysis [-h] [-v] [--logfile FILE] [-V] [-c PATH]
[--startup-candle STARTUP_CANDLES [STARTUP_CANDLES ...]]
optional arguments:
-p PAIR, --pairs PAIR
-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 ...]
--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.
```
### Why are odd-numbered default startup candles used?

View File

@@ -1,6 +1,6 @@
markdown==3.4.4
markdown==3.5.2
mkdocs==1.5.3
mkdocs-material==9.4.1
mkdocs-material==9.5.11
mdx_truly_sane_lists==1.3
pymdown-extensions==10.3
jinja2==3.1.2
pymdown-extensions==10.7
jinja2==3.1.3

View File

@@ -134,13 +134,16 @@ python3 scripts/rest_client.py --config rest_config.json <command> [optional par
| `reload_config` | Reloads the configuration file.
| `trades` | List last trades. Limited to 500 trades per call.
| `trade/<tradeid>` | Get specific trade.
| `trade/<tradeid>` | DELETE - Remove trade from the database. Tries to close open orders. Requires manual handling of this trade on the exchange.
| `trade/<tradeid>/open-order` | DELETE - Cancel open order for this trade.
| `trade/<tradeid>/reload` | GET - Reload a trade from the Exchange. Only works in live, and can potentially help recover a trade that was manually sold on the exchange.
| `trades/<tradeid>` | DELETE - Remove trade from the database. Tries to close open orders. Requires manual handling of this trade on the exchange.
| `trades/<tradeid>/open-order` | DELETE - Cancel open order for this trade.
| `trades/<tradeid>/reload` | GET - Reload a trade from the Exchange. Only works in live, and can potentially help recover a trade that was manually sold on the exchange.
| `show_config` | Shows part of the current configuration with relevant settings to operation.
| `logs` | Shows last log messages.
| `status` | Lists all open trades.
| `count` | Displays number of trades used and available.
| `entries [pair]` | Shows profit statistics for each enter tags for given pair (or all pairs if pair isn't given). Pair is optional.
| `exits [pair]` | Shows profit statistics for each exit reasons for given pair (or all pairs if pair isn't given). Pair is optional.
| `mix_tags [pair]` | Shows profit statistics for each combinations of enter tag + exit reasons for given pair (or all pairs if pair isn't given). Pair is optional.
| `locks` | Displays currently locked pairs.
| `delete_lock <lock_id>` | Deletes (disables) the lock by id.
| `profit` | Display a summary of your profit/loss from close trades and some stats about your performance.

View File

@@ -109,7 +109,7 @@ Freqtrade does not depend or install any additional database driver. Please refe
The following systems have been tested and are known to work with freqtrade:
* sqlite (default)
* PostgreSQL)
* PostgreSQL
* MariaDB
!!! Warning

View File

@@ -30,7 +30,7 @@ The Order-type will be ignored if only one mode is available.
|----------|-------------|
| Binance | limit |
| Binance Futures | market, limit |
| Huobi | limit |
| HTX (former Huobi) | limit |
| kraken | market, limit |
| Gate | limit |
| Okx | limit |

View File

@@ -489,7 +489,7 @@ The helper function `stoploss_from_absolute()` can be used to convert from an ab
dataframe, _ = self.dp.get_analyzed_dataframe(pair, self.timeframe)
trade_date = timeframe_to_prev_date(self.timeframe, trade.open_date_utc)
candle = dataframe.iloc[-1].squeeze()
sign = 1 if trade.is_short else -1
side = 1 if trade.is_short else -1
return stoploss_from_absolute(current_rate + (side * candle['atr'] * 2),
current_rate, is_short=trade.is_short,
leverage=trade.leverage)
@@ -760,26 +760,38 @@ The `position_adjustment_enable` strategy property enables the usage of `adjust_
For performance reasons, it's disabled by default and freqtrade will show a warning message on startup if enabled.
`adjust_trade_position()` can be used to perform additional orders, for example to manage risk with DCA (Dollar Cost Averaging) or to increase or decrease positions.
`max_entry_position_adjustment` property is used to limit the number of additional buys per trade (on top of the first buy) that the bot can execute. By default, the value is -1 which means the bot have no limit on number of adjustment buys.
The strategy is expected to return a stake_amount (in stake currency) between `min_stake` and `max_stake` if and when an additional buy order should be made (position is increased).
If there are not enough funds in the wallet (the return value is above `max_stake`) then the signal will be ignored.
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.
`adjust_trade_position()` is called very frequently for the duration of a trade, so you must keep your implementation as performant as possible.
Additional Buys are ignored once you have reached the maximum amount of extra buys that you have set on `max_entry_position_adjustment`, but the callback is called anyway looking for partial exits.
Position adjustments will always be applied in the direction of the trade, so a positive value will always increase your position (negative values will decrease your position), no matter if it's a long or short trade.
Adjustment orders can be assigned with a tag by returning a 2 element Tuple, with the first element being the adjustment amount, and the 2nd element the tag (e.g. `return 250, 'increase_favorable_conditions'`).
Position adjustments will always be applied in the direction of the trade, so a positive value will always increase your position (negative values will decrease your position), no matter if it's a long or short trade. Modifications to leverage are not possible, and the stake-amount is assumed to be before applying leverage.
Modifications to leverage are not possible, and the stake-amount returned is assumed to be before applying leverage.
### Increase position
The strategy is expected to return a positive **stake_amount** (in stake currency) between `min_stake` and `max_stake` if and when an additional entry order should be made (position is increased -> buy order for long trades, sell order for short trades).
If there are not enough funds in the wallet (the return value is above `max_stake`) then the signal will be ignored.
`max_entry_position_adjustment` property is used to limit the number of additional entries per trade (on top of the first entry order) that the bot can execute. By default, the value is -1 which means the bot have no limit on number of adjustment entries.
Additional entries are ignored once you have reached the maximum amount of extra entries that you have set on `max_entry_position_adjustment`, but the callback is called anyway looking for partial exits.
### Decrease position
The strategy is expected to return a negative stake_amount (in stake currency) for a partial exit.
Returning the full owned stake at that point (based on the current price) (`-(trade.amount / trade.leverage) * current_exit_rate`) results in a full exit.
Returning a value more than the above (so remaining stake_amount would become negative) will result in the bot ignoring the signal.
!!! Note "About stake size"
Using fixed stake size means it will be the amount used for the first order, just like without position adjustment.
If you wish to buy additional orders with DCA, then make sure to leave enough funds in the wallet for that.
Using 'unlimited' stake amount with DCA orders requires you to also implement the `custom_stake_amount()` callback to avoid allocating all funds to the initial order.
!!! Warning
!!! Warning "Stoploss calculation"
Stoploss is still calculated from the initial opening price, not averaged price.
Regular stoploss rules still apply (cannot move down).
@@ -789,6 +801,11 @@ Position adjustments will always be applied in the direction of the trade, so a
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.
!!! 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
from freqtrade.persistence import Trade
@@ -822,7 +839,8 @@ class DigDeeperStrategy(IStrategy):
min_stake: Optional[float], max_stake: float,
current_entry_rate: float, current_exit_rate: float,
current_entry_profit: float, current_exit_profit: float,
**kwargs) -> Optional[float]:
**kwargs
) -> Union[Optional[float], Tuple[Optional[float], Optional[str]]]:
"""
Custom trade adjustment logic, returning the stake amount that a trade should be
increased or decreased.
@@ -848,11 +866,12 @@ class DigDeeperStrategy(IStrategy):
:return float: Stake amount to adjust your trade,
Positive values to increase position, Negative values to decrease position.
Return None for no action.
Optionally, return a tuple with a 2nd element with an order reason
"""
if current_profit > 0.05 and trade.nr_of_successful_exits == 0:
# Take half of the profit at +5%
return -(trade.stake_amount / 2)
return -(trade.stake_amount / 2), 'half_profit_5%'
if current_profit > -0.05:
return None
@@ -880,7 +899,7 @@ class DigDeeperStrategy(IStrategy):
stake_amount = filled_entries[0].stake_amount
# This then calculates current safety order size
stake_amount = stake_amount * (1 + (count_of_entries * 0.25))
return stake_amount
return stake_amount, '1/3rd_increase'
except Exception as exception:
return None

View File

@@ -156,9 +156,9 @@ def populate_indicators(self, dataframe: DataFrame, metadata: dict) -> DataFrame
Out of the box, freqtrade installs the following technical libraries:
* [ta-lib](http://mrjbq7.github.io/ta-lib/)
* [pandas-ta](https://twopirllc.github.io/pandas-ta/)
* [technical](https://github.com/freqtrade/technical/)
- [ta-lib](https://ta-lib.github.io/ta-lib-python/)
- [pandas-ta](https://twopirllc.github.io/pandas-ta/)
- [technical](https://github.com/freqtrade/technical/)
Additional technical libraries can be installed as necessary, or custom indicators may be written / invented by the strategy author.
@@ -173,7 +173,7 @@ You can use [recursive-analysis](recursive-analysis.md) to check and find the co
In this example strategy, this should be set to 400 (`startup_candle_count = 400`), since the minimum needed history for ema100 calculation to make sure the value is correct is 400 candles.
``` python
dataframe['ema100'] = ta.EMA(dataframe, timeperiod=400)
dataframe['ema100'] = ta.EMA(dataframe, timeperiod=100)
```
By letting the bot know how much history is needed, backtest trades can start at the specified timerange during backtesting and hyperopt.
@@ -367,6 +367,11 @@ class AwesomeStrategy(IStrategy):
}
```
??? info "Orders that don't fill immediately"
`minimal_roi` will take the `trade.open_date` as reference, which is the time the trade was initialized / the first order for this trade was placed.
This will also hold true for limit orders that don't fill immediately (usually in combination with "off-spot" prices through `custom_entry_price()`), as well as for cases where the initial order is replaced through `adjust_entry_price()`.
The time used will still be from the initial `trade.open_date` (when the initial order was first placed), not from the newly placed order date.
### Stoploss
Setting a stoploss is highly recommended to protect your capital from strong moves against you.
@@ -486,17 +491,18 @@ for more information.
:param timeframe: Informative timeframe. Must always be equal or higher than strategy timeframe.
:param asset: Informative asset, for example BTC, BTC/USDT, ETH/BTC. Do not specify to use
current pair.
current pair. Also supports limited pair format strings (see below)
:param fmt: Column format (str) or column formatter (callable(name, asset, timeframe)). When not
specified, defaults to:
* {base}_{quote}_{column}_{timeframe} if asset is specified.
* {base}_{quote}_{column}_{timeframe} if asset is specified.
* {column}_{timeframe} if asset is not specified.
Format string supports these format variables:
* {asset} - full name of the asset, for example 'BTC/USDT'.
Pair format supports these format variables:
* {base} - base currency in lower case, for example 'eth'.
* {BASE} - same as {base}, except in upper case.
* {quote} - quote currency in lower case, for example 'usdt'.
* {QUOTE} - same as {quote}, except in upper case.
Format string additionally supports this variables.
* {asset} - full name of the asset, for example 'BTC/USDT'.
* {column} - name of dataframe column.
* {timeframe} - timeframe of informative dataframe.
:param ffill: ffill dataframe after merging informative pair.
@@ -1003,11 +1009,15 @@ This is a common pain-point, which can cause huge differences between backtestin
The following lists some common patterns which should be avoided to prevent frustration:
- don't use `shift(-1)`. This uses data from the future, which is not available.
- don't use `.iloc[-1]` or any other absolute position in the dataframe, this will be different between dry-run and backtesting.
- don't use `shift(-1)` or other negative values. This uses data from the future in backtesting, which is not available in dry or live modes.
- don't use `.iloc[-1]` or any other absolute position in the dataframe within `populate_` functions, as this will be different between dry-run and backtesting. Absolute `iloc` indexing is safe to use in callbacks however - see [Strategy Callbacks](strategy-callbacks.md).
- don't use `dataframe['volume'].mean()`. This uses the full DataFrame for backtesting, including data from the future. Use `dataframe['volume'].rolling(<window>).mean()` instead
- don't use `.resample('1h')`. This uses the left border of the interval, so moves data from an hour to the start of the hour. Use `.resample('1h', label='right')` instead.
!!! Tip "Identifying problems"
You may also want to check the 2 helper commands [lookahead-analysis](lookahead-analysis.md) and [recursive-analysis](recursive-analysis.md), which can each help you figure out problems with your strategy in different ways.
Please treat them as what they are - helpers to identify most common problems. A negative result of each does not guarantee that there's none of the above errors included.
### Colliding signals
When conflicting signals collide (e.g. both `'enter_long'` and `'exit_long'` are 1), freqtrade will do nothing and ignore the entry signal. This will avoid trades that enter, and exit immediately. Obviously, this can potentially lead to missed entries.

View File

@@ -570,7 +570,7 @@ def populate_any_indicators(
```
1. Features - Move to `feature_engineering_expand_all`
2. Basic features, not expanded across `include_periods_candles` - move to`feature_engineering_expand_basic()`.
2. Basic features, not expanded across `indicator_periods_candles` - move to`feature_engineering_expand_basic()`.
3. Standard features which should not be expanded - move to `feature_engineering_standard()`.
4. Targets - Move this part to `set_freqai_targets()`.

View File

@@ -175,6 +175,7 @@ official commands. You can ask at any moment for help with `/help`.
| `/status` | Lists all open trades
| `/status <trade_id>` | Lists one or more specific trade. Separate multiple <trade_id> with a blank space.
| `/status table` | List all open trades in a table format. Pending buy orders are marked with an asterisk (*) Pending sell orders are marked with a double asterisk (**)
| `/order <trade_id>` | Lists orders of one or more specific trade. Separate multiple <trade_id> with a blank space.
| `/trades [limit]` | List all recently closed trades in a table format.
| `/count` | Displays number of trades used and available
| `/locks` | Show currently locked pairs.

View File

@@ -54,7 +54,7 @@ optional arguments:
### Create config examples
```
$ freqtrade new-config --config config_binance.json
$ freqtrade new-config --config user_data/config_binance.json
? Do you want to enable Dry-run (simulated trades)? Yes
? Please insert your stake currency: BTC
@@ -242,7 +242,6 @@ bitkk True missing opt: fetchMyTrades
bitmart True
bitmax True missing opt: fetchMyTrades
bitpanda True
bittrex True
bitvavo True
bitz True missing opt: fetchMyTrades
btcalpha True missing opt: fetchTicker, fetchTickers
@@ -324,7 +323,6 @@ bitpanda True
bitso False missing: fetchOHLCV
bitstamp True missing opt: fetchTickers
bitstamp1 False missing: fetchOrder, fetchOHLCV
bittrex True
bitvavo True
bitz True missing opt: fetchMyTrades
bl3p False missing: fetchOrder, fetchOHLCV
@@ -427,25 +425,33 @@ zb True missing opt: fetchMyTrades
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]
usage: freqtrade list-timeframes [-h] [-v] [--logfile FILE] [-V] [-c PATH]
[-d PATH] [--userdir PATH]
[--exchange EXCHANGE] [-1]
optional arguments:
options:
-h, --help show this help message and exit
--exchange EXCHANGE Exchange name (default: `bittrex`). Only valid if no config is provided.
--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 to the file specified. Special values are: 'syslog', 'journald'. See the documentation for more details.
--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: `config.json`). Multiple --config options may be used. Can be set to `-`
to read config from stdin.
-d PATH, --datadir 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.
```
* Example: see the timeframes for the 'binance' exchange, set in the configuration file:
@@ -479,20 +485,17 @@ 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}]
[--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}]
optional arguments:
options:
-h, --help show this help message and exit
--exchange EXCHANGE Exchange name (default: `bittrex`). Only valid if no
config is provided.
--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.
@@ -504,20 +507,22 @@ optional arguments:
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}
--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 to the file specified. Special values are:
--logfile FILE, --log-file FILE
Log to the file specified. Special values are:
'syslog', 'journald'. See the documentation for more
details.
-V, --version show program's version number and exit
-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.
-d PATH, --datadir 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.
@@ -532,7 +537,7 @@ Pairs/markets are sorted by its symbol string in the printed output.
### Examples
* Print the list of active pairs with quote currency USD on exchange, specified in the default
configuration file (i.e. pairs on the "Bittrex" exchange) in JSON format:
configuration file (i.e. pairs on the "Binance" exchange) in JSON format:
```
$ freqtrade list-pairs --quote USD --print-json
@@ -564,7 +569,7 @@ usage: freqtrade test-pairlist [-h] [--userdir PATH] [-v] [-c PATH]
[--quote QUOTE_CURRENCY [QUOTE_CURRENCY ...]]
[-1] [--print-json] [--exchange EXCHANGE]
optional arguments:
options:
-h, --help show this help message and exit
--userdir PATH, --user-data-dir PATH
Path to userdata directory.
@@ -578,8 +583,7 @@ optional arguments:
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 (default: `bittrex`). Only valid if no
config is provided.
--exchange EXCHANGE Exchange name. Only valid if no config is provided.
```
@@ -986,11 +990,7 @@ 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`
be converted.
Common arguments:
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).

View File

@@ -134,6 +134,7 @@ Possible parameters are:
* `stake_amount`
* `stake_currency`
* `base_currency`
* `quote_currency`
* `fiat_currency`
* `order_type`
* `current_rate`
@@ -155,6 +156,7 @@ Possible parameters are:
* `stake_amount`
* `stake_currency`
* `base_currency`
* `quote_currency`
* `fiat_currency`
* `order_type`
* `current_rate`
@@ -176,6 +178,7 @@ Possible parameters are:
* `stake_amount`
* `stake_currency`
* `base_currency`
* `quote_currency`
* `fiat_currency`
* `order_type`
* `current_rate`
@@ -199,6 +202,7 @@ Possible parameters are:
* `profit_ratio`
* `stake_currency`
* `base_currency`
* `quote_currency`
* `fiat_currency`
* `exit_reason`
* `order_type`
@@ -224,6 +228,7 @@ Possible parameters are:
* `profit_ratio`
* `stake_currency`
* `base_currency`
* `quote_currency`
* `fiat_currency`
* `exit_reason`
* `order_type`
@@ -249,6 +254,7 @@ Possible parameters are:
* `profit_ratio`
* `stake_currency`
* `base_currency`
* `quote_currency`
* `fiat_currency`
* `exit_reason`
* `order_type`
@@ -302,6 +308,7 @@ You can configure this as follows:
```
The above represents the default (`exit_fill` and `entry_fill` are optional and will default to the above configuration) - modifications are obviously possible.
To disable either of the two default values (`entry_fill` / `exit_fill`), you can assign them an empty array (`exit_fill: []`).
Available fields correspond to the fields for webhooks and are documented in the corresponding webhook sections.

View File

@@ -22,7 +22,7 @@ git clone https://github.com/freqtrade/freqtrade.git
### 2. Install ta-lib
Install ta-lib according to the [ta-lib documentation](https://github.com/mrjbq7/ta-lib#windows).
Install ta-lib according to the [ta-lib documentation](https://github.com/TA-Lib/ta-lib-python#windows).
As compiling from source on windows has heavy dependencies (requires a partial visual studio installation), Freqtrade provides these dependencies (in the binary wheel format) for the latest 3 Python versions (3.9, 3.10 and 3.11) and for 64bit Windows.
These Wheels are also used by CI running on windows, and are therefore tested together with freqtrade.

View File

@@ -1,5 +1,5 @@
""" Freqtrade bot """
__version__ = '2023.9'
__version__ = '2024.2'
if 'dev' in __version__:
from pathlib import Path

View File

@@ -65,8 +65,8 @@ ARGS_BUILD_CONFIG = ["config"]
ARGS_BUILD_STRATEGY = ["user_data_dir", "strategy", "template"]
ARGS_CONVERT_DATA_TRADES = ["pairs", "format_from_trades", "format_to", "erase", "exchange"]
ARGS_CONVERT_DATA = ["pairs", "format_from", "format_to", "erase", "exchange"]
ARGS_CONVERT_DATA_OHLCV = ARGS_CONVERT_DATA + ["timeframes", "trading_mode", "candle_types"]
ARGS_CONVERT_TRADES = ["pairs", "timeframes", "exchange", "dataformat_ohlcv", "dataformat_trades"]
@@ -219,27 +219,35 @@ class Arguments:
)
# Add trade subcommand
trade_cmd = subparsers.add_parser('trade', help='Trade module.',
parents=[_common_parser, _strategy_parser])
trade_cmd = subparsers.add_parser(
'trade',
help='Trade module.',
parents=[_common_parser, _strategy_parser]
)
trade_cmd.set_defaults(func=start_trading)
self._build_args(optionlist=ARGS_TRADE, parser=trade_cmd)
# add create-userdir subcommand
create_userdir_cmd = subparsers.add_parser('create-userdir',
help="Create user-data directory.",
)
create_userdir_cmd = subparsers.add_parser(
'create-userdir',
help="Create user-data directory.",
)
create_userdir_cmd.set_defaults(func=start_create_userdir)
self._build_args(optionlist=ARGS_CREATE_USERDIR, parser=create_userdir_cmd)
# add new-config subcommand
build_config_cmd = subparsers.add_parser('new-config',
help="Create new config")
build_config_cmd = subparsers.add_parser(
'new-config',
help="Create new config",
)
build_config_cmd.set_defaults(func=start_new_config)
self._build_args(optionlist=ARGS_BUILD_CONFIG, parser=build_config_cmd)
# add new-strategy subcommand
build_strategy_cmd = subparsers.add_parser('new-strategy',
help="Create new strategy")
build_strategy_cmd = subparsers.add_parser(
'new-strategy',
help="Create new strategy",
)
build_strategy_cmd.set_defaults(func=start_new_strategy)
self._build_args(optionlist=ARGS_BUILD_STRATEGY, parser=build_strategy_cmd)
@@ -268,7 +276,7 @@ class Arguments:
parents=[_common_parser],
)
convert_trade_data_cmd.set_defaults(func=partial(start_convert_data, ohlcv=False))
self._build_args(optionlist=ARGS_CONVERT_DATA, parser=convert_trade_data_cmd)
self._build_args(optionlist=ARGS_CONVERT_DATA_TRADES, parser=convert_trade_data_cmd)
# Add trades-to-ohlcv subcommand
convert_trade_data_cmd = subparsers.add_parser(
@@ -289,8 +297,11 @@ class Arguments:
self._build_args(optionlist=ARGS_LIST_DATA, parser=list_data_cmd)
# Add backtesting subcommand
backtesting_cmd = subparsers.add_parser('backtesting', help='Backtesting module.',
parents=[_common_parser, _strategy_parser])
backtesting_cmd = subparsers.add_parser(
'backtesting',
help='Backtesting module.',
parents=[_common_parser, _strategy_parser]
)
backtesting_cmd.set_defaults(func=start_backtesting)
self._build_args(optionlist=ARGS_BACKTEST, parser=backtesting_cmd)
@@ -304,22 +315,29 @@ class Arguments:
self._build_args(optionlist=ARGS_BACKTEST_SHOW, parser=backtesting_show_cmd)
# Add backtesting analysis subcommand
analysis_cmd = subparsers.add_parser('backtesting-analysis',
help='Backtest Analysis module.',
parents=[_common_parser])
analysis_cmd = subparsers.add_parser(
'backtesting-analysis',
help='Backtest Analysis module.',
parents=[_common_parser]
)
analysis_cmd.set_defaults(func=start_analysis_entries_exits)
self._build_args(optionlist=ARGS_ANALYZE_ENTRIES_EXITS, parser=analysis_cmd)
# Add edge subcommand
edge_cmd = subparsers.add_parser('edge', help='Edge module.',
parents=[_common_parser, _strategy_parser])
edge_cmd = subparsers.add_parser(
'edge',
help='Edge module.',
parents=[_common_parser, _strategy_parser]
)
edge_cmd.set_defaults(func=start_edge)
self._build_args(optionlist=ARGS_EDGE, parser=edge_cmd)
# Add hyperopt subcommand
hyperopt_cmd = subparsers.add_parser('hyperopt', help='Hyperopt module.',
parents=[_common_parser, _strategy_parser],
)
hyperopt_cmd = subparsers.add_parser(
'hyperopt',
help='Hyperopt module.',
parents=[_common_parser, _strategy_parser],
)
hyperopt_cmd.set_defaults(func=start_hyperopt)
self._build_args(optionlist=ARGS_HYPEROPT, parser=hyperopt_cmd)
@@ -447,16 +465,20 @@ class Arguments:
self._build_args(optionlist=ARGS_PLOT_PROFIT, parser=plot_profit_cmd)
# Add webserver subcommand
webserver_cmd = subparsers.add_parser('webserver', help='Webserver module.',
parents=[_common_parser])
webserver_cmd = subparsers.add_parser(
'webserver',
help='Webserver module.',
parents=[_common_parser]
)
webserver_cmd.set_defaults(func=start_webserver)
self._build_args(optionlist=ARGS_WEBSERVER, parser=webserver_cmd)
# Add strategy_updater subcommand
strategy_updater_cmd = subparsers.add_parser('strategy-updater',
help='updates outdated strategy'
'files to the current version',
parents=[_common_parser])
strategy_updater_cmd = subparsers.add_parser(
'strategy-updater',
help='updates outdated strategy files to the current version',
parents=[_common_parser]
)
strategy_updater_cmd.set_defaults(func=start_strategy_update)
self._build_args(optionlist=ARGS_STRATEGY_UPDATER, parser=strategy_updater_cmd)
@@ -464,8 +486,8 @@ class Arguments:
lookahead_analayis_cmd = subparsers.add_parser(
'lookahead-analysis',
help="Check for potential look ahead bias.",
parents=[_common_parser, _strategy_parser])
parents=[_common_parser, _strategy_parser]
)
lookahead_analayis_cmd.set_defaults(func=start_lookahead_analysis)
self._build_args(optionlist=ARGS_LOOKAHEAD_ANALYSIS,
@@ -475,8 +497,8 @@ class Arguments:
recursive_analayis_cmd = subparsers.add_parser(
'recursive-analysis',
help="Check for potential recursive formula issue.",
parents=[_common_parser, _strategy_parser])
parents=[_common_parser, _strategy_parser]
)
recursive_analayis_cmd.set_defaults(func=start_recursive_analysis)
self._build_args(optionlist=ARGS_RECURSIVE_ANALYSIS,

View File

@@ -108,9 +108,8 @@ def ask_user_config() -> Dict[str, Any]:
"choices": [
"binance",
"binanceus",
"bittrex",
"gate",
"huobi",
"htx",
"kraken",
"kucoin",
"okx",

View File

@@ -421,6 +421,12 @@ AVAILABLE_CLI_OPTIONS = {
'desired timeframe as specified as --timeframes/-t.',
action='store_true',
),
"format_from_trades": Arg(
'--format-from',
help='Source format for data conversion.',
choices=constants.AVAILABLE_DATAHANDLERS + ['kraken_csv'],
required=True,
),
"format_from": Arg(
'--format-from',
help='Source format for data conversion.',

View File

@@ -12,7 +12,7 @@ from freqtrade.enums import RunMode, TradingMode
from freqtrade.exceptions import OperationalException
from freqtrade.exchange import timeframe_to_minutes
from freqtrade.resolvers import ExchangeResolver
from freqtrade.util.binance_mig import migrate_binance_futures_data
from freqtrade.util.migrations import migrate_data
logger = logging.getLogger(__name__)
@@ -78,14 +78,14 @@ def start_convert_data(args: Dict[str, Any], ohlcv: bool = True) -> None:
"""
config = setup_utils_configuration(args, RunMode.UTIL_NO_EXCHANGE)
if ohlcv:
migrate_binance_futures_data(config)
migrate_data(config)
convert_ohlcv_format(config,
convert_from=args['format_from'],
convert_to=args['format_to'],
erase=args['erase'])
else:
convert_trades_format(config,
convert_from=args['format_from'], convert_to=args['format_to'],
convert_from=args['format_from_trades'], convert_to=args['format_to'],
erase=args['erase'])
@@ -134,10 +134,10 @@ def start_list_data(args: Dict[str, Any]) -> None:
print(tabulate([
(pair, timeframe, candle_type,
start.strftime(DATETIME_PRINT_FORMAT),
end.strftime(DATETIME_PRINT_FORMAT))
for pair, timeframe, candle_type, start, end in sorted(
end.strftime(DATETIME_PRINT_FORMAT), length)
for pair, timeframe, candle_type, start, end, length in sorted(
paircombs1,
key=lambda x: (x[0], timeframe_to_minutes(x[1]), x[2]))
],
headers=("Pair", "Timeframe", "Type", 'From', 'To'),
headers=("Pair", "Timeframe", "Type", 'From', 'To', 'Candles'),
tablefmt='psql', stralign='right'))

View File

@@ -5,7 +5,7 @@ from freqtrade import constants
from freqtrade.configuration import setup_utils_configuration
from freqtrade.enums import RunMode
from freqtrade.exceptions import OperationalException
from freqtrade.misc import round_coin_value
from freqtrade.util import fmt_coin
logger = logging.getLogger(__name__)
@@ -29,8 +29,8 @@ def setup_optimize_configuration(args: Dict[str, Any], method: RunMode) -> Dict[
# tradable_balance_ratio
if (config['stake_amount'] != constants.UNLIMITED_STAKE_AMOUNT
and config['stake_amount'] > wallet_size):
wallet = round_coin_value(wallet_size, config['stake_currency'])
stake = round_coin_value(config['stake_amount'], config['stake_currency'])
wallet = fmt_coin(wallet_size, config['stake_currency'])
stake = fmt_coin(config['stake_amount'], config['stake_currency'])
raise OperationalException(
f"Starting balance ({wallet}) is smaller than stake_amount {stake}. "
f"Wallet is calculated as `dry_run_wallet * tradable_balance_ratio`."
@@ -140,7 +140,7 @@ def start_lookahead_analysis(args: Dict[str, Any]) -> None:
:param args: Cli args from Arguments()
:return: None
"""
from freqtrade.optimize.lookahead_analysis_helpers import LookaheadAnalysisSubFunctions
from freqtrade.optimize.analysis.lookahead_helpers import LookaheadAnalysisSubFunctions
config = setup_utils_configuration(args, RunMode.UTIL_NO_EXCHANGE)
LookaheadAnalysisSubFunctions.start(config)
@@ -152,7 +152,7 @@ def start_recursive_analysis(args: Dict[str, Any]) -> None:
:param args: Cli args from Arguments()
:return: None
"""
from freqtrade.optimize.recursive_analysis_helpers import RecursiveAnalysisSubFunctions
from freqtrade.optimize.analysis.recursive_helpers import RecursiveAnalysisSubFunctions
config = setup_utils_configuration(args, RunMode.UTIL_NO_EXCHANGE)
RecursiveAnalysisSubFunctions.start(config)

View File

@@ -15,6 +15,7 @@ def start_test_pairlist(args: Dict[str, Any]) -> None:
"""
Test Pairlist configuration
"""
from freqtrade.persistence import FtNoDBContext
from freqtrade.plugins.pairlistmanager import PairListManager
config = setup_utils_configuration(args, RunMode.UTIL_EXCHANGE)
@@ -24,11 +25,12 @@ def start_test_pairlist(args: Dict[str, Any]) -> None:
if not quote_currencies:
quote_currencies = [config.get('stake_currency')]
results = {}
for curr in quote_currencies:
config['stake_currency'] = curr
pairlists = PairListManager(exchange, config)
pairlists.refresh_pairlist()
results[curr] = pairlists.whitelist
with FtNoDBContext():
for curr in quote_currencies:
config['stake_currency'] = curr
pairlists = PairListManager(exchange, config)
pairlists.refresh_pairlist()
results[curr] = pairlists.whitelist
for curr, pairlist in results.items():
if not args.get('print_one_column', False) and not args.get('list_pairs_print_json', False):

View File

@@ -67,7 +67,7 @@ def validate_config_schema(conf: Dict[str, Any], preliminary: bool = False) -> D
)
def validate_config_consistency(conf: Dict[str, Any], preliminary: bool = False) -> None:
def validate_config_consistency(conf: Dict[str, Any], *, preliminary: bool = False) -> None:
"""
Validate the configuration consistency.
Should be ran after loading both configuration and strategy,
@@ -86,7 +86,7 @@ def validate_config_consistency(conf: Dict[str, Any], preliminary: bool = False)
_validate_ask_orderbook(conf)
_validate_freqai_hyperopt(conf)
_validate_freqai_backtest(conf)
_validate_freqai_include_timeframes(conf)
_validate_freqai_include_timeframes(conf, preliminary=preliminary)
_validate_consumers(conf)
validate_migrated_strategy_settings(conf)
@@ -335,7 +335,7 @@ def _validate_freqai_hyperopt(conf: Dict[str, Any]) -> None:
'Using analyze-per-epoch parameter is not supported with a FreqAI strategy.')
def _validate_freqai_include_timeframes(conf: Dict[str, Any]) -> None:
def _validate_freqai_include_timeframes(conf: Dict[str, Any], preliminary: bool) -> None:
freqai_enabled = conf.get('freqai', {}).get('enabled', False)
if freqai_enabled:
main_tf = conf.get('timeframe', '5m')
@@ -355,7 +355,7 @@ def _validate_freqai_include_timeframes(conf: Dict[str, Any]) -> None:
f"`include_timeframes`.Offending include-timeframes: {', '.join(offending_lines)}")
# Ensure that the base timeframe is included in the include_timeframes list
if main_tf not in freqai_include_timeframes:
if not preliminary and main_tf not in freqai_include_timeframes:
feature_parameters = conf.get('freqai', {}).get('feature_parameters', {})
include_timeframes = [main_tf] + freqai_include_timeframes
conf.get('freqai', {}).get('feature_parameters', {}) \

View File

@@ -5,7 +5,7 @@ import logging
import warnings
from copy import deepcopy
from pathlib import Path
from typing import Any, Callable, Dict, List, Optional
from typing import Any, Callable, Dict, List, Optional, Tuple
from freqtrade import constants
from freqtrade.configuration.deprecated_settings import process_temporary_deprecated_settings
@@ -68,8 +68,10 @@ class Configuration:
config: Config = load_from_files(self.args.get("config", []))
# Load environment variables
env_data = enironment_vars_to_dict()
config = deep_merge_dicts(env_data, config)
from freqtrade.commands.arguments import NO_CONF_ALLOWED
if self.args.get('command') not in NO_CONF_ALLOWED:
env_data = enironment_vars_to_dict()
config = deep_merge_dicts(env_data, config)
# Normalize config
if 'internals' not in config:
@@ -233,54 +235,37 @@ class Configuration:
except ValueError:
pass
self._args_to_config(config, argname='timeframe_detail',
logstring='Parameter --timeframe-detail detected, '
'using {} for intra-candle backtesting ...')
configurations = [
('timeframe_detail',
'Parameter --timeframe-detail detected, using {} for intra-candle backtesting ...'),
('backtest_show_pair_list', 'Parameter --show-pair-list detected.'),
('stake_amount',
'Parameter --stake-amount detected, overriding stake_amount to: {} ...'),
('dry_run_wallet',
'Parameter --dry-run-wallet detected, overriding dry_run_wallet to: {} ...'),
('fee', 'Parameter --fee detected, setting fee to: {} ...'),
('timerange', 'Parameter --timerange detected: {} ...'),
]
self._args_to_config(config, argname='backtest_show_pair_list',
logstring='Parameter --show-pair-list detected.')
self._args_to_config(config, argname='stake_amount',
logstring='Parameter --stake-amount detected, '
'overriding stake_amount to: {} ...')
self._args_to_config(config, argname='dry_run_wallet',
logstring='Parameter --dry-run-wallet detected, '
'overriding dry_run_wallet to: {} ...')
self._args_to_config(config, argname='fee',
logstring='Parameter --fee detected, '
'setting fee to: {} ...')
self._args_to_config(config, argname='timerange',
logstring='Parameter --timerange detected: {} ...')
self._args_to_config_loop(config, configurations)
self._process_datadir_options(config)
self._args_to_config(config, argname='strategy_list',
logstring='Using strategy list of {} strategies', logfun=len)
self._args_to_config(
config,
argname='recursive_strategy_search',
logstring='Recursively searching for a strategy in the strategies folder.',
)
self._args_to_config(config, argname='timeframe',
logstring='Overriding timeframe with Command line argument')
self._args_to_config(config, argname='export',
logstring='Parameter --export detected: {} ...')
self._args_to_config(config, argname='backtest_breakdown',
logstring='Parameter --breakdown detected ...')
self._args_to_config(config, argname='backtest_cache',
logstring='Parameter --cache={} detected ...')
self._args_to_config(config, argname='disableparamexport',
logstring='Parameter --disableparamexport detected: {} ...')
self._args_to_config(config, argname='freqai_backtest_live_models',
logstring='Parameter --freqai-backtest-live-models detected ...')
configurations = [
('recursive_strategy_search',
'Recursively searching for a strategy in the strategies folder.'),
('timeframe', 'Overriding timeframe with Command line argument'),
('export', 'Parameter --export detected: {} ...'),
('backtest_breakdown', 'Parameter --breakdown detected ...'),
('backtest_cache', 'Parameter --cache={} detected ...'),
('disableparamexport', 'Parameter --disableparamexport detected: {} ...'),
('freqai_backtest_live_models',
'Parameter --freqai-backtest-live-models detected ...'),
]
self._args_to_config_loop(config, configurations)
# Edge section:
if 'stoploss_range' in self.args and self.args["stoploss_range"]:
@@ -291,31 +276,18 @@ class Configuration:
logger.info('Parameter --stoplosses detected: %s ...', self.args["stoploss_range"])
# Hyperopt section
self._args_to_config(config, argname='hyperopt',
logstring='Using Hyperopt class name: {}')
self._args_to_config(config, argname='hyperopt_path',
logstring='Using additional Hyperopt lookup path: {}')
self._args_to_config(config, argname='hyperoptexportfilename',
logstring='Using hyperopt file: {}')
self._args_to_config(config, argname='lookahead_analysis_exportfilename',
logstring='Saving lookahead analysis results into {} ...')
self._args_to_config(config, argname='epochs',
logstring='Parameter --epochs detected ... '
'Will run Hyperopt with for {} epochs ...'
)
self._args_to_config(config, argname='spaces',
logstring='Parameter -s/--spaces detected: {}')
self._args_to_config(config, argname='analyze_per_epoch',
logstring='Parameter --analyze-per-epoch detected.')
self._args_to_config(config, argname='print_all',
logstring='Parameter --print-all detected ...')
configurations = [
('hyperopt', 'Using Hyperopt class name: {}'),
('hyperopt_path', 'Using additional Hyperopt lookup path: {}'),
('hyperoptexportfilename', 'Using hyperopt file: {}'),
('lookahead_analysis_exportfilename', 'Saving lookahead analysis results into {} ...'),
('epochs', 'Parameter --epochs detected ... Will run Hyperopt with for {} epochs ...'),
('spaces', 'Parameter -s/--spaces detected: {}'),
('analyze_per_epoch', 'Parameter --analyze-per-epoch detected.'),
('print_all', 'Parameter --print-all detected ...'),
]
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 ...')
@@ -323,123 +295,55 @@ class Configuration:
else:
config.update({'print_colorized': True})
self._args_to_config(config, argname='print_json',
logstring='Parameter --print-json detected ...')
configurations = [
('print_json', 'Parameter --print-json detected ...'),
('export_csv', 'Parameter --export-csv detected: {}'),
('hyperopt_jobs', 'Parameter -j/--job-workers detected: {}'),
('hyperopt_random_state', 'Parameter --random-state detected: {}'),
('hyperopt_min_trades', 'Parameter --min-trades detected: {}'),
('hyperopt_loss', 'Using Hyperopt loss class name: {}'),
('hyperopt_show_index', 'Parameter -n/--index detected: {}'),
('hyperopt_list_best', 'Parameter --best detected: {}'),
('hyperopt_list_profitable', 'Parameter --profitable detected: {}'),
('hyperopt_list_min_trades', 'Parameter --min-trades detected: {}'),
('hyperopt_list_max_trades', 'Parameter --max-trades detected: {}'),
('hyperopt_list_min_avg_time', 'Parameter --min-avg-time detected: {}'),
('hyperopt_list_max_avg_time', 'Parameter --max-avg-time detected: {}'),
('hyperopt_list_min_avg_profit', 'Parameter --min-avg-profit detected: {}'),
('hyperopt_list_max_avg_profit', 'Parameter --max-avg-profit detected: {}'),
('hyperopt_list_min_total_profit', 'Parameter --min-total-profit detected: {}'),
('hyperopt_list_max_total_profit', 'Parameter --max-total-profit detected: {}'),
('hyperopt_list_min_objective', 'Parameter --min-objective detected: {}'),
('hyperopt_list_max_objective', 'Parameter --max-objective detected: {}'),
('hyperopt_list_no_details', 'Parameter --no-details detected: {}'),
('hyperopt_show_no_header', 'Parameter --no-header detected: {}'),
('hyperopt_ignore_missing_space', 'Paramter --ignore-missing-space detected: {}'),
]
self._args_to_config(config, argname='export_csv',
logstring='Parameter --export-csv detected: {}')
self._args_to_config(config, argname='hyperopt_jobs',
logstring='Parameter -j/--job-workers detected: {}')
self._args_to_config(config, argname='hyperopt_random_state',
logstring='Parameter --random-state detected: {}')
self._args_to_config(config, argname='hyperopt_min_trades',
logstring='Parameter --min-trades detected: {}')
self._args_to_config(config, argname='hyperopt_loss',
logstring='Using Hyperopt loss class name: {}')
self._args_to_config(config, argname='hyperopt_show_index',
logstring='Parameter -n/--index detected: {}')
self._args_to_config(config, argname='hyperopt_list_best',
logstring='Parameter --best detected: {}')
self._args_to_config(config, argname='hyperopt_list_profitable',
logstring='Parameter --profitable detected: {}')
self._args_to_config(config, argname='hyperopt_list_min_trades',
logstring='Parameter --min-trades detected: {}')
self._args_to_config(config, argname='hyperopt_list_max_trades',
logstring='Parameter --max-trades detected: {}')
self._args_to_config(config, argname='hyperopt_list_min_avg_time',
logstring='Parameter --min-avg-time detected: {}')
self._args_to_config(config, argname='hyperopt_list_max_avg_time',
logstring='Parameter --max-avg-time detected: {}')
self._args_to_config(config, argname='hyperopt_list_min_avg_profit',
logstring='Parameter --min-avg-profit detected: {}')
self._args_to_config(config, argname='hyperopt_list_max_avg_profit',
logstring='Parameter --max-avg-profit detected: {}')
self._args_to_config(config, argname='hyperopt_list_min_total_profit',
logstring='Parameter --min-total-profit detected: {}')
self._args_to_config(config, argname='hyperopt_list_max_total_profit',
logstring='Parameter --max-total-profit detected: {}')
self._args_to_config(config, argname='hyperopt_list_min_objective',
logstring='Parameter --min-objective detected: {}')
self._args_to_config(config, argname='hyperopt_list_max_objective',
logstring='Parameter --max-objective detected: {}')
self._args_to_config(config, argname='hyperopt_list_no_details',
logstring='Parameter --no-details detected: {}')
self._args_to_config(config, argname='hyperopt_show_no_header',
logstring='Parameter --no-header detected: {}')
self._args_to_config(config, argname="hyperopt_ignore_missing_space",
logstring="Paramter --ignore-missing-space detected: {}")
self._args_to_config_loop(config, configurations)
def _process_plot_options(self, config: Config) -> None:
self._args_to_config(config, argname='pairs',
logstring='Using pairs {}')
self._args_to_config(config, argname='indicators1',
logstring='Using indicators1: {}')
self._args_to_config(config, argname='indicators2',
logstring='Using indicators2: {}')
self._args_to_config(config, argname='trade_ids',
logstring='Filtering on trade_ids: {}')
self._args_to_config(config, argname='plot_limit',
logstring='Limiting plot to: {}')
self._args_to_config(config, argname='plot_auto_open',
logstring='Parameter --auto-open detected.')
self._args_to_config(config, argname='trade_source',
logstring='Using trades from: {}')
self._args_to_config(config, argname='prepend_data',
logstring='Prepend detected. Allowing data prepending.')
self._args_to_config(config, argname='erase',
logstring='Erase detected. Deleting existing data.')
self._args_to_config(config, argname='no_trades',
logstring='Parameter --no-trades detected.')
self._args_to_config(config, argname='timeframes',
logstring='timeframes --timeframes: {}')
self._args_to_config(config, argname='days',
logstring='Detected --days: {}')
self._args_to_config(config, argname='include_inactive',
logstring='Detected --include-inactive-pairs: {}')
self._args_to_config(config, argname='download_trades',
logstring='Detected --dl-trades: {}')
self._args_to_config(config, argname='dataformat_ohlcv',
logstring='Using "{}" to store OHLCV data.')
self._args_to_config(config, argname='dataformat_trades',
logstring='Using "{}" to store trades data.')
self._args_to_config(config, argname='show_timerange',
logstring='Detected --show-timerange')
configurations = [
('pairs', 'Using pairs {}'),
('indicators1', 'Using indicators1: {}'),
('indicators2', 'Using indicators2: {}'),
('trade_ids', 'Filtering on trade_ids: {}'),
('plot_limit', 'Limiting plot to: {}'),
('plot_auto_open', 'Parameter --auto-open detected.'),
('trade_source', 'Using trades from: {}'),
('prepend_data', 'Prepend detected. Allowing data prepending.'),
('erase', 'Erase detected. Deleting existing data.'),
('no_trades', 'Parameter --no-trades detected.'),
('timeframes', 'timeframes --timeframes: {}'),
('days', 'Detected --days: {}'),
('include_inactive', 'Detected --include-inactive-pairs: {}'),
('download_trades', 'Detected --dl-trades: {}'),
('dataformat_ohlcv', 'Using "{}" to store OHLCV data.'),
('dataformat_trades', 'Using "{}" to store trades data.'),
('show_timerange', 'Detected --show-timerange'),
]
self._args_to_config_loop(config, configurations)
def _process_data_options(self, config: Config) -> None:
self._args_to_config(config, argname='new_pairs_days',
@@ -453,45 +357,27 @@ class Configuration:
logstring='Detected --candle-types: {}')
def _process_analyze_options(self, config: Config) -> None:
self._args_to_config(config, argname='analysis_groups',
logstring='Analysis reason groups: {}')
configurations = [
('analysis_groups', 'Analysis reason groups: {}'),
('enter_reason_list', 'Analysis enter tag list: {}'),
('exit_reason_list', 'Analysis exit tag list: {}'),
('indicator_list', 'Analysis indicator list: {}'),
('timerange', 'Filter trades by timerange: {}'),
('analysis_rejected', 'Analyse rejected signals: {}'),
('analysis_to_csv', 'Store analysis tables to CSV: {}'),
('analysis_csv_path', 'Path to store analysis CSVs: {}'),
# Lookahead analysis results
('targeted_trade_amount', 'Targeted Trade amount: {}'),
('minimum_trade_amount', 'Minimum Trade amount: {}'),
('lookahead_analysis_exportfilename', 'Path to store lookahead-analysis-results: {}'),
('startup_candle', 'Startup candle to be used on recursive analysis: {}'),
]
self._args_to_config_loop(config, configurations)
self._args_to_config(config, argname='enter_reason_list',
logstring='Analysis enter tag list: {}')
def _args_to_config_loop(self, config, configurations: List[Tuple[str, str]]) -> None:
self._args_to_config(config, argname='exit_reason_list',
logstring='Analysis exit tag list: {}')
self._args_to_config(config, argname='indicator_list',
logstring='Analysis indicator list: {}')
self._args_to_config(config, argname='timerange',
logstring='Filter trades by timerange: {}')
self._args_to_config(config, argname='analysis_rejected',
logstring='Analyse rejected signals: {}')
self._args_to_config(config, argname='analysis_to_csv',
logstring='Store analysis tables to CSV: {}')
self._args_to_config(config, argname='analysis_csv_path',
logstring='Path to store analysis CSVs: {}')
self._args_to_config(config, argname='analysis_csv_path',
logstring='Path to store analysis CSVs: {}')
# Lookahead analysis results
self._args_to_config(config, argname='targeted_trade_amount',
logstring='Targeted Trade amount: {}')
self._args_to_config(config, argname='minimum_trade_amount',
logstring='Minimum Trade amount: {}')
self._args_to_config(config, argname='lookahead_analysis_exportfilename',
logstring='Path to store lookahead-analysis-results: {}')
self._args_to_config(config, argname='startup_candle',
logstring='Startup candle to be used on recursive analysis: {}')
for argname, logstring in configurations:
self._args_to_config(config, argname=argname, logstring=logstring)
def _process_runmode(self, config: Config) -> None:

View File

@@ -9,7 +9,7 @@ from freqtrade.misc import deep_merge_dicts
logger = logging.getLogger(__name__)
def get_var_typed(val):
def _get_var_typed(val):
try:
return int(val)
except ValueError:
@@ -24,7 +24,7 @@ def get_var_typed(val):
return val
def flat_vars_to_nested_dict(env_dict: Dict[str, Any], prefix: str) -> Dict[str, Any]:
def _flat_vars_to_nested_dict(env_dict: Dict[str, Any], prefix: str) -> Dict[str, Any]:
"""
Environment variables must be prefixed with FREQTRADE.
FREQTRADE__{section}__{key}
@@ -40,7 +40,7 @@ def flat_vars_to_nested_dict(env_dict: Dict[str, Any], prefix: str) -> Dict[str,
logger.info(f"Loading variable '{env_var}'")
key = env_var.replace(prefix, '')
for k in reversed(key.split('__')):
val = {k.lower(): get_var_typed(val)
val = {k.lower(): _get_var_typed(val)
if not isinstance(val, dict) and k not in no_convert else val}
relevant_vars = deep_merge_dicts(val, relevant_vars)
return relevant_vars
@@ -52,4 +52,4 @@ def enironment_vars_to_dict() -> Dict[str, Any]:
Relevant variables must follow the FREQTRADE__{section}__{key} pattern
:return: Nested dict based on available and relevant variables.
"""
return flat_vars_to_nested_dict(os.environ.copy(), ENV_VAR_PREFIX)
return _flat_vars_to_nested_dict(os.environ.copy(), ENV_VAR_PREFIX)

View File

@@ -33,9 +33,10 @@ HYPEROPT_LOSS_BUILTIN = ['ShortTradeDurHyperOptLoss', 'OnlyProfitHyperOptLoss',
'MaxDrawDownHyperOptLoss', 'MaxDrawDownRelativeHyperOptLoss',
'ProfitDrawDownHyperOptLoss']
AVAILABLE_PAIRLISTS = ['StaticPairList', 'VolumePairList', 'ProducerPairList', 'RemotePairList',
'AgeFilter', "FullTradesFilter", 'OffsetFilter', 'PerformanceFilter',
'PrecisionFilter', 'PriceFilter', 'RangeStabilityFilter',
'ShuffleFilter', 'SpreadFilter', 'VolatilityFilter']
'MarketCapPairList', 'AgeFilter', "FullTradesFilter", 'OffsetFilter',
'PerformanceFilter', 'PrecisionFilter', 'PriceFilter',
'RangeStabilityFilter', 'ShuffleFilter', 'SpreadFilter',
'VolatilityFilter']
AVAILABLE_PROTECTIONS = ['CooldownPeriod',
'LowProfitPairs', 'MaxDrawdown', 'StoplossGuard']
AVAILABLE_DATAHANDLERS = ['json', 'jsongz', 'hdf5', 'feather', 'parquet']
@@ -105,7 +106,7 @@ SUPPORTED_FIAT = [
"EUR", "GBP", "HKD", "HUF", "IDR", "ILS", "INR", "JPY",
"KRW", "MXN", "MYR", "NOK", "NZD", "PHP", "PKR", "PLN",
"RUB", "UAH", "SEK", "SGD", "THB", "TRY", "TWD", "ZAR",
"USD", "BTC", "ETH", "XRP", "LTC", "BCH"
"USD", "BTC", "ETH", "XRP", "LTC", "BCH", "BNB"
]
MINIMAL_CONFIG = {

View File

@@ -175,36 +175,40 @@ def _get_backtest_files(dirname: Path) -> List[Path]:
return list(reversed(sorted(dirname.glob('backtest-result-*-[0-9][0-9].json'))))
def get_backtest_result(filename: Path) -> List[BacktestHistoryEntryType]:
"""
Get backtest result read from metadata file
"""
def _extract_backtest_result(filename: Path) -> List[BacktestHistoryEntryType]:
metadata = load_backtest_metadata(filename)
return [
{
'filename': filename.stem,
'strategy': s,
'notes': v.get('notes', ''),
'run_id': v['run_id'],
'notes': v.get('notes', ''),
# Backtest "run" time
'backtest_start_time': v['backtest_start_time'],
} for s, v in load_backtest_metadata(filename).items()
# Backtest timerange
'backtest_start_ts': v.get('backtest_start_ts', None),
'backtest_end_ts': v.get('backtest_end_ts', None),
'timeframe': v.get('timeframe', None),
'timeframe_detail': v.get('timeframe_detail', None),
} for s, v in metadata.items()
]
def get_backtest_result(filename: Path) -> List[BacktestHistoryEntryType]:
"""
Get backtest result read from metadata file
"""
return _extract_backtest_result(filename)
def get_backtest_resultlist(dirname: Path) -> List[BacktestHistoryEntryType]:
"""
Get list of backtest results read from metadata files
"""
return [
{
'filename': filename.stem,
'strategy': s,
'run_id': v['run_id'],
'notes': v.get('notes', ''),
'backtest_start_time': v['backtest_start_time'],
}
result
for filename in _get_backtest_files(dirname)
for s, v in load_backtest_metadata(filename).items()
if v
for result in _extract_backtest_result(filename)
]
@@ -326,7 +330,10 @@ def load_backtest_data(filename: Union[Path, str], strategy: Optional[str] = Non
"Please specify a strategy.")
if strategy not in data['strategy']:
raise ValueError(f"Strategy {strategy} not available in the backtest result.")
raise ValueError(
f"Strategy {strategy} not available in the backtest result. "
f"Available strategies are '{','.join(data['strategy'].keys())}'"
)
data = data['strategy'][strategy]['trades']
df = pd.DataFrame(data)
@@ -350,10 +357,10 @@ def analyze_trade_parallelism(results: pd.DataFrame, timeframe: str) -> pd.DataF
:param timeframe: Timeframe used for backtest
:return: dataframe with open-counts per time-period in timeframe
"""
from freqtrade.exchange import timeframe_to_minutes
timeframe_min = timeframe_to_minutes(timeframe)
from freqtrade.exchange import timeframe_to_resample_freq
timeframe_freq = timeframe_to_resample_freq(timeframe)
dates = [pd.Series(pd.date_range(row[1]['open_date'], row[1]['close_date'],
freq=f"{timeframe_min}min"))
freq=timeframe_freq))
for row in results[['open_date', 'close_date']].iterrows()]
deltas = [len(x) for x in dates]
dates = pd.Series(pd.concat(dates).values, name='date')
@@ -361,7 +368,7 @@ def analyze_trade_parallelism(results: pd.DataFrame, timeframe: str) -> pd.DataF
df2 = pd.concat([dates, df2], axis=1)
df2 = df2.set_index('date')
df_final = df2.resample(f"{timeframe_min}min")[['pair']].count()
df_final = df2.resample(timeframe_freq)[['pair']].count()
df_final = df_final.rename({'pair': 'open_trades'}, axis=1)
return df_final

View File

@@ -84,7 +84,7 @@ def ohlcv_fill_up_missing_data(dataframe: DataFrame, timeframe: str, pair: str)
using the previous close as price for "open", "high" "low" and "close", volume is set to 0
"""
from freqtrade.exchange import timeframe_to_minutes
from freqtrade.exchange import timeframe_to_resample_freq
ohlcv_dict = {
'open': 'first',
@@ -93,13 +93,7 @@ def ohlcv_fill_up_missing_data(dataframe: DataFrame, timeframe: str, pair: str)
'close': 'last',
'volume': 'sum'
}
timeframe_minutes = timeframe_to_minutes(timeframe)
resample_interval = f'{timeframe_minutes}min'
if timeframe_minutes >= 43200 and timeframe_minutes < 525600:
# Monthly candles need special treatment to stick to the 1st of the month
resample_interval = f'{timeframe}S'
elif timeframe_minutes > 43200:
resample_interval = timeframe
resample_interval = timeframe_to_resample_freq(timeframe)
# Resample to create "NAN" values
df = dataframe.resample(resample_interval, on='date').agg(ohlcv_dict)
@@ -116,8 +110,8 @@ def ohlcv_fill_up_missing_data(dataframe: DataFrame, timeframe: str, pair: str)
len_after = len(df)
pct_missing = (len_after - len_before) / len_before if len_before > 0 else 0
if len_before != len_after:
message = (f"Missing data fillup for {pair}: before: {len_before} - after: {len_after}"
f" - {pct_missing:.2%}")
message = (f"Missing data fillup for {pair}, {timeframe}: "
f"before: {len_before} - after: {len_after} - {pct_missing:.2%}")
if pct_missing > 0.01:
logger.info(message)
else:

View File

@@ -12,6 +12,7 @@ from freqtrade.configuration import TimeRange
from freqtrade.constants import (DEFAULT_DATAFRAME_COLUMNS, DEFAULT_TRADES_COLUMNS, TRADES_DTYPES,
Config, TradeList)
from freqtrade.enums import CandleType
from freqtrade.exceptions import OperationalException
logger = logging.getLogger(__name__)
@@ -69,14 +70,13 @@ def trades_to_ohlcv(trades: DataFrame, timeframe: str) -> DataFrame:
:return: OHLCV Dataframe.
:raises: ValueError if no trades are provided
"""
from freqtrade.exchange import timeframe_to_minutes
timeframe_minutes = timeframe_to_minutes(timeframe)
from freqtrade.exchange import timeframe_to_resample_freq
if trades.empty:
raise ValueError('Trade-list empty.')
df = trades.set_index('date', drop=True)
df_new = df['price'].resample(f'{timeframe_minutes}min').ohlc()
df_new['volume'] = df['amount'].resample(f'{timeframe_minutes}min').sum()
resample_interval = timeframe_to_resample_freq(timeframe)
df_new = df['price'].resample(resample_interval).ohlc()
df_new['volume'] = df['amount'].resample(resample_interval).sum()
df_new['date'] = df_new.index
# Drop 0 volume rows
df_new = df_new.dropna()
@@ -127,6 +127,16 @@ def convert_trades_format(config: Config, convert_from: str, convert_to: str, er
:param convert_to: Target format
:param erase: Erase source data (does not apply if source and target format are identical)
"""
if convert_from == 'kraken_csv':
if config['exchange']['name'] != 'kraken':
raise OperationalException(
'Converting from csv is only supported for kraken.'
'Please refer to the documentation for details about this special mode.'
)
from freqtrade.data.converter.trade_converter_kraken import import_kraken_trades_from_csv
import_kraken_trades_from_csv(config, convert_to)
return
from freqtrade.data.history.idatahandler import get_datahandler
src = get_datahandler(config['datadir'], convert_from)
trg = get_datahandler(config['datadir'], convert_to)

View File

@@ -0,0 +1,82 @@
import logging
from pathlib import Path
import pandas as pd
from freqtrade.constants import DATETIME_PRINT_FORMAT, DEFAULT_TRADES_COLUMNS, Config
from freqtrade.data.converter.trade_converter import (trades_convert_types,
trades_df_remove_duplicates)
from freqtrade.data.history.idatahandler import get_datahandler
from freqtrade.exceptions import OperationalException
from freqtrade.plugins.pairlist.pairlist_helpers import expand_pairlist
from freqtrade.resolvers import ExchangeResolver
logger = logging.getLogger(__name__)
KRAKEN_CSV_TRADE_COLUMNS = ['timestamp', 'price', 'amount']
def import_kraken_trades_from_csv(config: Config, convert_to: str):
"""
Import kraken trades from csv
"""
if config['exchange']['name'] != 'kraken':
raise OperationalException('This function is only for the kraken exchange.')
datadir: Path = config['datadir']
data_handler = get_datahandler(datadir, data_format=convert_to)
tradesdir: Path = config['datadir'] / 'trades_csv'
exchange = ExchangeResolver.load_exchange(config, validate=False)
# iterate through directories in this directory
data_symbols = {p.stem for p in tradesdir.rglob('*.csv')}
# create pair/filename mapping
markets = {
(m['symbol'], m['altname']) for m in exchange.markets.values()
if m.get('altname') in data_symbols
}
logger.info(f"Found csv files for {', '.join(data_symbols)}.")
if pairs_raw := config.get('pairs'):
pairs = expand_pairlist(pairs_raw, [m[0] for m in markets])
markets = {m for m in markets if m[0] in pairs}
if not markets:
logger.info(f"No data found for pairs {', '.join(pairs_raw)}.")
return
logger.info(f"Converting pairs: {', '.join(m[0] for m in markets)}.")
for pair, name in markets:
logger.debug(f"Converting pair {pair}, files */{name}.csv")
dfs = []
# Load and combine all csv files for this pair
for f in tradesdir.rglob(f"{name}.csv"):
df = pd.read_csv(f, names=KRAKEN_CSV_TRADE_COLUMNS)
if not df.empty:
dfs.append(df)
# Load existing trades data
if not dfs:
# edgecase, can only happen if the file was deleted between the above glob and here
logger.info(f"No data found for pair {pair}")
continue
trades = pd.concat(dfs, ignore_index=True)
del dfs
trades.loc[:, 'timestamp'] = trades['timestamp'] * 1e3
trades.loc[:, 'cost'] = trades['price'] * trades['amount']
for col in DEFAULT_TRADES_COLUMNS:
if col not in trades.columns:
trades.loc[:, col] = ''
trades = trades[DEFAULT_TRADES_COLUMNS]
trades = trades_convert_types(trades)
trades_df = trades_df_remove_duplicates(trades)
del trades
logger.info(f"{pair}: {len(trades_df)} trades, from "
f"{trades_df['date'].min():{DATETIME_PRINT_FORMAT}} to "
f"{trades_df['date'].max():{DATETIME_PRINT_FORMAT}}")
data_handler.trades_store(pair, trades_df)

View File

@@ -311,11 +311,13 @@ class DataProvider:
timerange = TimeRange.parse_timerange(None if self._config.get(
'timerange') is None else str(self._config.get('timerange')))
# It is not necessary to add the training candles, as they
# were already added at the beginning of the backtest.
startup_candles = self.get_required_startup(str(timeframe), False)
startup_candles = self.get_required_startup(str(timeframe))
tf_seconds = timeframe_to_seconds(str(timeframe))
timerange.subtract_start(tf_seconds * startup_candles)
logger.info(f"Loading data for {pair} {timeframe} "
f"from {timerange.start_fmt} to {timerange.stop_fmt}")
self.__cached_pairs_backtesting[saved_pair] = load_pair_history(
pair=pair,
timeframe=timeframe,
@@ -327,7 +329,7 @@ class DataProvider:
)
return self.__cached_pairs_backtesting[saved_pair].copy()
def get_required_startup(self, timeframe: str, add_train_candles: bool = True) -> int:
def get_required_startup(self, timeframe: str) -> int:
freqai_config = self._config.get('freqai', {})
if not freqai_config.get('enabled', False):
return self._config.get('startup_candle_count', 0)
@@ -337,12 +339,11 @@ class DataProvider:
# make sure the startupcandles is at least the set maximum indicator periods
self._config['startup_candle_count'] = max(startup_candles, max(indicator_periods))
tf_seconds = timeframe_to_seconds(timeframe)
train_candles = 0
if add_train_candles:
train_candles = freqai_config['train_period_days'] * 86400 / tf_seconds
train_candles = freqai_config['train_period_days'] * 86400 / tf_seconds
total_candles = int(self._config['startup_candle_count'] + train_candles)
logger.info(f'Increasing startup_candle_count for freqai to {total_candles}')
return total_candles
logger.info(
f'Increasing startup_candle_count for freqai on {timeframe} to {total_candles}')
return total_candles
def get_pair_dataframe(
self,

View File

@@ -211,8 +211,9 @@ def prepare_results(analysed_trades, stratname,
timerange=None):
res_df = pd.DataFrame()
for pair, trades in analysed_trades[stratname].items():
trades.dropna(subset=['close_date'], inplace=True)
res_df = pd.concat([res_df, trades], ignore_index=True)
if (trades.shape[0] > 0):
trades.dropna(subset=['close_date'], inplace=True)
res_df = pd.concat([res_df, trades], ignore_index=True)
res_df = _select_rows_within_dates(res_df, timerange)

View File

@@ -8,7 +8,7 @@ from pandas import DataFrame, concat
from freqtrade.configuration import TimeRange
from freqtrade.constants import (DATETIME_PRINT_FORMAT, DEFAULT_DATAFRAME_COLUMNS,
DL_DATA_TIMEFRAMES, Config)
DL_DATA_TIMEFRAMES, DOCS_LINK, Config)
from freqtrade.data.converter import (clean_ohlcv_dataframe, convert_trades_to_ohlcv,
ohlcv_to_dataframe, trades_df_remove_duplicates,
trades_list_to_df)
@@ -18,8 +18,8 @@ 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_ts, format_ms_time
from freqtrade.util.binance_mig import migrate_binance_futures_data
from freqtrade.util.datetime_helpers import dt_now
from freqtrade.util.migrations import migrate_data
logger = logging.getLogger(__name__)
@@ -311,15 +311,19 @@ def refresh_backtest_ohlcv_data(exchange: Exchange, pairs: List[str], timeframes
# Predefined candletype (and timeframe) depending on exchange
# Downloads what is necessary to backtest based on futures data.
tf_mark = exchange.get_option('mark_ohlcv_timeframe')
tf_funding_rate = exchange.get_option('funding_fee_timeframe')
fr_candle_type = CandleType.from_string(exchange.get_option('mark_ohlcv_price'))
# All exchanges need FundingRate for futures trading.
# The timeframe is aligned to the mark-price timeframe.
for funding_candle_type in (CandleType.FUNDING_RATE, fr_candle_type):
combs = ((CandleType.FUNDING_RATE, tf_funding_rate), (fr_candle_type, tf_mark))
for candle_type_f, tf in combs:
logger.debug(f'Downloading pair {pair}, {candle_type_f}, interval {tf}.')
_download_pair_history(pair=pair, process=process,
datadir=datadir, exchange=exchange,
timerange=timerange, data_handler=data_handler,
timeframe=str(tf_mark), new_pairs_days=new_pairs_days,
candle_type=funding_candle_type,
timeframe=str(tf), new_pairs_days=new_pairs_days,
candle_type=candle_type_f,
erase=erase, prepend=prepend)
return pairs_not_available
@@ -500,6 +504,12 @@ def download_data_main(config: Config) -> None:
logger.info(f"About to download pairs: {expanded_pairs}, "
f"intervals: {config['timeframes']} to {config['datadir']}")
if len(expanded_pairs) == 0:
logger.warning(
"No pairs available for download. "
"Please make sure you're using the correct Pair naming for your selected trade mode. \n"
f"More info: {DOCS_LINK}/bot-basics/#pair-naming")
for timeframe in config['timeframes']:
exchange.validate_timeframes(timeframe)
@@ -527,7 +537,7 @@ def download_data_main(config: Config) -> None:
"Please use `--dl-trades` instead for this exchange "
"(will unfortunately take a long time)."
)
migrate_binance_futures_data(config)
migrate_data(config, exchange)
pairs_not_available = refresh_backtest_ohlcv_data(
exchange, pairs=expanded_pairs, timeframes=config['timeframes'],
datadir=config['datadir'], timerange=timerange,

View File

@@ -94,21 +94,22 @@ class IDataHandler(ABC):
"""
def ohlcv_data_min_max(self, pair: str, timeframe: str,
candle_type: CandleType) -> Tuple[datetime, datetime]:
candle_type: CandleType) -> Tuple[datetime, datetime, int]:
"""
Returns the min and max timestamp for the given pair and timeframe.
:param pair: Pair to get min/max for
:param timeframe: Timeframe to get min/max for
:param candle_type: Any of the enum CandleType (must match trading mode!)
:return: (min, max)
:return: (min, max, len)
"""
data = self._ohlcv_load(pair, timeframe, None, candle_type)
if data.empty:
df = self._ohlcv_load(pair, timeframe, None, candle_type)
if df.empty:
return (
datetime.fromtimestamp(0, tz=timezone.utc),
datetime.fromtimestamp(0, tz=timezone.utc)
datetime.fromtimestamp(0, tz=timezone.utc),
0,
)
return data.iloc[0]['date'].to_pydatetime(), data.iloc[-1]['date'].to_pydatetime()
return df.iloc[0]['date'].to_pydatetime(), df.iloc[-1]['date'].to_pydatetime(), len(df)
@abstractmethod
def _ohlcv_load(self, pair: str, timeframe: str, timerange: Optional[TimeRange],
@@ -403,6 +404,34 @@ class IDataHandler(ABC):
return
file_old.rename(file_new)
def fix_funding_fee_timeframe(self, ff_timeframe: str):
"""
Temporary method to migrate data from old funding fee timeframe to the correct timeframe
Applies to bybit and okx, where funding-fee and mark candles have different timeframes.
"""
paircombs = self.ohlcv_get_available_data(self._datadir, TradingMode.FUTURES)
funding_rate_combs = [
f for f in paircombs if f[2] == CandleType.FUNDING_RATE and f[1] != ff_timeframe
]
if funding_rate_combs:
logger.warning(
f'Migrating {len(funding_rate_combs)} funding fees to correct timeframe.')
for pair, timeframe, candletype in funding_rate_combs:
old_name = self._pair_data_filename(self._datadir, pair, timeframe, candletype)
new_name = self._pair_data_filename(self._datadir, pair, ff_timeframe, candletype)
if not Path(old_name).exists():
logger.warning(f'{old_name} does not exist, skipping.')
continue
if Path(new_name).exists():
logger.warning(f'{new_name} already exists, Removing.')
Path(new_name).unlink()
Path(old_name).rename(new_name)
def get_datahandlerclass(datatype: str) -> Type[IDataHandler]:
"""

View File

@@ -61,10 +61,10 @@ def create_cum_profit(df: pd.DataFrame, trades: pd.DataFrame, col_name: str,
"""
if len(trades) == 0:
raise ValueError("Trade dataframe empty.")
from freqtrade.exchange import timeframe_to_minutes
timeframe_minutes = timeframe_to_minutes(timeframe)
from freqtrade.exchange import timeframe_to_resample_freq
timeframe_freq = timeframe_to_resample_freq(timeframe)
# Resample to timeframe to make sure trades match candles
_trades_sum = trades.resample(f'{timeframe_minutes}min', on='close_date'
_trades_sum = trades.resample(timeframe_freq, on='close_date'
)[['profit_abs']].sum()
df.loc[:, col_name] = _trades_sum['profit_abs'].cumsum()
# Set first value to 0
@@ -143,8 +143,10 @@ def calculate_max_drawdown(trades: pd.DataFrame, *, date_col: str = 'close_date'
starting_balance=starting_balance
)
idxmin = max_drawdown_df['drawdown_relative'].idxmax() if relative \
else max_drawdown_df['drawdown'].idxmin()
idxmin = (
max_drawdown_df['drawdown_relative'].idxmax()
if relative else max_drawdown_df['drawdown'].idxmin()
)
if idxmin == 0:
raise ValueError("No losing trade, therefore no drawdown.")
high_date = profit_results.loc[max_drawdown_df.iloc[:idxmin]['high_value'].idxmax(), date_col]
@@ -191,6 +193,9 @@ def calculate_cagr(days_passed: int, starting_balance: float, final_balance: flo
:param final_balance: Final balance to calculate CAGR against
:return: CAGR
"""
if final_balance < 0:
# With leveraged trades, final_balance can become negative.
return 0
return (final_balance / starting_balance) ** (1 / (days_passed / 365)) - 1

View File

@@ -4,8 +4,8 @@ from freqtrade.exchange.common import remove_exchange_credentials, MAP_EXCHANGE_
from freqtrade.exchange.exchange import Exchange
# isort: on
from freqtrade.exchange.binance import Binance
from freqtrade.exchange.bitmart import Bitmart
from freqtrade.exchange.bitpanda import Bitpanda
from freqtrade.exchange.bittrex import Bittrex
from freqtrade.exchange.bitvavo import Bitvavo
from freqtrade.exchange.bybit import Bybit
from freqtrade.exchange.coinbasepro import Coinbasepro
@@ -17,10 +17,11 @@ from freqtrade.exchange.exchange_utils import (ROUND_DOWN, ROUND_UP, amount_to_c
market_is_active, price_to_precision,
timeframe_to_minutes, timeframe_to_msecs,
timeframe_to_next_date, timeframe_to_prev_date,
timeframe_to_seconds, validate_exchange)
timeframe_to_resample_freq, timeframe_to_seconds,
validate_exchange)
from freqtrade.exchange.gate import Gate
from freqtrade.exchange.hitbtc import Hitbtc
from freqtrade.exchange.huobi import Huobi
from freqtrade.exchange.htx import Htx
from freqtrade.exchange.kraken import Kraken
from freqtrade.exchange.kucoin import Kucoin
from freqtrade.exchange.okx import Okx

View File

@@ -123,10 +123,14 @@ class Binance(Exchange):
def funding_fee_cutoff(self, open_date: datetime):
"""
Funding fees are only charged at full hours (usually every 4-8h).
Therefore a trade opening at 10:00:01 will not be charged a funding fee until the next hour.
On binance, this cutoff is 15s.
https://github.com/freqtrade/freqtrade/pull/5779#discussion_r740175931
:param open_date: The open date for a trade
:return: The cutoff open time for when a funding fee is charged
:return: True if the date falls on a full hour, False otherwise
"""
return open_date.minute > 0 or (open_date.minute == 0 and open_date.second > 15)
return open_date.minute == 0 and open_date.second < 15
def dry_run_liquidation_price(
self,

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,20 @@
""" Bitmart exchange subclass """
import logging
from typing import Dict
from freqtrade.exchange import Exchange
logger = logging.getLogger(__name__)
class Bitmart(Exchange):
"""
Bitmart exchange class. Contains adjustments needed for Freqtrade to work
with this exchange.
"""
_ft_has: Dict = {
"stoploss_on_exchange": False, # Bitmart API does not support stoploss orders
"ohlcv_candle_limit": 200,
}

View File

@@ -1,25 +0,0 @@
""" Bittrex exchange subclass """
import logging
from typing import Dict
from freqtrade.exchange import Exchange
logger = logging.getLogger(__name__)
class Bittrex(Exchange):
"""
Bittrex exchange class. Contains adjustments needed for Freqtrade to work
with this exchange.
"""
_ft_has: Dict = {
"ohlcv_candle_limit_per_timeframe": {
'1m': 1440,
'5m': 288,
'1h': 744,
'1d': 365,
},
"l2_limit_range": [1, 25, 500],
}

View File

@@ -7,7 +7,7 @@ import ccxt
from freqtrade.constants import BuySell
from freqtrade.enums import CandleType, MarginMode, PriceType, TradingMode
from freqtrade.exceptions import DDosProtection, OperationalException, TemporaryError
from freqtrade.exceptions import DDosProtection, ExchangeError, OperationalException, TemporaryError
from freqtrade.exchange import Exchange
from freqtrade.exchange.common import retrier
from freqtrade.util.datetime_helpers import dt_now, dt_ts
@@ -25,10 +25,12 @@ class Bybit(Exchange):
officially supported by the Freqtrade development team. So some features
may still not work as expected.
"""
unified_account = False
_ft_has: Dict = {
"ohlcv_candle_limit": 1000,
"ohlcv_has_history": True,
"order_time_in_force": ["GTC", "FOK", "IOC", "PO"],
}
_ft_has_futures: Dict = {
"ohlcv_has_history": True,
@@ -81,9 +83,20 @@ class Bybit(Exchange):
Must be overridden in child methods if required.
"""
try:
if self.trading_mode == TradingMode.FUTURES and not self._config['dry_run']:
position_mode = self._api.set_position_mode(False)
self._log_exchange_response('set_position_mode', position_mode)
if not self._config['dry_run']:
if self.trading_mode == TradingMode.FUTURES:
position_mode = self._api.set_position_mode(False)
self._log_exchange_response('set_position_mode', position_mode)
is_unified = self._api.is_unified_enabled()
# Returns a tuple of bools, first for margin, second for Account
if is_unified and len(is_unified) > 1 and is_unified[1]:
self.unified_account = True
logger.info("Bybit: Unified account.")
raise OperationalException("Bybit: Unified account is not supported. "
"Please use a standard (sub)account.")
else:
self.unified_account = False
logger.info("Bybit: Standard account.")
except ccxt.DDoSProtection as e:
raise DDosProtection(e) from e
except (ccxt.NetworkError, ccxt.ExchangeError) as e:
@@ -202,8 +215,11 @@ class Bybit(Exchange):
"""
# Bybit does not provide "applied" funding fees per position.
if self.trading_mode == TradingMode.FUTURES:
return self._fetch_and_calculate_funding_fees(
pair, amount, is_short, open_date)
try:
return self._fetch_and_calculate_funding_fees(
pair, amount, is_short, open_date)
except ExchangeError:
logger.warning(f"Could not update funding fees for {pair}.")
return 0.0
def fetch_orders(self, pair: str, since: datetime, params: Optional[Dict] = None) -> List[Dict]:

View File

@@ -2,7 +2,7 @@ import asyncio
import logging
import time
from functools import wraps
from typing import Any, Callable, Optional, TypeVar, cast, overload
from typing import Any, Callable, Dict, List, Optional, TypeVar, cast, overload
from freqtrade.constants import ExchangeConfig
from freqtrade.exceptions import DDosProtection, RetryableOrderError, TemporaryError
@@ -48,27 +48,29 @@ MAP_EXCHANGE_CHILDCLASS = {
'binanceusdm': 'binance',
'okex': 'okx',
'gateio': 'gate',
'huboi': 'htx',
}
SUPPORTED_EXCHANGES = [
'binance',
'bittrex',
'bitmart',
'gate',
'huobi',
'htx',
'kraken',
'okx',
]
EXCHANGE_HAS_REQUIRED = [
# either the main, or replacement methods (array) is required
EXCHANGE_HAS_REQUIRED: Dict[str, List[str]] = {
# Required / private
'fetchOrder',
'cancelOrder',
'createOrder',
'fetchBalance',
'fetchOrder': ['fetchOpenOrder', 'fetchClosedOrder'],
'cancelOrder': [],
'createOrder': [],
'fetchBalance': [],
# Public endpoints
'fetchOHLCV',
]
'fetchOHLCV': [],
}
EXCHANGE_HAS_OPTIONAL = [
# Private
@@ -85,6 +87,7 @@ EXCHANGE_HAS_OPTIONAL = [
# 'fetchPositions', # Futures trading
# 'fetchLeverageTiers', # Futures initialization
# 'fetchMarketLeverageTiers', # Futures initialization
# 'fetchOpenOrder', 'fetchClosedOrder', # replacement for fetchOrder
# 'fetchOpenOrders', 'fetchClosedOrders', # 'fetchOrders', # Refinding balance...
]

View File

@@ -23,7 +23,7 @@ from freqtrade.constants import (DEFAULT_AMOUNT_RESERVE_PERCENT, NON_OPEN_EXCHAN
BuySell, Config, EntryExit, ExchangeConfig,
ListPairsWithTimeframes, MakerTaker, OBLiteral, PairWithTimeframe)
from freqtrade.data.converter import clean_ohlcv_dataframe, ohlcv_to_dataframe, trades_dict_to_list
from freqtrade.enums import OPTIMIZE_MODES, CandleType, MarginMode, PriceType, TradingMode
from freqtrade.enums import OPTIMIZE_MODES, CandleType, MarginMode, PriceType, RunMode, TradingMode
from freqtrade.exceptions import (DDosProtection, ExchangeError, InsufficientFundsError,
InvalidOrderException, OperationalException, PricingError,
RetryableOrderError, TemporaryError)
@@ -43,6 +43,7 @@ from freqtrade.misc import (chunks, deep_merge_dicts, file_dump_json, file_load_
from freqtrade.plugins.pairlist.pairlist_helpers import expand_pairlist
from freqtrade.util import dt_from_ts, dt_now
from freqtrade.util.datetime_helpers import dt_humanize, dt_ts
from freqtrade.util.periodic_cache import PeriodicCache
logger = logging.getLogger(__name__)
@@ -80,6 +81,7 @@ class Exchange:
"l2_limit_range_required": True, # Allow Empty L2 limit (kucoin)
"mark_ohlcv_price": "mark",
"mark_ohlcv_timeframe": "8h",
"funding_fee_timeframe": "8h",
"ccxt_futures_name": "swap",
"needs_trading_fees": False, # use fetch_trading_fees to cache fees
"order_props_in_contracts": ['amount', 'filled', 'remaining'],
@@ -121,14 +123,16 @@ class Exchange:
# Cache for 10 minutes ...
self._cache_lock = Lock()
self._fetch_tickers_cache: TTLCache = TTLCache(maxsize=2, ttl=60 * 10)
# Cache values for 1800 to avoid frequent polling of the exchange for prices
# Cache values for 300 to avoid frequent polling of the exchange for prices
# Caching only applies to RPC methods, so prices for open trades are still
# refreshed once every iteration.
self._exit_rate_cache: TTLCache = TTLCache(maxsize=100, ttl=1800)
self._entry_rate_cache: TTLCache = TTLCache(maxsize=100, ttl=1800)
# Shouldn't be too high either, as it'll freeze UI updates in case of open orders.
self._exit_rate_cache: TTLCache = TTLCache(maxsize=100, ttl=300)
self._entry_rate_cache: TTLCache = TTLCache(maxsize=100, ttl=300)
# Holds candles
self._klines: Dict[PairWithTimeframe, DataFrame] = {}
self._expiring_candle_cache: Dict[Tuple[str, int], PeriodicCache] = {}
# Holds all open sell orders for dry_run
self._dry_run_open_orders: Dict[str, Any] = {}
@@ -319,10 +323,11 @@ class Exchange:
"""
pass
def _log_exchange_response(self, endpoint, response) -> None:
def _log_exchange_response(self, endpoint: str, response, *, add_info=None) -> None:
""" Log exchange responses """
if self.log_responses:
logger.info(f"API {endpoint}: {response}")
add_info_str = "" if add_info is None else f" {add_info}: "
logger.info(f"API {endpoint}: {add_info_str}{response}")
def ohlcv_candle_limit(
self, timeframe: str, candle_type: CandleType, since_ms: Optional[int] = None) -> int:
@@ -330,6 +335,7 @@ class Exchange:
Exchange ohlcv candle limit
Uses ohlcv_candle_limit_per_timeframe if the exchange has different limits
per timeframe (e.g. bittrex), otherwise falls back to ohlcv_candle_limit
TODO: this is most likely no longer needed since only bittrex needed this.
:param timeframe: Timeframe to check
:param candle_type: Candle-type
:param since_ms: Starting timestamp
@@ -486,11 +492,14 @@ class Exchange:
except ccxt.BaseError:
logger.exception('Unable to initialize markets.')
def reload_markets(self) -> None:
def reload_markets(self, force: bool = False) -> None:
"""Reload markets both sync and async if refresh interval has passed """
# Check whether markets have to be reloaded
if (self._last_markets_refresh > 0) and (
self._last_markets_refresh + self.markets_refresh_interval > dt_ts()):
if (
not force
and self._last_markets_refresh > 0
and (self._last_markets_refresh + self.markets_refresh_interval > dt_ts())
):
return None
logger.debug("Performing scheduled market reload..")
try:
@@ -588,7 +597,11 @@ class Exchange:
raise OperationalException(
f"Invalid timeframe '{timeframe}'. This exchange supports: {self.timeframes}")
if timeframe and timeframe_to_minutes(timeframe) < 1:
if (
timeframe
and self._config['runmode'] != RunMode.UTIL_EXCHANGE
and timeframe_to_minutes(timeframe) < 1
):
raise OperationalException("Timeframes < 1m are currently not supported by Freqtrade.")
def validate_ordertypes(self, order_types: Dict) -> None:
@@ -1228,16 +1241,16 @@ class Exchange:
return order
except ccxt.InsufficientFunds as e:
raise InsufficientFundsError(
f'Insufficient funds to create {ordertype} sell order on market {pair}. '
f'Tried to sell amount {amount} at rate {limit_rate}. '
f'Message: {e}') from e
except ccxt.InvalidOrder as e:
f'Insufficient funds to create {ordertype} {side} order on market {pair}. '
f'Tried to {side} amount {amount} at rate {limit_rate} with '
f'stop-price {stop_price_norm}. Message: {e}') from e
except (ccxt.InvalidOrder, ccxt.BadRequest, ccxt.OperationRejected) as e:
# Errors:
# `Order would trigger immediately.`
raise InvalidOrderException(
f'Could not create {ordertype} sell order on market {pair}. '
f'Tried to sell amount {amount} at rate {limit_rate}. '
f'Message: {e}') from e
f'Could not create {ordertype} {side} order on market {pair}. '
f'Tried to {side} amount {amount} at rate {limit_rate} with '
f'stop-price {stop_price_norm}. Message: {e}') from e
except ccxt.DDoSProtection as e:
raise DDosProtection(e) from e
except (ccxt.NetworkError, ccxt.ExchangeError) as e:
@@ -1247,11 +1260,43 @@ class Exchange:
except ccxt.BaseError as e:
raise OperationalException(e) from e
def fetch_order_emulated(self, order_id: str, pair: str, params: Dict) -> Dict:
"""
Emulated fetch_order if the exchange doesn't support fetch_order, but requires separate
calls for open and closed orders.
"""
try:
order = self._api.fetch_open_order(order_id, pair, params=params)
self._log_exchange_response('fetch_open_order', order)
order = self._order_contracts_to_amount(order)
return order
except ccxt.OrderNotFound:
try:
order = self._api.fetch_closed_order(order_id, pair, params=params)
self._log_exchange_response('fetch_closed_order', order)
order = self._order_contracts_to_amount(order)
return order
except ccxt.OrderNotFound as e:
raise RetryableOrderError(
f'Order not found (pair: {pair} id: {order_id}). Message: {e}') from e
except ccxt.InvalidOrder as e:
raise InvalidOrderException(
f'Tried to get an invalid order (pair: {pair} id: {order_id}). Message: {e}') from e
except ccxt.DDoSProtection as e:
raise DDosProtection(e) from e
except (ccxt.NetworkError, ccxt.ExchangeError) as e:
raise TemporaryError(
f'Could not get order due to {e.__class__.__name__}. Message: {e}') from e
except ccxt.BaseError as e:
raise OperationalException(e) from e
@retrier(retries=API_FETCH_ORDER_RETRY_COUNT)
def fetch_order(self, order_id: str, pair: str, params: Dict = {}) -> Dict:
if self._config['dry_run']:
return self.fetch_dry_run_order(order_id)
try:
if not self.exchange_has('fetchOrder'):
return self.fetch_order_emulated(order_id, pair, params)
order = self._api.fetch_order(order_id, pair, params=params)
self._log_exchange_response('fetch_order', order)
order = self._order_contracts_to_amount(order)
@@ -1380,7 +1425,7 @@ class Exchange:
order = self.fetch_stoploss_order(order_id, pair)
except InvalidOrderException:
logger.warning(f"Could not fetch cancelled stoploss order {order_id}.")
order = {'fee': {}, 'status': 'canceled', 'amount': amount, 'info': {}}
order = {'id': order_id, 'fee': {}, 'status': 'canceled', 'amount': amount, 'info': {}}
return order
@@ -1496,8 +1541,9 @@ class Exchange:
@retrier
def fetch_bids_asks(self, symbols: Optional[List[str]] = None, cached: bool = False) -> Dict:
"""
:param symbols: List of symbols to fetch
:param cached: Allow cached result
:return: fetch_tickers result
:return: fetch_bids_asks result
"""
if not self.exchange_has('fetchBidsAsks'):
return {}
@@ -1546,6 +1592,12 @@ class Exchange:
raise OperationalException(
f'Exchange {self._api.name} does not support fetching tickers in batch. '
f'Message: {e}') from e
except ccxt.BadSymbol as e:
logger.warning(f"Could not load tickers due to {e.__class__.__name__}. Message: {e} ."
"Reloading markets.")
self.reload_markets(True)
# Re-raise exception to repeat the call.
raise TemporaryError from e
except ccxt.DDoSProtection as e:
raise DDosProtection(e) from e
except (ccxt.NetworkError, ccxt.ExchangeError) as e:
@@ -1954,7 +2006,7 @@ class Exchange:
results = await asyncio.gather(*input_coro, return_exceptions=True)
for res in results:
if isinstance(res, Exception):
if isinstance(res, BaseException):
logger.warning(f"Async code raised an exception: {repr(res)}")
if raise_:
raise
@@ -2106,6 +2158,39 @@ class Exchange:
return results_df
def refresh_ohlcv_with_cache(
self,
pairs: List[PairWithTimeframe],
since_ms: int
) -> Dict[PairWithTimeframe, DataFrame]:
"""
Refresh ohlcv data for all pairs in needed_pairs if necessary.
Caches data with expiring per timeframe.
Should only be used for pairlists which need "on time" expirarion, and no longer cache.
"""
timeframes = {p[1] for p in pairs}
for timeframe in timeframes:
if (timeframe, since_ms) not in self._expiring_candle_cache:
timeframe_in_sec = timeframe_to_seconds(timeframe)
# Initialise cache
self._expiring_candle_cache[(timeframe, since_ms)] = PeriodicCache(
ttl=timeframe_in_sec, maxsize=1000)
# Get candles from cache
candles = {
c: self._expiring_candle_cache[(c[1], since_ms)].get(c, None) for c in pairs
if c in self._expiring_candle_cache[(c[1], since_ms)]
}
pairs_to_download = [p for p in pairs if p not in candles]
if pairs_to_download:
candles = self.refresh_latest_ohlcv(
pairs_to_download, since_ms=since_ms, cache=False
)
for c, val in candles.items():
self._expiring_candle_cache[(c[1], since_ms)][c] = val
return candles
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)
@@ -2202,13 +2287,13 @@ class Exchange:
@retrier_async
async def _async_fetch_trades(self, pair: str,
since: Optional[int] = None,
params: Optional[dict] = None) -> List[List]:
params: Optional[dict] = None) -> Tuple[List[List], Any]:
"""
Asyncronously gets trade history using fetch_trades.
Handles exchange errors, does one call to the exchange.
:param pair: Pair to fetch trade data for
:param since: Since as integer timestamp in milliseconds
returns: List of dicts containing trades
returns: List of dicts containing trades, the next iteration value (new "since" or trade_id)
"""
try:
# fetch trades asynchronously
@@ -2223,7 +2308,8 @@ class Exchange:
)
trades = await self._api_async.fetch_trades(pair, since=since, limit=1000)
trades = self._trades_contracts_to_amount(trades)
return trades_dict_to_list(trades)
pagination_value = self._get_trade_pagination_next_value(trades)
return trades_dict_to_list(trades), pagination_value
except ccxt.NotSupported as e:
raise OperationalException(
f'Exchange {self._api.name} does not support fetching historical trade data.'
@@ -2236,6 +2322,25 @@ class Exchange:
except ccxt.BaseError as e:
raise OperationalException(f'Could not fetch trade data. Msg: {e}') from e
def _valid_trade_pagination_id(self, pair: str, from_id: str) -> bool:
"""
Verify trade-pagination id is valid.
Workaround for odd Kraken issue where ID is sometimes wrong.
"""
return True
def _get_trade_pagination_next_value(self, trades: List[Dict]):
"""
Extract pagination id for the next "from_id" value
Applies only to fetch_trade_history by id.
"""
if not trades:
return None
if self._trades_pagination == 'id':
return trades[-1].get('id')
else:
return trades[-1].get('timestamp')
async def _async_get_trade_history_id(self, pair: str,
until: int,
since: Optional[int] = None,
@@ -2251,34 +2356,37 @@ class Exchange:
"""
trades: List[List] = []
# DEFAULT_TRADES_COLUMNS: 0 -> timestamp
# DEFAULT_TRADES_COLUMNS: 1 -> id
has_overlap = self._ft_has.get('trades_pagination_overlap', True)
# Skip last trade by default since its the key for the next call
x = slice(None, -1) if has_overlap else slice(None)
if not from_id:
if not from_id or not self._valid_trade_pagination_id(pair, from_id):
# Fetch first elements using timebased method to get an ID to paginate on
# Depending on the Exchange, this can introduce a drift at the start of the interval
# of up to an hour.
# e.g. Binance returns the "last 1000" candles within a 1h time interval
# - so we will miss the first trades.
t = await self._async_fetch_trades(pair, since=since)
# DEFAULT_TRADES_COLUMNS: 0 -> timestamp
# DEFAULT_TRADES_COLUMNS: 1 -> id
from_id = t[-1][1]
trades.extend(t[:-1])
t, from_id = await self._async_fetch_trades(pair, since=since)
trades.extend(t[x])
while True:
try:
t = await self._async_fetch_trades(pair,
params={self._trades_pagination_arg: from_id})
t, from_id_next = await self._async_fetch_trades(
pair, params={self._trades_pagination_arg: from_id})
if t:
# Skip last id since its the key for the next call
trades.extend(t[:-1])
if from_id == t[-1][1] or t[-1][0] > until:
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}")
# Reached the end of the defined-download period - add last trade as well.
trades.extend(t[-1:])
if has_overlap:
trades.extend(t[-1:])
break
from_id = t[-1][1]
from_id = from_id_next
else:
logger.debug("Stopping as no more trades were returned.")
break
except asyncio.CancelledError:
logger.debug("Async operation Interrupted, breaking trades DL loop.")
@@ -2302,16 +2410,22 @@ class Exchange:
# DEFAULT_TRADES_COLUMNS: 1 -> id
while True:
try:
t = await self._async_fetch_trades(pair, since=since)
t, since_next = await self._async_fetch_trades(pair, since=since)
if t:
since = t[-1][0]
# No more trades to download available at the exchange,
# So we repeatedly get the same trade over and over again.
if since == since_next and len(t) == 1:
logger.debug("Stopping because no more trades are available.")
break
since = since_next
trades.extend(t)
# Reached the end of the defined-download period
if until and t[-1][0] > until:
if until and since_next > until:
logger.debug(
f"Stopping because until was reached. {t[-1][0]} > {until}")
f"Stopping because until was reached. {since_next} > {until}")
break
else:
logger.debug("Stopping as no more trades were returned.")
break
except asyncio.CancelledError:
logger.debug("Async operation Interrupted, breaking trades DL loop.")
@@ -2396,6 +2510,8 @@ class Exchange:
symbol=pair,
since=since
)
self._log_exchange_response('funding_history', funding_history,
add_info=f"pair: {pair}, since: {since}")
return sum(fee['amount'] for fee in funding_history)
except ccxt.DDoSProtection as e:
raise DDosProtection(e) from e
@@ -2636,7 +2752,7 @@ class Exchange:
self._log_exchange_response('set_leverage', res)
except ccxt.DDoSProtection as e:
raise DDosProtection(e) from e
except (ccxt.BadRequest, ccxt.InsufficientFunds) as e:
except (ccxt.BadRequest, ccxt.OperationRejected, ccxt.InsufficientFunds) as e:
if not accept_fail:
raise TemporaryError(
f'Could not set leverage due to {e.__class__.__name__}. Message: {e}') from e
@@ -2653,12 +2769,14 @@ class Exchange:
"""
return 0.0
def funding_fee_cutoff(self, open_date: datetime):
def funding_fee_cutoff(self, open_date: datetime) -> bool:
"""
Funding fees are only charged at full hours (usually every 4-8h).
Therefore a trade opening at 10:00:01 will not be charged a funding fee until the next hour.
:param open_date: The open date for a trade
:return: The cutoff open time for when a funding fee is charged
:return: True if the date falls on a full hour, False otherwise
"""
return open_date.minute > 0 or open_date.second > 0
return open_date.minute == 0 and open_date.second == 0
@retrier
def set_margin_mode(self, pair: str, margin_mode: MarginMode, accept_fail: bool = False,
@@ -2676,7 +2794,7 @@ class Exchange:
self._log_exchange_response('set_margin_mode', res)
except ccxt.DDoSProtection as e:
raise DDosProtection(e) from e
except ccxt.BadRequest as e:
except (ccxt.BadRequest, ccxt.OperationRejected) as e:
if not accept_fail:
raise TemporaryError(
f'Could not set margin mode due to {e.__class__.__name__}. Message: {e}') from e
@@ -2706,23 +2824,23 @@ class Exchange:
"""
if self.funding_fee_cutoff(open_date):
open_date += timedelta(hours=1)
# Shift back to 1h candle to avoid missing funding fees
# Only really relevant for trades very close to the full hour
open_date = timeframe_to_prev_date('1h', open_date)
timeframe = self._ft_has['mark_ohlcv_timeframe']
timeframe_ff = self._ft_has.get('funding_fee_timeframe',
self._ft_has['mark_ohlcv_timeframe'])
timeframe_ff = self._ft_has['funding_fee_timeframe']
mark_price_type = CandleType.from_string(self._ft_has["mark_ohlcv_price"])
if not close_date:
close_date = datetime.now(timezone.utc)
open_timestamp = int(timeframe_to_prev_date(timeframe, open_date).timestamp()) * 1000
# close_timestamp = int(close_date.timestamp()) * 1000
mark_comb: PairWithTimeframe = (
pair, timeframe, CandleType.from_string(self._ft_has["mark_ohlcv_price"]))
since_ms = int(timeframe_to_prev_date(timeframe, open_date).timestamp()) * 1000
mark_comb: PairWithTimeframe = (pair, timeframe, mark_price_type)
funding_comb: PairWithTimeframe = (pair, timeframe_ff, CandleType.FUNDING_RATE)
candle_histories = self.refresh_latest_ohlcv(
[mark_comb, funding_comb],
since_ms=open_timestamp,
since_ms=since_ms,
cache=False,
drop_incomplete=False,
)
@@ -2733,8 +2851,7 @@ class Exchange:
except KeyError:
raise ExchangeError("Could not find funding rates.") from None
funding_mark_rates = self.combine_funding_and_mark(
funding_rates=funding_rates, mark_rates=mark_rates)
funding_mark_rates = self.combine_funding_and_mark(funding_rates, mark_rates)
return self.calculate_funding_fees(
funding_mark_rates,
@@ -2781,7 +2898,7 @@ class Exchange:
amount: float,
is_short: bool,
open_date: datetime,
close_date: Optional[datetime] = None,
close_date: datetime,
time_in_ratio: Optional[float] = None
) -> float:
"""
@@ -2797,8 +2914,8 @@ class Exchange:
fees: float = 0
if not df.empty:
df = df[(df['date'] >= open_date) & (df['date'] <= close_date)]
fees = sum(df['open_fund'] * df['open_mark'] * amount)
df1 = df[(df['date'] >= open_date) & (df['date'] <= close_date)]
fees = sum(df1['open_fund'] * df1['open_mark'] * amount)
# Negate fees for longs as funding_fees expects it this way based on live endpoints.
return fees if is_short else -fees
@@ -2813,17 +2930,19 @@ class Exchange:
:param amount: Trade amount
:param open_date: Open date of the trade
:return: funding fee since open_date
:raises: ExchangeError if something goes wrong.
"""
if self.trading_mode == TradingMode.FUTURES:
if self._config['dry_run']:
funding_fees = self._fetch_and_calculate_funding_fees(
pair, amount, is_short, open_date)
else:
funding_fees = self._get_funding_fees_from_exchange(pair, open_date)
return funding_fees
else:
return 0.0
try:
if self._config['dry_run']:
funding_fees = self._fetch_and_calculate_funding_fees(
pair, amount, is_short, open_date)
else:
funding_fees = self._get_funding_fees_from_exchange(pair, open_date)
return funding_fees
except ExchangeError:
logger.warning(f"Could not update funding fees for {pair}.")
return 0.0
def get_liquidation_price(
self,

View File

@@ -40,21 +40,34 @@ def available_exchanges(ccxt_module: Optional[CcxtModuleType] = None) -> List[st
def validate_exchange(exchange: str) -> Tuple[bool, str]:
"""
returns: can_use, reason
with Reason including both missing and missing_opt
"""
ex_mod = getattr(ccxt, exchange.lower())()
result = True
reason = ''
if not ex_mod or not ex_mod.has:
return False, ''
missing = [k for k in EXCHANGE_HAS_REQUIRED if ex_mod.has.get(k) is not True]
missing = [
k for k, v in EXCHANGE_HAS_REQUIRED.items()
if ex_mod.has.get(k) is not True
and not (all(ex_mod.has.get(x) for x in v))
]
if missing:
return False, f"missing: {', '.join(missing)}"
result = False
reason += f"missing: {', '.join(missing)}"
missing_opt = [k for k in EXCHANGE_HAS_OPTIONAL if not ex_mod.has.get(k)]
if exchange.lower() in BAD_EXCHANGES:
return False, BAD_EXCHANGES.get(exchange.lower(), '')
if missing_opt:
return True, f"missing opt: {', '.join(missing_opt)}"
result = False
reason = BAD_EXCHANGES.get(exchange.lower(), '')
return True, ''
if missing_opt:
reason += f"{'. ' if reason else ''}missing opt: {', '.join(missing_opt)}. "
return result, reason
def _build_exchange_list_entry(
@@ -118,6 +131,27 @@ def timeframe_to_msecs(timeframe: str) -> int:
return ccxt.Exchange.parse_timeframe(timeframe) * 1000
def timeframe_to_resample_freq(timeframe: str) -> str:
"""
Translates the timeframe interval value written in the human readable
form ('1m', '5m', '1h', '1d', '1w', etc.) to the resample frequency
used by pandas ('1T', '5T', '1H', '1D', '1W', etc.)
"""
if timeframe == '1y':
return '1YS'
timeframe_seconds = timeframe_to_seconds(timeframe)
timeframe_minutes = timeframe_seconds // 60
resample_interval = f'{timeframe_seconds}s'
if 10000 < timeframe_minutes < 43200:
resample_interval = '1W-MON'
elif timeframe_minutes >= 43200 and timeframe_minutes < 525600:
# Monthly candles need special treatment to stick to the 1st of the month
resample_interval = f'{timeframe}S'
elif timeframe_minutes > 43200:
resample_interval = timeframe
return resample_interval
def timeframe_to_prev_date(timeframe: str, date: Optional[datetime] = None) -> datetime:
"""
Use Timeframe and determine the candle start date for this date.

View File

@@ -1,4 +1,4 @@
""" Huobi exchange subclass """
""" HTX exchange subclass """
import logging
from typing import Dict
@@ -9,9 +9,9 @@ from freqtrade.exchange import Exchange
logger = logging.getLogger(__name__)
class Huobi(Exchange):
class Htx(Exchange):
"""
Huobi exchange class. Contains adjustments needed for Freqtrade to work
HTX exchange class. Contains adjustments needed for Freqtrade to work
with this exchange.
"""

View File

@@ -8,11 +8,9 @@ from pandas import DataFrame
from freqtrade.constants import BuySell
from freqtrade.enums import MarginMode, TradingMode
from freqtrade.exceptions import (DDosProtection, InsufficientFundsError, InvalidOrderException,
OperationalException, TemporaryError)
from freqtrade.exceptions import DDosProtection, OperationalException, TemporaryError
from freqtrade.exchange import Exchange
from freqtrade.exchange.common import retrier
from freqtrade.exchange.exchange_utils import ROUND_DOWN, ROUND_UP
from freqtrade.exchange.types import Tickers
@@ -24,12 +22,15 @@ class Kraken(Exchange):
_params: Dict = {"trading_agreement": "agree"}
_ft_has: Dict = {
"stoploss_on_exchange": True,
"stop_price_param": "stopPrice",
"stop_price_prop": "stopPrice",
"stop_price_param": "stopLossPrice",
"stop_price_prop": "stopLossPrice",
"stoploss_order_types": {"limit": "limit", "market": "market"},
"order_time_in_force": ["GTC", "IOC", "PO"],
"ohlcv_candle_limit": 720,
"ohlcv_has_history": False,
"trades_pagination": "id",
"trades_pagination_arg": "since",
"trades_pagination_overlap": False,
"mark_ohlcv_timeframe": "4h",
}
@@ -89,75 +90,6 @@ class Kraken(Exchange):
except ccxt.BaseError as e:
raise OperationalException(e) from e
def stoploss_adjust(self, stop_loss: float, order: Dict, side: str) -> bool:
"""
Verify stop_loss against stoploss-order value (limit or price)
Returns True if adjustment is necessary.
"""
return (order['type'] in ('stop-loss', 'stop-loss-limit') and (
(side == "sell" and stop_loss > float(order['price'])) or
(side == "buy" and stop_loss < float(order['price']))
))
@retrier(retries=0)
def create_stoploss(self, pair: str, amount: float, stop_price: float,
order_types: Dict, side: BuySell, leverage: float) -> Dict:
"""
Creates a stoploss market order.
Stoploss market orders is the only stoploss type supported by kraken.
TODO: investigate if this can be combined with generic implementation
(careful, prices are reversed)
"""
params = self._params.copy()
if self.trading_mode == TradingMode.FUTURES:
params.update({'reduceOnly': True})
round_mode = ROUND_DOWN if side == 'buy' else ROUND_UP
if order_types.get('stoploss', 'market') == 'limit':
ordertype = "stop-loss-limit"
limit_price_pct = order_types.get('stoploss_on_exchange_limit_ratio', 0.99)
if side == "sell":
limit_rate = stop_price * limit_price_pct
else:
limit_rate = stop_price * (2 - limit_price_pct)
params['price2'] = self.price_to_precision(pair, limit_rate, rounding_mode=round_mode)
else:
ordertype = "stop-loss"
stop_price = self.price_to_precision(pair, stop_price, rounding_mode=round_mode)
if self._config['dry_run']:
dry_order = self.create_dry_run_order(
pair, ordertype, side, amount, stop_price, leverage, stop_loss=True)
return dry_order
try:
amount = self.amount_to_precision(pair, amount)
order = self._api.create_order(symbol=pair, type=ordertype, side=side,
amount=amount, price=stop_price, params=params)
self._log_exchange_response('create_stoploss_order', order)
logger.info('stoploss order added for %s. '
'stop price: %s.', pair, stop_price)
return order
except ccxt.InsufficientFunds as e:
raise InsufficientFundsError(
f'Insufficient funds to create {ordertype} {side} order on market {pair}. '
f'Tried to create stoploss with amount {amount} at stoploss {stop_price}. '
f'Message: {e}') from e
except ccxt.InvalidOrder as e:
raise InvalidOrderException(
f'Could not create {ordertype} {side} order on market {pair}. '
f'Tried to create stoploss with amount {amount} at stoploss {stop_price}. '
f'Message: {e}') from e
except ccxt.DDoSProtection as e:
raise DDosProtection(e) from e
except (ccxt.NetworkError, ccxt.ExchangeError) as e:
raise TemporaryError(
f'Could not place {side} order due to {e.__class__.__name__}. Message: {e}') from e
except ccxt.BaseError as e:
raise OperationalException(e) from e
def _set_leverage(
self,
leverage: float,
@@ -187,6 +119,9 @@ class Kraken(Exchange):
)
if leverage > 1.0:
params['leverage'] = round(leverage)
if time_in_force == 'PO':
params.pop('timeInForce', None)
params['postOnly'] = True
return params
def calculate_funding_fees(
@@ -195,7 +130,7 @@ class Kraken(Exchange):
amount: float,
is_short: bool,
open_date: datetime,
close_date: Optional[datetime] = None,
close_date: datetime,
time_in_ratio: Optional[float] = None
) -> float:
"""
@@ -223,18 +158,30 @@ class Kraken(Exchange):
return fees if is_short else -fees
def _trades_contracts_to_amount(self, trades: List) -> List:
def _get_trade_pagination_next_value(self, trades: List[Dict]):
"""
Fix "last" id issue for kraken data downloads
This whole override can probably be removed once the following
issue is closed in ccxt: https://github.com/ccxt/ccxt/issues/15827
Extract pagination id for the next "from_id" value
Applies only to fetch_trade_history by id.
"""
super()._trades_contracts_to_amount(trades)
if (
len(trades) > 0
and isinstance(trades[-1].get('info'), list)
and len(trades[-1].get('info', [])) > 7
):
if len(trades) > 0:
if (
isinstance(trades[-1].get('info'), list)
and len(trades[-1].get('info', [])) > 7
):
# Trade response's "last" value.
return trades[-1].get('info', [])[-1]
# Fall back to timestamp if info is somehow empty.
return trades[-1].get('timestamp')
return None
trades[-1]['id'] = trades[-1].get('info', [])[-1]
return trades
def _valid_trade_pagination_id(self, pair: str, from_id: str) -> bool:
"""
Verify trade-pagination id is valid.
Workaround for odd Kraken issue where ID is sometimes wrong.
"""
# Regular id's are in timestamp format 1705443695120072285
# If the id is smaller than 19 characters, it's not a valid timestamp.
if len(from_id) >= 19:
return True
logger.debug(f"{pair} - trade-pagination id is not valid. Fallback to timestamp.")
return False

View File

@@ -228,7 +228,7 @@ class Okx(Exchange):
f'StoplossOrder not found (pair: {pair} id: {order_id}).')
def get_order_id_conditional(self, order: Dict[str, Any]) -> str:
if order['type'] == 'stop':
if order.get('type', '') == 'stop':
return safe_value_fallback2(order, order, 'id_stop', 'id')
return order['id']

View File

@@ -159,7 +159,7 @@ class BaseEnvironment(gym.Env):
function is designed for tracking incremented objects,
events, actions inside the training environment.
For example, a user can call this to track the
frequency of occurence of an `is_valid` call in
frequency of occurrence of an `is_valid` call in
their `calculate_reward()`:
def calculate_reward(self, action: int) -> float:

View File

@@ -1,9 +1,8 @@
import numpy as np
from joblib import Parallel
from sklearn.base import is_classifier
from sklearn.multioutput import MultiOutputClassifier, _fit_estimator
from sklearn.utils.fixes import delayed
from sklearn.utils.multiclass import check_classification_targets
from sklearn.utils.parallel import Parallel, delayed
from sklearn.utils.validation import has_fit_parameter
from freqtrade.exceptions import OperationalException

View File

@@ -1,6 +1,5 @@
from joblib import Parallel
from sklearn.multioutput import MultiOutputRegressor, _fit_estimator
from sklearn.utils.fixes import delayed
from sklearn.utils.parallel import Parallel, delayed
from sklearn.utils.validation import has_fit_parameter

View File

@@ -12,7 +12,6 @@ import numpy as np
import pandas as pd
import psutil
import rapidjson
from joblib import dump, load
from joblib.externals import cloudpickle
from numpy.typing import NDArray
from pandas import DataFrame
@@ -285,6 +284,10 @@ class FreqaiDataDrawer:
new_pred["date_pred"] = dataframe["date"]
hist_preds = self.historic_predictions[pair].copy()
# ensure both dataframes have the same date format so they can be merged
new_pred["date_pred"] = pd.to_datetime(new_pred["date_pred"])
hist_preds["date_pred"] = pd.to_datetime(hist_preds["date_pred"])
# find the closest common date between new_pred and historic predictions
# and cut off the new_pred dataframe at that date
common_dates = pd.merge(new_pred, hist_preds, on="date_pred", how="inner")
@@ -295,9 +298,10 @@ class FreqaiDataDrawer:
"predictions. You likely left your FreqAI instance offline "
f"for more than {len(dataframe.index)} candles.")
df_concat = pd.concat([hist_preds, new_pred], ignore_index=True, keys=hist_preds.keys())
# remove last row because we will append that later in append_model_predictions()
df_concat = df_concat.iloc[:-1]
# reindex new_pred columns to match the historic predictions dataframe
new_pred_reindexed = new_pred.reindex(columns=hist_preds.columns)
df_concat = pd.concat([hist_preds, new_pred_reindexed], ignore_index=True)
# any missing values will get zeroed out so users can see the exact
# downtime in FreqUI
df_concat = df_concat.fillna(0)
@@ -319,9 +323,9 @@ class FreqaiDataDrawer:
index = self.historic_predictions[pair].index[-1:]
columns = self.historic_predictions[pair].columns
nan_df = pd.DataFrame(np.nan, index=index, columns=columns)
zeros_df = pd.DataFrame(np.zeros((1, len(columns))), index=index, columns=columns)
self.historic_predictions[pair] = pd.concat(
[self.historic_predictions[pair], nan_df], ignore_index=True, axis=0)
[self.historic_predictions[pair], zeros_df], ignore_index=True, axis=0)
df = self.historic_predictions[pair]
# model outputs and associated statistics
@@ -472,7 +476,8 @@ class FreqaiDataDrawer:
# Save the trained model
if self.model_type == 'joblib':
dump(model, save_path / f"{dk.model_filename}_model.joblib")
with (save_path / f"{dk.model_filename}_model.joblib").open("wb") as fp:
cloudpickle.dump(model, fp)
elif self.model_type == 'keras':
model.save(save_path / f"{dk.model_filename}_model.h5")
elif self.model_type in ["stable_baselines3", "sb3_contrib", "pytorch"]:
@@ -559,7 +564,8 @@ class FreqaiDataDrawer:
if dk.live and coin in self.model_dictionary:
model = self.model_dictionary[coin]
elif self.model_type == 'joblib':
model = load(dk.data_path / f"{dk.model_filename}_model.joblib")
with (dk.data_path / f"{dk.model_filename}_model.joblib").open("rb") as fp:
model = cloudpickle.load(fp)
elif 'stable_baselines' in self.model_type or 'sb3_contrib' == self.model_type:
mod = importlib.import_module(
self.model_type, self.freqai_info['rl_config']['model_type'])

View File

@@ -244,7 +244,7 @@ class FreqaiDataKitchen:
f"{self.pair}: dropped {len(unfiltered_df) - len(filtered_df)} training points"
f" due to NaNs in populated dataset {len(unfiltered_df)}."
)
if len(unfiltered_df) == 0 and not self.live:
if len(filtered_df) == 0 and not self.live:
raise OperationalException(
f"{self.pair}: all training data dropped due to NaNs. "
"You likely did not download enough training data prior "
@@ -255,7 +255,7 @@ class FreqaiDataKitchen:
if (1 - len(filtered_df) / len(unfiltered_df)) > 0.1 and self.live:
worst_indicator = str(unfiltered_df.count().idxmin())
logger.warning(
f" {(1 - len(filtered_df)/len(unfiltered_df)) * 100:.0f} percent "
f" {(1 - len(filtered_df) / len(unfiltered_df)) * 100:.0f} percent "
" of training data dropped due to NaNs, model may perform inconsistent "
f"with expectations. Verify {worst_indicator}"
)
@@ -432,8 +432,12 @@ class FreqaiDataKitchen:
if self.freqai_config["feature_parameters"].get("DI_threshold", 0) > 0:
append_df["DI_values"] = self.DI_values
user_cols = [col for col in dataframe_backtest.columns if col.startswith("%%")]
cols = ["date"]
cols.extend(user_cols)
dataframe_backtest.reset_index(drop=True, inplace=True)
merged_df = pd.concat([dataframe_backtest["date"], append_df], axis=1)
merged_df = pd.concat([dataframe_backtest[cols], append_df], axis=1)
return merged_df
def append_predictions(self, append_df: DataFrame) -> None:
@@ -451,7 +455,8 @@ class FreqaiDataKitchen:
Back fill values to before the backtesting range so that the dataframe matches size
when it goes back to the strategy. These rows are not included in the backtest.
"""
to_keep = [col for col in dataframe.columns if not col.startswith("&")]
to_keep = [col for col in dataframe.columns if
not col.startswith("&") and not col.startswith("%%")]
self.return_dataframe = pd.merge(dataframe[to_keep],
self.full_df, how='left', on='date')
self.return_dataframe[self.full_df.columns] = (
@@ -709,6 +714,8 @@ class FreqaiDataKitchen:
pair, tf, strategy, corr_dataframes, base_dataframes, is_corr_pairs)
informative_copy = informative_df.copy()
logger.debug(f"Populating features for {pair} {tf}")
for t in self.freqai_config["feature_parameters"]["indicator_periods_candles"]:
df_features = strategy.feature_engineering_expand_all(
informative_copy.copy(), t, metadata=metadata)
@@ -788,6 +795,7 @@ class FreqaiDataKitchen:
if not prediction_dataframe.empty:
dataframe = prediction_dataframe.copy()
base_dataframes[self.config["timeframe"]] = dataframe.copy()
else:
dataframe = base_dataframes[self.config["timeframe"]].copy()

View File

@@ -27,6 +27,12 @@ class PyTorchTransformerRegressor(BasePyTorchRegressor):
...
"freqai": {
...
"conv_width": 30, // PyTorchTransformer is based on windowing
"feature_parameters": {
...
"include_shifted_candles": 0, // which removes the need for shifted candles
...
},
"model_training_parameters" : {
"learning_rate": 3e-4,
"trainer_kwargs": {
@@ -120,16 +126,16 @@ class PyTorchTransformerRegressor(BasePyTorchRegressor):
# create empty torch tensor
self.model.model.eval()
yb = torch.empty(0).to(self.device)
if x.shape[1] > 1:
if x.shape[1] > self.window_size:
ws = self.window_size
for i in range(0, x.shape[1] - ws):
xb = x[:, i:i + ws, :].to(self.device)
y = self.model.model(xb)
yb = torch.cat((yb, y), dim=0)
yb = torch.cat((yb, y), dim=1)
else:
yb = self.model.model(x)
yb = yb.cpu().squeeze()
yb = yb.cpu().squeeze(0)
pred_df = pd.DataFrame(yb.detach().numpy(), columns=dk.label_list)
pred_df, _, _ = dk.label_pipeline.inverse_transform(pred_df)

View File

@@ -1,8 +1,9 @@
import logging
from pathlib import Path
from typing import Any, Dict, Type
from typing import Any, Dict, List, Optional, Type
import torch as th
from stable_baselines3.common.callbacks import ProgressBarCallback
from freqtrade.freqai.data_kitchen import FreqaiDataKitchen
from freqtrade.freqai.RL.Base5ActionRLEnv import Actions, Base5ActionRLEnv, Positions
@@ -73,19 +74,27 @@ class ReinforcementLearner(BaseReinforcementLearningModel):
'trained agent.')
model = self.dd.model_dictionary[dk.pair]
model.set_env(self.train_env)
callbacks: List[Any] = [self.eval_callback, self.tensorboard_callback]
progressbar_callback: Optional[ProgressBarCallback] = None
if self.rl_config.get('progress_bar', False):
progressbar_callback = ProgressBarCallback()
callbacks.insert(0, progressbar_callback)
model.learn(
total_timesteps=int(total_timesteps),
callback=[self.eval_callback, self.tensorboard_callback],
progress_bar=self.rl_config.get('progress_bar', False)
)
try:
model.learn(
total_timesteps=int(total_timesteps),
callback=callbacks,
)
finally:
if progressbar_callback:
progressbar_callback.on_training_end()
if Path(dk.data_path / "best_model.zip").is_file():
logger.info('Callback found a best model.')
best_model = self.MODELCLASS.load(dk.data_path / "best_model")
return best_model
logger.info('Couldnt find best model, using final model instead.')
logger.info("Couldn't find best model, using final model instead.")
return model

View File

@@ -0,0 +1,82 @@
import logging
from typing import Any, Dict, Tuple
import numpy as np
import numpy.typing as npt
from pandas import DataFrame
from sklearn.ensemble import RandomForestClassifier
from sklearn.preprocessing import LabelEncoder
from freqtrade.freqai.base_models.BaseClassifierModel import BaseClassifierModel
from freqtrade.freqai.data_kitchen import FreqaiDataKitchen
logger = logging.getLogger(__name__)
class SKLearnRandomForestClassifier(BaseClassifierModel):
"""
User created prediction model. The class inherits IFreqaiModel, which
means it has full access to all Frequency AI functionality. Typically,
users would use this to override the common `fit()`, `train()`, or
`predict()` methods to add their custom data handling tools or change
various aspects of the training that cannot be configured via the
top level config.json file.
"""
def fit(self, data_dictionary: Dict, dk: FreqaiDataKitchen, **kwargs) -> Any:
"""
User sets up the training and test data to fit their desired model here
:param data_dictionary: the dictionary holding all data for train, test,
labels, weights
:param dk: The datakitchen object for the current coin/model
"""
X = data_dictionary["train_features"].to_numpy()
y = data_dictionary["train_labels"].to_numpy()[:, 0]
if self.freqai_info.get('data_split_parameters', {}).get('test_size', 0.1) == 0:
eval_set = None
else:
test_features = data_dictionary["test_features"].to_numpy()
test_labels = data_dictionary["test_labels"].to_numpy()[:, 0]
eval_set = (test_features, test_labels)
if self.freqai_info.get("continual_learning", False):
logger.warning("Continual learning is not supported for "
"SKLearnRandomForestClassifier, ignoring.")
train_weights = data_dictionary["train_weights"]
model = RandomForestClassifier(**self.model_training_parameters)
model.fit(X=X, y=y, sample_weight=train_weights)
if eval_set:
logger.info("Score: %s", model.score(eval_set[0], eval_set[1]))
return model
def predict(
self, unfiltered_df: DataFrame, dk: FreqaiDataKitchen, **kwargs
) -> Tuple[DataFrame, npt.NDArray[np.int_]]:
"""
Filter the prediction features data and predict with it.
:param unfiltered_df: Full dataframe for the current backtest period.
:return:
:pred_df: dataframe containing the predictions
:do_predict: np.array of 1s and 0s to indicate places where freqai needed to remove
data (NaNs) or felt uncertain about data (PCA and DI index)
"""
(pred_df, dk.do_predict) = super().predict(unfiltered_df, dk, **kwargs)
le = LabelEncoder()
label = dk.label_list[0]
labels_before = list(dk.data['labels_std'].keys())
labels_after = le.fit_transform(labels_before).tolist()
pred_df[label] = le.inverse_transform(pred_df[label])
pred_df = pred_df.rename(
columns={labels_after[i]: labels_before[i] for i in range(len(labels_before))})
return (pred_df, dk.do_predict)

View File

@@ -45,7 +45,7 @@ class XGBoostRFRegressor(BaseRegressionModel):
model = XGBRFRegressor(**self.model_training_parameters)
model.set_params(callbacks=[TBCallback(dk.data_path)], activate=self.activate_tensorboard)
model.set_params(callbacks=[TBCallback(dk.data_path)])
model.fit(X=X, y=y, sample_weight=sample_weight, eval_set=eval_set,
sample_weight_eval_set=eval_weights, xgb_model=xgb_model)
# set the callbacks to empty so that we can serialize to disk later

View File

@@ -45,7 +45,7 @@ class XGBoostRegressor(BaseRegressionModel):
model = XGBRegressor(**self.model_training_parameters)
model.set_params(callbacks=[TBCallback(dk.data_path)], activate=self.activate_tensorboard)
model.set_params(callbacks=[TBCallback(dk.data_path)])
model.fit(X=X, y=y, sample_weight=sample_weight, eval_set=eval_set,
sample_weight_eval_set=eval_weights, xgb_model=xgb_model)
# set the callbacks to empty so that we can serialize to disk later

View File

@@ -3,7 +3,6 @@ from typing import Any, Dict, Type, Union
from stable_baselines3.common.callbacks import BaseCallback
from stable_baselines3.common.logger import HParam
from stable_baselines3.common.vec_env import VecEnv
from freqtrade.freqai.RL.BaseEnvironment import BaseActions
@@ -13,13 +12,9 @@ class TensorboardCallback(BaseCallback):
Custom callback for plotting additional values in tensorboard and
episodic summary reports.
"""
# Override training_env type to fix type errors
training_env: Union[VecEnv, None] = None
def __init__(self, verbose=1, actions: Type[Enum] = BaseActions):
super().__init__(verbose)
self.model: Any = None
self.logger: Any = None
self.actions: Type[Enum] = actions
def _on_training_start(self) -> None:
@@ -47,9 +42,13 @@ class TensorboardCallback(BaseCallback):
def _on_step(self) -> bool:
local_info = self.locals["infos"][0]
if self.training_env is None:
return True
tensorboard_metrics = self.training_env.get_attr("tensorboard_metrics")[0]
if hasattr(self.training_env, 'envs'):
tensorboard_metrics = self.training_env.envs[0].unwrapped.tensorboard_metrics
else:
# For RL-multiproc - usage of [0] might need to be evaluated
tensorboard_metrics = self.training_env.get_attr("tensorboard_metrics")[0]
for metric in local_info:
if metric not in ["episode", "terminal_observation"]:

View File

@@ -13,7 +13,6 @@ from freqtrade.data.dataprovider import DataProvider
from freqtrade.data.history.history_utils import refresh_backtest_ohlcv_data
from freqtrade.exceptions import OperationalException
from freqtrade.exchange import timeframe_to_seconds
from freqtrade.exchange.exchange import market_is_active
from freqtrade.freqai.data_drawer import FreqaiDataDrawer
from freqtrade.freqai.data_kitchen import FreqaiDataKitchen
from freqtrade.plugins.pairlist.pairlist_helpers import dynamic_expand_pairlist
@@ -33,8 +32,11 @@ def download_all_data_for_training(dp: DataProvider, config: Config) -> None:
if dp._exchange is None:
raise OperationalException('No exchange object found.')
markets = [p for p, m in dp._exchange.markets.items() if market_is_active(m)
or config.get('include_inactive')]
markets = [
p for p in dp._exchange.get_markets(
tradable_only=True, active_only=not config.get('include_inactive')
).keys()
]
all_pairs = dynamic_expand_pairlist(config, markets)
@@ -116,10 +118,12 @@ def plot_feature_importance(model: Any, pair: str, dk: FreqaiDataKitchen,
mdl = models[label]
if "catboost.core" in str(mdl.__class__):
feature_importance = mdl.get_feature_importance()
elif "lightgbm.sklearn" or "xgb" in str(mdl.__class__):
elif "lightgbm.sklearn" in str(mdl.__class__):
feature_importance = mdl.feature_importances_
elif "xgb" in str(mdl.__class__):
feature_importance = mdl.feature_importances_
else:
logger.info('Model type not support for generating feature importances.')
logger.info('Model type does not support generating feature importances.')
return
# Data preparation

View File

@@ -18,8 +18,8 @@ from freqtrade.constants import BuySell, Config, EntryExecuteMode, ExchangeConfi
from freqtrade.data.converter import order_book_to_dataframe
from freqtrade.data.dataprovider import DataProvider
from freqtrade.edge import Edge
from freqtrade.enums import (ExitCheckTuple, ExitType, RPCMessageType, RunMode, SignalDirection,
State, TradingMode)
from freqtrade.enums import (ExitCheckTuple, ExitType, RPCMessageType, SignalDirection, State,
TradingMode)
from freqtrade.exceptions import (DependencyException, ExchangeError, InsufficientFundsError,
InvalidOrderException, PricingError)
from freqtrade.exchange import (ROUND_DOWN, ROUND_UP, remove_exchange_credentials,
@@ -33,12 +33,12 @@ from freqtrade.plugins.protectionmanager import ProtectionManager
from freqtrade.resolvers import ExchangeResolver, StrategyResolver
from freqtrade.rpc import RPCManager
from freqtrade.rpc.external_message_consumer import ExternalMessageConsumer
from freqtrade.rpc.rpc_types import (RPCBuyMsg, RPCCancelMsg, RPCProtectionMsg, RPCSellCancelMsg,
RPCSellMsg)
from freqtrade.rpc.rpc_types import (ProfitLossStr, RPCCancelMsg, RPCEntryMsg, RPCExitCancelMsg,
RPCExitMsg, RPCProtectionMsg)
from freqtrade.strategy.interface import IStrategy
from freqtrade.strategy.strategy_wrapper import strategy_safe_wrapper
from freqtrade.util import FtPrecise
from freqtrade.util.binance_mig import migrate_binance_futures_names
from freqtrade.util.migrations import migrate_binance_futures_names
from freqtrade.wallets import Wallets
@@ -82,7 +82,8 @@ class FreqtradeBot(LoggingMixin):
PairLocks.timeframe = self.config['timeframe']
self.pairlists = PairListManager(self.exchange, self.config)
self.trading_mode: TradingMode = self.config.get('trading_mode', TradingMode.SPOT)
self.last_process: Optional[datetime] = None
# RPC runs in separate threads, can start handling external commands just after
# initialization, even before Freqtradebot has a chance to start its throttling,
@@ -119,8 +120,6 @@ class FreqtradeBot(LoggingMixin):
self._exit_lock = Lock()
LoggingMixin.__init__(self, logger, timeframe_to_seconds(self.strategy.timeframe))
self.trading_mode: TradingMode = self.config.get('trading_mode', TradingMode.SPOT)
self._schedule = Scheduler()
if self.trading_mode == TradingMode.FUTURES:
@@ -129,13 +128,13 @@ class FreqtradeBot(LoggingMixin):
self.update_funding_fees()
self.wallets.update()
# TODO: This would be more efficient if scheduled in utc time, and performed at each
# TODO: funding interval, specified by funding_fee_times on the exchange classes
# This would be more efficient if scheduled in utc time, and performed at each
# funding interval, specified by funding_fee_times on the exchange classes
# However, this reduces the precision - and might therefore lead to problems.
for time_slot in range(0, 24):
for minutes in [0, 15, 30, 45]:
for minutes in [1, 31]:
t = str(time(time_slot, minutes, 2))
self._schedule.every().day.at(t).do(update)
self.last_process: Optional[datetime] = None
self.strategy.ft_bot_start()
# Initialize protections AFTER bot start - otherwise parameters are not loaded.
@@ -199,6 +198,7 @@ class FreqtradeBot(LoggingMixin):
# Only update open orders on startup
# This will update the database after the initial migration
self.startup_update_open_orders()
self.update_funding_fees()
def process(self) -> None:
"""
@@ -312,22 +312,19 @@ class FreqtradeBot(LoggingMixin):
open_trades = Trade.get_open_trade_count()
return max(0, self.config['max_open_trades'] - open_trades)
def update_funding_fees(self):
def update_funding_fees(self) -> None:
if self.trading_mode == TradingMode.FUTURES:
trades = Trade.get_open_trades()
try:
for trade in trades:
funding_fees = self.exchange.get_funding_fees(
trades: List[Trade] = Trade.get_open_trades()
for trade in trades:
trade.set_funding_fees(
self.exchange.get_funding_fees(
pair=trade.pair,
amount=trade.amount,
is_short=trade.is_short,
open_date=trade.date_last_filled_utc
)
trade.funding_fees = funding_fees
except ExchangeError:
logger.warning("Could not update funding fees for open trades.")
open_date=trade.date_last_filled_utc)
)
def startup_backpopulate_precision(self):
def startup_backpopulate_precision(self) -> None:
trades = Trade.get_trades([Trade.contract_size.is_(None)])
for trade in trades:
@@ -374,17 +371,13 @@ class FreqtradeBot(LoggingMixin):
fo = order.to_ccxt_object()
fo['status'] = 'canceled'
self.handle_cancel_order(
fo, order.order_id, order.trade,
constants.CANCEL_REASON['TIMEOUT']
fo, order, order.trade, constants.CANCEL_REASON['TIMEOUT']
)
except ExchangeError as e:
logger.warning(f"Error updating Order {order.order_id} due to {e}")
if self.trading_mode == TradingMode.FUTURES:
self._schedule.run_pending()
def update_trades_without_assigned_fees(self) -> None:
"""
Update closed trades without close fees assigned.
@@ -439,10 +432,6 @@ class FreqtradeBot(LoggingMixin):
try:
fo = self.exchange.fetch_order_or_stoploss_order(order.order_id, order.ft_pair,
order.ft_order_side == 'stoploss')
if order.ft_order_side == 'stoploss':
if fo and fo['status'] == 'open':
# Assume this as the open stoploss order
trade.stoploss_order_id = order.order_id
if fo:
logger.info(f"Found {order} for trade {trade}.")
self.update_trade_state(trade, order.order_id, fo,
@@ -586,7 +575,8 @@ class FreqtradeBot(LoggingMixin):
else:
self.log_once(f"Pair {pair} is currently locked.", logger.info)
return False
stake_amount = self.wallets.get_trade_stake_amount(pair, self.edge)
stake_amount = self.wallets.get_trade_stake_amount(
pair, self.config['max_open_trades'], self.edge)
bid_check_dom = self.config.get('entry_pricing', {}).get('check_depth_of_market', {})
if ((bid_check_dom.get('enabled', False)) and
@@ -651,8 +641,7 @@ class FreqtradeBot(LoggingMixin):
max_entry_stake = self.exchange.get_max_pair_stake_amount(trade.pair, current_entry_rate)
stake_available = self.wallets.get_available_stake_amount()
logger.debug(f"Calling adjust_trade_position for pair {trade.pair}")
stake_amount = strategy_safe_wrapper(self.strategy.adjust_trade_position,
default_retval=None, supress_error=True)(
stake_amount, order_tag = self.strategy._adjust_trade_position_internal(
trade=trade,
current_time=datetime.now(timezone.utc), current_rate=current_entry_rate,
current_profit=current_entry_profit, min_stake=min_entry_stake,
@@ -671,33 +660,27 @@ class FreqtradeBot(LoggingMixin):
else:
logger.debug("Max adjustment entries is set to unlimited.")
self.execute_entry(trade.pair, stake_amount, price=current_entry_rate,
trade=trade, is_short=trade.is_short, mode='pos_adjust')
trade=trade, is_short=trade.is_short, mode='pos_adjust',
enter_tag=order_tag)
if stake_amount is not None and stake_amount < 0.0:
# We should decrease our position
amount = self.exchange.amount_to_contract_precision(
trade.pair,
abs(float(FtPrecise(stake_amount * trade.leverage) / FtPrecise(current_exit_rate))))
if amount > trade.amount:
# This is currently ineffective as remaining would become < min tradable
# Fixing this would require checking for 0.0 there -
# if we decide that this callback is allowed to "fully exit"
logger.info(
f"Adjusting amount to trade.amount as it is higher. {amount} > {trade.amount}")
amount = trade.amount
if amount == 0.0:
logger.info("Amount to exit is 0.0 due to exchange limits - not exiting.")
return
remaining = (trade.amount - amount) * current_exit_rate
if min_exit_stake and remaining < min_exit_stake:
if min_exit_stake and remaining != 0 and remaining < min_exit_stake:
logger.info(f"Remaining amount of {remaining} would be smaller "
f"than the minimum of {min_exit_stake}.")
return
self.execute_trade_exit(trade, current_exit_rate, exit_check=ExitCheckTuple(
exit_type=ExitType.PARTIAL_EXIT), sub_trade_amt=amount)
exit_type=ExitType.PARTIAL_EXIT), sub_trade_amt=amount, exit_tag=order_tag)
def _check_depth_of_market(self, pair: str, conf: Dict, side: SignalDirection) -> bool:
"""
@@ -719,7 +702,7 @@ class FreqtradeBot(LoggingMixin):
delta = f"Delta: {bids_ask_delta}"
logger.info(
f"{bids}, {asks}, {delta}, Direction: {side.value}"
f"{bids}, {asks}, {delta}, Direction: {side.value} "
f"Bid Price: {order_book['bids'][0][0]}, Ask Price: {order_book['asks'][0][0]}, "
f"Immediate Bid Quantity: {order_book['bids'][0][1]}, "
f"Immediate Ask Quantity: {order_book['asks'][0][1]}."
@@ -749,6 +732,7 @@ class FreqtradeBot(LoggingMixin):
:param pair: pair for which we want to create a LIMIT_BUY
:param stake_amount: amount of stake-currency for the pair
:return: True if a buy order is created, false if it fails.
:raise: DependencyException or it's subclasses like ExchangeError.
"""
time_in_force = self.strategy.order_time_in_force['entry']
@@ -794,6 +778,7 @@ class FreqtradeBot(LoggingMixin):
leverage=leverage
)
order_obj = Order.parse_from_ccxt_object(order, pair, side, amount, enter_limit_requested)
order_obj.ft_order_tag = enter_tag
order_id = order['id']
order_status = order.get('status')
logger.info(f"Order {order_id} was created for {pair} and status is {order_status}.")
@@ -835,14 +820,15 @@ class FreqtradeBot(LoggingMixin):
base_currency = self.exchange.get_pair_base_currency(pair)
open_date = datetime.now(timezone.utc)
funding_fees = self.exchange.get_funding_fees(
pair=pair,
amount=amount + trade.amount if trade else amount,
is_short=is_short,
open_date=trade.date_last_filled_utc if trade else open_date
)
# This is a new trade
if trade is None:
funding_fees = 0.0
try:
funding_fees = self.exchange.get_funding_fees(
pair=pair, amount=amount, is_short=is_short, open_date=open_date)
except ExchangeError:
logger.warning("Could not find funding fee.")
trade = Trade(
pair=pair,
@@ -878,6 +864,7 @@ class FreqtradeBot(LoggingMixin):
trade.is_open = True
trade.fee_open_currency = None
trade.open_rate_requested = enter_limit_requested
trade.set_funding_fees(funding_fees)
trade.orders.append(order_obj)
trade.recalc_trade_from_orders()
@@ -904,17 +891,15 @@ class FreqtradeBot(LoggingMixin):
def cancel_stoploss_on_exchange(self, trade: Trade) -> Trade:
# First cancelling stoploss on exchange ...
if trade.stoploss_order_id:
for oslo in trade.open_sl_orders:
try:
logger.info(f"Canceling stoploss on exchange for {trade}")
logger.info(f"Cancelling stoploss on exchange for {trade} "
f"order: {oslo.order_id}")
co = self.exchange.cancel_stoploss_order_with_result(
trade.stoploss_order_id, trade.pair, trade.amount)
self.update_trade_state(trade, trade.stoploss_order_id, co, stoploss_order=True)
# Reset stoploss order id.
trade.stoploss_order_id = None
oslo.order_id, trade.pair, trade.amount)
self.update_trade_state(trade, oslo.order_id, co, stoploss_order=True)
except InvalidOrderException:
logger.exception(f"Could not cancel stoploss order {trade.stoploss_order_id} "
logger.exception(f"Could not cancel stoploss order {oslo.order_id} "
f"for pair {trade.pair}")
return trade
@@ -1002,7 +987,7 @@ class FreqtradeBot(LoggingMixin):
return enter_limit_requested, stake_amount, leverage
def _notify_enter(self, trade: Trade, order: Order, order_type: str,
def _notify_enter(self, trade: Trade, order: Order, order_type: Optional[str],
fill: bool = False, sub_trade: bool = False) -> None:
"""
Sends rpc notification when a entry order occurred.
@@ -1012,12 +997,10 @@ class FreqtradeBot(LoggingMixin):
if open_rate is None:
open_rate = trade.open_rate
current_rate = trade.open_rate_requested
if self.dataprovider.runmode in (RunMode.DRY_RUN, RunMode.LIVE):
current_rate = self.exchange.get_rate(
trade.pair, side='entry', is_short=trade.is_short, refresh=False)
current_rate = self.exchange.get_rate(
trade.pair, side='entry', is_short=trade.is_short, refresh=False)
msg: RPCBuyMsg = {
msg: RPCEntryMsg = {
'trade_id': trade.id,
'type': RPCMessageType.ENTRY_FILL if fill else RPCMessageType.ENTRY,
'buy_tag': trade.enter_tag,
@@ -1028,10 +1011,11 @@ class FreqtradeBot(LoggingMixin):
'direction': 'Short' if trade.is_short else 'Long',
'limit': open_rate, # Deprecated (?)
'open_rate': open_rate,
'order_type': order_type,
'order_type': order_type or 'unknown',
'stake_amount': trade.stake_amount,
'stake_currency': self.config['stake_currency'],
'base_currency': self.exchange.get_pair_base_currency(trade.pair),
'quote_currency': self.exchange.get_pair_quote_currency(trade.pair),
'fiat_currency': self.config.get('fiat_display_currency', None),
'amount': order.safe_amount_after_fee if fill else (order.amount or trade.amount),
'open_date': trade.open_date_utc or datetime.now(timezone.utc),
@@ -1065,6 +1049,7 @@ class FreqtradeBot(LoggingMixin):
'open_rate': trade.open_rate,
'stake_currency': self.config['stake_currency'],
'base_currency': self.exchange.get_pair_base_currency(trade.pair),
'quote_currency': self.exchange.get_pair_quote_currency(trade.pair),
'fiat_currency': self.config.get('fiat_display_currency', None),
'amount': trade.amount,
'open_date': trade.open_date,
@@ -1087,7 +1072,11 @@ class FreqtradeBot(LoggingMixin):
trades_closed = 0
for trade in trades:
if not trade.has_open_orders and not self.wallets.check_exit_amount(trade):
if (
not trade.has_open_orders
and not trade.has_open_sl_orders
and not self.wallets.check_exit_amount(trade)
):
logger.warning(
f'Not enough {trade.safe_base_currency} in wallet to exit {trade}. '
'Trying to recover.')
@@ -1195,8 +1184,6 @@ class FreqtradeBot(LoggingMixin):
order_obj = Order.parse_from_ccxt_object(stoploss_order, trade.pair, 'stoploss',
trade.amount, stop_price)
trade.orders.append(order_obj)
trade.stoploss_order_id = str(stoploss_order['id'])
trade.stoploss_last_update = datetime.now(timezone.utc)
return True
except InsufficientFundsError as e:
logger.warning(f"Unable to place stoploss order {e}.")
@@ -1204,13 +1191,11 @@ class FreqtradeBot(LoggingMixin):
self.handle_insufficient_funds(trade)
except InvalidOrderException as e:
trade.stoploss_order_id = None
logger.error(f'Unable to place a stoploss order on exchange. {e}')
logger.warning('Exiting the trade forcefully')
self.emergency_exit(trade, stop_price)
except ExchangeError:
trade.stoploss_order_id = None
logger.exception('Unable to place a stoploss order on exchange.')
return False
@@ -1224,27 +1209,28 @@ class FreqtradeBot(LoggingMixin):
"""
logger.debug('Handling stoploss on exchange %s ...', trade)
stoploss_order = None
try:
# First we check if there is already a stoploss on exchange
stoploss_order = self.exchange.fetch_stoploss_order(
trade.stoploss_order_id, trade.pair) if trade.stoploss_order_id else None
except InvalidOrderException as exception:
logger.warning('Unable to fetch stoploss order: %s', exception)
stoploss_orders = []
for slo in trade.open_sl_orders:
stoploss_order = None
try:
# First we check if there is already a stoploss on exchange
stoploss_order = self.exchange.fetch_stoploss_order(
slo.order_id, trade.pair) if slo.order_id else None
except InvalidOrderException as exception:
logger.warning('Unable to fetch stoploss order: %s', exception)
if stoploss_order:
self.update_trade_state(trade, trade.stoploss_order_id, stoploss_order,
stoploss_order=True)
if stoploss_order:
stoploss_orders.append(stoploss_order)
self.update_trade_state(trade, slo.order_id, stoploss_order,
stoploss_order=True)
# We check if stoploss order is fulfilled
if stoploss_order and stoploss_order['status'] in ('closed', 'triggered'):
trade.exit_reason = ExitType.STOPLOSS_ON_EXCHANGE.value
self.update_trade_state(trade, trade.stoploss_order_id, stoploss_order,
stoploss_order=True)
self._notify_exit(trade, "stoploss", True)
self.handle_protections(trade.pair, trade.trade_direction)
return True
# We check if stoploss order is fulfilled
if stoploss_order and stoploss_order['status'] in ('closed', 'triggered'):
trade.exit_reason = ExitType.STOPLOSS_ON_EXCHANGE.value
self._notify_exit(trade, "stoploss", True)
self.handle_protections(trade.pair, trade.trade_direction)
return True
if trade.has_open_orders or not trade.is_open:
# Trade has an open Buy or Sell order, Stoploss-handling can't happen in this case
@@ -1253,7 +1239,7 @@ class FreqtradeBot(LoggingMixin):
return False
# If enter order is fulfilled but there is no stoploss, we add a stoploss on exchange
if not stoploss_order:
if len(stoploss_orders) == 0:
stop_price = trade.stoploss_or_liquidation
if self.edge:
stoploss = self.edge.get_stoploss(pair=trade.pair)
@@ -1267,27 +1253,7 @@ class FreqtradeBot(LoggingMixin):
# in which case the trade will be closed - which we must check below.
return False
# If stoploss order is canceled for some reason we add it again
if (trade.is_open
and stoploss_order
and stoploss_order['status'] in ('canceled', 'cancelled')):
if self.create_stoploss_order(trade=trade, stop_price=trade.stoploss_or_liquidation):
return False
else:
logger.warning('Stoploss order was cancelled, but unable to recreate one.')
# Finally we check if stoploss on exchange should be moved up because of trailing.
# Triggered Orders are now real orders - so don't replace stoploss anymore
if (
trade.is_open and stoploss_order
and stoploss_order.get('status_stop') != 'triggered'
and (self.config.get('trailing_stop', False)
or self.config.get('use_custom_stoploss', False))
):
# if trailing stoploss is enabled we check if stoploss value has changed
# in which case we cancel stoploss order and put another one with new
# value immediately
self.handle_trailing_stoploss_on_exchange(trade, stoploss_order)
self.manage_trade_stoploss_orders(trade, stoploss_orders)
return False
@@ -1323,6 +1289,42 @@ class FreqtradeBot(LoggingMixin):
logger.warning(f"Could not create trailing stoploss order "
f"for pair {trade.pair}.")
def manage_trade_stoploss_orders(self, trade: Trade, stoploss_orders: List[Dict]):
"""
Perform required actions acording to existing stoploss orders of trade
:param trade: Corresponding Trade
:param stoploss_orders: Current on exchange stoploss orders
:return: None
"""
# If all stoploss orderd are canceled for some reason we add it again
canceled_sl_orders = [o for o in stoploss_orders
if o['status'] in ('canceled', 'cancelled')]
if (
trade.is_open and
len(stoploss_orders) > 0 and
len(stoploss_orders) == len(canceled_sl_orders)
):
if self.create_stoploss_order(trade=trade, stop_price=trade.stoploss_or_liquidation):
return False
else:
logger.warning('All Stoploss orders are cancelled, but unable to recreate one.')
active_sl_orders = [o for o in stoploss_orders if o not in canceled_sl_orders]
if len(active_sl_orders) > 0:
last_active_sl_order = active_sl_orders[-1]
# Finally we check if stoploss on exchange should be moved up because of trailing.
# Triggered Orders are now real orders - so don't replace stoploss anymore
if (trade.is_open and
last_active_sl_order.get('status_stop') != 'triggered' and
(self.config.get('trailing_stop', False) or
self.config.get('use_custom_stoploss', False))):
# if trailing stoploss is enabled we check if stoploss value has changed
# in which case we cancel stoploss order and put another one with new
# value immediately
self.handle_trailing_stoploss_on_exchange(trade, last_active_sl_order)
return
def manage_open_orders(self) -> None:
"""
Management of open orders on exchange. Unfilled orders might be cancelled if timeout
@@ -1331,6 +1333,7 @@ class FreqtradeBot(LoggingMixin):
:return: None
"""
for trade in Trade.get_open_trades():
open_order: Order
for open_order in trade.open_orders:
try:
order = self.exchange.fetch_order(open_order.order_id, trade.pair)
@@ -1345,28 +1348,31 @@ class FreqtradeBot(LoggingMixin):
not_closed = order['status'] == 'open' or fully_cancelled
if not_closed:
if fully_cancelled or (
open_order and self.strategy.ft_check_timed_out(
trade, open_order, datetime.now(timezone.utc)
if (
fully_cancelled or (
open_order and self.strategy.ft_check_timed_out(
trade, open_order, datetime.now(timezone.utc)
)
)
):
self.handle_cancel_order(
order, open_order.order_id, trade, constants.CANCEL_REASON['TIMEOUT']
order, open_order, trade, constants.CANCEL_REASON['TIMEOUT']
)
else:
self.replace_order(order, open_order, trade)
def handle_cancel_order(self, order: Dict, order_id: str, trade: Trade, reason: str) -> None:
def handle_cancel_order(self, order: Dict, order_obj: Order, trade: Trade, reason: str) -> None:
"""
Check if current analyzed order timed out and cancel if necessary.
:param order: Order dict grabbed with exchange.fetch_order()
:param order_obj: Order object from the database.
:param trade: Trade object.
:return: None
"""
if order['side'] == trade.entry_side:
self.handle_cancel_enter(trade, order, order_id, reason)
self.handle_cancel_enter(trade, order, order_obj, reason)
else:
canceled = self.handle_cancel_exit(trade, order, order_id, reason)
canceled = self.handle_cancel_exit(trade, order, order_obj, reason)
canceled_count = trade.get_canceled_exit_order_count()
max_timeouts = self.config.get('unfilledtimeout', {}).get('exit_timeout_count', 0)
if (canceled and max_timeouts > 0 and canceled_count >= max_timeouts):
@@ -1426,21 +1432,21 @@ class FreqtradeBot(LoggingMixin):
# New candle
proposed_rate = self.exchange.get_rate(
trade.pair, side='entry', is_short=trade.is_short, refresh=True)
adjusted_entry_price = strategy_safe_wrapper(self.strategy.adjust_entry_price,
default_retval=order_obj.price)(
adjusted_entry_price = strategy_safe_wrapper(
self.strategy.adjust_entry_price, default_retval=order_obj.safe_placement_price)(
trade=trade, order=order_obj, pair=trade.pair,
current_time=datetime.now(timezone.utc), proposed_rate=proposed_rate,
current_order_rate=order_obj.safe_price, entry_tag=trade.enter_tag,
side=trade.entry_side)
current_order_rate=order_obj.safe_placement_price, entry_tag=trade.enter_tag,
side=trade.trade_direction)
replacing = True
cancel_reason = constants.CANCEL_REASON['REPLACE']
if not adjusted_entry_price:
replacing = False
cancel_reason = constants.CANCEL_REASON['USER_CANCEL']
if order_obj.price != adjusted_entry_price:
if order_obj.safe_placement_price != adjusted_entry_price:
# cancel existing order if new price is supplied or None
res = self.handle_cancel_enter(trade, order, order_obj.order_id, cancel_reason,
res = self.handle_cancel_enter(trade, order, order_obj, cancel_reason,
replacing=replacing)
if not res:
self.replace_order_failed(
@@ -1448,15 +1454,21 @@ class FreqtradeBot(LoggingMixin):
return
if adjusted_entry_price:
# place new order only if new price is supplied
if not self.execute_entry(
pair=trade.pair,
stake_amount=(
order_obj.safe_remaining * order_obj.safe_price / trade.leverage),
price=adjusted_entry_price,
trade=trade,
is_short=trade.is_short,
mode='replace',
):
try:
if not self.execute_entry(
pair=trade.pair,
stake_amount=(
order_obj.safe_remaining * order_obj.safe_price / trade.leverage),
price=adjusted_entry_price,
trade=trade,
is_short=trade.is_short,
mode='replace',
):
self.replace_order_failed(
trade, f"Could not replace order for {trade}.")
except DependencyException as exception:
logger.warning(
f'Unable to replace order for {trade.pair}: {exception}')
self.replace_order_failed(trade, f"Could not replace order for {trade}.")
def cancel_all_open_orders(self) -> None:
@@ -1475,29 +1487,28 @@ class FreqtradeBot(LoggingMixin):
if order['side'] == trade.entry_side:
self.handle_cancel_enter(
trade, order, open_order.order_id, constants.CANCEL_REASON['ALL_CANCELLED']
trade, order, open_order, constants.CANCEL_REASON['ALL_CANCELLED']
)
elif order['side'] == trade.exit_side:
self.handle_cancel_exit(
trade, order, open_order.order_id, constants.CANCEL_REASON['ALL_CANCELLED']
trade, order, open_order, constants.CANCEL_REASON['ALL_CANCELLED']
)
Trade.commit()
def handle_cancel_enter(
self, trade: Trade, order: Dict, order_id: str,
self, trade: Trade, order: Dict, order_obj: Order,
reason: str, replacing: Optional[bool] = False
) -> bool:
"""
entry cancel - cancel order
:param order_obj: Order object from the database.
:param replacing: Replacing order - prevent trade deletion.
:return: True if trade was fully cancelled
"""
was_trade_fully_canceled = False
order_id = order_obj.order_id
side = trade.entry_side.capitalize()
if not trade.has_open_orders:
logger.warning(f"No open order for {trade}.")
return False
if order['status'] not in constants.NON_OPEN_EXCHANGE_STATES:
filled_val: float = order.get('filled', 0.0) or 0.0
@@ -1510,8 +1521,8 @@ class FreqtradeBot(LoggingMixin):
f"Order {order_id} for {trade.pair} not cancelled, "
f"as the filled amount of {filled_val} would result in an unexitable trade.")
return False
corder = self.exchange.cancel_order_with_result(order_id, trade.pair,
trade.amount)
corder = self.exchange.cancel_order_with_result(order_id, trade.pair, trade.amount)
order_obj.ft_cancel_reason = reason
# if replacing, retry fetching the order 3 times if the status is not what we need
if replacing:
retry_count = 0
@@ -1532,9 +1543,10 @@ class FreqtradeBot(LoggingMixin):
else:
# Order was cancelled already, so we can reuse the existing dict
corder = order
reason = constants.CANCEL_REASON['CANCELLED_ON_EXCHANGE']
if order_obj.ft_cancel_reason is None:
order_obj.ft_cancel_reason = constants.CANCEL_REASON['CANCELLED_ON_EXCHANGE']
logger.info(f'{side} order {reason} for {trade}.')
logger.info(f'{side} order {order_obj.ft_cancel_reason} for {trade}.')
# Using filled to determine the filled amount
filled_amount = safe_value_fallback2(corder, order, 'filled', 'filled')
@@ -1547,7 +1559,7 @@ class FreqtradeBot(LoggingMixin):
if open_order_count < 1 and trade.nr_of_successful_entries == 0 and not replacing:
logger.info(f'{side} order fully cancelled. Removing {trade} from database.')
trade.delete()
reason += f", {constants.CANCEL_REASON['FULLY_CANCELLED']}"
order_obj.ft_cancel_reason += f", {constants.CANCEL_REASON['FULLY_CANCELLED']}"
else:
self.update_trade_state(trade, order_id, corder)
logger.info(f'{side} Order timeout for {trade}.')
@@ -1557,21 +1569,21 @@ class FreqtradeBot(LoggingMixin):
self.update_trade_state(trade, order_id, corder)
logger.info(f'Partial {trade.entry_side} order timeout for {trade}.')
reason += f", {constants.CANCEL_REASON['PARTIALLY_FILLED']}"
order_obj.ft_cancel_reason += f", {constants.CANCEL_REASON['PARTIALLY_FILLED']}"
self.wallets.update()
self._notify_enter_cancel(trade, order_type=self.strategy.order_types['entry'],
reason=reason)
reason=order_obj.ft_cancel_reason)
return was_trade_fully_canceled
def handle_cancel_exit(
self, trade: Trade, order: Dict, order_id: str,
reason: str
self, trade: Trade, order: Dict, order_obj: Order, reason: str
) -> bool:
"""
exit order cancel - cancel order and update trade
:return: True if exit order was cancelled, false otherwise
"""
order_id = order_obj.order_id
cancelled = False
# Cancelled orders may have the status of 'canceled' or 'closed'
if order['status'] not in constants.NON_OPEN_EXCHANGE_STATES:
@@ -1596,7 +1608,7 @@ class FreqtradeBot(LoggingMixin):
sub_trade=trade.amount != order['amount']
)
return False
order_obj.ft_cancel_reason = reason
try:
order = self.exchange.cancel_order_with_result(
order['id'], trade.pair, trade.amount)
@@ -1615,19 +1627,22 @@ class FreqtradeBot(LoggingMixin):
trade.exit_reason = exit_reason_prev
cancelled = True
else:
reason = constants.CANCEL_REASON['CANCELLED_ON_EXCHANGE']
if order_obj.ft_cancel_reason is None:
order_obj.ft_cancel_reason = constants.CANCEL_REASON['CANCELLED_ON_EXCHANGE']
trade.exit_reason = None
self.update_trade_state(trade, order['id'], order)
logger.info(f'{trade.exit_side.capitalize()} order {reason} for {trade}.')
logger.info(
f'{trade.exit_side.capitalize()} order {order_obj.ft_cancel_reason} for {trade}.')
trade.close_rate = None
trade.close_rate_requested = None
self._notify_exit_cancel(
trade,
order_type=self.strategy.order_types['exit'],
reason=reason, order_id=order['id'], sub_trade=trade.amount != order['amount']
reason=order_obj.ft_cancel_reason, order_id=order['id'],
sub_trade=trade.amount != order['amount']
)
return cancelled
@@ -1679,15 +1694,13 @@ class FreqtradeBot(LoggingMixin):
:param exit_check: CheckTuple with signal and reason
:return: True if it succeeds False
"""
try:
trade.funding_fees = self.exchange.get_funding_fees(
trade.set_funding_fees(
self.exchange.get_funding_fees(
pair=trade.pair,
amount=trade.amount,
is_short=trade.is_short,
open_date=trade.date_last_filled_utc,
)
except ExchangeError:
logger.warning("Could not update funding fee.")
open_date=trade.date_last_filled_utc)
)
exit_type = 'exit'
exit_reason = exit_tag or exit_check.exit_reason
@@ -1748,6 +1761,7 @@ class FreqtradeBot(LoggingMixin):
return False
order_obj = Order.parse_from_ccxt_object(order, trade.pair, trade.exit_side, amount, limit)
order_obj.ft_order_tag = exit_reason
trade.orders.append(order_obj)
trade.exit_order_status = ''
@@ -1762,7 +1776,7 @@ class FreqtradeBot(LoggingMixin):
return True
def _notify_exit(self, trade: Trade, order_type: str, fill: bool = False,
def _notify_exit(self, trade: Trade, order_type: Optional[str], fill: bool = False,
sub_trade: bool = False, order: Optional[Order] = None) -> None:
"""
Sends rpc notification when a sell occurred.
@@ -1781,9 +1795,9 @@ class FreqtradeBot(LoggingMixin):
order_rate = trade.safe_close_rate
profit = trade.calculate_profit(rate=order_rate)
amount = trade.amount
gain = "profit" if profit.profit_ratio > 0 else "loss"
gain: ProfitLossStr = "profit" if profit.profit_ratio > 0 else "loss"
msg: RPCSellMsg = {
msg: RPCExitMsg = {
'type': (RPCMessageType.EXIT_FILL if fill
else RPCMessageType.EXIT),
'trade_id': trade.id,
@@ -1794,25 +1808,27 @@ class FreqtradeBot(LoggingMixin):
'gain': gain,
'limit': order_rate, # Deprecated
'order_rate': order_rate,
'order_type': order_type,
'order_type': order_type or 'unknown',
'amount': amount,
'open_rate': trade.open_rate,
'close_rate': order_rate,
'current_rate': current_rate,
'profit_amount': profit.profit_abs if fill else profit.total_profit,
'profit_amount': profit.profit_abs,
'profit_ratio': profit.profit_ratio,
'buy_tag': trade.enter_tag,
'enter_tag': trade.enter_tag,
'sell_reason': trade.exit_reason, # Deprecated
'exit_reason': trade.exit_reason,
'open_date': trade.open_date_utc,
'close_date': trade.close_date_utc or datetime.now(timezone.utc),
'stake_amount': trade.stake_amount,
'stake_currency': self.config['stake_currency'],
'base_currency': self.exchange.get_pair_base_currency(trade.pair),
'quote_currency': self.exchange.get_pair_quote_currency(trade.pair),
'fiat_currency': self.config.get('fiat_display_currency'),
'sub_trade': sub_trade,
'cumulative_profit': trade.realized_profit,
'final_profit_ratio': trade.close_profit if not trade.is_open else None,
'is_final_exit': trade.is_open is False,
}
# Send the message
@@ -1835,9 +1851,9 @@ class FreqtradeBot(LoggingMixin):
profit = trade.calculate_profit(rate=profit_rate)
current_rate = self.exchange.get_rate(
trade.pair, side='exit', is_short=trade.is_short, refresh=False)
gain = "profit" if profit.profit_ratio > 0 else "loss"
gain: ProfitLossStr = "profit" if profit.profit_ratio > 0 else "loss"
msg: RPCSellCancelMsg = {
msg: RPCExitCancelMsg = {
'type': RPCMessageType.EXIT_CANCEL,
'trade_id': trade.id,
'exchange': trade.exchange.capitalize(),
@@ -1854,12 +1870,12 @@ class FreqtradeBot(LoggingMixin):
'profit_ratio': profit.profit_ratio,
'buy_tag': trade.enter_tag,
'enter_tag': trade.enter_tag,
'sell_reason': trade.exit_reason, # Deprecated
'exit_reason': trade.exit_reason,
'open_date': trade.open_date,
'close_date': trade.close_date or datetime.now(timezone.utc),
'stake_currency': self.config['stake_currency'],
'base_currency': self.exchange.get_pair_base_currency(trade.pair),
'quote_currency': self.exchange.get_pair_quote_currency(trade.pair),
'fiat_currency': self.config.get('fiat_display_currency', None),
'reason': reason,
'sub_trade': sub_trade,
@@ -1910,7 +1926,7 @@ class FreqtradeBot(LoggingMixin):
if self.exchange.check_order_canceled_empty(order):
# Trade has been cancelled on exchange
# Handling of this will happen in check_handle_timedout.
# Handling of this will happen in handle_cancel_order.
return True
order_obj_or_none = trade.select_order_by_order_id(order_id)
@@ -1967,15 +1983,16 @@ class FreqtradeBot(LoggingMixin):
self, trade: Trade, order: Order, stoploss_order: bool, send_msg: bool):
"""send "fill" notifications"""
sub_trade = not isclose(order.safe_amount_after_fee,
trade.amount, abs_tol=constants.MATH_CLOSE_PREC)
if order.ft_order_side == trade.exit_side:
# Exit notification
if send_msg and not stoploss_order and order.order_id not in trade.open_orders_ids:
self._notify_exit(trade, '', fill=True, sub_trade=sub_trade, order=order)
self._notify_exit(trade, order.order_type, fill=True,
sub_trade=trade.is_open, order=order)
if not trade.is_open:
self.handle_protections(trade.pair, trade.trade_direction)
elif send_msg and order.order_id not in trade.open_orders_ids and not stoploss_order:
sub_trade = not isclose(order.safe_amount_after_fee,
trade.amount, abs_tol=constants.MATH_CLOSE_PREC)
# Enter fill
self._notify_enter(trade, order, order.order_type, fill=True, sub_trade=sub_trade)

View File

@@ -8,15 +8,13 @@ logger = logging.getLogger(__name__)
def set_loggers(verbosity: int = 0, api_verbosity: str = 'info') -> None:
"""
Set the logging level for third party libraries
:param verbosity: Verbosity level. amount of `-v` passed to the command line
:return: None
"""
logging.getLogger('requests').setLevel(
logging.INFO if verbosity <= 1 else logging.DEBUG
)
logging.getLogger("urllib3").setLevel(
logging.INFO if verbosity <= 1 else logging.DEBUG
)
for logger_name in ('requests', 'urllib3', 'httpcore'):
logging.getLogger(logger_name).setLevel(
logging.INFO if verbosity <= 1 else logging.DEBUG
)
logging.getLogger('ccxt.base.exchange').setLevel(
logging.INFO if verbosity <= 2 else logging.DEBUG
)

View File

@@ -3,6 +3,7 @@ Various tool function for Freqtrade and scripts
"""
import gzip
import logging
from io import StringIO
from pathlib import Path
from typing import Any, Dict, Iterator, List, Mapping, Optional, TextIO, Union
from urllib.parse import urlparse
@@ -10,41 +11,12 @@ from urllib.parse import urlparse
import pandas as pd
import rapidjson
from freqtrade.constants import DECIMAL_PER_COIN_FALLBACK, DECIMALS_PER_COIN
from freqtrade.enums import SignalTagType, SignalType
logger = logging.getLogger(__name__)
def decimals_per_coin(coin: str):
"""
Helper method getting decimal amount for this coin
example usage: f".{decimals_per_coin('USD')}f"
:param coin: Which coin are we printing the price / value for
"""
return DECIMALS_PER_COIN.get(coin, DECIMAL_PER_COIN_FALLBACK)
def round_coin_value(
value: float, coin: str, show_coin_name=True, keep_trailing_zeros=False) -> str:
"""
Get price value for this coin
:param value: Value to be printed
:param coin: Which coin are we printing the price / value for
:param show_coin_name: Return string in format: "222.22 USDT" or "222.22"
:param keep_trailing_zeros: Keep trailing zeros "222.200" vs. "222.2"
:return: Formatted / rounded value (with or without coin name)
"""
val = f"{value:.{decimals_per_coin(coin)}f}"
if not keep_trailing_zeros:
val = val.rstrip('0').rstrip('.')
if show_coin_name:
val = f"{val} {coin}"
return val
def file_dump_json(filename: Path, data: Any, is_zip: bool = False, log: bool = True) -> None:
"""
Dump JSON data into a file
@@ -231,7 +203,7 @@ def json_to_dataframe(data: str) -> pd.DataFrame:
:param data: A JSON string
:returns: A pandas DataFrame from the JSON string
"""
dataframe = pd.read_json(data, orient='split')
dataframe = pd.read_json(StringIO(data), orient='split')
if 'date' in dataframe.columns:
dataframe['date'] = pd.to_datetime(dataframe['date'], unit='ms', utc=True)

View File

View File

@@ -94,8 +94,8 @@ class LookaheadAnalysis(BaseAnalysis):
# compare_df now comprises tuples with [1] having either 'self' or 'other'
if 'other' in col_name[1]:
continue
self_value = compare_df_row[col_idx]
other_value = compare_df_row[col_idx + 1]
self_value = compare_df_row.iloc[col_idx]
other_value = compare_df_row.iloc[col_idx + 1]
# output differences
if self_value != other_value:

View File

@@ -7,7 +7,7 @@ import pandas as pd
from freqtrade.constants import Config
from freqtrade.exceptions import OperationalException
from freqtrade.optimize.lookahead_analysis import LookaheadAnalysis
from freqtrade.optimize.analysis.lookahead import LookaheadAnalysis
from freqtrade.resolvers import StrategyResolver

View File

@@ -64,7 +64,7 @@ class RecursiveAnalysis(BaseAnalysis):
self.dict_recursive[indicator][part.startup_candle] = f"{diff:.3f}%"
else:
logger.info("No difference found. Stop the process.")
logger.info("No variance on indicator(s) found due to recursive formula.")
break
# For lookahead bias check
@@ -100,7 +100,7 @@ class RecursiveAnalysis(BaseAnalysis):
# logger.info("part value {:.5f}".format(values_diff_other))
else:
logger.info("No lookahead bias on indicators found. Stop the process.")
logger.info("No lookahead bias on indicators found.")
def prepare_data(self, varholder: VarHolder, pairs_to_load: List[DataFrame]):
@@ -120,6 +120,7 @@ class RecursiveAnalysis(BaseAnalysis):
prepare_data_config['exchange']['pair_whitelist'] = pairs_to_load
backtesting = Backtesting(prepare_data_config, self.exchange)
self.exchange = backtesting.exchange
backtesting._set_strategy(backtesting.strategylist[0])
varholder.data, varholder.timerange = backtesting.load_bt_data()

View File

@@ -5,7 +5,7 @@ from typing import Any, Dict, List
from freqtrade.constants import Config
from freqtrade.exceptions import OperationalException
from freqtrade.optimize.recursive_analysis import RecursiveAnalysis
from freqtrade.optimize.analysis.recursive import RecursiveAnalysis
from freqtrade.resolvers import StrategyResolver
@@ -31,10 +31,13 @@ class RecursiveAnalysisSubFunctions:
temp_data.append(values.get(int(candle), '-'))
data.append(temp_data)
from tabulate import tabulate
table = tabulate(data, headers=headers, tablefmt="orgtbl")
print(table)
return table, headers, data
if len(data) > 0:
from tabulate import tabulate
table = tabulate(data, headers=headers, tablefmt="orgtbl")
print(table)
return table, headers, data
return None, None, data
@staticmethod
def calculate_config_overrides(config: Config):
@@ -81,8 +84,7 @@ class RecursiveAnalysisSubFunctions:
if not (strategy_list := config.get('strategy_list', [])):
if config.get('strategy') is None:
raise OperationalException(
"No Strategy specified. Please specify a strategy via --strategy or "
"--strategy-list"
"No Strategy specified. Please specify a strategy via --strategy"
)
strategy_list = [config['strategy']]
@@ -100,7 +102,5 @@ class RecursiveAnalysisSubFunctions:
RecursiveAnalysisSubFunctions.text_table_recursive_analysis_instances(
RecursiveAnalysis_instances)
else:
logger.error("There were no strategies specified neither through "
"--strategy nor through "
"--strategy-list "
logger.error("There was no strategy specified through --strategy "
"or timeframe was not specified.")

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