This commit is contained in:
dsyoon
2023-01-29 20:42:23 +09:00
parent 6988b7461d
commit 64ea82570b
3 changed files with 84 additions and 126 deletions

View File

@@ -38,9 +38,9 @@ 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'][len(bsLine['buy'])-len(data):]
buy_weight_line = bsLine['buy_weight'][len(bsLine['buy'])-len(data):]
sell_line = bsLine['sell'][len(bsLine['buy'])-len(data):]
# 그래프 설정을 위한 변수를 생성한다.
data = data.astype({'open': 'int',
@@ -48,11 +48,11 @@ class Simulation (HTS):
'low': 'int',
'close': 'int',
'volume': 'int',
'avg3': 'float',
'avg6': 'float',
'avg9': 'float',
'avg12': 'float',
'avg5': 'float',
'avg20': 'float',
'avg30': 'float',
'avg60': 'float',
'avg120': 'float',
'fast_k': 'float',
'slow_k': 'float',
'slow_d': 'float',
@@ -84,11 +84,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))
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')
avg3 = go.Scatter(x=data['date'], y=data["avg3"], name="avg3", line_color='#8F8203')
avg6 = go.Scatter(x=data['date'], y=data["avg6"], name="avg6", line_color='#089B5B')
avg9 = go.Scatter(x=data['date'], y=data["avg9"], name="avg9", line_color='#ff00ff')
avg12 = go.Scatter(x=data['date'], y=data["avg12"], name="avg12", line_color='#1469F4')
avg20 = go.Scatter(x=data['date'], y=data["avg20"], name="avg20", line_color='#000000')
avg5 = go.Scatter(x=data['date'], y=data["avg5"], name="avg5", line_color='#8F8203')
avg20 = go.Scatter(x=data['date'], y=data["avg20"], name="avg20", line_color='#089B5B')
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='#1469F4')
avg120 = go.Scatter(x=data['date'], y=data["avg120"], name="avg120", line_color='#000000')
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')
baseLine = go.Scatter(x=data['date'], y=data["baseLine"], name='baseLine', line_color='#CF6E0D')
@@ -114,7 +114,7 @@ class Simulation (HTS):
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')
candle_data = [candle_stick, upper, lower, avg3, avg6, avg9, avg12, avg20, buy_check, sell_check, laggingSpan, changeLine, baseLine]
candle_data = [candle_stick, upper, lower, avg5, avg20, avg30, avg60, avg120, buy_check, sell_check, laggingSpan, changeLine, baseLine]
volume_data = [volume_line]
disparity_data = [disparity_avg5, disparity_avg10, disparity_avg20, disparity_avg60, disparity_avg120]
macd_data = [macd_line, macd_s_line, macd_o_line]
@@ -174,30 +174,41 @@ class Simulation (HTS):
"label": []}
for i in range(mins, len(data['time'])+1):
result["check"].add(data['time'][i])
result["time"].append(data['time'][i])
result["check"].add(data['time'][i-1])
result["time"].append(data['time'][i-1])
result["open"].append(data['open'][i-mins])
result["close"].append(data['close'][i-1])
result["high"].append(max(data['high'][i - 30: i]))
result["low"].append(min(data['low'][i - 30: i]))
result["vol"].append(sum(data[i - 30: i]))
result["high"].append(max(data['high'][i - mins: i]))
result["low"].append(min(data['low'][i - mins: i]))
result["vol"].append(sum(data['vol'][i - mins: i]))
return result
def simulate(self, stock_codes:dict=None):
def simulate(self, stock_codes:dict=None, analyzed_day=1000):
if stock_codes is not None:
for stock_code in stock_codes:
for given_day in stock_codes[stock_code]:
LAST_DATA = self.stock2Vector.getLastData(stock_code, given_day)
result = self.stock2Vector.getRealTime(stock_code, given_day, LAST_DATA)
result_30 = self.makeTickData(result, min=30)
result_5 = self.makeTickData(result, mins=5)
result_30 = self.makeTickData(result, mins=30)
data = self.buySellChecker.analyze(result)
data.drop(data.index[:len(data) - analyzed_day], inplace=True)
# 이동평균, RSI, MACD, 일목균형, 볼린저밴드 상/하단을 계산한다.
data1 = self.buySellChecker.analyze(result)
data_5 = self.buySellChecker.analyze(result_5)
# 분석일 데이터만 활용한다 (이전 데이터는 제거)
data_5.drop(data_5.index[:len(data_5) - analyzed_day], inplace=True)
data_30 = self.buySellChecker.analyze(result_30)
# 분석일 데이터만 활용한다 (이전 데이터는 제거)
data_30.drop(data_30.index[:len(data_30) - analyzed_day], inplace=True)
# 사야 할 시점과 팔아야 할 시점을 체크한다.
bsLine, data = self.buySellChecker.checkTransaction(data, stock_code, isRealTime=False)
bsLine = self.buySellChecker.checkTransaction(stock_code, data, data_5, data_30, isRealTime=False)
# 그래프를 그린다.
self.draw(stock_code, given_day, data, bsLine)