Skip to content

Webhook使用

配置

通过向配置文件添加一个webhook段落,并将 webhook.enabled 设置为 true 来启用webhooks。

示例配置(使用IFTTT进行测试)。

  "webhook": {
        "enabled": true,
        "url": "https://maker.ifttt.com/trigger/<YOUREVENT>/with/key/<YOURKEY>/",
        "entry": {
            "value1": "购买 {pair}",
            "value2": "限价 {limit:8f}",
            "value3": "{stake_amount:8f} {stake_currency}"
        },
        "entry_cancel": {
            "value1": "取消 {pair} 的未完成买单",
            "value2": "限价 {limit:8f}",
            "value3": "{stake_amount:8f} {stake_currency}"
        },
         "entry_fill": {
            "value1": "{pair} 的买单已成交",
            "value2": "成交价 {open_rate:8f}",
            "value3": ""
        },
        "exit": {
            "value1": "退出 {pair}",
            "value2": "限价 {limit:8f}",
            "value3": "盈利:{profit_amount:8f} {stake_currency} ({profit_ratio})"
        },
        "exit_cancel": {
            "value1": "取消 {pair} 的未完成卖单",
            "value2": "限价 {limit:8f}",
            "value3": "盈利:{profit_amount:8f} {stake_currency} ({profit_ratio})"
        },
        "exit_fill": {
            "value1": "{pair} 的卖单已成交",
            "value2": "成交价 {close_rate:8f}",
            "value3": ""
        },
        "status": {
            "value1": "状态:{status}",
            "value2": "",
            "value3": ""
        }
    },

webhook.url 中的URL应指向您的webhook的正确URL。如果您正在使用IFTTT(如上面的示例所示),请将您的事件和密钥插入URL中。

您可以将POST请求的请求体格式设置为Form-Encoded(默认值),JSON-Encoded或原始数据。分别使用 "format": "form", "format": "json", 或 "format": "raw"。Mattermost Cloud集成的示例配置:

  "webhook": {
        "enabled": true,
        "url": "https://<YOURSUBDOMAIN>.cloud.mattermost.com/hooks/<YOURHOOK>",
        "format": "json",
        "status": {
            "text": "状态:{status}"
        }
    },

结果将是一个带有 {"text":"状态:运行中"} 作为请求体和 Content-Type: application/json 头的POST请求,在Mattermost频道中显示 状态:运行中 的消息。

当使用Form-Encoded或JSON-Encoded配置时,您可以配置任意数量的负载值,键和值都将在POST请求中输出。但是,当使用原始数据格式时,您只能配置一个值,它的名称必须为 "data"。在这种情况下,数据键不会在POST请求中输出,只有值会输出。例如:

  "webhook": {
        "enabled": true,
        "url": "https://<YOURHOOKURL>",
        "format": "raw",
        "webhookstatus": {
            "data": "状态: {status}"
        }
    },

结果将会是一个POST请求,例如状态: 运行中的body和Content-Type: text/plain的header。

附加配置

可以设置webhook.retries参数来指定在请求不成功(即HTTP响应状态不为200)时Webhook请求的最大重试次数。默认值为0表示禁用重试。还可以设置webhook.retry_delay参数来指定重试尝试之间的等待时间,以秒为单位。默认值为0.1(即100毫秒)。请注意,如果Webhook出现连接问题,增加重试次数或等待时间可能会降低交易程序的速度。 您还可以指定webhook.timeout,它定义了Bot等待的时间,直到它认为另一个主机无响应(默认为10秒)。

重试配置示例:

  "webhook": {
        "enabled": true,
        "url": "https://<YOURHOOKURL>",
        "timeout": 10,
        "retries": 3,
        "retry_delay": 0.2,
        "status": {
            "status": "状态: {status}"
        }
    },

可以通过策略内的self.dp.send_msg()函数向Webhook端点发送自定义消息。要启用此功能,请将allow_custom_messages选项设置为true:

  "webhook": {
        "enabled": true,
        "url": "https://<YOURHOOKURL>",
        "allow_custom_messages": true,
        "strategy_msg": {
            "status": "策略消息: {msg}"
        }
    },

可以为不同的事件配置不同的payload。不是所有的字段都是必需的,但至少需要配置其中一个字典,否则Webhook永远不会被调用。

Webhook消息类型

进入

当机器人执行一笔长/短的时候,webhook.entry中的字段将被填充。参数使用string.format进行填充。 可能的参数有:

  • trade_id
  • exchange
  • pair
  • direction
  • leverage
  • limit #已弃用 - 不再使用。
  • open_rate
  • amount
  • open_date
  • stake_amount
  • stake_currency
  • base_currency
  • quote_currency
  • fiat_currency
  • order_type
  • current_rate
  • enter_tag

取消进入

当机器人取消一笔长/短订单时,webhook.entry_cancel中的字段将被填充。参数使用string.format进行填充。 可能的参数有:

  • trade_id
  • exchange
  • pair
  • direction
  • leverage
  • limit
  • amount
  • open_date
  • stake_amount
  • stake_currency
  • base_currency
  • quote_currency
  • fiat_currency
  • order_type
  • current_rate
  • enter_tag

成交进入

当机器人完成一笔长/短订单时,webhook.entry_fill中的字段将被填充。参数使用string.format进行填充。 可能的参数有:

  • trade_id
  • exchange
  • pair
  • direction
  • leverage
  • open_rate
  • amount
  • open_date
  • stake_amount
  • stake_currency
  • base_currency
  • quote_currency
  • fiat_currency
  • order_type
  • current_rate
  • enter_tag

退出

webhook.exit 字段用于Bot退出交易时填充。参数使用 string.format 进行填充。 可能的参数有:

  • trade_id(交易ID)
  • exchange(交易所)
  • pair(交易对)
  • direction(方向)
  • leverage(杠杆)
  • gain(盈利)
  • limit(限制)
  • amount(数量)
  • open_rate(开仓率)
  • profit_amount(盈利金额)
  • profit_ratio(盈利比例)
  • stake_currency(押注货币)
  • base_currency(基本货币)
  • quote_currency(引用货币)
  • fiat_currency(法定货币)
  • exit_reason(退出原因)
  • order_type(订单类型)
  • open_date(开仓日期)
  • close_date(平仓日期)

平仓完成

在Bot完成平仓订单时,webhook.exit_fill 字段会被填充。参数使用 string.format 进行填充。 可能的参数有:

  • trade_id(交易ID)
  • exchange(交易所)
  • pair(交易对)
  • direction(方向)
  • leverage(杠杆)
  • gain(盈利)
  • close_rate(平仓率)
  • amount(数量)
  • open_rate(开仓率)
  • current_rate(当前率)
  • profit_amount(盈利金额)
  • profit_ratio(盈利比例)
  • stake_currency(押注货币)
  • base_currency(基本货币)
  • quote_currency(引用货币)
  • fiat_currency(法定货币)
  • exit_reason(退出原因)
  • order_type(订单类型)
  • open_date(开仓日期)
  • close_date(平仓日期)

取消平仓

在Bot取消平仓订单时,webhook.exit_cancel 字段会被填充。参数使用 string.format 进行填充。 可能的参数有:

  • trade_id(交易ID)
  • exchange(交易所)
  • pair(交易对)
  • direction(方向)
  • leverage(杠杆)
  • gain(盈利)
  • limit(限制)
  • amount(数量)
  • open_rate(开仓率)
  • current_rate(当前率)
  • profit_amount(盈利金额)
  • profit_ratio(盈利比例)
  • stake_currency(押注货币)
  • base_currency(基本货币)
  • quote_currency(引用货币)
  • fiat_currency(法定货币)
  • exit_reason(退出原因)
  • order_type(订单类型)
  • open_date(开仓日期)
  • close_date(平仓日期)

状态

webhook.status 字段用于常规状态消息(已启动 / 已停止 / ...)。参数使用 string.format 进行填充。这里唯一可能的值是 {status}

Discord

Discord 有一种特殊形式的 Webhooks 可供使用。您可以按以下方式配置:

"discord": {
    "enabled": true,
    "webhook_url": "https://discord.com/api/webhooks/<您的 Webhook URL ...>",
    "exit_fill": [
        {"交易 ID": "{trade_id}"},
        {"交易所": "{exchange}"},
        {"交易对": "{pair}"},
        {"方向": "{direction}"},
        {"开仓价格": "{open_rate}"},
        {"平仓价格": "{close_rate}"},
        {"数量": "{amount}"},
        {"开仓日期": "{open_date:%Y-%m-%d %H:%M:%S}"},
        {"平仓日期": "{close_date:%Y-%m-%d %H:%M:%S}"},
        {"利润": "{profit_amount} {stake_currency}"},
        {"盈利率": "{profit_ratio:.2%}"},
        {"输入标签": "{enter_tag}"},
        {"离场原因": "{exit_reason}"},
        {"策略": "{strategy}"},
        {"时间段": "{timeframe}"},
    ],
    "entry_fill": [
        {"交易 ID": "{trade_id}"},
        {"交易所": "{exchange}"},
        {"交易对": "{pair}"},
        {"方向": "{direction}"},
        {"开仓价格": "{open_rate}"},
        {"数量": "{amount}"},
        {"开仓日期": "{open_date:%Y-%m-%d %H:%M:%S}"},
        {"输入标签": "{enter_tag}"},
        {"策略": "{strategy} {timeframe}"},
    ]
}

上述内容表示了默认配置(exit_fillentry_fill 可选,将使用上述默认配置)。可以对其进行修改。 要禁用默认值之一(entry_fillexit_fill),可以将其赋值为空数组(exit_fill: [])。

可用的字段与 Webhooks 的字段对应,并在相应的 Webhook 部分进行了记录。

默认情况下,通知的外观如下所示。

discord-notification

策略可以通过 dataprovider.send_msg() 函数将自定义消息发送到 Discord 端点。要启用此功能,请将 allow_custom_messages 选项设置为 true

  "discord": {
        "enabled": true,
        "webhook_url": "https://discord.com/api/webhooks/<您的 Webhook URL ...>",
        "allow_custom_messages": true,
    },