diff --git a/Simulation.py b/Simulation.py index ab8175f..25b5fba 100644 --- a/Simulation.py +++ b/Simulation.py @@ -93,9 +93,9 @@ class Simulation (HTS): 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') - 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') - #fast_k_line = go.Scatter(x=hts['date'], y=hts["fast_k"], mode='lines', name='fast_k') + 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', showlegend=False) + #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') disparity_avg5 = go.Scatter(x=data['date'], y=data["disparity_avg5"], name="disparity_avg5", line_color='#8F8203') disparity_avg10 = go.Scatter(x=data['date'], y=data["disparity_avg10"], name="disparity_avg10", line_color='#089B5B') @@ -103,15 +103,16 @@ class Simulation (HTS): 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='#000000') - macd_line = go.Scatter(x=data['date'], y=data["macd"], mode='lines', name='macd') - macd_s_line = go.Scatter(x=data['date'], y=data["macds"], mode='lines', name='macds') - macd_o_line = go.Scatter(x=data['date'], y=data["macdo"], mode='lines', name='macdo') + 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_o_line = go.Bar(x=data['date'], y=data["macdo"], marker_color='purple', name='macdo') - slow_k_line = go.Scatter(x=data['date'], y=data["slow_k"], mode='lines', name='slow_k') - slow_d_line = go.Scatter(x=data['date'], y=data["slow_d"], mode='lines', name='slow_d') + # fast_k_line = go.Scatter(x=hts['date'], y=hts["fast_k"], mode='lines', name='fast_k') + slow_k_line = go.Scatter(x=data['date'], y=data["slow_k"], line=dict(color='red', width=2), name='slow_k') + slow_d_line = go.Scatter(x=data['date'], y=data["slow_d"], line=dict(dash='dashdot', color='black', width=2), name='slow_d') - 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') + 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] volume_data = [volume_line] @@ -127,21 +128,26 @@ class Simulation (HTS): fig.show() """ - fig = subplots.make_subplots(rows=6, cols=1, - subplot_titles=('캔들', "거래량", "이격도", "MACD", "스토캐스틱", "RSI"), - row_heights=[1200, 500, 500, 500, 500, 500]) - for trace in candle_data: - fig.append_trace(trace, 1, 1) - for trace in volume_data: - fig.append_trace(trace, 2, 1) - for trace in disparity_data: - fig.append_trace(trace, 3, 1) + fig = subplots.make_subplots( + rows=6, cols=1, + subplot_titles=("MACD", "스토캐스틱", "RSI", "거래량", "이격도", '캔들'), + #specs=[[{}], [{}], [{}], [{}], [{}], [{}]], + shared_xaxes=True, horizontal_spacing=0.03, vertical_spacing=0.01, + row_heights=[200, 200, 200, 200, 200, 700] + ) for trace in macd_data: - fig.append_trace(trace, 4, 1) + fig.append_trace(trace, 1, 1) for trace in stochastic_data: - fig.append_trace(trace, 5, 1) + fig.append_trace(trace, 2, 1) for trace in rsi_data: + fig.append_trace(trace, 3, 1) + for trace in volume_data: + fig.append_trace(trace, 4, 1) + for trace in disparity_data: + fig.append_trace(trace, 5, 1) + for trace in candle_data: fig.append_trace(trace, 6, 1) + #fig.update_xaxes(nticks=5) #fig.update_layout(height=1800, title=stock_code + "_" + given_day, xaxis_rangeslider_visible=False) @@ -150,7 +156,8 @@ class Simulation (HTS): buy_count = len(df.loc[df["buy"] > 0]) sell_count = len(df.loc[df["sell"] > 0]) - fig.update_layout(height=5000, title=stock_code + "_" + given_day + "_" + str(buy_count)+","+str(sell_count)) + fig.update_layout(height=1700, title=stock_code + "_" + given_day + "_" + str(buy_count)+","+str(sell_count)) + #fig.update_layout(title=stock_code + "_" + given_day + "_" + str(buy_count) + "," + str(sell_count)) fig.show() return diff --git a/hts/BuySellChecker.py b/hts/BuySellChecker.py index e57e7ec..84407ff 100644 --- a/hts/BuySellChecker.py +++ b/hts/BuySellChecker.py @@ -198,6 +198,18 @@ class BuySellChecker: avg20_list = close_df.rolling(window=20).mean().fillna(close[0]).values.tolist() avg20 = [item[0] for item in avg20_list] + open_df = pd.DataFrame(close) + disparity_avg5_list = (open_df / close_df.rolling(window=5).mean()).values.tolist() + 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 = [item[0] for item in disparity_avg20_list] + disparity_avg60_list = (open_df / close_df.rolling(window=60).mean()).values.tolist() + 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 = [item[0] for item in disparity_avg120_list] + # 볼린져 밴드 df = pd.DataFrame(close) max20 = df.rolling(window=20).mean() @@ -251,6 +263,7 @@ class BuySellChecker: "date": point_temp, "open": open, "high": high, "low": low, "close": close, "volume": vol, "avg3": avg3,"avg6": avg6,"avg9": avg9,"avg12": avg12, "avg20": avg20, + "disparity_avg5": disparity_avg5, "disparity_avg10": disparity_avg10, "disparity_avg20": disparity_avg20, "disparity_avg60": disparity_avg60, "disparity_avg120": disparity_avg120, "upper": upper, "lower": lower, "macd": macd, "macds": macds, "macdo": macdo, "fast_k": fast_k, "slow_k": slow_k, "slow_d": slow_d, diff --git a/stock/analysis/AnalyzerSqlite.py b/stock/analysis/AnalyzerSqlite.py index a0e4291..5bf05c0 100644 --- a/stock/analysis/AnalyzerSqlite.py +++ b/stock/analysis/AnalyzerSqlite.py @@ -176,7 +176,7 @@ class AnalyzerSqlite: candle_data = [candle_stick, avg3, avg4, avg5, avg6, avg10, avg12, avg20, avg36, avg40, avg48, avg60, avg120, avg240, avg300, bolinger_upper, bolinger_lower, changeLine, baseLine] #candle_data = [candle_stick, bolinger_upper, bolinger_lower, changeLine, baseLine] - volume = go.Bar(x=ymd, y=volume, name="volume") + volume = go.Bar(x=ymd, y=volume, marker_color='red', name="volume") volume_data = [volume] disparity_avg5 = go.Scatter(x=ymd, y=disparity_avg5, name="disparity_avg5", line_color='#8F8203') @@ -187,38 +187,42 @@ class AnalyzerSqlite: disparity_data = [disparity_avg5, disparity_avg10, disparity_avg20, disparity_avg60, disparity_avg120] # macd - macd_line = go.Scatter(x=ymd, y=macd, mode='lines', name='macd') - macd_s_line = go.Scatter(x=ymd, y=macds, mode='lines', name='macds') - macd_o_line = go.Scatter(x=ymd, y=macdo, mode='lines', name='macdo') + macd_line = go.Scatter(x=ymd, y=macd, line=dict(color='red', width=2), name='macd') + macd_s_line = go.Scatter(x=ymd, y=macds, line=dict(dash='dashdot', color='black', width=2), name='macds') + macd_o_line = go.Bar(x=ymd, y=macdo, marker_color='purple', name='macdo') macd_data = [macd_line, macd_s_line, macd_o_line] # stochastic - rsi = go.Scatter(x=ymd, y=rsi, name="rsi", line_color='#8B4513') - rsis = go.Scatter(x=ymd, y=rsis, name="rsis", line_color='#4169E1') - rsi_data = [rsi, rsis] + rsi_line = go.Scatter(x=ymd, y=rsi, line=dict(color='red', width=2), name='rsi') + rsis_line = go.Scatter(x=ymd, y=rsis, line=dict(dash='dashdot', color='black', width=2), name='rsis') + rsi_data = [rsi_line, rsis_line] # stochastic - slow_k = go.Scatter(x=ymd, y=stochastic_slow_k, name="Slow%K", line_color='#8B4513') - slow_d = go.Scatter(x=ymd, y=stochastic_slow_d, name="Slow%D", line_color='#4169E1') - stochastic_data = [slow_k, slow_d] + stochastic_slow_k_line = go.Scatter(x=ymd, y=stochastic_slow_k, line=dict(color='red', width=2), name='slow_k') + stochastic_slow_d_line = go.Scatter(x=ymd, y=stochastic_slow_d, line=dict(dash='dashdot', color='black', width=2), name='slow_d') + stochastic_data = [stochastic_slow_k_line, stochastic_slow_d_line] - fig = subplots.make_subplots(rows=6, cols=1, - subplot_titles=('캔들', "거래량", "이격도", "MACD", "스토캐스틱", "RSI"), - row_heights=[1200, 500, 500, 500, 500, 500]) - for trace in candle_data: - fig.append_trace(trace, 1, 1) - for trace in volume_data: - fig.append_trace(trace, 2, 1) - for trace in disparity_data: - fig.append_trace(trace, 3, 1) + fig = subplots.make_subplots( + rows=6, cols=1, + subplot_titles=("MACD", "스토캐스틱", "RSI", "거래량", "이격도", '캔들'), + # specs=[[{}], [{}], [{}], [{}], [{}], [{}]], + shared_xaxes=True, horizontal_spacing=0.03, vertical_spacing=0.01, + row_heights=[200, 200, 200, 200, 200, 700] + ) for trace in macd_data: - fig.append_trace(trace, 4, 1) + fig.append_trace(trace, 1, 1) for trace in stochastic_data: - fig.append_trace(trace, 5, 1) + fig.append_trace(trace, 2, 1) for trace in rsi_data: + fig.append_trace(trace, 3, 1) + for trace in volume_data: + fig.append_trace(trace, 4, 1) + for trace in disparity_data: + fig.append_trace(trace, 5, 1) + for trace in candle_data: fig.append_trace(trace, 6, 1) - fig.update_layout(height=2200, xaxis_rangeslider_visible=False) + fig.update_layout(height=1700, xaxis_rangeslider_visible=False) return fig