This commit is contained in:
薇薇安 2026-02-15 22:52:44 +08:00
parent 550d0b278d
commit 2c8c13b8d9

View File

@ -659,19 +659,32 @@ class PositionManager:
logger.info(f"{symbol} [优化] TP1距离 ({tp1_distance:.4f}) 小于 手续费磨损距离 ({min_fee_distance:.4f}),已自动调整以覆盖成本")
tp1_distance = min_fee_distance
# 计算最终TP1价格
if tp1_distance > 0:
if side == 'BUY':
take_profit_1 = entry_price + tp1_distance
else:
take_profit_1 = entry_price - tp1_distance
else:
# 如果无法计算(极少情况)回退到盈亏比1:1
if side == 'BUY':
take_profit_1 = entry_price + (entry_price - stop_loss_price)
else:
take_profit_1 = entry_price - (stop_loss_price - entry_price)
take_profit_2 = take_profit_price
if take_profit_1 is not None and take_profit_2 is not None:
if side == 'BUY':
if take_profit_1 >= take_profit_2 and take_profit_2 > entry_price:
closer = min(take_profit_1, take_profit_2)
further = max(take_profit_1, take_profit_2)
if closer > entry_price:
take_profit_1 = closer
take_profit_2 = further
else:
if take_profit_1 <= take_profit_2 and take_profit_2 < entry_price:
closer = max(take_profit_1, take_profit_2)
further = min(take_profit_1, take_profit_2)
if closer < entry_price:
take_profit_1 = closer
take_profit_2 = further
# 记录到数据库(只有在订单真正成交后才保存)
trade_id = None
@ -2299,6 +2312,21 @@ class PositionManager:
take_profit_price = take_profit_price or self.risk_manager.get_take_profit_price(entry_price, side, quantity, leverage, take_profit_pct=take_profit_pct)
if take_profit_2 is None and take_profit_price is not None:
take_profit_2 = take_profit_price
if take_profit_1 is not None and take_profit_2 is not None:
if side == 'BUY':
if take_profit_1 >= take_profit_2 and take_profit_2 > entry_price:
closer = min(take_profit_1, take_profit_2)
further = max(take_profit_1, take_profit_2)
if closer > entry_price:
take_profit_1 = closer
take_profit_2 = further
else:
if take_profit_1 <= take_profit_2 and take_profit_2 < entry_price:
closer = max(take_profit_1, take_profit_2)
further = min(take_profit_1, take_profit_2)
if closer < entry_price:
take_profit_1 = closer
take_profit_2 = further
position_info = {
'symbol': symbol,
'side': side,