Skip to content

Commit c21ce5e

Browse files
committed
Merge branch 'develop' into maint/python_3.14
2 parents 025707d + 9baa6ee commit c21ce5e

36 files changed

+1728
-2000
lines changed

.github/dependabot.yml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,3 +56,8 @@ updates:
5656
interval: "weekly"
5757
open-pull-requests-limit: 10
5858
target-branch: develop
59+
groups:
60+
actions:
61+
patterns:
62+
# Combine updates for github provided actions
63+
- "actions/*"

.github/workflows/binance-lev-tier-update.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ jobs:
3434
run: python build_helpers/binance_update_lev_tiers.py
3535

3636

37-
- uses: peter-evans/create-pull-request@84ae59a2cdc2258d6fa0732dd66352dddae2a412 # v7.0.9
37+
- uses: peter-evans/create-pull-request@98357b18bf14b5342f975ff684046ec3b2a07725 # v8.0.0
3838
with:
3939
token: ${{ secrets.REPO_SCOPED_TOKEN }}
4040
add-paths: freqtrade/exchange/binance_leverage_tiers.json

.github/workflows/ci.yml

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ jobs:
3838
python-version: ${{ matrix.python-version }}
3939

4040
- name: Install uv
41-
uses: astral-sh/setup-uv@1e862dfacbd1d6d858c55d9b792c756523627244 # v7.1.4
41+
uses: astral-sh/setup-uv@681c641aba71e4a1c380be3ab5e12ad51f415867 # v7.1.6
4242
with:
4343
activate-environment: true
4444
enable-cache: true
@@ -74,7 +74,7 @@ jobs:
7474
run: |
7575
pytest --random-order --cov=freqtrade --cov=freqtrade_client --cov-config=.coveragerc
7676
77-
- uses: codecov/codecov-action@5a1091511ad55cbe89839c7260b706298ca349f7 # v5.5.1
77+
- uses: codecov/codecov-action@671740ac38dd9b0130fbe1cec585b89eea48d3de # v5.5.2
7878
if: (runner.os == 'Linux' && matrix.python-version == '3.12' && matrix.os == 'ubuntu-24.04')
7979
with:
8080
fail_ci_if_error: true
@@ -250,7 +250,7 @@ jobs:
250250
python-version: "3.12"
251251

252252
- name: Install uv
253-
uses: astral-sh/setup-uv@1e862dfacbd1d6d858c55d9b792c756523627244 # v7.1.4
253+
uses: astral-sh/setup-uv@681c641aba71e4a1c380be3ab5e12ad51f415867 # v7.1.6
254254
with:
255255
activate-environment: true
256256
enable-cache: true
@@ -335,7 +335,7 @@ jobs:
335335
python -m build --sdist --wheel
336336
337337
- name: Upload artifacts 📦
338-
uses: actions/upload-artifact@v5
338+
uses: actions/upload-artifact@v6
339339
with:
340340
name: freqtrade-build
341341
path: |
@@ -348,7 +348,7 @@ jobs:
348348
python -m build --sdist --wheel ft_client
349349
350350
- name: Upload artifacts 📦
351-
uses: actions/upload-artifact@v5
351+
uses: actions/upload-artifact@v6
352352
with:
353353
name: freqtrade-client-build
354354
path: |
@@ -372,7 +372,7 @@ jobs:
372372
persist-credentials: false
373373

374374
- name: Download artifact 📦
375-
uses: actions/download-artifact@v6
375+
uses: actions/download-artifact@v7
376376
with:
377377
pattern: freqtrade*-build
378378
path: dist
@@ -401,7 +401,7 @@ jobs:
401401
persist-credentials: false
402402

403403
- name: Download artifact 📦
404-
uses: actions/download-artifact@v6
404+
uses: actions/download-artifact@v7
405405
with:
406406
pattern: freqtrade*-build
407407
path: dist

.github/workflows/docker-build.yml

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,17 @@ jobs:
3737
with:
3838
persist-credentials: false
3939

40+
- name: Visualize disk usage before build
41+
run: df -h
42+
43+
- name: Cleanup some disk space
44+
run: |
45+
docker system prune -a --force || true
46+
docker builder prune -af || true
47+
48+
- name: Visualize disk usage after cleanup
49+
run: df -h
50+
4051
- name: Set docker tag names
4152
id: tags
4253
uses: ./.github/actions/docker-tags
@@ -142,6 +153,9 @@ jobs:
142153
run: |
143154
docker images
144155
156+
- name: Visualize disk usage after build
157+
run: df -h
158+
145159
deploy-arm:
146160
name: "Deploy Docker ARM64"
147161
permissions:

.github/workflows/pre-commit-update.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ jobs:
2828
- name: Run auto-update
2929
run: pre-commit autoupdate
3030

31-
- uses: peter-evans/create-pull-request@84ae59a2cdc2258d6fa0732dd66352dddae2a412 # v7.0.9
31+
- uses: peter-evans/create-pull-request@98357b18bf14b5342f975ff684046ec3b2a07725 # v8.0.0
3232
with:
3333
token: ${{ secrets.REPO_SCOPED_TOKEN }}
3434
add-paths: .pre-commit-config.yaml

.pre-commit-config.yaml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,8 @@ repos:
3131
- types-requests==2.32.4.20250913
3232
- types-tabulate==0.9.0.20241207
3333
- types-python-dateutil==2.9.0.20251115
34-
- scipy-stubs==1.16.3.2
35-
- SQLAlchemy==2.0.44
34+
- scipy-stubs==1.16.3.3
35+
- SQLAlchemy==2.0.45
3636
# stages: [push]
3737

3838
- repo: https://github.com/pycqa/isort
@@ -44,7 +44,7 @@ repos:
4444

4545
- repo: https://github.com/charliermarsh/ruff-pre-commit
4646
# Ruff version.
47-
rev: 'v0.14.9'
47+
rev: 'v0.14.10'
4848
hooks:
4949
- id: ruff
5050
- id: ruff-format
@@ -83,6 +83,6 @@ repos:
8383

8484
# Ensure github actions remain safe
8585
- repo: https://github.com/woodruffw/zizmor-pre-commit
86-
rev: v1.18.0
86+
rev: v1.19.0
8787
hooks:
8888
- id: zizmor

docs/deprecated.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,3 +135,13 @@ you can verify this with `freqtrade list-data --exchange <yourexchange> --show`.
135135
Additional arguments to the above commands may be necessary, like configuration files or explicit user_data if they deviate from the default.
136136
137137
**Hyperliquid** is a special case now - which will no longer require 1h mark data - but will use regular candles instead (this data never existed and is identical to 1h futures candles). As we don't support download-data for hyperliquid (they don't provide historic data) - there won't be actions necessary for hyperliquid users.
138+
139+
## Catboost models in freqAI
140+
141+
CatBoost models have been removed with version 2025.12 and are no longer actively supported.
142+
If you have existing bots using CatBoost models, you can still use them in your custom models by copy/pasting them from the git history (as linked below) and installing the Catboost library manually.
143+
We do however recommend switching to other supported model libraries like LightGBM or XGBoost for better support and future compatibility.
144+
145+
* [CatboostRegressor](https://github.com/freqtrade/freqtrade/blob/c6f3b0081927e161a16b116cc47fb663f7831d30/freqtrade/freqai/prediction_models/CatboostRegressor.py)
146+
* [CatboostClassifier](https://github.com/freqtrade/freqtrade/blob/c6f3b0081927e161a16b116cc47fb663f7831d30/freqtrade/freqai/prediction_models/CatboostClassifier.py)
147+
* [CatboostClassifierMultiTarget](https://github.com/freqtrade/freqtrade/blob/c6f3b0081927e161a16b116cc47fb663f7831d30/freqtrade/freqai/prediction_models/CatboostClassifierMultiTarget.py)

docs/freqai-configuration.md

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -200,15 +200,15 @@ If this value is set, FreqAI will initially use the predictions from the trainin
200200

201201
## Using different prediction models
202202

203-
FreqAI has multiple example prediction model libraries that are ready to be used as is via the flag `--freqaimodel`. These libraries include `CatBoost`, `LightGBM`, and `XGBoost` regression, classification, and multi-target models, and can be found in `freqai/prediction_models/`.
203+
FreqAI has multiple example prediction model libraries that are ready to be used as is via the flag `--freqaimodel`. These libraries include `LightGBM`, and `XGBoost` regression, classification, and multi-target models, and can be found in `freqai/prediction_models/`.
204204

205205
Regression and classification models differ in what targets they predict - a regression model will predict a target of continuous values, for example what price BTC will be at tomorrow, whilst a classifier will predict a target of discrete values, for example if the price of BTC will go up tomorrow or not. This means that you have to specify your targets differently depending on which model type you are using (see details [below](#setting-model-targets)).
206206

207207
All of the aforementioned model libraries implement gradient boosted decision tree algorithms. They all work on the principle of ensemble learning, where predictions from multiple simple learners are combined to get a final prediction that is more stable and generalized. The simple learners in this case are decision trees. Gradient boosting refers to the method of learning, where each simple learner is built in sequence - the subsequent learner is used to improve on the error from the previous learner. If you want to learn more about the different model libraries you can find the information in their respective docs:
208208

209-
* CatBoost: https://catboost.ai/en/docs/
210-
* LightGBM: https://lightgbm.readthedocs.io/en/v3.3.2/#
211-
* XGBoost: https://xgboost.readthedocs.io/en/stable/#
209+
* LightGBM: <https://lightgbm.readthedocs.io/en/v3.3.2/#>
210+
* XGBoost: <https://xgboost.readthedocs.io/en/stable/#>
211+
* CatBoost: <https://catboost.ai/en/docs/> (No longer actively supported since 2025.12)
212212

213213
There are also numerous online articles describing and comparing the algorithms. Some relatively lightweight examples would be [CatBoost vs. LightGBM vs. XGBoost — Which is the best algorithm?](https://towardsdatascience.com/catboost-vs-lightgbm-vs-xgboost-c80f40662924#:~:text=In%20CatBoost%2C%20symmetric%20trees%2C%20or,the%20same%20depth%20can%20differ.) and [XGBoost, LightGBM or CatBoost — which boosting algorithm should I use?](https://medium.com/riskified-technology/xgboost-lightgbm-or-catboost-which-boosting-algorithm-should-i-use-e7fda7bb36bc). Keep in mind that the performance of each model is highly dependent on the application and so any reported metrics might not be true for your particular use of the model.
214214

@@ -219,7 +219,7 @@ Make sure to use unique names to avoid overriding built-in models.
219219

220220
#### Regressors
221221

222-
If you are using a regressor, you need to specify a target that has continuous values. FreqAI includes a variety of regressors, such as the `CatboostRegressor`via the flag `--freqaimodel CatboostRegressor`. An example of how you could set a regression target for predicting the price 100 candles into the future would be
222+
If you are using a regressor, you need to specify a target that has continuous values. FreqAI includes a variety of regressors, such as the `LightGBMRegressor`via the flag `--freqaimodel LightGBMRegressor`. An example of how you could set a regression target for predicting the price 100 candles into the future would be
223223

224224
```python
225225
df['&s-close_price'] = df['close'].shift(-100)
@@ -229,7 +229,7 @@ If you want to predict multiple targets, you need to define multiple labels usin
229229

230230
#### Classifiers
231231

232-
If you are using a classifier, you need to specify a target that has discrete values. FreqAI includes a variety of classifiers, such as the `CatboostClassifier` via the flag `--freqaimodel CatboostClassifier`. If you elects to use a classifier, the classes need to be set using strings. For example, if you want to predict if the price 100 candles into the future goes up or down you would set
232+
If you are using a classifier, you need to specify a target that has discrete values. FreqAI includes a variety of classifiers, such as the `LightGBMClassifier` via the flag `--freqaimodel LightGBMClassifier`. If you elects to use a classifier, the classes need to be set using strings. For example, if you want to predict if the price 100 candles into the future goes up or down you would set
233233

234234
```python
235235
df['&s-up_or_down'] = np.where( df["close"].shift(-100) > df["close"], 'up', 'down')

docs/freqai-parameter-table.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,6 @@ Mandatory parameters are marked as **Required** and have to be set in one of the
107107
| `n_steps` | An alternative way of setting `n_epochs` - the number of training iterations to run. Iteration here refer to the number of times we call `optimizer.step()`. Ignored if `n_epochs` is set. A simplified version of the function: <br><br> n_epochs = n_steps / (n_obs / batch_size) <br><br> The motivation here is that `n_steps` is easier to optimize and keep stable across different n_obs - the number of data points. <br> <br> **Datatype:** int. optional. <br> Default: `None`.
108108
| `batch_size` | The size of the batches to use during training. <br><br> **Datatype:** int. <br> Default: `64`.
109109

110-
111110
### Additional parameters
112111

113112
| Parameter | Description |
@@ -116,3 +115,4 @@ Mandatory parameters are marked as **Required** and have to be set in one of the
116115
| `freqai.keras` | If the selected model makes use of Keras (typical for TensorFlow-based prediction models), this flag needs to be activated so that the model save/loading follows Keras standards. <br> **Datatype:** Boolean. <br> Default: `False`.
117116
| `freqai.conv_width` | The width of a neural network input tensor. This replaces the need for shifting candles (`include_shifted_candles`) by feeding in historical data points as the second dimension of the tensor. Technically, this parameter can also be used for regressors, but it only adds computational overhead and does not change the model training/prediction. <br> **Datatype:** Integer. <br> Default: `2`.
118117
| `freqai.reduce_df_footprint` | Recast all numeric columns to float32/int32, with the objective of reducing ram/disk usage and decreasing train/inference timing. This parameter is set in the main level of the Freqtrade configuration file (not inside FreqAI). <br> **Datatype:** Boolean. <br> Default: `False`.
118+
| `freqai.override_exchange_check` | Override the exchange check to force FreqAI to use exchanges that may not have enough historic data. Turn this to True if you know your FreqAI model and strategy do not require historical data. <br> **Datatype:** Boolean. <br> Default: `False`.

docs/requirements-docs.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,6 @@ markdown==3.10
22
mkdocs==1.6.1
33
mkdocs-material==9.7.0
44
mdx_truly_sane_lists==1.3
5-
pymdown-extensions==10.18
5+
pymdown-extensions==10.19.1
66
jinja2==3.1.6
77
mike==2.1.3

0 commit comments

Comments
 (0)