diff --git a/hts/BuySellChecker.py b/hts/BuySellChecker.py index 3f1d0c2..8e1ed59 100644 --- a/hts/BuySellChecker.py +++ b/hts/BuySellChecker.py @@ -152,6 +152,8 @@ class BuySellChecker: def getBuyCheck(self, data, i, buy, weight): if data['close'][i]40: + buy, weight, sell = -1, -1, -1 return buy, weight @@ -265,7 +267,14 @@ class BuySellChecker: # 장 초기 (시작 9분 이내), 볼린져 하단에서 시작하여 이병선을 모두 상승하여 마감한 경우 high 값에서 매수한다. # (2022-07-15 09:08 09:09) - if i < 381 + 9: + 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 # 장 시작 역배열 상태임 @@ -275,27 +284,8 @@ class BuySellChecker: else: buy = data["high"][i] weight = 1 - return self.getBuyCheck(data, i, buy, weight) + return 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) - if int(data["avg3"][i]) > int(data["avg5"][i]): - valid = True - same_count = 0 - for c in range(1, 11): - if int(data["avg3"][i-c]) == int(data["avg5"][i-c]): - same_count += 1 - if int(data["avg3"][i-c]) > int(data["avg5"][i-c]): - valid = False - break - if valid and same_count < 2: - if data['macd'][i] < -5: - buy = data["close"][i] - 5 - weight = 1 - return self.getBuyCheck(data, i, buy, weight) - # 이동선을 이용한 매매 # 3분선과 10분선이 30분 이상 내려오다가 3분선이 10분선을 넘어 서는 순간 매수 # (2022-07-07 11:26) (2022-07-08 10:05) @@ -355,7 +345,25 @@ class BuySellChecker: 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) + if int(data["avg3"][i]) > int(data["avg5"][i]): + valid = True + same_count = 0 + for c in range(1, 11): + if int(data["avg3"][i-c]) == int(data["avg5"][i-c]): + same_count += 1 + if int(data["avg3"][i-c]) > int(data["avg5"][i-c]): + valid = False + break + if valid and same_count < 2: + if data['macd'][i] < -5: + buy = data["close"][i] - 5 + weight = 1 + return self.getBuyCheck(data, i, buy, weight) + # 만약 30원 이상 장대 양봉이 나온 경우, 다음이나 다다음 중간 값에서 매수를 한다. if (data["close"][i] - data["low"][i]) >= 30: middle = int((data["close"][i] + data["low"][i])/2) @@ -364,6 +372,7 @@ class BuySellChecker: return self.getBuyCheck(data, i, buy, weight) """ + return buy, weight @@ -547,7 +556,7 @@ class BuySellChecker: 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 + buy = int((data["open"][i] + data["close"][i]) / 2) weight = 1 return self.getBuyCheck(data, i, buy, weight) @@ -621,6 +630,13 @@ 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 + return buy, weight def getSellPriceAndWeight_15000(self, data, i): diff --git a/hts/Simulation.py b/hts/Simulation.py index 3208b07..25260e4 100644 --- a/hts/Simulation.py +++ b/hts/Simulation.py @@ -189,8 +189,12 @@ if __name__ == "__main__": # 252670 # 122630 "122630": [ + ('20220714', '20220715'), ('20220715', '20220718'), - ('20220718', '20220719') + ('20220718', '20220719'), + ('20220719', '20220720'), + ('20220720', '20220721'), + ('20220721', '20220722') ], } path = './hts/data'