이하영

종목별 데이터(daily_crawler) 데이터베이스

1 +import math
2 +import pymysql
3 +import datetime
4 +from sqlalchemy import create_engine
5 +import pandas as pd
6 +from PyQt5.QtCore import *
7 +
8 +import cf
9 +
10 +pymysql.install_as_MySQLdb()
11 +
12 +# -* daily_crawler *-
13 +# 종목별 일자별 데이터를 저장하는 데이터베이스
14 +
15 +class daily_crawler():
16 + def __init__(self, db_name, daily_craw_db_name, daily_buy_list_db_name):
17 + # db_name==0인 경우는 simulator
18 + if db_name != 0:
19 + self.db_name = db_name
20 + self.daily_craw_db_name = daily_craw_db_name
21 +
22 + self.daily_buy_list_db_name = daily_buy_list_db_name
23 +
24 + self.engine = create_engine(
25 + "mysql+pymysql://" + cf.db_id + ":" + cf.db_pw + "@" + cf.db_ip + ":" + cf.db_port + "/daily_craw",
26 + encoding='utf-8')
27 + self.daily_craw_db_con = self.engine.connect()
28 +
29 + self.variable_setting()
30 + else:
31 + pass
32 +
33 + # 업데이트가 금일 제대로 끝났는지 확인하는 함수
34 + def variable_setting(self):
35 +
36 + self.market_start_time = QTime(9, 0, 0) # 장 시작시간
37 + self.market_end_time = QTime(15, 31, 0) # 장 마감시간
38 +
39 + self.today = datetime.datetime.today().strftime("%Y%m%d")
40 + self.today_detail = datetime.datetime.today().strftime("%Y%m%d%H%M")
41 +
42 + # 현재 시간에 장이 열려있는지 확인하는 함수
43 + def market_time_check(self):
44 + self.current_time = QTime.currentTime()
45 + if self.current_time > self.market_start_time and self.current_time < self.market_end_time:
46 + return True
47 + else:
48 + return False
1 -import datetime
2 -from sqlalchemy import *
3 -from pandas import DataFrame
4 -
5 -import config
6 -
7 -class Daily_Info():
8 - def __init__(self):
9 - self.set_variable()
10 -
11 - def set_variable(self):
12 - self.today=datetime.datetime.today().strftime("%Y%m%d")
13 - self.today_time=datetime.datetime.today().strftime("%Y%m%d%H%M")
14 - self.start_date=config.start_buying
15 - self.engine_daily=create_engine(
16 - "mysql+pymysql://" + config.db_id + ":" + config.db_pw + "@" + config.db_ip + ":" + config.db_port +
17 - "/daily_info", encoding='utf-8')
18 - self.engine_stock=create_engine(
19 - "mysql+pymysql://" + config.db_id + ":" + config.db_pw + "@" + config.db_ip + ":" + config.db_port +
20 - "/stock_info", encoding='utf-8')
21 -
22 - # 지정한 날짜부터 현재까지의 날짜 리스트를 반환
23 - # 모든 지정한 날짜에 대해 정확한 값을 반환하기 위해
24 - # 한국에서 가장 오래된 상장기업 중 하나인 'CJ대한통운' 테이블을 활용한다
25 - def set_date_rows(self):
26 - query="select date from 'CJ대한통운' where date>=%s group by date"
27 - self.date_rows=self.engine_stock.execute(query%self.start_date)
28 -
29 - # date에 해당하는 이름을 가진 테이블이 daily_info 데이터베이스 안에 존재하는지 확인하는 함수
30 - def is_date_table_exist(self,date):
31 - query = "select 1 from information_schema.tables where table_schema ='daily_info' and table_name = '%s'"
32 - result=self.engine_daily.execute(query%date).fetchall()
33 - if len(result)==0:
34 - return False
35 - else:
36 - return True
37 -
38 - # 날짜에 해당하는 테이블 생성
39 - def create_daily_table(self):
40 - print("setting daily_info database!!")
41 - self.set_date_rows()
42 - self.get_all_stock_list()
43 -
44 - for date in self.date_rows:
45 - if not self.is_date_table_exist(date):
46 - print(date,"테이블이 존재하지 않습니다. 테이블을 생성합니다")
47 -
48 - daily_list=list()
49 -
50 - for i in range(len(self.stock_all)):
51 - code_name=self.stock_all.loc[i][0]
52 - code=self.stock_all.loc[i][1]
53 -
54 - if self.is_stock_table_exist(code,code_name):
55 - query="select * from {} where date='{}' group by date"
56 - result=self.engine_stock.execute(query.format(code_name,date)).fetchall()
57 - daily_list+=result
58 -
59 - # diff_rate : 전날대비 가격 상승/하락률
60 - # close : 종가
61 - # open : 시가
62 - # high : 고가
63 - # low : 저가
64 - # volume : 거래량
65 - # avg5 : 5일 이동평균선
66 - # ...
67 - # prev_avg5 : 전날의 5일 이동평균선
68 - # ...
69 - # vol5 : 5일동안 거래량의 평균
70 - # ...
71 - if (len(daily_list)!=0):
72 - df=DataFrame(daily_list,
73 - columns=['index', 'date', 'code', 'code_name', 'diff_rate',
74 - 'close', 'open', 'high', 'low', 'volume',
75 - 'avg5', 'avg10', 'avg20', 'avg60', 'avg120',
76 - 'prev_avg5', 'prev_avg10', 'prev_avg20', 'prev_avg60', 'prev_avg120',
77 - 'vol5', 'vol10', 'vol20', 'vol60', 'vol120'
78 - ])
79 - df.to_sql(name=date,con=self.engine_daily,if_exists='replace')
80 -
81 - # 데이터베이스에 저장된 모든 주식 리스트를 가져오는 함수
82 - def get_all_stock_list(self):
83 - query="select code_name,code from stock_all"
84 - self.stock_all=self.engine_daily.execute(query).fetchall()
85 -
86 - # stock info 데이터베이스에 code_name 테이블이 존재하는지 확인하는 함수
87 - def is_stock_table_exist(self,code,code_name):
88 - query = "select 1 from information_schema.tables where table_schema ='stock_info' and table_name = '%s'"
89 - result=self.engine_stock.execute(query%code_name).fetchall()
90 - if len(result)==0:
91 - return False
92 - else:
93 - return True
...\ No newline at end of file ...\ No newline at end of file
1 -from sqlalchemy import *
2 -from PyQt5.QtCore import *
3 -import datetime
4 -import pandas as pd
5 -
6 -import config
7 -
8 -class Stock_Info():
9 - def __init__(self,db_name,daily_db_name,stock_db_name):
10 - if db_name!=0:
11 - self.db_name=db_name
12 - self.daily_db_name=daily_db_name
13 - self.stock_db_name=stock_db_name
14 -
15 - self.engine=create_engine(
16 - "mysql+pymysql://" + config.db_id + ":" + config.db_pw + "@" + config.db_ip + ":" + config.db_port +
17 - "/stock_info", encoding='utf-8')
18 - self.conn=self.engine.connect()
19 -
20 - self.set_variable()
21 -
22 - # 변수 설정
23 - def set_variable(self):
24 - self.mkt_start_time=QTime(9,0,0)
25 - self.mkt_end_time=QTime(15,31,0)
26 -
27 - self.today=datetime.datetime.today().strftime("%Y%m%d")
28 - self.today_time=datetime.datetime.today().strftime("%Y%m%d%H%M")
29 -
30 - # 현재 시간이 주식 장이 열린 시간인지 확인하는 함수
31 - def check_time(self):
32 - self.current_time=QTime.currentTime()
33 - if self.current_time>self.mkt_start_time and self.current_time<self.mkt_end_time:
34 - return True
35 - else:
36 - return False
37 -
38 - # 코스피 주식 리스트 저장
39 - def get_item_kospi(self):
40 - self.kospi_list = pd.read_html(
41 - 'http://kind.krx.co.kr/corpgeneral/corpList.do?method=download&searchType=13&marketType=stockMkt',
42 - header=0)[0]
43 -
44 - self.kospi_list.종목코드 = self.kospi_list.종목코드.map('{:06d}'.format)
45 - self.kospi_list = self.kospi_list[['회사명', '종목코드']]
46 - self.kospi_list = self.kospi_list.rename(columns={'회사명': 'code_name', '종목코드': 'code'})
47 -
48 - # 코스닥 주식 리스트 저장
49 - def get_item_kosdaq(self):
50 - self.kosdaq_list = pd.read_html(
51 - 'http://kind.krx.co.kr/corpgeneral/corpList.do?method=download&searchType=13&marketType=kosdaqMkt',
52 - header=0)[0]
53 -
54 - self.kosdaq_list.종목코드 = self.kosdaq_list.종목코드.map('{:06d}'.format)
55 - self.kosdaq_list = self.kosdaq_list[['회사명', '종목코드']]
56 - self.kosdaq_list = self.kosdaq_list.rename(columns={'회사명': 'code_name', '종목코드': 'code'})
...\ No newline at end of file ...\ No newline at end of file