[英]IbPy cant send order - must specify an account
我嘗試使用以下代碼嘗試向交易平台發送訂單以放置在谷歌股票上。 我不明白為什么它一直要求一個帳戶,我打開了 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.
如果我在模擬 IB 賬戶中運行代碼,訂單就會被放置和填充,所以一切正常! 但是當我在我的模擬交易賬戶中運行相同的代碼時,我就會收到上述錯誤消息。
有誰知道“指定一個帳戶”,即在某處輸入我的帳號?
感謝布賴恩,我現在有工作代碼,請參閱上面對原始問題的評論。 我想我會發布整個腳本,以防其他人在嘗試實現來自 Quantstart 網站的文章“使用 PYTHON、IBPY 和 INTERACTIVE BROKERS API 來自動化交易”中的代碼時遇到同樣的問題,順便說一句,這是一個很棒的網站.
因此,它只是通過向訂單定義添加一個額外的參數來輸入一個命令來為訂單提供一個帳號。 此參數允許在提交訂單時指定帳號。 在下面的腳本中,我沒有提供我的真實帳號,只是寫了“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()
還有一件需要注意的事情,這對某些人來說可能是顯而易見的,但對我來說不是第一件事,就是 order_id 每次都必須改變。 每個訂單都是唯一的並由 order_id 引用,因此如果使用上述代碼或添加的內容來增加它,則需要手動更改它。
祝交易愉快!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.