This commit is contained in:
dsyoon
2023-11-05 19:28:12 +09:00
parent e4a3d6c412
commit e832b629e1
12 changed files with 546 additions and 157 deletions

View File

@@ -124,6 +124,7 @@ class BuySellChecker:
return False
"""
def getBuyPriceAndWeight_122630(self, i, data):
buy, weight = -1, -1
@@ -277,7 +278,7 @@ class BuySellChecker:
sell, weight = data['close'][i], 1
return sell, weight
"""
def analyze(self, result):
@@ -388,6 +389,7 @@ class BuySellChecker:
data = data.fillna(-1)
return data
"""
def checkTransaction(self, stock_code, data, data_5=None, data_30=None, isRealTime=True):
# 어제 오늘 데이터로 분석
bsLine = {}
@@ -429,53 +431,8 @@ class BuySellChecker:
return bsLine
def checkTransactionML(self, data, stock_code, predY, isRealTime=True):
# 4일치 중에서 앞에 2일은 제거한다.
date = data['date'].dt.date.unique().tolist()
data = data[data['date'].dt.date != date[0]]
data = data[data['date'].dt.date != date[1]]
"""
# 어제 오늘 데이터로 분석
bsLine = {}
size = len(data["close"])
if isRealTime:
# isRealTime=True, 실시간 적용
last_index = size - 1
# 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)]
sell, sell_weight, buy, buy_weight = -1, -1, -1, -1
if predY[last_index] == 1:
sell = int((data["open"][last_index] + data["close"][last_index]) / 2)
sell_weight = 1
elif predY[last_index] == 2:
buy = int((data["open"][last_index] + data["close"][last_index]) / 2)
buy_weight = 1
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 i in range(size):
if predY[i] == 1:
bsLine['sell'][i] = int((data["open"][i] + data["close"][i]) / 2)
bsLine['sell_weight'][i] = 1
elif predY[i] == 2:
bsLine['buy'][i] = int((data["open"][i] + data["close"][i]) / 2)
bsLine['buy_weight'][i] = 1
return bsLine, data
# middle line에 맞다은 적 없이, low line에 붙었거나 아래에 있었던 캔들의 높은 가격을 얻어옴
def getPrice_UnderLowWithoutMiddle(self, last_index, data):

View File

@@ -0,0 +1,103 @@
from hts.BuySellChecker import BuySellChecker
class BuySellChecker_122630 (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])
MIN_AVG_5_200 = 0.002
MIN_AVG_5_60 = 0.002
DIFF_200_5 = 0.001
if (abs(data['disparity_avg200'][i] - data['disparity_avg5'][i]) < DIFF_200_5 and C_MIN_AVG_5_200 < MIN_AVG_5_200 and C_MIN_AVG_5_60 < MIN_AVG_5_60):
if data['avg200'][i] < data['avg5'][i]:
if 180 < i:
valid = True
for c in range(5, 181):
if data['avg200'][-c] < data['avg200'][-c]:
valid = False
break
if valid:
if max(data['volume'].tolist()[i-10:i]) < data['volume'][i]:
buy = data['close'][i]
weight = 1
if data['open'][i-2] < data['close'][i-2] and data['open'][i-1] < data['close'][i-1] and data['open'][i] < data['close'][i]:
buy = data['close'][i]
weight = 1
if data['macd'][i-1] < -1000:
if -1000 < data['macd'][i]:
buy = data['close'][i]
weight = 1
return buy, weight
def checkTransaction(self, stock_code, data, INFO, isRealTime=True):
sell, weight = -1, -1
if data['close'][i] < INFO['LOW_PRICE'] < data['close'][i-1]:
sell = data['close'][i]
weight = 1
if (650 < 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

View File

@@ -0,0 +1,103 @@
from hts.BuySellChecker import BuySellChecker
class BuySellChecker_233740 (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])
MIN_AVG_5_200 = 0.002
MIN_AVG_5_60 = 0.002
DIFF_200_5 = 0.001
if (abs(data['disparity_avg200'][i] - data['disparity_avg5'][i]) < DIFF_200_5 and C_MIN_AVG_5_200 < MIN_AVG_5_200 and C_MIN_AVG_5_60 < MIN_AVG_5_60):
if data['avg200'][i] < data['avg5'][i]:
if 180 < i:
valid = True
for c in range(5, 181):
if data['avg200'][-c] < data['avg200'][-c]:
valid = False
break
if valid:
if max(data['volume'].tolist()[i-10:i]) < data['volume'][i]:
buy = data['close'][i]
weight = 1
if data['open'][i-2] < data['close'][i-2] and data['open'][i-1] < data['close'][i-1] and data['open'][i] < data['close'][i]:
buy = data['close'][i]
weight = 1
if data['macd'][i-1] < -1000:
if -1000 < data['macd'][i]:
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 (650 < 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

View File

@@ -0,0 +1,103 @@
from hts.BuySellChecker import BuySellChecker
class BuySellChecker_251340 (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])
MIN_AVG_5_200 = 0.002
MIN_AVG_5_60 = 0.002
DIFF_200_5 = 0.001
if (abs(data['disparity_avg200'][i] - data['disparity_avg5'][i]) < DIFF_200_5 and C_MIN_AVG_5_200 < MIN_AVG_5_200 and C_MIN_AVG_5_60 < MIN_AVG_5_60):
if data['avg200'][i] < data['avg5'][i]:
if 180 < i:
valid = True
for c in range(5, 181):
if data['avg200'][-c] < data['avg200'][-c]:
valid = False
break
if valid:
if max(data['volume'].tolist()[i-10:i]) < data['volume'][i]:
buy = data['close'][i]
weight = 1
if data['open'][i-2] < data['close'][i-2] and data['open'][i-1] < data['close'][i-1] and data['open'][i] < data['close'][i]:
buy = data['close'][i]
weight = 1
if data['macd'][i-1] < -1000:
if -1000 < data['macd'][i]:
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['LOW_PRICE'] < data['close'][i-1]:
sell = data['close'][i]
weight = 1
if (650 < 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

View File

@@ -0,0 +1,103 @@
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])
MIN_AVG_5_200 = 0.002
MIN_AVG_5_60 = 0.002
DIFF_200_5 = 0.001
if (abs(data['disparity_avg200'][i] - data['disparity_avg5'][i]) < DIFF_200_5 and C_MIN_AVG_5_200 < MIN_AVG_5_200 and C_MIN_AVG_5_60 < MIN_AVG_5_60):
if data['avg200'][i] < data['avg5'][i]:
if 180 < i:
valid = True
for c in range(5, 181):
if data['avg200'][-c] < data['avg200'][-c]:
valid = False
break
if valid:
if max(data['volume'].tolist()[i-10:i]) < data['volume'][i]:
buy = data['close'][i]
weight = 1
if data['open'][i-2] < data['close'][i-2] and data['open'][i-1] < data['close'][i-1] and data['open'][i] < data['close'][i]:
buy = data['close'][i]
weight = 1
if data['macd'][i-1] < -1000:
if -1000 < data['macd'][i]:
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['LOW_PRICE'] < data['close'][i-1]:
sell = data['close'][i]
weight = 1
if (650 < 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