1
This commit is contained in:
parent
436e94eb9b
commit
36143fb0cc
@ -22,7 +22,6 @@ class HyperliquidExecutor(BaseExecutor):
|
|||||||
try:
|
try:
|
||||||
symbol = decision.get('symbol', '').replace('USDT', '')
|
symbol = decision.get('symbol', '').replace('USDT', '')
|
||||||
action = decision.get('signal_action', decision.get('action')) # buy/sell
|
action = decision.get('signal_action', decision.get('action')) # buy/sell
|
||||||
margin = decision.get('margin', decision.get('quantity', 0))
|
|
||||||
entry_price = decision.get('entry_price', current_price)
|
entry_price = decision.get('entry_price', current_price)
|
||||||
stop_loss = decision.get('stop_loss')
|
stop_loss = decision.get('stop_loss')
|
||||||
take_profit = decision.get('take_profit')
|
take_profit = decision.get('take_profit')
|
||||||
@ -31,13 +30,20 @@ class HyperliquidExecutor(BaseExecutor):
|
|||||||
order_type, order_reason = self.decide_order_type(decision, current_price)
|
order_type, order_reason = self.decide_order_type(decision, current_price)
|
||||||
logger.info(f" 订单类型: {order_reason}")
|
logger.info(f" 订单类型: {order_reason}")
|
||||||
|
|
||||||
# 调整保证金(预留手续费)
|
# 获取账户状态
|
||||||
account_state = self.hyperliquid.get_account_state()
|
account_state = self.hyperliquid.get_account_state()
|
||||||
available = account_state.get('available_balance', 0)
|
available = account_state.get('available_balance', 0)
|
||||||
adjusted_margin = self.calculate_effective_margin(available, margin)
|
account_value = account_state.get('account_value', 0)
|
||||||
|
|
||||||
|
# 仓位价值 = 1x 账户价值,所需保证金 = 账户价值 / 杠杆
|
||||||
|
leverage = min(decision.get('leverage', 10), 10)
|
||||||
|
target_position_value = account_value # 1倍账户价值
|
||||||
|
margin_needed = target_position_value / leverage if leverage > 0 else 0
|
||||||
|
|
||||||
|
# 预留手续费并限制在可用余额内
|
||||||
|
adjusted_margin = self.calculate_effective_margin(available, margin_needed)
|
||||||
|
|
||||||
# 计算仓位大小
|
# 计算仓位大小
|
||||||
leverage = min(decision.get('leverage', 10), 10)
|
|
||||||
position_size = self._calculate_position_size(symbol, adjusted_margin, entry_price, leverage)
|
position_size = self._calculate_position_size(symbol, adjusted_margin, entry_price, leverage)
|
||||||
|
|
||||||
if position_size <= 0:
|
if position_size <= 0:
|
||||||
@ -78,7 +84,27 @@ class HyperliquidExecutor(BaseExecutor):
|
|||||||
|
|
||||||
logger.info(f" ✅ 开仓成功: {symbol} {position_size} @ ${order_type}")
|
logger.info(f" ✅ 开仓成功: {symbol} {position_size} @ ${order_type}")
|
||||||
|
|
||||||
# 发送飞书通知
|
# 成交后设置止盈止损(Hyperliquid 不支持下单时设置 TP/SL)
|
||||||
|
# 必须在飞书通知之前设置,避免通知异常导致止盈止损跳过
|
||||||
|
if stop_loss or take_profit:
|
||||||
|
try:
|
||||||
|
tp_sl_result = self.hyperliquid.set_tp_sl(
|
||||||
|
symbol=symbol,
|
||||||
|
is_long=is_buy,
|
||||||
|
size=position_size,
|
||||||
|
tp_price=take_profit,
|
||||||
|
sl_price=stop_loss
|
||||||
|
)
|
||||||
|
if not tp_sl_result.get('success'):
|
||||||
|
logger.warning(f" ⚠️ 止盈止损设置失败: {tp_sl_result.get('error', tp_sl_result.get('message'))}")
|
||||||
|
result['tp_sl_warning'] = tp_sl_result.get('error', tp_sl_result.get('message'))
|
||||||
|
else:
|
||||||
|
logger.info(f" ✅ 止盈止损已设置: TP={take_profit}, SL={stop_loss}")
|
||||||
|
except Exception as tp_sl_err:
|
||||||
|
logger.error(f" ⚠️ 止盈止损设置异常: {tp_sl_err}")
|
||||||
|
result['tp_sl_warning'] = str(tp_sl_err)
|
||||||
|
|
||||||
|
# 发送飞书通知(在止盈止损之后,通知失败不影响交易结果)
|
||||||
await self.send_execution_notification(
|
await self.send_execution_notification(
|
||||||
operation='OPEN',
|
operation='OPEN',
|
||||||
symbol=symbol,
|
symbol=symbol,
|
||||||
@ -94,22 +120,6 @@ class HyperliquidExecutor(BaseExecutor):
|
|||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
# 成交后设置止盈止损(Hyperliquid 不支持下单时设置 TP/SL)
|
|
||||||
# 市价单已成交直接设置;限价单(resting)也先设置,等成交后生效
|
|
||||||
if stop_loss or take_profit:
|
|
||||||
tp_sl_result = self.hyperliquid.set_tp_sl(
|
|
||||||
symbol=symbol,
|
|
||||||
is_long=is_buy,
|
|
||||||
size=position_size,
|
|
||||||
tp_price=take_profit,
|
|
||||||
sl_price=stop_loss
|
|
||||||
)
|
|
||||||
if not tp_sl_result.get('success'):
|
|
||||||
logger.warning(f" ⚠️ 止盈止损设置失败: {tp_sl_result.get('error', tp_sl_result.get('message'))}")
|
|
||||||
result['tp_sl_warning'] = tp_sl_result.get('error', tp_sl_result.get('message'))
|
|
||||||
else:
|
|
||||||
logger.info(f" ✅ 止盈止损已设置: TP={take_profit}, SL={stop_loss}")
|
|
||||||
|
|
||||||
return result
|
return result
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user