要使用自定义策略,首先需要将策略文件(如 my_strategy.py)放置在 user_data/strategies/ 目录下,然后通过 --strategy 参数指定策略类的名称。例如,若文件为 user_data/strategies/my_awesome_strategy.py,其中定义了一个名为 AwesomeStrategy 的类,则运行命令为:freqtrade trade --strategy AwesomeStrategy。机器人会在 user_data/strategies/ 目录中自动查找该文件并加载对应的类。如果文件不存在或代码有错误,机器人会明确提示错误原因。
推荐对 user-data/strategies/ 目录使用版本控制系统(如 Git),是因为策略代码会频繁修改以适应市场变化,而每次调整都可能影响交易结果。通过版本控制,你可以清晰记录每一次策略变更、回滚到稳定版本、比较不同版本的性能差异,并与团队成员协作开发。此外,当你在不同机器或环境中部署机器人时,版本控制能确保策略文件的一致性,避免因手动复制导致的遗漏或错误。
Freqtrade 支持多配置文件叠加加载,允许你将敏感信息(如交易所 API 密钥和密钥)单独存放在一个受权限保护的文件中(如 keys.config.json),而主配置文件(config.json)则保留空值或占位符。在 Dry-run 模式下仅加载主配置,无需密钥;在 Live 模式下同时加载主配置和密钥文件,密钥文件中的值会覆盖主文件中的空值。这样,你可以在不暴露密钥的情况下分享主配置文件,同时通过操作系统权限(如 chmod 600)限制密钥文件的访问,极大降低数据泄露风险。
为安全管理 API 密钥,推荐使用双配置文件策略:主配置文件 config.json 包含通用设置(如交易对、策略),而私有配置文件 config-private.json 仅包含敏感信息(如 exchange.key, exchange.secret, telegram.token)。启动时使用命令:freqtrade trade --config user_data/config.json --config user_data/config-private.json。这样,您可以安全地分享主配置文件(如用于版本控制),而私有文件仅由您本地保存。环境变量方式同样安全,但需注意不要在日志或脚本中暴露。
api_server.username 和 password 是 REST API 的访问凭证,必须设置强密码(建议 12 位以上,含大小写字母、数字和符号),并避免使用默认值。建议将它们存储在环境变量中(如 FREQTRADE__API_SERVER__USERNAME),而非直接写入配置文件,以降低泄露风险。仅允许受信任的 IP 地址访问 API 服务,并通过防火墙或反向代理(如 Nginx)限制访问范围。切勿在公开网络或 GitHub 仓库中暴露这些凭证。
为避免 API 密钥泄露导致资金损失,应遵循以下最佳实践:
- 不要将 API 密钥硬编码在配置文件中,应使用环境变量加载(如 export FREQTRADE__EXCHANGE__SECRET="...")。
- 对于去中心化交易所(如 Hyperliquid),使用专用 API 钱包,而非主钱包或硬件钱包私钥。
- 仅授予 API 密钥最小必要权限(如仅交易、不提现)。
- 将 API 密钥绑定到 Bot 所在服务器的 IP 地址。
- 不在公共代码库、云存储或聊天工具中分享密钥。
- 定期轮换密钥,尤其在怀疑泄露时立即更换。
这些措施可显著降低被攻击风险,保护账户资金安全。
为确保 API 密钥安全,应遵循以下最佳实践:
- 使用环境变量加载密钥,而非写入配置文件。
- 为每个 Bot 创建独立的 API 密钥,并限制权限(仅交易、不提现)。
- 绑定 API 密钥到 Bot 服务器的固定 IP 地址。
- 不在 GitHub、云盘或聊天工具中分享密钥。
- 定期轮换密钥,尤其在怀疑泄露时立即更换。
- 对于 DEX(如 Hyperliquid),使用专用 API 钱包,不使用主钱包私钥。
- 保持私钥文件权限为 600(仅所有者可读写)。
这些措施可最大程度降低密钥泄露和资金被盗的风险。
官方强调阅读源代码,是因为 Freqtrade 本质上是一个可编程的交易引擎,而非黑箱式软件。许多用户误以为下载即可盈利,但实际上:
- 策略逻辑(如买入条件、止损规则)完全由 Python 代码定义,不了解代码就无法判断其合理性。
- 参数设置(如止损值、ROI 时间)直接影响风险收益比,盲目复制他人配置可能导致灾难性亏损。
- 交易所 API 调用、订单类型、滑点处理、资金管理等底层机制都隐藏在代码中,不理解它们就无法诊断交易失败原因。
通过阅读源码,你可以:
- 理解策略为何在某种行情下失效
- 识别潜在的逻辑漏洞(如过度拟合、未来函数)
- 自行修复或定制功能
- 避免被误导性策略欺骗
官方认为,不懂代码的用户不应使用 Freqtrade 进行实盘交易,这是对资金安全和自身学习负责的必要态度。
要有效开发 Freqtrade 策略,你需要掌握以下 Python 知识:
- 基础语法:变量、函数、条件判断、循环
- Pandas 库:核心技能,用于处理 OHLCV 数据(K 线数据),如
df['close']、df.rolling(window=14).mean()
- NumPy:用于数值计算,如
np.where()、np.sign()
- 类与对象:策略类继承自
IStrategy,需理解 populate_entry_trend()、populate_exit_trend() 等方法的结构
- 数据结构:理解 DataFrame、Series、字典的使用
- 函数式编程:熟悉 lambda 表达式和链式调用(如
df.loc[condition, 'signal'] = 1)
此外,熟悉技术指标(如 RSI、MACD、Bollinger Bands)的数学定义和计算方式至关重要。官方示例策略是最佳学习材料,建议从修改已有策略开始,逐步理解其数据处理流程和信号生成逻辑。
公开发布的 Freqtrade 策略往往在回测中表现优异,但实际交易中常表现不佳,原因包括:
- 过拟合:策略可能被过度优化以匹配特定历史数据,无法适应未来市场变化。
- 市场环境变化:加密货币市场波动剧烈,过去有效的策略在当前可能失效。
- 未考虑真实成本:许多公开策略忽略手续费、滑点、流动性限制,导致回测结果虚高。
- 缺乏透明性:发布者可能未说明参数来源或测试条件,难以复现。
Freqtrade 强调:没有万能策略,盈利需要持续测试、调整和理解逻辑。建议将公开策略作为学习模板,而非直接使用。通过自己修改、测试和理解每个信号的含义,才能构建真正适合自己风险偏好的策略。
回测(Backtesting)是 Freqtrade 的核心功能之一,用于在历史市场数据上模拟你的交易策略表现。其作用包括:
- 评估策略有效性:在真实资金投入前,判断策略在历史行情中是否具有盈利能力。
- 量化风险指标:计算最大回撤、胜率、盈亏比、交易次数、夏普比率等关键绩效指标。
- 发现逻辑缺陷:识别策略在极端行情(如暴跌、暴涨、横盘)下的表现异常。
- 参数调优基础:为后续的 Hyperopt 优化提供基准和评估依据。
回测时,Freqtrade 会严格按照历史价格、成交量和时间顺序,逐根 K 线执行你的买入/卖出逻辑,生成详细的交易记录和图表。你可以使用 freqtrade backtesting 命令运行回测,并通过 freqtrade plot-profit 和 freqtrade plot-dataframe 可视化结果,直观分析策略的入场点、出场点与价格走势的关系。
不能。回测结果不能保证实盘盈利,主要原因包括:
- 过拟合风险:策略在历史数据上表现优异,但可能只是‘记住’了过去的模式,无法适应新市场。
- 滑点与手续费:回测通常假设以精确价格成交,但实盘中订单可能因流动性不足而以更差价格成交,尤其在高波动时。
- 延迟与网络问题:实盘受网络延迟、交易所 API 限速影响,可能导致信号延迟执行。
- 市场结构变化:加密货币市场情绪、主力行为、监管政策随时变化,历史规律可能失效。
- 资金影响:大额订单可能影响价格(尤其在小币对上),回测无法模拟。
因此,回测仅是策略验证的第一步。必须在 Dry-run 模式下运行至少数周,观察其在真实市场环境中的表现,才能判断其是否具备实盘价值。任何声称‘回测盈利=实盘赚钱’的说法都是危险的误导。
是的,Freqtrade 内置多种风险控制机制,帮助用户降低交易损失:
- 止损(Stop-loss):当价格下跌超过设定百分比时自动平仓,防止亏损扩大。
- 追踪止损(Trailing stop-loss):在盈利时动态上移止损位,锁定部分利润。
- 止盈(ROI):设定不同盈利水平下的分段止盈规则(如盈利 5% 卖出 50%,10% 全部卖出)。
- 最大回撤限制:可配置策略在累计亏损达到阈值时暂停交易。
- 交易次数限制:防止在震荡市中频繁交易产生高额手续费损耗。
- 黑名单机制:排除高波动、低流动性或已知风险币对。
- 资金分配控制:可设置单笔交易最大资金比例,避免重仓单一币种。
这些功能均在策略配置文件中定义,用户可根据自身风险偏好灵活调整。官方建议始终启用止损和追踪止损,作为交易安全的底线保护。
Freqtrade 采用 MIT 许可证(MIT License),这是一个宽松的开源许可证。这意味着:
- 你可以免费使用、修改和分发 Freqtrade 的源代码
- 可以用于商业目的(如开发收费策略或服务)
- 无需公开你的修改代码(除非你分发修改后的版本)
- 必须保留原始版权声明和许可证文本
该许可证鼓励社区贡献与二次开发,是 Freqtrade 能够持续发展和拥有活跃生态的重要基础。详情可在项目根目录的 LICENSE 文件中查看。