Почему открытая позиция не закрывается с помощью pybit?Python

Программы на Python
Anonymous
Почему открытая позиция не закрывается с помощью pybit?

Сообщение Anonymous »

Привет, пожилые люди! 😊 Я новичок в разработке торговых ботов.
Сейчас ищу помощника, который поможет мне быстро разобраться в этом вопросе.Это мой код:

Код: Выделить всё

class TradingBot:
def __init__(self, symbol, leverage, trigger_price, order_price, stop_loss, take_profit, amount):
self.symbol = symbol
self.leverage = leverage
self.trigger_price = trigger_price
self.order_price = order_price
self.stop_loss = stop_loss
self.take_profit = take_profit
self.amount = amount
self.running = True

def set_leverage(self):
try:
session.set_leverage(
category="linear",
symbol=self.symbol,
buyLeverage=str(self.leverage),
sellLeverage=str(self.leverage)
)
except Exception as e:
print(f"Error setting leverage: {e}")

def place_conditional_order(self):
qty = round(self.amount / self.order_price, 3)

return session.place_order(
category="linear",
symbol=self.symbol,
side="Sell",
orderType="Limit",
qty=str(qty),
price=str(self.order_price),
timeInForce="GTC",
reduceOnly=False,
orderFilter="Order",
)

def set_tp_sl(self):
return session.set_trading_stop(
category="linear",
symbol=self.symbol,
takeProfit=self.take_profit,
stopLoss=self.stop_loss,
tpTriggerBy="MarkPrice",
slTriggerB="IndexPrice",
tpslMode="Partial",
tpOrderType="Limit",
slOrderType="Limit",
tpSize=self.amount,
slSize=self.amount,
positionIdx=0,
)

def has_open_position(self):
position = session.get_positions(
category="linear",
symbol=self.symbol
)['result']['list'][0]
return float(position['size']) != 0

def run(self):
self.set_leverage()
while self.running:
try:
if self.has_open_position():
print("Open position exists. Monitoring...")
while self.running and self.has_open_position():
print("Position still open. Monitoring...")
time.sleep(60)
else:
order = self.place_conditional_order()
order_id = order['result']['orderId']
self.set_tp_sl()

while True:
order_status = session.get_order_history(
category="linear",
symbol=self.symbol,
orderId=order_id
)['result']['list'][0]

if order_status['orderStatus'] == "Filled":
print(f"Order filled: {order_id}")
break
elif order_status['orderStatus'] == "Cancelled":
print(f"Order cancelled: {order_id}")
break
time.sleep(5)

except Exception as e:
print(f"An error occurred: {e}")
time.sleep(60)

def stop(self):
self.running = False
print("Bot stopped. Existing positions remain open.")

bot = TradingBot(
symbol="BTCUSDT",
leverage=1,
trigger_price=59500,
order_price=59500,
stop_loss=59600,
take_profit=59300,
amount=100  # USDT
)

# Run the bot
bot.run()
При тестировании этого бота в тестовой сети я обнаружил проблему, заключающуюся в том, что открытая позиция не закрывается, когда цены достигают значения стоп-лосса. Почему?
Пожалуйста, дайте мне знать, спасибо. 🙏
Я пытался создать торгового бота.

Подробнее здесь: https://stackoverflow.com/questions/790 ... sing-pybit

Вернуться в «Python»