0

我正在使用 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-迷你期货 S&P 500 12 月合约。我做了以下定义合同:

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()

它没有通过,也没有返回错误消息。有没有人有这方面的经验?

4

2 回答 2

1

查看源代码。 https://github.com/blampe/IbPy/blob/master/ib/ext/Contract.py m_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 进行交换时,它是模棱两可的。例如。我认为对于您的 SPY 示例,您应该指定 ARCA,但这也是不必要的,因为只有一个 SPY 股票(etf)。

于 2018-10-15T14:33:46.827 回答
0

这是我用来建立期货合约的:

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

对于期货,我可以使用symboland expOR 我可以设置symbol = None和设置localsymbol(例如 PLJ9 = Platinum April 2019)。

我从来不需要prim_exch

于 2019-02-06T23:56:54.177 回答