From e117b108fc9fb9e4b351e3df237d1fc14ab633f7 Mon Sep 17 00:00:00 2001 From: dsyoon Date: Wed, 10 Aug 2022 23:35:49 +0900 Subject: [PATCH] init --- Simulation.py | 10 +++++----- hts/BuySellChecker.py | 41 +++++++++++++++++++++++++++++++++++++++-- 2 files changed, 44 insertions(+), 7 deletions(-) diff --git a/Simulation.py b/Simulation.py index 02fa9ab..ac9695f 100644 --- a/Simulation.py +++ b/Simulation.py @@ -86,7 +86,7 @@ class Simulation (HTS): avg10 = go.Scatter(x=data['date'], y=data["avg10"], name="avg10", line_color='#ff00ff') avg20 = go.Scatter(x=data['date'], y=data["avg20"], name="avg20", line_color='#1469F4') avg30 = go.Scatter(x=data['date'], y=data["avg30"], name="avg30", line_color='#000000') - #avg60 = go.Scatter(x=hts['date'], y=hts["avg60"], name="avg60", line_color='#008000') + avg60 = go.Scatter(x=data['date'], y=data["avg60"], name="avg60", line_color='#008000') candle_stick = go.Candlestick(x=data['date'], open=data['open'], high=data['high'], low=data['low'], close=data['close'], increasing_line_color='red', decreasing_line_color='blue') volume_line = go.Scatter(x=data['date'], y=data["volume"], mode='lines', name='volume') @@ -102,7 +102,7 @@ class Simulation (HTS): rsi_line = go.Scatter(x=data['date'], y=data["rsi"], mode='lines', name='rsi') rsis_line = go.Scatter(x=data['date'], y=data["rsis"], mode='lines', name='rsis') - candle_data = [candle_stick, upper, lower, avg3, avg5, avg10, avg20, avg30, buy_check, sell_check] + candle_data = [candle_stick, upper, lower, avg3, avg5, avg10, avg20, avg30, avg60, buy_check, sell_check] volume_data = [volume_line] macd_data = [macd_line, macd_s_line, macd_o_line] stochastic_data = [slow_k_line, slow_d_line] @@ -175,11 +175,11 @@ if __name__ == "__main__": # to check bying stock_codes = { - "122630": ['20220810'], - "252670": ['20220810'], + "122630": ['20220809'], + "252670": ['20220809'], } - method = "answer" # "rule", "ml", "answer" + method = "rule" # "rule", "ml", "answer" for stock_code in stock_codes: simulation = Simulation(RESOURCE_PATH) diff --git a/hts/BuySellChecker.py b/hts/BuySellChecker.py index 6bf6a90..8f3fffd 100644 --- a/hts/BuySellChecker.py +++ b/hts/BuySellChecker.py @@ -199,6 +199,16 @@ class BuySellChecker: # "15:00" 까지만 매수 return buy, weight + # 20분과 30분 아래에서, 3분선이 5분선 위로 올라오면 매수, + # 20분과 30분 위에서, 3분선이 5분선 아래로 내려오면 매도, + if data["avg3"][i - 1] <= data["avg5"][i - 1] and data["avg3"][i] > data["avg5"][i]: + if max(data["avg3"][i], data["avg5"][i]) < min(data["avg20"][i], data["avg30"][i]): + if min(data["avg3"][i], data["avg5"][i]) > data["avg60"][i]: + buy = int((data["high"][i] + data["low"][i]) / 2) + weight = 1 + return buy, weight + + """ # 3분선이 10분 이상 7분선 아래에 있다가 7분선 위로 올라옴 if i >= 381 + 10: vaild = True @@ -211,6 +221,7 @@ class BuySellChecker: buy = int(data["avg3"][i] - data["avg3"][i]%5) weight = 1 return self.getBuyCheck(data, i, buy, weight) + """ """ # 중위선 20분선 아래에서 볼린져 상단을 뚫고 종료할 때 @@ -400,6 +411,14 @@ class BuySellChecker: if i >= START_TIME_INDEX: # 매도 분석 + # 20분과 30분 아래에서, 3분선이 5분선 위로 올라오면 매수, + # 20분과 30분 위에서, 3분선이 5분선 아래로 내려오면 매도, + if data["avg3"][i - 1] >= data["avg5"][i - 1] and data["avg3"][i] < data["avg5"][i]: + if min(data["avg3"][i], data["avg5"][i]) > max(data["avg20"][i], data["avg30"][i]): + sell = int((data["high"][i] + data["low"][i]) / 2) + weight = 1 + return sell, weight + """ # 3분선이 5분 이상 5분선 위에 있다가 5분선 아래로 내려옴 if i >= 381 + 5: vaild = True @@ -412,7 +431,7 @@ class BuySellChecker: sell = int(data["avg3"][i] - data["avg3"][i]%5) weight = 1 return sell, weight - + """ """ # 3분 선이 40분 전부터 게속 20분선 위에 있다가 아래로 내려오면 매도함 if data["avg3"][i] < data["avg20"][i]: @@ -500,6 +519,15 @@ class BuySellChecker: # "15:00" 까지만 매수 return buy, weight + # 20분과 30분 아래에서, 3분선이 5분선 위로 올라오면 매수, + # 20분과 30분 위에서, 3분선이 5분선 아래로 내려오면 매도, + if data["avg3"][i - 1] <= data["avg5"][i - 1] and data["avg3"][i] > data["avg5"][i]: + if max(data["avg3"][i], data["avg5"][i]) < min(data["avg20"][i], data["avg30"][i]): + if min(data["avg3"][i], data["avg5"][i]) > data["avg60"][i]: + buy = int((data["high"][i] + data["low"][i]) / 2) + weight = 1 + return buy, weight + """ # 3분선이 10분 이상 7분선 아래에 있다가 7분선 위로 올라옴 if i >= 381 + 10: vaild = True @@ -512,6 +540,7 @@ class BuySellChecker: buy = int(data["avg3"][i] - data["avg3"][i] % 5) weight = 1 return self.getBuyCheck(data, i, buy, weight) + """ """ # 30일 이전부터 모든 선이 좁혀졌다 녋혀지면서 다시 상승하며 좁혀짐 @@ -702,6 +731,14 @@ class BuySellChecker: if i >= START_TIME_INDEX: # 매도 분석 + # 20분과 30분 아래에서, 3분선이 5분선 위로 올라오면 매수, + # 20분과 30분 위에서, 3분선이 5분선 아래로 내려오면 매도, + if data["avg3"][i - 1] >= data["avg5"][i - 1] and data["avg3"][i] < data["avg5"][i]: + if min(data["avg3"][i], data["avg5"][i]) > max(data["avg20"][i], data["avg30"][i]): + sell = int((data["high"][i] + data["low"][i]) / 2) + weight = 1 + return sell, weight + """ # 3분선이 5분 이상 5분선 위에 있다가 5분선 아래로 내려옴 if i >= 381 + 5: vaild = True @@ -714,7 +751,7 @@ class BuySellChecker: sell = int(data["avg3"][i] - data["avg3"][i]%5) weight = 1 return sell, weight - + """ """ # 3분 선이 40분 전부터 게속 20분선 위에 있다가 아래로 내려오면 매도함 if data["avg3"][i] < data["avg20"][i]: