跳至内容

pure_market_making

📁 策略信息

📝 概述

该策略允许 Hummingbot 用户在 现货 交易所的单一交易对上运行做市策略。

它会在订单簿上以相对于中间价格、价差分别为 bid_spreadask_spread 的价格放置限价买入(买盘)和限价卖出(卖盘)订单。每 order_refresh_time 秒,策略会用新的订单替换现有订单,新订单的价差和数量将被刷新。

此外,该策略包含多个参数,使交易者能够控制订单相对于其持仓头寸的放置方式、使用其他订单簿的价格等。

🏦 支持的交易所类型

  • SPOT CLOB CEX

🛠️ 策略配置

参数 类型 默认值 提示
exchange 字符串 请输入你的做市现货连接器
market 字符串 请输入你希望在 [exchange] 上交易的代币交易对
bid_spread 小数 你希望将首个买盘订单设置在中间价格下方多远的位置?
ask_spread 小数 你希望将首个卖盘订单设置在中间价格上方多远的位置?
minimum_spread 小数 -100 当价差低于多少时,机器人应自动取消订单?
order_refresh_time 浮点数 你希望多久取消并替换一次买盘和卖盘订单(单位:秒)?
max_order_age 浮点数 1800 你希望多久取消并替换一次价格相同的买盘和卖盘订单(单位:秒)?
order_refresh_tolerance_pct 小数 0 请输入每个周期中,价格变动多少百分比时才刷新订单?
order_amount 小数 每笔订单的 [base_asset] 数量是多少?
price_ceiling 小数 -1 请输入高于此价格时仅放置卖出订单的价格点?
price_floor 小数 -1 请输入低于此价格时仅放置买入订单的价格?
moving_price_band_enabled 布尔值 False 是否启用动态价格上下限?(是/否)
price_ceiling_pct 小数 1 请输入相对于当前价格的百分比,以设定价格上限。高于此价格时,仅放置卖单
price_band_refresh_time 浮点数 86400 经过此时间(单位:秒)后,价格上下限将根据当前价格重置
ping_pong_enabled 布尔值 False 是否希望在成交后启用乒乓功能,在买入与卖出订单之间交替?
order_levels 整数 1 您希望在买卖双方各放置多少个订单?
order_level_amount 小数 0 每增加一个订单,您希望订单数量增加或减少多少?
order_level_spread 小数 0 请输入后续订单的价格增量(以百分比表示)?
inventory_skew_enabled 布尔值 False 是否启用库存偏斜?
inventory_target_base_pct 小数 50 你的目标基础资产百分比是多少?
inventory_range_multiplier 小数 50 您可接受的库存围绕目标值的波动范围是多少?以总订单规模的倍数表示。
inventory_price 小数 1 你的基础资产库存成本价是多少?
filled_order_delay 小数 60 若您的订单被成交,您希望等待多久再放置下一个订单?(单位:秒)
hanging_orders_enabled 布尔值 False 是否启用挂单?
hanging_orders_cancel_pct 小数 10 挂单的价差(相对于中间价)达到多少百分比时会被取消?
order_optimization_enabled 布尔值 False 是否启用最佳买卖盘跳跃?
ask_order_optimization_depth 小数 0 计算最高卖价时,忽略顶部的零星订单,您希望深入订单簿多深?(以基础资产数量表示)
bid_order_optimization_depth 小数 0 计算最高买价时,忽略顶部的零星订单,您希望深入订单簿多深?(以基础资产数量表示)
price_source 字符串 current_market 使用哪个价格源?(current_market/external_market/custom_api)
price_type 字符串 mid_price 使用哪种价格类型?(mid_price/last_price/last_own_trade_price/best_bid/best_ask/inventory_cost)
price_source_exchange 字符串 请输入外部价格源交易所名称
price_source_market 字符串 请输入 [price_source_exchange] 上的代币交易对
price_source_custom_api 字符串 请输入价格 API 的 URL
custom_api_update_interval 浮点数 5 请输入自定义 API 更新间隔(单位:秒,默认:5.0,最小:0.5)
add_transaction_costs 布尔值 False 是否自动将交易费用加入订单价格?
take_if_crossed 布尔值 False 当订单跨越订单簿时,是否优先执行最佳订单?
order_override 布尔值
should_wait_order_cancel_confirmation 布尔值 策略在创建新订单前,是否应等待订单取消确认?(不等待需要足够的可用余额)(是/否)
bid_order_level_spreads 小数 请输入所有买盘价差(百分比),例如:1,2,3,4 表示 1%、2%、3%、4%。设置的层级数量将等于 bid_order_level_spreads 和 bid_order_level_amounts 中较短者的长度
ask_order_level_spreads 小数 输入所有卖单价差(以百分比表示),例如:1,2,3,4 表示 1%、2%、3%、4%。设置的层级数量将等于 ask_order_level_spreads 和 ask_order_level_amounts 的最小长度。
bid_order_level_amounts 小数 输入所有买单数量。设置的层级数量将等于 bid_order_level_spreads 和 bid_order_level_amounts 的最小长度。
ask_order_level_amounts 小数 输入所有卖单数量。设置的层级数量将等于 ask_order_level_spreads 和 ask_order_level_amounts 的最小长度。

📓 描述

交易逻辑

仅为近似值

以下描述是对该策略的一般性近似说明。请查阅上方交易逻辑中的策略代码,以准确理解其工作原理。

架构

Hummingbot 内置的纯做市策略会定期从可配置的订单定价和规模插件中请求限价单建议,并定期通过取消现有限价单来刷新订单。

以下是内置纯做市策略内部逻辑流程的高层次概览。

Figure 5: Pure market making strategy logical flowchart

纯做市策略以逐滴(tick-by-tick)方式运行。每个滴答通常为 1 秒,但可通过编程修改为更长或更短的时间间隔。

在每个滴答中,纯做市策略首先查询订单过滤插件以决定是否继续执行。假设答案为是,则会查询定价和规模插件,计算是否应发出做市订单以及应发出何种订单。同时,它还会检查之前在市场中放置的任何现有限价单,并决定是否应取消这些订单。

该过程在每个滴答中重复进行,从而根据订单定价和规模插件的建议,周期性地放置和取消限价单。

刷新订单

对于纯做市策略发出的每个限价单,都会为其生成一个过期时间戳,策略将跟踪该订单。新订单的过期时间通过 order_refresh_time 参数配置。

当订单的过期时间到达后,纯做市策略将为该订单生成一个取消订单建议。

执行订单建议

在从插件和内部刷新订单逻辑收集所有订单定价、规模和取消订单建议后,纯做市策略逻辑会合并所有建议并执行它们。

示例订单流程

以下是一个假设示例,说明纯做市策略在几个时钟滴答中的工作方式。

  • 在时钟滴答 t 时,买卖双方可能均已存在限价单,且均未过期。新订单的建议数量为 0,且无取消订单建议。因此,该时钟滴答中策略将不执行任何操作。
  • 在时钟滴答 t+1 时,买单已过期。策略将为该过期的买单生成一个取消订单建议。该取消指令将被发送至交易所并执行。
  • 在时钟滴答 t+2 时,策略遍历其交易逻辑,发现买方已无订单。因此,它将为新的买单提议一个非零的数量。假设现有的卖单尚未过期,则在此时钟滴答中不会生成任何取消建议。在执行阶段,策略将基于当前市场中间价计算并创建一个买单。因此,买单被刷新。

只要策略在运行,订单创建与取消的循环就会不断重复。如果限价单被市价单完全成交,策略将在下一个时钟滴答时重新刷新该订单。

ℹ️ 更多资源

什么是做市?:一篇介绍做市基本原理的博客文章。

如何在币安上设置一个简单的纯做市机器人:学习如何在币安交易所创建纯做市机器人。

交易者分享:使用 cgambit 进行纯做市:Eagle Club 成员、顶级 Hummingbot 挖矿收益者 cgambit 分享了他关于纯做市的技巧与见解。

纯做市(PMM)策略:使用纯做市策略,但根据 TradingView 指标动态调整买卖盘订单,这些指标会向 Telegram 发送警报,并通过库存偏斜或价差调整来修改买卖盘订单。

了解更多与此策略及其他策略相关的资源,请访问 Hummingbot 学院!