diff --git a/hts/BuySellChecker.py b/hts/BuySellChecker.py index bde95e8..a3c81a7 100644 --- a/hts/BuySellChecker.py +++ b/hts/BuySellChecker.py @@ -221,54 +221,102 @@ class BuySellChecker: def getBuyPriceAndWeight(self, stock_code, i, data): buy, weight = -1, -1 - if i < 40: - return buy, weight + if i > 40: + 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]: - 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 - break - - # 2) macd 교차 신호 - macd_buy = False - if slow_k_buy: + # 1) 스토캐스틱 과매도 + slow_k_buy = False 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 - break + if data['slow_k'][idx] < 20: + slow_k_buy = True + break - # 3) RSI 지수가 50위로 올라갈 때 - if macd_buy: - if data['rsi'][i-1] < 40 and data['rsi'][i] > 40: - buy, weight = data['close'][i] , 1 + # 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 + break - """ - min_macd = min(data['macd']) - if i > 30 and data['macd'][i] < min_macd + (-min_macd * 0.4): - buy, weight = data['close'][i], 1 - """ - if 10 < int(data.index[i].strftime('%H')): - if stock_code == '252670' or stock_code == '251340': - if data['macd'][i] < -4: - if data['open'][i - 1] < data['close'][i - 1] and data['volume'][i - 1] < data['volume'][i]: - buy, weight = data['close'][i], 1 - elif stock_code == '122630' or stock_code == '233740': - if data['macd'][i] < -10: - if data['open'][i - 1] < data['close'][i - 1] and data['volume'][i - 1] < data['volume'][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 ("252670", "251340"): + if data['macd'][i] < -0.2: + if data['open'][i - 1] < data['close'][i - 1] and data['volume'][i - 1] < data['volume'][i]: + buy, weight = data['close'][i], 1 + + if 60 < i and data['avg200'][i] < data['avg5'][i] and data['avg200'][i] < data['avg20'][i] and data['avg200'][i] < data['avg60'][i]: + if data['open'][i] < data['close'][i]: + if max(data['volume'][i-60:i].tolist()) * 3 < data['volume'][i]: + if max(data['disparity_avg5'][i], data['disparity_avg20'][i], data['disparity_avg60'][i]) - min(data['disparity_avg5'][i], data['disparity_avg20'][i], data['disparity_avg60'][i]) < 0.0007: + if max(data['disparity_avg5'][i], data['disparity_avg20'][i], data['disparity_avg60'][i], data['disparity_avg200'][i]) - min(data['disparity_avg5'][i], data['disparity_avg20'][i], data['disparity_avg60'][i], data['disparity_avg200'][i]) < 0.0009: + buy, weight = data['close'][i], 10 + + elif stock_code in ("122630", "233740"): + if 10 < i and data['close'][i] < data['avg200'][i] and data['open'][i] < data['close'][i] and max(data['avg5'][i], data['avg20'][i], data['avg200'][i]) < data['avg60'][i]: + if data['open'][i] < min(data['close'][i], data['avg5'][i], data['avg20'][i], data['avg60'][i], data['avg120'][i]): + if max(data['volume'][i-10:i].tolist()) * 4 < data['volume'][i]: + if data['open'][i] < (data['upper'][i] + data['lower'][i])/2: + buy, weight = data['close'][i], 3 + + if 10 < i and data['avg200'][i] < data['avg5'][i] and data['avg200'][i] < data['avg20'][i] and data['avg200'][i] < data['avg60'][i]: + if data['open'][i] < data['close'][i]: + if max(data['volume'][i-10:i].tolist()) * 3 < data['volume'][i]: + if max(data['disparity_avg5'][i], data['disparity_avg20'][i], data['disparity_avg60'][i]) - min(data['disparity_avg5'][i], data['disparity_avg20'][i], data['disparity_avg60'][i]) < 0.003: + buy, weight = data['close'][i], 1 + + if data['open'][i-1] < data['close'][i-1] and data['open'][i] < data['close'][i]: + if data['volume'][i-1] * 10 < data['volume'][i]: + if data['upper'][i] < data['close'][i]: + if max(data['disparity_avg5'][i], data['disparity_avg20'][i], data['disparity_avg60'][i]) - min( data['disparity_avg5'][i], data['disparity_avg20'][i], data['disparity_avg60'][i]) < 0.005: + if max(data['disparity_avg5'][i], data['disparity_avg20'][i], data['disparity_avg60'][i], data['disparity_avg200'][i]) - min(data['disparity_avg5'][i], data['disparity_avg20'][i], data['disparity_avg60'][i], data['disparity_avg200'][i]) < 0.006: + if data['avg200'][i] < min(data['open'][i], data['close'][i], data['avg5'][i], data['avg20'][i], data['avg60'][i]): + buy, weight = data['close'][i]+2, 3 + + + if 10 < i: + check = False + for c in range(i-10): + if data['close'][c-1] < data['close'][c-2] < data['close'][c-3] < data['close'][c-4] < data['close'][c-5] < data['close'][c-6]: + if data['close'][c-1] < data['lower'][c-1] and data['close'][c-2] < data['lower'][c-2] and data['close'][c-3] < data['lower'][c-3] and data['close'][c-4] < data['lower'][c-4] and data['close'][c-5] < data['lower'][c-5] and data['close'][c-6] < data['lower'][c-6]: + check = True + break + if check and data['close'][i] < data['lower'][i]: + buy, weight = data['close'][i], 1 + + if stock_code in ("233740"): + if data['macd'][i] < -20: + 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] < -20: + 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] < -2: + 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 ("BCH"): + if data['macd'][i] < -1: + if data['macd'][i-1] < data['macds'][i-1] and data['macds'][i] < data['macd'][i]: + buy, weight = data['close'][i], 3 return buy, weight - def getSellPriceAndWeight(self, stock_code, i, data): sell, weight = -1, -1 @@ -794,26 +842,6 @@ class BuySellChecker: data['buy'][i] = buy bsLine['buy'][i] = buy bsLine['buy_weight'][i] = 5.0 - """ - check = True - for l in range(i - 3, i): - if ( - data['gradients_low'][l - 1] < data['gradients_low'][l] or - data['gradients_avg60'][l - 1] < data['gradients_avg60'][l] or - data['gradients_avg20'][l - 1] < data['gradients_avg20'][l] or - 0.01 < data['gradients_low'][l - 1] < 0.21 or - -0.09 < data['gradients_avg20'][l - 1] < -0.002 or - 0.01 < data['gradients_avg60'][l - 1] < 0.021 - ): - check = False - break - if check: - if data['slow_k'][i] < 30: - buy = data['low'][i] - data['buy'][i] = buy - bsLine['buy'][i] = buy - bsLine['buy_weight'][i] = 5.0 - """ if (data['disparity'][i] < 5 and 99.0 < data['disparity_avg60'][i] < 99.1 and