簡體   English   中英

帶有Interactive Brokers API的Ibpy無法正常工作

[英]Ibpy with Interactive Brokers API not working

我覺得根本上有問題。 我從示例代碼轉到嘗試每種示例代碼,但從未成功。

以下是Ive運行的腳本和響應的集合。 這些腳本大多數來自在StackOverflow上找到的示例,此人似乎在(獲得一些幫助之后)成功了。 I,我沒有成功,只是覺得Im所做的事情一定有問題。

在開始使用似乎無法使用的腳本之前,請先為我的Interactive Brokers GUI,TWS配置。

API-設置

選中:啟用ActiveX和套接字客戶端。 未選中:啟用DDE客戶端。 未選中:只讀API。 選中:下載連接上的未結訂單。 選中:發送投資組合時包括外匯。 選中:發送EEP的狀態更新。 套接字端口=7496。已選中:使用負數綁定自動訂單。 未選中:創建API消息日志文件。 未選中:在API日志文件中包含市場數據。 未選中:讓API帳戶請求切換用戶可見的acc訂閱。 日志記錄級別=錯誤。 主API客戶端ID =100。將批量數據發送到API的超時時間為30秒。 組件交換分隔符=空白(此處無條目)。 選中:僅允許來自本地主機的連接。

API-注意事項已選中:API訂單的繞過訂單注意事項。 此選項卡中所有未選中的其他所有內容。

范例1。

#test_conn.py

from ib.opt import ibConnection
con = ibConnection(port=7496,clientId=100)
print(con.connect())

運行腳本和響應

C:\Users\alex>python test_conn.py
Server Version: 76
TWS Time at connection:20160314 16:13:59 ICT
True
True

我想我可以與交易平台建立聯系嗎?

示例2

#test_portfolio.py

from ib.opt import ibConnection, message

def acct_update(msg):
    print(msg)

con = ibConnection(port=7496,clientId=100)
con.register(acct_update,
             message.updateAccountValue,
             message.updateAccountTime,
             message.updatePortfolio)
con.connect()
con.reqAccountUpdates(True,'DU358588')

#don't forget to disconnect somehow when done
con.disconnect()

運行腳本和響應

C:\Users\alex>python test_portfolio.py
Server Version: 76
TWS Time at connection:20160314 16:25:59 ICT

C:\Users\alex>

那么什么也沒有退還?

范例3。

#test_mkt_data.py

from ib.opt import ibConnection, message
from ib.ext.Contract import Contract
from time import sleep

def my_callback_handler(msg):
    inside_mkt_bid = ''
    inside_mkt_ask = ''

    if msg.field == 1:
        inside_mkt_bid = msg.price
        print 'bid', inside_mkt_bid
    elif msg.field == 2:
        inside_mkt_ask = msg.price
        print 'ask', inside_mkt_ask

tws = ibConnection()
tws.register(my_callback_handler, message.tickSize, message.tickPrice)
tws.connect()

c = Contract()
c.m_symbol = "GOOG"
c.m_secType = "STK"
c.m_exchange = "SMART"
c.m_currency = "USD"

tws.reqMktData(1,c,"",False)
sleep(25)

print 'All done'

tws.disconnect()

運行腳本和響應

C:\Users\alex>python test_mkt_data.py
Server Version: 76
TWS Time at connection:20160314 16:31:54 ICT
All done
Exception in thread EReader (likely raised during interpreter shutdown):
C:\Users\alex>

再次,什么都沒有返回?

范例4。

#test_historical.py

from time import sleep, strftime
from time import sleep
from ib.ext.Contract import Contract
from ib.opt import ibConnection, message

def my_account_handler(msg):
    print(msg)

def my_tick_handler(msg):
    print(msg)

def my_hist_data_handler(msg):
    print(msg)


if __name__ == '__main__':

    con = ibConnection(port=7496,clientId=100)
    con.register(my_account_handler, 'UpdateAccountValue')
    con.register(my_tick_handler, message.tickSize, message.tickPrice)
    con.register(my_hist_data_handler, message.historicalData)
    con.connect()

    print(con.isConnected())

    def inner():

        qqqq = Contract()
        qqqq.m_secType = "STK" 
        qqqq.m_symbol = "GOOG"
        qqqq.m_currency = "USD"
        qqqq.m_exchange = "SMART"
        endtime = strftime('%Y%m%d %H:%M:%S')
    print(endtime)
        print(con.reqHistoricalData(1,qqqq,endtime,"5 D","1     hour","MIDPOINT",0,1))



        sleep(10)

    inner()
    sleep(5)
    print('disconnected', con.disconnect())
    print(con.isConnected())

運行腳本和響應

C:\Users\alex>python test_historical.py
Server Version: 76
TWS Time at connection:20160314 16:38:03 ICT
True
20160314 16:38:04
None
('disconnected', True)
False

C:\Users\alex>

沒有歷史數據? 刪除“ print(con.req ...)”中的“ print”仍然沒有區別。

示例5

# ib_api_demo.py

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

def error_handler(msg):
    """Handles the capturing of error messages"""
    print "Server Error: %s" % msg

def reply_handler(msg):
    """Handles of server replies"""
    print "Server Response: %s, %s" % (msg.typeName, msg)

def create_contract(symbol, sec_type, exch, prim_exch, curr):
    """Create a Contract object defining what will
    be purchased, at which exchange and in which currency.

    symbol - The ticker symbol for the contract
    sec_type - The security type for the contract ('STK' is 'stock')
    exch - The exchange to carry out the contract on
    prim_exch - The primary exchange to carry out the contract on
    curr - The currency in which to purchase the contract"""
    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):
    """Create an Order object (Market/Limit) to go long/short.

    order_type - 'MKT', 'LMT' for Market or Limit orders
    quantity - Integral number of assets to order
    action - 'BUY' or 'SELL'"""
    order = Order()
    order.m_orderType = order_type
    order.m_totalQuantity = quantity
    order.m_action = action
    return order

if __name__ == "__main__":
    # Connect to the Trader Workstation (TWS) running on the
    # usual port of 7496, with a clientId of 100
    # (The clientId is chosen by us and we will need 
    # separate IDs for both the execution connection and
    # market data connection)
    tws_conn = Connection.create(port=7496, clientId=100)
    tws_conn.connect()

    # Assign the error handling function defined above
    # to the TWS connection
    tws_conn.register(error_handler, 'Error')

    # Assign all of the server reply messages to the
    # reply_handler function defined above
    tws_conn.registerAll(reply_handler)

    # Create an order ID which is 'global' for this session. This
    # will need incrementing once new orders are submitted.
    order_id = 1

    # Create a contract in a stock via SMART order routing
    goog_contract = create_contract('BHP', 'STK', 'SMART', 'SMART', 'AUD')

    # Go long 100 shares of Google
    goog_order = create_order('MKT', 100, 'BUY')

    # Use the connection to the send the order to IB
    tws_conn.placeOrder(order_id, goog_contract, goog_order)

    # Disconnect from TWS
    tws_conn.disconnect()

運行和響應

C:\Users\alex>python ib_api_demo.py
Server Version: 76
TWS Time at connection:20160314 16:43:55 ICT
Server Error: <error id=-1, errorCode=2104, errorMsg=Market data farm connection is OK:afarm>

Server Response: error, <error id=-1, errorCode=2104, errorMsg=Market data farm connection is OK:afarm>
C:\Users\alex>

所以似乎什么都沒有起作用,我感覺只是缺少一些基本的東西? 當我運行python腳本時,我已經登錄並正在運行TWS,並且就其他所有人在網上所說的而言,TWS API設置(參見上文)似乎是正確的。

任何幫助,不勝感激。

我嘗試了您提供的代碼。

例子2.在con.disconnect()之前添加sleep(1)

示例3。tws = ibConnection()應該更改為tws = ibConnection(port = 7496,clientId = 100)

示例4,“ 1小時”->太多空格,僅保留一個空格並刪除多余的空格。

示例5.注意下一個有效的訂單ID。 它應該大於Ib系統中的訂單ID。 您可以使用以下代碼從系統獲取下一個有效的訂單ID:

def save_order_id(msg):

    print('Next Valid ID is ' + str(msg.orderId))

con = ibConnection(port=7496,clientId=100)

con.register(save_order_id, 'NextValidId')

con.connect()

sleep(1)

con.disconnect()

您可以進行上述更改。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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