Showing
16 changed files
with
84 additions
and
31 deletions
1 | <?xml version="1.0" encoding="UTF-8"?> | 1 | <?xml version="1.0" encoding="UTF-8"?> |
2 | <project version="4"> | 2 | <project version="4"> |
3 | - <component name="ProjectRootManager" version="2" project-jdk-name="Python 3.7" project-jdk-type="Python SDK" /> | 3 | + <component name="ProjectRootManager" version="2" project-jdk-name="Python 3.8 (py38_64)" project-jdk-type="Python SDK" /> |
4 | </project> | 4 | </project> |
... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
... | @@ -2,7 +2,7 @@ | ... | @@ -2,7 +2,7 @@ |
2 | <module type="PYTHON_MODULE" version="4"> | 2 | <module type="PYTHON_MODULE" version="4"> |
3 | <component name="NewModuleRootManager"> | 3 | <component name="NewModuleRootManager"> |
4 | <content url="file://$MODULE_DIR$" /> | 4 | <content url="file://$MODULE_DIR$" /> |
5 | - <orderEntry type="inheritedJdk" /> | 5 | + <orderEntry type="jdk" jdkName="Python 3.8 (py38_64)" jdkType="Python SDK" /> |
6 | <orderEntry type="sourceFolder" forTests="false" /> | 6 | <orderEntry type="sourceFolder" forTests="false" /> |
7 | </component> | 7 | </component> |
8 | </module> | 8 | </module> |
... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
proj/ai_trader.py
0 → 100644
File mode changed
... | @@ -35,7 +35,7 @@ class simulator_api: | ... | @@ -35,7 +35,7 @@ class simulator_api: |
35 | self.rotate_date() | 35 | self.rotate_date() |
36 | 36 | ||
37 | else: | 37 | else: |
38 | - logger.error("Invalid option") | 38 | + logger.error("Invalid simulator number/simulator option") |
39 | 39 | ||
40 | # 오늘 날짜를 설정하는 함수 | 40 | # 오늘 날짜를 설정하는 함수 |
41 | def date_setting(self): | 41 | def date_setting(self): |
... | @@ -54,6 +54,9 @@ class simulator_api: | ... | @@ -54,6 +54,9 @@ class simulator_api: |
54 | self.buy_stop=False # 거래를 중지하는 변수 | 54 | self.buy_stop=False # 거래를 중지하는 변수 |
55 | self.trade_check_num=False # 실시간 조건 매수 옵션. 분별 시뮬레이팅의 경우 True, 일별 시뮬레이팅의 경우 False | 55 | self.trade_check_num=False # 실시간 조건 매수 옵션. 분별 시뮬레이팅의 경우 True, 일별 시뮬레이팅의 경우 False |
56 | 56 | ||
57 | + self.use_ai=False # ai(deep learning) 알고리즘 사용 여부 | ||
58 | + self.ai_num=1 # ai 알고리즘 번호 | ||
59 | + | ||
57 | print("simul_num : ",self.simul_num) | 60 | print("simul_num : ",self.simul_num) |
58 | 61 | ||
59 | self.volume_limit=1000 | 62 | self.volume_limit=1000 |
... | @@ -266,7 +269,7 @@ class simulator_api: | ... | @@ -266,7 +269,7 @@ class simulator_api: |
266 | # 시뮬레이팅 할 날짜 리스트를 가져오는 함수 | 269 | # 시뮬레이팅 할 날짜 리스트를 가져오는 함수 |
267 | # 장이 열렸던 날을 self.date_rows에 담기 위해 gs글로벌의 date값을 이용 | 270 | # 장이 열렸던 날을 self.date_rows에 담기 위해 gs글로벌의 date값을 이용 |
268 | def get_date_for_simul(self): | 271 | def get_date_for_simul(self): |
269 | - query = f"select date from `gs글로벌` " \ | 272 | + query = f"select date from `대한항공` " \ |
270 | f"where date >= '{self.simul_start_date}' and date <= '{self.simul_end_date}' group by date" | 273 | f"where date >= '{self.simul_start_date}' and date <= '{self.simul_end_date}' group by date" |
271 | self.date_rows = self.engine_daily_craw.execute(query).fetchall() | 274 | self.date_rows = self.engine_daily_craw.execute(query).fetchall() |
272 | 275 | ||
... | @@ -277,12 +280,12 @@ class simulator_api: | ... | @@ -277,12 +280,12 @@ class simulator_api: |
277 | return | 280 | return |
278 | 281 | ||
279 | query="select sum(valuation_profit) from all_stocks" | 282 | query="select sum(valuation_profit) from all_stocks" |
280 | - self.sum_valuation_profit=self.engine_simul.execute(query).fethcall()[0][0] # 총수익금 (종목별 평가 금액의 합) | 283 | + self.sum_valuation_profit=self.engine_simul.execute(query).fetchall()[0][0] # 총수익금 (종목별 평가 금액의 합) |
281 | 284 | ||
282 | self.total_invest_price=self.start_invest_price+self.sum_valuation_profit # 총자산 | 285 | self.total_invest_price=self.start_invest_price+self.sum_valuation_profit # 총자산 |
283 | 286 | ||
284 | query="select sum(item_total_purchase) from all_stocks where sell_date='%s'" | 287 | query="select sum(item_total_purchase) from all_stocks where sell_date='%s'" |
285 | - self.total_purchase_price=self.engine_simul.execute(query%(0)).fethcall()[0][0] # 총투자금액 | 288 | + self.total_purchase_price=self.engine_simul.execute(query%(0)).fetchall()[0][0] # 총투자금액 |
286 | if self.total_purchase_price is None: | 289 | if self.total_purchase_price is None: |
287 | self.total_purchase_price=0 | 290 | self.total_purchase_price=0 |
288 | 291 | ||
... | @@ -436,12 +439,12 @@ class simulator_api: | ... | @@ -436,12 +439,12 @@ class simulator_api: |
436 | if self.is_date_exist(date_rows_today) and self.is_date_exist(date_rows_yesterday): | 439 | if self.is_date_exist(date_rows_today) and self.is_date_exist(date_rows_yesterday): |
437 | self.db_to_realtime_daily_buy_list(date_rows_today, date_rows_yesterday, i) # 매수리스트 확인 | 440 | self.db_to_realtime_daily_buy_list(date_rows_today, date_rows_yesterday, i) # 매수리스트 확인 |
438 | self.trading_by_min(date_rows_today, date_rows_yesterday, i) # 시뮬레이팅 시작 | 441 | self.trading_by_min(date_rows_today, date_rows_yesterday, i) # 시뮬레이팅 시작 |
439 | - self.db_to_jango(date_rows_today) # 잔고 테이블 업데이트 | ||
440 | 442 | ||
441 | # all_stocks 테이블이 존재하고, 현재 보유 중인 종목이 있는 경우, 해당 종목에 대해 데이터베이스 업데이트 | 443 | # all_stocks 테이블이 존재하고, 현재 보유 중인 종목이 있는 경우, 해당 종목에 대해 데이터베이스 업데이트 |
442 | if self.is_simul_table_exist(self.db_name, "all_stocks") and len(self.get_data_from_possessed_item()) != 0: | 444 | if self.is_simul_table_exist(self.db_name, "all_stocks") and len(self.get_data_from_possessed_item()) != 0: |
443 | self.update_all_db_by_date(date_rows_today, option='ALL') | 445 | self.update_all_db_by_date(date_rows_today, option='ALL') |
444 | 446 | ||
447 | + self.db_to_jango(date_rows_today) # 정산 | ||
445 | else: | 448 | else: |
446 | print("테이블이 존재하지 않습니다") | 449 | print("테이블이 존재하지 않습니다") |
447 | 450 | ||
... | @@ -464,13 +467,13 @@ class simulator_api: | ... | @@ -464,13 +467,13 @@ class simulator_api: |
464 | realtime_daily_buy_list=None # 다음날 매수할 종목 리스트를 저장하는 변수 | 467 | realtime_daily_buy_list=None # 다음날 매수할 종목 리스트를 저장하는 변수 |
465 | # (5,20) 골든크로스 | 468 | # (5,20) 골든크로스 |
466 | if self.db_to_realtime_daily_buy_list_num == 1: | 469 | if self.db_to_realtime_daily_buy_list_num == 1: |
467 | - query=f"select * from '{date_rows_yesterday}' " \ | 470 | + query=f"select * from `{date_rows_yesterday}` " \ |
468 | f"where yes_clo20>yes_clo5 and clo5>clo20 and close<'{self.invest_unit}' group by code" | 471 | f"where yes_clo20>yes_clo5 and clo5>clo20 and close<'{self.invest_unit}' group by code" |
469 | realtime_daily_buy_list=self.engine_daily_buy_list.execute(query).fetchall() | 472 | realtime_daily_buy_list=self.engine_daily_buy_list.execute(query).fetchall() |
470 | 473 | ||
471 | # (20,60) 골든크로스 | 474 | # (20,60) 골든크로스 |
472 | elif self.db_to_realtime_daily_buy_list_num == 2: | 475 | elif self.db_to_realtime_daily_buy_list_num == 2: |
473 | - query = f"select * from '{date_rows_yesterday}' " \ | 476 | + query = f"select * from `{date_rows_yesterday}` " \ |
474 | f"where yes_clo40 > yes_clo5 and clo5 > clo40 and close < '{self.invest_unit}' group by code" | 477 | f"where yes_clo40 > yes_clo5 and clo5 > clo40 and close < '{self.invest_unit}' group by code" |
475 | realtime_daily_buy_list = self.engine_daily_buy_list.execute(query).fetchall() | 478 | realtime_daily_buy_list = self.engine_daily_buy_list.execute(query).fetchall() |
476 | 479 | ||
... | @@ -526,7 +529,7 @@ class simulator_api: | ... | @@ -526,7 +529,7 @@ class simulator_api: |
526 | realtime_daily_buy_list=self.engine_simul.execute(query).fetchall() | 529 | realtime_daily_buy_list=self.engine_simul.execute(query).fetchall() |
527 | 530 | ||
528 | self.df_realtime_daily_buy_list=DataFrame(realtime_daily_buy_list, | 531 | self.df_realtime_daily_buy_list=DataFrame(realtime_daily_buy_list, |
529 | - columns=['index', 'index2', 'date', 'check_item', 'code', | 532 | + columns=['index', 'index2', 'index3','date', 'check_item', 'code', |
530 | 'code_name', 'd1_diff','d1_diff_rate', | 533 | 'code_name', 'd1_diff','d1_diff_rate', |
531 | 'close', 'open', 'high','low', 'volume', | 534 | 'close', 'open', 'high','low', 'volume', |
532 | 'clo5', 'clo10', 'clo20', 'clo60', 'clo120', | 535 | 'clo5', 'clo10', 'clo20', 'clo60', 'clo120', |
... | @@ -547,11 +550,11 @@ class simulator_api: | ... | @@ -547,11 +550,11 @@ class simulator_api: |
547 | self.update_all_db_by_date(date_rows_today,option='OPEN') | 550 | self.update_all_db_by_date(date_rows_today,option='OPEN') |
548 | 551 | ||
549 | # 분별 시간 데이터를 가져오기 | 552 | # 분별 시간 데이터를 가져오기 |
550 | - self.get_min_data_for_simul(date_rows_today) | 553 | + self.get_date_min_for_simul(date_rows_today) |
551 | - if len(self.min_data_rows)!=0: | 554 | + if len(self.min_date_rows)!=0: |
552 | # 분 단위로 시뮬레이팅 | 555 | # 분 단위로 시뮬레이팅 |
553 | - for t in range(len(self.min_data_rows)): | 556 | + for t in range(len(self.min_date_rows)): |
554 | - min=self.min_data_rows[t][0] | 557 | + min=self.min_date_rows[t][0] |
555 | # 현재 보유 종목이 있는 경우 | 558 | # 현재 보유 종목이 있는 경우 |
556 | if self.is_simul_table_exist(self.db_name,"all_stocks") and len(self.get_data_from_possessed_item())!=0: | 559 | if self.is_simul_table_exist(self.db_name,"all_stocks") and len(self.get_data_from_possessed_item())!=0: |
557 | self.show_info(min) | 560 | self.show_info(min) |
... | @@ -627,13 +630,13 @@ class simulator_api: | ... | @@ -627,13 +630,13 @@ class simulator_api: |
627 | # 보유한 종목의 이름을 반환하는 함수 | 630 | # 보유한 종목의 이름을 반환하는 함수 |
628 | def get_data_from_possessed_item(self): | 631 | def get_data_from_possessed_item(self): |
629 | query="select code_name from all_stocks where sell_date='0'" | 632 | query="select code_name from all_stocks where sell_date='0'" |
630 | - result=self.engine_simul.execute(query).fetchall() | 633 | + return self.engine_simul.execute(query).fetchall() |
631 | - return result[0][0] | ||
632 | 634 | ||
633 | # daily_buy_list를 통해 특정 날짜에 해당하는 주가정보를 가져오는 함수 | 635 | # daily_buy_list를 통해 특정 날짜에 해당하는 주가정보를 가져오는 함수 |
634 | def get_now_price_by_date(self,code_name,date): | 636 | def get_now_price_by_date(self,code_name,date): |
637 | + print(code_name) | ||
635 | query = f"select d1_diff,d1_diff_rate, close, open, high, low, volume, clo5, clo10, clo20, clo60, clo120 " \ | 638 | query = f"select d1_diff,d1_diff_rate, close, open, high, low, volume, clo5, clo10, clo20, clo60, clo120 " \ |
636 | - f"from '{date}' " \ | 639 | + f"from `{date}` " \ |
637 | f"where code_name = '{code_name}' group by code" | 640 | f"where code_name = '{code_name}' group by code" |
638 | result=self.engine_daily_buy_list.execute(query).fetchall() | 641 | result=self.engine_daily_buy_list.execute(query).fetchall() |
639 | 642 | ||
... | @@ -675,7 +678,7 @@ class simulator_api: | ... | @@ -675,7 +678,7 @@ class simulator_api: |
675 | simul_start_date_min=simul_start_date+self.start_min # 장 시작시간 = 9시 | 678 | simul_start_date_min=simul_start_date+self.start_min # 장 시작시간 = 9시 |
676 | simul_end_date_min=simul_start_date+"1530" # 장 마감시간 = 3시 30분 | 679 | simul_end_date_min=simul_start_date+"1530" # 장 마감시간 = 3시 30분 |
677 | 680 | ||
678 | - query = f"select date from `gs글로벌` " \ | 681 | + query = f"select date from `대한항공` " \ |
679 | f"where date >= '{simul_start_date_min}' and date <='{simul_end_date_min}' and open != 0 group by date" | 682 | f"where date >= '{simul_start_date_min}' and date <='{simul_end_date_min}' and open != 0 group by date" |
680 | self.min_date_rows = self.engine_craw.execute(query).fetchall() | 683 | self.min_date_rows = self.engine_craw.execute(query).fetchall() |
681 | 684 | ||
... | @@ -684,16 +687,16 @@ class simulator_api: | ... | @@ -684,16 +687,16 @@ class simulator_api: |
684 | possessed_code_name=self.get_data_from_possessed_item() | 687 | possessed_code_name=self.get_data_from_possessed_item() |
685 | for i in range(len(possessed_code_name)): | 688 | for i in range(len(possessed_code_name)): |
686 | code_name=possessed_code_name[i][0] | 689 | code_name=possessed_code_name[i][0] |
687 | - current_close_price=self.get_current_close_price_by_min(code_name,min) | 690 | + current_close_price=self.get_now_close_price_by_min(code_name,min) |
688 | if current_close_price: | 691 | if current_close_price: |
689 | - self.db_to_transaction_update_present_price_by_min(code_name,current_close_price) | 692 | + self.db_to_all_stocks_present_price_update_by_min(code_name,current_close_price) |
690 | else: | 693 | else: |
691 | continue | 694 | continue |
692 | 695 | ||
693 | # 분별 현재 종가(close)를 가져오는 함수 | 696 | # 분별 현재 종가(close)를 가져오는 함수 |
694 | # 분별 데이터에서 종가는 현재가를 의미하므로 1분마다 시세를 가져오는 함수 | 697 | # 분별 데이터에서 종가는 현재가를 의미하므로 1분마다 시세를 가져오는 함수 |
695 | - def get_current_close_price_by_min(self,code_name,min): | 698 | + def get_now_close_price_by_min(self,code_name,min): |
696 | - query=f"select close from '{code_name}' " \ | 699 | + query=f"select close from `{code_name}` " \ |
697 | f"where date='{min}' and open!=0 and volume!=0 order by sum_volume desc limit 1" | 700 | f"where date='{min}' and open!=0 and volume!=0 order by sum_volume desc limit 1" |
698 | result=self.engine_craw.execute(query).fethcall() | 701 | result=self.engine_craw.execute(query).fethcall() |
699 | if len(result)==1: | 702 | if len(result)==1: |
... | @@ -703,7 +706,7 @@ class simulator_api: | ... | @@ -703,7 +706,7 @@ class simulator_api: |
703 | 706 | ||
704 | # 보유한 종목에 현재가를 실시간으로 업데이트하는 함수 | 707 | # 보유한 종목에 현재가를 실시간으로 업데이트하는 함수 |
705 | def db_to_all_stocks_present_price_update_by_min(self,code_name,current_close_price): | 708 | def db_to_all_stocks_present_price_update_by_min(self,code_name,current_close_price): |
706 | - query=f"update all_stocks set present_price={current_close_price} " \ | 709 | + query=f"update all_stocks set present_price='{current_close_price}' " \ |
707 | f"where code_name={code_name} and sell_date='{0}'" | 710 | f"where code_name={code_name} and sell_date='{0}'" |
708 | self.engine_simul.execute(query) | 711 | self.engine_simul.execute(query) |
709 | 712 | ||
... | @@ -874,7 +877,7 @@ class simulator_api: | ... | @@ -874,7 +877,7 @@ class simulator_api: |
874 | 877 | ||
875 | # 특정 날짜의 테이블에서 특정 종목의 시가를 가져오는 함수 | 878 | # 특정 날짜의 테이블에서 특정 종목의 시가를 가져오는 함수 |
876 | def get_now_open_price_by_date(self,code,date): | 879 | def get_now_open_price_by_date(self,code,date): |
877 | - query=f"select open from '{date}' where code = '{code}' group by code" | 880 | + query=f"select open from `{date}` where code = '{code}' group by code" |
878 | open=self.engine_daily_buy_list.execute(query).fetchall() | 881 | open=self.engine_daily_buy_list.execute(query).fetchall() |
879 | if len(open)==1: | 882 | if len(open)==1: |
880 | return open[0][0] | 883 | return open[0][0] |
... | @@ -883,7 +886,7 @@ class simulator_api: | ... | @@ -883,7 +886,7 @@ class simulator_api: |
883 | 886 | ||
884 | # 전날 종가(close)를 가져오는 함수 | 887 | # 전날 종가(close)를 가져오는 함수 |
885 | def get_yes_close_price_by_date(self,code,date): | 888 | def get_yes_close_price_by_date(self,code,date): |
886 | - query = f"select close from '{date}' where code = '{code}' group by code" | 889 | + query = f"select close from `{date}` where code = '{code}' group by code" |
887 | result = self.engine_daily_buy_list.execute(query).fetchall() | 890 | result = self.engine_daily_buy_list.execute(query).fetchall() |
888 | if len(result) == 1: | 891 | if len(result) == 1: |
889 | return result[0][0] | 892 | return result[0][0] |
... | @@ -892,7 +895,7 @@ class simulator_api: | ... | @@ -892,7 +895,7 @@ class simulator_api: |
892 | 895 | ||
893 | # 분별 현재 누적 거래량을 가져오는 함수 | 896 | # 분별 현재 누적 거래량을 가져오는 함수 |
894 | def get_now_volume_by_min(self,code_name,min): | 897 | def get_now_volume_by_min(self,code_name,min): |
895 | - query= f"select sum_volume from '{code_name}' " \ | 898 | + query= f"select sum_volume from `{code_name}` " \ |
896 | f"where date = '{min}' and open != 0 and volume !=0 order by sum_volume desc limit 1" | 899 | f"where date = '{min}' and open != 0 and volume !=0 order by sum_volume desc limit 1" |
897 | result = self.engine_craw.execute(query).fetchall() | 900 | result = self.engine_craw.execute(query).fetchall() |
898 | if len(result) == 1: | 901 | if len(result) == 1: |
... | @@ -1000,8 +1003,8 @@ class simulator_api: | ... | @@ -1000,8 +1003,8 @@ class simulator_api: |
1000 | self.df_all_stocks.loc[0, 'clo5'] = df.loc[index, 'clo5'] | 1003 | self.df_all_stocks.loc[0, 'clo5'] = df.loc[index, 'clo5'] |
1001 | self.df_all_stocks.loc[0, 'clo10'] = df.loc[index, 'clo10'] | 1004 | self.df_all_stocks.loc[0, 'clo10'] = df.loc[index, 'clo10'] |
1002 | self.df_all_stocks.loc[0, 'clo20'] = df.loc[index, 'clo20'] | 1005 | self.df_all_stocks.loc[0, 'clo20'] = df.loc[index, 'clo20'] |
1003 | - self.df_all_stocks.loc[0, 'clo60'] = df.loc[index, 'clo40'] | 1006 | + self.df_all_stocks.loc[0, 'clo60'] = df.loc[index, 'clo60'] |
1004 | - self.df_all_stocks.loc[0, 'clo120'] = df.loc[index, 'clo60'] | 1007 | + self.df_all_stocks.loc[0, 'clo120'] = df.loc[index, 'clo120'] |
1005 | 1008 | ||
1006 | if df.loc[index, 'clo5_diff_rate'] is not None: | 1009 | if df.loc[index, 'clo5_diff_rate'] is not None: |
1007 | self.df_all_stocks.loc[0, 'clo5_diff_rate'] = float(df.loc[index, 'clo5_diff_rate']) | 1010 | self.df_all_stocks.loc[0, 'clo5_diff_rate'] = float(df.loc[index, 'clo5_diff_rate']) |
... | @@ -1212,7 +1215,7 @@ class simulator_api: | ... | @@ -1212,7 +1215,7 @@ class simulator_api: |
1212 | 1215 | ||
1213 | # 최근 daily_buy_list의 날짜 테이블에서 code에 해당하는 데이터만 가져오는 함수 | 1216 | # 최근 daily_buy_list의 날짜 테이블에서 code에 해당하는 데이터만 가져오는 함수 |
1214 | def get_daily_buy_list_by_code(self,code,date): | 1217 | def get_daily_buy_list_by_code(self,code,date): |
1215 | - query = f"select * from '{date}' where code = '{code}' group by code" | 1218 | + query = f"select * from `{date}` where code = '{code}' group by code" |
1216 | 1219 | ||
1217 | daily_buy_list = self.engine_daily_buy_list.execute(query).fetchall() | 1220 | daily_buy_list = self.engine_daily_buy_list.execute(query).fetchall() |
1218 | 1221 | ||
... | @@ -1229,7 +1232,7 @@ class simulator_api: | ... | @@ -1229,7 +1232,7 @@ class simulator_api: |
1229 | 1232 | ||
1230 | # 현재 특정 종목의 종가를 가져오는 함수 | 1233 | # 현재 특정 종목의 종가를 가져오는 함수 |
1231 | def get_now_close_price_by_date(self,code,date): | 1234 | def get_now_close_price_by_date(self,code,date): |
1232 | - query=f"select close from '{date}' where code='{code}' group by code" | 1235 | + query=f"select close from `{date}` where code='{code}' group by code" |
1233 | result=self.engine_daily_buy_list.execute(query).fetchall() | 1236 | result=self.engine_daily_buy_list.execute(query).fetchall() |
1234 | 1237 | ||
1235 | if len(result)==1: | 1238 | if len(result)==1: | ... | ... |
No preview for this file type
No preview for this file type
proj/library/__pycache__/cf.cpython-38.pyc
0 → 100644
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
... | @@ -24,7 +24,7 @@ real_daily_buy_list_db_name = "daily_buy_list" | ... | @@ -24,7 +24,7 @@ real_daily_buy_list_db_name = "daily_buy_list" |
24 | start_daily_buy_list='20190102' | 24 | start_daily_buy_list='20190102' |
25 | 25 | ||
26 | # api를 최대 몇 번까지 호출 하고 봇을 끌지 설정 하는 옵션 | 26 | # api를 최대 몇 번까지 호출 하고 봇을 끌지 설정 하는 옵션 |
27 | -max_api_call=98 | 27 | +max_api_call=998 |
28 | 28 | ||
29 | # openapi 1회 조회 시 대기 시간(0.2 보다-> 0.3이 안정적) | 29 | # openapi 1회 조회 시 대기 시간(0.2 보다-> 0.3이 안정적) |
30 | TR_REQ_TIME_INTERVAL = 0.3 | 30 | TR_REQ_TIME_INTERVAL = 0.3 | ... | ... |
proj/requirements_32.txt
0 → 100644
proj/requirements_64.txt
0 → 100644
proj/simulator.py
0 → 100644
1 | +from library.simulator_api import * | ||
2 | + | ||
3 | +class Simulator: | ||
4 | + def __init__(self): | ||
5 | + self.set_info() | ||
6 | + self.input_value() | ||
7 | + | ||
8 | + def set_info(self): | ||
9 | + self.simul_num=int(input("시뮬레이팅 알고리즘 번호 선택 : ")) | ||
10 | + option=str(input("시뮬레이팅 데이터베이스 초기화 여부 (y/n) : ")) | ||
11 | + | ||
12 | + if option=="y": | ||
13 | + self.simul_reset='reset' | ||
14 | + elif option=="n": | ||
15 | + self.simul_reset='continue' | ||
16 | + else: | ||
17 | + print("Invalid Input") | ||
18 | + sys.exit() | ||
19 | + | ||
20 | + def input_value(self): | ||
21 | + simulator_api(self.simul_num,self.simul_reset,0) | ||
22 | + | ||
23 | +if __name__=="__main__": | ||
24 | + Simulator() | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
... | @@ -100,6 +100,9 @@ class Trader(QMainWindow): | ... | @@ -100,6 +100,9 @@ class Trader(QMainWindow): |
100 | if self.open_api.jango_check() and self.buy_time_check() and self.open_api.buy_check(): | 100 | if self.open_api.jango_check() and self.buy_time_check() and self.open_api.buy_check(): |
101 | self.auto_trade_stock() | 101 | self.auto_trade_stock() |
102 | 102 | ||
103 | + else: | ||
104 | + break | ||
105 | + | ||
103 | if __name__ == "__main__": | 106 | if __name__ == "__main__": |
104 | app = QApplication(sys.argv) | 107 | app = QApplication(sys.argv) |
105 | trader = Trader() | 108 | trader = Trader() | ... | ... |
-
Please register or login to post a comment