Half Coffee

Freqtrade 量化交易

2025-02-05

前言

大概 7 月份的时候,一个朋友推荐了两个量化交易的软件,一个是开源的 Freqtrade,另一个是商业的 gunbot。本文记录下开源这个的使用。

安装

项目地址:https://github.com/freqtrade/freqtrade

本文使用 Docker 版本安装,非常简单:https://www.freqtrade.io/en/stable/docker_quickstart/

初始化步骤:

mkdir ft_userdata
cd ft_userdata/
# Download the docker-compose file from the repository
curl https://raw.githubusercontent.com/freqtrade/freqtrade/stable/docker-compose.yml -o docker-compose.yml

# Pull the freqtrade image
docker compose pull

# Create user directory structure
docker compose run --rm freqtrade create-userdir --userdir user_data

# Create configuration - Requires answering interactive questions
docker compose run --rm freqtrade new-config --config user_data/config.json

运行最后一条命令时,会以向导的形式让用户填写配置,根据实际情况配置即可:

[root@ ft_userdata]# docker compose run --rm freqtrade new-config --config user_data/config.json
2025-02-05 13:40:53,682 - freqtrade - INFO - freqtrade 2025.1
2025-02-05 13:40:54,057 - numexpr.utils - INFO - NumExpr defaulting to 6 threads.
? Do you want to enable Dry-run (simulated trades)? Yes
? Please insert your stake currency: USDT
? Please insert your stake amount (Number or 'unlimited'): unlimited
? Please insert max_open_trades (Integer or -1 for unlimited open trades): 3
? Time Have the strategy define timeframe.
? Please insert your display Currency for reporting (leave empty to disable FIAT conversion): USD
? Select exchange binance
? Do you want to trade Perpetual Swaps (perpetual futures)? No
? Do you want to enable Telegram? No
? Do you want to enable the Rest API (includes FreqUI)? No
2025-02-05 13:41:37,028 - freqtrade.configuration.deploy_config - INFO - Writing config to `user_data/config.json`.
2025-02-05 13:41:37,028 - freqtrade.configuration.deploy_config - INFO - Please make sure to check the configuration contents and adjust settings to your needs.

之后 ft_userdata 目录下会有一系列的配置文件,我们后续只需要关心 docker-compose.yml,config.json以及 strategies/xx.py

[root@ft_userdata]# tree
.
├── docker-compose.yml
└── user_data
    ├── backtest_results
    ├── config.json
    ├── data
    │   └── binance
    ├── freqaimodels
    ├── hyperopt_results
    ├── hyperopts
    │   └── sample_hyperopt_loss.py
    ├── logs
    │   └── freqtrade.log
    ├── notebooks
    │   └── strategy_analysis_example.ipynb
    ├── plot
    └── strategies
        └── sample_strategy.py

11 directories, 6 files

修改 config.json,需要关注的参数如下:

  • dry_run:是否使用测试模式,不进行真实的交易
  • trading_mode:默认是 spot,可以改为 futures(合约)
  • exchange 下的 key 以及 secret,具体获取方式参考交易所文档
  • pair_whitelist:仅对列表中的币进行交易,此选项需要搭配 pairlists>method 为 StaticPairList 使用(具体配置看后面补充内容)
  • pair_blacklist:不对列表中的币进行交易
  • ccxt_config:为到交易所的连接配置代理(防止访问被夹)
  • pairlists:使用静态的虚拟币列表还是基于交易量来获得列表
  • telegram:telegram 对接相关配置,个人用下来还是挺好用的,会有交易消息推送,也可以远程查询获利情况
  • listen_ip_address:建议改为 0.0.0.0,方便外部访问

{
    "max_open_trades": 5,
    "stake_currency": "USDT",
    "stake_amount": "unlimited",
    "tradable_balance_ratio": 0.99,
    "fiat_display_currency": "USD",
    "dry_run": true,
    "dry_run_wallet": 100,
    "cancel_open_orders_on_exit": false,
    "trading_mode": "spot",
    "margin_mode": "isolated",
    "unfilledtimeout": {
        "entry": 10,
        "exit": 10,
        "exit_timeout_count": 0,
        "unit": "minutes"
    },
    "entry_pricing": {
        "price_side": "same",
        "use_order_book": true,
        "order_book_top": 1,
        "price_last_balance": 0.0,
        "check_depth_of_market": {
            "enabled": false,
            "bids_to_ask_delta": 1
        }
    },
    "exit_pricing":{
        "price_side": "same",
        "use_order_book": true,
        "order_book_top": 1
    },
    "exchange": {
        "name": "binance",
        "key": "XXXX",
        "secret": "XXXX",
        "pair_whitelist": [
            "DOGE/USDT",
            "BTC/USDT",
            "SOL/USDT",
            "ETH/USDT",
            "TRUMP/USDT"
        ],
        "pair_blacklist": [
            "BNB/.*"
        ],
        "ccxt_config": {
            "httpsProxy": "https://user:PASSWD@PROXYSERVER",
            "wsProxy": "https://user:PASSWD@PROXYSERVER"
          }
    },
    "pairlists": [
        {
      "method": "VolumePairList",
	    "number_assets": 20,
	    "sort_key": "quoteVolume",
	    "min_value": 0,
	    "refresh_period": 30
        }
    ],
    "telegram": {
        "enabled": true,
        "token": "1234567:xxxxxxxxxxxxxxxxxxxxxx",
        "chat_id": "34564666"
    },
    "api_server": {
        "enabled": true,
        "listen_ip_address": "0.0.0.0",
        "listen_port": 8080,
        "verbosity": "error",
        "enable_openapi": false,
        "jwt_secret_key": "xxxx",
        "ws_token": "xxxx",
        "CORS_origins": [],
        "username": "freqtrader",
        "password": "freqtrader"
    },
    "bot_name": "freqbot",
    "initial_state": "running",
    "force_entry_enable": false,
    "internals": {
        "process_throttle_secs": 5
    }
}

修改 docker-compose.yml,需要关注的参数如下:

  • environment 中的 proxy,防止访问被夹
  • strategy:指定要使用哪个交易策略(策略 python 文件需要保存在 ft_userdata/user_data/strategies 下)
cat docker-compose.yml
---
version: '3'
services:
  freqtrade:
    image: freqtradeorg/freqtrade:stable
    restart: unless-stopped
    container_name: freqtrade
    volumes:
      - "./user_data:/freqtrade/user_data"
    ports:
      - "8080:8080"
    environment:
      - HTTP_PROXY=https://user:PASSWD@PROXYSERVER
      - HTTPS_PROXY=https://user:PASSWD@PROXYSERVER
    command: >
      trade
      --logfile /freqtrade/user_data/logs/freqtrade.log
      --db-url sqlite:////freqtrade/user_data/tradesv3.sqlite
      --config /freqtrade/user_data/config.json
      --strategy KamaFama_2

最终启动:

docker compose up -d

访问服务器的 8080 端口,可以看到下列 Web 页面,可以直观地去查看交易情况:

高级配置细项

交易策略

官方有很多示例策略:https://github.com/freqtrade/freqtrade-strategies/tree/main

除此之外,看到这个网站也有策略以及策略排行:https://strat.ninja/ranking.php

下载后将其保存在 ft_userdata/user_data/strategies 下,然后修改 docker-compose.yml 即可。

注意:部分策略需要安装额外的 Python 依赖,具体需要看策略的备注。

在写这篇文章的时候,我用的是 KamaFama 策略,同时在对 Diamond 策略进行测试。

基于静态列表进行交易

修改 config.json 中的下列配置:

"pair_whitelist":["EOS/USDT", "ETH/USDT", "BTC/USDT", "SOL/USDT", "TRUMP/USDT", "PROM/USDT", "HIVE/USDT",  "ZRX/USDT"],

中间部分略

"pairlists": [
        {
            "method": "StaticPairList"
        }
  ],

stoploss 调整

跑了两个月,突然发现策略的 stoploss 都没有生效(关闭的),于是参照官方文档调整了:

    # Optimal stoploss designed for the strategy
    # This attribute will be overridden if the config file contains "stoploss"
    # 修改默认止损从 -0.1 到 -0.08(-10%到-8%)
    stoploss = -0.08

    # Optimal timeframe for the strategy
    timeframe = '5m'

    # trailing stoploss
    # 开启了 trailing_stop
    trailing_stop = True
    trailing_stop_positive = 0.01
    trailing_stop_positive_offset = 0.02
    
    # Optional order type mapping
    # 开启了stoploss_on_exchange,在下单后就设置止损策略
    order_types = {
        'entry': 'limit',
        'exit': 'limit',
        'stoploss': 'market',
        'stoploss_on_exchange': True
    }

trailing_stop 主要用于在盈利时调整止损比例,比如收益到 2%时,只要下跌 1% 就止损。这样可以尽可能锁住盈利。但缺点可能是交易更频繁。

stoploss 调整后续

自从调整 trailing_stop 后,全部 Loss…应该是设置的点有点低,基本每天稳定亏钱,先取消再看看吧…只留止损策略。

策略记录

kamafama_2

运行约 18 天,一开始用的作者使用的币清单,亏损严重,于是换成了 volume 前 25,效果也一般,有些 Loss 损失很大,直接把之前的收益清零。目前已放弃该策略。

 Running Freqtrade 2025.1

Running with 4xunlimited USDT on binance in spot markets, with Strategy KamaFama_2.

Stoploss on exchange is disabled.

Currently running, force entry: false

Dry-Run

Avg Profit -0.277% (-23.025%) in 83 Trades, with an average duration of 8:02:42. Best pair: BNX/USDT.

Bot start date: 2025-02-04 09:03:05 (UTC) First trade opened: 2025-02-04 21:11:17 (UTC) Last trade opened: 2025-02-22 02:40:09 (UTC)

Profit factor: 0.42 Trading volume: 4431.301 USDT
Metric	Value
ROI closed trades	-33.189 USDT (0.12%)
ROI all trades	-38.739 USDT (-0.28%)
Total Trade count	83
Bot started	2025-02-04 09:03:05
First Trade opened	2025-02-04 21:11:17
Latest Trade opened	2025-02-22 02:40:09
Win / Loss	73 / 6
Winrate	92.405%
Expectancy (ratio)	-0.42 (-0.04)
Avg. Duration	8:02:42
Best performing	BNX/USDT: 3.16%
Trading volume	4431.301 USDT
Profit factor	0.42
Max Drawdown	42.37% (44.657 USDT) from 2025-02-06 05:39:56 to 2025-02-08 14:05:09

image-20250222115356150

image-20250222115404757

Diamond

跑了两天全是亏损的,放弃

NFI5MOHO

跑了一周左右亏损,放弃


相似文章

评论