init
This commit is contained in:
211
hts/HTS.py
Normal file
211
hts/HTS.py
Normal file
@@ -0,0 +1,211 @@
|
||||
import win32com.client
|
||||
|
||||
class HTS:
|
||||
|
||||
objCpCybos = None
|
||||
objCpCodeMgr = None
|
||||
|
||||
def __init__(self):
|
||||
self.connect()
|
||||
return
|
||||
|
||||
def connect(self):
|
||||
# 연결 여부 체크
|
||||
self.objCpCybos = win32com.client.Dispatch("CpUtil.CpCybos")
|
||||
bConnect = self.objCpCybos.IsConnect
|
||||
if (bConnect == 0):
|
||||
print("PLUS가 정상적으로 연결되지 않음. ")
|
||||
exit()
|
||||
return
|
||||
|
||||
def all_stocks(self):
|
||||
# 종목코드 리스트 구하기
|
||||
self.objCpCodeMgr = win32com.client.Dispatch("CpUtil.CpCodeMgr")
|
||||
codeList = self.objCpCodeMgr.GetStockListByMarket(1) # 거래소
|
||||
codeList2 = self.objCpCodeMgr.GetStockListByMarket(2) # 코스닥
|
||||
|
||||
print("거래소 종목코드", len(codeList))
|
||||
for i, code in enumerate(codeList):
|
||||
secondCode = self.objCpCodeMgr.GetStockSectionKind(code)
|
||||
name = self.objCpCodeMgr.CodeToName(code)
|
||||
stdPrice = self.objCpCodeMgr.GetStockStdPrice(code)
|
||||
print(i, code, secondCode, stdPrice, name)
|
||||
|
||||
print("코스닥 종목코드", len(codeList2))
|
||||
for i, code in enumerate(codeList2):
|
||||
secondCode = self.objCpCodeMgr.GetStockSectionKind(code)
|
||||
name = self.objCpCodeMgr.CodeToName(code)
|
||||
stdPrice = self.objCpCodeMgr.GetStockStdPrice(code)
|
||||
print(i, code, secondCode, stdPrice, name)
|
||||
|
||||
print("거래소 + 코스닥 종목코드 ", len(codeList) + len(codeList2))
|
||||
return
|
||||
|
||||
# 차트 데이터 구하기
|
||||
def getChartData(self, stock_code):
|
||||
# 차트 객체 구하기
|
||||
objStockChart = win32com.client.Dispatch("CpSysDib.StockChart")
|
||||
|
||||
objStockChart.SetInputValue(0, 'A'+stock_code) # 종목 코드 - 삼성전자
|
||||
objStockChart.SetInputValue(1, ord('2')) # 개수로 조회
|
||||
objStockChart.SetInputValue(4, 100) # 최근 100일 치
|
||||
objStockChart.SetInputValue(5, [0, 2, 3, 4, 5, 8]) # 날짜,시가,고가,저가,종가,거래량
|
||||
objStockChart.SetInputValue(6, ord('D')) # '차트 주가 - 일간 차트 요청
|
||||
objStockChart.SetInputValue(9, ord('1')) # 수정주가 사용
|
||||
objStockChart.BlockRequest()
|
||||
|
||||
len = objStockChart.GetHeaderValue(3)
|
||||
|
||||
print("날짜", "시가", "고가", "저가", "종가", "거래량")
|
||||
print("빼기빼기==============================================-")
|
||||
|
||||
for i in range(len):
|
||||
day = objStockChart.GetDataValue(0, i)
|
||||
open = objStockChart.GetDataValue(1, i)
|
||||
high = objStockChart.GetDataValue(2, i)
|
||||
low = objStockChart.GetDataValue(3, i)
|
||||
close = objStockChart.GetDataValue(4, i)
|
||||
vol = objStockChart.GetDataValue(5, i)
|
||||
print(day, open, high, low, close, vol)
|
||||
|
||||
return
|
||||
|
||||
# 주식 현재가 조회
|
||||
def currentStock(self, stock_code):
|
||||
# 현재가 객체 구하기
|
||||
self.objStockMst = win32com.client.Dispatch("DsCbo1.StockMst")
|
||||
self.objStockMst.SetInputValue(0, 'A'+stock_code) # 종목 코드 - 삼성전자
|
||||
self.objStockMst.BlockRequest()
|
||||
|
||||
# 현재가 통신 및 통신 에러 처리
|
||||
rqStatus = self.objStockMst.GetDibStatus()
|
||||
rqRet = self.objStockMst.GetDibMsg1()
|
||||
print("통신상태", rqStatus, rqRet)
|
||||
if rqStatus != 0:
|
||||
exit()
|
||||
|
||||
# 현재가 정보 조회
|
||||
code = self.objStockMst.GetHeaderValue(0) # 종목코드
|
||||
name = self.objStockMst.GetHeaderValue(1) # 종목명
|
||||
time = self.objStockMst.GetHeaderValue(4) # 시간
|
||||
cprice = self.objStockMst.GetHeaderValue(11) # 종가
|
||||
diff = self.objStockMst.GetHeaderValue(12) # 대비
|
||||
open = self.objStockMst.GetHeaderValue(13) # 시가
|
||||
high = self.objStockMst.GetHeaderValue(14) # 고가
|
||||
low = self.objStockMst.GetHeaderValue(15) # 저가
|
||||
offer = self.objStockMst.GetHeaderValue(16) # 매도호가
|
||||
bid = self.objStockMst.GetHeaderValue(17) # 매수호가
|
||||
vol = self.objStockMst.GetHeaderValue(18) # 거래량
|
||||
vol_value = self.objStockMst.GetHeaderValue(19) # 거래대금
|
||||
|
||||
# 예상 체결관련 정보
|
||||
exFlag = self.objStockMst.GetHeaderValue(58) # 예상체결가 구분 플래그
|
||||
exPrice = self.objStockMst.GetHeaderValue(55) # 예상체결가
|
||||
exDiff = self.objStockMst.GetHeaderValue(56) # 예상체결가 전일대비
|
||||
exVol = self.objStockMst.GetHeaderValue(57) # 예상체결수량
|
||||
|
||||
print("코드", code)
|
||||
print("이름", name)
|
||||
print("시간", time)
|
||||
print("종가", cprice)
|
||||
print("대비", diff)
|
||||
print("시가", open)
|
||||
print("고가", high)
|
||||
print("저가", low)
|
||||
print("매도호가", offer)
|
||||
print("매수호가", bid)
|
||||
print("거래량", vol)
|
||||
print("거래대금", vol_value)
|
||||
|
||||
if (exFlag == ord('0')):
|
||||
print("장 구분값: 동시호가와 장중 이외의 시간")
|
||||
elif (exFlag == ord('1')):
|
||||
print("장 구분값: 동시호가 시간")
|
||||
elif (exFlag == ord('2')):
|
||||
print("장 구분값: 장중 또는 장종료")
|
||||
|
||||
print("예상체결가 대비 수량")
|
||||
print("예상체결가", exPrice)
|
||||
print("예상체결가 대비", exDiff)
|
||||
print("예상체결수량", exVol)
|
||||
|
||||
return
|
||||
|
||||
# 주식 현금 매수주문
|
||||
def orderToBuy(self, stock_code):
|
||||
# 주문 초기화
|
||||
objTrade = win32com.client.Dispatch("CpTrade.CpTdUtil")
|
||||
initCheck = objTrade.TradeInit(0)
|
||||
if (initCheck != 0):
|
||||
print("주문 초기화 실패")
|
||||
exit()
|
||||
|
||||
# 주식 매수 주문
|
||||
acc = objTrade.AccountNumber[0] # 계좌번호
|
||||
accFlag = objTrade.GoodsList(acc, 1) # 주식상품 구분
|
||||
print(acc, accFlag[0])
|
||||
objStockOrder = win32com.client.Dispatch("CpTrade.CpTd0311")
|
||||
objStockOrder.SetInputValue(0, "2") # 2: 매수
|
||||
objStockOrder.SetInputValue(1, acc) # 계좌번호
|
||||
objStockOrder.SetInputValue(2, accFlag[0]) # 상품구분 - 주식 상품 중 첫번째
|
||||
objStockOrder.SetInputValue(3, "A"+stock_code) # 종목코드
|
||||
objStockOrder.SetInputValue(4, 10) # 매수수량 10주
|
||||
objStockOrder.SetInputValue(5, 14100) # 주문단가 - 14,100원
|
||||
objStockOrder.SetInputValue(7, "0") # 주문 조건 구분 코드, 0: 기본 1: IOC 2:FOK
|
||||
objStockOrder.SetInputValue(8, "01") # 주문호가 구분코드 - 01: 보통
|
||||
|
||||
# 매수 주문 요청
|
||||
objStockOrder.BlockRequest()
|
||||
|
||||
rqStatus = objStockOrder.GetDibStatus()
|
||||
rqRet = objStockOrder.GetDibMsg1()
|
||||
print("통신상태", rqStatus, rqRet)
|
||||
if rqStatus != 0:
|
||||
exit()
|
||||
|
||||
return
|
||||
|
||||
# 주식 현금 매수주문
|
||||
def orderToSell(self, stock_code):
|
||||
# 주문 초기화
|
||||
objTrade = win32com.client.Dispatch("CpTrade.CpTdUtil")
|
||||
initCheck = objTrade.TradeInit(0)
|
||||
if (initCheck != 0):
|
||||
print("주문 초기화 실패")
|
||||
exit()
|
||||
|
||||
# 주식 매도 주문
|
||||
acc = objTrade.AccountNumber[0] # 계좌번호
|
||||
accFlag = objTrade.GoodsList(acc, 1) # 주식상품 구분
|
||||
print(acc, accFlag[0])
|
||||
objStockOrder = win32com.client.Dispatch("CpTrade.CpTd0311")
|
||||
objStockOrder.SetInputValue(0, "1") # 1: 매도
|
||||
objStockOrder.SetInputValue(1, acc) # 계좌번호
|
||||
objStockOrder.SetInputValue(2, accFlag[0]) # 상품구분 - 주식 상품 중 첫번째
|
||||
objStockOrder.SetInputValue(3, "A"+stock_code) # 종목코드 - A003540 - 대신증권 종목
|
||||
objStockOrder.SetInputValue(4, 10) # 매도수량 10주
|
||||
objStockOrder.SetInputValue(5, 14100) # 주문단가 - 14,100원
|
||||
objStockOrder.SetInputValue(7, "0") # 주문 조건 구분 코드, 0: 기본 1: IOC 2:FOK
|
||||
objStockOrder.SetInputValue(8, "01") # 주문호가 구분코드 - 01: 보통
|
||||
|
||||
# 매도 주문 요청
|
||||
objStockOrder.BlockRequest()
|
||||
|
||||
rqStatus = objStockOrder.GetDibStatus()
|
||||
rqRet = objStockOrder.GetDibMsg1()
|
||||
print("통신상태", rqStatus, rqRet)
|
||||
if rqStatus != 0:
|
||||
exit()
|
||||
|
||||
return
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
hts = HTS()
|
||||
#hts.all_stocks()
|
||||
|
||||
fileName = "%s/%d__p(%.2f)__b(%.2f)__s(%.2f)__%s__%d__%s_%s.html" % (fileName, isbuy, positionalEnergy, bolingerband_score, stochastic_score, state, buy_price,item_name.replace(" ", ""), item_code)
|
||||
|
||||
stock_code = "094860"
|
||||
hts.currentStock(stock_code)
|
||||
print ("done...")
|
||||
Reference in New Issue
Block a user