Skip to content

插件

Pairlists和Pairlist Handlers

Pairlist Handlers定义了机器人应该交易的货币对列表(pairlist)。它们在配置设置的pairlists部分进行设置。

在您的配置中,您可以使用静态Pairlist(由StaticPairList Pairlist Handler定义)和动态Pairlist(由VolumePairList Pairlist Handler定义)。

此外,AgeFilterPrecisionFilterPriceFilterShuffleFilterSpreadFilterVolatilityFilter充当Pairlist Filters,删除某些货币对和/或将它们的位置移到pairlist中。

如果使用多个Pairlist Handlers,则它们会被链接在一起,所有Pairlist Handlers的组合形成了机器人用于交易和回测的pairlist。Pairlist Handlers按照配置的顺序执行。您应该始终配置StaticPairListVolumePairList作为开始的Pairlist Handler。

未激活的市场始终从结果pairlist中删除。明确列入黑名单的货币对(在配置设置中的pair_blacklist)也始终从结果pairlist中删除。

货币对黑名单

货币对黑名单(通过配置中的exchange.pair_blacklist进行配置)禁止对某些货币对进行交易。 这可以简单地排除DOGE/BTC,这将从列表中删除确切的这个货币对。

pair-blacklist还支持通配符(以正则表达式的方式)-因此,BNB/.*将排除所有以BNB开头的货币对。 您还可以使用类似于.*DOWN/BTC.*UP/BTC来排除杠杆代币(请检查您的交易所的Pair命名约定!)

可用的Pairlist Handlers

测试交易对列表

配置交易对列表可能是非常棘手的。最好使用 test-pairlist 实用程序子命令来快速测试您的配置。

静态交易对列表

默认情况下,使用 StaticPairList 方法,它使用从配置中静态定义的交易对白名单。交易对列表还支持通配符(正则表达式风格)- 因此,.*/BTC 会包括所有以 BTC 为抵押物的交易对。

它使用来自 exchange.pair_whitelistexchange.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_dayslookback_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
    }
],

警告

当将OffsetFilterVolumeFilter结合使用以将较大的键值对列表分隔到多个机器人中时, 由于VolumeFilter的刷新间隔略有不同,无法保证键值对不会重叠。

注意

如果偏移量大于传入的键值对列表的总长度,将导致得到一个空的键值对列表。

PerformanceFilter

按照过去的交易性能对键值对进行排序,规则如下:

  1. 正面的性能。
  2. 尚未关闭的交易。
  3. 负面的性能。交易计数被用作决胜负。

您可以使用 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_pricemax_pricelow_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 进行排序, 并应用 PrecisionFilterPriceFilter, 过滤掉价格单位大于 1% 的所有资产。 然后应用 SpreadFilterVolatilityFilter, 最后用预定义的随机种子将成对货币重新排序。

"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_limitlookback_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
            }
        ]
    # ...