from hts.BuySellChecker import BuySellChecker class BuySellChecker_252670 (BuySellChecker): def __init__(self): super().__init__() return def getBuyPriceAndWeight(self, stock_code, i, data, INFO): buy, weight = -1, -1 C_MIN_AVG_5_200 = 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]) C_MIN_AVG_5_60 = 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]) C_DIFF_AVG_200_5 = abs(data['disparity_avg200'][i] - data['disparity_avg5'][i]) if 0.004 < C_MIN_AVG_5_60 < 0.005 and 0.007 < C_MIN_AVG_5_200 < 0.008 and 0.007 < C_DIFF_AVG_200_5 < 0.008: buy = data['close'][i] weight = 1 if 0.023 < C_MIN_AVG_5_60 < 0.024 and 0.026 < C_MIN_AVG_5_200 < 0.027 and 0.026 < C_DIFF_AVG_200_5 < 0.027: buy = data['close'][i] weight = 1 if 0.013 < C_MIN_AVG_5_60 < 0.014 and 0.013 < C_MIN_AVG_5_200 < 0.014 and 0.013 < C_DIFF_AVG_200_5 < 0.014: buy = data['close'][i] weight = 1 if 0.004 < C_MIN_AVG_5_60 < 0.005 and 0.005 < C_MIN_AVG_5_200 < 0.006 and 0.0008 < C_DIFF_AVG_200_5 < 0.001: buy = data['close'][i] weight = 1 if 0.001 < C_MIN_AVG_5_60 < 0.0015 and 0.0055 < C_MIN_AVG_5_200 < 0.006 and 0.0055 < C_DIFF_AVG_200_5 < 0.006: buy = data['close'][i] weight = 1 if 0.001 < C_MIN_AVG_5_60 < 0.0015 and 0.0015 < C_MIN_AVG_5_200 < 0.002 and 0.0015 < C_DIFF_AVG_200_5 < 0.002: buy = data['close'][i] weight = 1 if 0.009 < C_MIN_AVG_5_60 < 0.0095 and 0.01 < C_MIN_AVG_5_200 < 0.012 and 0.01 < C_DIFF_AVG_200_5 < 0.012: buy = data['close'][i] weight = 1 if 0.002 < C_MIN_AVG_5_60 < 0.0023 and 0.0062 < C_MIN_AVG_5_200 < 0.0068 and 0.0062 < C_DIFF_AVG_200_5 < 0.0068: buy = data['close'][i] weight = 1 if 0.008 < C_MIN_AVG_5_60 < 0.0085 and 0.008 < C_MIN_AVG_5_200 < 0.0085 and 0.0075 < C_DIFF_AVG_200_5 < 0.008: buy = data['close'][i] weight = 1 return buy, weight def getSellPriceAndWeight(self, stock_code, i, data, INFO): sell, weight = -1, -1 if data['close'][i] < INFO['LIMIT_PRICE'] < data['close'][i-1]: sell = data['close'][i] weight = 1 if (5 < data['macd'][i]) and (0 < data['macdo'][i-1] and data['macdo'][i] <= 0): #if data['macds'][i-1] < data['macd'][i-1] and data['macd'][i] < data['macds'][i]: weight = 1 sell = data['close'][i] if data['close'][i] < INFO['LIMIT_PRICE']: weight = 1 sell = data['close'][i] return sell, weight def checkTransaction(self, stock_code, data, INFO, isRealTime=True): # 어제 오늘 데이터로 분석 bsLine = {} if data is not None and 'close' in data.columns: size = len(data["close"]) if isRealTime: # isRealTime=True, 실시간 적용 last_index = size - 1 buy, buy_weight = self.getBuyPriceAndWeight(stock_code, last_index, data, INFO) sell, sell_weight = self.getSellPriceAndWeight(stock_code, last_index, data, INFO) bsLine['buy'] = [buy] bsLine['buy_weight'] = [buy_weight] bsLine['sell'] = [sell] bsLine['sell_weight'] = [sell_weight] else: # Type=False, 시뮬레이션 적용 bsLine['buy'] = [-1 for i in range(size)] bsLine['buy_weight'] = [-1 for i in range(size)] bsLine['sell'] = [-1 for i in range(size)] bsLine['sell_weight'] = [-1 for i in range(size)] for last_index in range(size): buy, buy_weight = self.getBuyPriceAndWeight(stock_code, last_index, data, INFO) sell, sell_weight = self.getSellPriceAndWeight(stock_code, last_index, data, INFO) # sell, sell_weight = -1, -1 bsLine['buy'][last_index] = buy bsLine['buy_weight'][last_index] = buy_weight bsLine['sell'][last_index] = sell bsLine['sell_weight'][last_index] = sell_weight else: bsLine['buy'] = [-1] bsLine['buy_weight'] = [-1] bsLine['sell'] = [-1] bsLine['sell_weight'] = [-1] return bsLine