簡體   English   中英

IbPy 無法發送訂單 - 必須指定一個帳戶

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM