init
This commit is contained in:
@@ -1,661 +0,0 @@
|
||||
import win32com.client
|
||||
import time
|
||||
import os
|
||||
from datetime import datetime
|
||||
import pandas as pd
|
||||
|
||||
from OrderType import OrderType
|
||||
from OrderItem import OrderItem
|
||||
|
||||
from BuySellChecker import BuySellChecker
|
||||
from OrderChecker import OrderChecker
|
||||
|
||||
|
||||
class DataCollector_252670:
|
||||
|
||||
objCpCybos = None
|
||||
objCpCodeMgr = None
|
||||
|
||||
buySellChecker = None
|
||||
stock_code = None
|
||||
|
||||
def __init__(self, stock_code):
|
||||
self.buySellChecker = BuySellChecker()
|
||||
self.stock_code = stock_code
|
||||
|
||||
#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 requestOrder(self, type, stock_code, count, price):
|
||||
# type = 2: buy, type=1: sell
|
||||
# 주문 초기화
|
||||
objTrade = win32com.client.Dispatch("CpTrade.CpTdUtil")
|
||||
initCheck = objTrade.TradeInit(0)
|
||||
if (initCheck != 0):
|
||||
print("주문 초기화 실패")
|
||||
exit()
|
||||
|
||||
# 주식 매수 주문
|
||||
acc = objTrade.AccountNumber[0] # 계좌번호
|
||||
accFlag = objTrade.GoodsList(acc, 1) # 주식상품 구분
|
||||
# acc = "782446178"
|
||||
# accFlag[0] = "01"
|
||||
objStockOrder = win32com.client.Dispatch("CpTrade.CpTd0311")
|
||||
objStockOrder.SetInputValue(0, type.value) # 1: 매도, 2: 매수
|
||||
objStockOrder.SetInputValue(1, acc) # 계좌번호
|
||||
objStockOrder.SetInputValue(2, accFlag[0]) # 상품구분 - 주식 상품 중 첫번째
|
||||
objStockOrder.SetInputValue(3, "A"+stock_code) # 종목코드
|
||||
objStockOrder.SetInputValue(4, count) # 매수수량 count주
|
||||
objStockOrder.SetInputValue(5, price) # 주문단가 - price 원
|
||||
objStockOrder.SetInputValue(7, "0") # 주문 조건 구분 코드, 0: 기본 1: IOC 2:FOK
|
||||
objStockOrder.SetInputValue(8, "01") # 주문호가 구분코드 - 01: 보통
|
||||
|
||||
# 매수 주문 요청
|
||||
nRet = objStockOrder.BlockRequest()
|
||||
if (nRet != 0):
|
||||
print("order error", nRet)
|
||||
return None
|
||||
|
||||
rqStatus = objStockOrder.GetDibStatus()
|
||||
rqRet = objStockOrder.GetDibMsg1()
|
||||
print("통신상태", rqStatus, rqRet)
|
||||
if rqStatus != 0:
|
||||
return None
|
||||
|
||||
orderNum = objStockOrder.GetHeaderValue(0)
|
||||
|
||||
if (type == "1"):
|
||||
print ("(SELL", count, price, ")")
|
||||
else:
|
||||
print ("(BUY", count, price, ")")
|
||||
return orderNum
|
||||
|
||||
# 계좌 잔고 확인
|
||||
def requstJango(self):
|
||||
jangoDic = {}
|
||||
|
||||
objTrade = win32com.client.Dispatch("CpTrade.CpTdUtil")
|
||||
initCheck = objTrade.TradeInit(0)
|
||||
if (initCheck != 0):
|
||||
print("주문 초기화 실패")
|
||||
exit()
|
||||
|
||||
# 주식 매수 주문
|
||||
acc = objTrade.AccountNumber[0] # 계좌번호
|
||||
accFlag = objTrade.GoodsList(acc, 1) # 주식상품 구분
|
||||
|
||||
objRq = win32com.client.Dispatch("CpTrade.CpTd6033")
|
||||
|
||||
objRq.SetInputValue(0, acc) # 계좌번호
|
||||
objRq.SetInputValue(1, accFlag[0]) # 상품구분 - 주식 상품 중 첫번째
|
||||
objRq.SetInputValue(2, 50) # 요청 건수(최대 50)
|
||||
dicflag1 = {ord(' '): '현금',
|
||||
ord('Y'): '융자',
|
||||
ord('D'): '대주',
|
||||
ord('B'): '담보',
|
||||
ord('M'): '매입담보',
|
||||
ord('P'): '플러스론',
|
||||
ord('I'): '자기융자',
|
||||
}
|
||||
while True:
|
||||
objRq.BlockRequest()
|
||||
# 통신 및 통신 에러 처리
|
||||
rqStatus = objRq.GetDibStatus()
|
||||
rqRet = objRq.GetDibMsg1()
|
||||
#print("통신상태", rqStatus, rqRet)
|
||||
if rqStatus != 0:
|
||||
return False
|
||||
|
||||
cnt = objRq.GetHeaderValue(7)
|
||||
if cnt > 3:
|
||||
return jangoDic
|
||||
|
||||
for i in range(cnt):
|
||||
item = {}
|
||||
code = objRq.GetDataValue(12, i) # 종목코드
|
||||
item['종목코드'] = code
|
||||
item['종목명'] = objRq.GetDataValue(0, i) # 종목명
|
||||
item['대출일'] = objRq.GetDataValue(2, i) # 대출일
|
||||
item['잔고수량'] = objRq.GetDataValue(7, i) # 체결잔고수량
|
||||
item['매도가능'] = objRq.GetDataValue(15, i)
|
||||
item['장부가'] = objRq.GetDataValue(17, i) # 체결장부단가
|
||||
# item['평가금액'] = self.objRq.GetDataValue(9, i) # 평가금액(천원미만은 절사 됨)
|
||||
# item['평가손익'] = self.objRq.GetDataValue(11, i) # 평가손익(천원미만은 절사 됨)
|
||||
# 매입금액 = 장부가 * 잔고수량
|
||||
item['매입금액'] = item['장부가'] * item['잔고수량']
|
||||
item['현재가'] = 0
|
||||
item['대비'] = 0
|
||||
item['거래량'] = 0
|
||||
|
||||
# 잔고 추가
|
||||
# key = (code, item['현금신용'],item['대출일'] )
|
||||
key = code
|
||||
jangoDic[key] = item
|
||||
|
||||
if len(jangoDic) >= 3: # 최대 3 종목만,
|
||||
break
|
||||
|
||||
if len(jangoDic) >= 3:
|
||||
break
|
||||
|
||||
if (objRq.Continue == False):
|
||||
break
|
||||
|
||||
check = False
|
||||
for item in jangoDic:
|
||||
if item:
|
||||
check = True
|
||||
break
|
||||
if not check:
|
||||
return None
|
||||
return jangoDic
|
||||
|
||||
# 예약 주문 내역 조회 및 미체결 리스트 구하기
|
||||
def requestOrderList(self):
|
||||
# type = 2: buy, type=1: sell
|
||||
orderList = []
|
||||
# 주문 초기화
|
||||
objTrade = win32com.client.Dispatch("CpTrade.CpTdUtil")
|
||||
initCheck = objTrade.TradeInit(0)
|
||||
if (initCheck != 0):
|
||||
print("주문 초기화 실패")
|
||||
exit()
|
||||
|
||||
# 주식 매수 주문
|
||||
acc = objTrade.AccountNumber[0] # 계좌번호
|
||||
accFlag = objTrade.GoodsList(acc, 1) # 주식상품 구분
|
||||
|
||||
objResult = win32com.client.Dispatch("CpTrade.CpTd5339")
|
||||
objResult.SetInputValue(0, acc) # 계좌번호
|
||||
objResult.SetInputValue(1, accFlag[0]) # 상품구분 - 주식 상품 중 첫번째
|
||||
objResult.SetInputValue(4, "0") # 전체
|
||||
objResult.SetInputValue(5, "1") # 정렬 기준 - 역순
|
||||
objResult.SetInputValue(6, "0") # 전체
|
||||
objResult.SetInputValue(7, 20) # 요청개수 - 최대 20개
|
||||
|
||||
while True:
|
||||
ret = objResult.BlockRequest()
|
||||
if objResult.GetDibStatus() != 0:
|
||||
print("통신상태", objResult.GetDibStatus(), objResult.GetDibMsg1())
|
||||
return False
|
||||
|
||||
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):
|
||||
item = OrderItem()
|
||||
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
|
||||
|
||||
# 미체결 취소하기
|
||||
def cancelOrderList(self, orderList):
|
||||
|
||||
if len(orderList) < 1:
|
||||
return
|
||||
|
||||
objTrade = win32com.client.Dispatch("CpTrade.CpTdUtil")
|
||||
initCheck = objTrade.TradeInit(0)
|
||||
if (initCheck != 0):
|
||||
print("주문 초기화 실패")
|
||||
exit()
|
||||
acc = objTrade.AccountNumber[0] # 계좌번호
|
||||
accFlag = objTrade.GoodsList(acc, 1) # 주식상품 구분
|
||||
|
||||
objCancelOrder = win32com.client.Dispatch("CpTrade.CpTd0314") # 취소
|
||||
|
||||
onums = []
|
||||
codes = []
|
||||
amounts = []
|
||||
for item in orderList:
|
||||
onums.append(item.orderNum)
|
||||
codes.append(item.code)
|
||||
amounts.append(item.amount)
|
||||
|
||||
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 이면 잔량 취소임
|
||||
|
||||
# 취소주문 요청
|
||||
ret = objCancelOrder.BlockRequest()
|
||||
print("[CpRPOrder/BlockRequestCancel] 주문결과", objCancelOrder.GetDibStatus(), objCancelOrder.GetDibMsg1())
|
||||
if objCancelOrder.GetDibStatus() != 0:
|
||||
break
|
||||
|
||||
return
|
||||
|
||||
# 주식 현재가 조회
|
||||
def writeStockData(self, stock_codes, given_day):
|
||||
objCpCybos = win32com.client.Dispatch("CpUtil.CpCybos")
|
||||
bConnect = objCpCybos.IsConnect
|
||||
if (bConnect == 0):
|
||||
print("PLUS가 정상적으로 연결되지 않음. ")
|
||||
exit()
|
||||
|
||||
# 차트 객체 구하기
|
||||
objStockChart = win32com.client.Dispatch("CpSysDib.StockChart")
|
||||
|
||||
for stock_code in stock_codes:
|
||||
outfp = open("./data/"+stock_code+"_"+given_day+".csv", mode="w", encoding="utf-8")
|
||||
objStockChart.SetInputValue(0, 'A' + stock_code) # 종목 코드
|
||||
objStockChart.SetInputValue(1, ord('1')) # 1: 기간으로 조회, 2: 개수로 조회
|
||||
objStockChart.SetInputValue(2, given_day) # 기간 조회 시, 시작일
|
||||
objStockChart.SetInputValue(3, given_day) # 기간 조회 시, 종료일
|
||||
objStockChart.SetInputValue(4, 400) # 조회 시 가져오는 Line 개수
|
||||
objStockChart.SetInputValue(5, [0, 1, 2, 3, 4, 5, 8]) # 날짜,시간,시가,고가,저가,종가,거래량
|
||||
objStockChart.SetInputValue(6, ord('m')) # '차트 주가 - 월(M), 주(W), 일(D), 시(H), 분(m), 초(S) 차트 요청
|
||||
objStockChart.SetInputValue(7, 1)
|
||||
objStockChart.SetInputValue(9, ord('1')) # 수정주가 사용
|
||||
objStockChart.BlockRequest()
|
||||
|
||||
size = objStockChart.GetHeaderValue(3)
|
||||
|
||||
outfp.write("%s,%s,%s,%s,%s,%s,%s\n" % ("날짜", "시간", "시가", "고가", "저가", "종가", "거래량"))
|
||||
for i in range(size - 1, -1, -1):
|
||||
day = objStockChart.GetDataValue(0, i)
|
||||
time = objStockChart.GetDataValue(1, i)
|
||||
start = objStockChart.GetDataValue(2, i)
|
||||
high = objStockChart.GetDataValue(3, i)
|
||||
low = objStockChart.GetDataValue(4, i)
|
||||
close = objStockChart.GetDataValue(5, i)
|
||||
vol = objStockChart.GetDataValue(6, i)
|
||||
outfp.write("%d,%s,%d,%d,%d,%d,%d\n" % (day, str(time).zfill(4), start, high, low, close, vol))
|
||||
outfp.close()
|
||||
|
||||
return
|
||||
|
||||
|
||||
def write(self, day, result):
|
||||
#날짜,시간,시가,고가,저가,종가,거래량
|
||||
#20210909,900,2070,2070,2070,2070,0
|
||||
|
||||
outFp = open(day+".csv", mode="w", encoding="UTF-8")
|
||||
outFp.write("날짜,시간,시가,고가,저가,종가,거래량\n")
|
||||
for i in range(len(result["time"])):
|
||||
outFp.write("%s,%s,%s,%s,%s,%s,%s\n"%(
|
||||
result["time"][i].strftime('%Y%m%d'),
|
||||
result["time"][i].strftime('%H%M'),
|
||||
result["open"][i],
|
||||
result["high"][i],
|
||||
result["low"][i],
|
||||
result["close"][i],
|
||||
result["vol"][i]))
|
||||
outFp.close()
|
||||
return
|
||||
|
||||
# 주식 현재가 조회
|
||||
def getRealTime(self, stock_code, given_day, result):
|
||||
int_given_day = int(given_day)
|
||||
objCpCybos = win32com.client.Dispatch("CpUtil.CpCybos")
|
||||
bConnect = objCpCybos.IsConnect
|
||||
if (bConnect == 0):
|
||||
print("PLUS가 정상적으로 연결되지 않음. ")
|
||||
exit()
|
||||
|
||||
# 차트 객체 구하기
|
||||
objStockChart = win32com.client.Dispatch("CpSysDib.StockChart")
|
||||
|
||||
objStockChart.SetInputValue(0, 'A'+stock_code) # 종목 코드
|
||||
objStockChart.SetInputValue(1, ord('1')) # 1: 기간으로 조회, 2: 개수로 조회
|
||||
objStockChart.SetInputValue(2, given_day) # 기간 조회 시, 시작일
|
||||
objStockChart.SetInputValue(3, given_day) # 기간 조회 시, 종료일
|
||||
objStockChart.SetInputValue(4, 400) # 조회 시 가져오는 Line 개수
|
||||
objStockChart.SetInputValue(5, [0, 1, 2, 3, 4, 5, 8]) # 날짜,시간,시가,고가,저가,종가,거래량
|
||||
objStockChart.SetInputValue(6, ord('m')) # '차트 주가 - 월(M), 주(W), 일(D), 시(H), 분(m), 초(S) 차트 요청
|
||||
objStockChart.SetInputValue(7, 1)
|
||||
objStockChart.SetInputValue(9, ord('1')) # 수정주가 사용
|
||||
objStockChart.BlockRequest()
|
||||
|
||||
size = objStockChart.GetHeaderValue(3)
|
||||
|
||||
#print("날짜", "시간", "시가", "고가", "저가", "종가", "거래량")
|
||||
start_time = datetime.strptime(given_day + " 090000", '%Y%m%d %H%M%S')
|
||||
for i in range(size-1, -1, -1):
|
||||
int_day = objStockChart.GetDataValue(0, i)
|
||||
int_time = objStockChart.GetDataValue(1, i)
|
||||
|
||||
if int_day < int_given_day:
|
||||
continue
|
||||
time = datetime.strptime(str(int_day)+" "+str(int_time).zfill(4)+"00", '%Y%m%d %H%M%S')
|
||||
if time < start_time:
|
||||
continue
|
||||
|
||||
open = objStockChart.GetDataValue(2, i)
|
||||
close = objStockChart.GetDataValue(5, i)
|
||||
high = objStockChart.GetDataValue(3, i)
|
||||
low = objStockChart.GetDataValue(4, i)
|
||||
vol = objStockChart.GetDataValue(6, i)
|
||||
|
||||
if len(result["check"]) == 0:
|
||||
result["check"].add(start_time)
|
||||
result["time"].append(start_time)
|
||||
result["open"].append(open)
|
||||
result["close"].append(open)
|
||||
result["high"].append(open)
|
||||
result["low"].append(open)
|
||||
result["vol"].append(0)
|
||||
|
||||
if time not in result["check"]:
|
||||
result["check"].add(time)
|
||||
result["time"].append(time)
|
||||
|
||||
result["open"].append(open)
|
||||
result["close"].append(close)
|
||||
result["high"].append(high)
|
||||
result["low"].append(low)
|
||||
result["vol"].append(vol)
|
||||
|
||||
return
|
||||
|
||||
def checkTransaction(self, data):
|
||||
size = len(data["close"])
|
||||
|
||||
bsLine = {}
|
||||
bsLine['buy'] = [-1 for i in range(size)]
|
||||
bsLine['weight'] = [-1 for i in range(size)]
|
||||
bsLine['sell'] = [-1 for i in range(size)]
|
||||
|
||||
i = size - 1
|
||||
if i < 5:
|
||||
return -1, -1, -1
|
||||
|
||||
buy, weight, sell = self.buySellChecker.getPriceAndWeight1(data, i)
|
||||
return buy, weight, sell
|
||||
|
||||
def getSellingPrice(self, final_price):
|
||||
# 만약 잔고가 있으면 장부가보다 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:
|
||||
return jangoDic[code]['매도가능'], final_price
|
||||
else:
|
||||
# 장부가 가격의 마지막 자리를 0으로 만든다. (2090 -> 2090, 2092 -> 2090, 2098 -> 2090)
|
||||
sell_price = int(jangoDic[code]['장부가'] / 10) * 10
|
||||
# 장부가의 마지막 자리수를 가져온다.
|
||||
last_number = int(jangoDic[code]['장부가']) % 10
|
||||
if last_number in [0, 1, 2, 3]:
|
||||
# 장부가의 마지막 자리수가 0,1,2,3 이라면 (2090, 2091, 2092 -> 2095 에 매도)
|
||||
return jangoDic[code]['매도가능'], sell_price + 5
|
||||
elif last_number in [4, 5, 6, 7]:
|
||||
# 장부가의 마지막 자리수가 4,5,6,7 이라면 (2093, 2094, 2095, 2096 -> 2100 에 매도)
|
||||
return jangoDic[code]['매도가능'], sell_price + 10
|
||||
else:
|
||||
# 장부가의 마지막 자리수가 8,9 라면 (2098, 2099 -> 2105 에 매도)
|
||||
return jangoDic[code]['매도가능'], sell_price + 15
|
||||
|
||||
return 0, 0
|
||||
|
||||
def buyRealTime(self, GIVEN_DAY):
|
||||
orderChecker = OrderChecker(self.stock_code)
|
||||
BASE_COUNT = 100
|
||||
|
||||
timecheckList = pd.read_csv("timecheck.csv").values.tolist()
|
||||
timecheck = {GIVEN_DAY + " " + str(second).zfill(6):False for second, check in timecheckList}
|
||||
|
||||
result = {"check": set(),
|
||||
"time": [],
|
||||
"open": [],
|
||||
"close": [],
|
||||
"high": [],
|
||||
"low": [],
|
||||
"vol": []}
|
||||
|
||||
final_price = 0
|
||||
print ("START...")
|
||||
THIS_TIME = datetime.now()
|
||||
while datetime.strptime(GIVEN_DAY + " 070000", '%Y%m%d %H%M%S') < THIS_TIME < datetime.strptime(GIVEN_DAY + " 15200", '%Y%m%d %H%M%S'):
|
||||
|
||||
if datetime.strptime(GIVEN_DAY + " 090100", '%Y%m%d %H%M%S') < THIS_TIME < datetime.strptime(GIVEN_DAY + " 151500", '%Y%m%d %H%M%S'):
|
||||
if THIS_TIME.strftime('%Y%m%d %H%M%S') in timecheck and not timecheck[THIS_TIME.strftime('%Y%m%d %H%M%S')]:
|
||||
|
||||
# 데이터를 가지고 온다.
|
||||
self.getRealTime(self.stock_code, GIVEN_DAY, result)
|
||||
|
||||
# 분석을 통해서 볼린저밴드 상/하단을 계산한다.
|
||||
data = self.buySellChecker.analyze(result)
|
||||
# 사야 할 시점/가격과 팔아야 할 시점/가격을 체크한다.
|
||||
bs_buy_price, bs_weight, bs_sell_price = self.checkTransaction(data)
|
||||
data_size = len(data["close"])
|
||||
final_price = data["close"][data_size-1]
|
||||
|
||||
if bs_buy_price > 0:
|
||||
# 기본 100 주에 가중치를 추가해서 매수한다.
|
||||
#BUY_COUNT = int(BASE_COUNT * bs_weight)
|
||||
BUY_COUNT = int(BASE_COUNT * 1)
|
||||
|
||||
# 매수를 주문한다.
|
||||
orderNum = self.requestOrder(OrderType.buy, self.stock_code, BUY_COUNT , bs_buy_price)
|
||||
|
||||
# 미체결 기록을 가져온다.
|
||||
ORDER_LIST = self.requestOrderList()
|
||||
# 매수 주문을 기록한다.
|
||||
orderListToCancel = orderChecker.add(self.stock_code, OrderType.buy, orderNum, BUY_COUNT, bs_buy_price, ORDER_LIST)
|
||||
# 두 시간 이전 미체결을 모두 취소한다.
|
||||
self.cancelOrderList(orderListToCancel)
|
||||
# 로그 출력
|
||||
print("BUY", THIS_TIME.strftime('%Y%m%d %H%M%S'), BUY_COUNT, bs_buy_price, len(orderListToCancel), len(ORDER_LIST))
|
||||
|
||||
if bs_sell_price > 0:
|
||||
# 미체결 기록을 가져온다.
|
||||
ORDER_LIST = self.requestOrderList()
|
||||
# 매도 주문을 기록을 가져온다.
|
||||
orderListToCancel = orderChecker.remove(self.stock_code, OrderType.sell, ORDER_LIST)
|
||||
# 매도 미체결을 모두 취소한다.
|
||||
self.cancelOrderList(orderListToCancel)
|
||||
|
||||
# 매도 가격을 가져온다.
|
||||
selling_count, selling_price = self.getSellingPrice(final_price)
|
||||
# 분석되 가격으로 매도 요청한다.
|
||||
if selling_count != 0 and selling_price != 0:
|
||||
# 매도를 요청한다.
|
||||
orderNum = self.requestOrder(OrderType.sell, self.stock_code, selling_count, selling_price)
|
||||
|
||||
# 로그 출력
|
||||
print("SELL", THIS_TIME.strftime('%Y%m%d %H%M%S'), selling_count, selling_price, len(orderListToCancel), len(ORDER_LIST))
|
||||
|
||||
# 로그 출력
|
||||
print("TIMECHECK", THIS_TIME, final_price, data["low"][data_size-1], data["slow_k"][data_size-1], data["slow_d"][data_size-1])
|
||||
timecheck[THIS_TIME] = True
|
||||
|
||||
if datetime.strptime(GIVEN_DAY + " 151530", '%Y%m%d %H%M%S') < THIS_TIME:
|
||||
####
|
||||
# 손해 보지 않는 가격에 매도한다.
|
||||
####
|
||||
|
||||
# 주문 리스트를 가져온다.
|
||||
orderList = self.requestOrderList()
|
||||
# 15:10:00 이후라면 모든 미체결 취소한다.
|
||||
self.cancelOrderList(orderList)
|
||||
|
||||
# 매도 가격을 가져온다.
|
||||
selling_count, selling_price = self.getSellingPrice(final_price)
|
||||
# 분석되 가격으로 매도 요청한다.
|
||||
if selling_count != 0 and selling_price != 0:
|
||||
orderNum = self.requestOrder(OrderType.sell, self.stock_code, selling_count, selling_price)
|
||||
# 로그 출력
|
||||
print("SELL", THIS_TIME, selling_count, selling_price)
|
||||
|
||||
break
|
||||
time.sleep(0.9)
|
||||
THIS_TIME = datetime.now()
|
||||
|
||||
return
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
||||
today = datetime.today()
|
||||
|
||||
PROJECT_HOME = os.path.join(os.path.dirname(os.path.join(os.path.dirname(__file__))))
|
||||
RESOURCE_DIR = PROJECT_HOME + "/resources/analysis/"+today.strftime("%Y%m%d")
|
||||
|
||||
# KODEX 인버스 * 2
|
||||
stock_code = "252670"
|
||||
hts = DataCollector_252670(stock_code)
|
||||
given_day = datetime.today().strftime('%Y%m%d')
|
||||
|
||||
hts.writeStockData(stock_codes, "20211025")
|
||||
|
||||
print ("done...")
|
||||
@@ -4,11 +4,11 @@ import os
|
||||
from datetime import datetime
|
||||
import pandas as pd
|
||||
|
||||
from OrderType import OrderType
|
||||
from OrderItem import OrderItem
|
||||
from hts.OrderType import OrderType
|
||||
from hts.OrderItem import OrderItem
|
||||
|
||||
from BuySellChecker import BuySellChecker
|
||||
from OrderChecker import OrderChecker
|
||||
from hts.BuySellChecker import BuySellChecker
|
||||
from hts.OrderChecker import OrderChecker
|
||||
|
||||
|
||||
class HTS_122630:
|
||||
|
||||
@@ -4,11 +4,11 @@ import os
|
||||
from datetime import datetime
|
||||
import pandas as pd
|
||||
|
||||
from OrderType import OrderType
|
||||
from OrderItem import OrderItem
|
||||
from hts.OrderType import OrderType
|
||||
from hts.OrderItem import OrderItem
|
||||
|
||||
from BuySellChecker import BuySellChecker
|
||||
from OrderChecker import OrderChecker
|
||||
from hts.BuySellChecker import BuySellChecker
|
||||
from hts.OrderChecker import OrderChecker
|
||||
|
||||
|
||||
class HTS_252670:
|
||||
@@ -549,7 +549,7 @@ class HTS_252670:
|
||||
|
||||
def buyRealTime(self, GIVEN_DAY):
|
||||
orderChecker = OrderChecker(self.stock_code)
|
||||
BASE_COUNT = 200
|
||||
BASE_COUNT = 150
|
||||
|
||||
timecheckList = pd.read_csv("timecheck.csv").values.tolist()
|
||||
timecheck = {GIVEN_DAY + " " + str(second).zfill(6):False for second, check in timecheckList}
|
||||
@@ -562,7 +562,6 @@ class HTS_252670:
|
||||
"low": [],
|
||||
"vol": []}
|
||||
|
||||
final_price = 0
|
||||
print ("START...")
|
||||
THIS_TIME = datetime.now()
|
||||
while datetime.strptime(GIVEN_DAY + " 070000", '%Y%m%d %H%M%S') < THIS_TIME < datetime.strptime(GIVEN_DAY + " 15200", '%Y%m%d %H%M%S'):
|
||||
@@ -657,7 +656,7 @@ if __name__ == "__main__":
|
||||
hts = HTS_252670(stock_code)
|
||||
given_day = datetime.today().strftime('%Y%m%d')
|
||||
|
||||
#hts.writeStockData(stock_code, "20211026")
|
||||
#hts.writeStockData(stock_code, "20220121")
|
||||
hts.buyRealTime(given_day)
|
||||
|
||||
print ("done...")
|
||||
|
||||
@@ -2,7 +2,7 @@ import os
|
||||
import pandas as pd
|
||||
from datetime import datetime, timedelta
|
||||
|
||||
from OrderType import OrderType
|
||||
from hts.OrderType import OrderType
|
||||
|
||||
class OrderChecker:
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
from OrderType import OrderType
|
||||
from hts.OrderType import OrderType
|
||||
|
||||
class OrderItem:
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@ import pandas as pd
|
||||
import plotly.graph_objects as go
|
||||
from plotly import subplots
|
||||
|
||||
from BuySellChecker import BuySellChecker
|
||||
from hts.BuySellChecker import BuySellChecker
|
||||
|
||||
class Simulation:
|
||||
|
||||
|
||||
382
hts/data/252670_20220121.csv
Normal file
382
hts/data/252670_20220121.csv
Normal file
@@ -0,0 +1,382 @@
|
||||
날짜,시간,시가,고가,저가,종가,거래량
|
||||
20220121,0901,2365,2365,2350,2355,7157839
|
||||
20220121,0902,2355,2355,2345,2355,10657768
|
||||
20220121,0903,2355,2365,2350,2365,3223803
|
||||
20220121,0904,2365,2370,2360,2365,1698290
|
||||
20220121,0905,2370,2370,2355,2360,3088063
|
||||
20220121,0906,2355,2365,2350,2350,1559585
|
||||
20220121,0907,2350,2365,2350,2360,1839441
|
||||
20220121,0908,2355,2365,2350,2360,1949487
|
||||
20220121,0909,2360,2365,2355,2360,610466
|
||||
20220121,0910,2360,2365,2355,2365,762152
|
||||
20220121,0911,2365,2365,2360,2360,177972
|
||||
20220121,0912,2360,2365,2355,2360,515454
|
||||
20220121,0913,2355,2360,2350,2360,2065562
|
||||
20220121,0914,2355,2360,2350,2355,1255635
|
||||
20220121,0915,2360,2365,2355,2360,2023785
|
||||
20220121,0916,2360,2365,2355,2355,421890
|
||||
20220121,0917,2355,2360,2350,2355,2750720
|
||||
20220121,0918,2355,2360,2350,2355,164549
|
||||
20220121,0919,2360,2360,2350,2355,527099
|
||||
20220121,0920,2350,2355,2350,2350,188212
|
||||
20220121,0921,2355,2365,2350,2360,3110284
|
||||
20220121,0922,2360,2365,2360,2365,938483
|
||||
20220121,0923,2365,2370,2360,2365,2157049
|
||||
20220121,0924,2365,2365,2355,2355,675990
|
||||
20220121,0925,2355,2360,2355,2355,60609
|
||||
20220121,0926,2355,2360,2350,2355,1448847
|
||||
20220121,0927,2355,2360,2350,2355,200716
|
||||
20220121,0928,2350,2360,2350,2355,2474704
|
||||
20220121,0929,2355,2360,2350,2355,451892
|
||||
20220121,0930,2355,2355,2350,2350,891460
|
||||
20220121,0931,2355,2355,2350,2355,44351
|
||||
20220121,0932,2350,2360,2350,2360,1373961
|
||||
20220121,0933,2360,2360,2350,2355,233723
|
||||
20220121,0934,2355,2360,2350,2360,366552
|
||||
20220121,0935,2360,2365,2355,2360,1773251
|
||||
20220121,0936,2355,2365,2355,2360,513007
|
||||
20220121,0937,2360,2365,2355,2360,211536
|
||||
20220121,0938,2360,2360,2355,2360,11456
|
||||
20220121,0939,2360,2360,2350,2350,2382134
|
||||
20220121,0940,2355,2360,2350,2350,288958
|
||||
20220121,0941,2355,2360,2350,2355,426044
|
||||
20220121,0942,2355,2360,2350,2360,786245
|
||||
20220121,0943,2360,2365,2355,2360,1526142
|
||||
20220121,0944,2360,2365,2355,2365,283098
|
||||
20220121,0945,2365,2365,2360,2360,328830
|
||||
20220121,0946,2360,2365,2355,2360,355630
|
||||
20220121,0947,2360,2365,2355,2360,314608
|
||||
20220121,0948,2355,2365,2355,2360,204002
|
||||
20220121,0949,2365,2365,2355,2360,41109
|
||||
20220121,0950,2360,2360,2350,2355,1557085
|
||||
20220121,0951,2355,2360,2350,2355,136003
|
||||
20220121,0952,2355,2360,2350,2360,795947
|
||||
20220121,0953,2355,2360,2350,2350,122806
|
||||
20220121,0954,2355,2355,2350,2355,52477
|
||||
20220121,0955,2355,2360,2350,2360,345500
|
||||
20220121,0956,2355,2360,2355,2355,25882
|
||||
20220121,0957,2355,2360,2355,2360,1663
|
||||
20220121,0958,2360,2360,2355,2360,1757
|
||||
20220121,0959,2355,2360,2355,2355,8406
|
||||
20220121,1000,2355,2365,2355,2365,2002693
|
||||
20220121,1001,2360,2365,2355,2365,256831
|
||||
20220121,1002,2360,2365,2360,2360,19041
|
||||
20220121,1003,2365,2370,2360,2370,2498364
|
||||
20220121,1004,2370,2375,2365,2370,3957018
|
||||
20220121,1005,2370,2380,2370,2380,2092465
|
||||
20220121,1006,2380,2380,2375,2380,650433
|
||||
20220121,1007,2380,2385,2375,2380,5221012
|
||||
20220121,1008,2380,2385,2375,2380,1802208
|
||||
20220121,1009,2375,2385,2375,2385,994582
|
||||
20220121,1010,2385,2390,2380,2385,2740849
|
||||
20220121,1011,2385,2390,2385,2390,1730674
|
||||
20220121,1012,2390,2395,2385,2395,1615503
|
||||
20220121,1013,2390,2395,2390,2390,1202272
|
||||
20220121,1014,2395,2395,2380,2385,3719629
|
||||
20220121,1015,2385,2390,2380,2380,1433682
|
||||
20220121,1016,2380,2385,2380,2385,100749
|
||||
20220121,1017,2380,2385,2380,2380,295964
|
||||
20220121,1018,2385,2390,2380,2385,1620377
|
||||
20220121,1019,2385,2390,2380,2390,206977
|
||||
20220121,1020,2390,2395,2385,2390,1675550
|
||||
20220121,1021,2390,2395,2385,2390,1630500
|
||||
20220121,1022,2385,2390,2385,2390,1186940
|
||||
20220121,1023,2385,2390,2385,2385,38757
|
||||
20220121,1024,2385,2390,2380,2380,670327
|
||||
20220121,1025,2385,2390,2380,2380,429444
|
||||
20220121,1026,2385,2385,2380,2380,127395
|
||||
20220121,1027,2385,2385,2380,2380,503319
|
||||
20220121,1028,2380,2385,2375,2375,1545364
|
||||
20220121,1029,2375,2380,2370,2375,1035922
|
||||
20220121,1030,2375,2375,2365,2365,1410029
|
||||
20220121,1031,2370,2370,2365,2370,835099
|
||||
20220121,1032,2370,2370,2365,2365,440953
|
||||
20220121,1033,2365,2375,2365,2370,415844
|
||||
20220121,1034,2375,2375,2365,2365,1049876
|
||||
20220121,1035,2370,2370,2365,2365,65071
|
||||
20220121,1036,2365,2375,2365,2370,106146
|
||||
20220121,1037,2375,2375,2365,2375,899564
|
||||
20220121,1038,2375,2375,2365,2370,166405
|
||||
20220121,1039,2370,2375,2365,2370,57188
|
||||
20220121,1040,2365,2375,2365,2375,488728
|
||||
20220121,1041,2375,2375,2365,2370,122123
|
||||
20220121,1042,2370,2375,2365,2370,803400
|
||||
20220121,1043,2370,2375,2365,2370,961053
|
||||
20220121,1044,2375,2380,2365,2375,1612242
|
||||
20220121,1045,2370,2380,2370,2375,694307
|
||||
20220121,1046,2375,2380,2370,2380,348308
|
||||
20220121,1047,2375,2385,2375,2380,664803
|
||||
20220121,1048,2380,2385,2375,2380,359407
|
||||
20220121,1049,2375,2385,2375,2380,1390013
|
||||
20220121,1050,2375,2385,2375,2385,215188
|
||||
20220121,1051,2385,2385,2375,2380,540065
|
||||
20220121,1052,2380,2385,2375,2380,123729
|
||||
20220121,1053,2380,2385,2375,2380,42904
|
||||
20220121,1054,2375,2380,2370,2370,345759
|
||||
20220121,1055,2370,2375,2370,2370,427463
|
||||
20220121,1056,2370,2375,2370,2375,369879
|
||||
20220121,1057,2375,2375,2365,2370,242289
|
||||
20220121,1058,2375,2375,2365,2365,268240
|
||||
20220121,1059,2365,2375,2365,2370,179176
|
||||
20220121,1100,2375,2375,2365,2370,312061
|
||||
20220121,1101,2370,2370,2365,2365,111281
|
||||
20220121,1102,2365,2370,2365,2370,72445
|
||||
20220121,1103,2365,2370,2355,2355,3151172
|
||||
20220121,1104,2355,2360,2355,2360,134216
|
||||
20220121,1105,2360,2360,2355,2360,71744
|
||||
20220121,1106,2355,2360,2350,2355,1520582
|
||||
20220121,1107,2355,2355,2350,2355,429860
|
||||
20220121,1108,2355,2360,2350,2355,1134237
|
||||
20220121,1109,2355,2360,2350,2350,384784
|
||||
20220121,1110,2350,2355,2350,2355,37812
|
||||
20220121,1111,2355,2360,2350,2360,208739
|
||||
20220121,1112,2355,2360,2355,2360,441857
|
||||
20220121,1113,2355,2360,2350,2355,1596520
|
||||
20220121,1114,2360,2360,2355,2360,148380
|
||||
20220121,1115,2360,2360,2350,2350,310488
|
||||
20220121,1116,2355,2360,2350,2360,437544
|
||||
20220121,1117,2360,2360,2355,2360,15803
|
||||
20220121,1118,2360,2360,2350,2355,480696
|
||||
20220121,1119,2360,2360,2355,2355,21710
|
||||
20220121,1120,2355,2360,2355,2360,874342
|
||||
20220121,1121,2355,2365,2355,2360,208257
|
||||
20220121,1122,2355,2365,2355,2360,130425
|
||||
20220121,1123,2360,2365,2355,2360,516610
|
||||
20220121,1124,2360,2365,2355,2365,69391
|
||||
20220121,1125,2360,2365,2360,2360,40611
|
||||
20220121,1126,2360,2365,2360,2360,83671
|
||||
20220121,1127,2360,2365,2360,2360,12001
|
||||
20220121,1128,2365,2365,2360,2365,1249523
|
||||
20220121,1129,2365,2365,2360,2365,16462
|
||||
20220121,1130,2360,2365,2360,2360,544
|
||||
20220121,1131,2365,2370,2360,2365,1031897
|
||||
20220121,1132,2370,2370,2365,2370,7978
|
||||
20220121,1133,2370,2370,2360,2365,212054
|
||||
20220121,1134,2370,2370,2365,2370,76212
|
||||
20220121,1135,2365,2370,2365,2370,162061
|
||||
20220121,1136,2370,2375,2365,2370,926385
|
||||
20220121,1137,2370,2375,2370,2375,1256257
|
||||
20220121,1138,2375,2375,2370,2370,20153
|
||||
20220121,1139,2375,2375,2370,2375,25826
|
||||
20220121,1140,2370,2375,2370,2370,107191
|
||||
20220121,1141,2375,2375,2370,2375,41955
|
||||
20220121,1142,2370,2375,2370,2370,62047
|
||||
20220121,1143,2370,2375,2370,2370,158096
|
||||
20220121,1144,2370,2380,2370,2375,1286713
|
||||
20220121,1145,2370,2380,2370,2380,355053
|
||||
20220121,1146,2380,2380,2375,2380,36042
|
||||
20220121,1147,2380,2380,2375,2375,10308
|
||||
20220121,1148,2380,2385,2375,2375,1094705
|
||||
20220121,1149,2375,2380,2375,2380,195631
|
||||
20220121,1150,2375,2380,2375,2375,71081
|
||||
20220121,1151,2375,2380,2375,2375,17410
|
||||
20220121,1152,2380,2380,2375,2375,64853
|
||||
20220121,1153,2380,2380,2375,2380,104434
|
||||
20220121,1154,2375,2380,2375,2375,277311
|
||||
20220121,1155,2380,2385,2375,2385,274802
|
||||
20220121,1156,2380,2385,2375,2385,1808892
|
||||
20220121,1157,2380,2385,2380,2380,45911
|
||||
20220121,1158,2385,2385,2375,2380,623025
|
||||
20220121,1159,2380,2385,2375,2380,339410
|
||||
20220121,1200,2380,2385,2375,2380,145008
|
||||
20220121,1201,2380,2380,2375,2380,14744
|
||||
20220121,1202,2380,2385,2375,2380,314513
|
||||
20220121,1203,2380,2385,2375,2380,92963
|
||||
20220121,1204,2380,2380,2375,2375,3254
|
||||
20220121,1205,2375,2385,2375,2380,282381
|
||||
20220121,1206,2380,2385,2375,2380,25568
|
||||
20220121,1207,2380,2385,2380,2385,23642
|
||||
20220121,1208,2380,2390,2380,2380,2227480
|
||||
20220121,1209,2385,2385,2380,2380,36872
|
||||
20220121,1210,2380,2385,2380,2385,17749
|
||||
20220121,1211,2385,2390,2380,2380,421747
|
||||
20220121,1212,2385,2390,2380,2390,144658
|
||||
20220121,1213,2390,2390,2385,2385,124305
|
||||
20220121,1214,2390,2390,2385,2390,41550
|
||||
20220121,1215,2390,2390,2385,2385,172826
|
||||
20220121,1216,2385,2390,2380,2380,449399
|
||||
20220121,1217,2385,2390,2380,2385,345149
|
||||
20220121,1218,2390,2390,2380,2385,269746
|
||||
20220121,1219,2380,2390,2380,2385,1059049
|
||||
20220121,1220,2385,2385,2380,2380,57734
|
||||
20220121,1221,2385,2385,2380,2380,12403
|
||||
20220121,1222,2385,2390,2380,2390,256247
|
||||
20220121,1223,2385,2390,2380,2390,159346
|
||||
20220121,1224,2385,2385,2380,2380,27338
|
||||
20220121,1225,2380,2390,2380,2385,160049
|
||||
20220121,1226,2390,2390,2380,2385,880841
|
||||
20220121,1227,2385,2390,2385,2385,309461
|
||||
20220121,1228,2385,2390,2385,2390,13723
|
||||
20220121,1229,2385,2390,2385,2385,123544
|
||||
20220121,1230,2385,2390,2385,2385,17546
|
||||
20220121,1231,2390,2390,2385,2390,1295634
|
||||
20220121,1232,2390,2390,2385,2385,56504
|
||||
20220121,1233,2390,2390,2385,2390,17061
|
||||
20220121,1234,2390,2395,2390,2395,3819376
|
||||
20220121,1235,2395,2395,2385,2390,763103
|
||||
20220121,1236,2390,2395,2385,2390,724181
|
||||
20220121,1237,2395,2395,2390,2395,3154021
|
||||
20220121,1238,2390,2395,2390,2395,64164
|
||||
20220121,1239,2395,2395,2390,2395,17342
|
||||
20220121,1240,2395,2395,2390,2395,75331
|
||||
20220121,1241,2395,2395,2390,2390,202563
|
||||
20220121,1242,2390,2395,2390,2390,220022
|
||||
20220121,1243,2390,2395,2385,2385,380501
|
||||
20220121,1244,2390,2395,2385,2390,603386
|
||||
20220121,1245,2395,2395,2390,2390,42357
|
||||
20220121,1246,2395,2395,2390,2390,62343
|
||||
20220121,1247,2395,2395,2390,2390,62181
|
||||
20220121,1248,2390,2395,2390,2390,610345
|
||||
20220121,1249,2395,2395,2385,2385,435422
|
||||
20220121,1250,2390,2395,2385,2395,406738
|
||||
20220121,1251,2395,2395,2390,2395,29526
|
||||
20220121,1252,2395,2395,2390,2390,38839
|
||||
20220121,1253,2390,2395,2390,2395,24052
|
||||
20220121,1254,2395,2395,2385,2390,194498
|
||||
20220121,1255,2390,2390,2385,2390,84107
|
||||
20220121,1256,2390,2395,2385,2385,347785
|
||||
20220121,1257,2390,2395,2385,2390,185322
|
||||
20220121,1258,2395,2395,2385,2385,66218
|
||||
20220121,1259,2390,2390,2385,2390,26794
|
||||
20220121,1300,2390,2390,2385,2385,25487
|
||||
20220121,1301,2390,2390,2380,2385,695108
|
||||
20220121,1302,2380,2385,2380,2380,72691
|
||||
20220121,1303,2380,2385,2380,2385,300514
|
||||
20220121,1304,2380,2385,2380,2380,902616
|
||||
20220121,1305,2380,2385,2375,2380,539185
|
||||
20220121,1306,2380,2385,2375,2380,858942
|
||||
20220121,1307,2375,2380,2375,2375,220046
|
||||
20220121,1308,2375,2385,2375,2380,351146
|
||||
20220121,1309,2380,2380,2375,2380,128489
|
||||
20220121,1310,2375,2385,2375,2385,425823
|
||||
20220121,1311,2380,2385,2380,2380,10523
|
||||
20220121,1312,2380,2385,2380,2380,59089
|
||||
20220121,1313,2385,2385,2380,2385,11610
|
||||
20220121,1314,2385,2385,2380,2385,746698
|
||||
20220121,1315,2380,2385,2380,2385,870353
|
||||
20220121,1316,2385,2390,2380,2385,207963
|
||||
20220121,1317,2385,2390,2385,2390,323494
|
||||
20220121,1318,2390,2390,2385,2390,145113
|
||||
20220121,1319,2390,2395,2390,2390,1512357
|
||||
20220121,1320,2395,2395,2385,2395,1261661
|
||||
20220121,1321,2390,2395,2385,2390,111484
|
||||
20220121,1322,2390,2390,2385,2390,5341
|
||||
20220121,1323,2390,2395,2385,2395,197360
|
||||
20220121,1324,2395,2395,2390,2390,11343
|
||||
20220121,1325,2390,2395,2385,2390,152734
|
||||
20220121,1326,2390,2390,2385,2390,23967
|
||||
20220121,1327,2385,2390,2385,2385,2309783
|
||||
20220121,1328,2390,2390,2385,2390,400403
|
||||
20220121,1329,2390,2390,2380,2385,416036
|
||||
20220121,1330,2385,2385,2380,2385,70969
|
||||
20220121,1331,2385,2385,2380,2385,44583
|
||||
20220121,1332,2385,2385,2380,2380,17304
|
||||
20220121,1333,2380,2385,2380,2385,334981
|
||||
20220121,1334,2385,2390,2380,2385,1140788
|
||||
20220121,1335,2385,2390,2380,2390,223370
|
||||
20220121,1336,2385,2390,2385,2385,11839
|
||||
20220121,1337,2390,2390,2380,2385,334000
|
||||
20220121,1338,2380,2390,2380,2390,373272
|
||||
20220121,1339,2390,2390,2385,2385,15684
|
||||
20220121,1340,2385,2390,2385,2390,19288
|
||||
20220121,1341,2390,2395,2385,2390,1097760
|
||||
20220121,1342,2390,2395,2385,2390,697334
|
||||
20220121,1343,2390,2390,2385,2385,148363
|
||||
20220121,1344,2385,2395,2385,2395,339929
|
||||
20220121,1345,2395,2395,2385,2390,58884
|
||||
20220121,1346,2390,2395,2385,2395,316896
|
||||
20220121,1347,2390,2395,2390,2395,547456
|
||||
20220121,1348,2390,2395,2390,2390,104761
|
||||
20220121,1349,2395,2395,2390,2390,29270
|
||||
20220121,1350,2390,2395,2390,2395,57897
|
||||
20220121,1351,2395,2395,2390,2390,171802
|
||||
20220121,1352,2390,2395,2390,2395,28321
|
||||
20220121,1353,2395,2395,2390,2395,16864
|
||||
20220121,1354,2390,2395,2390,2390,16835
|
||||
20220121,1355,2395,2395,2390,2390,31265
|
||||
20220121,1356,2390,2395,2390,2390,478233
|
||||
20220121,1357,2390,2395,2385,2390,226619
|
||||
20220121,1358,2390,2390,2385,2390,18333
|
||||
20220121,1359,2390,2390,2385,2385,8519
|
||||
20220121,1400,2390,2390,2385,2390,30098
|
||||
20220121,1401,2385,2395,2385,2390,507494
|
||||
20220121,1402,2385,2390,2380,2390,1295912
|
||||
20220121,1403,2385,2395,2385,2390,540150
|
||||
20220121,1404,2395,2395,2390,2390,18540
|
||||
20220121,1405,2390,2395,2385,2390,25096
|
||||
20220121,1406,2395,2395,2390,2395,10948
|
||||
20220121,1407,2390,2395,2390,2390,82559
|
||||
20220121,1408,2390,2395,2385,2390,196428
|
||||
20220121,1409,2390,2390,2385,2385,8297
|
||||
20220121,1410,2385,2390,2385,2385,2694
|
||||
20220121,1411,2385,2390,2385,2385,15258
|
||||
20220121,1412,2385,2390,2385,2385,348444
|
||||
20220121,1413,2390,2395,2385,2390,24340
|
||||
20220121,1414,2390,2395,2390,2390,27961
|
||||
20220121,1415,2395,2395,2390,2395,41545
|
||||
20220121,1416,2395,2395,2390,2390,79146
|
||||
20220121,1417,2390,2395,2390,2390,98930
|
||||
20220121,1418,2390,2395,2390,2390,150319
|
||||
20220121,1419,2395,2395,2390,2390,1035863
|
||||
20220121,1420,2390,2395,2385,2390,185995
|
||||
20220121,1421,2390,2395,2390,2395,163629
|
||||
20220121,1422,2390,2395,2390,2390,25992
|
||||
20220121,1423,2390,2395,2390,2390,106457
|
||||
20220121,1424,2390,2395,2390,2395,25777
|
||||
20220121,1425,2395,2395,2390,2390,65561
|
||||
20220121,1426,2390,2395,2390,2395,21357
|
||||
20220121,1427,2390,2395,2385,2390,307347
|
||||
20220121,1428,2390,2395,2385,2390,1895678
|
||||
20220121,1429,2390,2395,2390,2395,472335
|
||||
20220121,1430,2390,2395,2385,2390,136845
|
||||
20220121,1431,2390,2390,2385,2390,12707
|
||||
20220121,1432,2385,2390,2380,2385,2737318
|
||||
20220121,1433,2385,2385,2380,2385,159294
|
||||
20220121,1434,2385,2385,2375,2380,847299
|
||||
20220121,1435,2380,2385,2375,2380,485574
|
||||
20220121,1436,2380,2385,2375,2380,168541
|
||||
20220121,1437,2380,2380,2375,2375,414413
|
||||
20220121,1438,2375,2380,2375,2375,511392
|
||||
20220121,1439,2380,2385,2375,2380,293913
|
||||
20220121,1440,2385,2385,2375,2380,333951
|
||||
20220121,1441,2380,2385,2375,2380,813856
|
||||
20220121,1442,2380,2380,2375,2380,66465
|
||||
20220121,1443,2380,2380,2375,2375,129163
|
||||
20220121,1444,2375,2380,2375,2380,15185
|
||||
20220121,1445,2380,2380,2375,2375,173167
|
||||
20220121,1446,2375,2375,2370,2370,1070997
|
||||
20220121,1447,2370,2370,2365,2370,2485802
|
||||
20220121,1448,2370,2375,2365,2375,292919
|
||||
20220121,1449,2370,2375,2370,2375,128744
|
||||
20220121,1450,2370,2375,2370,2375,22377
|
||||
20220121,1451,2375,2375,2370,2370,63677
|
||||
20220121,1452,2370,2375,2370,2370,18849
|
||||
20220121,1453,2370,2375,2365,2370,2782580
|
||||
20220121,1454,2370,2375,2365,2370,127250
|
||||
20220121,1455,2375,2375,2370,2370,120095
|
||||
20220121,1456,2370,2375,2365,2375,1303874
|
||||
20220121,1457,2375,2375,2370,2370,40645
|
||||
20220121,1458,2370,2375,2370,2370,133655
|
||||
20220121,1459,2370,2375,2370,2375,11396
|
||||
20220121,1500,2375,2375,2365,2375,574365
|
||||
20220121,1501,2375,2375,2370,2375,45364
|
||||
20220121,1502,2375,2375,2365,2370,295096
|
||||
20220121,1503,2375,2375,2365,2370,111198
|
||||
20220121,1504,2370,2375,2365,2370,255965
|
||||
20220121,1505,2365,2370,2365,2370,10394
|
||||
20220121,1506,2365,2370,2365,2370,9485
|
||||
20220121,1507,2365,2375,2365,2370,366863
|
||||
20220121,1508,2370,2375,2365,2370,256790
|
||||
20220121,1509,2375,2375,2370,2375,9871
|
||||
20220121,1510,2375,2375,2370,2375,38640
|
||||
20220121,1511,2370,2375,2370,2370,57466
|
||||
20220121,1512,2375,2375,2370,2370,51717
|
||||
20220121,1513,2370,2375,2370,2370,10168
|
||||
20220121,1514,2370,2375,2370,2370,38025
|
||||
20220121,1515,2370,2375,2370,2370,30398
|
||||
20220121,1516,2370,2375,2370,2370,267434
|
||||
20220121,1517,2370,2375,2365,2365,1114700
|
||||
20220121,1518,2365,2370,2365,2370,69535
|
||||
20220121,1519,2370,2375,2365,2370,1059871
|
||||
20220121,1520,2365,2375,2365,2375,206612
|
||||
20220121,1530,2365,2365,2365,2365,2444741
|
||||
|
Reference in New Issue
Block a user