Skip to content

Instantly share code, notes, and snippets.

@anthonyng2
Last active February 1, 2016 10:06
Show Gist options
  • Select an option

  • Save anthonyng2/719edfa119882234b59a to your computer and use it in GitHub Desktop.

Select an option

Save anthonyng2/719edfa119882234b59a to your computer and use it in GitHub Desktop.

Revisions

  1. anthonyng2 revised this gist Feb 1, 2016. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion ib_class.py
    Original file line number Diff line number Diff line change
    @@ -9,7 +9,7 @@
    callback = IBWrapper() # Instantiate IBWrapper
    tws = EClientSocket(callback) # Instantiate EClientSocket
    host = ""
    port = 4001
    port = 7496
    clientId = 5000
    tws.eConnect(host, port, clientId) # Connect to TWS
    tws.setServerLogLevel(5)
  2. anthonyng2 revised this gist Feb 1, 2016. 1 changed file with 23 additions and 23 deletions.
    46 changes: 23 additions & 23 deletions ib_class.py
    Original file line number Diff line number Diff line change
    @@ -31,13 +31,13 @@
    # cancelPositions
    # positionEnd self.positionEnd_flag
    ###################################################################################'''
    '''print "Testing Account and Portfolio \n"
    print "Testing Account and Portfolio \n"
    tws.reqAccountUpdates(1, accountName)
    tws.reqAccountSummary(1,"All","NetLiquidation")
    #tws.cancelAccountSummary(1)
    tws.reqPositions()
    #tws.cancelPositions()
    '''




    @@ -58,7 +58,7 @@
    # exerciseOptions
    # reqGlobalCancel
    ###################################################################################'''
    '''print "Testing Orders Group \n"
    print "Testing Orders Group \n"
    # Example 1 - placing order to buy stock
    tws.reqIds(1) # Need to request next valid order Id
    time.sleep(2) # wait for response from server
    @@ -79,7 +79,7 @@
    #tws.reqOpenOrders()
    #tws.reqAllOpenOrders()
    #tws.reqAutoOpenOrders(1) # clientId had to be 0 for this to work
    tws.reqGlobalCancel()'''
    tws.reqGlobalCancel()



    @@ -114,7 +114,7 @@
    time.sleep(2)
    tws.cancelMktData(1)
    tws.cancelCalculateImpliedVolatility(2)
    tws.cancelCalculateOptionPrice(3)'''
    tws.cancelCalculateOptionPrice(3)
    @@ -131,12 +131,12 @@
    # TwsConnectionTime
    # ---> error
    ###################################################################################'''
    '''print "Testing Connection and Server Group \n"
    print "Testing Connection and Server Group \n"
    print tws.isConnected()
    tws.setServerLogLevel(5)
    tws.reqCurrentTime()
    print "Server Version " + str(tws.serverVersion())
    print "TWS Connection Time %s " % tws.TwsConnectionTime()'''
    print "TWS Connection Time %s " % tws.TwsConnectionTime()



    @@ -149,7 +149,7 @@
    # ---> execDetailsEnd self.exec_DetailsEnd_flag
    # ---> commissionReport self.commission_Report
    ###################################################################################'''
    '''print "Testing Executions Group \n"
    print "Testing Executions Group \n"
    order_id = []
    tws.reqIds(1)
    while not order_id:
    @@ -162,7 +162,7 @@
    order_info5 = create.create_order(accountName, 'MKT', 100000, 'BUY')
    tws.placeOrder(order_id, contract_info5, order_info5)
    time.sleep(2)
    tws.reqExecutions(0, create.exec_filter(9999, accountName, contract_info5))'''
    tws.reqExecutions(0, create.exec_filter(9999, accountName, contract_info5))



    @@ -176,7 +176,7 @@
    # ---> bondContractDetails self.bond_ContractDetails_reqId
    # self.bond_ContractDetails
    ###################################################################################'''
    '''print "Testing Contract Group \n"
    print "Testing Contract Group \n"
    # Example 1 - Option
    contract_Details6 = create.create_contract('NFLX 160318C00100000', 'OPT', 'SMART',
    'USD', 'CALL', '100', '20160318',
    @@ -206,7 +206,7 @@
    time.sleep(1)
    callback.contract_Details_flag = False
    print callback.bond_ContractDetails_reqId
    print callback.bond_ContractDetails.__dict__ '''
    print callback.bond_ContractDetails.__dict__



    @@ -216,12 +216,12 @@
    # reqMktDepth ---> updateMktDepth self.update_MktDepth
    # ---> update_MktDepthL2 self.update_MktDepthL2
    ###################################################################################'''
    '''print "Testing Market Depth Group \n"
    print "Testing Market Depth Group \n"
    contract_info9 = create.create_contract('EUR', 'CASH', 'IDEALPRO', 'USD')
    tws.reqMktDepth(7000, contract_info9, 3)
    time.sleep(5)
    print callback.update_MktDepth
    tws.cancelMktDepth(7000)'''
    tws.cancelMktDepth(7000)



    @@ -233,10 +233,10 @@
    # self.update_NewsBulletin_message
    # self.update_NewsBulletin_origExchange
    ###################################################################################'''
    '''print "Testing News Bulletin Group \n"
    print "Testing News Bulletin Group \n"
    tws.reqNewsBulletins(1)
    time.sleep(20)
    tws.cancelNewsBulletins()'''
    tws.cancelNewsBulletins()



    @@ -245,10 +245,10 @@
    # Financial Advisors Group ###########################################################
    # reqManagedAccts ---> managedAccounts self.managed_Accounts
    ###################################################################################'''
    '''print "Testing Financial Advisors Group \n"
    print "Testing Financial Advisors Group \n"
    tws.reqManagedAccts()
    #tws.requestFA() # non FA account. Unable to test.
    '''




    @@ -257,13 +257,13 @@
    # Historical Data ####################################################################
    # reqHistoricalData ---> historicalData self.historical_Data
    ###################################################################################'''
    '''print "Testing Historical Data Group \n"
    print "Testing Historical Data Group \n"
    contract_Details10 = create.create_contract('EUR', 'CASH', 'IDEALPRO', 'USD')
    data_endtime = datetime.now().strftime("%Y%m%d %H:%M:%S")
    tws.reqHistoricalData(9000, contract_Details10, data_endtime,
    "1 M", "1 day", "BID", 0, 1)
    time.sleep(3)
    tws.cancelHistoricalData(9000)'''
    tws.cancelHistoricalData(9000)



    @@ -275,14 +275,14 @@
    # ---> scannerDataEnd self.scanner_Data_End_reqID
    # self.scanner_Data_reqID
    ###################################################################################'''
    '''print "Testing Market Scanners Group \n"
    print "Testing Market Scanners Group \n"
    subscript = ScannerSubscription()
    subscript.numberOfRows(3)
    subscript.locationCode('STK.NYSE')
    tws.reqScannerSubscription(700, subscript)
    tws.reqScannerParameters()
    time.sleep(3)
    tws.cancelScannerSubscription(700) '''
    tws.cancelScannerSubscription(700)



    @@ -291,11 +291,11 @@
    # Real Time Bars #####################################################################
    # reqRealTimeBars ---> realtimeBar self.real_timeBar
    ###################################################################################'''
    '''print "Testing Real Time Bars Group \n"
    print "Testing Real Time Bars Group \n"
    contract_Details11 = create.create_contract('EUR', 'CASH', 'IDEALPRO', 'USD')
    tws.reqRealTimeBars(10000, contract_Details11, 5, "MIDPOINT", 0)
    time.sleep(10)
    tws.cancelRealTimeBars(10000)'''
    tws.cancelRealTimeBars(10000)



  3. anthonyng2 created this gist Feb 1, 2016.
    328 changes: 328 additions & 0 deletions ib_class.py
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,328 @@
    import time
    from datetime import datetime
    from IBWrapper import IBWrapper, contract
    from ib.ext.EClientSocket import EClientSocket
    from ib.ext.ScannerSubscription import ScannerSubscription


    if __name__=="__main__":
    callback = IBWrapper() # Instantiate IBWrapper
    tws = EClientSocket(callback) # Instantiate EClientSocket
    host = ""
    port = 4001
    clientId = 5000
    tws.eConnect(host, port, clientId) # Connect to TWS
    tws.setServerLogLevel(5)
    accountName = "DU123456" # Change to your own account
    create = contract() # Instantiate contract class

    # Initiate attributes to receive data. At some point we need a separate class for this
    callback.initiate_variables()

    # Account and Portfolio ##############################################################
    # reqAccountUpdates ---> updateAccountTime self.update_AccountTime
    # updateAccountValue self.update_AccountValue
    # updatePortfolio self.update_Portfolio
    # accountDownloadEnd self.accountDownloadEnd_flag
    # reqAccountSummary ---> accountSummary self.account_Summary
    # cancelAccountSummary
    # accountSummaryEnd self.account_SummaryEnd_flag
    # reqPositions ---> position self.update_Position
    # cancelPositions
    # positionEnd self.positionEnd_flag
    ###################################################################################'''
    '''print "Testing Account and Portfolio \n"
    tws.reqAccountUpdates(1, accountName)
    tws.reqAccountSummary(1,"All","NetLiquidation")
    #tws.cancelAccountSummary(1)
    tws.reqPositions()
    #tws.cancelPositions()
    '''





    # Orders #############################################################################
    # placeOrder ---> orderStatus** self.order_Status
    # cancelorder
    # ---> openOrderEnd self.open_OrderEnd_flag
    # reqOpenOrders ---> openOrder* self.open_Order
    # ---> orderStatus**
    # reqAllOpenOrders ---> openOrder*
    # ---> orderStatus**
    # reqAutoOpenOrders ---> openOrder*
    # ---> orderStatus**
    # reqIds ---> nextValidId self.next_ValidId
    # ---> deltaNeutralValidation
    # exerciseOptions
    # reqGlobalCancel
    ###################################################################################'''
    '''print "Testing Orders Group \n"
    # Example 1 - placing order to buy stock
    tws.reqIds(1) # Need to request next valid order Id
    time.sleep(2) # wait for response from server
    order_id = callback.next_ValidId
    contract_info1 = create.create_contract('GOOG', 'STK', 'SMART', 'USD')
    order_info1 = create.create_order(accountName, 'MKT', 100, 'BUY')
    tws.placeOrder(order_id, contract_info1, order_info1)
    # Example 2 - placing order to buy FX
    tws.reqIds(1)
    time.sleep(1)
    order_id = callback.next_ValidId
    contract_info2 = create.create_contract('EUR', 'CASH', 'IDEALPRO', 'USD')
    order_info2 = create.create_order(accountName, 'MKT', 100000, 'BUY')
    tws.placeOrder(order_id, contract_info2, order_info2)
    #tws.cancelOrder(order_id) # Cancel example 2 order
    #tws.reqOpenOrders()
    #tws.reqAllOpenOrders()
    #tws.reqAutoOpenOrders(1) # clientId had to be 0 for this to work
    tws.reqGlobalCancel()'''





    # Market Data ########################################################################
    # reqMktData ---> tickPrice self.tick_Price
    # ---> tickSize self.tick_Size
    # ---> tickOptionComputation self.tick_OptionComputation
    # ---> tickGeneric self.tick_Generic
    # ---> tickString self.tick_String
    # ---> tickEFP self.tick_EFP
    # ---> tickSnapshotEnd self.tickSnapshotEnd_flag
    # cancelMktData
    # calculateImpliedVolatility >tickOptionComputation self.tick_OptionComputation
    # cancelcalculateImpliedVolatility
    # calculateOptionPrice ---> tickOptionComputation self.tick_OptionComputation
    # cancelCalculateOptionPrice
    # reqMktDataType ---> marketDataType self.market_DataType
    ###################################################################################'''
    '''print "Testing Market Data Group \n"
    contract_info3 = create.create_contract('EUR', 'CASH', 'IDEALPRO', 'USD')
    tws.reqMktData(1, contract_info3, "", False)
    contract_info4 = create.create_contract('NFLX 160318C00100000',
    'OPT', 'SMART', 'USD',
    'CALL', '100', '20160318',
    100, "NFLX")
    tws.calculateImpliedVolatility(2, contract_info4, 3.60, 94.41)
    tws.calculateOptionPrice(3, contract_info4, 0.42, 94.41)
    tws.reqMarketDataType(2) # need to test this when mkt opens
    time.sleep(2)
    tws.cancelMktData(1)
    tws.cancelCalculateImpliedVolatility(2)
    tws.cancelCalculateOptionPrice(3)'''





    # Connection and Server ##############################################################
    # EClientSocket
    # eConnect
    # eDisconnect ---> connectionClosed
    # isConnected
    # setServerLogLevel
    # reqCurrentTime ---> currentTime self.current_Time
    # serverVersion
    # TwsConnectionTime
    # ---> error
    ###################################################################################'''
    '''print "Testing Connection and Server Group \n"
    print tws.isConnected()
    tws.setServerLogLevel(5)
    tws.reqCurrentTime()
    print "Server Version " + str(tws.serverVersion())
    print "TWS Connection Time %s " % tws.TwsConnectionTime()'''





    # Executions #########################################################################
    # reqExecutions ---> execDetails self.exec_Details_reqId
    # self.exec_Details_contract
    # self.exec_Details_execution
    # ---> execDetailsEnd self.exec_DetailsEnd_flag
    # ---> commissionReport self.commission_Report
    ###################################################################################'''
    '''print "Testing Executions Group \n"
    order_id = []
    tws.reqIds(1)
    while not order_id:
    time.sleep(0.1)
    order_id = callback.next_ValidId
    print "waiting for id"
    order_id = callback.next_ValidId
    print ("Just got it. The next order id is: ", order_id)
    contract_info5 = create.create_contract('EUR', 'CASH', 'IDEALPRO', 'USD')
    order_info5 = create.create_order(accountName, 'MKT', 100000, 'BUY')
    tws.placeOrder(order_id, contract_info5, order_info5)
    time.sleep(2)
    tws.reqExecutions(0, create.exec_filter(9999, accountName, contract_info5))'''





    # Contract ###########################################################################
    # reqContractDetails ---> contractDetails self.contract_Details_reqId
    # self.contract_Details
    # ---> contractDetailsEnd self.contract_DetailsEnd_reqId
    # self.contract_Details_flag
    # ---> bondContractDetails self.bond_ContractDetails_reqId
    # self.bond_ContractDetails
    ###################################################################################'''
    '''print "Testing Contract Group \n"
    # Example 1 - Option
    contract_Details6 = create.create_contract('NFLX 160318C00100000', 'OPT', 'SMART',
    'USD', 'CALL', '100', '20160318',
    100, "NFLX")
    tws.reqContractDetails(5000, contract_Details6)
    while not callback.contract_Details_flag:
    time.sleep(1)
    callback.contract_Details_flag = False
    print callback.contract_Details_reqId
    print callback.contract_Details.__dict__
    # Example 2 - Stock
    contract_Details7 = create.create_contract('EUR', 'CASH', 'IDEALPRO', 'USD')
    tws.reqContractDetails(5001, contract_Details7)
    while not callback.contract_Details_flag:
    time.sleep(1)
    callback.contract_Details_flag = False
    print callback.contract_Details_reqId
    print callback.contract_Details.__dict__
    # Example 3 - FX
    contract_Details8 = create.create_contract('IBCID143913442',
    'BOND', 'SMART',
    'USD','CORP')
    tws.reqContractDetails(5002, contract_Details8)
    while not callback.contract_Details_flag:
    time.sleep(1)
    callback.contract_Details_flag = False
    print callback.bond_ContractDetails_reqId
    print callback.bond_ContractDetails.__dict__ '''





    # Market Depth #######################################################################
    # reqMktDepth ---> updateMktDepth self.update_MktDepth
    # ---> update_MktDepthL2 self.update_MktDepthL2
    ###################################################################################'''
    '''print "Testing Market Depth Group \n"
    contract_info9 = create.create_contract('EUR', 'CASH', 'IDEALPRO', 'USD')
    tws.reqMktDepth(7000, contract_info9, 3)
    time.sleep(5)
    print callback.update_MktDepth
    tws.cancelMktDepth(7000)'''





    # News Bulletin ######################################################################
    # reqNewsBulletins ---> updateNewsBulletin self.update_NewsBulletin_msgId
    # self.update_NewsBulletin_msgType
    # self.update_NewsBulletin_message
    # self.update_NewsBulletin_origExchange
    ###################################################################################'''
    '''print "Testing News Bulletin Group \n"
    tws.reqNewsBulletins(1)
    time.sleep(20)
    tws.cancelNewsBulletins()'''





    # Financial Advisors Group ###########################################################
    # reqManagedAccts ---> managedAccounts self.managed_Accounts
    ###################################################################################'''
    '''print "Testing Financial Advisors Group \n"
    tws.reqManagedAccts()
    #tws.requestFA() # non FA account. Unable to test.
    '''





    # Historical Data ####################################################################
    # reqHistoricalData ---> historicalData self.historical_Data
    ###################################################################################'''
    '''print "Testing Historical Data Group \n"
    contract_Details10 = create.create_contract('EUR', 'CASH', 'IDEALPRO', 'USD')
    data_endtime = datetime.now().strftime("%Y%m%d %H:%M:%S")
    tws.reqHistoricalData(9000, contract_Details10, data_endtime,
    "1 M", "1 day", "BID", 0, 1)
    time.sleep(3)
    tws.cancelHistoricalData(9000)'''





    # Market Scanners ####################################################################
    # reqScannerParameters ---> scannerParameters self.scanner_Parameters
    # ---> scannerData self.scanner_Data
    # ---> scannerDataEnd self.scanner_Data_End_reqID
    # self.scanner_Data_reqID
    ###################################################################################'''
    '''print "Testing Market Scanners Group \n"
    subscript = ScannerSubscription()
    subscript.numberOfRows(3)
    subscript.locationCode('STK.NYSE')
    tws.reqScannerSubscription(700, subscript)
    tws.reqScannerParameters()
    time.sleep(3)
    tws.cancelScannerSubscription(700) '''





    # Real Time Bars #####################################################################
    # reqRealTimeBars ---> realtimeBar self.real_timeBar
    ###################################################################################'''
    '''print "Testing Real Time Bars Group \n"
    contract_Details11 = create.create_contract('EUR', 'CASH', 'IDEALPRO', 'USD')
    tws.reqRealTimeBars(10000, contract_Details11, 5, "MIDPOINT", 0)
    time.sleep(10)
    tws.cancelRealTimeBars(10000)'''





    # Fundamental Data ###################################################################
    # reportType = ReportSnapshot
    # ReportsFinSummary
    # ReportsFinSummary
    # ReportRatios
    # ReportFinStatements
    # RESC
    # Calendar Report
    # Unfortunately, no access. 430, 'We are sorry, but fundamentals data for the
    # security specified is not available.Not allowed'
    ###################################################################################'''
    '''print "Testing Fundamental Data Group \n"
    contract_info12 = create.create_contract('AAPL', 'STK', 'SMART', 'USD')
    reportType = "ReportSnapshot"
    tws.reqFundamentalData(10100, contract_info12, reportType)
    time.sleep(10)
    tws.cancelFundamentalData(10100)'''





    # Disconnect from TWS
    tws.isConnected()
    tws.eDisconnect()