无噪 logo
项目 速读教程 文档
  1. freqtrade 速读指南
  2. 熟悉命令行界面

2. 熟悉命令行界面

本章将全面掌握 Freqtrade 的命令行操作,从基础命令结构到高级配置查看,再到版本管理技巧。通过实际操作示例,将学会如何高效地与 Freqtrade 机器人交互,执行交易、回测、数据下载等核心功能,为后续策略开发和优化打下坚实基础。

基础命令

Freqtrade 作为一款命令行驱动的量化交易框架,所有功能都通过命令来触发。掌握这些命令的基本结构和常用参数,是使用 Freqtrade 的第一步。就像学习一门编程语言先了解语法规则一样,熟悉命令行界面的操作逻辑,能在后续使用中事半功倍。

命令结构解析

Freqtrade 的命令遵循统一的结构,基本格式如下:

freqtrade [全局选项] <命令> [命令选项]

这个结构可以分为三个部分:全局选项、命令本身和命令选项。全局选项影响所有命令的行为,比如 -V--version 用于查看版本信息;命令是具体要执行的操作,如 trade 启动交易、backtesting 进行回测;命令选项则是针对该命令的特定参数,比如 --strategy 指定使用哪个策略。

举个实际例子,启动交易机器人并指定配置文件和策略:

freqtrade trade -c config.json --strategy MyAwesomeStrategy

这里 trade 是核心命令,-c config.json 是命令选项(指定配置文件),--strategy MyAwesomeStrategy 也是命令选项(指定交易策略)。

核心命令速览

Freqtrade 提供了丰富的命令集,涵盖从数据下载到策略回测再到实际交易的全流程。我们先对常用命令做个整体了解,后续会深入讲解关键命令的使用细节。

通过 freqtrade -h 可以查看所有可用命令,主要包括以下几类:

交易相关

  • trade: 启动交易机器人,是最核心的命令
  • show-trades: 查看历史交易记录
  • test-pairlist: 测试交易对列表配置

数据相关

  • download-data: 下载历史 K 线数据
  • convert-data: 转换数据格式
  • list-data: 列出已下载的数据
  • trades-to-ohlcv: 将交易数据转换为 K 线数据

策略与回测

  • new-strategy: 创建新策略模板
  • backtesting: 策略回测
  • backtesting-show: 查看回测结果
  • hyperopt: 策略参数优化

配置与管理

  • create-userdir: 创建用户数据目录
  • new-config: 生成新配置文件
  • show-config: 查看当前配置
  • install-ui: 安装 FreqUI 界面

信息查询

  • list-exchanges: 列出支持的交易所
  • list-pairs: 列出交易所可用交易对
  • list-strategies: 列出可用策略
  • list-timeframes: 列出支持的时间框架

这个命令列表看起来很多,但日常使用频率高的也就那么几个。接下来我们重点介绍几个最常用的命令。

交易命令详解

trade 命令是启动 Freqtrade 交易机器人的入口,也是我们使用最频繁的命令之一。其基本用法如下:

freqtrade trade [选项]

常用选项包括:

  • -c/--config: 指定配置文件路径
  • --strategy: 指定要使用的策略类名
  • --strategy-path: 添加额外的策略文件搜索路径
  • --dry-run: 启动干跑模式,不实际下单
  • --db-url: 指定数据库连接 URL
  • --userdir: 指定用户数据目录

例如,启动干跑模式并使用特定策略:

freqtrade trade --dry-run --strategy SampleStrategy -c config_dry.json

这个命令会加载 config_dry.json 配置文件,使用 SampleStrategy 策略,在干跑模式下启动机器人。干跑模式非常重要,它会模拟交易而不实际连接交易所下单,是测试策略的安全方式。

需要注意的是,启动交易前必须确保配置文件中的交易所 API 密钥正确(实盘模式),或者使用干跑模式(无需 API 密钥)。如果 API 密钥错误,机器人将无法连接交易所,会在日志中显示认证失败的错误信息。

数据下载命令

在进行策略回测前,我们需要获取历史市场数据,这就需要用到 download-data 命令。其基本用法:

freqtrade download-data [选项]

核心选项:

  • -p/--pairs: 指定要下载的交易对,多个交易对用逗号分隔
  • -t/--timeframes: 指定时间框架,多个时间框架用逗号分隔
  • --days: 下载数据的天数
  • --startdate/--enddate: 指定开始/结束日期(格式 YYYYMMDD)
  • -c/--config: 指定配置文件(用于获取交易所信息)

示例,下载 BTC/USDT 和 ETH/USDT 的 1 小时和 4 小时数据,共 30 天:

freqtrade download-data -p BTC/USDT,ETH/USDT -t 1h,4h --days 30 -c config.json

这个命令会从配置文件中指定的交易所下载数据,并保存到用户数据目录下的 data 文件夹中。默认情况下,数据以 JSON 格式存储,文件名包含交易对、时间框架和日期范围信息。

下载数据时要注意几个问题:首先,不同交易所支持的时间框架可能不同,大部分交易所支持 1 分钟、5 分钟、1 小时、1 天等标准时间框架;其次,数据量较大时下载可能需要较长时间,建议先测试小范围数据下载;最后,确保网络连接稳定,中断后可能需要重新下载。

回测命令基础

策略编写完成后,需要通过历史数据回测来评估其表现,这就要用到 backtesting 命令。基本用法:

freqtrade backtesting [选项]

关键选项:

  • --strategy: 指定要回测的策略
  • -i/--timerange: 指定回测时间范围
  • --timeframe: 指定回测使用的时间框架
  • --stats-file: 指定回测结果保存文件
  • --processes: 指定用于回测的进程数(加速回测)

示例,回测 SampleStrategy 策略在 2023 年 1 月的 1 小时数据:

freqtrade backtesting --strategy SampleStrategy -i 20230101-20230131 --timeframe 1h

回测完成后,会显示详细的统计结果,包括总交易次数、胜率、盈亏比、最大回撤等关键指标。这些指标是评估策略优劣的重要依据。

回测命令还有很多高级选项,比如 --eps 启用每步模拟(更精确但速度慢)、--enable-position-stacking 允许同一策略在同一时间持有多个头寸等。随着对 Freqtrade 的深入使用,我们会逐渐掌握这些高级功能。

帮助系统

Freqtrade 提供了完善的帮助系统,无论对哪个命令不熟悉,都可以通过帮助系统快速了解其用法。掌握如何高效使用帮助系统,能在使用 Freqtrade 时更加独立自主,减少对外部文档的依赖。

获取全局帮助

在命令行中输入 freqtrade -hfreqtrade --help,可以获取全局帮助信息,包括所有可用命令和全局选项:

freqtrade -h

输出内容结构清晰,首先是命令格式,然后是位置参数(即各个命令),最后是全局选项。这种结构设计符合类 Unix 命令的风格,熟悉 Linux 命令的用户会感到很亲切。

全局帮助最有用的部分是命令列表,它简要描述了每个命令的功能。当忘记某个命令的具体名称时,这里可以快速查阅。例如,想不起下载数据的命令时,看到 download-data 及其描述“Download backtesting data.”就知道这是你需要的。

获取命令帮助

对于具体命令的详细用法,可以在命令后添加 -h--help 参数。例如,要了解 trade 命令的所有选项:

freqtrade trade -h

这会显示 trade 命令的详细帮助信息,包括所有可用选项、选项说明和使用示例。输出内容通常分为几个部分:选项说明、示例用法(如果有)、以及相关提示。

命令帮助中的选项说明非常详细,包括选项的全称和缩写形式、是否需要参数、参数类型以及选项的具体含义。例如:

-c CONFIG, --config CONFIG
                      Specify configuration file (default: config.json). Multiple --config options may be used.

这段说明告诉我们,-c--config 的缩写形式,需要一个参数(配置文件路径),默认值是 config.json,并且可以多次使用该选项指定多个配置文件。

帮助信息解读

学会解读帮助信息是使用命令行工具的关键技能。Freqtrade 的帮助信息遵循统一的格式,掌握这种格式能快速提取所需信息。

backtesting 命令的帮助信息为例,我们来看看如何解读:

usage: freqtrade backtesting [-h] [-v] [--logfile FILE] [-V] [-c CONFIG] [--userdir USERDIR] [-s STRATEGY] [--strategy-path STRATEGY_PATH] [-i TIMERANGE] [--timeframe TIMEFRAME] [--timerange-from TIMERANGE_FROM] [--timerange-to TIMERANGE_TO] [--max-open-trades MAX_OPEN_TRADES] [--stake-amount STAKE_AMOUNT] [--fee FEE] [--initial-wallet INITIAL_WALLET] [--dry-run-wallet DRY_RUN_WALLET] [--disable-max-market-positions] [--strategy-list STRATEGY_LIST] [--export EXPORT] [--export-filename EXPORT_FILENAME] [--export-json EXPORT_JSON] [--stats-file STATS_FILE] [--processes PROCESSES] [--no-timeout] [--eps] [--enable-position-stacking] [--disable-position-stacking] [--cache] [--forcebuy] [--breakdown] [--trade-source {file,db,exchange}] [--trade-source-path TRADE_SOURCE_PATH]

这是 backtesting 命令的使用格式,列出了所有可用选项。虽然看起来很长,但每个选项都有其特定用途。我们可以根据需要查找相关选项,不必一次记住所有内容。

帮助信息中的方括号 [] 表示可选参数,尖括号 <> 表示必选参数(不过在 Freqtrade 中大部分参数都是可选的)。竖线 | 表示“或”的关系,例如 [-h | --help] 表示这两个选项功能相同。

在实际使用中,我建议养成随时查阅帮助的习惯。遇到不确定的选项时,不要凭记忆猜测,而是通过 -h 查看准确说明,这样可以避免因参数错误导致的问题。

错误信息利用

除了主动查阅帮助,Freqtrade 的错误信息也是学习命令使用的重要资源。当命令执行出错时,终端会显示错误信息,这些信息通常会指出问题所在,并给出解决建议。

例如,如果忘记指定策略就运行回测:

freqtrade backtesting

会得到类似以下错误:

Error: --strategy must be specified when not using config strategy.

这个错误信息清晰地告诉我们需要使用 --strategy 选项指定策略。Freqtrade 的错误提示通常都比较友好,包含具体的错误原因和解决方法,认真阅读错误信息能快速定位问题。

另一个常见错误是配置文件不存在:

Could not find config file 'nonexistent.json'. Please create a config file or check the path.

错误信息直接指出了文件不存在,并建议检查路径或创建配置文件。这种情况下,我们应该检查文件名拼写是否正确,或者文件是否确实在指定路径下。

配置查看

Freqtrade 的行为主要通过配置文件控制,理解如何查看和管理配置是使用 Freqtrade 的关键。配置文件包含交易所连接信息、交易参数、策略设置等重要内容,掌握配置查看技巧能帮助确认当前设置是否正确,排查配置相关问题。

查看当前配置

show-config 命令用于显示当前生效的配置,它会合并所有指定的配置文件,并展示最终的配置结果。基本用法:

freqtrade show-config [选项]

常用选项包括 -c/--config 指定配置文件,--dump 以 JSON 格式输出完整配置。

例如,查看默认配置:

freqtrade show-config

这会显示合并后的配置,按类别组织,如 exchangedry_runstake_currency 等。输出内容会隐藏敏感信息(如 API 密钥),用 *** 代替,确保安全。

show-config 命令非常有用,尤其是在使用多个配置文件时,可以确认配置是否按预期合并。例如,我们可以创建一个基础配置文件和一个包含 API 密钥的私密配置文件,然后用 show-config 验证合并结果:

freqtrade show-config -c config.json -c secrets.json

这会显示合并后的配置,让我们确认私密配置是否正确覆盖了基础配置中的相关项。

多配置文件使用

Freqtrade 支持同时指定多个配置文件,配置参数会按顺序合并,后面的配置文件会覆盖前面的同名参数。这种机制非常灵活,允许我们将配置分离,比如将公共设置和私密信息分开存储。

基本用法是多次使用 -c/--config 选项:

freqtrade trade -c base_config.json -c private_config.json

在这个例子中,private_config.json 中的参数会覆盖 base_config.json 中的同名参数,其他参数则保持 base_config.json 中的设置。

多配置文件的典型应用场景是分离敏感信息。我们可以创建一个不包含 API 密钥的基础配置文件(可以安全地分享或提交到版本控制),和一个包含 API 密钥的私密配置文件(设置严格的文件权限,不分享)。

例如,base_config.json 可能包含:

{
    "dry_run": true,
    "stake_currency": "USDT",
    "stake_amount": 100,
    "timeframe": "1h",
    "exchange": {
        "name": "binance",
        "api_key": "",
        "secret": ""
    }
}

而 private_config.json 包含:

{
    "exchange": {
        "api_key": "your_actual_api_key",
        "secret": "your_actual_secret"
    }
}

运行时同时指定这两个文件,Freqtrade 会合并它们,使用 private_config.json 中的 API 密钥。这种方式既方便分享基础配置,又保护了敏感信息。

配置优先级

Freqtrade 的配置来源有多个:默认配置、配置文件、命令行参数。它们的优先级从低到高依次是:默认配置 < 配置文件 < 命令行参数。理解这个优先级规则,能准确控制机器人的行为。

  1. 默认配置:Freqtrade 内置的默认设置,所有未明确指定的参数都会使用默认值。
  2. 配置文件:通过 -c/--config 指定的配置文件,会覆盖默认配置中的同名参数。如果指定多个配置文件,后面的文件会覆盖前面的。
  3. 命令行参数:在命令中直接指定的参数,优先级最高,会覆盖配置文件和默认配置中的同名参数。

例如,假设配置文件中设置 stake_amount: 100,而命令行中指定 --stake-amount 200,则最终生效的是 200。

这种优先级机制非常有用,允许我们在不修改配置文件的情况下临时调整参数。例如,进行回测时临时修改 max_open_trades 参数:

freqtrade backtesting --strategy MyStrategy --max-open-trades 5

这个命令会使用配置文件中的大部分参数,但将 max_open_trades 临时设置为 5,方便测试不同参数对策略的影响。

配置调试技巧

配置问题是使用 Freqtrade 时常见的困扰,尤其是当使用多个配置文件或复杂命令行参数时。以下是一些调试配置的实用技巧:

1. 使用 show-config 验证配置

在运行关键命令(如实际交易)前,先用 show-config 验证最终生效的配置,确保所有参数都符合预期。特别是检查交易所设置、API 密钥(虽然会被隐藏,但可以确认是否有值)、交易对列表等关键项。

2. 逐步构建配置

如果配置比较复杂,建议从简单配置开始,逐步添加和修改参数。每次修改后用 show-config 验证,确保修改按预期生效。这种增量式的配置方式可以减少错误排查的难度。

3. 检查配置文件格式

配置文件使用 JSON 格式,JSON 对语法要求严格,逗号、引号等符号的错误都会导致配置加载失败。如果 Freqtrade 启动时报配置错误,可以使用在线 JSON 验证工具(如 jsonlint.com)检查配置文件的语法。

4. 利用日志调试

Freqtrade 启动时会记录配置加载过程,包括加载了哪些配置文件,合并后的配置是什么。如果遇到配置相关问题,可以查看日志文件(默认在 user_data/logs 目录),里面可能有更详细的错误信息。

版本管理

Freqtrade 作为一个活跃开发的开源项目,不断有新功能和 bug 修复发布。掌握版本管理技巧,能及时获取更新,同时确保系统稳定。版本管理涉及查看当前版本、更新到新版本、以及在不同版本间切换等操作。

查看版本信息

要查看当前安装的 Freqtrade 版本,可以使用 --version 选项:

freqtrade --version

输出类似:

freqtrade 2023.9

版本号通常由年份和月份组成,表示发布时间。Freqtrade 的版本策略是大约每月发布一个稳定版,版本号递增。了解当前版本有助于判断是否需要更新,以及在寻求帮助时提供版本信息。

除了版本号,还可以通过 git 命令查看当前代码的提交信息,这在使用开发分支时特别有用:

cd freqtrade
 git log -n 1

这会显示最近一次提交的哈希值、作者、日期和提交信息,帮助确认当前代码的确切版本。

更新 Freqtrade

保持 Freqtrade 更新可以获得新功能和安全修复。更新方法取决于最初的安装方式,这里我们介绍最常见的两种方式:通过 setup.sh 脚本更新和手动 git 更新。

使用 setup.sh 脚本更新(推荐)

如果使用官方推荐的 setup.sh 脚本安装,更新非常简单:

cd freqtrade
./setup.sh -u

-u 选项表示 update,脚本会自动拉取最新代码、更新依赖,并重新创建虚拟环境。整个过程无需手动干预,非常方便。

手动更新

如果熟悉 git,也可以手动更新代码:

cd freqtrade
# 拉取最新代码
git pull
# 更新依赖
pip install -U -e .[all]

这种方式给你更多控制权,但需要自己处理可能的冲突。如果更新过程中遇到问题,可以使用 git status 查看修改内容,或 git reset --hard 回退到更新前的状态。

更新前建议先查看更新日志(CHANGELOG.md),了解新版本的变化,特别是不兼容的改动。虽然 Freqtrade 团队努力保持向后兼容,但重大更新有时会引入不兼容的变化,需要调整策略或配置。

版本分支切换

Freqtrade 有两个主要分支:stable(稳定版)和 develop(开发版)。stable 分支包含经过充分测试的稳定代码,适合生产环境使用;develop 分支包含最新功能,但可能不够稳定,适合想要体验新特性的用户。

切换分支使用 git 命令:

# 切换到stable分支
git checkout stable
# 切换到develop分支
git checkout develop

切换分支后,需要重新安装依赖:

./setup.sh -i

或者手动重新安装:

pip install -e .[all]

选择哪个分支取决于需求。如果主要关注稳定性,希望尽可能减少问题,应该使用 stable 分支;如果想尝试最新功能,并且能够容忍一些潜在的 bug,可以使用 develop 分支。

无论使用哪个分支,都建议定期更新,以获取最新的安全补丁和 bug 修复。对于生产环境,建议在更新后先进行充分测试,再切换到新的版本进行实盘交易。

版本回退

有时更新后可能会遇到问题,需要回退到之前的版本。使用 git 可以很方便地实现版本回退。首先,查看提交历史:

git log --oneline

这会显示简洁的提交历史,每个提交有一个哈希值和简短描述。找到想要回退到的提交哈希,然后执行:

git checkout <commit_hash>

例如:

git checkout a1b2c3d

回退后,同样需要重新安装依赖,因为不同版本的代码可能依赖不同版本的库。

版本回退是解决更新后问题的有效手段,但这只是临时措施。更好的做法是在 GitHub 上报告问题,帮助开发团队修复 bug,这样就能在未来的版本中安全地更新。

命令行效率技巧

熟练使用命令行不仅需要记住命令,还需要掌握一些效率技巧。这些技巧能减少重复输入,快速找到需要的信息,提高整体工作效率。

命令别名

对于频繁使用的长命令,可以创建 bash 别名来简化输入。例如,将 freqtrade trade --dry-run --strategy MyStrategy 简化为 ftrade

编辑 bash 配置文件(通常是<sub>/.bashrc 或</sub>/.zshrc):

nano ~/.bashrc

添加别名:

alias ftrade='freqtrade trade --dry-run --strategy MyStrategy -c config.json'

保存后,运行 source ~/.bashrc 使别名生效。现在只需输入 ftrade 就能执行那个长命令了。

别名可以根据具体需求定制,比如为不同的策略创建不同的别名,或为回测命令创建别名。合理使用别名能显著减少命令行输入量。

命令历史

bash 和 zsh 都提供命令历史功能,可以通过上下箭头键浏览之前输入的命令。这对于重复执行相似命令非常有用。

此外,还可以使用 history 命令查看所有历史记录,结合 grep 搜索特定命令:

history | grep freqtrade

这会显示所有包含"freqtrade"的历史命令。找到需要的命令后,可以使用 !n 执行第 n 条历史命令,或 !-n 执行倒数第 n 条命令。

另一个实用技巧是使用 Ctrl+R 进行反向搜索:按下 Ctrl+R 后输入关键词,bash 会搜索包含该关键词的历史命令,找到后按 Enter 执行,或按右箭头键编辑后执行。

参数自动补全

Freqtrade 支持命令行参数自动补全,可以通过安装补全脚本启用。虽然设置稍复杂,但启用后能极大提高输入效率。

补全脚本位于 Freqtrade 项目的 scripts 目录下,根据使用的 shell(bash 或 zsh)选择相应的脚本。以 bash 为例:

# 复制补全脚本到bash补全目录
sudo cp scripts/bash-completion/freqtrade /etc/bash_completion.d/
# 重新加载bash补全
source /etc/bash_completion

现在,当输入 freqtrade 并按下 Tab 键时,会自动补全可用命令;输入命令和 - 后按 Tab,会补全可用选项。这能快速了解可用参数,减少拼写错误。

批量操作

结合 bash 的管道和循环功能,可以对多个交易对或策略进行批量操作。例如,为多个交易对下载数据:

for pair in BTC/USDT ETH/USDT BNB/USDT SOL/USDT;
do
    freqtrade download-data -p $pair -t 1h --days 30;
done

这个循环会依次为列出的每个交易对下载 1 小时数据。同样,也可以批量运行多个策略的回测:

for strategy in Strategy1 Strategy2 Strategy3;
do
    freqtrade backtesting --strategy $strategy -i 20230101-20230131;
done

批量操作对于比较不同策略或参数设置非常有用,能节省大量重复工作时间。不过使用时要注意控制并发,避免给系统或交易所 API 带来过大负担。

总结

命令行是与 Freqtrade 交互的主要方式,本章详细介绍了 Freqtrade 命令行界面的各个方面,从基础命令结构到高级效率技巧。我们学习了核心命令的用法,如何利用帮助系统解决问题,如何查看和管理配置,以及版本控制的基本操作。这些知识是使用 Freqtrade 进行量化交易的基础,掌握它们能更高效、更自信地使用这个强大的交易框架。

命令行工具虽然不如图形界面直观,但提供了更强大的功能和灵活性。随着使用经验的积累,会发现命令行操作不仅高效,而且能更深入地理解系统的工作原理。下一章我们将学习 Freqtrade 配置文件的详细解析,进一步掌握如何定制机器人的行为。