init
This commit is contained in:
123
hts/HTS.py
123
hts/HTS.py
@@ -301,51 +301,57 @@ class HTS:
|
||||
acc = objTrade.AccountNumber[0] # 계좌번호
|
||||
accFlag = objTrade.GoodsList(acc, 1) # 주식상품 구분
|
||||
|
||||
objResult = win32com.client.Dispatch("CpTrade.CpTd9065")
|
||||
objResult = win32com.client.Dispatch("CpTrade.CpTd5339")
|
||||
objResult.SetInputValue(0, acc) # 계좌번호
|
||||
objResult.SetInputValue(1, accFlag[0]) # 상품구분 - 주식 상품 중 첫번째
|
||||
objResult.SetInputValue(2, 20)
|
||||
objResult.SetInputValue(4, "0") # 전체
|
||||
objResult.SetInputValue(5, "1") # 정렬 기준 - 역순
|
||||
objResult.SetInputValue(6, "0") # 전체
|
||||
objResult.SetInputValue(7, 20) # 요청개수 - 최대 20개
|
||||
|
||||
while True:
|
||||
objResult.BlockRequest()
|
||||
ret = objResult.BlockRequest()
|
||||
if objResult.GetDibStatus() != 0:
|
||||
print("통신상태", objResult.GetDibStatus(), objResult.GetDibMsg1())
|
||||
return False
|
||||
|
||||
cnt = objResult.GetHeaderValue(4)
|
||||
if (ret == 2 or ret == 3):
|
||||
print("통신 오류", ret)
|
||||
return False;
|
||||
|
||||
# 통신 초과 요청 방지에 의한 요류 인 경우
|
||||
while (ret == 4): # 연속 주문 오류 임. 이 경우는 남은 시간동안 반드시 대기해야 함.
|
||||
time.sleep(1)
|
||||
ret = objResult.BlockRequest()
|
||||
|
||||
# 수신 개수
|
||||
cnt = objResult.GetHeaderValue(5)
|
||||
print("[Cp5339] 수신 개수 ", cnt)
|
||||
if cnt == 0:
|
||||
break
|
||||
|
||||
for i in range(cnt):
|
||||
i1 = objResult.GetDataValue(1, i) # 주문구분(매수 또는 매도)
|
||||
i2 = objResult.GetDataValue(2, i) # 코드
|
||||
i3 = objResult.GetDataValue(3, i) # 주문 수량
|
||||
i4 = objResult.GetDataValue(4, i) # 주문호가구분
|
||||
i5 = objResult.GetDataValue(6, i) # 예약번호
|
||||
i6 = objResult.GetDataValue(12, i) # 처리구분내용 - 주문취소 또는 주문예정
|
||||
i7 = objResult.GetDataValue(9, i) # 주문단가
|
||||
i8 = objResult.GetDataValue(11, i) # 주문번호
|
||||
i9 = objResult.GetDataValue(12, i) # 처리구분코드
|
||||
i10 = objResult.GetDataValue(13, i) # 거부코드
|
||||
i11 = objResult.GetDataValue(14, i) # 거부내용
|
||||
print(i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11)
|
||||
|
||||
# 미체결
|
||||
if (i6 == "주문예정"):
|
||||
item = orderData()
|
||||
item.orderNum = i5
|
||||
if (i1 == "매수"):
|
||||
item.bs = EorderBS.buy
|
||||
else:
|
||||
item.bs = EorderBS.sell
|
||||
item.code = i2
|
||||
item.amount = i3
|
||||
item.price = i7
|
||||
item.orderNum = objResult.GetDataValue(1, i)
|
||||
item.orderPrev = objResult.GetDataValue(2, i)
|
||||
item.code = objResult.GetDataValue(3, i) # 종목코드
|
||||
item.name = objResult.GetDataValue(4, i) # 종목명
|
||||
item.orderDesc = objResult.GetDataValue(5, i) # 주문구분내용
|
||||
item.amount = objResult.GetDataValue(6, i) # 주문수량
|
||||
item.price = objResult.GetDataValue(7, i) # 주문단가
|
||||
item.ContAmount = objResult.GetDataValue(8, i) # 체결수량
|
||||
item.credit = objResult.GetDataValue(9, i) # 신용구분
|
||||
item.modAvali = objResult.GetDataValue(11, i) # 정정취소 가능수량
|
||||
item.buysell = objResult.GetDataValue(13, i) # 매매구분코드
|
||||
item.creditdate = objResult.GetDataValue(17, i) # 대출일
|
||||
item.orderFlagDesc = objResult.GetDataValue(19, i) # 주문호가구분코드내용
|
||||
item.orderFlag = objResult.GetDataValue(21, i) # 주문호가구분코드
|
||||
|
||||
orderList.append(item)
|
||||
|
||||
# 연속 처리 체크 - 다음 데이터가 없으면 중지
|
||||
if objResult.Continue == False:
|
||||
print("[Cp5339] 연속 조회 여부: 다음 데이터가 없음")
|
||||
break
|
||||
|
||||
return orderList
|
||||
@@ -366,22 +372,31 @@ class HTS:
|
||||
acc = objTrade.AccountNumber[0] # 계좌번호
|
||||
accFlag = objTrade.GoodsList(acc, 1) # 주식상품 구분
|
||||
|
||||
objCancel = win32com.client.Dispatch("CpTrade.CpTdNew9064")
|
||||
objCancelOrder = win32com.client.Dispatch("CpTrade.CpTd0314") # 취소
|
||||
|
||||
onums = []
|
||||
codes = []
|
||||
amounts = []
|
||||
for item in orderList:
|
||||
objCancel.SetInputValue(0, item.orderNum)
|
||||
objCancel.SetInputValue(1, acc)
|
||||
objCancel.SetInputValue(2, accFlag[0])
|
||||
objCancel.SetInputValue(3, item.code)
|
||||
onums.append(item.orderNum)
|
||||
codes.append(item.code)
|
||||
amounts.append(item.amount)
|
||||
|
||||
# 예약 취소 주문 요청
|
||||
objCancel.BlockRequest()
|
||||
for i in range(len(onums)):
|
||||
ordernum = onums[i]
|
||||
code = codes[i]
|
||||
amount = amounts[i]
|
||||
objCancelOrder.SetInputValue(1, ordernum) # 원주문 번호 - 정정을 하려는 주문 번호
|
||||
objCancelOrder.SetInputValue(2, acc) # 상품구분 - 주식 상품 중 첫번째
|
||||
objCancelOrder.SetInputValue(3, accFlag[0]) # 상품구분 - 주식 상품 중 첫번째
|
||||
objCancelOrder.SetInputValue(4, code) # 종목코드
|
||||
objCancelOrder.SetInputValue(5, amount) # 정정 수량, 0 이면 잔량 취소임
|
||||
|
||||
if objCancel.GetDibStatus() != 0:
|
||||
print("예약 취소 실패")
|
||||
return False
|
||||
|
||||
print("예약주문 취소 ", item.orderNum, objCancel.GetDibMsg1())
|
||||
# 취소주문 요청
|
||||
ret = objCancelOrder.BlockRequest()
|
||||
print("[CpRPOrder/BlockRequestCancel] 주문결과", objCancelOrder.GetDibStatus(), objCancelOrder.GetDibMsg1())
|
||||
if objCancelOrder.GetDibStatus() != 0:
|
||||
break
|
||||
|
||||
return
|
||||
|
||||
@@ -993,6 +1008,7 @@ class HTS:
|
||||
final_price = 0
|
||||
print ("START...")
|
||||
while datetime.strptime(given_day + " 070000", '%Y%m%d %H%M%S') < datetime.now() < datetime.strptime(given_day + " 15200", '%Y%m%d %H%M%S'):
|
||||
|
||||
second = datetime.now().strftime('%Y%m%d %H%M%S')
|
||||
|
||||
if datetime.strptime(given_day + " 085900", '%Y%m%d %H%M%S') < datetime.now() < datetime.strptime(given_day + " 151500", '%Y%m%d %H%M%S'):
|
||||
@@ -1037,6 +1053,9 @@ class HTS:
|
||||
logFp.flush()
|
||||
|
||||
if bs_sell_price > 0:
|
||||
# 매도 전에 모든 미체결을 취소한다.
|
||||
self.cancelOrderList()
|
||||
# 잔고 모든 항목을 매도한다.
|
||||
jangoDic = self.requstJango()
|
||||
if jangoDic and len(jangoDic.keys()) > 0:
|
||||
for code in jangoDic:
|
||||
@@ -1050,24 +1069,16 @@ class HTS:
|
||||
logFp.write("%s,%s,\n" % ("NONE", second))
|
||||
logFp.flush()
|
||||
|
||||
if datetime.strptime(given_day + " 151501", '%Y%m%d %H%M%S') < datetime.now():
|
||||
break
|
||||
if datetime.strptime(given_day + " 151500", '%Y%m%d %H%M%S') < datetime.now():
|
||||
# 15:15:00 이후라면 모든 매수/매도 주문 취소하고 현재가-5원으로 매도한다.
|
||||
#####self.cancelOrderList()
|
||||
self.cancelOrderList()
|
||||
|
||||
# 만약 잔고가 있으면 장부가보다 5원 높게 매도한다.
|
||||
#####jangoDic = self.requstJango()
|
||||
#####if jangoDic and len(jangoDic.keys()) > 0:
|
||||
#####for code in jangoDic:
|
||||
#####if jangoDic[code]['매도가능'] > 0:
|
||||
# 데이터를 가지고 온다.
|
||||
#####self.getRealTime(stock_code, given_day, result)
|
||||
# 분석을 통해서 볼린저밴드 상/하단을 계산한다.
|
||||
#####data, _, _ = self.analyze(result)
|
||||
#####final_price = data["Close"][len(data["Close"]) - 1] - 5
|
||||
#####orderNum = self.requestOrder("1", stock_code, jangoDic[code]['매도가능'], final_price)
|
||||
#####time.sleep(5)
|
||||
"""
|
||||
jangoDic = self.requstJango()
|
||||
if jangoDic and len(jangoDic.keys()) > 0:
|
||||
for code in jangoDic:
|
||||
if jangoDic[code]['매도가능'] > 0:
|
||||
|
||||
if final_price > jangoDic[code]['장부가'] + 5:
|
||||
orderNum = self.requestOrder("1", stock_code, jangoDic[code]['매도가능'], final_price)
|
||||
else:
|
||||
@@ -1084,9 +1095,7 @@ class HTS:
|
||||
else:
|
||||
# 장부가의 마지막 자리수가 7,8,9 라면 (2097, 2098, 2099 -> 2105 에 매도)
|
||||
orderNum = self.requestOrder("1", stock_code, jangoDic[code]['매도가능'], sell_price + 15)
|
||||
"""
|
||||
#####else:
|
||||
#####break
|
||||
|
||||
|
||||
time.sleep(0.9)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user