init
This commit is contained in:
@@ -10,229 +10,83 @@ class BuySell_Daily:
|
||||
count += 1
|
||||
return count
|
||||
|
||||
def getBuyPrice(self, ticker, data, i, BS=None):
|
||||
def getBuyPrice(self, ticker, data, data_scaled, i, BS=None):
|
||||
buy_ymd, buy_price, buy_count, buy_weight, buy_type, buy_cut = None, 0, 0, 1, '', None
|
||||
|
||||
point = None
|
||||
for c in range(i-1, 0, -1):
|
||||
if data['close'][c] < data['changeLine'][c]:
|
||||
point = c
|
||||
sub_i = None
|
||||
for c in range(i-1, i-5, -1):
|
||||
if 0 < BS['buy_count'][c] and 0 < BS['buy_price'][c]:
|
||||
sub_i = c
|
||||
break
|
||||
if point is not None:
|
||||
if 3 < sum([1 if 0 < BS['buy_price'][k] else 0 for k in range(point, i)]):
|
||||
return buy_ymd, 0, 0, '', None
|
||||
|
||||
tmp_buy_ymd, tmp_buy_price, tmp_buy_count, tmp_buy_type, tmp_buy_cut = self.getBuyPrice_ichimok_changeLine(ticker, data, i, BS)
|
||||
if 0 < tmp_buy_count:
|
||||
buy_ymd = tmp_buy_ymd; buy_price = tmp_buy_price; buy_count = tmp_buy_count; buy_type = tmp_buy_type; buy_cut = tmp_buy_cut
|
||||
tmp_buy_ymd, tmp_buy_price, tmp_buy_count, tmp_buy_type, tmp_buy_cut = self.getBuyPrice_ichimok_baseLine(ticker, data, i, BS)
|
||||
if 0 < tmp_buy_count:
|
||||
buy_ymd = tmp_buy_ymd; buy_price = tmp_buy_price; buy_count = tmp_buy_count; buy_type = tmp_buy_type; buy_cut = tmp_buy_cut
|
||||
tmp_buy_ymd, tmp_buy_price, tmp_buy_count, tmp_buy_type, tmp_buy_cut = self.getBuyPrice_ichimok_laggingSpan(ticker, data, i, BS)
|
||||
if 0 < tmp_buy_count:
|
||||
buy_ymd = tmp_buy_ymd; buy_price = tmp_buy_price; buy_count = tmp_buy_count; buy_type = tmp_buy_type; buy_cut = tmp_buy_cut
|
||||
tmp_buy_ymd, tmp_buy_price, tmp_buy_count, tmp_buy_type, tmp_buy_cut = self.getBuyPrice_ichimok_avg(ticker, data, i, BS)
|
||||
if 0 < tmp_buy_count:
|
||||
buy_ymd = tmp_buy_ymd; buy_price = tmp_buy_price; buy_count = tmp_buy_count; buy_type = tmp_buy_type; buy_cut = tmp_buy_cut
|
||||
|
||||
if 0 < len(ticker['BUY_INFO']['buy_list']):
|
||||
diff = (datetime.strptime(str(data['ymd'][i]), '%Y-%m-%d %H:%M:%S') - ticker['BUY_INFO']['buy_list'][-1]['buy_ymd'])
|
||||
d = diff.days
|
||||
s = diff.seconds
|
||||
|
||||
# 해당 종목에 대해서 1분 이내 매수 금지
|
||||
if s < 3 * 60:
|
||||
return buy_ymd, 0, 0, '', None
|
||||
sub_check = False
|
||||
if sub_i is not None:
|
||||
sub_check = True
|
||||
for c in range(sub_i, i+1):
|
||||
if data['close'].iloc[c+1] < BS['buy_price'][c] * 0.99:
|
||||
sub_check = False
|
||||
break
|
||||
if sub_check:
|
||||
buy_price = data['close'].iloc[i] - 2 * ticker['unit']
|
||||
buy_count = (buy_weight * ticker['MAX_BUY']) / data['close'].iloc[i]
|
||||
buy_type = ''
|
||||
else:
|
||||
tmp_buy_ymd, tmp_buy_price, tmp_buy_count, tmp_buy_type, tmp_buy_cut = self.getBuyPrice_BBAND(ticker, data, data_scaled, i, BS)
|
||||
if 0 < tmp_buy_count:
|
||||
buy_ymd = tmp_buy_ymd; buy_price = tmp_buy_price; buy_count = tmp_buy_count; buy_type = tmp_buy_type; buy_cut = tmp_buy_cut
|
||||
tmp_buy_ymd, tmp_buy_price, tmp_buy_count, tmp_buy_type, tmp_buy_cut = self.getBuyPrice_PolyLine(ticker, data, data_scaled, i, BS)
|
||||
if 0 < tmp_buy_count:
|
||||
buy_ymd = tmp_buy_ymd; buy_price = tmp_buy_price; buy_count = tmp_buy_count; buy_type = tmp_buy_type; buy_cut = tmp_buy_cut
|
||||
tmp_buy_ymd, tmp_buy_price, tmp_buy_count, tmp_buy_type, tmp_buy_cut = self.getBuyPrice_Slow(ticker, data, data_scaled, i, BS)
|
||||
if 0 < tmp_buy_count:
|
||||
buy_ymd = tmp_buy_ymd; buy_price = tmp_buy_price; buy_count = tmp_buy_count; buy_type = tmp_buy_type; buy_cut = tmp_buy_cut
|
||||
|
||||
return buy_ymd, buy_price, buy_count, buy_type, buy_cut
|
||||
|
||||
def getSellPrice(self, ticker, data, i, BS=None):
|
||||
def getSellPrice(self, ticker, data, data_scaled, i, BS=None):
|
||||
sell_price, sell_count, sell_type = 0, 1, ''
|
||||
sell_type_list = []
|
||||
|
||||
tmp_sell_price, tmp_sell_type_list = self.getSellPrice_ichimok_baseLine(ticker, data, i, BS)
|
||||
sell_type_list += tmp_sell_type_list
|
||||
#tmp_sell_price, tmp_sell_type_list = self.getSellPrice_Umbong(ticker, data, data_scaled, i, BS)
|
||||
#sell_type_list += tmp_sell_type_list
|
||||
|
||||
tmp_sell_price, tmp_sell_type_list = self.getSellPrice_candle(ticker, data, i, BS)
|
||||
sell_type_list += tmp_sell_type_list
|
||||
|
||||
sell_price = tmp_sell_price
|
||||
#sell_price = tmp_sell_price
|
||||
|
||||
if 0 < len(sell_type_list) or 0 < sell_price:
|
||||
sell_type = ','.join(list(set(sell_type_list)))
|
||||
|
||||
return sell_price, sell_count, sell_type
|
||||
|
||||
def getBuyPrice_ichimok_changeLine(self, ticker, data, i, BS=None):
|
||||
""""""""""""""""""
|
||||
""""""""""""""""""
|
||||
|
||||
def getBuyPrice_BBAND(self, ticker, data, data_scaled, i, BS):
|
||||
|
||||
buy_ymd, buy_price, buy_count, buy_weight, buy_type, buy_cut = None, 0, 0, 1, '', None
|
||||
|
||||
check = False
|
||||
|
||||
id9, id26, id33, id52 = 8, 25, 32, 51
|
||||
if 5 < i:
|
||||
# 신저가를 갱신하지 않으면서 전환선이 떨어질 때 주가는 올라감 (기준선은 횡보, 현재 봉이 신저가가 이닐 때)
|
||||
# --> 기준선이 계속 횡보하거나 떨어지면 상승하지는 않는다.
|
||||
# https://www.youtube.com/watch?v=KZMP0Ssv8WI&t=432s (8:45)
|
||||
if data['new_low_9'][i] == 0:
|
||||
if data['changeLine'][i] < data['baseLine'][i]:
|
||||
if data['changeLine'][i] < data['changeLine'][i-1] and np.min(data['close'][i-8:i]) < data['close'][i]:
|
||||
if data['baseLine'][i-1] == data['baseLine'][i] < data['baseLine'][i-2]:
|
||||
if 3 < self.countYangBong(data, i):
|
||||
check = True
|
||||
buy_type = "ichimok_changeLine_1"
|
||||
buy_weight = 5
|
||||
buy_cut = min(np.min(data['open'][i - 60:i]), np.min(data['close'][i - 60:i]))
|
||||
if 60 < i:
|
||||
|
||||
if data['new_high_9'][i] == 1:
|
||||
if data['changeLine'][i-1] < data['changeLine'][i] and data['baseLine'][i-1] < data['baseLine'][i]:
|
||||
if data['baseLine'][i - 1] != data['baseLine'][i]:
|
||||
if 0.2 < data['leadingSpan1_leadingSpan2_diff_rate'][i+id52]:
|
||||
check = True
|
||||
buy_type = "ichimok_changeLine_2"
|
||||
buy_weight = 10
|
||||
buy_cut = min(np.min(data['open'][i - 60:i]), np.min(data['close'][i - 60:i]))
|
||||
sub_check1, sub_check2 = False, False
|
||||
for c in range(i-20, i):
|
||||
if not sub_check1 and data['bb_width'].iloc[i-1] < data['bb_width'].iloc[i] and data['bb_width'].iloc[i] < 5:
|
||||
sub_check1 = True
|
||||
if sub_check1 and not sub_check2 and data['upper_20'].iloc[i] < data['high'].iloc[i]:
|
||||
sub_check2 = True
|
||||
break
|
||||
|
||||
if data['new_high_26'][i] == 1:
|
||||
for c in range(i-15, i):
|
||||
if data['changeLine'][c-1] < data['baseLine'][c] and data['baseLine'][i-1] < data['changeLine'][i]:
|
||||
if 0.2 < data['leadingSpan1_leadingSpan2_diff_rate'][i + id52]:
|
||||
check = True
|
||||
buy_type = "ichimok_changeLine_3"
|
||||
buy_weight = 10
|
||||
buy_cut = min(np.min(data['open'][i - 60:i]), np.min(data['close'][i - 60:i]))
|
||||
break
|
||||
|
||||
if check:
|
||||
buy_ymd = data['ymd'][i]
|
||||
buy_price = data['close'][i] - 2 * ticker['unit']
|
||||
buy_count = (buy_weight * ticker['MAX_BUY']) / data['close'][i]
|
||||
|
||||
return buy_ymd, buy_price, buy_count, buy_type, buy_cut
|
||||
|
||||
|
||||
""""""""""""""""""
|
||||
""""""""""""""""""
|
||||
|
||||
def getBuyPrice_ichimok_baseLine(self, ticker, data, i, BS=None):
|
||||
|
||||
buy_ymd, buy_price, buy_count, buy_weight, buy_type, buy_cut = None, 0, 0, 1, '', None
|
||||
|
||||
check = False
|
||||
|
||||
id9, id26, id33, id52 = 9, 26, 33, 52
|
||||
if 5 < i:
|
||||
# 기준선이 하락할 때, 전환선이 상승하는 경우를 중기 추세의 변곡이라 한다
|
||||
if data['changeLine'][i-1] < data['changeLine'][i] and data['baseLine'][i] < data['baseLine'][i-1]:
|
||||
if data['changeLine'][i - 1] < data['baseLine'][i-1] and data['baseLine'][i] < data['changeLine'][i]:
|
||||
if data['open'][i] < data['close'][i]:
|
||||
if 3 < self.countYangBong(data, i):
|
||||
check = True
|
||||
buy_type = "ichimok_baseLine_1"
|
||||
buy_weight = 5
|
||||
buy_cut = min(np.min(data['open'][i - 60:i]), np.min(data['close'][i - 60:i]))
|
||||
|
||||
# 기준선이 평행 때, 전환선이 상승하는 경우를 중기 추세의 변곡이라 한다
|
||||
if data['changeLine'][i-1] < data['changeLine'][i] and data['baseLine'][i-3] == data['baseLine'][i-2] == data['baseLine'][i-1] == data['baseLine'][i]:
|
||||
if data['changeLine'][i - 1] < data['baseLine'][i-1] and data['baseLine'][i] < data['changeLine'][i]:
|
||||
if data['open'][i] < data['close'][i]:
|
||||
if 3 < self.countYangBong(data, i):
|
||||
check = True
|
||||
buy_type = "ichimok_baseLine_1"
|
||||
buy_weight = 5
|
||||
buy_cut = min(np.min(data['open'][i - 60:i]), np.min(data['close'][i - 60:i]))
|
||||
|
||||
if check:
|
||||
buy_ymd = data['ymd'][i]
|
||||
buy_price = data['close'][i] - 2 * ticker['unit']
|
||||
buy_count = (buy_weight * ticker['MAX_BUY']) / data['close'][i]
|
||||
|
||||
return buy_ymd, buy_price, buy_count, buy_type, buy_cut
|
||||
|
||||
""""""""""""""""""
|
||||
""""""""""""""""""
|
||||
|
||||
def getBuyPrice_ichimok_laggingSpan(self, ticker, data, i, BS):
|
||||
|
||||
buy_ymd, buy_price, buy_count, buy_weight, buy_type, buy_cut = None, 0, 0, 1, '', None
|
||||
|
||||
check = False
|
||||
|
||||
if 5 < i:
|
||||
|
||||
if data['laggingSpan_close_diff_rate'][i-1] <= 0 and 0 < data['laggingSpan_close_diff_rate'][i]:
|
||||
check = True
|
||||
buy_price = data['close'][i] - 2 * ticker['unit']
|
||||
buy_count = (buy_weight * ticker['MAX_BUY']) / data['close'][i]
|
||||
buy_weight = 2
|
||||
buy_type = 'laggingSpan1'
|
||||
|
||||
if 0 <= data['laggingSpan_avg60_diff_rate'][i-1] and data['laggingSpan_avg60_diff_rate'][i] < 0:
|
||||
check = True
|
||||
buy_price = data['close'][i] - 2 * ticker['unit']
|
||||
buy_count = (buy_weight * ticker['MAX_BUY']) / data['close'][i]
|
||||
buy_weight = 2
|
||||
buy_type = 'laggingSpan2'
|
||||
|
||||
if check:
|
||||
buy_ymd = data['ymd'][i]
|
||||
buy_price = data['close'][i] - 2 * ticker['unit']
|
||||
buy_count = (buy_weight * ticker['MAX_BUY']) / data['close'][i]
|
||||
|
||||
return buy_ymd, buy_price, buy_count, buy_type, buy_cut
|
||||
|
||||
""""""""""""""""""
|
||||
""""""""""""""""""
|
||||
|
||||
def getSellPrice_ichimok_baseLine(self, ticker, data, i, BS=None):
|
||||
sell_price = 0
|
||||
sell_type_list = []
|
||||
|
||||
check = False
|
||||
|
||||
id26, id52 = 26, 52
|
||||
|
||||
if data['new_high_9'][i] == 0:
|
||||
if data['baseLine'][i-1] < data['baseLine'][i] and data['changeLine'][i] < data['changeLine'][i-1]:
|
||||
check = True
|
||||
sell_type_list.append('ichimok_baseLine')
|
||||
|
||||
if check:
|
||||
sell_price = data['close'][i] + 2 * ticker['unit']
|
||||
|
||||
return sell_price, sell_type_list
|
||||
|
||||
""""""""""""""""""
|
||||
""""""""""""""""""
|
||||
|
||||
def getBuyPrice_ichimok_avg(self, ticker, data, i, BS):
|
||||
|
||||
buy_ymd, buy_price, buy_count, buy_weight, buy_type, buy_cut = None, 0, 0, 1, '', None
|
||||
|
||||
check = False
|
||||
|
||||
if 5 < i:
|
||||
|
||||
if data['avg5'][i] < data['avg20'][i] < data['baseLine'][i] < data['changeLine'][i] < data['close'][i]:
|
||||
if data['avg5'][i-1]<data['avg5'][i] and data['avg20'][i-1]<data['avg20'][i] and data['baseLine'][i-1]<=data['baseLine'][i] and data['changeLine'][i-1]<data['changeLine'][i]:
|
||||
if sub_check1 and sub_check2:
|
||||
if data_scaled['poly_120'].iloc[i-1] < data_scaled['poly_120'].iloc[i]:
|
||||
check = True
|
||||
buy_price = data['close'][i] - 2 * ticker['unit']
|
||||
buy_count = (buy_weight * ticker['MAX_BUY']) / data['close'][i]
|
||||
buy_weight = 2
|
||||
buy_type = 'ichimok_avg1'
|
||||
|
||||
if data['avg20'][i] < data['baseLine'][i] < data['changeLine'][i] < data['avg5'][i] < data['close'][i]:
|
||||
if data['avg20'][i-1]<data['avg20'][i] and data['baseLine'][i]<data['baseLine'][i-1] and data['changeLine'][i-1]<data['changeLine'][i] and data['avg5'][i-1]<data['avg5'][i]:
|
||||
check = True
|
||||
buy_price = data['close'][i] - 2 * ticker['unit']
|
||||
buy_count = (buy_weight * ticker['MAX_BUY']) / data['close'][i]
|
||||
buy_weight = 2
|
||||
buy_type = 'ichimok_avg2'
|
||||
buy_price = data['close'].iloc[i] - 2 * ticker['unit']
|
||||
buy_count = (buy_weight * ticker['MAX_BUY']) / data['close'].iloc[i]
|
||||
buy_weight = 30
|
||||
buy_type = 'bband'
|
||||
|
||||
if check:
|
||||
buy_ymd = data['ymd'][i]
|
||||
buy_price = data['close'][i] - 2 * ticker['unit']
|
||||
buy_count = (buy_weight * ticker['MAX_BUY']) / data['close'][i]
|
||||
buy_ymd = data['ymd'].iloc[i]
|
||||
buy_price = data['close'].iloc[i] - 2 * ticker['unit']
|
||||
buy_count = (buy_weight * ticker['MAX_BUY']) / data['close'].iloc[i]
|
||||
|
||||
return buy_ymd, buy_price, buy_count, buy_type, buy_cut
|
||||
|
||||
@@ -240,19 +94,134 @@ class BuySell_Daily:
|
||||
""""""""""""""""""
|
||||
""""""""""""""""""
|
||||
|
||||
def getSellPrice_candle(self, ticker, data, i, BS=None):
|
||||
sell_price = 0
|
||||
sell_type_list = []
|
||||
def getBuyPrice_PolyLine(self, ticker, data, data_scaled, i, BS):
|
||||
|
||||
buy_ymd, buy_price, buy_count, buy_weight, buy_type, buy_cut = None, 0, 0, 1, '', None
|
||||
|
||||
check = False
|
||||
|
||||
high = max(data['close'][i], data['open'][i])
|
||||
low = min(data['close'][i], data['open'][i])
|
||||
if low - data['low'][i] < data['high'][i] - high:
|
||||
check = True
|
||||
sell_type_list.append('candle_tail')
|
||||
if 60 < i:
|
||||
|
||||
if data_scaled['poly_60'].iloc[i-1] < 0 and data_scaled['poly_120'].iloc[i-1] < -0.003:
|
||||
if data_scaled['poly_60'].iloc[i-1] <= data_scaled['poly_120'].iloc[i-1] and data_scaled['poly_120'].iloc[i] < data_scaled['poly_60'].iloc[i]:
|
||||
check = True
|
||||
buy_price = data['close'].iloc[i] - 2 * ticker['unit']
|
||||
buy_count = (buy_weight * ticker['MAX_BUY']) / data['close'].iloc[i]
|
||||
buy_weight = 30
|
||||
buy_type = 'poly'
|
||||
|
||||
|
||||
if data_scaled['poly_240'].iloc[i - 1] < data_scaled['poly_240'].iloc[i] and data['slowk_240'].iloc[i] < 50:
|
||||
if data['close'].iloc[i - 1] < data['avg240'].iloc[i-1] and data['avg240'].iloc[i] < data['close'].iloc[i]:
|
||||
check = True
|
||||
buy_price = data['close'].iloc[i] - 2 * ticker['unit']
|
||||
buy_count = (buy_weight * ticker['MAX_BUY']) / data['close'].iloc[i]
|
||||
buy_weight = 30
|
||||
buy_type = 'poly_240'
|
||||
#buy_cut = data['support'].iloc[i]
|
||||
|
||||
if data_scaled['poly_480'].iloc[i - 1] < data_scaled['poly_480'].iloc[i] and data['slowk_480'].iloc[i] < 50:
|
||||
if data['close'].iloc[i - 1] < data['avg480'].iloc[i-1] and data['avg480'].iloc[i] < data['close'].iloc[i]:
|
||||
check = True
|
||||
buy_price = data['close'].iloc[i] - 2 * ticker['unit']
|
||||
buy_count = (buy_weight * ticker['MAX_BUY']) / data['close'].iloc[i]
|
||||
buy_weight = 30
|
||||
buy_type = 'poly_480'
|
||||
#buy_cut = data['support'].iloc[i]
|
||||
|
||||
if check:
|
||||
sell_price = data['close'][i] + 2 * ticker['unit']
|
||||
buy_ymd = data['ymd'].iloc[i]
|
||||
buy_price = data['close'].iloc[i] - 2 * ticker['unit']
|
||||
buy_count = (buy_weight * ticker['MAX_BUY']) / data['close'].iloc[i]
|
||||
|
||||
return sell_price, sell_type_list
|
||||
return buy_ymd, buy_price, buy_count, buy_type, buy_cut
|
||||
|
||||
def getBuyPrice_Slow(self, ticker, data, data_scaled, i, BS):
|
||||
|
||||
buy_ymd, buy_price, buy_count, buy_weight, buy_type, buy_cut = None, 0, 0, 1, '', None
|
||||
|
||||
check = False
|
||||
|
||||
if 5 < i:
|
||||
|
||||
#if data_scaled["disparity_diff_60_20_rate"].iloc[i] < -0.5:
|
||||
|
||||
if data_scaled["disparity_diff_60_20_rate"].iloc[i] < -0.5 and data_scaled["disparity_diff_60_20_rate"].iloc[i-1] < data_scaled["disparity_diff_60_20_rate"].iloc[i]:
|
||||
|
||||
if data_scaled['slowk_20'].iloc[i-1] <= data_scaled['slowd_20'].iloc[i-1] < 0:
|
||||
if data_scaled['slowd_20'].iloc[i] < data_scaled['slowk_20'].iloc[i] < 0:
|
||||
check = True
|
||||
buy_price = data['close'].iloc[i] - 2 * ticker['unit']
|
||||
buy_count = (buy_weight * ticker['MAX_BUY']) / data['close'].iloc[i]
|
||||
buy_type = 'slowk_20'
|
||||
#buy_cut = data['support'].iloc[i]
|
||||
|
||||
if data_scaled['slowk_60'].iloc[i-1] <= data_scaled['slowd_60'].iloc[i-1] < 0:
|
||||
if data_scaled['slowd_60'].iloc[i] < data_scaled['slowk_60'].iloc[i] < 0:
|
||||
check = True
|
||||
buy_price = data['close'].iloc[i] - 2 * ticker['unit']
|
||||
buy_count = (buy_weight * ticker['MAX_BUY']) / data['close'].iloc[i]
|
||||
buy_type = 'slowk_60'
|
||||
#buy_cut = data['support'].iloc[i]
|
||||
|
||||
if data_scaled['slowk_120'].iloc[i-1] <= data_scaled['slowd_120'].iloc[i-1] < 0:
|
||||
if data_scaled['slowd_120'].iloc[i] < data_scaled['slowk_120'].iloc[i] < 0:
|
||||
check = True
|
||||
buy_price = data['close'].iloc[i] - 2 * ticker['unit']
|
||||
buy_count = (buy_weight * ticker['MAX_BUY']) / data['close'].iloc[i]
|
||||
buy_type = 'slowk_120'
|
||||
#buy_cut = data['support'].iloc[i]
|
||||
|
||||
if data_scaled['slowk_240'].iloc[i-1] <= data_scaled['slowd_240'].iloc[i-1] < 0:
|
||||
if data_scaled['slowd_240'].iloc[i] < data_scaled['slowk_240'].iloc[i] < 0:
|
||||
check = True
|
||||
buy_price = data['close'].iloc[i] - 2 * ticker['unit']
|
||||
buy_count = (buy_weight * ticker['MAX_BUY']) / data['close'].iloc[i]
|
||||
buy_type = 'slowk_240'
|
||||
#buy_cut = data['support'].iloc[i]
|
||||
|
||||
if data['slowk_480'].iloc[i - 1] < data['slowd_480'].iloc[i - 1] < 40:
|
||||
if data['slowd_480'].iloc[i] < data['slowk_480'].iloc[i]:
|
||||
check = True
|
||||
buy_price = data['close'].iloc[i] - 2 * ticker['unit']
|
||||
buy_count = (buy_weight * ticker['MAX_BUY']) / data['close'].iloc[i]
|
||||
buy_type = 'slowk_1440'
|
||||
#buy_cut = data['support'].iloc[i]
|
||||
|
||||
if data['avg240'].iloc[i - 1] < data['avg240'].iloc[i]:
|
||||
if data_scaled['poly_480'].iloc[i - 1] <= 0 and 0 < data_scaled['poly_480'].iloc[i]:
|
||||
check = True
|
||||
buy_price = data['close'].iloc[i] - 2 * ticker['unit']
|
||||
buy_count = (buy_weight * ticker['MAX_BUY']) / data['close'].iloc[i]
|
||||
buy_type = 'poly_480'
|
||||
#buy_cut = data['support'].iloc[i]
|
||||
|
||||
if data_scaled['poly_240'].iloc[i - 1] < data_scaled['poly_240'].iloc[i] and data['slowk_240'].iloc[i] < 50:
|
||||
if data['close'].iloc[i - 1] < data['avg720'].iloc[i-1] and data['avg720'].iloc[i] < data['close'].iloc[i]:
|
||||
check = True
|
||||
buy_price = data['close'].iloc[i] - 2 * ticker['unit']
|
||||
buy_count = (buy_weight * ticker['MAX_BUY']) / data['close'].iloc[i]
|
||||
buy_type = 'poly_240'
|
||||
#buy_cut = data['support'].iloc[i]
|
||||
|
||||
if data_scaled['poly_480'].iloc[i - 1] < data_scaled['poly_480'].iloc[i] and data['slowk_480'].iloc[i] < 50:
|
||||
if data['close'].iloc[i - 1] < data['avg1440'].iloc[i-1] and data['avg1440'].iloc[i] < data['close'].iloc[i]:
|
||||
check = True
|
||||
buy_price = data['close'].iloc[i] - 2 * ticker['unit']
|
||||
buy_count = (buy_weight * ticker['MAX_BUY']) / data['close'].iloc[i]
|
||||
buy_type = 'poly_480'
|
||||
#buy_cut = data['support'].iloc[i]
|
||||
|
||||
if data["slowk_10"].iloc[i-1] < data["slowk_10"].iloc[i] < 20:
|
||||
check = True
|
||||
buy_price = data['close'].iloc[i] - 2 * ticker['unit']
|
||||
buy_count = (buy_weight * ticker['MAX_BUY']) / data['close'].iloc[i]
|
||||
buy_type = 'slowk_10'
|
||||
# buy_cut = data['support'].iloc[i]
|
||||
|
||||
if check:
|
||||
buy_ymd = data['ymd'].iloc[i]
|
||||
buy_price = data['close'].iloc[i] - 2 * ticker['unit']
|
||||
buy_count = (buy_weight * ticker['MAX_BUY']) / data['close'].iloc[i]
|
||||
|
||||
return buy_ymd, buy_price, buy_count, buy_type, buy_cut
|
||||
204
hts/BuySell_Minutely.py
Normal file
204
hts/BuySell_Minutely.py
Normal file
@@ -0,0 +1,204 @@
|
||||
import numpy as np
|
||||
from datetime import datetime
|
||||
from stock.util.DBManager import DBManager
|
||||
|
||||
|
||||
class BuySell_Minutely:
|
||||
dBManager = None
|
||||
|
||||
def __init__(self, RESOURCE_PATH):
|
||||
self.dBManager = DBManager(RESOURCE_PATH)
|
||||
return
|
||||
|
||||
def getBuy_Count(self, ticker, price):
|
||||
|
||||
buy_count = ticker['MAX_BUY'] / price
|
||||
|
||||
if 'BUY_INFO' in ticker and "buy_amount" in ticker['BUY_INFO']:
|
||||
amount = ticker['BUY_INFO']["buy_amount"]
|
||||
if 1000000 < amount:
|
||||
return 0
|
||||
|
||||
profit = (price * ticker['BUY_INFO']["buy_count"]) - amount
|
||||
last_buy_count, last_buy_price = self.dBManager.getLastBuyInfo(ticker["ticker_code"])
|
||||
if last_buy_count is not None and last_buy_price is not None:
|
||||
if last_buy_price < price and 1000 < profit:
|
||||
buy_count = 3 * last_buy_count
|
||||
elif last_buy_price > price and 1000 < profit:
|
||||
buy_count = 2 * last_buy_count
|
||||
elif last_buy_price < price and 1000 > profit:
|
||||
buy_count = 1.5 * last_buy_count
|
||||
else:
|
||||
buy_count = 1 * last_buy_count
|
||||
|
||||
if 'today_buy_type' in ticker and ticker['today_buy_type'] == 3:
|
||||
buy_count *= 2
|
||||
else:
|
||||
buy_count = 1.5 * ticker['MAX_BUY'] / price
|
||||
|
||||
if 200000 < price * buy_count:
|
||||
buy_count = 200000 / price
|
||||
|
||||
return buy_count
|
||||
|
||||
def getBuyPrice(self, ticker, data, data_scaled, i, BS=None):
|
||||
buy_ymd, buy_price, buy_count, buy_weight, buy_type, buy_cut = None, 0, 0, 1, '', None
|
||||
|
||||
# buy_ymd, buy_price, buy_count, buy_type, buy_cut = self.getBuyPrice_PolyLine(ticker, data, data_scaled, i, BS)
|
||||
#tmp_buy_ymd, tmp_buy_price, tmp_buy_count, tmp_buy_type, tmp_buy_cut = self.getBuyPrice_Candle(ticker, data, data_scaled, i, BS)
|
||||
tmp_buy_ymd, tmp_buy_price, tmp_buy_count, tmp_buy_type, tmp_buy_cut = self.getBuyPrice_Slow(ticker, data, data_scaled, i,BS)
|
||||
if 0 < tmp_buy_count:
|
||||
buy_ymd = tmp_buy_ymd;
|
||||
buy_price = tmp_buy_price;
|
||||
buy_count = tmp_buy_count;
|
||||
buy_type = tmp_buy_type;
|
||||
buy_cut = tmp_buy_cut
|
||||
|
||||
if 0 < len(ticker['BUY_INFO']['buy_list']):
|
||||
diff = (datetime.strptime(str(data['ymd'].iloc[i]), '%Y-%m-%d %H:%M:%S') - ticker['BUY_INFO']['buy_list'][-1]['buy_ymd'])
|
||||
d = diff.days
|
||||
s = diff.seconds
|
||||
|
||||
# 해당 종목에 대해서 10분 이내 매수 금지
|
||||
if s < 15 * 60:
|
||||
return None, 0, 0, '', None
|
||||
|
||||
return buy_ymd, buy_price, buy_count, buy_type, buy_cut
|
||||
|
||||
def getSellPrice(self, ticker, data, data_scaled, i, BS=None):
|
||||
sell_price, sell_count, sell_type = 0, 0, ''
|
||||
sell_type_list = []
|
||||
|
||||
"""
|
||||
tmp_sell_price, tmp_sell_count, tmp_sell_type_list = self.getSelllPrice_Umbong(ticker, data, data_scaled, i, BS)
|
||||
sell_count += tmp_sell_count
|
||||
sell_type_list += tmp_sell_type_list
|
||||
sell_price += tmp_sell_price
|
||||
"""
|
||||
|
||||
if 0 < len(sell_type_list) or 0 < sell_price:
|
||||
sell_type = ','.join(list(set(sell_type_list)))
|
||||
|
||||
return sell_price, sell_count, sell_type
|
||||
|
||||
""""""""""""""""""
|
||||
""""""""""""""""""
|
||||
|
||||
def getBuyPrice_Slow(self, ticker, data, data_scaled, i, BS):
|
||||
|
||||
buy_ymd, buy_price, buy_count, buy_weight, buy_type, buy_cut = None, 0, 0, 1, '', None
|
||||
|
||||
check = False
|
||||
|
||||
if 5 < i:
|
||||
"""
|
||||
if data['poly_20'].iloc[i - 1] < data['poly_20'].iloc[i] and data_scaled['disparity_diff_60_20_rate'].iloc[i] < -0.5:
|
||||
if data_scaled['macd_720'].iloc[i - 1] < data_scaled['macd_720'].iloc[i] and data_scaled['macd'].iloc[i - 1] < data_scaled['macd'].iloc[i]:
|
||||
if data['avg10'].iloc[i] < data['avg5'].iloc[i]:
|
||||
check = True
|
||||
buy_price = data['close'][i] - 2 * ticker['unit']
|
||||
buy_count = (buy_weight * ticker['MAX_BUY']) / data['close'][i]
|
||||
buy_type = 'slowk_10'
|
||||
# buy_cut = data['support'].iloc[i]
|
||||
"""
|
||||
|
||||
if data["slowk_10"].iloc[i-1] < data["slowk_10"].iloc[i] < 20:
|
||||
if data["slowk_10"].iloc[i-1] < data["slowd_10"].iloc[i-1] and data["slowd_10"].iloc[i] < data["slowk_10"].iloc[i]:
|
||||
check = True
|
||||
buy_price = data['close'][i] - 2 * ticker['unit']
|
||||
buy_count = (buy_weight * ticker['MAX_BUY']) / data['close'][i]
|
||||
buy_type = 'slowk_10'
|
||||
# buy_cut = data['support'].iloc[i]
|
||||
|
||||
if check:
|
||||
buy_ymd = data['ymd'].iloc[i]
|
||||
buy_price = data['close'][i] - 2 * ticker['unit']
|
||||
buy_count = (buy_weight * ticker['MAX_BUY']) / data['close'][i]
|
||||
|
||||
return buy_ymd, buy_price, buy_count, buy_type, buy_cut
|
||||
|
||||
|
||||
""""""""""""""""""
|
||||
""""""""""""""""""
|
||||
|
||||
def getBuyPrice_Candle(self, ticker, data, data_scaled, i, BS):
|
||||
|
||||
buy_ymd, buy_price, buy_count, buy_weight, buy_type, buy_cut = None, 0, 0, 1, '', None
|
||||
|
||||
check = False
|
||||
|
||||
if 60 < i:
|
||||
if data_scaled['disparity_diff_20_5_rate'].iloc[i] < 1 and data_scaled['disparity_diff_60_20_rate'].iloc[i] < 1 and data_scaled['disparity_diff_120_20_rate'].iloc[i] < 1:
|
||||
|
||||
if data['slowk_1440'].iloc[i - 1] < data['slowd_1440'].iloc[i - 1]:
|
||||
if data['slowd_1440'].iloc[i] < data['slowk_1440'].iloc[i] < 40:
|
||||
check = True
|
||||
buy_price = data['close'].iloc[i] - 2 * ticker['unit']
|
||||
buy_count = self.getBuy_Count(ticker, data['close'].iloc[i])
|
||||
buy_type = 'slowk_1440'
|
||||
#buy_cut = data['support'].iloc[i]
|
||||
|
||||
if data['avg240'].iloc[i - 1] < data['avg240'].iloc[i]:
|
||||
if data_scaled['poly_480'].iloc[i - 1] <= 0 and 0 < data_scaled['poly_480'].iloc[i]:
|
||||
check = True
|
||||
buy_price = data['close'].iloc[i] - 2 * ticker['unit']
|
||||
buy_count = self.getBuy_Count(ticker, data['close'].iloc[i])
|
||||
buy_type = 'poly_480'
|
||||
#buy_cut = data['support'].iloc[i]
|
||||
|
||||
if data_scaled['poly_720'].iloc[i - 1] < data_scaled['poly_720'].iloc[i] and data['slowk_720'].iloc[i] < 50:
|
||||
if data['close'].iloc[i - 1] < data['avg720'].iloc[i-1] and data['avg720'].iloc[i] < data['close'].iloc[i]:
|
||||
check = True
|
||||
buy_price = data['close'].iloc[i] - 2 * ticker['unit']
|
||||
buy_count = self.getBuy_Count(ticker, data['close'].iloc[i])
|
||||
buy_type = 'poly_720'
|
||||
#buy_cut = data['support'].iloc[i]
|
||||
|
||||
if data_scaled['poly_1440'].iloc[i - 1] < data_scaled['poly_1440'].iloc[i] and data['slowk_1440'].iloc[i] < 50:
|
||||
if data['close'].iloc[i - 1] < data['avg1440'].iloc[i-1] and data['avg1440'].iloc[i] < data['close'].iloc[i]:
|
||||
check = True
|
||||
buy_price = data['close'].iloc[i] - 2 * ticker['unit']
|
||||
buy_count = self.getBuy_Count(ticker, data['close'].iloc[i])
|
||||
buy_type = 'poly_1440'
|
||||
#buy_cut = data['support'].iloc[i]
|
||||
|
||||
if check:
|
||||
buy_ymd = data['ymd'].iloc[i]
|
||||
buy_price = data['close'][i] - 2 * ticker['unit']
|
||||
buy_count = (buy_weight * ticker['MAX_BUY']) / data['close'][i]
|
||||
|
||||
return buy_ymd, buy_price, buy_count, buy_type, buy_cut
|
||||
|
||||
""""""""""""""""""
|
||||
""""""""""""""""""
|
||||
|
||||
def getSelllPrice_Umbong(self, ticker, data, data_scaled, i, BS):
|
||||
sell_price, sell_count = 0, 0
|
||||
sell_type_list = []
|
||||
|
||||
if 0 < len(ticker['BUY_INFO']['buy_list']):
|
||||
check = False
|
||||
sell_count = 0
|
||||
|
||||
if data['close'].iloc[i] < data['open'].iloc[i]:
|
||||
for c in range(i - 1, i - 10, -1):
|
||||
if data['open'].iloc[c] < data['close'].iloc[c] == data['high'].iloc[c]:
|
||||
if data['close'].iloc[i] < data['open'].iloc[c]:
|
||||
check = True
|
||||
sell_count_1 = sum([price['buy_count'] for price in ticker['BUY_INFO']['buy_list'] if price['buy_type'] == "slowk_1440"])
|
||||
if 0 < sell_count_1:
|
||||
sell_type_list.append('slowk_1440')
|
||||
|
||||
sell_count_2 = sum([price['buy_count'] for price in ticker['BUY_INFO']['buy_list'] if price['buy_type'] == "poly_480"])
|
||||
if 0 < sell_count_2:
|
||||
sell_type_list.append('poly_480')
|
||||
|
||||
if "buy_amount" in ticker['BUY_INFO'] and ticker['BUY_INFO']["buy_amount"] < 50000:
|
||||
sell_count = sell_count_1 + sell_count_2
|
||||
else:
|
||||
sell_count = (sell_count_1 + sell_count_2) * 0.8
|
||||
|
||||
if check and 0 < sell_count:
|
||||
sell_price = data['close'].iloc[i] + 2 * ticker['unit']
|
||||
|
||||
return sell_price, sell_count, sell_type_list
|
||||
Reference in New Issue
Block a user