- 기본 구조
- 크레온 python 환경에서 종목별 일자별 데이터를 가져오기 위해서 크게 2가지 ? 방법이 있다
- objStockWeek = win32com.client.Dispatch("DsCbo1.StockWeek")
- StockWeek 으로 가져오는 경우 5일 단위로 일자별 정보를 가져온다
- objStockChart = win32com.client.Dispatch("CpSysDib.StockChart")
- 차트 모듈을 이용하여 지정된 기간 단위로 일자별 정보를 가져온다

나중에 코드를 위해서라면... 차트 모듈("StockChart") 를 이용하여 가져오는게 편하다
챠트 모듈을 이용하여 일자별 데이터를 가져오는 샘플 코드는 다음과 같다.
import sys
import win32com.client
import ctypes
import numpy as np
g_objCpStatus = win32com.client.Dispatch('CpUtil.CpCybos')
g_objCpTrade = win32com.client.Dispatch('CpTrade.CpTdUtil')
def InitPlusCheck():
# 프로세스가 관리자 권한으로 실행 여부
if ctypes.windll.shell32.IsUserAnAdmin():
print('정상: 관리자권한으로 실행된 프로세스입니다.')
else:
print('오류: 일반권한으로 실행됨. 관리자 권한으로 실행해 주세요')
return False
# 연결 여부 체크
if (g_objCpStatus.IsConnect == 0):
print("PLUS가 정상적으로 연결되지 않음. ")
return False
# # 주문 관련 초기화 - 계좌 관련 코드가 있을 때만 사용
# if (g_objCpTrade.TradeInit(0) != 0):
# print("주문 초기화 실패")
# return False
return True
# 차트 기본 데이터 통신
class CpStockChart:
def __init__(self):
self.objCpCybos = win32com.client.Dispatch("CpUtil.CpCybos")
self.objStockChart = win32com.client.Dispatch("CpSysDib.StockChart")
def Request(self, code, cnt, objSeries, final_data_list):
#######################################################
# 1. 일간 차트 데이터 요청 -> 세부 옵션 변경가능
self.objStockChart.SetInputValue(0, code) # 종목 코드 -
self.objStockChart.SetInputValue(1, ord('2')) # 개수로 조회
self.objStockChart.SetInputValue(4, cnt) # 최근 100일치
self.objStockChart.SetInputValue(5, [0, 2, 3, 4, 5, 8]) # 날짜,시가,고가,저가,종가,거래량
self.objStockChart.SetInputValue(6, ord('D')) # '차트 주기 - 일간 차트 요청
self.objStockChart.SetInputValue(9, ord('1')) # 수정주가 사용
self.objStockChart.BlockRequest()
rqStatus = self.objStockChart.GetDibStatus()
rqRet = self.objStockChart.GetDibMsg1()
#print("통신상태", rqStatus, rqRet)
if rqStatus != 0:
exit()
#######################################################
# 2. 일간 차트 데이터 ==> CpIndexes.CpSeries 로 변환
len = self.objStockChart.GetHeaderValue(3)
#print("날짜", "시가", "고가", "저가", "종가", "거래량")
#print("==============================================-")
for i in range(len):
day = self.objStockChart.GetDataValue(0, len - i - 1)
open = self.objStockChart.GetDataValue(1, len - i - 1)
high = self.objStockChart.GetDataValue(2, len - i - 1)
low = self.objStockChart.GetDataValue(3, len - i - 1)
close = self.objStockChart.GetDataValue(4, len - i - 1)
vol = self.objStockChart.GetDataValue(5, len - i - 1)
# print(day, open, high, low, close, vol)
# objSeries.Add 종가, 시가, 고가, 저가, 거래량, 코멘트
objSeries.Add(close, open, high, low, vol)
day_list_tmp = []
# 인덱스 순서..로 저장
day_list_tmp.append(day) #0
day_list_tmp.append(open) #1
day_list_tmp.append(high) #2
day_list_tmp.append(low) #3
day_list_tmp.append(close) #4
day_list_tmp.append(vol) #5
final_data_list.append(day_list_tmp)
#print("==============================================-")
return
class stocktest:
def __init__(self):
#0. 분석 대상 종목의 최종 데이터 정보 저장
self.final_data_list =[]
# 1. 차트 데이터 통신 요청
self.objChart = CpStockChart()
# CpIndexes.CpSeries : 차트 기본 데이터 관리 PLUS 객체
self.objSeries = win32com.client.Dispatch("CpIndexes.CpSeries")
def print_stock_info(self,code,days):
# 테스트를 위해 jongmok 종목으로 미리 차트 데이터 구성
self.objChart.Request(code, days, self.objSeries,self.final_data_list)
index = 0
for value in self.final_data_list:
print(f'{index} {value[0]} {value[1]} {value[2]} {value[3]} {value[4]} {value[5]}' )
index+=1
def test_main():
day1_object = stocktest()
#삼성전자 현재부터 100일전 일자별 자료 요청
day1_object.print_stock_info("A005930",100);
if __name__ == "__main__":
dage_main()
호출 결과는 다음과 같다
06.12 기준으로부터 100일 기록이니 2023.01.12 부터의 데이터가 출력된것을 확인할 수 있다
차트 데이터 요청에서 추가적인 옵션 정보는 다음과 같다
요청 필드 5
0: 날짜(ulong)
1:시간(long) - hhmm
2:시가(long or float)
3:고가(long or float)
4:저가(long or float)
5:종가(long or float)
6:전일대비(long or float) - 주) 대비부호(37)과 반드시 같이 요청해야 함
8:거래량(ulong or ulonglong) 주) 정밀도 만원 단위
9:거래대금(ulonglong)
10:누적체결매도수량(ulong or ulonglong) - 호가비교방식 누적체결매도수량
11:누적체결매수수량(ulong or ulonglong) - 호가비교방식 누적체결매수수량
(주) 10, 11 필드는 분,틱 요청일 때만 제공
12:상장주식수(ulonglong)
13:시가총액(ulonglong)
14:외국인주문한도수량(ulong)
15:외국인주문가능수량(ulong)
16:외국인현보유수량(ulong)
17:외국인현보유비율(float)
18:수정주가일자(ulong) - YYYYMMDD
19:수정주가비율(float)
20:기관순매수(long)
21:기관누적순매수(long)
22:등락주선(long)
23:등락비율(float)
24:예탁금(ulonglong)
25:주식회전율(float)
26:거래성립률(float)
37:대비부호(char) - 수신값은 GetHeaderValue 8 대비부호와 동일
요청 필드 6 (차트 주기)
참고
https://money2.creontrade.com/e5/mboard/ptype_basic/plusPDS/DW_Basic_Read.aspx?boardseq=299&seq=42&page=2&searchString=%ec%a0%95%eb%b3%b4&prd=&lang=7&p=8833&v=8639&m=9505
'stock > system-trading' 카테고리의 다른 글
RSI-part2 (0) | 2023.05.26 |
---|---|
RSI - 테스트 - part1 (0) | 2023.05.23 |
creon- 종목 정보 얻기 (0) | 2023.05.22 |
creon - auto login example (0) | 2023.05.21 |
MFI (Money Flow Index) (0) | 2022.06.26 |