From 7ad0cfece20e7582db9531ce4b131bd44d054c48 Mon Sep 17 00:00:00 2001 From: dosangyoon Date: Tue, 26 Oct 2021 00:24:45 +0900 Subject: [PATCH] init --- hts/HTS_122630.py | 27 +++++++++++++++------------ hts/HTS_252670.py | 27 +++++++++++++++------------ hts/Simulation.py | 22 ++++++++++++++-------- 3 files changed, 44 insertions(+), 32 deletions(-) diff --git a/hts/HTS_122630.py b/hts/HTS_122630.py index 5907a4e..8020352 100644 --- a/hts/HTS_122630.py +++ b/hts/HTS_122630.py @@ -17,9 +17,12 @@ class HTS_122630: objCpCodeMgr = None buySellChecker = None + stock_code = None - def __init__(self): + def __init__(self, stock_code): self.buySellChecker = BuySellChecker() + self.stock_code = stock_code + #self.connect() return @@ -545,8 +548,8 @@ class HTS_122630: return 0, 0 - def buyRealTime(self, stock_code, GIVEN_DAY): - orderChecker = OrderChecker(stock_code) + def buyRealTime(self, GIVEN_DAY): + orderChecker = OrderChecker(self.stock_code) BASE_COUNT = 10 timecheckList = pd.read_csv("timecheck.csv").values.tolist() @@ -569,7 +572,7 @@ class HTS_122630: 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(stock_code, GIVEN_DAY, result) + self.getRealTime(self.stock_code, GIVEN_DAY, result) # 분석을 통해서 볼린저밴드 상/하단을 계산한다. data = self.buySellChecker.analyze(result) @@ -584,12 +587,12 @@ class HTS_122630: BUY_COUNT = int(BASE_COUNT * 1) # 매수를 주문한다. - orderNum = self.requestOrder(OrderType.buy, stock_code, BUY_COUNT , bs_buy_price) + orderNum = self.requestOrder(OrderType.buy, self.stock_code, BUY_COUNT , bs_buy_price) # 미체결 기록을 가져온다. ORDER_LIST = self.requestOrderList() # 매수 주문을 기록한다. - orderListToCancel = orderChecker.add(stock_code, OrderType.buy, orderNum, BUY_COUNT, bs_buy_price, ORDER_LIST) + orderListToCancel = orderChecker.add(self.stock_code, OrderType.buy, orderNum, BUY_COUNT, bs_buy_price, ORDER_LIST) # 두 시간 이전 미체결을 모두 취소한다. self.cancelOrderList(orderListToCancel) # 로그 출력 @@ -599,7 +602,7 @@ class HTS_122630: # 미체결 기록을 가져온다. ORDER_LIST = self.requestOrderList() # 매도 주문을 기록을 가져온다. - orderListToCancel = orderChecker.remove(stock_code, OrderType.sell, ORDER_LIST) + orderListToCancel = orderChecker.remove(self.stock_code, OrderType.sell, ORDER_LIST) # 매도 미체결을 모두 취소한다. self.cancelOrderList(orderListToCancel) @@ -608,7 +611,7 @@ class HTS_122630: # 분석되 가격으로 매도 요청한다. if selling_count != 0 and selling_price != 0: # 매도를 요청한다. - orderNum = self.requestOrder(OrderType.sell, stock_code, selling_count, selling_price) + 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)) @@ -631,7 +634,7 @@ class HTS_122630: selling_count, selling_price = self.getSellingPrice(final_price) # 분석되 가격으로 매도 요청한다. if selling_count != 0 and selling_price != 0: - orderNum = self.requestOrder(OrderType.sell, stock_code, selling_count, selling_price) + orderNum = self.requestOrder(OrderType.sell, self.stock_code, selling_count, selling_price) # 로그 출력 print("SELL", THIS_TIME, selling_count, selling_price) @@ -649,11 +652,11 @@ if __name__ == "__main__": RESOURCE_DIR = PROJECT_HOME + "/resources/analysis/"+today.strftime("%Y%m%d") # KODEX 인버스 * 2 - hts = HTS_122630() - stock_codes = ["122630"] + stock_code = "122630" + hts = HTS_122630(stock_code) given_day = datetime.today().strftime('%Y%m%d') #hts.writeStockData(stock_codes, "20211025") - hts.buyRealTime(stock_codes[0], given_day) + hts.buyRealTime(given_day) print ("done...") diff --git a/hts/HTS_252670.py b/hts/HTS_252670.py index 88d0c5f..9ac1517 100644 --- a/hts/HTS_252670.py +++ b/hts/HTS_252670.py @@ -17,9 +17,12 @@ class HTS_252670: objCpCodeMgr = None buySellChecker = None + stock_code = None - def __init__(self): + def __init__(self, stock_code): self.buySellChecker = BuySellChecker() + self.stock_code = stock_code + #self.connect() return @@ -545,8 +548,8 @@ class HTS_252670: return 0, 0 - def buyRealTime(self, stock_code, GIVEN_DAY): - orderChecker = OrderChecker(stock_code) + def buyRealTime(self, GIVEN_DAY): + orderChecker = OrderChecker(self.stock_code) BASE_COUNT = 100 timecheckList = pd.read_csv("timecheck.csv").values.tolist() @@ -569,7 +572,7 @@ class HTS_252670: 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(stock_code, GIVEN_DAY, result) + self.getRealTime(self.stock_code, GIVEN_DAY, result) # 분석을 통해서 볼린저밴드 상/하단을 계산한다. data = self.buySellChecker.analyze(result) @@ -584,12 +587,12 @@ class HTS_252670: BUY_COUNT = int(BASE_COUNT * 1) # 매수를 주문한다. - orderNum = self.requestOrder(OrderType.buy, stock_code, BUY_COUNT , bs_buy_price) + orderNum = self.requestOrder(OrderType.buy, self.stock_code, BUY_COUNT , bs_buy_price) # 미체결 기록을 가져온다. ORDER_LIST = self.requestOrderList() # 매수 주문을 기록한다. - orderListToCancel = orderChecker.add(stock_code, OrderType.buy, orderNum, BUY_COUNT, bs_buy_price, ORDER_LIST) + orderListToCancel = orderChecker.add(self.stock_code, OrderType.buy, orderNum, BUY_COUNT, bs_buy_price, ORDER_LIST) # 두 시간 이전 미체결을 모두 취소한다. self.cancelOrderList(orderListToCancel) # 로그 출력 @@ -599,7 +602,7 @@ class HTS_252670: # 미체결 기록을 가져온다. ORDER_LIST = self.requestOrderList() # 매도 주문을 기록을 가져온다. - orderListToCancel = orderChecker.remove(stock_code, OrderType.sell, ORDER_LIST) + orderListToCancel = orderChecker.remove(self.stock_code, OrderType.sell, ORDER_LIST) # 매도 미체결을 모두 취소한다. self.cancelOrderList(orderListToCancel) @@ -608,7 +611,7 @@ class HTS_252670: # 분석되 가격으로 매도 요청한다. if selling_count != 0 and selling_price != 0: # 매도를 요청한다. - orderNum = self.requestOrder(OrderType.sell, stock_code, selling_count, selling_price) + 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)) @@ -631,7 +634,7 @@ class HTS_252670: selling_count, selling_price = self.getSellingPrice(final_price) # 분석되 가격으로 매도 요청한다. if selling_count != 0 and selling_price != 0: - orderNum = self.requestOrder(OrderType.sell, stock_code, selling_count, selling_price) + orderNum = self.requestOrder(OrderType.sell, self.stock_code, selling_count, selling_price) # 로그 출력 print("SELL", THIS_TIME, selling_count, selling_price) @@ -649,11 +652,11 @@ if __name__ == "__main__": RESOURCE_DIR = PROJECT_HOME + "/resources/analysis/"+today.strftime("%Y%m%d") # KODEX 인버스 * 2 - hts = HTS_252670() - stock_codes = ["252670"] + stock_code = "252670" + hts = HTS_252670(stock_code) given_day = datetime.today().strftime('%Y%m%d') #hts.writeStockData(stock_codes, "20211025") - hts.buyRealTime(stock_codes[0], given_day) + hts.buyRealTime(given_day) print ("done...") diff --git a/hts/Simulation.py b/hts/Simulation.py index f134e5c..11f340f 100644 --- a/hts/Simulation.py +++ b/hts/Simulation.py @@ -9,8 +9,12 @@ from BuySellChecker import BuySellChecker class Simulation: buySellChecker = None - def __init__(self): + stock_code = None + + def __init__(self, stock_code): + self.buySellChecker = BuySellChecker() + self.stock_code = stock_code #self.connect() return @@ -50,7 +54,10 @@ class Simulation: bsLine['sell'] = [-1 for i in range(size)] for i in range(6, size-5): - buy, weight, sell = self.buySellChecker.getPriceAndWeight1(data, i) + if self.stock_code == "252670": + buy, weight, sell = self.buySellChecker.getPriceAndWeight1(data, i) + else: + buy, weight, sell = self.buySellChecker.getPriceAndWeight2(data, i) bsLine['buy'][i] = buy bsLine['weight'][i] = weight bsLine['sell'][i] = sell @@ -139,7 +146,7 @@ class Simulation: return - def simulate(self, stock_code, GIVEN_DAY): + def simulate(self, GIVEN_DAY): result = {"check": set(), "time": [], "open": [], @@ -149,7 +156,7 @@ class Simulation: "vol": []} # 데이터를 가지고 온다. - self.getCSV("./data/"+stock_code+"_"+GIVEN_DAY+".csv", GIVEN_DAY, result) + self.getCSV("./data/"+self.stock_code+"_"+GIVEN_DAY+".csv", GIVEN_DAY, result) # 분석을 통해서 볼린저밴드 상/하단을 계산한다. data = self.buySellChecker.analyze(result) @@ -158,7 +165,7 @@ class Simulation: bsLine = self.checkTransaction(data) # 그래프를 그린다. - self.draw(stock_code, GIVEN_DAY, data, bsLine) + self.draw(self.stock_code, GIVEN_DAY, data, bsLine) return @@ -174,12 +181,11 @@ if __name__ == "__main__": '20210914','20210915','20210916','20210917','20210923','20210924','20210927','20210928','20210929', '20210930','20211001','20211005','20211006','20211007','20211008','20211012','20211013','20211014', '20211018', '20211019','20211020','20211021','20211022'] - given_days = ['20211022'] - simulation = Simulation() + simulation = Simulation(stock_codes[1]) given_days = sorted(given_days, reverse=True) for given_day in given_days: - simulation.simulate(stock_codes[0], given_day) + simulation.simulate(given_day) print ("done...")