diff --git a/hts/BuySell_Daily.py b/hts/BuySell_Daily.py index 807de97..ed79db0 100644 --- a/hts/BuySell_Daily.py +++ b/hts/BuySell_Daily.py @@ -10,26 +10,50 @@ class BuySell_Daily: count += 1 return count - def getBuyPrice(self, data, i, BS=None): + def getBuyPrice(self, ticker, data, i, BS=None): buy_ymd, buy_price, buy_count, buy_weight, buy_type, buy_cut = None, 0, 0, 1, '', None - tmp_buy_ymd, tmp_buy_price, tmp_buy_count, tmp_buy_type, tmp_buy_cut = self.getBuyPrice_ichimok_changeLine(data, i, BS) + point = None + for c in range(i-1, 0, -1): + if data['close'][c] < data['changeLine'][c]: + point = c + break + if point is not None: + if 3 < sum([1 if 0 < BS['buy_price'][k] else 0 for k in range(point, i)]): + return buy_ymd, 0, 0, '', None + + tmp_buy_ymd, tmp_buy_price, tmp_buy_count, tmp_buy_type, tmp_buy_cut = self.getBuyPrice_ichimok_changeLine(ticker, data, i, BS) if 0 < tmp_buy_count: buy_ymd = tmp_buy_ymd; buy_price = tmp_buy_price; buy_count = tmp_buy_count; buy_type = tmp_buy_type; buy_cut = tmp_buy_cut - tmp_buy_ymd, tmp_buy_price, tmp_buy_count, tmp_buy_type, tmp_buy_cut = self.getBuyPrice_ichimok_baseLine(data, i, BS) + tmp_buy_ymd, tmp_buy_price, tmp_buy_count, tmp_buy_type, tmp_buy_cut = self.getBuyPrice_ichimok_baseLine(ticker, data, i, BS) if 0 < tmp_buy_count: buy_ymd = tmp_buy_ymd; buy_price = tmp_buy_price; buy_count = tmp_buy_count; buy_type = tmp_buy_type; buy_cut = tmp_buy_cut - tmp_buy_ymd, tmp_buy_price, tmp_buy_count, tmp_buy_type, tmp_buy_cut = self.getBuyPrice_ichimok_laggingSpan(data, i, BS) + tmp_buy_ymd, tmp_buy_price, tmp_buy_count, tmp_buy_type, tmp_buy_cut = self.getBuyPrice_ichimok_laggingSpan(ticker, data, i, BS) if 0 < tmp_buy_count: buy_ymd = tmp_buy_ymd; buy_price = tmp_buy_price; buy_count = tmp_buy_count; buy_type = tmp_buy_type; buy_cut = tmp_buy_cut + tmp_buy_ymd, tmp_buy_price, tmp_buy_count, tmp_buy_type, tmp_buy_cut = self.getBuyPrice_ichimok_avg(ticker, data, i, BS) + if 0 < tmp_buy_count: + buy_ymd = tmp_buy_ymd; buy_price = tmp_buy_price; buy_count = tmp_buy_count; buy_type = tmp_buy_type; buy_cut = tmp_buy_cut + + if 0 < len(ticker['BUY_INFO']['buy_list']): + diff = (datetime.strptime(str(data['ymd'][i]), '%Y-%m-%d %H:%M:%S') - ticker['BUY_INFO']['buy_list'][-1]['buy_ymd']) + d = diff.days + s = diff.seconds + + # 해당 종목에 대해서 1분 이내 매수 금지 + if s < 3 * 60: + return buy_ymd, 0, 0, '', None return buy_ymd, buy_price, buy_count, buy_type, buy_cut - def getSellPrice(self, data, i, BS=None): + def getSellPrice(self, ticker, data, i, BS=None): sell_price, sell_count, sell_type = 0, 1, '' sell_type_list = [] - tmp_sell_price, tmp_sell_type_list = self.getSellPrice_ichimok_baseLine(data, i, BS) + tmp_sell_price, tmp_sell_type_list = self.getSellPrice_ichimok_baseLine(ticker, data, i, BS) + sell_type_list += tmp_sell_type_list + + tmp_sell_price, tmp_sell_type_list = self.getSellPrice_candle(ticker, data, i, BS) sell_type_list += tmp_sell_type_list sell_price = tmp_sell_price @@ -39,7 +63,7 @@ class BuySell_Daily: return sell_price, sell_count, sell_type - def getBuyPrice_ichimok_changeLine(self, data, i, BS=None): + def getBuyPrice_ichimok_changeLine(self, ticker, data, i, BS=None): buy_ymd, buy_price, buy_count, buy_weight, buy_type, buy_cut = None, 0, 0, 1, '', None @@ -81,8 +105,8 @@ class BuySell_Daily: if check: buy_ymd = data['ymd'][i] - buy_price = data['close'][i] - buy_count = buy_weight + buy_price = data['close'][i] - 2 * ticker['unit'] + buy_count = (buy_weight * ticker['MAX_BUY']) / data['close'][i] return buy_ymd, buy_price, buy_count, buy_type, buy_cut @@ -90,7 +114,7 @@ class BuySell_Daily: """""""""""""""""" """""""""""""""""" - def getBuyPrice_ichimok_baseLine(self, data, i, BS=None): + def getBuyPrice_ichimok_baseLine(self, ticker, data, i, BS=None): buy_ymd, buy_price, buy_count, buy_weight, buy_type, buy_cut = None, 0, 0, 1, '', None @@ -120,15 +144,15 @@ class BuySell_Daily: if check: buy_ymd = data['ymd'][i] - buy_price = data['close'][i] - buy_count = buy_weight + buy_price = data['close'][i] - 2 * ticker['unit'] + buy_count = (buy_weight * ticker['MAX_BUY']) / data['close'][i] return buy_ymd, buy_price, buy_count, buy_type, buy_cut """""""""""""""""" """""""""""""""""" - def getBuyPrice_ichimok_laggingSpan(self, data, i, BS): + def getBuyPrice_ichimok_laggingSpan(self, ticker, data, i, BS): buy_ymd, buy_price, buy_count, buy_weight, buy_type, buy_cut = None, 0, 0, 1, '', None @@ -138,28 +162,29 @@ class BuySell_Daily: if data['laggingSpan_close_diff_rate'][i-1] <= 0 and 0 < data['laggingSpan_close_diff_rate'][i]: check = True - buy_price = data['close'][i] - buy_count = buy_weight + buy_price = data['close'][i] - 2 * ticker['unit'] + buy_count = (buy_weight * ticker['MAX_BUY']) / data['close'][i] buy_weight = 2 buy_type = 'laggingSpan1' if 0 <= data['laggingSpan_avg60_diff_rate'][i-1] and data['laggingSpan_avg60_diff_rate'][i] < 0: check = True - buy_price = data['close'][i] - buy_count = buy_weight + buy_price = data['close'][i] - 2 * ticker['unit'] + buy_count = (buy_weight * ticker['MAX_BUY']) / data['close'][i] buy_weight = 2 buy_type = 'laggingSpan2' if check: - buy_price = data['close'][i] - buy_count = buy_weight + buy_ymd = data['ymd'][i] + buy_price = data['close'][i] - 2 * ticker['unit'] + buy_count = (buy_weight * ticker['MAX_BUY']) / data['close'][i] return buy_ymd, buy_price, buy_count, buy_type, buy_cut """""""""""""""""" """""""""""""""""" - def getSellPrice_ichimok_baseLine(self, data, i, BS=None): + def getSellPrice_ichimok_baseLine(self, ticker, data, i, BS=None): sell_price = 0 sell_type_list = [] @@ -173,6 +198,61 @@ class BuySell_Daily: sell_type_list.append('ichimok_baseLine') if check: - sell_price = data['close'][i] + sell_price = data['close'][i] + 2 * ticker['unit'] + + return sell_price, sell_type_list + + """""""""""""""""" + """""""""""""""""" + + def getBuyPrice_ichimok_avg(self, ticker, data, i, BS): + + buy_ymd, buy_price, buy_count, buy_weight, buy_type, buy_cut = None, 0, 0, 1, '', None + + check = False + + if 5 < i: + + if data['avg5'][i] < data['avg20'][i] < data['baseLine'][i] < data['changeLine'][i] < data['close'][i]: + if data['avg5'][i-1]