init
This commit is contained in:
@@ -50,9 +50,14 @@ class Simulation (HTS):
|
|||||||
'volume': 'int',
|
'volume': 'int',
|
||||||
'avg5': 'float',
|
'avg5': 'float',
|
||||||
'avg20': 'float',
|
'avg20': 'float',
|
||||||
'avg30': 'float',
|
|
||||||
'avg60': 'float',
|
'avg60': 'float',
|
||||||
'avg120': 'float',
|
'avg120': 'float',
|
||||||
|
'avg200': 'float',
|
||||||
|
'disparity_avg5': 'float',
|
||||||
|
'disparity_avg20': 'float',
|
||||||
|
'disparity_avg60': 'float',
|
||||||
|
'disparity_avg120': 'float',
|
||||||
|
'disparity_avg200': 'float',
|
||||||
'fast_k': 'float',
|
'fast_k': 'float',
|
||||||
'slow_k': 'float',
|
'slow_k': 'float',
|
||||||
'slow_d': 'float',
|
'slow_d': 'float',
|
||||||
@@ -84,11 +89,11 @@ class Simulation (HTS):
|
|||||||
sell_check = go.Scatter(x=data['date'], y=sell_line, mode='markers', name="sell", marker=dict(size=14, color=sell_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')
|
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')
|
lower = go.Scatter(x=data['date'], y=data["lower"], name="lower", line_color='#000000')
|
||||||
avg5 = go.Scatter(x=data['date'], y=data["avg5"], name="avg5", line_color='#8F8203')
|
avg5 = go.Scatter(x=data['date'], y=data["avg5"], name="avg5", line_color='#F81191')
|
||||||
avg20 = go.Scatter(x=data['date'], y=data["avg20"], name="avg20", line_color='#089B5B')
|
avg20 = go.Scatter(x=data['date'], y=data["avg20"], name="avg20", line_color='#097F19')
|
||||||
avg30 = go.Scatter(x=data['date'], y=data["avg30"], name="avg30", line_color='#ff00ff')
|
avg60 = go.Scatter(x=data['date'], y=data["avg60"], name="avg60", line_color='#671BEA')
|
||||||
avg60 = go.Scatter(x=data['date'], y=data["avg60"], name="avg60", line_color='#1469F4')
|
avg120 = go.Scatter(x=data['date'], y=data["avg120"], name="avg120", line_color='#DFB809')
|
||||||
avg120 = go.Scatter(x=data['date'], y=data["avg120"], name="avg120", line_color='#000000')
|
avg200 = go.Scatter(x=data['date'], y=data["avg200"], name="avg200", line_color='#000000')
|
||||||
laggingSpan = go.Scatter(x=data['date'], y=data["laggingSpan"], name='laggingSpan', line_color='#B50ABB')
|
laggingSpan = go.Scatter(x=data['date'], y=data["laggingSpan"], name='laggingSpan', line_color='#B50ABB')
|
||||||
changeLine = go.Scatter(x=data['date'], y=data["changeLine"], name='changeLine', line_color='#14A200')
|
changeLine = go.Scatter(x=data['date'], y=data["changeLine"], name='changeLine', line_color='#14A200')
|
||||||
baseLine = go.Scatter(x=data['date'], y=data["baseLine"], name='baseLine', line_color='#CF6E0D')
|
baseLine = go.Scatter(x=data['date'], y=data["baseLine"], name='baseLine', line_color='#CF6E0D')
|
||||||
@@ -97,11 +102,11 @@ class Simulation (HTS):
|
|||||||
#volume_line = go.Scatter(x=data['date'], y=data["volume"], mode='lines', name='volume')
|
#volume_line = go.Scatter(x=data['date'], y=data["volume"], mode='lines', name='volume')
|
||||||
volume_line = go.Bar(x=data['date'], y=data["volume"], marker_color='red', name='volume')
|
volume_line = go.Bar(x=data['date'], y=data["volume"], marker_color='red', name='volume')
|
||||||
|
|
||||||
disparity_avg5 = go.Scatter(x=data['date'], y=data["disparity_avg5"], name="disparity_avg5", line_color='#8F8203')
|
disparity_avg5 = go.Scatter(x=data['date'], y=data["disparity_avg5"], name="disparity_avg5", line_color='#F81191')
|
||||||
disparity_avg10 = go.Scatter(x=data['date'], y=data["disparity_avg10"], name="disparity_avg10", line_color='#089B5B')
|
disparity_avg20 = go.Scatter(x=data['date'], y=data["disparity_avg20"], name="disparity_avg20", line_color='#097F19')
|
||||||
disparity_avg20 = go.Scatter(x=data['date'], y=data["disparity_avg20"], name="disparity_avg20", line_color='#ff00ff')
|
disparity_avg60 = go.Scatter(x=data['date'], y=data["disparity_avg60"], name="disparity_avg60", line_color='#671BEA')
|
||||||
disparity_avg60 = go.Scatter(x=data['date'], y=data["disparity_avg60"], name="disparity_avg60", line_color='#1469F4')
|
disparity_avg120 = go.Scatter(x=data['date'], y=data["disparity_avg120"], name="disparity_avg120", line_color='#DFB809')
|
||||||
disparity_avg120 = go.Scatter(x=data['date'], y=data["disparity_avg120"], name="disparity_avg120", line_color='#000000')
|
disparity_avg200 = go.Scatter(x=data['date'], y=data["disparity_avg200"], name="disparity_avg200", line_color='#000000')
|
||||||
|
|
||||||
macd_line = go.Scatter(x=data['date'], y=data["macd"], line=dict(color='red', width=2), name='macd')
|
macd_line = go.Scatter(x=data['date'], y=data["macd"], line=dict(color='red', width=2), name='macd')
|
||||||
macd_s_line = go.Scatter(x=data['date'], y=data["macds"], line=dict(dash='dashdot', color='black', width=2), name='macds')
|
macd_s_line = go.Scatter(x=data['date'], y=data["macds"], line=dict(dash='dashdot', color='black', width=2), name='macds')
|
||||||
@@ -114,9 +119,9 @@ class Simulation (HTS):
|
|||||||
rsi_line = go.Scatter(x=data['date'], y=data["rsi"], line=dict(color='red', width=2), name='rsi')
|
rsi_line = go.Scatter(x=data['date'], y=data["rsi"], line=dict(color='red', width=2), name='rsi')
|
||||||
rsis_line = go.Scatter(x=data['date'], y=data["rsis"], line=dict(dash='dashdot', color='black', width=2), name='rsis')
|
rsis_line = go.Scatter(x=data['date'], y=data["rsis"], line=dict(dash='dashdot', color='black', width=2), name='rsis')
|
||||||
|
|
||||||
candle_data = [candle_stick, upper, lower, avg5, avg20, avg30, avg60, avg120, buy_check, sell_check, laggingSpan, changeLine, baseLine]
|
candle_data = [candle_stick, upper, lower, avg5, avg20, avg60, avg120, avg200, buy_check, sell_check, laggingSpan, changeLine, baseLine]
|
||||||
volume_data = [volume_line]
|
volume_data = [volume_line]
|
||||||
disparity_data = [disparity_avg5, disparity_avg10, disparity_avg20, disparity_avg60, disparity_avg120]
|
disparity_data = [disparity_avg5, disparity_avg20, disparity_avg60, disparity_avg120, disparity_avg200]
|
||||||
macd_data = [macd_line, macd_s_line, macd_o_line]
|
macd_data = [macd_line, macd_s_line, macd_o_line]
|
||||||
stochastic_data = [slow_k_line, slow_d_line]
|
stochastic_data = [slow_k_line, slow_d_line]
|
||||||
rsi_data = [rsi_line, rsis_line]
|
rsi_data = [rsi_line, rsis_line]
|
||||||
@@ -191,23 +196,24 @@ class Simulation (HTS):
|
|||||||
for given_day in stock_codes[stock_code]:
|
for given_day in stock_codes[stock_code]:
|
||||||
LAST_DATA = self.stock2Vector.getLastData(stock_code, given_day)
|
LAST_DATA = self.stock2Vector.getLastData(stock_code, given_day)
|
||||||
result = self.stock2Vector.getRealTime(stock_code, given_day, LAST_DATA)
|
result = self.stock2Vector.getRealTime(stock_code, given_day, LAST_DATA)
|
||||||
result_5 = self.makeTickData(result, mins=5)
|
#result_5 = self.makeTickData(result, mins=5)
|
||||||
result_30 = self.makeTickData(result, mins=30)
|
#result_30 = self.makeTickData(result, mins=30)
|
||||||
|
|
||||||
data = self.buySellChecker.analyze(result)
|
data = self.buySellChecker.analyze(result)
|
||||||
data.drop(data.index[:len(data) - analyzed_day], inplace=True)
|
data.drop(data.index[:len(data) - analyzed_day], inplace=True)
|
||||||
|
|
||||||
# 이동평균, RSI, MACD, 일목균형, 볼린저밴드 상/하단을 계산한다.
|
# 이동평균, RSI, MACD, 일목균형, 볼린저밴드 상/하단을 계산한다.
|
||||||
data_5 = self.buySellChecker.analyze(result_5)
|
#data_5 = self.buySellChecker.analyze(result_5)
|
||||||
# 분석일 데이터만 활용한다 (이전 데이터는 제거)
|
# 분석일 데이터만 활용한다 (이전 데이터는 제거)
|
||||||
data_5.drop(data_5.index[:len(data_5) - analyzed_day], inplace=True)
|
#data_5.drop(data_5.index[:len(data_5) - analyzed_day], inplace=True)
|
||||||
|
|
||||||
data_30 = self.buySellChecker.analyze(result_30)
|
#data_30 = self.buySellChecker.analyze(result_30)
|
||||||
# 분석일 데이터만 활용한다 (이전 데이터는 제거)
|
# 분석일 데이터만 활용한다 (이전 데이터는 제거)
|
||||||
data_30.drop(data_30.index[:len(data_30) - analyzed_day], inplace=True)
|
#data_30.drop(data_30.index[:len(data_30) - analyzed_day], inplace=True)
|
||||||
|
|
||||||
# 사야 할 시점과 팔아야 할 시점을 체크한다.
|
# 사야 할 시점과 팔아야 할 시점을 체크한다.
|
||||||
bsLine = self.buySellChecker.checkTransaction(stock_code, data, data_5, data_30, isRealTime=False)
|
#bsLine = self.buySellChecker.checkTransaction(stock_code, data, data_5, data_30, isRealTime=False)
|
||||||
|
bsLine = self.buySellChecker.checkTransaction(stock_code, data, None, None, isRealTime=False)
|
||||||
|
|
||||||
# 그래프를 그린다.
|
# 그래프를 그린다.
|
||||||
self.draw(stock_code, given_day, data, bsLine)
|
self.draw(stock_code, given_day, data, bsLine)
|
||||||
@@ -227,10 +233,10 @@ if __name__ == "__main__":
|
|||||||
# to check bying
|
# to check bying
|
||||||
stock_codes = {
|
stock_codes = {
|
||||||
"252670": [
|
"252670": [
|
||||||
'20220901', '20220902', '20220905', '20220906', '20220907', '20220908','20220913','20220914','20220915','20220916'
|
'20220901', '20220902', '20220905', '20220906'
|
||||||
],
|
],
|
||||||
"122630": [
|
"122630": [
|
||||||
'20220901', '20220902', '20220905', '20220906', '20220907', '20220908', '20220913', '20220914', '20220915', '20220916'
|
'20220901', '20220902', '20220905', '20220906'
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
#simulation.simulate(stock_codes)
|
#simulation.simulate(stock_codes)
|
||||||
|
|||||||
@@ -109,9 +109,10 @@ class BuySellChecker:
|
|||||||
return -1
|
return -1
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
def getBuyPriceAndWeight(self, data, data_5, data_30, i):
|
def getBuyPriceAndWeight(self, i, data, data_5=None, data_30=None):
|
||||||
buy, weight = -1, -1
|
buy, weight = -1, -1
|
||||||
|
|
||||||
|
if data_5 is not None and data_30 is not None:
|
||||||
if len(data_5['slow_k']) <= i or len(data_30['slow_k']) <= i:
|
if len(data_5['slow_k']) <= i or len(data_30['slow_k']) <= i:
|
||||||
return buy, weight
|
return buy, weight
|
||||||
|
|
||||||
@@ -134,12 +135,18 @@ class BuySellChecker:
|
|||||||
if data_5['slow_k'][i - 1] < data_5['slow_d'][i - 1] and data_5['slow_d'][i] < data_30['slow_k'][i]:
|
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]
|
buy = data['close'][i]
|
||||||
weight = 0.3
|
weight = 0.3
|
||||||
|
else:
|
||||||
|
if data['avg5'][i-1] < data['avg200'][i-1] and data['avg200'][i] < data['avg5'][i]:
|
||||||
|
if data['avg60'][i]<data['avg20'][i]<data['avg5'][i]:
|
||||||
|
buy = data['close'][i]
|
||||||
|
weight = 0.3
|
||||||
|
|
||||||
return buy, weight
|
return buy, weight
|
||||||
|
|
||||||
def getSellPriceAndWeight(self, data, data_5, data_30, i):
|
def getSellPriceAndWeight(self, i, data, data_5=None, data_30=None):
|
||||||
sell, weight = -1, -1
|
sell, weight = -1, -1
|
||||||
|
|
||||||
|
if data_5 is not None and data_30 is not None:
|
||||||
if len(data_5['slow_k']) <= i or len(data_30['slow_k']) <= i:
|
if len(data_5['slow_k']) <= i or len(data_30['slow_k']) <= i:
|
||||||
return sell, weight
|
return sell, weight
|
||||||
|
|
||||||
@@ -155,6 +162,10 @@ class BuySellChecker:
|
|||||||
if data_30['slow_k'][i] > 98 and data_5['slow_k'][i] > 98:
|
if data_30['slow_k'][i] > 98 and data_5['slow_k'][i] > 98:
|
||||||
sell = data['close'][i]
|
sell = data['close'][i]
|
||||||
weight = 100
|
weight = 100
|
||||||
|
else:
|
||||||
|
if data['avg200'][i-1] < data['avg5'][i-1] and data['avg5'][i] < data['avg200'][i]:
|
||||||
|
sell = data['close'][i]
|
||||||
|
weight = 100
|
||||||
|
|
||||||
return sell, weight
|
return sell, weight
|
||||||
|
|
||||||
@@ -247,18 +258,20 @@ class BuySellChecker:
|
|||||||
avg60 = [item[0] for item in avg60_list]
|
avg60 = [item[0] for item in avg60_list]
|
||||||
avg120_list = close_df.rolling(window=120).mean().fillna(close[0]).values.tolist()
|
avg120_list = close_df.rolling(window=120).mean().fillna(close[0]).values.tolist()
|
||||||
avg120 = [item[0] for item in avg120_list]
|
avg120 = [item[0] for item in avg120_list]
|
||||||
|
avg200_list = close_df.rolling(window=200).mean().fillna(close[0]).values.tolist()
|
||||||
|
avg200 = [item[0] for item in avg120_list]
|
||||||
|
|
||||||
open_df = pd.DataFrame(close)
|
open_df = pd.DataFrame(close)
|
||||||
disparity_avg5_list = (open_df / close_df.rolling(window=5).mean()).values.tolist()
|
disparity_avg5_list = (open_df / close_df.rolling(window=5).mean()).values.tolist()
|
||||||
disparity_avg5 = [item[0] for item in disparity_avg5_list]
|
disparity_avg5 = [item[0] for item in disparity_avg5_list]
|
||||||
disparity_avg10_list = (open_df / close_df.rolling(window=10).mean()).values.tolist()
|
|
||||||
disparity_avg10 = [item[0] for item in disparity_avg10_list]
|
|
||||||
disparity_avg20_list = (open_df / close_df.rolling(window=20).mean()).values.tolist()
|
disparity_avg20_list = (open_df / close_df.rolling(window=20).mean()).values.tolist()
|
||||||
disparity_avg20 = [item[0] for item in disparity_avg20_list]
|
disparity_avg20 = [item[0] for item in disparity_avg20_list]
|
||||||
disparity_avg60_list = (open_df / close_df.rolling(window=60).mean()).values.tolist()
|
disparity_avg60_list = (open_df / close_df.rolling(window=60).mean()).values.tolist()
|
||||||
disparity_avg60 = [item[0] for item in disparity_avg60_list]
|
disparity_avg60 = [item[0] for item in disparity_avg60_list]
|
||||||
disparity_avg120_list = (open_df / close_df.rolling(window=120).mean()).values.tolist()
|
disparity_avg120_list = (open_df / close_df.rolling(window=120).mean()).values.tolist()
|
||||||
disparity_avg120 = [item[0] for item in disparity_avg120_list]
|
disparity_avg120 = [item[0] for item in disparity_avg120_list]
|
||||||
|
disparity_avg200_list = (open_df / close_df.rolling(window=200).mean()).values.tolist()
|
||||||
|
disparity_avg200 = [item[0] for item in disparity_avg200_list]
|
||||||
|
|
||||||
# 볼린져 밴드
|
# 볼린져 밴드
|
||||||
df = pd.DataFrame(close)
|
df = pd.DataFrame(close)
|
||||||
@@ -280,7 +293,7 @@ class BuySellChecker:
|
|||||||
STOCK = []
|
STOCK = []
|
||||||
for i in range(len(open)):
|
for i in range(len(open)):
|
||||||
STOCK.append({'volume': vol[i], 'close': close[i], 'open': open[i], 'high': high[i], 'low': low[i],
|
STOCK.append({'volume': vol[i], 'close': close[i], 'open': open[i], 'high': high[i], 'low': low[i],
|
||||||
'avg5': avg5[i], 'avg20': avg20[i], 'avg30': avg30[i], 'avg60': avg60[i], 'avg120': avg120[i]})
|
'avg5': avg5[i], 'avg20': avg20[i], 'avg60': avg60[i], 'avg120': avg120[i], 'avg200': avg200[i]})
|
||||||
|
|
||||||
# stochastic
|
# stochastic
|
||||||
stochastic_df = self.stochastic.apply(STOCK, n=30, m=5, t=5)
|
stochastic_df = self.stochastic.apply(STOCK, n=30, m=5, t=5)
|
||||||
@@ -312,9 +325,9 @@ class BuySellChecker:
|
|||||||
temp = {
|
temp = {
|
||||||
"date": point_temp,
|
"date": point_temp,
|
||||||
"open": open, "high": high, "low": low, "close": close, "volume": vol,
|
"open": open, "high": high, "low": low, "close": close, "volume": vol,
|
||||||
"avg5": avg5, "avg20": avg20, "avg30": avg30, "avg60": avg60, "avg120": avg120,
|
"avg5": avg5, "avg20": avg20, "avg60": avg60, "avg120": avg120, "avg200": avg200,
|
||||||
"disparity_avg5": disparity_avg5, "disparity_avg10": disparity_avg10, "disparity_avg20": disparity_avg20,
|
"disparity_avg5": disparity_avg5, "disparity_avg20": disparity_avg20,
|
||||||
"disparity_avg60": disparity_avg60, "disparity_avg120": disparity_avg120,
|
"disparity_avg60": disparity_avg60, "disparity_avg120": disparity_avg120, "disparity_avg200": disparity_avg200,
|
||||||
"upper": upper, "lower": lower,
|
"upper": upper, "lower": lower,
|
||||||
"macd": macd, "macds": macds, "macdo": macdo,
|
"macd": macd, "macds": macds, "macdo": macdo,
|
||||||
"fast_k": fast_k, "slow_k": slow_k, "slow_d": slow_d,
|
"fast_k": fast_k, "slow_k": slow_k, "slow_d": slow_d,
|
||||||
@@ -726,7 +739,7 @@ class BuySellChecker:
|
|||||||
outFp.write(str(df["label"][i]) + "\n")
|
outFp.write(str(df["label"][i]) + "\n")
|
||||||
return
|
return
|
||||||
|
|
||||||
def checkTransaction(self, stock_code, data, data_5, data_30, isRealTime=True):
|
def checkTransaction(self, stock_code, data, data_5=None, data_30=None, isRealTime=True):
|
||||||
# 어제 오늘 데이터로 분석
|
# 어제 오늘 데이터로 분석
|
||||||
bsLine = {}
|
bsLine = {}
|
||||||
size = len(data["close"])
|
size = len(data["close"])
|
||||||
@@ -735,8 +748,8 @@ class BuySellChecker:
|
|||||||
# isRealTime=True, 실시간 적용
|
# isRealTime=True, 실시간 적용
|
||||||
last_index = size - 1
|
last_index = size - 1
|
||||||
|
|
||||||
buy, buy_weight = self.getBuyPriceAndWeight(data, data_5, data_30, last_index)
|
buy, buy_weight = self.getBuyPriceAndWeight(last_index, data, data_5, data_30)
|
||||||
sell, sell_weight = self.getSellPriceAndWeight(data, data_5, data_30, last_index)
|
sell, sell_weight = self.getSellPriceAndWeight(last_index, data, data_5, data_30)
|
||||||
|
|
||||||
bsLine['buy'] = [buy]
|
bsLine['buy'] = [buy]
|
||||||
bsLine['buy_weight'] = [buy_weight]
|
bsLine['buy_weight'] = [buy_weight]
|
||||||
@@ -751,8 +764,8 @@ class BuySellChecker:
|
|||||||
bsLine['sell_weight'] = [-1 for i in range(size)]
|
bsLine['sell_weight'] = [-1 for i in range(size)]
|
||||||
|
|
||||||
for i in range(size):
|
for i in range(size):
|
||||||
buy, buy_weight = self.getBuyPriceAndWeight(data, data_5, data_30, i)
|
buy, buy_weight = self.getBuyPriceAndWeight(i, data, data_5, data_30)
|
||||||
sell, sell_weight = self.getSellPriceAndWeight(data, data_5, data_30, i)
|
sell, sell_weight = self.getSellPriceAndWeight(i, data, data_5, data_30)
|
||||||
|
|
||||||
bsLine['buy'][i] = buy
|
bsLine['buy'][i] = buy
|
||||||
bsLine['buy_weight'][i] = buy_weight
|
bsLine['buy_weight'][i] = buy_weight
|
||||||
|
|||||||
Reference in New Issue
Block a user