跳至内容

策略与代码片段

Gateway 通过 Hummingbot 实现去中心化交易所上的复杂交易策略。本页面列出了可用的 Gateway 兼容策略/脚本以及常用代码片段。

可用的脚本和策略

下表列出了 Hummingbot 仓库中可用的 Gateway 兼容脚本和策略。所有链接均指向开发分支,其中维护着最新版本。

名称 类型 描述 支持的模式
AMM 数据源示例 脚本 从 AMM 资金池获取实时价格数据并监控资金池储备 路由器、AMM、CLMM
AMM 交易示例 脚本 在 AMM 和 CLMM 资金池上执行代币兑换,支持配置参数 路由器、AMM、CLMM
LP 管理仓位 脚本 管理流动性头寸,包括添加、移除和收取费用 AMM、CLMM
AMM 套利 V1 策略 在中心化交易所和去中心化交易所之间进行套利 路由器、AMM、CLMMuter
跨交易所做市 V1 策略 使用 Gateway 连接器作为吃单市场的做市策略 路由器、AMM、CLMM
套利控制器 V2 控制器 在两个市场之间创建套利执行器(ArbitrageExecutors) 路由器、AMM、CLMM
XEMM 控制器 V2 控制器 在两个市场之间创建跨市场做市执行器(XEMMExecutors) 路由器、AMM、CLMM

代码片段

以下代码片段展示了在 Hummingbot 脚本和策略中常见的网关操作。

数据源

amm_data_feed = AmmGatewayDataFeed(
            connector="jupiter/router",
            trading_pairs={"SOL-USDC","JUP-USDC"}
            order_amount_in_base=Decimal("1.0")
        )

连接市场

@classmethod
def init_markets(cls):
        cls.markets = {"jupiter/router": {"SOL-USDC"}}

def __init__(self, connectors: Dict[str, ConnectorBase]):
        super().__init__(connectors)

获取价格

current_price = await self.connectors["jupiter/router"].get_quote_price(
                    trading_pair="SOL-USDC",
                    is_buy=True,
                    amount=Decimal("1.0"),
                )

获取余额

connector = self.connectors["jupiter/router"]
await connector.update_balances(on_interval=False)
balance = connector.get_balance("SOL")

下单

connector = self.connectors["jupiter/router"]
order_id = connector.place_order(
                    is_buy=True,
                    trading_pair="SOL-USDC",
                    amount=Decimal("1.0"),
                    price=current_price,
                )

获取做市商仓位信息

position_info = await self.connectors["jupiter/router"].get_position_info(
                    trading_pair="SOL-USDC",
                    position_address="<position-address>"
                )

添加流动性

order_id = self.connectors["meteora/clmm"].add_liquidity(
                    trading_pair="SOL-USDC",
                    price=current_price,
                    upper_width_pct=10.0,
                    lower_width_pct=10.0,
                    base_token_amount=0.1,
                    quote_token_amount=20,
                )

移除流动性

order_id = self.connectors["meteora/clmm"].remove_liquidity(
                    trading_pair="SOL-USDC",
                    position_address="<position-address>"
                )