init
This commit is contained in:
@@ -229,124 +229,127 @@ class Common:
|
||||
return "STOCHASTIC#2_"
|
||||
return ""
|
||||
|
||||
def check_days5_20_line_buying(self, stock, i):
|
||||
"""
|
||||
5일 선이 20일 선을 뚫고 올라온 순간 체크
|
||||
5일선이 다시 20선 아래로 내려가는 순간 손걸한다.
|
||||
"""
|
||||
if stock[i]['close'] == stock[i]['high']:
|
||||
# 윗꼬리 없는 양봉이어야 한다.
|
||||
return ""
|
||||
def check_highest_270(self, stock, i):
|
||||
# 270일 기준으로 최고가를 기록하는 순간 매수를 시도한다.
|
||||
# https://docs.google.com/presentation/d/1MVuaeRNljqLCdn4dPZmvVdtl2Ab09Zwg/edit#slide=id.gc7b796e645_0_27
|
||||
upper_index = 0
|
||||
if len(stock) > 271:
|
||||
top = 0
|
||||
for idx in range(2, 271):
|
||||
# 최근 270일 중 최고가를 구한다.
|
||||
if top < stock[-idx]['close']:
|
||||
top = stock[-idx]['close']
|
||||
|
||||
if len(stock) > 61:
|
||||
# 오늘 종가가 20일선을 뚫고 올라왔다. (20일선<오늘종가 and (어제종가<20 or 어제5일선<20))
|
||||
# 오늘 종가는 양봉이어야 한다.
|
||||
# 어제부터 index1일까지 20일선이 5일선 위에 있었다.
|
||||
# index1일부터 index2일까지 5일선이 20일선 위에 있었다.
|
||||
# 이전 5일선이 20일선을 뚫었던 종가보다 오늘 뚫은 종가가 높거나 혹은 오늘 종가가 더 낮더라도 장대 양봉어어야 한다.
|
||||
# 주봉의 20일 평균이 이전 주봉의 20일 평균 보다 높아야 한다.
|
||||
if stock[i]['avg20'] < stock[i]['close'] and (stock[i-1]['close'] < stock[i]['avg20'] or stock[i-1]['avg5'] < stock[i]['avg20']):
|
||||
if (stock[i-3]['avg5'] < stock[i-3]['avg20'] or stock[i-2]['avg5'] < stock[i-2]['avg20'] or stock[i-1]['avg5'] < stock[i-1]['avg20']):
|
||||
#if (stock[i - 1]['avg5'] < stock[i - 1]['avg20']):
|
||||
if stock[i]['open'] < stock[i]['close']:
|
||||
index1 = -1
|
||||
for j in range(1, 61):
|
||||
if stock[i-j]['avg20'] < stock[i-j]['avg5']:
|
||||
index1 = j
|
||||
break
|
||||
index2 = -1
|
||||
for j in range(index1+1, 61):
|
||||
if stock[i-j]['avg5'] < stock[i-j]['avg20']:
|
||||
index2 = j
|
||||
break
|
||||
if (index2 != -1 and ((stock[i-index2]['close'] < stock[i]['close']) or (stock[i]['high']-stock[i]['close'] < stock[i]['open']-stock[i]['low']))):
|
||||
# 주봉의 20일 평균이 이전 주봉의 20일 평균 보다 높아야 한다.
|
||||
return "5-20_"
|
||||
if top < stock[i]['close']:
|
||||
return "highest_"
|
||||
return ""
|
||||
|
||||
def check_days5_60_line_buying(self, stock, i):
|
||||
"""
|
||||
5일 선이 60일 선을 뚫고 올라온 순간 체크
|
||||
5일선이 다시 60선 아래로 내려가는 순간 손걸한다.
|
||||
"""
|
||||
if stock[i]['close'] == stock[i]['high']:
|
||||
# 윗꼬리 없는 양봉이어야 한다.
|
||||
return ""
|
||||
def check_Dolpa_Jiji(self, stock, i, day='20'):
|
||||
upper_index = 0
|
||||
if len(stock) > 5:
|
||||
for idx in range(1, 5):
|
||||
# day선을 돌파하는 양봉이고, 종가가 최고가 보다 100 이내이어야 한다.
|
||||
if stock[-idx]['open'] < stock[-idx]["avg"+day] < stock[-idx]['close'] and stock[-idx]['high'] - 100 <= stock[-idx]['close']:
|
||||
upper_index = idx
|
||||
break
|
||||
if upper_index != 0:
|
||||
for cidx in range(1, upper_index):
|
||||
# 해당일의 종가보다 현재의 시가가 높거나 같아야 하며, 현재가는 양봉이어야 한다.
|
||||
if stock[-upper_index]['close'] <= stock[-cidx]['open'] and stock[-cidx]['open'] < stock[-cidx]['close']:
|
||||
# 해당 기준일 선은 상승이어야 한다.
|
||||
if stock[-upper_index]['avg'+day] < stock[-cidx]['avg'+day]:
|
||||
return day + "_"
|
||||
return ""
|
||||
|
||||
def check_Dolpa_Jiji_20(self, stock, i):
|
||||
"""
|
||||
top: 이전 5일선이 20일선 위에 있을 때 최고가
|
||||
top일 체크 사항 (20일 < 5일선)
|
||||
5일선이 20일 선으로 내려왔다가 다시 20일선 위로 올라왔고, top < 오늘 시가 + 100
|
||||
top < 시가 < 종가 라면 다음날 매수한다.
|
||||
# https://docs.google.com/presentation/d/1MVuaeRNljqLCdn4dPZmvVdtl2Ab09Zwg/edit#slide=id.gc7b796e645_0_80
|
||||
"""
|
||||
if len(stock) > 61:
|
||||
# 오늘 5일선이 60일선 위에 올라왔다.
|
||||
# 어제부터 index1일까지 60일선이 5일선 위에 있었다.
|
||||
# index1일부터 index2일까지 5일선이 60일선 위에 있었다.
|
||||
if stock[i]['avg60'] < stock[i]['avg5']:
|
||||
if (stock[i - 3]['avg5'] < stock[i - 3]['avg60'] or stock[i - 2]['avg5'] < stock[i - 2]['avg60'] or stock[i - 1]['avg5'] < stock[i - 1]['avg60']):
|
||||
#if (stock[i - 1]['avg5'] < stock[i - 1]['avg60']):
|
||||
if stock[i]['avg20'] < stock[i]['close'] and stock[i]['avg20'] < stock[i]['open']:
|
||||
if stock[i]['avg5'] < stock[i]['avg20']:
|
||||
index1 = -1
|
||||
for j in range(1, 150):
|
||||
if stock[i-j]['avg60'] < stock[i-j]['avg5']:
|
||||
for j in range(1, 61):
|
||||
if stock[i-j]['avg20'] < stock[i-j]['avg5']:
|
||||
index1 = j
|
||||
break
|
||||
index2 = -1
|
||||
for j in range(index1+1, 150):
|
||||
if stock[i-j]['avg5'] < stock[i-j]['avg60']:
|
||||
index2 = j
|
||||
top = 0
|
||||
for j in range(index1+1, 61):
|
||||
if stock[i - j]['open'] < stock[i - j]['close']:
|
||||
if top < stock[i - j]['close']:
|
||||
top = stock[i - j]['close']
|
||||
else:
|
||||
if top < stock[i - j]['open']:
|
||||
top = stock[i - j]['open']
|
||||
if stock[i-j]['avg5'] < stock[i-j]['avg20']:
|
||||
break
|
||||
if (index2 != -1 and (stock[i-index2+1]['close'] < stock[i]['close'])):
|
||||
return "5-60_"
|
||||
return "5-20_"
|
||||
return ""
|
||||
|
||||
def check_days20_60_line_buying(self, stock, i):
|
||||
def check_Danta1(self, stock, i):
|
||||
"""
|
||||
20일 선이 60일 선을 뚫고 올라온 순간 체크
|
||||
20일선이 다시 60선 아래로 내려가는 순간 손걸한다.
|
||||
"""
|
||||
if stock[i]['close'] == stock[i]['high']:
|
||||
# 윗꼬리 없는 양봉이어야 한다.
|
||||
return ""
|
||||
어제 상한가 혹은 상승양봉이 나온다.
|
||||
오늘 상승 출발을 해야 하며 상승 음봉이 나온다
|
||||
- 어제 종가 = 어제 상한가 < 종가 < 시가 < 상한가
|
||||
https://docs.google.com/presentation/d/1MVuaeRNljqLCdn4dPZmvVdtl2Ab09Zwg/edit#slide=id.gc7b796e645_0_109
|
||||
|
||||
if len(stock) > 151:
|
||||
# 오늘 20일선이 60일선 위에 올라왔다.
|
||||
# 어제부터 index1일까지 60일선이 20일선 위에 있었다.
|
||||
# index1일부터 index2일까지 20일선이 60일선 위에 있었다.
|
||||
if stock[i]['avg60'] < stock[i]['avg20']:
|
||||
if (stock[i - 3]['avg20'] < stock[i - 3]['avg60'] or stock[i - 2]['avg20'] < stock[i - 2]['avg60'] or stock[i - 1]['avg20'] < stock[i - 1]['avg60']):
|
||||
#if (stock[i - 1]['avg20'] < stock[i - 1]['avg60']):
|
||||
index1 = -1
|
||||
for j in range(1, 150):
|
||||
if stock[i-j]['avg60'] < stock[i-j]['avg20']:
|
||||
index1 = j
|
||||
break
|
||||
index2 = -1
|
||||
for j in range(index1+1, 150):
|
||||
if stock[i-j]['avg20'] < stock[i-j]['avg60']:
|
||||
index2 = j
|
||||
break
|
||||
if (index2 != -1 and (stock[i-index2+1]['close'] < stock[i]['close'])):
|
||||
return "20-60_"
|
||||
만약 다음날 시작초가가 오늘 종가보다 높게 상승으로 출발한다면 매수를 한다.
|
||||
손절가는 오늘 최저가이다.
|
||||
"""
|
||||
if stock[i-1]['open'] < stock[i-1]['close'] == stock[i-1]['high']:
|
||||
if stock[i-1]['close'] < stock[i]['close'] < stock[i]['open'] < stock[i]['high']:
|
||||
return "danta1_"
|
||||
return ""
|
||||
|
||||
def check_days5_120_line_buying(self, stock, i):
|
||||
if stock[i]['close'] == stock[i]['high']:
|
||||
# 윗꼬리 없는 양봉이어야 한다.
|
||||
return ""
|
||||
def check_Danta2(self, stock, i):
|
||||
"""
|
||||
쐐기, 수렴, 깃대 패턴 확인
|
||||
# https://docs.google.com/presentation/d/1MVuaeRNljqLCdn4dPZmvVdtl2Ab09Zwg/edit#slide=id.gc7b796e645_0_144
|
||||
|
||||
상단 추세선을 돌파하면 매수를 한다.
|
||||
"""
|
||||
5일 선이 120일 선을 뚫고 올라온 순간 체크
|
||||
"""
|
||||
if stock[i-1]['close'] < stock[i-1]['avg120']:
|
||||
if stock[i]['avg120'] < stock[i]['close']:
|
||||
return "5-120_"
|
||||
price_10 = round(stock[i]["close"] / 10)
|
||||
if stock[-i]["open"] < stock[-i]["close"]:
|
||||
top = stock[-i]["close"]
|
||||
bottom = stock[-i]["open"]
|
||||
else:
|
||||
top = stock[-i]["open"]
|
||||
bottom = stock[-i]["close"]
|
||||
|
||||
if len(stock) > 21:
|
||||
for i in range(2, 21):
|
||||
if stock[-i]["open"] < stock[-i]["close"]:
|
||||
if top < stock[-i]["close"]:
|
||||
top = stock[-i]["close"]
|
||||
if stock[-i]["open"] < bottom:
|
||||
bottom = stock[-i]["open"]
|
||||
else:
|
||||
if top < stock[-i]["open"]:
|
||||
top = stock[-i]["open"]
|
||||
if stock[-i]["close"] < bottom:
|
||||
bottom = stock[-i]["close"]
|
||||
|
||||
if top - bottom < price_10:
|
||||
return "danta2_"
|
||||
return ""
|
||||
|
||||
def check_days5_240_line_buying(self, stock, i):
|
||||
if stock[i]['close'] == stock[i]['high']:
|
||||
# 윗꼬리 없는 양봉이어야 한다.
|
||||
return ""
|
||||
|
||||
def check_RightArrange(self, stock, i):
|
||||
"""
|
||||
5일 선이 240일 선을 뚫고 올라온 순간 체크
|
||||
어제는 정배열이 아니었는데, 오늘은 정배열인 경우
|
||||
"""
|
||||
if stock[i-1]['close'] < stock[i-1]['avg240']:
|
||||
if stock[i]['avg240'] < stock[i]['close']:
|
||||
return "5-240_"
|
||||
if len(stock) > 2:
|
||||
if (not (stock[i-1]["avg120"] < stock[i-1]["avg60"] < stock[i-1]["avg20"] < stock[i-1]["avg5"]) and
|
||||
(stock[i]["avg120"] < stock[i]["avg60"] < stock[i]["avg20"] < stock[i]["avg5"])):
|
||||
return "arrange_"
|
||||
return ""
|
||||
|
||||
def check_W1Rate(self, stock, i):
|
||||
if len(stock) > 5:
|
||||
rate = round((stock[i]["close"] - stock[i-4]["close"]) / stock[i-4]["close"],2)
|
||||
if rate >= 0.05:
|
||||
return "1w("+str(rate)+")_"
|
||||
return ""
|
||||
Reference in New Issue
Block a user