3 votos

¿Error 321 en la API de Interactive Broker?

Hola, estoy teniendo problemas con la API de Interactive Broker en python. Estoy usando python 3.8 y conectándome a IB TWS ver. 979

cuando ejecuto este script de símbolo obtengo el siguiente error:

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

import threading
import time

class IBapi(EWrapper, EClient):
    def __init__(self):
        EClient.__init__(self, self)
    def tickPrice(self, reqId, tickType, price, attrib):
        if tickType == 2 and reqId == 1:
            print('El precio de oferta actual es: ', price)

def run_loop():
    app.run()

app = IBapi()
app.connect('127.0.0.1', 7497, 123)

# Iniciar el socket en un hilo
api_thread = threading.Thread(target=run_loop, daemon=True)
api_thread.start()

time.sleep(1) #Intervalo de espera para permitir que se realice la conexión al servidor

fut_contract = Contract()
fut_contract.symbol = "MNQU0" #MNQ SEP'20"
fut_contract.secType = 'FUT'
fut_contract.exchange = 'GLOBEX'
fut_contract.currency = 'USD'
fut_contract.LocalSymbol = 'MNQU0'
fut_contract.LastTradeDateOrContractMonth = "202009";

#Solicitar Datos de Mercado
app.reqMktData(1, fut_contract, '', False, False, [])

time.sleep(100) #Intervalo de espera para permitir que lleguen los datos de precios
app.disconnect()

Error:

Error 1 321 error validando solicitud:-'bW' : causa - Por favor ingrese un símbolo local o vencimiento

No puedo ver qué estoy haciendo mal. No puedo encontrar ningún otro campo de Contact() relacionado con el vencimiento.

Gracias

2 votos

Probablemente sea mejor preguntar al soporte técnico de IB.

3 votos

..o en un grupo especializado como este groups.io/g/twsapi

5voto

dmuir Puntos 146

Intente cambiar LocalSymbol por tradingClass y cambiar Last..Month por last..Month:

fut_contract = Contract()
fut_contract.symbol = 'MNQU0' #MNQ SEP'20
fut_contract.secType = 'FUT'
fut_contract.exchange = 'GLOBEX'
fut_contract.currency = 'USD'
fut_contract.tradingClass = 'MNQ'
fut_contract.lastTradeDateOrContractMonth = '202009'

#Solicitar datos de mercado
app.reqMktData(1, fut_contract, '', True, False, [])

Cambié el cuarto argumento a True porque no quería solicitar un flujo, solo una instantánea. ¡Ten cuidado con las mayúsculas y minúsculas!

Esto es lo que me devuelve cuando ejecuto tu script con los cambios que sugiero:

El precio de compra actual es:  10765.5

1 votos

¡Corregido! Parece que el cambio a tradingClass solo era necesario si el cuarto argumento era 'Verdadero'... ¡Gracias!

Finanhelp.com

FinanHelp es una comunidad para personas con conocimientos de economía y finanzas, o quiere aprender. Puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X