From a1d8bb10f368d73dea4f7eb6c012364f14813174 Mon Sep 17 00:00:00 2001 From: dosangyoon Date: Fri, 12 Aug 2022 03:14:55 +0900 Subject: [PATCH] `init` --- Simulation.py | 25 +++---- hts/BuySellChecker.py | 142 ++++++++++++++++++++------------------- resources/hts.db | Bin 44756992 -> 44761088 bytes stock/util/LabelMaker.py | 59 +++++++++++----- 4 files changed, 128 insertions(+), 98 deletions(-) diff --git a/Simulation.py b/Simulation.py index 91837b0..d5384b0 100644 --- a/Simulation.py +++ b/Simulation.py @@ -49,9 +49,10 @@ class Simulation (HTS): 'close': 'int', 'volume': 'int', 'avg3': 'float', - 'avg5': 'float', - 'avg10': 'float', - 'avg20': 'float', + 'avg6': 'float', + 'avg9': 'float', + 'avg12': 'float', + 'avg24': 'float', 'avg30': 'float', 'avg60': 'float', 'fast_k': 'float', @@ -69,7 +70,7 @@ class Simulation (HTS): buy_line[i] = nan buy_size.append(0) else: - buy_colors.append("#00ced1") + buy_colors.append("#D87D0F") buy_size.append(10 + (5 * buy_weight_line[i])) sell_colors = [] @@ -78,7 +79,7 @@ class Simulation (HTS): sell_colors.append("#ffffff") sell_line[i] = nan else: - sell_colors.append("#D87D0F") + sell_colors.append("#00ced1") # 그래프를 설정한다. buy_check = go.Scatter(x=data['date'], y=buy_line, mode='markers', name="buy", marker=dict(size=buy_size, color=buy_colors, line_width=0)) @@ -86,11 +87,11 @@ class Simulation (HTS): 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') - avg5 = go.Scatter(x=data['date'], y=data["avg5"], name="avg5", line_color='#089B5B') - avg10 = go.Scatter(x=data['date'], y=data["avg10"], name="avg10", line_color='#ff00ff') - avg20 = go.Scatter(x=data['date'], y=data["avg20"], name="avg20", line_color='#1469F4') - avg30 = go.Scatter(x=data['date'], y=data["avg30"], name="avg30", line_color='#000000') - avg60 = go.Scatter(x=data['date'], y=data["avg60"], name="avg60", line_color='#008000') + 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') + avg24 = go.Scatter(x=data['date'], y=data["avg24"], name="avg24", line_color='#000000') + avg30 = go.Scatter(x=data['date'], y=data["avg30"], name="avg30", line_color='#008000') 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') @@ -106,7 +107,7 @@ class Simulation (HTS): 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') - candle_data = [candle_stick, upper, lower, avg3, avg5, avg10, avg20, avg30, avg60, buy_check, sell_check] + candle_data = [candle_stick, upper, lower, avg3, avg6, avg9, avg12, avg24, avg30, buy_check, sell_check] volume_data = [volume_line] macd_data = [macd_line, macd_s_line, macd_o_line] stochastic_data = [slow_k_line, slow_d_line] @@ -180,7 +181,7 @@ if __name__ == "__main__": # to check bying stock_codes = { "252670": ['20220801', '20220802', '20220803', '20220804', '20220805', '20220808', '20220809', '20220810', '20220811'], - #"122630": ['20220810'], + "122630": ['20220801', '20220802', '20220803', '20220804', '20220805', '20220808', '20220809', '20220810', '20220811'], } method = "rule" # "rule", "ml", "answer" diff --git a/hts/BuySellChecker.py b/hts/BuySellChecker.py index 1388df1..114f2b7 100644 --- a/hts/BuySellChecker.py +++ b/hts/BuySellChecker.py @@ -1,4 +1,5 @@ import pandas as pd +import numpy as np from stock.analysis.Common import Common from stock.analysis.Stochastic import Stochastic from stock.analysis.RSI import RSI @@ -195,57 +196,52 @@ class BuySellChecker: if i > START_TIME_INDEX: # 매수 분석 - if i > 740: - # "15:00" 까지만 매수 + if i > 710: + # "14:30" 까지만 매수 return buy, weight if i > 380 + 30 and data["macd"][i] < -25: - if data["avg3"][i] > min(data["avg5"][i], data["avg10"][i], data["avg20"][i]): + if data["avg3"][i] > min(data["avg6"][i], data["avg9"][i], data["avg12"][i]): buy = data["high"][i] - if i < 381 + 30: + if i < 381 + 40: weight = 1 else: weight = 5 return buy, weight if i > 380 + 30 and data["macd"][i] < -5 and data["rsi"][i] < 30: - if data["avg3"][i] > min(data["avg5"][i], data["avg10"][i], data["avg20"][i]): + if data["avg3"][i] > min(data["avg6"][i], data["avg9"][i], data["avg12"][i]): buy = int((data["open"][i] + data["close"][i]) / 2) weight = 2 return buy, weight if i > 380 + 30 and data["slow_k"][i] < 10 and data["rsi"][i] < 30: if data["slow_k"][i - 1] < min(data["slow_k"][i - 2], data["slow_k"][i]): - if data["avg3"][i] > min(data["avg5"][i], data["avg10"][i], data["avg20"][i]): + if data["avg3"][i] > min(data["avg6"][i], data["avg9"][i], data["avg12"][i]): buy = int((data["open"][i] + data["close"][i]) / 2) weight = 2 return buy, weight - # 3분선이 5분선이 돌파가 이전보다 높은 경우 매수 - if data["slow_k"][i] < 20 and data["avg3"][i - 1] < data["avg5"][i - 1] and data["avg3"][i] > data["avg5"][i]: - buy = int((data["open"][i] + data["close"][i]) / 2) - weight = 1 - return buy, weight + # 3분선이 5분선이 돌파가 이전보다 높은 경우 매수 - if data["slow_k"][i] < 70 and data["avg3"][i - 1] < data["avg5"][i - 1] and data["avg3"][i] > data["avg5"][i]: + if data["slow_k"][i] < 70 and data["avg3"][i - 1] < data["avg6"][i - 1] and data["avg3"][i] > data["avg6"][i]: max_avg3 = 0 p_avg3 = 999999 for c in range(1, 50): - if max_avg3 < data["avg5"][i - c]: - max_avg3 = data["avg5"][i - c] - if data["avg3"][i-c-1] < data["avg5"][i-c-1] and data["avg3"][i-c] > data["avg5"][i-c]: + if max_avg3 < data["avg6"][i - c]: + max_avg3 = data["avg6"][i - c] + if data["avg3"][i-c-2] < data["avg6"][i-c-2] and data["avg3"][i-c-1] <= data["avg6"][i-c-1] and data["avg3"][i-c] > data["avg6"][i-c]: p_avg3 = data["avg3"][i-c] break if data["avg3"][i] > p_avg3 and max_avg3 < data["avg3"][i]: - if max(data["avg3"][i-3], data["avg3"][i-2], data["avg3"][i-1]) - min(data["avg3"][i-3], data["avg3"][i-2], data["avg3"][i-1]) > 1: - if i == 382 or i == 383: - if data["close"][i] != data["high"][i]: - return -1, -1 - #buy = int((data["open"][i] + data["close"][i]) / 2) - buy = data["low"][i] - weight = 1 - return buy, weight + #if data["avg6"][i-10] > data["avg6"][i]: + if i == 382 or i == 383: + if data["close"][i] != data["high"][i]: + return -1, -1 + buy = data["low"][i] + weight = 1 + return buy, weight """ # 3분선이 10분 이상 7분선 아래에 있다가 7분선 위로 올라옴 @@ -451,25 +447,25 @@ class BuySellChecker: # 매도 분석 # 10분선 위에서 3분선이 5분선을 하향 돌파 하는 경우 매도 - if data["slow_k"][i - 1] > 60 and data["avg3"][i - 1] >= data["avg5"][i - 1] and data["avg3"][i] < data["avg5"][i]: - if max(data["avg3"][i], data["avg5"][i]) < data["avg10"][i]: - sell = int((data["high"][i] + data["low"][i]) / 2) + if data["slow_k"][i - 1] > 70 and data["avg3"][i - 1] >= data["avg6"][i - 1] and data["avg3"][i] < data["avg6"][i]: + if max(data["avg3"][i], data["avg6"][i]) < data["avg9"][i]: + sell = int((data["open"][i] + data["close"][i]) / 2) weight = 1 return sell, weight - """ + # 3분선이 5분 이상 5분선 위에 있다가 5분선 아래로 내려옴 if i >= 381 + 5: vaild = True - for c in range(1, 6): - if data["avg3"][i - c] < data["avg5"][i - c]: + for c in range(1, 11): + if data["avg3"][i - c] < data["avg6"][i - c]: vaild = False break if vaild: - if data["avg3"][i] < data["avg5"][i]: + if data["avg3"][i] < data["avg6"][i]: sell = int(data["avg3"][i] - data["avg3"][i]%5) weight = 1 return sell, weight - """ + """ # 3분 선이 40분 전부터 게속 20분선 위에 있다가 아래로 내려오면 매도함 if data["avg3"][i] < data["avg20"][i]: @@ -553,44 +549,51 @@ class BuySellChecker: if i >= START_TIME_INDEX: # 매수 분석 - if i > 740: - # "15:00" 까지만 매수 + if i > 710: + # "14:30" 까지만 매수 return buy, weight if i > 380 + 30 and data["macd"][i] < -25: - if data["avg3"][i] > min(data["avg5"][i], data["avg10"][i], data["avg20"][i]): + if data["avg3"][i] > min(data["avg6"][i], data["avg9"][i], data["avg12"][i]): buy = data["high"][i] - if i < 381 + 30: + if i < 381 + 40: weight = 1 else: weight = 5 return buy, weight if i > 380 + 30 and data["macd"][i] < -5 and data["rsi"][i] < 30: - if data["avg3"][i] > min(data["avg5"][i], data["avg10"][i], data["avg20"][i]): + if data["avg3"][i] > min(data["avg6"][i], data["avg9"][i], data["avg12"][i]): buy = int((data["open"][i] + data["close"][i]) / 2) weight = 2 return buy, weight if i > 380 + 30 and data["slow_k"][i] < 10 and data["rsi"][i] < 30: if data["slow_k"][i - 1] < min(data["slow_k"][i - 2], data["slow_k"][i]): - if data["avg3"][i] > min(data["avg5"][i], data["avg10"][i], data["avg20"][i]): + if data["avg3"][i] > min(data["avg6"][i], data["avg9"][i], data["avg12"][i]): buy = int((data["open"][i] + data["close"][i]) / 2) weight = 2 return buy, weight # 3분선이 5분선이 돌파가 이전보다 높은 경우 매수 - if data["avg3"][i - 1] < data["avg5"][i - 1] and data["avg3"][i] > data["avg5"][i]: + if (data["avg3"][i - 1] < data["avg9"][i - 1] and data["avg3"][i] > data["avg9"][i] or + data["avg3"][i - 2] < data["avg9"][i - 2] and data["avg3"][i - 1] > data["avg9"][i - 1] and data["avg3"][i] > data["avg9"][i]): + max_avg3 = 0 p_avg3 = 999999 - for c in range(1, 50): - if data["avg3"][i-c-1] < data["avg5"][i-c-1] and data["avg3"][i-c] > data["avg5"][i-c]: - p_avg3 = data["avg3"][i-c] + for c in range(2, 50): + if max_avg3 < data["avg9"][i - c]: + max_avg3 = data["avg9"][i - c] + if data["avg3"][i - c - 2] < data["avg9"][i - c - 2] and data["avg3"][i - c - 1] <= data["avg9"][i - c - 1] and data["avg3"][i - c] > data["avg9"][i - c]: + p_avg3 = data["avg3"][i - c] break - if data["avg3"][i] > p_avg3: - if data["slow_k"][i] < 30 or i < 381 + 10: - buy = int((data["open"][i] + data["close"][i]) / 2) - weight = 1 - return buy, weight + if data["avg3"][i] > p_avg3+3 and max_avg3 < data["avg3"][i]: + # if data["avg6"][i-10] > data["avg6"][i]: + if i == 382 or i == 383: + if data["close"][i] != data["high"][i]: + return -1, -1 + buy = data["low"][i] + weight = 1 + return buy, weight """ # 3분선이 10분 이상 7분선 아래에 있다가 7분선 위로 올라옴 if i >= 381 + 10: @@ -796,26 +799,25 @@ class BuySellChecker: # 매도 분석 # 10분선 위에서 3분선이 5분선을 하향 돌파 하는 경우 매도 - if data["avg3"][i - 1] >= data["avg5"][i - 1] and data["avg3"][i] < data["avg5"][i]: - if min(data["avg3"][i], data["avg5"][i]) > data["avg10"][i]: - if data["slow_k"][i] > 80: - sell = int((data["high"][i] + data["low"][i]) / 2) - weight = 1 - return sell, weight - """ - # 3분선이 5분 이상 5분선 위에 있다가 5분선 아래로 내려옴 + if data["slow_k"][i - 1] > 70 and data["avg3"][i - 1] >= data["avg6"][i - 1] and data["avg3"][i] < data["avg6"][i]: + if max(data["avg3"][i], data["avg6"][i]) < data["avg9"][i]: + sell = int((data["open"][i] + data["close"][i]) / 2) + weight = 1 + return sell, weight + + # 3분선이 10분 이상 6분선 위에 있다가 5분선 아래로 내려옴 if i >= 381 + 5: vaild = True - for c in range(1, 6): - if data["avg3"][i - c] < data["avg5"][i - c]: + for c in range(1, 11): + if data["avg3"][i - c] < data["avg6"][i - c]: vaild = False break if vaild: - if data["avg3"][i] < data["avg5"][i]: + if data["avg3"][i] < data["avg6"][i]: sell = int(data["avg3"][i] - data["avg3"][i]%5) weight = 1 return sell, weight - """ + """ # 3분 선이 40분 전부터 게속 20분선 위에 있다가 아래로 내려오면 매도함 if data["avg3"][i] < data["avg20"][i]: @@ -892,14 +894,14 @@ class BuySellChecker: 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] - avg5_list = close_df.rolling(window=5).mean().fillna(close[0]).values.tolist() - avg5 = [item[0] for item in avg5_list] - avg7_list = close_df.rolling(window=7).mean().fillna(close[0]).values.tolist() - avg7 = [item[0] for item in avg7_list] - avg10_list = close_df.rolling(window=10).mean().fillna(close[0]).values.tolist() - avg10 = [item[0] for item in avg10_list] - avg20_list = close_df.rolling(window=20).mean().fillna(close[0]).values.tolist() - avg20 = [item[0] for item in avg20_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] + avg24_list = close_df.rolling(window=24).mean().fillna(close[0]).values.tolist() + avg24 = [item[0] for item in avg24_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() @@ -925,7 +927,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], - 'avg3': avg3[i], 'avg5': avg5[i], 'avg7': avg7[i],'avg10': avg10[i],'avg20': avg20[i],'avg30': avg30[i],'avg60': avg60[i]}) + 'avg3': avg3[i], 'avg6': avg6[i], 'avg9': avg9[i], 'avg12': avg12[i],'avg24': avg24[i],'avg30': avg30[i],'avg60': avg60[i]}) # stochastic 계산 stochastic_df = self.stochastic.apply(STOCK, n=30, m=5, t=5) @@ -957,7 +959,7 @@ class BuySellChecker: temp = {"date": point_temp, "open": open, "high": high, "low": low, "close": close, "volume": vol, "upper": upper, "lower": lower, - "avg3": avg3, "avg7": avg7, "avg5": avg5, "avg10": avg10, "avg20": avg20, "avg30": avg30, "avg60": avg60, + "avg3": avg3, "avg6": avg6, "avg9": avg9, "avg12": avg12, "avg24": avg24, "avg30": avg30, "avg60": avg60, "macd": macd, "macds": macds, "macdo": macdo, "fast_k": fast_k, "slow_k": slow_k, "slow_d": slow_d, "rsi": rsi, "rsis": rsis} @@ -1309,8 +1311,8 @@ class BuySellChecker: sell, weight = self.getSellPriceAndWeight_3000(data, last_index) buy, weight = self.getBuyPriceAndWeight_3000(data, last_index) else: - sell, weight = self.getBuyPriceAndWeight_3000(data, last_index) - buy, weight = self.getBuyPriceAndWeight_3000(data, last_index) + sell, weight = self.getSellPriceAndWeight_15000(data, last_index) + buy, weight = self.getBuyPriceAndWeight_15000(data, last_index) bsLine['buy'] = [buy] bsLine['buy_weight'] = [weight] diff --git a/resources/hts.db b/resources/hts.db index 80594421806e6f529bfdd4e29eed1111fd66b2aa..120b00cda2f271b9ba4dd0556a42c101b6d2e362 100644 GIT binary patch delta 10442 zcmZvh2Y3|K-iLS2&d&C18X*u$LJfU)(+DjDM0yKK009FiU8*7=NFq%EB?vl^k^@M| zE=8hV8{kqDlxrba5lbS92#8?23SRtvzb&wQ&n3_M?wY8@vbJ2OoeB!AVdBPJxfW z$KVt2DfkS04o-tFz!~r*_zHXtz5&&s27C+7g73ih;2ih?oCiOG3*aKS1bzaS!O!3d zxC(v&zk=Vu@8A#cAMhvm3tR)&!QbG&;0E|-CGP#zfD)9EQYjOqQD(|QSt%Q3ryP`% z3YOyHw^%BUil-8&M5-2*MAfE}sXA0$Dut>?)u$Rz4XIQrjcPOgg*I#Hde zE>s@XmCC2OQQfIKs2-#dVrcnO{Zp1GpSkBZ0bSk zA!-iwFg2H&N6n`mp%zdJsYj_rR54XTJw`32mQYKnWz=%&aq0(m?6e(C^qkb08}P=~0))Dh|^^%nIub&NVr zy+gfAouK|ry+^%IeL#IkousO$Q`AS)$J8g(r_^WE=hSKH3+fE@CG{2cHT4ZuP1R7} zQfH~}sPCzB)DP5o>PPAVb&E;S|4@HYe^J+{>(t-W zf2kYPKg!DLg92X^N>D~hrA(AYnJEiprEHX)a!^hxhH_D{R2&sgB~Xb}Eh>qsO(j!x zsJc`NRgbDqHJ}<&sZ<)(h-yqVp_)?7sOD5U)q-kCwW3;6ZK$?XJIYOYC@+;kWl~vG zHkCuQr*f$dR7a{4)tTx-518H4#37-i%gynNCbDYb@rnp#V(qn@FjrF5!{dX8F8ZJ;(%o2YV1Qk$tQ z)K=eI&)+K#*WNT(xkoWykga_#LiJ= z(Kw$l$!?u|VxF>6&##JKuJ7A)Al}yA<8kM@vxHVlk88CzL2j2ZWssX)q}bv3ez|_e}-SQPq*J^8>l=b>be@*GHkV#p~^AEZ@sQ`P-a=b zQ5slg$Bc~W8q>r!MK5)Cs3)(W7`th#qlY8?%`rYiC043tse9xGfS(rM_xfcYX^29`-#Z8 zDbswSq1-gtC-w@5OU~?FS7{*^B5799`EogP@HCNN<7jw12n>u4xDgm2Q>9NN%a5k` zL?;nr36)^S`0*by91oo#yG->7jb$FYSp-W(;BCDoc20sUT8m2&(2;GXBGbC$D)rWG ze#jJkvD_FSO?EWzF@uhveeW9#iK-i1q34E#Bz~0^7%$e?VIIcK8cD&};=qNVzv@N%tv2?WVw62sl zinfWmGHH!Zw2%`Lhbd0^`g6QUQxO@e2;1|r=Eze@%U}<@85qcxk8g?#6}a(W}PsBKuRWEk|+uG+%BDV7_S z8p~Uj3d<_XbW4FH%aUyV+x(6BhyhXUr7cWjksUwq37dTAh!4x~k`q2L>{gq-*~l(S z(WPLUy*#_#t?In&Qc6^seX1Lk=8)8hN@HFmCP$^&o!Yn39(E@wD$VZHib``xF@}*L z_ON*gQE9d>K9uH=dqP8w@e56Ew}%akjmp3V>LrQ25-eQf+?cr1bJQm~-YV10HrS)m zY=bQ-%{Ex0(rkkzD$O>SLun0F;C_>FZ}Bd^*$p>`MU6^xSd5WV+__n~LYCY*#e#)4 zi>=USuFeT|3~96?;h#tmNTU@AH=>Hj6w>*2RL777wI*DPIt8^R{1r;G3N8c*dVZVX z;VLpQ5DEX0#V92?a1yRm1M}YViG7N$@7?SS{jSTQm`q(PPJ_YV6?YgmxxZIh<^0$B zs&%HdmF0Wwn)Z@5RcmUImf@zaO}c52$!bYZkE#pQEc5%u%f_9?B4ZtKN~|<5H|NXI zrBZkUff;K>g<|YpR-soG{nbu3IESAzx%!k(I8}kDR8GxS!r?e~dwU;ySK_LZ%A4x+=ai!HQ~5rbdp+c^^m0(o1@) zk)i@Oqq4HP#m&rpKZ#_P`6bPjaC_q2?nn)WmmUz^$|{6ZKB^Gj1YY3W$g%tO1uH+i z?+KJQU>Q0emz5JasKncFbf>I5xeLV(!cmi~_!PC77=Bb%RqqfUc>$3)4%SXtGjmI% znE0$r6w{T6^piX~Ka@WS(-hMKqu3)jl6!J^a9+5uUZ3AAOnG@(q}I61n++D0V18M- z*%zrwevXsSCiKxM51;jkO!+Y`V4-3Pr&NqkoTA98&wL_V)<=6|WOsajQkfHsWd$0X z_KEMbMTZR@!+e9i|-BdMY$*xvC6y3V@fB(@2=OKE1h>b4URV)4?5b~ z&)c`!N7<8Yr);ZiJ#E5z(E6}zmepgqU@3C7veYr3GOsj?nD4ZQHLvNCX@{xEl%js3 zt`=iOJ>@fHjnY@q42KPeF_miB>*ULiF`#Ybp`Wm{#(LUEE`#a)RG}TvJ>T~As>oR{ zJXFkvJ30+@#z0S> z!*=tB;I%+FGrFSqTeDaFbSQh35q(%5$7!K~9lCqUtT_zDN~&Q~ zvR|ZUJ4aZ~;yRRC9&~oLbh4y6FItS|bLMx=yUlaWBh6jSO`IQSm$Z}G%UYSXKr7Pj za8_!~^^+$HJ8atL7jxy;*nuX?)GWU+2XYj@IHxF9*}&)*IrXhZZ4!r zyzX2raY>3+r+zJ~oP|6?WY0@GMNHr$e9sk%Ss(LC-IrVLhs#)u zcI`mJ7{B--Zqefg+Bz|mC9GF9##ut#YkN5^B9 z$fTxzv0Yxj{=8@|i(C5fdgUA<^DN38vZje&WChNklx9k86ueyNXs`{kW!jRhe_N}q zZ&@ppj=DSb$O2jF_KSLao*S_?(W<5Ad0S&kLc? zfadj!4MqgEVlam&*1#Y5eA+0t_26 zlCHjZEui-slNZTy7Xm5KSppjnnW8E_X&&Sk?P8SX*3H(j)+Uy7hVurW?1Er@IcCr@ zQPi#CC;P-THx=^skU(>VP^pk}yV zG}Xj|%#uq0+(V z7>Cyq?qW4brq1vSO>?xePPZ1w)<_hn_991&eANBCsHfSl@?DYKj6}L74p|ynztP<@ z8aD~O;;Zkn|7!otzTYnGi|rFacTEa!8vL{O4L!w2y_bxgg{ox1Ok4_CICdM>#-;e4 zrU+|}RGz!6q&q@OX=WDwUvk&2H!GPLSWuFljSk?sFXJ&CJbNas3pJ9jlrp`1{iByO`7Oa3 zYC|^PFumR;LH@V_Kh1jWR(qZDi$#863%x6Jqv?28xWF%J8D(0-EOA%xZJ)AJnu{?* z8YxW;=L|b-kJ|EWs`a>ag|(m6WjSS8XDP(~{fxQXTqFm%y`ri06Z~F|z`p$(y}0_% z#=*IpUp2J3yzv<3Zk)%HHzRKh7-?A1fm2u>Uh{?$J{s?F=Z(kF@p*-Y3r}(m_s~6C zhNPD-=5p}D3fzh&MyJWED|xe>LCfwn1*c~y%cx~oG32U>yD&L}^##@=GR24mkY}_F z{Dd+lskbJyNzPmC#{%RhBt3y@UL*rA|9>(V-Kj7t39=H0+60E^ezDca3?h_4j@y9M z27z68HV&RK3}x+2Xun%^9d#{p^>#U8K8#rtb5~4l>=wRte&O8YEOIt>eDA1mOm?)k zU$$4;AGGJ#uGtRQ7Af15@p}8%_v$rM(hV03yRoHuL7S;%nEo)mZhFMj*<`@0jiqW& z)nB>MBBi4)ZE;t^puC+KvL$wg`sI2>Ods|b)y59|6d@` zYCl$Pp=8S~XhPdSZ`62DQMO6*A-`xf6#I`N+y4J?dk@9!{iRtdjSOcE+stFlO||oy zAMcOanSL?7Y?@%3{afPveaH2nhePdnat2O!cumJ4Q56{SNF5AAv zAFqwag432!W!8Zf(v7G|e!(cG?Vj-b426@Ahi~~krqCdU!h26}Xt8?i(YJ`%k&-VW ziZXJ`_Oz8%mpMvj(6u`9z2wKjzg3z{I?T;YzYcptzg4Qd3xSl-xP{7o8iDXY1_OZ) z5!k5W$8t}CEI}1*0(YZT>73AejKQDS)`9eY`^D!?Vx6ux4D~EY21^nj*OKonVoH^q!I!o5D+P0H$8w5P`dP9O%Q33qC#i_QBXisLfr_+10s+e zK#F%~K^Q7h*5w5 zD$sxv=)eWszyrL%2ckeU;CZni4#b06AOR$TB#;bJKq{yW(m)-M4(ft>pgza|nVc56~0z0=+>W&=>Rr{lNe*5DWr?!4NPM3n z07^j_7zG{#qrpR93>XW>f$?AhC8o#kYEGY2wno4z{_AW*aEhK8V~{o*ao(P9pDwP6YK)J!5;7`_#5~;_y>3m zybj&~Z-TwxEwB&l2PQZG4uV7AZSW2_432=K;23xpya$ehe}ebH3Ge|p2~L3z!AIa@ za2k99&VWzBS#S=V2mb;Wz-Qoda1mSrUx0suFTrJS1zZJRfv>?g;9Kw=_#XTKu7T^| z2KW!S34R1Wf&YS^!7cC$_!ayHeg}VmKf&!K`0g(Sl%P~fqnwmZxhOZ~p}drjilU;a za4WHl;;4A47L`CHQb|-Yl|rRbwW&0!4wX*TrRq`jsSGNUYCtulvZzK>W9lxd33WHs zlxjvbr&>_iR7=WF1*jYR#$Tsw35j>P&T^x>DV!?$rHM52`2Ci|S4Fq54w&sQ%OdY9KX;8cYqL zhEl_*;nWCfB=rDQN|jNgs0XRh)I-!5YAiL58c$82%BhE`iPR)&GBt&IgnE>EjG9VK zqbjKB)C_7SHH(@}Jx`psddzg)Ot!%8>o%cOVlRnWok3Eh1yEhP$9~owo%)u z9n>q-PHGpmo7zLYO8t%cJM|ChHR^Th4eCv5FZC9+kJ?X})B)-sb%=VKdWSkp9ifg= z$EbIy_o(C4KdJYr6VwOPN$M2!A@vdUF?E{yggQfgN}Z+7QRk_DQ5UGssL!d3)FtW* z>fh9t)Me@lb(Q*x`kMNN`j+~R`kwlMx<*~6ZczWBZc;x|KT-dsex`0wzfiwYzfr$a ze^7r?x0NLq_Xz|FB`B5BC?};;F3L@LC@A>QVKn3@VdqKsBVYs76#{>Mp7YbvMNP2rG`<%sS(sj>H(^hDx*eG4^pG4ho~{sSZW+Ko|-_FQx6Lh zKYt?YQFW}|(scPJi338e>QJJ@o9A*SiQek6-X0k!m?TPSZKw|EcoLV@H9hdp`s$j* zrSowBnoLch9-$tk9;2pG)2Iq+IyHluNzI~WQ;$<~sJYZUs*-wwdXkz?EufyFo~9O3 zi>SraGt?65S?W3Jd1@(DMJ=P2Q!A*I)GBH<6{M=E7pOJVT528jBDJ29)COuJ^%Av- zdYRfR%=rad#P3z^ykb2u4{H^?vHWO)Jn(dl&^&qhxq7W^uH&V^7-46Z?mxOkKwE{m z|7eZql&Ve_-DmNkns8Bu1O)0;`Hb1NnNd2c4!k4GnE>7 z5=Ro(PYww!d>~Z|=t;fo(61-;w9EUUBGZaBf1#cfJb3qS339{ktwJ*^?g@$24P;E| z%i^lMS-MFyll96%;*0=E{dcB12fm<&m)=vB!>Q;Xt~%Wn4(SXP@rO#ZcGFO7xK`<%E#fuEkDu zOpzrLlaobo8<_#8YFL5eRwzFz|0|72AGIsc(h;jAtyoVwEK4w?@Oe9em*OfCWa)~K zaGF7M^@w5}l=IPJnrwx__x|5SY$Q*v=b*O3Q}<5^2_?hj>+X15sVAftEBI|>1($Kb zPrt|&#I8ubTb@LmVopSUfMR{%w3CzVI0r>Zk+?`tPP9*Gf$=s}f>+}zqNN`vJDt3K zx9y{ISBAtP)$S({(34gBz@%#Hf?${l@Rc64c@`1+<;gO9HCun@aw3@}bCwI0(Or(O@+35XUd7Wd>^7P~)JIvLS3$4&xiN%`Oz~yi_7AYByU`C0axuUGJez5ZT zv_-+*8AG!~OxEgU2UCKv2c16o*~tWvx<1+vE@xhmo|r4IM;X|yd4+mnP9!eS69ZN( z^73We+aXa0eJ8ez9M9Dgv#r={ii3HIGmxVv#@eR@0&>HVkZ5gJ`_YRp5~CMyBt|cu zNSv=Hx+5`qaz$eFq+7Ava1<9bk`L&KS|s-CiK@K#F28g6_)QU!82u_%tmUI$d1=EJ zN`j0z781HvpeNjp)aC05e@5awJ>d^4mYYzR8OaCqgkK}EUr+cY9H-*yCET*ZB0b?} zD>Qp!EW0&1G;jLFuC#F%VaB*uEyj>MR3Y9z*FQ|vf^$tFi) zOg1SJW3q{n82u(hV)R=p5~JVvNQ{2tWa<0ZVWxH>BzEAJ2798G9Ek~dgPkw@7;XJL z%R?W8L|b$8r5f?DvbriWH&|G?xt5&VTUXq&SH>A7EjY1qvrj%+TB@{HaSN2E&V)q1 ztoQGbh}Jq(*Cbep_&|ZLWB9McacnR0wd}&}k;3>$Vcwm>H5X7AXBW2m(rz&}QkZk6 zaM>Uf#@K~(K188xk6|oTeBoR{T#>JvuY|qS?90%&`yEKG%O|*so4(UtJ@la*iwZd!$YY z*X7D?pN2%dsBzdIOHPMGEZW&R&rU34LPbKB^)y7DJP|3FV;3ZSVxRH2ov1>KgOyqK zr{R&qGp$5|zc}BIHR{N9iat94Ezht^zloGizf+o56q$ySUxCsJ>xh|tHYBd-PKTq| zFdM# zxy4!POw&$lOSP_=s_s)~sJY??Q6ol)bmbFenbKWxIu1ByJFs*;g-L@*{_x*;N>F%kYp3WH|=zV_~-4;kL+7TUZHm7b-F} zmejS|$|;Ck9kuZxxg|bc3N!9m~Ub>$CSpT zMW2qYitZlmj5-iCD=N=-%@^`L=&R>F>s{gP;dOZqdLH)_y8q+e?jGyTbe(stcJ+37 z^>_4ndMoFT&R3k{oDH;pX+f=z9C;m2PMAkXmu2+~Q6Pi23{fiA{%VNkvf(cV?%7s6 z9`P0{He2K9JSS&gE-zuf_qdMoHo{RyuGjFt&n&{;W?wMlK9+wUoTvQ zUcQdXzDvlL*{A;V*O0it!V!@|ev|mu(Y>uTnjCI5DaZeAFYPe<%w3VhP&@H+IDu1! z*r&V^9v0djY*)1XBP9BAoCEEO+mV3}uoKaLhD0?h`dW$jK%h7>p7_s^?_=eo1GsMX zIHQ)!mbXLV!#fWZRsL2PFQ(!-CRkPS%aj*47-EL}0Z$Tc)2|rfdqrLrc(9Rv)ew#3 zDx_*T{kT0XkX49NcovjUwAx5FYmahMeH)aY#5-WY?gdfmSG=MMazS9*&|| z{t+%m3w`z@)5LnVNR^d%^N7UeLHuBbZ<(nY?#_7n!cCIz5QznLh+*Z+3`{uH%!o0> zmH4#9-1bvrvtz!Bc`0UiOmg(8=q1seqLrwI!v$nj+4MwPJ**uUt|#DGw=49N##C8&6g=(^^#h5qu(}VG=srmMzPk!+>PhGR}Y4 zC_`kKix58|c(j3i^f+3L){3jQWy(G%X(5}AHpD_!)UzwRI49cNjr27UZl6`Bxi;Il^>gelFeWfG@ug6tr(vR0@P3F%qL|xhE5$sDj z9hrD@5#oAE_$@WrnU{k%EO`*`%qekD*UdDriNOfTsYGZ>G+l@%Jmu-) z@wwl3SGoJSlU-+B>s$|nCsm`D>)Fm5&R3n&oQ2vi+FRN@t%K%NkEu)4p3;BaP?CZR zOY<9JuW!$mH&$UtJC7_kgu=w#Rw6F17~>m6I=|PddV7=bT$-EzU15ljii^n8vSV}F z4G;efs+fm!Q|xR2Ck{e>Q2cRZlkKcOoE_AzujgZA@c>kf7UT!Z3_Q>wfj6LVA{rwJ zC-4Tugn1%ph>a>sRBLRq8%m<&o!tkDqkvF zl?h67$2CXr;DO?1=EyyUIH4&+W#;P~{AauDu@12l>AUU3U^_81k{Dzq%wew?;w}|G za;IL!pks3a?WTnP%EdY?v%G|#yXLWh+#El$)9_dB*z$v%_og8h%kwy+p=`F7JI{*8 z{S}*=5l<6Jk=(eCS0)daj$5p3SS(hq(9Y%}H=M-uLbkxlnqBuBVxOXfr0W1~8U4L) zdgtJKqk4{b7JKgZ#NvCi(mlxj-junr^s9Qv-eP}qRyd2a-?aT&CAOHR9#I#o-PIUz zN~{zEMQ!E0vR)}uvK&`rrW}dEUpQ!p?y}kUoJjXW;kywsS@IdgwdJt486W*CHZ^3{ zYWOnkNVYC&E&P<(yQ_!e%a?H=>CS;ddxLesMlP=2ktqA%>=seE1<3csw0rcuY|5jC p7{bl8!)YCk!xiY;t_ykWIGWR}=Hv;CD~27b_HJr|P4;Ql{{e`UC=~zz diff --git a/stock/util/LabelMaker.py b/stock/util/LabelMaker.py index 010bad3..865cbc6 100644 --- a/stock/util/LabelMaker.py +++ b/stock/util/LabelMaker.py @@ -289,24 +289,51 @@ if __name__ == "__main__": labelMaker = LabelMaker(RESOURCE_PATH) view = True - stock_code = "252670" - ymd = "20220809" + stock_code = "122630" + ymd = "20220811" if view: - labelMaker.makeLabel(db_filename, "252670", "20220809", "0930", 1) - labelMaker.makeLabel(db_filename, "252670", "20220809", "0931", 1) - labelMaker.makeLabel(db_filename, "252670", "20220809", "0951", 1) - labelMaker.makeLabel(db_filename, "252670", "20220809", "0953", 1) - labelMaker.makeLabel(db_filename, "252670", "20220809", "0954", 1) - labelMaker.makeLabel(db_filename, "252670", "20220809", "0955", 1) - labelMaker.makeLabel(db_filename, "252670", "20220809", "0956", 1) - labelMaker.makeLabel(db_filename, "252670", "20220809", "0959", 1) - labelMaker.makeLabel(db_filename, "252670", "20220809", "1509", 1) - labelMaker.makeLabel(db_filename, "252670", "20220809", "1515", 1) - labelMaker.makeLabel(db_filename, "252670", "20220809", "1516", 1) - labelMaker.makeLabel(db_filename, "252670", "20220809", "1518", 1) - labelMaker.makeLabel(db_filename, "252670", "20220809", "1519", 1) - labelMaker.makeLabel(db_filename, "252670", "20220809", "1520", 1) + labelMaker.makeLabel(db_filename, "122630", "20220811", "0905", 2) + labelMaker.makeLabel(db_filename, "122630", "20220811", "0910", 2) + labelMaker.makeLabel(db_filename, "122630", "20220811", "0911", 2) + labelMaker.makeLabel(db_filename, "122630", "20220811", "1030", 2) + labelMaker.makeLabel(db_filename, "122630", "20220811", "1034", 2) + labelMaker.makeLabel(db_filename, "122630", "20220811", "1109", 2) + labelMaker.makeLabel(db_filename, "122630", "20220811", "1110", 2) + labelMaker.makeLabel(db_filename, "122630", "20220811", "1111", 2) + labelMaker.makeLabel(db_filename, "122630", "20220811", "1207", 2) + labelMaker.makeLabel(db_filename, "122630", "20220811", "1211", 2) + labelMaker.makeLabel(db_filename, "122630", "20220811", "1228", 2) + labelMaker.makeLabel(db_filename, "122630", "20220811", "1229", 2) + labelMaker.makeLabel(db_filename, "122630", "20220811", "1230", 2) + labelMaker.makeLabel(db_filename, "122630", "20220811", "1231", 2) + labelMaker.makeLabel(db_filename, "122630", "20220811", "1232", 2) + labelMaker.makeLabel(db_filename, "122630", "20220811", "1249", 2) + labelMaker.makeLabel(db_filename, "122630", "20220811", "1303", 2) + labelMaker.makeLabel(db_filename, "122630", "20220811", "1304", 2) + labelMaker.makeLabel(db_filename, "122630", "20220811", "1420", 2) + labelMaker.makeLabel(db_filename, "122630", "20220811", "1421", 2) + labelMaker.makeLabel(db_filename, "122630", "20220811", "1436", 2) + labelMaker.makeLabel(db_filename, "122630", "20220811", "1437", 2) + labelMaker.makeLabel(db_filename, "122630", "20220811", "1438", 2) + + labelMaker.makeLabel(db_filename, "122630", "20220811", "0949", 1) + labelMaker.makeLabel(db_filename, "122630", "20220811", "1000", 1) + labelMaker.makeLabel(db_filename, "122630", "20220811", "1001", 1) + labelMaker.makeLabel(db_filename, "122630", "20220811", "1016", 1) + labelMaker.makeLabel(db_filename, "122630", "20220811", "1017", 1) + labelMaker.makeLabel(db_filename, "122630", "20220811", "1045", 1) + labelMaker.makeLabel(db_filename, "122630", "20220811", "1049", 1) + labelMaker.makeLabel(db_filename, "122630", "20220811", "1126", 1) + labelMaker.makeLabel(db_filename, "122630", "20220811", "1127", 1) + labelMaker.makeLabel(db_filename, "122630", "20220811", "1315", 1) + labelMaker.makeLabel(db_filename, "122630", "20220811", "1316", 1) + labelMaker.makeLabel(db_filename, "122630", "20220811", "1317", 1) + labelMaker.makeLabel(db_filename, "122630", "20220811", "1458", 1) + labelMaker.makeLabel(db_filename, "122630", "20220811", "1459", 1) + labelMaker.makeLabel(db_filename, "122630", "20220811", "1500", 1) + labelMaker.makeLabel(db_filename, "122630", "20220811", "1501", 1) + labelMaker.showLabels(stock_code, ymd) else: