This commit is contained in:
dsyoon
2021-07-13 20:00:24 +09:00
parent 02ffb74849
commit ffdd8dea70
5 changed files with 37 additions and 33204 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -62,12 +62,15 @@ class Analyzer:
cursor.execute('SELECT * FROM fnguide WHERE rowid=?', (rowid,)) cursor.execute('SELECT * FROM fnguide WHERE rowid=?', (rowid,))
result = cursor.fetchone() result = cursor.fetchone()
while result != None: while result != None:
if result[2] == "227950":
print (1)
data = json.loads(result[2]) data = json.loads(result[2])
self.fnguide[result[0]] = True self.fnguide[result[0]] = True
if (year1 in data and year2 in data and year3 in data): if (year1 in data and year2 in data and year3 in data):
if (data[year1]['영업이익'] < 0 and data[year2]['영업이익'] < 0 and data[year3]['영업이익'] < 0): if (data[year1]['영업이익'] < 0 or data[year2]['영업이익'] < 0 or data[year3]['영업이익'] < 0):
# 3년 연속 영업이익이 적자이면 매수하지 않는다. # and 3년 연속 영업이익이 적자이면 매수하지 않는다.
# or: 3년 중 1번이라도 영업이익이 적자이면 매수하지 않는다.
self.fnguide[result[0]] = False self.fnguide[result[0]] = False
if (data[year1]['영업이익'] < -100): if (data[year1]['영업이익'] < -100):
# 전년 영억적자가 100억 이상이면 매수하지 않는다. # 전년 영억적자가 100억 이상이면 매수하지 않는다.
@@ -345,6 +348,12 @@ class Analyzer:
status += eveningstar_status status += eveningstar_status
""" """
# Potential Energy
potential_energy_status = self.common.checkPotentialEnergy(STOCK, i)
# 365일 중 가장 찾은 금액과 가장 높았던 금액 중 현재가의 위치 계산
if potential_energy_status != "":
status += potential_energy_status
return status, buy_price return status, buy_price
# 그래프 출력 # 그래프 출력

View File

@@ -512,11 +512,32 @@ class Common:
어제는 정배열이 아니었는데, 오늘은 정배열인 경우 어제는 정배열이 아니었는데, 오늘은 정배열인 경우
""" """
if len(stock) > 2: if len(stock) > 2:
if (not (stock[i-1]["avg120"] < stock[i-1]["avg60"] < stock[i-1]["avg20"] < stock[i-1]["avg5"]) and 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"]):
(stock[i]["avg120"] < stock[i]["avg60"] < stock[i]["avg20"] < stock[i]["avg5"])):
return "arrange_" return "arrange_"
return "" return ""
def checkPotentialEnergy(self, stock, i):
# 365일 중 가장 찾은 금액과 가장 높았던 금액 중 현재가의 위치 계산
top = stock[i]['close']
bottom = stock[i]['close']
price = stock[i]['close']
if len(stock) > 365:
for i in range(2, 365):
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.5:
return "e(" + str(round(energy, 2)) + ")_"
return ""
def check_W1Rise(self, stock, i, limit): def check_W1Rise(self, stock, i, limit):
if len(stock) > 5: if len(stock) > 5:
rate = round((stock[i]["close"] - stock[i-4]["close"]) / stock[i-4]["close"],2) rate = round((stock[i]["close"] - stock[i-4]["close"]) / stock[i-4]["close"],2)

View File

@@ -5,6 +5,7 @@ import time
from stockpredictor.crawler.toSQLite.MetaCrawler import MetaCrawler from stockpredictor.crawler.toSQLite.MetaCrawler import MetaCrawler
from stockpredictor.crawler.toSQLite.StockCrawler import StockCrawler from stockpredictor.crawler.toSQLite.StockCrawler import StockCrawler
from stockpredictor.crawler.toSQLite.FnGuideCrawler import FnGuideCrawler
from stockpredictor.analysis.Analyzer import Analyzer from stockpredictor.analysis.Analyzer import Analyzer
today = datetime.datetime.now().strftime("%Y-%m-%d") today = datetime.datetime.now().strftime("%Y-%m-%d")
@@ -14,14 +15,13 @@ today = datetime.datetime.now().strftime("%Y-%m-%d")
PROJECT_HOME = "../../.." PROJECT_HOME = "../../.."
start = time.time() start = time.time()
inFnguideFileName = PROJECT_HOME + '/resources/fnguide.db'
""" """
inFnguideFileName = PROJECT_HOME + '/resources/fnguide.db'
crawler = FnGuideCrawler() crawler = FnGuideCrawler()
print("[KOSPI 상장기업 재무제표 다운로드]") print("[KOSPI 상장기업 재무제표 다운로드]")
crawler.crawl_fnguide(inFnguideFileName) crawler.crawl_fnguide(inFnguideFileName)
""" """
crawler = MetaCrawler() crawler = MetaCrawler()
print("\n[환율 (USD, JPY, EUR, CNY), 원유 (WTI), 국제금]") print("\n[환율 (USD, JPY, EUR, CNY), 원유 (WTI), 국제금]")
inFileName = PROJECT_HOME + '/resources/meta_1.db' inFileName = PROJECT_HOME + '/resources/meta_1.db'
@@ -59,7 +59,6 @@ inFileName = PROJECT_HOME + '/resources/stock.db'
analyzer = Analyzer(PROJECT_HOME, inFileName, inFnguideFileName) analyzer = Analyzer(PROJECT_HOME, inFileName, inFnguideFileName)
analyzer.analyze() analyzer.analyze()
print("\n[종목 결정]") print("\n[종목 결정]")
day = datetime.datetime.today().strftime("%Y%m%d") day = datetime.datetime.today().strftime("%Y%m%d")
outPath = PROJECT_HOME + "/resources/analysis/" + day outPath = PROJECT_HOME + "/resources/analysis/" + day
@@ -70,7 +69,6 @@ print("print to Html...")
analyzer.analyzeToHtml(outPath) analyzer.analyzeToHtml(outPath)
# E: 분석까지 진행 # E: 분석까지 진행
print("time : %6.2f", (time.time() - start)) print("time : %6.2f", (time.time() - start))
print ("done...") print ("done...")

View File

@@ -12,7 +12,6 @@ class FnGuideCrawler:
def getStockInfo(self): def getStockInfo(self):
#code_df = pd.read_html('http://kind.krx.co.kr/corpgeneral/corpList.do?method=download&searchType=13', header=0)[0] #code_df = pd.read_html('http://kind.krx.co.kr/corpgeneral/corpList.do?method=download&searchType=13', header=0)[0]
code_df = pd.read_html(requests.get('http://kind.krx.co.kr/corpgeneral/corpList.do?method=download&searchType=13', headers=self.header).text) code_df = pd.read_html(requests.get('http://kind.krx.co.kr/corpgeneral/corpList.do?method=download&searchType=13', headers=self.header).text)
# code_df = pd.read_excel('../resources/stock/상장법인목록.xls')
# 종목코드가 6자리이기 때문에 6자리를 맞춰주기 위해 설정해줌 # 종목코드가 6자리이기 때문에 6자리를 맞춰주기 위해 설정해줌
code_df.종목코드 = code_df.종목코드.map('{:06d}'.format) code_df.종목코드 = code_df.종목코드.map('{:06d}'.format)