Skip to content

Telegram 使用指南

设置您的 Telegram 机器人

下面我们将解释如何创建您的 Telegram 机器人,以及如何获取您的 Telegram 用户 ID。

1. 创建您的 Telegram 机器人

开始与 Telegram BotFather 聊天。

发送消息 /newbot

BotFather 的回复:

Alright, a new bot. How are we going to call it? Please choose a name for your bot.

选择您机器人的公共名称(例如 Freqtrade bot)。

BotFather 的回复:

Good. Now let's choose a username for your bot. It must end in bot. Like this, for example: TetrisBot or tetris_bot.

选择您机器人的用户名 ID 并发送给 BotFather(例如 My_own_freqtrade_bot)。

BotFather 的回复:

Done! Congratulations on your new bot. You will find it at t.me/yourbots_name_bot. You can now add a description, about section and profile picture for your bot, see /help for a list of commands. By the way, when you've finished creating your cool bot, ping our Bot Support if you want a better username for it. Just make sure the bot is fully operational before you do this.

Use this token to access the HTTP API: 22222222:APITOKEN

For a description of the Bot API, see this page: https://core.telegram.org/bots/api Father bot will return you the token (API key)

复制 API Token(上面示例中的 22222222:APITOKEN)并将其用于配置参数 token

别忘了通过点击 /START 按钮开始与您的机器人对话。

2. Telegram user_id

获取您的用户 ID

userinfobot 对话。

获取您的 "Id",您将把它用于配置参数 chat_id

使用群组 ID

要获取群组 ID,您可以将机器人添加到群组中,启动 freqtrade,然后发布 /tg_info 命令。 这将向您返回群组 ID,而无需使用其他随机机器人。 虽然 "chat_id" 仍然是必需的,但对于此命令,不需要将其设置为该特定群组 ID。

响应中还会包含必要的 "topic_id" —— 格式均已准备好,可直接复制/粘贴到您的配置中。

json
 {
    "enabled": true,
    "token": "********",
    "chat_id": "-1001332619709",
    "topic_id": "122"
}

对于 Freqtrade 配置,您可以随后使用完整值(包括 -)作为字符串:

json
   "chat_id": "-1001332619709"

使用 Telegram 群组

当使用 Telegram 群组时,您正在赋予该群组的每个成员访问您的 Freqtrade 机器人以及通过 Telegram 执行所有可能命令的权限。请确保您可以信任群组中的每个人,以避免不愉快的意外。

群组话题 ID (Group Topic ID)

要在群组中使用特定话题,您可以在配置中使用 topic_id 参数。这将允许您在群组的特定话题中使用机器人。
如果没有这个设置,如果群聊启用了话题功能,机器人将始终响应群组中的通用频道(General channel)。

json
   "chat_id": "-1001332619709",
   "topic_id": "3"

类似于群组 ID —— 您可以在话题/线程中通过 /tg_info 获取正确的话题 ID。

授权用户

对于群组,限制谁可以向机器人发送命令通常很有用。

如果配置中存在 "authorized_users": [] 且为空,则不允许任何用户控制机器人。 在下面的示例中,只有 ID 为 "1234567" 的用户被允许控制机器人 —— 所有其他用户将只能接收消息。

json
   "chat_id": "-1001332619709",
   "topic_id": "3",
   "authorized_users": ["1234567"]

控制 Telegram 消息频率

Freqtrade 提供了控制 Telegram 机器人详细程度的方法。 每个设置都有以下可选值:

  • on - 将发送消息,并通知用户。
  • silent - 将发送消息,通知将不带声音/震动。
  • off - 完全跳过发送该类型的消息。

显示不同设置的示例配置:

json
"telegram": {
    "enabled": true,
    "token": "your_telegram_token",
    "chat_id": "your_telegram_chat_id",
    "allow_custom_messages": true,
    "notification_settings": {
        "status": "silent",
        "warning": "on",
        "startup": "off",
        "entry": "silent",
        "entry_fill": "on",
        "entry_cancel": "silent",
        "exit": {
            "roi": "silent",
            "emergency_exit": "on",
            "force_exit": "on",
            "exit_signal": "silent",
            "trailing_stop_loss": "on",
            "stop_loss": "on",
            "stoploss_on_exchange": "on",
            "custom_exit": "silent",  // 未指定退出原因的 custom_exit
            "partial_exit": "on",
            // "custom_exit_message": "silent",  // 禁用特定的自定义退出原因
            "*": "off"  // 禁用所有其他退出原因
        },
        // "exit": "off",  // 禁用所有退出消息的简易配置
        "exit_cancel": "on",
        "exit_fill": "off",
        "protection_trigger": "off",
        "protection_trigger_global": "on",
        "strategy_msg": "off",
        "show_candle": "off"
    },
    "reload": true,
    "balance_dust_level": 0.01
},
  • entry (入场) 通知在下单时发送,而 entry_fill (入场成交) 通知在交易所成交时发送。
  • exit (离场) 通知在下单时发送,而 exit_fill (离场成交) 通知在交易所成交时发送。
    离场消息(exitexit_fill)可以按照具体的退出原因为键进行进一步控制。所有退出原因的默认值为 on —— 但可以通过特殊的 * 键进行配置,它将作为所有未明确定义的退出原因的通配符。
  • *_fill 通知默认关闭,必须显式启用。
  • protection_trigger (保护触发) 通知在保护机制触发时发送,protection_trigger_global 通知在全局保护机制触发时发送。
  • strategy_msg - 接收来自策略的消息通知,通过策略中的 self.dp.send_msg() 发送 更多详情
  • show_candle - 在入场/离场消息中显示 K 线值。唯一可能的值为 "ohlc""off"
  • balance_dust_level 定义 /balance 命令将什么视为“微小余额” —— 余额低于此值的货币将不被显示。
  • allow_custom_messages 完全禁用策略消息。
  • reload 允许您在选定消息上禁用重新加载按钮。

创建自定义键盘(命令快捷按钮)

Telegram 允许我们创建带有命令按钮的自定义键盘。 默认的自定义键盘如下所示。

python
[
    ["/daily", "/profit", "/balance"], # 第 1 行,3 个命令
    ["/status", "/status table", "/performance"], # 第 2 行,3 个命令
    ["/count", "/start", "/stop", "/help"] # 第 3 行,4 个命令
]

用法

您可以在 config.json 中创建自己的键盘:

json
"telegram": {
      "enabled": true,
      "token": "your_telegram_token",
      "chat_id": "your_telegram_chat_id",
      "keyboard": [
          ["/daily", "/stats", "/balance", "/profit"],
          ["/status table", "/performance"],
          ["/reload_config", "/count", "/logs"]
      ]
   },

支持的命令

仅允许以下命令。不支持命令参数!

/start, /pause, /stop, /status, /status table, /trades, /profit, /performance, /daily, /stats, /count, /locks, /balance, /stopentry, /reload_config, /show_config, /logs, /whitelist, /blacklist, /help, /version, /marketdir

Telegram 命令

默认情况下,Telegram 机器人会显示预定义的命令。有些命令只能通过发送给机器人来使用。下表列出了官方命令。您可以随时通过 /help 寻求帮助。

命令描述
系统命令
/start启动交易程序
/pause | /stopentry | /stopbuy暂停交易程序。根据规则优雅地处理已开启的交易。不开启新仓位。
/stop停止交易程序
/reload_config重新加载配置文件
/show_config显示当前配置中与运行相关的部分设置
/logs [limit]显示最后的日志消息。
/help显示帮助消息
/version显示版本号
状态查询
/status列出所有开启的交易
/status &lt;trade_id&gt;列出一个或多个特定的交易。多个 <trade_id> 用空格分隔。
/status table表格格式列出所有开启的交易。待处理买单标有星号 (*),待处理卖单标有双星号 (**)
/order &lt;trade_id&gt;列出一个或多个特定交易的订单。多个 <trade_id> 用空格分隔。
/trades [limit]表格格式列出所有最近关闭的交易。
/count显示已使用和可用的交易插槽数
/locks显示当前被锁定的交易对。
/unlock &lt;pair or lock_id&gt;移除该交易对(或该锁定 ID)的锁定。
/marketdir [long | short | even | none]更新代表当前市场方向的用户自定义变量。如果未提供方向,则显示当前设置的方向。
/list_custom_data &lt;trade_id&gt; [key]列出 Trade ID 和 Key 组合的自定义数据。如果未提供 Key,则列出该 Trade ID 下找到的所有键值对。
修改交易状态
/forceexit &lt;trade_id&gt; | /fx &lt;tradeid&gt;立即退出给定交易(忽略 minimum_roi)。
/forceexit all | /fx all立即退出所有开启的交易(忽略 minimum_roi)。
/fx/forceexit 的别名
/forcelong &lt;pair&gt; [rate]立即买入给定交易对。价格(rate)是可选的,仅适用于限价单。(force_entry_enable 必须设置为 True)
/forceshort &lt;pair&gt; [rate]立即做空给定交易对。价格(rate)是可选的,仅适用于限价单。仅在非现货市场有效。(force_entry_enable 必须设置为 True)
/delete &lt;trade_id&gt;从数据库中删除特定交易。尝试关闭开启的订单。需要在交易所手动处理该交易。
/reload_trade &lt;trade_id&gt;从交易所重新加载交易。仅在实盘有效,可能有助于恢复在交易所手动卖出的交易。
/cancel_open_order &lt;trade_id&gt; | /coo &lt;trade_id&gt;取消一个交易的开启订单。
性能指标
/profit [&lt;n&gt;]显示过去 n 天内(默认所有交易)已结束交易的盈亏摘要及一些表现统计数据
`/profit_[longshort] [<n>]`
/performance按交易对分组显示每个已完成交易的表现
/balance显示机器人管理下的每个币种余额
/balance full显示账户内每个币种的余额
/daily &lt;n&gt;显示过去 n 天(默认 7 天)内的单日盈亏
/weekly &lt;n&gt;显示过去 n 周(默认 8 周)内的单周盈亏
/monthly &lt;n&gt;显示过去 n 个月(默认 6 个月)内的单月盈亏
/stats按退出原因显示胜/负情况以及买入和卖出的平均持仓时长
/exits/stats
/entries/stats
/whitelist [sorted] [baseonly]显示当前白名单。可选:按字母顺序排列和/或仅显示每个配对的基础货币。
/blacklist [pair]显示当前黑名单,或将交易对添加到黑名单。

Telegram 命令实战

下面是您在执行各命令后会收到的 Telegram 消息示例。

/start

Status: running

/pause | /stopentry | /stopbuy

Status: paused, no more entries will occur from now. Run /start to enable entries.

通过将状态更改为 paused 来防止机器人开启新交易。 已开启的交易将继续根据常规规则(ROI/离场信号、止损等)进行管理。 注意,仓位调整(Position adjustment)仍然保持激活状态,但仅限于离场侧 —— 这意味着当机器人处于 paused 状态时,它只能减少已开启交易的仓位大小。

执行此操作后,给机器人一点时间来关闭已开启的交易(可以通过 /status table 检查)。 一旦所有仓位都关闭,运行 /stop 以完全停止机器人。

使用 /start 将机器人恢复到 running 状态,允许其开启新仓位。

WARNING

暂停/停止入场信号仅在机器人运行时有效,且不会持久化,因此重启机器人将导致此项重置。

/stop

Stopping trader ...Status: stopped

/status

对于每个开启的交易,机器人将发送以下消息。 入场标签(Enter Tag)可通过策略配置。

Trade ID: 123 (since 1 days ago)
Current Pair: CVC/BTC
Direction: Long
Leverage: 1.0
Amount: 26.64180098
Enter Tag: Awesome Long Signal
Open Rate: 0.00007489
Current Rate: 0.00007489
Unrealized Profit: 12.95%
Stoploss: 0.00007389 (-0.02%)

/status table

以表格格式返回所有开启交易的状态。

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

/count

返回已使用和可用的交易数量。

current    max
---------  -----
     2     10

/profit

也可使用 /profit_long/profit_short 仅显示做多或做空交易的利润。

返回您的盈亏及表现摘要。

ROI: Close trades
0.00485701 BTC (2.2%) (15.2 Σ%)
62.968 USD
ROI: All trades
0.00255280 BTC (1.5%) (6.43 Σ%)
33.095 EUR

Total Trade Count: 138
Bot started: 2022-07-11 18:40:44
First Trade opened: 3 days ago
Latest Trade opened: 2 minutes ago
Avg. Duration: 2:33:45
Best Performing: PAY/BTC: 50.23%
Trading volume: 0.5 BTC
Profit factor: 1.04
Win / Loss: 102 / 36
Winrate: 73.91%
Expectancy (Ratio): 4.87 (1.66)
Max Drawdown: 9.23% (0.01255 BTC)

1.2% 的相对利润是每笔交易的平均利润。
15.2 Σ% 的相对利润基于起始资本 —— 在本例中,起始资本为 0.00485701 * 1.152 = 0.00738 BTC
起始资本 (Starting capital) 要么取自 available_capital 设置,要么通过当前钱包大小减去利润计算得出。
利润因子 (Profit Factor) 计算为毛利润 / 毛亏损 —— 应作为策略的整体衡量指标。
预期值 (Expectancy) 对应于风险单位货币的平均回报,即胜率和风险回报比(获利交易的平均收益与亏损交易的平均亏损之比)。
预期比率 (Expectancy Ratio) 是基于过往交易表现对下一笔交易的预期盈亏。
最大回撤 (Max drawdown) 对应于回测指标 Absolute Drawdown (Account) —— 计算方式为 (Absolute Drawdown) / (DrawdownHigh + startingBalance)
机器人启动日期 (Bot started date) 指的是机器人第一次启动的日期。对于较旧的机器人,这将默认使用第一笔交易的开启日期。

/forceexit <trade_id>

BINANCE: Exiting BTC/LTC with limit 0.01650000 (profit: ~-4.07%, -0.00008168)

TIP

您可以通过不带参数调用 /forceexit 来获取所有开启交易的列表,它将显示一系列按钮以便简单地退出交易。 该命令有一个别名 /fx —— 具有相同的功能,但在“紧急”情况下输入速度更快。

/forcelong <pair> [rate] | /forceshort <pair> [rate]

/forcebuy &lt;pair&gt; [rate] 也支持做多,但应视为已弃用。

BINANCE: Long ETH/BTC with limit 0.03400000 (1.000000 ETH, 225.290 USD)

省略交易对将开启查询,询问要交易的配对(基于当前白名单)。 通过 /forcelong 创建的交易将具有名为 force_entry 的买入标签。

Telegram force-buy screenshot

请注意,要使此命令生效,force_entry_enable 需要设置为 true。

更多详情

/performance

返回机器人已卖出的每种加密货币的表现。

Performance:

  1. RCN/BTC 0.003 BTC (57.77%) (1)
  2. PAY/BTC 0.0012 BTC (56.91%) (1)
  3. VIB/BTC 0.0011 BTC (47.07%) (1)
  4. SALT/BTC 0.0010 BTC (30.24%) (1)
  5. STORJ/BTC 0.0009 BTC (27.24%) (1)
    ...

相对表现是针对该货币的总投资额计算的,汇总了该货币所有已成交的入场订单。

/balance

返回您在交易所拥有的所有加密货币的余额。

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

Currency: CVC
Available: 86.64180098
Balance: 86.64180098
Pending: 0.0

/daily <n>

默认情况下,/daily 将返回过去 7 天的结果。下面的示例用于 /daily 3

Daily Profit over the last 3 days:

Day (count)     USDT          USD         Profit %
--------------  ------------  ----------  ----------
2022-06-11 (1)  -0.746 USDT   -0.75 USD   -0.08%
2022-06-10 (0)  0 USDT        0.00 USD    0.00%
2022-06-09 (5)  20 USDT       20.10 USD   5.00%

/weekly <n>

默认情况下,/weekly 将返回过去 8 周(包括当前周)的结果。每周从周一开始。下面的示例用于 /weekly 3

Weekly Profit over the last 3 weeks (starting from Monday):

Monday (count)  Profit BTC      Profit USD   Profit %
-------------  --------------  ------------    ----------
2018-01-03 (5)  0.00224175 BTC  29,142 USD   4.98%
2017-12-27 (1)  0.00033131 BTC   4,307 USD   0.00%
2017-12-20 (4)  0.00269130 BTC  34.986 USD   5.12%

/monthly <n>

默认情况下,/monthly 将返回过去 6 个月(包括当前月)的结果。下面的示例用于 /monthly 3

Monthly Profit over the last 3 months:

Month (count)  Profit BTC      Profit USD    Profit %
-------------  --------------  ------------    ----------
2018-01 (20)    0.00224175 BTC  29,142 USD  4.98%
2017-12 (5)    0.00033131 BTC   4,307 USD   0.00%
2017-11 (10)    0.00269130 BTC  34.986 USD  5.10%

/whitelist

显示当前的白名单

Using whitelist StaticPairList with 22 pairs
IOTA/BTC, NEO/BTC, TRX/BTC, VET/BTC, ADA/BTC, ETC/BTC, NCASH/BTC, DASH/BTC, XRP/BTC, XVG/BTC, EOS/BTC, LTC/BTC, OMG/BTC, BTG/BTC, LSK/BTC, ZEC/BTC, HOT/BTC, IOTX/BTC, XMR/BTC, AST/BTC, XLM/BTC, NANO/BTC

/blacklist [pair]

显示当前的黑名单。 如果提供了交易对参数,则此交易对将被添加到黑名单中。 也支持用空格分隔的多个交易对。
使用 /reload_config 重置黑名单。

Using blacklist StaticPairList with 2 pairs
DODGE/BTC, HOT/BTC.

/version

Version: 0.14.3

/marketdir

如果提供了市场方向,该命令将更新代表当前市场方向的用户变量。 在机器人启动时,该变量未设置为任何有效的市场方向,必须由用户设置。下面的示例用于 /marketdir long

Successfully updated marketdirection from none to long.

如果未提供市场方向,该命令将输出当前设置的市场方向。下面的示例用于 /marketdir

Currently set marketdirection: even

您可以在策略中通过 self.market_direction 使用市场方向。

机器人重启

请注意,市场方向不会持久化,在机器人重启/重新加载后会被重置。

回测

由于此值/变量旨在模拟/实盘交易中手动更改,使用 market_direction 的策略可能不会产生可靠、可重现的结果(对该变量的更改不会在回测中反映)。请自行承担风险。