init
This commit is contained in:
@@ -29,7 +29,7 @@ class HTS_DAILY (HTS):
|
||||
self.orderChecker = OrderChecker(self.RESOURCE_PATH)
|
||||
|
||||
self.analyzed_day = 120
|
||||
self.MAX_BUY_PRICE = 200000
|
||||
self.MAX_BUY_PRICE = 50000
|
||||
return
|
||||
|
||||
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:
|
||||
bs_buy_price = bsLine['buy'][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)
|
||||
|
||||
@@ -6,6 +6,7 @@ from stock.analysis.RSI import RSI
|
||||
from stock.analysis.MACD import MACD
|
||||
from stock.analysis.IchimokuCloud import IchimokuCloud
|
||||
|
||||
|
||||
class BuySellChecker:
|
||||
common = None
|
||||
stochastic = None
|
||||
@@ -855,8 +856,6 @@ class BuySellChecker:
|
||||
|
||||
return bsLine, data
|
||||
|
||||
|
||||
|
||||
# middle line에 맞다은 적 없이, low line에 붙었거나 아래에 있었던 캔들의 높은 가격을 얻어옴
|
||||
def getPrice_UnderLowWithoutMiddle(self, last_index, data):
|
||||
if data['high'][last_index] < data['envelope_middle'][last_index]:
|
||||
@@ -881,7 +880,7 @@ class BuySellChecker:
|
||||
"""
|
||||
if i > 100:
|
||||
if -0.004 < data['gradient1'][i] < 0.001:
|
||||
#if data['high'][i] < data['envelope_middle'][i]:
|
||||
# if data['high'][i] < data['envelope_middle'][i]:
|
||||
if data['slow_k'][i] < 20:
|
||||
buy = data['close'][i]
|
||||
weight = 10
|
||||
@@ -943,9 +942,9 @@ class BuySellChecker:
|
||||
size = len(data["close"])
|
||||
|
||||
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_weight'] = [-1 for i in range(size)]
|
||||
bsLine['sell_weight'] = [-1.0 for i in range(size)]
|
||||
|
||||
for i in range(size):
|
||||
if isRealTime:
|
||||
@@ -971,53 +970,60 @@ class BuySellChecker:
|
||||
return bsLine, data
|
||||
"""
|
||||
|
||||
|
||||
if 0 < data['gradients_avg60'][i] < 0.001:
|
||||
if data['high'][i] < data['envelope_middle'][i]:
|
||||
if -0.015 < data['gradients_avg5'][i] and -0.007 < data['gradients_avg20'][i]:
|
||||
buy = data['low'][i]
|
||||
data['buy'][i] = buy
|
||||
bsLine['buy'][i] = buy
|
||||
bsLine['buy_weight'][i] = 10
|
||||
bsLine['buy_weight'][i] = 20.0
|
||||
|
||||
if i > 10:
|
||||
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 - 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 - 10] > 0 and data['gradients_avg60'][i - 9] > 0 and
|
||||
data['gradients_avg60'][i - 8] > 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
|
||||
):
|
||||
if data['disparity'][i] < 3:
|
||||
buy = data['low'][i]
|
||||
data['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:
|
||||
buy = data['low'][i]
|
||||
data['buy'][i] = buy
|
||||
bsLine['buy'][i] = buy
|
||||
bsLine['buy_weight'][i] = 20
|
||||
bsLine['buy_weight'][i] = 15.0
|
||||
|
||||
if data['slow_k'][i] < 3:
|
||||
buy = data['low'][i]
|
||||
data['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
|
||||
|
||||
|
||||
def checkWithEnvelope_122630(self, data, isRealTime=False):
|
||||
|
||||
bsLine = {}
|
||||
size = len(data["close"])
|
||||
|
||||
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_weight'] = [-1 for i in range(size)]
|
||||
bsLine['sell_weight'] = [-1.0 for i in range(size)]
|
||||
|
||||
for i in range(size):
|
||||
if isRealTime:
|
||||
@@ -1029,27 +1035,33 @@ class BuySellChecker:
|
||||
buy = data['low'][i]
|
||||
data['buy'][i] = buy
|
||||
bsLine['buy'][i] = buy
|
||||
bsLine['buy_weight'][i] = 15
|
||||
bsLine['buy_weight'][i] = 20.0
|
||||
|
||||
if data['macd'][i] < -1000:
|
||||
buy = data['low'][i]
|
||||
data['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_d'][i] < data['slow_k'][i]:
|
||||
buy = data['low'][i]
|
||||
data['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
|
||||
|
||||
def notBuy(self, data, i):
|
||||
if i > 5:
|
||||
check = True
|
||||
for l in range(i-4, i+1):
|
||||
for l in range(i - 4, i + 1):
|
||||
if (
|
||||
data['gradients_avg60'][l - 1] > data['gradients_avg60'][l] or
|
||||
data['gradients_avg20'][l - 1] > data['gradients_avg20'][l] or
|
||||
@@ -1067,9 +1079,9 @@ class BuySellChecker:
|
||||
size = len(data["close"])
|
||||
|
||||
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_weight'] = [-1 for i in range(size)]
|
||||
bsLine['sell_weight'] = [-1.0 for i in range(size)]
|
||||
|
||||
gap_interval = analyzed_day
|
||||
gap_state = False
|
||||
@@ -1080,7 +1092,7 @@ class BuySellChecker:
|
||||
|
||||
if i > 10:
|
||||
# 만약 전일 저가와 오늘 종의 차이가 1만원이 넘으면 향후 60일은 분석하지 않는다.
|
||||
if data['high'][i] < int(data['low'][i-1] * 0.7):
|
||||
if data['high'][i] < int(data['low'][i - 1] * 0.7):
|
||||
gap_state = True
|
||||
gap_interval -= 1
|
||||
continue
|
||||
@@ -1094,21 +1106,22 @@ class BuySellChecker:
|
||||
|
||||
if data['disparity'][i] < 2:
|
||||
check = True
|
||||
for l in range(i-3, i):
|
||||
for l in range(i - 3, i):
|
||||
if (
|
||||
data['gradients_avg60'][l-1] > data['gradients_avg60'][l] or
|
||||
data['gradients_avg20'][l-1] > data['gradients_avg20'][l] or
|
||||
data['gradients_low'][l-1] > data['gradients_low'][l] or
|
||||
data['disparity_avg5'][l-1] > data['disparity_avg5'][l] or
|
||||
data['disparity'][l-1] < data['disparity'][l]
|
||||
data['gradients_avg60'][l - 1] > data['gradients_avg60'][l] or
|
||||
data['gradients_avg20'][l - 1] > data['gradients_avg20'][l] or
|
||||
data['gradients_low'][l - 1] > data['gradients_low'][l] or
|
||||
data['disparity_avg5'][l - 1] > data['disparity_avg5'][l] or
|
||||
data['disparity'][l - 1] < data['disparity'][l]
|
||||
):
|
||||
check = False
|
||||
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]
|
||||
data['buy'][i] = buy
|
||||
bsLine['buy'][i] = buy
|
||||
bsLine['buy_weight'][i] = 20
|
||||
bsLine['buy_weight'][i] = 3.0
|
||||
|
||||
check = True
|
||||
for l in range(i - 2, i):
|
||||
@@ -1127,7 +1140,7 @@ class BuySellChecker:
|
||||
buy = data['low'][i]
|
||||
data['buy'][i] = buy
|
||||
bsLine['buy'][i] = buy
|
||||
bsLine['buy_weight'][i] = 20
|
||||
bsLine['buy_weight'][i] = 5.0
|
||||
|
||||
check = True
|
||||
for l in range(i - 6, i):
|
||||
@@ -1141,11 +1154,11 @@ class BuySellChecker:
|
||||
):
|
||||
check = False
|
||||
break
|
||||
if check and 99 < min (data['disparity_avg5'][i - 6:i]) < max (data['disparity_avg5'][i - 6:i]) < 101:
|
||||
if check and 99 < min(data['disparity_avg5'][i - 6:i]) < max(data['disparity_avg5'][i - 6:i]) < 101:
|
||||
buy = data['low'][i]
|
||||
data['buy'][i] = buy
|
||||
bsLine['buy'][i] = buy
|
||||
bsLine['buy_weight'][i] = 20
|
||||
bsLine['buy_weight'][i] = 5.0
|
||||
|
||||
check = True
|
||||
for l in range(i - 3, i):
|
||||
@@ -1163,17 +1176,16 @@ class BuySellChecker:
|
||||
buy = data['low'][i]
|
||||
data['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
|
||||
-0.009 < data['gradients_avg60'][i] < -0.008 and 0.015 < data['gradients_avg20'][i] < 0.016 and
|
||||
-0.006 < data['gradients_avg5'][i] < -0.005 and -0.009 < data['gradients_low'][i] < -0.008):
|
||||
check = True
|
||||
for l in range(i-5, i):
|
||||
for l in range(i - 5, i):
|
||||
if (
|
||||
data['gradients_avg60'][l-1] > data['gradients_avg60'][l] or
|
||||
data['gradients_low'][l-1] > data['gradients_low'][l] or
|
||||
data['gradients_avg60'][l - 1] > data['gradients_avg60'][l] or
|
||||
data['gradients_low'][l - 1] > data['gradients_low'][l] or
|
||||
data['disparity'][l - 1] < data['disparity'][l]
|
||||
):
|
||||
check = False
|
||||
@@ -1182,43 +1194,49 @@ class BuySellChecker:
|
||||
buy = data['low'][i]
|
||||
data['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-1] < data['macd'][i]:
|
||||
if data['macd'][i - 1] < data['macd'][i]:
|
||||
if not self.notBuy(data, i) and data['slow_k'][i] < 30:
|
||||
buy = data['low'][i]
|
||||
data['buy'][i] = buy
|
||||
bsLine['buy'][i] = buy
|
||||
bsLine['buy_weight'][i] = 20
|
||||
bsLine['buy_weight'][i] = 5.0
|
||||
|
||||
# macd 이전에 없던 바닥인 경우 상승할 찰나 매수
|
||||
if data['macds'][i-1] < min(data['macds'][:i-1]):
|
||||
if data['macds'][i-1] < data['macds'][i]:
|
||||
if data['macds'][i - 1] < min(data['macds'][:i - 1]):
|
||||
if data['macds'][i - 1] < data['macds'][i]:
|
||||
if not self.notBuy(data, i) and data['slow_k'][i] < 30:
|
||||
buy = data['low'][i]
|
||||
data['buy'][i] = buy
|
||||
bsLine['buy'][i] = buy
|
||||
bsLine['buy_weight'][i] = 20
|
||||
bsLine['buy_weight'][i] = 5.0
|
||||
|
||||
if (
|
||||
98 < data['disparity_avg5'][i] < 100 and data['disparity_avg20'][i] < 93.5 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
|
||||
98 < data['disparity_avg5'][i] < 100 and data['disparity_avg20'][i] < 93.5 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
|
||||
):
|
||||
if not self.notBuy(data, i):
|
||||
buy = data['low'][i]
|
||||
data['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]
|
||||
data['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
|
||||
|
||||
@@ -1239,4 +1257,4 @@ class BuySellChecker:
|
||||
else:
|
||||
bsLine, data = self.checkWithEnvelope(data, analyzed_day, isRealTime)
|
||||
|
||||
return bsLine, data
|
||||
return bsLine, data
|
||||
|
||||
Reference in New Issue
Block a user