편집 기록

편집 기록
  • 프로필 알 수 없는 사용자님의 편집
    날짜2017.01.13

    [파이썬]이중반복(중첩루프)가 잘 이해돼지 않습니다.


    다른 분이 작성하신 증권사 API 관련 코드입니다. 중간에 BlockRequest()로 값을 넘겨준 뒤 증권사 서버로부터 cpSvr7254.GetHeaderValue(1) 메소드를 통해 자료를 받고 GetDataValue로 자료를 리턴하거나 출력하는 형식입니다.

    그런데 중간에 보면 for 안에 for이 들어간 부분이 있습니다. 이것을 어떤 식으로 읽어 오는 지 잘 모르겠습니다. 모두 완성하고 나서 데이터 값은 밑의 엑셀 파일과 같이 되는데요. 가로 데이터 개수가 14개라서 'for ixCol in range(14)'에 14을 입력한 것은 알겠습니다. 그런데 이게 어떤 형식으로 데이터를 읽어 나가는 건 지 잘 모르겠습니다. 세로 방향으로 다 읽어 낸 뒤 tempdata에 입력하고 그 다음에 가로 방향으로 입력하는 건가요? 혼자 해결해보려고 했지만 너무 힘드네요. 고수 분의 답변을 기다립니다.

    import time
    import win32com.client
    def subCpSvr7254(m_code, m_FromDate, m_ToDate):
       ## 대신 API 세팅
        cpSvr7254 = win32com.client.Dispatch("CpSysDib.CpSvr7254")
        cpSvr7254.SetInputValue(0, m_code)       # 종목코드
        cpSvr7254.SetInputValue(1, '6')          # 기간선택 0:기간선택, 1:1개월, ... , 4:6개월
        cpSvr7254.SetInputValue(2, m_FromDate)  # 시작일자
        cpSvr7254.SetInputValue(3, m_ToDate)    # 끝일자
        cpSvr7254.SetInputValue(4, '0')         # 0:순매수 1:비중
        cpSvr7254.SetInputValue(5, '0')         # 투자자
        **cpSvr7254.BlockRequest()**
    
        **numData=cpSvr7254.GetHeaderValue(1)
        #print(numData)
        data=[]
        for ixRow in range(numData):
            tempData=[]
            for ixCol in range(14): 
                tempData.append(cpSvr7254.GetDataValue(ixCol, ixRow))
            data.append(tempData)**
    
        #연속 수행
        while cpSvr7254.Continue:
            cpSvr7254.BlockRequest()
            numData = cpSvr7254.GetHeaderValue(1)
            #print(numData)
            for ixRow in range(numData):
                tempData=[]
                for ixCol in range(14):
                    tempData.append(cpSvr7254.GetDataValue(ixCol, ixRow))
                data.append(tempData)
                time.sleep(0.1)
    
        return data
    
    from subDS import subCpSvr7254
    from pandas import DataFrame
    
    if __name__ == "__main__":
    
        code='A005930'        # 삼성전자 코드
        fromDate = '20161201' # 요청 시작 날짜
        toDate = '20161223'   # 요청 마지막 날짜
    
        ### 자료가져오기
        data=subCpSvr7254(code, fromDate, toDate)
        print(data)
        df=DataFrame(data,  columns=['일자', '개인', '외국인', '기관계', '금융투자', '보험', '투신', '은행', '기타금융', '연기금', '기타법인', '기타외인', '사모펀드', '국가지자체'])
        df.to_csv('subCpSvr7254.csv')
    

    이미지

  • 프로필 정토드님의 편집
    날짜2017.01.05

    [파이썬]이중반복(중첩루프)가 잘 이해돼지 않습니다.


    다른 분이 작성하신 증권사 API 관련 코드입니다. 중간에 BlockRequest()로 값을 넘겨준 뒤 증권사 서버로부터 cpSvr7254.GetHeaderValue(1) 메소드를 통해 자료를 받고 GetDataValue로 자료를 리턴하거나 출력하는 형식입니다.

    그런데 중간에 보면 for 안에 for이 들어간 부분이 있습니다. 이것을 어떤 식으로 읽어 오는 지 잘 모르겠습니다. 모두 완성하고 나서 데이터 값은 밑의 엑셀 파일과 같이 되는데요. 가로 데이터 개수가 14개라서 'for ixCol in range(14)'에 14을 입력한 것은 알겠습니다. 그런데 이게 어떤 형식으로 데이터를 읽어 나가는 건 지 잘 모르겠습니다. 세로 방향으로 다 읽어 낸 뒤 tempdata에 입력하고 그 다음에 가로 방향으로 입력하는 건가요? 혼자 해결해보려고 했지만 너무 힘드네요. 고수 분의 답변을 기다립니다.

    import time
    import win32com.client
    def subCpSvr7254(m_code, m_FromDate, m_ToDate):
       ## 대신 API 세팅
        cpSvr7254 = win32com.client.Dispatch("CpSysDib.CpSvr7254")
        cpSvr7254.SetInputValue(0, m_code)       # 종목코드
        cpSvr7254.SetInputValue(1, '6')          # 기간선택 0:기간선택, 1:1개월, ... , 4:6개월
        cpSvr7254.SetInputValue(2, m_FromDate)  # 시작일자
        cpSvr7254.SetInputValue(3, m_ToDate)    # 끝일자
        cpSvr7254.SetInputValue(4, '0')         # 0:순매수 1:비중
        cpSvr7254.SetInputValue(5, '0')         # 투자자
        **cpSvr7254.BlockRequest()**
    
        **numData=cpSvr7254.GetHeaderValue(1)
        #print(numData)
        data=[]
        for ixRow in range(numData):
            tempData=[]
            for ixCol in range(14): 
                tempData.append(cpSvr7254.GetDataValue(ixCol, ixRow))
            data.append(tempData)**
    
        #연속 수행
        while cpSvr7254.Continue:
            cpSvr7254.BlockRequest()
            numData = cpSvr7254.GetHeaderValue(1)
            #print(numData)
            for ixRow in range(numData):
                tempData=[]
                for ixCol in range(14):
                    tempData.append(cpSvr7254.GetDataValue(ixCol, ixRow))
                data.append(tempData)
                time.sleep(0.1)
    
        return data
    
    from subDS import subCpSvr7254
    from pandas import DataFrame
    
    if __name__ == "__main__":
    
        code='A005930'        # 삼성전자 코드
        fromDate = '20161201' # 요청 시작 날짜
        toDate = '20161223'   # 요청 마지막 날짜
    
        ### 자료가져오기
        data=subCpSvr7254(code, fromDate, toDate)
        print(data)
        df=DataFrame(data,  columns=['일자', '개인', '외국인', '기관계', '금융투자', '보험', '투신', '은행', '기타금융', '연기금', '기타법인', '기타외인', '사모펀드', '국가지자체'])
        df.to_csv('subCpSvr7254.csv')
    

    이미지

  • 프로필 알 수 없는 사용자님의 편집
    날짜2017.01.05

    [파이썬]이중반복(중첩루프)가 잘 이해돼지 않습니다.


    다른 분이 작성하신 증권사 API 관련 코드입니다. 중간에 BlockRequest()로 값을 넘겨준 뒤 증권사 서버로부터 cpSvr7254.GetHeaderValue(1) 메소드를 통해 자료를 받고 GetDataValue로 자료를 리턴하거나 출력하는 형식입니다.

    그런데 중간에 보면 for 안에 for이 들어간 부분이 있습니다. 이것을 어떤 식으로 읽어 오는 지 잘 모르겠습니다. 모두 완성하고 나서 데이터 값은 밑의 엑셀 파일과 같이 되는데요. 가로 데이터 개수가 14개라서 'for ixCol in range(14)'에 14을 입력한 것은 알겠습니다. 그런데 이게 어떤 형식으로 데이터를 읽어 나가는 건 지 잘 모르겠습니다. 세로 방향으로 다 읽어 낸 뒤 tempdata에 입력하고 그 다음에 가로 방향으로 입력하는 건가요? 혼자 해결해보려고 했지만 너무 힘드네요. 고수 분의 답변을 기다립니다.

    import time import win32com.client def subCpSvr7254(m_code, m_FromDate, m_ToDate): ## 대신 API 세팅 cpSvr7254 = win32com.client.Dispatch("CpSysDib.CpSvr7254") cpSvr7254.SetInputValue(0, m_code) # 종목코드 cpSvr7254.SetInputValue(1, '6') # 기간선택 0:기간선택, 1:1개월, ... , 4:6개월 cpSvr7254.SetInputValue(2, m_FromDate) # 시작일자 cpSvr7254.SetInputValue(3, m_ToDate) # 끝일자 cpSvr7254.SetInputValue(4, '0') # 0:순매수 1:비중 cpSvr7254.SetInputValue(5, '0') # 투자자 cpSvr7254.BlockRequest()

    **numData=cpSvr7254.GetHeaderValue(1)
    #print(numData)
    data=[]
    for ixRow in range(numData):
        tempData=[]
        for ixCol in range(14): 
            tempData.append(cpSvr7254.GetDataValue(ixCol, ixRow))
        data.append(tempData)**
    
    #연속 수행
    while cpSvr7254.Continue:
        cpSvr7254.BlockRequest()
        numData = cpSvr7254.GetHeaderValue(1)
        #print(numData)
        for ixRow in range(numData):
            tempData=[]
            for ixCol in range(14):
                tempData.append(cpSvr7254.GetDataValue(ixCol, ixRow))
            data.append(tempData)
            time.sleep(0.1)
    
    return data
    

    from subDS import subCpSvr7254 from pandas import DataFrame

    if name == "main":

    code='A005930'        # 삼성전자 코드
    fromDate = '20161201' # 요청 시작 날짜
    toDate = '20161223'   # 요청 마지막 날짜
    
    ### 자료가져오기
    data=subCpSvr7254(code, fromDate, toDate)
    print(data)
    df=DataFrame(data,  columns=['일자', '개인', '외국인', '기관계', '금융투자', '보험', '투신', '은행', '기타금융', '연기금', '기타법인', '기타외인', '사모펀드', '국가지자체'])
    df.to_csv('subCpSvr7254.csv')
    

    이미지