@Sibir9Ik
друзья, пожалуйста, максимально простым языком ^^,

Как исправить ошибку pybit.exceptions.InvalidRequestError: Position idx not match position mode (ErrCode: 130001)?

Вопрос по библиотеке pybit.
а именно по фьючам
from pybit import usdt_perpetual
Никак не получает составить запрос на открытие ордера... =( кто-нибудь писал подобных торговых ботов? Подскажите пожалуйста в какую сторону капать..

def newOrder(symbl, side, qty,type):
    session_auth.place_active_order(
                                    symbol=symbl,
                                    side=side,
                                    qty=qty,
                                    order_type=type,
                                    time_in_force="GoodTillCancel",
                                    reduce_only=False,
                                    close_on_trigger=False,
                                    )

price = checkPrice('GMTUSDT')
buyCoin = 10 / price
comisTake = buyCoin * 0.04
comisMake = buyCoin * 0.02
targetLine = price * 1.035 + comisMake + comisTake

newOrder(symbl='GMTUSDT', side='Buy', qty=10.0, type='Market')
newOrder(symbl='GMTUSDT', side='Sell', order_type='Limit', LastPrice=targetLine, qty=10.0)


Возвращает ошибку:
pybit.exceptions.InvalidRequestError: Position idx not match position mode (ErrCode: 130001) (ErrTime: 15:17:56).
Request → POST https://api.bybit.com/private/linear/order/create: {'api_key': 'akK1pk8VvlyGiuq2w7', 'close_on_trigger': False, 'order_type': 'Market', 'qty': 10, 'recv_window': 5000, 'reduce_only': False, 'side': 'Buy', 'symbol': 'GMTUSDT', 'time_in_force': 'GoodTillCancel', 'timestamp': 1679152675938, 'sign': '3be863d29a1609d7e5aec4786c42de3d1183bb0c33cd77d4c82862495833676d'}.


Лезу в доку - https://bybit-exchange.github.io/docs-legacy/futur...
6415da4e5e97d782557848.png

Необязательный параметр который принимает всего 3 варианта аргумента 0, 1 и 2.

добавляю аргумент в функцию:

newOrder(symbl='GMTUSDT', side='Buy', qty=10.0, type='Market', position_idx=1)


Получаю ошибку
line 439, in <module>
    newOrder(symbl='GMTUSDT', side='Buy', qty=10.0, type='Market', position_idx=1)
TypeError: newOrder() got an unexpected keyword argument 'position_idx
  • Вопрос задан
  • 799 просмотров
Пригласить эксперта
Ответы на вопрос 2
phaggi
@phaggi Куратор тега Python
лужу, паяю, ЭВМы починяю
Мало добавить передачу параметра в функцию. Надо в заголовке функции этот параметр указать, чтобы функция ожидала этот параметр.
Поскольку параметр не обязательный, можно это организовать через **kwargs если вы понимаете о чем я. Или через указание значения по-умолчанию None и опять же дальнейшую обработку если не None.
А также добавить внутри функции правильное применение этого параметра, если он передан в функцию - в данном случае передачу его как параметра в метод .place_active_order(), который в функции вызывается
Ответ написан
Комментировать
@askadetov
Сам мучался с этой ошибкой и наконец разобрался. Напишу как это решается на момент начала 2024, так как документация сейчас новая. Есть такой параметр position mode, он принимает значение 0 (one-way) и 1 (hedge). One-way значит, что можно открывать позицию только в одну сторону - покупка или продажа, hedge позволяет открывать позиции в обе стороны. Когда в настройках указано значение hedge, то возникает данная ошибка при открытии позиции. Чтобы не было ошибки меняем режим на one-way c помощью кода:

from pybit.unified_trading import HTTP

session = HTTP(
testnet=True,
api_key="XXXXX",
api_secret="XXXXX",
)

session.switch_position_mode(
category="linear",
symbol="BTCUSDT",
mode=0,
)

Можно поменять и через сайт или приложение, но я не нашел где, мне проще через api =)
ссылка на документацию: https://bybit-exchange.github.io/docs/v5/position/...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы