pure_market_making
¶
📁 策略信息¶
- 文件夹: /hummingbot/strategy/pure_market_making
- 配置: pure_market_making_config_map.py
- 维护者: Hummingbot Foundation
📝 摘要¶
该策略允许 Hummingbot 用户在 spot
交易所的单个交易对上运行做市策略。
它在订单簿上以相对于中间价格的价格放置限价买入(买标)和限价卖出(卖标)订单,价差等于 bid_spread
和 ask_spread
。每隔 order_refresh_time
秒,该策略会用具有更新价差和订单数量的新订单替换现有订单。
此外,该策略包含多个参数,使交易者能够控制订单相对于其库存位置的放置方式,使用不同订单簿的价格等。
🏦 支持的交易所类型¶
- SPOT CLOB CEX
🛠️ 策略配置¶
参数 | 类型 | 默认 | 提示 |
---|---|---|---|
exchange |
string | 输入您的做市现货连接器 | |
market |
string | 输入您希望在 [exchange] 上交易的代币交易对 | |
bid_spread |
decimal | 您希望在距离中间价格多远的位置放置第一个买入订单? | |
ask_spread |
decimal | 您希望在距离中间价格多远的位置放置第一个卖出订单? | |
minimum_spread |
decimal | -100 | 机器人应在最小价差多少时自动取消订单? |
order_refresh_time |
float | 您希望多久取消和替换一次买入和卖出订单(以秒为单位)? | |
max_order_age |
float | 1800 | 您希望多久以相同价格取消和替换一次买入和卖出订单(以秒为单位)? |
order_refresh_tolerance_pct |
decimal | 0 | 输入在每个周期刷新订单所需的百分比价格变动 |
order_amount |
decimal | 每张订单的 [base_asset] 数量是多少? | |
price_ceiling |
decimal | -1 | 输入只放置卖出订单的价格点 |
price_floor |
decimal | -1 | 输入只放置买入订单的价格点 |
moving_price_band_enabled |
bool | False | 您是否要启用移动价格上下限?(是/否) |
price_ceiling_pct |
decimal | 1 | 输入当前价格的百分比以设置价格上限。高于此价格时,只放置卖出订单 |
price_band_refresh_time |
float | 86400 | 在此时间段(以秒为单位)后,价格区间根据当前价格重置 |
ping_pong_enabled |
bool | False | 您是否要使用乒乓功能并在成交后在买入和卖出订单之间交替? |
order_levels |
int | 1 | 您希望在两侧放置多少张订单? |
order_level_amount |
decimal | 0 | 您希望为每个额外订单增加或减少多少订单大小? |
order_level_spread |
decimal | 0 | 输入后续订单的价格增量(以百分比为单位)? |
inventory_skew_enabled |
bool | False | 您是否要启用库存倾斜? |
inventory_target_base_pct |
decimal | 50 | 您目标的基础资产百分比是多少? |
inventory_range_multiplier |
decimal | 50 | 目标周围可容忍的库存范围是多少,以总订单大小的倍数表示? |
inventory_price |
decimal | 1 | 您基础资产库存的价格是多少? |
filled_order_delay |
decimal | 60 | 如果您的订单成交,您希望等待多长时间再放置下一个订单(以秒为单位)? |
hanging_orders_enabled |
bool | False | 您是否要启用挂单? |
hanging_orders_cancel_pct |
decimal | 10 | 挂单将在什么价差百分比(从中间价格)被取消? |
order_optimization_enabled |
bool | False | 您是否要启用最佳买卖跳跃? |
ask_order_optimization_depth |
decimal | 0 | 为了计算最高卖出价,您希望深入订单簿多深,忽略顶部的零散订单(以基础资产数量表示)? |
bid_order_optimization_depth |
decimal | 0 | 为了计算最高买入价,您希望深入订单簿多深,忽略顶部的零散订单(以基础资产数量表示)? |
price_source |
string | current_market | 使用哪个价格来源?(current_market/external_market/custom_api) |
price_type |
string | mid_price | 使用哪种价格类型?(mid_price/last_price/last_own_trade_price/best_bid/best_ask/inventory_cost) |
price_source_exchange |
string | 输入外部价格来源交易所名称 | |
price_source_market |
string | 输入 [price_source_exchange] 上的代币交易对 | |
price_source_custom_api |
string | 输入定价 API URL | |
custom_api_update_interval |
float | 5 | 输入自定义 API 更新间隔(默认值:5.0,最小值:0.5) |
add_transaction_costs |
bool | False | 您是否希望自动将交易成本添加到订单价格中? |
take_if_crossed |
bool | False | 如果订单在订单簿中交叉,您是否希望接受最佳订单? |
order_override |
bool | ||
should_wait_order_cancel_confirmation |
bool | 策略在创建新订单集之前是否应等待收到订单取消的确认?(不等待需要足够的可用余额)(是/否) | |
bid_order_level_spreads |
decimal | 输入所有买方价差的百分比,例如 1,2,3,4 代表 1%,2%,3%,4%。设置的层级数将等于 bid_order_level_spreads 和 bid_order_level_amounts 的最小长度 | |
ask_order_level_spreads |
decimal | 输入所有卖方价差的百分比,例如 1,2,3,4 代表 1%,2%,3%,4%。设置的层级数将等于 ask_order_level_spreads 和 ask_order_level_amounts 的最小长度 | |
bid_order_level_amounts |
decimal | 输入所有买方金额。设置的层级数将等于 bid_order_level_spreads 和 bid_order_level_amounts 的最小长度 | |
ask_order_level_amounts |
decimal | 输入所有卖方金额。设置的层级数将等于 ask_order_level_spreads 和 ask_order_level_amounts 的最小长度 |
📓 描述¶
仅近似
以下是对该策略的总体近似描述。请检查上面的交易逻辑中的策略代码以确切了解其工作原理。
架构¶
Hummingbot 内置的纯做市策略定期从可配置的订单定价和数量插件请求限价订单提案,并通过取消现有限价订单定期刷新订单。
这是内置纯做市策略内部逻辑流程的高级视图。
纯做市策略以逐笔 tick 的方式运行。每个 tick 通常为 1 秒,尽管可以通过程序修改为更长或更短的持续时间。
在每个 tick 中,纯做市策略首先查询订单过滤插件是否继续。假设答案是肯定的,那么它将查询订单定价和数量插件并计算应发出哪些做市订单。同时,它还将查看之前在市场上放置的任何现有限价订单,并决定是否应取消这些订单。
该过程在每个 tick 中重复进行,导致限价订单根据订单定价和数量插件的提案定期下达和取消。
刷新订单¶
对于纯做市策略发出的每个限价订单,将为此订单生成一个到期时间戳,策略将跟踪该订单。新订单的到期时间通过order_refresh_time
参数配置。
达到订单的到期时间后,纯做市策略将为该订单创建一个取消订单提案。
执行订单提案¶
在从插件和内部刷新订单逻辑收集所有订单定价、数量和取消订单提案后 - 纯做市策略逻辑将合并所有提案并执行它们。
订单流示例¶
以下是纯做市策略如何在几个时钟 tick 中工作的假设示例。
- 在时钟 tick
t
时,买卖双方可能都有现有的限价订单,且都尚未到期。新订单的建议数量将为 0,且不会有取消订单的提案。因此策略在此时钟 tick 将不执行任何操作。 - 在时钟 tick
t+1
时,限价买方订单已到期。策略随后将为到期的买方订单生成取消订单提案。然后将取消指令发送到交易所并执行。 - 在时钟周期
t+2
时,策略运行其交易逻辑并发现买盘已经没有订单。因此,它将为新的买盘订单提出一个非零的订单数量。我们假设定价的卖盘订单尚未过期,所以在当前时钟周期不会生成取消订单的提案。在执行阶段,策略将简单地创建一个根据当前市场中间价计算的买盘订单。因此,买盘订单得到刷新。
只要策略在运行中,这个订单创建和订单取消的循环就会一遍又一遍地重复。如果市价订单完全成交了限价订单,策略将在下一个时钟周期简单地重新刷新它。
ℹ️ 更多资源¶
什么是做市?:一篇解释做市基础的博客文章。
如何在 Binance 上设置一个简单的纯做市机器人:了解如何在 Binance 交易所上创建纯做市机器人。
交易员分享:cgambit 的纯做市:Eagle Club 会员、顶级 Hummingbot Miner 获利者 cgambit
分享了他在纯做市方面的技巧和见解。
纯做市 (PMM) 策略:使用纯做市策略,但根据 TradingView 指标设置动态买卖订单,这些指标触发电报通知并使用库存倾斜或价差调整来改变买卖订单。
查看Hummingbot 学院以获取与此策略及其他策略相关的更多资源!