插件¶
Pairlists和Pairlist Handlers¶
Pairlist Handlers定义了机器人应该交易的货币对列表(pairlist)。它们在配置设置的pairlists
部分进行设置。
在您的配置中,您可以使用静态Pairlist(由StaticPairList
Pairlist Handler定义)和动态Pairlist(由VolumePairList
Pairlist Handler定义)。
此外,AgeFilter
、PrecisionFilter
、PriceFilter
、ShuffleFilter
、SpreadFilter
和VolatilityFilter
充当Pairlist Filters,删除某些货币对和/或将它们的位置移到pairlist中。
如果使用多个Pairlist Handlers,则它们会被链接在一起,所有Pairlist Handlers的组合形成了机器人用于交易和回测的pairlist。Pairlist Handlers按照配置的顺序执行。您应该始终配置StaticPairList
或VolumePairList
作为开始的Pairlist Handler。
未激活的市场始终从结果pairlist中删除。明确列入黑名单的货币对(在配置设置中的pair_blacklist
)也始终从结果pairlist中删除。
货币对黑名单¶
货币对黑名单(通过配置中的exchange.pair_blacklist
进行配置)禁止对某些货币对进行交易。
这可以简单地排除DOGE/BTC
,这将从列表中删除确切的这个货币对。
pair-blacklist还支持通配符(以正则表达式的方式)-因此,BNB/.*
将排除所有以BNB开头的货币对。
您还可以使用类似于.*DOWN/BTC
或.*UP/BTC
来排除杠杆代币(请检查您的交易所的Pair命名约定!)
可用的Pairlist Handlers¶
StaticPairList
(默认配置,如果未进行其他配置)VolumePairList
ProducerPairList
RemotePairList
AgeFilter
FullTradesFilter
OffsetFilter
PerformanceFilter
PrecisionFilter
PriceFilter
ShuffleFilter
SpreadFilter
RangeStabilityFilter
VolatilityFilter
测试交易对列表
配置交易对列表可能是非常棘手的。最好使用 test-pairlist
实用程序子命令来快速测试您的配置。
静态交易对列表¶
默认情况下,使用 StaticPairList
方法,它使用从配置中静态定义的交易对白名单。交易对列表还支持通配符(正则表达式风格)- 因此,.*/BTC
会包括所有以 BTC 为抵押物的交易对。
它使用来自 exchange.pair_whitelist
和 exchange.pair_blacklist
的配置。
"pairlists": [
{"method": "StaticPairList"}
],
默认情况下,只允许当前启用的交易对。
要跳过对活跃市场的交易对验证,请在 StaticPairList
配置中设置 "allow_inactive": true
。
这对于回测已过期的交易对(如季度现货市场)非常有用。
此选项必须与交易所配置中的 exchange.skip_pair_validation
一起配置。
当在 "后续" 位置使用(例如在 VolumePairlist
之后),所有 'pair_whitelist'
中的交易对将会被添加到交易对列表的末尾。
成交量交易对列表¶
VolumePairList
使用交易对的成交量进行排序和过滤。它选择了交易量前 number_assets
的交易对,并基于 sort_key
(只能是 quoteVolume
)进行排序。当VolumePairList
在非领先位置(在StaticPairList和其他Pairlist Filters之后)使用时,它会考虑先前的Pairlist Handlers的输出,并通过交易量对交易对进行排序/选择。
当VolumePairList
用作Pairlist Handlers链的领先位置时,将忽略pair_whitelist
配置设置。相反,VolumePairList
从交易所上所有可用市场中选择具有匹配的抵押货币的前置资产。
refresh_period
设置允许定义刷新Pairlist的时间周期(以秒为单位)。默认值为1800秒(30分钟)。
VolumePairList
上的pairlist缓存(refresh_period
)仅适用于生成pairlist。
过滤实例(不在列表中的第一个位置)不应用任何缓存,并且始终使用最新数据。
VolumePairList
默认基于ccxt库报告的交易所的报价数据:
quoteVolume
是最近24小时内交易的报价(抵押)货币金额。
"pairlists": [
{
"method": "VolumePairList",
"number_assets": 20,
"sort_key": "quoteVolume",
"min_value": 0,
"refresh_period": 1800
}
],
您可以使用min_value
定义最小交易量,低于指定范围内的值的交易对将被过滤掉。
VolumePairList
高级模式¶
VolumePairList
还可以在指定的蜡烛大小的给定时间范围内运行。它利用交易所的历史蜡烛数据,构建一个典型价格(由(开盘价+最高价+最低价)/3计算),并将典型价格与每个蜡烛的交易量相乘。总和是给定范围内的quoteVolume
。这允许在使用较长范围和较大蜡烛大小时,实现更平滑的交易量,或者在使用短范围和小蜡烛时实现相反的效果。
为了方便起见,可以指定lookback_days
,这将意味着会使用1天的蜡烛来进行回顾。在下面的示例中,pairlist将基于过去7天创建:
"pairlists": [
{
"method": "VolumePairList",
"number_assets": 20,
"sort_key": "quoteVolume",
"min_value": 0,
"refresh_period": 86400,
"lookback_days": 7
}
],
范围回溯和刷新周期
当与 lookback_days
和 lookback_timeframe
结合使用时,refresh_period
不能小于蜡烛的秒数。因为这会导致对交易所 API 发出不必要的请求。
使用回溯范围时的性能影响
如果在联合使用回溯时使用在第一位置,根据交易对的时间范围计算的交易量可能会消耗时间和资源,因为它会下载所有可交易对的蜡烛图。因此,强烈建议使用标准方法来使用 VolumeFilter
来缩小对进一步计算交易量范围的交易对列表。
不支持的交易所
在某些交易所(例如 Gemini),普通的 VolumePairList
无法工作,因为 API 不会原生提供24小时交易量。可以通过使用蜡烛数据来构建交易量来解决这个问题。
为了粗略模拟24小时交易量,您可以使用以下配置。
请注意,这些交易对列表只会每天刷新一次。
"pairlists": [
{
"method": "VolumePairList",
"number_assets": 20,
"sort_key": "quoteVolume",
"min_value": 0,
"refresh_period": 86400,
"lookback_days": 1
}
],
可以使用更复杂的方法,使用 lookback_timeframe
来指定蜡烛的大小和 lookback_period
来指定蜡烛的数量。以下示例将根据1小时蜡烛图的滚动期间为3天构建交易量对:
"pairlists": [
{
"method": "VolumePairList",
"number_assets": 20,
"sort_key": "quoteVolume",
"min_value": 0,
"refresh_period": 3600,
"lookback_timeframe": "1h",
"lookback_period": 72
}
],
注意
VolumePairList
不支持回测模式。
ProducerPairList¶
使用 ProducerPairList
,您可以在每个消费者上不需要显式定义交易对列表,而是重复使用来自 Producer 的交易对列表。消费者模式 是这个配对列表正常工作所必需的。
该配对列表将针对当前交易所配置检查活动配对,以避免在无效的市场上尝试交易。
您可以使用可选参数 number_assets
来限制配对列表的长度。使用 "number_assets"=0
或省略此键将导致重复使用当前设置下有效的所有生产者配对。
"pairlists": [
{
"method": "ProducerPairList",
"number_assets": 5,
"producer_name": "default",
}
],
合并配对列表
此配对列表可与所有其他配对列表和过滤器组合,以进一步减少配对列表,并且还可以作为“附加”配对列表,叠加在已定义配对列表之上。
ProducerPairList
还可以在连续使用多个生产者的情况下使用,将多个生产者的配对组合在一起。
显然,在这类复杂配置中,生产者可能无法为所有配对提供数据,因此策略必须适应这种情况。
RemotePairList¶
它允许用户从远程服务器或存储在 freqtrade 目录中的本地 json 文件中获取配对列表,实现动态更新和自定义交易配对列表。
RemotePairList 在配置设置的配对列表部分中定义。它使用以下配置选项:
"pairlists": [
{
"method": "RemotePairList",
"mode": "whitelist",
"processing_mode": "filter",
"pairlist_url": "https://example.com/pairlist",
"number_assets": 10,
"refresh_period": 1800,
"keep_pairlist_on_failure": true,
"read_timeout": 60,
"bearer_token": "my-bearer-token"
}
]
可选的 mode
选项指定配对列表应作为 黑名单
还是 白名单
使用。默认值为 "白名单"。RemotePairList 配置中的可选项 processing_mode
决定了如何处理获取到的 pairlist。它可以有两个值:"filter" 或 "append"。
在 "filter" 模式下,获取到的 pairlist 用作过滤器。只有原始 pairlist 和获取到的 pairlist 中都存在的交易对才会包含在最终 pairlist 中。其他交易对会被过滤掉。
在 "append" 模式下,获取到的 pairlist 会添加到原始 pairlist 中。两个列表中的所有交易对都会包含在最终 pairlist 中,没有任何过滤。
pairlist_url
选项指定了 pairlist 位于的远程服务器的 URL,或者是本地文件的路径(如果以 file:/// 开头)。这允许用户使用远程服务器或本地文件作为 pairlist 的来源。
用户需要提供一个返回以下结构的服务器或本地文件的 JSON 对象:
{
"pairs": ["XRP/USDT", "ETH/USDT", "LTC/USDT"],
"refresh_period": 1800
}
pairs
属性应该包含一个字符串列表,其中包含机器人要使用的交易对。refresh_period
属性是可选的,用于指定 pairlist 在刷新之前应该缓存的秒数。
可选项 keep_pairlist_on_failure
指定是否在远程服务器无法访问或返回错误时使用先前接收到的 pairlist。默认值为 true。
可选项 read_timeout
指定从远程源接收响应的最长等待时间(以秒为单位)。默认值为 60。
可选项 bearer_token
将包含在请求的授权头中。!!! 注意
在发生服务器错误时,如果 keep_pairlist_on_failure
被设置为 true,将保留最后接收到的交易对列表,当设置为 false 时,将返回一个空的交易对列表。
AgeFilter(年龄过滤器)¶
删除那些上市时间少于 min_days_listed
天(默认为 10
)或者上市时间超过 max_days_listed
天(默认为 None
,表示无穷大)的交易对。
当交易对首次在交易所上市时,它们的价格可能会出现大幅下跌和波动,在这几天里,交易对会经历价格发现阶段。在交易对价格降低完之前,机器人常常会在购买时摊上事。
此过滤器允许 freqtrade 忽略交易对,直到它们上市至少 min_days_listed
天并且支撑的时间早于 max_days_listed
。
FullTradesFilter(完整交易过滤器)¶
当交易槽位已满时(即 max_open_trades
在配置文件中没有设置为 -1
),将白名单缩小为只包含正在交易中的交易对。
当交易槽位已满时,不需要计算其他交易对的指标(除了信息性交易对)因为不会开启新的交易。通过将白名单缩小为只包含正在交易中的交易对,可以提高计算速度和减少 CPU 使用率。当一个交易槽位空闲(无论是因为交易关闭或者配置文件中 max_open_trades
的值增加),那么白名单将恢复到正常状态。
当同时使用多个交易对过滤器时,建议将此过滤器放在第二个位置,直接放置在主要交易对列表下面,这样当交易槽位已满时,机器人无需为其他过滤器下载数据。
回测模式
FullTradesFilter
不支持回测模式。#### OffsetFilter
将传入的键值对列表按给定的offset
值偏移。
例如,它可以与VolumeFilter
结合使用,从键值对列表中删除前X对。或者将一个较大的键值对列表拆分为两个只在底部运行的实例。
例如,从键值对列表中删除前10对,并获取接下来的20对(获取初始列表的第10到30个元素):
"pairlists": [
// ...
{
"method": "OffsetFilter",
"offset": 10,
"number_assets": 20
}
],
警告
当将OffsetFilter
与VolumeFilter
结合使用以将较大的键值对列表分隔到多个机器人中时,
由于VolumeFilter
的刷新间隔略有不同,无法保证键值对不会重叠。
注意
如果偏移量大于传入的键值对列表的总长度,将导致得到一个空的键值对列表。
PerformanceFilter¶
按照过去的交易性能对键值对进行排序,规则如下:
- 正面的性能。
- 尚未关闭的交易。
- 负面的性能。交易计数被用作决胜负。
您可以使用 minutes
参数只考虑过去 X 分钟(滚动窗口)的性能。
不定义此参数(或将其设置为 0)将使用所有时间的性能。
可选的 min_profit
参数(作为比率 -> 设置为 0.01
对应 1%)定义了一对货币必须具有的最低利润。
低于此水平的配对将被过滤掉。
仅使用此参数而不使用 minutes
是不推荐的,因为它可能导致一个没有恢复方式的空配对列表。
"pairlists": [
// ...
{
"method": "PerformanceFilter",
"minutes": 1440, // 滚动 24 小时
"min_profit": 0.01 // 最小利润 1%
}
],
由于此过滤器使用机器人的历史性能,它需要一些启动时间 - 在机器人的数据库中有几百个交易之后才应该使用。
回测
PerformanceFilter
不支持回测模式。
PrecisionFilter¶
过滤掉不允许设置止损的低价值货币。
回测
PrecisionFilter
不支持使用多个策略的回测模式。
PriceFilter¶
PriceFilter
允许通过价格对交易对进行过滤。目前支持以下价格过滤器:
min_price
(最低价格)max_price
(最高价格)max_value
(最大值)low_price_ratio
(低价格比例)
min_price
设置可删除价格低于指定价格的交易对。如果您希望避免交易非常低价的交易对,则此选项非常有用。
此选项默认为禁用状态,只有当设置为 > 0 时才会应用。
max_price
设置可删除价格高于指定价格的交易对。如果您希望只交易低价交易对,则此选项非常有用。
此选项默认为禁用状态,只有当设置为 > 0 时才会应用。
max_value
设置可删除最小值变化高于指定值的交易对。
当交易所存在不平衡的限制时,此选项非常有用。例如,如果步长为 1(即您只能购买 1、2 或 3,但不能购买 1.1 个币)- 并且价格相当高(比如 20 美元),因为该币种自上次限制调整以来价格大幅上涨。
因此,您只能以 20 美元或 40 美元购买 - 但不能以 25 美元购买。
对于从接收货币中扣除手续费的交易所(如币安)- 这可能会导致具有较高价值的币种/金额无法出售,因为金额稍低于限制。
low_price_ratio
设置可删除单价上涨一单位(pip)高于 low_price_ratio
比例的交易对。
此选项默认为禁用状态,只有当设置为 > 0 时才会应用。
对于 PriceFilter
,至少必须应用其 min_price
、max_price
或 low_price_ratio
设置之一。
计算示例:
SHITCOIN/BTC 的最小价格精度为 8 位小数。如果其价格为 0.00000011 - 上涨一个价格步长将为 0.00000012,较前一个价格值高约 9%。您可以使用将 low_price_ratio
设置为 0.09(9%) 或 min_price
设置为 0.00000011 来过滤掉此交易对。
低价交易对
具有高 "1 pip 移动" 的低价交易对往往是危险的,因为它们通常流动性不足,而且很可能无法放置所需的止损订单,这往往会导致高额损失,因为价格需要舍入到下一个可交易的价格 - 所以您的止损可能从 -5% 变成了 -9%,仅仅是由于价格舍入的原因。#### ShuffleFilter(洗牌过滤器)
洗牌(随机打乱)配对列表中的配对。当您希望所有配对以相同的优先级处理时,可以使用它来防止机器人交易某些配对比其他配对更频繁。
默认情况下,ShuffleFilter每个蜡烛周期会对配对进行一次洗牌。
要在每次迭代时进行洗牌,请将"shuffle_frequency"
设置为"iteration"
,而不是默认值"candle"
。
{
"method": "ShuffleFilter",
"shuffle_frequency": "candle",
"seed": 42
}
Tip
您可以设置此配对列表的seed
值以获得可复现的结果,这对于重复进行回测非常有用。如果未设置seed
,则以不可重复的随机顺序对配对进行洗牌。ShuffleFilter将自动检测运行模式,并仅对回测模式应用seed
值-如果设置了seed
值。
SpreadFilter(差价过滤器)¶
删除卖一价和买一价之间的差异超过指定比率max_spread_ratio
(默认为0.005
)的配对。
示例:
如果DOGE/BTC
的最大买一价为0.00000026,最小卖一价为0.00000027,则计算比率为:1 - bid/ask ~= 0.037
,即> 0.005
,因此该配对将被过滤掉。
RangeStabilityFilter(范围稳定性过滤器)¶
删除差异小于lookback_days
天的最低价和最高价之间的交易对,该差异低于min_rate_of_change
或高于max_rate_of_change
。由于这个过滤器需要额外的数据,所以结果会在refresh_period
内缓存。
在下面的示例中: 如果过去10天的交易范围<1%或>99%,则从白名单中删除该交易对。
"pairlists": [
{
"method": "RangeStabilityFilter",
"lookback_days": 10,
"min_rate_of_change": 0.01,
"max_rate_of_change": 0.99,
"refresh_period": 86400
}
]
!!! Tip(提示) 此过滤器可用于自动删除稳定币交易对,其交易范围非常小,因此极难盈利交易。 此外,它还可用于自动删除在给定时间内具有极高/极低方差的交易对。
VolatilityFilter(波动率过滤器)¶
波动率是指时间内交易对历史变化程度的度量,它由对数日回报的标准差来衡量。假设回报符合正态分布,尽管实际分布可能不同。在正态分布中,68%的观测值在一个标准差内,95%的观测值在两个标准差内。假设波动率为0.05,意味着在30天中有20天的预期回报值小于5%(一个标准差)。波动率是预期回报偏差的正比率,可以大于1.00。请参考维基百科对波动率
的定义。
此过滤器将从白名单中删除波动率在lookback_days
天内平均值低于min_volatility
或高于max_volatility
的交易对。由于这个过滤器需要额外的数据,所以结果会在refresh_period
内缓存。
此过滤器可用于将您的交易对缩小到特定波动率范围内,或避免非常波动的交易对。
在下面的示例中: 如果过去10天的波动率不在0.05-0.50的范围内,则从白名单中删除该交易对。该过滤器每24小时应用一次。
"pairlists": [
{
"method": "VolatilityFilter",
"lookback_days": 10,
"min_volatility": 0.05,
"max_volatility": 0.50,
"refresh_period": 86400
}
]
Pairlist 处理器的完整示例¶
以下示例将 BNB/BTC
加入黑名单,使用 VolumePairList
并选择 20
个资产,
将所有成对的货币按照 quoteVolume
进行排序,
并应用 PrecisionFilter
和 PriceFilter
,
过滤掉价格单位大于 1% 的所有资产。
然后应用 SpreadFilter
和 VolatilityFilter
,
最后用预定义的随机种子将成对货币重新排序。
"exchange": {
"pair_whitelist": [],
"pair_blacklist": ["BNB/BTC"]
},
"pairlists": [
{
"method": "VolumePairList",
"number_assets": 20,
"sort_key": "quoteVolume"
},
{"method": "AgeFilter", "min_days_listed": 10},
{"method": "PrecisionFilter"},
{"method": "PriceFilter", "low_price_ratio": 0.01},
{"method": "SpreadFilter", "max_spread_ratio": 0.005},
{
"method": "RangeStabilityFilter",
"lookback_days": 10,
"min_rate_of_change": 0.01,
"refresh_period": 86400
},
{
"method": "VolatilityFilter",
"lookback_days": 10,
"min_volatility": 0.05,
"max_volatility": 0.50,
"refresh_period": 86400
},
{"method": "ShuffleFilter", "seed": 42}
],
保护¶
测试版功能
此功能仍处于测试阶段。如果您发现有任何问题,请通过 Discord 或 Github Issue 告诉我们。
通过暂停交易(对于一个交易对或所有交易对)来保护您的策略免受意外事件和市场状况的影响。 所有保护结束时间被舍入到下一个蜡烛,以避免突然、意外的蜡烛内购买。
Note
并非所有策略都适用于所有保护措施,您需要调整参数以提高性能。
Tip
每个保护措施可以多次配置,以实现不同级别的保护(短期/长期)。
回测
保护措施支持回测和超参数优化,但必须使用 --enable-protections
标志显式启用。
通过配置设置保护措施
通过 "protections": [],
键从配置中设置保护措施应被视为废弃的功能,并将在未来的版本中被移除。
在策略中定义保护措施作为属性的情况下,不再保证您的保护措施适用于策略参见hyperopt.md内容。
可用的保护措施¶
所有保护措施的通用设置| 参数 | 描述 |¶
|------------|-------------|
| method
| 要使用的保护名称。
数据类型: 字符串,从可用的保护中选择
| stop_duration_candles
| 锁定应设置多少个蜡烛?
数据类型: 正整数(以蜡烛为单位)
| stop_duration
| 保护应锁定多少分钟。
不能与 stop_duration_candles
一起使用。
数据类型: 浮点数(以分钟为单位)
| lookback_period_candles
| 仅考虑在最近的 lookback_period_candles
个蜡烛内完成的交易。某些保护可能会忽略此设置。
数据类型: 正整数(以蜡烛为单位)。
| lookback_period
| 仅考虑在 current_time - lookback_period
之后完成的交易。
不能与 lookback_period_candles
一起使用。
某些保护可能会忽略此设置。
数据类型: 浮点数(以分钟为单位)
| trade_limit
| 最低的所需交易次数(不被所有保护使用)。
数据类型: 正整数
时长
时长(stop_duration*
和 lookback_period*
)可以定义为分钟或蜡烛数。
为了在测试不同时间间隔时更加灵活,以下示例中将使用“蜡烛”定义。
止损保护器¶
StoplossGuard
选取 lookback_period
分钟内的所有交易(或使用 lookback_period_candles
以蜡烛为单位)。
如果有 trade_limit
或更多次的交易结果为止损,交易将在 stop_duration
分钟内暂停(或使用 stop_duration_candles
以蜡烛为单位)。
此设置将适用于所有交易对,除非将 only_per_pair
设置为 true,这将只检查一个交易对。
同样地,此保护器默认将考虑所有交易(多头和空头)。对于期货机器人,设置 only_per_side
将使机器人只考虑一边,并且只锁定此一边,例如在一系列多头止损后,允许空头继续。
required_profit
将确定止损才能考虑的所需相对利润(或损失)。通常不需要设置,默认为 0.0,这意味着所有亏损的止损将触发阻塞。
下面的示例显示,在最近的 24 个蜡烛中,如果机器人在最后一次交易中发生了 4 次止损,则在最后一笔交易后的 4 个蜡烛内停止所有交易。
@property
def protections(self):
return [
{
"method": "StoplossGuard",
"lookback_period_candles": 24,
"trade_limit": 4,
"stop_duration_candles": 4,
"required_profit": 0.0,
"only_per_pair": False,
"only_per_side": False
}
]
注意
StoplossGuard
将考虑所有结果为 "stop_loss"
、"stoploss_on_exchange"
和 "trailing_stop_loss"
,且利润为负的交易。
需要调整 trade_limit
和 lookback_period
以适应您的策略。
最大回撤¶
MaxDrawdown
使用 lookback_period
分钟(或使用 lookback_period_candles
时的蜡烛图)内的所有交易来确定最大回撤。如果回撤低于 max_allowed_drawdown
,则在最后一笔交易后,交易将停止 stop_duration
分钟(或使用 stop_duration_candles
时的蜡烛图)- 假设机器人需要一些时间来让市场恢复。
以下示例如果最大回撤大于20%,则最近48根蜡烛中所有交易会停止交易12根蜡烛。如果需要,可以使用 lookback_period
和/或 stop_duration
。
@property
def protections(self):
return [
{
"method": "MaxDrawdown",
"lookback_period_candles": 48,
"trade_limit": 20,
"stop_duration_candles": 12,
"max_allowed_drawdown": 0.2
},
]
低收益交易对¶
LowProfitPairs
使用 lookback_period
分钟(或使用 lookback_period_candles
时的蜡烛图)内的某个交易对的所有交易来确定总体收益比率。
如果该比率低于 required_profit
,则该交易对将在 stop_duration
分钟(或使用 stop_duration_candles
时的蜡烛图)内锁定。
对于期货机器人,设置 only_per_side
将使机器人只考虑一边,并且只锁定这一边,例如,在一系列做多亏损之后,仍然允许做空。
以下示例如果交易对在最近6根蜡烛中没有至少2次交易并且收益不满足2%要求,则会停止该交易对60分钟。
@property
def protections(self):
return [
{
"method": "LowProfitPairs",
"lookback_period_candles": 6,
"trade_limit": 2,
"stop_duration": 60,
"required_profit": 0.02,
"only_per_pair": False,
}
]
冷却期间¶
CooldownPeriod
在卖出后为 stop_duration
分钟(或使用 stop_duration_candles
时为蜡烛数量)锁定一对交易,在 stop_duration
分钟内禁止重新进入此对交易。
下面的示例在关闭交易后停止交易一对蜡烛,以使这对交易得到“冷却”。
@property
def protections(self):
return [
{
"method": "CooldownPeriod",
"stop_duration_candles": 2
}
]
注意
此保护仅适用于单个交易对,并且永远不会全局锁定所有交易对。
此保护不考虑 lookback_period
,因为它只关注最新的交易。
保护的完整示例¶
所有保护可以随意组合,也可以使用不同的参数,为表现不佳的交易对创建一个逐渐增加的阻力。
所有保护按照定义的顺序进行评估。
下面的示例假设时间框架为1小时:
- 在卖出后,使每对交易多停留5个蜡烛周期 (
CooldownPeriod
), 使其他交易对有机会被填充进来。 - 如果过去2天(
48 * 1小时的蜡烛
)内有20笔交易,导致最大回撤超过20% (MaxDrawdown
), 则在4小时内停止交易 (4 * 1小时蜡烛
)。 - 如果所有交易对在1天(
24 * 1小时的蜡烛
)内出现4次止损 (StoplossGuard
), 则停止交易。 - 如果过去6小时(
6 * 1小时的蜡烛
)内有至少2笔交易对的综合利润比例低于0.02 (<2%) (LowProfitPairs
), 则将所有交易对锁定60个蜡烛周期。 - 如果过去24小时(
24 * 1小时的蜡烛
)内有至少4笔交易对的利润低于0.01 (<1%),则将所有交易对锁定2个蜡烛周期。
from freqtrade.strategy import IStrategy
class AwesomeStrategy(IStrategy)
timeframe = '1h'
@property
def protections(self):
return [
{
"method": "CooldownPeriod",
"stop_duration_candles": 5
},
{
"method": "MaxDrawdown",
"lookback_period_candles": 48,
"trade_limit": 20,
"stop_duration_candles": 4,
"max_allowed_drawdown": 0.2
},
{
"method": "StoplossGuard",
"lookback_period_candles": 24,
"trade_limit": 4,
"stop_duration_candles": 2,
"only_per_pair": False
},
{
"method": "LowProfitPairs",
"lookback_period_candles": 6,
"trade_limit": 2,
"stop_duration_candles": 60,
"required_profit": 0.02
},
{
"method": "LowProfitPairs",
"lookback_period_candles": 24,
"trade_limit": 4,
"stop_duration_candles": 2,
"required_profit": 0.01
}
]
# ...