This commit is contained in:
dosang.yoon
2022-07-09 22:15:08 +09:00
parent e8de4907e6
commit 1fbacc472a
86 changed files with 146 additions and 31339 deletions

View File

@@ -135,30 +135,126 @@ class BuySellChecker:
return buy, weight, sell
# 곱버스에 해당함
def getPriceAndWeight3(self, data, i):
buy, weight, sell = -1, -1, -1
# 381: 어제 날짜 데이터 개수
if i >= 381+3:
if i >= 381:
# 매수 분석
if data["macdo"][i] < 0 and data["macd"][i] < -5:
if data["macd"][i-3] > data["macd"][i-2] and data["macd"][i-2] > data["macd"][i-1] and data["macd"][i-1] < data["macd"][i]:
buy = data["close"][i]
# 이동선을 이용한 매매
# 3분선과 5분선이 10분 이상 내려오다가 3분선이 5분선을 넘어 서는 순간 매수
if int(data["avg3"][i]) > int(data["avg5"][i]):
valid = True
same_count = 0
for c in range(1, 10):
if int(data["avg3"][i-c]) == int(data["avg5"][i-c]):
same_count += 1
if int(data["avg3"][i-c]) > int(data["avg5"][i-c]):
valid = False
break
if int(data["avg3"][i-c]) > int(data["avg3"][i-c-1]) or int(data["avg5"][i-c]) > int(data["avg5"][i-c-1]):
valid = False
break
if valid and same_count < 3:
buy = data["close"][i] - 5
weight = 3
# 이동선을 이용한 매매
# 3분선이 10분선에 돌파 후 지지하는지 확인하고 slow_k < 40일 때 매수함
# 현재 단계:
# - avg3[i]이 avg10[i]보다 커야함
# - avg3[i]가 avg3[i-1]보다 커야함
if data['avg10'][i] < data['avg3'][i] and data['avg3'][i-1] < data['avg3'][i] and abs(data['avg10'][i] - data['avg3'][i]) > 2:
# 첫 이전 단계:
# - avg3[i-1]과 avg10[i-1]의 abs가 3이내여야 함
if abs(data['avg3'][i-1] - data['avg10'][i-1]) < 3 and data['avg3'][i-1] < data['avg3'][i-2]:
index1 = -1
valid = False
for j in range(2, 20):
# 두 번째 이전 단계:
# - avg3[i-2]가 avg10[i-2]보다 커야 함
# - avg3[i-2]가 avg3[i-3]보다 작아야함
if data['avg10'][i-j] < data['avg3'][i-j] and data['avg3'][i-j] > data['avg3'][i-j-1]:
index1 = j
break
for j in range(index1 + 1, 20):
# 세 번째 이전 단계:
# - avg3[i-3]가 avg3[i-4]보다 커야 함
if data['avg3'][i-j] > data['avg3'][i-j-1]:
valid = True
index1 = j
else:
break
# 마지막 체크:
# 만약 avg[3]이 avg[10]보다 작다면 매수함
if valid:
if data['avg3'][i-index1-1] < data['avg10'][i-index1-1]:
if data["slow_k"][i] < 40:
buy = data["close"][i]
weight = 3
# 만약 30원 이상 장대 양봉이 나온 경우, 다음이나 다다음 중간 값에서 매수를 한다.
if (data["close"][i] - data["low"][i]) >= 30:
middle = int((data["close"][i] + data["low"][i])/2)
buy = middle
# 장 초기 (시작 7분 이내), 볼린져 하단에서 시작하여 이병선을 모두 상승하여 마감한 경우 low 값에서 매수한다.
if i < 381 + 8:
if data["open"][i] == data["low"][i]:
if data["close"][i] > max(data["avg3"][i], data["avg5"][i], data["avg10"][i], data["avg20"][i], data["avg30"][i]):
buy = data["low"][i]
"""
## macd를 이용한 매매
#if data["macdo"][i] < 0 and data["macd"][i] < -5:
# if data["macd"][i-3] > data["macd"][i-2] and data["macd"][i-2] > data["macd"][i-1] and data["macd"][i-1] < data["macd"][i]:
# buy = data["close"][i] - 5
"""
# 표준편차를 이용한 매매
mean = (data["avg3"][i] + data["avg5"][i] + data["avg10"][i] + data["avg20"][i] + data["avg30"][i])/5
vsum = (data["avg3"][i] - mean) ** 2 + (data["avg5"][i] - mean) ** 2 + (data["avg10"][i] - mean) ** 2 + (data["avg20"][i] - mean) ** 2 + (data["avg30"][i] - mean) ** 2
variance = vsum / 5
std = math.sqrt(variance)
if std < 1:
sell = data["close"][i]
"""
#mean = (data["avg3"][i] + data["avg5"][i] + data["avg10"][i] + data["avg20"][i] + data["avg30"][i])/5
#vsum = (data["avg3"][i] - mean) ** 2 + (data["avg5"][i] - mean) ** 2 + (data["avg10"][i] - mean) ** 2 + (data["avg20"][i] - mean) ** 2 + (data["avg30"][i] - mean) ** 2
#variance = vsum / 5
#std = math.sqrt(variance)
#if std < 1:
# sell = data["close"][i] - 5
"""
"""
# 매도 분석
# 3일 선이 10분 전부터 게속 10분선 위에 있다가 아래로 내려오면 매도함
valid = False
if data["avg3"][i] < data["avg5"][i]:
if (data["avg3"][i-1] > data["avg5"][i-1] and data["avg3"][i-2] > data["avg5"][i-2] and
data["avg3"][i-3] > data["avg5"][i-3] and data["avg3"][i-4] > data["avg5"][i-4] and
data["avg3"][i-5] > data["avg5"][i-5] and data["avg3"][i-6] > data["avg5"][i-6] and
data["avg3"][i-7] > data["avg5"][i-7] and data["avg3"][i-8] > data["avg5"][i-8] and
data["avg3"][i-9] > data["avg5"][i-8] and data["avg3"][i-10] > data["avg5"][i-10]):
valid = True
if valid:
sell = data["close"][i]
"""
if data["slow_d"][i] > 90 and data["rsi"][i] > 65:
if data["upper"][i] <= data["high"][i]:
# slow_k와 slow_d가 90이상에서 slow_k가 slow_d 아래롸 내려온 경우
if data["rsi"][i] >= 75 and data["rsis"][i] >= 75:
if data["rsi"][i-1] > data["rsis"][i-1] and data["rsi"][i] < data["rsis"][i]:
sell = data["close"][i] - 5
"""
#if data["slow_d"][i] > 90 and data["rsi"][i] > 65:
# if data["upper"][i] <= data["high"][i]:
# sell = data["close"][i] - 5
#if data['avg3'][i-1] > data['avg10'][i-1] and data['avg3'][i] <= data['avg10'][i]:
# if abs(data['avg3'][i - 1] - data['avg30'][i - 1]) > 10:
# sell = data["close"][i]
return buy, weight, sell
@@ -257,7 +353,7 @@ class BuySellChecker:
if stock_code == "252670":
buy, weight, sell = self.getPriceAndWeight3(data, i)
else:
buy, weight, sell = self.getPriceAndWeight3(data, i)
buy, weight, sell = self.getPriceAndWeight4(data, i)
bsLine['buy'][i] = buy
bsLine['weight'][i] = weight