Python 2.7 无法在InteractiveBrokers中使用ibpy发送期货订单

Python 2.7 无法在InteractiveBrokers中使用ibpy发送期货订单,python-2.7,interactive-brokers,ibpy,Python 2.7,Interactive Brokers,Ibpy,我正在使用ibpy向InteractiveBroker中的TWS发送订单。我可以发送股票订单,如间谍,但我不能发送期货。以下是我正在使用的代码,在线复制: 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):

我正在使用ibpy向InteractiveBroker中的TWS发送订单。我可以发送股票订单,如间谍,但我不能发送期货。以下是我正在使用的代码,在线复制:

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()
上面的代码运行良好。我可以出价273英镑买间谍

然而,我想买标准普尔500指数十二月期货合约。我对合同做了如下定义:

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()
它没有通过,也没有返回错误消息。有人在这方面有经验吗?

看看源代码。
m_expiration=”“
所以只要使用
m_expiry='201812'

它不使用新名称
LastTradeDate或ContractMonth
。您标记了这个Python2.7,但是如果您使用Python3,您可以使用IB的PythonAPI,它将具有一些更新的特性。它使用新的字段名(不带m_u样式)


另外,
Contract.m_primaryExch='GLOBEX'
是不必要的。当您为exchange指定SMART时,它是不明确的。例如,我认为对于您的SPY示例,您应该指定ARCA,但这也没有必要,因为只有一只SPY股票(etf)。

这是我用于构建期货合约的方法:

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年4月白金)

我从来都不需要
prim\u exch