Showing
3 changed files
with
48 additions
and
149 deletions
proj/library/daily_crawler.py
0 → 100644
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 |
proj/library/daily_info.py
deleted
100644 → 0
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 |
proj/library/stock_info.py
deleted
100644 → 0
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 |
-
Please register or login to post a comment