이하영

ui

No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
...@@ -59,7 +59,7 @@ def lstm_algorithm(dataset,ai_setting): ...@@ -59,7 +59,7 @@ def lstm_algorithm(dataset,ai_setting):
59 msg += f' {ratio:.2f}% ⯆ ' 59 msg += f' {ratio:.2f}% ⯆ '
60 print(msg, end=' ') 60 print(msg, end=' ')
61 61
62 - return ai_setting['ratio_cut'] 62 + return ai_setting['ratio_cut']>=ratio
63 63
64 64
65 def create_training_engine(db_name): 65 def create_training_engine(db_name):
...@@ -78,7 +78,7 @@ def ai_filter(ai_filter_num,engine,until=datetime.datetime.today()): ...@@ -78,7 +78,7 @@ def ai_filter(ai_filter_num,engine,until=datetime.datetime.today()):
78 if ai_filter_num == 1: 78 if ai_filter_num == 1:
79 ai_setting = { 79 ai_setting = {
80 "n_steps": 100, # 시퀀스 데이터를 몇개씩 담을지 설정 80 "n_steps": 100, # 시퀀스 데이터를 몇개씩 담을지 설정
81 - "lookup_step": 30, # 단위 : 몇 일(분) 뒤의 종가를 예측 할 것 인지 81 + "lookup_step": 1, # 단위 : 몇 일(분) 뒤의 종가를 예측 할 것 인지
82 "test_size": 0.2, # train 범위 82 "test_size": 0.2, # train 범위
83 "n_layers": 4, # LSTM layer 개수 83 "n_layers": 4, # LSTM layer 개수
84 "units": 50, # LSTM neurons 개수 84 "units": 50, # LSTM neurons 개수
...@@ -87,7 +87,7 @@ def ai_filter(ai_filter_num,engine,until=datetime.datetime.today()): ...@@ -87,7 +87,7 @@ def ai_filter(ai_filter_num,engine,until=datetime.datetime.today()):
87 "optimizer": "adam", # optimizer : 최적화 알고리즘 선택 87 "optimizer": "adam", # optimizer : 최적화 알고리즘 선택
88 "batch_size": 64, # 각 학습 반복에 사용할 데이터 샘플 수 88 "batch_size": 64, # 각 학습 반복에 사용할 데이터 샘플 수
89 "epochs": 400, # 몇 번 테스트 할지 89 "epochs": 400, # 몇 번 테스트 할지
90 - "ratio_cut": 3, # 단위:(%) lookup_step 기간 뒤 ratio_cut(%) 만큼 증가 할 것이 예측 된다면 매수 90 + "ratio_cut": 2, # 단위:(%) lookup_step 기간 뒤 ratio_cut(%) 만큼 증가 할 것이 예측 된다면 매수
91 "table": "daily_craw", # 분석 시 daily_craw(일별데이터)를 이용 할지 min_craw(분별데이터)를 이용 할지 91 "table": "daily_craw", # 분석 시 daily_craw(일별데이터)를 이용 할지 min_craw(분별데이터)를 이용 할지
92 "is_used_predicted_close" : True # ratio(예상 상승률) 계산 시 예측 그래프의 close 값을 이용 할 경우 True, 92 "is_used_predicted_close" : True # ratio(예상 상승률) 계산 시 예측 그래프의 close 값을 이용 할 경우 True,
93 # 실제 close 값을 이용할 시 False 93 # 실제 close 값을 이용할 시 False
...@@ -109,6 +109,7 @@ def ai_filter(ai_filter_num,engine,until=datetime.datetime.today()): ...@@ -109,6 +109,7 @@ def ai_filter(ai_filter_num,engine,until=datetime.datetime.today()):
109 feature_columns = ["close", "volume", "open", "high", "low"] 109 feature_columns = ["close", "volume", "open", "high", "low"]
110 filtered_list = [] 110 filtered_list = []
111 for code_name in buy_list: 111 for code_name in buy_list:
112 + code_name=code_name[0]
112 sql = """ 113 sql = """
113 SELECT {} FROM `{}` 114 SELECT {} FROM `{}`
114 WHERE STR_TO_DATE(date, '%Y%m%d%H%i') <= '{}' 115 WHERE STR_TO_DATE(date, '%Y%m%d%H%i') <= '{}'
......
1 import pymysql 1 import pymysql
2 pymysql.install_as_MySQLdb() 2 pymysql.install_as_MySQLdb()
3 -import sys
4 3
5 from library.collector_api import * 4 from library.collector_api import *
5 +import library.cf
6 6
7 class Collector: 7 class Collector:
8 - def __init__(self): 8 + def __init__(self,num=1):
9 + self.set_simul_num(num)
9 self.collector_api=collector_api() 10 self.collector_api=collector_api()
10 11
11 def collecting(self): 12 def collecting(self):
12 self.collector_api.code_update_check() 13 self.collector_api.code_update_check()
13 14
15 + def set_simul_num(self,num):
16 + library.cf.test_num=num
17 +
18 + def set_real_num(self,num=1):
19 + library.cf.real_num=num
20 +
14 if __name__=="__main__": 21 if __name__=="__main__":
15 app=QApplication(sys.argv) 22 app=QApplication(sys.argv)
16 c=Collector() 23 c=Collector()
......
1 +import sys
2 +from PyQt5.QtWidgets import *
3 +import numpy as np
4 +import matplotlib.pyplot as plt
5 +from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
6 +
7 +from sqlalchemy import create_engine
8 +from library.cf import *
9 +
10 +class Graph(QDialog):
11 + def __init__(self,num=1):
12 + QDialog.__init__(self,None)
13 + self.setGeometry(200,200,1000,800)
14 +
15 + self.engine1 = create_engine("mysql+pymysql://" + db_id + ":" + db_pw + "@" +
16 + db_ip + ":" + db_port + "/simul1", encoding='utf-8')
17 + self.engine2 = create_engine("mysql+pymysql://" + db_id + ":" + db_pw + "@" +
18 + db_ip + ":" + db_port + "/simul2", encoding='utf-8')
19 + self.engine3 = create_engine("mysql+pymysql://" + db_id + ":" + db_pw + "@" +
20 + db_ip + ":" + db_port + "/simul3", encoding='utf-8')
21 + self.engine4 = create_engine("mysql+pymysql://" + db_id + ":" + db_pw + "@" +
22 + db_ip + ":" + db_port + "/simul4", encoding='utf-8')
23 +
24 + date,data=self.getAlgorithm(num)
25 +
26 + col=""
27 + if num==1:
28 + col="red"
29 + elif num==2:
30 + col="blue"
31 + elif num==3:
32 + col="green"
33 + elif num==4:
34 + col="purple"
35 +
36 + N = len(data)
37 + value = data
38 + ind = np.arange(N)
39 + width = 0.35
40 +
41 + self.fig = plt.Figure()
42 + ax = self.fig.add_subplot(111)
43 + ax.bar(ind, value, width,color=col)
44 + ax.set_xticks(ind + width / 20)
45 + ax.set_xticklabels(date)
46 +
47 + canvas = FigureCanvas(self.fig)
48 + canvas.draw()
49 +
50 + lay=QVBoxLayout()
51 + self.setLayout(lay)
52 + lay.addWidget(canvas)
53 + canvas.show()
54 +
55 +
56 + def getdata(self,engine):
57 + query="select date, sum_valuation_profit from jango_data order by date"
58 + result=engine.execute(query).fetchall()
59 + date=list()
60 + data=list()
61 + for i in range(len(result)):
62 + date.append(result[i][0])
63 + data.append(int(result[i][1]))
64 + return date,data
65 +
66 + def getAlgorithm(self,num):
67 + if num==1:
68 + engine=self.engine1
69 + elif num==2:
70 + engine=self.engine2
71 + elif num==3:
72 + engine=self.engine3
73 + elif num==4:
74 + engine=self.engine4
75 + else:
76 + sys.exit()
77 + date,data=self.getdata(engine)
78 + return date,data
79 +
80 +if __name__=="__main__":
81 + app=QApplication(sys.argv)
82 + main_dialog=Graph()
83 + main_dialog.show()
84 + app.exec_()
...@@ -75,7 +75,7 @@ def load_data(df,n_steps=100,lookup_step=1,test_size=0.2,shuffle=True): ...@@ -75,7 +75,7 @@ def load_data(df,n_steps=100,lookup_step=1,test_size=0.2,shuffle=True):
75 75
76 last_sequence=list(sequences)+list(last_sequence) 76 last_sequence=list(sequences)+list(last_sequence)
77 last_sequence=np.array(pd.DataFrame(last_sequence).shift(-1).dropna()) 77 last_sequence=np.array(pd.DataFrame(last_sequence).shift(-1).dropna())
78 - 78 + result['last_sequence']=last_sequence
79 X,y=[],[] 79 X,y=[],[]
80 80
81 for seq,target in sequence_data: 81 for seq,target in sequence_data:
......
...@@ -564,28 +564,101 @@ class simulator_api: ...@@ -564,28 +564,101 @@ class simulator_api:
564 564
565 # 다음날 매수 할 종목의 리스트를 선정하는 함수 565 # 다음날 매수 할 종목의 리스트를 선정하는 함수
566 def db_to_realtime_daily_buy_list(self,date_rows_today,date_rows_yesterday,i): 566 def db_to_realtime_daily_buy_list(self,date_rows_today,date_rows_yesterday,i):
567 - realtime_daily_buy_list=None # 다음날 매수할 종목 리스트를 저장하는 변수 567 + realtime_daily_buy_list=list() # 다음날 매수할 종목 리스트를 저장하는 변수
568 + if self.db_to_realtime_daily_buy_list_num in [5,6,7,8]:
569 + self.use_ai=True
570 +
568 # (5,20) 골든크로스 571 # (5,20) 골든크로스
569 - if self.db_to_realtime_daily_buy_list_num == 1: 572 + if self.db_to_realtime_daily_buy_list_num in [1,5]:
570 query=f"select * from `{date_rows_yesterday}` " \ 573 query=f"select * from `{date_rows_yesterday}` " \
571 f"where yes_clo20>yes_clo5 and clo5>clo20 and close<'{self.invest_unit}' group by code" 574 f"where yes_clo20>yes_clo5 and clo5>clo20 and close<'{self.invest_unit}' group by code"
572 realtime_daily_buy_list=self.engine_daily_buy_list.execute(query).fetchall() 575 realtime_daily_buy_list=self.engine_daily_buy_list.execute(query).fetchall()
573 576
574 # (20,60) 골든크로스 577 # (20,60) 골든크로스
575 - elif self.db_to_realtime_daily_buy_list_num == 2: 578 + elif self.db_to_realtime_daily_buy_list_num in [2,6]:
576 query = f"select * from `{date_rows_yesterday}` " \ 579 query = f"select * from `{date_rows_yesterday}` " \
577 - f"where yes_clo40 > yes_clo5 and clo5 > clo40 and close < '{self.invest_unit}' group by code" 580 + f"where yes_clo60 > yes_clo20 and clo20 > clo60 and close < '{self.invest_unit}' group by code"
578 realtime_daily_buy_list = self.engine_daily_buy_list.execute(query).fetchall() 581 realtime_daily_buy_list = self.engine_daily_buy_list.execute(query).fetchall()
579 - """ 582 +
580 # RSI 583 # RSI
581 - elif self.db_to_realtime_daily_buy_list_num==3: 584 + elif self.db_to_realtime_daily_buy_list_num in [3,7]:
582 - au_query=f"select " 585 + realtime_daily_buy_list=list()
586 + self.sell_list=list()
587 +
588 + date_form=datetime.datetime.strptime(date_rows_yesterday,"%Y%m%d").date()
589 + weeks_ago=date_form-datetime.timedelta(14)
590 + weeks_ago=weeks_ago.strftime("%Y%m%d")
591 + query="SELECT table_name as tname FROM information_schema.tables " \
592 + "WHERE table_schema ='daily_craw'"
593 + name_list=self.engine_daily_craw.execute(query).fetchall()
594 + for i in range(len(name_list)):
595 + name=name_list[i]
596 + name=name[0]
597 + au_query=f"select sum(d1_diff) from `{name}` where d1_diff>0 and " \
598 + f"{weeks_ago}<=date and date<={date_rows_yesterday} " \
599 + f"group by code"
600 + au=self.engine_daily_craw.execute(au_query).fetchall()
601 + ad_query=f"select sum(d1_diff) from `{name}` where d1_diff<0 and " \
602 + f"{weeks_ago}<=date and date<={date_rows_yesterday} " \
603 + f"group by code"
604 + ad=self.engine_daily_craw.execute(ad_query).fetchall()
605 +
606 + if len(au)==0 or len(ad)==0:
607 + continue
608 +
609 + au=au[0][0]
610 + ad=ad[0][0]
611 +
612 + au=float(au/14)
613 + ad=float(ad/14)*(-1)
614 + rsi=float(au/(au+ad))
615 +
616 + if rsi<0.3:
617 + query=f"select * from `{date_rows_yesterday}` where code_name='{name}'"
618 + val=self.engine_daily_buy_list.execute(query).fetchall()
619 + realtime_daily_buy_list.append(val[0])
620 +
583 # RMI 621 # RMI
584 - elif self.db_to_realtime_daily_buy_list_num==4: 622 + elif self.db_to_realtime_daily_buy_list_num in [4,8]:
623 + realtime_daily_buy_list = list()
624 + self.sell_list = list()
625 +
626 + date_form = datetime.datetime.strptime(date_rows_yesterday, "%Y%m%d").date()
627 + weeks_ago = date_form - datetime.timedelta(14)
628 + weeks_ago = weeks_ago.strftime("%Y%m%d")
629 + query = "SELECT table_name as tname FROM information_schema.tables " \
630 + "WHERE table_schema ='daily_craw'"
631 + name_list = self.engine_daily_craw.execute(query).fetchall()
632 + for i in range(len(name_list)):
633 + name = name_list[i]
634 + name = name[0]
635 + mu_query = f"select sum(dn_diff) from `{name}` where dn_diff>0 and " \
636 + f"{weeks_ago}<=date and date<={date_rows_yesterday} " \
637 + f"group by code"
638 + mu = self.engine_daily_craw.execute(mu_query).fetchall()
639 + md_query = f"select sum(dn_diff) from `{name}` where dn_diff<0 and " \
640 + f"{weeks_ago}<=date and date<={date_rows_yesterday} " \
641 + f"group by code"
642 + md = self.engine_daily_craw.execute(md_query).fetchall()
643 +
644 + if len(mu) == 0 or len(md) == 0:
645 + continue
646 +
647 + mu = mu[0][0]
648 + md = md[0][0]
649 +
650 + mu = float(mu / 14)
651 + md = float(md / 14) * (-1)
652 + rmi = float(mu / (mu + md))
653 +
654 + if rmi < 0.3:
655 + query = f"select * from `{date_rows_yesterday}` where code_name='{name}'"
656 + val = self.engine_daily_buy_list.execute(query).fetchall()
657 + realtime_daily_buy_list.append(val[0])
585 658
586 else: 659 else:
587 logger.error("Invalid Algorithm Setting...") 660 logger.error("Invalid Algorithm Setting...")
588 - """ 661 +
589 # 알고리즘에 의해 선택된 항목이 존재한다면 데이터베이스에 해당 항목 업데이트 662 # 알고리즘에 의해 선택된 항목이 존재한다면 데이터베이스에 해당 항목 업데이트
590 if len(realtime_daily_buy_list) > 0: 663 if len(realtime_daily_buy_list) > 0:
591 df_realtime_daily_buy_list = DataFrame(realtime_daily_buy_list, 664 df_realtime_daily_buy_list = DataFrame(realtime_daily_buy_list,
...@@ -620,10 +693,10 @@ class simulator_api: ...@@ -620,10 +693,10 @@ class simulator_api:
620 693
621 # 딥러닝 알고리즘을 이용 694 # 딥러닝 알고리즘을 이용
622 if self.use_ai: 695 if self.use_ai:
696 + print(date_rows_today)
623 from ai_trader import ai_filter 697 from ai_trader import ai_filter
624 ai_filter(self.ai_num, engine=self.engine_simul, until=date_rows_yesterday) 698 ai_filter(self.ai_num, engine=self.engine_simul, until=date_rows_yesterday)
625 699
626 -
627 # 모의투자 / 실전투자 700 # 모의투자 / 실전투자
628 else: 701 else:
629 df_realtime_daily_buy_list['check_item'] = int(0) 702 df_realtime_daily_buy_list['check_item'] = int(0)
...@@ -851,6 +924,7 @@ class simulator_api: ...@@ -851,6 +924,7 @@ class simulator_api:
851 def auto_trade_sell_stock(self,date,i): 924 def auto_trade_sell_stock(self,date,i):
852 # 매도할 리스트를 저장 925 # 매도할 리스트를 저장
853 sell_list=self.get_sell_list(i) 926 sell_list=self.get_sell_list(i)
927 + print(sell_list)
854 928
855 for j in range(len(sell_list)): 929 for j in range(len(sell_list)):
856 sell_code=sell_list[j][0] 930 sell_code=sell_list[j][0]
...@@ -905,9 +979,16 @@ class simulator_api: ...@@ -905,9 +979,16 @@ class simulator_api:
905 sell_list=self.engine_simul.execute(query).fetchall() 979 sell_list=self.engine_simul.execute(query).fetchall()
906 980
907 # RSI 981 # RSI
908 - #elif self.sell_algorithm==3: 982 + elif self.sell_list_num==3:
983 + query=f"select code,rate,present_price,valuation_price from all_stocks " \
984 + f"where sell_date='0' and (clo5<clo20 or rate<='{self.losscut_point}') group by code"
985 + sell_list=self.engine_simul.execute(query).fetchall()
986 +
909 # RMI 987 # RMI
910 - #elif self.sell_algorithm==4: 988 + elif self.sell_list_num==4:
989 + query=f"select code,rate, present_price,valuation_price from all_stocks " \
990 + f"where sell_date='0' and (clo20<clo60 or rate<='{self.losscut_point}') group by code"
991 + sell_list=self.engine_simul.execute(query).fetchall()
911 992
912 else: 993 else:
913 logger.error("Invalid sell algorithm setting...") 994 logger.error("Invalid sell algorithm setting...")
......
...@@ -21,7 +21,7 @@ real_daily_craw_db_name = "daily_craw" ...@@ -21,7 +21,7 @@ real_daily_craw_db_name = "daily_craw"
21 real_daily_buy_list_db_name = "daily_buy_list" 21 real_daily_buy_list_db_name = "daily_buy_list"
22 22
23 # 시뮬레이션을 돌리기 시작할 날짜 23 # 시뮬레이션을 돌리기 시작할 날짜
24 -start_daily_buy_list='20190102' 24 +start_daily_buy_list='20150101'
25 25
26 # api를 최대 몇 번까지 호출 하고 봇을 끌지 설정 하는 옵션 26 # api를 최대 몇 번까지 호출 하고 봇을 끌지 설정 하는 옵션
27 max_api_call=998 27 max_api_call=998
......
...@@ -293,7 +293,7 @@ class collector_api(): ...@@ -293,7 +293,7 @@ class collector_api():
293 293
294 # 특정 종목명(code_name)의 테이블이 존재하는 경우 294 # 특정 종목명(code_name)의 테이블이 존재하는 경우
295 if self.engine_bot.dialect.has_table(self.open_api.engine_daily_craw, code_name): 295 if self.engine_bot.dialect.has_table(self.open_api.engine_daily_craw, code_name):
296 - query=f"select * from {code_name} where date='{oldest_row['date']}' limit 1" 296 + query=f"select * from `{code_name}` where date='{oldest_row['date']}' limit 1"
297 check_row = self.open_api.engine_daily_craw.execute(query).fetchall() 297 check_row = self.open_api.engine_daily_craw.execute(query).fetchall()
298 # 종목명 테이블이 존재하지 않는 경우, 종목 리스트(stock_item_all) 테이블에 check_daily_crawler=4 업데이트 298 # 종목명 테이블이 존재하지 않는 경우, 종목 리스트(stock_item_all) 테이블에 check_daily_crawler=4 업데이트
299 else: 299 else:
......
...@@ -282,7 +282,6 @@ class open_api(QAxWidget): ...@@ -282,7 +282,6 @@ class open_api(QAxWidget):
282 # 국내주식 잔고전달 282 # 국내주식 잔고전달
283 elif sGubun=="1": 283 elif sGubun=="1":
284 chegyul_fail_amount=self.get_chejan_data(902) 284 chegyul_fail_amount=self.get_chejan_data(902)
285 - logger.debug("미체결 수량 : "+chegyul_fail_amount)
286 285
287 else: 286 else:
288 logger.debug("Invlid _receive_chejan_data") 287 logger.debug("Invlid _receive_chejan_data")
...@@ -325,7 +324,7 @@ class open_api(QAxWidget): ...@@ -325,7 +324,7 @@ class open_api(QAxWidget):
325 def sell_chegyul_fail_check(self,code): 324 def sell_chegyul_fail_check(self,code):
326 query = f"UPDATE all_stocks SET chegyul_check='1' WHERE code='{code}' and sell_date = '0' " \ 325 query = f"UPDATE all_stocks SET chegyul_check='1' WHERE code='{code}' and sell_date = '0' " \
327 f"ORDER BY buy_date desc LIMIT 1" 326 f"ORDER BY buy_date desc LIMIT 1"
328 - self.engine_JB.execute(query) 327 + self.engine_bot.execute(query)
329 328
330 # OnReceiveChejan()이벤트가 호출될때 체결정보나 잔고정보를 얻어오는 함수 329 # OnReceiveChejan()이벤트가 호출될때 체결정보나 잔고정보를 얻어오는 함수
331 # param : nFid - 실시간 타입에 포함된 FID 330 # param : nFid - 실시간 타입에 포함된 FID
...@@ -767,7 +766,7 @@ class open_api(QAxWidget): ...@@ -767,7 +766,7 @@ class open_api(QAxWidget):
767 # daily_craw의 특정 종목 테이블에서 마지막으로 저장된 날짜를 가져오는 함수 766 # daily_craw의 특정 종목 테이블에서 마지막으로 저장된 날짜를 가져오는 함수
768 # 저장된 데이터가 없다면 '0'문자를 반환 767 # 저장된 데이터가 없다면 '0'문자를 반환
769 def get_daily_craw_db_last_date(self,code_name): 768 def get_daily_craw_db_last_date(self,code_name):
770 - query="select date from {} order by date desc limit 1" 769 + query="select date from `{}` order by date desc limit 1"
771 result=self.engine_daily_craw.execute(query.format(code_name)).fetchall() 770 result=self.engine_daily_craw.execute(query.format(code_name)).fetchall()
772 if len(result): 771 if len(result):
773 return result[0][0] 772 return result[0][0]
...@@ -895,7 +894,7 @@ class open_api(QAxWidget): ...@@ -895,7 +894,7 @@ class open_api(QAxWidget):
895 894
896 # min_craw 테이블에서 마지막에 저장한 행의 시간(분) 정보를 가져오는 함수 895 # min_craw 테이블에서 마지막에 저장한 행의 시간(분) 정보를 가져오는 함수
897 def get_craw_db_last_min(self,code_name): 896 def get_craw_db_last_min(self,code_name):
898 - query = f"SELECT date from {code_name} order by date desc limit 1" 897 + query = f"SELECT date from `{code_name}` order by date desc limit 1"
899 result = self.engine_craw.execute(query).fetchall() 898 result = self.engine_craw.execute(query).fetchall()
900 if len(result): 899 if len(result):
901 return result[0][0] 900 return result[0][0]
......
...@@ -14,7 +14,7 @@ class Trader(QMainWindow): ...@@ -14,7 +14,7 @@ class Trader(QMainWindow):
14 14
15 self.market_start_time=QTime(9,0,0) # 장시작 시간 15 self.market_start_time=QTime(9,0,0) # 장시작 시간
16 self.market_end_time=QTime(15,30,0) # 장마감 시간 16 self.market_end_time=QTime(15,30,0) # 장마감 시간
17 - self.buy_end_time=QTime(9,30,0) # 매수를 몇 시까지 할지 17 + self.buy_end_time=QTime(15,31,0) # 매수를 몇 시까지 할지
18 18
19 # 매수 함수 19 # 매수 함수
20 def auto_trade_stock(self): 20 def auto_trade_stock(self):
......
1 +from collector import *
2 +from trader import *
3 +from graph import *
4 +
5 +
6 +class Ui(QWidget):
7 + def __init__(self):
8 + super().__init__()
9 + self.setWindowTitle("Menu Page")
10 + self.resize(820,465)
11 +
12 + self.using_dl=QLabel("----------* Deep Learning *------------",self)
13 + self.using_dl.setGeometry(QRect(50,20,800,30))
14 + self.using_dl=QRadioButton("Using Deep Learning",self)
15 + self.using_dl.clicked.connect(self.__Rdl_Clicked)
16 + self.using_dl.setGeometry(QRect(50,70,800,30))
17 + self.not_using_dl=QRadioButton("Not Using Deep Learning",self)
18 + self.not_using_dl.setGeometry(QRect(50,120,800,30))
19 + self.not_using_dl.clicked.connect(self.__Rndl_Clicked)
20 +
21 + self.line=QLabel("----------* Algorithm *------------",self)
22 + self.line.setGeometry(QRect(50,170,800,30))
23 + self.input=QLabel("Selection : ",self)
24 + self.input.setGeometry(QRect(50,200,150,40))
25 + self.al=QLineEdit(self)
26 + self.al.setGeometry(QRect(200,200,150,40))
27 + self.al1=QLabel("1. Golden/Dead Cross(5,20)",self)
28 + self.al1.setGeometry(QRect(50,250,800,30))
29 + self.al2=QLabel("2. Golden/Dead Cross(20,60)",self)
30 + self.al2.setGeometry(QRect(50,300,800,30))
31 + self.al3=QLabel("3. RSI",self)
32 + self.al3.setGeometry(QRect(50,350,800,30))
33 + self.al4=QLabel("4. RMI",self)
34 + self.al4.setGeometry(QRect(50,400,800,30))
35 +
36 + # 매매 프로그램 시작
37 + self.btn_run=QPushButton("Trade",self)
38 + self.btn_run.setGeometry(QRect(600,50,200,70))
39 + self.btn_run.clicked.connect(self.__bRun_Clicked)
40 + # 매매 후 결과 화면
41 + self.btn_report=QPushButton("Report",self)
42 + self.btn_report.setGeometry(QRect(600,150,200,70))
43 + self.btn_report.clicked.connect(self.__bReport_Clicked)
44 + # 컬렉터
45 + self.btn_collector=QPushButton("Collector",self)
46 + self.btn_collector.setGeometry(QRect(600,250,200,70))
47 + self.btn_collector.clicked.connect(self.__bCollector_Clicked)
48 + # 프로그램 종료
49 + self.btn_exit=QPushButton("Exit",self)
50 + self.btn_exit.setGeometry(QRect(600,350,200,70))
51 + self.btn_exit.clicked.connect(self.__bExit_Clicked)
52 +
53 + self.option=-1
54 +
55 + def __Rdl_Clicked(self):
56 + if self.using_dl.isChecked():
57 + self.option=0
58 +
59 + def __Rndl_Clicked(self):
60 + if self.not_using_dl.isChecked():
61 + self.option=4
62 +
63 + # open selection page for rpa
64 + def __bRun_Clicked(self):
65 + trader = Trader()
66 + trader.run()
67 +
68 + def __bReport_Clicked(self):
69 + if self.al.text() not in ['1','2','3','4']:
70 + print("error")
71 + else:
72 + g=Graph(int(self.al.text()))
73 + g.exec()
74 + g.show()
75 +
76 + def __bCollector_Clicked(self):
77 + algorithm_num=0
78 + if self.al.text()=="" or self.option==-1:
79 + print("error")
80 + else:
81 + algorithm_num=self.option+int(self.al.text())
82 +
83 + c = Collector(algorithm_num)
84 + c.collecting()
85 +
86 + def __bExit_Clicked(self):
87 + self.close()
88 + sys.exit()
89 +
90 +if __name__=="__main__":
91 + app = QApplication(sys.argv)
92 + ui=Ui()
93 + ui.show()
94 + app.exec_()
...\ No newline at end of file ...\ No newline at end of file