我正在使用ibpy在InteractiveBrokers中向TWS发送订单。 我可以发送股票订单,例如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()
上面的代码运行良好。 我能够以 273 的价格在 SPY 中出价。
但是,我想购买E-mini期货标准普尔500 Dec合约。 我做了以下定义合同:
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()
它没有通过,也没有收到错误消息。 有人在这方面有经验吗?
查看源代码。 https://github.com/blampe/IbPy/blob/master/ib/ext/Contract.pym_expiry = ""
所以只需使用m_expiry = '201812'
它不使用新名称lastTradeDateOrContractMonth
。 你标记了这个python 2.7,但如果你使用python 3,你可以使用IB的python API,它将有一些更新的功能。 https://www.interactivebrokers.com/en/index.php?f=5041 .这确实使用新的字段名称(没有m_样式(。
也不需要Contract.m_primaryExch = 'GLOBEX'
。 当您指定 SMART 进行交换并且它是模棱两可的时。 例如。我认为对于您的间谍示例,您应该指定 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_exch
.