diff --git a/hts/BuySellChecker.py b/hts/BuySellChecker.py index 5ae744f..1c4dcca 100644 --- a/hts/BuySellChecker.py +++ b/hts/BuySellChecker.py @@ -221,60 +221,58 @@ class BuySellChecker: def getBuyPriceAndWeight(self, stock_code, i, data): buy, weight = -1, -1 - if i < 40: - return buy, weight + if i > 40: + """ + up, up_volume, down, down_volume = 0, 0, 0, 0 + for c in range(i-26, i): + if data['open'][c] < data['close'][c]: + up += 1 + up_volume += data['volume'][c] + if data['close'][c] < data['open'][c]: + down += 1 + down_volume += data['volume'][c] + if down_volume < up_volume * 0.75: + buy, weight = data['close'][i], 1 + """ - max_vol_5 = max(data['volume'].to_list()[i - 4: i + 1]) - max_vol_30 = max(data['volume'].to_list()[i - 24: i - 4]) - if max_vol_30 < max_vol_5: - if data['open'][i-1] < data['close'][i-1] and data['volume'][i-1] < data['volume'][i]: - #if data['open'][i - 1] < data['close'][i - 1] and data['volume'][i - 1] < data['volume'][i]: - - # 1) 스토캐스틱 과매도 - slow_k_buy = False - for idx in range(i, i-10, -1): - if data['slow_k'][idx] < 20: - slow_k_buy = True + if data['macd'][i] < 0 and data['macd'][i - 1] < data['macd'][i] and data['macds'][i] < data['macd'][i]: + check = True + for c in range(2, 5): + if data['macds'][i - c] < data['macd'][i - c]: + check = False break - - # 2) macd 교차 신호 - macd_buy = False - if slow_k_buy: - for idx in range(i, i-10, -1): - if data['macd'][idx - 1] < 0 and data['macds'][idx - 1] < 0 and data['macd'][idx] < 0 and data['macds'][idx] < 0: - if data['macd'][idx-1] < data['macds'][idx-1] and data['macd'][idx] > data['macds'][idx]: - macd_buy = True + if check: + up, middle, down = 0, 0, 0 + for c in range(i - 26, i): + if data['open'][c] < data['close'][c]: + min_value = min(data['open'][c], data['close'][c]) + if data['laggingSpan'][c] < min_value: + down += 1 + elif min_value < data['laggingSpan'][c]: + up += 1 + else: + middle += 1 + if middle < 10: + check = True + for c in range(i - 56, i - 26): + if min(data['open'][c], data['close'][c]) < data['laggingSpan'][c]: + check = False break + if check: + if max(data['low'][i - 5:i].tolist() + data['high'][i - 5:i].tolist()) < data['close'][i]: + buy, weight = data['close'][i], 1 - # 3) RSI 지수가 50위로 올라갈 때 - if macd_buy: - if data['rsi'][i-1] < 40 and data['rsi'][i] > 40: - buy, weight = data['close'][i] , 1 - - - if stock_code in ("233740"): - if data['macd'][i-1] < -30: - if data['macd'][i-1] < data['macds'][i-1] and data['macds'][i] < data['macd'][i]: - buy, weight = data['close'][i], 3 - - if stock_code in ("122630"): - if data['macd'][i-1] < -30: - if data['macd'][i-1] < data['macds'][i-1] and data['macds'][i] < data['macd'][i]: - buy, weight = data['close'][i], 2 - - if stock_code in ("251340"): - if data['macd'][i-1] < -7: - if data['macd'][i-1] < data['macds'][i-1] and data['macds'][i] < data['macd'][i]: - buy, weight = data['close'][i], 3 - - if stock_code in ("252670"): - if data['macd'][i-1] < -4: - if data['macd'][i-1] < data['macds'][i-1] and data['macds'][i] < data['macd'][i]: - buy, weight = data['close'][i], 3 + check = True + for c in range(i - 40 - 26, i - 26): + if min(data['open'][c], data['close'][c]) < data['laggingSpan'][c]: + check = False + break + if check: + if max(data['low'][i - 5:i].tolist() + data['high'][i - 5:i].tolist()) < data['close'][i]: + buy, weight = data['close'][i], 1 return buy, weight - def getSellPriceAndWeight(self, stock_code, i, data): sell, weight = -1, -1