This commit is contained in:
dosangyoon
2022-08-11 03:06:30 +09:00
parent e117b108fc
commit 42df0fc3fa
5 changed files with 98 additions and 51 deletions

View File

@@ -192,19 +192,48 @@ class BuySellChecker:
START_TIME_INDEX = c
break
if i >= START_TIME_INDEX:
if i > START_TIME_INDEX:
# 매수 분석
if i > 740:
# "15:00" 까지만 매수
return buy, weight
# 20분과 30분 아래에서, 3분선이 5분선 위로 올라오면 매수,
# 20분과 30분 위에서, 3분선이 5분선 아래로 내려오면 매도,
if data["avg3"][i - 1] <= data["avg5"][i - 1] and data["avg3"][i] > data["avg5"][i]:
if max(data["avg3"][i], data["avg5"][i]) < min(data["avg20"][i], data["avg30"][i]):
if min(data["avg3"][i], data["avg5"][i]) > data["avg60"][i]:
buy = int((data["high"][i] + data["low"][i]) / 2)
if data["macd"][i] < -25:
if data["avg3"][i] > min(data["avg5"][i], data["avg10"][i], data["avg20"][i]):
buy = data["high"][i]
if i < 381 + 30:
weight = 1
else:
weight = 5
return buy, weight
if data["macd"][i] < -5 and data["rsi"][i] < 30:
if data["avg3"][i] > min(data["avg5"][i], data["avg10"][i], data["avg20"][i]):
buy = int((data["open"][i] + data["close"][i]) / 2)
weight = 2
return buy, weight
if data["slow_k"][i] < 10 and data["rsi"][i] < 30:
if data["slow_k"][i - 1] < min(data["slow_k"][i - 2], data["slow_k"][i]):
if data["avg3"][i] > min(data["avg5"][i], data["avg10"][i], data["avg20"][i]):
buy = int((data["open"][i] + data["close"][i]) / 2)
weight = 2
return buy, weight
# 3분선이 5분선이 돌파가 이전보다 높은 경우 매수
if data["avg3"][i - 1] < data["avg5"][i - 1] and data["avg3"][i] > data["avg5"][i]:
p_avg3 = 999999
for c in range(1, 50):
if data["avg3"][i-c-1] < data["avg5"][i-c-1] and data["avg3"][i-c] > data["avg5"][i-c]:
p_avg3 = data["avg3"][i-c]
break
if data["avg3"][i] > p_avg3:
if i == 382 or i == 383:
if data["close"][i] != data["high"][i]:
return -1, -1
if data["slow_k"][i] < 30 or i < 381 + 10:
buy = int((data["open"][i] + data["close"][i]) / 2)
weight = 1
return buy, weight
@@ -411,13 +440,13 @@ class BuySellChecker:
if i >= START_TIME_INDEX:
# 매도 분석
# 20분과 30분 아래에서, 3분선이 5분선 위로 올라오면 매수,
# 20분과 30분 위에서, 3분선이 5분선 아래로 내려오면 매도,
# 10분선 위에서 3분선이 5분선을 하향 돌파 하는 경우 매도
if data["avg3"][i - 1] >= data["avg5"][i - 1] and data["avg3"][i] < data["avg5"][i]:
if min(data["avg3"][i], data["avg5"][i]) > max(data["avg20"][i], data["avg30"][i]):
sell = int((data["high"][i] + data["low"][i]) / 2)
weight = 1
return sell, weight
if min(data["avg3"][i], data["avg5"][i]) > data["avg10"][i]:
if data["slow_k"][i] > 80:
sell = int((data["high"][i] + data["low"][i]) / 2)
weight = 1
return sell, weight
"""
# 3분선이 5분 이상 5분선 위에 있다가 5분선 아래로 내려옴
if i >= 381 + 5:
@@ -519,12 +548,38 @@ class BuySellChecker:
# "15:00" 까지만 매수
return buy, weight
# 20분과 30분 아래에서, 3분선이 5분선 위로 올라오면 매수,
# 20분과 30분 위에서, 3분선이 5분선 아래로 내려오면 매도,
if data["avg3"][i - 1] <= data["avg5"][i - 1] and data["avg3"][i] > data["avg5"][i]:
if max(data["avg3"][i], data["avg5"][i]) < min(data["avg20"][i], data["avg30"][i]):
if min(data["avg3"][i], data["avg5"][i]) > data["avg60"][i]:
buy = int((data["high"][i] + data["low"][i]) / 2)
if data["macd"][i] < -25:
if data["avg3"][i] > min(data["avg5"][i], data["avg10"][i], data["avg20"][i]):
buy = data["high"][i]
if i < 381 + 30:
weight = 1
else:
weight = 5
return buy, weight
if data["macd"][i] < -5 and data["rsi"][i] < 30:
if data["avg3"][i] > min(data["avg5"][i], data["avg10"][i], data["avg20"][i]):
buy = int((data["open"][i] + data["close"][i]) / 2)
weight = 2
return buy, weight
if data["slow_k"][i] < 10 and data["rsi"][i] < 30:
if data["slow_k"][i - 1] < min(data["slow_k"][i - 2], data["slow_k"][i]):
if data["avg3"][i] > min(data["avg5"][i], data["avg10"][i], data["avg20"][i]):
buy = int((data["open"][i] + data["close"][i]) / 2)
weight = 2
return buy, weight
# 3분선이 5분선이 돌파가 이전보다 높은 경우 매수
if data["avg3"][i - 1] < data["avg5"][i - 1] and data["avg3"][i] > data["avg5"][i]:
p_avg3 = 999999
for c in range(1, 50):
if data["avg3"][i-c-1] < data["avg5"][i-c-1] and data["avg3"][i-c] > data["avg5"][i-c]:
p_avg3 = data["avg3"][i-c]
break
if data["avg3"][i] > p_avg3:
if data["slow_k"][i] < 30 or i < 381 + 10:
buy = int((data["open"][i] + data["close"][i]) / 2)
weight = 1
return buy, weight
"""
@@ -731,13 +786,13 @@ class BuySellChecker:
if i >= START_TIME_INDEX:
# 매도 분석
# 20분과 30분 아래에서, 3분선이 5분선 위로 올라오면 매수,
# 20분과 30분 위에서, 3분선이 5분선 아래로 내려오면 매도,
# 10분선 위에서 3분선이 5분선을 하향 돌파 하는 경우 매도
if data["avg3"][i - 1] >= data["avg5"][i - 1] and data["avg3"][i] < data["avg5"][i]:
if min(data["avg3"][i], data["avg5"][i]) > max(data["avg20"][i], data["avg30"][i]):
sell = int((data["high"][i] + data["low"][i]) / 2)
weight = 1
return sell, weight
if min(data["avg3"][i], data["avg5"][i]) > data["avg10"][i]:
if data["slow_k"][i] > 80:
sell = int((data["high"][i] + data["low"][i]) / 2)
weight = 1
return sell, weight
"""
# 3분선이 5분 이상 5분선 위에 있다가 5분선 아래로 내려옴
if i >= 381 + 5:

View File

@@ -36,16 +36,16 @@ class OrderChecker:
# 1) 종목 코드를 찾는다.
stock_df = order_df.loc[order_df["stock_code"] == stock_code]
# 2) 2 시간 전 계산
before_two_hour = datetime.now() - timedelta(hours=2)
# 2) 5분 전 계산
before_two_hour = datetime.now() - timedelta(minutes=5)
# 3) 만약 2 시간 전 주문을 찾는다.
# 3) 만약 5분 전 주문을 찾는다.
stock_twohour_df = stock_df.loc[stock_df["datetime"] <= before_two_hour]
# 4) 2 시간 전 주문 중에서 매수 데이터만 찾는다.
# 4) 5분 전 주문 중에서 매수 데이터만 찾는다.
orderNum_df = stock_twohour_df.loc[stock_twohour_df["type"] == OrderType.buy.value]
# 5) 2시간 전 매수 항목을 별도로 추출한다.
# 5) 5분 전 매수 항목을 별도로 추출한다.
orderNumSet = set(list(orderNum_df["orderNum"]))
for item in orderList:
if item.orderNum in orderNumSet: