From c310e0a89a012508e32a9190409e1325908a0240 Mon Sep 17 00:00:00 2001 From: dosangyoon Date: Thu, 11 Aug 2022 21:08:00 +0900 Subject: [PATCH] `init` --- Simulation.py | 15 +++++++++------ hts/BuySellChecker.py | 25 ++++++++++++++----------- 2 files changed, 23 insertions(+), 17 deletions(-) diff --git a/Simulation.py b/Simulation.py index 210d68b..7963ac2 100644 --- a/Simulation.py +++ b/Simulation.py @@ -38,9 +38,8 @@ class Simulation (HTS): # 어제 데이터는 지운다. data = data.loc[pd.DatetimeIndex(data.index).day == int(given_day[6:])] buy_line = bsLine['buy'][381:] + buy_weight_line = bsLine['buy_weight'][381:] sell_line = bsLine['sell'][381:] - #buy_line = bsLine['buy'] - #sell_line = bsLine['sell'] # 그래프 설정을 위한 변수를 생성한다. data = data.astype({'open': 'int', @@ -61,13 +60,17 @@ class Simulation (HTS): 'rsis': 'float' }) + buy_size = [] buy_colors = [] for i in range(len(buy_line)): if buy_line[i] < 0: buy_colors.append("#ffffff") buy_line[i] = nan + buy_size.append(0) else: - buy_colors.append("#ff00ff") + buy_colors.append("#DA8913") + buy_size.append(10 + (5 * buy_weight_line[i])) + sell_colors = [] for i in range(len(sell_line)): if sell_line[i] < 0: @@ -77,7 +80,7 @@ class Simulation (HTS): sell_colors.append("#00ced1") # 그래프를 설정한다. - buy_check = go.Scatter(x=data['date'], y=buy_line, mode='markers', name="buy", marker=dict(size=14, color=buy_colors, line_width=0)) + buy_check = go.Scatter(x=data['date'], y=buy_line, mode='markers', name="buy", marker=dict(size=buy_size, color=buy_colors, line_width=0)) sell_check = go.Scatter(x=data['date'], y=sell_line, mode='markers', name="sell", marker=dict(size=14, color=sell_colors, line_width=0)) upper = go.Scatter(x=data['date'], y=data["upper"], name="upper", line_color='#000000') lower = go.Scatter(x=data['date'], y=data["lower"], name="lower", line_color='#000000') @@ -175,8 +178,8 @@ if __name__ == "__main__": # to check bying stock_codes = { - "122630": ['20220801', '20220802', '20220803', '20220804', '20220805'], - "252670": ['20220801', '20220802', '20220803', '20220804', '20220805'], + "252670": ['20220801', '20220802', '20220803', '20220804', '20220805', '20220808', '20220809', '20220810', '20220811'], + #"122630": ['20220810'], } method = "rule" # "rule", "ml", "answer" diff --git a/hts/BuySellChecker.py b/hts/BuySellChecker.py index 4560a66..d012b4b 100644 --- a/hts/BuySellChecker.py +++ b/hts/BuySellChecker.py @@ -199,7 +199,7 @@ class BuySellChecker: # "15:00" 까지만 매수 return buy, weight - if data["macd"][i] < -25: + if i > 380 + 30 and data["macd"][i] < -25: if data["avg3"][i] > min(data["avg5"][i], data["avg10"][i], data["avg20"][i]): buy = data["high"][i] if i < 381 + 30: @@ -208,13 +208,13 @@ class BuySellChecker: weight = 5 return buy, weight - if data["macd"][i] < -5 and data["rsi"][i] < 30: + if i > 380 + 30 and data["macd"][i] < -5 and data["rsi"][i] < 30: if data["avg3"][i] > min(data["avg5"][i], data["avg10"][i], data["avg20"][i]): buy = int((data["open"][i] + data["close"][i]) / 2) weight = 2 return buy, weight - if data["slow_k"][i] < 10 and data["rsi"][i] < 30: + if i > 380 + 30 and data["slow_k"][i] < 10 and data["rsi"][i] < 30: if data["slow_k"][i - 1] < min(data["slow_k"][i - 2], data["slow_k"][i]): if data["avg3"][i] > min(data["avg5"][i], data["avg10"][i], data["avg20"][i]): buy = int((data["open"][i] + data["close"][i]) / 2) @@ -223,16 +223,19 @@ class BuySellChecker: # 3분선이 5분선이 돌파가 이전보다 높은 경우 매수 if data["avg3"][i - 1] < data["avg5"][i - 1] and data["avg3"][i] > data["avg5"][i]: + max_avg3 = 0 p_avg3 = 999999 for c in range(1, 50): + if max_avg3 < data["avg5"][i - c]: + max_avg3 = data["avg5"][i - c] if data["avg3"][i-c-1] < data["avg5"][i-c-1] and data["avg3"][i-c] > data["avg5"][i-c]: p_avg3 = data["avg3"][i-c] break - if data["avg3"][i] > p_avg3: - if i == 382 or i == 383: - if data["close"][i] != data["high"][i]: - return -1, -1 - if data["slow_k"][i] < 30 or i < 381 + 10: + if data["avg3"][i] > p_avg3 and max_avg3 < data["avg3"][i]: + if max(data["avg3"][i-3], data["avg3"][i-2], data["avg3"][i-1]) - min(data["avg3"][i-3], data["avg3"][i-2], data["avg3"][i-1]) > 1: + if i == 382 or i == 383: + if data["close"][i] != data["high"][i]: + return -1, -1 buy = int((data["open"][i] + data["close"][i]) / 2) weight = 1 return buy, weight @@ -548,7 +551,7 @@ class BuySellChecker: # "15:00" 까지만 매수 return buy, weight - if data["macd"][i] < -25: + if i > 380 + 30 and data["macd"][i] < -25: if data["avg3"][i] > min(data["avg5"][i], data["avg10"][i], data["avg20"][i]): buy = data["high"][i] if i < 381 + 30: @@ -557,13 +560,13 @@ class BuySellChecker: weight = 5 return buy, weight - if data["macd"][i] < -5 and data["rsi"][i] < 30: + if i > 380 + 30 and data["macd"][i] < -5 and data["rsi"][i] < 30: if data["avg3"][i] > min(data["avg5"][i], data["avg10"][i], data["avg20"][i]): buy = int((data["open"][i] + data["close"][i]) / 2) weight = 2 return buy, weight - if data["slow_k"][i] < 10 and data["rsi"][i] < 30: + if i > 380 + 30 and data["slow_k"][i] < 10 and data["rsi"][i] < 30: if data["slow_k"][i - 1] < min(data["slow_k"][i - 2], data["slow_k"][i]): if data["avg3"][i] > min(data["avg5"][i], data["avg10"][i], data["avg20"][i]): buy = int((data["open"][i] + data["close"][i]) / 2)