Ошибка 320 после IBApi.EClient.placeOrder() в Python и Interactive Brokers

Я пытаюсь разместить заказ через Python API Interactive Brokers, но получаю сообщение об ошибке:

ОШИБКА 1 320 Ошибка запроса чтения: невозможно проанализировать данные. java.lang.NumberFormatException: для входной строки: "1,7976931348623157e+308"

Подключение и получение данных работает нормально, но при отправке заказа один из моих параметров кажется неправильным, и я просто не могу понять, что это такое. Я внимательно следил за документацией IB, так что это стало для меня неожиданностью.

К сожалению, код ошибки (320) на самом деле ничего не говорит, так как IB просто описывает его как «Ошибка сервера».

Единственный связанный с вопрос, который я нашел в Интернете, связывает ошибку с недопустимым идентификатором, но я проверил свой, и все должно быть в порядке.

Код:

from ibapi.client import EClient
from ibapi.wrapper import EWrapper
from ibapi.contract import Contract
from ibapi.order import Order

import threading

class IBapi(EWrapper, EClient):
    def __init__(self):
        EClient.__init__(self, self)

def run_loop():
    app.run()

app = IBapi()
app.connect('127.0.0.1', 7496, 1)

api_thread = threading.Thread(target = run_loop, daemon = True)
api_thread.start()

ctr = Contract()
ctr.symbol = 'AAPL'
ctr.secType = 'STK'
ctr.exchange = 'SMART'
ctr.currency = 'USD'

ord = Order()
ord.action = 'BUY'
ord.orderType = 'LMT'
ord.totalQuantity = 1
ord.lmtPrice = 150

app.reqIds(-1)
id = app.nextValidOrderId
print(id)
print(isinstance(id, int))

app.placeOrder(id, ctr, ord)

возвращает:

1
True
ERROR 1 320 Error reading request: Unable to parse data. java.lang.NumberFormatException: For input string: "1.7976931348623157e+308"

Моя версия TWS — 10.20.1d, которая является последней на данный момент (поскольку это исправило несколько связанный вопрос).

Может кто-нибудь помочь мне с тем, что я делаю неправильно, пожалуйста?

Какая версия API у вас установлена? Помимо небольшого изменения с nextValidOrderId, это работает для меня на 10.20.1d и API_Version=10.20.01.

dno 01.12.2022 01:57

Спасибо, я использовал 10.19, и обновление решило проблему.

okost 01.12.2022 19:26

Кстати, если вы отправите свой комментарий в качестве ответа, я принимаю его как решение.

okost 03.12.2022 14:51
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
3
62
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Используя TWS 10.20.1d и API_Version=10.20.01, я обнаружил, что ваш код работает с небольшим изменением nextValidOrderId.

Предложите проверить версию API и обновить ее, если она не самая последняя.

Другие вопросы по теме