Skip to article frontmatterSkip to article content

插件体系

交易对列表和交易对列表处理器

交易对列表处理器定义了机器人应该交易的交易对列表。它们在配置设置的 pairlists 部分进行配置。

在你的配置中,你可以使用静态交易对列表(由 StaticPairList 交易对列表处理器定义)和动态交易对列表(由 VolumePairListPercentChangePairList 交易对列表处理器定义)。

此外,AgeFilterPrecisionFilterPriceFilterShuffleFilterSpreadFilterVolatilityFilter 作为交易对列表过滤器,用于移除某些交易对和/或调整它们在交易对列表中的位置。

如果使用多个交易对列表处理器,它们会被链接起来,所有交易对列表处理器的组合形成机器人用于交易和回测的最终交易对列表。交易对列表处理器按照配置的顺序执行。你可以将 StaticPairListVolumePairListProducerPairListRemotePairListMarketCapPairListPercentChangePairList 定义为起始交易对列表处理器。

非活跃市场总是会从最终交易对列表中移除。明确列入黑名单的交易对(在 pair_blacklist 配置设置中的那些)也会从最终交易对列表中移除。

交易对黑名单

交易对黑名单(通过配置中的 exchange.pair_blacklist 配置)禁止交易某些交易对。 这可以简单到排除 DOGE/BTC - 这将移除这个特定的交易对。

交易对黑名单也支持通配符(以正则表达式风格)- 所以 BNB/.* 将排除所有以 BNB 开头的交易对。 你也可以使用类似 .*DOWN/BTC.*UP/BTC 来排除杠杆代币(请检查你的交易所的交易对命名约定!)

可用的交易对列表处理器

静态交易对列表

默认情况下,使用 StaticPairList 方法,它使用配置中静态定义的交易对白名单。交易对列表也支持通配符(以正则表达式风格)- 所以 .*/BTC 将包含所有以 BTC 作为计价货币的交易对。

它使用 exchange.pair_whitelistexchange.pair_blacklist 的配置,在下面的示例中,将交易 BTC/USDT 和 ETH/USDT - 并阻止 BNB/USDT 交易。

两个 pair_*list 参数都支持正则表达式 - 所以像 .*/USDT 这样的值将启用所有不在黑名单中的交易对。

"exchange": {
    "name": "...",
    // ... 
    "pair_whitelist": [
        "BTC/USDT",
        "ETH/USDT",
        // ...
    ],
    "pair_blacklist": [
        "BNB/USDT",
        // ...
    ]
},
"pairlists": [
    {"method": "StaticPairList"}
],

默认情况下,只允许当前启用的交易对。要跳过对活跃市场的交易对验证,在 StaticPairList 配置中设置 "allow_inactive": true。这对于回测过期的交易对(如季度现货市场)很有用。

当在"后续"位置使用时(例如在 VolumePairlist 之后),'pair_whitelist' 中的所有交易对将被添加到交易对列表的末尾。

交易量交易对列表

VolumePairList 通过交易量对交易对进行排序/过滤。它根据 sort_key(只能是 quoteVolume)选择 number_assets 个顶级交易对。

当在交易对列表处理器链中的非主导位置使用时(在 StaticPairList 和其他交易对过滤器之后),VolumePairList 会考虑之前交易对列表处理器的输出,通过交易量添加其排序/选择的交易对。

当在交易对列表处理器链的主导位置使用时,pair_whitelist 配置设置将被忽略。相反,VolumePairList 将从交易所上所有具有匹配计价货币的可用市场中选择顶级资产。

refresh_period 设置允许定义交易对列表刷新的周期(以秒为单位)。默认为 1800 秒(30 分钟)。 VolumePairList 上的交易对列表缓存(refresh_period)仅适用于生成交易对列表。 过滤实例(不在列表中的第一个位置)不会应用任何缓存(除了在高级模式下缓存蜡烛图数据),并将始终使用最新数据。

VolumePairList 默认基于交易所的 ticker 数据,由 ccxt 库报告:

"pairlists": [
    {
        "method": "VolumePairList",
        "number_assets": 20,
        "sort_key": "quoteVolume",
        "min_value": 0,
        "max_value": 8000000,
        "refresh_period": 1800
    }
],

你可以用 min_value 定义最小交易量 - 这将过滤掉在指定时间范围内交易量低于指定值的交易对。 此外,你还可以用 max_value 定义最大交易量 - 这将过滤掉在指定时间范围内交易量高于指定值的交易对。

VolumePairList 高级模式

VolumePairList 也可以在高级模式下运行,以在指定的蜡烛图大小的时间范围内构建交易量。它利用交易所历史蜡烛图数据,构建典型价格(通过 (open+high+low)/3 计算)并将典型价格与每个蜡烛图的交易量相乘。总和就是给定范围内的 quoteVolume。这允许不同的场景,当使用较长范围和较大蜡烛图大小时可以获得更平滑的交易量,或者在使用短范围和小时蜡烛图时获得相反的效果。

为了方便起见,可以指定 lookback_days,这将意味着将使用 1d 蜡烛图进行回溯。在下面的示例中,交易对列表将基于过去 7 天创建:

"pairlists": [
    {
        "method": "VolumePairList",
        "number_assets": 20,
        "sort_key": "quoteVolume",
        "min_value": 0,
        "refresh_period": 86400,
        "lookback_days": 7
    }
],

可以使用更复杂的方法,通过使用 lookback_timeframe 指定蜡烛图大小和 lookback_period 指定蜡烛图数量。这个示例将基于 3 天的 1 小时蜡烛图的滚动周期构建交易量交易对:

"pairlists": [
    {
        "method": "VolumePairList",
        "number_assets": 20,
        "sort_key": "quoteVolume",
        "min_value": 0,
        "refresh_period": 3600,
        "lookback_timeframe": "1h",
        "lookback_period": 72
    }
],

百分比变化交易对列表

PercentChangePairList 根据过去 24 小时或作为高级选项一部分的任何定义时间范围内的价格百分比变化来过滤和排序交易对。这允许交易者关注那些经历了显著价格变动的资产,无论是正向还是负向。

配置选项

PercentChangePairList 在其他交易对列表处理器之后使用时,它将对这些处理器的输出进行操作。如果它是主导交易对列表处理器,它将从所有具有指定计价货币的可用市场中选择交易对。

PercentChangePairList 使用交易所的 ticker 数据,通过 ccxt 库提供:百分比变化计算为过去 24 小时内价格的变化。

从 Ticker 读取的示例配置

"pairlists": [
    {
        "method": "PercentChangePairList",
        "number_assets": 15,
        "min_value": -10,
        "max_value": 50
    }
],

在这个配置中:

  1. 根据过去 24 小时内最高价格百分比变化选择前 15 个交易对。
  2. 只考虑百分比变化在 -10%50% 之间的交易对。

从蜡烛图读取的示例配置

"pairlists": [
    {
        "method": "PercentChangePairList",
        "number_assets": 15,
        "sort_key": "percentage",
        "min_value": 0,
        "refresh_period": 3600,
        "lookback_timeframe": "1h",
        "lookback_period": 72
    }
],

这个示例通过使用 lookback_timeframe 指定蜡烛图大小和 lookback_period 指定蜡烛图数量,基于 3 天的 1 小时蜡烛图的滚动周期构建百分比变化交易对。

价格百分比变化使用以下公式计算,该公式表示当前蜡烛图收盘价与前一蜡烛图收盘价之间的百分比差异,由指定的时间框架和回溯周期定义:

百分比变化=(当前收盘价前一收盘价前一收盘价)×100\text{百分比变化} = \left(\frac{\text{当前收盘价} - \text{前一收盘价}}{\text{前一收盘价}}\right) \times 100

ProducerPairList

使用 ProducerPairList,你可以重用来自 Producer 的交易对列表,而无需在每个消费者上明确定义交易对列表。

需要 Consumer 模式 才能使这个交易对列表工作。

交易对列表将对活跃交易对进行针对当前交易所配置的检查,以避免尝试在无效市场上交易。

你可以使用可选参数 number_assets 限制交易对列表的长度。使用 "number_assets"=0 或省略此键将导致重用所有对当前设置有效的生产者交易对。

"pairlists": [
    {
        "method": "ProducerPairList",
        "number_assets": 5,
        "producer_name": "default",
    }
],

RemotePairList

它允许用户从远程服务器或 freqtrade 目录中本地存储的 json 文件获取交易对列表,实现交易对列表的动态更新和自定义。

RemotePairList 在配置设置的 pairlists 部分中定义。它使用以下配置选项:

"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",
        "save_to_file": "user_data/filename.json" 
    }
]

可选的 mode 选项指定交易对列表是否应该用作 blacklistwhitelist。默认值为 “whitelist”。

RemotePairList 配置中的可选 processing_mode 选项决定如何处理检索到的交易对列表。它可以有两个值:“filter” 或 “append”。默认值为 “filter”。

在 “filter” 模式下,检索到的交易对列表用作过滤器。只有同时存在于原始交易对列表和检索到的交易对列表中的交易对才会包含在最终交易对列表中。其他交易对被过滤掉。

在 “append” 模式下,检索到的交易对列表被添加到原始交易对列表中。两个列表中的所有交易对都包含在最终交易对列表中,无需任何过滤。

pairlist_url 选项指定远程服务器的 URL,交易对列表位于该服务器上,或本地文件的路径(如果前面加上 file:///)。这允许用户使用远程服务器或本地文件作为交易对列表的来源。

当提供有效的文件名时,save_to_file 选项将处理后的交易对列表以 JSON 格式保存到该文件中。此选项是可选的,默认情况下,交易对列表不会保存到文件中。

用户负责提供一个服务器或本地文件,该文件返回具有以下结构的 JSON 对象:

{
    "pairs": ["XRP/USDT", "ETH/USDT", "LTC/USDT"],
    "refresh_period": 1800
}

pairs 属性应包含机器人要使用的交易对字符串列表。refresh_period 属性是可选的,指定交易对列表在被刷新之前应该缓存的秒数。

可选的 keep_pairlist_on_failure 指定如果远程服务器无法访问或返回错误,是否应该使用之前接收到的交易对列表。默认值为 true。

可选的 read_timeout 指定等待远程源响应的最长时间(以秒为单位),默认值为 60。

可选的 bearer_token 将包含在请求的 Authorization Header 中。

MarketCapPairList

MarketCapPairList 通过 CoinGecko 的市值排名对交易对进行排序/过滤。返回的交易对列表将根据其市值排名进行排序。

"pairlists": [
    {
        "method": "MarketCapPairList",
        "number_assets": 20,
        "max_rank": 50,
        "refresh_period": 86400,
        "categories": ["layer-1"]
    }
]

number_assets 定义交易对列表返回的最大交易对数量。max_rank 将确定用于创建/过滤交易对列表的最大排名。预计在顶级 max_rank 市值中的一些代币不会包含在最终交易对列表中,因为并非所有交易对都会在你偏好的市场/质押/交易所组合中有活跃的交易对。 虽然支持使用大于 250max_rank,但不建议这样做,因为它会导致对 CoinGecko 的多次 API 调用,这可能导致速率限制问题。

refresh_period 设置定义市值排名数据刷新的间隔(以秒为单位)。默认为 86,400 秒(1 天)。交易对列表缓存(refresh_period)适用于生成交易对列表(当在列表中的第一个位置时)和过滤实例(当不在列表中的第一个位置时)。

categories 设置指定要从哪些 coingecko 类别 中选择代币。默认为空列表 [],表示不应用类别过滤。 如果选择了错误的类别字符串,插件将打印 CoinGecko 的可用类别并失败。类别应该是类别的 ID,例如,对于 https://www.coingecko.com/en/categories/layer-1,类别 ID 将是 layer-1。你可以传递多个类别,如 ["layer-1", "meme-token"] 来从多个类别中选择。

1000PEPE/USDTKPEPE/USDT:USDT 这样的币种是在尽力而为的基础上检测的,使用前缀 1000K 来识别它们。

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 值增加),白名单将恢复正常状态。

当使用多个交易对列表过滤器时,建议将此过滤器放在主要交易对列表之后的第二个位置,这样当交易槽位已满时,机器人就不必为其余过滤器下载数据。

OffsetFilter

通过给定的 offset 值偏移传入的交易对列表。

例如,它可以与 VolumeFilter 结合使用,以移除前 X 个交易量交易对。或者将较大的交易对列表分成两个机器人实例。

示例,从交易对列表中移除前 10 个交易对,并获取接下来的 20 个(获取初始列表的第 10-30 项):

"pairlists": [
    // ...
    {
        "method": "OffsetFilter",
        "offset": 10,
        "number_assets": 20
    }
],

PerformanceFilter

根据过去的交易表现对交易对进行排序,如下:

  1. 正向表现。
  2. 尚未有已关闭的交易。
  3. 负向表现。

交易数量用作平局决胜。

你可以使用 minutes 参数只考虑过去 X 分钟的表现(滚动窗口)。不定义此参数(或将其设置为 0)将使用所有时间表现。

可选的 min_profit(作为比率 -> 设置为 0.01 对应 1%)参数定义交易对必须具有的最小利润才能被考虑。低于此水平的交易对将被过滤掉。强烈建议不要在没有 minutes 的情况下使用此参数,因为它可能导致交易对列表为空且无法恢复。

"pairlists": [
    // ...
    {
        "method": "PerformanceFilter",
        "minutes": 1440,  // 滚动 24h
        "min_profit": 0.01  // 最小利润 1%
    }
],

由于此过滤器使用机器人的过去表现,它将有一个启动期 - 应该只在机器人在数据库中有几百笔交易后使用。

PrecisionFilter

过滤低价值代币,这些代币不允许设置止损。

具体来说,如果由于交易所的精度舍入导致止损价格变化 1% 或更多,即 rounded(stop_price) <= rounded(stop_price * 0.99),交易对将被列入黑名单。这个想法是避免价值非常接近其较低交易边界的代币,不允许设置适当的止损。

PriceFilter

PriceFilter 允许按价格过滤交易对。目前支持以下价格过滤器:

min_price 设置移除价格低于指定价格的交易对。如果你想避免交易非常低价的交易对,这很有用。此选项默认禁用,只有在设置为 > 0 时才会应用。

max_price 设置移除价格高于指定价格的交易对。如果你只想交易低价交易对,这很有用。此选项默认禁用,只有在设置为 > 0 时才会应用。

max_value 设置移除最小价值变化高于指定值的交易对。这在交易所有限制不平衡时很有用。例如,如果 step-size = 1(所以你只能买入 1、2 或 3,但不能买入 1.1 个代币)- 而价格相当高(如 20$),因为代币自上次限制调整以来急剧上涨。

由于上述原因,你只能买入 20$ 或 40$ - 但不能买入 25$。在从接收货币中扣除费用的交易所(如 binance)上 - 这可能导致高价值代币/金额无法出售,因为金额略低于限制。

low_price_ratio 设置移除价格上涨 1 个价格单位(点)高于 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.00000011PriceFilter 来过滤掉这个交易对。

ShuffleFilter

随机化交易对列表中的交易对。当你希望所有交易对具有相同的优先级时,它可以用于防止机器人更频繁地交易某些交易对。

默认情况下,ShuffleFilter 将每个蜡烛图随机化一次交易对。要在每次迭代时随机化,将 "shuffle_frequency" 设置为 "iteration" 而不是默认的 "candle"

    {
        "method": "ShuffleFilter", 
        "shuffle_frequency": "candle",
        "seed": 42
    }

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
    }
]

添加 "sort_direction": "asc""sort_direction": "desc" 为此交易对列表启用排序。

VolatilityFilter

波动率是交易对随时间的历史变化程度,通过对数日收益的标准差来衡量。

假设收益呈正态分布,尽管实际分布可能不同。在正态分布中,68% 的观察值落在一个标准差内,95% 的观察值落在两个标准差内。假设波动率为 0.05 意味着在 30 天中的 20 天,预期收益预计小于 5%(一个标准差)。

波动率是预期收益偏差的正比率,可以大于 1.00。请参考维基百科对 volatility 的定义。

此过滤器移除在 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
    }
]

添加 "sort_direction": "asc""sort_direction": "desc" 为此交易对列表启用排序模式。

交易对列表处理器的完整示例

下面的示例将 BNB/BTC 列入黑名单,使用 VolumePairList 选择 20 个资产,按 quoteVolume 排序交易对,并应用 PrecisionFilterPriceFilter,过滤掉所有 1 个价格单位 > 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}
],

保护机制

保护机制通过暂时停止对某个交易对或所有交易对的交易,来保护你的策略免受意外事件和市场条件的影响。 所有保护结束时间都会向上取整到下一个蜡烛图,以避免在蜡烛图内突然、意外的买入。

可用的保护机制

所有保护机制的通用设置

参数描述
method要使用的保护机制名称。
数据类型: 字符串,从可用保护机制中选择
stop_duration_candles锁定应该持续多少个蜡烛图?
数据类型: 正整数(以蜡烛图为单位)
stop_duration保护机制应该锁定多少分钟。
不能与 stop_duration_candles 一起使用。
数据类型: 浮点数(以分钟为单位)
lookback_period_candles只考虑在最近 lookback_period_candles 个蜡烛图内完成的交易。某些保护机制可能会忽略此设置。
数据类型: 正整数(以蜡烛图为单位)。
lookback_period只考虑在 当前时间 - lookback_period 之后完成的交易。
不能与 lookback_period_candles 一起使用。
某些保护机制可能会忽略此设置。
数据类型: 浮点数(以分钟为单位)
trade_limit所需的最小交易数量(并非所有保护机制都使用)。
数据类型: 正整数
unlock_at定期解锁交易的时间(并非所有保护机制都使用)。
数据类型: 字符串
输入格式: “HH:MM”(24小时制)

Stoploss Guard

StoplossGuard 选择在 lookback_period 分钟内(或使用 lookback_period_candles 时以蜡烛图为单位)的所有交易。 如果有 trade_limit 或更多交易导致止损,交易将停止 stop_duration 分钟(或使用 stop_duration_candles 时以蜡烛图为单位,或使用 unlock_at 时直到设定时间)。

这适用于所有交易对,除非 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
        }
    ]

MaxDrawdown

MaxDrawdown 使用 lookback_period 分钟内(或使用 lookback_period_candles 时以蜡烛图为单位)的所有交易来确定最大回撤。如果回撤低于 max_allowed_drawdown,交易将在最后一次交易后停止 stop_duration 分钟(或使用 stop_duration_candles 时以蜡烛图为单位)- 假设机器人需要一些时间让市场恢复。

下面的示例在考虑所有交易对的情况下,如果在最近 48 个蜡烛图内至少有 trade_limit 笔交易导致最大回撤 > 20%,则停止交易 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
        },
    ]

Low Profit Pairs

LowProfitPairs 使用交易对在 lookback_period 分钟内(或使用 lookback_period_candles 时以蜡烛图为单位)的所有交易来确定总体利润率。 如果该比率低于 required_profit,该交易对将被锁定 stop_duration 分钟(或使用 stop_duration_candles 时以蜡烛图为单位,或使用 unlock_at 时直到设定时间)。

对于期货机器人,设置 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,
        }
    ]

Cooldown Period

CooldownPeriod 在退出后锁定交易对 stop_duration 分钟(或使用 stop_duration_candles 时以蜡烛图为单位,或使用 unlock_at 时直到设定时间),避免在 stop_duration 分钟内重新进入该交易对。

下面的示例将在关闭交易后停止交易该交易对 2 个蜡烛图,让该交易对"冷却"。

@property
def protections(self):
    return  [
        {
            "method": "CooldownPeriod",
            "stop_duration_candles": 2
        }
    ]

保护机制的完整示例

所有保护机制都可以随意组合,也可以使用不同的参数,为表现不佳的交易对创建一个递增的防护墙。 所有保护机制都按照定义的顺序进行评估。

下面的示例假设时间框架为 1 小时:

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