配置机器人¶
Freqtrade 有很多可配置的功能和可能性。 默认情况下,这些设置是通过配置文件进行配置的(见下文)。
Freqtrade 配置文件¶
机器人在运行过程中使用一组配置参数,这些参数一起构成了机器人的配置。通常,它从一个文件(Freqtrade 配置文件)中读取其配置。
默认情况下,机器人从当前工作目录中的 config.json
文件加载配置。
您可以使用 -c/--config
命令行选项指定机器人使用的不同配置文件。
如果您使用了快速入门方法来安装机器人,安装脚本应该已经为您创建了默认配置文件(config.json
)。
如果默认配置文件没有被创建,我们推荐使用 freqtrade new-config --config config.json
命令来生成一个基本的配置文件。
Freqtrade 配置文件的格式应为 JSON。
除了标准的 JSON 语法,您还可以在配置文件中使用单行的 // ...
和多行的 /* ... */
注释,以及在参数列表中使用尾逗号。如果你对JSON格式不熟悉,不用担心 -- 只需要用你喜欢的编辑器打开配置文件,对你需要的参数进行更改,保存修改,最后重新启动机器人,或者如果之前已经停止了,再次运行它以应用你所做的配置更改。机器人在启动时会验证配置文件的语法,并在编辑时发现错误时给出警告,指出有问题的行。
环境变量¶
通过环境变量设置Freqtrade配置选项。 这比配置或策略中对应的值具有更高的优先级。
环境变量必须以 FREQTRADE__
开头,以加载到freqtrade配置中。
__
用作层级分隔符,所以使用的格式应与 FREQTRADE__{section}__{key}
一致。
因此 - 定义为 export FREQTRADE__STAKE_AMOUNT=200
的环境变量将导致 {stake_amount: 200}
。
一个更复杂的例子可能是 export FREQTRADE__EXCHANGE__KEY=<yourExchangeKey>
,用于保持你的交易所密钥保密。这将把值移动到配置文件的 exchange.key
部分。
使用此方案,所有配置设置也将作为环境变量可用。
请注意,环境变量将覆盖配置中对应的设置,但命令行参数始终优先。
常见示例:
FREQTRADE__TELEGRAM__CHAT_ID=<telegramchatid>
FREQTRADE__TELEGRAM__TOKEN=<telegramToken>
FREQTRADE__EXCHANGE__KEY=<yourExchangeKey>
FREQTRADE__EXCHANGE__SECRET=<yourExchangeSecret>
注意
检测到的环境变量在启动时会被记录 - 所以如果你找不到值为什么不符合你的预期,先确认它是否从环境变量中加载。
多个配置文件¶
可以通过指定和使用多个配置文件来让机器人或者机器人从进程的标准输入流中读取其配置参数。
您可以在add_config_files
中指定额外的配置文件。在此参数中指定的文件将被加载并与初始配置文件合并。这些文件相对于初始配置文件进行解析。
这类似于使用多个--config
参数,但使用起来更简单,因为您不必为所有命令指定所有文件。
使用多个配置文件保护秘密
您可以使用第二个包含秘密的配置文件。这样,您可以共享您的“主”配置文件,同时将API密钥保留给自己。
第二个文件应该只指定您打算覆盖的内容。
如果一个键在多个配置中出现,则“最后指定的配置”将获胜(在上面的示例中是config-private.json
)。
对于一次性命令,您还可以使用下面的语法通过指定多个“--config”参数。
freqtrade trade --config user_data/config1.json --config user_data/config-private.json <...>
下面的内容与上面的示例等效——但是在配置中拥有2个配置文件,方便重用。
"add_config_files": [
"config1.json",
"config-private.json"
]
freqtrade trade --config user_data/config.json <...>
配置冲突处理
如果config.json
和config-import.json
中都存在相同的配置设置,则父级配置将获胜。
在下面的情况中,合并后的max_open_trades
将为3,因为可复用的“导入”配置覆盖了这个键。
{
"max_open_trades": 3,
"stake_currency": "USDT",
"add_config_files": [
"config-import.json"
]
}
{
"max_open_trades": 10,
"stake_amount": "unlimited",
}
合并后的配置如下:
``` json title="结果"
{
"max_open_trades": 3,
"stake_currency": "USDT",
"stake_amount": "无限"
}
```
如果add_config_files
字段中有多个文件,则假定它们在同一级别上,后面的配置将会覆盖之前的配置(除非父级已定义过该键)。
配置参数¶
下表列出了所有可用的配置参数。
Freqtrade还可以通过命令行参数加载许多选项(请查看命令--help
的输出以获取详细信息)。
配置选项优先级¶
所有选项的优先级如下:- CLI参数会覆盖其他选项 - 环境变量 - 配置文件按顺序使用(最后一个文件优先)并覆盖策略配置。 - 只有在配置文件或命令行参数中未设置时,才使用策略配置。下表中标有策略覆盖的选项。
参数表¶
Required标记为必填参数,这意味着必须通过其中一种方式进行设置。
参数 | 描述 |
---|---|
max_open_trades |
必填。您的机器人允许的开放交易数量。每对货币只能有一笔开放交易,因此您的货币对列表的长度也是可能的限制之一。如果设置为-1,则忽略该参数(即无限开放交易数量,受限于货币对列表)。更多信息请参阅下文。策略覆盖。 数据类型:正整数或-1。 |
stake_currency |
必填。用于交易的加密货币。 数据类型:字符串 |
stake_amount |
必填。机器人每次交易将使用的加密货币数量。将其设置为"unlimited" 以允许机器人使用所有可用余额。更多信息请参阅下文。 数据类型:正浮点数或 "unlimited" 。 |
tradable_balance_ratio |
机器人允许交易的总账户余额的比例。更多信息请参阅下文。 默认为 0.99 (99%)。数据类型:介于 0.1 和1.0 之间的正浮点数。 |
available_capital |
机器人的可用起始资金。在同一交易所账户上运行多个机器人时有用。更多信息请参阅下文。 数据类型:正浮点数。 |
amend_last_stake_amount |
必要时使用减少的最后下注金额。更多信息请参阅下文。 默认为 false 。 数据类型:布尔值 |
last_stake_amount_min_ratio |
定义必须保留并执行的最小下注金额。仅适用于当减少last_stake_amount (即如果将amend_last_stake_amount 设置为true )时的最后下注金额。更多信息请参阅下文。 默认为 0.5 。 数据类型:浮点数(作为比率) |
amount_reserve_percent |
在最小货币对下注金额中保留一些金额。计算最小货币对下注金额时,机器人将保留amount_reserve_percent 加上止损值,以避免可能的交易拒绝。 默认为 0.05 (5%)。 数据类型:正浮点数(作为比率)。 |
timeframe |
要使用的时间框架(例如1m ,5m ,15m ,30m ,1h ...)。通常在配置中缺失,而在策略中指定。策略覆盖。 数据类型:字符串 |
fiat_display_currency |
用于显示利润的法定货币。更多信息请参阅下文。 数据类型:字符串 |
dry_run |
必填。定义是否将机器人置于干扰运行或生产模式。 默认为 true 。 数据类型:布尔值 |
dry_run_wallet |
为在干扰运行模式下运行的机器人使用的模拟钱包中的抵押货币的起始金额。 默认为 1000 。 数据类型:浮点数 |
cancel_open_orders_on_exit |
当发出/stop RPC命令时,按下Ctrl+C 或机器人意外终止时取消未填充和部分填充的开放订单。如果设置为true ,则允许您使用/stop 取消未填充和部分填充的订单,在市场崩盘时非常有用。它不影响开放头寸。 默认为 false 。 数据类型:布尔值 |
process_only_new_candles |
仅在新蜡烛到达时处理指标。如果为false ,每个循环都会填充指标,这意味着同一根蜡烛会被处理多次,从而创建系统负载,但如果您的策略仅依赖于刻度数据而不仅仅是蜡烛数据,则可能非常有用。策略覆盖。 默认为 true 。 数据类型:布尔值 |
minimal_roi |
必填。设置机器人用于退出交易的阈值。更多信息请参阅下文。策略覆盖。 数据类型:字典 |
stoploss |
必填。机器人使用的止损比例值。有关详细信息,请参阅止损文档。策略覆盖。 数据类型:浮点数(作为比率) |
trailing_stop |
启用动态止损(基于配置或策略文件中的stoploss )。有关详细信息,请参阅止损文档。策略覆盖。 数据类型:布尔值 |
trailing_stop_positive |
在达到利润时更改止损。有关详细信息,请参阅止损文档。策略覆盖。 数据类型:浮点数 |
trailing_stop_positive_offset |
开始应用trailing_stop_positive 的偏移量。应为正百分比值。有关详细信息,请参阅止损文档。策略覆盖。 默认为 0.0 (无偏移)。 数据类型:浮点数 |
trailing_only_offset_is_reached |
仅在达到偏移量时应用动态止损。止损文档。策略覆盖。 默认为 false 。 数据类型:布尔值 |
fee |
在回测/干扰运行期间使用的交易手续费。通常不需要配置,这会导致freqtrade使用交易所的默认费率。以比率形式提供费用(例如0.001 = 0.1%)。每次交易买入时会收取一次手续费,每次交易卖出时也会收取一次手续费。 数据类型:浮点数(作为比率) |
futures_funding_rate |
当交易所没有可用的历史融资利率时要使用的用户指定的融资利率。这不会覆盖实际的历史利率。除非您测试特定的货币并了解融资利率将如何影响freqtrade的利润计算,否则建议将其设置为0。更多信息在这里 默认为 None 。数据类型:*浮点数 |
trading_mode |
指定您想要进行常规交易、使用杠杆进行交易,还是进行基于匹配加密货币价格的合约交易。 杠杆交易文档. 默认为 "spot" 。 数据类型:字符串 |
margin_mode |
在进行杠杆交易时,确定交易者拥有的抵押品是否将被共享或隔离到每个交易对 杠杆交易文档。 数据类型:字符串 |
liquidation_buffer |
指定从清算价到止损价之间放置多大的安全净空以防止持仓达到清算价 杠杆交易文档。 默认为 0.05 (5%)。 数据类型:浮点数 |
未填充超时 | |
unfilledtimeout.entry |
必填。机器人等待未填充的入场订单完成的时间(以分钟或秒为单位),之后订单将被取消,并以当前(新)价格重复,只要有信号存在。策略覆盖。 数据类型:整数 |
unfilledtimeout.exit |
必填。机器人等待未填充的退出订单完成的时间(以分钟或秒为单位),之后订单将被取消,并以当前(新)价格重复,只要有信号存在。策略覆盖。 数据类型:整数 |
unfilledtimeout.unit |
在未填充超时设置中使用的单位。注意:如果将unfilledtimeout.unit 设置为"seconds",则internals.process_throttle_secs 必须小于或等于超时值 策略覆盖。 默认为 "minutes" 。 数据类型:字符串 |
unfilledtimeout.exit_timeout_count |
退出订单超时次数。达到此次数的超时后,将触发紧急退出。设置为0以禁用并允许无限的订单取消。策略覆盖。 默认为 0 。 数据类型:整数 |
定价 | |
entry_pricing.price_side |
选择机器人应查看的价差方向以获取入场价。更多信息请参阅下文。 默认为 "same" . 数据类型:字符串( ask 、bid 、same 或other 之一)。 |
entry_pricing.price_last_balance |
必填。插入竞标价格。更多信息请参阅下方入场价格(禁用订单簿)。 |
entry_pricing.use_order_book |
启用使用订单簿入场的记录。 默认为 true 。数据类型:布尔值 |
entry_pricing.order_book_top |
机器人将使用订单簿“price_side”中的前N个价格来进入交易。例如,值为2将允许机器人选择订单簿入场中的第2个入场价格。 默认为 1 。 数据类型:正整数 |
entry_pricing. check_depth_of_market.enabled |
如果订单簿中的买单和卖单之间的差异满足,则不要进场。检查市场深度。 默认为 false 。 数据类型:布尔值 |
entry_pricing. check_depth_of_market.bids_to_ask_delta |
订单簿中找到的买单和卖单之间的差异比例。小于1的值表示卖单规模更大,而大于1的值表示买单规模更大。 检查市场深度。 默认为 0 。 数据类型:浮点数(作为比率) |
exit_pricing.price_side |
选择机器人应查看的价差方向以获取退出价。更多信息请参阅下文。 默认为 "same" . 数据类型:字符串( ask 、bid 、same 或other 之一)。 |
exit_pricing.price_last_balance |
插值出场价格。更多信息请参阅下方不使用订单薄启用的出场价格。 |
exit_pricing.use_order_book |
启用使用订单薄出口退出开放交易。 默认为 true 。数据类型:布尔值 |
exit_pricing.order_book_top |
机器人将使用订单薄“price_side”中的前N个价格进行出口。例如,值为2将允许机器人在订单薄出口中选择第2个卖方价格。 默认为 1 。 数据类型:正整数 |
custom_price_max_distance_ratio |
配置当前价格和自定义入场或出口价格之间的最大距离比率。 默认为 0.02 (2%)。数据类型:正浮点数 |
待办事项 | |
use_exit_signal |
除了minimal_roi 之外,还使用策略产生的出口信号。将其设置为false将禁用“exit_long”和“exit_short”列的使用。对其他退出方法(止损、ROI、回调)没有影响。策略覆盖。 默认为 true 。 数据类型:布尔值 |
exit_profit_only |
在达到exit_profit_offset 之前,等待机器人达到exit_profit_offset 之前不进行出口决策。策略覆盖。 默认为 false 。 数据类型:布尔值 |
exit_profit_offset |
仅在此值以上时,退出信号有效。仅在exit_profit_only=True 的情况下生效。策略覆盖。 默认为 0.0 。 数据类型:浮点数(作为比率) |
ignore_roi_if_entry_signal |
如果入场信号仍然有效,则不要退出。此设置优先于minimal_roi 和use_exit_signal 。策略覆盖。 默认为 false 。 数据类型:布尔值 |
ignore_buying_expired_candle_after |
指定购买信号不再使用的秒数。 数据类型:整数 |
order_types |
根据操作("entry" ,"exit" ,"stoploss" ,"stoploss_on_exchange" )配置订单类型。更多信息请参见下文。策略覆盖。数据类型:字典 |
order_time_in_force |
配置入场和出场订单的有效时间。更多信息请参阅下文。策略覆盖。 数据类型:字典 |
position_adjustment_enable |
启用策略对位置进行调整(附加买入或卖出)。更多信息在这里。策略覆盖。 默认为 false 。数据类型:布尔值 |
max_entry_position_adjustment |
开放交易的最大附加订单数量。多于第一笔入场订单的其他订单设置为-1 。更多信息在这里。策略覆盖。 默认为 -1 。数据类型:正整数或-1 |
交易所 | |
exchange.name |
必填。要使用的交易所类的名称。下面的列表。 数据类型:字符串 |
exchange.key |
要用于交易所的API密钥。仅在生产模式下才需要。 请保密,不要公开。 数据类型:字符串 |
exchange.secret |
要用于交易所的API密钥。仅在生产模式下才需要。 请保密,不要公开。 数据类型:字符串 |
exchange.password |
要用于交易所的API密码。仅在生产模式下和使用需要密码的交易所时需要。 请保密,不要公开。 数据类型:字符串 |
exchange.uid |
要用于交易所的API uid。仅在生产模式下和需要uid用于API请求的交易所时需要。 请保密,不要公开。 数据类型:字符串 |
exchange.pair_whitelist |
用于交易和在回测期间检查潜在交易的机器人使用的货币对列表。支持正则表达式货币对,如.*/BTC 。VolumePairList不使用此设置。更多信息。 数据类型:列表 |
exchange.pair_blacklist |
机器人绝对不能交易的货币对列表。更多信息。 数据类型:列表 |
exchange.ccxt_config |
传递给ccxt实例(同步和异步)的附加CCXT参数。通常这是附加ccxt配置的正确位置。参数可能因交易所而异,并在ccxt文档中有记录。请勿在此处添加交易所机密信息(请改用专用字段),因为可能会包含在日志中。 数据类型:字典 |
exchange.ccxt_sync_config |
传递给常规(同步)ccxt实例的附加CCXT参数。参数可能因交易所而异,并在ccxt文档中有记录。 数据类型:字典 |
exchange.ccxt_async_config |
传递给异步ccxt实例的附加CCXT参数。参数可能因交易所而异,并在ccxt文档中有记录。 数据类型:字典 |
exchange.markets_refresh_interval |
要重新加载市场的时间间隔(分钟)。 默认为 60 分钟。 数据类型:正整数 |
exchange.skip_pair_validation |
在启动时跳过货币对列表验证。 默认为 false 数据类型:布尔值 |
exchange.skip_open_order_update |
在启动时跳过打开订单更新,如果交易所出现问题。仅在实时条件下才相关。 默认为 false 数据类型:布尔值 |
exchange.unknown_fee_rate |
在计算交易费用时使用的回退值。对于具有非可交易货币费用的交易所,这可能会很有用。此处提供的值将与“费用成本”相乘。 默认为 None 数据类型:*浮点数 |
exchange.log_responses |
记录相关的交易所响应。仅用于调试模式 - 谨慎使用。 默认为 false 数据类型:布尔值 |
experimental.block_bad_exchanges |
阻止已知无法使用freqtrade的交易所。除非您要测试该交易所是否已可用,否则请将其保持默认。 默认为 true . 数据类型:布尔值 |
插件 | |
edge.* |
请参阅边缘配置文档以获取所有可能配置选项的详细解释。 |
pairlists |
定义一个或多个要使用的货币对列表。更多信息。 默认为 StaticPairList 。 数据类型:字典列表 |
protections |
定义一个或多个保护措施。更多信息。 数据类型:字典列表 |
Telegram | |
telegram.enabled |
启用Telegram的使用。 数据类型:布尔值 |
telegram.token |
您的Telegram机器人令牌。仅当telegram.enabled 为true 时才需要。 请保密,不要公开。 数据类型:字符串 |
telegram.chat_id |
您的个人Telegram帐户ID。仅当telegram.enabled 为true 时才需要。 请保密,不要公开。 数据类型:字符串 |
telegram.balance_dust_level |
灰尘级别(以抵押货币计)-余额低于此级别的货币将不会在/balance 中显示。 数据类型:浮点数 |
telegram.reload |
允许在Telegram消息上使用“reload”按钮。 默认为 true 。数据类型:*布尔值 |
telegram.notification_settings.* |
详细的通知设置。有关详细信息,请参阅telegram文档。 数据类型:字典 |
telegram.allow_custom_messages |
启用通过dataprovider.send_msg()函数从策略发送Telegram消息。 数据类型:布尔值 |
Webhook | |
webhook.enabled |
启用Webhook通知的使用 数据类型:布尔值 |
webhook.url |
Webhook的URL。仅当webhook.enabled 为true 时才需要。有关更多详细信息,请参阅Webhook文档。 数据类型:字符串 |
webhook.entry |
输入时要发送的有效负载。仅当webhook.enabled 为true 时才需要。有关更多详细信息,请参阅Webhook文档。 数据类型:字符串 |
webhook.entry_cancel |
输入订单取消时要发送的有效负载。仅当webhook.enabled 为true 时才需要。有关更多详细信息,请参阅Webhook文档。 数据类型:字符串 |
webhook.entry_fill |
输入订单填充时要发送的有效负载。仅当webhook.enabled 为true 时才需要。有关更多详细信息,请参阅Webhook文档。 数据类型:字符串 |
webhook.exit |
退出时要发送的有效负载。仅当webhook.enabled 为true 时才需要。有关更多详细信息,请参阅Webhook文档。 数据类型:字符串 |
webhook.exit_cancel |
退出订单取消时要发送的有效负载。仅当webhook.enabled 为true 时才需要。有关更多详细信息,请参阅Webhook文档。 数据类型:字符串 |
webhook.exit_fill |
退出订单填充时要发送的有效负载。仅当webhook.enabled 为true 时才需要。有关更多详细信息,请参阅Webhook文档。 数据类型:字符串 |
webhook.status |
在状态调用上发送的有效负载。仅当webhook.enabled 为true 时才需要。有关更多详细信息,请参阅Webhook文档。 数据类型:字符串 |
webhook.allow_custom_messages |
启用通过dataprovider.send_msg()函数从策略发送Webhook消息。 数据类型:布尔值 |
Rest API / FreqUI / Producer-Consumer | |
api_server.enabled |
启用API服务器的使用。有关更多详细信息,请参阅API服务器文档。 数据类型:布尔值 |
api_server.listen_ip_address |
绑定IP地址。有关更多详细信息,请参阅API服务器文档。 数据类型:IPv4 |
api_server.listen_port |
绑定端口。有关更多详细信息,请参阅API服务器文档。 数据类型:介于1024和65535之间的整数 |
api_server.verbosity |
日志详细程度。info 将打印所有RPC调用,而error 仅会显示错误。 数据类型:枚举, info 或error 。默认为info 。 |
api_server.username |
API服务器的用户名。有关更多详细信息,请参阅API服务器文档。 请保密,不要公开。 数据类型:字符串 |
api_server.password |
API服务器的密码。有关更多详细信息,请参阅API服务器文档。 请保密,不要公开。 数据类型:字符串 |
api_server.ws_token |
消息WebSocket的API令牌。有关更多详细信息,请参阅API服务器文档。 请保密,不要公开。 数据类型:字符串 |
bot_name |
机器人的名称。通过API传递给客户端 - 可以显示用于区分/命名机器人。 默认为 freqtrade 数据类型:字符串 |
external_message_consumer |
启用生产者/消费者模式以获取更多详细信息。 数据类型:字典 |
其他 | |
initial_state |
定义初始应用程序状态。如果设置为stopped,则必须通过/start RPC命令显式启动机器人。 默认为 stopped . 数据类型:枚举, stopped 或running |
force_entry_enable |
启用RPC命令强制进行交易入场。更多信息请参阅下文。 数据类型:布尔值 |
disable_dataframe_checks |
禁用对策略方法返回的OHLCV数据帧进行正确性检查。仅在有意更改数据帧并了解您在做什么时使用。策略覆盖。 默认为 False 。 数据类型:布尔值 |
internals.process_throttle_secs |
设置进程限制或一个机器人迭代循环的最小持续时间。值以秒为单位。 默认为 5 秒。 数据类型:正整数 |
internals.heartbeat_interval |
每N秒打印心跳消息。将其设置为0以禁用心跳消息。 默认为 60 秒。 数据类型:正整数或0 |
internals.sd_notify |
启用使用sd_notify协议来告知systemd服务管理器关于机器人状态的更改并发出保持活动的ping。有关更多详细信息,请参阅此处。 数据类型:布尔值 |
strategy |
必填定义要使用的策略类。建议通过--strategy NAME 进行设置。 数据类型:类名 |
strategy_path |
添加其他策略查找路径(必须是目录)。 数据类型:字符串 |
recursive_strategy_search |
将其设置为true 以递归搜索user_data/strategies 中的子目录查找策略。 数据类型:布尔值 |
user_data_dir |
包含用户数据的目录。 默认为 ./user_data/ 。 数据类型:字符串 |
db_url |
声明要使用的数据库URL。注意:如果dry_run 为true ,则将默认为sqlite:///tradesv3.dryrun.sqlite ,对于生产实例,默认为sqlite:///tradesv3.sqlite 。 数据类型:字符串,SQLAlchemy连接字符串 |
logfile |
指定日志文件名。每个文件的日志文件轮换策略为10个文件,每个文件限制为1MB。 数据类型:字符串 |
add_config_files |
附加配置文件。这些文件将被加载并与当前配置文件合并。文件相对于初始文件解析。 默认为 [] 。 数据类型:字符串列表 |
dataformat_ohlcv |
存储历史蜡烛(OHLCV)数据的数据格式。 默认为 feather 。 数据类型:字符串 |
dataformat_trades |
存储历史交易数据的数据格式。 默认为 feather 。 数据类型:字符串 |
reduce_df_footprint |
将所有数字列重新转换为float32 / int32,目的是减少ram /磁盘使用(并减少在FreqAI中进行训练/推理的时间)。 (目前仅影响FreqAI用例) 数据类型:布尔值。 默认值: False 。 |
策略中的参数¶
以下参数可以在配置文件或策略中进行设置。始终以配置文件中设置的值覆盖策略中设置的值。
minimal_roi
timeframe
stoploss
max_open_trades
trailing_stop
trailing_stop_positive
trailing_stop_positive_offset
trailing_only_offset_is_reached
use_custom_stoploss
process_only_new_candles
order_types
order_time_in_force
unfilledtimeout
disable_dataframe_checks
use_exit_signal
exit_profit_only
exit_profit_offset
ignore_roi_if_entry_signal
ignore_buying_expired_candle_after
position_adjustment_enable
max_entry_position_adjustment
配置交易金额¶
有几种方法可以配置机器人将使用多少抵押货币进入交易。所有方法都尊重可用余额配置。
最小交易抵押货币¶
最低下注金额取决于交易所和交易对,并通常在交易所支持页面上列出。
假设XRP/USD的最低交易金额为20 XRP(由交易所给出),价格为0.6美元,则购买该交易对的最低下注金额为 20 * 0.6 ~= 12
。
该交易所还对USD有一个限制,在该限制下所有订单必须大于10美元,但在该情况下不适用。
为了保证安全执行,Freqtrade不允许以10.1美元的下注金额购买,相反,它会确保在该交易对下方有足够的空间放置止损单(加上一个偏移量,由 amount_reserve_percent
定义,默认为5%)。
以5%的储备金计算,最低下注金额将会是约12.6美元(12 * (1 + 0.05)
)。如果我们将这个值上加上10%的止损,我们就会得到约14美元的价值(12.6 / (1 - 0.1)
)。
为了限制在止损值很大的情况下的计算,计算得出的最低下注限额不会超过实际限额的50%。
警告
由于交易所的限制通常是稳定的,不经常更新,有些交易对的最低限额可能会显示得很高,仅是因为价格自上次限额调整以来大幅上涨。Freqtrade会根据这个值调整下注金额,除非该值比计算/期望的下注金额高出30%以上,否则交易将被拒绝。
可交易余额¶
默认情况下,机器人假设完整金额 - 1%
可供其使用,并且在使用动态下注金额时,它会将完整余额分成每笔交易的max_open_trades
个桶。
Freqtrade在进入交易时会保留1%用于可能的费用,因此默认情况下不会触及该金额。
您可以通过使用 tradable_balance_ratio
设置来配置“未触及”的金额。
例如,如果您在交易所的钱包中有10个ETH可用,且 tradable_balance_ratio=0.5
(即50%),则机器人将使用最大交易量的5个ETH进行交易,并将其视为可用余额。其余部分不会被交易触及。!!! 危险
当在同一个账户上运行多个机器人时,请不要使用此设置。请查看可分配的资本代替。
警告
tradable_balance_ratio
设置适用于当前余额(可用余额+交易中的资金)。因此,假设初始余额为1000,当tradable_balance_ratio=0.99
时,不能保证始终在交易所上保持10个货币单位的可用余额。例如,如果总余额减少到500(无论是由于连续亏损还是提取余额),可用金额可能会减少到5个单位。
分配可用资本¶
当在同一个交易所账户上同时使用多个机器人时,为了充分利用复利收益,您可以将各个机器人的初始资本限制在一定的范围内。通过将available_capital
设置为所需的起始资本,可以实现这一目标。
假设您的账户有10000 USDT,并且您希望在该交易所上运行2种不同的策略。
您可以将available_capital
设置为5000
,使每个机器人获得5000 USDT的初始资本。
然后,机器人将把这个起始资本平均分配到max_open_trades
个交易中。
盈利的交易将导致该机器人的投注金额增加,而不会影响其他机器人的投注金额。
与tradable_balance_ratio
不兼容
设置此选项将替换tradable_balance_ratio
的任何配置。
修改最后一个投注金额¶
假设我们有可交易的余额为1000 USDT,stake_amount=400
,并且max_open_trades=3
。
机器人将打开2个交易,但无法填满最后一个交易槽,因为已经绑定在其他交易中的800 USDT已经不可用。
为了克服这个问题,可以将amend_last_stake_amount
选项设置为True
,这样将能够将投注金额减少到可用余额以填充最后一个交易槽。
在上面的例子中,这意味着:- 交易1:400 USDT - 交易2:400 USDT - 交易3:200 USDT
注意
最小最后投注金额可以使用 last_stake_amount_min_ratio
进行配置,默认为0.5(50%)。这意味着最小使用的投注金额为 stake_amount * 0.5
。这样可以避免非常低的投注金额接近交易对的最小可交易金额,并可能被交易所拒绝。
静态投注金额¶
stake_amount
配置静态地配置了您的机器人用于每笔交易的投注金额。
最小配置值为0.0001,但请根据使用的投注货币检查交易所的最低交易限额以避免问题。
此设置与 max_open_trades
结合使用。参与交易的最大资本为 stake_amount * max_open_trades
。
例如,假设 max_open_trades=3
和 stake_amount=0.05
,机器人最多会使用(0.05 BTC x 3)= 0.15 BTC。
注意
此设置遵循可用余额配置。
动态投注金额¶
或者,您可以使用动态投注金额,该金额将使用交易所上的可用余额,并按照允许的交易数量(max_open_trades
)进行平均分配。要进行配置,将 stake_amount="unlimited"
。我们也建议将 tradable_balance_ratio=0.99
(99%)设置为最低余额以支付可能产生的费用。
在这种情况下,交易金额的计算方法如下:
currency_balance / (max_open_trades - current_open_trades)
要允许机器人在您的账户中交易所有可用的 stake_currency
(减去 tradable_balance_ratio
),请设置:
"stake_amount": "unlimited",
"tradable_balance_ratio": 0.99,
复利收益
这种配置将根据机器人的表现而增加/减少赌注(如果机器人输了,则赌注较低,如果机器人有盈利记录,则赌注较高,因为有更高的可用余额),并会产生复利收益。
使用模拟运行模式时
当与干扰运行、回测或超参数优化一起使用 "stake_amount": "unlimited",
时,余额将被模拟,从 dry_run_wallet
的赌注开始并逐渐增加。
因此,将 dry_run_wallet
设置为合理的值非常重要(例如,对于 BTC,可以设置为 0.05 或 0.01,对于 USDT,可以设置为 1000 或 100),否则,它可能会一次性模拟使用 100 BTC(或更多)或 0.05 USDT(或更少)进行交易-这可能不符合您真实可用的余额或小于交易所用于赌注货币的最低限额。
使用动态赌注金额进行仓位调整¶
当您希望在使用无限赌注时使用仓位调整时,您还必须实现 custom_stake_amount
,以便根据您的策略返回一个值。
典型值应在所提议的赌注范围的25% - 50%之间,但主要取决于您的策略以及您希望将多少保留在钱包中作为仓位调整缓冲区。
例如,如果您的仓位调整假设可以使用相同赌注金额进行2次额外购买,则您的缓冲区应为初始建议的无限赌注金额的66.6667%。
理解 minimal_roi
¶
minimal_roi
配置参数是一个 JSON 对象,其中键是以分钟为单位的持续时间,值则是最小 ROI(回报率)的比例。请参考下面的示例:
"minimal_roi": {
"40": 0.0, # 如果利润不为负,则在 40 分钟后退出
"30": 0.01, # 如果有至少 1% 的利润,则在 30 分钟后退出
"20": 0.02, # 如果有至少 2% 的利润,则在 20 分钟后退出
"0": 0.04 # 如果有至少 4% 的利润,则立即退出
},
大多数策略文件已包含最佳 minimal_roi
值。该参数可以在策略文件或配置文件中设置。如果在配置文件中使用,则会覆盖策略文件中的 minimal_roi
值。如果在策略文件或配置文件中都未设置该值,则使用默认值为 1000% {"0": 10}
,并且除非您的交易产生 1000% 的利润,否则禁用最小 ROI。
特殊的强制退出时间
一种特殊情况是使用 "<N>": -1
作为 ROI。这会强制机器人在 N 分钟后退出交易,无论利润是正还是负,因此代表了有限时间的强制退出。
理解 force_entry_enable
¶
force_entry_enable
配置参数允许通过 Telegram 和 REST API 使用强制进入(/forcelong
、/forceshort
)命令。出于安全考虑,默认情况下它是禁用的,如果启用,则 freqtrade 在启动时会显示警告消息。
例如,您可以发送 /forceenter ETH/BTC
给机器人,这将导致 freqtrade 购买该交易对,并持有直到出现常规的退出信号(ROI、止损、/forceexit
)。
但是这在某些策略中可能会存在危险,因此请谨慎使用。请参阅Telegram文档了解详细使用方法。
忽略过期的蜡烛¶
当使用较大的时间框架(例如1小时或更长时间)并且使用低的max_open_trades
值时,最后一个蜡烛可以在交易槽位可用时立即处理。在处理最后一个蜡烛时,可能不希望在该蜡烛上使用买入信号。例如,当您的策略中使用交叉点作为条件时,该点可能已经过去太久,无法在其上开展交易。
在这种情况下,您可以通过将ignore_buying_expired_candle_after
设置为正数来启用忽略超过指定时间范围的蜡烛的功能,表示买入信号在多少秒后过期。
例如,如果您的策略使用1小时的时间框架,并且只想在新蜡烛进来的前5分钟内进行买入,可以向您的策略添加以下配置:
{
//...
"ignore_buying_expired_candle_after": 300,
// ...
}
注意
此设置在每个新蜡烛到来时重置,因此它不会阻止粘性信号在第2或第3个蜡烛激活时执行。最好使用触发器选择器来选择买入信号,这些信号仅在一个蜡烛周期内有效。
理解order_types¶
order_types
配置参数将动作(entry
,exit
,stoploss
,emergency_exit
,force_exit
,force_entry
)映射到订单类型(market
,limit
,...),并配置在交易所上放置停损和定义停损更新间隔(以秒为单位)。
这允许使用限价单进行买入,使用限价单进行卖出,并使用市价单创建停损订单。
它还允许设置停损“在交易所上”,这意味着一旦买入订单执行,停损订单将立即被下达。order_types
在配置文件中设置会覆盖策略中的值,因此需要在一个地方配置整个 order_types
字典。
如果已经配置了,以下 4 个值(entry
、exit
、stoploss
和 stoploss_on_exchange
)必须存在,否则机器人将无法启动。
关于 emergency_exit
、force_exit
、force_entry
、stoploss_on_exchange
、stoploss_on_exchange_interval
和 stoploss_on_exchange_limit_ratio
的详细信息,请参阅止损文档 在交易所上止损。
策略的语法:
order_types = {
"entry": "limit",
"exit": "limit",
"emergency_exit": "market",
"force_entry": "market",
"force_exit": "market",
"stoploss": "market",
"stoploss_on_exchange": False,
"stoploss_on_exchange_interval": 60,
"stoploss_on_exchange_limit_ratio": 0.99,
}
配置:
"order_types": {
"entry": "limit",
"exit": "limit",
"emergency_exit": "market",
"force_entry": "market",
"force_exit": "market",
"stoploss": "market",
"stoploss_on_exchange": false,
"stoploss_on_exchange_interval": 60
}
市价订单支持
并非所有交易所都支持 "market" 市价订单。
如果你的交易所不支持市价订单,将会显示以下消息:
"Exchange <yourexchange> does not support market orders."
,并且机器人将拒绝启动。
使用市价订单
使用市价订单时,请仔细阅读 市价订单定价 章节的内容。
交易所上的止损
stoploss_on_exchange_interval
是非强制性的。如果你对自己的操作不确定,请不要更改其值。
有关止损工作原理的更多信息,请参阅 止损文档。如果启用了 stoploss_on_exchange
并且止损在交易所上手动取消,则机器人将创建新的止损订单。
警告:止损在交易所上的失败
如果由于某种原因导致止损在交易所上创建失败,则会启动“紧急退出”机制。默认情况下,这将使用市价单退出交易。可以通过设置 order_types
字典中的 emergency_exit
值来更改紧急退出的订单类型,但这是不建议的。
理解订单有效期¶
order_time_in_force
配置参数定义了订单在交易所上执行的策略。常用的三种有效期包括:
GTC (Good Till Canceled):
这通常是默认的有效期。它表示订单将保留在交易所上,直到用户取消。它可以完全或部分被执行。如果部分成交,剩余部分将保留在交易所上,直到被取消。
FOK (Fill Or Kill):
这意味着如果订单不能立即和完全被执行,交易所将取消该订单。
IOC (Immediate Or Canceled):
它与 FOK(上文提到的)相同,只是它可以部分成交。剩余部分会被交易所自动取消。
PO(仅限发布):
仅发布(PO)订单。订单可以作为市价订单下单,或者被取消。 这意味着订单必须至少在未成交状态下在订单簿中保持一段时间。
time_in_force 配置¶
order_time_in_force
参数包含了一个字典,其中包含了有效时间策略的入场和离场时间。
这可以在配置文件或策略中设置。
配置文件中设置的值会覆盖策略中设置的值。
可用的值有:GTC
(默认值),FOK
或 IOC
。
"order_time_in_force": {
"entry": "GTC",
"exit": "GTC"
},
警告
这是持续工作。目前,仅支持 binance、gate 和 kucoin。 除非你知道自己在做什么并且已经研究过在特定交易所使用不同值的影响,否则请不要更改默认值。
fiat_display_currency 可用的值有哪些?¶
fiat_display_currency
配置参数设置了在机器人的 Telegram 报告中,从币到法币的换算使用的基准货币。
有效的值有:
"AUD", "BRL", "CAD", "CHF", "CLP", "CNY", "CZK", "DKK", "EUR", "GBP", "HKD", "HUF", "IDR", "ILS", "INR", "JPY", "KRW", "MXN", "MYR", "NOK", "NZD", "PHP", "PKR", "PLN", "RUB", "SEK", "SGD", "THB", "TRY", "TWD", "ZAR", "USD"
In addition to fiat currencies, a range of crypto currencies is supported.
The valid values are:
"BTC", "ETH", "XRP", "LTC", "BCH", "BNB"
Removing fiat_display_currency
completely from the configuration will skip initializing coingecko, and will not show any FIAT currency conversion. This has no importance for the correct functioning of the bot.
Using Dry-run mode¶
We recommend starting the bot in the Dry-run mode to see how your bot will behave and what is the performance of your strategy. In the Dry-run mode, the bot does not engage your money. It only runs a live simulation without creating trades on the exchange.
- Edit your
config.json
configuration file. - Switch
dry-run
totrue
and specifydb_url
for a persistence database.
"dry_run": true,
"db_url": "sqlite:///tradesv3.dryrun.sqlite",
- Remove your Exchange API key and secret (change them by empty values or fake credentials):
"exchange": {
"name": "binance",
"key": "key",
"secret": "secret",
...
}
一旦你对你的机器人在模拟运行中的表现满意,你可以将其切换到生产模式。
注意
在模拟运行模式下,有一个模拟的钱包可用,并且将假设初始资本为 dry_run_wallet
(默认为 1000)。
模拟运行的考虑事项¶
- API 密钥可能会被提供或者不被提供。模拟运行模式下仅执行对交易所的只读操作(即不会更改账户状态的操作)。
- 钱包(
/balance
)是基于dry_run_wallet
进行模拟。 - 订单是模拟的,并且不会被提交到交易所。
- 市价订单在下单时根据订单簿的成交量进行成交。
- 限价订单在价格达到指定水平时进行成交,或者根据
unfilledtimeout
设置超时。 - 如果限价订单的价格超过1%,则会转换为市价订单。
- 与
stoploss_on_exchange
结合使用时,假设停止损失价格已成交。 - 在机器人重启后,未成交的挂单(与已存储在数据库中的交易不同)将保持开放状态,假设在离线期间它们未能成交。
切换到生产模式¶
在生产模式下,机器人将操作您的资金。请小心,因为错误的策略可能会导致您损失所有资金。 当您在生产模式下运行时,请务必清楚自己在做什么。
切换到生产模式时,请确保使用一个不同/新的数据库,以避免模拟运行交易影响您的交易所资金,最终影响您的统计数据。
设置您的交易所账户¶
您需要在交易所的网站上创建 API 密钥(通常您会得到 key
和 secret
,某些交易所还需要额外的 password
),并将其插入到配置文件中的适当字段中,或者在 freqtrade new-config
命令提示时输入。
API 密钥通常仅在实时交易(使用真实货币进行交易,在“生产模式”下运行的机器人,执行实际订单)时需要,并且在模拟运行(交易模拟)模式下不需要。当你在模拟运行模式下设置机器人时,你可以将这些字段填写为空值。
切换到生产模式的方法¶
编辑你的 config.json
文件。
将 dry-run 改为 false,并且不要忘记适应你的数据库 URL(如果有设置的话):
"dry_run": false,
插入你的交易所 API 密钥(将它们改为虚假的 API 密钥):
{
"exchange": {
"name": "binance",
"key": "af8ddd35195e9dc500b9a6f799f6f5c93d89193b",
"secret": "08a9dc6db3d7b53e1acebd9275677f4b0a04f1a5",
//"password": "", // 可选的,不是所有交易所都需要)
// ...
}
//...
}
你还应该确保阅读Exchanges部分的文档,了解与你的交易所相关的潜在配置细节。
保护你的密钥的安全
为了保护你的密钥的安全,我们建议使用第二个配置文件来存储你的 API 密钥。
只需在一个新的配置文件中使用上述代码段(例如 config-private.json
),并将你的设置保存在该文件中。
然后可以使用 freqtrade trade --config user_data/config.json --config user_data/config-private.json <...>
命令启动机器人,以加载你的密钥。
绝对不要与任何人分享你的私有配置文件或交易所密钥!
使用代理设置 Freqtrade¶
使用freqtrade代理时,使用变量"HTTP_PROXY"
和"HTTPS_PROXY"
将代理设置导出为适当的值。这将使代理设置适用于所有内容(telegram、coingecko等),除了交易所请求。
export HTTP_PROXY="http://addr:port"
export HTTPS_PROXY="http://addr:port"
freqtrade
交易所请求代理¶
要为交易所连接使用代理,您需要将代理定义为ccxt配置的一部分。
{
"exchange": {
"ccxt_config": {
"httpsProxy": "http://addr:port",
}
}
}
有关可用代理类型的更多信息,请参阅ccxt代理文档。
下一步¶
现在您已经配置了config.json文件,下一步是启动您的机器人。