이하영

trader

...@@ -74,7 +74,7 @@ class collector_api(): ...@@ -74,7 +74,7 @@ class collector_api():
74 logger.debug("collecting 작업을 모두 정상적으로 마쳤습니다.") 74 logger.debug("collecting 작업을 모두 정상적으로 마쳤습니다.")
75 75
76 # cmd 콘솔창 종료 76 # cmd 콘솔창 종료
77 - os.system("@taskkill /f /im cmd.exe") 77 + sys.exit()
78 78
79 # 매수 종목 설정 함수 79 # 매수 종목 설정 함수
80 def realtime_daily_buy_list_check(self): 80 def realtime_daily_buy_list_check(self):
......
...@@ -1067,7 +1067,7 @@ class open_api(QAxWidget): ...@@ -1067,7 +1067,7 @@ class open_api(QAxWidget):
1067 1067
1068 # 만약에 realtime_daily_buy_list 의 종목 수가 1개 이상이면 1068 # 만약에 realtime_daily_buy_list 의 종목 수가 1개 이상이면
1069 for i in range(self.sf.len_df_realtime_daily_buy_list): 1069 for i in range(self.sf.len_df_realtime_daily_buy_list):
1070 - code = self.sf.df_realtime_daily_buy_list.loc[i, 'code'] 1070 + code = self.sf.df_realtime_daily_buy_list.loc[i,'code']
1071 close = self.sf.df_realtime_daily_buy_list.loc[i, 'close'] 1071 close = self.sf.df_realtime_daily_buy_list.loc[i, 'close']
1072 check_item = self.sf.df_realtime_daily_buy_list.loc[i, 'check_item'] # 매수확인. 오늘 매수한 종목이면 1, 아니면 0 1072 check_item = self.sf.df_realtime_daily_buy_list.loc[i, 'check_item'] # 매수확인. 오늘 매수한 종목이면 1, 아니면 0
1073 1073
......
1 +from library.open_api import *
2 +from PyQt5.QtWidgets import *
3 +
4 +class Trader(QMainWindow):
5 + def __init__(self):
6 + super().__init__()
7 + self.open_api=open_api()
8 + self.current_time=QTime.currentTime()
9 + self.variable_setting()
10 +
11 + # 변수 설정
12 + def variable_setting(self):
13 + self.open_api.py_gubun="trader"
14 +
15 + self.market_start_time=QTime(9,0,0) # 장시작 시간
16 + self.market_end_time=QTime(15,30,0) # 장마감 시간
17 + self.buy_end_time=QTime(9,6,0) # 매수를 몇 시까지 할지
18 +
19 + # 매수 함수
20 + def auto_trade_stock(self):
21 + logger.debug("auto_trade_stock 함수")
22 + self.open_api.get_today_buy_list()
23 +
24 + # 매도 리스트를 저장하는 함수
25 + def get_sell_list_trade(self):
26 + logger.debug("get_sell_list 함수")
27 +
28 + # 매도 리스트를 가져오기 전에 이전에 매도완료한 항목을 DB 업데이트
29 + self.open_api.check_chegyul()
30 + self.open_api.rate_check()
31 +
32 + self.open_api.sf.get_date_for_simul()
33 + self.sell_list=self.open_api.sf.get_sell_list(len(self.open_api.sf.date_rows)) # 매도리스트
34 +
35 + # 매도 함수
36 + def auto_trade_sell_stock(self):
37 + # 잔고정보 저장
38 + self.open_api.check_balance()
39 + # 보유항목 리스트 저장
40 + self.open_api.db_to_possessed_item()
41 + # 매도를 진행하기 전, 이전에 매도 완료한 항목에 대해 DB 업데이트
42 + self.open_api.final_chegyul_check()
43 + # 매도리스트 저장
44 + self.get_sell_list_trade()
45 +
46 + for i in range(len(self.sell_list)):
47 + get_sell_code=self.sell_list[i][0] # 종목코드
48 + get_sell_rate=self.sell_list[i][1] # 매도수익률
49 + get_sell_num=self.open_api.get_holding_amount(get_sell_code) # 매도수량
50 +
51 + if get_sell_num==False:
52 + continue
53 +
54 + logger.debug("매도 종목 코드 : "+str(get_sell_code))
55 + logger.debug("매도 수익률 : "+str(get_sell_rate))
56 + logger.debug("매도 수량량 : "+str(get_sell_num))
57 +
58 + # 매도할 종목 코드가 정상적일 경우
59 + if get_sell_code!=False and get_sell_code!='0' and get_sell_code!=0:
60 + if get_sell_rate<0:
61 + # 03 : 시장가매도
62 + logger.debug("손절매도--------"+str(get_sell_code)+"-------------")
63 + self.open_api.send_order("send_order_req","0101",self.open_api.account_no,2,get_sell_code,get_sell_num,0,"03","")
64 + else:
65 + logger.debug("익절매도--------"+str(get_sell_code)+"-------------")
66 + self.open_api.send_order("send_order_req","0101",self.open_api.account_no,2,get_sell_code,get_sell_num,0,"03","")
67 + else:
68 + sys.exit()
69 +
70 + # 현재 시간에 장이 열려있는지 확인하는 함수
71 + def market_time_check(self):
72 + self.current_time=QTime.currentTime()
73 + if self.current_time>self.market_start_time and self.current_time<self.market_end_time:
74 + logger.debug('장시간입니다.')
75 + return True
76 + else:
77 + logger.debug("장시간이 아닙니다.")
78 + return False
79 +
80 + # 현재 시간이 설정해놓은 매수 시간 범위인지 확인하는 함수
81 + def buy_time_check(self):
82 + self.current_time=QTime.currentTime()
83 + if self.current_time<self.buy_end_time:
84 + return True
85 + else:
86 + return False
87 +
88 + # 거래 함수
89 + def run(self):
90 + while True:
91 + time.sleep(0.3)
92 + # 날짜 저장
93 + self.open_api.date_setting()
94 + # 장이 서있는 시간인 경우
95 + if self.market_time_check():
96 + # 매도
97 + self.auto_trade_sell_stock()
98 + # 1. 잔액이 존재하고 / 2. 매수 가능한 시간대이고 / 3. 매수 정지 옵션이 체크되어있지 않으면
99 + # 매수
100 + if self.open_api.jango_check() and self.buy_time_check() and self.open_api.buy_check():
101 + self.auto_trade_stock()
102 +
103 +if __name__ == "__main__":
104 + app = QApplication(sys.argv)
105 + trader = Trader()
106 + trader.run()
...\ No newline at end of file ...\ No newline at end of file