This commit is contained in:
dsyoon
2023-01-25 00:29:25 +09:00
parent 00731aaad9
commit bc5bf369f8
2 changed files with 73 additions and 55 deletions

View File

@@ -29,7 +29,7 @@ class HTS_DAILY (HTS):
self.orderChecker = OrderChecker(self.RESOURCE_PATH) self.orderChecker = OrderChecker(self.RESOURCE_PATH)
self.analyzed_day = 120 self.analyzed_day = 120
self.MAX_BUY_PRICE = 200000 self.MAX_BUY_PRICE = 50000
return return
def getSellingPrice(self, log_time, stock_code, final_price, check=False): def getSellingPrice(self, log_time, stock_code, final_price, check=False):
@@ -125,7 +125,7 @@ class HTS_DAILY (HTS):
if bsLine['buy'][last_index] > 0: if bsLine['buy'][last_index] > 0:
bs_buy_price = bsLine['buy'][last_index] bs_buy_price = bsLine['buy'][last_index]
bs_buy_weight = bsLine['buy_weight'][last_index] bs_buy_weight = bsLine['buy_weight'][last_index]
buy_count = int(self.MAX_BUY_PRICE / bs_buy_price) buy_count = int((self.MAX_BUY_PRICE*bs_buy_weight) / bs_buy_price)
# 매수를 주문한다. # 매수를 주문한다.
orderNum = self.requestOrder(OrderType.buy, stock_code, buy_count, bs_buy_price) orderNum = self.requestOrder(OrderType.buy, stock_code, buy_count, bs_buy_price)

View File

@@ -6,6 +6,7 @@ from stock.analysis.RSI import RSI
from stock.analysis.MACD import MACD from stock.analysis.MACD import MACD
from stock.analysis.IchimokuCloud import IchimokuCloud from stock.analysis.IchimokuCloud import IchimokuCloud
class BuySellChecker: class BuySellChecker:
common = None common = None
stochastic = None stochastic = None
@@ -855,8 +856,6 @@ class BuySellChecker:
return bsLine, data return bsLine, data
# middle line에 맞다은 적 없이, low line에 붙었거나 아래에 있었던 캔들의 높은 가격을 얻어옴 # middle line에 맞다은 적 없이, low line에 붙었거나 아래에 있었던 캔들의 높은 가격을 얻어옴
def getPrice_UnderLowWithoutMiddle(self, last_index, data): def getPrice_UnderLowWithoutMiddle(self, last_index, data):
if data['high'][last_index] < data['envelope_middle'][last_index]: if data['high'][last_index] < data['envelope_middle'][last_index]:
@@ -943,9 +942,9 @@ class BuySellChecker:
size = len(data["close"]) size = len(data["close"])
bsLine['buy'] = [-1 for i in range(size)] bsLine['buy'] = [-1 for i in range(size)]
bsLine['buy_weight'] = [-1 for i in range(size)] bsLine['buy_weight'] = [-1.0 for i in range(size)]
bsLine['sell'] = [-1 for i in range(size)] bsLine['sell'] = [-1 for i in range(size)]
bsLine['sell_weight'] = [-1 for i in range(size)] bsLine['sell_weight'] = [-1.0 for i in range(size)]
for i in range(size): for i in range(size):
if isRealTime: if isRealTime:
@@ -971,53 +970,60 @@ class BuySellChecker:
return bsLine, data return bsLine, data
""" """
if 0 < data['gradients_avg60'][i] < 0.001: if 0 < data['gradients_avg60'][i] < 0.001:
if data['high'][i] < data['envelope_middle'][i]: if data['high'][i] < data['envelope_middle'][i]:
if -0.015 < data['gradients_avg5'][i] and -0.007 < data['gradients_avg20'][i]: if -0.015 < data['gradients_avg5'][i] and -0.007 < data['gradients_avg20'][i]:
buy = data['low'][i] buy = data['low'][i]
data['buy'][i] = buy data['buy'][i] = buy
bsLine['buy'][i] = buy bsLine['buy'][i] = buy
bsLine['buy_weight'][i] = 10 bsLine['buy_weight'][i] = 20.0
if i > 10: if i > 10:
if ( if (
data['gradients_avg60'][i - 10] > 0 and data['gradients_avg60'][i - 9] > 0 and data['gradients_avg60'][i - 8] > 0 and data['gradients_avg60'][i - 10] > 0 and data['gradients_avg60'][i - 9] > 0 and
data['gradients_avg60'][i - 7] > 0 and data['gradients_avg60'][i - 6] > 0 and data['gradients_avg60'][i - 5] > 0 and data['gradients_avg60'][i - 8] > 0 and
data['gradients_avg60'][i - 4] > 0 and data['gradients_avg60'][i - 3] > 0 and data['gradients_avg60'][i - 2] > 0 and data['gradients_avg60'][i - 7] > 0 and data['gradients_avg60'][i - 6] > 0 and
data['gradients_avg60'][i - 5] > 0 and
data['gradients_avg60'][i - 4] > 0 and data['gradients_avg60'][i - 3] > 0 and
data['gradients_avg60'][i - 2] > 0 and
data['gradients_avg60'][i - 1] > 0 and data['gradients_avg60'][i] < 0 data['gradients_avg60'][i - 1] > 0 and data['gradients_avg60'][i] < 0
): ):
if data['disparity'][i] < 3: if data['disparity'][i] < 3:
buy = data['low'][i] buy = data['low'][i]
data['buy'][i] = buy data['buy'][i] = buy
bsLine['buy'][i] = buy bsLine['buy'][i] = buy
bsLine['buy_weight'][i] = 10 bsLine['buy_weight'][i] = 20.0
if i > 10:
if data['disparity_avg60'][i] < 65: if data['disparity_avg60'][i] < 65:
buy = data['low'][i] buy = data['low'][i]
data['buy'][i] = buy data['buy'][i] = buy
bsLine['buy'][i] = buy bsLine['buy'][i] = buy
bsLine['buy_weight'][i] = 20 bsLine['buy_weight'][i] = 15.0
if data['slow_k'][i] < 3: if data['slow_k'][i] < 3:
buy = data['low'][i] buy = data['low'][i]
data['buy'][i] = buy data['buy'][i] = buy
bsLine['buy'][i] = buy bsLine['buy'][i] = buy
bsLine['buy_weight'][i] = 10 bsLine['buy_weight'][i] = 10.0
if not (data['avg120'][i - 1] < data['avg60'][i - 1] < data['avg20'][i - 1] < data['avg5'][i - 1]) and (
data['avg120'][i] < data['avg60'][i] < data['avg20'][i] < data['avg5'][i]):
buy = data['low'][i]
data['buy'][i] = buy
bsLine['buy'][i] = buy
bsLine['buy_weight'][i] = 20.0
return bsLine, data return bsLine, data
def checkWithEnvelope_122630(self, data, isRealTime=False): def checkWithEnvelope_122630(self, data, isRealTime=False):
bsLine = {} bsLine = {}
size = len(data["close"]) size = len(data["close"])
bsLine['buy'] = [-1 for i in range(size)] bsLine['buy'] = [-1 for i in range(size)]
bsLine['buy_weight'] = [-1 for i in range(size)] bsLine['buy_weight'] = [-1.0 for i in range(size)]
bsLine['sell'] = [-1 for i in range(size)] bsLine['sell'] = [-1 for i in range(size)]
bsLine['sell_weight'] = [-1 for i in range(size)] bsLine['sell_weight'] = [-1.0 for i in range(size)]
for i in range(size): for i in range(size):
if isRealTime: if isRealTime:
@@ -1029,20 +1035,26 @@ class BuySellChecker:
buy = data['low'][i] buy = data['low'][i]
data['buy'][i] = buy data['buy'][i] = buy
bsLine['buy'][i] = buy bsLine['buy'][i] = buy
bsLine['buy_weight'][i] = 15 bsLine['buy_weight'][i] = 20.0
if data['macd'][i] < -1000: if data['macd'][i] < -1000:
buy = data['low'][i] buy = data['low'][i]
data['buy'][i] = buy data['buy'][i] = buy
bsLine['buy'][i] = buy bsLine['buy'][i] = buy
bsLine['buy_weight'][i] = 15 bsLine['buy_weight'][i] = 20.0
if data['slow_k'][i] < 7: if data['slow_k'][i] < 7:
if data['slow_d'][i] < data['slow_k'][i]: if data['slow_d'][i] < data['slow_k'][i]:
buy = data['low'][i] buy = data['low'][i]
data['buy'][i] = buy data['buy'][i] = buy
bsLine['buy'][i] = buy bsLine['buy'][i] = buy
bsLine['buy_weight'][i] = 5 bsLine['buy_weight'][i] = 10.0
if not (data['avg120'][i - 1] < data['avg60'][i - 1] < data['avg20'][i - 1] < data['avg5'][i - 1]) and (data['avg120'][i] < data['avg60'][i] < data['avg20'][i] < data['avg5'][i]):
buy = data['low'][i]
data['buy'][i] = buy
bsLine['buy'][i] = buy
bsLine['buy_weight'][i] = 25.0
return bsLine, data return bsLine, data
@@ -1067,9 +1079,9 @@ class BuySellChecker:
size = len(data["close"]) size = len(data["close"])
bsLine['buy'] = [-1 for i in range(size)] bsLine['buy'] = [-1 for i in range(size)]
bsLine['buy_weight'] = [-1 for i in range(size)] bsLine['buy_weight'] = [-1.0 for i in range(size)]
bsLine['sell'] = [-1 for i in range(size)] bsLine['sell'] = [-1 for i in range(size)]
bsLine['sell_weight'] = [-1 for i in range(size)] bsLine['sell_weight'] = [-1.0 for i in range(size)]
gap_interval = analyzed_day gap_interval = analyzed_day
gap_state = False gap_state = False
@@ -1104,11 +1116,12 @@ class BuySellChecker:
): ):
check = False check = False
break break
if check and 99 < sum(data['disparity_avg5'][i-4:i+1])/5 < 100 and 99 < sum(data['disparity_avg60'][i-4:i+1])/5 < 100: if check and 99 < sum(data['disparity_avg5'][i - 4:i + 1]) / 5 < 100 and 99 < sum(
data['disparity_avg60'][i - 4:i + 1]) / 5 < 100:
buy = data['low'][i] buy = data['low'][i]
data['buy'][i] = buy data['buy'][i] = buy
bsLine['buy'][i] = buy bsLine['buy'][i] = buy
bsLine['buy_weight'][i] = 20 bsLine['buy_weight'][i] = 3.0
check = True check = True
for l in range(i - 2, i): for l in range(i - 2, i):
@@ -1127,7 +1140,7 @@ class BuySellChecker:
buy = data['low'][i] buy = data['low'][i]
data['buy'][i] = buy data['buy'][i] = buy
bsLine['buy'][i] = buy bsLine['buy'][i] = buy
bsLine['buy_weight'][i] = 20 bsLine['buy_weight'][i] = 5.0
check = True check = True
for l in range(i - 6, i): for l in range(i - 6, i):
@@ -1145,7 +1158,7 @@ class BuySellChecker:
buy = data['low'][i] buy = data['low'][i]
data['buy'][i] = buy data['buy'][i] = buy
bsLine['buy'][i] = buy bsLine['buy'][i] = buy
bsLine['buy_weight'][i] = 20 bsLine['buy_weight'][i] = 5.0
check = True check = True
for l in range(i - 3, i): for l in range(i - 3, i):
@@ -1163,8 +1176,7 @@ class BuySellChecker:
buy = data['low'][i] buy = data['low'][i]
data['buy'][i] = buy data['buy'][i] = buy
bsLine['buy'][i] = buy bsLine['buy'][i] = buy
bsLine['buy_weight'][i] = 20 bsLine['buy_weight'][i] = 5.0
if (data['disparity'][i] < 5 and 99.0 < data['disparity_avg60'][i] < 99.1 and if (data['disparity'][i] < 5 and 99.0 < data['disparity_avg60'][i] < 99.1 and
-0.009 < data['gradients_avg60'][i] < -0.008 and 0.015 < data['gradients_avg20'][i] < 0.016 and -0.009 < data['gradients_avg60'][i] < -0.008 and 0.015 < data['gradients_avg20'][i] < 0.016 and
@@ -1182,7 +1194,7 @@ class BuySellChecker:
buy = data['low'][i] buy = data['low'][i]
data['buy'][i] = buy data['buy'][i] = buy
bsLine['buy'][i] = buy bsLine['buy'][i] = buy
bsLine['buy_weight'][i] = 20 bsLine['buy_weight'][i] = 5.0
if data['macd'][i] < -4000: if data['macd'][i] < -4000:
if data['macd'][i - 1] < data['macd'][i]: if data['macd'][i - 1] < data['macd'][i]:
@@ -1190,7 +1202,7 @@ class BuySellChecker:
buy = data['low'][i] buy = data['low'][i]
data['buy'][i] = buy data['buy'][i] = buy
bsLine['buy'][i] = buy bsLine['buy'][i] = buy
bsLine['buy_weight'][i] = 20 bsLine['buy_weight'][i] = 5.0
# macd 이전에 없던 바닥인 경우 상승할 찰나 매수 # macd 이전에 없던 바닥인 경우 상승할 찰나 매수
if data['macds'][i - 1] < min(data['macds'][:i - 1]): if data['macds'][i - 1] < min(data['macds'][:i - 1]):
@@ -1199,26 +1211,32 @@ class BuySellChecker:
buy = data['low'][i] buy = data['low'][i]
data['buy'][i] = buy data['buy'][i] = buy
bsLine['buy'][i] = buy bsLine['buy'][i] = buy
bsLine['buy_weight'][i] = 20 bsLine['buy_weight'][i] = 5.0
if ( if (
98 < data['disparity_avg5'][i] < 100 and data['disparity_avg20'][i] < 93.5 and data['disparity_avg60'][i] < 89 and 98 < data['disparity_avg5'][i] < 100 and data['disparity_avg20'][i] < 93.5 and
-0.014 < data['gradients_avg60'][i] < -0.013 and -0.03 < data['gradients_avg20'][i] < -0.02 and -0.014 < data['gradients_low'][i] < -0.013 and data['disparity_avg60'][i] < 89 and
-0.014 < data['gradients_avg60'][i] < -0.013 and -0.03 < data['gradients_avg20'][
i] < -0.02 and -0.014 < data['gradients_low'][i] < -0.013 and
data['slow_k'][i] < 11 data['slow_k'][i] < 11
): ):
if not self.notBuy(data, i): if not self.notBuy(data, i):
buy = data['low'][i] buy = data['low'][i]
data['buy'][i] = buy data['buy'][i] = buy
bsLine['buy'][i] = buy bsLine['buy'][i] = buy
bsLine['buy_weight'][i] = 20 bsLine['buy_weight'][i] = 5.0
if data['slow_k'][i] < 20 and data['slow_k'][i - 1] < data['slow_d'][i - 1] and data['slow_d'][i] < data['slow_k'][i]: if data['slow_k'][i] < 20 and data['slow_k'][i - 1] < data['slow_d'][i - 1] and data['slow_d'][i] < data['slow_k'][i]:
buy = data['low'][i] buy = data['low'][i]
data['buy'][i] = buy data['buy'][i] = buy
bsLine['buy'][i] = buy bsLine['buy'][i] = buy
bsLine['buy_weight'][i] = 30 bsLine['buy_weight'][i] = 7.0
if not (data['avg120'][i - 1] < data['avg60'][i - 1] < data['avg20'][i - 1] < data['avg5'][i - 1]) and (data['avg120'][i] < data['avg60'][i] < data['avg20'][i] < data['avg5'][i]):
buy = data['low'][i]
data['buy'][i] = buy
bsLine['buy'][i] = buy
bsLine['buy_weight'][i] = 10.0
return bsLine, data return bsLine, data