交易对列表和交易对列表处理器¶
交易对列表处理器定义了机器人应该交易的交易对列表。它们在配置设置的 pairlists
部分进行配置。
在你的配置中,你可以使用静态交易对列表(由 StaticPairList
交易对列表处理器定义)和动态交易对列表(由 VolumePairList
和 PercentChangePairList
交易对列表处理器定义)。
此外,AgeFilter
、PrecisionFilter
、PriceFilter
、ShuffleFilter
、SpreadFilter
和 VolatilityFilter
作为交易对列表过滤器,用于移除某些交易对和/或调整它们在交易对列表中的位置。
如果使用多个交易对列表处理器,它们会被链接起来,所有交易对列表处理器的组合形成机器人用于交易和回测的最终交易对列表。交易对列表处理器按照配置的顺序执行。你可以将 StaticPairList
、VolumePairList
、ProducerPairList
、RemotePairList
、MarketCapPairList
或 PercentChangePairList
定义为起始交易对列表处理器。
非活跃市场总是会从最终交易对列表中移除。明确列入黑名单的交易对(在 pair_blacklist
配置设置中的那些)也会从最终交易对列表中移除。
交易对黑名单¶
交易对黑名单(通过配置中的 exchange.pair_blacklist
配置)禁止交易某些交易对。
这可以简单到排除 DOGE/BTC
- 这将移除这个特定的交易对。
交易对黑名单也支持通配符(以正则表达式风格)- 所以 BNB/.*
将排除所有以 BNB 开头的交易对。
你也可以使用类似 .*DOWN/BTC
或 .*UP/BTC
来排除杠杆代币(请检查你的交易所的交易对命名约定!)
可用的交易对列表处理器¶
StaticPairList
(默认,如果未配置其他)VolumePairList
PercentChangePairList
ProducerPairList
RemotePairList
MarketCapPairList
AgeFilter
FullTradesFilter
OffsetFilter
PerformanceFilter
PrecisionFilter
PriceFilter
ShuffleFilter
SpreadFilter
RangeStabilityFilter
VolatilityFilter
静态交易对列表¶
默认情况下,使用 StaticPairList
方法,它使用配置中静态定义的交易对白名单。交易对列表也支持通配符(以正则表达式风格)- 所以 .*/BTC
将包含所有以 BTC 作为计价货币的交易对。
它使用 exchange.pair_whitelist
和 exchange.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
库报告:
quoteVolume
是过去 24 小时内交易的计价(质押)货币数量(买入或卖出)。
"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
小时或作为高级选项一部分的任何定义时间范围内的价格百分比变化来过滤和排序交易对。这允许交易者关注那些经历了显著价格变动的资产,无论是正向还是负向。
配置选项
number_assets
:指定基于24
小时百分比变化选择的前几个交易对数量。min_value
:设置最小百分比变化阈值。百分比变化低于此值的交易对将被过滤掉。max_value
:设置最大百分比变化阈值。百分比变化高于此值的交易对将被过滤掉。sort_direction
:指定基于百分比变化排序交易对的方式。接受两个值:asc
表示升序,desc
表示降序。refresh_period
:定义交易对列表刷新的间隔(以秒为单位)。默认为1800
秒(30
分钟)。lookback_days
:回溯的天数。当选择lookback_days
时,lookback_timeframe
默认为1
天。lookback_timeframe
:用于回溯周期的时间框架。lookback_period
:回溯的周期数量。
当 PercentChangePairList
在其他交易对列表处理器之后使用时,它将对这些处理器的输出进行操作。如果它是主导交易对列表处理器,它将从所有具有指定计价货币的可用市场中选择交易对。
PercentChangePairList
使用交易所的 ticker 数据,通过 ccxt
库提供:百分比变化计算为过去 24 小时内价格的变化。
从 Ticker 读取的示例配置
"pairlists": [
{
"method": "PercentChangePairList",
"number_assets": 15,
"min_value": -10,
"max_value": 50
}
],
在这个配置中:
- 根据过去
24
小时内最高价格百分比变化选择前15
个交易对。 - 只考虑百分比变化在
-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 小时蜡烛图的滚动周期构建百分比变化交易对。
价格百分比变化使用以下公式计算,该公式表示当前蜡烛图收盘价与前一蜡烛图收盘价之间的百分比差异,由指定的时间框架和回溯周期定义:
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
选项指定交易对列表是否应该用作 blacklist
或 whitelist
。默认值为 “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
市值中的一些代币不会包含在最终交易对列表中,因为并非所有交易对都会在你偏好的市场/质押/交易所组合中有活跃的交易对。
虽然支持使用大于 250
的 max_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/USDT
或 KPEPE/USDT:USDT
这样的币种是在尽力而为的基础上检测的,使用前缀 1000
和 K
来识别它们。
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¶
根据过去的交易表现对交易对进行排序,如下:
- 正向表现。
- 尚未有已关闭的交易。
- 负向表现。
交易数量用作平局决胜。
你可以使用 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
max_price
max_value
low_price_ratio
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_price
、max_price
或 low_price_ratio
设置中的至少一个。
计算示例:
SHITCOIN/BTC
的最小价格精度为 8
位小数。如果其价格为 0.00000011
- 一个价格单位以上将是 0.00000012
,这比前一个价格值高约 9%
。你可以通过使用 low_price_ratio
设置为 0.09(9%)
或 min_price
设置为 0.00000011
的 PriceFilter
来过滤掉这个交易对。
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
排序交易对,并应用 PrecisionFilter
和 PriceFilter
,过滤掉所有 1 个价格单位 > 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}
],
保护机制¶
保护机制通过暂时停止对某个交易对或所有交易对的交易,来保护你的策略免受意外事件和市场条件的影响。 所有保护结束时间都会向上取整到下一个蜡烛图,以避免在蜡烛图内突然、意外的买入。
可用的保护机制¶
StoplossGuard
如果在特定时间窗口内发生一定数量的止损,则停止交易。MaxDrawdown
如果达到最大回撤,则停止交易。LowProfitPairs
锁定低利润的交易对CooldownPeriod
在卖出交易后不要立即进入新交易。
所有保护机制的通用设置¶
参数 | 描述 |
---|---|
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 小时:
- 在卖出后锁定每个交易对额外 5 个蜡烛图(
CooldownPeriod
),给其他交易对一个被成交的机会。 - 如果在最近 2 天(
48 * 1h 蜡烛图
)内有 20 笔交易导致最大回撤超过 20%,则停止交易 4 小时(4 * 1h 蜡烛图
)。(MaxDrawdown
)。 - 如果在 1 天(
24 * 1h 蜡烛图
)限制内所有交易对发生超过 4 次止损,则停止交易(StoplossGuard
)。 - 锁定在最近 6 小时(
6 * 1h 蜡烛图
)内有 2 笔交易且总利润率低于 0.02(<2%)的所有交易对(LowProfitPairs
)。 - 锁定在最近 24 小时(
24 * 1h 蜡烛图
)内利润低于 0.01(<1%)且至少有 4 笔交易的所有交易对 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
}
]
# ...