2017-11-23 14 views
0

그래서이 목록을 대화 형 중개인에게 돌려줍니다. 데이터는 다시 온다,하지만 여기에 대한 응답python3에서 목록을 구문 분석하는 방법

ib = IB() 
    ib.connect('127.0.0.1', 7497, clientId=2) 

    data = ib.positions() 
    print((data)) 
    print(type(data)) 

(API 9.73이 repo 사용). 그래서 정말 선택을 할 ...

for d in data: 
     for i in d: 
      print(i) 

하지만 내가 분석 한 후, DB, 위치 후 아무것도 (로 덤프 할 방법에 대한 아무 생각이 :

`[Position(account='DUC00074', contract=Contract(conId=43645865, symbol='IBKR', secType='STK', exchange='NASDAQ', currency='USD', localSymbol='IBKR', tradingClass='NMS'), position=2800.0, avgCost=39.4058383), Position(account='DUC00074', contract=Contract(conId=72063691, symbol='BRK B', secType='STK',exchange='NYSE', currency='USD', localSymbol='BRK B', tradingClass='BRK B'), position=250.0, avgCost=163.4365424)]` 

나는 여기까지 가지고있다 , 나는 PHP/json에서 말했듯이 내가 어떻게 구문 분석할지 모르겠다.

+0

그러나 내가 아는 한 목록이 포함 된 문자열을 얻지 못하면 목록 자체가 생성되므로 구문 분석 할 필요가 없습니다. –

+0

목록을 얻은 다음 어떻게 분리하여 db에 넣을 수 있습니까? – Chad

+1

그것은 이미 분리되어 있습니다. 반환되는 객체의 속성 만 사용하십시오. DB로 가져 오는 방법은 별개의 질문입니다. 도움이 필요합니까? – spookylukey

답변

0

좋아, 필자는 Python에 익숙하지 않다. 프로그래밍에 익숙하지 않다. 그래서 Interactive Brokers의 응답이 나를 버렸다. JSON 응답에 익숙하다면, 위의 예와 같이 객체의 목록이다. 간단 할 수도 있지만 mi 그것을 ssed. 일단 그것을 이해하면 조금 더 쉬워졌습니다.

여기에 최종 코드가 있습니다.이 코드는 다른 사람이 도움을 줄 수 있기를 바랍니다.

for obj in data: 

#the line below just bascially dumps the object 
print("obj={} ".format(obj)) 

#looking for account number 
#"contract" is an object inside an object, so I had to extract that. 
if(getattr(obj, 'account') == '123456'): 
    print("x={} ".format(getattr(obj, 'account'))) 
    account = (getattr(obj, 'account')) 
    contract = getattr(obj, 'contract') 
    contractId = getattr(contract, 'conId') 
    symbol = getattr(contract, 'symbol') 
    secType = getattr(contract, 'secType') 
    exdate = getattr(contract, 'lastTradeDateOrContractMonth') 
    strike = getattr(contract, 'strike') 
    opt_type = getattr(contract, 'right') 
    localSymbol = getattr(contract, 'localSymbol') 
    position = getattr(obj, 'position') 
    avgCost = getattr(obj, 'avgCost') 

    sql = "insert into IB_opt (account, contractId, symbol, secType, exdate, opt_type, localSymbol, position, avgCost,strike) values (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)"; 
    args = (account, contractId, symbol, secType, exdate, opt_type, localSymbol, position, avgCost,strike) 
    cursor.execute(sql, args) 

나는이 사이트를 보았을 때 꽤 helpful이었다.