From f27aafa363cb9b70d446228e0caef8191617e36b Mon Sep 17 00:00:00 2001 From: dosangyoon Date: Tue, 26 Jul 2022 03:18:17 +0900 Subject: [PATCH] init --- hts/BuySellChecker.py | 105 +++++++++++++++-------- hts/HTS_252670.py | 2 +- hts/Simulation.py | 8 +- hts/{backup => data}/122630_20220630.csv | 0 hts/{backup => data}/122630_20220701.csv | 0 hts/{backup => data}/122630_20220704.csv | 0 hts/{backup => data}/122630_20220705.csv | 0 hts/{backup => data}/122630_20220706.csv | 0 hts/{backup => data}/122630_20220707.csv | 0 hts/{backup => data}/122630_20220708.csv | 0 hts/{backup => data}/122630_20220711.csv | 0 hts/{backup => data}/122630_20220712.csv | 0 hts/{backup => data}/122630_20220713.csv | 0 hts/{backup => data}/252670_20220630.csv | 0 hts/{backup => data}/252670_20220701.csv | 0 hts/{backup => data}/252670_20220704.csv | 0 hts/{backup => data}/252670_20220705.csv | 0 hts/{backup => data}/252670_20220706.csv | 0 hts/{backup => data}/252670_20220707.csv | 0 hts/{backup => data}/252670_20220708.csv | 0 hts/{backup => data}/252670_20220711.csv | 0 hts/{backup => data}/252670_20220712.csv | 0 hts/{backup => data}/252670_20220713.csv | 0 23 files changed, 71 insertions(+), 44 deletions(-) rename hts/{backup => data}/122630_20220630.csv (100%) rename hts/{backup => data}/122630_20220701.csv (100%) rename hts/{backup => data}/122630_20220704.csv (100%) rename hts/{backup => data}/122630_20220705.csv (100%) rename hts/{backup => data}/122630_20220706.csv (100%) rename hts/{backup => data}/122630_20220707.csv (100%) rename hts/{backup => data}/122630_20220708.csv (100%) rename hts/{backup => data}/122630_20220711.csv (100%) rename hts/{backup => data}/122630_20220712.csv (100%) rename hts/{backup => data}/122630_20220713.csv (100%) rename hts/{backup => data}/252670_20220630.csv (100%) rename hts/{backup => data}/252670_20220701.csv (100%) rename hts/{backup => data}/252670_20220704.csv (100%) rename hts/{backup => data}/252670_20220705.csv (100%) rename hts/{backup => data}/252670_20220706.csv (100%) rename hts/{backup => data}/252670_20220707.csv (100%) rename hts/{backup => data}/252670_20220708.csv (100%) rename hts/{backup => data}/252670_20220711.csv (100%) rename hts/{backup => data}/252670_20220712.csv (100%) rename hts/{backup => data}/252670_20220713.csv (100%) diff --git a/hts/BuySellChecker.py b/hts/BuySellChecker.py index 8e1ed59..8ea3110 100644 --- a/hts/BuySellChecker.py +++ b/hts/BuySellChecker.py @@ -204,7 +204,7 @@ class BuySellChecker: if data["open"][i] < data["avg10"][i] < data["avg20"][i] < data["avg30"][i] < data["close"][i]: if data["avg20"][i - 2] <= data["avg20"][i - 1] <= data["avg20"][i]: buy = int((data["close"][i] + data["low"][i])/2) - weight = 1 + weight = 2 return self.getBuyCheck(data, i, buy, weight) # 30일 이전부터 모든 선이 좁혀졌다 녋혀지면서 다시 상승하며 좁혀짐 @@ -227,8 +227,8 @@ class BuySellChecker: break if check1 and check2: buy = int((data["close"][i] + data["low"][i]) / 2) - weight = 1 - return self.getBuyCheck(data, i, buy, weight) + weight = 7 + return buy, weight # 최근 양봉 3개가 나오면, # 최근 10개 중에서 9개가 음봉이었음. 이 상태에서 양봉 3개가 나오면, 중간값에서 매수한다. @@ -243,9 +243,9 @@ class BuySellChecker: if umbong >= 8: if data["open"][i] < data["open"][i-10]: buy = data["open"][i] - weight = 1 + weight = 7 return self.getBuyCheck(data, i, buy, weight) - + # 최근 양봉 3개가 나오면, # 9시 3분이나 4분에 장 시작 양봉 연속 3개면 매수 @@ -255,26 +255,19 @@ class BuySellChecker: if data["low"][i - 1] <= data["open"][i - 1] < data["close"][i - 1] <= data["high"][i - 1]: if data["low"][i] <= data["open"][i] < data["close"][i] <= data["high"][i]: buy = data["high"][i] + 5 - weight = 1 - return self.getBuyCheck(data, i, buy, weight) + weight = 5 + return buy, weight # 장시작 5개 high가 볼린져 상단 위에 있을 때 중간 값에서 매수 if data.index[i].strftime("%H:%M") == "09:05": if data["upper"][i-4] < data["high"][i-4] and data["upper"][i-3] < data["high"][i-3] and data["upper"][i-2] < data["high"][i-2] and data["upper"][i-1] < data["high"][i-1] and data["upper"][i] < data["high"][i]: buy = (data["open"][i]+data["close"][i])/2 - weight = 1 + weight = 5 return self.getBuyCheck(data, i, buy, weight) # 장 초기 (시작 9분 이내), 볼린져 하단에서 시작하여 이병선을 모두 상승하여 마감한 경우 high 값에서 매수한다. # (2022-07-15 09:08 09:09) if i <= 381 + 10: - # 최근 저점이 이전 저점보다 avg3는 크지만, rsi는 높은 경우 - if data['high'][381] < data['lower'][381] or data['high'][382] < data['lower'][382]: - if data['upper'][i] < data['high'][i] and data['open'][i] < data['close'][i]: - buy = data["close"][i] - weight = 1 - return buy, weight - if data["close"][i] > max(data["avg3"][i], data["avg5"][i], data["avg10"][i], data["avg20"][i], data["avg30"][i]): c = 382 # 장 시작 역배열 상태임 @@ -283,7 +276,7 @@ class BuySellChecker: buy = data["close"][i] else: buy = data["high"][i] - weight = 1 + weight = 7 return buy, weight # 이동선을 이용한 매매 @@ -300,26 +293,9 @@ class BuySellChecker: break if valid and same_count < 2: buy = data["close"][i] - 5 - weight = 1 + weight = 3 return self.getBuyCheck(data, i, buy, weight) - # 이동선을 이용한 매매 - # 20분선이 30분선에 돌파 후 지지하는지 확인하고 해당 시점이 양봉이면 매수함 - if data['avg20'][i] > data['avg30'][i]: - diff1 = data['avg20'][i] - data['avg30'][i] - diff2 = data['avg20'][i-1] - data['avg30'][i-1] - diff3 = data['avg20'][i-2] - data['avg30'][i-2] - diff4 = data['avg20'][i-3] - data['avg30'][i-3] - diff5 = data['avg20'][i-4] - data['avg30'][i-4] - if 0 < diff3 < diff2 < diff1: - if data['high'][i-2] <= data['high'][i-1] <= data['high'][i]: - if data['open'][i - 2] <= data['close'][i - 2] and data['open'][i-1] <= data['close'][i-1] and data['open'][i] <= data['close'][i]: - if diff5 < diff4 < 0: - if data["rsi"][i] < 30: - buy = (data["open"][i]+data["close"][i])/2 - weight = 1 - return self.getBuyCheck(data, i, buy, weight) - # MACD를 이용한 다이버젼스 # lower를 하단으로 깼을 때, 5분선 기준으로 이전 저점보다 낮거나 같은데, MACD는 더 높은 경우 매수한다. @@ -341,11 +317,51 @@ class BuySellChecker: if data['macd'][idx] < data['macd'][i] and data['low'][i] <= data['low'][idx] and high-data['high'][i] > 20: buy = (data["open"][i]+data["close"][i])/2 - weight = 1 + weight = 7 return self.getBuyCheck(data, i, buy, weight) + # 10분선이 30분 이상 20분선 아래에 있다가 20분선 위로 올라옴 + # 이때 3, 5, 10, 20분선의 max-min이 5원 미만이다. + if i > 381 + 20: + vaild = True + max_price = 0 + if i > 381 + 30: + last = 30 + else: + last = i - 381 + for c in range(4, last): + if data["avg10"][i - c] >= data["avg20"][i - c]: + vaild = False + if max_price < data["high"][i - c]: + max_price = data["high"][i - c] + if vaild: + if ((data["avg10"][i-3] > data["avg20"][i-3] and data["avg10"][i-2] > data["avg20"][i-2] and data["avg10"][i-1] > data["avg20"][i-1] and data["avg10"][i] > data["avg20"][i]) or + (abs(data["avg10"][i-3] - data["avg20"][i-3]) < 2 and abs(data["avg10"][i-2] - data["avg20"][i-2]) < 2 and abs(data["avg10"][i-1] - data["avg20"][i-1]) < 2 and abs(data["avg10"][i] - data["avg20"][i])<2)) : + if max(data["avg3"][i], data["avg5"][i], data["avg10"][i], data["avg20"][i]) - min(data["avg3"][i], data["avg5"][i], data["avg10"][i], data["avg20"][i]) <= 5: + if max_price - data["close"][i] >= 30: + buy = data["high"][i] + weight = 10 + return self.getBuyCheck(data, i, buy, weight) + """ + # 이동선을 이용한 매매 + # 20분선이 30분선에 돌파 후 지지하는지 확인하고 해당 시점이 양봉이면 매수함 + if data['avg20'][i] > data['avg30'][i]: + diff1 = data['avg20'][i] - data['avg30'][i] + diff2 = data['avg20'][i-1] - data['avg30'][i-1] + diff3 = data['avg20'][i-2] - data['avg30'][i-2] + diff4 = data['avg20'][i-3] - data['avg30'][i-3] + diff5 = data['avg20'][i-4] - data['avg30'][i-4] + if 0 < diff3 < diff2 < diff1: + if data['high'][i-2] <= data['high'][i-1] <= data['high'][i]: + if data['open'][i - 2] <= data['close'][i - 2] and data['open'][i-1] <= data['close'][i-1] and data['open'][i] <= data['close'][i]: + if diff5 < diff4 < 0: + if data["rsi"][i] < 30: + buy = (data["open"][i]+data["close"][i])/2 + weight = 7 + return self.getBuyCheck(data, i, buy, weight) + # 이동선을 이용한 매매 # 3분선과 5분선이 10분 이상 내려오다가 3분선이 5분선을 넘어 서는 순간 매수 # (2022-07-04 09:22) (2022-07-05 09:38) (2022-07-07 09:35) (2022-07-08 09:06) (2022-07-11 09:25) (2022-07-13 10:12) (2022-07-15 14:48) @@ -630,15 +646,30 @@ class BuySellChecker: weight = 1 return self.getBuyCheck(data, i, buy, weight) - if data.index[i].strftime("%Y-%m-%d %H:%M:%S") == "2022-07-22 09:02:00": - print (1) if data['close'][i] - data['open'][i] >= 90 and data['close'][i] == data['high'][i]: buy = int((data["open"][i] + data["close"][i]) / 2) weight = 1 return buy, weight + + + # 장 초기 (시작 9분 이내), 볼린져 하단에서 시작하여 이병선을 모두 상승하여 마감한 경우 high 값에서 매수한다. + # (2022-07-15 09:08 09:09) + if i <= 381 + 4: + if data["close"][381] < min(data["lower"][381], data["avg3"][381], data["avg5"][381], data["avg10"][381], data["avg20"][381], data["avg30"][381]): + for c in range(1, 4): + if i-c < 382: + break + if data["close"][i-c] > max(data["upper"][i-c], data["avg3"][i-c], data["avg5"][i-c], data["avg10"][i-c], data["avg20"][i-c], data["avg30"][i-c]): + buy = data["high"][i] + weight = 3 + return buy, weight + + + return buy, weight + def getSellPriceAndWeight_15000(self, data, i): sell, weight = -1, -1 diff --git a/hts/HTS_252670.py b/hts/HTS_252670.py index 3e3e439..f5005cf 100644 --- a/hts/HTS_252670.py +++ b/hts/HTS_252670.py @@ -188,7 +188,7 @@ if __name__ == "__main__": # KODEX 인버스 * 2 stock_code = "252670" - buy_count = 700 + buy_count = 100 hts = HTS_252670(stock_code, buy_count) today_str = today.strftime('%Y%m%d') diff --git a/hts/Simulation.py b/hts/Simulation.py index 25260e4..9129832 100644 --- a/hts/Simulation.py +++ b/hts/Simulation.py @@ -189,12 +189,8 @@ if __name__ == "__main__": # 252670 # 122630 "122630": [ - ('20220714', '20220715'), - ('20220715', '20220718'), - ('20220718', '20220719'), - ('20220719', '20220720'), - ('20220720', '20220721'), - ('20220721', '20220722') + + ('20220722', '20220725') ], } path = './hts/data' diff --git a/hts/backup/122630_20220630.csv b/hts/data/122630_20220630.csv similarity index 100% rename from hts/backup/122630_20220630.csv rename to hts/data/122630_20220630.csv diff --git a/hts/backup/122630_20220701.csv b/hts/data/122630_20220701.csv similarity index 100% rename from hts/backup/122630_20220701.csv rename to hts/data/122630_20220701.csv diff --git a/hts/backup/122630_20220704.csv b/hts/data/122630_20220704.csv similarity index 100% rename from hts/backup/122630_20220704.csv rename to hts/data/122630_20220704.csv diff --git a/hts/backup/122630_20220705.csv b/hts/data/122630_20220705.csv similarity index 100% rename from hts/backup/122630_20220705.csv rename to hts/data/122630_20220705.csv diff --git a/hts/backup/122630_20220706.csv b/hts/data/122630_20220706.csv similarity index 100% rename from hts/backup/122630_20220706.csv rename to hts/data/122630_20220706.csv diff --git a/hts/backup/122630_20220707.csv b/hts/data/122630_20220707.csv similarity index 100% rename from hts/backup/122630_20220707.csv rename to hts/data/122630_20220707.csv diff --git a/hts/backup/122630_20220708.csv b/hts/data/122630_20220708.csv similarity index 100% rename from hts/backup/122630_20220708.csv rename to hts/data/122630_20220708.csv diff --git a/hts/backup/122630_20220711.csv b/hts/data/122630_20220711.csv similarity index 100% rename from hts/backup/122630_20220711.csv rename to hts/data/122630_20220711.csv diff --git a/hts/backup/122630_20220712.csv b/hts/data/122630_20220712.csv similarity index 100% rename from hts/backup/122630_20220712.csv rename to hts/data/122630_20220712.csv diff --git a/hts/backup/122630_20220713.csv b/hts/data/122630_20220713.csv similarity index 100% rename from hts/backup/122630_20220713.csv rename to hts/data/122630_20220713.csv diff --git a/hts/backup/252670_20220630.csv b/hts/data/252670_20220630.csv similarity index 100% rename from hts/backup/252670_20220630.csv rename to hts/data/252670_20220630.csv diff --git a/hts/backup/252670_20220701.csv b/hts/data/252670_20220701.csv similarity index 100% rename from hts/backup/252670_20220701.csv rename to hts/data/252670_20220701.csv diff --git a/hts/backup/252670_20220704.csv b/hts/data/252670_20220704.csv similarity index 100% rename from hts/backup/252670_20220704.csv rename to hts/data/252670_20220704.csv diff --git a/hts/backup/252670_20220705.csv b/hts/data/252670_20220705.csv similarity index 100% rename from hts/backup/252670_20220705.csv rename to hts/data/252670_20220705.csv diff --git a/hts/backup/252670_20220706.csv b/hts/data/252670_20220706.csv similarity index 100% rename from hts/backup/252670_20220706.csv rename to hts/data/252670_20220706.csv diff --git a/hts/backup/252670_20220707.csv b/hts/data/252670_20220707.csv similarity index 100% rename from hts/backup/252670_20220707.csv rename to hts/data/252670_20220707.csv diff --git a/hts/backup/252670_20220708.csv b/hts/data/252670_20220708.csv similarity index 100% rename from hts/backup/252670_20220708.csv rename to hts/data/252670_20220708.csv diff --git a/hts/backup/252670_20220711.csv b/hts/data/252670_20220711.csv similarity index 100% rename from hts/backup/252670_20220711.csv rename to hts/data/252670_20220711.csv diff --git a/hts/backup/252670_20220712.csv b/hts/data/252670_20220712.csv similarity index 100% rename from hts/backup/252670_20220712.csv rename to hts/data/252670_20220712.csv diff --git a/hts/backup/252670_20220713.csv b/hts/data/252670_20220713.csv similarity index 100% rename from hts/backup/252670_20220713.csv rename to hts/data/252670_20220713.csv