止损¶
stoploss 配置参数表示触发卖出的亏损比率。例如,值为 -0.10 时,表示当某笔交易的亏损超过 10% 时立即卖出。此参数是可选的。止损计算中已包含手续费,因此 -10% 的止损会精确地设置在入场价下方 10% 的位置。
大多数策略文件中已经包含了最优的 stoploss 值。
信息
本文档中提到的所有止损属性都可以在策略或配置文件中设置。
配置文件中的值将覆盖策略中的值。
交易所内止损/Freqtrade¶
这些止损模式可以是在交易所内,也可以是在交易所外。
这些模式可以通过以下值进行配置:
'emergency_exit': 'market',
'stoploss_on_exchange': False
'stoploss_on_exchange_interval': 60,
'stoploss_on_exchange_limit_ratio': 0.99
仅以下交易所支持交易所内止损,并且并非所有交易所都同时支持止损限价单和止损市价单。如果只有一种模式可用,则订单类型将被忽略。
支持的交易所及止损类型
| 交易所 | 模式 | 保证金模式 | 止损类型 |
|---|---|---|---|
| 币安 | 现货 | 限价 | |
| 币安 | 期货 | 逐仓、全仓 | 市价、限价 |
| Bingx | 现货 | 市价、限价 | |
| Bitmart | 现货 | ❌(不支持) | |
| Bybit | 现货 | ❌(不支持) | |
| Bybit | 期货 | 逐仓 | 市价、限价 |
| Gate.io | 现货 | 限价 | |
| Gate.io | 期货 | 逐仓 | 限价 |
| HTX | 现货 | 限价 | |
| Hyperliquid | 现货 | ❌(不支持) | |
| Hyperliquid | 期货 | 逐仓 | 限价 |
| Kraken | 现货 | 市价、限价 | |
| OKX | 现货 | 限价 | |
| OKX | 期货 | 逐仓 | 限价 |
| Bitvavo | 现货 | ❌(不支持) | |
| Kucoin | 现货 | 市价、限价 |
紧止损
在交易所设置止损时,请勿将止损值设得过低或过紧!
如果设置得过低或过紧,订单可能无法及时成交,导致止损失效。
stoploss_on_exchange 和 stoploss_on_exchange_limit_ratio¶
启用或禁用交易所止损功能。如果止损设置为在交易所执行,则买入订单成交后,交易所会立即挂出一个止损限价单。这可以保护你免受市场突然暴跌的影响,因为订单执行完全在交易所内部完成,不存在网络延迟等潜在问题。
如果 stoploss_on_exchange 使用限价单,交易所需要两个价格:止损价和限价。stoploss 定义了触发限价单的止损价格,而限价应略低于此价格。
如果交易所同时支持限价和市价止损单,则 stoploss 的值将用于决定止损单的类型。
计算示例:我们以 100 美元买入资产。
止损触发价为 95 美元,则限价为 95 * 0.99 = 94.05 美元,因此限价单的成交价格将在 95 美元至 94.05 美元之间。
例如,假设止损设置在交易所,并且启用了追踪止损,当市场价格上涨时,机器人会自动取消之前的止损单,并挂出一个新的止损价更高的止损单。
注意
如果启用了 stoploss_on_exchange,但你在交易所手动取消了止损单,机器人将自动重新创建一个新的止损单。
stoploss_on_exchange_interval¶
当使用交易所止损时,还有一个参数叫 stoploss_on_exchange_interval。它用于设置机器人检查并更新止损单的时间间隔(单位为秒)。
机器人不能在每次循环(每 5 秒)都进行此类操作,否则可能会被交易所封禁。因此,该参数告诉机器人应多久更新一次止损单。默认值为 60(即 1 分钟)。同样的机制也会在你意外取消止损单后,自动重新设置止损单。
stoploss_price_type¶
仅适用于期货
stoploss_price_type 仅适用于期货市场(在支持该功能的交易所上)。Freqtrade 在启动时会对该设置进行验证,若选择了不适用于你所用交易所的设置,程序将无法启动。各交易所支持的价格类型可能不同,请查阅你所用交易所的文档以确认其支持哪些价格类型。
期货市场的交易所止损可基于不同类型的价格触发。不同交易所对这些价格的命名各不相同,但通常包括“最新价”(或“合约价”)、“标记价”和“指数价”。
该设置的可选值为 "last"、"mark" 和 "index",Freqtrade 会自动将其转换为对应的 API 类型,并据此在交易所设置止损单。
force_exit¶
force_exit 是一个可选值,默认与 exit 的值相同,当通过 Telegram 或 Rest API 发送 /forceexit 命令时使用。
强制卖出¶
force_entry 是一个可选值,默认与 entry 的值相同,当通过 Telegram 或 Rest API 发送 /forceentry 命令时使用。
紧急卖出¶
emergency_exit 是一个可选值,默认为 market,在创建交易所订单的止损失败时使用。以下是默认设置,若未在策略或配置文件中更改,则使用此默认值。
策略文件中的示例:
order_types = {
"entry": "limit",
"exit": "limit",
"emergency_exit": "market",
"stoploss": "market",
"stoploss_on_exchange": True,
"stoploss_on_exchange_interval": 60,
"stoploss_on_exchange_limit_ratio": 0.99
}
止损类型¶
目前,机器人支持以下几种止损模式:
- 静态止损。
- 跟踪止损。
- 跟踪止损,自定义盈利状态下的止损。
- 仅当交易达到一定偏移量后才启用跟踪止损。
- 自定义止损函数
静态止损¶
这非常简单,您只需将止损设为价格的 x 比例(即价格的 x * 100%)。一旦亏损超过设定值,系统将尝试卖出资产。
止损示例:
stoploss = -0.10
例如,简化计算:
- 机器人以 100 美元的价格买入一项资产
- 止损设定为 -10%
- 当资产价格跌破 90 美元时,止损将被触发
跟踪止损¶
该模式的初始值为 stoploss,就像您定义静态止损一样。要启用跟踪止损,请进行如下设置:
stoploss = -0.10
trailing_stop = True
这将激活一个算法,每当资产价格上涨时,自动上移止损位。
例如,简化计算:
- 机器人以 100 美元的价格买入一项资产
- 止损设定为 -10%
- 当资产价格跌破 90 美元时,止损将被触发
- 假设资产价格现在上涨至 102 美元
- 此时止损位变为 102 美元的 -10%,即 91.8 美元
- 现在如果资产价格下跌至 101 美元,止损位仍为 91.8 美元,并将在价格触及 91.8 美元时触发
总结:止损位将始终调整为历史最高价的 -10%。
跟踪止损,盈利后采用不同止损值¶
您可以在买入后处于亏损状态(买入价 + 手续费)时使用默认止损,但一旦达到盈利状态(或达到您设定的某个偏移点),系统将切换到另一个不同值的跟踪止损。例如,您的默认止损为 -10%,但当收益达到 0.1% 时,将启用另一个不同的跟踪止损。
注意
如果您希望仅在盈亏平衡或开始盈利时才更改止损(大多数用户的需求),请参考下一节关于启用偏移量的内容。
这两个值都要求将 trailing_stop 设置为 true,并且设置 trailing_stop_positive 的值。
stoploss = -0.10
trailing_stop = True
trailing_stop_positive = 0.02
trailing_stop_positive_offset = 0.0
trailing_only_offset_is_reached = False # Default - not necessary for this example
例如,简化计算:
- 机器人以 100 美元的价格买入一项资产
- 止损设定为 -10%
- 当资产价格跌破 90 美元时,止损将被触发
- 假设资产价格现在上涨至 102 美元
- 此时止损将为 102$ 的 -2%,即 99.96$(99.96$ 的止损将被锁定,并随着资产价格上升而保持 -2% 的差值)
- 现在资产价格下跌至 101$,止损仍为 99.96$,当价格跌破 99.96$ 时将触发止损
0.02 对应 -2% 的止损。在此之前,stoploss 用于跟踪止损。
使用偏移量来调整你的止损
通过设置 trailing_stop_positive_offset 高于 trailing_stop_positive,可以确保新的跟踪止损处于盈利状态。这样,你的第一个新止损价位就已经锁定了利润。
数学简化示例:
stoploss = -0.10
trailing_stop = True
trailing_stop_positive = 0.02
trailing_stop_positive_offset = 0.03
- 机器人以 100 美元的价格买入一项资产
- 止损设定在 -10%,因此当资产价格跌破 90$ 时,止损将被触发
- 假设资产价格现在上涨至 102 美元
- 此时止损将位于 91.8$,即低于最高观察价格的 10%
- 假设资产价格现在上涨至 103.5$(超过所配置的偏移量)
- 此时止损将为 103.5$ 的 -2%,即 101.43$
- 现在资产价格下跌至 102$,止损仍为 101.43$,一旦价格跌破 101.43$ 就会触发
仅当交易达到特定偏移量后启用跟踪止损¶
你也可以在达到偏移量之前保持静态止损,之后再启用跟踪止损以在市场转向时锁定利润。
如果 trailing_only_offset_is_reached = True,则仅当达到偏移量后才激活跟踪止损。在此之前,止损保持在配置的 stoploss 水平,不会跟踪价格。若将此值设为 trailing_only_offset_is_reached=False,则一旦资产价格高于初始入场价,跟踪止损即开始生效。
此选项可与或不与 trailing_stop_positive 一起使用,但使用 trailing_stop_positive_offset 作为偏移量。
配置(偏移量为买入价 + 3%):
stoploss = -0.10
trailing_stop = True
trailing_stop_positive = 0.02
trailing_stop_positive_offset = 0.03
trailing_only_offset_is_reached = True
例如,简化计算:
- 机器人以 100 美元的价格买入一项资产
- 止损设定为 -10%
- 当资产价格跌破 90 美元时,止损将被触发
- 除非资产价格上涨至或超过所配置的偏移量,否则止损将保持在 90$
- 假设资产价格现在上涨至 103$(达到我们配置的偏移量)
- 此时止损将为 103$ 的 -2%,即 100.94$
- 现在资产价格下跌至 101$,止损仍为 100.94$,当价格跌破 100.94$ 时将触发
提示
请确保此值(trailing_stop_positive_offset)低于最小 ROI,否则最小 ROI 将先起作用并卖出交易。
止损与杠杆¶
止损应被视为“本次交易的风险”——例如,在 100$ 的交易中设置 10% 的止损,意味着你愿意承担 10$(10%)的亏损,当价格下跌 10% 时将触发止损。
使用杠杆时,同样适用此原则——止损定义了交易的风险(你愿意承受的亏损金额)。
因此,在 10 倍杠杆交易中,10% 的止损将在价格变动 1% 时触发。如果你的投入资金(自有资本)为 100$,这笔交易在 10 倍杠杆下总值为 1000$。当价格变动 1% 时,你已损失 10$ 自有资金——因此在这种情况下止损将被触发。
请务必注意这一点,避免设置过紧的止损(在 10 倍杠杆下,10% 的风险可能太小,无法让交易有足够的波动空间)。
修改已开仓交易的止损位¶
可以通过修改配置文件或策略中的数值,然后使用 /reload_config 命令来更改已开仓交易的止损位(或者,也可以完全停止并重新启动机器人)。
新的止损值将被应用到已开仓的交易中(并会生成相应的日志消息)。
限制条件¶
如果启用了 trailing_stop(移动止损)并且止损位已经被调整过,则无法再更改止损值。