Python IbPy无法发送订单-必须指定帐户

Python IbPy无法发送订单-必须指定帐户,python,ibpy,Python,Ibpy,我正在尝试使用以下代码尝试向TWS发送一个订单,以便在google共享上下订单。我不明白为什么它一直要求一个帐户,我有TWS打开,并已检查启用ActiveX等。我还检查了套接字号码和客户端ID是否正确 from ib.ext.Contract import Contract from ib.ext.Order import Order from ib.opt import Connection, message import time def error_handler(msg): p

我正在尝试使用以下代码尝试向TWS发送一个订单,以便在google共享上下订单。我不明白为什么它一直要求一个帐户,我有TWS打开,并已检查启用ActiveX等。我还检查了套接字号码和客户端ID是否正确

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

def error_handler(msg):
    print "Server Error: %s" % msg

def reply_handler(msg):
    print "Server Response: %s, %s" % (msg.typeName, msg)

def create_contract(symbol, sec_type, exch, prim_exch, curr):
    contract = Contract()
    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 create_order(order_type, quantity, action):
    order = Order()
    order.m_orderType = order_type
    order.m_totalQuantity = quantity
    order.m_action = action
    return order

if __name__ == "__main__":
    tws_conn = Connection.create(port=7496, clientId=100)
    tws_conn.connect()

    tws_conn.register(error_handler, 'Error')

    tws_conn.registerAll(reply_handler)

    order_id = 200

    goog_contract = create_contract('GOOG', 'STK', 'SMART', 'SMART', 'USD')

    goog_order = create_order('MKT', 5, 'BUY')

    tws_conn.placeOrder(order_id, goog_contract, goog_order)

    time.sleep(1)

    tws_conn.disconnect()
我得到以下错误

Server Response: error, <error id=200, errorCode=321, errorMsg=Error validating request:-'ie' : cause - You must specify an account.

Server-Response:error,多亏了Brian,我现在有了可用的代码,请参见上面对原始问题的评论。我想我会发布整个脚本,以防其他人在试图实现Quantstart网站上的文章“使用PYTHON、IBPY和交互式经纪人API实现交易自动化”中的代码时遇到同样的问题,顺便说一句,Quantstart网站是一个很棒的网站

因此,它只是通过在订单定义中添加一个额外的参数来输入一个命令,为订单提供一个帐号。此参数允许在提交订单时指定帐号。在下面的脚本中,我没有提供我的真实帐号,只是写了“DUxxxxxx”,其中“x”是数字,对于我自己来说,这个帐号在TWS GUI的右上角清晰可见

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

def error_handler(msg):
    print "Server Error: %s" % msg

def reply_handler(msg):
    print "Server Response: %s, %s" % (msg.typeName, msg)

def create_contract(symbol, sec_type, exch, prim_exch, curr):
    contract = Contract()
    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 create_order(order_type, quantity, action, account):
    order = Order()
    order.m_orderType = order_type
    order.m_totalQuantity = quantity
    order.m_action = action
    order.m_account = account
    return order

if __name__ == "__main__":
    tws_conn = Connection.create(port=7496, clientId=100)
    tws_conn.connect()

    tws_conn.register(error_handler, 'Error')

    tws_conn.registerAll(reply_handler)

    order_id = 200

    goog_contract = create_contract('GOOG', 'STK', 'SMART', 'SMART', 'USD')

    goog_order = create_order('MKT', 5, 'BUY', 'DUxxxxxx')

    tws_conn.placeOrder(order_id, goog_contract, goog_order)

    time.sleep(1)

    tws_conn.disconnect()
还有一件事需要注意,对某些人来说可能是obvoius,但首先对我来说不是,那就是订单id每次都必须改变。每个订单都是唯一的,并且由订单id引用,因此如果使用上述代码或添加的内容来增加它,则需要手动更改


交易愉快

你有子账户吗?您可以指定order.m_帐户,但我从未指定过。没有子账户。我确实看到了order.m_帐户,但上面写着“仅供机构客户使用”。顺便问一下,我该如何使用order.m_帐户?我对python/ibpy/ibapi的所有东西都很陌生。你只需要尝试不同的帐号。我已经读到FA账户也使用它。什么是FA账户?财务顾问或者朋友和家人。它可能是针对具体国家的。如果你有个人退休账户和普通账户呢?