diff --git a/Simulation.py b/Simulation.py index 1174d24..0ef6a8e 100644 --- a/Simulation.py +++ b/Simulation.py @@ -174,12 +174,11 @@ if __name__ == "__main__": # to check bying stock_codes = { - # 252670 - # 122630 - "252670": ['20220801', '20220802', '20220803', '20220804', '20220805'], + "122630": ['20220808'], + "252670": ['20220808'], } - method = "rul" # "rul", "ml", "answer" + method = "rule" # "rule", "ml", "answer" for stock_code in stock_codes: simulation = Simulation(RESOURCE_PATH) diff --git a/hts/BuySellChecker.py b/hts/BuySellChecker.py index 0e6d951..835dde0 100644 --- a/hts/BuySellChecker.py +++ b/hts/BuySellChecker.py @@ -155,14 +155,6 @@ class BuySellChecker: if data['slow_k'][i] > 40: buy, weight, sell = -1, -1, -1 - high, low = 0, 0 - for c in range(1, 10): - if data['lower'][i-c-1] < data['lower'][i-c]: - high += 1 - else: - low += 1 - if high > low: - buy, weight, sell = -1, -1, -1 return buy, weight @@ -207,6 +199,20 @@ class BuySellChecker: # "15:00" 까지만 매수 return buy, weight + # 5분선이 10분 이상 10분선 아래에 있다가 10분선 위로 올라옴 + if i >= 381 + 10: + vaild = True + for c in range(2, 10): + if data["avg5"][i - c] > data["avg10"][i - c]: + vaild = False + break + if vaild: + if data["avg5"][i - 1] >= data["avg10"][i - 1] and data["avg5"][i] >= data["avg10"][i]: + buy = int(data["avg5"][i] - data["avg5"][i]%5) + weight = 1 + return self.getBuyCheck(data, i, buy, weight) + + """ # 중위선 20분선 아래에서 볼린져 상단을 뚫고 종료할 때 # (2022-07-06 11:17) (2022-07-07 14:29) (2022-07-08 12:41 12:44) (2022-07-11 13:58) # (2022-07-13 12:02 12:03) (2022-07-14 10:50) (2022-07-15 09:52) @@ -328,30 +334,10 @@ class BuySellChecker: buy = (data["open"][i]+data["close"][i])/2 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) """ @@ -501,7 +487,20 @@ class BuySellChecker: # "15:00" 까지만 매수 return buy, weight + # 5분선이 10분 이상 10분선 아래에 있다가 10분선 위로 올라옴 + if i >= 381 + 10: + vaild = True + for c in range(2, 10): + if data["avg5"][i - c] > data["avg10"][i - c]: + vaild = False + break + if vaild: + if data["avg5"][i - 1] >= data["avg10"][i - 1] and data["avg5"][i] >= data["avg10"][i]: + buy = int(data["avg5"][i] - data["avg5"][i]%5) + weight = 1 + return self.getBuyCheck(data, i, buy, weight) + """ # 30일 이전부터 모든 선이 좁혀졌다 녋혀지면서 다시 상승하며 좁혀짐 if max(data["avg3"][i], data["avg5"][i], data["avg10"][i], data["avg20"][i], data["avg30"][i]) - min(data["avg3"][i], data["avg5"][i], data["avg10"][i], data["avg20"][i]) < 5: if data["avg3"][i - 1] < data["avg3"][i] and data["macd"][i] < 20: @@ -672,7 +671,7 @@ class BuySellChecker: buy = data["high"][i] weight = 3 return buy, weight - + """ return buy, weight diff --git a/stock/util/LabelMaker.py b/stock/util/LabelMaker.py index 90799c4..dcb70ce 100644 --- a/stock/util/LabelMaker.py +++ b/stock/util/LabelMaker.py @@ -273,7 +273,7 @@ if __name__ == "__main__": view = True stock_code = "252670" - ymd = "20220804" + ymd = "20220808" if view: bsLine, data = labelMaker.makeCandidate(stock_code, ymd, view=view)