- Add hyperliquid_trading_service.py with position management and TP/SL - Implement dual-track trading (paper trading + Hyperliquid) - Add position size calculation based on available margin - Support net position mode (Hyperliquid) vs order mode (paper) - Add risk controls: 10% circuit breaker, 10x max leverage - Add test script for Hyperliquid SDK validation
3.3 KiB
3.3 KiB
Hyperliquid 集成代码 Review
核心差异总结
1. 仓位模式
- Hyperliquid: 净持仓模式(Position Netting)- 同币种订单自动合并
- 模拟盘: 订单模式(Order-based)- 每个订单独立
2. 止盈止损
- Hyperliquid: 独立订单(开仓后单独设置,reduce_only=True)
- 模拟盘: 订单属性(创建时设置)
3. 需要修正的问题
问题 1: _get_hyperliquid_trading_state() 需要查询止盈止损订单
def _get_hyperliquid_trading_state(self) -> tuple:
# 需要额外查询挂单,找出 reduce_only 的止盈止损订单
# 并关联到对应的持仓
问题 2: _execute_hyperliquid_trade() 需要设置止盈止损
async def _execute_hyperliquid_trade(...):
# 1. 开仓
result = self.hyperliquid.place_market_order(...)
# 2. 立即设置止盈止损(新增)
if result.get('success'):
await self._set_hyperliquid_tp_sl(decision)
问题 3: 加仓需要重新计算止盈止损
# 加仓时:
# 1. 取消旧的止盈止损订单
# 2. 执行加仓
# 3. 根据新的平均入场价重新设置止盈止损
问题 4: 平仓需要先取消止盈止损订单
async def _execute_hyperliquid_close(...):
# 1. 取消该币种的所有止盈止损订单(新增)
# 2. 市价平仓
问题 5: 不支持同时多空
# Hyperliquid 同一币种只能有一个方向的净持仓
# 如果决策是反向开仓,会自动平掉现有持仓并反向
# 需要在决策器中考虑这个限制
修正方案
新增方法到 hyperliquid_trading_service.py
def get_open_orders(self, symbol: Optional[str] = None) -> List[Dict[str, Any]]:
"""获取挂单(包括止盈止损订单)"""
def get_tp_sl_orders(self, symbol: str) -> Dict[str, Optional[float]]:
"""获取指定币种的止盈止损价格"""
# 返回 {'take_profit': price, 'stop_loss': price}
def set_tp_sl(self, symbol: str, is_long: bool, size: float,
tp_price: Optional[float], sl_price: Optional[float]):
"""设置止盈止损"""
def cancel_tp_sl_orders(self, symbol: str):
"""取消指定币种的所有止盈止损订单"""
修改 crypto_agent.py
async def _execute_hyperliquid_trade(...):
# 1. 检查是否有反向持仓(Hyperliquid 会自动平仓)
# 2. 执行开仓
# 3. 设置止盈止损
# 4. 如果是加仓,需要重新计算止盈止损
决策器需要考虑的差异
- 加仓决策: Hyperliquid 会合并仓位,入场价变成加权平均
- 反向开仓: Hyperliquid 会自动平掉现有持仓
- 止盈止损调整: 加仓后需要重新设置止盈止损
建议
- 先实现基础功能: 开仓 + 止盈止损 + 平仓
- 再实现高级功能: 加仓、减仓、调整止盈止损
- 测试验证: 在测试网充分测试后再启用实盘
- 风控优先: 确保 10% 熔断和杠杆限制正确工作