跳至内容

策略与代码片段

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

可用脚本和策略

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

名称 类型 描述 支持的模式
AMM 数据源示例 脚本 从 AMM 池获取实时价格数据和监控池储备 Router, AMM, CLMM
AMM 交易示例 脚本 在 AMM 和 CLMM 池上执行代币交换,具有可配置参数 Router, AMM, CLMM
流动性位置管理 脚本 管理流动性位置,包括添加、移除和收取费用 AMM, CLMM
AMM 套利 V1 策略 CEX 和 DEX 市场之间的套利 Router, AMM, CLMMuter
跨交易所做市 V1 策略 以网关连接器作为吃单市场进行做市 Router, AMM, CLMM
套利控制器 V2 控制器 在两个市场之间创建套利执行器 Router, AMM, CLMM
XEMM 控制器 V2 控制器 在两个市场之间创建 XEMM 执行器 Router, 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>"
                )