From bee0f632a6ace58af21248e0bef7c8e7575e94b8 Mon Sep 17 00:00:00 2001 From: hyeonji0409 Date: Thu, 1 Jul 2021 17:01:58 +0900 Subject: [PATCH] moneydare --- .idea/.gitignore | 3 + .idea/.name | 1 + .idea/Auto_stock.iml | 8 + .../inspectionProfiles/profiles_settings.xml | 6 + .idea/misc.xml | 7 + .idea/modules.xml | 8 + .idea/vcs.xml | 6 + Kiwoom.py | 220 ++++++ __pycache__/Kiwoom.cpython-37.pyc | Bin 0 -> 7641 bytes __pycache__/Kiwoom.cpython-38.pyc | Bin 0 -> 7685 bytes __pycache__/Kiwoom.cpython-39.pyc | Bin 0 -> 7708 bytes __pycache__/webreader.cpython-37.pyc | Bin 0 -> 3171 bytes __pycache__/webreader.cpython-38.pyc | Bin 0 -> 3156 bytes __pycache__/widgetfile.cpython-37.pyc | Bin 0 -> 840 bytes __pycache__/widgetfile.cpython-38.pyc | Bin 0 -> 821 bytes buy_list.txt | 0 icon.png.url | 2 + java.js | 0 magic.xlsx | Bin 0 -> 5993 bytes magic_formula.py | 73 ++ magic_formula_data.xlsx | Bin 0 -> 128103 bytes predict.py | 154 +++++ pymon.py | 155 +++++ pytrader.py | 381 ++++++++++ pytrader.ui | 649 ++++++++++++++++++ sell_list.txt | 5 + table.html | 17 + test.html | 25 + tmp/checkpoint | 2 + tmp/ckeckpointer.ckpt.data-00000-of-00001 | Bin 0 -> 47629 bytes tmp/ckeckpointer.ckpt.index | Bin 0 -> 2223 bytes webreader.py | 116 ++++ widgetfile.py | 15 + 33 files changed, 1853 insertions(+) create mode 100644 .idea/.gitignore create mode 100644 .idea/.name create mode 100644 .idea/Auto_stock.iml create mode 100644 .idea/inspectionProfiles/profiles_settings.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/vcs.xml create mode 100644 Kiwoom.py create mode 100644 __pycache__/Kiwoom.cpython-37.pyc create mode 100644 __pycache__/Kiwoom.cpython-38.pyc create mode 100644 __pycache__/Kiwoom.cpython-39.pyc create mode 100644 __pycache__/webreader.cpython-37.pyc create mode 100644 __pycache__/webreader.cpython-38.pyc create mode 100644 __pycache__/widgetfile.cpython-37.pyc create mode 100644 __pycache__/widgetfile.cpython-38.pyc create mode 100644 buy_list.txt create mode 100644 icon.png.url create mode 100644 java.js create mode 100644 magic.xlsx create mode 100644 magic_formula.py create mode 100644 magic_formula_data.xlsx create mode 100644 predict.py create mode 100644 pymon.py create mode 100644 pytrader.py create mode 100644 pytrader.ui create mode 100644 sell_list.txt create mode 100644 table.html create mode 100644 test.html create mode 100644 tmp/checkpoint create mode 100644 tmp/ckeckpointer.ckpt.data-00000-of-00001 create mode 100644 tmp/ckeckpointer.ckpt.index create mode 100644 webreader.py create mode 100644 widgetfile.py diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..26d3352 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,3 @@ +# Default ignored files +/shelf/ +/workspace.xml diff --git a/.idea/.name b/.idea/.name new file mode 100644 index 0000000..27a018c --- /dev/null +++ b/.idea/.name @@ -0,0 +1 @@ +predict.py \ No newline at end of file diff --git a/.idea/Auto_stock.iml b/.idea/Auto_stock.iml new file mode 100644 index 0000000..14d8c8d --- /dev/null +++ b/.idea/Auto_stock.iml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/inspectionProfiles/profiles_settings.xml b/.idea/inspectionProfiles/profiles_settings.xml new file mode 100644 index 0000000..105ce2d --- /dev/null +++ b/.idea/inspectionProfiles/profiles_settings.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..be93871 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..fe7c492 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/Kiwoom.py b/Kiwoom.py new file mode 100644 index 0000000..dc710a4 --- /dev/null +++ b/Kiwoom.py @@ -0,0 +1,220 @@ +import sys +from PyQt5.QtWidgets import * +from PyQt5.QAxContainer import * +from PyQt5.QtCore import * +import time +import pandas as pd +import sqlite3 + +TR_REQ_TIME_INTERVAL = 0.05 + + +class Kiwoom(QAxWidget): + def __init__(self): + super().__init__() + self._create_kiwoom_instance() + self._set_signal_slots() + + def _create_kiwoom_instance(self): + self.setControl("KHOPENAPI.KHOpenAPICtrl.1") + + def _set_signal_slots(self): + self.OnEventConnect.connect(self._event_connect) + self.OnReceiveTrData.connect(self._receive_tr_data) + self.OnReceiveChejanData.connect(self._receive_chejan_data) + + def comm_connect(self): + self.dynamicCall("CommConnect()") + self.login_event_loop = QEventLoop() + self.login_event_loop.exec_() + + def _event_connect(self, err_code): + if err_code == 0: + print("connected") + else: + print("disconnected") + + self.login_event_loop.exit() + + def get_code_list_by_market(self, market): + code_list = self.dynamicCall("GetCodeListByMarket(QString)", market) + code_list = code_list.split(';') + return code_list[:-1] + + def get_master_code_name(self, code): + code_name = self.dynamicCall("GetMasterCodeName(QString)", code) + return code_name + + def get_connect_state(self): + ret = self.dynamicCall("GetConnectState()") + return ret + + def get_login_info(self, tag): + ret = self.dynamicCall("GetLoginInfo(QString)", tag) + return ret + + def set_input_value(self, id, value): + self.dynamicCall("SetInputValue(QString, QString)", id, value) + + def comm_rq_data(self, rqname, trcode, next, screen_no): + self.dynamicCall("CommRqData(QString, QString, int, QString)", rqname, trcode, next, screen_no) + self.tr_event_loop = QEventLoop() + self.tr_event_loop.exec_() + + def _comm_get_data(self, code, real_type, field_name, index, item_name): + ret = self.dynamicCall("CommGetData(QString, QString, QString, int, QString)", code, + real_type, field_name, index, item_name) + return ret.strip() + + def _get_repeat_cnt(self, trcode, rqname): + ret = self.dynamicCall("GetRepeatCnt(QString, QString)", trcode, rqname) + return ret + + def send_order(self, rqname, screen_no, acc_no, order_type, code, quantity, price, hoga, order_no): + self.dynamicCall("SendOrder(QString, QString, QString, int, QString, int, int, QString, QString)", + [rqname, screen_no, acc_no, order_type, code, quantity, price, hoga, order_no]) + + def get_chejan_data(self, fid): + ret = self.dynamicCall("GetChejanData(int)", fid) + return ret + + def get_server_gubun(self): + ret = self.dynamicCall("KOA_Functions(QString, QString)", "GetServerGubun", "") + return ret + + def _receive_chejan_data(self, gubun, item_cnt, fid_list): + print(gubun) + print(self.get_chejan_data(9203)) + print(self.get_chejan_data(302)) + print(self.get_chejan_data(900)) + print(self.get_chejan_data(901)) + + def _receive_tr_data(self, screen_no, rqname, trcode, record_name, next, unused1, unused2, unused3, unused4): + if next == '2': + self.remained_data = True + else: + self.remained_data = False + + if rqname == "opt10081_req": + self._opt10081(rqname, trcode) + elif rqname == "opw00001_req": + self._opw00001(rqname, trcode) + elif rqname == "opw00018_req": + self._opw00018(rqname, trcode) + + try: + self.tr_event_loop.exit() + except AttributeError: + pass + + @staticmethod + def change_format(data): + strip_data = data.lstrip('-0') + if strip_data == '' or strip_data == '.00': + strip_data = '0' + + try: + format_data = format(int(strip_data), ',d') + except: + format_data = format(float(strip_data)) + + if data.startswith('-'): + format_data = '-' + format_data + + return format_data + + @staticmethod + def change_format2(data): + strip_data = data.lstrip('-0') + + if strip_data == '': + strip_data = '0' + + if strip_data.startswith('.'): + strip_data = '0' + strip_data + + if data.startswith('-'): + strip_data = '-' + strip_data + + return strip_data + + def _opw00001(self, rqname, trcode): + d2_deposit = self._comm_get_data(trcode, "", rqname, 0, "d+2추정예수금") + self.d2_deposit = Kiwoom.change_format(d2_deposit) + + def _opt10081(self, rqname, trcode): + data_cnt = self._get_repeat_cnt(trcode, rqname) + + for i in range(data_cnt): + date = self._comm_get_data(trcode, "", rqname, i, "일자") + open = self._comm_get_data(trcode, "", rqname, i, "시가") + high = self._comm_get_data(trcode, "", rqname, i, "고가") + low = self._comm_get_data(trcode, "", rqname, i, "저가") + close = self._comm_get_data(trcode, "", rqname, i, "현재가") + volume = self._comm_get_data(trcode, "", rqname, i, "거래량") + + self.ohlcv['date'].append(date) + self.ohlcv['open'].append(int(open)) + self.ohlcv['high'].append(int(high)) + self.ohlcv['low'].append(int(low)) + self.ohlcv['close'].append(int(close)) + self.ohlcv['volume'].append(int(volume)) + + def reset_opw00018_output(self): + self.opw00018_output = {'single': [], 'multi': []} + + def _opw00018(self, rqname, trcode): + # single data + total_purchase_price = self._comm_get_data(trcode, "", rqname, 0, "총매입금액") + total_eval_price = self._comm_get_data(trcode, "", rqname, 0, "총평가금액") + total_eval_profit_loss_price = self._comm_get_data(trcode, "", rqname, 0, "총평가손익금액") + total_earning_rate = self._comm_get_data(trcode, "", rqname, 0, "총수익률(%)") + estimated_deposit = self._comm_get_data(trcode, "", rqname, 0, "추정예탁자산") + + self.opw00018_output['single'].append(Kiwoom.change_format(total_purchase_price)) + self.opw00018_output['single'].append(Kiwoom.change_format(total_eval_price)) + self.opw00018_output['single'].append(Kiwoom.change_format(total_eval_profit_loss_price)) + + total_earning_rate = Kiwoom.change_format(total_earning_rate) + + if self.get_server_gubun(): + total_earning_rate = float(total_earning_rate) / 100 + total_earning_rate = str(total_earning_rate) + + self.opw00018_output['single'].append(total_earning_rate) + + self.opw00018_output['single'].append(Kiwoom.change_format(estimated_deposit)) + + # multi data + rows = self._get_repeat_cnt(trcode, rqname) + for i in range(rows): + name = self._comm_get_data(trcode, "", rqname, i, "종목명") + quantity = self._comm_get_data(trcode, "", rqname, i, "보유수량") + purchase_price = self._comm_get_data(trcode, "", rqname, i, "매입가") + current_price = self._comm_get_data(trcode, "", rqname, i, "현재가") + eval_profit_loss_price = self._comm_get_data(trcode, "", rqname, i, "평가손익") + earning_rate = self._comm_get_data(trcode, "", rqname, i, "수익률(%)") + + quantity = Kiwoom.change_format(quantity) + purchase_price = Kiwoom.change_format(purchase_price) + current_price = Kiwoom.change_format(current_price) + eval_profit_loss_price = Kiwoom.change_format(eval_profit_loss_price) + earning_rate = Kiwoom.change_format2(earning_rate) + + self.opw00018_output['multi'].append([name, quantity, purchase_price, current_price, eval_profit_loss_price, + earning_rate]) + + +if __name__ == "__main__": + app = QApplication(sys.argv) + kiwoom = Kiwoom() + kiwoom.comm_connect() + + kiwoom.reset_opw00018_output() + account_number = kiwoom.get_login_info("ACCNO") + account_number = account_number.split(';')[0] + + kiwoom.set_input_value("계좌번호", account_number) + kiwoom.comm_rq_data("opw00018_req", "opw00018", 0, "2000") + print(kiwoom.opw00018_output['single']) + print(kiwoom.opw00018_output['multi']) \ No newline at end of file diff --git a/__pycache__/Kiwoom.cpython-37.pyc b/__pycache__/Kiwoom.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6b400383de8be23ca4bbdcd9b3437183332c7827 GIT binary patch literal 7641 zcmb7J+ix7z8K3)Jyf-_J6DJ|0T(giECx8?I0*nbXC2_7mJ54n#drq8<*E5?lvx#ku zdvj7iZB;52DXoCo^d?ZH(n4Dvs;a7ZsQM?2`qsXXEK;Su@zD17otathZZ;3>XwK!E zGiScY2FKl3JIw z+B9rKjx%jb))_m)bUXX3!VG3!QJBedYr381Bg|UR#K*kAl?%l+)h_Y;nqrrEdA+is zs0!-Qq#k3L4b|Slx2%t|?1sveNd>*~`c{_XTQ)Q~c7o;E2)s zc6+6`$JEnGwfqUBQRb>@q~16GlONOX-6!fqOMiOO@c)4ZS8ROM)?QK0sZ3?sm8`8Z zof%gY$Z9eRwaGFpi`rs2mPefdHwDyLR%9jAIaX#B)Oj|_#!!#2Eo>Zhfo)|IsEceH z+m5=#CfN?uWww*;LS13EvE8Ug+3jo(>M`~Ob_eP$>`rzU>T$l6-OcW~0!i%&wC`nm zWqTW|vitCSJG-ClLp{m%vnkX&*aK`D_0CrmL$P;ZEe=H1bB)WMw^&ybnW@%r(;E1@ zQ3T4GvaXUgLS_EAId#En0e2SU>>&F=&8_oj z)bV-X_>FnD)^z-)7x>VF;q&G>)H%ngH*3D{IPWT-JwE%$+2?&O{Ii!A+Gn5U{zBlj z&d#(0&p91<^@aV5wT63BKbB^ywJc2VUL+w1#fq9&v+7DYd7SduCpAetOD~jAKvv*= z0|=5*YI7@-&wcUuiNkX^)#5H%vw>(%9jK~y9#YMEZXmp7RTWuGAjquZVuV`6 z#Tag%7FSVMcBiZiU#Q`nP2ts0xd45j)QCIOy6hQA&y+o@%Q^Iuu}jC@!AEV{fN zM45WhC^?+yPSUr_$K6xB&KsBb8S!*2s6`b=#C<0a4g1qt3WB5Akk?W9ZC{Wk14vt1^vc8E-=&U&FEiNWP@2vu; zBW&5NEjH@2wPrKQpOlMo)bmIEg`HPLOfhxkOoO@TEpj)g&10EEfXoGCl}PvXI+x`-E8qHj>w}+RD~c9ewEN%0QN4;FdDn zfktdCp}L{1YN56cFS(&o3qD!Ds!fugFy>ZvJxfNy_|b+RJhgnRCKh^&M&(`eqck{WK4bxUF{ZLao{EYJ10U&k<&VZ1Nu&U&dwpNX*$7ji`)5g4c=sq zl-z8%j4#=_M!**(WjH=zK?oa!KnkT#V!}l7EE#x;(Ed?fgpwn;B|=yAP>&_v4QWsD z7P7Bdx9eVebeh<@5esz>CKY#6G0dRKl2;*TbLwtzm^h9d5`uOL(}6*CxuL*FstdTK zvU%5={U+>Y}eeN5iHAiilo&z@6FfjY&`B}I3xLUnIoSb!TZSqS?bDY*N)TY zpU)ePL6w_H)?Uchb=65+)Xz28aLp0OdUCO2n~VWzspbX-^+k~(P-7a?H}oWuAfVs= z-0>ObnYLRG8lLOlq^+u5f&izvxWvV??U&nbgzZ8c72`-Vl=BKPg}fgxIrH?^$xYS) zx@|pCuy<5l!V*KNrdy)!X*2?)Sd>noM&e9KeNPXGN>5Mk>mjA4XA+m@T;o4?DoSGt zDOlr*j^Zi`BrBB3iU(1^S(0b6P06&Km979bV`rhGVJV9!WBBv9eQ7Z8eUu7A#5B+k z%c=W}tLq8Bj#)xe=8+YKJlIiOi|JG&2Q!de?jzC3?8wmE`#?28eF{`$X$f^4RN9rl z0IHr+mrKY(jdhdudoL>PxS<5rLS8JX=&Q8xN+9hX#U`pd{)nZlBV8%8;{~ zrID`UyP#>Y)>2@0wU%s{x<&=OC=|zLar-Z!z&gu4CK(jd7BqhcY8@Kb&5Tubc`Q%^ zjiAfSHRRP;{q6CpgRT>O4LNqK0nB7DYeN-hnH6f=6w1934Ki~p+Wu)ldC-bJH9Z}v z(<|CO_L;iBYDQKQNpzzXS?4^lSPLQ@?j1wrKaqW z_#N39Sg)v9KVNg_xf2g@N!W1|ik4R^s)5xSQ!RB2J?t~a6JzdsrMqB#x$NVZVsOF4 z1e4wfRt;MfdjWYB!ees`iV4ai%uFbh`&ygJA!xctof1!=h7~`FN|3Wan}VEphKl|z zd{pXV^B@_WPdPqB10W13k`yZq|VhSK)wY!ypJ};#m|?o*i@;Z+Sj8Qc1j*;ZFwr zFVV1m2?gb1-^ZPVurYO|l4uB~8QWu53Od#3Iv{uzsU5ft+63xL{|?j;o7kt7ul;M) zfIet52>C(-TSIfz?4yvxRv!f^>}sZuVuF(GqgbHi`Y0Jt@^m1=vXd|fB!lrLT4y=x z2gov^=CA9!{H(gf!;Q zM|#t{9GUf|=Of*|m-4H6EPE`3G;((kTFBC7g#i?*`{Ex>OcWMnD^f%%u@!XEF~I&L?g0QK&v2IMYM{tRYI$TRz57FRhH6KV4zx<4@bg6SPV;H zd0t9-@xO_oj>d)>yHm=;Iv>7u<5xfLynPjpwDZPBJE490gV$h{35`-cjEiZV@4Vi5 z>-YVm;fF!H@r(7ncUPs8?t17?*S-a3(E0ZJ;tVGFgrSgz-+AZijrZQY@!r)oZIo_& z@L}i8b<6_WmyZ*cZt@Z|xR(w2cJJ2(<(05_84zATTb!bT>`jIS@i4Ur(~*w2E**%V zL|f1frdk^J2+>obGs5#ISw!q%C0_&cMg9Bz*YIl)3M}fO}H>> zN8l969_4<}K>k5VU>vG!LwJ{cahjMjkFE$u< zjJ`dV5N4KexEav4LPUjh(5xpAM*%c$TdkVQYQC+tn4R%2;*gm?Xpf&c<(xWv(m8YF z*kR|$+?m6tUYI#*=T6Qn#nZ=@^Ht)kaB`-Fqv<-9*F#jUiTO*BjyM}x3-Z6NSc`IX z_t5wfjv2f*aO$=fU&b-~B#1q_B&Q;zg>J@J*`igCvX8~cd7Pr9Pum;pKQ=GT&@10i V4&&4wIdv9EXkIO81?1T!_5Yvka4P@+ literal 0 HcmV?d00001 diff --git a/__pycache__/Kiwoom.cpython-38.pyc b/__pycache__/Kiwoom.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..bad67998cbbaf88199c74bca8a149134d742260f GIT binary patch literal 7685 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 aX@*|@mNJclepJ>ORG~Swh(uh*-sJy_;$E`= literal 0 HcmV?d00001 diff --git a/__pycache__/Kiwoom.cpython-39.pyc b/__pycache__/Kiwoom.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5e71442df977e47aaca70d33b1c1a28d47f4b7e5 GIT binary patch literal 7708 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 literal 0 HcmV?d00001 diff --git a/__pycache__/widgetfile.cpython-37.pyc b/__pycache__/widgetfile.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1c9cc4a5d9d65da420315b8fee6adc57db6eca55 GIT binary patch literal 840 zcmZWnOK%e~5VrS~&7%#i1P6}X7Kxnb1)-`<5L_T4Y5{2#$vCmI+GHQ8?QI*hoYEhX z9QgtK8DBZ&z#rhmc$Y|#7;9!{yz~6V{iCB60y_Tv^XpR!plLN{HuzU%EA%+ul zZN655Q!BKw(e1=Z-O$D89byi19}si7x3?mK0Lu`B zLK|G75^pVxl%?!7T7yj-<*w0ptF$&=iRR80V+4AG;reVHu;G60Z<@^7Ld4u5trBh8 zC0J%^C~psU7%J>?5J5*bMs+jVCnU~dMTqVkPAd$S+M8CR>-Ok#KfixZS9zgylQQ-% z_*8N=$TP(=B|lIR#hKLJtO8B9!HvjbvP^QN9eU5DZi0KAB(Sw3c{0=9k_w0pySH4Z zcuEtJR8@W;@fbSz(;vJVf0A6t@!g^rzu|JB^5yulP&v6$`E>CjrE&J3eOCcJixb{k zu0#_O`M~lR1i~FS9`GZ4iobR1NqTz}0z3>H14>3y4xqFMNpn^tM(+@EQ_!UTQ)R7s zJP>C6!UbWrD$SaGtFniIue%>tBX!mrsk)@p&r+%kI!Qd~P3UyNGbZ;6xlv~{iiCM0 o!n}BWa^PJ-Nvh@}+6ZHvrgw0cqpffdBvi literal 0 HcmV?d00001 diff --git a/__pycache__/widgetfile.cpython-38.pyc b/__pycache__/widgetfile.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d90bfa6eb651c11fa5b1fb11e052566e316164e9 GIT binary patch literal 821 zcmYjPOK%e~5VrS~&7*`?f*$}9(sIa&UJ$BUBEh9ZjVK_kA{l4xESv5lwY{Z5%PIXK z$&oYv##c_ca^%E#m!chOzV&!#Jm1Xt!@)rhf&4!I`T3cJ&@W@O#R20KRK5UUh~X4n zny;1O%nEI6_IB!IZs=n47BPppcZj*%+t^`;dGArs*+V1>u*S~;4&NkkDfpP?H&jk9 z&*B&kz2-17j%~5QI0coD0XPaVL!kvJEN0)~&}JB}ceVE^VKG;e2>AaO6Y7DEL1hS_ z&=yyy!aEBiWhr}uHeeG+xf}G|s;sS7p{29K7{R{7aIo$XKrqmqX+uc+gd};Q2+@Of)xz{tdr{p2-JgDZUEH42bx|tarHuUx zK9XFGi(K(s$#+!5NiMawsGFzz;6`LQU!{f84!z}4cfq~6B(Sw3dAiWviVBDhhc{fP zB%&!v>nuNzcmxdoJRQHBU987nsK{n#r7DP2MRYa$T6c4iqgNV0H7qC%78o8x>t>f0DweN z0DzhBkCnQohab|z&jxYN3+ZbO4Rm*_O6~V(mt@r3KZ)(Zh)VgvZ-O6c^7OM*?2_CH zR)cV2zSDwEo1freR`7hZ;R}bYDc|nL*I30lo{IAp&^3cj3NK0Hud=R}l?3KpTMpn; zzcC|x;aaL4nXpzzWt#(-NXBE&JocIJjDAdgq}ClEUtl%j;^o+b%Z5lqP-!WzXHb(> zMffFrs>%Ar$Z+lQ(JA;|&EoJnFBNC(#vO4tixQaB)k?6pHMH?ivsXR>t*A&hCWpOD z6EUUlEcSpz?*7Y0nO^puF42#1F6M%UBMTrty|D{X)_Z@@-b7x0)!jIsPCThXZooak z#ANXmsnj!evF&UgbKRxESOA)%VX4siR=YDph3y4Vxp(K}E@kGy1N4u#59C_jDi9yj zqV|C88=pFAT|Wx18_xyUrB3^tjw*+594B(!t76KK*9)P$b-dUT?CIOHrNkCW1p6ER z-}7`QR|&l969WJ=gw@6e>Eq@~ z?Nv;hwd8nWz^_-)+mvVl*6AS+NK$(wfyd7Uhe`-B|~xMCjO8^vWunk^NG!bX;@O~)IK zub1WOj1=V8W;+8-DvYrGmM#9A7;CEK;dp(u_h%nCpFKkJ2Ut+qA4`9_BtH@Y_&XyS z{#N)E0uvtyjIa~dKsSlMND1)takcaGbp2J6{~^ewLy}PgcS8Mo-|{Y#o=CE<$fH}B zU6P2JS_3y-=l7_SeIS(~7i9rO-XHN_GbtL@2Zu-ENQBnVW-zcI<*v}zq4(5E0iKD& zywUI8*E4W~<8@wD@QmTUx(>-K*6Z*^1>Ts;Scpq?;G};R%lL6QPpDYcH@zYap4H?5 zhxUEfEk%)!nq}I#f{UxFR5rSz&wA+%KeL6-sefV`!#WWp244dJ7NQ!`E>qx*}QYRIM?#>#{D|#`^NO| zuGVyTgYG25Jz;JW+sK~Q-q%Jp8^+VX9BM^quwj4k+h zb@cHQ8(pGab7_LxxJynKTGP;nKo)$N_*{J`Yr4~owsvE%9PY$? zxax%5z7eU3x4ZMhRmh9{Ddg1&)R4b=)v#t}cg%4wiJ2z;^iiw@Vj$OBwUbg)8rb0S zN0A)FB^(A+b!Uuquv>U8m8fTqK*OX|1qsiS>((N*OCX|}<#ehgzwYZ@+KXx-E^#m_ zRd*oa{q^S}iGAjXNSKH!^4IeZYw6nGAfnpk;;P?%-8Z;&74bS)R3DS~Q@YVh)Wpwx z8%f&%bBaZAw37FT&@)2I>c%^;FhGL6wUp>Nduw$; zMOdfYtHP}4al;6Il2Li!9-X0P4JCzXJo9!}%*-GsLIG$>Z@4Vge{ynTnbetuy|U=| z#;U!d!R<>N7)awAW%{OgqpgYZkJl%Hx69++pKg!O4+*bIu>h2QdW#UJ_zwJ;6Tu+WUGDVO3K zu1}}e*AXIK3pFwe(;tU|K3tWHy-gHGa#Gv4x^^tBJ*WnF`w_KBH%=mw5X`(ot;2kBA zZ#&vgyE_nRknNdN>+s1uLx|`WD%h-lO!f7P;`U7i#s&AIb`Hy<@-UIDRB7F7f(T8vE}ytJ22a@B)@1FzNdg_l z`?9VwkB3;6ez-PfA{#Cx^VSE#p7Ydjnpa29lB^v8Vy-5$+W>nVzt0yL9RZbYm$5(C z2*>PAiOS9tm_oHAl zp;$0G8mXt%RN8ExZuO;rxt|Rm90H#4x7?z|9%x}(IOWaoUw4&;+6OXs6}$_ac8u(Q zG7iVWpoTn!Is#+UZ1`opmDS3AD|%(0z|J3H^P2M7#FR(Mym6k-@1K(tsOkvTBSPM; zlK}v9|IVA=JvZc^32Q>k#$`(~hT?31-$R#0cb(&ccByF|)q*@|?kBKcPU1<4kDIZX z)x|!i34lzg+YAgWW_da`|FM|(BxP}+idpM|Y?Csq-QS(PpaFfVz=czSW5ZS>b&Kw) zI&H1kA6^WQ)IXi_r6*;p5p!mc4AEsW+rK3h;7MNXU3S@2N@e_R331nTiRg#HRyyuz zZGNS6OondfKROYT%U7e3FNpr&caNFl&dcF9titfYl8`-v2bh~>pu^Ji6*w0-#FIL< zC0e;RE(QyAERK1+Jo{F2i_3ivYAO9r?96Inm1ANx-SDeq&!ICm(>)@HFW*N9e zrxglaO#n+|tlkdrq%rZF|*=e^|LCuiQ-3_ zwUyH~<=rvYUzf23zsT(M@KxUgQc=MfF9>*WGQuj->QZgq!bmmOZ03Gwr))dE8LW*1 zyi*X!-QEd(aKN>^_KreIU0Xw^?@8^qTh$iP0!j?dOtn>t;io0(kBZxM!`O^EQr4G(NBSR~D3vUc|lM}Pk{L8>VZZ=gMyK5+73Yj>-h9D$CQ?8&#Ei+0hl?8g^^tvs6DpRmtjQKR(VOs+{HqZ=};u%Wb?(*N>nk zkKxRnexk4YZ8w~#*7vN8oVrX%z)$-d8!o?GGTmlB>tYHm`n(#*0S>W$81NKdW%+r! z+6=!%j1ym-*8ckO>zA>n0!n#!uWJWB!Y5si0l!(iD|ty!e50kPsXPSpv&DC}f40run*8!n$p|Hs9_% zf73ux=8*eIMwvH zUi*HVAdiS&Vj+F0)>GOQSZ0jJ2rE|lvIu2C^?@S}y5{9**P{OTxsEX9fB}T6vTplo zt}rLZZftBBn{CtRqr(mFqW_YboF(l!$dpR|^HrvVPvN0Ku9lZYY~`HV!yQ+Fx}O=( zS0vj-qP=~n3Lq9yOeMG4bz3ca6_t%{NGi?lI6A4Q*uU!zw`(ZKqg!_SepA?AH6gyO zzMb7{#wf!CFrK;;=!lxh{Ny&61*4;MqIghdA)%q(WvhiAz>$Spm_x5=NVgM-*e|lu zd9%CLSN#ZjiTWhR?s>^Qhj$e_1;#egMBi{1(cAM;cvD=j)}5bbwhvicsBurQO+oix zAq$muRmpgyi}`*N)#n;_SktytHw@ufo+t3vk-y^%$lDnStQufCNxW1)8B!Nb@GdRGoSNcNNm{t-`xh*Xt zD^g*ywhji2f~IPX;%HboeJt`Xpx^W$)F8pL*{gbwS?*WP!DT;4-k^}xK&zFRB=b7h zq}^?f%rqI#dnu!Z%*(74`-~0Hc}&US@C7rl@g63-E>yzrGqsvOQM$$+d2)tdT&T_n z8RBMOK~L=r@KulPzSC~&!c=$-X}eFmc~4s%!L!=uNsu-pbrtvtyJjvtNwm^4<5Wtf z?HiSlmcu1RKMzzF^2O{+ZV zQO-TUEA`Ag4F41%V$or z$J5JK!rs#d`AfUyqzwKVpCfShsf!xKCqycMwIuGn6%W-+EQ6RobphXnCXHSVJrXs- z3M82%R%V{uy$gT$wE}ubwp{Y@a-R&EX=IAB0>j?)@+m5Yi6?{Qg$%okY?yZ3QZ+W+ zXJPIO8x2$kuS<$D{!sN%j#OW2FN7xc5OUQIB;O^%Vz+AP#&+f?K8H?HFlEfJeK>zz z@*OjfD;aI9bF@$oF}4_cY?&i!_(oj!{0f*U0?P& zfWRpu3E})-PVabm{Y7b;(fTi|j9}SZ_rGy*7onh49%hc$C}A<@aQb9^rS=xumB6tO2p$=lnF7n8~c}3s;snEN`szOAU_`bip>{Q^%44PkQct@XJk=RVt zpSw%tuFfsL-SLsW^<0KL`J<%o#dY*;>{Y@i#mAn0yDP4J9s%qx<~|qbsJf2eK91a8 zLL2M99_wqDChNDfAZ=@5$8sZD-ljx?T`ldIDMsSxo 0: + pbr_dict[name] = pbr + +import operator + +sorted_pbr = sorted(pbr_dict.items(),key=operator.itemgetter(1)) + +#pbr 순위 지정 +pbr_rank = {} + +for num, firm in enumerate(sorted_pbr): + pbr_rank[firm[0]] = num + 1 + +#GP_A 순위 구하기. 값이 존재하는 데이터만 필요 & GP_A 값 클 수록 좋음 +gp_a_sh = wd.sheet_by_name('GP_A') + +gp_a_dict = {} + +for j in range(1, gp_a_sh.nrows): + data = gp_a_sh.row_values(j) + name = data[0] + gp_a = data[1] + if gp_a != 0: + gp_a_dict[name] = gp_a + +sorted_gp_a = sorted(gp_a_dict.items(), key=operator.itemgetter(1), reverse=True) + +gp_a_rank = {} +for num, firm in enumerate(sorted_gp_a): + gp_a_rank[firm[0]] = num + 1 + +total_rank = {} + +for name in gp_a_rank.keys(): + if name in pbr_rank.keys(): + total_rank[name] = pbr_rank[name] + gp_a_rank[name] + +#total_rank의 value 값을 기준키로 하여 total_rank를 오르차순으로 저장. value값이 작은 순서대로 정렬 +sorted_total = sorted(total_rank.items(), key=operator.itemgetter(1)) + +magic_rank = {} + +for num, firm in enumerate(sorted_total): + magic_rank[firm[0]] = num +1 + + +sorted_magic = sorted(magic_rank.items(), key=operator.itemgetter(1)) + +print(sorted_magic[:20]) + + +df = pd.DataFrame.from_records(sorted_magic[:20]) +df.to_excel('magic.xlsx') + + + diff --git a/magic_formula_data.xlsx b/magic_formula_data.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..07da64ccec720477550ee0b8ceae352e9bf4848c GIT binary patch literal 128103 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

#MK1_9e&B%21kCJkHUPUP_*k1)8;OWBoW)~rxK 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 literal 0 HcmV?d00001 diff --git a/predict.py b/predict.py new file mode 100644 index 0000000..f001659 --- /dev/null +++ b/predict.py @@ -0,0 +1,154 @@ +import pandas as pd +import numpy as np +import matplotlib.pyplot as plt +import seaborn as sns +import warnings +import os +import tensorflow as tf +import FinanceDataReader as fdr +#from Kiwoom import * + + +warnings.filterwarnings('ignore') + +plt.rcParams['font.family'] = 'NanumGothic' + + +# 삼성전자(005930) 전체 (1996-11-05 ~ 현재) +# 데브시스터즈(194480) +# gs리테일(007070) +# 쎄미시스코(136510) + +#해당시점 이후의 데이터 +#apple = fdr.DataReader('AAPL', '2017') + +STOCK_CODE = '005930' +stock = fdr.DataReader(STOCK_CODE) +stock.head() + +stock.tail() +stock.index + +stock['Year'] = stock.index.year +stock['Month'] = stock.index.month +stock['Day'] = stock.index.day +stock.head() + +#plt.figure(figsize=(16, 9)) +#sns.lineplot(y=stock['Close'], x=stock.index) +#plt.xlabel('time') +#plt.ylabel('price') + +#time_steps = [['1990', '2000'], + # ['2000', '2010'], + # ['2010', '2015'], + # ['2015', '2021']] + +#fig, axes = plt.subplots(2, 2) +##fig.set_size_inches(16, 9) +#for i in range(4): + # ax = axes[i//2, i%2] + # df = stock.loc[(stock.index > time_steps[i][0]) & (stock.index < time_steps[i][1])] + #sns.lineplot(y=df['Close'], x=df.index, ax=ax) + #ax.set_title(f'{time_steps[i][0]}~{time_steps[i][1]}') + #ax.set_xlabel('time') + #ax.set_ylabel('price') +#plt.tight_layout() +#plt.show() + +from sklearn.preprocessing import MinMaxScaler + +scaler = MinMaxScaler() +# 스케일을 적용할 column을 정의합니다. +scale_cols = ['Open', 'High', 'Low', 'Close', 'Volume'] +# 스케일 후 columns +scaled = scaler.fit_transform(stock[scale_cols]) +scaled + +df = pd.DataFrame(scaled, columns=scale_cols) + +from sklearn.model_selection import train_test_split + +x_train, x_test, y_train, y_test = train_test_split(df.drop('Close', 1), df['Close'], test_size=0.2, random_state=0, shuffle=False) + +x_train.shape, y_train.shape +x_test.shape, y_test.shape +x_train + +#데이터셋구성 +def windowed_dataset(series, window_size, batch_size, shuffle): + series = tf.expand_dims(series, axis=-1) + ds = tf.data.Dataset.from_tensor_slices(series) + ds = ds.window(window_size + 1, shift=1, drop_remainder=True) + ds = ds.flat_map(lambda w: w.batch(window_size + 1)) + if shuffle: + ds = ds.shuffle(1000) + ds = ds.map(lambda w: (w[:-1], w[-1])) + return ds.batch(batch_size).prefetch(1) + +WINDOW_SIZE=20 +BATCH_SIZE=32 + +train_data = windowed_dataset(y_train, WINDOW_SIZE, BATCH_SIZE, True) +test_data = windowed_dataset(y_test, WINDOW_SIZE, BATCH_SIZE, False) + +# 아래의 코드로 데이터셋의 구성을 확인해 볼 수 있습니다. + #X: (batch_size, window_size, feature) + #Y: (batch_size, feature) +for data in train_data.take(1): + print(f'데이터셋(X) 구성(batch_size, window_size, feature갯수): {data[0].shape}') + print(f'데이터셋(Y) 구성(batch_size, window_size, feature갯수): {data[1].shape}') + + #모델 +from tensorflow.keras.models import Sequential +from tensorflow.keras.layers import Dense, LSTM, Conv1D, Lambda +from tensorflow.keras.losses import Huber +from tensorflow.keras.optimizers import Adam +from tensorflow.keras.callbacks import EarlyStopping, ModelCheckpoint + + + +model = Sequential([ + # 1차원 feature map 생성 + Conv1D(filters=32, kernel_size=5, + padding="causal", + activation="relu", + input_shape=[WINDOW_SIZE, 1]), + # LSTM + LSTM(16, activation='tanh'), + Dense(16, activation="relu"), + Dense(1), +]) + +# Sequence 학습에 비교적 좋은 퍼포먼스를 내는 Huber()를 사용합니다. +loss = Huber() +optimizer = Adam(0.0005) +model.compile(loss=Huber(), optimizer=optimizer, metrics=['mse']) + +# earlystopping은 10번 epoch통안 val_loss 개선이 없다면 학습을 멈춥니다. +earlystopping = EarlyStopping(monitor='val_loss', patience=10) +# val_loss 기준 체크포인터도 생성합니다. +filename = os.path.join('tmp', 'ckeckpointer.ckpt') +checkpoint = ModelCheckpoint(filename, + save_weights_only=True, + save_best_only=True, + monitor='val_loss', + verbose=1) + +history = model.fit(train_data, + validation_data=(test_data), + epochs=50, + callbacks=[checkpoint, earlystopping]) + +model.load_weights(filename) +pred = model.predict(test_data) +pred.shape + + +plt.figure(figsize=(12, 9)) +plt.plot(np.asarray(y_test)[20:], label='actual') +plt.plot(pred, label='prediction') +plt.grid() +plt.legend(loc='best') +#plt.tight_layout() +plt.show() diff --git a/pymon.py b/pymon.py new file mode 100644 index 0000000..764b1b8 --- /dev/null +++ b/pymon.py @@ -0,0 +1,155 @@ +import sys +from PyQt5.QtWidgets import * +import Kiwoom +import time +from pandas import DataFrame +import datetime +import webreader +import numpy as np + +MARKET_KOSPI = 0 +MARKET_KOSDAQ = 10 + +class PyMon: + def __init__(self): + self.kiwoom = Kiwoom.Kiwoom() + self.kiwoom.comm_connect() + self.get_code_list() + + def get_code_list(self): + self.kospi_codes = self.kiwoom.get_code_list_by_market(MARKET_KOSPI) + self.kosdaq_codes = self.kiwoom.get_code_list_by_market(MARKET_KOSDAQ) + + #현재 날짜를 기준으로 과거 거래일별로 시가, 고가, 저가, 종가, 거래량을 가져오는 메서드 구현 + def get_ohlcv(self, code, start): + self.kiwoom.ohlcv = {'date': [], 'open': [], 'high': [], 'low': [], 'close': [], 'volume': []} + + self.kiwoom.set_input_value("종목코드", code) + self.kiwoom.set_input_value("기준일자", start) + self.kiwoom.set_input_value("수정주가구분", 1) + self.kiwoom.comm_rq_data("opt10081_req", "opt10081", 0, "0101") + #0.2초의 간격을 두어 TR 요청 -> 더 늘려도 될 듯...? + time.sleep(0.5) + + df = DataFrame(self.kiwoom.ohlcv, columns=['open', 'high', 'low', 'close', 'volume'], + index=self.kiwoom.ohlcv['date']) + return df + + #이전 시점의 평균 거래랑을 특정 거래일 이전의 20일 동안의 평균 거래량으로 정의 + #특정 거래일의 거래량이 평균 거래량보다 25% 초과일 때 급등한 것으로 정의 + def check_speedy_rising_volume(self, code): + today = datetime.datetime.today().strftime("%Y%m%d") + df = self.get_ohlcv(code, today) + volumes = df['volume'] + + if len(volumes) < 11: + return False + + sum_vol20 = 0 + today_vol = 0 + + for i, vol in enumerate(volumes): + if i == 0: + today_vol = vol + elif 1 <= i <= 10: + sum_vol20 += vol + else: + break + + avg_vol20 = sum_vol20 / 10 + # 25% 초과인지 알아내는 부분, 초과한다면 True + if today_vol > avg_vol20 * 10: + return True + + #선정된 종목에 대한 정보 파일로 쓰기 + # 매수전이라고 buylist에 적었기 때문에 다음날 코드를 실행하면 pytrader에서 프로그램 실행. + def update_buy_list(self, buy_list): + f = open("buy_list.txt", "wt") + for code in buy_list: + f.writelines("매수;%s;시장가;10;0;매수전\n" % (code)) + f.close() + + def run(self): + buy_list = [] + num = len(self.kosdaq_codes) + + for i, code in enumerate(self.kosdaq_codes): + print(i, '/', num) + if self.check_speedy_rising_volume(code): + buy_list.append(code) + + self.update_buy_list(buy_list) + + def calculate_estimated_dividend_to_treasury(self, code): + estimated_dividend_yield = webreader.get_estimated_dividend_yield(code) + print("calculate_estimated_dividend_to_treasury", estimated_dividend_yield) + if estimated_dividend_yield == 0: + estimated_dividend_yield = webreader.get_dividend_yield(code) + + if estimated_dividend_yield == "": + estimated_dividend_yield = 0 + + current_3year_treasury = webreader.get_current_3year_treasury() + + estimated_dividend_to_treasury = float(estimated_dividend_yield) / float(current_3year_treasury) + return estimated_dividend_to_treasury + + + def get_min_max_dividend_to_treasury(self, code): + previous_dividend_yield = webreader.get_previous_dividend_yield(code) + three_years_treasury = webreader.get_3year_treasury() + + now = datetime.datetime.now() + cur_year = now.year + previous_dividend_to_treasury = {} + + for year in range(cur_year-5, cur_year): + if year in previous_dividend_yield.keys() and year in three_years_treasury.keys(): + ratio = float(previous_dividend_yield[year]) / float(three_years_treasury[year]) + previous_dividend_to_treasury[year] = ratio + + #print(previous_dividend_to_treasury) + if not previous_dividend_yield: + return (0, 0) + + min_ratio = min(previous_dividend_to_treasury.values()) + max_ratio = max(previous_dividend_to_treasury.values()) + + return (min_ratio, max_ratio) + + def buy_check_by_dividend_algorithm(self, code): + estimated_dividend_to_treasury = self.calculate_estimated_dividend_to_treasury(code) + (min_ratio, max_ratio) = self.get_min_max_dividend_to_treasury(code) + + if estimated_dividend_to_treasury >= max_ratio and max_ratio != 0: + return (1, estimated_dividend_to_treasury) + else: + return (0, estimated_dividend_to_treasury) + + + + def run_dividend(self): + buy_list = [] + + for code in self.kospi_codes[100:150]: + time.sleep(0.5) + ret = self.buy_check_by_dividend_algorithm(code) + if ret[0] == 1: + buy_list.append((code, ret[1])) + + sorted_list = sorted(buy_list, key=lambda t:t[1], reverse=True) + + buy_list = [] + for i in range(0, 5): + code = sorted_list[i][0] + buy_list.append(code) + + self.update_buy_list(buy_list) + +if __name__ == "__main__": + app = QApplication(sys.argv) + pymon = PyMon() + pymon.run_dividend() + #print(pymon.calculate_estimated_dividend_to_treasury('058470')) + #print(pymon.get_min_max_dividend_to_treasury("058470")) + #print(pymon.buy_check_by_dividend_algorithm("058470")) diff --git a/pytrader.py b/pytrader.py new file mode 100644 index 0000000..e32d176 --- /dev/null +++ b/pytrader.py @@ -0,0 +1,381 @@ +import sys +from PyQt5.QtCore import * +from Kiwoom import * +from PyQt5.QtWidgets import * +from PyQt5.QtGui import * +from PyQt5 import uic +from widgetfile import * +from PyQt5 import QtCore, QtGui, QtWidgets +import time +from pandas_datareader import data +import matplotlib.pyplot as plt +from matplotlib.figure import Figure +from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas +from mplfinance.original_flavor import candlestick2_ohlc +from datetime import datetime +import matplotlib.ticker as ticker +import os +import plotly.graph_objects as go +import tkinter as tk +from tkinter import ttk +from IPython.display import display +form_class = uic.loadUiType("pytrader.ui")[0] + +start_date = datetime(2020,5,8) +end_date = datetime(2020,10,8) + +dialog = tk.Tk() +dialog1 = tk.Tk() +dialog2 = tk.Tk() + +class MyWindow(QMainWindow, form_class): + def __init__(self): + super().__init__() + self.setupUi(self) + self.trade_stocks_done = False + + self.kiwoom = Kiwoom() + self.kiwoom.comm_connect() + + self.timer = QTimer(self) + self.timer.start(1000) + self.timer.timeout.connect(self.timeout) + + self.timer2 = QTimer(self) + self.timer2.start(1000 *10) + self.timer2.timeout.connect(self.timeout2) + + accouns_num = int(self.kiwoom.get_login_info("ACCOUNT_CNT")) + accounts = self.kiwoom.get_login_info("ACCNO") + + accounts_list = accounts.split(';')[0:accouns_num] + self.comboBox.addItems(accounts_list) + + self.lineEdit.textChanged.connect(self.code_changed) + self.pushButton.clicked.connect(self.send_order) + self.pushButton_2.clicked.connect(self.check_balance) + self.pushButton_4.clicked.connect(self.show_graph) + self.pushButton_5.clicked.connect(self.dialog_open) + self.pushButton_6.clicked.connect(self.dialog_open1) + self.pushButton_7.clicked.connect(self.dialog_open2) + + + # 차트확인하기 버튼 + self.button = QPushButton('차트 확인',self) + self.button.clicked.connect(self.chart) + #self.button.clicked.connect(self.show_graph) + self.button.setGeometry(105,239,75,23) + self.chart = QDialog() + self.canvas = FigureCanvas(Figure()) + + + self.load_buy_sell_list() + + def dialog_open(self): + + label = ttk.Label(dialog, text="현재 날짜를 기준으로 과거 거래 일 별로 시가, 고가, 저가, 종가, 거래량을 가져와 특정 거래일의 거래량이 평균 거래량보다 25% 초과시 매매하는 알고리즘") + label.pack() + dialog.title("급등주") + #self.dialog.geometry("300x300") + label.mainloop() + + # def change_test(self): + # change_label.configure(text="text change") + # change_button + + def dialog_open1(self): + label1 = ttk.Label(dialog1, + text="상위 20개의 종목을 추천하여 매수할 수 있도록 하는 알고리즘") + label1.pack() + dialog.title("신마법공식") + # self.dialog.geometry("300x300") + label1.mainloop() + + def dialog_open2(self): + + label2 = ttk.Label(dialog2, + text="과거의 데이터를 가지고 와 알고리즘 스스로 반복해 공부하여 향후 해당 주가에 대한 예측을 하는 알고리즘") + label2.pack() + dialog.title("주가예측") + # self.dialog.geometry("300x300") + label2.mainloop() + + def show_graph(self): + code = self.lineEdit.text() + self.fig = plt.figure(figsize=(20, 10)) + df1 = data.DataReader(code + ".ks", "yahoo") + ax = self.fig.add_subplot(111) + df1['MA20'] = df1['Adj Close'].rolling(window=20).mean() + df1['MA60'] = df1['Adj Close'].rolling(window=60).mean() + self.graph_viewer.canvas.axes.plot(df1.index, df1['Adj Close'], label='Adj Close') + self.graph_viewer.canvas.axes.plot(df1.index, df1['MA20'], label='MA20') + self.graph_viewer.canvas.axes.plot(df1.index, df1['MA60'], label='MA60') + + data_name = '이동평균선' + #self.graph_viewer.canvas.axes.plot(x_list, y_list, label=data_name) + self.graph_viewer.canvas.axes.legend() + self.graph_viewer.canvas.axes.set_xlabel('Date') + self.graph_viewer.canvas.axes.set_ylabel('주가') + self.graph_viewer.canvas.draw() + + + def chart(self): + self.chart.setGeometry(600, 200, 1200, 600) + self.chart.setWindowTitle("PyChart Viewer v0.1") + self.chart.setWindowIcon(QIcon('icon.png')) + + self.chart.lineEdit = QLineEdit() + self.chart.button1 = QPushButton("차트그리기") + self.chart.button1.clicked.connect(self.ButtonClicked) + + self.chart.button2 = QPushButton("유동성차트 확인") + self.chart.button2.clicked.connect(self.ButtonClicked1) + + self.fig = plt.Figure() + self.canvas = FigureCanvas(self.fig) + + leftLayout = QVBoxLayout() + leftLayout.addWidget(self.canvas) + + # Right Layout + rightLayout = QVBoxLayout() + rightLayout.addWidget(self.lineEdit) + rightLayout.addWidget(self.chart.button1) + rightLayout.addWidget(self.chart.button2) + rightLayout.addStretch(1) + + layout = QHBoxLayout() + layout.addLayout(leftLayout) + layout.addLayout(rightLayout) + layout.setStretchFactor(leftLayout, 1) + layout.setStretchFactor(rightLayout, 0) + + self.chart.setLayout(layout) + self.chart.show() + + def ButtonClicked1(self): + code = self.lineEdit.text() + df = data.DataReader(code + ".ks", "yahoo") + candle = go.Candlestick(x=df.index, + open=df['Open'], + high=df['High'], + low=df['Low'], + close=df['Close']) + fig = go.Figure(data=candle) + fig.show() + + def ButtonClicked(self): + code = self.lineEdit.text() + df = data.DataReader(code + ".ks", "yahoo") + df['MA20'] = df['Adj Close'].rolling(window=20).mean() + df['MA60'] = df['Adj Close'].rolling(window=60).mean() + + ax = self.fig.add_subplot(111) + """ax.plot(df.index, df['Adj Close'], label='Adj Close') + ax.plot(df.index, df['MA20'], label='MA20') + ax.plot(df.index, df['MA60'], label='MA60')""" + ax.legend(loc='upper right') + candlestick2_ohlc(ax, df['Open'], df['High'], + df['Low'], df['Close'], + width=0.5, colorup='r', colordown='b') + ax.set_title('KOSPI INDEX', fontsize=22) + ax.set_xlabel('Date') + ax.grid() + plt.pause(0.001) + self.canvas.draw() + + + + + + def closeEvent(self, event): + + self.deleteLater() + + def trade_stocks(self): + hoga_lookup = {'지정가': "00", '시장가': "03"} + + f = open("buy_list.txt", 'rt', encoding='utf-8') + buy_list = f.readlines() + f.close() + + f = open("sell_list.txt", 'rt', encoding='utf-8') + sell_list = f.readlines() + f.close() + + # account + account = self.comboBox.currentText() + + # buy list + for row_data in buy_list: + split_row_data = row_data.split(';') + hoga = split_row_data[2] + code = split_row_data[1] + num = split_row_data[3] + price = split_row_data[4] + + if split_row_data[-1].rstrip() == '매수전': + self.kiwoom.send_order("send_order_req", "0101", account, 1, code, num, price, hoga_lookup[hoga], "") + + # sell list + for row_data in sell_list: + split_row_data = row_data.split(';') + hoga = split_row_data[2] + code = split_row_data[1] + num = split_row_data[3] + price = split_row_data[4] + + if split_row_data[-1].rstrip() == '매도전': + self.kiwoom.send_order("send_order_req", "0101", account, 2, code, num, price, hoga_lookup[hoga], "") + + # buy list + for i, row_data in enumerate(buy_list): + buy_list[i] = buy_list[i].replace("매수전", "주문완료") + + # file update + f = open("buy_list.txt", 'w', encoding='utf-8') + for row_data in buy_list: + f.write(row_data) + f.close() + + # sell list + for i, row_data in enumerate(sell_list): + sell_list[i] = sell_list[i].replace("매도전", "주문완료") + + # file update + f = open("sell_list.txt", 'w', encoding='utf-8') + for row_data in sell_list: + f.write(row_data) + f.close() + + def load_buy_sell_list(self): + f = open("buy_list.txt", 'rt', encoding='utf-8') + buy_list = f.readlines() + f.close() + + f = open("sell_list.txt", 'rt', encoding='utf-8') + sell_list = f.readlines() + f.close() + + row_count = len(buy_list) + len(sell_list) + self.tableWidget_4.setRowCount(row_count) + + # buy list + for j in range(len(buy_list)): + row_data = buy_list[j] + split_row_data = row_data.split(';') + split_row_data[1] = self.kiwoom.get_master_code_name(split_row_data[1].rsplit()) + + for i in range(len(split_row_data)): + item = QTableWidgetItem(split_row_data[i].rstrip()) + item.setTextAlignment(Qt.AlignVCenter | Qt.AlignCenter) + self.tableWidget_4.setItem(j, i, item) + + # sell list + for j in range(len(sell_list)): + row_data = sell_list[j] + split_row_data = row_data.split(';') + split_row_data[1] = self.kiwoom.get_master_code_name(split_row_data[1].rstrip()) + + for i in range(len(split_row_data)): + item = QTableWidgetItem(split_row_data[i].rstrip()) + item.setTextAlignment(Qt.AlignVCenter | Qt.AlignCenter) + self.tableWidget_4.setItem(len(buy_list) + j, i, item) + + self.tableWidget_4.resizeRowsToContents() + + def code_changed(self): + code = self.lineEdit.text() + name = self.kiwoom.get_master_code_name(code) + self.lineEdit_2.setText(name) + + def send_order(self): + order_type_lookup = {'신규매수': 1, '신규매도': 2, '매수취소': 3, '매도취소': 4} + hoga_lookup = {'지정가': "00", '시장가': "03"} + + account = self.comboBox.currentText() + order_type = self.comboBox_2.currentText() + code = self.lineEdit.text() + hoga = self.comboBox_3.currentText() + num = self.spinBox.value() + price = self.spinBox_2.value() + + self.kiwoom.send_order("send_order_req", "0101", account, order_type_lookup[order_type], code, num, price, hoga_lookup[hoga], "") + + def timeout(self): + market_start_time = QTime(9, 0, 0) + current_time = QTime.currentTime() + + if current_time > market_start_time and self.trade_stocks_done is False: + self.trade_stocks() + self.trade_stocks_done = True + + text_time = current_time.toString("hh:mm:ss") + time_msg = "현재시간: " + text_time + + state = self.kiwoom.get_connect_state() + if state == 1: + state_msg = "서버 연결 중" + else: + state_msg = "서버 미 연결 중" + + self.statusbar.showMessage(state_msg + " | " + time_msg) + + def timeout2(self): + if self.checkBox.isChecked(): + self.check_balance() + + def check_balance(self): + self.kiwoom.reset_opw00018_output() + account_number = self.kiwoom.get_login_info("ACCNO") + account_number = account_number.split(';')[0] + + self.kiwoom.set_input_value("계좌번호", account_number) + self.kiwoom.comm_rq_data("opw00018_req", "opw00018", 0, "2000") + + while self.kiwoom.remained_data: + time.sleep(0.05) + self.kiwoom.set_input_value("계좌번호", account_number) + self.kiwoom.comm_rq_data("opw00018_req", "opw00018", 2, "2000") + + # opw00001 + self.kiwoom.set_input_value("계좌번호", account_number) + self.kiwoom.comm_rq_data("opw00001_req", "opw00001", 0, "2000") + + # balance + item = QTableWidgetItem(self.kiwoom.d2_deposit) + item.setTextAlignment(Qt.AlignVCenter | Qt.AlignRight) + self.tableWidget.setItem(0, 0, item) + + for i in range(1, 6): + item = QTableWidgetItem(self.kiwoom.opw00018_output['single'][i - 1]) + item.setTextAlignment(Qt.AlignVCenter | Qt.AlignRight) + self.tableWidget.setItem(0, i, item) + + self.tableWidget.resizeRowsToContents() + + # Item list + item_count = len(self.kiwoom.opw00018_output['multi']) + self.tableWidget_2.setRowCount(item_count) + + for j in range(item_count): + row = self.kiwoom.opw00018_output['multi'][j] + for i in range(len(row)): + item = QTableWidgetItem(row[i]) + item.setTextAlignment(Qt.AlignVCenter | Qt.AlignRight) + self.tableWidget_2.setItem(j, i, item) + + self.tableWidget_2.resizeRowsToContents() + + def closeEvent(self, event): + + self.deleteLater() + + + +if __name__ == "__main__": + app = QApplication(sys.argv) + myWindow = MyWindow() + myWindow.show() + sys.exit(app.exec()) + window = MWindow() \ No newline at end of file diff --git a/pytrader.ui b/pytrader.ui new file mode 100644 index 0000000..8ced2d5 --- /dev/null +++ b/pytrader.ui @@ -0,0 +1,649 @@ + + + MainWindow + + + + 0 + 0 + 1055 + 789 + + + + PyTrader v0.4 + + + + Auto_Stock-main/Auto_Stock-main/icon.pngAuto_Stock-main/Auto_Stock-main/icon.png + + + background-color:rgb(242, 230, 216); + + + + + + 10 + 19 + 181 + 251 + + + + font: 9pt "나눔고딕"; +background-color: rgb(255, 255, 255); + + + + 수동주문 + + + + + 10 + 20 + 31 + 16 + + + + 계좌 + + + + + + 45 + 15 + 120 + 22 + + + + background-color:rgb(242, 178, 121); + + + + + + + 10 + 50 + 31 + 16 + + + + 주문 + + + + + + 45 + 45 + 120 + 22 + + + + + 신규매수 + + + + + 신규매도 + + + + + 매수취소 + + + + + 매도취소 + + + + + + + 10 + 80 + 31 + 16 + + + + 종목 + + + + + + 45 + 75 + 120 + 20 + + + + + + + 45 + 135 + 120 + 22 + + + + + 지정가 + + + + + 시장가 + + + + + + + 10 + 140 + 31 + 16 + + + + 종류 + + + + + + 10 + 170 + 31 + 16 + + + + 수량 + + + + + + 45 + 165 + 120 + 22 + + + + 1000000 + + + + + + 10 + 200 + 31 + 16 + + + + 가격 + + + + + + 45 + 195 + 120 + 22 + + + + + + + 10000000 + + + 100 + + + 0 + + + + + + 10 + 220 + 75 + 23 + + + + background-color:rgb(242, 178, 121); +border-radius: 20px; +border-color: rgb(255, 255, 255); + + + 현금주문 + + + + + + 45 + 105 + 120 + 20 + + + + background-color:rgb(242, 178, 121); + + + true + + + + + + + 200 + 9 + 831 + 441 + + + + font: 9pt "나눔고딕"; + + + + 잔고 및 보유종목현황 + + + + + 10 + 20 + 811 + 65 + + + + background-color: rgb(255, 255, 255); + + + + 1 + + + 135 + + + + + 예수금 (d+2) + + + + + 총매입 + + + + + 총평가 + + + + + 총손익 + + + + + 총수익률 (%) + + + + + 추정자산 + + + AlignCenter + + + + + + + 750 + 410 + 75 + 23 + + + + background-color:rgb(242, 178, 121); +font: 9pt "나눔고딕"; +border-radius: 25px; +border-color: rgb(255, 255, 255); + + + 조회 + + + + + + 670 + -140 + 611 + 131 + + + + 잔고확인 + + + + + 10 + 20 + 591 + 61 + + + + + 예수금 + + + + + 총매입 + + + + + 총평가 + + + + + 총손익 + + + + + 총수익률 + + + + + 추정자산 + + + + + + + 490 + 90 + 75 + 23 + + + + 현금주문 + + + + + + + 660 + 410 + 81 + 16 + + + + 실시간 조회 + + + + + + 10 + 90 + 811 + 311 + + + + background-color: rgb(255, 255, 255); + + + + 135 + + + + 종목명 + + + + + 보유량 + + + + + 매입가 + + + + + 현재가 + + + + + 평가손익 + + + + + 수익률 (%) + + + + + + + + 0 + 280 + 201 + 201 + + + + font: 9pt "나눔고딕"; + + + + 자동 선정 종목 리스트 + + + + + 10 + 20 + 181 + 171 + + + + background-color: rgb(255, 255, 255); +border-radius:15px; + + + + 주문유형 + + + + + 종목명 + + + + + 호가구분 + + + + + 수량 + + + + + 가격 + + + + + 상태 + + + + + + + + 200 + 459 + 831 + 281 + + + + + + + 20 + 490 + 161 + 41 + + + + background-color:rgb(242, 178, 121); +font: 9pt "나눔고딕"; +border-radius: 15px; +border-color: rgb(255, 255, 255); + + + 그래프 조회 + + + + + + 20 + 550 + 161 + 41 + + + + background-color:rgb(246,211,148); +font: 9pt "나눔고딕"; +border-radius: 15px; +border-color: rgb(255, 255, 255); + + + 알고리즘 설명 + + + + + + 20 + 620 + 161 + 41 + + + + background-color:rgb(242, 178, 121); +font: 9pt "나눔고딕"; +border-radius: 15px; +border-color: rgb(255, 255, 255); + + + 오늘도 공부하는 개미 + + + + + + 20 + 690 + 161 + 41 + + + + background-color:rgb(246,211,148); +font: 9pt "나눔고딕"; +border-radius: 15px; +border-color: rgb(255, 255, 255); + + + 기업 데이터는 여기서~ + + + + + + + 0 + 0 + 1055 + 21 + + + + + + + + Widget + QWidget +

widgetfile.h
+ 1 + + + + + diff --git a/sell_list.txt b/sell_list.txt new file mode 100644 index 0000000..5c4ea13 --- /dev/null +++ b/sell_list.txt @@ -0,0 +1,5 @@ +매수;001720;시장가;10;0;매수전 +매수;001725;시장가;10;0;매수전 +매수;002460;시장가;10;0;매수전 +매수;001800;시장가;10;0;매수전 +매수;001790;시장가;10;0;매수전 diff --git a/table.html b/table.html new file mode 100644 index 0000000..bccdc85 --- /dev/null +++ b/table.html @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + +
항목 2013 2014 2015
매출액 100 200 300
+ \ No newline at end of file diff --git a/test.html b/test.html new file mode 100644 index 0000000..7247a6a --- /dev/null +++ b/test.html @@ -0,0 +1,25 @@ + + + + + + + Document + + + + + + + + + + + + + \ No newline at end of file diff --git a/tmp/checkpoint b/tmp/checkpoint new file mode 100644 index 0000000..e6c74d8 --- /dev/null +++ b/tmp/checkpoint @@ -0,0 +1,2 @@ +model_checkpoint_path: "ckeckpointer.ckpt" +all_model_checkpoint_paths: "ckeckpointer.ckpt" diff --git a/tmp/ckeckpointer.ckpt.data-00000-of-00001 b/tmp/ckeckpointer.ckpt.data-00000-of-00001 new file mode 100644 index 0000000000000000000000000000000000000000..aac2442c540294c6fd4743eeaa75c86680cae701 GIT binary patch literal 47629 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

q{n#^ zQ+$6jTe$B!wHhzs_h>q!wbx(1MEEI2NFtW%?XZIab60Cz_^p(a!^u zaQ|36@!jKzT7Hjd{JSDz=BG_=YBa&Rb61&;)0vc)^q4%`*i5-^rnEm+Pe->6e~H(D zrFfw=3pXescTZ&%H^KZPH`k?%A1tR%zDV2CswNJaeSAq{xtdUzAPS4L<=~e}92MyP zOZGi>;|`CQVe68st&N0i8I+tBRX{B z1cyI1GZ=TM+#|CVhLJ?aE3AJ`BaKs9OK6-9UAgc*-=_Hxwe!{_n+1ZQOEMVF=&mE@ zQ%6W&tOBV1)`a;n;bf1`Mf$b$8Qo@{!YT>1vGGyUA;Ke_>z@bY=S4BNx@b4q`@tLL zev3un;Xo=kkApL7jInnmk2V`;lRR57sLP)4{Oz4eB^{+vtwfb<91>_3xOjnxF4@c` zdCX?y{!GGqPW9At)DWZw*TAjD_e5NK86>2N;H2{NF4kWDxd0jGtma8+0VxuRtV zn@=|}I}>$Kqg#i5|0aW*>))~7<~x}Sx&ILtB8W5ZW>DQBN%l+m3ii@#E1IgNL(W@h zV8@<1s=VtiITxPI&QsLEk-pvN6(8d-Yo#Q-r(J8h2=!@F>{KSmOP%EU2-}(|UrO%5_ekw@T7o8y7 z_;@_K;tTWWlNm(hOJH>U5%$2OiU~&NhFs1qwqIZ$8XcIZ6J#^FGGrEV&Xi+R`ZcED z>RYz%>O$PYm%-(VrR@c0{xL!C7T}Gp0_r%yD`g7}=uJ&Nv2-(_`}JhVScWkCJbsf^ zYx_es?lvQlo(o}7+7q&Q)>2yaZZhs(rT~uDwBg$#C+eRl1XC)7a7pfKn)l0=)*5{# zV>vBU@24OdE3Rg&CN$lfd{HvDcS2wF_%Uxj?O~p1RnfHUF204!O(tvJ7ba?`h}hoc z(^YdX(OpH`sQ$h`B*ji1d_SFp%ZIh7@VGqfk-SWmWM;q~{~5H2Yd|-}4bUczE_wY% z13vpq^yMx5a6w-t$$h6nrOw}_2G7&jpIz3_mRG~riJM`;E|&c#w!M9XdxvIOdE(Mr z3|=^Tfkw~IV-+uKhmnKJsl56+#^kjCzV{5}f0^e-ZOxo;-m<^W;+s=ple8Irebqzz z{HM^kIY)@dLosx|I~B?Y21#Am0b*c34L@vSS>3_yT)FC6R>buX>Di`^yuVo>L?y7J zc%m0{*9u;p`a$M@@L+R)B-0n~uafU->U4jY6L5Qy_ywtVXm;TP*5#EEU2nVvGQ^j% zQ|g>BO&Mg3*O0H*^WJOZ>;}P5DD+)p)8yQViBPMF?ZDv?vfBW~WXfPJGV8l~6 zWD#4=1WdWa`exe`S?>aFqK_UkzCXofgTywMzq1ov$|SbCR6R~{(KStRxjQS(<=>`c z7jd%;m;F{-T`(`rgy!OMFKk!AOg1Pah|8o|;TjzXXEQXo+ zL7t4}JYjXrWZ>i8t&Dbu29sobpDDar-yU%$8jLRe<$BE*B9Y~V%*PYA*qecNWJ%C$ zZs~g!ret9|Z=tRtC!Uq(2+dn-^GsKUBbjf^n?F;X^C(n?bMt&MueZqGG4@=RRkV-> zXJKV4?_bhX&hOs_ytFMRTGw@-Y0WBD=KSw}iqgGxJloMi32g@zj>GfSy#HORwov6< zUY^HGG*NCiXJW()Xg$F@uJNli?~Vp%)~%DR1M}K=opxHB_{FjusX4rJ-?QX7h89LV zx2V%i3N6Z<-mGL^({g{unn+Ju{SFOIq+lygIJTwf{D$egF0G2zTU%>d_0=@~FTU{H zTHZ>h#0K84KMig*G5;4odHPKo-vfJiC4L$WIvZ3TdjYz3OM;TJuR+k{k6D_ zr#w}av-!O|r<~LJfAL+n8S_4SXg3?LQ|DOUPT?6l1UOzkP-T0Eqs5V4(#p#iX=w@z zHQ<@om$wcYo@w2zr^tC*qL}gfSS>F>!|>deywL``nEyZiO4%UW`&;vPX_edt)mNrG z-qGW{yv09T2VBaVKHF5c=4$bIp*b2Hsjo_$J_+7Ac%#U%+-JdCDi_>rHea1nFp$Rk zl@jc@y7s>9-hDEhE52>Km)w>n3BC!>#qdOHC#`GUIUvU=oUF;Y9^JrucINWAM=w7# z6mw($Z~Wf#PuiaCE#Q6nFsH%Fz=rq!<_Vtuqra`MXPs|K`%vG?%<13_EKgDGw^?iT z#fpC}VS^ecL&u4?$8|^Z|JLu!wk%$lMxc$tZ9X?OS%!fTSM;Z=ST z=DnA_*OVQCttKXC+cwQ0YEu_+t!IBOZp!wN=Ul1KYI9bOZ3)Yl<4pg&rcKXou2bH& zE<26EZMM08Pq(eTeY|=UaiTJk{>dK{d|2qyzS^oHkkSk`!_n$W*lV=<#c8nWhgwycn0w7+#^~ z=y;;oI!|k-qlbBs!;wcH8bWlZa;6m6Ixb4ccNFb#YYn<8moZeLlA*a^cIzCo1&-CA z;CQsB&|dq2Du*L@)?x0?%hrX-%8seGO&yL!d~Pi5Rp)qlU3VDlp5~ZQ@wkN%QpxDz z%Vuyy7PKB#_i;SzuIkA7c-X%BKdlV$&PIo64*E9d$}}8{Pg*-1IqG|^{JKnr(!aY7 zv*t~ATsY-*%g$8UjK|KhobJWm%`=Ju?IZq7wO5#5VS6)6o%5egn_Ylpdc(6gZTpM* zj&_U3Ev=kYlsTI&_St1cnb`MF8E*O-r<$?mvOucJz5;i zX~E6X(rxuSuXHqDk$Ti*o37C?ZM8gScsQ+Dz4%7+n_IhVGewm+hu*7X9M-M24^gaZ zeF3Sh*GxDqrtvZygEEEI?N@xPZQiE0+SwPj*my=ZUJTISC_Fc7ZG4~8dNi8YOIB!d zOzoy-TzmV(PCWZf%jpwUEgN&EHw(O!=XhP5+0qm*+wgqe>6RN-=bJC<^;=1;k>wcn zhPRx!+0^2OMCMlGZA`GEc8yqB$)Q!86l>!!DSU#`lj6?Sd)+K|?eu6(Lh z`btO3?Y31`!MD^o<%P>y`w|*kCtZ%WKl)K4W1XFPMrAyw_30l`#{rRx4w}zr+0TEe znjw2U!l80nm-YNbR~^13y|!0dG1j=KUoFG8X1fD>y4yj#r=aEJBN~8;Ro+>HbxW`Z?V{`cameo=3T2#`@ z>^i4vWYq1}$iM;Z=FkEI`z*h&c5=2!w)O+6oQ>IecGYvZ4VtHZ*ue`)JB6(WtaQed zIE$WE*%|y3vR6oGZc-@K%rJhbm67|*vQOQqJr7t=7i7e(aOo(6~CsEy=IVCFo4s-+>s% z#<$9x=hHPZzEsHYmerN>)V%cC!nQnXjoPS?v2flR-nyADn=eZ$v@NW>%iC@&Z#gGZ zmZSVTg4fa~(pL6n4R5-CSbNZ-_05$Zb#i!6WqyJ;&LtJ89yC(zO@%|RU5L+|7M_)ajo+A-ZQAvoX7`T3mS-t)JkLoR z96db$A9-*7Pu2InkF(7~=6QBZXFhv8hXzT7P^lyol}eH(jT$+I5He>j%FG$}KF5?O zNuyE;NfQ-?D5c5s>-Bm68Q=ZOemvGM_qz95kA2_wbzS#b4~a-`dFjw26UV?`uQ;!A z4I7Fa3psBM%GhREhHNlxoRgcfW?r#ajxE#ZO$Fu51E?(e(fqIZHs<&5V0eQx7(*?NNMnKj&10ZOV4nTNY z051ECfC@Ejz-r2rd&SiNXmRz_jn2BD)6U7sl-{k&s@S_y_voEs?W3uAnZXINdLHAa zv)4pwWoxgn%3h(lAiIBdkIwTT1wF6u)T~DfkLk(p=+iWOxG=r&am<1;aBKQ?+I@|L zq5O;NmDeslly1BjlQ5d@Ra9{?_>)Qc%Wr!%gQ^_VR%&;rt$MDN=KUcceQqsSU5uzx zbQH8I*SGXlA5z{;F)&Ic3j{p!(vmx5W{HRzc3z7TYJR=i`|g$MM#943biG{l*?;1y z_tG4yzQw#hTH3&|07LE<4IRMzzA4bzYYZg27yxZlU7%TApIhvs54^l;1gvnI&okzI zmetV)DvI=hHR{^HG9~%C69-aj4IC&m8hHU-Uu~#1ZuRQg8~A0KQ*(J;j{%9{saQ)7 z-hF{y`7DdRC`YOG-ds$b`kztS!x@$OGb4wpR?jL>{@%|lj~sbTUQ8>iRK4d)w$qCt zSB5K)Pwq>geE9p;!MN)eIc9G~WzTY|y~oKf4vo3;4pwI#lRp@&V?Lj)X62rCVr+9= z0%_DV3l81X0TXUJ@PZte{J;NJ36->-@U4~|7A%w>1;b|&=?6poKwIn*csj67n0M5Z zIm;|$otbW-$y!-J_Rw-c{*rpu(DL8R2!$yAT2*D?&C}<2ISTRM(7^<7#o}a!!NZH- zkJOc5!J*Z{Hb)V-=E4>cp`juS{B9~HmGj^>xdkGjstWv}I2iu)(^=e>{!XOH&lO8M zbj3Xlu>xhkR3wDiB3kHOfCPuCfwMs*{=1-D`a!=wL7>E(|K*U5V0`KVZ~xjs{xkn@ zp$FN8U&&PGJv7(^cI?mOea_#^OSi=9Jv>GPfVUp-_p%vaj~H@SlxqWrhKzuInl8{Y zYXG>In*+mz2EcxX9x%|Z3y}PcfHV~oKw*ywAUnUNT3amvN|`ngdDjS-h&1EcMjHZ8 z6wQFbXU4#syDm4?-W*6>X~tdcYYbSeHUa?H3}{WU0QOun0*)(~0_D$jfUHely_a@y!8Bu_3SxvINd& znFAzu6X5-*G0RzhJr^3>Iu@U4;|GF|i#gN?y(?9BoZx>^Vggq}ik zo{i!)2eP0mOZUJY{dsug4oiYsU4`E!!tu9%SuBGx2o=~z5Nr-iusjF^Z;OHJMv{=r z5wWna^bsmk;z}5LXu}uY*(0t`d+_*!{=~C<4QcetJ)E0AB)A%Foajn5;yiF3WPgRV zr90FwvGYbOu$wCrQC~?PJL9w)$A?pgO4qEFXkSlf2O2<}qiKimIkn~ZjIWA>W~&ylRGx)wk6i;>HqD9xUzkI_lc!LVO}d0{&J*ZJ)>`2p-t|nZG7IlX-NRDpMnSC4ZT2w_r^EIj=+00d)Cm z0?dSSzTVb!r*hRa5z^}xb{Z#2AwWMx!?l}nUL@!Z#L2TLQ4c6C`_K*(J%ZL zAwhhjjex*n%2K%Ssf0IPn8a7D9cFz9&*9BwLi`t1H+ahzUlM##vII6V&4Gl^rd)cu z3Gj}l4Okx0;gY&cfuIl*;9-RkSI$L`yVXh;2n*5z>fRdyJY_BJJ0DZ7qk%4{@~nE^RJ47t|7b+`*(>H~hSb%0;4y1;{b2HeJP z=G=vAOn`_PJ%F8O06f@gz^&`h1?ZbBxSgHzd9u0=Hz>%0``5*Qi-Jbn<5s#{fto4T zt<)T78Pex|d#ekuS7~#P2O0uJ$1Q=-0t>DVt_ysVm;?2tTHLBR9q!kqM!?dx3`J!3-5` zlFve9o_uD#=IJ5@3o@`1JO#JJ*I&0nFKNj!k zi4PNdLv*E$BUHzCgWov|KRGn0q}FmoYp=7Fh9P$9I(f&6=ADiwdI;?F>r>J@-^)4k z=!4^x%O{CQ1uvpgR1EG;mBo(Dtd!I&Qj@f8T#6pv&PD#?CW<~L$|5mGE?{kSh7xF# z7{2f~5LuC2L#%(mkm$~e@XF#OJoxE2YqFMxHf9|pzPl_Utgr|~uIe$|=d%^=3^)oe znd(9Z%rHXBq!rr#aXTE|{SlYnx0?tZnZq@n;ds)-MplSzJ-Te4koa62L)0zNMElk} zg^TSB(Is(8$YaH_gUU0d(8>vA-o}Ui zkjwIQ(4gfu(dP&ISq1-ovaXHm)w^9Nh87OL6)avoz;bDHVHImp1bcgULgv;?e)|d& z=mn?=xu=IRI4x$-;)^ZdSsz)^q)8;qNx3bG+czfs8~s4M#*T|5Fd{^UTvpAiTP`5i zQWoNKN)N=3#A|TwvoGS~nPq&k?=n;x7%Qf@96{xiaB#M0g`nqtFa5DJR_M}{#oumw zL%eM8o+NdVqprpYhsRx+(@WiXpNzz` zu-h+~J$H`s!i=ix;k4m;hUH{^qRc~n*fu(^#8TQ8gvFbK^fKWwXEN?CB99T9qZl z?VE(RmvykV_trvRerpQ-&N{(d-)Kfrp9Rm&_BUnO++h80;R|}l;HG+mJ(uc-74_w&s?{|R?ls4GBYzca+Gmp5@ z8A)_lUqohBjKZ#~u5$xrqq+5D$Co&PRS-^dP+7JRm}> zlcc%-z2(@IEh6mt4@$I4GdN#%tmDklQ>95KwK;3xU)Yypp;+Fb0FGyL+q^i$3d6x} ziSt)A4pX<1Gk5hZ>Iua_zo(ncZ^2>2Tv25UtdLXzxBZD?vIIpDhrs}K91JK z#uHNqXz(4Z72f7(M3BDc5i<6144oGyEWRwCJ{=(j4Rkqz4e2qgaAtP>&OPNk|J$vC zk*O8@=&3jS-=IIZ#diVy#=-lnuH)*Unwza~`kgbQ-cyxzdy+}pr;-bL7&ZWQRK6YBI}h4#4`&MMgFEg`3qGQkPXLKqT>p>i1YCn z)-dHNFQ!C;J`mz57_e{R4Sc-FUqtz@o@wpFM;%`YY;AGgb=Hd4JDF{TV zK`V|GAX~+KnCnqbiPCZ{==ldo(NuHCh^lv- zv})sq$5q9gT%}9w#cd1NPl-v+O!+#;?$%n&#c~8b72S-M(;38p+51or5({@+ zeuIBNLWrBQGdR&zhc8{Qo;5&EL1kKMiQO^LM6;zLs=uWRE*SfYI4AVOV_L?T@9#9i z#KapuiS9zmdW?z6wMB%D>3S(Wyq;s^uSNLvawMB~26Hs5tvG(4{H1i?A@=+Fr`U9+ z8}^t<;S|Vbb83vfqcdJ*634I?>=QL-ICpPX;2L8Ic<_R|ECUlQR7p0DP+zr#5S=}V zNS9W^rLjSxFgZ2&m8k@My1|pEn)?q5`H~KIUL3&#ZFUp9nInWDeG#FVbQ$C&^q|ZH zI|*G@PO>$^90eWYkq<)>;bs>_WOY_NR&DWvNX$ru%hn-?kGFws$PYtdX^9wBx}j{GnU-&PX@rL0%Ks)q(1kEw<-4w(-=^?Wdcav z7y(oB_%5HU3rNoE0Ligt+=NaufGx5FcIN1F^*(9=sq;1efWHoKJ3=2&8PVrrg{ItA z3j^Snrv;$gY6g6nuYqibbbu#z+CXTzA-6HZ7;vc90bbtL=We~H4Ro~{0EP#(xL+}2 zVDO0r_v6rfj;C9-kF7N3_5|t!jO%9HeexE- z#S$&9yvPi=^U@s1{$s)|+GW8VOE(4-CbR&ap9!G(pEfXG$pCe*K0vO};tm*_1ARf3 z0Q%94dm%&{Sod0+``*Zc>%Uc>Ta#hJReC>P8@X9<9Y4-va21xoy_c3i@OvHZ-ws{w z@Mm2vsaX$rwA+aL9nH}LoU3(#>X$~`=PkNiB*qAMxl50GDp!a5hGzzhy_m-# z{S5%Sc`jqqZ!LhfQV%$BUK{Xxss*$@H3FCtBOqlSKlC#(1P03HWAa%&?#Q?vkjc^_ z3SPd%zieFsh8yokzudeMI@OpiZ5rpezYqCpN|ER;Ck0MhrMuI0-wQ zSVTN~)k=(YuO>DJYY`3kRV-=CFq-i~Q*!Ii3t|O%E9zQmgM9CFM$?zEkcg{iF|&aQ z!ee_KtVg*B~bh-p`6l# zRKHb3Mh}~cnFp4^3AIMp@jZ1!$=mJlZ0-!K{CfparE{CO_V_ON>XDS;_#wW2CY=O- zI-DZxzaGx|Ar8tl9v*a2$j#TmRqk;p&SSn%zs10p~{3m^E}jdX-MLB;ZiMSVLxP@`SXaBki<{E~hSzJaq9 zPutcDHEU#`i+4N`7r%UsKHfI~M!voy=$SUJ1Mj5^6S^{aht3QM##bH_^oXVf`!#e$ z_1i}H!Jegp$&>fNmikltEd!o{>5BxPBgzmCL()nrUm8O$3wFcgm&I-?g>1 zYE9CbffHqQs$8$yFt@b&B_B;0cKw&?d|n68Z#)GUcK&7c+rB#0tGUbZs1fJtMeEPh zo?HKq5r8x6bviVe=`lW3nXQ|v-ycl1fA3&jt0(7QZ4$Yurrx)@D)}N>LwzQ$-AqlX zR#A4YU_{hVXEIu=-0K!st=V2(`6Pv1n|ePSM-RZbwR}G7gdC1=e5{BQ%Cf}RdL5)i z6a<&-$r5#1)j@BMMWImkD843l9!Fmk41Z9{$5)k`6Q^EO;v=@@-}d{Qy<{wTwvGqyz6yvqnN6_24B^KZ5&ELprxUoRdCC z;DUkI#JbN$9KV}GY^?}wX_@CG_6xQurvCU0Dq}goKC;%Gb0HT;efhqU5W7tF-)|si zWkw`^YIr&BRmx?B-*Z9eh0BP-No`_-D+{?A?F-*MHzAsARD-TGokr8w=n;C?UP8j$ z_3($>I{eu@{_#Ja?*GrvWk+4`@})EuY`TYWaHb5(c2*Kf&StU(w#zY;>skc=?fxR{ zzGlU5E_ns2&a8ph|FLjyUDNExlt$y4dp-ISq<*@&j+gutLk{A#bD1M1nND{6dn=9!zKBaqLU^fVfOeb zv4Jxk*&m%R+@=UYm$VNeM_=pUY^Ne|K)xKVTv{#W`3XRI^am1LKog%!prTgAf#8E6 zbAhGR3EIYZLt#`O!JD+*E|8hL&qu9e1aHQ2g~e}e`6j17@Kye70aLBC`P?`$-?3yd ze<(~xSoR^1SdTgoRM~X!vSmAZ;FGSz-gA`DQd)p6G2D-w*pH6>f73yE#VHWM}Na^RM}CD^9?0Ey8VYssRLT9iC~8fj^|g5INL zB94X~n8qNwtj~=o&mngstd>*QY7u)ilJp)zdz$=8YJN>Z@$e*M08N zXMCK7m}cNBx`(uY=jC>@-YKiMUdj6zqiJx6*Mw&BB8jqk-m1a+5}kosjbjb>6C zcqHp8iC6haN zFBFc~=@Gpze+cc|l7<$x$q{)DrO@-G8E|2HE$$hK5yQEyxJ-K-zAJ~sYIF5QP0qy= z8h)#Y)|3Z`>sUJM`YRt19>|9KTt`v)-p$0?3~PAsr87bmjN?~4j}qS(k)&5X$8iqI zJ;P}qR3r;+nVjW!ezP?!?WA1~>e!$9Y_US^WYjtC8~cIHcFy-*x6xdqP)XA5t8B^= zFOGb05`J@6Fm5`L$I2Y{N6uc_OeC+gBLW{UM+|-j!7AZq;>)dC(0~6@P}3p@;)?w! z6lA#z{!e%lKe*0?=sb~tn>2gjMTz%WW4`Z^NEZ%~kgiQwuBIZ(;$z@@=h8$?mG7Zl zj_D|4p910f^C~nJbPf*aug8s2QKI(m4ZOWC9;XJcU|m(;fNHoW5Ybmx5d~Mfkv!LI z_+3r~5}{WN`?r5V@4N~kw$_ng%{Pk?kUNP-7#$&{*&q4A;v- zmd4uSrKM7FpocMjWZzA(R?AM%R#hMMmGcps53NE4HOIh~S}nn#LjnD|D=G}@*u|HP zj1x?SW%1J;`~-)sZVB5wYxyM03ck8UDd>9q53g`rF#r5e5AV|lSD|S@8-AiD6MrcA z#hN~8iuwd{i8(nR!g%Wuq~+^9`0pQk(TX=5*etsnZS8O&jwOsj9T_>WQOj?<&g%@J zkEjqmk!^U2cNEL^{3Z0Umnifs)yPrzJj|uWzcnLWAM=r6l~|3%fu1q-LRuH z8qw*d5nv9F(0jc{n)INJv*wyPG2!JdNl-n(X){7N+aw32vzvdiOL#pPmbemIowJZ5 zICG7&c2ouXJ}H)TO-`~UcT+hrYg%w!EDslZzhh~1XrXKTbBNBZ{=}B|Dac;)M%Xf) zFIu}v84d_~fVz$DB#vx1gl+Z8;jt26p7-YxQG*Tmw(qHU`iUPb(lHG*`Cb%}9q2*e zD*F))%41k|j6>s13GmK)-|!CVK_V+rj__-3#0@?jVUecN z&_|!8#P;LK#FtxIXjpu;NFKt@U4O=JbUgC(Tb4JEBj`Vt2P+_>{O^Y>hKWSRx3u6uXKoV{TZUQED9X{ zaFH-&$PSmCyn-G(u~nEksw#?3@nP|2!6?d4E$1GmF62fucMBl(n)ML3m7WS``J$9cYUGv}!TKqQ) zdmZ;&V&hjNxqay#d*KQnN#3{sSMKn_%k}dlgKlcleP9w^-D<$T_0wCD#-EXRXIrB` zQxwqS0F7@oZ722`kj0Wex1$Byeu&HhEJPN2akz8ltDtHL2k&X$6+TVc&m(TR!r|DL%*SIG_VyL$qd{U%LNq4R%QQPz9a7r;OfKIgv65|tLj{`s8;gOT5%996pROe-3&hrc6aJf``NnI5F|0W%fbT-!W(~S* zRqfB%vnWk`LCz_$Ylw?Td%1$RKI|AlzA=Om`(i}mTN+|*N;- zb*qBosC#gO@j6Rs8wkK>Eh*xIHeJNKEJt=;gOYglv?`u?q6<5gvXZ@dR?)F-Zd*ep z-i+y(K4Xu2X*3MHe=Kc+7dZMoLwl5nZ7&?0W}G zL{m~nvGKulEIdS$eKA3dRIEurVxL;_?|sM>YxwU%bM?&7zsF-m(|3l2kxgQeai+2; zF6FuS+HE#kL0Q2HBLhr%{uAUka})ae#(#+CR}r$p_Xh8AoCR)=)uKt8{ZaIsk@!*b zQ(;h6kvOFIkVt8ZEgpF)2j#Qf1@uK^(T5H5_0?!0`gJOR-Pwpsdh)%{KRz8;$LCFw zor~oqzU^Ub>ePGUy6<}exq=ZFY~3U}o%s?iWfF8rKLxXl?;`$_KPai&o`4LDEl2+K zYVaeDz7X%vbVFxe-az2@Y>`P^lQ0AB7lj553gwrDiPZ&~sLus1c+Ju}dxq zYCbswMq2F>@1DWLi>GzOql@Iky8*3wuqZ{G{h(iLl=oL$<8K0Ue@=lvch-pdbyS3^ z*F%vXwU5Qox(F2a)>rUtTeeuZDM!q6IZe#H`h(&8MA6d#4BNHw0*0iOV|VW46Vgl) zW_{R%_#NIOZu}s{eq4QztzKn`x|mlH*?0G1{#N@jpGZxyiR3@gSJ^bir-|)g)KITj z{!_bnyFee_bQ^(I=r4ww)YKth-EqWK=BcO(pw!KV_B*>MhE>17JKoZgAfX(te;4^xPaTY*SXcsU#u zZz?`UegoN7q@h~B9f`BK%OH1?Xm}Uag`Xr&6YpiCu|9Vq+_KOv&VUdn!SXqM9B@xi92OSSJYQ!r(t;U-(HE;`04VKOy zKQ#ETI?-{g8K218k1Srqg!f--M;1&Mzz#aGX!7H6oOJ_%Mo;5#!?wM+U!p7lEEPze zc589&2($4lLP=5sIut#ImYlz4l7l`BXwTPCBK5{(H7q+yx z1`n(?#7gR8iO5|n*s3@WuJ5B0i3dxFwsja`z7-&LD(A3PS>tF`&|l)OYa5X*=ZQis zdWcYsgZ>cFkqWbLOgs1m;bol$Z-?HP3Y+uU0lXVY^{gT8H_`T+=*y4hn@X?UgY_;bs{U_uEvnO#!|8_jL z+Zc>rk%x{wZzM))qKQG?b!3RIgd{mFMvi$k!bNA)u+T-B#AUWU%-_)k_vBa;>6MoW z#SlHL3Vw%9QrrYD`B`}TolcBZk&hKzYZvG8DPoPp3Xyli{6C_LM4VE}!OWD^ME(WB_|DDxS1`$ssQQ3Z;_g5&VB7CXf2Ud9o> zcg|q)!FeJhR-1UgaSY~}sK72WBRFl5`VGy~@!0U|8*JX*>(a2~I4NmW3ujxAv-F*F zw!}Fdkjyc2q>mQ@3)iA`cM3KY1Rmc<32s|KCN7 z*MCo(vt3VoX2wM{^r=R)iLFEEI+S9YDvU)f^g&VC76=P|+>EWuw!`Pv$l^k))2y`| zOQgVJ5Lcx);^!US!5f3!VW=({I>zsT+KRkU*Pwbl#5opvzMut~wB3ylPj}($h`sp! zFe<)gh{Wnxb{*;MwIQJ7IsC|tSj2g~8%(8dK?WCZgvYz{QR9E=#QGc0AgHh$ei~kg zuQ;zsM6bUsiTLfnS*#L^@BY4rC`f$B4nJJPR;=ogxR(2}4{zIqJ)WFJ;rmi{Vw)Cc zupkZ{3-pkPYqzjxmcM4#eYC)ry2{`>(Z^Vwl3U2!${AdGtrl-Kl|gK|i(q&|Ev#QC z18>z_g8uj97Vg130#!>C;3WM3{Oz7@{JqZ>B!aOo0@Wnmfgp{>2Jv4A3MIo5;({`!d2F^iEe-lq}0Q3c-Pe<|>o zUl3aNVI`_UY7|W@ixuiDULhPA^AeK1C&aS0tI?>3?n3*eY@x@_8RYUu7AnY7V1wsQ zNSsbJBPL5d@#kY|k`rQMGe~qspjy0RJU37knYNTW0FL*tcZ$)PRy*A8=qAYFL_x=)QpLdBJ z{(edtG>l6hSWa@>ULBT#Us#eYbKQip%q?lMy={Zr))K;Pi#G=*ACqpTC^ba}T-Vz#( zDKlrW+yEN3jt^kdibn)JN#%Ios}U?bS%e|Ouf-kZuHxAxnW7cd!=l8=#l(P39oD*l zCi-jLCmKuNjHzCKh0XOI#`N`Q7<6}z|HIFonB72OfBpFb%ei|VPu}b$RvgI09bcUj zt11={zn?B(e;Ol11@f=O=O=TpJMJdz8u`Z@zgb$tblN5C`<-64`tyG2A*Foj(L;Tl zUfyQuvQ?!LOSYy2xLGSTZqR9H3-%&zyffppzFQ}qSo>2tJZXm2t^JF7)oc|kyn7oT zJM#l`yI+Zod5?=9Y@~`w)=r`;ogE^pi!|c(sb-9%w@{R+CM*7=y%y8R=*R4J-%6A& z@g*Q*74+N2ll^fbPkJmRQhIGiDpoZ*g?>(5jk|asLDTbQ*m@gwNN3M|M%r=(Xl#eJ z^j>RP&6Ll$1IwQH0J5!JJOEr0$KhVZOJntdqr#_EEy*_uH^2m3mWRKKw za}oAayB`gHw;7)>4@E!!9%Y}YJu9uUkVn(r)T8ds8qyKdOsW6zUYI>EjweP zDV4jdjDLYCP*_?O=^De{uzlZNnEOf{)-_mczmT_?yngo!ILFM2y6I61L|=3l{9Q8z z{_;&C|Bpk`{I3y~$(thGyuu*0o14P_8(TVKPdjB@4i9bnP9b!0=(ztSSaf?G)NUoF zAk)vl+6}#MiZ^IIb0g7mcqu^rv*4HE3itxlxc3lsFot8e>{11d`5Kg;xvC>c@ zV;>xxwgA4Sr%BsqvYou^Y9D;2Uxy~lX@ovHwS!keCc%?yuaP~Ry0mO78(<8wp&(}r z$>A~oXCF>>r|liS1{3Dfl&zCe$l5C#&YN8a?I%dIqYHY#k5;`f5@zo(v_01{^M*Qg zbbF9t;i?PJZ@ocUie|n+Ld1TULM(tgdJoZ#Qg@M4?D}ElvpO{VQ3GUt_y+jq^#u65 zsgnF19J2p;rU91U7(ww?GbEo-Hv50yKRD?C&5vFVmp_}L_>VV2hhnqfu<`YfRaPwR zzqe1o1>U`Iv+ZKaSX3*;*-4cO%tq?3HA#V1z3hGyoNE4?)A35 zJbM}S`OQXcr3H+E=MIdF3@wb~EW=tqHHpZEYa_t|2V@;=#}c^TAqzdGQMoZOjs2j5 zy5Z((^ndd|9G=AbAb5pd57h;EOQsRBS{wR|7lWM8j%GfLS40BQ`wkygC6V{HJ!MkK zPrzGw0pN;v`iukpk4+zUwZ%|jm%2?%9%TTs6ox@HhTN@fO9FMYS zRtMzijg>E~WA~=gn_sgS)`|_(l}?K&3)(M`w=K^HFSM1wO`q*xJXe8bcDcul^J51j z_hpKQjm@iPG9np2L_syy!yOx?TCbix$gOWm+1Bb*E8FdYdlLt!}<}a_4y;s?Yb|+OjFNhuH3MMemBh3{sm8q!piq%mO1-@aba&*RqA)>oC(k( zLCb`-xgvma=ig`6AANnMOn5hqweP8=z{8)lhNB2hzK&&>cgNXPz1c;+8@7~T+~&qg z`PI$j=9bc07Ta6;Ki6PZ*S1siCkB`^s0yQf**m(El8N={o2!`pCBK--jAQiBAQOip z(K6&{nQrDs`#w;?IRsq%!I@FbR5bBiUC3gS?5Hf2{a}814)cKbO}bT6oRzWCOBSi{ zJXma@$h<}OB5P}^Q(2Ry{6XG~@dnjlZ{q$Xn%FSHXj9%p?~d3`5*j$OjC4j=zb>C-jJ-Cr8}6|qE5~}ztAiIazyG|+peJmj zzPt3q+@na5p|vxN3^hGs%%A5;+p_Hw&G!)B%BIkbah3U%F_soX+rIHJIq!5m<<+54 zmdTz^(3x+CpnMMs^N?48#j@B6@WEFBEw<(yv@y1jwJ{W8GG@P8ms@@X6Tf6apWhm? zqQnX0C6THW1)mDmjka>=PCgylk@}6n4!UE0D0v^~ayOCI?Z<|SEQ49G3M$Nxr#q~# z+SY=*xa*(;i~E=ds!ixBG`O&lzh&Zpl6;hU`(#+q`OMW z>7VP;?2omJXbb11wb4J`G8D~xskVyWspYa%s#D@&a>)5B^mEk{jK?%4+119KvP}^an7Ye(;4>C&5G+4kNlESh>(GsFMJMn>a3Z_1RiFLjusM?PKD z=5RjxAMLpF7Dj|blPqanOr zCd&FV=65ArGrb?H%m$`3%tMmvOp&SQrpqrJFdM8MHYwO*Xpw(*qp|YYKSm^)zQLb? zYX;iqoJ_7A0Zq&ox9abC)^1G3*m`AhzD657%Z$E0|7V1qGS+2)N|Imuh~GRZpWJjr4$YHj>+{)RZ~Q=}W=T{f$-9c&INrIBo3{2`?Y zTx<%9dPpy_CvB`!vQ50%Ta6bzerB*{s^3^4_=a(xlxJMQOEsQb37L|2beqWZBpN5R zyf=2L^fC79+-h7|t!(0uUuR7IcFHu{I^JRv!Z7!dl$)r>ueDUtUS;lS-E8(qtKam1 z&!okWV~fSX2GrcMDb!-qnRIi)L&khZTe|skr9!i(-BL@JPr*7ysIAWDKP8%q`HwVS zwHE6d9UIflLrJQXI3FEFj+JWB;~Z_OP@pC6m7r5=!q#$qP0{jxr>v)=9jRBObIW#I z@{qJfEyWfx^0l2+?;~lbm)g*GdXr9_9JIU0b+P?vtYlYL6K-o({oTeY>z~byCcdrw zX1>kn4+A@3`!&;3kKIi_Us-N+_WfJaM0pjH_oHl+f=`c4DyfEMYKN!H++Q6u8M(K? zlpZr)yArQktNgsk$hc)Y=W3Ww(nYRTR#s|v`+6oZ{AV5-}df) zYf|txRZ^JKYs+nSVo4K;8KflRyH@uVi%H9#FDKyvr!4GRE|J`2i%21gX0|s|m=1i` zM0?E)JA2Y(DR}{3!C}ies>9LK19puz*5oRq0Ee{JQw~WA#pHc8`3_>IUOSm9_sALR z#SSaSUy+Z=9kbrmd&sKv+cC5DUrnS|9S19Ty{+}{UpFl%G2zzJYd+ij-9Bk~GbqyP zlWH{ScczBL>XY{^^Iz*(GZi=3C~khNa%5SH%I6LjrD2aMrIDz5HQVS;wM_aedEJGu zs+5S`5c$yH_NC+F08o(c;Lz7ALa(>(|6DaBI#${{n|&nH*v52eiNZ6ZC@D`%T|7~GWkZ!c7a5LqU(B?cG7}GOW&pK;C;5; z;pT%HyUm7I?7ZInraX#}p~c#7vHKL`Z*RTfIQ8WC30lllCbj9hFLml6YP-XWNBPN6 zqW?KwPHSp$CO`N}CqLY-Ltb*<#onKmP5lB&XnS#y9mQpp!!EBM)YlCYw2WjQ)_}7t zSe|~KMxJtKaIz1wdXN8NuCZsccEBQLWmOvub|Pre4`!KY;cb?+{avc-0s*7XGlUu4 zSI)|YzEUW=+9|OqA8fi$7*OI#>9j8;=Cr<@EQg$r*$$6^r*?td6uT+o_mtL)cC=gf zqV1-GZ0+4*qo_7D2WY9????*c=dE=|#1`56*4p}kzNB?8NTffPye$RA9X90iaW*AT zASwAcpX6uyf^_(>o5j)t2T5)>yGaGzYiym$Qml8K3bML;=&nWK8(kZw@tl=CJIN|$ zq{!kABb>C(Tb?w${GFAb9N${)oV)eSh52U3i*{K5RN`3QMVxJYs;9uOt-gPrlt%fv&Vw`_2)9O_p80+y~kcSO!lieTw0q%e*P!kVetHG zvf;3u_2Ir*%fH%Q<~23yBzNSJ#Rx0jYS`g`rTV|8)|J}IHh<16w0e1uYLz^--ulFn zC+62yFS2ahH*MLUy^oas%3ZnZS)bCTj3r7rzoQf)1UkwQyLgH(#-kKOgF346x1$tf z>FEl;ploH?s!^pM2L~1Vckfj!>{3wtcREDnqISEI@AfbyGubza&C^i|JwLfhjVeEshBTw_Hpar*B*uf5HI(s^9IA&dOg?`= ziToy*LT|e3%Xo9akgPl&NFGgpO}{$b!uZ?qjovtQpMJDiZ0|PPPXj-0VjlUb%A7x% zgL-4V0qxR<_0&}@xn#lZ4*F%O4)eV6CbDFCBxPHNKSL*YF>}zc7HW<6gr|1OF&|t% zz`D?I3o2y>LR61rNUp{N>V53N^t*YK$;$JFphqOQeRT-KbBP(a^ucpbE(d^PZM^8o zzfpR_zFqd7cQ?_hr5_kKJz^PM-KQuAlDX9XvX_weog8;?=9$vtLe4XYd4D!;J3~$! z9H4t@wK7EMFR0_+MAQ>`vUaBC=O~%m*mO8oo_^!(4Ts}wm~x5HYVU6oWgp^QNIem8 zpBCnG-98VK+8_7aLX%$%(M@~8X$5OMX^R?JcG*L&)M1Z@bQAx0`oXgkB-gDpo-u~$G-D~~U_xt;;=Xt)Zo@cMM9=l(s+LnE!%7>FE z3xmsm-1Y`EoIOvOJxdpz__>=1u}>2Y(H*FBovTDwYU=PglKiW-_CaOL>)2iSh2Zq| zQDS=QOT^{nMSg&Yt{2RI@}@h*hxXm zLS0^RZ4g)7p~fEfx*uX?7Vy03LA>i*mvUaIJ>o6dkj0O-k>f5GOy?idl;J+SiJ8lJ9k7G< z$)E_@DT?FhjW}@^Jk;U4Wz1yTB*t>4j@`>mVW>iCl1Q`rh$6weB?m#Ts z`S;8|>8%VWw*5stB3&t-Bc80$(wF%1CBc&~E1VwFtv##uIw(J5^Q|H<7+P zat|X%bq(|CJT9Gkh)zFjT}PLDk;F8e${`*-l_JKJOcW&bNam@O;z0F?6}Z<$LksEN z*c$pZn8vsS&yszMCzp={_~!etE^LO(H{44cAKVT;b{{2Lymk?_r#A|eNAvJu4Sn+d zPj%pv+C(h!*aJ+_Ujv&T=7OZp+)1Q*HGxOd^^jY)P0=rvdSJh+0y+QOT9H|*hWM0c zHCVdQOqk!eL*(S8FS^=lBYJeAlRD<|4%j_3BF~{}qKtRXM0f84N&mhf3|f~)9UQ3= z)um_*aWhN~ao;fe>EqV7a;^N^x%8t+oRRyR zIn3f~Tr}k(D>0;+Q=B-!P4Exn`zk%)boKwteoJd)B?`f{#MEr7)v#dIZb>hMy zu6`QDjSb~<;+iIK$0fhv49|>YdM)R3V_PV0-GUNci$emevFxcJ)45vEf5H%1aSnx{ zGh9=a+n4uq zkrrdX|5*b}@w0>tC0}HE9JYtNUA&MiF~%^Y&mF(LO$K#OYeiOUR{?N8P9B(g4-pw! zq0w$9L2G#yIrdmBh_Tua+QqT3_`?|jHW3QT^*czs&>3HR=mB1-K;ScLSECV1`M^28 zkBls(qm7j_u#{Rrh8XDy;ra36t{BL$S@sq=vDBVIcjSmwlqs>?MsKl=&Ii$|@p{6G zV6t$u1rld_$r^Tc0J5y@9knLpu;}=wJ7U{%9w=F-0St~~@JJR#eCAb>CMu33xn>p? z%rV2|jcDlg;PZ%@>lcD}wSc_8aTGbmnS~B}9S51QS>%bcXK;pUB3|oR3+Y19nD!I~ zm^AJYaWU~I;?Au>9b}{70T;xfq%>d z+a{@qrd=%%nH-!CI%;o{QxCF5hZ{>MlU?1Ey;TTBx$Oa;VoSlpFNM_pifGZmwS3}5 z_-5gPNQ`QeT&=0+<>T8@6Y$7I$Dr)4(-=@N1L4xQ3EvO5kcRjIbSPyH+@N3upDu{R z!<*X(xM3+Adj2NdvVbJ|I0nG=t{LbH)B(Tb&xLJ|$`T!{{bWp-56SZpVx>3z@dRCU z^x20_MAuRSeAy!=>vUcrN$Hm8TH6XR=VA_NyYd>SZ!QAoK{C8)Zv}Dpu(8my;{|!P z#slAVwGW?kR)hy_3`e`y6@dLqhsc*1C_4G(Y>de>CXX~Sg&dD0@pc{Du<`u^vIm|` ztz#Y(Pab0`)~NIqk8_q5>y8r$kLk`3zN858+qsH{8`Dk6iW+H=tJ_J@rakTAHHH{y zcrp&G=pPSf+n5k#eV52QWe@VsM@LN7&;h?B)pbkfhAo=;O+czEQ`jQgLLzJR)FMJ$S}EWmU%RQp@ES%I#<0YOrC&Kh>oU0}Pu(?U z9Ilwh_+rIn-zqL-%zS!^&c4u~=bEU+u$_+3x#hR?pRBdgPmhylUJR($|1>a#p1r+? z?!C>*fQZwlPfXrSUsR~5#|&jL+a-6;XAT$eUeUYxX%m@z^%yH&PC`EKp|u`2_mPEQ z_Umq**Qd2mkkdB)R_lJA%Eop4TMkG0l2-+C6)xyP>YE^j)~0a=`{zUSr4}dk`t#o-2Fpt-7$Wv2A|hf2 zp%cABV0708f8_fBKi6YkIK2y?+|!N|oRJg-ff+>(?EPRA#ruN<~v z8doPEJ*Ye)QD#w z13yTA3Rlgx1lm>{BrvjT;XOB<0m;!Tq30_ZoR>F~pmR&=p$IcycywAd*X7w%?i93| z1<$_=-2g>A7h5x4+nCuL&daU5w%`x^tL^7G=Q7sv`L&9Cjo>O)bCVo@a?cZ9NRF)F zqN@yctM5GGb}kBSyg373;aQH}S@ROD6gwcd?S1fs>gl)>XvSU-1>k}&y%_5825FPo zjn7j(gsHlX;IAhf=HYMpx$bu~*y)dY_%}AnbACxQs4jnSQ%yCQX z;93O2d?&AU>@S9L-0}%2+?H&6sAX+G>$TH<=9QOQ7y>VXY5Gc*Wm2xmEc4XWofMSF z&X_q!51F};wWOq;>3+VCsq1lxF)ufn(KT)g^Y{Y;cEzxmbuzu5F}2OW;Kn#Prh8X1 zQ%Agr869D*e_Y9k-J>%|f3>=gX;E>C8KWS}^wW)^-=i1OcfDJ|{GyV}nyM)jSUFsV z&T)4^kZTctb+)cxw{HRD^JpgTrPfx#Cdryq{+nG;X}C3XAMu5(ow(4g{3QPCax=lT zF};F$(MHUl{C3mlZMmbbJ=LF{{Gyxjtmz}eWv7P0wm@Ch*1%wf^p_@vW8fg&KS!NW z;U`6(VUN=TQeQD%T~uUk6IkHuy*T)$&MnZ&vT>OGhCE`Dz=u#K1jxi0P3W8%*90Mr zPXsQ}3OHk@P_mw92Pepd!=*3I;m#5Hgr3C>Tx!K>eAr_jv^A_06WJSrp0F20@f`=W zagjNORO+I+K0z=&GFvil@s>!4-v&=%%tQQo#}n~lCOGAvKz*p-i8h~kNo;=VNv__J zPsz+Rq(0wrr_Rw-sVUE&5>FPd0}}-X)F*uz(bQ`@h{WZ0NQ0tdLY`VD)qan_>vwVR z70cbB_EQLU-{BI`G3ZI8yH7{-hKtbrV`Jbkcj^Qyvj?!V`QC(9*-ChI^DLP0tO{@b zluLYFr~Ci;r$1ZFuj7nz^)5EB6bwuS#fQf71uOOWv8Ms2c99`;d<=m2+Ya#}9bNc@ zTOt4Y{)cRpyJ7r_wkH0i@jQXQ{tIqo*fg%9+<11ZiaIm`EAv>z9bC1J9qjdP1-#En zUwDo4Ww{>qyLiV}Oyx!A_Aq@WP2+j}Y{oP4r=Yd{6H%A)5u}@yiYzhE#)y>{k@3@6 zXij7atbEKGi@kOXm7A4`mT@8MdT|!2=EFc{CfZ}Ae?S3dXlbv|cKwj1w3YzP0|y%^5w6~mmL!{+d!7%i+up%&-pT$p>u+mUaZ ztP7@386f&|5I9!zK5qUYf*fBqfh4Z0Vy)7a_=}re2ohL|M8A7Z*ehy~^QKfGO`a?? z<6Rn1blgg|$Q=aQKgUXDh$IW?CK*KBQ7vJ6T_x!oC&tmRi}=nvYPi>dnW%H}Hc)o4 zp1fK)29+H_vCkhh$-%PEWSQl1F-})9oH~4*yg3G?ycR}__eashoAb=X_i}HEY-;3% z3j%n;io;6cFDKf?wY#(>>oZLhoS7)PF!iK3#9R@CnZ6}htF+<4M_PnJ@E)?+S48H) z1QvcD!dLlpBT34+NFnDAu}amH^izC{w8azX{TV5sdd^m|?tT)dQ!be|%2nlttEF%U zuOH=1s-p3`ZcXOtKbGO0@had*-qFo*Jo%23orm+Xx65#*NG?))zm#w`y)Wkmbro@% z(jk6c^%kz_Gl1#7d{A$F%!;~qP6@FBgk_@&eDQEP=un9wc`*DhBk z%w5vZCbS#voAU(AzdwsOw84U-laauKMwGa1pAxw`tW%sdx3u^k{^q<5SI=_$a}RR* znwPUDd$vh#(Li}#%v6gVL#V665%0}^mE*bLin<}c{ZiHx7 z;{kEf;0TfNqK!CzPX=B%pg_1BO(ZuYbIE0+Ol+;ABEGNa0b)+3AiA6D2%jF9jNp|a zrwA5WXc7Ztwyh*JLl@y`zC!$VU=Y+;9j{>)oim;P9 zz$ed{Nq`y|c;jd#>^S2l9vNOs)Ew@^ajzPjemesSG9AFw*31W5weo;=Jpz?mqlR70 zn23&g?}7)WUdCS>R|A40may5y1Y}(KETZAcBoG%}M8#@O7Y*6V0}C{pyt%!Gnpr)Y zdTbv{?IXC<=THS8le__}+&z(swxf$&^EMD6w(rP&ebvJF$%>*>jt#EM5#m!HOoak3 z&c$5kb`qb8wi5P>)+0-X)}WW4=)#KRE5VI0eH^_MNj$-su;+v@_;x}I?jL%dPNXNh0RizM#q9fLh(OW~vA zHHoIH0|eefC+4)N5SKfjL5|vTxM^?<7@R5uVcsdIkHbN17UY5+>nes(+ei5FH%6f7 z#8X%)CJT8{vy&Ked?gs|yG{jsS}x+raX_hdHhF8}D{3Gif@-hHq6TYcQA+^|hK4JE zk-(jbykaJ@D7#Pma&??=g1r=ViR6l$?IQ7Gn?vxOl6kIkcB`?g4>f?=^ddsACJDja zw6WWM1S||th4&p2;+sws5h<6h!jsD~VYyH(VohN`fiHC8BQ^qFTFpn+$A~Ec_;?t< zFJU2namr-&1@066GieiOr(+23^kkB^+Tb#O;n{xn$zC14*u06q;_Nm-Cd-<)dv+jq zuYC;bxF8w2RPVy;%7=NaY*|hTqR9_$)8LC7W4Q0EdwJ0*2|SOAwXC|cr+InvPV+wM zdO>PB{%BWnHsWQ_j1)%C$DV55MP|HKN7IjNhpQdqvC-I1|~a7@w~KP2{K_-ou?%SbhbtJoEMzSe7cm1G{b#YqT9;i^&6UvyLN?a>xvvll3R)$YdfnL{Ct*dMWPu_BLSb z+6JCA$zxIRj#%cYd+6mtEu>G%fw*uv37jp+h7axgjFe2fNkE1bV1+RvI?8Mmy{HNR zn{}jwa(696K9`!Q_a(}r!cA$EqsFUYdXC(*adN?{jgFZi)Z9v<>e7EoD%@GgZ> zxaH6sqB~;}&`VJyp?hSpxRdzD=tZx|@2qr*7X%Av&5{PMUDuA;m#KSI07jT(r zQsBtW*RZ|06tX@jk=QR;J1{<)Mts~DMVOk+5}+?<;~%a`la14lg4Ik-?0NfJY(jet zDq1%V+3Vv@koXCJOQw~!=EfQJ%LJ(5F`lw?sryet{XHlGIQ5B=Kv!R#8nbHJ}Si zSdswFJ`;dwRc#bETZ9c5G{YWqBj5vhXK;r)1k9eTg9OOvAgxd$QK`Hfq(=ncFGu|G zmCF!?H-=cDCKT8y?#6CdIf4#~29Eon=%Vt+*u&ChOjE;%hTUc$@?jAbe}odfSzruY+bqaaiZzs}gAWx{?M|_)##4I>UJ=KCx(l?g za;O88jwsk$2K33ak%AS2!YoU9QFezH{+P7}r^|hTE_~@nKdQeXcJ`!5E?>-%$1i7N zv-J7}V%7&icxDS$n!AILd8&gPHxGx;#wifNa2?UVWjzvfClyIsdWk=I<8HzD{yNn7 zZYAp5v4h{9UIQ1-pUBT?UJs#;x8UeQE@;r6ZIF9gH$Qdd4D`dkJLs%0O6asRFq&Mf z3q3sM2kS6Au_%!-mKxs*8Q-u#$mjbYpBHKZ?DQ(+x|2HAY~BPpC!K;+de5PV&H`*! z*F*3=dX>XmEx0O`2oAIb!{Uq9opUJ9#e%$S2MfFJIg*)1Eb`vo3$X0@iNHCyMrg1!SeTE> z5btKB;tqG}akBPjbof9g~uvL5-k*(j%XRmKPff*Igu|kJXucJ z=fZ|(Eh@wldOwK^KKhHt?#dNLw674NQWwN-ElGykHo)ZO6}ckqVoI!(>t^UnI|Us3 zlECB*i{L@KCSuC_c|v249#SD`6ie!8$BZI7(2P)X^z+gKK>xxJne4U;8PI=$cFUQO z!?l?3%^C#UuTla62NAsbWF>xSZxXp|p(AOxgN~`Wy5I{}%cAvamyj{brGdbXOWqvY zf>f1jqq|oh19=Ydq@QgWNSwb1xc(9j--=5j=6&P}6HV@rw@0n;lS7a3g!{U3iB-xiLEb+ldkFme=8Nh&EUhE?J(k#+cB~( ze>%yYH5qe@biiM?E=1cll_8U`mqaRaHpv{Ph-Mu%MsJrEf&)+jxhGK!f|hE7z23I4 z#q_;+eNz_MZ|g_O*YL2%<7VSQr!FBw_bwoHjY^vykb^8L`E4-B-YNR5_xoV5ac-i2KUR9B`%^QTz ztXa5D*9`Eep^?0}%8IK54n!N;v(OMl{C32AsIq3Le#r zkP$oe(Md{uNb}7kZriIYRH=0zcHN{6-7+*?@Ww+4zIM43_8e}3+Wf8~J?BlZmd1X5 z#`MGdV|}*h>iAgff>R8(%=RdDMg1hCIqZNg$4=u0?t5|dc}E2~6c1Y`^;7_Fv=FGw z>_)VoxZrcnor70SfCOVd5V*t0Y20Xw79JWs4R=tw3Mup{U=>PJiKUOm68^q{@R=o9 z*v#dINMG|s!TNm3oOzQ1al~N|R^C}8kWSr)ySRx7Sx$;@I^&tJd(@wJ$jAWWTJnXn z`<#Wb&26N7m6!0HqAWO==>noyM@T&LiO`#0NO+(>fpIx1!U-cUgpLK9utOn7u$0?H z(6CA?!k&5;j}F?6%S|a4R7vY#rIynKWi-jZ^o;9>nsgk#Te=U{d&3eW1_E3JpT*gu zhw%$BZg{?00JLbPH*S$j10`-*#PR4lWI~JzDobxiWJhaZ)0kM?cX}paUsE9HYm0;* z6~4h0GwI-XgDJ6nQa}EllLN^skwo>}d?1z10s}g-m}SClwBz0x?CH1-$Zl_A;!T?y zcsT!qK>7SwG%_@h*l{Ht%q{y!86Qs<`D?I2NOqp^NUNf#qSl*2*0fRH3vH;K<+4JW z+;d=kGmgsBS|XYw)rlYLZ6ceFHVMsaEk$Pv|BY2_oe8!27NR;MH@M z5wk;I3xkzXsAU!ng#Rf$@+eJ?YUqg-zFc}s2t_*x?>6rSd)}cy>Sm!(>7qBKum1#> z&0j=5rqP77sfN_~G<$6RO&H5MviwQZuI$wslGZX_K+I!h9)G&+0I^ zztkLacRGyPLS3k;ITty5D2-UlKLaupV&IJu<9fIhSR#2CHpM4I+hf!^W({34`Co|{w)(mAQ z{z&A>sTkz75g%9_mLpwaC=ffU59o*0;J14x5LZ>Q$i^WXa*0zZR#qL0Z<|+*EwmU$ z?k~odWjp2hqym_t@m0ULmIn%#jWK)M&1qWN6c>M0n>T1WWN3?e0bJ! zeEQ`}5XMnPtxM~PZK;Jsz-|a>&QQk!*%5+e^eTbBw-)a7+MAeG6a_B{wuG0|X%m7k zXNfzAEV0r?o`^S66wEdsMz=D&LHkw#XdAIacZ8&2OWE1T<3c<5v+HjB6;~f{XjkC+ zg-S@{!5xIgsmWlx?0#xfw~1&+!_UO#LO&o^UPWzF4W+^}eJHUyof^B=j$lTaf-lA9 z)V@~?(XGZPVoUWT$+NFyDaht6^~>G0_!B4+-xApbO?;1FevQ%~_Vpp+^w1)t;1Uyi zq0tX-?|Ltorl*95zsM!-Zn*->%B_Q+EY>HSOK%Vs*(kbBZ6exjna&R{#*rMe-PnPB z$1u<0QRwj(ZKP@Mb7=SF1yI^PF?!R<91~mJfKE?#fpiU6*j|%$*t#?4P}lJ{Q2&AF z{Lp3f2xdm%`)&(x2R9B3?My&aR@V!%%15C_@jf(l%7HtJ~ z@qF^d%nDLGc`53sHe3EJm=Aa{s&X}-bizcxtdg8+H)T=KNd1d;K+OmT3WJXm>c zgm84wh3mgu!livP$Rzm*q;NV9dz)*7AF+Ol(B?)W!#+2N{Y9pv*^yUBQ7IQy9=jJD zKD&l|z-T2(u#=Mck}rah!W0~@98bpWmm{APTt+ALNW5LY6K67i?>_~C8H0%650YY@vO)ek-D{ zEa@u{?aEs#x)y5)CN7904cpuB4^ifX__GpKUt}g4dq#A}VlErU|4GixZ zgc*nQTARQg+G542xDmBq$ym{YGPzm=D9v6jWng>-TRTxK?DVP=&6DyIUC(v`Tqj== zQhSC6jba4z+(%*8))gYV3^q~ezLa=$sFG@bdrr z4SwrnSX?dC1JAP4KtL4$^IkEP!cBh z-7q6bnA|_YjFi*A@bOnxR2)N-TkPk(R@p#; z6=`xyeEj{D)fJU!%4^qouk-O-yV_^Tug56=%P}gyAM=$<^z5)XYQ2h!dUtd*J`wAEmF!n28O2D|UfF%JsUjbVJB!t0w z90`yR2J3MpKtdR-$CCgFVXz)w0wjdNdXNN22!r(m5+ETA)`KNLLKv)vNPvVeSPxZR zKyy`Acd?p3!^+xWnx~7EgYz_++LFM4VDVDwx3gWMfhPAWPG)L;+ zX_TF5j^9wL{7(I~u?&pAOZ;`$k7&&$4XgdnhL!XNNqda_XY-AfRHzx`vt)fxkWaum z&wq9ho!=W(O4*I(@=aQ*OML>?`uwP1!@p3l6K(!C%*wwp|7pF3)PJkjo#yrptNO33 zp5h;6EV;|^*U|B#bLm2J`iA?rb0OjW)0~a|YtDAG>EG}wSuOQmMSUGi2G~Cb@~@wN zl%WG{<~K|#zcT$c7!8O&xPII6Kd>2o!)Ev+wwW}$Z*o)qHMd_4!2tgwwO=>?q!e}Ai z=&=7o=RXIh!L&bD{Lk1QX)mUEeWR`YAKJfm>4|@?_ut0iMq1c68e@NLrGK+bYL&tK z?}&*0IU?uGb(%42hWoVno{kQ4oTxwAbk&b4450;oqyAeT`4?A}XwUtw_HVWQJ>_s( z=r_vRzxVV%jPp;*{=+)|p7;jZ`ftRw{zd%P!oFYiKiu{232&l>e@1NBD zhXMaR`B2)1Z{+{wr2p>Ff70In@aVrM9WPCbmHtMY@oVk>F{FO~BeTlD^*g=pKaAt= zC6gmf+w*NQ@b{AW#xEofjrjAlzKIt8y#%*O)1tmj(BOLs{@z!e|2(PxWtjd|dkX%$ z_7wcT+f(r0v!@>_|3!QHe%XJ)o_;9)m+a~LRsUCe`l0Y&wx{pc{TJ-%hw^{Xp1xoC qf3>F{O8?*6Q}F*}Pd`lNf3c_F|3~)p!vz0t?J3yc@7vRl68S$sG3CYp literal 0 HcmV?d00001 diff --git a/tmp/ckeckpointer.ckpt.index b/tmp/ckeckpointer.ckpt.index new file mode 100644 index 0000000000000000000000000000000000000000..3f26f529ddc4eb2e0607f2770f473bcaa8df4274 GIT binary patch literal 2223 zcmZQzVB=tvV&Y(AkP(P?_HcFf4)FK%3vqPvagFzP@^W$B*74{DZ@$~hKat(?P_VEwV&o3y+%+0Jy zEz-{=#;7@EAfrB>o-olwMx=}w9Sfc_g0y(4$7~Z-l*mpk%1h0`ua5`lXjUL*1UX)# zfz|Xi|4b=aQ)zNtj$)p|oI;S1ZXPj?W->Aae1NKR!6TqgSWV4@1Sbot2^;Dsr{?4k z83zsubMiGBm`wG)M}{bvijeCQP;@#dEO-EP2a~DsmFLlxL`8yw!jg+jAT5i+oHt7; ziW3tF9H77lTQ`Saqrt(nJd7nu$y9<|mm`c@&;WG3gX!&}j1FrV2?7y-(6;0wSldqZ zV_{O-;zg;+rA0-lc_s10`b7ZZ7k`Zg1)yJaH|S927l?5S4gejcU>YdND#DN`fhCVZ z6A7ksafTxi0Rpjm$wpw5Dwu}V6{QI)3KugYJ zf*3ca9Auo&?A!!1qS7El*Mb+o=;ko(-x%`@805x8205cb1HT4~=|X$cH53-Vj0$sr znTN%6636p)5x)q++Gnn*6oECJS}c&cPhV9nmbufbuuZC8yOmj+)> zYGP4dW?p)HQDR9dK8=h(jWa-2zGGY>!vF+#m>C$Zu`@6LDF%ioD<>p_Xhslm;M2kl j42;YL3^xVfV!V=EVfO?$UJLMpgz$s#-woX=rS7)@m77UI literal 0 HcmV?d00001 diff --git a/webreader.py b/webreader.py new file mode 100644 index 0000000..c5c9ed3 --- /dev/null +++ b/webreader.py @@ -0,0 +1,116 @@ +import requests +import pandas as pd +from bs4 import BeautifulSoup +import numpy as np +import datetime + +pd.set_option('display.expand_frame_repr', False) + +import re + + +def get_financial_statements(code): + # 인증값 추출 + re_enc = re.compile("encparam: '(.*)'", re.IGNORECASE) + re_id = re.compile("id: '([a-zA-Z0-9]*)' ?", re.IGNORECASE) + + url = "http://companyinfo.stock.naver.com/v1/company/c1010001.aspx?cmp_cd={}".format(code) + html = requests.get(url, verify=False).text + + search = re_enc.search(html) + if search is None: + return {} + encparam = re_enc.search(html).group(1) + encid = re_id.search(html).group(1) + + # 스크래핑 + url = "http://companyinfo.stock.naver.com/v1/company/ajax/cF1001.aspx?cmp_cd={}&fin_typ=0&freq_typ=A&encparam={}&id={}".format( + code, encparam, encid) + headers = {"Referer": "HACK"} + html = requests.get(url, headers=headers, verify=False).text + + soup = BeautifulSoup(html, "html5lib") + dividend = soup.select("table:nth-of-type(2) tr:nth-of-type(31) td span") + years = soup.select("table:nth-of-type(2) th") + + dividend_dict = {} + for i in range(len(dividend)): + dividend_dict[years[i + 3].text.strip()[:4]] = dividend[i].text + + return dividend_dict + + +def get_3year_treasury(): + url = "http://www.index.go.kr/strata/jsp/showStblGams3.jsp?stts_cd=107301&idx_cd=1073&freq=Y&period=1997%3A2021" + html = requests.get(url, verify=False).text + soup = BeautifulSoup(html, 'html5lib') + td_data = soup.select("tr td") + + treasury_3year = {} + start_year = 1998 + + for x in td_data: + treasury_3year[start_year] = x.text + start_year += 1 + if start_year == datetime.datetime.now().year: + break + + return treasury_3year + + +def get_dividend_yield(code): + url = "http://companyinfo.stock.naver.com/company/c1010001.aspx?cmp_cd=" + code + html = requests.get(url, verify=False).text + + soup = BeautifulSoup(html, 'html5lib') + dt_data = soup.select("td dl dt") + + dividend_yield = dt_data[-2].text + dividend_yield = dividend_yield.split(' ')[1] + dividend_yield = dividend_yield[:-1] + + return dividend_yield + + +def get_estimated_dividend_yield(code): + dividend_yield = get_financial_statements(code) + if len(dividend_yield) == 0: + return 0 + dividend_yield = sorted(dividend_yield.items())[-1] + return dividend_yield[1] + + +def get_current_3year_treasury(): + url = "http://finance.naver.com/marketindex/interestDailyQuote.nhn?marketindexCd=IRR_GOVT03Y&page=1" + html = requests.get(url, verify=False).text + + soup = BeautifulSoup(html, 'html5lib') + td_data = soup.select("tr td") + return td_data[1].text + + +def get_previous_dividend_yield(code): + dividend_yield = get_financial_statements(code) + + now = datetime.datetime.now() + cur_year = now.year + + previous_dividend_yield = {} + + for year in range(cur_year - 5, cur_year): + if str(year) in dividend_yield: + previous_dividend_yield[year] = dividend_yield[str(year)] + + return previous_dividend_yield + + +if __name__ == "__main__": + estimated_dividend_yield = get_estimated_dividend_yield("058470") + print(estimated_dividend_yield) + current_3year_treasury = get_current_3year_treasury() + print(current_3year_treasury) + estimated_dividend_to_treasury = float(estimated_dividend_yield) / float(current_3year_treasury) + print(estimated_dividend_to_treasury) + # print(get_estimated_dividend_yield('058470')) + # print(get_current_3year_treasury()) + # print(get_previous_dividend_yield('058470')) \ No newline at end of file diff --git a/widgetfile.py b/widgetfile.py new file mode 100644 index 0000000..a069c32 --- /dev/null +++ b/widgetfile.py @@ -0,0 +1,15 @@ +from PyQt5.QtWidgets import* +from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas +from matplotlib.figure import Figure + + +class Widget(QWidget): + + def __init__(self, parent = None): + QWidget.__init__(self, parent) + self.canvas = FigureCanvas(Figure()) + vertical_layout=QVBoxLayout() + vertical_layout.addWidget(self.canvas) + vertical_layout.setContentsMargins(1, 1, 1, 1) + self.canvas.axes=self.canvas.figure.add_subplot(111) + self.setLayout(vertical_layout)\