init
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user