mirror of
https://github.com/freqtrade/freqtrade.git
synced 2025-11-29 00:23:07 +00:00
Compare commits
261 Commits
2025.10
...
67beeb6f26
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
67beeb6f26 | ||
|
|
f94acc9173 | ||
|
|
4eea0cca08 | ||
|
|
8274a6c3a9 | ||
|
|
f0a5b95ec0 | ||
|
|
e4dd3b2821 | ||
|
|
7698ee9f3d | ||
|
|
c5127ba522 | ||
|
|
024d2db2e2 | ||
|
|
f2498df99b | ||
|
|
37ce645bad | ||
|
|
d4188a093b | ||
|
|
bc3342b4d2 | ||
|
|
64cf284c07 | ||
|
|
15b0cc28f8 | ||
|
|
a647ceb753 | ||
|
|
54840a3f7e | ||
|
|
2b1ef1bf59 | ||
|
|
757439a594 | ||
|
|
73dccb0780 | ||
|
|
aa7aac3a14 | ||
|
|
2015ccc727 | ||
|
|
47301830b6 | ||
|
|
b7b280de96 | ||
|
|
7edc2e8c94 | ||
|
|
972e25a6a7 | ||
|
|
649db69314 | ||
|
|
d0fb4cdc37 | ||
|
|
efabcef330 | ||
|
|
a4e6ac0c7f | ||
|
|
0ce9149ddd | ||
|
|
2750643e07 | ||
|
|
b92535deea | ||
|
|
2fa0503993 | ||
|
|
3932470190 | ||
|
|
d901f4b10b | ||
|
|
8269384077 | ||
|
|
b364153d02 | ||
|
|
916d8324cb | ||
|
|
60309b9e57 | ||
|
|
a05d142af6 | ||
|
|
1feb11bac0 | ||
|
|
93936c9946 | ||
|
|
ce78039ea8 | ||
|
|
1db871e42d | ||
|
|
1513ba9af9 | ||
|
|
22b88249ff | ||
|
|
18f73af6e6 | ||
|
|
b8c835e24e | ||
|
|
2f392b483c | ||
|
|
220480327c | ||
|
|
2c6ff3f018 | ||
|
|
56a8fb4aae | ||
|
|
3f782fc482 | ||
|
|
d02e5f2b90 | ||
|
|
92fd9411e5 | ||
|
|
650cdf5eb3 | ||
|
|
060a1543e9 | ||
|
|
50402c5cdc | ||
|
|
0835414f24 | ||
|
|
6449074658 | ||
|
|
b8d558a455 | ||
|
|
4017b010f4 | ||
|
|
7e178cb032 | ||
|
|
e17936c407 | ||
|
|
f437d4a55b | ||
|
|
a731b73457 | ||
|
|
b5be462dd1 | ||
|
|
b55e7bcf4e | ||
|
|
d1e71544af | ||
|
|
6e1367fa94 | ||
|
|
58452ebc7c | ||
|
|
7b1dd61ae4 | ||
|
|
1321991fca | ||
|
|
8ae8b615b2 | ||
|
|
1c96dfd58f | ||
|
|
e67c2eefff | ||
|
|
2ea19f2ab0 | ||
|
|
44a6d2ead7 | ||
|
|
5fa314e4a8 | ||
|
|
89a8adcbcf | ||
|
|
57f216e9c7 | ||
|
|
927a771f2e | ||
|
|
3a1fffeeb7 | ||
|
|
9a5622fe33 | ||
|
|
ec51820074 | ||
|
|
4425e0cd40 | ||
|
|
97a830b4f0 | ||
|
|
cb28498890 | ||
|
|
1747114b57 | ||
|
|
1056b2562e | ||
|
|
64f680ed86 | ||
|
|
028c60ce5a | ||
|
|
d27ee227cb | ||
|
|
81c49136d1 | ||
|
|
4297207226 | ||
|
|
3877fb46de | ||
|
|
22707b8664 | ||
|
|
d2c380c83b | ||
|
|
bc516db3f8 | ||
|
|
5c0cf8f228 | ||
|
|
b753231d3c | ||
|
|
af728f8224 | ||
|
|
5000927939 | ||
|
|
89274bfcdb | ||
|
|
ef86b4113d | ||
|
|
38ff755533 | ||
|
|
70ec376657 | ||
|
|
1a506dc4b4 | ||
|
|
47451dd989 | ||
|
|
705849db3d | ||
|
|
14d3096a22 | ||
|
|
72889e2edb | ||
|
|
0f17b04b2f | ||
|
|
179a5ba6ed | ||
|
|
ed65b012b8 | ||
|
|
625629b9db | ||
|
|
9fa9f0860c | ||
|
|
5970881bb8 | ||
|
|
bed93429cd | ||
|
|
3af9089d51 | ||
|
|
3aed562806 | ||
|
|
7f32ce498b | ||
|
|
9e89ba6eed | ||
|
|
82309c3f47 | ||
|
|
d5613cf471 | ||
|
|
73f91eab15 | ||
|
|
35fb598017 | ||
|
|
40b9a836eb | ||
|
|
7189c0ff35 | ||
|
|
0eb206c7b3 | ||
|
|
728d2c9bcb | ||
|
|
f22feb7dee | ||
|
|
c6bf0e1843 | ||
|
|
68836cb7be | ||
|
|
706955e5fc | ||
|
|
9aec10b0f3 | ||
|
|
b6b817e051 | ||
|
|
40107b9380 | ||
|
|
8804850170 | ||
|
|
d246933c28 | ||
|
|
777ff1938e | ||
|
|
2846d9478e | ||
|
|
5d494eac51 | ||
|
|
e26c3cbe5a | ||
|
|
81a5056e1b | ||
|
|
1876656afc | ||
|
|
889ab7ea00 | ||
|
|
2d4b02f7e5 | ||
|
|
c5a339eaf3 | ||
|
|
1e50a2da53 | ||
|
|
7d1c2d3a1b | ||
|
|
a9f9b73a3a | ||
|
|
236df5be6f | ||
|
|
6ea83ba0e7 | ||
|
|
992c2f9e3e | ||
|
|
5e74700e31 | ||
|
|
4a225cab23 | ||
|
|
524ceebcbb | ||
|
|
f93c906614 | ||
|
|
b32ba68a6e | ||
|
|
649aff8076 | ||
|
|
a3efba019f | ||
|
|
ff4230af8a | ||
|
|
d1014ce3ce | ||
|
|
3bad6d3341 | ||
|
|
7526fd0e0d | ||
|
|
a2ec085dab | ||
|
|
cce7702e9c | ||
|
|
1cf7f4f9d8 | ||
|
|
1328df772b | ||
|
|
68dea691c2 | ||
|
|
f214942ff1 | ||
|
|
91866c1165 | ||
|
|
f73cbed843 | ||
|
|
5ad817f59e | ||
|
|
4a8f487b68 | ||
|
|
d1b553cecc | ||
|
|
1a2f261ee2 | ||
|
|
cfd4926f47 | ||
|
|
36593ec593 | ||
|
|
dc5f646f24 | ||
|
|
d7e4965cde | ||
|
|
e22bf5c681 | ||
|
|
007ab1b796 | ||
|
|
c748ac2aa2 | ||
|
|
c091426c44 | ||
|
|
ab28e43050 | ||
|
|
74a18bdb11 | ||
|
|
367b9fa7f6 | ||
|
|
8269333d9c | ||
|
|
d83f222a13 | ||
|
|
2ba9172526 | ||
|
|
465af62c16 | ||
|
|
231a145716 | ||
|
|
4cabbe4d52 | ||
|
|
72c87b7cbd | ||
|
|
3da6006a44 | ||
|
|
6f48b82297 | ||
|
|
ac51b41fdf | ||
|
|
4b0b306c44 | ||
|
|
fd0acc074c | ||
|
|
39c37980d5 | ||
|
|
6dc2547177 | ||
|
|
d1224367e5 | ||
|
|
c88a92b4f9 | ||
|
|
ffab6c3c50 | ||
|
|
cb7e04bfb0 | ||
|
|
c6a7b84684 | ||
|
|
97afb4a56a | ||
|
|
886c15a7fb | ||
|
|
e34e84c5c6 | ||
|
|
4cac68d774 | ||
|
|
a792744c0d | ||
|
|
384ed3fafb | ||
|
|
80ea476497 | ||
|
|
8ddbf4ba08 | ||
|
|
041d93a254 | ||
|
|
167f264bc4 | ||
|
|
5c036f5fcc | ||
|
|
964ed8099c | ||
|
|
71b169616f | ||
|
|
d824755597 | ||
|
|
8e41699348 | ||
|
|
a580ba1903 | ||
|
|
edcb3696f1 | ||
|
|
f1f07a1764 | ||
|
|
5139ea4e1c | ||
|
|
fdf9d4da81 | ||
|
|
65267b2bb7 | ||
|
|
420bb720c1 | ||
|
|
bfbb6404e6 | ||
|
|
6ffc88b3b3 | ||
|
|
54501b5c16 | ||
|
|
d7ef5e8bd2 | ||
|
|
c7e64360cd | ||
|
|
55b66ca5e6 | ||
|
|
1fc6cf4c89 | ||
|
|
918e7c4bf8 | ||
|
|
cfc406709c | ||
|
|
9f55dac605 | ||
|
|
00a6575fb4 | ||
|
|
c6eb63ab77 | ||
|
|
db63d433f7 | ||
|
|
635af046bf | ||
|
|
86381955a3 | ||
|
|
3cfa366ec9 | ||
|
|
baa5b1a58e | ||
|
|
5be0a9c069 | ||
|
|
8978da7c20 | ||
|
|
b3bbb92358 | ||
|
|
06ac40fdbb | ||
|
|
d38d8167d8 | ||
|
|
5684d0de0b | ||
|
|
a2f887aabb | ||
|
|
f72e708627 | ||
|
|
781d8501cb | ||
|
|
015f1055a7 | ||
|
|
2466cf85a1 | ||
|
|
e6ddeef07f | ||
|
|
614b85e833 |
16
.github/workflows/ci.yml
vendored
16
.github/workflows/ci.yml
vendored
@@ -38,7 +38,7 @@ jobs:
|
|||||||
python-version: ${{ matrix.python-version }}
|
python-version: ${{ matrix.python-version }}
|
||||||
|
|
||||||
- name: Install uv
|
- name: Install uv
|
||||||
uses: astral-sh/setup-uv@3259c6206f993105e3a61b142c2d97bf4b9ef83d # v7.1.0
|
uses: astral-sh/setup-uv@85856786d1ce8acfbcc2f13a5f3fbd6b938f9f41 # v7.1.2
|
||||||
with:
|
with:
|
||||||
activate-environment: true
|
activate-environment: true
|
||||||
enable-cache: true
|
enable-cache: true
|
||||||
@@ -91,12 +91,12 @@ jobs:
|
|||||||
|
|
||||||
- name: Run command docs partials extract
|
- name: Run command docs partials extract
|
||||||
# This should be kept before the repository check to ensure that the docs are up-to-date
|
# This should be kept before the repository check to ensure that the docs are up-to-date
|
||||||
|
if: ${{ (matrix.python-version == '3.13') }}
|
||||||
run: |
|
run: |
|
||||||
python build_helpers/create_command_partials.py
|
python build_helpers/create_command_partials.py
|
||||||
|
|
||||||
- name: Check for repository changes - *nix
|
- name: Check for repository changes - *nix
|
||||||
# TODO: python 3.13 slightly changed the output of argparse.
|
if: ${{ (runner.os != 'Windows') }}
|
||||||
if: ${{ (matrix.python-version != '3.13') && (runner.os != 'Windows') }}
|
|
||||||
run: |
|
run: |
|
||||||
if [ -n "$(git status --porcelain)" ]; then
|
if [ -n "$(git status --porcelain)" ]; then
|
||||||
echo "Repository is dirty, changes detected:"
|
echo "Repository is dirty, changes detected:"
|
||||||
@@ -248,7 +248,7 @@ jobs:
|
|||||||
python-version: "3.12"
|
python-version: "3.12"
|
||||||
|
|
||||||
- name: Install uv
|
- name: Install uv
|
||||||
uses: astral-sh/setup-uv@3259c6206f993105e3a61b142c2d97bf4b9ef83d # v7.1.0
|
uses: astral-sh/setup-uv@85856786d1ce8acfbcc2f13a5f3fbd6b938f9f41 # v7.1.2
|
||||||
with:
|
with:
|
||||||
activate-environment: true
|
activate-environment: true
|
||||||
enable-cache: true
|
enable-cache: true
|
||||||
@@ -324,7 +324,7 @@ jobs:
|
|||||||
python -m build --sdist --wheel
|
python -m build --sdist --wheel
|
||||||
|
|
||||||
- name: Upload artifacts 📦
|
- name: Upload artifacts 📦
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v5
|
||||||
with:
|
with:
|
||||||
name: freqtrade-build
|
name: freqtrade-build
|
||||||
path: |
|
path: |
|
||||||
@@ -337,7 +337,7 @@ jobs:
|
|||||||
python -m build --sdist --wheel ft_client
|
python -m build --sdist --wheel ft_client
|
||||||
|
|
||||||
- name: Upload artifacts 📦
|
- name: Upload artifacts 📦
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v5
|
||||||
with:
|
with:
|
||||||
name: freqtrade-client-build
|
name: freqtrade-client-build
|
||||||
path: |
|
path: |
|
||||||
@@ -361,7 +361,7 @@ jobs:
|
|||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
|
|
||||||
- name: Download artifact 📦
|
- name: Download artifact 📦
|
||||||
uses: actions/download-artifact@v5
|
uses: actions/download-artifact@v6
|
||||||
with:
|
with:
|
||||||
pattern: freqtrade*-build
|
pattern: freqtrade*-build
|
||||||
path: dist
|
path: dist
|
||||||
@@ -390,7 +390,7 @@ jobs:
|
|||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
|
|
||||||
- name: Download artifact 📦
|
- name: Download artifact 📦
|
||||||
uses: actions/download-artifact@v5
|
uses: actions/download-artifact@v6
|
||||||
with:
|
with:
|
||||||
pattern: freqtrade*-build
|
pattern: freqtrade*-build
|
||||||
path: dist
|
path: dist
|
||||||
|
|||||||
2
.github/workflows/docker-build.yml
vendored
2
.github/workflows/docker-build.yml
vendored
@@ -48,7 +48,7 @@ jobs:
|
|||||||
password: ${{ secrets.DOCKER_PASSWORD }}
|
password: ${{ secrets.DOCKER_PASSWORD }}
|
||||||
|
|
||||||
- name: Set up QEMU
|
- name: Set up QEMU
|
||||||
uses: docker/setup-qemu-action@29109295f81e9208d7d86ff1c6c12d2833863392 # v3.6.0
|
uses: docker/setup-qemu-action@c7c53464625b32c7a7e944ae62b3e17d2b600130 # v3.7.0
|
||||||
with:
|
with:
|
||||||
cache-image: false
|
cache-image: false
|
||||||
|
|
||||||
|
|||||||
@@ -30,8 +30,8 @@ repos:
|
|||||||
- types-filelock==3.2.7
|
- types-filelock==3.2.7
|
||||||
- types-requests==2.32.4.20250913
|
- types-requests==2.32.4.20250913
|
||||||
- types-tabulate==0.9.0.20241207
|
- types-tabulate==0.9.0.20241207
|
||||||
- types-python-dateutil==2.9.0.20251008
|
- types-python-dateutil==2.9.0.20251115
|
||||||
- scipy-stubs==1.16.2.4
|
- scipy-stubs==1.16.3.0
|
||||||
- SQLAlchemy==2.0.44
|
- SQLAlchemy==2.0.44
|
||||||
# stages: [push]
|
# stages: [push]
|
||||||
|
|
||||||
@@ -44,7 +44,7 @@ repos:
|
|||||||
|
|
||||||
- repo: https://github.com/charliermarsh/ruff-pre-commit
|
- repo: https://github.com/charliermarsh/ruff-pre-commit
|
||||||
# Ruff version.
|
# Ruff version.
|
||||||
rev: 'v0.14.2'
|
rev: 'v0.14.6'
|
||||||
hooks:
|
hooks:
|
||||||
- id: ruff
|
- id: ruff
|
||||||
- id: ruff-format
|
- id: ruff-format
|
||||||
@@ -83,6 +83,6 @@ repos:
|
|||||||
|
|
||||||
# Ensure github actions remain safe
|
# Ensure github actions remain safe
|
||||||
- repo: https://github.com/woodruffw/zizmor-pre-commit
|
- repo: https://github.com/woodruffw/zizmor-pre-commit
|
||||||
rev: v1.16.0
|
rev: v1.16.3
|
||||||
hooks:
|
hooks:
|
||||||
- id: zizmor
|
- id: zizmor
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# 
|
# 
|
||||||
|
|
||||||
[](https://github.com/freqtrade/freqtrade/actions/)
|
[](https://github.com/freqtrade/freqtrade/actions/workflows/ci.yml)
|
||||||
[](https://doi.org/10.21105/joss.04864)
|
[](https://doi.org/10.21105/joss.04864)
|
||||||
[](https://coveralls.io/github/freqtrade/freqtrade?branch=develop)
|
[](https://coveralls.io/github/freqtrade/freqtrade?branch=develop)
|
||||||
[](https://www.freqtrade.io)
|
[](https://www.freqtrade.io)
|
||||||
|
|||||||
@@ -1,53 +1,71 @@
|
|||||||
import subprocess # noqa: S404, RUF100
|
import subprocess # noqa: S404, RUF100
|
||||||
|
import sys
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
|
|
||||||
subcommands = [
|
def _write_partial_file(filename: str, content: str):
|
||||||
"trade",
|
with Path(filename).open("w") as f:
|
||||||
"create-userdir",
|
f.write(f"``` output\n{content}\n```\n")
|
||||||
"new-config",
|
|
||||||
"show-config",
|
|
||||||
"new-strategy",
|
|
||||||
"download-data",
|
|
||||||
"convert-data",
|
|
||||||
"convert-trade-data",
|
|
||||||
"trades-to-ohlcv",
|
|
||||||
"list-data",
|
|
||||||
"backtesting",
|
|
||||||
"backtesting-show",
|
|
||||||
"backtesting-analysis",
|
|
||||||
"edge",
|
|
||||||
"hyperopt",
|
|
||||||
"hyperopt-list",
|
|
||||||
"hyperopt-show",
|
|
||||||
"list-exchanges",
|
|
||||||
"list-markets",
|
|
||||||
"list-pairs",
|
|
||||||
"list-strategies",
|
|
||||||
"list-hyperoptloss",
|
|
||||||
"list-freqaimodels",
|
|
||||||
"list-timeframes",
|
|
||||||
"show-trades",
|
|
||||||
"test-pairlist",
|
|
||||||
"convert-db",
|
|
||||||
"install-ui",
|
|
||||||
"plot-dataframe",
|
|
||||||
"plot-profit",
|
|
||||||
"webserver",
|
|
||||||
"strategy-updater",
|
|
||||||
"lookahead-analysis",
|
|
||||||
"recursive-analysis",
|
|
||||||
]
|
|
||||||
|
|
||||||
result = subprocess.run(["freqtrade", "--help"], capture_output=True, text=True)
|
|
||||||
|
|
||||||
with Path("docs/commands/main.md").open("w") as f:
|
|
||||||
f.write(f"```\n{result.stdout}\n```\n")
|
|
||||||
|
|
||||||
|
|
||||||
for command in subcommands:
|
def extract_command_partials():
|
||||||
print(f"Running for {command}")
|
subcommands = [
|
||||||
result = subprocess.run(["freqtrade", command, "--help"], capture_output=True, text=True)
|
"trade",
|
||||||
|
"create-userdir",
|
||||||
|
"new-config",
|
||||||
|
"show-config",
|
||||||
|
"new-strategy",
|
||||||
|
"download-data",
|
||||||
|
"convert-data",
|
||||||
|
"convert-trade-data",
|
||||||
|
"trades-to-ohlcv",
|
||||||
|
"list-data",
|
||||||
|
"backtesting",
|
||||||
|
"backtesting-show",
|
||||||
|
"backtesting-analysis",
|
||||||
|
"edge",
|
||||||
|
"hyperopt",
|
||||||
|
"hyperopt-list",
|
||||||
|
"hyperopt-show",
|
||||||
|
"list-exchanges",
|
||||||
|
"list-markets",
|
||||||
|
"list-pairs",
|
||||||
|
"list-strategies",
|
||||||
|
"list-hyperoptloss",
|
||||||
|
"list-freqaimodels",
|
||||||
|
"list-timeframes",
|
||||||
|
"show-trades",
|
||||||
|
"test-pairlist",
|
||||||
|
"convert-db",
|
||||||
|
"install-ui",
|
||||||
|
"plot-dataframe",
|
||||||
|
"plot-profit",
|
||||||
|
"webserver",
|
||||||
|
"strategy-updater",
|
||||||
|
"lookahead-analysis",
|
||||||
|
"recursive-analysis",
|
||||||
|
]
|
||||||
|
|
||||||
with Path(f"docs/commands/{command}.md").open("w") as f:
|
result = subprocess.run(["freqtrade", "--help"], capture_output=True, text=True)
|
||||||
f.write(f"```\n{result.stdout}\n```\n")
|
|
||||||
|
_write_partial_file("docs/commands/main.md", result.stdout)
|
||||||
|
|
||||||
|
for command in subcommands:
|
||||||
|
print(f"Running for {command}")
|
||||||
|
result = subprocess.run(["freqtrade", command, "--help"], capture_output=True, text=True)
|
||||||
|
|
||||||
|
_write_partial_file(f"docs/commands/{command}.md", result.stdout)
|
||||||
|
|
||||||
|
print("Running for freqtrade-client")
|
||||||
|
result_client = subprocess.run(["freqtrade-client", "--show"], capture_output=True, text=True)
|
||||||
|
|
||||||
|
_write_partial_file("docs/commands/freqtrade-client.md", result_client.stdout)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
if sys.version_info < (3, 13): # pragma: no cover
|
||||||
|
sys.exit(
|
||||||
|
"argparse output changed in Python 3.13+. "
|
||||||
|
"To keep command partials up to date, please run this script with Python 3.13+."
|
||||||
|
)
|
||||||
|
extract_command_partials()
|
||||||
|
|||||||
Binary file not shown.
@@ -273,6 +273,68 @@
|
|||||||
]
|
]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"backtest_cache": {
|
||||||
|
"description": "Load a cached backtest result no older than specified age.",
|
||||||
|
"type": "string",
|
||||||
|
"enum": [
|
||||||
|
"none",
|
||||||
|
"day",
|
||||||
|
"week",
|
||||||
|
"month"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"hyperopt_path": {
|
||||||
|
"description": "Specify additional lookup path for Hyperopt Loss functions.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"epochs": {
|
||||||
|
"description": "Number of training epochs for Hyperopt.",
|
||||||
|
"type": "integer",
|
||||||
|
"minimum": 1
|
||||||
|
},
|
||||||
|
"early_stop": {
|
||||||
|
"description": "Early stop hyperopt if no improvement after <epochs>. Set to 0 to disable.",
|
||||||
|
"type": "integer",
|
||||||
|
"minimum": 0
|
||||||
|
},
|
||||||
|
"spaces": {
|
||||||
|
"description": "Hyperopt parameter spaces to optimize. Default is the default set andincludes all spaces except for 'trailing', 'protection', and 'trades'.",
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"default": [
|
||||||
|
"default"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"analyze_per_epoch": {
|
||||||
|
"description": "Perform analysis after each epoch in Hyperopt.",
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"print_all": {
|
||||||
|
"description": "Print all hyperopt trials, not just the best ones.",
|
||||||
|
"type": "boolean",
|
||||||
|
"default": false
|
||||||
|
},
|
||||||
|
"hyperopt_jobs": {
|
||||||
|
"description": "The number of concurrently running jobs for hyperoptimization (hyperopt worker processes). If -1 (default), all CPUs are used, for -2, all CPUs but one are used, etc. If 1 is given, no parallel computing is used.",
|
||||||
|
"type": "integer",
|
||||||
|
"default": -1
|
||||||
|
},
|
||||||
|
"hyperopt_random_state": {
|
||||||
|
"description": "Random state for hyperopt trials.",
|
||||||
|
"type": "integer",
|
||||||
|
"minimum": 0
|
||||||
|
},
|
||||||
|
"hyperopt_min_trades": {
|
||||||
|
"description": "Minimum number of trades per epoch for hyperopt.",
|
||||||
|
"type": "integer",
|
||||||
|
"minimum": 0
|
||||||
|
},
|
||||||
|
"hyperopt_loss": {
|
||||||
|
"description": "The class name of the hyperopt loss function class (IHyperOptLoss). Different functions can generate completely different results, since the target for optimization is different. Built-in Hyperopt-loss-functions are: ShortTradeDurHyperOptLoss, OnlyProfitHyperOptLoss, SharpeHyperOptLoss, SharpeHyperOptLossDaily, SortinoHyperOptLoss, SortinoHyperOptLossDaily, CalmarHyperOptLoss, MaxDrawDownHyperOptLoss, MaxDrawDownRelativeHyperOptLoss, MaxDrawDownPerPairHyperOptLoss, ProfitDrawDownHyperOptLoss, MultiMetricHyperOptLoss",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
"bot_name": {
|
"bot_name": {
|
||||||
"description": "Name of the trading bot. Passed via API to a client.",
|
"description": "Name of the trading bot. Passed via API to a client.",
|
||||||
"type": "string"
|
"type": "string"
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
```
|
``` output
|
||||||
usage: freqtrade backtesting-analysis [-h] [-v] [--no-color] [--logfile FILE]
|
usage: freqtrade backtesting-analysis [-h] [-v] [--no-color] [--logfile FILE]
|
||||||
[-V] [-c PATH] [-d PATH]
|
[-V] [-c PATH] [-d PATH]
|
||||||
[--userdir PATH]
|
[--userdir PATH]
|
||||||
@@ -15,13 +15,13 @@ usage: freqtrade backtesting-analysis [-h] [-v] [--no-color] [--logfile FILE]
|
|||||||
|
|
||||||
options:
|
options:
|
||||||
-h, --help show this help message and exit
|
-h, --help show this help message and exit
|
||||||
--backtest-filename PATH, --export-filename PATH
|
--backtest-filename, --export-filename PATH
|
||||||
Use this filename for backtest results.Example:
|
Use this filename for backtest results.Example:
|
||||||
`--backtest-
|
`--backtest-
|
||||||
filename=backtest_results_2020-09-27_16-20-48.json`.
|
filename=backtest_results_2020-09-27_16-20-48.json`.
|
||||||
Assumes either `user_data/backtest_results/` or
|
Assumes either `user_data/backtest_results/` or
|
||||||
`--export-directory` as base directory.
|
`--export-directory` as base directory.
|
||||||
--backtest-directory PATH, --export-directory PATH
|
--backtest-directory, --export-directory PATH
|
||||||
Directory to use for backtest results. Example:
|
Directory to use for backtest results. Example:
|
||||||
`--export-directory=user_data/backtest_results/`.
|
`--export-directory=user_data/backtest_results/`.
|
||||||
--analysis-groups {0,1,2,3,4,5} [{0,1,2,3,4,5} ...]
|
--analysis-groups {0,1,2,3,4,5} [{0,1,2,3,4,5} ...]
|
||||||
@@ -54,21 +54,20 @@ Common arguments:
|
|||||||
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
|
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
|
||||||
--no-color Disable colorization of hyperopt results. May be
|
--no-color Disable colorization of hyperopt results. May be
|
||||||
useful if you are redirecting output to a file.
|
useful if you are redirecting output to a file.
|
||||||
--logfile FILE, --log-file FILE
|
--logfile, --log-file FILE
|
||||||
Log to the file specified. Special values are:
|
Log to the file specified. Special values are:
|
||||||
'syslog', 'journald'. See the documentation for more
|
'syslog', 'journald'. See the documentation for more
|
||||||
details.
|
details.
|
||||||
-V, --version show program's version number and exit
|
-V, --version show program's version number and exit
|
||||||
-c PATH, --config PATH
|
-c, --config PATH Specify configuration file (default:
|
||||||
Specify configuration file (default:
|
|
||||||
`userdir/config.json` or `config.json` whichever
|
`userdir/config.json` or `config.json` whichever
|
||||||
exists). Multiple --config options may be used. Can be
|
exists). Multiple --config options may be used. Can be
|
||||||
set to `-` to read config from stdin.
|
set to `-` to read config from stdin.
|
||||||
-d PATH, --datadir PATH, --data-dir PATH
|
-d, --datadir, --data-dir PATH
|
||||||
Path to the base directory of the exchange with
|
Path to the base directory of the exchange with
|
||||||
historical backtesting data. To see futures data, use
|
historical backtesting data. To see futures data, use
|
||||||
trading-mode additionally.
|
trading-mode additionally.
|
||||||
--userdir PATH, --user-data-dir PATH
|
--userdir, --user-data-dir PATH
|
||||||
Path to userdata directory.
|
Path to userdata directory.
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
```
|
``` output
|
||||||
usage: freqtrade backtesting-show [-h] [-v] [--no-color] [--logfile FILE] [-V]
|
usage: freqtrade backtesting-show [-h] [-v] [--no-color] [--logfile FILE] [-V]
|
||||||
[-c PATH] [-d PATH] [--userdir PATH]
|
[-c PATH] [-d PATH] [--userdir PATH]
|
||||||
[--backtest-filename PATH]
|
[--backtest-filename PATH]
|
||||||
@@ -8,13 +8,13 @@ usage: freqtrade backtesting-show [-h] [-v] [--no-color] [--logfile FILE] [-V]
|
|||||||
|
|
||||||
options:
|
options:
|
||||||
-h, --help show this help message and exit
|
-h, --help show this help message and exit
|
||||||
--backtest-filename PATH, --export-filename PATH
|
--backtest-filename, --export-filename PATH
|
||||||
Use this filename for backtest results.Example:
|
Use this filename for backtest results.Example:
|
||||||
`--backtest-
|
`--backtest-
|
||||||
filename=backtest_results_2020-09-27_16-20-48.json`.
|
filename=backtest_results_2020-09-27_16-20-48.json`.
|
||||||
Assumes either `user_data/backtest_results/` or
|
Assumes either `user_data/backtest_results/` or
|
||||||
`--export-directory` as base directory.
|
`--export-directory` as base directory.
|
||||||
--backtest-directory PATH, --export-directory PATH
|
--backtest-directory, --export-directory PATH
|
||||||
Directory to use for backtest results. Example:
|
Directory to use for backtest results. Example:
|
||||||
`--export-directory=user_data/backtest_results/`.
|
`--export-directory=user_data/backtest_results/`.
|
||||||
--show-pair-list Show backtesting pairlist sorted by profit.
|
--show-pair-list Show backtesting pairlist sorted by profit.
|
||||||
@@ -26,21 +26,20 @@ Common arguments:
|
|||||||
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
|
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
|
||||||
--no-color Disable colorization of hyperopt results. May be
|
--no-color Disable colorization of hyperopt results. May be
|
||||||
useful if you are redirecting output to a file.
|
useful if you are redirecting output to a file.
|
||||||
--logfile FILE, --log-file FILE
|
--logfile, --log-file FILE
|
||||||
Log to the file specified. Special values are:
|
Log to the file specified. Special values are:
|
||||||
'syslog', 'journald'. See the documentation for more
|
'syslog', 'journald'. See the documentation for more
|
||||||
details.
|
details.
|
||||||
-V, --version show program's version number and exit
|
-V, --version show program's version number and exit
|
||||||
-c PATH, --config PATH
|
-c, --config PATH Specify configuration file (default:
|
||||||
Specify configuration file (default:
|
|
||||||
`userdir/config.json` or `config.json` whichever
|
`userdir/config.json` or `config.json` whichever
|
||||||
exists). Multiple --config options may be used. Can be
|
exists). Multiple --config options may be used. Can be
|
||||||
set to `-` to read config from stdin.
|
set to `-` to read config from stdin.
|
||||||
-d PATH, --datadir PATH, --data-dir PATH
|
-d, --datadir, --data-dir PATH
|
||||||
Path to the base directory of the exchange with
|
Path to the base directory of the exchange with
|
||||||
historical backtesting data. To see futures data, use
|
historical backtesting data. To see futures data, use
|
||||||
trading-mode additionally.
|
trading-mode additionally.
|
||||||
--userdir PATH, --user-data-dir PATH
|
--userdir, --user-data-dir PATH
|
||||||
Path to userdata directory.
|
Path to userdata directory.
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
```
|
``` output
|
||||||
usage: freqtrade backtesting [-h] [-v] [--no-color] [--logfile FILE] [-V]
|
usage: freqtrade backtesting [-h] [-v] [--no-color] [--logfile FILE] [-V]
|
||||||
[-c PATH] [-d PATH] [--userdir PATH] [-s NAME]
|
[-c PATH] [-d PATH] [--userdir PATH] [-s NAME]
|
||||||
[--strategy-path PATH]
|
[--strategy-path PATH]
|
||||||
@@ -23,7 +23,7 @@ usage: freqtrade backtesting [-h] [-v] [--no-color] [--logfile FILE] [-V]
|
|||||||
|
|
||||||
options:
|
options:
|
||||||
-h, --help show this help message and exit
|
-h, --help show this help message and exit
|
||||||
-i TIMEFRAME, --timeframe TIMEFRAME
|
-i, --timeframe TIMEFRAME
|
||||||
Specify timeframe (`1m`, `5m`, `30m`, `1h`, `1d`).
|
Specify timeframe (`1m`, `5m`, `30m`, `1h`, `1d`).
|
||||||
--timerange TIMERANGE
|
--timerange TIMERANGE
|
||||||
Specify what timerange of data to use.
|
Specify what timerange of data to use.
|
||||||
@@ -38,7 +38,7 @@ options:
|
|||||||
setting.
|
setting.
|
||||||
--fee FLOAT Specify fee ratio. Will be applied twice (on trade
|
--fee FLOAT Specify fee ratio. Will be applied twice (on trade
|
||||||
entry and exit).
|
entry and exit).
|
||||||
-p PAIRS [PAIRS ...], --pairs PAIRS [PAIRS ...]
|
-p, --pairs PAIRS [PAIRS ...]
|
||||||
Limit command to these pairs. Pairs are space-
|
Limit command to these pairs. Pairs are space-
|
||||||
separated.
|
separated.
|
||||||
--eps, --enable-position-stacking
|
--eps, --enable-position-stacking
|
||||||
@@ -53,7 +53,7 @@ options:
|
|||||||
pairlist will be generated for each new candle if
|
pairlist will be generated for each new candle if
|
||||||
you're using a pairlist handler that supports this
|
you're using a pairlist handler that supports this
|
||||||
feature, for example, ShuffleFilter.
|
feature, for example, ShuffleFilter.
|
||||||
--dry-run-wallet DRY_RUN_WALLET, --starting-balance DRY_RUN_WALLET
|
--dry-run-wallet, --starting-balance DRY_RUN_WALLET
|
||||||
Starting balance, used for backtesting / hyperopt and
|
Starting balance, used for backtesting / hyperopt and
|
||||||
dry-runs.
|
dry-runs.
|
||||||
--timeframe-detail TIMEFRAME_DETAIL
|
--timeframe-detail TIMEFRAME_DETAIL
|
||||||
@@ -68,13 +68,13 @@ options:
|
|||||||
becomes `backtest-data-SampleStrategy.json`
|
becomes `backtest-data-SampleStrategy.json`
|
||||||
--export {none,trades,signals}
|
--export {none,trades,signals}
|
||||||
Export backtest results (default: trades).
|
Export backtest results (default: trades).
|
||||||
--backtest-filename PATH, --export-filename PATH
|
--backtest-filename, --export-filename PATH
|
||||||
Use this filename for backtest results.Example:
|
Use this filename for backtest results.Example:
|
||||||
`--backtest-
|
`--backtest-
|
||||||
filename=backtest_results_2020-09-27_16-20-48.json`.
|
filename=backtest_results_2020-09-27_16-20-48.json`.
|
||||||
Assumes either `user_data/backtest_results/` or
|
Assumes either `user_data/backtest_results/` or
|
||||||
`--export-directory` as base directory.
|
`--export-directory` as base directory.
|
||||||
--backtest-directory PATH, --export-directory PATH
|
--backtest-directory, --export-directory PATH
|
||||||
Directory to use for backtest results. Example:
|
Directory to use for backtest results. Example:
|
||||||
`--export-directory=user_data/backtest_results/`.
|
`--export-directory=user_data/backtest_results/`.
|
||||||
--breakdown {day,week,month,year,weekday} [{day,week,month,year,weekday} ...]
|
--breakdown {day,week,month,year,weekday} [{day,week,month,year,weekday} ...]
|
||||||
@@ -91,26 +91,24 @@ Common arguments:
|
|||||||
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
|
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
|
||||||
--no-color Disable colorization of hyperopt results. May be
|
--no-color Disable colorization of hyperopt results. May be
|
||||||
useful if you are redirecting output to a file.
|
useful if you are redirecting output to a file.
|
||||||
--logfile FILE, --log-file FILE
|
--logfile, --log-file FILE
|
||||||
Log to the file specified. Special values are:
|
Log to the file specified. Special values are:
|
||||||
'syslog', 'journald'. See the documentation for more
|
'syslog', 'journald'. See the documentation for more
|
||||||
details.
|
details.
|
||||||
-V, --version show program's version number and exit
|
-V, --version show program's version number and exit
|
||||||
-c PATH, --config PATH
|
-c, --config PATH Specify configuration file (default:
|
||||||
Specify configuration file (default:
|
|
||||||
`userdir/config.json` or `config.json` whichever
|
`userdir/config.json` or `config.json` whichever
|
||||||
exists). Multiple --config options may be used. Can be
|
exists). Multiple --config options may be used. Can be
|
||||||
set to `-` to read config from stdin.
|
set to `-` to read config from stdin.
|
||||||
-d PATH, --datadir PATH, --data-dir PATH
|
-d, --datadir, --data-dir PATH
|
||||||
Path to the base directory of the exchange with
|
Path to the base directory of the exchange with
|
||||||
historical backtesting data. To see futures data, use
|
historical backtesting data. To see futures data, use
|
||||||
trading-mode additionally.
|
trading-mode additionally.
|
||||||
--userdir PATH, --user-data-dir PATH
|
--userdir, --user-data-dir PATH
|
||||||
Path to userdata directory.
|
Path to userdata directory.
|
||||||
|
|
||||||
Strategy arguments:
|
Strategy arguments:
|
||||||
-s NAME, --strategy NAME
|
-s, --strategy NAME Specify strategy class name which will be used by the
|
||||||
Specify strategy class name which will be used by the
|
|
||||||
bot.
|
bot.
|
||||||
--strategy-path PATH Specify additional strategy lookup path.
|
--strategy-path PATH Specify additional strategy lookup path.
|
||||||
--recursive-strategy-search
|
--recursive-strategy-search
|
||||||
|
|||||||
@@ -1,17 +1,17 @@
|
|||||||
```
|
``` output
|
||||||
usage: freqtrade convert-data [-h] [-v] [--no-color] [--logfile FILE] [-V]
|
usage: freqtrade convert-data [-h] [-v] [--no-color] [--logfile FILE] [-V]
|
||||||
[-c PATH] [-d PATH] [--userdir PATH]
|
[-c PATH] [-d PATH] [--userdir PATH]
|
||||||
[-p PAIRS [PAIRS ...]] --format-from
|
[-p PAIRS [PAIRS ...]]
|
||||||
{json,jsongz,feather,parquet} --format-to
|
--format-from {json,jsongz,feather,parquet}
|
||||||
{json,jsongz,feather,parquet} [--erase]
|
--format-to {json,jsongz,feather,parquet}
|
||||||
[--exchange EXCHANGE]
|
[--erase] [--exchange EXCHANGE]
|
||||||
[-t TIMEFRAMES [TIMEFRAMES ...]]
|
[-t TIMEFRAMES [TIMEFRAMES ...]]
|
||||||
[--trading-mode {spot,margin,futures}]
|
[--trading-mode {spot,margin,futures}]
|
||||||
[--candle-types {spot,futures,mark,index,premiumIndex,funding_rate} [{spot,futures,mark,index,premiumIndex,funding_rate} ...]]
|
[--candle-types {spot,futures,mark,index,premiumIndex,funding_rate} [{spot,futures,mark,index,premiumIndex,funding_rate} ...]]
|
||||||
|
|
||||||
options:
|
options:
|
||||||
-h, --help show this help message and exit
|
-h, --help show this help message and exit
|
||||||
-p PAIRS [PAIRS ...], --pairs PAIRS [PAIRS ...]
|
-p, --pairs PAIRS [PAIRS ...]
|
||||||
Limit command to these pairs. Pairs are space-
|
Limit command to these pairs. Pairs are space-
|
||||||
separated.
|
separated.
|
||||||
--format-from {json,jsongz,feather,parquet}
|
--format-from {json,jsongz,feather,parquet}
|
||||||
@@ -21,10 +21,10 @@ options:
|
|||||||
--erase Clean all existing data for the selected
|
--erase Clean all existing data for the selected
|
||||||
exchange/pairs/timeframes.
|
exchange/pairs/timeframes.
|
||||||
--exchange EXCHANGE Exchange name. Only valid if no config is provided.
|
--exchange EXCHANGE Exchange name. Only valid if no config is provided.
|
||||||
-t TIMEFRAMES [TIMEFRAMES ...], --timeframes TIMEFRAMES [TIMEFRAMES ...]
|
-t, --timeframes TIMEFRAMES [TIMEFRAMES ...]
|
||||||
Specify which tickers to download. Space-separated
|
Specify which tickers to download. Space-separated
|
||||||
list. Default: `1m 5m`.
|
list. Default: `1m 5m`.
|
||||||
--trading-mode {spot,margin,futures}, --tradingmode {spot,margin,futures}
|
--trading-mode, --tradingmode {spot,margin,futures}
|
||||||
Select Trading mode
|
Select Trading mode
|
||||||
--candle-types {spot,futures,mark,index,premiumIndex,funding_rate} [{spot,futures,mark,index,premiumIndex,funding_rate} ...]
|
--candle-types {spot,futures,mark,index,premiumIndex,funding_rate} [{spot,futures,mark,index,premiumIndex,funding_rate} ...]
|
||||||
Select candle type to convert. Defaults to all
|
Select candle type to convert. Defaults to all
|
||||||
@@ -34,21 +34,20 @@ Common arguments:
|
|||||||
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
|
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
|
||||||
--no-color Disable colorization of hyperopt results. May be
|
--no-color Disable colorization of hyperopt results. May be
|
||||||
useful if you are redirecting output to a file.
|
useful if you are redirecting output to a file.
|
||||||
--logfile FILE, --log-file FILE
|
--logfile, --log-file FILE
|
||||||
Log to the file specified. Special values are:
|
Log to the file specified. Special values are:
|
||||||
'syslog', 'journald'. See the documentation for more
|
'syslog', 'journald'. See the documentation for more
|
||||||
details.
|
details.
|
||||||
-V, --version show program's version number and exit
|
-V, --version show program's version number and exit
|
||||||
-c PATH, --config PATH
|
-c, --config PATH Specify configuration file (default:
|
||||||
Specify configuration file (default:
|
|
||||||
`userdir/config.json` or `config.json` whichever
|
`userdir/config.json` or `config.json` whichever
|
||||||
exists). Multiple --config options may be used. Can be
|
exists). Multiple --config options may be used. Can be
|
||||||
set to `-` to read config from stdin.
|
set to `-` to read config from stdin.
|
||||||
-d PATH, --datadir PATH, --data-dir PATH
|
-d, --datadir, --data-dir PATH
|
||||||
Path to the base directory of the exchange with
|
Path to the base directory of the exchange with
|
||||||
historical backtesting data. To see futures data, use
|
historical backtesting data. To see futures data, use
|
||||||
trading-mode additionally.
|
trading-mode additionally.
|
||||||
--userdir PATH, --user-data-dir PATH
|
--userdir, --user-data-dir PATH
|
||||||
Path to userdata directory.
|
Path to userdata directory.
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
```
|
``` output
|
||||||
usage: freqtrade convert-db [-h] [--db-url PATH] [--db-url-from PATH]
|
usage: freqtrade convert-db [-h] [--db-url PATH] [--db-url-from PATH]
|
||||||
|
|
||||||
options:
|
options:
|
||||||
|
|||||||
@@ -1,14 +1,14 @@
|
|||||||
```
|
``` output
|
||||||
usage: freqtrade convert-trade-data [-h] [-v] [--no-color] [--logfile FILE]
|
usage: freqtrade convert-trade-data [-h] [-v] [--no-color] [--logfile FILE]
|
||||||
[-V] [-c PATH] [-d PATH] [--userdir PATH]
|
[-V] [-c PATH] [-d PATH] [--userdir PATH]
|
||||||
[-p PAIRS [PAIRS ...]] --format-from
|
[-p PAIRS [PAIRS ...]]
|
||||||
{json,jsongz,feather,parquet,kraken_csv}
|
--format-from {json,jsongz,feather,parquet,kraken_csv}
|
||||||
--format-to {json,jsongz,feather,parquet}
|
--format-to {json,jsongz,feather,parquet}
|
||||||
[--erase] [--exchange EXCHANGE]
|
[--erase] [--exchange EXCHANGE]
|
||||||
|
|
||||||
options:
|
options:
|
||||||
-h, --help show this help message and exit
|
-h, --help show this help message and exit
|
||||||
-p PAIRS [PAIRS ...], --pairs PAIRS [PAIRS ...]
|
-p, --pairs PAIRS [PAIRS ...]
|
||||||
Limit command to these pairs. Pairs are space-
|
Limit command to these pairs. Pairs are space-
|
||||||
separated.
|
separated.
|
||||||
--format-from {json,jsongz,feather,parquet,kraken_csv}
|
--format-from {json,jsongz,feather,parquet,kraken_csv}
|
||||||
@@ -23,21 +23,20 @@ Common arguments:
|
|||||||
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
|
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
|
||||||
--no-color Disable colorization of hyperopt results. May be
|
--no-color Disable colorization of hyperopt results. May be
|
||||||
useful if you are redirecting output to a file.
|
useful if you are redirecting output to a file.
|
||||||
--logfile FILE, --log-file FILE
|
--logfile, --log-file FILE
|
||||||
Log to the file specified. Special values are:
|
Log to the file specified. Special values are:
|
||||||
'syslog', 'journald'. See the documentation for more
|
'syslog', 'journald'. See the documentation for more
|
||||||
details.
|
details.
|
||||||
-V, --version show program's version number and exit
|
-V, --version show program's version number and exit
|
||||||
-c PATH, --config PATH
|
-c, --config PATH Specify configuration file (default:
|
||||||
Specify configuration file (default:
|
|
||||||
`userdir/config.json` or `config.json` whichever
|
`userdir/config.json` or `config.json` whichever
|
||||||
exists). Multiple --config options may be used. Can be
|
exists). Multiple --config options may be used. Can be
|
||||||
set to `-` to read config from stdin.
|
set to `-` to read config from stdin.
|
||||||
-d PATH, --datadir PATH, --data-dir PATH
|
-d, --datadir, --data-dir PATH
|
||||||
Path to the base directory of the exchange with
|
Path to the base directory of the exchange with
|
||||||
historical backtesting data. To see futures data, use
|
historical backtesting data. To see futures data, use
|
||||||
trading-mode additionally.
|
trading-mode additionally.
|
||||||
--userdir PATH, --user-data-dir PATH
|
--userdir, --user-data-dir PATH
|
||||||
Path to userdata directory.
|
Path to userdata directory.
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
```
|
``` output
|
||||||
usage: freqtrade create-userdir [-h] [--userdir PATH] [--reset]
|
usage: freqtrade create-userdir [-h] [--userdir PATH] [--reset]
|
||||||
|
|
||||||
options:
|
options:
|
||||||
-h, --help show this help message and exit
|
-h, --help show this help message and exit
|
||||||
--userdir PATH, --user-data-dir PATH
|
--userdir, --user-data-dir PATH
|
||||||
Path to userdata directory.
|
Path to userdata directory.
|
||||||
--reset Reset sample files to their original state.
|
--reset Reset sample files to their original state.
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
```
|
``` output
|
||||||
usage: freqtrade download-data [-h] [-v] [--no-color] [--logfile FILE] [-V]
|
usage: freqtrade download-data [-h] [-v] [--no-color] [--logfile FILE] [-V]
|
||||||
[-c PATH] [-d PATH] [--userdir PATH]
|
[-c PATH] [-d PATH] [--userdir PATH]
|
||||||
[-p PAIRS [PAIRS ...]] [--pairs-file FILE]
|
[-p PAIRS [PAIRS ...]] [--pairs-file FILE]
|
||||||
@@ -15,7 +15,7 @@ usage: freqtrade download-data [-h] [-v] [--no-color] [--logfile FILE] [-V]
|
|||||||
|
|
||||||
options:
|
options:
|
||||||
-h, --help show this help message and exit
|
-h, --help show this help message and exit
|
||||||
-p PAIRS [PAIRS ...], --pairs PAIRS [PAIRS ...]
|
-p, --pairs PAIRS [PAIRS ...]
|
||||||
Limit command to these pairs. Pairs are space-
|
Limit command to these pairs. Pairs are space-
|
||||||
separated.
|
separated.
|
||||||
--pairs-file FILE File containing a list of pairs. Takes precedence over
|
--pairs-file FILE File containing a list of pairs. Takes precedence over
|
||||||
@@ -37,7 +37,7 @@ options:
|
|||||||
OHLCV (e.g. Kraken). If not provided, use `trades-to-
|
OHLCV (e.g. Kraken). If not provided, use `trades-to-
|
||||||
ohlcv` to convert trades data to OHLCV data.
|
ohlcv` to convert trades data to OHLCV data.
|
||||||
--exchange EXCHANGE Exchange name. Only valid if no config is provided.
|
--exchange EXCHANGE Exchange name. Only valid if no config is provided.
|
||||||
-t TIMEFRAMES [TIMEFRAMES ...], --timeframes TIMEFRAMES [TIMEFRAMES ...]
|
-t, --timeframes TIMEFRAMES [TIMEFRAMES ...]
|
||||||
Specify which tickers to download. Space-separated
|
Specify which tickers to download. Space-separated
|
||||||
list. Default: `1m 5m`.
|
list. Default: `1m 5m`.
|
||||||
--erase Clean all existing data for the selected
|
--erase Clean all existing data for the selected
|
||||||
@@ -48,7 +48,7 @@ options:
|
|||||||
--data-format-trades {json,jsongz,feather,parquet}
|
--data-format-trades {json,jsongz,feather,parquet}
|
||||||
Storage format for downloaded trades data. (default:
|
Storage format for downloaded trades data. (default:
|
||||||
`feather`).
|
`feather`).
|
||||||
--trading-mode {spot,margin,futures}, --tradingmode {spot,margin,futures}
|
--trading-mode, --tradingmode {spot,margin,futures}
|
||||||
Select Trading mode
|
Select Trading mode
|
||||||
--prepend Allow data prepending. (Data-appending is disabled)
|
--prepend Allow data prepending. (Data-appending is disabled)
|
||||||
|
|
||||||
@@ -56,21 +56,20 @@ Common arguments:
|
|||||||
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
|
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
|
||||||
--no-color Disable colorization of hyperopt results. May be
|
--no-color Disable colorization of hyperopt results. May be
|
||||||
useful if you are redirecting output to a file.
|
useful if you are redirecting output to a file.
|
||||||
--logfile FILE, --log-file FILE
|
--logfile, --log-file FILE
|
||||||
Log to the file specified. Special values are:
|
Log to the file specified. Special values are:
|
||||||
'syslog', 'journald'. See the documentation for more
|
'syslog', 'journald'. See the documentation for more
|
||||||
details.
|
details.
|
||||||
-V, --version show program's version number and exit
|
-V, --version show program's version number and exit
|
||||||
-c PATH, --config PATH
|
-c, --config PATH Specify configuration file (default:
|
||||||
Specify configuration file (default:
|
|
||||||
`userdir/config.json` or `config.json` whichever
|
`userdir/config.json` or `config.json` whichever
|
||||||
exists). Multiple --config options may be used. Can be
|
exists). Multiple --config options may be used. Can be
|
||||||
set to `-` to read config from stdin.
|
set to `-` to read config from stdin.
|
||||||
-d PATH, --datadir PATH, --data-dir PATH
|
-d, --datadir, --data-dir PATH
|
||||||
Path to the base directory of the exchange with
|
Path to the base directory of the exchange with
|
||||||
historical backtesting data. To see futures data, use
|
historical backtesting data. To see futures data, use
|
||||||
trading-mode additionally.
|
trading-mode additionally.
|
||||||
--userdir PATH, --user-data-dir PATH
|
--userdir, --user-data-dir PATH
|
||||||
Path to userdata directory.
|
Path to userdata directory.
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
```
|
``` output
|
||||||
usage: freqtrade edge [-h] [-v] [--no-color] [--logfile FILE] [-V] [-c PATH]
|
usage: freqtrade edge [-h] [-v] [--no-color] [--logfile FILE] [-V] [-c PATH]
|
||||||
[-d PATH] [--userdir PATH] [-s NAME]
|
[-d PATH] [--userdir PATH] [-s NAME]
|
||||||
[--strategy-path PATH] [--recursive-strategy-search]
|
[--strategy-path PATH] [--recursive-strategy-search]
|
||||||
@@ -10,7 +10,7 @@ usage: freqtrade edge [-h] [-v] [--no-color] [--logfile FILE] [-V] [-c PATH]
|
|||||||
|
|
||||||
options:
|
options:
|
||||||
-h, --help show this help message and exit
|
-h, --help show this help message and exit
|
||||||
-i TIMEFRAME, --timeframe TIMEFRAME
|
-i, --timeframe TIMEFRAME
|
||||||
Specify timeframe (`1m`, `5m`, `30m`, `1h`, `1d`).
|
Specify timeframe (`1m`, `5m`, `30m`, `1h`, `1d`).
|
||||||
--timerange TIMERANGE
|
--timerange TIMERANGE
|
||||||
Specify what timerange of data to use.
|
Specify what timerange of data to use.
|
||||||
@@ -25,7 +25,7 @@ options:
|
|||||||
setting.
|
setting.
|
||||||
--fee FLOAT Specify fee ratio. Will be applied twice (on trade
|
--fee FLOAT Specify fee ratio. Will be applied twice (on trade
|
||||||
entry and exit).
|
entry and exit).
|
||||||
-p PAIRS [PAIRS ...], --pairs PAIRS [PAIRS ...]
|
-p, --pairs PAIRS [PAIRS ...]
|
||||||
Limit command to these pairs. Pairs are space-
|
Limit command to these pairs. Pairs are space-
|
||||||
separated.
|
separated.
|
||||||
|
|
||||||
@@ -33,26 +33,24 @@ Common arguments:
|
|||||||
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
|
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
|
||||||
--no-color Disable colorization of hyperopt results. May be
|
--no-color Disable colorization of hyperopt results. May be
|
||||||
useful if you are redirecting output to a file.
|
useful if you are redirecting output to a file.
|
||||||
--logfile FILE, --log-file FILE
|
--logfile, --log-file FILE
|
||||||
Log to the file specified. Special values are:
|
Log to the file specified. Special values are:
|
||||||
'syslog', 'journald'. See the documentation for more
|
'syslog', 'journald'. See the documentation for more
|
||||||
details.
|
details.
|
||||||
-V, --version show program's version number and exit
|
-V, --version show program's version number and exit
|
||||||
-c PATH, --config PATH
|
-c, --config PATH Specify configuration file (default:
|
||||||
Specify configuration file (default:
|
|
||||||
`userdir/config.json` or `config.json` whichever
|
`userdir/config.json` or `config.json` whichever
|
||||||
exists). Multiple --config options may be used. Can be
|
exists). Multiple --config options may be used. Can be
|
||||||
set to `-` to read config from stdin.
|
set to `-` to read config from stdin.
|
||||||
-d PATH, --datadir PATH, --data-dir PATH
|
-d, --datadir, --data-dir PATH
|
||||||
Path to the base directory of the exchange with
|
Path to the base directory of the exchange with
|
||||||
historical backtesting data. To see futures data, use
|
historical backtesting data. To see futures data, use
|
||||||
trading-mode additionally.
|
trading-mode additionally.
|
||||||
--userdir PATH, --user-data-dir PATH
|
--userdir, --user-data-dir PATH
|
||||||
Path to userdata directory.
|
Path to userdata directory.
|
||||||
|
|
||||||
Strategy arguments:
|
Strategy arguments:
|
||||||
-s NAME, --strategy NAME
|
-s, --strategy NAME Specify strategy class name which will be used by the
|
||||||
Specify strategy class name which will be used by the
|
|
||||||
bot.
|
bot.
|
||||||
--strategy-path PATH Specify additional strategy lookup path.
|
--strategy-path PATH Specify additional strategy lookup path.
|
||||||
--recursive-strategy-search
|
--recursive-strategy-search
|
||||||
|
|||||||
197
docs/commands/freqtrade-client.md
Normal file
197
docs/commands/freqtrade-client.md
Normal file
@@ -0,0 +1,197 @@
|
|||||||
|
``` output
|
||||||
|
Possible commands:
|
||||||
|
|
||||||
|
available_pairs
|
||||||
|
Return available pair (backtest data) based on timeframe / stake_currency selection
|
||||||
|
|
||||||
|
:param timeframe: Only pairs with this timeframe available.
|
||||||
|
:param stake_currency: Only pairs that include this stake currency.
|
||||||
|
|
||||||
|
balance
|
||||||
|
Get the account balance.
|
||||||
|
|
||||||
|
blacklist
|
||||||
|
Show the current blacklist.
|
||||||
|
|
||||||
|
:param add: List of coins to add (example: "BNB/BTC")
|
||||||
|
|
||||||
|
cancel_open_order
|
||||||
|
Cancel open order for trade.
|
||||||
|
|
||||||
|
:param trade_id: Cancels open orders for this trade.
|
||||||
|
|
||||||
|
count
|
||||||
|
Return the amount of open trades.
|
||||||
|
|
||||||
|
daily
|
||||||
|
Return the profits for each day, and amount of trades.
|
||||||
|
|
||||||
|
delete_lock
|
||||||
|
Delete (disable) lock from the database.
|
||||||
|
|
||||||
|
:param lock_id: ID for the lock to delete
|
||||||
|
|
||||||
|
delete_trade
|
||||||
|
Delete trade from the database.
|
||||||
|
Tries to close open orders. Requires manual handling of this asset on the exchange.
|
||||||
|
|
||||||
|
:param trade_id: Deletes the trade with this ID from the database.
|
||||||
|
|
||||||
|
entries
|
||||||
|
Returns List of dicts containing all Trades, based on buy tag performance
|
||||||
|
Can either be average for all pairs or a specific pair provided
|
||||||
|
|
||||||
|
exits
|
||||||
|
Returns List of dicts containing all Trades, based on exit reason performance
|
||||||
|
Can either be average for all pairs or a specific pair provided
|
||||||
|
|
||||||
|
forcebuy
|
||||||
|
Buy an asset.
|
||||||
|
|
||||||
|
:param pair: Pair to buy (ETH/BTC)
|
||||||
|
:param price: Optional - price to buy
|
||||||
|
|
||||||
|
forceenter
|
||||||
|
Force entering a trade
|
||||||
|
|
||||||
|
:param pair: Pair to buy (ETH/BTC)
|
||||||
|
:param side: 'long' or 'short'
|
||||||
|
:param price: Optional - price to buy
|
||||||
|
:param order_type: Optional keyword argument - 'limit' or 'market'
|
||||||
|
:param stake_amount: Optional keyword argument - stake amount (as float)
|
||||||
|
:param leverage: Optional keyword argument - leverage (as float)
|
||||||
|
:param enter_tag: Optional keyword argument - entry tag (as string, default: 'force_enter')
|
||||||
|
|
||||||
|
forceexit
|
||||||
|
Force-exit a trade.
|
||||||
|
|
||||||
|
:param tradeid: Id of the trade (can be received via status command)
|
||||||
|
:param ordertype: Order type to use (must be market or limit)
|
||||||
|
:param amount: Amount to sell. Full sell if not given
|
||||||
|
|
||||||
|
health
|
||||||
|
Provides a quick health check of the running bot.
|
||||||
|
|
||||||
|
list_custom_data
|
||||||
|
List custom-data of the running bot for a specific trade.
|
||||||
|
|
||||||
|
:param trade_id: ID of the trade
|
||||||
|
:param key: str, optional - Key of the custom-data
|
||||||
|
|
||||||
|
list_open_trades_custom_data
|
||||||
|
List open trades custom-data of the running bot.
|
||||||
|
|
||||||
|
:param key: str, optional - Key of the custom-data
|
||||||
|
:param limit: limit of trades
|
||||||
|
:param offset: trades offset for pagination
|
||||||
|
|
||||||
|
lock_add
|
||||||
|
Lock pair
|
||||||
|
|
||||||
|
:param pair: Pair to lock
|
||||||
|
:param until: Lock until this date (format "2024-03-30 16:00:00Z")
|
||||||
|
:param side: Side to lock (long, short, *)
|
||||||
|
:param reason: Reason for the lock
|
||||||
|
|
||||||
|
locks
|
||||||
|
Return current locks
|
||||||
|
|
||||||
|
logs
|
||||||
|
Show latest logs.
|
||||||
|
|
||||||
|
:param limit: Limits log messages to the last <limit> logs. No limit to get the entire log.
|
||||||
|
|
||||||
|
mix_tags
|
||||||
|
Returns List of dicts containing all Trades, based on entry_tag + exit_reason performance
|
||||||
|
Can either be average for all pairs or a specific pair provided
|
||||||
|
|
||||||
|
monthly
|
||||||
|
Return the profits for each month, and amount of trades.
|
||||||
|
|
||||||
|
pair_candles
|
||||||
|
Return live dataframe for <pair><timeframe>.
|
||||||
|
|
||||||
|
:param pair: Pair to get data for
|
||||||
|
:param timeframe: Only pairs with this timeframe available.
|
||||||
|
:param limit: Limit result to the last n candles.
|
||||||
|
:param columns: List of dataframe columns to return. Empty list will return OHLCV.
|
||||||
|
|
||||||
|
pair_history
|
||||||
|
Return historic, analyzed dataframe
|
||||||
|
|
||||||
|
:param pair: Pair to get data for
|
||||||
|
:param timeframe: Only pairs with this timeframe available.
|
||||||
|
:param strategy: Strategy to analyze and get values for
|
||||||
|
:param freqaimodel: FreqAI model to use for analysis
|
||||||
|
:param timerange: Timerange to get data for (same format than --timerange endpoints)
|
||||||
|
|
||||||
|
pairlists_available
|
||||||
|
Lists available pairlist providers
|
||||||
|
|
||||||
|
performance
|
||||||
|
Return the performance of the different coins.
|
||||||
|
|
||||||
|
ping
|
||||||
|
simple ping
|
||||||
|
|
||||||
|
plot_config
|
||||||
|
Return plot configuration if the strategy defines one.
|
||||||
|
|
||||||
|
profit
|
||||||
|
Return the profit summary.
|
||||||
|
|
||||||
|
reload_config
|
||||||
|
Reload configuration.
|
||||||
|
|
||||||
|
show_config
|
||||||
|
Returns part of the configuration, relevant for trading operations.
|
||||||
|
|
||||||
|
start
|
||||||
|
Start the bot if it's in the stopped state.
|
||||||
|
|
||||||
|
stats
|
||||||
|
Return the stats report (durations, sell-reasons).
|
||||||
|
|
||||||
|
status
|
||||||
|
Get the status of open trades.
|
||||||
|
|
||||||
|
stop
|
||||||
|
Stop the bot. Use `start` to restart.
|
||||||
|
|
||||||
|
stopbuy
|
||||||
|
Stop buying (but handle sells gracefully). Use `reload_config` to reset.
|
||||||
|
|
||||||
|
strategies
|
||||||
|
Lists available strategies
|
||||||
|
|
||||||
|
strategy
|
||||||
|
Get strategy details
|
||||||
|
|
||||||
|
:param strategy: Strategy class name
|
||||||
|
|
||||||
|
sysinfo
|
||||||
|
Provides system information (CPU, RAM usage)
|
||||||
|
|
||||||
|
trade
|
||||||
|
Return specific trade
|
||||||
|
|
||||||
|
:param trade_id: Specify which trade to get.
|
||||||
|
|
||||||
|
trades
|
||||||
|
Return trades history, sorted by id (or by latest timestamp if order_by_id=False)
|
||||||
|
|
||||||
|
:param limit: Limits trades to the X last trades. Max 500 trades.
|
||||||
|
:param offset: Offset by this amount of trades.
|
||||||
|
:param order_by_id: Sort trades by id (default: True). If False, sorts by latest timestamp.
|
||||||
|
|
||||||
|
version
|
||||||
|
Return the version of the bot.
|
||||||
|
|
||||||
|
weekly
|
||||||
|
Return the profits for each week, and amount of trades.
|
||||||
|
|
||||||
|
whitelist
|
||||||
|
Show the current whitelist.
|
||||||
|
|
||||||
|
|
||||||
|
```
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
```
|
``` output
|
||||||
usage: freqtrade hyperopt-list [-h] [-v] [--no-color] [--logfile FILE] [-V]
|
usage: freqtrade hyperopt-list [-h] [-v] [--no-color] [--logfile FILE] [-V]
|
||||||
[-c PATH] [-d PATH] [--userdir PATH] [--best]
|
[-c PATH] [-d PATH] [--userdir PATH] [--best]
|
||||||
[--profitable] [--min-trades INT]
|
[--profitable] [--min-trades INT]
|
||||||
@@ -44,21 +44,20 @@ Common arguments:
|
|||||||
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
|
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
|
||||||
--no-color Disable colorization of hyperopt results. May be
|
--no-color Disable colorization of hyperopt results. May be
|
||||||
useful if you are redirecting output to a file.
|
useful if you are redirecting output to a file.
|
||||||
--logfile FILE, --log-file FILE
|
--logfile, --log-file FILE
|
||||||
Log to the file specified. Special values are:
|
Log to the file specified. Special values are:
|
||||||
'syslog', 'journald'. See the documentation for more
|
'syslog', 'journald'. See the documentation for more
|
||||||
details.
|
details.
|
||||||
-V, --version show program's version number and exit
|
-V, --version show program's version number and exit
|
||||||
-c PATH, --config PATH
|
-c, --config PATH Specify configuration file (default:
|
||||||
Specify configuration file (default:
|
|
||||||
`userdir/config.json` or `config.json` whichever
|
`userdir/config.json` or `config.json` whichever
|
||||||
exists). Multiple --config options may be used. Can be
|
exists). Multiple --config options may be used. Can be
|
||||||
set to `-` to read config from stdin.
|
set to `-` to read config from stdin.
|
||||||
-d PATH, --datadir PATH, --data-dir PATH
|
-d, --datadir, --data-dir PATH
|
||||||
Path to the base directory of the exchange with
|
Path to the base directory of the exchange with
|
||||||
historical backtesting data. To see futures data, use
|
historical backtesting data. To see futures data, use
|
||||||
trading-mode additionally.
|
trading-mode additionally.
|
||||||
--userdir PATH, --user-data-dir PATH
|
--userdir, --user-data-dir PATH
|
||||||
Path to userdata directory.
|
Path to userdata directory.
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
```
|
``` output
|
||||||
usage: freqtrade hyperopt-show [-h] [-v] [--no-color] [--logfile FILE] [-V]
|
usage: freqtrade hyperopt-show [-h] [-v] [--no-color] [--logfile FILE] [-V]
|
||||||
[-c PATH] [-d PATH] [--userdir PATH] [--best]
|
[-c PATH] [-d PATH] [--userdir PATH] [--best]
|
||||||
[--profitable] [-n INT] [--print-json]
|
[--profitable] [-n INT] [--print-json]
|
||||||
@@ -10,7 +10,7 @@ options:
|
|||||||
-h, --help show this help message and exit
|
-h, --help show this help message and exit
|
||||||
--best Select only best epochs.
|
--best Select only best epochs.
|
||||||
--profitable Select only profitable epochs.
|
--profitable Select only profitable epochs.
|
||||||
-n INT, --index INT Specify the index of the epoch to print details for.
|
-n, --index INT Specify the index of the epoch to print details for.
|
||||||
--print-json Print output in JSON format.
|
--print-json Print output in JSON format.
|
||||||
--hyperopt-filename FILENAME
|
--hyperopt-filename FILENAME
|
||||||
Hyperopt result filename.Example: `--hyperopt-
|
Hyperopt result filename.Example: `--hyperopt-
|
||||||
@@ -26,21 +26,20 @@ Common arguments:
|
|||||||
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
|
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
|
||||||
--no-color Disable colorization of hyperopt results. May be
|
--no-color Disable colorization of hyperopt results. May be
|
||||||
useful if you are redirecting output to a file.
|
useful if you are redirecting output to a file.
|
||||||
--logfile FILE, --log-file FILE
|
--logfile, --log-file FILE
|
||||||
Log to the file specified. Special values are:
|
Log to the file specified. Special values are:
|
||||||
'syslog', 'journald'. See the documentation for more
|
'syslog', 'journald'. See the documentation for more
|
||||||
details.
|
details.
|
||||||
-V, --version show program's version number and exit
|
-V, --version show program's version number and exit
|
||||||
-c PATH, --config PATH
|
-c, --config PATH Specify configuration file (default:
|
||||||
Specify configuration file (default:
|
|
||||||
`userdir/config.json` or `config.json` whichever
|
`userdir/config.json` or `config.json` whichever
|
||||||
exists). Multiple --config options may be used. Can be
|
exists). Multiple --config options may be used. Can be
|
||||||
set to `-` to read config from stdin.
|
set to `-` to read config from stdin.
|
||||||
-d PATH, --datadir PATH, --data-dir PATH
|
-d, --datadir, --data-dir PATH
|
||||||
Path to the base directory of the exchange with
|
Path to the base directory of the exchange with
|
||||||
historical backtesting data. To see futures data, use
|
historical backtesting data. To see futures data, use
|
||||||
trading-mode additionally.
|
trading-mode additionally.
|
||||||
--userdir PATH, --user-data-dir PATH
|
--userdir, --user-data-dir PATH
|
||||||
Path to userdata directory.
|
Path to userdata directory.
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
```
|
``` output
|
||||||
usage: freqtrade hyperopt [-h] [-v] [--no-color] [--logfile FILE] [-V]
|
usage: freqtrade hyperopt [-h] [-v] [--no-color] [--logfile FILE] [-V]
|
||||||
[-c PATH] [-d PATH] [--userdir PATH] [-s NAME]
|
[-c PATH] [-d PATH] [--userdir PATH] [-s NAME]
|
||||||
[--strategy-path PATH] [--recursive-strategy-search]
|
[--strategy-path PATH] [--recursive-strategy-search]
|
||||||
@@ -11,16 +11,15 @@ usage: freqtrade hyperopt [-h] [-v] [--no-color] [--logfile FILE] [-V]
|
|||||||
[--eps] [--enable-protections]
|
[--eps] [--enable-protections]
|
||||||
[--dry-run-wallet DRY_RUN_WALLET]
|
[--dry-run-wallet DRY_RUN_WALLET]
|
||||||
[--timeframe-detail TIMEFRAME_DETAIL] [-e INT]
|
[--timeframe-detail TIMEFRAME_DETAIL] [-e INT]
|
||||||
[--spaces {all,buy,sell,roi,stoploss,trailing,protection,trades,default} [{all,buy,sell,roi,stoploss,trailing,protection,trades,default} ...]]
|
[--spaces SPACES [SPACES ...]] [--print-all]
|
||||||
[--print-all] [--print-json] [-j JOBS]
|
[--print-json] [-j JOBS] [--random-state INT]
|
||||||
[--random-state INT] [--min-trades INT]
|
[--min-trades INT] [--hyperopt-loss NAME]
|
||||||
[--hyperopt-loss NAME] [--disable-param-export]
|
[--disable-param-export] [--ignore-missing-spaces]
|
||||||
[--ignore-missing-spaces] [--analyze-per-epoch]
|
[--analyze-per-epoch] [--early-stop INT]
|
||||||
[--early-stop INT]
|
|
||||||
|
|
||||||
options:
|
options:
|
||||||
-h, --help show this help message and exit
|
-h, --help show this help message and exit
|
||||||
-i TIMEFRAME, --timeframe TIMEFRAME
|
-i, --timeframe TIMEFRAME
|
||||||
Specify timeframe (`1m`, `5m`, `30m`, `1h`, `1d`).
|
Specify timeframe (`1m`, `5m`, `30m`, `1h`, `1d`).
|
||||||
--timerange TIMERANGE
|
--timerange TIMERANGE
|
||||||
Specify what timerange of data to use.
|
Specify what timerange of data to use.
|
||||||
@@ -35,7 +34,7 @@ options:
|
|||||||
setting.
|
setting.
|
||||||
--fee FLOAT Specify fee ratio. Will be applied twice (on trade
|
--fee FLOAT Specify fee ratio. Will be applied twice (on trade
|
||||||
entry and exit).
|
entry and exit).
|
||||||
-p PAIRS [PAIRS ...], --pairs PAIRS [PAIRS ...]
|
-p, --pairs PAIRS [PAIRS ...]
|
||||||
Limit command to these pairs. Pairs are space-
|
Limit command to these pairs. Pairs are space-
|
||||||
separated.
|
separated.
|
||||||
--hyperopt-path PATH Specify additional lookup path for Hyperopt Loss
|
--hyperopt-path PATH Specify additional lookup path for Hyperopt Loss
|
||||||
@@ -47,19 +46,23 @@ options:
|
|||||||
Enable protections for backtesting. Will slow
|
Enable protections for backtesting. Will slow
|
||||||
backtesting down by a considerable amount, but will
|
backtesting down by a considerable amount, but will
|
||||||
include configured protections
|
include configured protections
|
||||||
--dry-run-wallet DRY_RUN_WALLET, --starting-balance DRY_RUN_WALLET
|
--dry-run-wallet, --starting-balance DRY_RUN_WALLET
|
||||||
Starting balance, used for backtesting / hyperopt and
|
Starting balance, used for backtesting / hyperopt and
|
||||||
dry-runs.
|
dry-runs.
|
||||||
--timeframe-detail TIMEFRAME_DETAIL
|
--timeframe-detail TIMEFRAME_DETAIL
|
||||||
Specify detail timeframe for backtesting (`1m`, `5m`,
|
Specify detail timeframe for backtesting (`1m`, `5m`,
|
||||||
`30m`, `1h`, `1d`).
|
`30m`, `1h`, `1d`).
|
||||||
-e INT, --epochs INT Specify number of epochs (default: 100).
|
-e, --epochs INT Specify number of epochs (default: 100).
|
||||||
--spaces {all,buy,sell,roi,stoploss,trailing,protection,trades,default} [{all,buy,sell,roi,stoploss,trailing,protection,trades,default} ...]
|
--spaces SPACES [SPACES ...]
|
||||||
Specify which parameters to hyperopt. Space-separated
|
Specify which parameters to hyperopt. Space-separated
|
||||||
list.
|
list. Available builtin options (custom spaces will
|
||||||
|
not be listed here): default, all, buy, sell, enter,
|
||||||
|
exit, roi, stoploss, trailing, protection, trades.
|
||||||
|
Default: `default` - which includes all spaces except
|
||||||
|
for 'trailing', 'protection', and 'trades'.
|
||||||
--print-all Print all results, not only the best ones.
|
--print-all Print all results, not only the best ones.
|
||||||
--print-json Print output in JSON format.
|
--print-json Print output in JSON format.
|
||||||
-j JOBS, --job-workers JOBS
|
-j, --job-workers JOBS
|
||||||
The number of concurrently running jobs for
|
The number of concurrently running jobs for
|
||||||
hyperoptimization (hyperopt worker processes). If -1
|
hyperoptimization (hyperopt worker processes). If -1
|
||||||
(default), all CPUs are used, for -2, all CPUs but one
|
(default), all CPUs are used, for -2, all CPUs but one
|
||||||
@@ -69,7 +72,7 @@ options:
|
|||||||
reproducible hyperopt results.
|
reproducible hyperopt results.
|
||||||
--min-trades INT Set minimal desired number of trades for evaluations
|
--min-trades INT Set minimal desired number of trades for evaluations
|
||||||
in the hyperopt optimization path (default: 1).
|
in the hyperopt optimization path (default: 1).
|
||||||
--hyperopt-loss NAME, --hyperoptloss NAME
|
--hyperopt-loss, --hyperoptloss NAME
|
||||||
Specify the class name of the hyperopt loss function
|
Specify the class name of the hyperopt loss function
|
||||||
class (IHyperOptLoss). Different functions can
|
class (IHyperOptLoss). Different functions can
|
||||||
generate completely different results, since the
|
generate completely different results, since the
|
||||||
@@ -95,26 +98,24 @@ Common arguments:
|
|||||||
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
|
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
|
||||||
--no-color Disable colorization of hyperopt results. May be
|
--no-color Disable colorization of hyperopt results. May be
|
||||||
useful if you are redirecting output to a file.
|
useful if you are redirecting output to a file.
|
||||||
--logfile FILE, --log-file FILE
|
--logfile, --log-file FILE
|
||||||
Log to the file specified. Special values are:
|
Log to the file specified. Special values are:
|
||||||
'syslog', 'journald'. See the documentation for more
|
'syslog', 'journald'. See the documentation for more
|
||||||
details.
|
details.
|
||||||
-V, --version show program's version number and exit
|
-V, --version show program's version number and exit
|
||||||
-c PATH, --config PATH
|
-c, --config PATH Specify configuration file (default:
|
||||||
Specify configuration file (default:
|
|
||||||
`userdir/config.json` or `config.json` whichever
|
`userdir/config.json` or `config.json` whichever
|
||||||
exists). Multiple --config options may be used. Can be
|
exists). Multiple --config options may be used. Can be
|
||||||
set to `-` to read config from stdin.
|
set to `-` to read config from stdin.
|
||||||
-d PATH, --datadir PATH, --data-dir PATH
|
-d, --datadir, --data-dir PATH
|
||||||
Path to the base directory of the exchange with
|
Path to the base directory of the exchange with
|
||||||
historical backtesting data. To see futures data, use
|
historical backtesting data. To see futures data, use
|
||||||
trading-mode additionally.
|
trading-mode additionally.
|
||||||
--userdir PATH, --user-data-dir PATH
|
--userdir, --user-data-dir PATH
|
||||||
Path to userdata directory.
|
Path to userdata directory.
|
||||||
|
|
||||||
Strategy arguments:
|
Strategy arguments:
|
||||||
-s NAME, --strategy NAME
|
-s, --strategy NAME Specify strategy class name which will be used by the
|
||||||
Specify strategy class name which will be used by the
|
|
||||||
bot.
|
bot.
|
||||||
--strategy-path PATH Specify additional strategy lookup path.
|
--strategy-path PATH Specify additional strategy lookup path.
|
||||||
--recursive-strategy-search
|
--recursive-strategy-search
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
```
|
``` output
|
||||||
usage: freqtrade install-ui [-h] [--erase] [--prerelease]
|
usage: freqtrade install-ui [-h] [--erase] [--prerelease]
|
||||||
[--ui-version UI_VERSION]
|
[--ui-version UI_VERSION]
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
```
|
``` output
|
||||||
usage: freqtrade list-data [-h] [-v] [--no-color] [--logfile FILE] [-V]
|
usage: freqtrade list-data [-h] [-v] [--no-color] [--logfile FILE] [-V]
|
||||||
[-c PATH] [-d PATH] [--userdir PATH]
|
[-c PATH] [-d PATH] [--userdir PATH]
|
||||||
[--exchange EXCHANGE]
|
[--exchange EXCHANGE]
|
||||||
@@ -18,10 +18,10 @@ options:
|
|||||||
Storage format for downloaded trades data. (default:
|
Storage format for downloaded trades data. (default:
|
||||||
`feather`).
|
`feather`).
|
||||||
--trades Work on trades data instead of OHLCV data.
|
--trades Work on trades data instead of OHLCV data.
|
||||||
-p PAIRS [PAIRS ...], --pairs PAIRS [PAIRS ...]
|
-p, --pairs PAIRS [PAIRS ...]
|
||||||
Limit command to these pairs. Pairs are space-
|
Limit command to these pairs. Pairs are space-
|
||||||
separated.
|
separated.
|
||||||
--trading-mode {spot,margin,futures}, --tradingmode {spot,margin,futures}
|
--trading-mode, --tradingmode {spot,margin,futures}
|
||||||
Select Trading mode
|
Select Trading mode
|
||||||
--show-timerange Show timerange available for available data. (May take
|
--show-timerange Show timerange available for available data. (May take
|
||||||
a while to calculate).
|
a while to calculate).
|
||||||
@@ -30,21 +30,20 @@ Common arguments:
|
|||||||
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
|
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
|
||||||
--no-color Disable colorization of hyperopt results. May be
|
--no-color Disable colorization of hyperopt results. May be
|
||||||
useful if you are redirecting output to a file.
|
useful if you are redirecting output to a file.
|
||||||
--logfile FILE, --log-file FILE
|
--logfile, --log-file FILE
|
||||||
Log to the file specified. Special values are:
|
Log to the file specified. Special values are:
|
||||||
'syslog', 'journald'. See the documentation for more
|
'syslog', 'journald'. See the documentation for more
|
||||||
details.
|
details.
|
||||||
-V, --version show program's version number and exit
|
-V, --version show program's version number and exit
|
||||||
-c PATH, --config PATH
|
-c, --config PATH Specify configuration file (default:
|
||||||
Specify configuration file (default:
|
|
||||||
`userdir/config.json` or `config.json` whichever
|
`userdir/config.json` or `config.json` whichever
|
||||||
exists). Multiple --config options may be used. Can be
|
exists). Multiple --config options may be used. Can be
|
||||||
set to `-` to read config from stdin.
|
set to `-` to read config from stdin.
|
||||||
-d PATH, --datadir PATH, --data-dir PATH
|
-d, --datadir, --data-dir PATH
|
||||||
Path to the base directory of the exchange with
|
Path to the base directory of the exchange with
|
||||||
historical backtesting data. To see futures data, use
|
historical backtesting data. To see futures data, use
|
||||||
trading-mode additionally.
|
trading-mode additionally.
|
||||||
--userdir PATH, --user-data-dir PATH
|
--userdir, --user-data-dir PATH
|
||||||
Path to userdata directory.
|
Path to userdata directory.
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
```
|
``` output
|
||||||
usage: freqtrade list-exchanges [-h] [-v] [--no-color] [--logfile FILE] [-V]
|
usage: freqtrade list-exchanges [-h] [-v] [--no-color] [--logfile FILE] [-V]
|
||||||
[-c PATH] [-d PATH] [--userdir PATH] [-1] [-a]
|
[-c PATH] [-d PATH] [--userdir PATH] [-1] [-a]
|
||||||
[--trading-mode {spot,margin,futures}]
|
[--trading-mode {spot,margin,futures}]
|
||||||
@@ -8,7 +8,7 @@ options:
|
|||||||
-h, --help show this help message and exit
|
-h, --help show this help message and exit
|
||||||
-1, --one-column Print output in one column.
|
-1, --one-column Print output in one column.
|
||||||
-a, --all Print all exchanges known to the ccxt library.
|
-a, --all Print all exchanges known to the ccxt library.
|
||||||
--trading-mode {spot,margin,futures}, --tradingmode {spot,margin,futures}
|
--trading-mode, --tradingmode {spot,margin,futures}
|
||||||
Select Trading mode
|
Select Trading mode
|
||||||
--dex-exchanges Print only DEX exchanges.
|
--dex-exchanges Print only DEX exchanges.
|
||||||
|
|
||||||
@@ -16,21 +16,20 @@ Common arguments:
|
|||||||
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
|
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
|
||||||
--no-color Disable colorization of hyperopt results. May be
|
--no-color Disable colorization of hyperopt results. May be
|
||||||
useful if you are redirecting output to a file.
|
useful if you are redirecting output to a file.
|
||||||
--logfile FILE, --log-file FILE
|
--logfile, --log-file FILE
|
||||||
Log to the file specified. Special values are:
|
Log to the file specified. Special values are:
|
||||||
'syslog', 'journald'. See the documentation for more
|
'syslog', 'journald'. See the documentation for more
|
||||||
details.
|
details.
|
||||||
-V, --version show program's version number and exit
|
-V, --version show program's version number and exit
|
||||||
-c PATH, --config PATH
|
-c, --config PATH Specify configuration file (default:
|
||||||
Specify configuration file (default:
|
|
||||||
`userdir/config.json` or `config.json` whichever
|
`userdir/config.json` or `config.json` whichever
|
||||||
exists). Multiple --config options may be used. Can be
|
exists). Multiple --config options may be used. Can be
|
||||||
set to `-` to read config from stdin.
|
set to `-` to read config from stdin.
|
||||||
-d PATH, --datadir PATH, --data-dir PATH
|
-d, --datadir, --data-dir PATH
|
||||||
Path to the base directory of the exchange with
|
Path to the base directory of the exchange with
|
||||||
historical backtesting data. To see futures data, use
|
historical backtesting data. To see futures data, use
|
||||||
trading-mode additionally.
|
trading-mode additionally.
|
||||||
--userdir PATH, --user-data-dir PATH
|
--userdir, --user-data-dir PATH
|
||||||
Path to userdata directory.
|
Path to userdata directory.
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
```
|
``` output
|
||||||
usage: freqtrade list-freqaimodels [-h] [-v] [--no-color] [--logfile FILE]
|
usage: freqtrade list-freqaimodels [-h] [-v] [--no-color] [--logfile FILE]
|
||||||
[-V] [-c PATH] [-d PATH] [--userdir PATH]
|
[-V] [-c PATH] [-d PATH] [--userdir PATH]
|
||||||
[--freqaimodel-path PATH] [-1]
|
[--freqaimodel-path PATH] [-1]
|
||||||
@@ -13,21 +13,20 @@ Common arguments:
|
|||||||
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
|
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
|
||||||
--no-color Disable colorization of hyperopt results. May be
|
--no-color Disable colorization of hyperopt results. May be
|
||||||
useful if you are redirecting output to a file.
|
useful if you are redirecting output to a file.
|
||||||
--logfile FILE, --log-file FILE
|
--logfile, --log-file FILE
|
||||||
Log to the file specified. Special values are:
|
Log to the file specified. Special values are:
|
||||||
'syslog', 'journald'. See the documentation for more
|
'syslog', 'journald'. See the documentation for more
|
||||||
details.
|
details.
|
||||||
-V, --version show program's version number and exit
|
-V, --version show program's version number and exit
|
||||||
-c PATH, --config PATH
|
-c, --config PATH Specify configuration file (default:
|
||||||
Specify configuration file (default:
|
|
||||||
`userdir/config.json` or `config.json` whichever
|
`userdir/config.json` or `config.json` whichever
|
||||||
exists). Multiple --config options may be used. Can be
|
exists). Multiple --config options may be used. Can be
|
||||||
set to `-` to read config from stdin.
|
set to `-` to read config from stdin.
|
||||||
-d PATH, --datadir PATH, --data-dir PATH
|
-d, --datadir, --data-dir PATH
|
||||||
Path to the base directory of the exchange with
|
Path to the base directory of the exchange with
|
||||||
historical backtesting data. To see futures data, use
|
historical backtesting data. To see futures data, use
|
||||||
trading-mode additionally.
|
trading-mode additionally.
|
||||||
--userdir PATH, --user-data-dir PATH
|
--userdir, --user-data-dir PATH
|
||||||
Path to userdata directory.
|
Path to userdata directory.
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
```
|
``` output
|
||||||
usage: freqtrade list-hyperoptloss [-h] [-v] [--no-color] [--logfile FILE]
|
usage: freqtrade list-hyperoptloss [-h] [-v] [--no-color] [--logfile FILE]
|
||||||
[-V] [-c PATH] [-d PATH] [--userdir PATH]
|
[-V] [-c PATH] [-d PATH] [--userdir PATH]
|
||||||
[--hyperopt-path PATH] [-1]
|
[--hyperopt-path PATH] [-1]
|
||||||
@@ -13,21 +13,20 @@ Common arguments:
|
|||||||
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
|
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
|
||||||
--no-color Disable colorization of hyperopt results. May be
|
--no-color Disable colorization of hyperopt results. May be
|
||||||
useful if you are redirecting output to a file.
|
useful if you are redirecting output to a file.
|
||||||
--logfile FILE, --log-file FILE
|
--logfile, --log-file FILE
|
||||||
Log to the file specified. Special values are:
|
Log to the file specified. Special values are:
|
||||||
'syslog', 'journald'. See the documentation for more
|
'syslog', 'journald'. See the documentation for more
|
||||||
details.
|
details.
|
||||||
-V, --version show program's version number and exit
|
-V, --version show program's version number and exit
|
||||||
-c PATH, --config PATH
|
-c, --config PATH Specify configuration file (default:
|
||||||
Specify configuration file (default:
|
|
||||||
`userdir/config.json` or `config.json` whichever
|
`userdir/config.json` or `config.json` whichever
|
||||||
exists). Multiple --config options may be used. Can be
|
exists). Multiple --config options may be used. Can be
|
||||||
set to `-` to read config from stdin.
|
set to `-` to read config from stdin.
|
||||||
-d PATH, --datadir PATH, --data-dir PATH
|
-d, --datadir, --data-dir PATH
|
||||||
Path to the base directory of the exchange with
|
Path to the base directory of the exchange with
|
||||||
historical backtesting data. To see futures data, use
|
historical backtesting data. To see futures data, use
|
||||||
trading-mode additionally.
|
trading-mode additionally.
|
||||||
--userdir PATH, --user-data-dir PATH
|
--userdir, --user-data-dir PATH
|
||||||
Path to userdata directory.
|
Path to userdata directory.
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
```
|
``` output
|
||||||
usage: freqtrade list-markets [-h] [-v] [--no-color] [--logfile FILE] [-V]
|
usage: freqtrade list-markets [-h] [-v] [--no-color] [--logfile FILE] [-V]
|
||||||
[-c PATH] [-d PATH] [--userdir PATH]
|
[-c PATH] [-d PATH] [--userdir PATH]
|
||||||
[--exchange EXCHANGE] [--print-list]
|
[--exchange EXCHANGE] [--print-list]
|
||||||
@@ -21,28 +21,27 @@ options:
|
|||||||
Specify quote currency(-ies). Space-separated list.
|
Specify quote currency(-ies). Space-separated list.
|
||||||
-a, --all Print all pairs or market symbols. By default only
|
-a, --all Print all pairs or market symbols. By default only
|
||||||
active ones are shown.
|
active ones are shown.
|
||||||
--trading-mode {spot,margin,futures}, --tradingmode {spot,margin,futures}
|
--trading-mode, --tradingmode {spot,margin,futures}
|
||||||
Select Trading mode
|
Select Trading mode
|
||||||
|
|
||||||
Common arguments:
|
Common arguments:
|
||||||
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
|
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
|
||||||
--no-color Disable colorization of hyperopt results. May be
|
--no-color Disable colorization of hyperopt results. May be
|
||||||
useful if you are redirecting output to a file.
|
useful if you are redirecting output to a file.
|
||||||
--logfile FILE, --log-file FILE
|
--logfile, --log-file FILE
|
||||||
Log to the file specified. Special values are:
|
Log to the file specified. Special values are:
|
||||||
'syslog', 'journald'. See the documentation for more
|
'syslog', 'journald'. See the documentation for more
|
||||||
details.
|
details.
|
||||||
-V, --version show program's version number and exit
|
-V, --version show program's version number and exit
|
||||||
-c PATH, --config PATH
|
-c, --config PATH Specify configuration file (default:
|
||||||
Specify configuration file (default:
|
|
||||||
`userdir/config.json` or `config.json` whichever
|
`userdir/config.json` or `config.json` whichever
|
||||||
exists). Multiple --config options may be used. Can be
|
exists). Multiple --config options may be used. Can be
|
||||||
set to `-` to read config from stdin.
|
set to `-` to read config from stdin.
|
||||||
-d PATH, --datadir PATH, --data-dir PATH
|
-d, --datadir, --data-dir PATH
|
||||||
Path to the base directory of the exchange with
|
Path to the base directory of the exchange with
|
||||||
historical backtesting data. To see futures data, use
|
historical backtesting data. To see futures data, use
|
||||||
trading-mode additionally.
|
trading-mode additionally.
|
||||||
--userdir PATH, --user-data-dir PATH
|
--userdir, --user-data-dir PATH
|
||||||
Path to userdata directory.
|
Path to userdata directory.
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
```
|
``` output
|
||||||
usage: freqtrade list-pairs [-h] [-v] [--no-color] [--logfile FILE] [-V]
|
usage: freqtrade list-pairs [-h] [-v] [--no-color] [--logfile FILE] [-V]
|
||||||
[-c PATH] [-d PATH] [--userdir PATH]
|
[-c PATH] [-d PATH] [--userdir PATH]
|
||||||
[--exchange EXCHANGE] [--print-list]
|
[--exchange EXCHANGE] [--print-list]
|
||||||
@@ -21,28 +21,27 @@ options:
|
|||||||
Specify quote currency(-ies). Space-separated list.
|
Specify quote currency(-ies). Space-separated list.
|
||||||
-a, --all Print all pairs or market symbols. By default only
|
-a, --all Print all pairs or market symbols. By default only
|
||||||
active ones are shown.
|
active ones are shown.
|
||||||
--trading-mode {spot,margin,futures}, --tradingmode {spot,margin,futures}
|
--trading-mode, --tradingmode {spot,margin,futures}
|
||||||
Select Trading mode
|
Select Trading mode
|
||||||
|
|
||||||
Common arguments:
|
Common arguments:
|
||||||
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
|
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
|
||||||
--no-color Disable colorization of hyperopt results. May be
|
--no-color Disable colorization of hyperopt results. May be
|
||||||
useful if you are redirecting output to a file.
|
useful if you are redirecting output to a file.
|
||||||
--logfile FILE, --log-file FILE
|
--logfile, --log-file FILE
|
||||||
Log to the file specified. Special values are:
|
Log to the file specified. Special values are:
|
||||||
'syslog', 'journald'. See the documentation for more
|
'syslog', 'journald'. See the documentation for more
|
||||||
details.
|
details.
|
||||||
-V, --version show program's version number and exit
|
-V, --version show program's version number and exit
|
||||||
-c PATH, --config PATH
|
-c, --config PATH Specify configuration file (default:
|
||||||
Specify configuration file (default:
|
|
||||||
`userdir/config.json` or `config.json` whichever
|
`userdir/config.json` or `config.json` whichever
|
||||||
exists). Multiple --config options may be used. Can be
|
exists). Multiple --config options may be used. Can be
|
||||||
set to `-` to read config from stdin.
|
set to `-` to read config from stdin.
|
||||||
-d PATH, --datadir PATH, --data-dir PATH
|
-d, --datadir, --data-dir PATH
|
||||||
Path to the base directory of the exchange with
|
Path to the base directory of the exchange with
|
||||||
historical backtesting data. To see futures data, use
|
historical backtesting data. To see futures data, use
|
||||||
trading-mode additionally.
|
trading-mode additionally.
|
||||||
--userdir PATH, --user-data-dir PATH
|
--userdir, --user-data-dir PATH
|
||||||
Path to userdata directory.
|
Path to userdata directory.
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
```
|
``` output
|
||||||
usage: freqtrade list-strategies [-h] [-v] [--no-color] [--logfile FILE] [-V]
|
usage: freqtrade list-strategies [-h] [-v] [--no-color] [--logfile FILE] [-V]
|
||||||
[-c PATH] [-d PATH] [--userdir PATH]
|
[-c PATH] [-d PATH] [--userdir PATH]
|
||||||
[--strategy-path PATH] [-1]
|
[--strategy-path PATH] [-1]
|
||||||
@@ -16,21 +16,20 @@ Common arguments:
|
|||||||
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
|
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
|
||||||
--no-color Disable colorization of hyperopt results. May be
|
--no-color Disable colorization of hyperopt results. May be
|
||||||
useful if you are redirecting output to a file.
|
useful if you are redirecting output to a file.
|
||||||
--logfile FILE, --log-file FILE
|
--logfile, --log-file FILE
|
||||||
Log to the file specified. Special values are:
|
Log to the file specified. Special values are:
|
||||||
'syslog', 'journald'. See the documentation for more
|
'syslog', 'journald'. See the documentation for more
|
||||||
details.
|
details.
|
||||||
-V, --version show program's version number and exit
|
-V, --version show program's version number and exit
|
||||||
-c PATH, --config PATH
|
-c, --config PATH Specify configuration file (default:
|
||||||
Specify configuration file (default:
|
|
||||||
`userdir/config.json` or `config.json` whichever
|
`userdir/config.json` or `config.json` whichever
|
||||||
exists). Multiple --config options may be used. Can be
|
exists). Multiple --config options may be used. Can be
|
||||||
set to `-` to read config from stdin.
|
set to `-` to read config from stdin.
|
||||||
-d PATH, --datadir PATH, --data-dir PATH
|
-d, --datadir, --data-dir PATH
|
||||||
Path to the base directory of the exchange with
|
Path to the base directory of the exchange with
|
||||||
historical backtesting data. To see futures data, use
|
historical backtesting data. To see futures data, use
|
||||||
trading-mode additionally.
|
trading-mode additionally.
|
||||||
--userdir PATH, --user-data-dir PATH
|
--userdir, --user-data-dir PATH
|
||||||
Path to userdata directory.
|
Path to userdata directory.
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -1,32 +1,34 @@
|
|||||||
```
|
``` output
|
||||||
usage: freqtrade list-timeframes [-h] [-v] [--no-color] [--logfile FILE] [-V]
|
usage: freqtrade list-timeframes [-h] [-v] [--no-color] [--logfile FILE] [-V]
|
||||||
[-c PATH] [-d PATH] [--userdir PATH]
|
[-c PATH] [-d PATH] [--userdir PATH]
|
||||||
[--exchange EXCHANGE] [-1]
|
[--exchange EXCHANGE] [-1]
|
||||||
|
[--trading-mode {spot,margin,futures}]
|
||||||
|
|
||||||
options:
|
options:
|
||||||
-h, --help show this help message and exit
|
-h, --help show this help message and exit
|
||||||
--exchange EXCHANGE Exchange name. 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.
|
-1, --one-column Print output in one column.
|
||||||
|
--trading-mode, --tradingmode {spot,margin,futures}
|
||||||
|
Select Trading mode
|
||||||
|
|
||||||
Common arguments:
|
Common arguments:
|
||||||
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
|
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
|
||||||
--no-color Disable colorization of hyperopt results. May be
|
--no-color Disable colorization of hyperopt results. May be
|
||||||
useful if you are redirecting output to a file.
|
useful if you are redirecting output to a file.
|
||||||
--logfile FILE, --log-file FILE
|
--logfile, --log-file FILE
|
||||||
Log to the file specified. Special values are:
|
Log to the file specified. Special values are:
|
||||||
'syslog', 'journald'. See the documentation for more
|
'syslog', 'journald'. See the documentation for more
|
||||||
details.
|
details.
|
||||||
-V, --version show program's version number and exit
|
-V, --version show program's version number and exit
|
||||||
-c PATH, --config PATH
|
-c, --config PATH Specify configuration file (default:
|
||||||
Specify configuration file (default:
|
|
||||||
`userdir/config.json` or `config.json` whichever
|
`userdir/config.json` or `config.json` whichever
|
||||||
exists). Multiple --config options may be used. Can be
|
exists). Multiple --config options may be used. Can be
|
||||||
set to `-` to read config from stdin.
|
set to `-` to read config from stdin.
|
||||||
-d PATH, --datadir PATH, --data-dir PATH
|
-d, --datadir, --data-dir PATH
|
||||||
Path to the base directory of the exchange with
|
Path to the base directory of the exchange with
|
||||||
historical backtesting data. To see futures data, use
|
historical backtesting data. To see futures data, use
|
||||||
trading-mode additionally.
|
trading-mode additionally.
|
||||||
--userdir PATH, --user-data-dir PATH
|
--userdir, --user-data-dir PATH
|
||||||
Path to userdata directory.
|
Path to userdata directory.
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
```
|
``` output
|
||||||
usage: freqtrade lookahead-analysis [-h] [-v] [--no-color] [--logfile FILE]
|
usage: freqtrade lookahead-analysis [-h] [-v] [--no-color] [--logfile FILE]
|
||||||
[-V] [-c PATH] [-d PATH] [--userdir PATH]
|
[-V] [-c PATH] [-d PATH] [--userdir PATH]
|
||||||
[-s NAME] [--strategy-path PATH]
|
[-s NAME] [--strategy-path PATH]
|
||||||
@@ -26,7 +26,7 @@ usage: freqtrade lookahead-analysis [-h] [-v] [--no-color] [--logfile FILE]
|
|||||||
|
|
||||||
options:
|
options:
|
||||||
-h, --help show this help message and exit
|
-h, --help show this help message and exit
|
||||||
-i TIMEFRAME, --timeframe TIMEFRAME
|
-i, --timeframe TIMEFRAME
|
||||||
Specify timeframe (`1m`, `5m`, `30m`, `1h`, `1d`).
|
Specify timeframe (`1m`, `5m`, `30m`, `1h`, `1d`).
|
||||||
--timerange TIMERANGE
|
--timerange TIMERANGE
|
||||||
Specify what timerange of data to use.
|
Specify what timerange of data to use.
|
||||||
@@ -41,7 +41,7 @@ options:
|
|||||||
setting.
|
setting.
|
||||||
--fee FLOAT Specify fee ratio. Will be applied twice (on trade
|
--fee FLOAT Specify fee ratio. Will be applied twice (on trade
|
||||||
entry and exit).
|
entry and exit).
|
||||||
-p PAIRS [PAIRS ...], --pairs PAIRS [PAIRS ...]
|
-p, --pairs PAIRS [PAIRS ...]
|
||||||
Limit command to these pairs. Pairs are space-
|
Limit command to these pairs. Pairs are space-
|
||||||
separated.
|
separated.
|
||||||
--enable-protections, --enableprotections
|
--enable-protections, --enableprotections
|
||||||
@@ -53,7 +53,7 @@ options:
|
|||||||
pairlist will be generated for each new candle if
|
pairlist will be generated for each new candle if
|
||||||
you're using a pairlist handler that supports this
|
you're using a pairlist handler that supports this
|
||||||
feature, for example, ShuffleFilter.
|
feature, for example, ShuffleFilter.
|
||||||
--dry-run-wallet DRY_RUN_WALLET, --starting-balance DRY_RUN_WALLET
|
--dry-run-wallet, --starting-balance DRY_RUN_WALLET
|
||||||
Starting balance, used for backtesting / hyperopt and
|
Starting balance, used for backtesting / hyperopt and
|
||||||
dry-runs.
|
dry-runs.
|
||||||
--timeframe-detail TIMEFRAME_DETAIL
|
--timeframe-detail TIMEFRAME_DETAIL
|
||||||
@@ -68,13 +68,13 @@ options:
|
|||||||
becomes `backtest-data-SampleStrategy.json`
|
becomes `backtest-data-SampleStrategy.json`
|
||||||
--export {none,trades,signals}
|
--export {none,trades,signals}
|
||||||
Export backtest results (default: trades).
|
Export backtest results (default: trades).
|
||||||
--backtest-filename PATH, --export-filename PATH
|
--backtest-filename, --export-filename PATH
|
||||||
Use this filename for backtest results.Example:
|
Use this filename for backtest results.Example:
|
||||||
`--backtest-
|
`--backtest-
|
||||||
filename=backtest_results_2020-09-27_16-20-48.json`.
|
filename=backtest_results_2020-09-27_16-20-48.json`.
|
||||||
Assumes either `user_data/backtest_results/` or
|
Assumes either `user_data/backtest_results/` or
|
||||||
`--export-directory` as base directory.
|
`--export-directory` as base directory.
|
||||||
--backtest-directory PATH, --export-directory PATH
|
--backtest-directory, --export-directory PATH
|
||||||
Directory to use for backtest results. Example:
|
Directory to use for backtest results. Example:
|
||||||
`--export-directory=user_data/backtest_results/`.
|
`--export-directory=user_data/backtest_results/`.
|
||||||
--freqai-backtest-live-models
|
--freqai-backtest-live-models
|
||||||
@@ -93,26 +93,24 @@ Common arguments:
|
|||||||
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
|
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
|
||||||
--no-color Disable colorization of hyperopt results. May be
|
--no-color Disable colorization of hyperopt results. May be
|
||||||
useful if you are redirecting output to a file.
|
useful if you are redirecting output to a file.
|
||||||
--logfile FILE, --log-file FILE
|
--logfile, --log-file FILE
|
||||||
Log to the file specified. Special values are:
|
Log to the file specified. Special values are:
|
||||||
'syslog', 'journald'. See the documentation for more
|
'syslog', 'journald'. See the documentation for more
|
||||||
details.
|
details.
|
||||||
-V, --version show program's version number and exit
|
-V, --version show program's version number and exit
|
||||||
-c PATH, --config PATH
|
-c, --config PATH Specify configuration file (default:
|
||||||
Specify configuration file (default:
|
|
||||||
`userdir/config.json` or `config.json` whichever
|
`userdir/config.json` or `config.json` whichever
|
||||||
exists). Multiple --config options may be used. Can be
|
exists). Multiple --config options may be used. Can be
|
||||||
set to `-` to read config from stdin.
|
set to `-` to read config from stdin.
|
||||||
-d PATH, --datadir PATH, --data-dir PATH
|
-d, --datadir, --data-dir PATH
|
||||||
Path to the base directory of the exchange with
|
Path to the base directory of the exchange with
|
||||||
historical backtesting data. To see futures data, use
|
historical backtesting data. To see futures data, use
|
||||||
trading-mode additionally.
|
trading-mode additionally.
|
||||||
--userdir PATH, --user-data-dir PATH
|
--userdir, --user-data-dir PATH
|
||||||
Path to userdata directory.
|
Path to userdata directory.
|
||||||
|
|
||||||
Strategy arguments:
|
Strategy arguments:
|
||||||
-s NAME, --strategy NAME
|
-s, --strategy NAME Specify strategy class name which will be used by the
|
||||||
Specify strategy class name which will be used by the
|
|
||||||
bot.
|
bot.
|
||||||
--strategy-path PATH Specify additional strategy lookup path.
|
--strategy-path PATH Specify additional strategy lookup path.
|
||||||
--recursive-strategy-search
|
--recursive-strategy-search
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
```
|
``` output
|
||||||
usage: freqtrade [-h] [-V]
|
usage: freqtrade [-h] [-V]
|
||||||
{trade,create-userdir,new-config,show-config,new-strategy,download-data,convert-data,convert-trade-data,trades-to-ohlcv,list-data,backtesting,backtesting-show,backtesting-analysis,edge,hyperopt,hyperopt-list,hyperopt-show,list-exchanges,list-markets,list-pairs,list-strategies,list-hyperoptloss,list-freqaimodels,list-timeframes,show-trades,test-pairlist,convert-db,install-ui,plot-dataframe,plot-profit,webserver,strategy-updater,lookahead-analysis,recursive-analysis}
|
{trade,create-userdir,new-config,show-config,new-strategy,download-data,convert-data,convert-trade-data,trades-to-ohlcv,list-data,backtesting,backtesting-show,backtesting-analysis,edge,hyperopt,hyperopt-list,hyperopt-show,list-exchanges,list-markets,list-pairs,list-strategies,list-hyperoptloss,list-freqaimodels,list-timeframes,show-trades,test-pairlist,convert-db,install-ui,plot-dataframe,plot-profit,webserver,strategy-updater,lookahead-analysis,recursive-analysis} ...
|
||||||
...
|
|
||||||
|
|
||||||
Free, open source crypto trading bot
|
Free, open source crypto trading bot
|
||||||
|
|
||||||
|
|||||||
@@ -1,12 +1,11 @@
|
|||||||
```
|
``` output
|
||||||
usage: freqtrade new-config [-h] [-c PATH]
|
usage: freqtrade new-config [-h] [-c PATH]
|
||||||
|
|
||||||
options:
|
options:
|
||||||
-h, --help show this help message and exit
|
-h, --help show this help message and exit
|
||||||
-c PATH, --config PATH
|
-c, --config PATH Specify configuration file (default:
|
||||||
Specify configuration file (default:
|
`userdir/config.json` or `config.json` whichever exists).
|
||||||
`userdir/config.json` or `config.json` whichever
|
Multiple --config options may be used. Can be set to `-`
|
||||||
exists). Multiple --config options may be used. Can be
|
to read config from stdin.
|
||||||
set to `-` to read config from stdin.
|
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -1,14 +1,13 @@
|
|||||||
```
|
``` output
|
||||||
usage: freqtrade new-strategy [-h] [--userdir PATH] [-s NAME]
|
usage: freqtrade new-strategy [-h] [--userdir PATH] [-s NAME]
|
||||||
[--strategy-path PATH]
|
[--strategy-path PATH]
|
||||||
[--template {full,minimal,advanced}]
|
[--template {full,minimal,advanced}]
|
||||||
|
|
||||||
options:
|
options:
|
||||||
-h, --help show this help message and exit
|
-h, --help show this help message and exit
|
||||||
--userdir PATH, --user-data-dir PATH
|
--userdir, --user-data-dir PATH
|
||||||
Path to userdata directory.
|
Path to userdata directory.
|
||||||
-s NAME, --strategy NAME
|
-s, --strategy NAME Specify strategy class name which will be used by the
|
||||||
Specify strategy class name which will be used by the
|
|
||||||
bot.
|
bot.
|
||||||
--strategy-path PATH Specify additional strategy lookup path.
|
--strategy-path PATH Specify additional strategy lookup path.
|
||||||
--template {full,minimal,advanced}
|
--template {full,minimal,advanced}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
```
|
``` output
|
||||||
usage: freqtrade plot-dataframe [-h] [-v] [--no-color] [--logfile FILE] [-V]
|
usage: freqtrade plot-dataframe [-h] [-v] [--no-color] [--logfile FILE] [-V]
|
||||||
[-c PATH] [-d PATH] [--userdir PATH] [-s NAME]
|
[-c PATH] [-d PATH] [--userdir PATH] [-s NAME]
|
||||||
[--strategy-path PATH]
|
[--strategy-path PATH]
|
||||||
@@ -16,7 +16,7 @@ usage: freqtrade plot-dataframe [-h] [-v] [--no-color] [--logfile FILE] [-V]
|
|||||||
|
|
||||||
options:
|
options:
|
||||||
-h, --help show this help message and exit
|
-h, --help show this help message and exit
|
||||||
-p PAIRS [PAIRS ...], --pairs PAIRS [PAIRS ...]
|
-p, --pairs PAIRS [PAIRS ...]
|
||||||
Limit command to these pairs. Pairs are space-
|
Limit command to these pairs. Pairs are space-
|
||||||
separated.
|
separated.
|
||||||
--indicators1 INDICATORS1 [INDICATORS1 ...]
|
--indicators1 INDICATORS1 [INDICATORS1 ...]
|
||||||
@@ -38,7 +38,7 @@ options:
|
|||||||
(backtest file)) Default: file
|
(backtest file)) Default: file
|
||||||
--export {none,trades,signals}
|
--export {none,trades,signals}
|
||||||
Export backtest results (default: trades).
|
Export backtest results (default: trades).
|
||||||
--backtest-filename PATH, --export-filename PATH
|
--backtest-filename, --export-filename PATH
|
||||||
Use this filename for backtest results.Example:
|
Use this filename for backtest results.Example:
|
||||||
`--backtest-
|
`--backtest-
|
||||||
filename=backtest_results_2020-09-27_16-20-48.json`.
|
filename=backtest_results_2020-09-27_16-20-48.json`.
|
||||||
@@ -46,7 +46,7 @@ options:
|
|||||||
`--export-directory` as base directory.
|
`--export-directory` as base directory.
|
||||||
--timerange TIMERANGE
|
--timerange TIMERANGE
|
||||||
Specify what timerange of data to use.
|
Specify what timerange of data to use.
|
||||||
-i TIMEFRAME, --timeframe TIMEFRAME
|
-i, --timeframe TIMEFRAME
|
||||||
Specify timeframe (`1m`, `5m`, `30m`, `1h`, `1d`).
|
Specify timeframe (`1m`, `5m`, `30m`, `1h`, `1d`).
|
||||||
--no-trades Skip using trades from backtesting file and DB.
|
--no-trades Skip using trades from backtesting file and DB.
|
||||||
|
|
||||||
@@ -54,26 +54,24 @@ Common arguments:
|
|||||||
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
|
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
|
||||||
--no-color Disable colorization of hyperopt results. May be
|
--no-color Disable colorization of hyperopt results. May be
|
||||||
useful if you are redirecting output to a file.
|
useful if you are redirecting output to a file.
|
||||||
--logfile FILE, --log-file FILE
|
--logfile, --log-file FILE
|
||||||
Log to the file specified. Special values are:
|
Log to the file specified. Special values are:
|
||||||
'syslog', 'journald'. See the documentation for more
|
'syslog', 'journald'. See the documentation for more
|
||||||
details.
|
details.
|
||||||
-V, --version show program's version number and exit
|
-V, --version show program's version number and exit
|
||||||
-c PATH, --config PATH
|
-c, --config PATH Specify configuration file (default:
|
||||||
Specify configuration file (default:
|
|
||||||
`userdir/config.json` or `config.json` whichever
|
`userdir/config.json` or `config.json` whichever
|
||||||
exists). Multiple --config options may be used. Can be
|
exists). Multiple --config options may be used. Can be
|
||||||
set to `-` to read config from stdin.
|
set to `-` to read config from stdin.
|
||||||
-d PATH, --datadir PATH, --data-dir PATH
|
-d, --datadir, --data-dir PATH
|
||||||
Path to the base directory of the exchange with
|
Path to the base directory of the exchange with
|
||||||
historical backtesting data. To see futures data, use
|
historical backtesting data. To see futures data, use
|
||||||
trading-mode additionally.
|
trading-mode additionally.
|
||||||
--userdir PATH, --user-data-dir PATH
|
--userdir, --user-data-dir PATH
|
||||||
Path to userdata directory.
|
Path to userdata directory.
|
||||||
|
|
||||||
Strategy arguments:
|
Strategy arguments:
|
||||||
-s NAME, --strategy NAME
|
-s, --strategy NAME Specify strategy class name which will be used by the
|
||||||
Specify strategy class name which will be used by the
|
|
||||||
bot.
|
bot.
|
||||||
--strategy-path PATH Specify additional strategy lookup path.
|
--strategy-path PATH Specify additional strategy lookup path.
|
||||||
--recursive-strategy-search
|
--recursive-strategy-search
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
```
|
``` output
|
||||||
usage: freqtrade plot-profit [-h] [-v] [--no-color] [--logfile FILE] [-V]
|
usage: freqtrade plot-profit [-h] [-v] [--no-color] [--logfile FILE] [-V]
|
||||||
[-c PATH] [-d PATH] [--userdir PATH] [-s NAME]
|
[-c PATH] [-d PATH] [--userdir PATH] [-s NAME]
|
||||||
[--strategy-path PATH]
|
[--strategy-path PATH]
|
||||||
@@ -12,14 +12,14 @@ usage: freqtrade plot-profit [-h] [-v] [--no-color] [--logfile FILE] [-V]
|
|||||||
|
|
||||||
options:
|
options:
|
||||||
-h, --help show this help message and exit
|
-h, --help show this help message and exit
|
||||||
-p PAIRS [PAIRS ...], --pairs PAIRS [PAIRS ...]
|
-p, --pairs PAIRS [PAIRS ...]
|
||||||
Limit command to these pairs. Pairs are space-
|
Limit command to these pairs. Pairs are space-
|
||||||
separated.
|
separated.
|
||||||
--timerange TIMERANGE
|
--timerange TIMERANGE
|
||||||
Specify what timerange of data to use.
|
Specify what timerange of data to use.
|
||||||
--export {none,trades,signals}
|
--export {none,trades,signals}
|
||||||
Export backtest results (default: trades).
|
Export backtest results (default: trades).
|
||||||
--backtest-filename PATH, --export-filename PATH
|
--backtest-filename, --export-filename PATH
|
||||||
Use this filename for backtest results.Example:
|
Use this filename for backtest results.Example:
|
||||||
`--backtest-
|
`--backtest-
|
||||||
filename=backtest_results_2020-09-27_16-20-48.json`.
|
filename=backtest_results_2020-09-27_16-20-48.json`.
|
||||||
@@ -32,7 +32,7 @@ options:
|
|||||||
--trade-source {DB,file}
|
--trade-source {DB,file}
|
||||||
Specify the source for trades (Can be DB or file
|
Specify the source for trades (Can be DB or file
|
||||||
(backtest file)) Default: file
|
(backtest file)) Default: file
|
||||||
-i TIMEFRAME, --timeframe TIMEFRAME
|
-i, --timeframe TIMEFRAME
|
||||||
Specify timeframe (`1m`, `5m`, `30m`, `1h`, `1d`).
|
Specify timeframe (`1m`, `5m`, `30m`, `1h`, `1d`).
|
||||||
--auto-open Automatically open generated plot.
|
--auto-open Automatically open generated plot.
|
||||||
|
|
||||||
@@ -40,26 +40,24 @@ Common arguments:
|
|||||||
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
|
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
|
||||||
--no-color Disable colorization of hyperopt results. May be
|
--no-color Disable colorization of hyperopt results. May be
|
||||||
useful if you are redirecting output to a file.
|
useful if you are redirecting output to a file.
|
||||||
--logfile FILE, --log-file FILE
|
--logfile, --log-file FILE
|
||||||
Log to the file specified. Special values are:
|
Log to the file specified. Special values are:
|
||||||
'syslog', 'journald'. See the documentation for more
|
'syslog', 'journald'. See the documentation for more
|
||||||
details.
|
details.
|
||||||
-V, --version show program's version number and exit
|
-V, --version show program's version number and exit
|
||||||
-c PATH, --config PATH
|
-c, --config PATH Specify configuration file (default:
|
||||||
Specify configuration file (default:
|
|
||||||
`userdir/config.json` or `config.json` whichever
|
`userdir/config.json` or `config.json` whichever
|
||||||
exists). Multiple --config options may be used. Can be
|
exists). Multiple --config options may be used. Can be
|
||||||
set to `-` to read config from stdin.
|
set to `-` to read config from stdin.
|
||||||
-d PATH, --datadir PATH, --data-dir PATH
|
-d, --datadir, --data-dir PATH
|
||||||
Path to the base directory of the exchange with
|
Path to the base directory of the exchange with
|
||||||
historical backtesting data. To see futures data, use
|
historical backtesting data. To see futures data, use
|
||||||
trading-mode additionally.
|
trading-mode additionally.
|
||||||
--userdir PATH, --user-data-dir PATH
|
--userdir, --user-data-dir PATH
|
||||||
Path to userdata directory.
|
Path to userdata directory.
|
||||||
|
|
||||||
Strategy arguments:
|
Strategy arguments:
|
||||||
-s NAME, --strategy NAME
|
-s, --strategy NAME Specify strategy class name which will be used by the
|
||||||
Specify strategy class name which will be used by the
|
|
||||||
bot.
|
bot.
|
||||||
--strategy-path PATH Specify additional strategy lookup path.
|
--strategy-path PATH Specify additional strategy lookup path.
|
||||||
--recursive-strategy-search
|
--recursive-strategy-search
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
```
|
``` output
|
||||||
usage: freqtrade recursive-analysis [-h] [-v] [--no-color] [--logfile FILE]
|
usage: freqtrade recursive-analysis [-h] [-v] [--no-color] [--logfile FILE]
|
||||||
[-V] [-c PATH] [-d PATH] [--userdir PATH]
|
[-V] [-c PATH] [-d PATH] [--userdir PATH]
|
||||||
[-s NAME] [--strategy-path PATH]
|
[-s NAME] [--strategy-path PATH]
|
||||||
@@ -12,14 +12,14 @@ usage: freqtrade recursive-analysis [-h] [-v] [--no-color] [--logfile FILE]
|
|||||||
|
|
||||||
options:
|
options:
|
||||||
-h, --help show this help message and exit
|
-h, --help show this help message and exit
|
||||||
-i TIMEFRAME, --timeframe TIMEFRAME
|
-i, --timeframe TIMEFRAME
|
||||||
Specify timeframe (`1m`, `5m`, `30m`, `1h`, `1d`).
|
Specify timeframe (`1m`, `5m`, `30m`, `1h`, `1d`).
|
||||||
--timerange TIMERANGE
|
--timerange TIMERANGE
|
||||||
Specify what timerange of data to use.
|
Specify what timerange of data to use.
|
||||||
--data-format-ohlcv {json,jsongz,feather,parquet}
|
--data-format-ohlcv {json,jsongz,feather,parquet}
|
||||||
Storage format for downloaded candle (OHLCV) data.
|
Storage format for downloaded candle (OHLCV) data.
|
||||||
(default: `feather`).
|
(default: `feather`).
|
||||||
-p PAIRS [PAIRS ...], --pairs PAIRS [PAIRS ...]
|
-p, --pairs PAIRS [PAIRS ...]
|
||||||
Limit command to these pairs. Pairs are space-
|
Limit command to these pairs. Pairs are space-
|
||||||
separated.
|
separated.
|
||||||
--startup-candle STARTUP_CANDLE [STARTUP_CANDLE ...]
|
--startup-candle STARTUP_CANDLE [STARTUP_CANDLE ...]
|
||||||
@@ -30,26 +30,24 @@ Common arguments:
|
|||||||
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
|
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
|
||||||
--no-color Disable colorization of hyperopt results. May be
|
--no-color Disable colorization of hyperopt results. May be
|
||||||
useful if you are redirecting output to a file.
|
useful if you are redirecting output to a file.
|
||||||
--logfile FILE, --log-file FILE
|
--logfile, --log-file FILE
|
||||||
Log to the file specified. Special values are:
|
Log to the file specified. Special values are:
|
||||||
'syslog', 'journald'. See the documentation for more
|
'syslog', 'journald'. See the documentation for more
|
||||||
details.
|
details.
|
||||||
-V, --version show program's version number and exit
|
-V, --version show program's version number and exit
|
||||||
-c PATH, --config PATH
|
-c, --config PATH Specify configuration file (default:
|
||||||
Specify configuration file (default:
|
|
||||||
`userdir/config.json` or `config.json` whichever
|
`userdir/config.json` or `config.json` whichever
|
||||||
exists). Multiple --config options may be used. Can be
|
exists). Multiple --config options may be used. Can be
|
||||||
set to `-` to read config from stdin.
|
set to `-` to read config from stdin.
|
||||||
-d PATH, --datadir PATH, --data-dir PATH
|
-d, --datadir, --data-dir PATH
|
||||||
Path to the base directory of the exchange with
|
Path to the base directory of the exchange with
|
||||||
historical backtesting data. To see futures data, use
|
historical backtesting data. To see futures data, use
|
||||||
trading-mode additionally.
|
trading-mode additionally.
|
||||||
--userdir PATH, --user-data-dir PATH
|
--userdir, --user-data-dir PATH
|
||||||
Path to userdata directory.
|
Path to userdata directory.
|
||||||
|
|
||||||
Strategy arguments:
|
Strategy arguments:
|
||||||
-s NAME, --strategy NAME
|
-s, --strategy NAME Specify strategy class name which will be used by the
|
||||||
Specify strategy class name which will be used by the
|
|
||||||
bot.
|
bot.
|
||||||
--strategy-path PATH Specify additional strategy lookup path.
|
--strategy-path PATH Specify additional strategy lookup path.
|
||||||
--recursive-strategy-search
|
--recursive-strategy-search
|
||||||
|
|||||||
@@ -1,13 +1,12 @@
|
|||||||
```
|
``` output
|
||||||
usage: freqtrade show-config [-h] [--userdir PATH] [-c PATH]
|
usage: freqtrade show-config [-h] [--userdir PATH] [-c PATH]
|
||||||
[--show-sensitive]
|
[--show-sensitive]
|
||||||
|
|
||||||
options:
|
options:
|
||||||
-h, --help show this help message and exit
|
-h, --help show this help message and exit
|
||||||
--userdir PATH, --user-data-dir PATH
|
--userdir, --user-data-dir PATH
|
||||||
Path to userdata directory.
|
Path to userdata directory.
|
||||||
-c PATH, --config PATH
|
-c, --config PATH Specify configuration file (default:
|
||||||
Specify configuration file (default:
|
|
||||||
`userdir/config.json` or `config.json` whichever
|
`userdir/config.json` or `config.json` whichever
|
||||||
exists). Multiple --config options may be used. Can be
|
exists). Multiple --config options may be used. Can be
|
||||||
set to `-` to read config from stdin.
|
set to `-` to read config from stdin.
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
```
|
``` output
|
||||||
usage: freqtrade show-trades [-h] [-v] [--no-color] [--logfile FILE] [-V]
|
usage: freqtrade show-trades [-h] [-v] [--no-color] [--logfile FILE] [-V]
|
||||||
[-c PATH] [-d PATH] [--userdir PATH]
|
[-c PATH] [-d PATH] [--userdir PATH]
|
||||||
[--db-url PATH]
|
[--db-url PATH]
|
||||||
@@ -19,21 +19,20 @@ Common arguments:
|
|||||||
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
|
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
|
||||||
--no-color Disable colorization of hyperopt results. May be
|
--no-color Disable colorization of hyperopt results. May be
|
||||||
useful if you are redirecting output to a file.
|
useful if you are redirecting output to a file.
|
||||||
--logfile FILE, --log-file FILE
|
--logfile, --log-file FILE
|
||||||
Log to the file specified. Special values are:
|
Log to the file specified. Special values are:
|
||||||
'syslog', 'journald'. See the documentation for more
|
'syslog', 'journald'. See the documentation for more
|
||||||
details.
|
details.
|
||||||
-V, --version show program's version number and exit
|
-V, --version show program's version number and exit
|
||||||
-c PATH, --config PATH
|
-c, --config PATH Specify configuration file (default:
|
||||||
Specify configuration file (default:
|
|
||||||
`userdir/config.json` or `config.json` whichever
|
`userdir/config.json` or `config.json` whichever
|
||||||
exists). Multiple --config options may be used. Can be
|
exists). Multiple --config options may be used. Can be
|
||||||
set to `-` to read config from stdin.
|
set to `-` to read config from stdin.
|
||||||
-d PATH, --datadir PATH, --data-dir PATH
|
-d, --datadir, --data-dir PATH
|
||||||
Path to the base directory of the exchange with
|
Path to the base directory of the exchange with
|
||||||
historical backtesting data. To see futures data, use
|
historical backtesting data. To see futures data, use
|
||||||
trading-mode additionally.
|
trading-mode additionally.
|
||||||
--userdir PATH, --user-data-dir PATH
|
--userdir, --user-data-dir PATH
|
||||||
Path to userdata directory.
|
Path to userdata directory.
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
```
|
``` output
|
||||||
usage: freqtrade strategy-updater [-h] [-v] [--no-color] [--logfile FILE] [-V]
|
usage: freqtrade strategy-updater [-h] [-v] [--no-color] [--logfile FILE] [-V]
|
||||||
[-c PATH] [-d PATH] [--userdir PATH]
|
[-c PATH] [-d PATH] [--userdir PATH]
|
||||||
[--strategy-list STRATEGY_LIST [STRATEGY_LIST ...]]
|
[--strategy-list STRATEGY_LIST [STRATEGY_LIST ...]]
|
||||||
@@ -23,21 +23,20 @@ Common arguments:
|
|||||||
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
|
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
|
||||||
--no-color Disable colorization of hyperopt results. May be
|
--no-color Disable colorization of hyperopt results. May be
|
||||||
useful if you are redirecting output to a file.
|
useful if you are redirecting output to a file.
|
||||||
--logfile FILE, --log-file FILE
|
--logfile, --log-file FILE
|
||||||
Log to the file specified. Special values are:
|
Log to the file specified. Special values are:
|
||||||
'syslog', 'journald'. See the documentation for more
|
'syslog', 'journald'. See the documentation for more
|
||||||
details.
|
details.
|
||||||
-V, --version show program's version number and exit
|
-V, --version show program's version number and exit
|
||||||
-c PATH, --config PATH
|
-c, --config PATH Specify configuration file (default:
|
||||||
Specify configuration file (default:
|
|
||||||
`userdir/config.json` or `config.json` whichever
|
`userdir/config.json` or `config.json` whichever
|
||||||
exists). Multiple --config options may be used. Can be
|
exists). Multiple --config options may be used. Can be
|
||||||
set to `-` to read config from stdin.
|
set to `-` to read config from stdin.
|
||||||
-d PATH, --datadir PATH, --data-dir PATH
|
-d, --datadir, --data-dir PATH
|
||||||
Path to the base directory of the exchange with
|
Path to the base directory of the exchange with
|
||||||
historical backtesting data. To see futures data, use
|
historical backtesting data. To see futures data, use
|
||||||
trading-mode additionally.
|
trading-mode additionally.
|
||||||
--userdir PATH, --user-data-dir PATH
|
--userdir, --user-data-dir PATH
|
||||||
Path to userdata directory.
|
Path to userdata directory.
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -1,15 +1,14 @@
|
|||||||
```
|
``` output
|
||||||
usage: freqtrade test-pairlist [-h] [--userdir PATH] [-v] [-c PATH]
|
usage: freqtrade test-pairlist [-h] [--userdir PATH] [-v] [-c PATH]
|
||||||
[--quote QUOTE_CURRENCY [QUOTE_CURRENCY ...]]
|
[--quote QUOTE_CURRENCY [QUOTE_CURRENCY ...]]
|
||||||
[-1] [--print-json] [--exchange EXCHANGE]
|
[-1] [--print-json] [--exchange EXCHANGE]
|
||||||
|
|
||||||
options:
|
options:
|
||||||
-h, --help show this help message and exit
|
-h, --help show this help message and exit
|
||||||
--userdir PATH, --user-data-dir PATH
|
--userdir, --user-data-dir PATH
|
||||||
Path to userdata directory.
|
Path to userdata directory.
|
||||||
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
|
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
|
||||||
-c PATH, --config PATH
|
-c, --config PATH Specify configuration file (default:
|
||||||
Specify configuration file (default:
|
|
||||||
`userdir/config.json` or `config.json` whichever
|
`userdir/config.json` or `config.json` whichever
|
||||||
exists). Multiple --config options may be used. Can be
|
exists). Multiple --config options may be used. Can be
|
||||||
set to `-` to read config from stdin.
|
set to `-` to read config from stdin.
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
```
|
``` output
|
||||||
usage: freqtrade trade [-h] [-v] [--no-color] [--logfile FILE] [-V] [-c PATH]
|
usage: freqtrade trade [-h] [-v] [--no-color] [--logfile FILE] [-V] [-c PATH]
|
||||||
[-d PATH] [--userdir PATH] [-s NAME]
|
[-d PATH] [--userdir PATH] [-s NAME]
|
||||||
[--strategy-path PATH] [--recursive-strategy-search]
|
[--strategy-path PATH] [--recursive-strategy-search]
|
||||||
@@ -15,7 +15,7 @@ options:
|
|||||||
--sd-notify Notify systemd service manager.
|
--sd-notify Notify systemd service manager.
|
||||||
--dry-run Enforce dry-run for trading (removes Exchange secrets
|
--dry-run Enforce dry-run for trading (removes Exchange secrets
|
||||||
and simulates trades).
|
and simulates trades).
|
||||||
--dry-run-wallet DRY_RUN_WALLET, --starting-balance DRY_RUN_WALLET
|
--dry-run-wallet, --starting-balance DRY_RUN_WALLET
|
||||||
Starting balance, used for backtesting / hyperopt and
|
Starting balance, used for backtesting / hyperopt and
|
||||||
dry-runs.
|
dry-runs.
|
||||||
--fee FLOAT Specify fee ratio. Will be applied twice (on trade
|
--fee FLOAT Specify fee ratio. Will be applied twice (on trade
|
||||||
@@ -25,26 +25,24 @@ Common arguments:
|
|||||||
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
|
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
|
||||||
--no-color Disable colorization of hyperopt results. May be
|
--no-color Disable colorization of hyperopt results. May be
|
||||||
useful if you are redirecting output to a file.
|
useful if you are redirecting output to a file.
|
||||||
--logfile FILE, --log-file FILE
|
--logfile, --log-file FILE
|
||||||
Log to the file specified. Special values are:
|
Log to the file specified. Special values are:
|
||||||
'syslog', 'journald'. See the documentation for more
|
'syslog', 'journald'. See the documentation for more
|
||||||
details.
|
details.
|
||||||
-V, --version show program's version number and exit
|
-V, --version show program's version number and exit
|
||||||
-c PATH, --config PATH
|
-c, --config PATH Specify configuration file (default:
|
||||||
Specify configuration file (default:
|
|
||||||
`userdir/config.json` or `config.json` whichever
|
`userdir/config.json` or `config.json` whichever
|
||||||
exists). Multiple --config options may be used. Can be
|
exists). Multiple --config options may be used. Can be
|
||||||
set to `-` to read config from stdin.
|
set to `-` to read config from stdin.
|
||||||
-d PATH, --datadir PATH, --data-dir PATH
|
-d, --datadir, --data-dir PATH
|
||||||
Path to the base directory of the exchange with
|
Path to the base directory of the exchange with
|
||||||
historical backtesting data. To see futures data, use
|
historical backtesting data. To see futures data, use
|
||||||
trading-mode additionally.
|
trading-mode additionally.
|
||||||
--userdir PATH, --user-data-dir PATH
|
--userdir, --user-data-dir PATH
|
||||||
Path to userdata directory.
|
Path to userdata directory.
|
||||||
|
|
||||||
Strategy arguments:
|
Strategy arguments:
|
||||||
-s NAME, --strategy NAME
|
-s, --strategy NAME Specify strategy class name which will be used by the
|
||||||
Specify strategy class name which will be used by the
|
|
||||||
bot.
|
bot.
|
||||||
--strategy-path PATH Specify additional strategy lookup path.
|
--strategy-path PATH Specify additional strategy lookup path.
|
||||||
--recursive-strategy-search
|
--recursive-strategy-search
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
```
|
``` output
|
||||||
usage: freqtrade trades-to-ohlcv [-h] [-v] [--no-color] [--logfile FILE] [-V]
|
usage: freqtrade trades-to-ohlcv [-h] [-v] [--no-color] [--logfile FILE] [-V]
|
||||||
[-c PATH] [-d PATH] [--userdir PATH]
|
[-c PATH] [-d PATH] [--userdir PATH]
|
||||||
[-p PAIRS [PAIRS ...]]
|
[-p PAIRS [PAIRS ...]]
|
||||||
@@ -10,10 +10,10 @@ usage: freqtrade trades-to-ohlcv [-h] [-v] [--no-color] [--logfile FILE] [-V]
|
|||||||
|
|
||||||
options:
|
options:
|
||||||
-h, --help show this help message and exit
|
-h, --help show this help message and exit
|
||||||
-p PAIRS [PAIRS ...], --pairs PAIRS [PAIRS ...]
|
-p, --pairs PAIRS [PAIRS ...]
|
||||||
Limit command to these pairs. Pairs are space-
|
Limit command to these pairs. Pairs are space-
|
||||||
separated.
|
separated.
|
||||||
-t TIMEFRAMES [TIMEFRAMES ...], --timeframes TIMEFRAMES [TIMEFRAMES ...]
|
-t, --timeframes TIMEFRAMES [TIMEFRAMES ...]
|
||||||
Specify which tickers to download. Space-separated
|
Specify which tickers to download. Space-separated
|
||||||
list. Default: `1m 5m`.
|
list. Default: `1m 5m`.
|
||||||
--exchange EXCHANGE Exchange name. Only valid if no config is provided.
|
--exchange EXCHANGE Exchange name. Only valid if no config is provided.
|
||||||
@@ -23,28 +23,27 @@ options:
|
|||||||
--data-format-trades {json,jsongz,feather,parquet}
|
--data-format-trades {json,jsongz,feather,parquet}
|
||||||
Storage format for downloaded trades data. (default:
|
Storage format for downloaded trades data. (default:
|
||||||
`feather`).
|
`feather`).
|
||||||
--trading-mode {spot,margin,futures}, --tradingmode {spot,margin,futures}
|
--trading-mode, --tradingmode {spot,margin,futures}
|
||||||
Select Trading mode
|
Select Trading mode
|
||||||
|
|
||||||
Common arguments:
|
Common arguments:
|
||||||
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
|
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
|
||||||
--no-color Disable colorization of hyperopt results. May be
|
--no-color Disable colorization of hyperopt results. May be
|
||||||
useful if you are redirecting output to a file.
|
useful if you are redirecting output to a file.
|
||||||
--logfile FILE, --log-file FILE
|
--logfile, --log-file FILE
|
||||||
Log to the file specified. Special values are:
|
Log to the file specified. Special values are:
|
||||||
'syslog', 'journald'. See the documentation for more
|
'syslog', 'journald'. See the documentation for more
|
||||||
details.
|
details.
|
||||||
-V, --version show program's version number and exit
|
-V, --version show program's version number and exit
|
||||||
-c PATH, --config PATH
|
-c, --config PATH Specify configuration file (default:
|
||||||
Specify configuration file (default:
|
|
||||||
`userdir/config.json` or `config.json` whichever
|
`userdir/config.json` or `config.json` whichever
|
||||||
exists). Multiple --config options may be used. Can be
|
exists). Multiple --config options may be used. Can be
|
||||||
set to `-` to read config from stdin.
|
set to `-` to read config from stdin.
|
||||||
-d PATH, --datadir PATH, --data-dir PATH
|
-d, --datadir, --data-dir PATH
|
||||||
Path to the base directory of the exchange with
|
Path to the base directory of the exchange with
|
||||||
historical backtesting data. To see futures data, use
|
historical backtesting data. To see futures data, use
|
||||||
trading-mode additionally.
|
trading-mode additionally.
|
||||||
--userdir PATH, --user-data-dir PATH
|
--userdir, --user-data-dir PATH
|
||||||
Path to userdata directory.
|
Path to userdata directory.
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
```
|
``` output
|
||||||
usage: freqtrade webserver [-h] [-v] [--no-color] [--logfile FILE] [-V]
|
usage: freqtrade webserver [-h] [-v] [--no-color] [--logfile FILE] [-V]
|
||||||
[-c PATH] [-d PATH] [--userdir PATH]
|
[-c PATH] [-d PATH] [--userdir PATH]
|
||||||
|
|
||||||
@@ -9,21 +9,20 @@ Common arguments:
|
|||||||
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
|
-v, --verbose Verbose mode (-vv for more, -vvv to get all messages).
|
||||||
--no-color Disable colorization of hyperopt results. May be
|
--no-color Disable colorization of hyperopt results. May be
|
||||||
useful if you are redirecting output to a file.
|
useful if you are redirecting output to a file.
|
||||||
--logfile FILE, --log-file FILE
|
--logfile, --log-file FILE
|
||||||
Log to the file specified. Special values are:
|
Log to the file specified. Special values are:
|
||||||
'syslog', 'journald'. See the documentation for more
|
'syslog', 'journald'. See the documentation for more
|
||||||
details.
|
details.
|
||||||
-V, --version show program's version number and exit
|
-V, --version show program's version number and exit
|
||||||
-c PATH, --config PATH
|
-c, --config PATH Specify configuration file (default:
|
||||||
Specify configuration file (default:
|
|
||||||
`userdir/config.json` or `config.json` whichever
|
`userdir/config.json` or `config.json` whichever
|
||||||
exists). Multiple --config options may be used. Can be
|
exists). Multiple --config options may be used. Can be
|
||||||
set to `-` to read config from stdin.
|
set to `-` to read config from stdin.
|
||||||
-d PATH, --datadir PATH, --data-dir PATH
|
-d, --datadir, --data-dir PATH
|
||||||
Path to the base directory of the exchange with
|
Path to the base directory of the exchange with
|
||||||
historical backtesting data. To see futures data, use
|
historical backtesting data. To see futures data, use
|
||||||
trading-mode additionally.
|
trading-mode additionally.
|
||||||
--userdir PATH, --user-data-dir PATH
|
--userdir, --user-data-dir PATH
|
||||||
Path to userdata directory.
|
Path to userdata directory.
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -407,11 +407,12 @@ To use these with Freqtrade, you will need to use the following configuration pa
|
|||||||
``` json
|
``` json
|
||||||
"exchange": {
|
"exchange": {
|
||||||
"name": "hyperliquid",
|
"name": "hyperliquid",
|
||||||
"walletAddress": "your_vault_address", // Vault or subaccount address
|
"walletAddress": "your_master_wallet_address", // Your master wallet address (not the API wallet address and not the vault/subaccount address).
|
||||||
"privateKey": "your_api_private_key",
|
"privateKey": "your_api_private_key", // API wallet private key (see https://app.hyperliquid.xyz/API). You'll only need the private key.
|
||||||
"ccxt_config": {
|
"ccxt_config": {
|
||||||
"options": {
|
"options": {
|
||||||
"vaultAddress": "your_vault_address" // Optional, only if you want to use a vault or subaccount
|
"vaultAddress": "your_vault_address", // Optional, only if you want to use a vault ...
|
||||||
|
"subAccountAddress": "your_subaccount_address" // OR optional, only if you want to use a subaccount
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
// ...
|
// ...
|
||||||
@@ -420,6 +421,9 @@ To use these with Freqtrade, you will need to use the following configuration pa
|
|||||||
|
|
||||||
Your balance and trades will now be used from your vault / subaccount - and no longer from your main account.
|
Your balance and trades will now be used from your vault / subaccount - and no longer from your main account.
|
||||||
|
|
||||||
|
!!! Note
|
||||||
|
You can only use either a vault or a subaccount - not both at the same time.
|
||||||
|
|
||||||
### Historic Hyperliquid data
|
### Historic Hyperliquid data
|
||||||
|
|
||||||
The Hyperliquid API does not provide historic data beyond the single call to fetch current data, so downloading data is not possible, as the downloaded data would not constitute proper historic data.
|
The Hyperliquid API does not provide historic data beyond the single call to fetch current data, so downloading data is not possible, as the downloaded data would not constitute proper historic data.
|
||||||
|
|||||||
@@ -46,10 +46,17 @@ Depending on the space you want to optimize, only some of the below are required
|
|||||||
|
|
||||||
* define parameters with `space='buy'` - for entry signal optimization
|
* define parameters with `space='buy'` - for entry signal optimization
|
||||||
* define parameters with `space='sell'` - for exit signal optimization
|
* define parameters with `space='sell'` - for exit signal optimization
|
||||||
|
* define parameters with `space='enter'` - for entry signal optimization
|
||||||
|
* define parameters with `space='exit'` - for exit signal optimization
|
||||||
|
* define parameters with `space='protection'` - for protection optimization
|
||||||
|
* define parameters with `space='random_spacename'` - for better control over which parameters are optimized together
|
||||||
|
|
||||||
|
Pick the space name that suits the parameter best. We recommend to use either `buy` / `sell` or `enter` / `exit` for clarity (however there's no technical limitation in this regard).
|
||||||
|
|
||||||
!!! Note
|
!!! Note
|
||||||
`populate_indicators` needs to create all indicators any of the spaces may use, otherwise hyperopt will not work.
|
`populate_indicators` needs to create all indicators any of the spaces may use, otherwise hyperopt will not work.
|
||||||
|
|
||||||
|
|
||||||
Rarely you may also need to create a [nested class](advanced-hyperopt.md#overriding-pre-defined-spaces) named `HyperOpt` and implement
|
Rarely you may also need to create a [nested class](advanced-hyperopt.md#overriding-pre-defined-spaces) named `HyperOpt` and implement
|
||||||
|
|
||||||
* `roi_space` - for custom ROI optimization (if you need the ranges for the ROI parameters in the optimization hyperspace that differ from default)
|
* `roi_space` - for custom ROI optimization (if you need the ranges for the ROI parameters in the optimization hyperspace that differ from default)
|
||||||
@@ -79,15 +86,15 @@ Based on the loss function result, hyperopt will determine the next set of param
|
|||||||
|
|
||||||
### Configure your Guards and Triggers
|
### Configure your Guards and Triggers
|
||||||
|
|
||||||
There are two places you need to change in your strategy file to add a new buy hyperopt for testing:
|
There are two places you need to change in your strategy file to add a new hyperopt parameter for optimization:
|
||||||
|
|
||||||
* Define the parameters at the class level hyperopt shall be optimizing.
|
* Define the parameters at the class level hyperopt shall be optimizing.
|
||||||
* Within `populate_entry_trend()` - use defined parameter values instead of raw constants.
|
* Within `populate_entry_trend()` - use defined parameter values instead of raw constants.
|
||||||
|
|
||||||
There you have two different types of indicators: 1. `guards` and 2. `triggers`.
|
There you have two different types of indicators: 1. `guards` and 2. `triggers`.
|
||||||
|
|
||||||
1. Guards are conditions like "never buy if ADX < 10", or never buy if current price is over EMA10.
|
1. Guards are conditions like "never enter if ADX < 10", or never enter if current price is over EMA10.
|
||||||
2. Triggers are ones that actually trigger buy in specific moment, like "buy when EMA5 crosses over EMA10" or "buy when close price touches lower Bollinger band".
|
2. Triggers are ones that actually trigger entry in specific moment, like "enter when EMA5 crosses over EMA10" or "enter when close price touches lower Bollinger band".
|
||||||
|
|
||||||
!!! Hint "Guards and Triggers"
|
!!! Hint "Guards and Triggers"
|
||||||
Technically, there is no difference between Guards and Triggers.
|
Technically, there is no difference between Guards and Triggers.
|
||||||
@@ -160,9 +167,11 @@ We use these to either enable or disable the ADX and RSI guards.
|
|||||||
The last one we call `trigger` and use it to decide which buy trigger we want to use.
|
The last one we call `trigger` and use it to decide which buy trigger we want to use.
|
||||||
|
|
||||||
!!! Note "Parameter space assignment"
|
!!! Note "Parameter space assignment"
|
||||||
Parameters must either be assigned to a variable named `buy_*` or `sell_*` - or contain `space='buy'` | `space='sell'` to be assigned to a space correctly.
|
- Parameters must either be assigned to a variable named `buy_*`, `sell_*`, `enter_*` or `exit_*` or `protection_*` - or contain have a space assigned explicitly via parameter (`space='buy'`, `space='sell'`, `space='protection'`).
|
||||||
If no parameter is available for a space, you'll receive the error that no space was found when running hyperopt.
|
- Parameters with conflicting assignments (e.g. `buy_adx = IntParameter(4, 24, default=14, space='sell')`) will use the explicit space assignment.
|
||||||
|
- If no parameter is available for a space, you'll receive the error that no space was found when running hyperopt.
|
||||||
Parameters with unclear space (e.g. `adx_period = IntParameter(4, 24, default=14)` - no explicit nor implicit space) will not be detected and will therefore be ignored.
|
Parameters with unclear space (e.g. `adx_period = IntParameter(4, 24, default=14)` - no explicit nor implicit space) will not be detected and will therefore be ignored.
|
||||||
|
Spaces can also be custom named (e.g. `space='my_custom_space'`), with the only limitation that the space name cannot be `all`, `default` - and must result in a valid python identifier.
|
||||||
|
|
||||||
So let's write the buy strategy using these values:
|
So let's write the buy strategy using these values:
|
||||||
|
|
||||||
@@ -520,21 +529,24 @@ freqtrade hyperopt --strategy <strategyname> --timerange 20210101-20210201
|
|||||||
### Running Hyperopt with Smaller Search Space
|
### Running Hyperopt with Smaller Search Space
|
||||||
|
|
||||||
Use the `--spaces` option to limit the search space used by hyperopt.
|
Use the `--spaces` option to limit the search space used by hyperopt.
|
||||||
Letting Hyperopt optimize everything is a huuuuge search space.
|
Letting Hyperopt optimize everything is often a huuuuge search space.
|
||||||
Often it might make more sense to start by just searching for initial buy algorithm.
|
Often it might make more sense to start by just searching for initial entry algorithm.
|
||||||
Or maybe you just want to optimize your stoploss or roi table for that awesome new buy strategy you have.
|
Or maybe you just want to optimize your stoploss or roi table for that awesome new strategy you have.
|
||||||
|
|
||||||
Legal values are:
|
Legal values are:
|
||||||
|
|
||||||
* `all`: optimize everything
|
* `all`: optimize everything (including custom spaces)
|
||||||
* `buy`: just search for a new buy strategy
|
* `buy`: just search for a new buy strategy
|
||||||
* `sell`: just search for a new sell strategy
|
* `sell`: just search for a new sell strategy
|
||||||
|
* `enter`: just search for a new entry logic
|
||||||
|
* `exit`: just search for a new entry logic
|
||||||
* `roi`: just optimize the minimal profit table for your strategy
|
* `roi`: just optimize the minimal profit table for your strategy
|
||||||
* `stoploss`: search for the best stoploss value
|
* `stoploss`: search for the best stoploss value
|
||||||
* `trailing`: search for the best trailing stop values
|
* `trailing`: search for the best trailing stop values
|
||||||
* `trades`: search for the best max open trades values
|
* `trades`: search for the best max open trades values
|
||||||
* `protection`: search for the best protection parameters (read the [protections section](#optimizing-protections) on how to properly define these)
|
* `protection`: search for the best protection parameters (read the [protections section](#optimizing-protections) on how to properly define these)
|
||||||
* `default`: `all` except `trailing`, `trades` and `protection`
|
* `default`: `all` except `trailing`, `trades` and `protection`
|
||||||
|
* `custom_space_name`: any custom space used by any parameter in your strategy
|
||||||
* space-separated list of any of the above values for example `--spaces roi stoploss`
|
* space-separated list of any of the above values for example `--spaces roi stoploss`
|
||||||
|
|
||||||
The default Hyperopt Search Space, used when no `--space` command line option is specified, does not include the `trailing` hyperspace. We recommend you to run optimization for the `trailing` hyperspace separately, when the best parameters for other hyperspaces were found, validated and pasted into your custom strategy.
|
The default Hyperopt Search Space, used when no `--space` command line option is specified, does not include the `trailing` hyperspace. We recommend you to run optimization for the `trailing` hyperspace separately, when the best parameters for other hyperspaces were found, validated and pasted into your custom strategy.
|
||||||
|
|||||||
@@ -367,7 +367,7 @@ The optional `bearer_token` will be included in the requests Authorization Heade
|
|||||||
|
|
||||||
#### MarketCapPairList
|
#### MarketCapPairList
|
||||||
|
|
||||||
`MarketCapPairList` employs sorting/filtering of pairs by their marketcap rank based of CoinGecko. The returned pairlist will be sorted based of their marketcap ranks.
|
`MarketCapPairList` employs sorting/filtering of pairs by their marketcap rank based of CoinGecko. The returned pairlist will be sorted based of their marketcap ranks if used in whitelist `mode`.
|
||||||
|
|
||||||
```json
|
```json
|
||||||
"pairlists": [
|
"pairlists": [
|
||||||
@@ -376,16 +376,21 @@ The optional `bearer_token` will be included in the requests Authorization Heade
|
|||||||
"number_assets": 20,
|
"number_assets": 20,
|
||||||
"max_rank": 50,
|
"max_rank": 50,
|
||||||
"refresh_period": 86400,
|
"refresh_period": 86400,
|
||||||
|
"mode": "whitelist",
|
||||||
"categories": ["layer-1"]
|
"categories": ["layer-1"]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
```
|
```
|
||||||
|
|
||||||
`number_assets` defines the maximum number of pairs returned by the pairlist. `max_rank` will determine the maximum rank used in creating/filtering the pairlist. It's expected that some coins within the top `max_rank` marketcap will not be included in the resulting pairlist since not all pairs will have active trading pairs in your preferred market/stake/exchange combination.
|
`number_assets` defines the maximum number of pairs returned by the pairlist if used in whitelist `mode`. In blacklist `mode`, this setting will be ignored.
|
||||||
|
|
||||||
|
`max_rank` will determine the maximum rank used in creating/filtering the pairlist. It's expected that some coins within the top `max_rank` marketcap will not be included in the resulting pairlist since not all pairs will have active trading pairs in your preferred market/stake/exchange combination.
|
||||||
While using a `max_rank` bigger than 250 is supported, it's not recommended, as it'll cause multiple API calls to CoinGecko, which can lead to rate limit issues.
|
While using a `max_rank` bigger than 250 is supported, it's not recommended, as it'll cause multiple API calls to CoinGecko, which can lead to rate limit issues.
|
||||||
|
|
||||||
The `refresh_period` setting defines the interval (in seconds) at which the marketcap rank data will be refreshed. The default is 86,400 seconds (1 day). The pairlist cache (`refresh_period`) applies to both generating pairlists (when in the first position in the list) and filtering instances (when not in the first position in the list).
|
The `refresh_period` setting defines the interval (in seconds) at which the marketcap rank data will be refreshed. The default is 86,400 seconds (1 day). The pairlist cache (`refresh_period`) applies to both generating pairlists (when in the first position in the list) and filtering instances (when not in the first position in the list).
|
||||||
|
|
||||||
|
The `mode` setting defines whether the plugin will filters in (whitelist `mode`) or filters out (blacklist `mode`) top marketcap ranked coins. By default, the plugin will be in whitelist mode.
|
||||||
|
|
||||||
The `categories` setting specifies the [coingecko categories](https://www.coingecko.com/en/categories) from which to select coins from. The default is an empty list `[]`, meaning no category filtering is applied.
|
The `categories` setting specifies the [coingecko categories](https://www.coingecko.com/en/categories) from which to select coins from. The default is an empty list `[]`, meaning no category filtering is applied.
|
||||||
If an incorrect category string is chosen, the plugin will print the available categories from CoinGecko and fail. The category should be the ID of the category, for example, for `https://www.coingecko.com/en/categories/layer-1`, the category ID would be `layer-1`. You can pass multiple categories such as `["layer-1", "meme-token"]` to select from several categories.
|
If an incorrect category string is chosen, the plugin will print the available categories from CoinGecko and fail. The category should be the ID of the category, for example, for `https://www.coingecko.com/en/categories/layer-1`, the category ID would be `layer-1`. You can pass multiple categories such as `["layer-1", "meme-token"]` to select from several categories.
|
||||||
|
|
||||||
@@ -412,7 +417,7 @@ This filter allows freqtrade to ignore pairs until they have been listed for at
|
|||||||
Removes pairs that will be delisted on the exchange maximum `max_days_from_now` days from now (defaults to `0` which remove all future delisted pairs no matter how far from now). Currently this filter only supports following exchanges:
|
Removes pairs that will be delisted on the exchange maximum `max_days_from_now` days from now (defaults to `0` which remove all future delisted pairs no matter how far from now). Currently this filter only supports following exchanges:
|
||||||
|
|
||||||
!!! Note "Available exchanges"
|
!!! Note "Available exchanges"
|
||||||
Delist filter is only available on Binance, where Binance Futures will work for both dry and live modes, while Binance Spot is limited to live mode (for technical reasons).
|
Delist filter is available on Bybit Futures, Bitget Futures and Binance, where Binance Futures will work for both dry and live modes, while Binance Spot is limited to live mode (for technical reasons).
|
||||||
|
|
||||||
!!! Warning "Backtesting"
|
!!! Warning "Backtesting"
|
||||||
`DelistFilter` does not support backtesting mode.
|
`DelistFilter` does not support backtesting mode.
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||

|

|
||||||
|
|
||||||
[](https://github.com/freqtrade/freqtrade/actions/)
|
[](https://github.com/freqtrade/freqtrade/actions/workflows/ci.yml)
|
||||||
[](https://doi.org/10.21105/joss.04864)
|
[](https://doi.org/10.21105/joss.04864)
|
||||||
[](https://coveralls.io/github/freqtrade/freqtrade?branch=develop)
|
[](https://coveralls.io/github/freqtrade/freqtrade?branch=develop)
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
markdown==3.9
|
markdown==3.10
|
||||||
mkdocs==1.6.1
|
mkdocs==1.6.1
|
||||||
mkdocs-material==9.6.22
|
mkdocs-material==9.7.0
|
||||||
mdx_truly_sane_lists==1.3
|
mdx_truly_sane_lists==1.3
|
||||||
pymdown-extensions==10.16.1
|
pymdown-extensions==10.17.1
|
||||||
jinja2==3.1.6
|
jinja2==3.1.6
|
||||||
mike==2.1.3
|
mike==2.1.3
|
||||||
|
|||||||
176
docs/rest-api.md
176
docs/rest-api.md
@@ -150,184 +150,16 @@ This method will work for all arguments - check the "show" command for a list of
|
|||||||
|
|
||||||
For a full list of available commands, please refer to the list below.
|
For a full list of available commands, please refer to the list below.
|
||||||
|
|
||||||
|
#### Freqtrade client- available commands
|
||||||
|
|
||||||
Possible commands can be listed from the rest-client script using the `help` command.
|
Possible commands can be listed from the rest-client script using the `help` command.
|
||||||
|
|
||||||
``` bash
|
``` bash
|
||||||
freqtrade-client help
|
freqtrade-client help
|
||||||
```
|
```
|
||||||
|
|
||||||
``` output
|
--8<-- "commands/freqtrade-client.md"
|
||||||
Possible commands:
|
|
||||||
|
|
||||||
available_pairs
|
|
||||||
Return available pair (backtest data) based on timeframe / stake_currency selection
|
|
||||||
|
|
||||||
:param timeframe: Only pairs with this timeframe available.
|
|
||||||
:param stake_currency: Only pairs that include this timeframe
|
|
||||||
|
|
||||||
balance
|
|
||||||
Get the account balance.
|
|
||||||
|
|
||||||
blacklist
|
|
||||||
Show the current blacklist.
|
|
||||||
|
|
||||||
:param add: List of coins to add (example: "BNB/BTC")
|
|
||||||
|
|
||||||
cancel_open_order
|
|
||||||
Cancel open order for trade.
|
|
||||||
|
|
||||||
:param trade_id: Cancels open orders for this trade.
|
|
||||||
|
|
||||||
count
|
|
||||||
Return the amount of open trades.
|
|
||||||
|
|
||||||
daily
|
|
||||||
Return the profits for each day, and amount of trades.
|
|
||||||
|
|
||||||
delete_lock
|
|
||||||
Delete (disable) lock from the database.
|
|
||||||
|
|
||||||
:param lock_id: ID for the lock to delete
|
|
||||||
|
|
||||||
delete_trade
|
|
||||||
Delete trade from the database.
|
|
||||||
Tries to close open orders. Requires manual handling of this asset on the exchange.
|
|
||||||
|
|
||||||
:param trade_id: Deletes the trade with this ID from the database.
|
|
||||||
|
|
||||||
forcebuy
|
|
||||||
Buy an asset.
|
|
||||||
|
|
||||||
:param pair: Pair to buy (ETH/BTC)
|
|
||||||
:param price: Optional - price to buy
|
|
||||||
|
|
||||||
forceenter
|
|
||||||
Force entering a trade
|
|
||||||
|
|
||||||
:param pair: Pair to buy (ETH/BTC)
|
|
||||||
:param side: 'long' or 'short'
|
|
||||||
:param price: Optional - price to buy
|
|
||||||
|
|
||||||
forceexit
|
|
||||||
Force-exit a trade.
|
|
||||||
|
|
||||||
:param tradeid: Id of the trade (can be received via status command)
|
|
||||||
:param ordertype: Order type to use (must be market or limit)
|
|
||||||
:param amount: Amount to sell. Full sell if not given
|
|
||||||
|
|
||||||
health
|
|
||||||
Provides a quick health check of the running bot.
|
|
||||||
|
|
||||||
lock_add
|
|
||||||
Manually lock a specific pair
|
|
||||||
|
|
||||||
:param pair: Pair to lock
|
|
||||||
:param until: Lock until this date (format "2024-03-30 16:00:00Z")
|
|
||||||
:param side: Side to lock (long, short, *)
|
|
||||||
:param reason: Reason for the lock
|
|
||||||
|
|
||||||
locks
|
|
||||||
Return current locks
|
|
||||||
|
|
||||||
logs
|
|
||||||
Show latest logs.
|
|
||||||
|
|
||||||
:param limit: Limits log messages to the last <limit> logs. No limit to get the entire log.
|
|
||||||
|
|
||||||
pair_candles
|
|
||||||
Return live dataframe for <pair><timeframe>.
|
|
||||||
|
|
||||||
:param pair: Pair to get data for
|
|
||||||
:param timeframe: Only pairs with this timeframe available.
|
|
||||||
:param limit: Limit result to the last n candles.
|
|
||||||
|
|
||||||
pair_history
|
|
||||||
Return historic, analyzed dataframe
|
|
||||||
|
|
||||||
:param pair: Pair to get data for
|
|
||||||
:param timeframe: Only pairs with this timeframe available.
|
|
||||||
:param strategy: Strategy to analyze and get values for
|
|
||||||
:param timerange: Timerange to get data for (same format than --timerange endpoints)
|
|
||||||
|
|
||||||
performance
|
|
||||||
Return the performance of the different coins.
|
|
||||||
|
|
||||||
ping
|
|
||||||
simple ping
|
|
||||||
|
|
||||||
plot_config
|
|
||||||
Return plot configuration if the strategy defines one.
|
|
||||||
|
|
||||||
profit
|
|
||||||
Return the profit summary.
|
|
||||||
|
|
||||||
reload_config
|
|
||||||
Reload configuration.
|
|
||||||
|
|
||||||
show_config
|
|
||||||
Returns part of the configuration, relevant for trading operations.
|
|
||||||
|
|
||||||
start
|
|
||||||
Start the bot if it's in the stopped state.
|
|
||||||
|
|
||||||
pause
|
|
||||||
Pause the bot if it's in the running state. If triggered on stopped state will handle open positions.
|
|
||||||
|
|
||||||
stats
|
|
||||||
Return the stats report (durations, sell-reasons).
|
|
||||||
|
|
||||||
status
|
|
||||||
Get the status of open trades.
|
|
||||||
|
|
||||||
stop
|
|
||||||
Stop the bot. Use `start` to restart.
|
|
||||||
|
|
||||||
stopbuy
|
|
||||||
Stop buying (but handle sells gracefully). Use `reload_config` to reset.
|
|
||||||
|
|
||||||
strategies
|
|
||||||
Lists available strategies
|
|
||||||
|
|
||||||
strategy
|
|
||||||
Get strategy details
|
|
||||||
|
|
||||||
:param strategy: Strategy class name
|
|
||||||
|
|
||||||
sysinfo
|
|
||||||
Provides system information (CPU, RAM usage)
|
|
||||||
|
|
||||||
trade
|
|
||||||
Return specific trade
|
|
||||||
|
|
||||||
:param trade_id: Specify which trade to get.
|
|
||||||
|
|
||||||
trades
|
|
||||||
Return trades history, sorted by id
|
|
||||||
|
|
||||||
:param limit: Limits trades to the X last trades. Max 500 trades.
|
|
||||||
:param offset: Offset by this amount of trades.
|
|
||||||
|
|
||||||
list_open_trades_custom_data
|
|
||||||
Return a dict containing open trades custom-datas
|
|
||||||
|
|
||||||
:param key: str, optional - Key of the custom-data
|
|
||||||
:param limit: Limits trades to X trades.
|
|
||||||
:param offset: Offset by this amount of trades.
|
|
||||||
|
|
||||||
list_custom_data
|
|
||||||
Return a dict containing custom-datas of a specified trade
|
|
||||||
|
|
||||||
:param trade_id: int - ID of the trade
|
|
||||||
:param key: str, optional - Key of the custom-data
|
|
||||||
|
|
||||||
version
|
|
||||||
Return the version of the bot.
|
|
||||||
|
|
||||||
whitelist
|
|
||||||
Show the current whitelist.
|
|
||||||
|
|
||||||
|
|
||||||
```
|
|
||||||
|
|
||||||
### Available endpoints
|
### Available endpoints
|
||||||
|
|
||||||
@@ -359,7 +191,7 @@ All endpoints in the below table need to be prefixed with the base URL of the AP
|
|||||||
| `/locks/<lockid>` | DELETE | Deletes (disables) the lock by id.<br/>*Params:*<br/>- `lockid` (`int`)
|
| `/locks/<lockid>` | DELETE | Deletes (disables) the lock by id.<br/>*Params:*<br/>- `lockid` (`int`)
|
||||||
| `/profit` | GET | Display a summary of your profit/loss from close trades and some stats about your performance.
|
| `/profit` | GET | Display a summary of your profit/loss from close trades and some stats about your performance.
|
||||||
| `/forceexit` | POST | Instantly exits the given trade (ignoring `minimum_roi`), using the given order type ("market" or "limit", uses your config setting if not specified), and the chosen amount (full sell if not specified). If `all` is supplied as the `tradeid`, then all currently open trades will be forced to exit.<br/>*Params:*<br/>- `<tradeid>` (`int` or `str`)<br/>- `<ordertype>` (`str`)<br/>- `[amount]` (`float`)
|
| `/forceexit` | POST | Instantly exits the given trade (ignoring `minimum_roi`), using the given order type ("market" or "limit", uses your config setting if not specified), and the chosen amount (full sell if not specified). If `all` is supplied as the `tradeid`, then all currently open trades will be forced to exit.<br/>*Params:*<br/>- `<tradeid>` (`int` or `str`)<br/>- `<ordertype>` (`str`)<br/>- `[amount]` (`float`)
|
||||||
| `/forceenter` | POST | Instantly enters the given pair. Side is optional and is either `long` or `short` (default is `long`). Rate is optional. (`force_entry_enable` must be set to True)<br/>*Params:*<br/>- `<pair>` (`str`)<br/>- `<side>` (`str`)<br/>- `[rate]` (`float`)
|
| `/forceenter` | POST | Instantly enters the given pair. Side is optional and is either `long` or `short` (default is `long`). Price, stake amount, entry tag and leverage are optional. Order type is optional and is either `market` or `long` (default using the value set in config). (`force_entry_enable` must be set to True)<br/>*Params:*<br/>- `<pair>` (`str`)<br/>- `<side>` (`str`)<br/>- `[price]` (`float`)<br/>- `[ordertype]` (`str`)<br/>- `[stakeamount]` (`float`)<br/>- `[entry_tag]` (`str`)<br/>- `[leverage]` (`float`)
|
||||||
| `/performance` | GET | Show performance of each finished trade grouped by pair.
|
| `/performance` | GET | Show performance of each finished trade grouped by pair.
|
||||||
| `/balance` | GET | Show account balance per currency.
|
| `/balance` | GET | Show account balance per currency.
|
||||||
| `/daily` | GET | Shows profit or loss per day, over the last n days (n defaults to 7).<br/>*Params:*<br/>- `timescale` (`int`)
|
| `/daily` | GET | Shows profit or loss per day, over the last n days (n defaults to 7).<br/>*Params:*<br/>- `timescale` (`int`)
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
"""Freqtrade bot"""
|
"""Freqtrade bot"""
|
||||||
|
|
||||||
__version__ = "2025.10"
|
__version__ = "2025.11-dev"
|
||||||
|
|
||||||
if "dev" in __version__:
|
if "dev" in __version__:
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|||||||
@@ -104,7 +104,7 @@ ARGS_BACKTEST_SHOW = [
|
|||||||
|
|
||||||
ARGS_LIST_EXCHANGES = ["print_one_column", "list_exchanges_all", "trading_mode", "dex_exchanges"]
|
ARGS_LIST_EXCHANGES = ["print_one_column", "list_exchanges_all", "trading_mode", "dex_exchanges"]
|
||||||
|
|
||||||
ARGS_LIST_TIMEFRAMES = ["exchange", "print_one_column"]
|
ARGS_LIST_TIMEFRAMES = ["exchange", "print_one_column", "trading_mode"]
|
||||||
|
|
||||||
ARGS_LIST_PAIRS = [
|
ARGS_LIST_PAIRS = [
|
||||||
"exchange",
|
"exchange",
|
||||||
|
|||||||
@@ -5,7 +5,10 @@ Definition of cli arguments used in arguments.py
|
|||||||
from argparse import ArgumentTypeError
|
from argparse import ArgumentTypeError
|
||||||
|
|
||||||
from freqtrade import constants
|
from freqtrade import constants
|
||||||
from freqtrade.constants import HYPEROPT_LOSS_BUILTIN
|
from freqtrade.constants import (
|
||||||
|
HYPEROPT_BUILTIN_SPACE_OPTIONS,
|
||||||
|
HYPEROPT_LOSS_BUILTIN,
|
||||||
|
)
|
||||||
from freqtrade.enums import CandleType
|
from freqtrade.enums import CandleType
|
||||||
|
|
||||||
|
|
||||||
@@ -278,26 +281,18 @@ AVAILABLE_CLI_OPTIONS = {
|
|||||||
),
|
),
|
||||||
"spaces": Arg(
|
"spaces": Arg(
|
||||||
"--spaces",
|
"--spaces",
|
||||||
help="Specify which parameters to hyperopt. Space-separated list.",
|
help=(
|
||||||
choices=[
|
"Specify which parameters to hyperopt. Space-separated list. "
|
||||||
"all",
|
"Available builtin options (custom spaces will not be listed here): "
|
||||||
"buy",
|
f"{', '.join(HYPEROPT_BUILTIN_SPACE_OPTIONS)}. Default: `default` - "
|
||||||
"sell",
|
"which includes all spaces except for 'trailing', 'protection', and 'trades'."
|
||||||
"roi",
|
),
|
||||||
"stoploss",
|
|
||||||
"trailing",
|
|
||||||
"protection",
|
|
||||||
"trades",
|
|
||||||
"default",
|
|
||||||
],
|
|
||||||
nargs="+",
|
nargs="+",
|
||||||
default="default",
|
|
||||||
),
|
),
|
||||||
"analyze_per_epoch": Arg(
|
"analyze_per_epoch": Arg(
|
||||||
"--analyze-per-epoch",
|
"--analyze-per-epoch",
|
||||||
help="Run populate_indicators once per epoch.",
|
help="Run populate_indicators once per epoch.",
|
||||||
action="store_true",
|
action="store_true",
|
||||||
default=False,
|
|
||||||
),
|
),
|
||||||
"print_all": Arg(
|
"print_all": Arg(
|
||||||
"--print-all",
|
"--print-all",
|
||||||
|
|||||||
@@ -101,7 +101,7 @@ def _print_objs_tabular(objs: list, print_colorized: bool) -> None:
|
|||||||
names = [s["name"] for s in objs]
|
names = [s["name"] for s in objs]
|
||||||
objs_to_print: list[dict[str, Text | str]] = [
|
objs_to_print: list[dict[str, Text | str]] = [
|
||||||
{
|
{
|
||||||
"name": Text(s["name"] if s["name"] else "--"),
|
"Strategy name": Text(s["name"] if s["name"] else "--"),
|
||||||
"location": s["location_rel"],
|
"location": s["location_rel"],
|
||||||
"status": (
|
"status": (
|
||||||
Text("LOAD FAILED", style="bold red")
|
Text("LOAD FAILED", style="bold red")
|
||||||
@@ -115,11 +115,19 @@ def _print_objs_tabular(objs: list, print_colorized: bool) -> None:
|
|||||||
]
|
]
|
||||||
for idx, s in enumerate(objs):
|
for idx, s in enumerate(objs):
|
||||||
if "hyperoptable" in s:
|
if "hyperoptable" in s:
|
||||||
|
custom_params = [
|
||||||
|
f"{space}: {len(params)}"
|
||||||
|
for space, params in s["hyperoptable"].items()
|
||||||
|
if space not in ["buy", "sell", "protection"]
|
||||||
|
]
|
||||||
|
hyp = s["hyperoptable"]
|
||||||
objs_to_print[idx].update(
|
objs_to_print[idx].update(
|
||||||
{
|
{
|
||||||
"hyperoptable": "Yes" if s["hyperoptable"]["count"] > 0 else "No",
|
"hyperoptable": "Yes" if len(hyp) > 0 else "No",
|
||||||
"buy-Params": str(len(s["hyperoptable"].get("buy", []))),
|
"buy-Params": str(len(hyp.get("buy", []))),
|
||||||
"sell-Params": str(len(s["hyperoptable"].get("sell", []))),
|
"sell-Params": str(len(hyp.get("sell", []))),
|
||||||
|
"protection-Params": str(len(hyp.get("protection", []))),
|
||||||
|
"custom-Params": ", ".join(custom_params) if custom_params else "",
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
table = Table()
|
table = Table()
|
||||||
@@ -140,6 +148,7 @@ def start_list_strategies(args: dict[str, Any]) -> None:
|
|||||||
"""
|
"""
|
||||||
from freqtrade.configuration import setup_utils_configuration
|
from freqtrade.configuration import setup_utils_configuration
|
||||||
from freqtrade.resolvers import StrategyResolver
|
from freqtrade.resolvers import StrategyResolver
|
||||||
|
from freqtrade.strategy.hyper import detect_all_parameters
|
||||||
|
|
||||||
config = setup_utils_configuration(args, RunMode.UTIL_NO_EXCHANGE)
|
config = setup_utils_configuration(args, RunMode.UTIL_NO_EXCHANGE)
|
||||||
|
|
||||||
@@ -153,9 +162,9 @@ def start_list_strategies(args: dict[str, Any]) -> None:
|
|||||||
strategy_objs = sorted(strategy_objs, key=lambda x: x["name"])
|
strategy_objs = sorted(strategy_objs, key=lambda x: x["name"])
|
||||||
for obj in strategy_objs:
|
for obj in strategy_objs:
|
||||||
if obj["class"]:
|
if obj["class"]:
|
||||||
obj["hyperoptable"] = obj["class"].detect_all_parameters()
|
obj["hyperoptable"] = detect_all_parameters(obj["class"])
|
||||||
else:
|
else:
|
||||||
obj["hyperoptable"] = {"count": 0}
|
obj["hyperoptable"] = {}
|
||||||
|
|
||||||
if args["print_one_column"]:
|
if args["print_one_column"]:
|
||||||
print("\n".join([s["name"] for s in strategy_objs]))
|
print("\n".join([s["name"] for s in strategy_objs]))
|
||||||
|
|||||||
@@ -1,11 +1,14 @@
|
|||||||
# Required json-schema for user specified config
|
# Required json-schema for user specified config
|
||||||
|
|
||||||
|
|
||||||
from freqtrade.constants import (
|
from freqtrade.constants import (
|
||||||
AVAILABLE_DATAHANDLERS,
|
AVAILABLE_DATAHANDLERS,
|
||||||
AVAILABLE_PAIRLISTS,
|
AVAILABLE_PAIRLISTS,
|
||||||
BACKTEST_BREAKDOWNS,
|
BACKTEST_BREAKDOWNS,
|
||||||
|
BACKTEST_CACHE_AGE,
|
||||||
DRY_RUN_WALLET,
|
DRY_RUN_WALLET,
|
||||||
EXPORT_OPTIONS,
|
EXPORT_OPTIONS,
|
||||||
|
HYPEROPT_LOSS_BUILTIN,
|
||||||
MARGIN_MODES,
|
MARGIN_MODES,
|
||||||
ORDERTIF_POSSIBILITIES,
|
ORDERTIF_POSSIBILITIES,
|
||||||
ORDERTYPE_POSSIBILITIES,
|
ORDERTYPE_POSSIBILITIES,
|
||||||
@@ -228,6 +231,76 @@ CONF_SCHEMA = {
|
|||||||
"type": "array",
|
"type": "array",
|
||||||
"items": {"type": "string", "enum": BACKTEST_BREAKDOWNS},
|
"items": {"type": "string", "enum": BACKTEST_BREAKDOWNS},
|
||||||
},
|
},
|
||||||
|
"backtest_cache": {
|
||||||
|
"description": "Load a cached backtest result no older than specified age.",
|
||||||
|
"type": "string",
|
||||||
|
"enum": BACKTEST_CACHE_AGE,
|
||||||
|
},
|
||||||
|
# Hyperopt
|
||||||
|
"hyperopt_path": {
|
||||||
|
"description": "Specify additional lookup path for Hyperopt Loss functions.",
|
||||||
|
"type": "string",
|
||||||
|
},
|
||||||
|
"epochs": {
|
||||||
|
"description": "Number of training epochs for Hyperopt.",
|
||||||
|
"type": "integer",
|
||||||
|
"minimum": 1,
|
||||||
|
},
|
||||||
|
"early_stop": {
|
||||||
|
"description": (
|
||||||
|
"Early stop hyperopt if no improvement after <epochs>. Set to 0 to disable."
|
||||||
|
),
|
||||||
|
"type": "integer",
|
||||||
|
"minimum": 0,
|
||||||
|
},
|
||||||
|
"spaces": {
|
||||||
|
"description": (
|
||||||
|
"Hyperopt parameter spaces to optimize. Default is the default set and"
|
||||||
|
"includes all spaces except for 'trailing', 'protection', and 'trades'."
|
||||||
|
),
|
||||||
|
"type": "array",
|
||||||
|
"items": {"type": "string"},
|
||||||
|
"default": ["default"],
|
||||||
|
},
|
||||||
|
"analyze_per_epoch": {
|
||||||
|
"description": "Perform analysis after each epoch in Hyperopt.",
|
||||||
|
"type": "boolean",
|
||||||
|
},
|
||||||
|
"print_all": {
|
||||||
|
"description": "Print all hyperopt trials, not just the best ones.",
|
||||||
|
"type": "boolean",
|
||||||
|
"default": False,
|
||||||
|
},
|
||||||
|
"hyperopt_jobs": {
|
||||||
|
"description": (
|
||||||
|
"The number of concurrently running jobs for hyperoptimization "
|
||||||
|
"(hyperopt worker processes). "
|
||||||
|
"If -1 (default), all CPUs are used, for -2, all CPUs but one are used, etc. "
|
||||||
|
"If 1 is given, no parallel computing is used."
|
||||||
|
),
|
||||||
|
"type": "integer",
|
||||||
|
"default": -1,
|
||||||
|
},
|
||||||
|
"hyperopt_random_state": {
|
||||||
|
"description": "Random state for hyperopt trials.",
|
||||||
|
"type": "integer",
|
||||||
|
"minimum": 0,
|
||||||
|
},
|
||||||
|
"hyperopt_min_trades": {
|
||||||
|
"description": "Minimum number of trades per epoch for hyperopt.",
|
||||||
|
"type": "integer",
|
||||||
|
"minimum": 0,
|
||||||
|
},
|
||||||
|
"hyperopt_loss": {
|
||||||
|
"description": (
|
||||||
|
"The class name of the hyperopt loss function class (IHyperOptLoss). "
|
||||||
|
"Different functions can generate completely different results, "
|
||||||
|
"since the target for optimization is different. "
|
||||||
|
f"Built-in Hyperopt-loss-functions are: {', '.join(HYPEROPT_LOSS_BUILTIN)}"
|
||||||
|
),
|
||||||
|
"type": "string",
|
||||||
|
},
|
||||||
|
# end hyperopt
|
||||||
"bot_name": {
|
"bot_name": {
|
||||||
"description": "Name of the trading bot. Passed via API to a client.",
|
"description": "Name of the trading bot. Passed via API to a client.",
|
||||||
"type": "string",
|
"type": "string",
|
||||||
|
|||||||
@@ -41,6 +41,19 @@ HYPEROPT_LOSS_BUILTIN = [
|
|||||||
"ProfitDrawDownHyperOptLoss",
|
"ProfitDrawDownHyperOptLoss",
|
||||||
"MultiMetricHyperOptLoss",
|
"MultiMetricHyperOptLoss",
|
||||||
]
|
]
|
||||||
|
HYPEROPT_BUILTIN_SPACES = [
|
||||||
|
"buy",
|
||||||
|
"sell",
|
||||||
|
"enter",
|
||||||
|
"exit",
|
||||||
|
"roi",
|
||||||
|
"stoploss",
|
||||||
|
"trailing",
|
||||||
|
"protection",
|
||||||
|
"trades",
|
||||||
|
]
|
||||||
|
HYPEROPT_BUILTIN_SPACE_OPTIONS = ["default", "all"] + HYPEROPT_BUILTIN_SPACES
|
||||||
|
|
||||||
AVAILABLE_PAIRLISTS = [
|
AVAILABLE_PAIRLISTS = [
|
||||||
"StaticPairList",
|
"StaticPairList",
|
||||||
"VolumePairList",
|
"VolumePairList",
|
||||||
|
|||||||
@@ -388,8 +388,10 @@ def refresh_backtest_ohlcv_data(
|
|||||||
for timeframe in timeframes:
|
for timeframe in timeframes:
|
||||||
# Get fast candles via parallel method on first loop through per timeframe
|
# Get fast candles via parallel method on first loop through per timeframe
|
||||||
# and candle type. Downloads all the pairs in the list and stores them.
|
# and candle type. Downloads all the pairs in the list and stores them.
|
||||||
|
# Also skips if only 1 pair/timeframe combination is scheduled for download.
|
||||||
if (
|
if (
|
||||||
not no_parallel_download
|
not no_parallel_download
|
||||||
|
and (len(pairs) + len(timeframes)) > 2
|
||||||
and exchange.get_option("download_data_parallel_quick", True)
|
and exchange.get_option("download_data_parallel_quick", True)
|
||||||
and (
|
and (
|
||||||
((pair, timeframe, candle_type) not in fast_candles)
|
((pair, timeframe, candle_type) not in fast_candles)
|
||||||
@@ -474,7 +476,7 @@ def _download_all_pairs_history_parallel(
|
|||||||
:return: Candle pairs with timeframes
|
:return: Candle pairs with timeframes
|
||||||
"""
|
"""
|
||||||
candles: dict[PairWithTimeframe, DataFrame] = {}
|
candles: dict[PairWithTimeframe, DataFrame] = {}
|
||||||
since = 0
|
since: int | None = None
|
||||||
if timerange:
|
if timerange:
|
||||||
if timerange.starttype == "date":
|
if timerange.starttype == "date":
|
||||||
since = timerange.startts * 1000
|
since = timerange.startts * 1000
|
||||||
@@ -482,10 +484,12 @@ def _download_all_pairs_history_parallel(
|
|||||||
candle_limit = exchange.ohlcv_candle_limit(timeframe, candle_type)
|
candle_limit = exchange.ohlcv_candle_limit(timeframe, candle_type)
|
||||||
one_call_min_time_dt = dt_ts(date_minus_candles(timeframe, candle_limit))
|
one_call_min_time_dt = dt_ts(date_minus_candles(timeframe, candle_limit))
|
||||||
# check if we can get all candles in one go, if so then we can download them in parallel
|
# check if we can get all candles in one go, if so then we can download them in parallel
|
||||||
if since > one_call_min_time_dt:
|
if since is None or since > one_call_min_time_dt:
|
||||||
logger.info(
|
logger.info(
|
||||||
f"Downloading parallel candles for {timeframe} for all pairs "
|
f"Downloading parallel candles for {timeframe} for all pairs"
|
||||||
f"since {format_ms_time(since)}"
|
f" since {format_ms_time(since)}"
|
||||||
|
if since
|
||||||
|
else "."
|
||||||
)
|
)
|
||||||
needed_pairs: ListPairsWithTimeframes = [
|
needed_pairs: ListPairsWithTimeframes = [
|
||||||
(p, timeframe, candle_type) for p in [p for p in pairs]
|
(p, timeframe, candle_type) for p in [p for p in pairs]
|
||||||
@@ -693,6 +697,9 @@ def download_data(
|
|||||||
"""
|
"""
|
||||||
Download data function. Used from both cli and API.
|
Download data function. Used from both cli and API.
|
||||||
"""
|
"""
|
||||||
|
exchange.validate_trading_mode_and_margin_mode(
|
||||||
|
config.get("trading_mode", TradingMode.SPOT), None, allow_none_margin_mode=True
|
||||||
|
)
|
||||||
timerange = TimeRange()
|
timerange = TimeRange()
|
||||||
if "days" in config and config["days"] is not None:
|
if "days" in config and config["days"] is not None:
|
||||||
time_since = (datetime.now() - timedelta(days=config["days"])).strftime("%Y%m%d")
|
time_since = (datetime.now() - timedelta(days=config["days"])).strftime("%Y%m%d")
|
||||||
|
|||||||
@@ -143,6 +143,20 @@ def _calc_drawdown_series(
|
|||||||
max_drawdown_df["drawdown_relative"] = (
|
max_drawdown_df["drawdown_relative"] = (
|
||||||
max_drawdown_df["high_value"] - max_drawdown_df["cumulative"]
|
max_drawdown_df["high_value"] - max_drawdown_df["cumulative"]
|
||||||
) / max_drawdown_df["high_value"]
|
) / max_drawdown_df["high_value"]
|
||||||
|
|
||||||
|
# Add zero row at start to account for edge-cases with no winning / losing trades - so high/low
|
||||||
|
# will be 0.0 in such cases.
|
||||||
|
zero_row = pd.DataFrame(
|
||||||
|
{
|
||||||
|
"cumulative": [0.0],
|
||||||
|
"high_value": [0.0],
|
||||||
|
"drawdown": [0.0],
|
||||||
|
"drawdown_relative": [0.0],
|
||||||
|
"date": [profit_results.loc[0, date_col]],
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
max_drawdown_df = pd.concat([zero_row, max_drawdown_df], ignore_index=True)
|
||||||
return max_drawdown_df
|
return max_drawdown_df
|
||||||
|
|
||||||
|
|
||||||
@@ -215,6 +229,7 @@ def calculate_max_drawdown(
|
|||||||
max_drawdown_df = _calc_drawdown_series(
|
max_drawdown_df = _calc_drawdown_series(
|
||||||
profit_results, date_col=date_col, value_col=value_col, starting_balance=starting_balance
|
profit_results, date_col=date_col, value_col=value_col, starting_balance=starting_balance
|
||||||
)
|
)
|
||||||
|
# max_drawdown_df has an extra zero row at the start
|
||||||
|
|
||||||
# Calculate maximum drawdown
|
# Calculate maximum drawdown
|
||||||
idxmin = (
|
idxmin = (
|
||||||
@@ -223,15 +238,15 @@ def calculate_max_drawdown(
|
|||||||
else max_drawdown_df["drawdown"].idxmin()
|
else max_drawdown_df["drawdown"].idxmin()
|
||||||
)
|
)
|
||||||
high_idx = max_drawdown_df.iloc[: idxmin + 1]["high_value"].idxmax()
|
high_idx = max_drawdown_df.iloc[: idxmin + 1]["high_value"].idxmax()
|
||||||
high_date = profit_results.loc[high_idx, date_col]
|
high_date = profit_results.at[max(high_idx - 1, 0), date_col]
|
||||||
low_date = profit_results.loc[idxmin, date_col]
|
low_date = profit_results.at[max(idxmin - 1, 0), date_col]
|
||||||
high_val = max_drawdown_df.loc[high_idx, "cumulative"]
|
high_val = max_drawdown_df.at[high_idx, "cumulative"]
|
||||||
low_val = max_drawdown_df.loc[idxmin, "cumulative"]
|
low_val = max_drawdown_df.at[idxmin, "cumulative"]
|
||||||
max_drawdown_rel = max_drawdown_df.loc[idxmin, "drawdown_relative"]
|
max_drawdown_rel = max_drawdown_df.at[idxmin, "drawdown_relative"]
|
||||||
|
|
||||||
# Calculate current drawdown
|
# Calculate current drawdown
|
||||||
current_high_idx = max_drawdown_df["high_value"].iloc[:-1].idxmax()
|
current_high_idx = max_drawdown_df["high_value"].iloc[:-1].idxmax()
|
||||||
current_high_date = profit_results.loc[current_high_idx, date_col]
|
current_high_date = profit_results.at[max(current_high_idx - 1, 0), date_col]
|
||||||
current_high_value = max_drawdown_df.iloc[-1]["high_value"]
|
current_high_value = max_drawdown_df.iloc[-1]["high_value"]
|
||||||
current_cumulative = max_drawdown_df.iloc[-1]["cumulative"]
|
current_cumulative = max_drawdown_df.iloc[-1]["cumulative"]
|
||||||
current_drawdown_abs = current_high_value - current_cumulative
|
current_drawdown_abs = current_high_value - current_cumulative
|
||||||
|
|||||||
@@ -5,7 +5,6 @@ from datetime import UTC, datetime
|
|||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
import ccxt
|
import ccxt
|
||||||
from cachetools import TTLCache
|
|
||||||
from pandas import DataFrame
|
from pandas import DataFrame
|
||||||
|
|
||||||
from freqtrade.constants import DEFAULT_DATAFRAME_COLUMNS
|
from freqtrade.constants import DEFAULT_DATAFRAME_COLUMNS
|
||||||
@@ -21,6 +20,7 @@ from freqtrade.exchange.common import retrier
|
|||||||
from freqtrade.exchange.exchange_types import FtHas, Tickers
|
from freqtrade.exchange.exchange_types import FtHas, Tickers
|
||||||
from freqtrade.exchange.exchange_utils_timeframe import timeframe_to_msecs
|
from freqtrade.exchange.exchange_utils_timeframe import timeframe_to_msecs
|
||||||
from freqtrade.misc import deep_merge_dicts, json_load
|
from freqtrade.misc import deep_merge_dicts, json_load
|
||||||
|
from freqtrade.util import FtTTLCache
|
||||||
from freqtrade.util.datetime_helpers import dt_from_ts, dt_ts
|
from freqtrade.util.datetime_helpers import dt_from_ts, dt_ts
|
||||||
|
|
||||||
|
|
||||||
@@ -76,7 +76,7 @@ class Binance(Exchange):
|
|||||||
|
|
||||||
def __init__(self, *args, **kwargs) -> None:
|
def __init__(self, *args, **kwargs) -> None:
|
||||||
super().__init__(*args, **kwargs)
|
super().__init__(*args, **kwargs)
|
||||||
self._spot_delist_schedule_cache: TTLCache = TTLCache(maxsize=100, ttl=300)
|
self._spot_delist_schedule_cache: FtTTLCache = FtTTLCache(maxsize=100, ttl=300)
|
||||||
|
|
||||||
def get_proxy_coin(self) -> str:
|
def get_proxy_coin(self) -> str:
|
||||||
"""
|
"""
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -1,10 +1,10 @@
|
|||||||
import logging
|
import logging
|
||||||
from datetime import timedelta
|
from datetime import datetime, timedelta
|
||||||
|
|
||||||
import ccxt
|
import ccxt
|
||||||
|
|
||||||
from freqtrade.constants import BuySell
|
from freqtrade.constants import BuySell
|
||||||
from freqtrade.enums import CandleType, MarginMode, TradingMode
|
from freqtrade.enums import OPTIMIZE_MODES, CandleType, MarginMode, TradingMode
|
||||||
from freqtrade.exceptions import (
|
from freqtrade.exceptions import (
|
||||||
DDosProtection,
|
DDosProtection,
|
||||||
OperationalException,
|
OperationalException,
|
||||||
@@ -14,7 +14,7 @@ from freqtrade.exceptions import (
|
|||||||
from freqtrade.exchange import Exchange
|
from freqtrade.exchange import Exchange
|
||||||
from freqtrade.exchange.common import API_RETRY_COUNT, retrier
|
from freqtrade.exchange.common import API_RETRY_COUNT, retrier
|
||||||
from freqtrade.exchange.exchange_types import CcxtOrder, FtHas
|
from freqtrade.exchange.exchange_types import CcxtOrder, FtHas
|
||||||
from freqtrade.util.datetime_helpers import dt_now, dt_ts
|
from freqtrade.util import dt_from_ts, dt_now, dt_ts
|
||||||
|
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
@@ -37,6 +37,7 @@ class Bitget(Exchange):
|
|||||||
_ft_has_futures: FtHas = {
|
_ft_has_futures: FtHas = {
|
||||||
"mark_ohlcv_timeframe": "4h",
|
"mark_ohlcv_timeframe": "4h",
|
||||||
"funding_fee_candle_limit": 100,
|
"funding_fee_candle_limit": 100,
|
||||||
|
"has_delisting": True,
|
||||||
}
|
}
|
||||||
|
|
||||||
_supported_trading_mode_margin_pairs: list[tuple[TradingMode, MarginMode]] = [
|
_supported_trading_mode_margin_pairs: list[tuple[TradingMode, MarginMode]] = [
|
||||||
@@ -236,3 +237,35 @@ class Bitget(Exchange):
|
|||||||
raise OperationalException(
|
raise OperationalException(
|
||||||
"Freqtrade currently only supports isolated futures for bitget"
|
"Freqtrade currently only supports isolated futures for bitget"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def check_delisting_time(self, pair: str) -> datetime | None:
|
||||||
|
"""
|
||||||
|
Check if the pair gonna be delisted.
|
||||||
|
By default, it returns None.
|
||||||
|
:param pair: Market symbol
|
||||||
|
:return: Datetime if the pair gonna be delisted, None otherwise
|
||||||
|
"""
|
||||||
|
if self._config["runmode"] in OPTIMIZE_MODES:
|
||||||
|
return None
|
||||||
|
|
||||||
|
if self.trading_mode == TradingMode.FUTURES:
|
||||||
|
return self._check_delisting_futures(pair)
|
||||||
|
return None
|
||||||
|
|
||||||
|
def _check_delisting_futures(self, pair: str) -> datetime | None:
|
||||||
|
delivery_time = self.markets.get(pair, {}).get("info", {}).get("limitOpenTime", None)
|
||||||
|
if delivery_time:
|
||||||
|
if isinstance(delivery_time, str) and (delivery_time != ""):
|
||||||
|
delivery_time = int(delivery_time)
|
||||||
|
|
||||||
|
if not isinstance(delivery_time, int) or delivery_time <= 0:
|
||||||
|
return None
|
||||||
|
|
||||||
|
max_delivery = dt_ts() + (
|
||||||
|
14 * 24 * 60 * 60 * 1000
|
||||||
|
) # Assume exchange don't announce delisting more than 14 days in advance
|
||||||
|
|
||||||
|
if delivery_time < max_delivery:
|
||||||
|
return dt_from_ts(delivery_time)
|
||||||
|
|
||||||
|
return None
|
||||||
|
|||||||
@@ -4,12 +4,13 @@ from datetime import datetime, timedelta
|
|||||||
import ccxt
|
import ccxt
|
||||||
|
|
||||||
from freqtrade.constants import BuySell
|
from freqtrade.constants import BuySell
|
||||||
from freqtrade.enums import MarginMode, PriceType, TradingMode
|
from freqtrade.enums import OPTIMIZE_MODES, MarginMode, PriceType, TradingMode
|
||||||
from freqtrade.exceptions import DDosProtection, ExchangeError, OperationalException, TemporaryError
|
from freqtrade.exceptions import DDosProtection, ExchangeError, OperationalException, TemporaryError
|
||||||
from freqtrade.exchange import Exchange
|
from freqtrade.exchange import Exchange
|
||||||
from freqtrade.exchange.common import retrier
|
from freqtrade.exchange.common import retrier
|
||||||
from freqtrade.exchange.exchange_types import CcxtOrder, FtHas
|
from freqtrade.exchange.exchange_types import CcxtOrder, FtHas
|
||||||
from freqtrade.misc import deep_merge_dicts
|
from freqtrade.misc import deep_merge_dicts
|
||||||
|
from freqtrade.util import dt_from_ts, dt_ts
|
||||||
|
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
@@ -54,6 +55,7 @@ class Bybit(Exchange):
|
|||||||
"exchange_has_overrides": {
|
"exchange_has_overrides": {
|
||||||
"fetchOrder": True,
|
"fetchOrder": True,
|
||||||
},
|
},
|
||||||
|
"has_delisting": True,
|
||||||
}
|
}
|
||||||
|
|
||||||
_supported_trading_mode_margin_pairs: list[tuple[TradingMode, MarginMode]] = [
|
_supported_trading_mode_margin_pairs: list[tuple[TradingMode, MarginMode]] = [
|
||||||
@@ -294,3 +296,35 @@ class Bybit(Exchange):
|
|||||||
|
|
||||||
self.cache_leverage_tiers(tiers, self._config["stake_currency"])
|
self.cache_leverage_tiers(tiers, self._config["stake_currency"])
|
||||||
return tiers
|
return tiers
|
||||||
|
|
||||||
|
def check_delisting_time(self, pair: str) -> datetime | None:
|
||||||
|
"""
|
||||||
|
Check if the pair gonna be delisted.
|
||||||
|
By default, it returns None.
|
||||||
|
:param pair: Market symbol
|
||||||
|
:return: Datetime if the pair gonna be delisted, None otherwise
|
||||||
|
"""
|
||||||
|
if self._config["runmode"] in OPTIMIZE_MODES:
|
||||||
|
return None
|
||||||
|
|
||||||
|
if self.trading_mode == TradingMode.FUTURES:
|
||||||
|
return self._check_delisting_futures(pair)
|
||||||
|
return None
|
||||||
|
|
||||||
|
def _check_delisting_futures(self, pair: str) -> datetime | None:
|
||||||
|
delivery_time = self.markets.get(pair, {}).get("info", {}).get("deliveryTime", 0)
|
||||||
|
if delivery_time:
|
||||||
|
if isinstance(delivery_time, str) and (delivery_time != ""):
|
||||||
|
delivery_time = int(delivery_time)
|
||||||
|
|
||||||
|
if not isinstance(delivery_time, int) or delivery_time <= 0:
|
||||||
|
return None
|
||||||
|
|
||||||
|
max_delivery = dt_ts() + (
|
||||||
|
14 * 24 * 60 * 60 * 1000
|
||||||
|
) # Assume exchange don't announce delisting more than 14 days in advance
|
||||||
|
|
||||||
|
if delivery_time < max_delivery:
|
||||||
|
return dt_from_ts(delivery_time)
|
||||||
|
|
||||||
|
return None
|
||||||
|
|||||||
@@ -16,7 +16,6 @@ from typing import Any, Literal, TypeGuard, TypeVar
|
|||||||
|
|
||||||
import ccxt
|
import ccxt
|
||||||
import ccxt.pro as ccxt_pro
|
import ccxt.pro as ccxt_pro
|
||||||
from cachetools import TTLCache
|
|
||||||
from ccxt import TICK_SIZE
|
from ccxt import TICK_SIZE
|
||||||
from dateutil import parser
|
from dateutil import parser
|
||||||
from pandas import DataFrame, concat
|
from pandas import DataFrame, concat
|
||||||
@@ -107,9 +106,8 @@ from freqtrade.misc import (
|
|||||||
file_load_json,
|
file_load_json,
|
||||||
safe_value_fallback2,
|
safe_value_fallback2,
|
||||||
)
|
)
|
||||||
from freqtrade.util import dt_from_ts, dt_now
|
from freqtrade.util import FtTTLCache, PeriodicCache, dt_from_ts, dt_now
|
||||||
from freqtrade.util.datetime_helpers import dt_humanize_delta, dt_ts, format_ms_time
|
from freqtrade.util.datetime_helpers import dt_humanize_delta, dt_ts, format_ms_time
|
||||||
from freqtrade.util.periodic_cache import PeriodicCache
|
|
||||||
|
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
@@ -230,13 +228,13 @@ class Exchange:
|
|||||||
|
|
||||||
self._cache_lock = Lock()
|
self._cache_lock = Lock()
|
||||||
# Cache for 10 minutes ...
|
# Cache for 10 minutes ...
|
||||||
self._fetch_tickers_cache: TTLCache = TTLCache(maxsize=4, ttl=60 * 10)
|
self._fetch_tickers_cache: FtTTLCache = FtTTLCache(maxsize=4, ttl=60 * 10)
|
||||||
# Cache values for 300 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
|
# Caching only applies to RPC methods, so prices for open trades are still
|
||||||
# refreshed once every iteration.
|
# refreshed once every iteration.
|
||||||
# Shouldn't be too high either, as it'll freeze UI updates in case of open orders.
|
# 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._exit_rate_cache: FtTTLCache = FtTTLCache(maxsize=100, ttl=300)
|
||||||
self._entry_rate_cache: TTLCache = TTLCache(maxsize=100, ttl=300)
|
self._entry_rate_cache: FtTTLCache = FtTTLCache(maxsize=100, ttl=300)
|
||||||
|
|
||||||
# Holds candles
|
# Holds candles
|
||||||
self._klines: dict[PairWithTimeframe, DataFrame] = {}
|
self._klines: dict[PairWithTimeframe, DataFrame] = {}
|
||||||
@@ -430,7 +428,15 @@ class Exchange:
|
|||||||
|
|
||||||
@property
|
@property
|
||||||
def timeframes(self) -> list[str]:
|
def timeframes(self) -> list[str]:
|
||||||
return list((self._api.timeframes or {}).keys())
|
market_type = (
|
||||||
|
"spot"
|
||||||
|
if self.trading_mode != TradingMode.FUTURES
|
||||||
|
else self._ft_has["ccxt_futures_name"]
|
||||||
|
)
|
||||||
|
timeframes = self._api.options.get("timeframes", {}).get(market_type)
|
||||||
|
if timeframes is None:
|
||||||
|
timeframes = self._api.timeframes
|
||||||
|
return list((timeframes or {}).keys())
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def markets(self) -> dict[str, Any]:
|
def markets(self) -> dict[str, Any]:
|
||||||
@@ -891,6 +897,7 @@ class Exchange:
|
|||||||
self,
|
self,
|
||||||
trading_mode: TradingMode,
|
trading_mode: TradingMode,
|
||||||
margin_mode: MarginMode | None, # Only None when trading_mode = TradingMode.SPOT
|
margin_mode: MarginMode | None, # Only None when trading_mode = TradingMode.SPOT
|
||||||
|
allow_none_margin_mode: bool = False,
|
||||||
):
|
):
|
||||||
"""
|
"""
|
||||||
Checks if freqtrade can perform trades using the configured
|
Checks if freqtrade can perform trades using the configured
|
||||||
@@ -898,7 +905,18 @@ class Exchange:
|
|||||||
Throws OperationalException:
|
Throws OperationalException:
|
||||||
If the trading_mode/margin_mode type are not supported by freqtrade on this exchange
|
If the trading_mode/margin_mode type are not supported by freqtrade on this exchange
|
||||||
"""
|
"""
|
||||||
if trading_mode != TradingMode.SPOT and (
|
if trading_mode == TradingMode.SPOT:
|
||||||
|
return
|
||||||
|
if allow_none_margin_mode and margin_mode is None:
|
||||||
|
# Verify trading mode independent of margin mode
|
||||||
|
if not any(
|
||||||
|
trading_mode == pair[0] for pair in self._supported_trading_mode_margin_pairs
|
||||||
|
):
|
||||||
|
raise ConfigurationError(
|
||||||
|
f"Freqtrade does not support '{trading_mode}' on {self.name}."
|
||||||
|
)
|
||||||
|
|
||||||
|
if not allow_none_margin_mode and (
|
||||||
(trading_mode, margin_mode) not in self._supported_trading_mode_margin_pairs
|
(trading_mode, margin_mode) not in self._supported_trading_mode_margin_pairs
|
||||||
):
|
):
|
||||||
mm_value = margin_mode and margin_mode.value
|
mm_value = margin_mode and margin_mode.value
|
||||||
@@ -1283,7 +1301,7 @@ class Exchange:
|
|||||||
|
|
||||||
return order
|
return order
|
||||||
|
|
||||||
def fetch_dry_run_order(self, order_id) -> CcxtOrder:
|
def fetch_dry_run_order(self, order_id: str) -> CcxtOrder:
|
||||||
"""
|
"""
|
||||||
Return dry-run order
|
Return dry-run order
|
||||||
Only call if running in dry-run mode.
|
Only call if running in dry-run mode.
|
||||||
@@ -1295,11 +1313,12 @@ class Exchange:
|
|||||||
except KeyError as e:
|
except KeyError as e:
|
||||||
from freqtrade.persistence import Order
|
from freqtrade.persistence import Order
|
||||||
|
|
||||||
order = Order.order_by_id(order_id)
|
order_obj = Order.order_by_id(order_id)
|
||||||
if order:
|
if order_obj:
|
||||||
ccxt_order = order.to_ccxt_object(self._ft_has["stop_price_prop"])
|
order = order_obj.to_ccxt_object(self._ft_has["stop_price_prop"])
|
||||||
self._dry_run_open_orders[order_id] = ccxt_order
|
order = self.check_dry_limit_order_filled(order)
|
||||||
return ccxt_order
|
self._dry_run_open_orders[order_id] = order
|
||||||
|
return order
|
||||||
# Gracefully handle errors with dry-run orders.
|
# Gracefully handle errors with dry-run orders.
|
||||||
raise InvalidOrderException(
|
raise InvalidOrderException(
|
||||||
f"Tried to get an invalid dry-run-order (id: {order_id}). Message: {e}"
|
f"Tried to get an invalid dry-run-order (id: {order_id}). Message: {e}"
|
||||||
@@ -2143,7 +2162,9 @@ class Exchange:
|
|||||||
name = side.capitalize()
|
name = side.capitalize()
|
||||||
strat_name = "entry_pricing" if side == "entry" else "exit_pricing"
|
strat_name = "entry_pricing" if side == "entry" else "exit_pricing"
|
||||||
|
|
||||||
cache_rate: TTLCache = self._entry_rate_cache if side == "entry" else self._exit_rate_cache
|
cache_rate: FtTTLCache = (
|
||||||
|
self._entry_rate_cache if side == "entry" else self._exit_rate_cache
|
||||||
|
)
|
||||||
if not refresh:
|
if not refresh:
|
||||||
with self._cache_lock:
|
with self._cache_lock:
|
||||||
rate = cache_rate.get(pair)
|
rate = cache_rate.get(pair)
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
"""
|
"""
|
||||||
Freqtrade is the main module of this bot. It contains the class Freqtrade()
|
Freqtrade is the main module of this bot. It contains the FreqtradeBot class.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import logging
|
import logging
|
||||||
@@ -63,7 +63,7 @@ from freqtrade.rpc.rpc_types import (
|
|||||||
from freqtrade.strategy.interface import IStrategy
|
from freqtrade.strategy.interface import IStrategy
|
||||||
from freqtrade.strategy.strategy_wrapper import strategy_safe_wrapper
|
from freqtrade.strategy.strategy_wrapper import strategy_safe_wrapper
|
||||||
from freqtrade.util import FtPrecise, MeasureTime, PeriodicCache, dt_from_ts, dt_now
|
from freqtrade.util import FtPrecise, MeasureTime, PeriodicCache, dt_from_ts, dt_now
|
||||||
from freqtrade.util.migrations.binance_mig import migrate_binance_futures_names
|
from freqtrade.util.migrations import migrate_live_content
|
||||||
from freqtrade.wallets import Wallets
|
from freqtrade.wallets import Wallets
|
||||||
|
|
||||||
|
|
||||||
@@ -229,7 +229,7 @@ class FreqtradeBot(LoggingMixin):
|
|||||||
Called on startup and after reloading the bot - triggers notifications and
|
Called on startup and after reloading the bot - triggers notifications and
|
||||||
performs startup tasks
|
performs startup tasks
|
||||||
"""
|
"""
|
||||||
migrate_binance_futures_names(self.config)
|
migrate_live_content(self.config, self.exchange)
|
||||||
set_startup_time()
|
set_startup_time()
|
||||||
|
|
||||||
self.rpc.startup_messages(self.config, self.pairlists, self.protections)
|
self.rpc.startup_messages(self.config, self.pairlists, self.protections)
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
from collections.abc import Callable
|
from collections.abc import Callable
|
||||||
|
|
||||||
from cachetools import TTLCache, cached
|
from cachetools import cached
|
||||||
|
|
||||||
|
from freqtrade.util import FtTTLCache
|
||||||
|
|
||||||
|
|
||||||
class LoggingMixin:
|
class LoggingMixin:
|
||||||
@@ -18,7 +20,7 @@ class LoggingMixin:
|
|||||||
"""
|
"""
|
||||||
self.logger = logger
|
self.logger = logger
|
||||||
self.refresh_period = refresh_period
|
self.refresh_period = refresh_period
|
||||||
self._log_cache: TTLCache = TTLCache(maxsize=1024, ttl=self.refresh_period)
|
self._log_cache: FtTTLCache = FtTTLCache(maxsize=1024, ttl=self.refresh_period)
|
||||||
|
|
||||||
def log_once(self, message: str, logmethod: Callable, force_show: bool = False) -> None:
|
def log_once(self, message: str, logmethod: Callable, force_show: bool = False) -> None:
|
||||||
"""
|
"""
|
||||||
|
|||||||
@@ -39,6 +39,7 @@ class RecursiveAnalysis(BaseAnalysis):
|
|||||||
self.dict_recursive: dict[str, Any] = dict()
|
self.dict_recursive: dict[str, Any] = dict()
|
||||||
|
|
||||||
self.pair_to_used: str | None = None
|
self.pair_to_used: str | None = None
|
||||||
|
self._strat_scc: int | None = None
|
||||||
|
|
||||||
# For recursive bias check
|
# For recursive bias check
|
||||||
# analyzes two data frames with processed indicators and shows differences between them.
|
# analyzes two data frames with processed indicators and shows differences between them.
|
||||||
@@ -151,7 +152,8 @@ class RecursiveAnalysis(BaseAnalysis):
|
|||||||
backtesting._set_strategy(backtesting.strategylist[0])
|
backtesting._set_strategy(backtesting.strategylist[0])
|
||||||
|
|
||||||
strat = backtesting.strategy
|
strat = backtesting.strategy
|
||||||
self._strat_scc = strat.startup_candle_count
|
if self._strat_scc is None:
|
||||||
|
self._strat_scc = strat.startup_candle_count
|
||||||
|
|
||||||
if self._strat_scc < 1:
|
if self._strat_scc < 1:
|
||||||
raise ConfigurationError(
|
raise ConfigurationError(
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ This module implements a convenience auto-hyperopt class, which can be used toge
|
|||||||
import logging
|
import logging
|
||||||
from collections.abc import Callable
|
from collections.abc import Callable
|
||||||
from contextlib import suppress
|
from contextlib import suppress
|
||||||
|
from typing import Literal
|
||||||
|
|
||||||
from freqtrade.exceptions import OperationalException
|
from freqtrade.exceptions import OperationalException
|
||||||
|
|
||||||
@@ -37,10 +38,17 @@ def _format_exception_message(space: str, ignore_missing_space: bool) -> None:
|
|||||||
class HyperOptAuto(IHyperOpt):
|
class HyperOptAuto(IHyperOpt):
|
||||||
"""
|
"""
|
||||||
This class delegates functionality to Strategy(IHyperStrategy) and Strategy.HyperOpt classes.
|
This class delegates functionality to Strategy(IHyperStrategy) and Strategy.HyperOpt classes.
|
||||||
Most of the time Strategy.HyperOpt class would only implement indicator_space and
|
Most of the time Strategy.HyperOpt class would only implement indicator_space and
|
||||||
sell_indicator_space methods, but other hyperopt methods can be overridden as well.
|
sell_indicator_space methods, but other hyperopt methods can be overridden as well.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
def get_available_spaces(self) -> list[str]:
|
||||||
|
"""
|
||||||
|
Get list of available spaces defined in strategy.
|
||||||
|
:return: list of available spaces.
|
||||||
|
"""
|
||||||
|
return list(self.strategy._ft_hyper_params)
|
||||||
|
|
||||||
def _get_func(self, name) -> Callable:
|
def _get_func(self, name) -> Callable:
|
||||||
"""
|
"""
|
||||||
Return a function defined in Strategy.HyperOpt class, or one defined in super() class.
|
Return a function defined in Strategy.HyperOpt class, or one defined in super() class.
|
||||||
@@ -54,31 +62,26 @@ class HyperOptAuto(IHyperOpt):
|
|||||||
else:
|
else:
|
||||||
return default_func
|
return default_func
|
||||||
|
|
||||||
def _generate_indicator_space(self, category):
|
def get_indicator_space(
|
||||||
for attr_name, attr in self.strategy.enumerate_parameters(category):
|
self, space: Literal["buy", "sell", "enter", "exit", "protection"] | str
|
||||||
if attr.optimize:
|
) -> list:
|
||||||
yield attr.get_space(attr_name)
|
"""
|
||||||
|
Get indicator space for a given space.
|
||||||
def _get_indicator_space(self, category) -> list:
|
:param space: parameter space to get.
|
||||||
# TODO: is this necessary, or can we call "generate_space" directly?
|
"""
|
||||||
indicator_space = list(self._generate_indicator_space(category))
|
indicator_space = [
|
||||||
|
attr.get_space(attr_name)
|
||||||
|
for attr_name, attr in self.strategy.enumerate_parameters(space)
|
||||||
|
if attr.optimize
|
||||||
|
]
|
||||||
if len(indicator_space) > 0:
|
if len(indicator_space) > 0:
|
||||||
return indicator_space
|
return indicator_space
|
||||||
else:
|
else:
|
||||||
_format_exception_message(
|
_format_exception_message(
|
||||||
category, self.config.get("hyperopt_ignore_missing_space", False)
|
space, self.config.get("hyperopt_ignore_missing_space", False)
|
||||||
)
|
)
|
||||||
return []
|
return []
|
||||||
|
|
||||||
def buy_indicator_space(self) -> list["Dimension"]:
|
|
||||||
return self._get_indicator_space("buy")
|
|
||||||
|
|
||||||
def sell_indicator_space(self) -> list["Dimension"]:
|
|
||||||
return self._get_indicator_space("sell")
|
|
||||||
|
|
||||||
def protection_space(self) -> list["Dimension"]:
|
|
||||||
return self._get_indicator_space("protection")
|
|
||||||
|
|
||||||
def generate_roi_table(self, params: dict) -> dict[int, float]:
|
def generate_roi_table(self, params: dict) -> dict[int, float]:
|
||||||
return self._get_func("generate_roi_table")(params)
|
return self._get_func("generate_roi_table")(params)
|
||||||
|
|
||||||
|
|||||||
@@ -70,13 +70,7 @@ class HyperOptimizer:
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self, config: Config, data_pickle_file: Path) -> None:
|
def __init__(self, config: Config, data_pickle_file: Path) -> None:
|
||||||
self.buy_space: list[DimensionProtocol] = []
|
self.spaces: dict[str, list[DimensionProtocol]] = {}
|
||||||
self.sell_space: list[DimensionProtocol] = []
|
|
||||||
self.protection_space: list[DimensionProtocol] = []
|
|
||||||
self.roi_space: list[DimensionProtocol] = []
|
|
||||||
self.stoploss_space: list[DimensionProtocol] = []
|
|
||||||
self.trailing_space: list[DimensionProtocol] = []
|
|
||||||
self.max_open_trades_space: list[DimensionProtocol] = []
|
|
||||||
self.dimensions: list[DimensionProtocol] = []
|
self.dimensions: list[DimensionProtocol] = []
|
||||||
self.o_dimensions: dict = {}
|
self.o_dimensions: dict = {}
|
||||||
|
|
||||||
@@ -167,37 +161,39 @@ class HyperOptimizer:
|
|||||||
"""
|
"""
|
||||||
result: dict = {}
|
result: dict = {}
|
||||||
|
|
||||||
if HyperoptTools.has_space(self.config, "buy"):
|
for space in self.spaces.keys():
|
||||||
result["buy"] = round_dict({p.name: params.get(p.name) for p in self.buy_space}, 13)
|
if space == "protection":
|
||||||
if HyperoptTools.has_space(self.config, "sell"):
|
result["protection"] = round_dict(
|
||||||
result["sell"] = round_dict({p.name: params.get(p.name) for p in self.sell_space}, 13)
|
{p.name: params.get(p.name) for p in self.spaces[space]}, 13
|
||||||
if HyperoptTools.has_space(self.config, "protection"):
|
)
|
||||||
result["protection"] = round_dict(
|
elif space == "roi":
|
||||||
{p.name: params.get(p.name) for p in self.protection_space}, 13
|
result["roi"] = round_dict(
|
||||||
)
|
{str(k): v for k, v in self.custom_hyperopt.generate_roi_table(params).items()},
|
||||||
if HyperoptTools.has_space(self.config, "roi"):
|
13,
|
||||||
result["roi"] = round_dict(
|
)
|
||||||
{str(k): v for k, v in self.custom_hyperopt.generate_roi_table(params).items()}, 13
|
elif space == "stoploss":
|
||||||
)
|
result["stoploss"] = round_dict(
|
||||||
if HyperoptTools.has_space(self.config, "stoploss"):
|
{p.name: params.get(p.name) for p in self.spaces[space]}, 13
|
||||||
result["stoploss"] = round_dict(
|
)
|
||||||
{p.name: params.get(p.name) for p in self.stoploss_space}, 13
|
elif space == "trailing":
|
||||||
)
|
result["trailing"] = round_dict(
|
||||||
if HyperoptTools.has_space(self.config, "trailing"):
|
self.custom_hyperopt.generate_trailing_params(params), 13
|
||||||
result["trailing"] = round_dict(
|
)
|
||||||
self.custom_hyperopt.generate_trailing_params(params), 13
|
elif space == "trades":
|
||||||
)
|
result["max_open_trades"] = round_dict(
|
||||||
if HyperoptTools.has_space(self.config, "trades"):
|
{
|
||||||
result["max_open_trades"] = round_dict(
|
"max_open_trades": (
|
||||||
{
|
self.backtesting.strategy.max_open_trades
|
||||||
"max_open_trades": (
|
if self.backtesting.strategy.max_open_trades != float("inf")
|
||||||
self.backtesting.strategy.max_open_trades
|
else -1
|
||||||
if self.backtesting.strategy.max_open_trades != float("inf")
|
)
|
||||||
else -1
|
},
|
||||||
)
|
13,
|
||||||
},
|
)
|
||||||
13,
|
else:
|
||||||
)
|
result[space] = round_dict(
|
||||||
|
{p.name: params.get(p.name) for p in self.spaces[space]}, 13
|
||||||
|
)
|
||||||
|
|
||||||
return result
|
return result
|
||||||
|
|
||||||
@@ -226,56 +222,39 @@ class HyperOptimizer:
|
|||||||
"""
|
"""
|
||||||
Assign the dimensions in the hyperoptimization space.
|
Assign the dimensions in the hyperoptimization space.
|
||||||
"""
|
"""
|
||||||
if HyperoptTools.has_space(self.config, "protection"):
|
spaces = ["buy", "sell", "protection", "roi", "stoploss", "trailing", "trades"]
|
||||||
# Protections can only be optimized when using the Parameter interface
|
spaces += [s for s in self.custom_hyperopt.get_available_spaces() if s not in spaces]
|
||||||
logger.debug("Hyperopt has 'protection' space")
|
|
||||||
# Enable Protections if protection space is selected.
|
|
||||||
self.config["enable_protections"] = True
|
|
||||||
self.backtesting.enable_protections = True
|
|
||||||
self.protection_space = self.custom_hyperopt.protection_space()
|
|
||||||
|
|
||||||
if HyperoptTools.has_space(self.config, "buy"):
|
for space in spaces:
|
||||||
logger.debug("Hyperopt has 'buy' space")
|
if not HyperoptTools.has_space(self.config, space):
|
||||||
self.buy_space = self.custom_hyperopt.buy_indicator_space()
|
continue
|
||||||
|
logger.debug(f"Hyperopt has '{space}' space")
|
||||||
|
if space == "protection":
|
||||||
|
# Protections can only be optimized when using the Parameter interface
|
||||||
|
# Enable Protections if protection space is selected.
|
||||||
|
self.config["enable_protections"] = True
|
||||||
|
self.backtesting.enable_protections = True
|
||||||
|
self.spaces[space] = self.custom_hyperopt.get_indicator_space(space)
|
||||||
|
elif space == "roi":
|
||||||
|
self.spaces[space] = self.custom_hyperopt.roi_space()
|
||||||
|
elif space == "stoploss":
|
||||||
|
self.spaces[space] = self.custom_hyperopt.stoploss_space()
|
||||||
|
elif space == "trailing":
|
||||||
|
self.spaces[space] = self.custom_hyperopt.trailing_space()
|
||||||
|
elif space == "trades":
|
||||||
|
self.spaces[space] = self.custom_hyperopt.max_open_trades_space()
|
||||||
|
else:
|
||||||
|
self.spaces[space] = self.custom_hyperopt.get_indicator_space(space)
|
||||||
|
|
||||||
if HyperoptTools.has_space(self.config, "sell"):
|
self.dimensions = [s for space in self.spaces.values() for s in space]
|
||||||
logger.debug("Hyperopt has 'sell' space")
|
if len(self.dimensions) == 0:
|
||||||
self.sell_space = self.custom_hyperopt.sell_indicator_space()
|
raise OperationalException(
|
||||||
|
"No hyperopt parameters found to optimize."
|
||||||
if HyperoptTools.has_space(self.config, "roi"):
|
f"Available spaces: {', '.join(spaces)}. "
|
||||||
logger.debug("Hyperopt has 'roi' space")
|
"Check your strategy's parameter definitions or verify the configured spaces "
|
||||||
self.roi_space = self.custom_hyperopt.roi_space()
|
"in your command."
|
||||||
|
)
|
||||||
if HyperoptTools.has_space(self.config, "stoploss"):
|
self.o_dimensions = self.convert_dimensions_to_optuna_space(self.dimensions)
|
||||||
logger.debug("Hyperopt has 'stoploss' space")
|
|
||||||
self.stoploss_space = self.custom_hyperopt.stoploss_space()
|
|
||||||
|
|
||||||
if HyperoptTools.has_space(self.config, "trailing"):
|
|
||||||
logger.debug("Hyperopt has 'trailing' space")
|
|
||||||
self.trailing_space = self.custom_hyperopt.trailing_space()
|
|
||||||
|
|
||||||
if HyperoptTools.has_space(self.config, "trades"):
|
|
||||||
logger.debug("Hyperopt has 'trades' space")
|
|
||||||
self.max_open_trades_space = self.custom_hyperopt.max_open_trades_space()
|
|
||||||
|
|
||||||
self.dimensions = (
|
|
||||||
self.buy_space
|
|
||||||
+ self.sell_space
|
|
||||||
+ self.protection_space
|
|
||||||
+ self.roi_space
|
|
||||||
+ self.stoploss_space
|
|
||||||
+ self.trailing_space
|
|
||||||
+ self.max_open_trades_space
|
|
||||||
)
|
|
||||||
|
|
||||||
def assign_params(self, params_dict: dict[str, Any], category: str) -> None:
|
|
||||||
"""
|
|
||||||
Assign hyperoptable parameters
|
|
||||||
"""
|
|
||||||
for attr_name, attr in self.backtesting.strategy.enumerate_parameters(category):
|
|
||||||
if attr.optimize:
|
|
||||||
# noinspection PyProtectedMember
|
|
||||||
attr.value = params_dict[attr_name]
|
|
||||||
|
|
||||||
@delayed
|
@delayed
|
||||||
@wrap_non_picklable_objects
|
@wrap_non_picklable_objects
|
||||||
@@ -292,15 +271,9 @@ class HyperOptimizer:
|
|||||||
HyperoptStateContainer.set_state(HyperoptState.OPTIMIZE)
|
HyperoptStateContainer.set_state(HyperoptState.OPTIMIZE)
|
||||||
backtest_start_time = datetime.now(UTC)
|
backtest_start_time = datetime.now(UTC)
|
||||||
|
|
||||||
# Apply parameters
|
for attr_name, attr in self.backtesting.strategy.enumerate_parameters():
|
||||||
if HyperoptTools.has_space(self.config, "buy"):
|
if attr.in_space and attr.optimize:
|
||||||
self.assign_params(params_dict, "buy")
|
attr.value = params_dict[attr_name]
|
||||||
|
|
||||||
if HyperoptTools.has_space(self.config, "sell"):
|
|
||||||
self.assign_params(params_dict, "sell")
|
|
||||||
|
|
||||||
if HyperoptTools.has_space(self.config, "protection"):
|
|
||||||
self.assign_params(params_dict, "protection")
|
|
||||||
|
|
||||||
if HyperoptTools.has_space(self.config, "roi"):
|
if HyperoptTools.has_space(self.config, "roi"):
|
||||||
self.backtesting.strategy.minimal_roi = self.custom_hyperopt.generate_roi_table(
|
self.backtesting.strategy.minimal_roi = self.custom_hyperopt.generate_roi_table(
|
||||||
@@ -436,7 +409,6 @@ class HyperOptimizer:
|
|||||||
o_sampler = self.custom_hyperopt.generate_estimator(
|
o_sampler = self.custom_hyperopt.generate_estimator(
|
||||||
dimensions=self.dimensions, random_state=random_state
|
dimensions=self.dimensions, random_state=random_state
|
||||||
)
|
)
|
||||||
self.o_dimensions = self.convert_dimensions_to_optuna_space(self.dimensions)
|
|
||||||
|
|
||||||
if isinstance(o_sampler, str):
|
if isinstance(o_sampler, str):
|
||||||
if o_sampler not in optuna_samplers_dict.keys():
|
if o_sampler not in optuna_samplers_dict.keys():
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ import numpy as np
|
|||||||
import rapidjson
|
import rapidjson
|
||||||
from pandas import isna, json_normalize
|
from pandas import isna, json_normalize
|
||||||
|
|
||||||
from freqtrade.constants import FTHYPT_FILEVERSION, Config
|
from freqtrade.constants import FTHYPT_FILEVERSION, HYPEROPT_BUILTIN_SPACES, Config
|
||||||
from freqtrade.enums import HyperoptState
|
from freqtrade.enums import HyperoptState
|
||||||
from freqtrade.exceptions import OperationalException
|
from freqtrade.exceptions import OperationalException
|
||||||
from freqtrade.misc import deep_merge_dicts, round_dict, safe_value_fallback2
|
from freqtrade.misc import deep_merge_dicts, round_dict, safe_value_fallback2
|
||||||
@@ -219,21 +219,22 @@ class HyperoptTools:
|
|||||||
print(rapidjson.dumps(result_dict, default=str, number_mode=HYPER_PARAMS_FILE_FORMAT))
|
print(rapidjson.dumps(result_dict, default=str, number_mode=HYPER_PARAMS_FILE_FORMAT))
|
||||||
|
|
||||||
else:
|
else:
|
||||||
HyperoptTools._params_pretty_print(
|
all_spaces = list(params.keys() | non_optimized.keys())
|
||||||
params, "buy", "Buy hyperspace params:", non_optimized
|
# Explicitly listed to keep original sort order
|
||||||
)
|
spaces = ["buy", "sell", "protection", "roi", "stoploss", "trailing", "max_open_trades"]
|
||||||
HyperoptTools._params_pretty_print(
|
spaces += [s for s in all_spaces if s not in spaces]
|
||||||
params, "sell", "Sell hyperspace params:", non_optimized
|
lookup = {
|
||||||
)
|
"roi": "ROI",
|
||||||
HyperoptTools._params_pretty_print(
|
"trailing": "Trailing stop",
|
||||||
params, "protection", "Protection hyperspace params:", non_optimized
|
}
|
||||||
)
|
for space in spaces:
|
||||||
HyperoptTools._params_pretty_print(params, "roi", "ROI table:", non_optimized)
|
name = lookup.get(
|
||||||
HyperoptTools._params_pretty_print(params, "stoploss", "Stoploss:", non_optimized)
|
space, space.capitalize() if space in HYPEROPT_BUILTIN_SPACES else space
|
||||||
HyperoptTools._params_pretty_print(params, "trailing", "Trailing stop:", non_optimized)
|
)
|
||||||
HyperoptTools._params_pretty_print(
|
|
||||||
params, "max_open_trades", "Max Open Trades:", non_optimized
|
HyperoptTools._params_pretty_print(
|
||||||
)
|
params, space, f"{name} parameters:", non_optimized
|
||||||
|
)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def _params_update_for_json(result_dict, params, non_optimized, space: str) -> None:
|
def _params_update_for_json(result_dict, params, non_optimized, space: str) -> None:
|
||||||
|
|||||||
@@ -755,6 +755,8 @@ class LocalTrade:
|
|||||||
"precision_mode": self.precision_mode,
|
"precision_mode": self.precision_mode,
|
||||||
"precision_mode_price": self.precision_mode_price,
|
"precision_mode_price": self.precision_mode_price,
|
||||||
"contract_size": self.contract_size,
|
"contract_size": self.contract_size,
|
||||||
|
"nr_of_successful_entries": self.nr_of_successful_entries,
|
||||||
|
"nr_of_successful_exits": self.nr_of_successful_exits,
|
||||||
"has_open_orders": self.has_open_orders,
|
"has_open_orders": self.has_open_orders,
|
||||||
"orders": orders_json,
|
"orders": orders_json,
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,11 +7,10 @@ Provides dynamic pair list based on Market Cap
|
|||||||
import logging
|
import logging
|
||||||
import math
|
import math
|
||||||
|
|
||||||
from cachetools import TTLCache
|
|
||||||
|
|
||||||
from freqtrade.exceptions import OperationalException
|
from freqtrade.exceptions import OperationalException
|
||||||
from freqtrade.exchange.exchange_types import Tickers
|
from freqtrade.exchange.exchange_types import Tickers
|
||||||
from freqtrade.plugins.pairlist.IPairList import IPairList, PairlistParameter, SupportsBacktesting
|
from freqtrade.plugins.pairlist.IPairList import IPairList, PairlistParameter, SupportsBacktesting
|
||||||
|
from freqtrade.util import FtTTLCache
|
||||||
from freqtrade.util.coin_gecko import FtCoinGeckoApi
|
from freqtrade.util.coin_gecko import FtCoinGeckoApi
|
||||||
|
|
||||||
|
|
||||||
@@ -25,18 +24,20 @@ class MarketCapPairList(IPairList):
|
|||||||
def __init__(self, *args, **kwargs) -> None:
|
def __init__(self, *args, **kwargs) -> None:
|
||||||
super().__init__(*args, **kwargs)
|
super().__init__(*args, **kwargs)
|
||||||
|
|
||||||
if "number_assets" not in self._pairlistconfig:
|
self._mode = self._pairlistconfig.get("mode", "whitelist")
|
||||||
|
|
||||||
|
if (self._mode == "whitelist") and ("number_assets" not in self._pairlistconfig):
|
||||||
raise OperationalException(
|
raise OperationalException(
|
||||||
"`number_assets` not specified. Please check your configuration "
|
"`number_assets` not specified. Please check your configuration "
|
||||||
'for "pairlist.config.number_assets"'
|
'for "pairlist.config.number_assets"'
|
||||||
)
|
)
|
||||||
|
|
||||||
self._stake_currency = self._config["stake_currency"]
|
self._stake_currency = self._config["stake_currency"]
|
||||||
self._number_assets = self._pairlistconfig["number_assets"]
|
self._number_assets = self._pairlistconfig.get("number_assets", 30)
|
||||||
self._max_rank = self._pairlistconfig.get("max_rank", 30)
|
self._max_rank = self._pairlistconfig.get("max_rank", 30)
|
||||||
self._refresh_period = self._pairlistconfig.get("refresh_period", 86400)
|
self._refresh_period = self._pairlistconfig.get("refresh_period", 86400)
|
||||||
self._categories = self._pairlistconfig.get("categories", [])
|
self._categories = self._pairlistconfig.get("categories", [])
|
||||||
self._marketcap_cache: TTLCache = TTLCache(maxsize=1, ttl=self._refresh_period)
|
self._marketcap_cache: FtTTLCache = FtTTLCache(maxsize=1, ttl=self._refresh_period)
|
||||||
|
|
||||||
_coingecko_config = self._config.get("coingecko", {})
|
_coingecko_config = self._config.get("coingecko", {})
|
||||||
|
|
||||||
@@ -78,7 +79,9 @@ class MarketCapPairList(IPairList):
|
|||||||
"""
|
"""
|
||||||
num = self._number_assets
|
num = self._number_assets
|
||||||
rank = self._max_rank
|
rank = self._max_rank
|
||||||
msg = f"{self.name} - {num} pairs placed within top {rank} market cap."
|
mode = self._mode
|
||||||
|
pair_text = num if (mode == "whitelist") else "blacklisting"
|
||||||
|
msg = f"{self.name} - {pair_text} pairs placed within top {rank} market cap."
|
||||||
return msg
|
return msg
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
@@ -115,6 +118,13 @@ class MarketCapPairList(IPairList):
|
|||||||
"description": "Refresh period",
|
"description": "Refresh period",
|
||||||
"help": "Refresh period in seconds",
|
"help": "Refresh period in seconds",
|
||||||
},
|
},
|
||||||
|
"mode": {
|
||||||
|
"type": "option",
|
||||||
|
"default": "whitelist",
|
||||||
|
"options": ["whitelist", "blacklist"],
|
||||||
|
"description": "Mode of operation",
|
||||||
|
"help": "Mode of operation (whitelist/blacklist)",
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
def get_markets_exchange(self):
|
def get_markets_exchange(self):
|
||||||
@@ -186,6 +196,9 @@ class MarketCapPairList(IPairList):
|
|||||||
:return: new whitelist
|
:return: new whitelist
|
||||||
"""
|
"""
|
||||||
marketcap_list = self._marketcap_cache.get("marketcap")
|
marketcap_list = self._marketcap_cache.get("marketcap")
|
||||||
|
mode = self._mode
|
||||||
|
is_whitelist_mode = mode == "whitelist"
|
||||||
|
filtered_pairlist: list[str] = []
|
||||||
|
|
||||||
default_kwargs = {
|
default_kwargs = {
|
||||||
"vs_currency": "usd",
|
"vs_currency": "usd",
|
||||||
@@ -219,12 +232,10 @@ class MarketCapPairList(IPairList):
|
|||||||
self._marketcap_cache["marketcap"] = marketcap_list
|
self._marketcap_cache["marketcap"] = marketcap_list
|
||||||
|
|
||||||
if marketcap_list:
|
if marketcap_list:
|
||||||
filtered_pairlist: list[str] = []
|
|
||||||
|
|
||||||
market = self._exchange._config["trading_mode"]
|
market = self._exchange._config["trading_mode"]
|
||||||
pair_format = f"{self._stake_currency.upper()}"
|
pair_format = f"{self._stake_currency.upper()}" + (
|
||||||
if market == "futures":
|
f":{self._stake_currency.upper()}" if market == "futures" else ""
|
||||||
pair_format += f":{self._stake_currency.upper()}"
|
)
|
||||||
|
|
||||||
top_marketcap = marketcap_list[: self._max_rank :]
|
top_marketcap = marketcap_list[: self._max_rank :]
|
||||||
markets = self.get_markets_exchange()
|
markets = self.get_markets_exchange()
|
||||||
@@ -234,13 +245,16 @@ class MarketCapPairList(IPairList):
|
|||||||
resolved = self.resolve_marketcap_pair(pair, pairlist, markets, filtered_pairlist)
|
resolved = self.resolve_marketcap_pair(pair, pairlist, markets, filtered_pairlist)
|
||||||
|
|
||||||
if resolved:
|
if resolved:
|
||||||
|
if not is_whitelist_mode:
|
||||||
|
pairlist.remove(resolved)
|
||||||
|
continue
|
||||||
|
|
||||||
filtered_pairlist.append(resolved)
|
filtered_pairlist.append(resolved)
|
||||||
|
if len(filtered_pairlist) == self._number_assets:
|
||||||
|
break
|
||||||
|
|
||||||
if len(filtered_pairlist) == self._number_assets:
|
if not is_whitelist_mode:
|
||||||
break
|
return pairlist
|
||||||
|
|
||||||
if len(filtered_pairlist) > 0:
|
|
||||||
return filtered_pairlist
|
|
||||||
|
|
||||||
# If no pairs are found, return the original pairlist
|
# If no pairs are found, return the original pairlist
|
||||||
return []
|
return filtered_pairlist
|
||||||
|
|||||||
@@ -10,7 +10,6 @@ import logging
|
|||||||
from datetime import timedelta
|
from datetime import timedelta
|
||||||
from typing import TypedDict
|
from typing import TypedDict
|
||||||
|
|
||||||
from cachetools import TTLCache
|
|
||||||
from pandas import DataFrame
|
from pandas import DataFrame
|
||||||
|
|
||||||
from freqtrade.constants import ListPairsWithTimeframes, PairWithTimeframe
|
from freqtrade.constants import ListPairsWithTimeframes, PairWithTimeframe
|
||||||
@@ -18,7 +17,7 @@ from freqtrade.exceptions import OperationalException
|
|||||||
from freqtrade.exchange import timeframe_to_minutes, timeframe_to_prev_date
|
from freqtrade.exchange import timeframe_to_minutes, timeframe_to_prev_date
|
||||||
from freqtrade.exchange.exchange_types import Ticker, Tickers
|
from freqtrade.exchange.exchange_types import Ticker, Tickers
|
||||||
from freqtrade.plugins.pairlist.IPairList import IPairList, PairlistParameter, SupportsBacktesting
|
from freqtrade.plugins.pairlist.IPairList import IPairList, PairlistParameter, SupportsBacktesting
|
||||||
from freqtrade.util import dt_now, format_ms_time
|
from freqtrade.util import FtTTLCache, dt_now, format_ms_time
|
||||||
|
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
@@ -47,7 +46,7 @@ class PercentChangePairList(IPairList):
|
|||||||
self._min_value = self._pairlistconfig.get("min_value", None)
|
self._min_value = self._pairlistconfig.get("min_value", None)
|
||||||
self._max_value = self._pairlistconfig.get("max_value", None)
|
self._max_value = self._pairlistconfig.get("max_value", None)
|
||||||
self._refresh_period = self._pairlistconfig.get("refresh_period", 1800)
|
self._refresh_period = self._pairlistconfig.get("refresh_period", 1800)
|
||||||
self._pair_cache: TTLCache = TTLCache(maxsize=1, ttl=self._refresh_period)
|
self._pair_cache: FtTTLCache = FtTTLCache(maxsize=1, ttl=self._refresh_period)
|
||||||
self._lookback_days = self._pairlistconfig.get("lookback_days", 0)
|
self._lookback_days = self._pairlistconfig.get("lookback_days", 0)
|
||||||
self._lookback_timeframe = self._pairlistconfig.get("lookback_timeframe", "1d")
|
self._lookback_timeframe = self._pairlistconfig.get("lookback_timeframe", "1d")
|
||||||
self._lookback_period = self._pairlistconfig.get("lookback_period", 0)
|
self._lookback_period = self._pairlistconfig.get("lookback_period", 0)
|
||||||
|
|||||||
@@ -10,7 +10,6 @@ from typing import Any
|
|||||||
|
|
||||||
import rapidjson
|
import rapidjson
|
||||||
import requests
|
import requests
|
||||||
from cachetools import TTLCache
|
|
||||||
|
|
||||||
from freqtrade import __version__
|
from freqtrade import __version__
|
||||||
from freqtrade.configuration.load_config import CONFIG_PARSE_MODE
|
from freqtrade.configuration.load_config import CONFIG_PARSE_MODE
|
||||||
@@ -18,6 +17,7 @@ from freqtrade.exceptions import OperationalException
|
|||||||
from freqtrade.exchange.exchange_types import Tickers
|
from freqtrade.exchange.exchange_types import Tickers
|
||||||
from freqtrade.plugins.pairlist.IPairList import IPairList, PairlistParameter, SupportsBacktesting
|
from freqtrade.plugins.pairlist.IPairList import IPairList, PairlistParameter, SupportsBacktesting
|
||||||
from freqtrade.plugins.pairlist.pairlist_helpers import expand_pairlist
|
from freqtrade.plugins.pairlist.pairlist_helpers import expand_pairlist
|
||||||
|
from freqtrade.util import FtTTLCache
|
||||||
|
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
@@ -48,7 +48,7 @@ class RemotePairList(IPairList):
|
|||||||
self._number_pairs = self._pairlistconfig["number_assets"]
|
self._number_pairs = self._pairlistconfig["number_assets"]
|
||||||
self._refresh_period: int = self._pairlistconfig.get("refresh_period", 1800)
|
self._refresh_period: int = self._pairlistconfig.get("refresh_period", 1800)
|
||||||
self._keep_pairlist_on_failure = self._pairlistconfig.get("keep_pairlist_on_failure", True)
|
self._keep_pairlist_on_failure = self._pairlistconfig.get("keep_pairlist_on_failure", True)
|
||||||
self._pair_cache: TTLCache = TTLCache(maxsize=1, ttl=self._refresh_period)
|
self._pair_cache: FtTTLCache = FtTTLCache(maxsize=1, ttl=self._refresh_period)
|
||||||
self._pairlist_url = self._pairlistconfig.get("pairlist_url", "")
|
self._pairlist_url = self._pairlistconfig.get("pairlist_url", "")
|
||||||
self._read_timeout = self._pairlistconfig.get("read_timeout", 60)
|
self._read_timeout = self._pairlistconfig.get("read_timeout", 60)
|
||||||
self._bearer_token = self._pairlistconfig.get("bearer_token", "")
|
self._bearer_token = self._pairlistconfig.get("bearer_token", "")
|
||||||
@@ -159,7 +159,7 @@ class RemotePairList(IPairList):
|
|||||||
)
|
)
|
||||||
|
|
||||||
self._refresh_period = remote_refresh_period
|
self._refresh_period = remote_refresh_period
|
||||||
self._pair_cache = TTLCache(maxsize=1, ttl=remote_refresh_period)
|
self._pair_cache = FtTTLCache(maxsize=1, ttl=remote_refresh_period)
|
||||||
|
|
||||||
self._init_done = True
|
self._init_done = True
|
||||||
|
|
||||||
|
|||||||
@@ -7,7 +7,6 @@ import sys
|
|||||||
from datetime import timedelta
|
from datetime import timedelta
|
||||||
|
|
||||||
import numpy as np
|
import numpy as np
|
||||||
from cachetools import TTLCache
|
|
||||||
from pandas import DataFrame
|
from pandas import DataFrame
|
||||||
|
|
||||||
from freqtrade.constants import ListPairsWithTimeframes
|
from freqtrade.constants import ListPairsWithTimeframes
|
||||||
@@ -15,7 +14,7 @@ from freqtrade.exceptions import OperationalException
|
|||||||
from freqtrade.exchange.exchange_types import Tickers
|
from freqtrade.exchange.exchange_types import Tickers
|
||||||
from freqtrade.misc import plural
|
from freqtrade.misc import plural
|
||||||
from freqtrade.plugins.pairlist.IPairList import IPairList, PairlistParameter, SupportsBacktesting
|
from freqtrade.plugins.pairlist.IPairList import IPairList, PairlistParameter, SupportsBacktesting
|
||||||
from freqtrade.util import dt_floor_day, dt_now, dt_ts
|
from freqtrade.util import FtTTLCache, dt_floor_day, dt_now, dt_ts
|
||||||
|
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
@@ -38,7 +37,7 @@ class VolatilityFilter(IPairList):
|
|||||||
self._def_candletype = self._config["candle_type_def"]
|
self._def_candletype = self._config["candle_type_def"]
|
||||||
self._sort_direction: str | None = self._pairlistconfig.get("sort_direction", None)
|
self._sort_direction: str | None = self._pairlistconfig.get("sort_direction", None)
|
||||||
|
|
||||||
self._pair_cache: TTLCache = TTLCache(maxsize=1000, ttl=self._refresh_period)
|
self._pair_cache: FtTTLCache = FtTTLCache(maxsize=1000, ttl=self._refresh_period)
|
||||||
|
|
||||||
candle_limit = self._exchange.ohlcv_candle_limit("1d", self._def_candletype)
|
candle_limit = self._exchange.ohlcv_candle_limit("1d", self._def_candletype)
|
||||||
if self._days < 1:
|
if self._days < 1:
|
||||||
|
|||||||
@@ -8,14 +8,12 @@ import logging
|
|||||||
from datetime import timedelta
|
from datetime import timedelta
|
||||||
from typing import Any, Literal
|
from typing import Any, Literal
|
||||||
|
|
||||||
from cachetools import TTLCache
|
|
||||||
|
|
||||||
from freqtrade.constants import ListPairsWithTimeframes
|
from freqtrade.constants import ListPairsWithTimeframes
|
||||||
from freqtrade.exceptions import OperationalException
|
from freqtrade.exceptions import OperationalException
|
||||||
from freqtrade.exchange import timeframe_to_minutes, timeframe_to_prev_date
|
from freqtrade.exchange import timeframe_to_minutes, timeframe_to_prev_date
|
||||||
from freqtrade.exchange.exchange_types import Tickers
|
from freqtrade.exchange.exchange_types import Tickers
|
||||||
from freqtrade.plugins.pairlist.IPairList import IPairList, PairlistParameter, SupportsBacktesting
|
from freqtrade.plugins.pairlist.IPairList import IPairList, PairlistParameter, SupportsBacktesting
|
||||||
from freqtrade.util import dt_now, format_ms_time
|
from freqtrade.util import FtTTLCache, dt_now, format_ms_time
|
||||||
|
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
@@ -43,7 +41,7 @@ class VolumePairList(IPairList):
|
|||||||
self._min_value = self._pairlistconfig.get("min_value", 0)
|
self._min_value = self._pairlistconfig.get("min_value", 0)
|
||||||
self._max_value = self._pairlistconfig.get("max_value", None)
|
self._max_value = self._pairlistconfig.get("max_value", None)
|
||||||
self._refresh_period = self._pairlistconfig.get("refresh_period", 1800)
|
self._refresh_period = self._pairlistconfig.get("refresh_period", 1800)
|
||||||
self._pair_cache: TTLCache = TTLCache(maxsize=1, ttl=self._refresh_period)
|
self._pair_cache: FtTTLCache = FtTTLCache(maxsize=1, ttl=self._refresh_period)
|
||||||
self._lookback_days = self._pairlistconfig.get("lookback_days", 0)
|
self._lookback_days = self._pairlistconfig.get("lookback_days", 0)
|
||||||
self._lookback_timeframe = self._pairlistconfig.get("lookback_timeframe", "1d")
|
self._lookback_timeframe = self._pairlistconfig.get("lookback_timeframe", "1d")
|
||||||
self._lookback_period = self._pairlistconfig.get("lookback_period", 0)
|
self._lookback_period = self._pairlistconfig.get("lookback_period", 0)
|
||||||
|
|||||||
@@ -5,7 +5,6 @@ Rate of change pairlist filter
|
|||||||
import logging
|
import logging
|
||||||
from datetime import timedelta
|
from datetime import timedelta
|
||||||
|
|
||||||
from cachetools import TTLCache
|
|
||||||
from pandas import DataFrame
|
from pandas import DataFrame
|
||||||
|
|
||||||
from freqtrade.constants import ListPairsWithTimeframes
|
from freqtrade.constants import ListPairsWithTimeframes
|
||||||
@@ -13,7 +12,7 @@ from freqtrade.exceptions import OperationalException
|
|||||||
from freqtrade.exchange.exchange_types import Tickers
|
from freqtrade.exchange.exchange_types import Tickers
|
||||||
from freqtrade.misc import plural
|
from freqtrade.misc import plural
|
||||||
from freqtrade.plugins.pairlist.IPairList import IPairList, PairlistParameter, SupportsBacktesting
|
from freqtrade.plugins.pairlist.IPairList import IPairList, PairlistParameter, SupportsBacktesting
|
||||||
from freqtrade.util import dt_floor_day, dt_now, dt_ts
|
from freqtrade.util import FtTTLCache, dt_floor_day, dt_now, dt_ts
|
||||||
|
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
@@ -32,7 +31,7 @@ class RangeStabilityFilter(IPairList):
|
|||||||
self._def_candletype = self._config["candle_type_def"]
|
self._def_candletype = self._config["candle_type_def"]
|
||||||
self._sort_direction: str | None = self._pairlistconfig.get("sort_direction", None)
|
self._sort_direction: str | None = self._pairlistconfig.get("sort_direction", None)
|
||||||
|
|
||||||
self._pair_cache: TTLCache = TTLCache(maxsize=1000, ttl=self._refresh_period)
|
self._pair_cache: FtTTLCache = FtTTLCache(maxsize=1000, ttl=self._refresh_period)
|
||||||
|
|
||||||
candle_limit = self._exchange.ohlcv_candle_limit("1d", self._def_candletype)
|
candle_limit = self._exchange.ohlcv_candle_limit("1d", self._def_candletype)
|
||||||
if self._days < 1:
|
if self._days < 1:
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ PairList manager class
|
|||||||
import logging
|
import logging
|
||||||
from functools import partial
|
from functools import partial
|
||||||
|
|
||||||
from cachetools import LRUCache, TTLCache, cached
|
from cachetools import LRUCache, cached
|
||||||
|
|
||||||
from freqtrade.constants import Config, ListPairsWithTimeframes
|
from freqtrade.constants import Config, ListPairsWithTimeframes
|
||||||
from freqtrade.data.dataprovider import DataProvider
|
from freqtrade.data.dataprovider import DataProvider
|
||||||
@@ -17,6 +17,7 @@ from freqtrade.mixins import LoggingMixin
|
|||||||
from freqtrade.plugins.pairlist.IPairList import IPairList, SupportsBacktesting
|
from freqtrade.plugins.pairlist.IPairList import IPairList, SupportsBacktesting
|
||||||
from freqtrade.plugins.pairlist.pairlist_helpers import expand_pairlist
|
from freqtrade.plugins.pairlist.pairlist_helpers import expand_pairlist
|
||||||
from freqtrade.resolvers import PairListResolver
|
from freqtrade.resolvers import PairListResolver
|
||||||
|
from freqtrade.util import FtTTLCache
|
||||||
|
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
@@ -129,7 +130,7 @@ class PairListManager(LoggingMixin):
|
|||||||
"""List of short_desc for each Pairlist Handler"""
|
"""List of short_desc for each Pairlist Handler"""
|
||||||
return [{p.name: p.short_desc()} for p in self._pairlist_handlers]
|
return [{p.name: p.short_desc()} for p in self._pairlist_handlers]
|
||||||
|
|
||||||
@cached(TTLCache(maxsize=1, ttl=1800))
|
@cached(FtTTLCache(maxsize=1, ttl=1800))
|
||||||
def _get_cached_tickers(self) -> Tickers:
|
def _get_cached_tickers(self) -> Tickers:
|
||||||
return self._exchange.get_tickers()
|
return self._exchange.get_tickers()
|
||||||
|
|
||||||
|
|||||||
@@ -148,6 +148,9 @@ class IResolver:
|
|||||||
logger.debug("Ignoring broken symlink %s", entry)
|
logger.debug("Ignoring broken symlink %s", entry)
|
||||||
continue
|
continue
|
||||||
module_path = entry.resolve()
|
module_path = entry.resolve()
|
||||||
|
if entry.read_text().find(f"class {object_name}(") == -1:
|
||||||
|
logger.debug(f"Skipping {module_path} as it does not contain class {object_name}.")
|
||||||
|
continue
|
||||||
|
|
||||||
if obj := next(cls._get_valid_object(module_path, object_name), None):
|
if obj := next(cls._get_valid_object(module_path, object_name), None):
|
||||||
obj[0].__file__ = str(entry)
|
obj[0].__file__ = str(entry)
|
||||||
|
|||||||
@@ -340,6 +340,8 @@ class TradeSchema(BaseModel):
|
|||||||
|
|
||||||
min_rate: float | None = None
|
min_rate: float | None = None
|
||||||
max_rate: float | None = None
|
max_rate: float | None = None
|
||||||
|
nr_of_successful_entries: int
|
||||||
|
nr_of_successful_exits: int
|
||||||
has_open_orders: bool
|
has_open_orders: bool
|
||||||
orders: list[OrderSchema]
|
orders: list[OrderSchema]
|
||||||
|
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ class ApiBG:
|
|||||||
|
|
||||||
# Generic background jobs
|
# Generic background jobs
|
||||||
|
|
||||||
# TODO: Change this to TTLCache
|
# TODO: Change this to FtTTLCache
|
||||||
jobs: dict[str, JobsContainer] = {}
|
jobs: dict[str, JobsContainer] = {}
|
||||||
# Pairlist evaluate things
|
# Pairlist evaluate things
|
||||||
pairlist_running: bool = False
|
pairlist_running: bool = False
|
||||||
|
|||||||
@@ -7,11 +7,11 @@ import logging
|
|||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from typing import Any
|
from typing import Any
|
||||||
|
|
||||||
from cachetools import TTLCache
|
|
||||||
from requests.exceptions import RequestException
|
from requests.exceptions import RequestException
|
||||||
|
|
||||||
from freqtrade.constants import SUPPORTED_FIAT, Config
|
from freqtrade.constants import SUPPORTED_FIAT, Config
|
||||||
from freqtrade.mixins.logging_mixin import LoggingMixin
|
from freqtrade.mixins.logging_mixin import LoggingMixin
|
||||||
|
from freqtrade.util import FtTTLCache
|
||||||
from freqtrade.util.coin_gecko import FtCoinGeckoApi
|
from freqtrade.util.coin_gecko import FtCoinGeckoApi
|
||||||
|
|
||||||
|
|
||||||
@@ -54,7 +54,7 @@ class CryptoToFiatConverter(LoggingMixin):
|
|||||||
|
|
||||||
def __init__(self, config: Config) -> None:
|
def __init__(self, config: Config) -> None:
|
||||||
# Timeout: 6h
|
# Timeout: 6h
|
||||||
self._pair_price: TTLCache = TTLCache(maxsize=500, ttl=6 * 60 * 60)
|
self._pair_price: FtTTLCache = FtTTLCache(maxsize=500, ttl=6 * 60 * 60)
|
||||||
|
|
||||||
_coingecko_config = config.get("coingecko", {})
|
_coingecko_config = config.get("coingecko", {})
|
||||||
self._coingecko = FtCoinGeckoApi(
|
self._coingecko = FtCoinGeckoApi(
|
||||||
|
|||||||
@@ -47,6 +47,7 @@ from freqtrade.util import (
|
|||||||
dt_ts,
|
dt_ts,
|
||||||
dt_ts_def,
|
dt_ts_def,
|
||||||
format_date,
|
format_date,
|
||||||
|
format_pct,
|
||||||
shorten_date,
|
shorten_date,
|
||||||
)
|
)
|
||||||
from freqtrade.wallets import PositionWallet, Wallet
|
from freqtrade.wallets import PositionWallet, Wallet
|
||||||
@@ -302,7 +303,7 @@ class RPC:
|
|||||||
fiat_total_profit_sum = nan
|
fiat_total_profit_sum = nan
|
||||||
for trade in self._rpc_trade_status():
|
for trade in self._rpc_trade_status():
|
||||||
# Format profit as a string with the right sign
|
# Format profit as a string with the right sign
|
||||||
profit = f"{trade['profit_ratio']:.2%}"
|
profit = f"{format_pct(trade['profit_ratio'])}"
|
||||||
fiat_profit = trade.get("profit_fiat", None)
|
fiat_profit = trade.get("profit_fiat", None)
|
||||||
if fiat_profit is None or isnan(fiat_profit):
|
if fiat_profit is None or isnan(fiat_profit):
|
||||||
fiat_profit = trade.get("profit_abs", 0.0)
|
fiat_profit = trade.get("profit_abs", 0.0)
|
||||||
|
|||||||
@@ -48,6 +48,7 @@ from freqtrade.util import (
|
|||||||
fmt_coin,
|
fmt_coin,
|
||||||
fmt_coin2,
|
fmt_coin2,
|
||||||
format_date,
|
format_date,
|
||||||
|
format_pct,
|
||||||
round_value,
|
round_value,
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -481,7 +482,7 @@ class Telegram(RPCHandler):
|
|||||||
if is_final_exit:
|
if is_final_exit:
|
||||||
profit_prefix = "Sub "
|
profit_prefix = "Sub "
|
||||||
cp_extra = (
|
cp_extra = (
|
||||||
f"*Final Profit:* `{msg['final_profit_ratio']:.2%} "
|
f"*Final Profit:* `{format_pct(msg['final_profit_ratio'])} "
|
||||||
f"({msg['cumulative_profit']:.8f} {msg['quote_currency']}{cp_fiat})`\n"
|
f"({msg['cumulative_profit']:.8f} {msg['quote_currency']}{cp_fiat})`\n"
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
@@ -497,7 +498,7 @@ class Telegram(RPCHandler):
|
|||||||
f"{exit_wording} {msg['pair']} (#{msg['trade_id']})\n"
|
f"{exit_wording} {msg['pair']} (#{msg['trade_id']})\n"
|
||||||
f"{self._add_analyzed_candle(msg['pair'])}"
|
f"{self._add_analyzed_candle(msg['pair'])}"
|
||||||
f"*{f'{profit_prefix}Profit' if is_fill else f'Unrealized {profit_prefix}Profit'}:* "
|
f"*{f'{profit_prefix}Profit' if is_fill else f'Unrealized {profit_prefix}Profit'}:* "
|
||||||
f"`{msg['profit_ratio']:.2%}{profit_extra}`\n"
|
f"`{format_pct(msg['profit_ratio'])}{profit_extra}`\n"
|
||||||
f"{cp_extra}"
|
f"{cp_extra}"
|
||||||
f"{enter_tag}"
|
f"{enter_tag}"
|
||||||
f"*Exit Reason:* `{msg['exit_reason']}`\n"
|
f"*Exit Reason:* `{msg['exit_reason']}`\n"
|
||||||
@@ -670,14 +671,14 @@ class Telegram(RPCHandler):
|
|||||||
# TODO: This calculation ignores fees.
|
# TODO: This calculation ignores fees.
|
||||||
price_to_1st_entry = (cur_entry_average - first_avg) / first_avg
|
price_to_1st_entry = (cur_entry_average - first_avg) / first_avg
|
||||||
if is_open:
|
if is_open:
|
||||||
lines.append("({})".format(dt_humanize_delta(order["order_filled_date"])))
|
lines.append(f"({dt_humanize_delta(order['order_filled_date'])})")
|
||||||
lines.append(
|
lines.append(
|
||||||
f"*Amount:* {round_value(cur_entry_amount, 8)} "
|
f"*Amount:* {round_value(cur_entry_amount, 8)} "
|
||||||
f"({fmt_coin(order['cost'], quote_currency)})"
|
f"({fmt_coin(order['cost'], quote_currency)})"
|
||||||
)
|
)
|
||||||
lines.append(
|
lines.append(
|
||||||
f"*Average {wording} Price:* {round_value(cur_entry_average, 8)} "
|
f"*Average {wording} Price:* {round_value(cur_entry_average, 8)} "
|
||||||
f"({price_to_1st_entry:.2%} from 1st entry rate)"
|
f"({format_pct(price_to_1st_entry)} from 1st entry rate)"
|
||||||
)
|
)
|
||||||
lines.append(f"*Order Filled:* {order['order_filled_date']}")
|
lines.append(f"*Order Filled:* {order['order_filled_date']}")
|
||||||
|
|
||||||
@@ -701,7 +702,7 @@ class Telegram(RPCHandler):
|
|||||||
|
|
||||||
results = self._rpc._rpc_trade_status(trade_ids=trade_ids)
|
results = self._rpc._rpc_trade_status(trade_ids=trade_ids)
|
||||||
for r in results:
|
for r in results:
|
||||||
lines = ["*Order List for Trade #*`{trade_id}`"]
|
lines = [f"*Order List for Trade #*`{r['trade_id']}`"]
|
||||||
|
|
||||||
lines_detail = self._prepare_order_details(
|
lines_detail = self._prepare_order_details(
|
||||||
r["orders"], r["quote_currency"], r["is_open"]
|
r["orders"], r["quote_currency"], r["is_open"]
|
||||||
@@ -720,10 +721,10 @@ class Telegram(RPCHandler):
|
|||||||
if (len(msg) + len(line) + 1) < MAX_MESSAGE_LENGTH:
|
if (len(msg) + len(line) + 1) < MAX_MESSAGE_LENGTH:
|
||||||
msg += line + "\n"
|
msg += line + "\n"
|
||||||
else:
|
else:
|
||||||
await self._send_msg(msg.format(**r))
|
await self._send_msg(msg)
|
||||||
msg = "*Order List for Trade #*`{trade_id}` - continued\n" + line + "\n"
|
msg = f"*Order List for Trade #*`{r['trade_id']}` - continued\n" + line + "\n"
|
||||||
|
|
||||||
await self._send_msg(msg.format(**r))
|
await self._send_msg(msg)
|
||||||
|
|
||||||
@authorized_only
|
@authorized_only
|
||||||
async def _status(self, update: Update, context: CallbackContext) -> None:
|
async def _status(self, update: Update, context: CallbackContext) -> None:
|
||||||
@@ -757,15 +758,7 @@ class Telegram(RPCHandler):
|
|||||||
max_entries = self._config.get("max_entry_position_adjustment", -1)
|
max_entries = self._config.get("max_entry_position_adjustment", -1)
|
||||||
for r in results:
|
for r in results:
|
||||||
r["open_date_hum"] = dt_humanize_delta(r["open_date"])
|
r["open_date_hum"] = dt_humanize_delta(r["open_date"])
|
||||||
r["num_entries"] = len([o for o in r["orders"] if o["ft_is_entry"]])
|
|
||||||
r["num_exits"] = len(
|
|
||||||
[
|
|
||||||
o
|
|
||||||
for o in r["orders"]
|
|
||||||
if not o["ft_is_entry"] and not o["ft_order_side"] == "stoploss"
|
|
||||||
]
|
|
||||||
)
|
|
||||||
r["exit_reason"] = r.get("exit_reason", "")
|
|
||||||
r["stake_amount_r"] = fmt_coin(r["stake_amount"], r["quote_currency"])
|
r["stake_amount_r"] = fmt_coin(r["stake_amount"], r["quote_currency"])
|
||||||
r["max_stake_amount_r"] = fmt_coin(
|
r["max_stake_amount_r"] = fmt_coin(
|
||||||
r["max_stake_amount"] or r["stake_amount"], r["quote_currency"]
|
r["max_stake_amount"] or r["stake_amount"], r["quote_currency"]
|
||||||
@@ -774,26 +767,25 @@ class Telegram(RPCHandler):
|
|||||||
r["realized_profit_r"] = fmt_coin(r["realized_profit"], r["quote_currency"])
|
r["realized_profit_r"] = fmt_coin(r["realized_profit"], r["quote_currency"])
|
||||||
r["total_profit_abs_r"] = fmt_coin(r["total_profit_abs"], r["quote_currency"])
|
r["total_profit_abs_r"] = fmt_coin(r["total_profit_abs"], r["quote_currency"])
|
||||||
lines = [
|
lines = [
|
||||||
"*Trade ID:* `{trade_id}`" + (" `(since {open_date_hum})`" if r["is_open"] else ""),
|
f"*Trade ID:* `{r['trade_id']}`"
|
||||||
"*Current Pair:* {pair}",
|
+ (f" `(since {r['open_date_hum']})`" if r["is_open"] else ""),
|
||||||
|
f"*Current Pair:* {r['pair']}",
|
||||||
(
|
(
|
||||||
f"*Direction:* {'`Short`' if r.get('is_short') else '`Long`'}"
|
f"*Direction:* {'`Short`' if r.get('is_short') else '`Long`'}"
|
||||||
+ " ` ({leverage}x)`"
|
+ (f" ` ({r['leverage']}x)`" if r.get("leverage") else "")
|
||||||
if r.get("leverage")
|
|
||||||
else ""
|
|
||||||
),
|
),
|
||||||
"*Amount:* `{amount} ({stake_amount_r})`",
|
f"*Amount:* `{r['amount']} ({r['stake_amount_r']})`",
|
||||||
"*Total invested:* `{max_stake_amount_r}`" if position_adjust else "",
|
f"*Total invested:* `{r['max_stake_amount_r']}`" if position_adjust else "",
|
||||||
"*Enter Tag:* `{enter_tag}`" if r["enter_tag"] else "",
|
f"*Enter Tag:* `{r['enter_tag']}`" if r["enter_tag"] else "",
|
||||||
"*Exit Reason:* `{exit_reason}`" if r["exit_reason"] else "",
|
f"*Exit Reason:* `{r['exit_reason']}`" if r.get("exit_reason") else "",
|
||||||
]
|
]
|
||||||
|
|
||||||
if position_adjust:
|
if position_adjust:
|
||||||
max_buy_str = f"/{max_entries + 1}" if (max_entries > 0) else ""
|
max_buy_str = f"/{max_entries + 1}" if (max_entries > 0) else ""
|
||||||
lines.extend(
|
lines.extend(
|
||||||
[
|
[
|
||||||
"*Number of Entries:* `{num_entries}" + max_buy_str + "`",
|
f"*Number of Entries:* `{r['nr_of_successful_entries']}{max_buy_str}`",
|
||||||
"*Number of Exits:* `{num_exits}`",
|
f"*Number of Exits:* `{r['nr_of_successful_exits']}`",
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -801,53 +793,62 @@ class Telegram(RPCHandler):
|
|||||||
[
|
[
|
||||||
f"*Open Rate:* `{round_value(r['open_rate'], 8)}`",
|
f"*Open Rate:* `{round_value(r['open_rate'], 8)}`",
|
||||||
f"*Close Rate:* `{round_value(r['close_rate'], 8)}`" if r["close_rate"] else "",
|
f"*Close Rate:* `{round_value(r['close_rate'], 8)}`" if r["close_rate"] else "",
|
||||||
"*Open Date:* `{open_date}`",
|
f"*Open Date:* `{r['open_date']}`",
|
||||||
"*Close Date:* `{close_date}`" if r["close_date"] else "",
|
f"*Close Date:* `{r['close_date']}`" if r["close_date"] else "",
|
||||||
(
|
(
|
||||||
f" \n*Current Rate:* `{round_value(r['current_rate'], 8)}`"
|
f" \n*Current Rate:* `{round_value(r['current_rate'], 8)}`"
|
||||||
if r["is_open"]
|
if r["is_open"]
|
||||||
else ""
|
else ""
|
||||||
),
|
),
|
||||||
("*Unrealized Profit:* " if r["is_open"] else "*Close Profit: *")
|
("*Unrealized Profit:* " if r["is_open"] else "*Close Profit: *")
|
||||||
+ "`{profit_ratio:.2%}` `({profit_abs_r})`",
|
+ f"`{format_pct(r['profit_ratio'])}` `({r['profit_abs_r']})`",
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
|
|
||||||
if r["is_open"]:
|
if r["is_open"]:
|
||||||
if r.get("realized_profit"):
|
if (
|
||||||
lines.extend(
|
r.get("realized_profit") is not None
|
||||||
[
|
and r.get("realized_profit_ratio") is not None
|
||||||
"*Realized Profit:* `{realized_profit_ratio:.2%} "
|
):
|
||||||
"({realized_profit_r})`",
|
lines.append(
|
||||||
"*Total Profit:* `{total_profit_ratio:.2%} ({total_profit_abs_r})`",
|
f"*Realized Profit:* `{format_pct(r['realized_profit_ratio'])} "
|
||||||
]
|
f"({r['realized_profit_r']})`"
|
||||||
|
)
|
||||||
|
if r.get("total_profit_ratio") is not None:
|
||||||
|
lines.append(
|
||||||
|
f"*Total Profit:* `{format_pct(r['total_profit_ratio'])} "
|
||||||
|
f"({r['total_profit_abs_r']})`"
|
||||||
)
|
)
|
||||||
|
|
||||||
# Append empty line to improve readability
|
# Append empty line to improve readability
|
||||||
lines.append(" ")
|
lines.append(" ")
|
||||||
|
# Adding liquidation only if it is not None
|
||||||
|
if liquidation := r.get("liquidation_price"):
|
||||||
|
lines.append(f"*Liquidation:* `{round_value(liquidation, 8)}`")
|
||||||
|
|
||||||
if (
|
if (
|
||||||
r["stop_loss_abs"] != r["initial_stop_loss_abs"]
|
r["stop_loss_abs"] != r["initial_stop_loss_abs"]
|
||||||
and r["initial_stop_loss_ratio"] is not None
|
and r["initial_stop_loss_ratio"] is not None
|
||||||
):
|
):
|
||||||
# Adding initial stoploss only if it is different from stoploss
|
# Adding initial stoploss only if it is different from stoploss
|
||||||
lines.append(
|
lines.append(
|
||||||
"*Initial Stoploss:* `{initial_stop_loss_abs:.8f}` "
|
f"*Initial Stoploss:* `{r['initial_stop_loss_abs']:.8f}` "
|
||||||
"`({initial_stop_loss_ratio:.2%})`"
|
f"`({format_pct(r['initial_stop_loss_ratio'])})`"
|
||||||
)
|
)
|
||||||
|
|
||||||
# Adding stoploss and stoploss percentage only if it is not None
|
# Adding stoploss and stoploss percentage only if it is not None
|
||||||
lines.append(
|
lines.append(
|
||||||
f"*Stoploss:* `{round_value(r['stop_loss_abs'], 8)}` "
|
f"*Stoploss:* `{round_value(r['stop_loss_abs'], 8)}` "
|
||||||
+ ("`({stop_loss_ratio:.2%})`" if r["stop_loss_ratio"] else "")
|
+ (f"`({format_pct(r['stop_loss_ratio'])})`" if r["stop_loss_ratio"] else "")
|
||||||
)
|
)
|
||||||
lines.append(
|
lines.append(
|
||||||
f"*Stoploss distance:* `{round_value(r['stoploss_current_dist'], 8)}` "
|
f"*Stoploss distance:* `{round_value(r['stoploss_current_dist'], 8)}` "
|
||||||
"`({stoploss_current_dist_ratio:.2%})`"
|
f"`({format_pct(r['stoploss_current_dist_ratio'])})`"
|
||||||
)
|
)
|
||||||
if r.get("open_orders"):
|
if open_orders := r.get("open_orders"):
|
||||||
lines.append(
|
lines.append(
|
||||||
"*Open Order:* `{open_orders}`"
|
f"*Open Order:* `{open_orders}`"
|
||||||
+ ("- `{exit_order_status}`" if r["exit_order_status"] else "")
|
+ (f"- `{r['exit_order_status']}`" if r["exit_order_status"] else "")
|
||||||
)
|
)
|
||||||
|
|
||||||
await self.__send_status_msg(lines, r)
|
await self.__send_status_msg(lines, r)
|
||||||
@@ -863,10 +864,10 @@ class Telegram(RPCHandler):
|
|||||||
if (len(msg) + len(line) + 1) < MAX_MESSAGE_LENGTH:
|
if (len(msg) + len(line) + 1) < MAX_MESSAGE_LENGTH:
|
||||||
msg += line + "\n"
|
msg += line + "\n"
|
||||||
else:
|
else:
|
||||||
await self._send_msg(msg.format(**r))
|
await self._send_msg(msg)
|
||||||
msg = "*Trade ID:* `{trade_id}` - continued\n" + line + "\n"
|
msg = f"*Trade ID:* `{r['trade_id']}` - continued\n" + line + "\n"
|
||||||
|
|
||||||
await self._send_msg(msg.format(**r))
|
await self._send_msg(msg)
|
||||||
|
|
||||||
@authorized_only
|
@authorized_only
|
||||||
async def _status_table(self, update: Update, context: CallbackContext) -> None:
|
async def _status_table(self, update: Update, context: CallbackContext) -> None:
|
||||||
@@ -953,7 +954,7 @@ class Telegram(RPCHandler):
|
|||||||
f"{period['date']:{val.dateformat}} ({period['trade_count']})",
|
f"{period['date']:{val.dateformat}} ({period['trade_count']})",
|
||||||
f"{fmt_coin(period['abs_profit'], stats['stake_currency'])}",
|
f"{fmt_coin(period['abs_profit'], stats['stake_currency'])}",
|
||||||
f"{period['fiat_value']:.2f} {stats['fiat_display_currency']}",
|
f"{period['fiat_value']:.2f} {stats['fiat_display_currency']}",
|
||||||
f"{period['rel_profit']:.2%}",
|
f"{format_pct(period['rel_profit'])}",
|
||||||
]
|
]
|
||||||
for period in stats["data"]
|
for period in stats["data"]
|
||||||
],
|
],
|
||||||
@@ -1069,7 +1070,7 @@ class Telegram(RPCHandler):
|
|||||||
markdown_msg = (
|
markdown_msg = (
|
||||||
f"{closed_roi_label}\n"
|
f"{closed_roi_label}\n"
|
||||||
f"∙ `{fmt_coin(profit_closed_coin, stake_cur)} "
|
f"∙ `{fmt_coin(profit_closed_coin, stake_cur)} "
|
||||||
f"({profit_closed_ratio_mean:.2%}) "
|
f"({format_pct(profit_closed_ratio_mean)}) "
|
||||||
f"({profit_closed_percent} \N{GREEK CAPITAL LETTER SIGMA}%)`\n"
|
f"({profit_closed_percent} \N{GREEK CAPITAL LETTER SIGMA}%)`\n"
|
||||||
f"{fiat_closed_trades}"
|
f"{fiat_closed_trades}"
|
||||||
)
|
)
|
||||||
@@ -1082,7 +1083,7 @@ class Telegram(RPCHandler):
|
|||||||
markdown_msg += (
|
markdown_msg += (
|
||||||
f"{all_roi_label}\n"
|
f"{all_roi_label}\n"
|
||||||
f"∙ `{fmt_coin(profit_all_coin, stake_cur)} "
|
f"∙ `{fmt_coin(profit_all_coin, stake_cur)} "
|
||||||
f"({profit_all_ratio_mean:.2%}) "
|
f"({format_pct(profit_all_ratio_mean)}) "
|
||||||
f"({profit_all_percent} \N{GREEK CAPITAL LETTER SIGMA}%)`\n"
|
f"({profit_all_percent} \N{GREEK CAPITAL LETTER SIGMA}%)`\n"
|
||||||
f"{fiat_all_trades}"
|
f"{fiat_all_trades}"
|
||||||
f"*Total Trade Count:* `{trade_count}`\n"
|
f"*Total Trade Count:* `{trade_count}`\n"
|
||||||
@@ -1091,7 +1092,7 @@ class Telegram(RPCHandler):
|
|||||||
f"`{first_trade_date}`\n"
|
f"`{first_trade_date}`\n"
|
||||||
f"*Latest Trade opened:* `{latest_trade_date}`\n"
|
f"*Latest Trade opened:* `{latest_trade_date}`\n"
|
||||||
f"*Win / Loss:* `{stats['winning_trades']} / {stats['losing_trades']}`\n"
|
f"*Win / Loss:* `{stats['winning_trades']} / {stats['losing_trades']}`\n"
|
||||||
f"*Winrate:* `{winrate:.2%}`\n"
|
f"*Winrate:* `{format_pct(winrate)}`\n"
|
||||||
f"*Expectancy (Ratio):* `{expectancy:.2f} ({expectancy_ratio:.2f})`"
|
f"*Expectancy (Ratio):* `{expectancy:.2f} ({expectancy_ratio:.2f})`"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -1099,16 +1100,16 @@ class Telegram(RPCHandler):
|
|||||||
markdown_msg += (
|
markdown_msg += (
|
||||||
f"\n*Avg. Duration:* `{avg_duration}`\n"
|
f"\n*Avg. Duration:* `{avg_duration}`\n"
|
||||||
f"*Best Performing:* `{best_pair}: {best_pair_profit_abs} "
|
f"*Best Performing:* `{best_pair}: {best_pair_profit_abs} "
|
||||||
f"({best_pair_profit_ratio:.2%})`\n"
|
f"({format_pct(best_pair_profit_ratio)})`\n"
|
||||||
f"*Trading volume:* `{fmt_coin(stats['trading_volume'], stake_cur)}`\n"
|
f"*Trading volume:* `{fmt_coin(stats['trading_volume'], stake_cur)}`\n"
|
||||||
f"*Profit factor:* `{stats['profit_factor']:.2f}`\n"
|
f"*Profit factor:* `{stats['profit_factor']:.2f}`\n"
|
||||||
f"*Max Drawdown:* `{stats['max_drawdown']:.2%} "
|
f"*Max Drawdown:* `{format_pct(stats['max_drawdown'])} "
|
||||||
f"({fmt_coin(stats['max_drawdown_abs'], stake_cur)})`\n"
|
f"({fmt_coin(stats['max_drawdown_abs'], stake_cur)})`\n"
|
||||||
f" from `{stats['max_drawdown_start']} "
|
f" from `{stats['max_drawdown_start']} "
|
||||||
f"({fmt_coin(stats['drawdown_high'], stake_cur)})`\n"
|
f"({fmt_coin(stats['drawdown_high'], stake_cur)})`\n"
|
||||||
f" to `{stats['max_drawdown_end']} "
|
f" to `{stats['max_drawdown_end']} "
|
||||||
f"({fmt_coin(stats['drawdown_low'], stake_cur)})`\n"
|
f"({fmt_coin(stats['drawdown_low'], stake_cur)})`\n"
|
||||||
f"*Current Drawdown:* `{stats['current_drawdown']:.2%} "
|
f"*Current Drawdown:* `{format_pct(stats['current_drawdown'])} "
|
||||||
f"({fmt_coin(stats['current_drawdown_abs'], stake_cur)})`\n"
|
f"({fmt_coin(stats['current_drawdown_abs'], stake_cur)})`\n"
|
||||||
f" from `{stats['current_drawdown_start']} "
|
f" from `{stats['current_drawdown_start']} "
|
||||||
f"({fmt_coin(stats['current_drawdown_high'], stake_cur)})`\n"
|
f"({fmt_coin(stats['current_drawdown_high'], stake_cur)})`\n"
|
||||||
@@ -1561,7 +1562,7 @@ class Telegram(RPCHandler):
|
|||||||
dt_humanize_delta(dt_from_ts(trade["close_timestamp"])),
|
dt_humanize_delta(dt_from_ts(trade["close_timestamp"])),
|
||||||
f"{trade['pair']} (#{trade['trade_id']}"
|
f"{trade['pair']} (#{trade['trade_id']}"
|
||||||
f"{(' ' + ('S' if trade['is_short'] else 'L')) if nonspot else ''})",
|
f"{(' ' + ('S' if trade['is_short'] else 'L')) if nonspot else ''})",
|
||||||
f"{(trade['close_profit']):.2%} ({trade['close_profit_abs']})",
|
f"{format_pct(trade['close_profit'])} ({trade['close_profit_abs']})",
|
||||||
]
|
]
|
||||||
for trade in trades["trades"]
|
for trade in trades["trades"]
|
||||||
],
|
],
|
||||||
@@ -1625,7 +1626,7 @@ class Telegram(RPCHandler):
|
|||||||
stat_line = (
|
stat_line = (
|
||||||
f"{i + 1}.\t <code>{trade['pair']}\t"
|
f"{i + 1}.\t <code>{trade['pair']}\t"
|
||||||
f"{fmt_coin(trade['profit_abs'], self._config['stake_currency'])} "
|
f"{fmt_coin(trade['profit_abs'], self._config['stake_currency'])} "
|
||||||
f"({trade['profit_ratio']:.2%}) "
|
f"({format_pct(trade['profit_ratio'])}) "
|
||||||
f"({trade['count']})</code>\n"
|
f"({trade['count']})</code>\n"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -1662,7 +1663,7 @@ class Telegram(RPCHandler):
|
|||||||
stat_line = (
|
stat_line = (
|
||||||
f"{i + 1}.\t `{trade['enter_tag']}\t"
|
f"{i + 1}.\t `{trade['enter_tag']}\t"
|
||||||
f"{fmt_coin(trade['profit_abs'], self._config['stake_currency'])} "
|
f"{fmt_coin(trade['profit_abs'], self._config['stake_currency'])} "
|
||||||
f"({trade['profit_ratio']:.2%}) "
|
f"({format_pct(trade['profit_ratio'])}) "
|
||||||
f"({trade['count']})`\n"
|
f"({trade['count']})`\n"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -1699,7 +1700,7 @@ class Telegram(RPCHandler):
|
|||||||
stat_line = (
|
stat_line = (
|
||||||
f"{i + 1}.\t `{trade['exit_reason']}\t"
|
f"{i + 1}.\t `{trade['exit_reason']}\t"
|
||||||
f"{fmt_coin(trade['profit_abs'], self._config['stake_currency'])} "
|
f"{fmt_coin(trade['profit_abs'], self._config['stake_currency'])} "
|
||||||
f"({trade['profit_ratio']:.2%}) "
|
f"({format_pct(trade['profit_ratio'])}) "
|
||||||
f"({trade['count']})`\n"
|
f"({trade['count']})`\n"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -1736,7 +1737,7 @@ class Telegram(RPCHandler):
|
|||||||
stat_line = (
|
stat_line = (
|
||||||
f"{i + 1}.\t `{trade['mix_tag']}\t"
|
f"{i + 1}.\t `{trade['mix_tag']}\t"
|
||||||
f"{fmt_coin(trade['profit_abs'], self._config['stake_currency'])} "
|
f"{fmt_coin(trade['profit_abs'], self._config['stake_currency'])} "
|
||||||
f"({trade['profit_ratio']:.2%}) "
|
f"({format_pct(trade['profit_ratio'])}) "
|
||||||
f"({trade['count']})`\n"
|
f"({trade['count']})`\n"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -4,9 +4,9 @@ This module defines a base class for auto-hyperoptable strategies.
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
import logging
|
import logging
|
||||||
|
from collections import defaultdict
|
||||||
from collections.abc import Iterator
|
from collections.abc import Iterator
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import Any
|
|
||||||
|
|
||||||
from freqtrade.constants import Config
|
from freqtrade.constants import Config
|
||||||
from freqtrade.exceptions import OperationalException
|
from freqtrade.exceptions import OperationalException
|
||||||
@@ -18,6 +18,11 @@ from freqtrade.strategy.parameters import BaseParameter
|
|||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
# Type aliases
|
||||||
|
SpaceParams = dict[str, BaseParameter]
|
||||||
|
AllSpaceParams = dict[str, SpaceParams]
|
||||||
|
|
||||||
|
|
||||||
class HyperStrategyMixin:
|
class HyperStrategyMixin:
|
||||||
"""
|
"""
|
||||||
A helper base class which allows HyperOptAuto class to reuse implementations of buy/sell
|
A helper base class which allows HyperOptAuto class to reuse implementations of buy/sell
|
||||||
@@ -29,47 +34,22 @@ class HyperStrategyMixin:
|
|||||||
Initialize hyperoptable strategy mixin.
|
Initialize hyperoptable strategy mixin.
|
||||||
"""
|
"""
|
||||||
self.config = config
|
self.config = config
|
||||||
self.ft_buy_params: list[BaseParameter] = []
|
self._ft_hyper_params: AllSpaceParams = {}
|
||||||
self.ft_sell_params: list[BaseParameter] = []
|
|
||||||
self.ft_protection_params: list[BaseParameter] = []
|
|
||||||
|
|
||||||
params = self.load_params_from_file()
|
params = self.load_params_from_file()
|
||||||
params = params.get("params", {})
|
params = params.get("params", {})
|
||||||
self._ft_params_from_file = params
|
self._ft_params_from_file = params
|
||||||
# Init/loading of parameters is done as part of ft_bot_start().
|
# Init/loading of parameters is done as part of ft_bot_start().
|
||||||
|
|
||||||
def enumerate_parameters(
|
def enumerate_parameters(self, space: str | None = None) -> Iterator[tuple[str, BaseParameter]]:
|
||||||
self, category: str | None = None
|
|
||||||
) -> Iterator[tuple[str, BaseParameter]]:
|
|
||||||
"""
|
"""
|
||||||
Find all optimizable parameters and return (name, attr) iterator.
|
Find all optimizable parameters and return (name, attr) iterator.
|
||||||
:param category:
|
:param space: parameter space to filter for, or None for all spaces.
|
||||||
:return:
|
:return:
|
||||||
"""
|
"""
|
||||||
if category not in ("buy", "sell", "protection", None):
|
for space in [c for c in self._ft_hyper_params if space is None or c == space]:
|
||||||
raise OperationalException(
|
for par in self._ft_hyper_params[space].values():
|
||||||
'Category must be one of: "buy", "sell", "protection", None.'
|
yield par.name, par
|
||||||
)
|
|
||||||
|
|
||||||
if category is None:
|
|
||||||
params = self.ft_buy_params + self.ft_sell_params + self.ft_protection_params
|
|
||||||
else:
|
|
||||||
params = getattr(self, f"ft_{category}_params")
|
|
||||||
|
|
||||||
for par in params:
|
|
||||||
yield par.name, par
|
|
||||||
|
|
||||||
@classmethod
|
|
||||||
def detect_all_parameters(cls) -> dict:
|
|
||||||
"""Detect all parameters and return them as a list"""
|
|
||||||
params: dict[str, Any] = {
|
|
||||||
"buy": list(detect_parameters(cls, "buy")),
|
|
||||||
"sell": list(detect_parameters(cls, "sell")),
|
|
||||||
"protection": list(detect_parameters(cls, "protection")),
|
|
||||||
}
|
|
||||||
params.update({"count": len(params["buy"] + params["sell"] + params["protection"])})
|
|
||||||
|
|
||||||
return params
|
|
||||||
|
|
||||||
def ft_load_params_from_file(self) -> None:
|
def ft_load_params_from_file(self) -> None:
|
||||||
"""
|
"""
|
||||||
@@ -110,20 +90,13 @@ class HyperStrategyMixin:
|
|||||||
* Parameters defined in parameters objects (buy_params, sell_params, ...)
|
* Parameters defined in parameters objects (buy_params, sell_params, ...)
|
||||||
* Parameter defaults
|
* Parameter defaults
|
||||||
"""
|
"""
|
||||||
|
self._ft_hyper_params = detect_all_parameters(self)
|
||||||
|
|
||||||
buy_params = deep_merge_dicts(
|
for space in self._ft_hyper_params.keys():
|
||||||
self._ft_params_from_file.get("buy", {}), getattr(self, "buy_params", {})
|
params_values = deep_merge_dicts(
|
||||||
)
|
self._ft_params_from_file.get(space, {}), getattr(self, f"{space}_params", {})
|
||||||
sell_params = deep_merge_dicts(
|
)
|
||||||
self._ft_params_from_file.get("sell", {}), getattr(self, "sell_params", {})
|
self._ft_load_params(self._ft_hyper_params[space], params_values, space, hyperopt)
|
||||||
)
|
|
||||||
protection_params = deep_merge_dicts(
|
|
||||||
self._ft_params_from_file.get("protection", {}), getattr(self, "protection_params", {})
|
|
||||||
)
|
|
||||||
|
|
||||||
self._ft_load_params(buy_params, "buy", hyperopt)
|
|
||||||
self._ft_load_params(sell_params, "sell", hyperopt)
|
|
||||||
self._ft_load_params(protection_params, "protection", hyperopt)
|
|
||||||
|
|
||||||
def load_params_from_file(self) -> dict:
|
def load_params_from_file(self) -> dict:
|
||||||
filename_str = getattr(self, "__file__", "")
|
filename_str = getattr(self, "__file__", "")
|
||||||
@@ -145,72 +118,73 @@ class HyperStrategyMixin:
|
|||||||
|
|
||||||
return {}
|
return {}
|
||||||
|
|
||||||
def _ft_load_params(self, params: dict, space: str, hyperopt: bool = False) -> None:
|
def _ft_load_params(
|
||||||
|
self, params: SpaceParams, param_values: dict, space: str, hyperopt: bool = False
|
||||||
|
) -> None:
|
||||||
"""
|
"""
|
||||||
Set optimizable parameter values.
|
Set optimizable parameter values.
|
||||||
:param params: Dictionary with new parameter values.
|
:param params: Dictionary with new parameter values.
|
||||||
"""
|
"""
|
||||||
if not params:
|
if not param_values:
|
||||||
logger.info(f"No params for {space} found, using default values.")
|
logger.info(f"No params for {space} found, using default values.")
|
||||||
param_container: list[BaseParameter] = getattr(self, f"ft_{space}_params")
|
|
||||||
|
|
||||||
for attr_name, attr in detect_parameters(self, space):
|
for param_name, param in params.items():
|
||||||
attr.name = attr_name
|
param.in_space = hyperopt and HyperoptTools.has_space(self.config, space)
|
||||||
attr.in_space = hyperopt and HyperoptTools.has_space(self.config, space)
|
if not param.space:
|
||||||
if not attr.category:
|
param.space = space
|
||||||
attr.category = space
|
|
||||||
|
|
||||||
param_container.append(attr)
|
if param_values and param_name in param_values:
|
||||||
|
if param.load:
|
||||||
if params and attr_name in params:
|
param.value = param_values[param_name]
|
||||||
if attr.load:
|
logger.info(f"Strategy Parameter: {param_name} = {param.value}")
|
||||||
attr.value = params[attr_name]
|
|
||||||
logger.info(f"Strategy Parameter: {attr_name} = {attr.value}")
|
|
||||||
else:
|
else:
|
||||||
logger.warning(
|
logger.warning(
|
||||||
f'Parameter "{attr_name}" exists, but is disabled. '
|
f'Parameter "{param_name}" exists, but is disabled. '
|
||||||
f'Default value "{attr.value}" used.'
|
f'Default value "{param.value}" used.'
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
logger.info(f"Strategy Parameter(default): {attr_name} = {attr.value}")
|
logger.info(f"Strategy Parameter(default): {param_name} = {param.value}")
|
||||||
|
|
||||||
def get_no_optimize_params(self) -> dict[str, dict]:
|
def get_no_optimize_params(self) -> dict[str, dict]:
|
||||||
"""
|
"""
|
||||||
Returns list of Parameters that are not part of the current optimize job
|
Returns list of Parameters that are not part of the current optimize job
|
||||||
"""
|
"""
|
||||||
params: dict[str, dict] = {
|
params: dict[str, dict] = defaultdict(dict)
|
||||||
"buy": {},
|
|
||||||
"sell": {},
|
|
||||||
"protection": {},
|
|
||||||
}
|
|
||||||
for name, p in self.enumerate_parameters():
|
for name, p in self.enumerate_parameters():
|
||||||
if p.category and (not p.optimize or not p.in_space):
|
if p.space and (not p.optimize or not p.in_space):
|
||||||
params[p.category][name] = p.value
|
params[p.space][name] = p.value
|
||||||
return params
|
return params
|
||||||
|
|
||||||
|
|
||||||
def detect_parameters(
|
def detect_all_parameters(
|
||||||
obj: HyperStrategyMixin | type[HyperStrategyMixin], category: str
|
obj: HyperStrategyMixin | type[HyperStrategyMixin],
|
||||||
) -> Iterator[tuple[str, BaseParameter]]:
|
) -> AllSpaceParams:
|
||||||
"""
|
"""
|
||||||
Detect all parameters for 'category' for "obj"
|
Detect all hyperoptable parameters for this object.
|
||||||
:param obj: Strategy object or class
|
:param obj: Strategy object or class
|
||||||
:param category: category - usually `'buy', 'sell', 'protection',...
|
:return: Dictionary of detected parameters by space
|
||||||
"""
|
"""
|
||||||
|
auto_categories = ["buy", "sell", "enter", "exit", "protection"]
|
||||||
|
result: AllSpaceParams = defaultdict(dict)
|
||||||
for attr_name in dir(obj):
|
for attr_name in dir(obj):
|
||||||
if not attr_name.startswith("__"): # Ignore internals, not strictly necessary.
|
if attr_name.startswith("__"): # Ignore internals
|
||||||
attr = getattr(obj, attr_name)
|
continue
|
||||||
if issubclass(attr.__class__, BaseParameter):
|
attr = getattr(obj, attr_name)
|
||||||
if (
|
if not issubclass(attr.__class__, BaseParameter):
|
||||||
attr_name.startswith(category + "_")
|
continue
|
||||||
and attr.category is not None
|
if not attr.space:
|
||||||
and attr.category != category
|
# space auto detection
|
||||||
):
|
for space in auto_categories:
|
||||||
raise OperationalException(
|
if attr_name.startswith(space + "_"):
|
||||||
f"Inconclusive parameter name {attr_name}, category: {attr.category}."
|
attr.space = space
|
||||||
)
|
break
|
||||||
|
if attr.space is None:
|
||||||
|
raise OperationalException(f"Cannot determine parameter space for {attr_name}.")
|
||||||
|
|
||||||
if category == attr.category or (
|
if attr.space in ("all", "default") or attr.space.isidentifier() is False:
|
||||||
attr_name.startswith(category + "_") and attr.category is None
|
raise OperationalException(
|
||||||
):
|
f"'{attr.space}' is not a valid space. Parameter: {attr_name}."
|
||||||
yield attr_name, attr
|
)
|
||||||
|
attr.name = attr_name
|
||||||
|
result[attr.space][attr_name] = attr
|
||||||
|
return result
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ class BaseParameter(ABC):
|
|||||||
Defines a parameter that can be optimized by hyperopt.
|
Defines a parameter that can be optimized by hyperopt.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
category: str | None
|
space: str | None
|
||||||
default: Any
|
default: Any
|
||||||
value: Any
|
value: Any
|
||||||
in_space: bool = False
|
in_space: bool = False
|
||||||
@@ -49,9 +49,9 @@ class BaseParameter(ABC):
|
|||||||
):
|
):
|
||||||
"""
|
"""
|
||||||
Initialize hyperopt-optimizable parameter.
|
Initialize hyperopt-optimizable parameter.
|
||||||
:param space: A parameter category. Can be 'buy' or 'sell'. This parameter is optional if
|
:param space: The parameter space. Can be 'buy', 'sell', or a string that's also a
|
||||||
parameter field
|
valid python identifier.
|
||||||
name is prefixed with 'buy_' or 'sell_'.
|
This parameter is optional if parameter name is prefixed with 'buy_' or 'sell_'.
|
||||||
:param optimize: Include parameter in hyperopt optimizations.
|
:param optimize: Include parameter in hyperopt optimizations.
|
||||||
:param load: Load parameter value from {space}_params.
|
:param load: Load parameter value from {space}_params.
|
||||||
:param kwargs: Extra parameters to optuna.distributions.
|
:param kwargs: Extra parameters to optuna.distributions.
|
||||||
@@ -61,7 +61,7 @@ class BaseParameter(ABC):
|
|||||||
raise OperationalException(
|
raise OperationalException(
|
||||||
"Name is determined by parameter field name and can not be specified manually."
|
"Name is determined by parameter field name and can not be specified manually."
|
||||||
)
|
)
|
||||||
self.category = space
|
self.space = space
|
||||||
self._space_params = kwargs
|
self._space_params = kwargs
|
||||||
self.value = default
|
self.value = default
|
||||||
self.optimize = optimize
|
self.optimize = optimize
|
||||||
@@ -109,8 +109,9 @@ class NumericParameter(BaseParameter):
|
|||||||
:param high: Upper end (inclusive) of optimization space.
|
:param high: Upper end (inclusive) of optimization space.
|
||||||
Must be none of entire range is passed first parameter.
|
Must be none of entire range is passed first parameter.
|
||||||
:param default: A default value.
|
:param default: A default value.
|
||||||
:param space: A parameter category. Can be 'buy' or 'sell'. This parameter is optional if
|
:param space: The parameter space. Can be 'buy', 'sell', or a string that's also a
|
||||||
parameter fieldname is prefixed with 'buy_' or 'sell_'.
|
valid python identifier.
|
||||||
|
This parameter is optional if parameter name is prefixed with 'buy_' or 'sell_'.
|
||||||
:param optimize: Include parameter in hyperopt optimizations.
|
:param optimize: Include parameter in hyperopt optimizations.
|
||||||
:param load: Load parameter value from {space}_params.
|
:param load: Load parameter value from {space}_params.
|
||||||
:param kwargs: Extra parameters to optuna.distributions.*.
|
:param kwargs: Extra parameters to optuna.distributions.*.
|
||||||
@@ -151,8 +152,9 @@ class IntParameter(NumericParameter):
|
|||||||
:param high: Upper end (inclusive) of optimization space.
|
:param high: Upper end (inclusive) of optimization space.
|
||||||
Must be none of entire range is passed first parameter.
|
Must be none of entire range is passed first parameter.
|
||||||
:param default: A default value.
|
:param default: A default value.
|
||||||
:param space: A parameter category. Can be 'buy' or 'sell'. This parameter is optional if
|
:param space: The parameter space. Can be 'buy', 'sell', or a string that's also a
|
||||||
parameter fieldname is prefixed with 'buy_' or 'sell_'.
|
valid python identifier.
|
||||||
|
This parameter is optional if parameter name is prefixed with 'buy_' or 'sell_'.
|
||||||
:param optimize: Include parameter in hyperopt optimizations.
|
:param optimize: Include parameter in hyperopt optimizations.
|
||||||
:param load: Load parameter value from {space}_params.
|
:param load: Load parameter value from {space}_params.
|
||||||
:param kwargs: Extra parameters to optuna.distributions.IntDistribution.
|
:param kwargs: Extra parameters to optuna.distributions.IntDistribution.
|
||||||
@@ -205,8 +207,9 @@ class RealParameter(NumericParameter):
|
|||||||
:param high: Upper end (inclusive) of optimization space.
|
:param high: Upper end (inclusive) of optimization space.
|
||||||
Must be none if entire range is passed first parameter.
|
Must be none if entire range is passed first parameter.
|
||||||
:param default: A default value.
|
:param default: A default value.
|
||||||
:param space: A parameter category. Can be 'buy' or 'sell'. This parameter is optional if
|
:param space: The parameter space. Can be 'buy', 'sell', or a string that's also a
|
||||||
parameter fieldname is prefixed with 'buy_' or 'sell_'.
|
valid python identifier.
|
||||||
|
This parameter is optional if parameter name is prefixed with 'buy_' or 'sell_'.
|
||||||
:param optimize: Include parameter in hyperopt optimizations.
|
:param optimize: Include parameter in hyperopt optimizations.
|
||||||
:param load: Load parameter value from {space}_params.
|
:param load: Load parameter value from {space}_params.
|
||||||
:param kwargs: Extra parameters to optuna.distributions.FloatDistribution.
|
:param kwargs: Extra parameters to optuna.distributions.FloatDistribution.
|
||||||
@@ -245,8 +248,9 @@ class DecimalParameter(NumericParameter):
|
|||||||
Must be none if entire range is passed first parameter.
|
Must be none if entire range is passed first parameter.
|
||||||
:param default: A default value.
|
:param default: A default value.
|
||||||
:param decimals: A number of decimals after floating point to be included in testing.
|
:param decimals: A number of decimals after floating point to be included in testing.
|
||||||
:param space: A parameter category. Can be 'buy' or 'sell'. This parameter is optional if
|
:param space: The parameter space. Can be 'buy', 'sell', or a string that's also a
|
||||||
parameter fieldname is prefixed with 'buy_' or 'sell_'.
|
valid python identifier.
|
||||||
|
This parameter is optional if parameter name is prefixed with 'buy_' or 'sell_'.
|
||||||
:param optimize: Include parameter in hyperopt optimizations.
|
:param optimize: Include parameter in hyperopt optimizations.
|
||||||
:param load: Load parameter value from {space}_params.
|
:param load: Load parameter value from {space}_params.
|
||||||
:param kwargs: Extra parameters to optuna's NumericParameter.
|
:param kwargs: Extra parameters to optuna's NumericParameter.
|
||||||
@@ -310,10 +314,10 @@ class CategoricalParameter(BaseParameter):
|
|||||||
Initialize hyperopt-optimizable parameter.
|
Initialize hyperopt-optimizable parameter.
|
||||||
:param categories: Optimization space, [a, b, ...].
|
:param categories: Optimization space, [a, b, ...].
|
||||||
:param default: A default value. If not specified, first item from specified space will be
|
:param default: A default value. If not specified, first item from specified space will be
|
||||||
used.
|
used.
|
||||||
:param space: A parameter category. Can be 'buy' or 'sell'. This parameter is optional if
|
:param space: The parameter space. Can be 'buy', 'sell', or a string that's also a
|
||||||
parameter field
|
valid python identifier.
|
||||||
name is prefixed with 'buy_' or 'sell_'.
|
This parameter is optional if parameter name is prefixed with 'buy_' or 'sell_'.
|
||||||
:param optimize: Include parameter in hyperopt optimizations.
|
:param optimize: Include parameter in hyperopt optimizations.
|
||||||
:param load: Load parameter value from {space}_params.
|
:param load: Load parameter value from {space}_params.
|
||||||
:param kwargs: Compatibility. Optuna's CategoricalDistribution does not
|
:param kwargs: Compatibility. Optuna's CategoricalDistribution does not
|
||||||
@@ -361,10 +365,10 @@ class BooleanParameter(CategoricalParameter):
|
|||||||
Initialize hyperopt-optimizable Boolean Parameter.
|
Initialize hyperopt-optimizable Boolean Parameter.
|
||||||
It's a shortcut to `CategoricalParameter([True, False])`.
|
It's a shortcut to `CategoricalParameter([True, False])`.
|
||||||
:param default: A default value. If not specified, first item from specified space will be
|
:param default: A default value. If not specified, first item from specified space will be
|
||||||
used.
|
used.
|
||||||
:param space: A parameter category. Can be 'buy' or 'sell'. This parameter is optional if
|
:param space: The parameter space. Can be 'buy', 'sell', or a string that's also a
|
||||||
parameter field
|
valid python identifier.
|
||||||
name is prefixed with 'buy_' or 'sell_'.
|
This parameter is optional if parameter name is prefixed with 'buy_' or 'sell_'.
|
||||||
:param optimize: Include parameter in hyperopt optimizations.
|
:param optimize: Include parameter in hyperopt optimizations.
|
||||||
:param load: Load parameter value from {space}_params.
|
:param load: Load parameter value from {space}_params.
|
||||||
:param kwargs: Extra parameters to optuna.distributions.CategoricalDistribution.
|
:param kwargs: Extra parameters to optuna.distributions.CategoricalDistribution.
|
||||||
|
|||||||
@@ -34,7 +34,7 @@
|
|||||||
"bids_to_ask_delta": 1
|
"bids_to_ask_delta": 1
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"exit_pricing":{
|
"exit_pricing": {
|
||||||
"price_side": "same",
|
"price_side": "same",
|
||||||
"use_order_book": true,
|
"use_order_book": true,
|
||||||
"order_book_top": 1
|
"order_book_top": 1
|
||||||
|
|||||||
@@ -96,7 +96,9 @@ class SampleStrategy(IStrategy):
|
|||||||
buy_rsi = IntParameter(low=1, high=50, default=30, space="buy", optimize=True, load=True)
|
buy_rsi = IntParameter(low=1, high=50, default=30, space="buy", optimize=True, load=True)
|
||||||
sell_rsi = IntParameter(low=50, high=100, default=70, space="sell", optimize=True, load=True)
|
sell_rsi = IntParameter(low=50, high=100, default=70, space="sell", optimize=True, load=True)
|
||||||
short_rsi = IntParameter(low=51, high=100, default=70, space="sell", optimize=True, load=True)
|
short_rsi = IntParameter(low=51, high=100, default=70, space="sell", optimize=True, load=True)
|
||||||
exit_short_rsi = IntParameter(low=1, high=50, default=30, space="buy", optimize=True, load=True)
|
exit_short_rsi = IntParameter(
|
||||||
|
low=1, high=50, default=30, space="exit", optimize=True, load=True
|
||||||
|
)
|
||||||
|
|
||||||
# Number of candles the strategy requires before producing valid signals
|
# Number of candles the strategy requires before producing valid signals
|
||||||
startup_candle_count: int = 200
|
startup_candle_count: int = 200
|
||||||
|
|||||||
@@ -18,9 +18,11 @@ from freqtrade.util.formatters import (
|
|||||||
fmt_coin,
|
fmt_coin,
|
||||||
fmt_coin2,
|
fmt_coin2,
|
||||||
format_duration,
|
format_duration,
|
||||||
|
format_pct,
|
||||||
round_value,
|
round_value,
|
||||||
)
|
)
|
||||||
from freqtrade.util.ft_precise import FtPrecise
|
from freqtrade.util.ft_precise import FtPrecise
|
||||||
|
from freqtrade.util.ft_ttlcache import FtTTLCache
|
||||||
from freqtrade.util.measure_time import MeasureTime
|
from freqtrade.util.measure_time import MeasureTime
|
||||||
from freqtrade.util.periodic_cache import PeriodicCache
|
from freqtrade.util.periodic_cache import PeriodicCache
|
||||||
from freqtrade.util.progress_tracker import ( # noqa F401
|
from freqtrade.util.progress_tracker import ( # noqa F401
|
||||||
@@ -44,6 +46,7 @@ __all__ = [
|
|||||||
"format_date",
|
"format_date",
|
||||||
"format_ms_time",
|
"format_ms_time",
|
||||||
"format_ms_time_det",
|
"format_ms_time_det",
|
||||||
|
"format_pct",
|
||||||
"get_dry_run_wallet",
|
"get_dry_run_wallet",
|
||||||
"FtPrecise",
|
"FtPrecise",
|
||||||
"PeriodicCache",
|
"PeriodicCache",
|
||||||
@@ -57,4 +60,5 @@ __all__ = [
|
|||||||
"print_rich_table",
|
"print_rich_table",
|
||||||
"print_df_rich_table",
|
"print_df_rich_table",
|
||||||
"CustomProgress",
|
"CustomProgress",
|
||||||
|
"FtTTLCache",
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
from datetime import timedelta
|
from datetime import timedelta
|
||||||
|
|
||||||
|
from numpy import isnan
|
||||||
|
|
||||||
from freqtrade.constants import DECIMAL_PER_COIN_FALLBACK, DECIMALS_PER_COIN
|
from freqtrade.constants import DECIMAL_PER_COIN_FALLBACK, DECIMALS_PER_COIN
|
||||||
|
|
||||||
|
|
||||||
@@ -29,6 +31,8 @@ def round_value(value: float, decimals: int, keep_trailing_zeros=False) -> str:
|
|||||||
:param keep_trailing_zeros: Keep trailing zeros "222.200" vs. "222.2"
|
:param keep_trailing_zeros: Keep trailing zeros "222.200" vs. "222.2"
|
||||||
:return: Rounded value as string
|
:return: Rounded value as string
|
||||||
"""
|
"""
|
||||||
|
if isnan(value):
|
||||||
|
return "N/A"
|
||||||
val = f"{value:.{decimals}f}"
|
val = f"{value:.{decimals}f}"
|
||||||
if not keep_trailing_zeros:
|
if not keep_trailing_zeros:
|
||||||
val = strip_trailing_zeros(val)
|
val = strip_trailing_zeros(val)
|
||||||
@@ -80,3 +84,15 @@ def format_duration(td: timedelta) -> str:
|
|||||||
h, r = divmod(td.seconds, 3600)
|
h, r = divmod(td.seconds, 3600)
|
||||||
m, _ = divmod(r, 60)
|
m, _ = divmod(r, 60)
|
||||||
return f"{d}d {h:02d}:{m:02d}"
|
return f"{d}d {h:02d}:{m:02d}"
|
||||||
|
|
||||||
|
|
||||||
|
def format_pct(value: float | None) -> str:
|
||||||
|
"""
|
||||||
|
Format a float value as percentage string with 2 decimals
|
||||||
|
None and NaN values are formatted as "N/A"
|
||||||
|
:param value: Float value to format
|
||||||
|
:return: Formatted percentage string
|
||||||
|
"""
|
||||||
|
if value is None or isnan(value):
|
||||||
|
return "N/A"
|
||||||
|
return f"{value:.2%}"
|
||||||
|
|||||||
12
freqtrade/util/ft_ttlcache.py
Normal file
12
freqtrade/util/ft_ttlcache.py
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
import time
|
||||||
|
|
||||||
|
from cachetools import TTLCache
|
||||||
|
|
||||||
|
|
||||||
|
class FtTTLCache(TTLCache):
|
||||||
|
"""
|
||||||
|
A TTLCache with a different default timer to allow for easier mocking in tests.
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, maxsize, ttl, timer=time.time, getsizeof=None):
|
||||||
|
super().__init__(maxsize=maxsize, ttl=ttl, timer=timer, getsizeof=getsizeof)
|
||||||
@@ -2,7 +2,7 @@ import logging
|
|||||||
import time
|
import time
|
||||||
from collections.abc import Callable
|
from collections.abc import Callable
|
||||||
|
|
||||||
from cachetools import TTLCache
|
from freqtrade.util import FtTTLCache
|
||||||
|
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
@@ -27,7 +27,7 @@ class MeasureTime:
|
|||||||
"""
|
"""
|
||||||
self._callback = callback
|
self._callback = callback
|
||||||
self._time_limit = time_limit
|
self._time_limit = time_limit
|
||||||
self.__cache: TTLCache = TTLCache(maxsize=1, ttl=ttl)
|
self.__cache: FtTTLCache = FtTTLCache(maxsize=1, ttl=ttl)
|
||||||
|
|
||||||
def __enter__(self):
|
def __enter__(self):
|
||||||
self._start = time.time()
|
self._start = time.time()
|
||||||
|
|||||||
@@ -1,12 +1,23 @@
|
|||||||
from freqtrade.exchange import Exchange
|
from freqtrade.exchange import Exchange
|
||||||
from freqtrade.util.migrations.binance_mig import migrate_binance_futures_data
|
from freqtrade.util.migrations.binance_mig import (
|
||||||
|
migrate_binance_futures_data,
|
||||||
|
migrate_binance_futures_names,
|
||||||
|
)
|
||||||
from freqtrade.util.migrations.funding_rate_mig import migrate_funding_fee_timeframe
|
from freqtrade.util.migrations.funding_rate_mig import migrate_funding_fee_timeframe
|
||||||
|
|
||||||
|
|
||||||
def migrate_data(config, exchange: Exchange | None = None):
|
def migrate_data(config, exchange: Exchange | None = None) -> None:
|
||||||
"""
|
"""
|
||||||
Migrate persisted data from old formats to new formats
|
Migrate persisted data from old formats to new formats
|
||||||
"""
|
"""
|
||||||
migrate_binance_futures_data(config)
|
migrate_binance_futures_data(config)
|
||||||
|
|
||||||
migrate_funding_fee_timeframe(config, exchange)
|
migrate_funding_fee_timeframe(config, exchange)
|
||||||
|
|
||||||
|
|
||||||
|
def migrate_live_content(config, exchange: Exchange | None = None) -> None:
|
||||||
|
"""
|
||||||
|
Migrate database content from old formats to new formats
|
||||||
|
Used for dry/live mode.
|
||||||
|
"""
|
||||||
|
migrate_binance_futures_names(config)
|
||||||
|
|||||||
@@ -14,6 +14,10 @@ logger = logging.getLogger(__name__)
|
|||||||
|
|
||||||
|
|
||||||
def migrate_binance_futures_names(config: Config):
|
def migrate_binance_futures_names(config: Config):
|
||||||
|
"""
|
||||||
|
Migrate binance futures names in both database and data files.
|
||||||
|
This is needed because ccxt naming changed from "BTC/USDT" to "BTC/USDT:USDT"
|
||||||
|
"""
|
||||||
if not (
|
if not (
|
||||||
config.get("trading_mode", TradingMode.SPOT) == TradingMode.FUTURES
|
config.get("trading_mode", TradingMode.SPOT) == TradingMode.FUTURES
|
||||||
and config["exchange"]["name"] == "binance"
|
and config["exchange"]["name"] == "binance"
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
from freqtrade_client.ft_rest_client import FtRestClient
|
from freqtrade_client.ft_rest_client import FtRestClient
|
||||||
|
|
||||||
|
|
||||||
__version__ = "2025.10"
|
__version__ = "2025.11-dev"
|
||||||
|
|
||||||
if "dev" in __version__:
|
if "dev" in __version__:
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|||||||
@@ -82,7 +82,7 @@ def print_commands():
|
|||||||
|
|
||||||
|
|
||||||
def main_exec(parsed: dict[str, Any]):
|
def main_exec(parsed: dict[str, Any]):
|
||||||
if parsed.get("show"):
|
if parsed.get("show") or parsed.get("command") in ("show", "help"):
|
||||||
print_commands()
|
print_commands()
|
||||||
sys.exit()
|
sys.exit()
|
||||||
|
|
||||||
|
|||||||
@@ -183,6 +183,7 @@ skip_glob = ["**/.env*", "**/env/*", "**/.venv/*", "**/docs/*", "**/user_data/*"
|
|||||||
known_first_party = ["freqtrade_client"]
|
known_first_party = ["freqtrade_client"]
|
||||||
|
|
||||||
[tool.pytest.ini_options]
|
[tool.pytest.ini_options]
|
||||||
|
# TODO: should be migrated to [tool.pytest] as support for this was added in 9.0
|
||||||
log_format = "%(asctime)s %(levelname)s %(message)s"
|
log_format = "%(asctime)s %(levelname)s %(message)s"
|
||||||
log_date_format = "%Y-%m-%d %H:%M:%S"
|
log_date_format = "%Y-%m-%d %H:%M:%S"
|
||||||
|
|
||||||
|
|||||||
@@ -6,11 +6,11 @@
|
|||||||
-r requirements-freqai-rl.txt
|
-r requirements-freqai-rl.txt
|
||||||
-r docs/requirements-docs.txt
|
-r docs/requirements-docs.txt
|
||||||
|
|
||||||
ruff==0.14.1
|
ruff==0.14.5
|
||||||
mypy==1.18.2
|
mypy==1.18.2
|
||||||
pre-commit==4.3.0
|
pre-commit==4.4.0
|
||||||
pytest==8.4.2
|
pytest==9.0.1
|
||||||
pytest-asyncio==1.2.0
|
pytest-asyncio==1.3.0
|
||||||
pytest-cov==7.0.0
|
pytest-cov==7.0.0
|
||||||
pytest-mock==3.15.1
|
pytest-mock==3.15.1
|
||||||
pytest-random-order==1.2.0
|
pytest-random-order==1.2.0
|
||||||
@@ -18,15 +18,15 @@ pytest-timeout==2.4.0
|
|||||||
pytest-xdist==3.8.0
|
pytest-xdist==3.8.0
|
||||||
isort==7.0.0
|
isort==7.0.0
|
||||||
# For datetime mocking
|
# For datetime mocking
|
||||||
time-machine==2.19.0
|
time-machine==3.0.0
|
||||||
|
|
||||||
# Convert jupyter notebooks to markdown documents
|
# Convert jupyter notebooks to markdown documents
|
||||||
nbconvert==7.16.6
|
nbconvert==7.16.6
|
||||||
|
|
||||||
# mypy types
|
# mypy types
|
||||||
scipy-stubs==1.16.2.4 # keep in sync with `scipy` in `requirements-hyperopt.txt`
|
scipy-stubs==1.16.3.0 # keep in sync with `scipy` in `requirements-hyperopt.txt`
|
||||||
types-cachetools==6.2.0.20251022
|
types-cachetools==6.2.0.20251022
|
||||||
types-filelock==3.2.7
|
types-filelock==3.2.7
|
||||||
types-requests==2.32.4.20250913
|
types-requests==2.32.4.20250913
|
||||||
types-tabulate==0.9.0.20241207
|
types-tabulate==0.9.0.20241207
|
||||||
types-python-dateutil==2.9.0.20251008
|
types-python-dateutil==2.9.0.20251115
|
||||||
|
|||||||
@@ -2,8 +2,8 @@
|
|||||||
-r requirements-freqai.txt
|
-r requirements-freqai.txt
|
||||||
|
|
||||||
# Required for freqai-rl
|
# Required for freqai-rl
|
||||||
torch==2.9.0; sys_platform != 'darwin' or platform_machine != 'x86_64'
|
torch==2.9.1; sys_platform != 'darwin' or platform_machine != 'x86_64'
|
||||||
gymnasium==1.2.1
|
gymnasium==1.2.2
|
||||||
# SB3 >=2.5.0 depends on torch 2.3.0 - which implies it dropped support x86 macos
|
# SB3 >=2.5.0 depends on torch 2.3.0 - which implies it dropped support x86 macos
|
||||||
stable_baselines3==2.7.0; sys_platform != 'darwin' or platform_machine != 'x86_64'
|
stable_baselines3==2.7.0; sys_platform != 'darwin' or platform_machine != 'x86_64'
|
||||||
sb3_contrib>=2.2.1; sys_platform != 'darwin' or platform_machine != 'x86_64'
|
sb3_contrib>=2.2.1; sys_platform != 'darwin' or platform_machine != 'x86_64'
|
||||||
|
|||||||
@@ -2,8 +2,8 @@
|
|||||||
-r requirements.txt
|
-r requirements.txt
|
||||||
|
|
||||||
# Required for hyperopt
|
# Required for hyperopt
|
||||||
scipy==1.16.2
|
scipy==1.16.3
|
||||||
scikit-learn==1.7.2
|
scikit-learn==1.7.2
|
||||||
filelock==3.20.0
|
filelock==3.20.0
|
||||||
optuna==4.5.0
|
optuna==4.6.0
|
||||||
cmaes==0.12.0
|
cmaes==0.12.0
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
# Include all requirements to run the bot.
|
# Include all requirements to run the bot.
|
||||||
-r requirements.txt
|
-r requirements.txt
|
||||||
|
|
||||||
plotly==6.3.1
|
plotly==6.5.0
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
numpy==2.3.4
|
numpy==2.3.5
|
||||||
pandas==2.3.3
|
pandas==2.3.3
|
||||||
bottleneck==1.6.0
|
bottleneck==1.6.0
|
||||||
numexpr==2.14.1
|
numexpr==2.14.1
|
||||||
@@ -7,43 +7,42 @@ ft-pandas-ta==0.3.16
|
|||||||
ta-lib==0.6.8
|
ta-lib==0.6.8
|
||||||
technical==1.5.3
|
technical==1.5.3
|
||||||
|
|
||||||
ccxt==4.5.12
|
ccxt==4.5.20
|
||||||
cryptography==46.0.3
|
cryptography==46.0.3
|
||||||
aiohttp==3.13.1
|
aiohttp==3.13.2
|
||||||
SQLAlchemy==2.0.44
|
SQLAlchemy==2.0.44
|
||||||
python-telegram-bot==22.5
|
python-telegram-bot==22.5
|
||||||
# can't be hard-pinned due to telegram-bot pinning httpx with ~
|
# can't be hard-pinned due to telegram-bot pinning httpx with ~
|
||||||
httpx>=0.24.1
|
httpx>=0.24.1
|
||||||
humanize==4.14.0
|
humanize==4.14.0
|
||||||
cachetools==6.2.1
|
cachetools==6.2.2
|
||||||
requests==2.32.5
|
requests==2.32.5
|
||||||
urllib3==2.5.0
|
urllib3==2.5.0
|
||||||
certifi==2025.10.5
|
certifi==2025.11.12
|
||||||
jsonschema==4.25.1
|
jsonschema==4.25.1
|
||||||
tabulate==0.9.0
|
tabulate==0.9.0
|
||||||
pycoingecko==3.2.0
|
pycoingecko==3.2.0
|
||||||
jinja2==3.1.6
|
jinja2==3.1.6
|
||||||
joblib==1.5.2
|
joblib==1.5.2
|
||||||
rich==14.2.0
|
rich==14.2.0
|
||||||
pyarrow==21.0.0; platform_machine != 'armv7l' and platform_machine != "aarch64"
|
pyarrow==22.0.0; platform_machine != 'armv7l'
|
||||||
# TODO: downgrade for aarch64 until https://github.com/apache/arrow/issues/47229 is resolved
|
|
||||||
pyarrow==20.0.0; platform_machine == "aarch64"
|
|
||||||
|
|
||||||
# Load ticker files 30% faster
|
# Load ticker files 30% faster
|
||||||
python-rapidjson==1.22
|
python-rapidjson==1.22
|
||||||
# Properly format api responses
|
# Properly format api responses
|
||||||
orjson==3.11.3
|
orjson==3.11.4
|
||||||
|
|
||||||
# Notify systemd
|
# Notify systemd
|
||||||
sdnotify==0.3.2
|
sdnotify==0.3.2
|
||||||
|
|
||||||
# API Server
|
# API Server
|
||||||
fastapi==0.119.1
|
fastapi==0.121.3
|
||||||
pydantic==2.12.3
|
pydantic==2.12.4
|
||||||
uvicorn==0.38.0
|
uvicorn==0.38.0
|
||||||
pyjwt==2.10.1
|
pyjwt==2.10.1
|
||||||
aiofiles==25.1.0
|
aiofiles==25.1.0
|
||||||
psutil==7.1.1
|
psutil==7.1.3
|
||||||
|
|
||||||
# Building config files interactively
|
# Building config files interactively
|
||||||
questionary==2.1.1
|
questionary==2.1.1
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user