Форум программистов, компьютерный форум, киберфорум
Python
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 14.09.2022
Сообщений: 95

Код не покупает контракты

18.03.2024, 15:04. Показов 1876. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Написал код, который должен совершать сделки по фьючерсам.
Но почему то даже не может получить текущую цену (как я понял из вывода). Что не так в коде подскажите?
Кликните здесь для просмотра всего текста

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
import asyncio
import websockets
from pybit.unified_trading import (HTTP)
import par
 
API_KEY = 'xxx'
API_SECRET = 'xxx'
 
# Устанавливаем параметры подключения
api_key = API_KEY
api_secret = API_SECRET
testnet = False  # Установить True, если используете тестовую сеть
 
# Создаем сессию API
session = HTTP(testnet=testnet, api_key=api_key, api_secret=api_secret)
 
async def check_price_and_trade():
    while True:
        # Получаем текущую цену фьючерса
        current_price = session.get_tickers(category="linear", symbol=par.futures_pair)["result"]["price"]
 
        # Проверяем, нужно ли совершить покупку
        if current_price <= par.current_market_price:
            quantity = par.futures_quantity
            session.place_order(symbol=par.futures_pair, side=par.trade_side, orderType=par.order_type, qty=quantity)
            print(f"Куплено {quantity} по цене {current_price}")
 
        # Проверяем, нужно ли совершить продажу
        elif current_price >= par.current_market_price:
            quantity = par.futures_quantity
            session.place_order(symbol=par.futures_pair, side=par.trade_side, orderType=par.order_type, qty=quantity)
            print(f"Продано {quantity} по цене {current_price}")
 
        # Пауза перед следующей проверкой
        await asyncio.sleep(par.trade_frequency)
 
# Добавляем интеграцию с WebSocket для мониторинга цены
async def on_message(message):
    print(f"Received message: {message}")
 
async def connect_websocket():
    # URL для подключения к WebSocket
    uri = "wss://stream.bybit.com/realtime"
    async with websockets.connect(uri) as websocket:
        await websocket.send('{"op":"subscribe","args":["orderBookL2_25.BTCUSD"]}')
        while True:
            response = await websocket.recv()
            await on_message(response)
 
# Запускаем WebSocket и проверку цены и торговлю в асинхронном режиме
async def main():
    tasks = [asyncio.create_task(connect_websocket()), asyncio.create_task(check_price_and_trade())]
    await asyncio.gather(*tasks)
 
# Запускаем основную программу
asyncio.run(main())

вывод:
Кликните здесь для просмотра всего текста

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
C:\Python\bybit\venv\Scripts\python.exe C:\Python\bybit\venv\trd.py 
Traceback (most recent call last):
  File "C:\Python\bybit\venv\trd.py", line 56, in <module>
    asyncio.run(main())
  File "C:\Python\Lib\asyncio\runners.py", line 194, in run
    return runner.run(main)
           ^^^^^^^^^^^^^^^^
  File "C:\Python\Lib\asyncio\runners.py", line 118, in run
    return self._loop.run_until_complete(task)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Python\Lib\asyncio\base_events.py", line 684, in run_until_complete
    return future.result()
           ^^^^^^^^^^^^^^^
  File "C:\Python\bybit\venv\trd.py", line 53, in main
    await asyncio.gather(*tasks)
  File "C:\Python\bybit\venv\trd.py", line 20, in check_price_and_trade
    current_price = session.get_tickers(category="linear", symbol=par.futures_pair)["result"]["price"]
                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^
KeyError: 'price'
 
Process finished with exit code 1

параметры:
Кликните здесь для просмотра всего текста

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# futures_params.py
 
# Торговая пара
futures_pair = 'BTCUSD'
 
# Количество фьючерсов
futures_quantity = 1
 
# Текущая цена по рынку
current_market_price = 69900
 
# Тип ордера (Лимит или по рынку)
order_type = 'Market'
 
# Сторона сделки (Buy - покупка, Sell - продажа)
trade_side = 'Sell'
 
# Торговое плечо
leverage = 5

Вот документация какие инструменты доступны:
Кликните здесь для просмотра всего текста
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
18.03.2024, 15:04
Ответы с готовыми решениями:

Mef и контракты
начал разбираться с mef, в доках написано что контракты должны совпадать, то есть public class MyClass { - можно typeof не...

Сущности и контракты
Доброго времени суток. У меня есть WCF который работает с SQL с помощью EntityFramework, соответсвенно у меня есть некоторый DAL и...

Смарт-контракты Ethereum
Здравствуйте, собираюсь разрабатывать web3 приложение с использованием смарт-контрактов. Хотел бы спросить у более опытных ребят в этой...

5
 Аватар для TimutGin
515 / 339 / 146
Регистрация: 16.02.2021
Сообщений: 626
18.03.2024, 20:52
Python
1
        current_price = session.get_tickers(category="linear", symbol=par.futures_pair)["result"]["list"][0]["lastPrice"]
1
0 / 0 / 0
Регистрация: 14.09.2022
Сообщений: 95
19.03.2024, 17:28  [ТС]
цена по маркету приходит.
Сейчас в выводе ругается на запрос Market или символы:
Кликните здесь для просмотра всего текста

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
C:\Python\bybit\venv\Scripts\python.exe C:\Python\bybit\venv\trd.py 
Текущая цена: 62562.5, Цена рынка: 69900
Traceback (most recent call last):
  File "C:\Python\bybit\venv\trd.py", line 67, in <module>
    asyncio.run(main())
  File "C:\Python\Lib\asyncio\runners.py", line 194, in run
    return runner.run(main)
           ^^^^^^^^^^^^^^^^
  File "C:\Python\Lib\asyncio\runners.py", line 118, in run
    return self._loop.run_until_complete(task)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Python\Lib\asyncio\base_events.py", line 684, in run_until_complete
    return future.result()
           ^^^^^^^^^^^^^^^
  File "C:\Python\bybit\venv\trd.py", line 64, in main
    await asyncio.gather(*tasks)
  File "C:\Python\bybit\venv\trd.py", line 36, in check_price_and_trade
    session.place_order(symbol=par.futures_pair, side=par.trade_side, orderType=par.order_type, qty=quantity)
  File "C:\Python\bybit\venv\Lib\site-packages\pybit\_v5_trade.py", line 21, in place_order
    return self._submit_request(
           ^^^^^^^^^^^^^^^^^^^^^
  File "C:\Python\bybit\venv\Lib\site-packages\pybit\_http_manager.py", line 367, in _submit_request
    raise InvalidRequestError(
pybit.exceptions.InvalidRequestError: Illegal category (ErrCode: 10001) (ErrTime: 14:27:13).
Request → POST https://api.bybit.com/v5/order/create: {"symbol": "BTCUSD", "side": "Sell", "orderType": "Market", "qty": "1"}.
 
Process finished with exit code 1

вот такие параметры запрашиваю:
Кликните здесь для просмотра всего текста

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# Торговая пара
futures_pair = "BTCUSD"
 
# Количество фьючерсов
futures_quantity = 1
 
# Текущая цена по рынку
current_market_price = 69900
 
# Тип ордера (Лимит или по рынку)
order_type = "Market"
 
# Сторона сделки (Buy - покупка, Sell - продажа)
trade_side = "Sell"
 
# Торговое плечо
leverage = 5
0
 Аватар для TimutGin
515 / 339 / 146
Регистрация: 16.02.2021
Сообщений: 626
19.03.2024, 20:06
если правильно понимаю проблема в category
Python
1
InvalidRequestError: Illegal category (ErrCode: 10001)
0
0 / 0 / 0
Регистрация: 14.09.2022
Сообщений: 95
20.03.2024, 14:38  [ТС]
Я тоже видел эту ошибку.
Она гласит как я понял, что я не тот параметр запрашиваю.
Почитал доку. Возможно не правильно указан параметр category.
Добавил option:
Кликните здесь для просмотра всего текста

Python
1
2
3
4
5
6
7
8
9
10
11
        # Проверяем, нужно ли совершить покупку
        if current_price <= current_market_price:
            quantity = par.futures_quantity
            session.place_order(symbol=par.futures_pair, side=par.trade_side, orderType=par.order_type, qty=quantity, category="option")
            print(f"Куплено {quantity} по цене {current_price}")
 
        # Проверяем, нужно ли совершить продажу
        elif current_price >= current_market_price:
            quantity = par.futures_quantity
            session.place_order(symbol=par.futures_pair, side=par.trade_side, orderType=par.order_type, qty=quantity, category="option")
            print(f"Продано {quantity} по цене {current_price}")

теперь другая ошибка. Вывод:
Кликните здесь для просмотра всего текста

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
C:\Python\bybit\venv\Scripts\python.exe C:\Python\bybit\venv\trd.py 
Текущая цена: 63120.5, Цена рынка: 69900
Traceback (most recent call last):
  File "C:\Python\bybit\venv\trd.py", line 67, in <module>
    asyncio.run(main())
  File "C:\Python\Lib\asyncio\runners.py", line 194, in run
    return runner.run(main)
           ^^^^^^^^^^^^^^^^
  File "C:\Python\Lib\asyncio\runners.py", line 118, in run
    return self._loop.run_until_complete(task)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Python\Lib\asyncio\base_events.py", line 684, in run_until_complete
    return future.result()
           ^^^^^^^^^^^^^^^
  File "C:\Python\bybit\venv\trd.py", line 64, in main
    await asyncio.gather(*tasks)
  File "C:\Python\bybit\venv\trd.py", line 36, in check_price_and_trade
    session.place_order(symbol=par.futures_pair, side=par.trade_side, orderType=par.order_type, qty=quantity, category="option")
  File "C:\Python\bybit\venv\Lib\site-packages\pybit\_v5_trade.py", line 21, in place_order
    return self._submit_request(
           ^^^^^^^^^^^^^^^^^^^^^
  File "C:\Python\bybit\venv\Lib\site-packages\pybit\_http_manager.py", line 367, in _submit_request
    raise InvalidRequestError(
pybit.exceptions.InvalidRequestError: Option Trading is for Cross Margin users and Portfolio Margin users only. (ErrCode: 3200403) (ErrTime: 08:20:29).
Request → POST https://api.bybit.com/v5/order/create: {"symbol": "BTCUSD", "side": "Sell", "orderType": "Market", "qty": "1", "category": "option"}.
 
Process finished with exit code 1

Ошибка 3200403 гласит: изолированная маржа не позволяет создать заказ.
ИИ пишет по этому поводу:
Кликните здесь для просмотра всего текста

Ошибка "Option Trading is for Cross Margin users and Portfolio Margin users only. (ErrCode: 3200403)" указывает на то, что торговля опционами доступна только для пользователей, использующих кросс-маржу (Cross Margin) или портфельную маржу (Portfolio Margin). В вашем случае, скорее всего, у вас установлена изолированная маржа (Isolated Margin), которая не поддерживает торговлю опционами.

Чтобы исправить эту ошибку, вам нужно убедиться, что ваш аккаунт на бирже Bybit настроен для использования кросс-маржи (Cross Margin) или портфельной маржи (Portfolio Margin). Если ваш аккаунт уже настроен для использования одной из этих марж, возможно, вам нужно обновить настройки вашего аккаунта на бирже Bybit или связаться с поддержкой биржи для дальнейшей помощи.

пока вообще ни чего не понял.

Добавлено через 2 часа 55 минут
Я то планирую торговать изолированной моржой.
Как это исправить?
0
 Аватар для TimutGin
515 / 339 / 146
Регистрация: 16.02.2021
Сообщений: 626
20.03.2024, 17:00
Ну похоже опционами не поторговать
Цитата Сообщение от menachem Посмотреть сообщение
В вашем случае, скорее всего, у вас установлена изолированная маржа (Isolated Margin), которая не поддерживает торговлю опционами.
Миниатюры
Код не покупает контракты  
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
20.03.2024, 17:00
Помогаю со студенческими работами здесь

Купим постоянно контракты (sim-карты)
Покупаем старт. пакеты операторов мобильной связи (только контракты с абонентской платой) из России с ПОСТОПЛАТНОЙ системой: ...

Связи в Аксес Филиалы - Контракты - Виды Работ
Здравствуйте! Я новичок. К завтра надо сделать БД Аксес. Сейчас у меня вопрос такой. --Три таблицы. Филиалы - Контракты - Виды Работ....

Группа профессиональных программистов и веб-разработчиков ищет новые контракты на разработку
Группа профессиональных программистов и веб-разработчиков ищет новые контракты на основе аутсорсинга. Опыт работы персонала от 5 до 10...

Посчитать, сколько переговоров провел каждый сотрудник и на какую сумму заключил контракты
Доброе время суток, Помогите пожалуйста с еще одним вопросом по Access. Мне кажеться достаточно просто, но что-то не соображу как...

Лука покупает динозавров
Лука покупает динозавров Ограничение по времени: 1 секунда На карте «Шестёрочки» у Луки уже есть t бонусных баллов, за которые он...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
1С: Контроль уникальности заводского номера
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью. Данные берутся из регистра сведений, по которому настроено. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
1С: Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
1С: Программный отбор элементов справочника по значению перечисления
Maks 21.03.2026
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит значение перечислений. / / Событие "НачалоВыбора" реквизита на форме. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru