init
This commit is contained in:
@@ -109,73 +109,49 @@ class BuySellChecker:
|
||||
return -1
|
||||
return 0
|
||||
|
||||
def getBuyPriceAndWeight(self, data, i):
|
||||
buy, weight, type = -1, -1, -1
|
||||
def getBuyPriceAndWeight(self, data, data_5, data_30, i):
|
||||
buy, weight = -1, -1
|
||||
|
||||
START_TIME_INDEX = 0
|
||||
for c in range(370, len(data.index)):
|
||||
if data.index[c].strftime("%H:%M:%S") == "09:01:00":
|
||||
START_TIME_INDEX = c
|
||||
break
|
||||
if data_5['slow_k'][i] < 20:
|
||||
if data_5['slow_k'][i - 1] < data_5['slow_d'][i - 1] and data_5['slow_d'][i] < data_5['slow_k'][i]:
|
||||
buy = data['low'][i]
|
||||
weight = 0.3
|
||||
|
||||
if START_TIME_INDEX + 10 < i < START_TIME_INDEX + 350:
|
||||
# 매수 분석
|
||||
if data_30['slow_k'][i] < 30 and data_5['slow_k'][i] < 30:
|
||||
if data_5['slow_k'][i - 1] < data_5['slow_d'][i - 1] and data_5['slow_d'][i] < data_30['slow_k'][i]:
|
||||
buy = data['close'][i]
|
||||
weight = 0.3
|
||||
|
||||
if data['macd'][i] < -7:
|
||||
buy = max(data["open"][i], data["close"][i])
|
||||
weight = 1
|
||||
type = 1
|
||||
return buy, weight, type
|
||||
if data_30['slow_k'][i] < 30:
|
||||
if data_5['slow_k'][i] < 30:
|
||||
if data_5['avg5'][i] < data_5['close'][i]:
|
||||
buy = data['close'][i]
|
||||
weight = 0.2
|
||||
|
||||
"""
|
||||
if data['changeLine'][i - 1] <= data['baseLine'][i - 1] and data['baseLine'][i] < data['changeLine'][i]:
|
||||
changeLine_count = sum([1 if data['changeLine'][c] <= data['baseLine'][c] else 0 for c in range(i-30, i-10)])
|
||||
if changeLine_count >= 15:
|
||||
changeLine_count = sum([1 if data['changeLine'][c] <= data['baseLine'][c] else 0 for c in range(i-10, i)])
|
||||
if changeLine_count >= 7:
|
||||
buy = min(data["open"][i], data["close"][i])
|
||||
weight = 1
|
||||
type = 1
|
||||
return buy, weight, type
|
||||
"""
|
||||
if data_5['slow_k'][i - 1] < data_5['slow_d'][i - 1] and data_5['slow_d'][i] < data_30['slow_k'][i]:
|
||||
buy = data['close'][i]
|
||||
weight = 0.3
|
||||
|
||||
"""
|
||||
if i > 381 + 26:
|
||||
if data['laggingSpan'][i-1] < data['avg3'][i-1] and data['avg3'][i] < data['laggingSpan'][i]:
|
||||
if self.checkUpDirection(data, i) == 1:
|
||||
avg20_line = sum([1 if data['avg20'][c] < data['avg20'][c-1] else 0 for c in range(i - 10, i)])
|
||||
if avg20_line < 10:
|
||||
if data["macd"][i] < 0:
|
||||
buy = min(data["open"][i], data["close"][i])
|
||||
weight = 1
|
||||
type = 1
|
||||
return buy, weight, type
|
||||
"""
|
||||
return buy, weight, type
|
||||
return buy, weight
|
||||
|
||||
def getSellPriceAndWeight(self, data, i):
|
||||
sell, weight, type = -1, -1, -1
|
||||
def getSellPriceAndWeight(self, data, data_5, data_30, i):
|
||||
sell, weight = -1, -1
|
||||
|
||||
START_TIME_INDEX = 0
|
||||
for c in range(370, len(data.index)):
|
||||
if data.index[c].strftime("%H:%M:%S") == "09:01:00":
|
||||
START_TIME_INDEX = c
|
||||
break
|
||||
if data_30['slow_k'][i] > 90:
|
||||
if (data_5['slow_d'][i-1] < data_5['slow_k'][i-1] and data_5['slow_k'][i] < data_5['slow_d'][i]):
|
||||
sell = data['close'][i]
|
||||
weight = 100
|
||||
|
||||
if i > START_TIME_INDEX:
|
||||
# 매도 분석
|
||||
if data_5['slow_k'][i] > 95 and data_5['slow_k'][i] < data_5['slow_d'][i]:
|
||||
sell = data['close'][i]
|
||||
weight = 100
|
||||
|
||||
if data['changeLine'][i - 1] >= data['laggingSpan'][i - 1] and data['laggingSpan'][i] < data['changeLine'][
|
||||
i]:
|
||||
changeLine_count = sum(
|
||||
[1 if data['changeLine'][c] <= data['laggingSpan'][c] else 0 for c in range(i - 20, i)])
|
||||
if changeLine_count >= 17:
|
||||
sell = min(data["open"][i], data["close"][i])
|
||||
weight = 1
|
||||
type = 1
|
||||
return sell, weight, type
|
||||
if data_30['slow_k'][i] > 98 and data_5['slow_k'][i] > 98:
|
||||
sell = data['close'][i]
|
||||
weight = 100
|
||||
|
||||
return sell, weight
|
||||
|
||||
return sell, weight, type
|
||||
|
||||
def getBuyPriceAndWeight_122630(self, data, i):
|
||||
buy, weight, type = -1, -1, -1
|
||||
@@ -252,20 +228,19 @@ class BuySellChecker:
|
||||
high = result["high"]
|
||||
low = result["low"]
|
||||
vol = result["vol"]
|
||||
label = result["label"]
|
||||
|
||||
# 이동 평균
|
||||
close_df = pd.DataFrame(close)
|
||||
avg3_list = close_df.rolling(window=3).mean().fillna(close[0]).values.tolist()
|
||||
avg3 = [item[0] for item in avg3_list]
|
||||
avg6_list = close_df.rolling(window=6).mean().fillna(close[0]).values.tolist()
|
||||
avg6 = [item[0] for item in avg6_list]
|
||||
avg9_list = close_df.rolling(window=9).mean().fillna(close[0]).values.tolist()
|
||||
avg9 = [item[0] for item in avg9_list]
|
||||
avg12_list = close_df.rolling(window=12).mean().fillna(close[0]).values.tolist()
|
||||
avg12 = [item[0] for item in avg12_list]
|
||||
avg5_list = close_df.rolling(window=5).mean().fillna(close[0]).values.tolist()
|
||||
avg5 = [item[0] for item in avg5_list]
|
||||
avg20_list = close_df.rolling(window=20).mean().fillna(close[0]).values.tolist()
|
||||
avg20 = [item[0] for item in avg20_list]
|
||||
avg30_list = close_df.rolling(window=30).mean().fillna(close[0]).values.tolist()
|
||||
avg30 = [item[0] for item in avg30_list]
|
||||
avg60_list = close_df.rolling(window=60).mean().fillna(close[0]).values.tolist()
|
||||
avg60 = [item[0] for item in avg60_list]
|
||||
avg120_list = close_df.rolling(window=120).mean().fillna(close[0]).values.tolist()
|
||||
avg120 = [item[0] for item in avg120_list]
|
||||
|
||||
open_df = pd.DataFrame(close)
|
||||
disparity_avg5_list = (open_df / close_df.rolling(window=5).mean()).values.tolist()
|
||||
@@ -299,7 +274,7 @@ class BuySellChecker:
|
||||
STOCK = []
|
||||
for i in range(len(open)):
|
||||
STOCK.append({'volume': vol[i], 'close': close[i], 'open': open[i], 'high': high[i], 'low': low[i],
|
||||
'avg20': avg20[i]})
|
||||
'avg5': avg5[i], 'avg20': avg20[i], 'avg30': avg30[i], 'avg60': avg60[i], 'avg120': avg120[i]})
|
||||
|
||||
# stochastic
|
||||
stochastic_df = self.stochastic.apply(STOCK, n=30, m=5, t=5)
|
||||
@@ -331,7 +306,7 @@ class BuySellChecker:
|
||||
temp = {
|
||||
"date": point_temp,
|
||||
"open": open, "high": high, "low": low, "close": close, "volume": vol,
|
||||
"avg3": avg3, "avg6": avg6, "avg9": avg9, "avg12": avg12, "avg20": avg20,
|
||||
"avg5": avg5, "avg20": avg20, "avg30": avg30, "avg60": avg60, "avg120": avg120,
|
||||
"disparity_avg5": disparity_avg5, "disparity_avg10": disparity_avg10, "disparity_avg20": disparity_avg20,
|
||||
"disparity_avg60": disparity_avg60, "disparity_avg120": disparity_avg120,
|
||||
"upper": upper, "lower": lower,
|
||||
@@ -340,15 +315,13 @@ class BuySellChecker:
|
||||
"rsi": rsi, "rsis": rsis,
|
||||
"changeLine": changeLine, "baseLine": baseLine, "laggingSpan": laggingSpan, "leadingSpan1": leadingSpan1,
|
||||
"leadingSpan2": leadingSpan2,
|
||||
|
||||
"label": label
|
||||
}
|
||||
|
||||
data = pd.DataFrame(temp)
|
||||
df_final_time = pd.DatetimeIndex(point_temp)
|
||||
data.index = df_final_time
|
||||
|
||||
data = data.fillna(close[0])
|
||||
data = data.fillna(-1)
|
||||
return data
|
||||
|
||||
def analyze1(self, result):
|
||||
@@ -747,12 +720,7 @@ class BuySellChecker:
|
||||
outFp.write(str(df["label"][i]) + "\n")
|
||||
return
|
||||
|
||||
def checkTransaction(self, data, stock_code, 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]]
|
||||
|
||||
def checkTransaction(self, stock_code, data, data_5, data_30, isRealTime=True):
|
||||
# 어제 오늘 데이터로 분석
|
||||
bsLine = {}
|
||||
size = len(data["close"])
|
||||
@@ -761,22 +729,14 @@ class BuySellChecker:
|
||||
# isRealTime=True, 실시간 적용
|
||||
last_index = size - 1
|
||||
|
||||
buy, buy_weight, buy_type = self.getBuyPriceAndWeight(data, last_index)
|
||||
sell, sell_weight, sell_type = self.getSellPriceAndWeight(data, last_index)
|
||||
|
||||
if buy > -1 or self.BUY_COUNT == 1:
|
||||
if buy == -1 or self.BUY_COUNT == 1:
|
||||
buy = min(data['open'][last_index], data['close'][last_index])
|
||||
buy_weight = 1
|
||||
self.BUY_COUNT += 1
|
||||
buy, buy_weight = self.getBuyPriceAndWeight(data, data_5, data_30, last_index)
|
||||
sell, sell_weight = self.getSellPriceAndWeight(data, data_5, data_30, last_index)
|
||||
|
||||
bsLine['buy'] = [buy]
|
||||
bsLine['buy_weight'] = [buy_weight]
|
||||
bsLine['sell'] = [sell]
|
||||
bsLine['sell_weight'] = [sell_weight]
|
||||
|
||||
if self.BUY_COUNT > 1:
|
||||
self.BUY_COUNT = 0
|
||||
else:
|
||||
# Type=False, 시뮬레이션 적용
|
||||
bsLine['buy'] = [-1 for i in range(size)]
|
||||
@@ -785,28 +745,15 @@ class BuySellChecker:
|
||||
bsLine['sell_weight'] = [-1 for i in range(size)]
|
||||
|
||||
for i in range(size):
|
||||
if stock_code == "252670":
|
||||
buy, buy_weight, buy_type = self.getBuyPriceAndWeight(data, i)
|
||||
sell, sell_weight, sell_type = self.getSellPriceAndWeight(data, i)
|
||||
else:
|
||||
buy, buy_weight, buy_type = self.getBuyPriceAndWeight_122630(data, i)
|
||||
sell, sell_weight, sell_type = self.getSellPriceAndWeight_122630(data, i)
|
||||
|
||||
if buy > -1 or self.BUY_COUNT == 1:
|
||||
if buy == -1 or self.BUY_COUNT == 1:
|
||||
buy = data['low'][i]
|
||||
buy_weight = 1
|
||||
self.BUY_COUNT += 1
|
||||
buy, buy_weight = self.getBuyPriceAndWeight(data, data_5, data_30, i)
|
||||
sell, sell_weight = self.getSellPriceAndWeight(data, data_5, data_30, i)
|
||||
|
||||
bsLine['buy'][i] = buy
|
||||
bsLine['buy_weight'][i] = buy_weight
|
||||
bsLine['sell'][i] = sell
|
||||
bsLine['sell_weight'][i] = sell_weight
|
||||
|
||||
if self.BUY_COUNT > 1:
|
||||
self.BUY_COUNT = 0
|
||||
|
||||
return bsLine, data
|
||||
return bsLine
|
||||
|
||||
def checkTransactionML(self, data, stock_code, predY, isRealTime=True):
|
||||
# 4일치 중에서 앞에 2일은 제거한다.
|
||||
|
||||
Reference in New Issue
Block a user