通知与监控系统

通知与监控系统

要启用 Telegram 通知,需在配置文件中设置 "telegram.enabled": true,并提供 "telegram.token"(机器人 Token)和 "telegram.chat_id"(您的 Telegram 用户 ID)。这些信息需从 @BotFather 获取 Token,从 @userinfobot 获取 chat_id。密钥必须保密,不应共享。启用后,机器人可通过 Telegram 发送交易通知、余额报告等。还可配置 telegram.balance_dust_level 过滤小额余额,telegram.reload 允许在消息中添加刷新按钮,以及 telegram.allow_custom_messages 允许策略发送自定义消息。

要创建一个Telegram机器人用于Freqtrade,你需要与BotFather进行对话。首先,在Telegram中启动与 @BotFather 的聊天,然后发送命令 /newbot。BotFather会询问你机器人的公开名称(例如 Freqtrade bot),请提供一个清晰易懂的名字。接着,它会要求你为机器人选择一个用户名,该用户名必须以 bot 结尾(例如 My_own_freqtrade_bot)。完成设置后,BotFather会返回一个API Token(格式如 22222222:APITOKEN),这个Token就是你配置Freqtrade时所需的 token 参数值。请务必复制并安全保存这个Token。最后,记得在Telegram中手动点击机器人的 /START 按钮,以启动与机器人的对话,否则机器人将无法接收消息。

要获取你的Telegram用户ID,你需要与 @userinfobot 进行对话。在Telegram中启动与该机器人的聊天,它会自动回复包含你个人信息的消息,其中有一项是 Id,这个数字就是你的用户ID。你需要将这个ID复制下来,作为Freqtrade配置文件中的 chat_id 参数值。例如,如果返回的ID是 123456789,那么你的配置应为 "chat_id": "123456789"。这个ID用于确保只有你本人可以接收机器人发送的通知和控制命令。

为了限制只有授权用户才能发送控制命令给Freqtrade机器人,你可以在配置文件中使用 authorized_users 参数。这个参数是一个用户ID数组,只有列表中的用户才能发送 /start、/stop、/forceexit 等控制命令。其他用户只能接收通知,但不能控制机器人。例如,如果你只想允许ID为 1234567 的用户控制机器人,配置应如下:

"chat_id": "-1001332619709",
"authorized_users": ["1234567"]

如果 authorized_users 数组为空([]),则没有任何用户能发送控制命令,机器人将仅作为通知工具使用。请确保你使用的是用户的Telegram ID(通过 @userinfobot 获取),而不是用户名。

Freqtrade允许你为不同类型的Telegram通知设置三种级别:on、silent 和 off。

  • on:消息将被发送,并触发设备的提示音或震动通知。
  • silent:消息会被发送,但不会触发任何声音或震动,适合不想被打扰但仍需查看信息的场景。
  • off:完全不发送该类型的消息,彻底屏蔽通知。

这些设置通过 notification_settings 字段进行配置,例如:

"notification_settings": {
  "status": "silent",
  "warning": "on",
  "startup": "off"
}

这意味着状态更新将以静音方式发送,警告信息会响铃提醒,而启动消息则完全不显示。你可以为不同事件(如入场、出场、保护触发等)单独设置级别,实现精细化控制。

Freqtrade支持的Telegram命令是固定的,且仅支持基础命令名称,不支持带参数的命令形式(如 /status 123 不能作为按钮,但可以直接输入文本使用)。以下是完整支持的命令列表:

  • 系统命令:/start, /pause, /stopentry, /stopbuy, /stop, /reload_config, /show_config, /logs, /help, /version
  • 状态查询:/status, /status table, /order, /trades, /count, /locks, /unlock, /marketdir, /list_custom_data
  • 交易控制:/forceexit, /fx, /forcelong, /forceshort, /delete, /reload_trade, /cancel_open_order, /coo
  • 数据统计:/profit, /performance, /balance, /daily, /weekly, /monthly, /stats, /exits, /entries, /whitelist, /blacklist

注意:虽然你可以在聊天中直接输入带参数的命令(如 /forceexit 123),但在自定义键盘中只能使用命令名称本身,不能包含参数。例如,你不能在键盘中创建一个按钮为 /forceexit 123,但可以创建 /forceexit,然后手动输入ID。

当你向Freqtrade机器人发送 /start 命令时,机器人会回复:**Status:** running,表示交易系统已启动并进入运行状态。此时,机器人将开始根据策略逻辑监控市场并执行买入操作。需要注意的是,/start 仅恢复交易的入场能力,不会影响已经存在的持仓。如果之前使用了 /pause 或 /stopentry,/start 将重新启用新交易的开仓功能。但请注意,/start 的状态不会在机器人重启后保留,重启后机器人默认处于 stopped 状态,必须再次发送 /start 才能恢复运行。

/status 和 /status table 都用于查看当前的持仓交易,但展示形式不同。

  • /status:为每个持仓单独发送一条详细消息,包含交易ID、交易对、方向(多/空)、杠杆、数量、入场标签、入场价、当前价、未实现盈亏、止损价等完整信息。适合需要查看单笔交易详细状态的用户。

  • /status table:以表格形式一次性列出所有持仓,紧凑清晰,便于快速对比。表格列包括交易ID、方向(L/S)、交易对、持仓时长和盈亏百分比。例如:

ID L/S    Pair     Since   Profit
----    --------  -------  --------
  67 L   SC/BTC    1 d      13.33%
 123 S   CVC/BTC   1 h      12.95%

其中,带 * 的订单表示待执行的买入单,** 表示待执行的卖出单。/status table 更适合监控多个头寸的整体表现。

你可以使用 /forceexit <trade_id> 命令强制立即平仓某个指定的交易,忽略策略中设置的最小收益(minimum_roi)和退出信号。例如:/forceexit 123 将立即对交易ID为123的持仓执行市价卖出。若想一次性平掉所有持仓,可使用 /forceexit all。该命令的别名是 /fx,功能完全相同,但输入更短,适合紧急情况下快速操作。例如:/fx 123 或 /fx all。执行后,机器人会回复类似 BINANCE: Exiting BTC/LTC with limit 0.01650000 (profit: ~-4.07%, -0.00008168) 的确认信息,显示交易所、交易对、价格和盈亏情况。

你可以使用 /forcelong <pair> [rate] 命令手动买入指定交易对(做多),或使用 /forceshort <pair> [rate] 手动开空头仓位(仅限非现货市场)。例如:/forcelong ETH/BTC 0.034 会在ETH/BTC对上以0.034的限价买入。若不指定价格(rate),机器人会使用当前市价下单。命令会自动使用 force_entry 标签标记这笔交易。

使用这些命令的前提是:在配置文件中必须设置 "force_entry_enable": true,否则机器人会拒绝执行。此外,如果未提供交易对,机器人会提示你从当前白名单中选择。这些命令主要用于紧急补仓、测试策略或手动干预,不建议在生产环境中频繁使用。

Freqtrade提供了多个命令用于查看不同维度的交易盈利数据:

  • /profit:显示综合盈亏统计,包括已平仓交易和所有交易的总利润(BTC和法币)、总交易次数、平均持仓时间、最佳表现交易、交易量、胜率、盈亏比、最大回撤等核心指标。

  • /performance:按交易对(pair)展示每一对的累计收益,列出每个币种的总盈利(BTC)、收益率和交易次数,帮助你识别哪些币种表现最好。

  • /daily <n>:按天统计过去n天的每日盈亏(默认7天),显示每日USDT/USD盈亏和百分比变化,便于观察短期波动。

  • /weekly <n>:按周统计过去n周的盈亏(默认8周),每周从周一计算,适合中长期趋势分析。

  • /monthly <n>:按月统计过去n月的盈亏(默认6月),帮助评估月度表现和季节性模式。

这些命令共同构成完整的绩效分析体系,帮助你从不同时间维度评估策略有效性。

使用 /balance 命令可以查看Freqtrade机器人管理的交易所账户中各币种的可用余额和总余额。默认情况下,它只显示机器人实际管理的资产,例如:

**Currency:** BTC
**Available:** 3.05890234
**Balance:** 3.05890234
**Pending:** 0.0

如果添加 full 参数(即 /balance full),则会显示账户中所有币种的完整余额,包括机器人未管理的资产(如未被策略使用的稳定币或未被跟踪的代币)。这对于全面掌握账户资金分布非常有用,特别是在你有多个钱包或非自动化交易的情况下。注意:balance_dust_level 设置会影响哪些小额余额被显示为“尘埃”(dust),默认为0.01,低于此值的余额可能被忽略。

/reload_config 命令用于在不重启Freqtrade程序的情况下,重新加载配置文件(config.json)的最新更改。当你修改了交易对列表、通知设置、策略参数或Telegram配置后,只需发送该命令,机器人就会重新读取配置文件并应用新设置。这避免了因重启程序而导致的交易中断。但请注意,该命令不会重置运行中的交易状态,仅更新配置参数。如果配置文件语法错误,机器人会回复错误信息并保持原配置不变,因此修改后建议先用文本编辑器验证JSON格式。

/show_config 命令会返回当前运行中Freqtrade的核心配置信息,包括使用的策略名称、交易所、交易对列表、止损设置、风险控制参数、Telegram通知设置等关键运行参数。它不会返回完整的配置文件,而是提取与机器人当前行为直接相关的部分,便于快速确认当前生效的设置是否符合预期。例如,你可以通过该命令验证是否启用了 force_entry_enable、当前的 stoploss 值是多少、Telegram是否已正确连接等。这是调试和审计机器人行为的便捷工具,尤其在多次修改配置后确认最终生效状态时非常有用。

Max Drawdown(最大回撤)是指在统计周期内,账户从最高净值到随后最低净值之间的最大跌幅百分比。例如,若账户从1000 USDT增长到1100 USDT,之后又跌至990 USDT,则最大回撤为 (1100 - 990) / 1100 = 10%。它衡量的是策略在最糟糕情况下的资金损失幅度,是评估策略风险的关键指标。

在Freqtrade中,该值对应回测中的 Absolute Drawdown (Account),计算方式为 (最大回撤金额) / (回撤高点 + 初始本金)。一个健康的策略应具有较低的最大回撤(如低于10%),因为过大的回撤意味着账户可能经历长时间恢复期,甚至导致资金无法继续交易。它帮助你判断策略是否能在极端行情中保护本金。