init
This commit is contained in:
56
hts/BS.py
56
hts/BS.py
@@ -16,6 +16,58 @@ class BS:
|
|||||||
|
|
||||||
return
|
return
|
||||||
|
|
||||||
|
def getPriceAndWeight(self, data, i):
|
||||||
|
buy, weight, sell = -1, -1, -1
|
||||||
|
|
||||||
|
# sell 분석
|
||||||
|
if (data["High"][i] - data["Close"][i]) / 2 + data["Close"][i] > data["upper"][i]:
|
||||||
|
sell = data["High"][i]
|
||||||
|
if i > 300:
|
||||||
|
if data["High"][i] > data["upper"][i]:
|
||||||
|
sell = data["High"][i]
|
||||||
|
|
||||||
|
# buy 분석
|
||||||
|
if data["slow_k"][i] <= 36:
|
||||||
|
if data["Low"][i] < data["lower"][i]:
|
||||||
|
buy = data["Low"][i]
|
||||||
|
if data["slow_k"][i] <= 25:
|
||||||
|
if data["slow_k"][i - 1] < data["slow_d"][i - 1] and data["slow_d"][i] < data["slow_k"][i]:
|
||||||
|
buy = data["Low"][i]
|
||||||
|
|
||||||
|
if i < 40:
|
||||||
|
if data["slow_k"][i] < 25:
|
||||||
|
buy = data["Low"][i]
|
||||||
|
|
||||||
|
# weight 분석
|
||||||
|
# rsi가 rsis 위로 올라오며 15 이하일 경우 10배로 주문함 (14:30 이전)
|
||||||
|
if data["rsi"][i] < 15 and data["rsis"][i] < 15 and data["rsi"][i - 1] < data["rsis"][i - 1] and data["rsis"][i] < data["rsi"][i]:
|
||||||
|
buy = data["Low"][i]
|
||||||
|
weight = 4
|
||||||
|
|
||||||
|
if data["slow_k"][i] == 1:
|
||||||
|
weight = 4 # 8
|
||||||
|
elif data["slow_k"][i] in (2, 3):
|
||||||
|
weight = 3.5 # 7
|
||||||
|
elif data["slow_k"][i] in (4, 5, 6):
|
||||||
|
weight = 3 # 6
|
||||||
|
elif data["slow_k"][i] in (7, 8, 9, 10):
|
||||||
|
weight = 2.5 # 5
|
||||||
|
elif data["slow_k"][i] in (11, 12, 13, 14, 15):
|
||||||
|
weight = 2 # 4
|
||||||
|
elif data["slow_k"][i] in (16, 17, 18, 19, 20, 21):
|
||||||
|
weight = 1.5 # 3
|
||||||
|
elif data["slow_k"][i] in (22, 23, 24, 25, 26, 27, 28):
|
||||||
|
weight = 1 # 2
|
||||||
|
elif data["slow_k"][i] in (29, 30, 31, 32, 33, 34, 35, 36):
|
||||||
|
weight = 1
|
||||||
|
if data["rsi"][i] < 10:
|
||||||
|
weight = 3 # 8
|
||||||
|
|
||||||
|
if i <= 20:
|
||||||
|
weight = 1
|
||||||
|
|
||||||
|
return buy, weight, sell
|
||||||
|
|
||||||
def checkStatus(self, STOCK, last_index):
|
def checkStatus(self, STOCK, last_index):
|
||||||
status = set()
|
status = set()
|
||||||
|
|
||||||
@@ -235,7 +287,9 @@ class BS:
|
|||||||
|
|
||||||
# stochastic 계산
|
# stochastic 계산
|
||||||
stochastic_df = self.stochastic.apply(pd.DataFrame(STOCK))
|
stochastic_df = self.stochastic.apply(pd.DataFrame(STOCK))
|
||||||
stochastic_df = stochastic_df.fillna(100)
|
stochastic_df['fast_k'] = stochastic_df['fast_k'].fillna(float(stochastic_df['fast_k'].iloc[9]))
|
||||||
|
stochastic_df['slow_k'] = stochastic_df['slow_k'].fillna(float(stochastic_df['slow_k'].iloc[14]))
|
||||||
|
stochastic_df['slow_d'] = stochastic_df['slow_d'].fillna(float(stochastic_df['slow_d'].iloc[19]))
|
||||||
fast_k = stochastic_df['fast_k'].values.tolist()
|
fast_k = stochastic_df['fast_k'].values.tolist()
|
||||||
slow_k = stochastic_df['slow_k'].values.tolist()
|
slow_k = stochastic_df['slow_k'].values.tolist()
|
||||||
slow_d = stochastic_df['slow_d'].values.tolist()
|
slow_d = stochastic_df['slow_d'].values.tolist()
|
||||||
|
|||||||
65
hts/HTS.py
65
hts/HTS.py
@@ -531,45 +531,11 @@ class HTS:
|
|||||||
bsLine['sell'] = [-1 for i in range(size)]
|
bsLine['sell'] = [-1 for i in range(size)]
|
||||||
|
|
||||||
i = size - 1
|
i = size - 1
|
||||||
if i > 20:
|
if i <= 20:
|
||||||
if data["High"][i] > data["upper"][i]:
|
return -1, -1, -1
|
||||||
bsLine['sell'][i] = data["High"][i]
|
|
||||||
|
|
||||||
if data["slow_k"][i] <= 36:
|
|
||||||
if data["Low"][i] < data["lower"][i]:
|
|
||||||
bsLine['buy'][i] = data["Close"][i] - 5
|
|
||||||
if data["slow_k"][i] <= 25:
|
|
||||||
if data["slow_k"][i - 1] < data["slow_d"][i - 1] and data["slow_d"][i] < data["slow_k"][i]:
|
|
||||||
bsLine['buy'][i] = data["Close"][i] - 5
|
|
||||||
|
|
||||||
# rsi가 rsis 위로 올라오며 15 이하일 경우 10배로 주문함 (14:30 이전)
|
|
||||||
if data["rsi"][i] < 15 and data["rsis"][i] < 15 and data["rsi"][i - 1] < data["rsis"][i - 1] and data["rsis"][i] < data["rsi"][i]:
|
|
||||||
bsLine['buy'][i] = data["Close"][i] - 5
|
|
||||||
bsLine['weight'][i] = 10
|
|
||||||
|
|
||||||
if data["slow_k"][i] == 1:
|
|
||||||
bsLine['weight'][i] = 8
|
|
||||||
elif data["slow_k"][i] in(2,3):
|
|
||||||
bsLine['weight'][i] = 7
|
|
||||||
elif data["slow_k"][i] in(4,5,6):
|
|
||||||
bsLine['weight'][i] = 6
|
|
||||||
elif data["slow_k"][i] in(7,8,9,10):
|
|
||||||
bsLine['weight'][i] = 5
|
|
||||||
elif data["slow_k"][i] in(11,12,13,14,15):
|
|
||||||
bsLine['weight'][i] = 4
|
|
||||||
elif data["slow_k"][i] in(16,17,18,19,20,21):
|
|
||||||
bsLine['weight'][i] = 3
|
|
||||||
elif data["slow_k"][i] in(22,23,24,25,26,27,28):
|
|
||||||
bsLine['weight'][i] = 2
|
|
||||||
elif data["slow_k"][i] in(29,30,31,32,33,34,35,36):
|
|
||||||
bsLine['weight'][i] = 1
|
|
||||||
if data["rsi"][i] < 10:
|
|
||||||
bsLine['weight'][i] = 8
|
|
||||||
if i<=20:
|
|
||||||
bsLine['weight'][i] = 1
|
|
||||||
|
|
||||||
return bsLine['buy'][i], bsLine['weight'][i], bsLine['sell'][i]
|
|
||||||
|
|
||||||
|
buy, weight, sell = self.bs.getPriceAndWeight(data, i)
|
||||||
|
return buy, weight, sell
|
||||||
|
|
||||||
def getSellingPrice(self, final_price):
|
def getSellingPrice(self, final_price):
|
||||||
# 만약 잔고가 있으면 장부가보다 5원 높게 매도한다.
|
# 만약 잔고가 있으면 장부가보다 5원 높게 매도한다.
|
||||||
@@ -597,9 +563,6 @@ class HTS:
|
|||||||
return 0, 0
|
return 0, 0
|
||||||
|
|
||||||
def buyRealTime(self, stock_code, given_day):
|
def buyRealTime(self, stock_code, given_day):
|
||||||
PREVIOUS_PRICE = 0
|
|
||||||
BUY_COUNT = 200
|
|
||||||
|
|
||||||
timecheckList = pd.read_csv("timecheck.csv").values.tolist()
|
timecheckList = pd.read_csv("timecheck.csv").values.tolist()
|
||||||
timecheck = {given_day + " " + str(second).zfill(6):False for second, check in timecheckList}
|
timecheck = {given_day + " " + str(second).zfill(6):False for second, check in timecheckList}
|
||||||
|
|
||||||
@@ -631,26 +594,12 @@ class HTS:
|
|||||||
final_price = data["Close"][len(data["Close"])-1]
|
final_price = data["Close"][len(data["Close"])-1]
|
||||||
|
|
||||||
if bs_buy_price > 0:
|
if bs_buy_price > 0:
|
||||||
if PREVIOUS_PRICE > 0:
|
BUY_COUNT = int(200 * bs_weight)
|
||||||
if PREVIOUS_PRICE > bs_buy_price:
|
|
||||||
if BUY_COUNT > 240:
|
|
||||||
BUY_COUNT = 240
|
|
||||||
if BUY_COUNT < 140:
|
|
||||||
BUY_COUNT = 140
|
|
||||||
BUY_COUNT += 10
|
|
||||||
elif PREVIOUS_PRICE < bs_buy_price:
|
|
||||||
if BUY_COUNT > 260:
|
|
||||||
BUY_COUNT = 260
|
|
||||||
if BUY_COUNT < 160:
|
|
||||||
BUY_COUNT = 160
|
|
||||||
BUY_COUNT -= 10
|
|
||||||
|
|
||||||
PREVIOUS_PRICE = bs_buy_price
|
|
||||||
|
|
||||||
# 매수 전에 모든 미체결을 취소한다.
|
# 매수 전에 모든 미체결을 취소한다.
|
||||||
self.cancelOrderList()
|
# self.cancelOrderList()
|
||||||
# 현재까지 매입금액이 7백만원 이하일 때만 매수를 한다.
|
# 현재까지 매입금액이 7백만원 이하일 때만 매수를 한다.
|
||||||
self.requestOrder("2", stock_code, BUY_COUNT , bs_buy_price)
|
self.requestOrder("2", stock_code, bs_weight * BUY_COUNT , bs_buy_price)
|
||||||
print("BUY", second, BUY_COUNT, bs_buy_price)
|
print("BUY", second, BUY_COUNT, bs_buy_price)
|
||||||
|
|
||||||
if bs_sell_price > 0:
|
if bs_sell_price > 0:
|
||||||
|
|||||||
@@ -50,41 +50,10 @@ class Simulation:
|
|||||||
bsLine['sell'] = [-1 for i in range(size)]
|
bsLine['sell'] = [-1 for i in range(size)]
|
||||||
|
|
||||||
for i in range(21, size-5):
|
for i in range(21, size-5):
|
||||||
if data["High"][i] > data["upper"][i]:
|
buy, weight, sell = self.bs.getPriceAndWeight(data, i)
|
||||||
bsLine['sell'][i] = data["High"][i]
|
bsLine['buy'][i] = buy
|
||||||
|
bsLine['weight'][i] = weight
|
||||||
if data["slow_k"][i] <= 36:
|
bsLine['sell'][i] = sell
|
||||||
if data["Low"][i] < data["lower"][i]:
|
|
||||||
bsLine['buy'][i] = data["Close"][i] - 5
|
|
||||||
if data["slow_k"][i] <= 25:
|
|
||||||
if data["slow_k"][i - 1] < data["slow_d"][i - 1] and data["slow_d"][i] < data["slow_k"][i]:
|
|
||||||
bsLine['buy'][i] = data["Close"][i] - 5
|
|
||||||
|
|
||||||
# rsi가 rsis 위로 올라오며 15 이하일 경우 10배로 주문함 (14:30 이전)
|
|
||||||
if data["rsi"][i] < 15 and data["rsis"][i] < 15 and data["rsi"][i - 1] < data["rsis"][i - 1] and data["rsis"][i] < data["rsi"][i]:
|
|
||||||
bsLine['buy'][i] = data["Close"][i] - 5
|
|
||||||
bsLine['weight'][i] = 10
|
|
||||||
|
|
||||||
if data["slow_k"][i] == 1:
|
|
||||||
bsLine['weight'][i] = 8
|
|
||||||
elif data["slow_k"][i] in(2,3):
|
|
||||||
bsLine['weight'][i] = 7
|
|
||||||
elif data["slow_k"][i] in(4,5,6):
|
|
||||||
bsLine['weight'][i] = 6
|
|
||||||
elif data["slow_k"][i] in(7,8,9,10):
|
|
||||||
bsLine['weight'][i] = 5
|
|
||||||
elif data["slow_k"][i] in(11,12,13,14,15):
|
|
||||||
bsLine['weight'][i] = 4
|
|
||||||
elif data["slow_k"][i] in(16,17,18,19,20,21):
|
|
||||||
bsLine['weight'][i] = 3
|
|
||||||
elif data["slow_k"][i] in(22,23,24,25,26,27,28):
|
|
||||||
bsLine['weight'][i] = 2
|
|
||||||
elif data["slow_k"][i] in(29,30,31,32,33,34,35,36):
|
|
||||||
bsLine['weight'][i] = 1
|
|
||||||
if data["rsi"][i] < 10:
|
|
||||||
bsLine['weight'][i] = 8
|
|
||||||
if i<=20:
|
|
||||||
bsLine['weight'][i] = 1
|
|
||||||
|
|
||||||
return bsLine
|
return bsLine
|
||||||
|
|
||||||
@@ -98,6 +67,7 @@ class Simulation:
|
|||||||
data['Low'] = pd.to_numeric(data['Low'])
|
data['Low'] = pd.to_numeric(data['Low'])
|
||||||
data['Close'] = pd.to_numeric(data['Close'])
|
data['Close'] = pd.to_numeric(data['Close'])
|
||||||
data['Volume'] = pd.to_numeric(data['Volume'])
|
data['Volume'] = pd.to_numeric(data['Volume'])
|
||||||
|
data['avg5'] = pd.to_numeric(data['avg5'])
|
||||||
data["fast_k"] = pd.to_numeric(data['fast_k'])
|
data["fast_k"] = pd.to_numeric(data['fast_k'])
|
||||||
data["slow_k"] = pd.to_numeric(data['slow_k'])
|
data["slow_k"] = pd.to_numeric(data['slow_k'])
|
||||||
data["slow_d"] = pd.to_numeric(data['slow_d'])
|
data["slow_d"] = pd.to_numeric(data['slow_d'])
|
||||||
@@ -124,6 +94,7 @@ class Simulation:
|
|||||||
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))
|
||||||
bolinger_upper = go.Scatter(x=data['Date'], y=data["upper"], name="upper", line_color='#8B4513')
|
bolinger_upper = go.Scatter(x=data['Date'], y=data["upper"], name="upper", line_color='#8B4513')
|
||||||
bolinger_lower = go.Scatter(x=data['Date'], y=data["lower"], name="lower", line_color='#8B4513')
|
bolinger_lower = go.Scatter(x=data['Date'], y=data["lower"], name="lower", line_color='#8B4513')
|
||||||
|
avg5 = go.Scatter(x=data['Date'], y=data["avg5"], name="avg5", line_color='#000000')
|
||||||
|
|
||||||
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')
|
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')
|
||||||
fast_k_line = go.Scatter(x=data['Date'], y=data["fast_k"], mode='lines', name='fast_k')
|
fast_k_line = go.Scatter(x=data['Date'], y=data["fast_k"], mode='lines', name='fast_k')
|
||||||
@@ -133,7 +104,7 @@ class Simulation:
|
|||||||
rsis_line = go.Scatter(x=data['Date'], y=data["rsis"], mode='lines', name='rsis')
|
rsis_line = go.Scatter(x=data['Date'], y=data["rsis"], mode='lines', name='rsis')
|
||||||
|
|
||||||
#candle_data = [candle_stick, bolinger_upper, bolinger_lower, buy_check, sell_check, avg1, avg2, avg5, avg10, avg20, avg30, avg40, avg50, avg60]
|
#candle_data = [candle_stick, bolinger_upper, bolinger_lower, buy_check, sell_check, avg1, avg2, avg5, avg10, avg20, avg30, avg40, avg50, avg60]
|
||||||
candle_data = [candle_stick, bolinger_upper, bolinger_lower, buy_check, sell_check]
|
candle_data = [candle_stick, bolinger_upper, bolinger_lower, avg5, buy_check, sell_check]
|
||||||
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]
|
||||||
|
|
||||||
@@ -189,11 +160,13 @@ if __name__ == "__main__":
|
|||||||
RESOURCE_DIR = PROJECT_HOME + "/resources/analysis/"+today.strftime("%Y%m%d")
|
RESOURCE_DIR = PROJECT_HOME + "/resources/analysis/"+today.strftime("%Y%m%d")
|
||||||
|
|
||||||
stock_codes = ["252670", "122630"]
|
stock_codes = ["252670", "122630"]
|
||||||
given_days = ['20210901','20210902','20210903','20210906','20210907','20210908','20210909','20210910','20210913','20210914','20210915','20210916','20210917','20210923','20210924','20210927','20210928','20210929','20210930','20211001', '20211005']
|
given_days = ['20210901','20210902','20210903','20210906','20210907','20210908','20210909','20210910','20210913',
|
||||||
given_days = ['20211008']
|
'20210914','20210915','20210916','20210917','20210923','20210924','20210927','20210928','20210929',
|
||||||
|
'20210930','20211001', '20211005','20211006', '20211007','20211008', '20211012','20211013', '20211014']
|
||||||
|
|
||||||
simulation = Simulation()
|
simulation = Simulation()
|
||||||
|
|
||||||
simulation.simulate(stock_codes[0], given_days[0])
|
for given_day in given_days:
|
||||||
|
simulation.simulate(stock_codes[0], given_day)
|
||||||
|
|
||||||
print ("done...")
|
print ("done...")
|
||||||
|
|||||||
Reference in New Issue
Block a user