init
This commit is contained in:
131
hts/HTS.py
131
hts/HTS.py
@@ -301,52 +301,58 @@ class HTS:
|
|||||||
acc = objTrade.AccountNumber[0] # 계좌번호
|
acc = objTrade.AccountNumber[0] # 계좌번호
|
||||||
accFlag = objTrade.GoodsList(acc, 1) # 주식상품 구분
|
accFlag = objTrade.GoodsList(acc, 1) # 주식상품 구분
|
||||||
|
|
||||||
objResult = win32com.client.Dispatch("CpTrade.CpTd9065")
|
objResult = win32com.client.Dispatch("CpTrade.CpTd5339")
|
||||||
objResult.SetInputValue(0, acc) # 계좌번호
|
objResult.SetInputValue(0, acc) # 계좌번호
|
||||||
objResult.SetInputValue(1, accFlag[0]) # 상품구분 - 주식 상품 중 첫번째
|
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:
|
while True:
|
||||||
objResult.BlockRequest()
|
ret = objResult.BlockRequest()
|
||||||
if objResult.GetDibStatus() != 0:
|
if objResult.GetDibStatus() != 0:
|
||||||
print("통신상태", objResult.GetDibStatus(), objResult.GetDibMsg1())
|
print("통신상태", objResult.GetDibStatus(), objResult.GetDibMsg1())
|
||||||
return False
|
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:
|
if cnt == 0:
|
||||||
break
|
break
|
||||||
|
|
||||||
for i in range(cnt):
|
for i in range(cnt):
|
||||||
i1 = objResult.GetDataValue(1, i) # 주문구분(매수 또는 매도)
|
item = orderData()
|
||||||
i2 = objResult.GetDataValue(2, i) # 코드
|
item.orderNum = objResult.GetDataValue(1, i)
|
||||||
i3 = objResult.GetDataValue(3, i) # 주문 수량
|
item.orderPrev = objResult.GetDataValue(2, i)
|
||||||
i4 = objResult.GetDataValue(4, i) # 주문호가구분
|
item.code = objResult.GetDataValue(3, i) # 종목코드
|
||||||
i5 = objResult.GetDataValue(6, i) # 예약번호
|
item.name = objResult.GetDataValue(4, i) # 종목명
|
||||||
i6 = objResult.GetDataValue(12, i) # 처리구분내용 - 주문취소 또는 주문예정
|
item.orderDesc = objResult.GetDataValue(5, i) # 주문구분내용
|
||||||
i7 = objResult.GetDataValue(9, i) # 주문단가
|
item.amount = objResult.GetDataValue(6, i) # 주문수량
|
||||||
i8 = objResult.GetDataValue(11, i) # 주문번호
|
item.price = objResult.GetDataValue(7, i) # 주문단가
|
||||||
i9 = objResult.GetDataValue(12, i) # 처리구분코드
|
item.ContAmount = objResult.GetDataValue(8, i) # 체결수량
|
||||||
i10 = objResult.GetDataValue(13, i) # 거부코드
|
item.credit = objResult.GetDataValue(9, i) # 신용구분
|
||||||
i11 = objResult.GetDataValue(14, i) # 거부내용
|
item.modAvali = objResult.GetDataValue(11, i) # 정정취소 가능수량
|
||||||
print(i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11)
|
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 (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
|
|
||||||
|
|
||||||
orderList.append(item)
|
|
||||||
|
|
||||||
# 연속 처리 체크 - 다음 데이터가 없으면 중지
|
# 연속 처리 체크 - 다음 데이터가 없으면 중지
|
||||||
if objResult.Continue == False:
|
if objResult.Continue == False:
|
||||||
break
|
print("[Cp5339] 연속 조회 여부: 다음 데이터가 없음")
|
||||||
|
break
|
||||||
|
|
||||||
return orderList
|
return orderList
|
||||||
|
|
||||||
@@ -366,22 +372,31 @@ class HTS:
|
|||||||
acc = objTrade.AccountNumber[0] # 계좌번호
|
acc = objTrade.AccountNumber[0] # 계좌번호
|
||||||
accFlag = objTrade.GoodsList(acc, 1) # 주식상품 구분
|
accFlag = objTrade.GoodsList(acc, 1) # 주식상품 구분
|
||||||
|
|
||||||
objCancel = win32com.client.Dispatch("CpTrade.CpTdNew9064")
|
objCancelOrder = win32com.client.Dispatch("CpTrade.CpTd0314") # 취소
|
||||||
|
|
||||||
|
onums = []
|
||||||
|
codes = []
|
||||||
|
amounts = []
|
||||||
for item in orderList:
|
for item in orderList:
|
||||||
objCancel.SetInputValue(0, item.orderNum)
|
onums.append(item.orderNum)
|
||||||
objCancel.SetInputValue(1, acc)
|
codes.append(item.code)
|
||||||
objCancel.SetInputValue(2, accFlag[0])
|
amounts.append(item.amount)
|
||||||
objCancel.SetInputValue(3, item.code)
|
|
||||||
|
|
||||||
# 예약 취소 주문 요청
|
for i in range(len(onums)):
|
||||||
objCancel.BlockRequest()
|
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("예약 취소 실패")
|
ret = objCancelOrder.BlockRequest()
|
||||||
return False
|
print("[CpRPOrder/BlockRequestCancel] 주문결과", objCancelOrder.GetDibStatus(), objCancelOrder.GetDibMsg1())
|
||||||
|
if objCancelOrder.GetDibStatus() != 0:
|
||||||
print("예약주문 취소 ", item.orderNum, objCancel.GetDibMsg1())
|
break
|
||||||
|
|
||||||
return
|
return
|
||||||
|
|
||||||
@@ -993,6 +1008,7 @@ class HTS:
|
|||||||
final_price = 0
|
final_price = 0
|
||||||
print ("START...")
|
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'):
|
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')
|
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'):
|
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()
|
logFp.flush()
|
||||||
|
|
||||||
if bs_sell_price > 0:
|
if bs_sell_price > 0:
|
||||||
|
# 매도 전에 모든 미체결을 취소한다.
|
||||||
|
self.cancelOrderList()
|
||||||
|
# 잔고 모든 항목을 매도한다.
|
||||||
jangoDic = self.requstJango()
|
jangoDic = self.requstJango()
|
||||||
if jangoDic and len(jangoDic.keys()) > 0:
|
if jangoDic and len(jangoDic.keys()) > 0:
|
||||||
for code in jangoDic:
|
for code in jangoDic:
|
||||||
@@ -1050,24 +1069,16 @@ class HTS:
|
|||||||
logFp.write("%s,%s,\n" % ("NONE", second))
|
logFp.write("%s,%s,\n" % ("NONE", second))
|
||||||
logFp.flush()
|
logFp.flush()
|
||||||
|
|
||||||
if datetime.strptime(given_day + " 151501", '%Y%m%d %H%M%S') < datetime.now():
|
if datetime.strptime(given_day + " 151500", '%Y%m%d %H%M%S') < datetime.now():
|
||||||
break
|
|
||||||
# 15:15:00 이후라면 모든 매수/매도 주문 취소하고 현재가-5원으로 매도한다.
|
# 15:15:00 이후라면 모든 매수/매도 주문 취소하고 현재가-5원으로 매도한다.
|
||||||
#####self.cancelOrderList()
|
self.cancelOrderList()
|
||||||
|
|
||||||
# 만약 잔고가 있으면 장부가보다 5원 높게 매도한다.
|
# 만약 잔고가 있으면 장부가보다 5원 높게 매도한다.
|
||||||
#####jangoDic = self.requstJango()
|
jangoDic = self.requstJango()
|
||||||
#####if jangoDic and len(jangoDic.keys()) > 0:
|
if jangoDic and len(jangoDic.keys()) > 0:
|
||||||
#####for code in jangoDic:
|
for code in jangoDic:
|
||||||
#####if jangoDic[code]['매도가능'] > 0:
|
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)
|
|
||||||
"""
|
|
||||||
if final_price > jangoDic[code]['장부가'] + 5:
|
if final_price > jangoDic[code]['장부가'] + 5:
|
||||||
orderNum = self.requestOrder("1", stock_code, jangoDic[code]['매도가능'], final_price)
|
orderNum = self.requestOrder("1", stock_code, jangoDic[code]['매도가능'], final_price)
|
||||||
else:
|
else:
|
||||||
@@ -1084,9 +1095,7 @@ class HTS:
|
|||||||
else:
|
else:
|
||||||
# 장부가의 마지막 자리수가 7,8,9 라면 (2097, 2098, 2099 -> 2105 에 매도)
|
# 장부가의 마지막 자리수가 7,8,9 라면 (2097, 2098, 2099 -> 2105 에 매도)
|
||||||
orderNum = self.requestOrder("1", stock_code, jangoDic[code]['매도가능'], sell_price + 15)
|
orderNum = self.requestOrder("1", stock_code, jangoDic[code]['매도가능'], sell_price + 15)
|
||||||
"""
|
|
||||||
#####else:
|
|
||||||
#####break
|
|
||||||
|
|
||||||
time.sleep(0.9)
|
time.sleep(0.9)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user