首页 > 解决方案 > 如何从类中返回特定结果

问题描述

我有一个正在打印的类“contractDetails”。我想从中得到一个特定的结果(第 5 个元素)。

这是代码:

from ibapi.client import EClient
from ibapi.wrapper import EWrapper
from ibapi.common import *
from ibapi.contract import *

class TestApp(EWrapper, EClient):
    def __init__(self):
        EWrapper.__init__(self)
        EClient.__init__(self, self)

    def contractDetails(self, reqId, contractDetails):
        print(contractDetails)

    def start(self):
        contract = Contract()
        contract.symbol = 'AAPL'
        contract.secType = 'OPT'
        contract.currency = 'USD'
        contract.exchange = 'SMART'
        contract.lastTradeDateOrContractMonth = '202011'

        self.reqContractDetails(1, contract)

    def stop(self):
        self.done=True
        self.disconnect()

def main():
    app = TestApp()
    app.nextOrderId = 0
    app.connect('127.0.0.1',7497,101)

    app.run()

if __name__ == "__main__":
    main()

我得到这样的东西:

423554420,AAPL,OPT,20201120,450.0,P,100,SMART...

我只想在那里打印第 5 个元素,即“450.0”。(行使价)

我试过了

print(contractDetails[5])

但我收到一个错误“TypeError:‘ContractDetails’对象不可下标”

例如,我可以使用“contractDetails.underSymbol”单独打印其他的。但是查看列表(https://interactivebrokers.github.io/tws-api/classIBApi_1_1ContractDetails.html)并尝试所有这些都没有给我我想要的。

据我了解,这是一个使用“contract.strike”传递给合同的值,当没有提供任何值时,它会打印出所有可用罢工的列表。

编辑:从评论中......“contractDetails.contract.strike”有效。

标签: pythoninteractive-brokerstws

解决方案


如果 contractDetails 不是列表,您可以尝试将 contractdetails 转换为列表使用list()或尝试以下方法,

j=0
for i in range contractDetails:
   if j==4:
      print(i)
   j+=1

推荐阅读