Не удается использовать ibpy для отправки ордера на фьючерс в InteractiveBrokers - PullRequest
0 голосов
/ 12 октября 2018

Я использую ibpy для отправки заказов в TWS в InteractiveBrokers.Я могу отправлять заказы на акции, такие как SPY, но я не могу отправлять фьючерсы.Вот код, который я использую, скопированный онлайн:

from ib.opt import Connection, message
from ib.ext.Contract import Contract
from ib.ext.Order import Order

def make_contract(symbol, sec_type, exch, prim_exch, curr):
    Contract.m_symbol = symbol
    Contract.m_secType = sec_type
    Contract.m_exchange = exch
    Contract.m_primaryExch = prim_exch
    Contract.m_currency = curr
    return Contract

def make_order(action,quantity, price = None):
    if price is not None:
        order = Order()
        order.m_orderType = 'LMT'
        order.m_totalQuantity = quantity
        order.m_action = action
        order.m_lmtPrice = price
    else:
        order = Order()
        order.m_orderType = 'MKT'
        order.m_totalQuantity = quantity
        order.m_action = action
    return order

orderId=300
conn = Connection.create(port=7496, clientId=999)
conn.connect()
cont = make_contract('SPY', 'STK', 'SMART', 'SMART', 'USD')
trade = make_order('BUY', 1, 273)
conn.placeOrder(orderId, cont, trade)
conn.disconnect()

Код выше работает хорошо.Я могу сделать ставку в SPY на 273.

Однако я хочу купить E-mini Futures S & P 500 Dec Contract.Я сделал следующее, чтобы определить контракт:

def make_fut():
    Contract.m_symbol = 'ES'
    Contract.m_secType = 'FUT'
    Contract.m_exchange = 'GLOBEX'
    Contract.m_primaryExch = 'GLOBEX'
    Contract.m_currency = 'USD'
    Contract.m_lastTradeDateOrContractMonth ='201812'
    return Contract

cont = make_fut()

Он не прошел и не вернул сообщения об ошибках.У кого-нибудь есть опыт в этом?

Ответы [ 2 ]

0 голосов
/ 07 февраля 2019

Это то, что я использую для построения фьючерсных контрактов:

def create_contract(symbol, sec_type, exch, curr, exp = None, mult = None, localsymbol=None):
    contract = Contract()
    contract.m_symbol = symbol
    contract.m_secType = sec_type
    contract.m_exchange = exch
    contract.m_currency = curr
    contract.m_expiry = exp
    contract.m_multiplier = mult
    contract.m_localSymbol = localsymbol
    return contract

Для фьючерсов я могу обойтись с помощью symbol и exp ИЛИ я могу установить symbol = None и установить localsymbol (например,PLJ9 = Платина, апрель 2019 г.).

Мне никогда не было нужно prim_exch.

0 голосов
/ 15 октября 2018

Посмотрите на исходный код.https://github.com/blampe/IbPy/blob/master/ib/ext/Contract.py m_expiry = "" Так что просто используйте m_expiry = '201812'

Он не использует новое имя lastTradeDateOrContractMonth.Вы пометили этот Python 2.7, но если вы используете Python 3, вы можете использовать Python API от IB, который будет иметь некоторые новые функции.https://www.interactivebrokers.com/en/index.php?f=5041.При этом используется новое имя поля (без стилей m_).

Также Contract.m_primaryExch = 'GLOBEX' не требуется.Это когда вы указываете SMART для обмена, и это неоднозначно.например.Я думаю, что для вашего примера SPY вы должны указать ARCA, но это также не нужно, поскольку есть только одна акция SPY (etf).

...