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_fill
和 entry_fill
可选,将使用上述默认配置)。可以对其进行修改。
要禁用默认值之一(entry_fill
或 exit_fill
),可以将其赋值为空数组(exit_fill: []
)。
可用的字段与 Webhooks 的字段对应,并在相应的 Webhook 部分进行了记录。
默认情况下,通知的外观如下所示。
策略可以通过 dataprovider.send_msg()
函数将自定义消息发送到 Discord 端点。要启用此功能,请将 allow_custom_messages
选项设置为 true
:
"discord": {
"enabled": true,
"webhook_url": "https://discord.com/api/webhooks/<您的 Webhook URL ...>",
"allow_custom_messages": true,
},