This commit is contained in:
dosangyoon
2021-08-15 23:42:02 +09:00
parent 5adf586675
commit 668aed001a
2 changed files with 81 additions and 45 deletions

View File

@@ -364,20 +364,84 @@ class Analyzer:
status += eveningstar_status status += eveningstar_status
---------------------------------""" ---------------------------------"""
# 위치에너지
positional_egergy_status = self.common.checkPotentialEnergy(STOCK, i)
if positional_egergy_status != "":
status += positional_egergy_status
return status, buy_price return status, buy_price
def getPositionalEnergy(self, stock, i):
# 350일 중 가장 찾은 금액과 가장 높았던 금액 중 현재가의 위치 계산
top = stock[i]['close']
bottom = stock[i]['close']
price = stock[i]['close']
if len(stock) > 350:
for i in range(2, 350):
if top < stock[-i]["close"]:
top = stock[-i]["close"]
if stock[-i]["close"] < bottom:
bottom = stock[-i]["close"]
if top - bottom == 0:
energy = 100
else:
energy = (price - bottom) / (top - bottom)
return round(energy, 2)
def writeFile(self, fig, state, bolingerband_score, stochastic_score, positionalEnergy, item_name, item_code):
count = 0
if bolingerband_score < 0.15:
fileName = self.bolingerband_path
fileName = "%s/b(%.2f)__p(%.2f)__s(%.2f)__%s__%s_%s.html" % (fileName, bolingerband_score, positionalEnergy, stochastic_score, state, item_name.replace(" ", ""), item_code)
po.write_html(fig, file=fileName, auto_open=False)
count += 1
if stochastic_score < 15:
fileName = self.stochastic_path
fileName = "%s/s(%.2f)__b(%.2f)__p(%.2f)__%s__%s_%s.html" % (fileName, stochastic_score, bolingerband_score, positionalEnergy, state, item_name.replace(" ", ""), item_code)
po.write_html(fig, file=fileName, auto_open=False)
if positionalEnergy < 0.15:
fileName = self.positionalEnergy_path
fileName = "%s/p(%.2f)__b(%.2f)__s(%.2f)__%s__%s_%s.html" % (fileName, positionalEnergy, bolingerband_score, stochastic_score, state, item_name.replace(" ", ""), item_code)
po.write_html(fig, file=fileName, auto_open=False)
count += 1
if count > 1:
fileName = self.outPath
fileName = "%s/p(%.2f)__b(%.2f)__s(%.2f)__%s__%s_%s.html" % (fileName, positionalEnergy, bolingerband_score, stochastic_score, state, item_name.replace(" ", ""), item_code)
po.write_html(fig, file=fileName, auto_open=False)
return
def makeDirectory(self, outPath):
self.outPath = outPath
if os.path.isdir(outPath):
shutil.rmtree(outPath)
os.mkdir(outPath)
self.stochastic_path = outPath + "/stochastic"
if os.path.isdir(self.stochastic_path):
os.rmdir(self.stochastic_path)
os.mkdir(self.stochastic_path)
self.bolingerband_path = outPath + "/bolingerband"
if os.path.isdir(self.bolingerband_path):
os.rmdir(self.bolingerband_path)
os.mkdir(self.bolingerband_path)
self.positionalEnergy_path = outPath + "/positionalEnergy"
if os.path.isdir(self.positionalEnergy_path):
os.rmdir(self.positionalEnergy_path)
os.mkdir(self.positionalEnergy_path)
return
# 그래프 출력 # 그래프 출력
def analyzeToHtml(self, outPath): def analyzeToHtml(self, outPath):
tmp_path = outPath + "/tmp" self.makeDirectory(outPath)
if os.path.isdir(tmp_path):
os.rmdir(tmp_path)
os.mkdir(tmp_path)
conn = sqlite3.connect(self.inFileName) conn = sqlite3.connect(self.inFileName)
cursor = conn.cursor() cursor = conn.cursor()
@@ -425,24 +489,17 @@ class Analyzer:
else: else:
bolingerband_score = round(((STOCK[last_index]['close']-BOLINGERBAND[last_index]['lower'])/(BOLINGERBAND[last_index]['upper']-BOLINGERBAND[last_index]['lower'])), 2) bolingerband_score = round(((STOCK[last_index]['close']-BOLINGERBAND[last_index]['lower'])/(BOLINGERBAND[last_index]['upper']-BOLINGERBAND[last_index]['lower'])), 2)
if stochastic_score < 10 or bolingerband_score < 0.2: positionalEnergy = self.getPositionalEnergy(STOCK, last_index)
if stochastic_score < 30 or bolingerband_score < 0.3:
if STOCK[last_index]['volume'] > 100000:
# 종목 상태 체크 분석
state, buy_price = self.analyzeFinalScore(last_index, STOCK, STOCHASTIC)
# 종목 상태 체크 분석
state, buy_price = self.analyzeFinalScore(last_index, STOCK, STOCHASTIC)
if state != "":
fig = self.draw(stock) fig = self.draw(stock)
title = "%s (%s), %s, buy_price (%d), stochastic(%.2f), bolingerband(%.2f) 차트" % (item_name, item_code, state, buy_price, stochastic_score, bolingerband_score) title = "%s (%s), %s, buy_price (%d), stochastic(%.2f), bolingerband(%.2f), positionalEnergy(%.2f) 차트" % (item_name, item_code, state, buy_price, stochastic_score, bolingerband_score, positionalEnergy)
fig['layout'].update(title=title) fig['layout'].update(title=title)
fileName = "%s/%s__b(%.2f)__s(%.2f)__%s_%s.html" % (outPath, state, bolingerband_score, stochastic_score, item_name.replace(" ", ""), item_code)
po.write_html(fig, file=fileName, auto_open=False) self.writeFile(fig, state, bolingerband_score, stochastic_score, positionalEnergy, item_name, item_code)
else:
if STOCK[last_index]['volume'] > 1000000:
fig = self.draw(stock)
title = "%s (%s) buy_price (%d), stochastic(%.2f), bolingerband(%.2f) 차트"%(item_name, item_code, buy_price, stochastic_score, bolingerband_score)
fig['layout'].update(title=title)
fileName = "%s/b(%.2f)__s(%.2f)__%s_%s.html"%(tmp_path, bolingerband_score, stochastic_score, item_name.replace(" ", ""), item_code)
po.write_html(fig, file=fileName, auto_open=False)
rowid += 1 rowid += 1
cursor.execute('SELECT * FROM ' + self.tableName + ' WHERE rowid=?', (rowid,)) cursor.execute('SELECT * FROM ' + self.tableName + ' WHERE rowid=?', (rowid,))

View File

@@ -519,27 +519,6 @@ class Common:
return "arrange_" return "arrange_"
return "" return ""
def checkPotentialEnergy(self, stock, i):
# 350일 중 가장 찾은 금액과 가장 높았던 금액 중 현재가의 위치 계산
top = stock[i]['close']
bottom = stock[i]['close']
price = stock[i]['close']
if len(stock) > 350:
for i in range(2, 350):
if top < stock[-i]["close"]:
top = stock[-i]["close"]
if stock[-i]["close"] < bottom:
bottom = stock[-i]["close"]
if top - bottom > 0:
energy = (price - bottom) / (top - bottom)
if energy < 0.2:
return "p(" + str(round(energy, 2)) + ")_"
return ""
def checkHigherUmbong(self, stock, i): def checkHigherUmbong(self, stock, i):
# 음봉인데 어제보다 종가가 더 높은 경우 # 음봉인데 어제보다 종가가 더 높은 경우
# 이 경우 정배열 상태인지도 함께 체크를 한다. # 이 경우 정배열 상태인지도 함께 체크를 한다.