tag:blogger.com,1999:blog-236511504674854742024-03-14T17:32:12.871+09:00Henry's QuantopiaThe more I learn, the more I realize how much I don’t know.Unknownnoreply@blogger.comBlogger173125tag:blogger.com,1999:blog-23651150467485474.post-52418317068613851662021-07-18T17:32:00.002+09:002021-07-18T17:33:30.207+09:00HenryQuant는 네이버로 이민을 떠납니다!!<p style="text-align: center;"><b>안녕하세요 이현열 입니다.</b></p><p style="text-align: center;"><b>구글에서 네이버로 이민을 떠나게 되었습니다.</b></p><p style="text-align: center;"><b>네이버 블로그의 주소는 다음과 같습니다.</b></p><p style="text-align: center;"><b><br /></b></p><p style="text-align: center;"><a href="https://blog.naver.com/leebisu" target="_blank"><b>https://blog.naver.com/leebisu</b></a></p><p style="text-align: center;"><b><br /></b></p><p style="text-align: center;"><b>오랜 시간 운용하던 블로그라 정이 들기는 했지만</b></p><p style="text-align: center;"><b><br /></b></p><p style="text-align: center;"><b>글쓰기도 불편하고, 댓글 확인도 불편하고,</b></p><p style="text-align: center;"><b>별로 이쁘지도 않고, 검색도 잘 안되고,</b></p><p style="text-align: center;"><b>궁극적으로 구글이 버린 플랫폼을 떠나 네이버로 가게 되었습니다.</b></p><p style="text-align: center;"><b><br /></b></p><p style="text-align: center;"><b>그리고 최근 몇년간 글을 거의 안쓴 이유는 </b></p><p style="text-align: center;"><b>퀀트 업무가 아니라 데이터 사이언스 업무를 하면서</b></p><p style="text-align: center;"><b>금융쪽 시장을 볼 시간이 아예 없어서 입니다...</b></p><p style="text-align: center;"><b><br /></b></p><p style="text-align: center;"><b>올해 초부터 다시 퀀트로 돌아온 만큼</b></p><p style="text-align: center;"><b>네이버 블로그에는 꾸준히 글을 쓸 예정입니다.</b></p><p style="text-align: center;"><b><br /></b></p><p style="text-align: center;"><b>예전 글은 그냥 남겨둘 생각입니다.</b></p><p style="text-align: center;"><b>다들 새로운 둥지에서 다들 뵈요 :D</b></p>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-23651150467485474.post-31162281199556585102020-12-09T12:58:00.009+09:002020-12-09T13:00:32.373+09:00인버스(곱버스) ETF 트레이딩으로 수익을 내기 힘든 이유 (feat. 시장미시구조)<p> </p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgeQFhFN5K3GAtA5Zr-RX2xizgejKWNDOrfR1jMdcMOyobIOfyMQvWWCh-7jboV29xSyWGYaNsj0Ur0V4gjSnNal_u6vfh0sX-gXJ7tlUCpQ4h1eBp2FW2qrf5X25-EAy7pOq2IBdHZKQ/s544/x2.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="544" data-original-width="464" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgeQFhFN5K3GAtA5Zr-RX2xizgejKWNDOrfR1jMdcMOyobIOfyMQvWWCh-7jboV29xSyWGYaNsj0Ur0V4gjSnNal_u6vfh0sX-gXJ7tlUCpQ4h1eBp2FW2qrf5X25-EAy7pOq2IBdHZKQ/w274-h320/x2.png" width="274" /></a></div><br /><p></p><p>시장의 하락을 예상할 때 가장 좋은 투자 수단은 선물을 매도하는 것입니다. 그러나 현실적으로 선물 매매에 대한 부담감 때문인지 많은 개미 투자자들이 인버스(-X1) 혹은 곱버스(-X2) ETF를 이용해 하방에 베팅합니다.</p><p>그러나 이러한 ETF를 이용해 데일리 트레이딩 하는 것은 호가와 스프레드로 인해 상방 베팅 ETF (X1 혹은 X2) 보다 효율적으로 돈을 벌기 힘듭니다.</p><p>각 기초지수와 ETF의 틱데이터를 이용해 비교해보도록 하겠습니다.</p><p><br /></p><span><a name='more'></a></span><p><br /></p><p><b>1. 코스피200 지수 vs KODEX 200</b></p><p><br /></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiHEuFhKK2AKczcMSh7FydBBoDFbv7QHoNA0x6GveZ-TJM84cAitnaJaIFXBG0gJ_Ymzv43Q9Pk172SBCMp37dg_-Y7L7KxKZykAlmBaWnxRth-IYMiuaDGmWpZ94wwNvrt41F6BxIvQw/s580/1.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="390" data-original-width="580" height="430" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiHEuFhKK2AKczcMSh7FydBBoDFbv7QHoNA0x6GveZ-TJM84cAitnaJaIFXBG0gJ_Ymzv43Q9Pk172SBCMp37dg_-Y7L7KxKZykAlmBaWnxRth-IYMiuaDGmWpZ94wwNvrt41F6BxIvQw/w640-h430/1.png" width="640" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><br /></div>먼저 코스피200 지수와 KODEX 200 ETF의 비교입니다. 시초가에 차이가 나는걸 제외하고는 거의 같이 움직입니다.<div><br /><div><br /></div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTBPCZO518m9zdPWAkf9Hv236-yN8Zq1YysiHw3AfrIFWjRW8hvWQR_hzXOtORqJH3PGosYqzO9Ncem4b0QT4omV-8qkJJrhWEAX160ilBn5IHEHGjlNP3btWuMwabzfIErKIEnXNrRg/s1873/101560315-57ab7000-3a06-11eb-968a-48b89787b070.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1873" data-original-width="1080" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTBPCZO518m9zdPWAkf9Hv236-yN8Zq1YysiHw3AfrIFWjRW8hvWQR_hzXOtORqJH3PGosYqzO9Ncem4b0QT4omV-8qkJJrhWEAX160ilBn5IHEHGjlNP3btWuMwabzfIErKIEnXNrRg/w370-h640/101560315-57ab7000-3a06-11eb-968a-48b89787b070.jpg" width="370" /></a></div><br /><div><br /><p>코스피200 지수의 경우 틱 단위가 0.01입니다. 이를 계산해보면 호가당 스프레드가 1bp도 안될정도로 세밀하게 붙어있습니다. 이를 추종하는 KODEX 200 ETF 역시 호가당 스프레드가 1~2bp 정도로 촘촘하게 붙어있습니다.</p><p><br /></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjf2PHH7HCkTMZ6rgAlwvLw1JwiCsQxffscOHMuuR10wnrPcGmH8KJ8XmioRnjWVTwNEq1XlqILAcZ4MChRV356_CrIl4R9LRng6z3bRTVV7CMZpYmJc6mgU52NB1YFSeqdSJtgVko-Ng/s580/Rplot01.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="390" data-original-width="580" height="430" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjf2PHH7HCkTMZ6rgAlwvLw1JwiCsQxffscOHMuuR10wnrPcGmH8KJ8XmioRnjWVTwNEq1XlqILAcZ4MChRV356_CrIl4R9LRng6z3bRTVV7CMZpYmJc6mgU52NB1YFSeqdSJtgVko-Ng/w640-h430/Rplot01.png" width="640" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiSsX4RlXy01mAQ_0bIURuXJOcFpQ3zZ06Jr2otLWdBZwsOKdcHPWbN6iezuZLcxF3lOVKOoLZg3yquiqMkW3dKXTn938XbrgjmAsC7nhxOzEHP7fhfiTHvliAx2jAUmSR-5kaNJxzVZg/s580/Rplot02.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="359" data-original-width="580" height="397" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiSsX4RlXy01mAQ_0bIURuXJOcFpQ3zZ06Jr2otLWdBZwsOKdcHPWbN6iezuZLcxF3lOVKOoLZg3yquiqMkW3dKXTn938XbrgjmAsC7nhxOzEHP7fhfiTHvliAx2jAUmSR-5kaNJxzVZg/w640-h397/Rplot02.png" width="640" /></a></div><br /><div class="separator" style="clear: both; text-align: justify;"><span style="text-align: left;">일중 둘간의 수익률 차이 역시 거의 0에 가까울 정도로 붙어 있으며, 차이의 평균이 0.05%에 불과합니다. </span></div></div></div><div class="separator" style="clear: both; text-align: justify;"><span style="text-align: left;"><br /></span></div><div class="separator" style="clear: both; text-align: justify;"><span style="text-align: left;"><br /></span></div><div class="separator" style="clear: both; text-align: justify;"><b style="text-align: left;">2. 코스피200 선물 지수 vs KODEX 레버리지</b></div><div class="separator" style="clear: both; text-align: justify;"><b style="text-align: left;"><br /></b></div><div class="separator" style="clear: both; text-align: justify;"><span style="text-align: left;">이번에는 레버리지를 살펴보도록 하겠습니다. 참고로 레버리지 ETF의 기초지수는 코스피200 선물지수 X2 입니다.</span></div><div class="separator" style="clear: both; text-align: justify;"><span style="text-align: left;"><br /></span></div><div class="separator" style="clear: both; text-align: justify;"><span style="text-align: left;"><br /></span></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjRtP6IpxaEvTVHsm4k7ZF4MF3x4uHImw6T2uhXF3YwZ6tV3Kelhv7GHwNuMqxYKJF8nmpABk4rC6DES1NucjQawwLZ3SmfOAB0OI1WTg5XZSJJq8mF0-F8Lh2-dr_-IATHet1cHPj48g/s580/Rplot04.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="390" data-original-width="580" height="430" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjRtP6IpxaEvTVHsm4k7ZF4MF3x4uHImw6T2uhXF3YwZ6tV3Kelhv7GHwNuMqxYKJF8nmpABk4rC6DES1NucjQawwLZ3SmfOAB0OI1WTg5XZSJJq8mF0-F8Lh2-dr_-IATHet1cHPj48g/w640-h430/Rplot04.png" width="640" /></a></div><br /><div class="separator" style="clear: both; text-align: justify;">기초지수인 선물지수 2배와 레버리지 ETF도 거의 수익률이 붙어서 갑니다.</div><div class="separator" style="clear: both; text-align: justify;"><br /></div><div class="separator" style="clear: both; text-align: justify;"><br /></div><div class="separator" style="clear: both; text-align: center;"><img border="0" data-original-height="1856" data-original-width="1080" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg1Pg9vwpGDomLpXAxwBzR_5CwwAU8tjctqbWSN1jVFVkrK34v9bV9shNCavXntChytnAoJ-ZjzNgHYsO_v_hp8GQBxU7t-CxCqVVoA5I3fRKUCRuv7Bw2QNlH4Txt5FPTc7G39YE4aTA/w233-h400/101562148-27fe6700-3a0a-11eb-89b4-fd1e82587faf.jpg" width="233" /><span> </span><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiC5Y9p5_0BzjPGJC16Aw4U8jhcXFjzLd53Qrm6UIoC_m9idIjbloAOkShP_7NodfZ4twpTxK7XyXWTIvi9DVVcOf6pEVa54qfihLaBj-Lf_63L_ZNLfuxh84FFHwfUO5ZGl-wY-48Brg/s1851/101561727-2bddb980-3a09-11eb-9672-50ef014a758e.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1851" data-original-width="1080" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiC5Y9p5_0BzjPGJC16Aw4U8jhcXFjzLd53Qrm6UIoC_m9idIjbloAOkShP_7NodfZ4twpTxK7XyXWTIvi9DVVcOf6pEVa54qfihLaBj-Lf_63L_ZNLfuxh84FFHwfUO5ZGl-wY-48Brg/w234-h400/101561727-2bddb980-3a09-11eb-9672-50ef014a758e.jpg" width="234" /></a></div><br /><div class="separator" style="clear: both; text-align: justify;"><br /></div><div class="separator" style="clear: both; text-align: justify;">코스피200 선물지수의 경우 틱 단위가 0.05 이며, 레버리지로 환산시 0.10 입니다. 호가당 스프레드로 환산시 2.7bp 정도에 불과합니다. 이를 추종하는 레버리지 ETF 역시 스프레드가 2~3bp로 붙어있는 것을 볼 수 있습니다.</div><div class="separator" style="clear: both; text-align: justify;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhA008hMKO_YGWUiXhbn46HNqb5tBYHFOTiMTQIHc3g62urvaAQC4M0Aqm71O5k7Xcsont-SbaRyKCUnhyphenhyphenKECGsGB85-Cd_Hm3ElPBIo5jBY1-FlTx_DgR47nQrwSgICplZ3nEP9hf83g/s599/Rplot05.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="424" data-original-width="599" height="454" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhA008hMKO_YGWUiXhbn46HNqb5tBYHFOTiMTQIHc3g62urvaAQC4M0Aqm71O5k7Xcsont-SbaRyKCUnhyphenhyphenKECGsGB85-Cd_Hm3ElPBIo5jBY1-FlTx_DgR47nQrwSgICplZ3nEP9hf83g/w640-h454/Rplot05.png" width="640" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgCa0tFNHvz1asasPYXiHAnjNzgBXZ2j_DLNG7YtPVixwgEQVDktxI-icRPr98Tyr3BlLj57sK5oURXwZyF_j_a4z6tsnJH0-A72NlejnC9nowBD0AJiKOwFjJvGfoxfkXCbnZyIOl_uw/s599/Rplot06.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="424" data-original-width="599" height="454" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgCa0tFNHvz1asasPYXiHAnjNzgBXZ2j_DLNG7YtPVixwgEQVDktxI-icRPr98Tyr3BlLj57sK5oURXwZyF_j_a4z6tsnJH0-A72NlejnC9nowBD0AJiKOwFjJvGfoxfkXCbnZyIOl_uw/w640-h454/Rplot06.png" width="640" /></a></div><br /><div class="separator" style="clear: both; text-align: justify;"><span style="text-align: left;">일중 둘간의 수익률 차이 역시 거의 0.1%~0.2% 정도에 불과하며, 평균 차이 역시 0.163%에 불과합니다. 이러한 차이도 LP의 헷지 비용으로 인해 체계적으로 벌어지는 것이므로, 수익률 움직임은 거의 같다고 봐도 무방합니다.</span></div><div class="separator" style="clear: both; text-align: justify;"><span style="text-align: left;"><br /></span></div><div class="separator" style="clear: both; text-align: justify;"><b style="text-align: left;">3. 코스피200 선물 -1배 vs KODEX 인버스</b></div><div class="separator" style="clear: both; text-align: justify;"><br /></div><div class="separator" style="clear: both; text-align: justify;">이번에는 하락에 베팅하는 인버스 상품에 대해 알아보겠습니다. KODEX 인버스 상품의 기초지수는 코스피200 선물의 -1배 입니다.</div><div class="separator" style="clear: both; text-align: justify;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjF_XffpZt3bZAcRdjniuFNimuwVHfgPH7Oo8qmXehRTgrxD50E2LWZlXVHeZsp6znMlU8hOFPNIHLRtK-zkM_9qDgeoflPXa03eYyJIQCEBTnut6mDfyW2i0Oqk_53cFaOAKrgfa6ljQ/s599/Rplot07.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="425" data-original-width="599" height="454" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjF_XffpZt3bZAcRdjniuFNimuwVHfgPH7Oo8qmXehRTgrxD50E2LWZlXVHeZsp6znMlU8hOFPNIHLRtK-zkM_9qDgeoflPXa03eYyJIQCEBTnut6mDfyW2i0Oqk_53cFaOAKrgfa6ljQ/w640-h454/Rplot07.png" width="640" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: justify;">한눈에 봐도 ETF 차트가 기존처럼 매끄럽지 않고 뭔가 툭툭 끊기는 느낌입니다. 소위 건반형 차트라고 하죠. 기초지수의 움직임에 따라 수익률이 유동적으로 변하는게 아닌게 보입니다. 기초지수가 빠지고 몇초가 지나서야 ETF 가격이 변하는 구간도 있습니다. 최악의 경우는 기초지수가 빠졌다가 다시 올라오는 구간에서 ETF 가격은 그냥 멈춰 있을수도 있습니다.</div><div class="separator" style="clear: both; text-align: justify;"><br /></div><div class="separator" style="clear: both; text-align: justify;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhLkehSlIeMOUapVJ3U9M_fyt3GYmItmmctnJDt9HVt1KmiJYzSmOTfHmxy0z9nC-58GEUFXZUgtcAXO6CB-RD86cByupR2cMm_CzluN5EIbI8V5zvEdiZm1QgJ3V8DpNdrhsIIhQi0Xg/s1867/101564662-e45a2c00-3a0e-11eb-8310-d58c554b8930.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1867" data-original-width="1080" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhLkehSlIeMOUapVJ3U9M_fyt3GYmItmmctnJDt9HVt1KmiJYzSmOTfHmxy0z9nC-58GEUFXZUgtcAXO6CB-RD86cByupR2cMm_CzluN5EIbI8V5zvEdiZm1QgJ3V8DpNdrhsIIhQi0Xg/w370-h640/101564662-e45a2c00-3a0e-11eb-8310-d58c554b8930.jpg" width="370" /></a></div><br /><div class="separator" style="clear: both; text-align: justify;"><br /></div><div class="separator" style="clear: both; text-align: justify;">기초지수인 선물지수는 틱당 스프레드가 0.05, 즉 1.3bp 정도에 불과한 반면, 인버스 ETF의 스프레드는 스프레드가 0.1%, 즉 10bp 정도나 됩니다. 즉 선물에서 몇틱이 빠져야 ETF의 가격이 변하게 됩니다.</div><div class="separator" style="clear: both; text-align: justify;"><br /></div><div class="separator" style="clear: both; text-align: justify;"><b>이는 국내주식 호가가격단위로 인해 발생하는 문제입니다. </b></div><div class="separator" style="clear: both; text-align: justify;"><br /></div><div class="separator" style="clear: both; text-align: justify;">ETF의 호가단위는 가격에 상관없이 5원 입니다.인버스의 ETF는 대략 5,000원을 기준으로 하면 대략 0.1% 정도의 스프레드가 발생할 수 밖에 없습니다.</div><div class="separator" style="clear: both; text-align: justify;"><br /></div><div class="separator" style="clear: both; text-align: justify;">반면 레버리지 ETF의 경우 대략 20,000원을 기준으로 하면 스프레드가 약 0.025%에 불과한 것입니다.</div><div class="separator" style="clear: both; text-align: justify;"><br /></div><div class="separator" style="clear: both; text-align: justify;">즉 ETF의 가격이 높으면 높을수록 호가 스프레드는 낮게 되며, 인버스 ETF의 가격을 인위적으로 10배 이상 올리지 않는 이상 이러한 스프레드 문제는 계속 발생할 수 밖에 없습니다. (주식은 장기적으로 우상향이니 인버스 ETF는 장기적으로 가격이 낮아질 수 밖에 없으니까요)</div><div class="separator" style="clear: both; text-align: justify;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0galYnS7l9rWEqEG-ehjNvXR-na85DQQ9RB45I04l6kfi4IGPiAYPVbMfDoBQ3-lgl3dEuo9LeNWg3JPeCZaKno_82NgGKWZprp29CMxy3FYam-RWomcTxaeO-OBWIq8dNzulVRh6ZA/s599/Rplot08.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="425" data-original-width="599" height="454" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0galYnS7l9rWEqEG-ehjNvXR-na85DQQ9RB45I04l6kfi4IGPiAYPVbMfDoBQ3-lgl3dEuo9LeNWg3JPeCZaKno_82NgGKWZprp29CMxy3FYam-RWomcTxaeO-OBWIq8dNzulVRh6ZA/w640-h454/Rplot08.png" width="640" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjFh_ziyd5cUcnDNRMueXeUgAFQ-gaB8k6bNXG3ghp8K_jKpJJkXVSPj7OTuG_E_LEDsNN8MXgD1MTUGeVV_DupfAFhkII4kLaHMa4IWoSJHh7W4gyT7j6bVumJsRtVGpmGf435-TDvdg/s599/Rplot09.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="425" data-original-width="599" height="454" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjFh_ziyd5cUcnDNRMueXeUgAFQ-gaB8k6bNXG3ghp8K_jKpJJkXVSPj7OTuG_E_LEDsNN8MXgD1MTUGeVV_DupfAFhkII4kLaHMa4IWoSJHh7W4gyT7j6bVumJsRtVGpmGf435-TDvdg/w640-h454/Rplot09.png" width="640" /></a></div><div><br /></div>일중 둘간의 수익률 차이 역시 상승류 ETF보다 큽니다. 만일 시장가로 인버스 ETF를 사고 팔 경우, 벌써 스프레드로만 20bp가 터지고 시작합니다. 그렇다고 지정가로 주문을 대놓자니 기초지수인 선물이 몇틱이나 움직이고 나서야 ETF가 한틱 움직이는 문제가 발생합니다.<div><span style="color: red;"><br /></span></div><div><b><span style="color: red;">이러한 문제가 보기에는 별거 아닌거 같지만, 실제 트레이딩 하는 입장에서는 정말 욕나오는 상황이 될 수도 있습니다... (별거 아니다 싶으면 하루 날잡고 해보세요....)</span></b><br /><div class="separator" style="clear: both; text-align: justify;"><br /></div><div class="separator" style="clear: both; text-align: justify;"><br /></div><div class="separator" style="clear: both; text-align: justify;"><b style="text-align: left;">4. 코스피200 선물 -2배 vs KODEX 선물인버스 2X</b></div><div class="separator" style="clear: both; text-align: justify;"><b style="text-align: left;"><br /></b></div><div class="separator" style="clear: both; text-align: justify;"><span style="text-align: left;">이번엔 대망의 곱버스 비교입니다. 곱버스의 기초지수는 </span>코스피200 선물의 -2배 입니다.</div><div class="separator" style="clear: both; text-align: justify;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhf_pAr96uBrO8CTBIkhtzm6wYjK9t-cXyvIEcFblWI8jorqBBEULGF7-zR1a_vx0Gbp7qcnae38GgfiMI4Hy8IrPIa7W8JVSewNHrVMTOIGw7YTl-be-7NdOmYfcjVU9J-SBRdA9nI8Q/s599/Rplot10.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="426" data-original-width="599" height="456" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhf_pAr96uBrO8CTBIkhtzm6wYjK9t-cXyvIEcFblWI8jorqBBEULGF7-zR1a_vx0Gbp7qcnae38GgfiMI4Hy8IrPIa7W8JVSewNHrVMTOIGw7YTl-be-7NdOmYfcjVU9J-SBRdA9nI8Q/w640-h456/Rplot10.png" width="640" /></a></div><br /><div class="separator" style="clear: both; text-align: justify;"><br /></div><div class="separator" style="clear: both; text-align: justify;">역시나 ETF의 흐름이 툭툭 끊기는 건반형 차트입니다....</div><div class="separator" style="clear: both; text-align: justify;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh1A5FKluZRtdLT2qgY7Kda5v-hIHHhkEMGt2pCaYjr0ahyphenhyphencXZh4FlmYvaWL0SYnU85WODNlKVqSzbjtIk2zjiacAR0Heae7RakB5n8eUPSfcutnJDmcRelQkin0l3cSVFl0oY1sqfFZQ/s1863/101565901-60ee0a00-3a11-11eb-9d9c-53c335b3581a.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1863" data-original-width="1080" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh1A5FKluZRtdLT2qgY7Kda5v-hIHHhkEMGt2pCaYjr0ahyphenhyphencXZh4FlmYvaWL0SYnU85WODNlKVqSzbjtIk2zjiacAR0Heae7RakB5n8eUPSfcutnJDmcRelQkin0l3cSVFl0oY1sqfFZQ/w372-h640/101565901-60ee0a00-3a11-11eb-9d9c-53c335b3581a.jpg" width="372" /></a></div><br /><div class="separator" style="clear: both; text-align: justify;">호가당 스프레드가 무려 16~17 bp 정도입니다. 이는 역시나 ETF의 가격이 너무 낮아 발생하는 문제입니다. 레버리지 ETF의 호가당 스프레드가 2~3bp에 불과했던거에 비하면, 단순히 방향이 반대임에 비해 그 스프레드의 차이는 너무 심한것을 알 수 있습니다.</div><div class="separator" style="clear: both; text-align: justify;"><br /></div><div class="separator" style="clear: both; text-align: justify;"><br /></div><div class="separator" style="clear: both; text-align: justify;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhF8D6ZdGqyx_aRVuFKX8Pa0BSy_Q8g4D-a4Kuv3e2qiWyO7Ozn6H_EPT17wO9sAkSp1xf4ZnbCeZDBY6NAEoKcj2LEggWaHX5hC02LLPnRyPnubmSPrXYXET8w7r61YT-xLiEbUg2XzA/s599/Rplot11.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="426" data-original-width="599" height="456" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhF8D6ZdGqyx_aRVuFKX8Pa0BSy_Q8g4D-a4Kuv3e2qiWyO7Ozn6H_EPT17wO9sAkSp1xf4ZnbCeZDBY6NAEoKcj2LEggWaHX5hC02LLPnRyPnubmSPrXYXET8w7r61YT-xLiEbUg2XzA/w640-h456/Rplot11.png" width="640" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhMKZORLgRfSMmnEy1hDMPNwh-Hn3oV3C7xsVl4eXmjIPnML1XFdB_DTY7GXbcwknYnG8ku_rH06dkLHv2fBI6YlpI3A20-IJw1-e79xD5bxqRnf4Z3UOrh5CjqeBP5OrkjisALVhS0NA/s599/Rplot12.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="426" data-original-width="599" height="456" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhMKZORLgRfSMmnEy1hDMPNwh-Hn3oV3C7xsVl4eXmjIPnML1XFdB_DTY7GXbcwknYnG8ku_rH06dkLHv2fBI6YlpI3A20-IJw1-e79xD5bxqRnf4Z3UOrh5CjqeBP5OrkjisALVhS0NA/w640-h456/Rplot12.png" width="640" /></a></div><br /><div class="separator" style="clear: both; text-align: justify;"><br /></div></div><div class="separator" style="clear: both; text-align: justify;">당연히 기초지수와 ETF의 일중 차이 역시 큽니다. 만일 시장가로 매수-매도를 하면 매매로만 벌써 30bp(0.3%) 가량 터지고 시작합니다. 1억을 투자하면 30만원을 스프레드 비용으로 지불하고 시작하는 거죠. 그렇다고 지정가 매매를 하자니 인버스와 마찬가지로 원하는 타이밍에 들어가지 못하는 문제가 발생합니다.</div><div class="separator" style="clear: both; text-align: justify;"><br /></div><div class="separator" style="clear: both; text-align: justify;"><br /></div><div class="separator" style="clear: both; text-align: justify;"><br /></div><div class="separator" style="clear: both; text-align: justify;"><b><span style="font-size: large;">결론:</span></b></div><div class="separator" style="clear: both; text-align: justify;"><b><span style="font-size: large;"><br /></span></b></div><div class="separator" style="clear: both; text-align: justify;"><b><span style="font-size: large;">1. 물려도 롱에 물려라....</span></b></div><div class="separator" style="clear: both; text-align: justify;"><b><span style="font-size: large;">2. 그래도 숏치고 싶으면 그냥 선물로..... </span></b></div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-23651150467485474.post-34871664529286936812020-12-08T13:32:00.007+09:002020-12-08T13:40:08.980+09:00ETF를 통한 장기투자, 과연 득이기만 할까?<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjQJ8qMj7ac9lCrlcfmCYJyYWC8Qm0DPDoxQzFqVR5bpQZ0BVioc11feKNamScH2__OLFdjv2UMYe7W7hqAXh4a0obYcrbgYRvLfLtjoBKmurntlSBSzCDvCY_wsOOw-NEvt_h5uRWypw/s351/110128_15189_823.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="234" data-original-width="351" height="426" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjQJ8qMj7ac9lCrlcfmCYJyYWC8Qm0DPDoxQzFqVR5bpQZ0BVioc11feKNamScH2__OLFdjv2UMYe7W7hqAXh4a0obYcrbgYRvLfLtjoBKmurntlSBSzCDvCY_wsOOw-NEvt_h5uRWypw/w640-h426/110128_15189_823.jpg" width="640" /></a></div><br /><p></p><p><span style="text-align: justify;">바야흐로 ETF 투자의 시대입니다. 상장된 주식수와 ETF수가 비슷할 정도라고 해도 과언이 아닐 만큼 수많은 ETF가 상장되어 있고, 그 투자 대상 역시 상상을 초월합니다.</span></p><p>덕분에 장기투자, 특히 개인연금 혹은 IRP에서 ETF를 이용한 투자가 유행이고 마치 진리처럼 소개되고 있습니다. 사실 장점은 명확합니다. <b><span style="color: red;">기존 펀드에 비해 훨씬 저렴한 수수료, 훨씬 간편한 매수/매도, 훨씬 다양한 형태의 투자대상</span></b> 등이 있겠죠.</p><p>그러나 이런것들이 다 결과론적인 얘기이지 실제 투자의 세계에서, 특히나 처음 투자를 하는 분들에게는 얘기가 조금 다를 듯합니다. 특히나 <b style="background-color: #ead1dc;">'실시간 투자 가능' 여부</b>는 장점이 될수도 있지만 오히려 독이 될수도 있습니다. </p><p>펀드를 통해 투자를 할 경우 수익률을 일간 단위로만 확인이 가능합니다. 그러나 ETF의 경우 주식시장에 상장되어 거래가 되는 만큼 계속해서 그 수익률이 바뀝니다. 그만큼 계좌의 실시간 변동성도 커지게 되기 마련입니다.</p><p><br /></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhsO3Qja69jj9DNNe5Q27u9h7_6yE5k9V8zeXXTHJaaNav7cRqVQNhFI9ObPHHKkbzV4drImCqZ4AD8G9sztpo3_3YI_G5MTTN0G-duHMUC0Z9Agh-8z1L9Xc7tY-bVMdWLSK9au_eLCQ/s600/CRE-11-06-18.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="228" data-original-width="600" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhsO3Qja69jj9DNNe5Q27u9h7_6yE5k9V8zeXXTHJaaNav7cRqVQNhFI9ObPHHKkbzV4drImCqZ4AD8G9sztpo3_3YI_G5MTTN0G-duHMUC0Z9Agh-8z1L9Xc7tY-bVMdWLSK9au_eLCQ/s320/CRE-11-06-18.png" width="320" /></a></div><br /><p><br /></p><p>멋진 예제를 살펴보죠. 많이들 투자하는 올웨더 포트폴리오를 대상으로요.</p><p><br /></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjpHP3IzZcMzV3OkcentC-cMmD_hK1_3uIO36dI3MWN5GaECukMFnkFG4z_PVQC4gXDLLNxfYsQU18polLnjULeN-_fEIEh5_t-JFNPUGnuEenHojZdlKGG8NzmstqvIExbvY_HyfzeCw/s1344/%25EB%258B%25A4%25EC%259A%25B4%25EB%25A1%259C%25EB%2593%259C.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="960" data-original-width="1344" height="458" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjpHP3IzZcMzV3OkcentC-cMmD_hK1_3uIO36dI3MWN5GaECukMFnkFG4z_PVQC4gXDLLNxfYsQU18polLnjULeN-_fEIEh5_t-JFNPUGnuEenHojZdlKGG8NzmstqvIExbvY_HyfzeCw/w640-h458/%25EB%258B%25A4%25EC%259A%25B4%25EB%25A1%259C%25EB%2593%259C.png" width="640" /></a></div><p><br /></p>모두가 원하는 꾸준한 우상향, 매우 멋진 모습을 보입니다. 연평균 수익률 7%에 샤프지수는 1 이상, 투자 결과만 보면 매우 뛰어난 전략입니다.<p></p><p><br /></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh1OCMwP5TdlTt4PL_Mr5k0SCJu_t_uTj2IQW5qPoTy1EmzJ6nK9IrMZMniyOK5MVIh0DKMCEyTBG6Y-ITAZYo19_vpXFWTOQRoZYjlr_mExcc-uill0HQoyMKhFrABigoqlSnNO-09zQ/s1344/%25EB%258B%25A4%25EC%259A%25B4%25EB%25A1%259C%25EB%2593%259C+%25281%2529.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="960" data-original-width="1344" height="458" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh1OCMwP5TdlTt4PL_Mr5k0SCJu_t_uTj2IQW5qPoTy1EmzJ6nK9IrMZMniyOK5MVIh0DKMCEyTBG6Y-ITAZYo19_vpXFWTOQRoZYjlr_mExcc-uill0HQoyMKhFrABigoqlSnNO-09zQ/w640-h458/%25EB%258B%25A4%25EC%259A%25B4%25EB%25A1%259C%25EB%2593%259C+%25281%2529.png" width="640" /></a></div><div><br /></div>하락 방어도 우수합니다. 08년도와 코로나 때도 MDD가 15% 내외일 만큼 우수합니다.<div><br /></div><div><b>그런데 만약 이 포트폴리오를 ETF로 구성했다면 어떨까요?</b></div><div><br /></div><div><p></p><div class="separator" style="clear: both; text-align: center;"><pre style="background-color: white; border-radius: 4px; border: 1px solid rgb(204, 204, 204); box-sizing: border-box; color: #333333; font-size: 13px; line-height: 1.42857; margin-bottom: 10px; margin-top: 0px; overflow-wrap: break-word; overflow: auto; padding: 9.5px; text-align: start; word-break: break-all;"><code class="hljs" style="background-color: transparent; border-radius: 0px; box-sizing: border-box; color: inherit; font-size: inherit; padding: 0px; white-space: pre-wrap;">## Annual Monthly Daily
## Return(Annual) 0.07818458 0.07818458 0.07867070
## Vol(Annual) 0.07239884 0.07379339 0.07469286
## Sharpe(Annual) 1.07991472 1.05950653 1.05325599
## Sharpe 1.11138278 0.30602237 0.06623194</code></pre></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: justify;">Annual은 연간 수익률 기준, Monthly는 월간 수익률 기준, Daily는 일간 수익률 기준입니다. 연율화 수익률(Return Annual)은 모두 같으며, 연율화 변동성(Vol Annual)도 거의 비슷하여 연율화 샤프지수도 셋다 거의 비슷합니다. </div><div class="separator" style="clear: both; text-align: justify;"><br /></div><div class="separator" style="clear: both; text-align: justify;">그러나 연율화 하지 않은 샤프지수는 극단적으로 차이가 납니다. 수익률의 주기가 짧으면 짧을 수록, 즉 수익률을 자주 확인할 수록(예: 일간) 샤프지수는 급격히 떨어집니다. 이게 바로 투자자들이 실제 투자를 할때 체감으로 느끼는 수익률 일 것입니다.</div><div class="separator" style="clear: both; text-align: justify;"><br /></div><div class="separator" style="clear: both; text-align: justify;"><br /></div><div class="separator" style="clear: both; text-align: justify;"><pre style="background-color: white; border-radius: 4px; border: 1px solid rgb(204, 204, 204); box-sizing: border-box; color: #333333; font-size: 13px; line-height: 1.42857; margin-bottom: 10px; margin-top: 0px; overflow-wrap: break-word; overflow: auto; padding: 9.5px; text-align: start; word-break: break-all;"><code class="hljs" style="background-color: transparent; border-radius: 0px; box-sizing: border-box; color: inherit; font-size: inherit; padding: 0px; white-space: pre-wrap;">## Annual Monthly Daily
## [1,] 0.1428571 0.3214286 0.4414029</code></pre></div><div class="separator" style="clear: both; text-align: justify;"><br /></div><div class="separator" style="clear: both; text-align: justify;">이번에는 주기별 손실 빈도 입니다. 연간으로 수익률을 확인할 경우 손해를 관찰할 확률이 14%에 불가합니다. 그런데 월간으로 관찰을 하면 그 확률이 32%로 증가하죠. 일간으로 확인할 경우 무려 손실을 관찰할 확률이 44%로 증가합니다. <b style="background-color: #fcff01;">한마디로 계좌를 들여다 보면 거의 절반 확률로 그날은 손실을 본 것으로 나오는 것이죠.</b></div><div class="separator" style="clear: both; text-align: justify;"><br /></div><div class="separator" style="clear: both; text-align: justify;">만약 위에서 처럼 포트폴리오를 ETF로 직접 투자한다면 과연 하루에 한번만 계좌를 볼까요? 아마 하루에도 수십 혹은 수백번도 mts를 켜서 확인할 겁니다. 그럼면 거의 절반 확률로 손실을 기록하고 있는 것을 볼태고요. 그 과정에서 심리적 불안감은 더욱 커질 겁니다.</div><div class="separator" style="clear: both; text-align: justify;"><br /></div><div class="separator" style="clear: both; text-align: justify;">결국 장기투자를 위해 선택한 ETF의 변동성 때문에 장기투자를 하지 못하는 아이러니가 생길수도 있습니다.</div><div class="separator" style="clear: both; text-align: justify;"><br /></div><div class="separator" style="clear: both; text-align: justify;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgKpmC82UfcQQY3z5qMvGPuqpuiwvv-_YR7mT3cbQOMSfzDepMjQK0eB790HYQ67ZSnowWfX9kNrFSsfuQvbGnBiXERyGgvf_N-HiI4XPdq-mJ4T90DRuoxxsXvzE3FFWg9SQPcNYrYMA/s550/%25ED%2591%25B8%25EC%25B9%25B4%25ED%2582%25A4%25ED%2598%25B8%25EC%2588%25982.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="367" data-original-width="550" height="268" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgKpmC82UfcQQY3z5qMvGPuqpuiwvv-_YR7mT3cbQOMSfzDepMjQK0eB790HYQ67ZSnowWfX9kNrFSsfuQvbGnBiXERyGgvf_N-HiI4XPdq-mJ4T90DRuoxxsXvzE3FFWg9SQPcNYrYMA/w400-h268/%25ED%2591%25B8%25EC%25B9%25B4%25ED%2582%25A4%25ED%2598%25B8%25EC%2588%25982.jpg" width="400" /></a></div><br /><div class="separator" style="clear: both; text-align: justify;"><br /></div><div class="separator" style="clear: both; text-align: justify;"><b>멀리서 호수를 바라보면 고요하지만, 가까이서 표면을 관찰하면 끊임없는 움직임이 발생하고 있습니다. 주식시장도 마찬가지 입니다. 결과론적으로 수익률을 바라보는 것과, 그 수익률이 완성되기 까지의 움직임을 견디는 것에는 전혀 다른 차이가 있습니다.</b></div><div class="separator" style="clear: both; text-align: justify;"><br /></div><div class="separator" style="clear: both; text-align: justify;"><br /></div><div class="separator" style="clear: both; text-align: justify;">본인만의 철저한 투자관과 이를 지킬 인내심이 있다면 분명 장기투자에 ETF를 이용하는 것은 매우 좋은 선택입니다. 그러나 그게 아닌 초보 투자자라면, 차라리 펀드를 통해 투자를 시작해보는게 좋지 않을까 생각합니다.</div><div class="separator" style="clear: both; text-align: justify;"><br /></div><div class="separator" style="clear: both; text-align: center;"><br /></div><p></p></div>Unknownnoreply@blogger.com2tag:blogger.com,1999:blog-23651150467485474.post-64721244895792149252020-06-13T10:47:00.005+09:002021-07-25T22:33:11.128+09:00그많던 스마트는 누가 다 먹었을까?<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhE9RWMWxMsWKG-gaMbcaXlnhio-e4Nt7nVglXfgbc8KtmzWcsVIbU3k9RHCgcDuE4RNazLkDJKUaIlM9IRavj4oXPMowk7_aZysgPaFD7f1_pceeSMcPqkvStYt7vDnFEvcmBi1J3TfQ/s1600/1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="401" data-original-width="602" height="426" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhE9RWMWxMsWKG-gaMbcaXlnhio-e4Nt7nVglXfgbc8KtmzWcsVIbU3k9RHCgcDuE4RNazLkDJKUaIlM9IRavj4oXPMowk7_aZysgPaFD7f1_pceeSMcPqkvStYt7vDnFEvcmBi1J3TfQ/s640/1.png" width="640" /></a></div>
<br />
<div align="center" class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt; text-align: center; word-break: keep-all;">
<span style="font-family: inherit;"><br /></span></div>
<div align="center" class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt; text-align: center; word-break: keep-all;">
<span style="font-family: inherit;">한때<span lang="EN-US"> '</span>스마트베타<span lang="EN-US">'</span>의 인기는 엄청났습니다<span lang="EN-US">.<o:p></o:p></span></span></div>
<span style="font-family: inherit;"><br /></span>
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div align="center" class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt; text-align: center; word-break: keep-all;">
<span style="font-family: inherit;">그 중에서도 우량가치<span lang="EN-US"> ETF</span>는 탑이었죠<span lang="EN-US">.<o:p></o:p></span></span></div>
<div align="center" class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt; text-align: center; word-break: keep-all;">
<span style="font-family: inherit;"><br /></span></div>
<div align="center" class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt; text-align: center; word-break: keep-all;">
<span style="font-family: inherit;">그러나 </span><span style="font-family: inherit;">몇년이 지난 지금</span><span lang="EN-US" style="font-family: inherit;"> </span></div>
<div align="center" class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt; text-align: center; word-break: keep-all;">
<span style="font-family: inherit;"><span lang="EN-US"><b>'</b></span><b>성과가 왜이러지?<span lang="EN-US">?' </span></b>라는 질문이 많이 나오고<span lang="EN-US"><o:p></o:p></span></span></div>
<div align="center" class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt; text-align: center; word-break: keep-all;">
<span style="font-family: inherit;">딱히 아무도 답변을 해주지 못하고 있습니다<span lang="EN-US">.<o:p></o:p></span></span></div>
<div align="center" class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt; text-align: center; word-break: keep-all;">
<span style="font-family: inherit;">그래서 한번 분해해 보았습니다<span lang="EN-US">.<span style="font-size: 13.5pt;"><o:p></o:p></span></span></span></div>
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<span style="font-family: inherit;">사실 분석결과는 해당 </span>ETF<span style="font-family: inherit;">뿐만 아니라</span></div>
<div class="separator" style="clear: both; text-align: center;">
<span style="font-family: inherit;">현재 대부분 스마트베타 ETF의 부진에</span></div>
<div class="separator" style="clear: both; text-align: center;">
<span style="font-family: inherit;">동일하게 적용되는 원인일 겁니다.</span></div>
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhWlPYl7BsLxzWG_9h9XpEsvWwadf19V9ytH7V_vEx3cR2I3FYd3HwTBcNATE7zktOZf9UpW78seUGgEegUSynaMLgjJrES6-nee1Fp9kMQNz4_dI34581zl5P-IclTeRyXC6w5AfPjBQ/s1600/2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="961" data-original-width="1344" height="456" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhWlPYl7BsLxzWG_9h9XpEsvWwadf19V9ytH7V_vEx3cR2I3FYd3HwTBcNATE7zktOZf9UpW78seUGgEegUSynaMLgjJrES6-nee1Fp9kMQNz4_dI34581zl5P-IclTeRyXC6w5AfPjBQ/s640/2.png" width="640" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
먼저 기초지수의 성과입니다.</div>
<div class="separator" style="clear: both; text-align: center;">
붉은색 라인이 ETF의 상장일인 2015-09-22 입니다.</div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
한참 인기가 있던 17~18년까지 상승하다가 그 이후 계속 하락세입니다.</div>
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj2VKs6rTAE6fcFOtTqZ6AoRe6ogSHZy0cZCJnVUF18wa06vRC1BDB5uKwL-FbXyw52CXqQONCe_E51fLhNct0kCS5_uUSR8T4MDwqvEMpqPYsCe8JuGT7TvfPSy97JmH3UqUETD-rLhw/s1600/3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="961" data-original-width="1344" height="456" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj2VKs6rTAE6fcFOtTqZ6AoRe6ogSHZy0cZCJnVUF18wa06vRC1BDB5uKwL-FbXyw52CXqQONCe_E51fLhNct0kCS5_uUSR8T4MDwqvEMpqPYsCe8JuGT7TvfPSy97JmH3UqUETD-rLhw/s640/3.png" width="640" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
이번에는 2017년 이후 코스피지수, 우량가치지수의 성과비교 및 </div>
<div class="separator" style="clear: both; text-align: center;">
누적수익률 차이 (파란색 바) 입니다.</div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
사실 2019년 중반까지는 크게 차이가 없고,</div>
<div class="separator" style="clear: both; text-align: center;">
19년 6월부터 차이가 벌어지는 중입니다.</div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
그나마 20년 4월부터는 다시 차이 줄이는 중이네요</div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEglBzsHaCCt2yuihCzqTLAZoHoKUKxvru2y1P3rOWcUB2P0Opc8QLZUGxKbCY_-96c2u5pzQk-Gik4Sva_avRbVjqFIj7Sw2jBIW0Ew3xge6dULeojU8EH9uoD0p-MGf8jJsbLZ_x51BQ/s1600/4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="961" data-original-width="1344" height="456" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEglBzsHaCCt2yuihCzqTLAZoHoKUKxvru2y1P3rOWcUB2P0Opc8QLZUGxKbCY_-96c2u5pzQk-Gik4Sva_avRbVjqFIj7Sw2jBIW0Ew3xge6dULeojU8EH9uoD0p-MGf8jJsbLZ_x51BQ/s640/4.png" width="640" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
연도별 수익률을 살펴보면 19년, 20년도에</div>
<div class="separator" style="clear: both; text-align: center;">
코스피 대비 엄청나게 언더퍼폼 중입니다.......</div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
이번에는 그럼 코스피 지수를 한번 뜯어보도록 하죠</div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNOaa0u83P7N52-KhdYKAVY0cQ_kndHilSscpfcWzvedJvJCjh1AshnV-kSsKF90vuK5SRmw3d-jwQnE7KwCXwk045R2NOpzpMngj0Dnh3OjRp04rP_v7FxtYCWLCVz-I48MQFlZhgQw/s1600/5.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="961" data-original-width="1344" height="456" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNOaa0u83P7N52-KhdYKAVY0cQ_kndHilSscpfcWzvedJvJCjh1AshnV-kSsKF90vuK5SRmw3d-jwQnE7KwCXwk045R2NOpzpMngj0Dnh3OjRp04rP_v7FxtYCWLCVz-I48MQFlZhgQw/s640/5.png" width="640" /></a></div>
<br />
<div style="text-align: center;">
17년 이후 코스피와 코스피 대형주/중형주/소형주 지수입니다.</div>
<div style="text-align: center;">
그냥 대형주 장이었습니다....</div>
<div style="text-align: center;">
19년 이후 중형주와 소형주는 힘을 못쓰고 있습니다.</div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgqR1KIzAxz-hFYOzYj3TUu1ev7qLjiry7H3Ovd3CkgPkZs_7B_2m6NWwBvtiKSPyCil36V5u-QGgmPbROUHSrVoaDuxh3rXCEG_iO-kRvSjvSCJtJs1HXFquLj-6ptZSnLUdXe7Hw4Xg/s1600/6.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="961" data-original-width="1344" height="456" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgqR1KIzAxz-hFYOzYj3TUu1ev7qLjiry7H3Ovd3CkgPkZs_7B_2m6NWwBvtiKSPyCil36V5u-QGgmPbROUHSrVoaDuxh3rXCEG_iO-kRvSjvSCJtJs1HXFquLj-6ptZSnLUdXe7Hw4Xg/s640/6.png" width="640" /></a></div>
<br />
<div style="text-align: center;">
이번에는 카하트 4팩터기준</div>
<div style="text-align: center;">
마켓, 소형주, 가치주, 모멘텀 팩터 수익률입니다.</div>
<div style="text-align: center;">
(롱-숏 포트폴리오 기준)</div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: center;">
코스피와 우량가치 차이가 벌어진 19년 6월 이후를 보면</div>
<div style="text-align: center;">
마켓 팩터만 좋고 나머지 팩터는 그냥 죽음입니다</div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiWxP7-9xho0f3Dz8Ms2pux35IsV-jESQzsfH24V5LXaXkYFDP2KMJpjnLC-tza7IH7vm5-NEVPoK0bfo2PSAlYXB6XXyt0aKVEDtGdEj5DZOl6IeMVNG5zI8MSbKNGC8DzpnK1zgYEFg/s1600/7.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="961" data-original-width="1344" height="456" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiWxP7-9xho0f3Dz8Ms2pux35IsV-jESQzsfH24V5LXaXkYFDP2KMJpjnLC-tza7IH7vm5-NEVPoK0bfo2PSAlYXB6XXyt0aKVEDtGdEj5DZOl6IeMVNG5zI8MSbKNGC8DzpnK1zgYEFg/s640/7.png" width="640" /></a></div>
<br />
<div style="text-align: center;">
<div>
이번에는 스타일 매트릭스로 롱온리 기준으로</div>
<div>
가치 X 사이즈를 쪼개보겠습니다. (2019년 이후)</div>
<div>
<br /></div>
<div>
성장주가 가치주 대비 더 좋은 성과를 보입니다.</div>
<div>
대형가치는 죽음입니다.... </div>
</div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: center;">
우량가치를 4팩터 모델에 회귀분석 해보죠</div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div align="center">
<table border="0" cellpadding="0" cellspacing="0" class="MsoNormalTable" style="background: white; border-collapse: collapse; mso-padding-alt: 0cm 0cm 0cm 0cm; mso-yfti-tbllook: 1184; width: 0px;">
<thead>
<tr style="height: 9.0pt; mso-yfti-firstrow: yes; mso-yfti-irow: 0;">
<td style="border-bottom: solid #DDDDDD 1.5pt; border: none; height: 9.0pt; padding: 6.0pt 6.0pt 6.0pt 6.0pt;" valign="bottom"><div align="left" class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt; word-break: keep-all;">
<b><span lang="EN-US" style="color: #333333; font-family: "helvetica" , sans-serif; font-size: 12.0pt;">term</span></b><span lang="EN-US" style="font-family: 굴림; font-size: 12.0pt; mso-bidi-font-family: 굴림; mso-font-kerning: 0pt;"><o:p></o:p></span></div>
</td>
<td style="border-bottom: solid #DDDDDD 1.5pt; border: none; height: 9.0pt; padding: 6.0pt 6.0pt 6.0pt 6.0pt;" valign="bottom"><div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-pagination: widow-orphan; text-align: right; text-autospace: ideograph-numeric ideograph-other; word-break: keep-all;">
<b><span lang="EN-US" style="color: #333333; font-family: "helvetica" , sans-serif; font-size: 12.0pt;">estimate</span></b><span lang="EN-US" style="font-family: 굴림; font-size: 12.0pt; mso-bidi-font-family: 굴림; mso-font-kerning: 0pt;"><o:p></o:p></span></div>
</td>
<td style="border-bottom: solid #DDDDDD 1.5pt; border: none; height: 9.0pt; padding: 6.0pt 6.0pt 6.0pt 6.0pt;" valign="bottom"><div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-pagination: widow-orphan; text-align: right; text-autospace: ideograph-numeric ideograph-other; word-break: keep-all;">
<b><span lang="EN-US" style="color: #333333; font-family: "helvetica" , sans-serif; font-size: 12.0pt;">std.error</span></b><span lang="EN-US" style="font-family: 굴림; font-size: 12.0pt; mso-bidi-font-family: 굴림; mso-font-kerning: 0pt;"><o:p></o:p></span></div>
</td>
<td style="border-bottom: solid #DDDDDD 1.5pt; border: none; height: 9.0pt; padding: 6.0pt 6.0pt 6.0pt 6.0pt;" valign="bottom"><div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-pagination: widow-orphan; text-align: right; text-autospace: ideograph-numeric ideograph-other; word-break: keep-all;">
<b><span lang="EN-US" style="color: #333333; font-family: "helvetica" , sans-serif; font-size: 12.0pt;">statistic</span></b><span lang="EN-US" style="font-family: 굴림; font-size: 12.0pt; mso-bidi-font-family: 굴림; mso-font-kerning: 0pt;"><o:p></o:p></span></div>
</td>
<td style="border-bottom: solid #DDDDDD 1.5pt; border: none; height: 9.0pt; padding: 6.0pt 6.0pt 6.0pt 6.0pt;" valign="bottom"><div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-pagination: widow-orphan; text-align: right; text-autospace: ideograph-numeric ideograph-other; word-break: keep-all;">
<b><span lang="EN-US" style="color: #333333; font-family: "helvetica" , sans-serif; font-size: 12.0pt;">p.value</span></b><span lang="EN-US" style="font-family: 굴림; font-size: 12.0pt; mso-bidi-font-family: 굴림; mso-font-kerning: 0pt;"><o:p></o:p></span></div>
</td>
</tr>
</thead>
<tbody>
<tr style="height: 9.0pt; mso-yfti-irow: 1;">
<td style="height: 9.0pt; padding: 6.0pt 6.0pt 6.0pt 6.0pt;" valign="top"><div align="left" class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt; word-break: keep-all;">
<span lang="EN-US" style="color: #333333; font-family: "helvetica" , sans-serif; font-size: 12.0pt;">(Intercept)</span><span lang="EN-US" style="font-family: 굴림; font-size: 12.0pt; mso-bidi-font-family: 굴림; mso-font-kerning: 0pt;"><o:p></o:p></span></div>
</td>
<td style="height: 9.0pt; padding: 6.0pt 6.0pt 6.0pt 6.0pt;" valign="top"><div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-pagination: widow-orphan; text-align: right; text-autospace: ideograph-numeric ideograph-other; word-break: keep-all;">
<span lang="EN-US" style="color: #333333; font-family: "helvetica" , sans-serif; font-size: 12.0pt;">0.0002</span><span lang="EN-US" style="font-family: 굴림; font-size: 12.0pt; mso-bidi-font-family: 굴림; mso-font-kerning: 0pt;"><o:p></o:p></span></div>
</td>
<td style="height: 9.0pt; padding: 6.0pt 6.0pt 6.0pt 6.0pt;" valign="top"><div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-pagination: widow-orphan; text-align: right; text-autospace: ideograph-numeric ideograph-other; word-break: keep-all;">
<span lang="EN-US" style="color: #333333; font-family: "helvetica" , sans-serif; font-size: 12.0pt;">0.0001</span><span lang="EN-US" style="font-family: 굴림; font-size: 12.0pt; mso-bidi-font-family: 굴림; mso-font-kerning: 0pt;"><o:p></o:p></span></div>
</td>
<td style="height: 9.0pt; padding: 6.0pt 6.0pt 6.0pt 6.0pt;" valign="top"><div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-pagination: widow-orphan; text-align: right; text-autospace: ideograph-numeric ideograph-other; word-break: keep-all;">
<span lang="EN-US" style="color: #333333; font-family: "helvetica" , sans-serif; font-size: 12.0pt;">1.980</span><span lang="EN-US" style="font-family: 굴림; font-size: 12.0pt; mso-bidi-font-family: 굴림; mso-font-kerning: 0pt;"><o:p></o:p></span></div>
</td>
<td style="height: 9.0pt; padding: 6.0pt 6.0pt 6.0pt 6.0pt;" valign="top"><div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-pagination: widow-orphan; text-align: right; text-autospace: ideograph-numeric ideograph-other; word-break: keep-all;">
<span lang="EN-US" style="color: #333333; font-family: "helvetica" , sans-serif; font-size: 12.0pt;">0.0477</span><span lang="EN-US" style="font-family: 굴림; font-size: 12.0pt; mso-bidi-font-family: 굴림; mso-font-kerning: 0pt;"><o:p></o:p></span></div>
</td>
</tr>
<tr style="height: 9.0pt; mso-yfti-irow: 2;">
<td style="border-top: solid #DDDDDD 1.0pt; border: none; height: 9.0pt; padding: 6.0pt 6.0pt 6.0pt 6.0pt;" valign="top"><div align="left" class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt; word-break: keep-all;">
<span lang="EN-US" style="color: #333333; font-family: "helvetica" , sans-serif; font-size: 12.0pt;">MKT</span><span lang="EN-US" style="font-family: 굴림; font-size: 12.0pt; mso-bidi-font-family: 굴림; mso-font-kerning: 0pt;"><o:p></o:p></span></div>
</td>
<td style="border-top: solid #DDDDDD 1.0pt; border: none; height: 9.0pt; padding: 6.0pt 6.0pt 6.0pt 6.0pt;" valign="top"><div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-pagination: widow-orphan; text-align: right; text-autospace: ideograph-numeric ideograph-other; word-break: keep-all;">
<span lang="EN-US" style="color: #333333; font-family: "helvetica" , sans-serif; font-size: 12.0pt;">0.8541</span><span lang="EN-US" style="font-family: 굴림; font-size: 12.0pt; mso-bidi-font-family: 굴림; mso-font-kerning: 0pt;"><o:p></o:p></span></div>
</td>
<td style="border-top: solid #DDDDDD 1.0pt; border: none; height: 9.0pt; padding: 6.0pt 6.0pt 6.0pt 6.0pt;" valign="top"><div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-pagination: widow-orphan; text-align: right; text-autospace: ideograph-numeric ideograph-other; word-break: keep-all;">
<span lang="EN-US" style="color: #333333; font-family: "helvetica" , sans-serif; font-size: 12.0pt;">0.0064</span><span lang="EN-US" style="font-family: 굴림; font-size: 12.0pt; mso-bidi-font-family: 굴림; mso-font-kerning: 0pt;"><o:p></o:p></span></div>
</td>
<td style="border-top: solid #DDDDDD 1.0pt; border: none; height: 9.0pt; padding: 6.0pt 6.0pt 6.0pt 6.0pt;" valign="top"><div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-pagination: widow-orphan; text-align: right; text-autospace: ideograph-numeric ideograph-other; word-break: keep-all;">
<span lang="EN-US" style="color: #333333; font-family: "helvetica" , sans-serif; font-size: 12.0pt;">133.879</span><span lang="EN-US" style="font-family: 굴림; font-size: 12.0pt; mso-bidi-font-family: 굴림; mso-font-kerning: 0pt;"><o:p></o:p></span></div>
</td>
<td style="border-top: solid #DDDDDD 1.0pt; border: none; height: 9.0pt; padding: 6.0pt 6.0pt 6.0pt 6.0pt;" valign="top"><div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-pagination: widow-orphan; text-align: right; text-autospace: ideograph-numeric ideograph-other; word-break: keep-all;">
<span lang="EN-US" style="color: #333333; font-family: "helvetica" , sans-serif; font-size: 12.0pt;">0.0000</span><span lang="EN-US" style="font-family: 굴림; font-size: 12.0pt; mso-bidi-font-family: 굴림; mso-font-kerning: 0pt;"><o:p></o:p></span></div>
</td>
</tr>
<tr style="height: 9.0pt; mso-yfti-irow: 3;">
<td style="border-top: solid #DDDDDD 1.0pt; border: none; height: 9.0pt; padding: 6.0pt 6.0pt 6.0pt 6.0pt;" valign="top"><div align="left" class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt; word-break: keep-all;">
<span lang="EN-US" style="color: #333333; font-family: "helvetica" , sans-serif; font-size: 12.0pt;">SMB</span><span lang="EN-US" style="font-family: 굴림; font-size: 12.0pt; mso-bidi-font-family: 굴림; mso-font-kerning: 0pt;"><o:p></o:p></span></div>
</td>
<td style="border-top: solid #DDDDDD 1.0pt; border: none; height: 9.0pt; padding: 6.0pt 6.0pt 6.0pt 6.0pt;" valign="top"><div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-pagination: widow-orphan; text-align: right; text-autospace: ideograph-numeric ideograph-other; word-break: keep-all;">
<span lang="EN-US" style="color: #333333; font-family: "helvetica" , sans-serif; font-size: 12.0pt;">0.3934</span><span lang="EN-US" style="font-family: 굴림; font-size: 12.0pt; mso-bidi-font-family: 굴림; mso-font-kerning: 0pt;"><o:p></o:p></span></div>
</td>
<td style="border-top: solid #DDDDDD 1.0pt; border: none; height: 9.0pt; padding: 6.0pt 6.0pt 6.0pt 6.0pt;" valign="top"><div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-pagination: widow-orphan; text-align: right; text-autospace: ideograph-numeric ideograph-other; word-break: keep-all;">
<span lang="EN-US" style="color: #333333; font-family: "helvetica" , sans-serif; font-size: 12.0pt;">0.0091</span><span lang="EN-US" style="font-family: 굴림; font-size: 12.0pt; mso-bidi-font-family: 굴림; mso-font-kerning: 0pt;"><o:p></o:p></span></div>
</td>
<td style="border-top: solid #DDDDDD 1.0pt; border: none; height: 9.0pt; padding: 6.0pt 6.0pt 6.0pt 6.0pt;" valign="top"><div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-pagination: widow-orphan; text-align: right; text-autospace: ideograph-numeric ideograph-other; word-break: keep-all;">
<span lang="EN-US" style="color: #333333; font-family: "helvetica" , sans-serif; font-size: 12.0pt;">43.162</span><span lang="EN-US" style="font-family: 굴림; font-size: 12.0pt; mso-bidi-font-family: 굴림; mso-font-kerning: 0pt;"><o:p></o:p></span></div>
</td>
<td style="border-top: solid #DDDDDD 1.0pt; border: none; height: 9.0pt; padding: 6.0pt 6.0pt 6.0pt 6.0pt;" valign="top"><div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-pagination: widow-orphan; text-align: right; text-autospace: ideograph-numeric ideograph-other; word-break: keep-all;">
<span lang="EN-US" style="color: #333333; font-family: "helvetica" , sans-serif; font-size: 12.0pt;">0.0000</span><span lang="EN-US" style="font-family: 굴림; font-size: 12.0pt; mso-bidi-font-family: 굴림; mso-font-kerning: 0pt;"><o:p></o:p></span></div>
</td>
</tr>
<tr style="height: 9.0pt; mso-yfti-irow: 4;">
<td style="border-top: solid #DDDDDD 1.0pt; border: none; height: 9.0pt; padding: 6.0pt 6.0pt 6.0pt 6.0pt;" valign="top"><div align="left" class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt; word-break: keep-all;">
<span lang="EN-US" style="color: #333333; font-family: "helvetica" , sans-serif; font-size: 12.0pt;">HML</span><span lang="EN-US" style="font-family: 굴림; font-size: 12.0pt; mso-bidi-font-family: 굴림; mso-font-kerning: 0pt;"><o:p></o:p></span></div>
</td>
<td style="border-top: solid #DDDDDD 1.0pt; border: none; height: 9.0pt; padding: 6.0pt 6.0pt 6.0pt 6.0pt;" valign="top"><div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-pagination: widow-orphan; text-align: right; text-autospace: ideograph-numeric ideograph-other; word-break: keep-all;">
<span lang="EN-US" style="color: #333333; font-family: "helvetica" , sans-serif; font-size: 12.0pt;">0.4111</span><span lang="EN-US" style="font-family: 굴림; font-size: 12.0pt; mso-bidi-font-family: 굴림; mso-font-kerning: 0pt;"><o:p></o:p></span></div>
</td>
<td style="border-top: solid #DDDDDD 1.0pt; border: none; height: 9.0pt; padding: 6.0pt 6.0pt 6.0pt 6.0pt;" valign="top"><div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-pagination: widow-orphan; text-align: right; text-autospace: ideograph-numeric ideograph-other; word-break: keep-all;">
<span lang="EN-US" style="color: #333333; font-family: "helvetica" , sans-serif; font-size: 12.0pt;">0.0115</span><span lang="EN-US" style="font-family: 굴림; font-size: 12.0pt; mso-bidi-font-family: 굴림; mso-font-kerning: 0pt;"><o:p></o:p></span></div>
</td>
<td style="border-top: solid #DDDDDD 1.0pt; border: none; height: 9.0pt; padding: 6.0pt 6.0pt 6.0pt 6.0pt;" valign="top"><div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-pagination: widow-orphan; text-align: right; text-autospace: ideograph-numeric ideograph-other; word-break: keep-all;">
<span lang="EN-US" style="color: #333333; font-family: "helvetica" , sans-serif; font-size: 12.0pt;">35.886</span><span lang="EN-US" style="font-family: 굴림; font-size: 12.0pt; mso-bidi-font-family: 굴림; mso-font-kerning: 0pt;"><o:p></o:p></span></div>
</td>
<td style="border-top: solid #DDDDDD 1.0pt; border: none; height: 9.0pt; padding: 6.0pt 6.0pt 6.0pt 6.0pt;" valign="top"><div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-pagination: widow-orphan; text-align: right; text-autospace: ideograph-numeric ideograph-other; word-break: keep-all;">
<span lang="EN-US" style="color: #333333; font-family: "helvetica" , sans-serif; font-size: 12.0pt;">0.0000</span><span lang="EN-US" style="font-family: 굴림; font-size: 12.0pt; mso-bidi-font-family: 굴림; mso-font-kerning: 0pt;"><o:p></o:p></span></div>
</td>
</tr>
<tr style="height: 9.0pt; mso-yfti-irow: 5; mso-yfti-lastrow: yes;">
<td style="border-top: solid #DDDDDD 1.0pt; border: none; height: 9.0pt; padding: 6.0pt 6.0pt 6.0pt 6.0pt;" valign="top"><div align="left" class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt; word-break: keep-all;">
<span lang="EN-US" style="color: #333333; font-family: "helvetica" , sans-serif; font-size: 12.0pt;">UMD</span><span lang="EN-US" style="font-family: 굴림; font-size: 12.0pt; mso-bidi-font-family: 굴림; mso-font-kerning: 0pt;"><o:p></o:p></span></div>
</td>
<td style="border-top: solid #DDDDDD 1.0pt; border: none; height: 9.0pt; padding: 6.0pt 6.0pt 6.0pt 6.0pt;" valign="top"><div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-pagination: widow-orphan; text-align: right; text-autospace: ideograph-numeric ideograph-other; word-break: keep-all;">
<span lang="EN-US" style="color: #333333; font-family: "helvetica" , sans-serif; font-size: 12.0pt;">-0.0614</span><span lang="EN-US" style="font-family: 굴림; font-size: 12.0pt; mso-bidi-font-family: 굴림; mso-font-kerning: 0pt;"><o:p></o:p></span></div>
</td>
<td style="border-top: solid #DDDDDD 1.0pt; border: none; height: 9.0pt; padding: 6.0pt 6.0pt 6.0pt 6.0pt;" valign="top"><div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-pagination: widow-orphan; text-align: right; text-autospace: ideograph-numeric ideograph-other; word-break: keep-all;">
<span lang="EN-US" style="color: #333333; font-family: "helvetica" , sans-serif; font-size: 12.0pt;">0.0089</span><span lang="EN-US" style="font-family: 굴림; font-size: 12.0pt; mso-bidi-font-family: 굴림; mso-font-kerning: 0pt;"><o:p></o:p></span></div>
</td>
<td style="border-top: solid #DDDDDD 1.0pt; border: none; height: 9.0pt; padding: 6.0pt 6.0pt 6.0pt 6.0pt;" valign="top"><div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-pagination: widow-orphan; text-align: right; text-autospace: ideograph-numeric ideograph-other; word-break: keep-all;">
<span lang="EN-US" style="color: #333333; font-family: "helvetica" , sans-serif; font-size: 12.0pt;">-6.874</span><span lang="EN-US" style="font-family: 굴림; font-size: 12.0pt; mso-bidi-font-family: 굴림; mso-font-kerning: 0pt;"><o:p></o:p></span></div>
</td>
<td style="border-top: solid #DDDDDD 1.0pt; border: none; height: 9.0pt; padding: 6.0pt 6.0pt 6.0pt 6.0pt;" valign="top"><div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-pagination: widow-orphan; text-align: right; text-autospace: ideograph-numeric ideograph-other; word-break: keep-all;">
<span lang="EN-US" style="color: #333333; font-family: "helvetica" , sans-serif; font-size: 12.0pt;">0.0000</span><span lang="EN-US" style="font-family: 굴림; font-size: 12.0pt; mso-bidi-font-family: 굴림; mso-font-kerning: 0pt;"><o:p></o:p></span></div>
</td>
</tr>
</tbody></table>
</div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div align="center">
롱온리니 당연히 마켓팩터 노출도가 가장크고</div>
<div align="center">
베타가 0.85 정도로 낮습니다.</div>
<div align="center">
<br /></div>
<div align="center">
그다음으로는 사이즈 노출도가 가장 크네요</div>
<div align="center">
세번째로는 밸류 노출도가</div>
<div align="center">
마지막으로 모멘텀 노출도는 음수로 잡힙니다.</div>
<div align="center">
(뭐 이 기간동안 모멘텀 팩터가 날라가서 성과가 터진건 아닙니다만..)</div>
<div>
<br style="text-align: -webkit-center;" /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjzrJLa49TVi61lj01ju_zWu4hvMO1NiB9iINX_IwpqLQTGvtaRxaWt7_0QRVPCzYMp4ep1D3Sxa1z0iLt5zS71EjEfesOkUgXGm3QgxLI2dJ6H3VCV4KYlON0t3rlRnK8BNdi8cGIBxQ/s1600/8.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="961" data-original-width="1344" height="456" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjzrJLa49TVi61lj01ju_zWu4hvMO1NiB9iINX_IwpqLQTGvtaRxaWt7_0QRVPCzYMp4ep1D3Sxa1z0iLt5zS71EjEfesOkUgXGm3QgxLI2dJ6H3VCV4KYlON0t3rlRnK8BNdi8cGIBxQ/s640/8.png" width="640" /></a></div>
<br />
<div style="text-align: center;">
일간데이터 기준 5년 롤링 회귀계수 값입니다.</div>
<div style="text-align: center;">
마켓 팩터 노출도만 계속 증가하고</div>
<div style="text-align: center;">
나머지 팩터에 대한 노출도는 계속 감소하는 이상한 모습을 보입니다.</div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: center;">
심지어 마켓팩터는 지금 거의 1에 다와 갑니다...</div>
<div style="text-align: center;">
이정도면 사실상 인덱스 펀드....???</div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgsNRID6HlpZSqYsHy-3J_02d5zviJWe1HEGges4uSo3dG8WUKf8YvSyNu-oSOjR40NMFCal80lkMz5sRrMwswolJRRcxRs8fVbOxv-WhiRKTFvKTm3yKjjW971w80WpsYhocBw_7s2iQ/s1600/9.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="961" data-original-width="1344" height="456" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgsNRID6HlpZSqYsHy-3J_02d5zviJWe1HEGges4uSo3dG8WUKf8YvSyNu-oSOjR40NMFCal80lkMz5sRrMwswolJRRcxRs8fVbOxv-WhiRKTFvKTm3yKjjW971w80WpsYhocBw_7s2iQ/s640/9.png" width="640" /></a></div>
<br />
<div style="text-align: center;">
이번에는 18년 이후를 살펴보겠습니다.</div>
<div style="text-align: center;">
그나마 코로나 이후 밸류와 사이즈 팩터 노출도가 조금 올라오긴 했지만</div>
<div style="text-align: center;">
시장팩터 노출도가 지배적입니다.</div>
<div style="text-align: center;">
<br /></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_9gi1oyMB6EMBuP__aG31B8E8toz0ApsDZJUR8OeUUpMkw8dnMdoOe2epI82Kis084Sl2te1-8OCiJEOPexaWot5jTHN690HBGTbLyqlf7KtYxJMB3BkdMuqlpQcuGRHC0B_kZ5B76Q/s1600/10.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="961" data-original-width="1344" height="456" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_9gi1oyMB6EMBuP__aG31B8E8toz0ApsDZJUR8OeUUpMkw8dnMdoOe2epI82Kis084Sl2te1-8OCiJEOPexaWot5jTHN690HBGTbLyqlf7KtYxJMB3BkdMuqlpQcuGRHC0B_kZ5B76Q/s640/10.png" width="640" /></a></div>
<br />
<br />
<div>
<div style="text-align: center;">
마지막으로 4팩터 기준 알파값과 t-value 입니다. (5년 롤링기준)</div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: center;">
18~19년 즈음부터 알파 디케이가 급속하게 보입니다.</div>
<div style="text-align: center;">
뭐 룰이 안통하던가?</div>
<div style="text-align: center;">
아니면 전략이 너무 유명해져서 미미킹이 많던가?</div>
<div style="text-align: center;">
이유는 모르겠지만 어째튼 알파가 없습니다.</div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: center;">
19년 말부터는 심지어 알파가 음수입니다.</div>
</div>
<div style="text-align: center;">
<br /></div>
<div>
<div style="text-align: center;">
<b><br /></b></div>
<div style="text-align: center;">
<b><br /></b></div>
<div style="text-align: center;">
<b>요약해보자면 다음과 같습니다.</b></div>
<div style="text-align: center;">
<b><br /></b></div>
<div style="text-align: center;">
<i><span style="color: blue;"><b>- 전략의 노출도가 큰 사이즈, 밸류가 최근 전혀 작동하지 않음</b></span></i></div>
<div style="text-align: center;">
<i><span style="color: blue;"><b>- 코스피 내에서도 중소형주 개망</b></span></i></div>
<div style="text-align: center;">
<i><span style="color: blue;"><b>- 전략의 알파가 전혀 없거나 혹은 마이너스를 보임</b></span></i></div>
<div style="text-align: center;">
<i><span style="color: blue;"><b>- 최근에는 지수에 너무 붙은 느낌???</b></span></i></div>
<div>
<br style="text-align: center;" /></div>
</div>
Unknownnoreply@blogger.com3tag:blogger.com,1999:blog-23651150467485474.post-54444979396459265222020-03-26T09:37:00.002+09:002020-03-26T13:54:19.920+09:00지난해 $ 1Billion (1조) 이상을 번 5명의 헤지펀드 수장들 <div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhZlXAmFafJpierpiKx_Vru64bVdCFuoUjbNO_VTQWkjuXfLWY_FzI5aXUt0TGl0YsfUCmeD_KnnnP3_nSunENAI7mh73AgT_tsAmvbYIHN-ZElAPZGM4ma3X0ZhlBVGJv5BNyrZttahQ/s1600/tenor.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="247" data-original-width="498" height="316" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhZlXAmFafJpierpiKx_Vru64bVdCFuoUjbNO_VTQWkjuXfLWY_FzI5aXUt0TGl0YsfUCmeD_KnnnP3_nSunENAI7mh73AgT_tsAmvbYIHN-ZElAPZGM4ma3X0ZhlBVGJv5BNyrZttahQ/s640/tenor.gif" width="640" /></a></div>
<br />
<br />
블룸버그 추정기준 작년 1조 이상을 번 5명의 헤지펀드 매니저를 소개합니다!!! (헤지펀드의 2%-20% 를 가정하여 산출했다고 합니다.)<br />
<br />
<br />
<div style="text-align: center;">
<img alt="크리스 혼에 대한 이미지 검색결과" height="320" src="https://img.hankyung.com/photo/201503/AE.9764228.1.jpg" width="320" /></div>
<br />
<div style="text-align: center;">
1위: 크리스 혼 (TCI Fund Management)</div>
<div style="text-align: center;">
수익: 2조 2,619억</div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: center;">
<img alt="짐 사이먼스에 대한 이미지 검색결과" src="https://blogger.googleusercontent.com/img/proxy/AVvXsEggwCZopja76P6WN_dtAN85EEihMkRZKiUmKpggsQ3yV2_M105pVqVdNrgMk7I_84QMY6t9Wn2cATk9sU-igIQHMaacHCyGzbvDxZKwEFE76iNRoTbVIUOgrwyeltb2XIqOtt-J20Ou6gNTIOWRNhW9rUsbkIJiH2w=" /></div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: center;">
2위: 짐 사이먼스 (Renaissance Technologies)</div>
<div style="text-align: center;">
수익: 2조 1,209억</div>
<div style="text-align: center;">
<br />
퀀트의 전설 짐 사이먼 형님은 아쉽게 2등..<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgq27niU3KY5mpySf03TgXp6UZ46kP98JSVhxQU8sI9LAqngwZa5O1dHyV8r0jZpA2k3jD0VDgGHGy1YCnM8xmbckFGNOFsEiiZ_fMREATGAbBs4cV9TDCsrPrDIhB1GeUp2OeqIIZsXw/s1600/i13454158575.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="409" data-original-width="728" height="223" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgq27niU3KY5mpySf03TgXp6UZ46kP98JSVhxQU8sI9LAqngwZa5O1dHyV8r0jZpA2k3jD0VDgGHGy1YCnM8xmbckFGNOFsEiiZ_fMREATGAbBs4cV9TDCsrPrDIhB1GeUp2OeqIIZsXw/s400/i13454158575.jpg" width="400" /></a></div>
<br />
<br />
<br /></div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: center;">
<img alt="켄 그리핀에 대한 이미지 검색결과" src="https://cgeimage.commutil.kr/phpwas/restmb_allidxmake.php?idx=3&simg=2017110312591346996beeb3268cimg0.jpg" /></div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: center;">
3위: 켄 그리핀 (Citadel)</div>
<div style="text-align: center;">
수익: 1조 8,390억</div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: center;">
<img alt="스티브 코헨에 대한 이미지 검색결과" height="208" src="https://signal2forex.com/wp-content/uploads/steven-cohen-is-said-to-lose-bid-to-open-point72-hedge-fund-to-british-investors.jpg" width="400" /></div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: center;">
4위: 스티브 코헨 (Point72 Asset Management)</div>
<div style="text-align: center;">
수익: 1조 5,447억</div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: center;">
<img alt="chase coleman tiger global에 대한 이미지 검색결과" height="300" src="https://m.economictimes.com/thumb/msid-69984870,width-1200,height-900,resizemode-4,imgsize-85090/chase-coleman.jpg" width="400" /></div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: center;">
5위: 체이스 콜먼 (Tiger Global Management)</div>
<div style="text-align: center;">
수익: 1조 3,547억</div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhjTGkqlfDYKQWAomRRFBrZjateb83sge456Sd9bL-pJpVTkvQLrR5iKTwecFXnCNa3FY9XtpkyVpe8a9SdcqozqzIwKt3vzLn-MZtBSBTHstShC0KjyDv4ED5ypNOg-k0uaSwnioSXIA/s1600/KakaoTalk_20200326_085219673.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="133" data-original-width="776" height="108" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhjTGkqlfDYKQWAomRRFBrZjateb83sge456Sd9bL-pJpVTkvQLrR5iKTwecFXnCNa3FY9XtpkyVpe8a9SdcqozqzIwKt3vzLn-MZtBSBTHstShC0KjyDv4ED5ypNOg-k0uaSwnioSXIA/s640/KakaoTalk_20200326_085219673.png" width="640" /></a></div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: center;">
</div>
<a name='more'></a><br />
<br />
<div style="text-align: center;">
이 외에도 안타깝게(????) 1 Billion 그룹에 가입하지 못하신 분들은</div>
<div style="text-align: center;">
다음과 같습니다.</div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: center;">
(그래봐야 한명 번돈이 이 글을 보는 우리 모두의 돈을 합친거 보다 많을듯..)</div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: center;">
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgFEpWbPtyuSSxwnvm4ltmfcASJjj7tyX2j3VTL78lHSgLtCBElUtdanBb4LMsffklHnvaygsXy1Kk121YV91QcrIJ87jHKcdj_pj1pOX5GE3gSQX9nh2bJA8Nv8_xZ9YTqWkVxgo4VIA/s1600/12.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="255" data-original-width="871" height="186" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgFEpWbPtyuSSxwnvm4ltmfcASJjj7tyX2j3VTL78lHSgLtCBElUtdanBb4LMsffklHnvaygsXy1Kk121YV91QcrIJ87jHKcdj_pj1pOX5GE3gSQX9nh2bJA8Nv8_xZ9YTqWkVxgo4VIA/s640/12.png" width="640" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div style="text-align: center;">
(레이 달리오 수익률 0%...)</div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: center;">
아래는 펀드로 인한 수익 및 수수료로 인한 수익의 분해입니다.</div>
<div style="text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBUH2hQG_3aQaDzG3RtUycl2R66ILoqpLdGJgCqBPCy3cbtl8F60cbVlIcDiHHymSzRGY3_3-B8XmBduMVG7GJ9F53OpDX9y4RCUMoniW9eP3E5VVU-p7sMcWcc4WpD_T2O9c8y6YLZg/s1600/1313.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="480" data-original-width="798" height="384" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBUH2hQG_3aQaDzG3RtUycl2R66ILoqpLdGJgCqBPCy3cbtl8F60cbVlIcDiHHymSzRGY3_3-B8XmBduMVG7GJ9F53OpDX9y4RCUMoniW9eP3E5VVU-p7sMcWcc4WpD_T2O9c8y6YLZg/s640/1313.png" width="640" /></a></div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: center;">
<img alt="실례가 안된다면 아이스크림에 대한 이미지 검색결과" src="https://img1.daumcdn.net/thumb/R800x0/?scode=mtistory2&fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99E755445B17B60C26" /></div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: center;">
<b><span style="color: red;">저도 언젠간 헤지펀드를...... ㅠㅠ</span></b></div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: center;">
<b>출처</b></div>
<div style="text-align: center;">
<br /></div>
https://markets.businessinsider.com/news/stocks/hedge-fund-managers-earned-more-than-billion-last-year-highest-2020-2-1028894639<br />
<br />
https://www.bloomberg.com/news/articles/2020-02-11/five-hedge-fund-heads-earned-more-than-1-billion-each-last-year<br />
<br />
https://www.bloomberg.com/news/articles/2020-02-11/how-bloomberg-calculated-the-top-hedge-fund-managers-incomeUnknownnoreply@blogger.com0tag:blogger.com,1999:blog-23651150467485474.post-67549442189507064652020-03-23T22:28:00.002+09:002020-03-23T22:29:56.947+09:00파도가 심할때는 잠시 쉬어갑시다<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhZDCJuKQv5xI3w4RDaOCrkdNtVIpBx4wbj4swRKy-rVQrId0Xw17Qd9ifvreQrXZrzSzFwErScWFNlEY9zLEZL7cSjdpE1dlVtQGN-YOhZjISSHqJYD3mpm03Vo_jkON31aOPixPq__g/s1600/thumb_l_7DAD4FA5A5CE2E54615C490EC5BC4B42.jpeg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="300" data-original-width="489" height="392" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhZDCJuKQv5xI3w4RDaOCrkdNtVIpBx4wbj4swRKy-rVQrId0Xw17Qd9ifvreQrXZrzSzFwErScWFNlEY9zLEZL7cSjdpE1dlVtQGN-YOhZjISSHqJYD3mpm03Vo_jkON31aOPixPq__g/s640/thumb_l_7DAD4FA5A5CE2E54615C490EC5BC4B42.jpeg" width="640" /></a></div>
<br />
투자는 무엇일까요? 어떤 면에서 저는 수익률이라는 보물을 찾아 먼 바다를 항해하는 것이 아닌가 합니다. 재무제표라는 나침반과, 바람이라는 주가 모멘텀, 배라는 기업을 가지고요.<br />
<br />
바다의 바람이 평소와 같으면 항해도 평소와 같이 하면 됩니다. 믿을 만한 나침반(재무제표)을 가지고 바람(모멘텀)을 타고 앞으로 나아가기만 하면 되죠. 배가 튼튼할 수록 더 좋겠죠.<br />
<br />
그러나 안개가 가득끼고 폭풍우가 몰아치면 아무리 좋은 나침반도, 배도 쓸모가 없습니다. 어설프게 자연에 맞서려다가는 침몰하는게 눈에 뻔합니다. 이럴때는 무리해서 배를 끌고나가기 보다 바람이 잦아들때까지 배를 정박하고 기다리는게 좋지 않을까요? 어짜피 그 보물은 누가 먼저 가져간다고 내 것이 사라지는 것도 아니니까요. 살아야 보물도 찾죠.Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-23651150467485474.post-34897238116061717452020-03-14T10:42:00.002+09:002020-03-14T10:43:40.991+09:00유동성 소용돌이: 하락은 어떻게 하락을 부추기는가?<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYk3fI5SidZBQ71XDWe60pND7tCYW0mAUZ_NLqzhvmiKuIqtN5psnXdynN_Ev9nRbZ29U63HTGM6bJnFCzWS2Qw6cSa3awNhlQVEUtTlXk0WRg_WN8nncDW4wUOEw_hFy5yeWl9YKX9w/s1600/13.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="249" data-original-width="600" height="264" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYk3fI5SidZBQ71XDWe60pND7tCYW0mAUZ_NLqzhvmiKuIqtN5psnXdynN_Ev9nRbZ29U63HTGM6bJnFCzWS2Qw6cSa3awNhlQVEUtTlXk0WRg_WN8nncDW4wUOEw_hFy5yeWl9YKX9w/s640/13.jpg" width="640" /></a></div>
<br />
<br />
여러분이 생각하는 것 보다 시장은 복잡한 형태의 함수로 이루어져 있습니다. 각종 파생상품, 레버리지, 대차거래, 신용매매 등이 여기에 해당합니다.<br />
<br />
헤지펀드의 경우 100% 매수 포지션을 위해 자기돈 100%를 내는 경우는 거의 없습니다. 자기돈의 50%로 주식을 매수하면 나머지 50%는 프라임 브로커에서 이 주식들을 담보로 제공해준 자금을 통해 매수하면 됩니다. 이것이 흔히 알고있는 '레버리지' 이죠. 개인들의 신용미수 역시 이와 동일하다고 보면 됩니다.<br />
<br />
정상적인 시장에서 이러한 메커니즘은 아무 문제가 없겠죠. 그러나 시장이 급락하고 공포에 휩싸여, 모두가 탈출하고 싶어할 때는 얘기가 다릅니다.<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjxO4bSOyvNPMZIFsA0mbiTm8E8f4GaRfRNeFI1GzNIP4gHFxCThgnUmoF_zp96g1AgrraKV0bKba7ltCi0YwBy40N3DfxImoUquBjl7LruyGV9NQLNbk6Wipci4FvMJl_1YM6T0tA9zg/s1600/spiral.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="626" data-original-width="1031" height="388" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjxO4bSOyvNPMZIFsA0mbiTm8E8f4GaRfRNeFI1GzNIP4gHFxCThgnUmoF_zp96g1AgrraKV0bKba7ltCi0YwBy40N3DfxImoUquBjl7LruyGV9NQLNbk6Wipci4FvMJl_1YM6T0tA9zg/s640/spiral.png" width="640" /></a></div>
<br />
<br />
먼저 시장에 엄청난 쇼크가 발생한다고 생각합시다. 먼저 쇼크로 인한 손실때문에 트레이더는 포지션을 줄여야 합니다. 그러나 더 큰 문제는 프라임브로커와의 자금 조달 관계입니다. 위험을 느낀 프라임 브로커들이 더욱 많은 담보를 요구하거나, 혹은 부도위험, 손실관리 등 각종 위험관리를 위해 더이상 자금제공을 하지 않기도 합니다.<br />
<br />
결국 트레이더는 애초에 매도해야했던 금액에 더해 더 큰 매도를 해야하며, 이는 엄청난 매도 압력을 만들어냅니다. 그 결과 동일한 포지션을 가진 모든 트레이더는 더 큰 손해를 보게 됩니다.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEinDxnPd0stZreAa2_CYrhYl1p7k8jXw6G2JGo1vshwuYlPjVSEJq4HD4-b3a2fQqIwXqbgUuhr6MXLXvdov7zNg9OWYcFQ9r4zBsgof85rQ7-uqLZ2EjF8F334M2roSMyLH7i25MRwPw/s1600/123.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="320" data-original-width="296" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEinDxnPd0stZreAa2_CYrhYl1p7k8jXw6G2JGo1vshwuYlPjVSEJq4HD4-b3a2fQqIwXqbgUuhr6MXLXvdov7zNg9OWYcFQ9r4zBsgof85rQ7-uqLZ2EjF8F334M2roSMyLH7i25MRwPw/s400/123.png" width="370" /></a></div>
<br />
시장의 매도 압력이 커지면 어떻게 될까요? 이러한 주문 불균형으로 인해 시장 변동은 더 커지고 유동성은 말라붙게 됩니다. 일반적인 상황에서 이런 트레이더들이 유동성 공급자였는데, 이제 그들은 매도만을 위해 달려가고 있으니까요.<br />
<br />
악순환은 다시 돌아옵니다. 변동성이 높아지고 유동성이 하락함에 따라 위험을 느낌 프라임브로커는 또다시 증거금을 올리고, 트레이더가 포지션을 정리하도록 만듭니다. 트레이더역시 손실로 인해 포지션을 추가로 줄여야 하며, 투자자나 경영자들이 돈을 뺴가기도 합니다. 이런 악순환은 계속 반복됩니다. 이러한 일련의 과정을 <b><span style="color: red;">유동성 소용돌이</span> </b>라고 합니다.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgFA3kQPLmbK751r7Yvku7U6UTOtNMHdawXgrQY_ip8mSjVOvKrPDUBL80aUOqETueabqhDeI7JXCg2QHfO9EKzsJL3c-kZTz5qIK1L0E6TvzVNHNCr_8RruaQijWUMVRDIJj5dJch_Eg/s1600/unnamed.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="343" data-original-width="512" height="267" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgFA3kQPLmbK751r7Yvku7U6UTOtNMHdawXgrQY_ip8mSjVOvKrPDUBL80aUOqETueabqhDeI7JXCg2QHfO9EKzsJL3c-kZTz5qIK1L0E6TvzVNHNCr_8RruaQijWUMVRDIJj5dJch_Eg/s400/unnamed.jpg" width="400" /></a></div>
<br />
<br />
이 상황은 언제 멈출까요? 바로 디레버리징이 끝날때 입니다. 모든 복잡한 함수가 정리되면 가격은 바닥에 도달합니다. 그 후 일부 트레이더는 다시 레버리지를 사용하여 매수를 하기 시작하면 가격은 내재가치를 향해 반등하기 시작합니다. 이 내재가치는 기존 보다 하락한 지점에서 평형을 이루게 됩니다.<br />
<br />
물론 그 반등이 몇일만에 끝날지, 아니면 몇달이나 걸릴지는 아무도 모르지겠지만요... (논문에서는 알수 있다고 하니 우리모두 공부합시다!)<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjegQ6A25Emxc9wYMJ7ZI72jnly3xyuLtqLYWqjfLgY3HUtzDZCACA5nM3_i5zMIAAiTuB16HRSo8sbySDp6ADPi9YzpNMrerl62YgYtAtvgPZSsUSrrIm_gRD6d8ObWWjSOkNSZUyglg/s1600/min.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="513" data-original-width="791" height="414" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjegQ6A25Emxc9wYMJ7ZI72jnly3xyuLtqLYWqjfLgY3HUtzDZCACA5nM3_i5zMIAAiTuB16HRSo8sbySDp6ADPi9YzpNMrerl62YgYtAtvgPZSsUSrrIm_gRD6d8ObWWjSOkNSZUyglg/s640/min.png" width="640" /></a></div>
<br />
<br />
<span style="background-color: white; color: #222222; font-family: Arial, sans-serif; font-size: 13px;">참고문헌: Pedersen, Lasse Heje. </span><i style="background-color: white; color: #222222; font-family: Arial, sans-serif; font-size: 13px;">When everyone runs for the exit</i><span style="background-color: white; color: #222222; font-family: Arial, sans-serif; font-size: 13px;">. No. w15297. National Bureau of Economic Research, 2009.</span>Unknownnoreply@blogger.com1tag:blogger.com,1999:blog-23651150467485474.post-80215753334699677972019-11-15T14:29:00.003+09:002019-11-15T14:29:50.736+09:00dtplyr: dplyr의 편리함과 data.table의 속도를 그대로!<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhy4dxnohGK3f2ebi60x2IqhRtdyj1VMYmAvtu6LoIOJfteQ1EBibAeIlVys9OSE4-GYvRKJgHYHM5DvoGinVFmQsFdajaLZu6TH1hqC4hPwEDJmuVbDZjM3_a0zkC3mrVJnHmDKQDvEw/s1600/1_uiK90opmX3b3eQuHxaD8Tg.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="632" data-original-width="1468" height="275" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhy4dxnohGK3f2ebi60x2IqhRtdyj1VMYmAvtu6LoIOJfteQ1EBibAeIlVys9OSE4-GYvRKJgHYHM5DvoGinVFmQsFdajaLZu6TH1hqC4hPwEDJmuVbDZjM3_a0zkC3mrVJnHmDKQDvEw/s640/1_uiK90opmX3b3eQuHxaD8Tg.png" width="640" /></a></div>
<br />
<br />
R 내에서 데이터 처리시 가장 많이 사용되는 패키지는 dplyr 입니다. 개인적으로 dplyr을 쓰지 않는 다는 것은 R의 1%도 활용하지 못한다는 생각이 들 정도입니다. 그러나 데이터 양이 늘어날수록 속도가 느려지는 것은 당연합니다.<br />
<br />
물론 data.table 패키지라는 해결책도 있습니다. R 뿐만 아니라 다른 언어들과 비교해도 속도에서 만큼은 깡패급으로 빠릅니다. 그러나 사용하기에 문법이 너무 복잡해 접근이 쉽지 않습니다.<br />
<br />
<div style="text-align: center;">
<b><a href="https://cran.r-project.org/web/packages/data.table/vignettes/datatable-intro.html" target="_blank">https://cran.r-project.org/web/packages/data.table/vignettes/datatable-intro.html</a></b></div>
<div style="text-align: center;">
(아무리 외워도 외워지지 않는 그놈의 DT[i, j, by].....)</div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: left;">
이런 문제를 해결하기 위해 Rstudio에서 새로운 해법을 내놓았습니다. dplyr 문법을 입력하면 data.table 명령어로 래핑하여 데이터를 처리하는, 즉 dplyr의 편리함과 data.table의 속도를 둘 다 잡은 dtplyr 패키지를 선보였습니다.</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: center;">
<b><a href="https://github.com/tidyverse/dtplyr" target="_blank">https://github.com/tidyverse/dtplyr</a></b></div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: left;">
두말할 필요없이 속도 비교를 해보도록 합시다.</div>
<div style="text-align: left;">
<br /></div>
<pre class="r" style="background-color: whitesmoke; border-radius: 4px; border: 1px solid rgb(204, 204, 204); box-sizing: border-box; color: #333333; font-size: 13px; line-height: 1.42857; margin-bottom: 10px; overflow: auto; padding: 9.5px; word-break: break-all; word-wrap: break-word;"><code class="hljs" style="background-color: transparent; border-radius: 0px; box-sizing: border-box; color: inherit; font-size: inherit; padding: 0px; white-space: pre-wrap;"><span class="hljs-keyword" style="box-sizing: border-box; color: #990000; font-weight: bold;">library</span>(nycflights13)
<span class="hljs-keyword" style="box-sizing: border-box; color: #990000; font-weight: bold;">library</span>(data.table)
<span class="hljs-keyword" style="box-sizing: border-box; color: #990000; font-weight: bold;">library</span>(dtplyr)
<span class="hljs-keyword" style="box-sizing: border-box; color: #990000; font-weight: bold;">library</span>(dplyr, warn.conflicts = <span class="hljs-literal" style="box-sizing: border-box; color: #990073;">FALSE</span>)
<span class="hljs-keyword" style="box-sizing: border-box; color: #990000; font-weight: bold;">library</span>(microbenchmark)
<span class="hljs-keyword" style="box-sizing: border-box; color: #990000; font-weight: bold;">library</span>(ggplot2)</code></pre>
<div style="text-align: left;">
<br /></div>
<div style="background-color: white; box-sizing: border-box; color: #333333; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 14px; margin-bottom: 10px;">
먼저 필요한 패키지들을 불러옵니다. dplyr의 경우 <code style="background-color: rgba(0, 0, 0, 0.04); border-radius: 4px; box-sizing: border-box; color: inherit; font-size: 12.6px; padding: 2px 4px; white-space: pre;">warn.conflicts()</code> 인자를 FALSE로 두어 충돌 메세지를 끄도록 합니다.</div>
<div style="background-color: white; box-sizing: border-box; color: #333333; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 14px; margin-bottom: 10px;">
CRAN 버젼 dtplyr 설치시 에러가 날 수 있습니다. 이는 연결 패키지인 data.table이 최근에 업데이트 되어서이며, data.table을 제거 후 인스톨 한후 dtplyr을 설치하면 잘 설치 됩니다.</div>
<pre class="r" style="background-color: whitesmoke; border-radius: 4px; border: 1px solid rgb(204, 204, 204); box-sizing: border-box; color: #333333; font-size: 13px; line-height: 1.42857; margin-bottom: 10px; overflow: auto; padding: 9.5px; word-break: break-all; word-wrap: break-word;"><code class="hljs" style="background-color: transparent; border-radius: 0px; box-sizing: border-box; color: inherit; font-size: inherit; padding: 0px; white-space: pre-wrap;"><span class="hljs-comment" style="box-sizing: border-box; color: #999988; font-style: italic;"># load data</span>
df = flights
dim(df)</code></pre>
<pre style="background-color: white; border-radius: 4px; border: 1px solid rgb(204, 204, 204); box-sizing: border-box; color: #333333; font-size: 13px; line-height: 1.42857; margin-bottom: 10px; overflow: auto; padding: 9.5px; word-break: break-all; word-wrap: break-word;"><code class="hljs" style="background-color: transparent; border-radius: 0px; box-sizing: border-box; color: inherit; font-size: inherit; padding: 0px; white-space: pre-wrap;">## [1] 336776 19</code></pre>
<pre class="r" style="background-color: whitesmoke; border-radius: 4px; border: 1px solid rgb(204, 204, 204); box-sizing: border-box; color: #333333; font-size: 13px; line-height: 1.42857; margin-bottom: 10px; overflow: auto; padding: 9.5px; word-break: break-all; word-wrap: break-word;"><code class="hljs" style="background-color: transparent; border-radius: 0px; box-sizing: border-box; color: inherit; font-size: inherit; padding: 0px; white-space: pre-wrap;">head(df)</code></pre>
<pre style="background-color: white; border-radius: 4px; border: 1px solid rgb(204, 204, 204); box-sizing: border-box; color: #333333; font-size: 13px; line-height: 1.42857; margin-bottom: 10px; overflow: auto; padding: 9.5px; word-break: break-all; word-wrap: break-word;"><code class="hljs" style="background-color: transparent; border-radius: 0px; box-sizing: border-box; color: inherit; font-size: inherit; padding: 0px; white-space: pre-wrap;">## # A tibble: 6 x 19
## year month day dep_time sched_dep_time dep_delay arr_time
## <int> <int> <int> <int> <int> <dbl> <int>
## 1 2013 1 1 517 515 2 830
## 2 2013 1 1 533 529 4 850
## 3 2013 1 1 542 540 2 923
## 4 2013 1 1 544 545 -1 1004
## 5 2013 1 1 554 600 -6 812
## 6 2013 1 1 554 558 -4 740
## # ... with 12 more variables: sched_arr_time <int>, arr_delay <dbl>,
## # carrier <chr>, flight <int>, tailnum <chr>, origin <chr>, dest <chr>,
## # air_time <dbl>, distance <dbl>, hour <dbl>, minute <dbl>,
## # time_hour <dttm></dttm></dbl></dbl></dbl></dbl></chr></chr></chr></int></chr></dbl></int></int></dbl></int></int></int></int></int></code></pre>
<div style="background-color: white; box-sizing: border-box; color: #333333; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 14px; margin-bottom: 10px;">
필요한 flight 데이터를 불러오도록 합니다. 총 336776개의 행으로 구성되어 있습니다.</div>
<div style="background-color: white; box-sizing: border-box; color: #333333; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 14px; margin-bottom: 10px;">
<br /></div>
<pre class="r" style="background-color: whitesmoke; border-radius: 4px; border: 1px solid rgb(204, 204, 204); box-sizing: border-box; color: #333333; font-size: 13px; line-height: 1.42857; margin-bottom: 10px; overflow: auto; padding: 9.5px; word-break: break-all; word-wrap: break-word;"><code class="hljs" style="background-color: transparent; border-radius: 0px; box-sizing: border-box; color: inherit; font-size: inherit; padding: 0px; white-space: pre-wrap;">df_dt = data.table(df)
df_tb = as_tibble(df)
df_lz = lazy_dt(df)</code></pre>
<div style="background-color: white; box-sizing: border-box; color: #333333; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 14px; margin-bottom: 10px;">
데이터 테이블을 각 형식에 맞게 바꿔주도록 합니다. <code style="background-color: rgba(0, 0, 0, 0.04); border-radius: 4px; box-sizing: border-box; color: inherit; font-size: 12.6px; padding: 2px 4px; white-space: pre;">data.table()</code> 함수를 이용해 데이터테이블 형태로, <code style="background-color: rgba(0, 0, 0, 0.04); border-radius: 4px; box-sizing: border-box; color: inherit; font-size: 12.6px; padding: 2px 4px; white-space: pre;">as_tibble()</code> 함수를 이용해 티블 형태로, 마지막으로 dtplyr 패키지의 <code style="background-color: rgba(0, 0, 0, 0.04); border-radius: 4px; box-sizing: border-box; color: inherit; font-size: 12.6px; padding: 2px 4px; white-space: pre;">lazy_dt()</code> 함수를 이용해 dtplyr_step_first 형태로 바꾸어 줍니다. 해당 형식을 통해 dplyr 명령어를 data.table 명령어로 래핑하여 데이터를 처리하게 됩니다.</div>
<div style="background-color: white; box-sizing: border-box; color: #333333; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 14px; margin-bottom: 10px;">
<br /></div>
<pre class="r" style="background-color: whitesmoke; border-radius: 4px; border: 1px solid rgb(204, 204, 204); box-sizing: border-box; color: #333333; font-size: 13px; line-height: 1.42857; margin-bottom: 10px; overflow: auto; padding: 9.5px; word-break: break-all; word-wrap: break-word;"><code class="hljs" style="background-color: transparent; border-radius: 0px; box-sizing: border-box; color: inherit; font-size: inherit; padding: 0px; white-space: pre-wrap;">summary(df_lz)</code></pre>
<pre style="background-color: white; border-radius: 4px; border: 1px solid rgb(204, 204, 204); box-sizing: border-box; color: #333333; font-size: 13px; line-height: 1.42857; margin-bottom: 10px; overflow: auto; padding: 9.5px; word-break: break-all; word-wrap: break-word;"><code class="hljs" style="background-color: transparent; border-radius: 0px; box-sizing: border-box; color: inherit; font-size: inherit; padding: 0px; white-space: pre-wrap;">## Length Class Mode
## parent 19 data.table list
## vars 19 -none- character
## groups 0 -none- character
## implicit_copy 1 -none- logical
## needs_copy 1 -none- logical
## env 5 -none- environment
## name 1 -none- name</code></pre>
<div style="background-color: white; box-sizing: border-box; color: #333333; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 14px; margin-bottom: 10px;">
<code style="background-color: rgba(0, 0, 0, 0.04); border-radius: 4px; box-sizing: border-box; color: inherit; font-size: 12.6px; padding: 2px 4px; white-space: pre;">summary()</code>를 통해 확인해보면 data.table 클래스에 굉장히 독특한 형태로 생겼습니다.</div>
<div style="background-color: white; box-sizing: border-box; color: #333333; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 14px; margin-bottom: 10px;">
이제 본격적으로 속도를 비교해보도록 하겠습니다. 먼저 필터에 대한 속도 비교입니다.</div>
<div style="background-color: white; box-sizing: border-box; color: #333333; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 14px; margin-bottom: 10px;">
<br /></div>
<div style="background-color: white; box-sizing: border-box; color: #333333; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 14px; margin-bottom: 10px;">
dtply을 이용할 경우 <code style="background-color: rgba(0, 0, 0, 0.04); border-radius: 4px; box-sizing: border-box; color: inherit; font-size: 12.6px; padding: 2px 4px; white-space: pre;">lazy_dt()</code>를 통해 변경된 데이터에 기존 dplyr 명령어를 그대로 사용해서 데이터처리를 하며, <code style="background-color: rgba(0, 0, 0, 0.04); border-radius: 4px; box-sizing: border-box; color: inherit; font-size: 12.6px; padding: 2px 4px; white-space: pre;">as_tibble()</code> 을 통해 티블 형태로 변경해주길 권장합니다. (그렇지 않으면 용량이 매우 큰 dtplyr_step_first 형태로 남아있게 됩니다.)</div>
<pre class="r" style="background-color: whitesmoke; border-radius: 4px; border: 1px solid rgb(204, 204, 204); box-sizing: border-box; color: #333333; font-size: 13px; line-height: 1.42857; margin-bottom: 10px; overflow: auto; padding: 9.5px; word-break: break-all; word-wrap: break-word;"><code class="hljs" style="background-color: transparent; border-radius: 0px; box-sizing: border-box; color: inherit; font-size: inherit; padding: 0px; white-space: pre-wrap;">results = microbenchmark(
`data.table` = df_dt[origin == <span class="hljs-string" style="box-sizing: border-box; color: #dd1144;">'JFK'</span> & carrier == <span class="hljs-string" style="box-sizing: border-box; color: #dd1144;">'AA'</span>] ,
`dplyr` = df_tb %>% filter(origin == <span class="hljs-string" style="box-sizing: border-box; color: #dd1144;">'JFK'</span> & carrier == <span class="hljs-string" style="box-sizing: border-box; color: #dd1144;">'AA'</span>),
`dtplyr` = df_lz %>% filter(origin == <span class="hljs-string" style="box-sizing: border-box; color: #dd1144;">'JFK'</span> & carrier == <span class="hljs-string" style="box-sizing: border-box; color: #dd1144;">'AA'</span>) %>% as_tibble(),
times = <span class="hljs-number" style="box-sizing: border-box; color: #009999;">100</span>
)
results</code></pre>
<pre style="background-color: white; border-radius: 4px; border: 1px solid rgb(204, 204, 204); box-sizing: border-box; color: #333333; font-size: 13px; line-height: 1.42857; margin-bottom: 10px; overflow: auto; padding: 9.5px; word-break: break-all; word-wrap: break-word;"><code class="hljs" style="background-color: transparent; border-radius: 0px; box-sizing: border-box; color: inherit; font-size: inherit; padding: 0px; white-space: pre-wrap;">## Unit: milliseconds
## expr min lq mean median uq max neval cld
## data.table 5.2220 6.92075 7.842533 7.49525 8.31910 19.4979 100 a
## dplyr 8.1038 9.33090 11.130208 10.14395 11.50605 27.7445 100 c
## dtplyr 6.5998 8.35225 8.902763 8.83630 9.42860 11.7533 100 b</code></pre>
<pre class="r" style="background-color: whitesmoke; border-radius: 4px; border: 1px solid rgb(204, 204, 204); box-sizing: border-box; color: #333333; font-size: 13px; line-height: 1.42857; margin-bottom: 10px; overflow: auto; padding: 9.5px; word-break: break-all; word-wrap: break-word;"><code class="hljs" style="background-color: transparent; border-radius: 0px; box-sizing: border-box; color: inherit; font-size: inherit; padding: 0px; white-space: pre-wrap;">autoplot(results) +
aes(fill = expr) +
theme_bw() +
labs(title = <span class="hljs-string" style="box-sizing: border-box; color: #dd1144;">"Filter"</span>)</code></pre>
<div style="background-color: white; box-sizing: border-box; color: #333333; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 14px; margin-bottom: 10px;">
<img src="data:image/png;base64,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" style="border: 0px; box-sizing: border-box; height: auto; max-width: 100%; vertical-align: middle;" width="672" /></div>
<div style="background-color: white; box-sizing: border-box; color: #333333; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 14px; margin-bottom: 10px;">
<br /></div>
<div style="background-color: white; box-sizing: border-box; color: #333333; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 14px; margin-bottom: 10px;">
data.table이 압도적으로 빠르며, 그뒤가 dtplyr, dplyr 순입니다. 물론 data.table과 dtplyr은 간혹 속도가 매우 오래 걸리는 경우가 있어 mean 값이 증가하는 경우도 있습니다.</div>
<div style="background-color: white; box-sizing: border-box; color: #333333; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 14px; margin-bottom: 10px;">
그러나 data.table와 dtplyr 진정한 위력은 매우 복잡한 데이터를 처리하는데 있습니다. 이번에는 그룹화, 통계값 계산, 필터링 이라는 복잡한 데이터처리를 해보도록 하겠습니다.</div>
<div style="background-color: white; box-sizing: border-box; color: #333333; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 14px; margin-bottom: 10px;">
<br /></div>
<pre class="r" style="background-color: whitesmoke; border-radius: 4px; border: 1px solid rgb(204, 204, 204); box-sizing: border-box; color: #333333; font-size: 13px; line-height: 1.42857; margin-bottom: 10px; overflow: auto; padding: 9.5px; word-break: break-all; word-wrap: break-word;"><code class="hljs" style="background-color: transparent; border-radius: 0px; box-sizing: border-box; color: inherit; font-size: inherit; padding: 0px; white-space: pre-wrap;">results2 = microbenchmark(
`data.table` = df_dt[, .(mean_delay = mean(dep_delay, na.rm = <span class="hljs-literal" style="box-sizing: border-box; color: #990073;">TRUE</span>)),
by = c(<span class="hljs-string" style="box-sizing: border-box; color: #dd1144;">'year'</span>, <span class="hljs-string" style="box-sizing: border-box; color: #dd1144;">'month'</span>, <span class="hljs-string" style="box-sizing: border-box; color: #dd1144;">'day'</span>, <span class="hljs-string" style="box-sizing: border-box; color: #dd1144;">'carrier'</span>, <span class="hljs-string" style="box-sizing: border-box; color: #dd1144;">'origin'</span>)][mean_delay >= <span class="hljs-number" style="box-sizing: border-box; color: #009999;">10</span>],
`dplyr` = df_tb %>%
group_by(year, month, day, carrier, origin) %>%
summarize(mean_delay = mean(dep_delay, na.rm = <span class="hljs-literal" style="box-sizing: border-box; color: #990073;">TRUE</span>)) %>%
ungroup() %>%
filter(mean_delay >= <span class="hljs-number" style="box-sizing: border-box; color: #009999;">10</span>),
`dtplyr` = df_lz %>%
group_by(year, month, day, carrier, origin) %>%
summarize(mean_delay = mean(dep_delay, na.rm = <span class="hljs-literal" style="box-sizing: border-box; color: #990073;">TRUE</span>)) %>%
ungroup() %>%
filter(mean_delay >= <span class="hljs-number" style="box-sizing: border-box; color: #009999;">10</span>) %>%
as_tibble(),
times = <span class="hljs-number" style="box-sizing: border-box; color: #009999;">100</span>
)
results2</code></pre>
<pre style="background-color: white; border-radius: 4px; border: 1px solid rgb(204, 204, 204); box-sizing: border-box; color: #333333; font-size: 13px; line-height: 1.42857; margin-bottom: 10px; overflow: auto; padding: 9.5px; word-break: break-all; word-wrap: break-word;"><code class="hljs" style="background-color: transparent; border-radius: 0px; box-sizing: border-box; color: inherit; font-size: inherit; padding: 0px; white-space: pre-wrap;">## Unit: milliseconds
## expr min lq mean median uq max neval cld
## data.table 14.1369 16.05185 17.85918 16.82690 18.81835 25.7218 100 a
## dplyr 71.1181 81.33950 91.00665 90.43740 99.06195 130.1543 100 c
## dtplyr 14.9752 19.12145 22.18545 20.24325 21.60995 148.0419 100 b</code></pre>
<pre class="r" style="background-color: whitesmoke; border-radius: 4px; border: 1px solid rgb(204, 204, 204); box-sizing: border-box; color: #333333; font-size: 13px; line-height: 1.42857; margin-bottom: 10px; overflow: auto; padding: 9.5px; word-break: break-all; word-wrap: break-word;"><code class="hljs" style="background-color: transparent; border-radius: 0px; box-sizing: border-box; color: inherit; font-size: inherit; padding: 0px; white-space: pre-wrap;">autoplot(results2) +
aes(fill = expr) +
theme_bw() +
labs(title = <span class="hljs-string" style="box-sizing: border-box; color: #dd1144;">"group_by, mean, filter"</span>)</code></pre>
<div style="background-color: white; box-sizing: border-box; color: #333333; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 14px; margin-bottom: 10px;">
<br /></div>
<div style="background-color: white; box-sizing: border-box; color: #333333; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 14px; margin-bottom: 10px;">
<img src="data:image/png;base64,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" style="border: 0px; box-sizing: border-box; height: auto; max-width: 100%; vertical-align: middle;" width="672" /></div>
<div style="background-color: white; box-sizing: border-box; color: #333333; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 14px; margin-bottom: 10px;">
<br /></div>
<div style="background-color: white; box-sizing: border-box; color: #333333; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 14px; margin-bottom: 10px;">
data.table과 dtply이 dplyr에 비해 압도적인 속도 차이를 보입니다. 이러한 차이는 데이터 크기가 늘어날수록, 그리고 데이터 처리 구조가 복잡해 질수록 늘어나게 됩니다.</div>
<div style="background-color: white; box-sizing: border-box; color: #333333; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 14px; margin-bottom: 10px;">
이처럼 dtplyr은 기존 dplyr 문법을 활용하여 data.table과 거의 비슷한 성능을 내는 보물같은 패키지입니다.</div>
Unknownnoreply@blogger.com1tag:blogger.com,1999:blog-23651150467485474.post-89328715436505168462019-09-17T16:22:00.000+09:002019-09-18T10:19:09.588+09:00RSelenium (셀레니움)을 이용한 동적 웹페이지 크롤링하기<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5aA_OBlOO-jNXVFPE4zdmhUIDshKE_REShF24C4Tj2r_Tk4tvqO99gA9bA2zVj694ATIEurV0El4s9pX-IQo9VcI4mew2RpjBiMJ8SHov07GgbV8oXZng8_iOg52WHZMzeqybRtJWJw/s1600/1_hdbXQfve5Yfuo0qEnS8K9Q.jpeg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="385" data-original-width="700" height="176" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5aA_OBlOO-jNXVFPE4zdmhUIDshKE_REShF24C4Tj2r_Tk4tvqO99gA9bA2zVj694ATIEurV0El4s9pX-IQo9VcI4mew2RpjBiMJ8SHov07GgbV8oXZng8_iOg52WHZMzeqybRtJWJw/s320/1_hdbXQfve5Yfuo0qEnS8K9Q.jpeg" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div style="background-color: white; color: #444444; font-family: arial, tahoma, helvetica, freesans, sans-serif; font-size: 13px; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEggVFfYoCDi7dLAjOBhWu25VnnQc3ZdE1byunsCPV0a8M2tIsJpBeeRu9mAbbG44rfdJatb_5EQLVZU5Kk3DZrBFiwheSPEDZjswR9UlD2TE-EXP0SsOig5eSd9SsQiEXewJxhOp8a6yw/s1600/R%25EC%259D%2584+%25EC%259D%25B4%25EC%259A%25A9%25ED%2595%259C+%25ED%2580%2580%25ED%258A%25B8+%25ED%2588%25AC%25EC%259E%2590+%25ED%258F%25AC%25ED%258A%25B8%25ED%258F%25B4%25EB%25A6%25AC%25EC%2598%25A4+%25EB%25A7%258C%25EB%2593%25A4%25EA%25B8%25B0_%25EC%259E%2585%25EC%25B2%25B4.png" imageanchor="1" style="clear: right; color: #4d469c; margin-bottom: 1em; margin-left: 1em; text-decoration-line: none;"><img border="0" data-original-height="1600" data-original-width="1600" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEggVFfYoCDi7dLAjOBhWu25VnnQc3ZdE1byunsCPV0a8M2tIsJpBeeRu9mAbbG44rfdJatb_5EQLVZU5Kk3DZrBFiwheSPEDZjswR9UlD2TE-EXP0SsOig5eSd9SsQiEXewJxhOp8a6yw/s320/R%25EC%259D%2584+%25EC%259D%25B4%25EC%259A%25A9%25ED%2595%259C+%25ED%2580%2580%25ED%258A%25B8+%25ED%2588%25AC%25EC%259E%2590+%25ED%258F%25AC%25ED%258A%25B8%25ED%258F%25B4%25EB%25A6%25AC%25EC%2598%25A4+%25EB%25A7%258C%25EB%2593%25A4%25EA%25B8%25B0_%25EC%259E%2585%25EC%25B2%25B4.png" style="background: transparent; border-radius: 0px; border: 1px solid transparent; box-shadow: rgba(0, 0, 0, 0.2) 0px 0px 0px; padding: 8px; position: relative;" width="320" /></a></div>
<div style="background-color: white; color: #444444; font-family: arial, tahoma, helvetica, freesans, sans-serif; font-size: 13px; text-align: center;">
<b><br /></b></div>
<div style="background-color: white; color: #444444; font-family: arial, tahoma, helvetica, freesans, sans-serif; font-size: 13px; text-align: center;">
<b><br /></b></div>
<div style="background-color: white; color: #444444; font-family: arial, tahoma, helvetica, freesans, sans-serif; font-size: 13px; text-align: center;">
<b>'R을 이용한 퀀트 투자 포트폴리오 만들기'가 출간 되었습니다.</b></div>
<div style="background-color: white; color: #444444; font-family: arial, tahoma, helvetica, freesans, sans-serif; font-size: 13px; text-align: center;">
<b>많은 관심 부탁드리겠습니다.</b></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div style="background-color: white; color: #444444; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13px; text-align: center;">
<span style="font-family: arial, tahoma, helvetica, freesans, sans-serif;"><b>↓↓ 구매링크 ↓↓</b></span></div>
<div style="background-color: white; color: #444444; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13px; text-align: center;">
<span style="font-family: arial, tahoma, helvetica, freesans, sans-serif;"><b><br /></b></span></div>
<div style="background-color: white; color: #444444; font-family: arial, tahoma, helvetica, freesans, sans-serif; font-size: 13px; text-align: center;">
<span style="color: #0000ee;"><b><u><a href="http://bit.ly/2ZaG5Bb" style="color: #4d469c; text-decoration-line: none;" target="_blank">http://bit.ly/2ZaG5Bb</a></u></b></span></div>
<div>
<span style="color: #0000ee;"><b><br /></b></span></div>
<br />
일반적인 (정적) 웹페이지는 서버에 미리 저장된 파일을 그대로 웹페이지에 전달하므로, 손쉽게 크롤링 할 수 있습니다.<br />
<br />
<div style="text-align: center;">
<img height="116" src="https://t1.daumcdn.net/cfile/tistory/24148634579822C52B" width="640" /></div>
<br />
반면 동적 웹페이지는 서버에 있는 데이터들이 스크립트에 의해 가공처리한 후 생성되어 웹 페이지에 전달되므로, 웹페이지가 계속해서 바뀌게 됩니다. 따라서 일반적을 방법으로는 크롤링할 수 없습니다.<br />
<br />
<div style="text-align: center;">
<img alt="dynamic-web.png" src="http://i1.wp.com/lh3.googleusercontent.com/-1jVzhuqATjw/Vqd54V1mrtI/AAAAAAAAACc/Cjt-etlXrHc/w720-o/dynamic-web.png?w=734&ssl=1" height="206" width="640" /></div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: left;">
네이버의 요약 재무제표 항목 역시 이러한 동적 웹페이지로 이루어져 있어 기존 방식으로 크롤링 하려면 매우 번거롭지만, 셀레니움을 이용할 경우 손쉽게 크롤링할 수 있습니다.</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<b><i><span style="color: red;">Selenium은 주로 웹앱을 테스트하는데 이용하는 프레임워크로써, webdriver라는 API를 통해 운영체제에 설치된 Chrome등의 브라우저를 제어합니다.</span></i></b></div>
<b><i><span style="color: red;"><br /></span></i></b>
<b><i><span style="color: red;">브라우저를 직접 동작시킨다는 것은 JavaScript를 이용해 비동기적으로 혹은 뒤늦게 불러와지는 컨텐츠들을 가져올 수 있다는 것입니다. 즉, ‘눈에 보이는’ 컨텐츠라면 모두 가져올 수 있으며, JavaScript로 렌더링이 완료된 후의 DOM결과물에 접근이 가능합니다.</span></i></b><br />
<br />
<span style="font-size: x-small;">(사실 몰라도 됩니다...)</span><br />
<br />
먼저 아래 3개 파일을 본인의 OS에 맞게 다운로드 받은 후, 하나의 폴더에 저장해줍니다. geckodriver chromeDriver는 압축을 해제하며, selenium은 그대로 둡니다.<br />
<br />
chromeDriver의 경우 본인이 사용하고 있는 크롬 버젼과 같은 것을 다운로드해야 하며, 해당 버젼의 확인은 크롬창에서 [도움말] -> [Chrome 정보]를 통해 확인할 수 있습니다.<br />
<br />
<ul>
<li>selenium: <a href="https://www.seleniumhq.org/download/" target="_blank">https://www.seleniumhq.org/download/</a></li>
<li>geckodriver: <a href="https://github.com/mozilla/geckodriver/releases/tag/v0.17.0">https://github.com/mozilla/geckodriver/releases/tag/v0.17.0</a></li>
<li>chromeDriver: <a href="https://sites.google.com/a/chromium.org/chromedriver/downloads" target="_blank">https://sites.google.com/a/chromium.org/chromedriver/downloads</a></li>
</ul>
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhTpH7uYAUikiwy0xwoeAHqCDk4U5cDUtLMFxRJl_2aNX8D5EO8zWD8U0P5X1UsMngBgJUwe3-iAdVU1Cru_s_-D8c-5EZv-QBL7s0ngc0hkiEtcu9l7L-yQ-r3uu0f1xFuz4I9ClxISA/s1600/selenium_version.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="385" data-original-width="948" height="258" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhTpH7uYAUikiwy0xwoeAHqCDk4U5cDUtLMFxRJl_2aNX8D5EO8zWD8U0P5X1UsMngBgJUwe3-iAdVU1Cru_s_-D8c-5EZv-QBL7s0ngc0hkiEtcu9l7L-yQ-r3uu0f1xFuz4I9ClxISA/s640/selenium_version.png" width="640" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgdwq6R5LT72UaZlt5fQfZNtbS15BklJNVaxMUOlxtEjtcEagCcr1C_VfDS2F_5r1wjELFOL33f8GHnqG42IzTiN7G3drF25ZCtIMJosy8lV-JdLiEsNHfPXunIya_ejTlyJufK5ahVNQ/s1600/selenium_down.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="182" data-original-width="482" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgdwq6R5LT72UaZlt5fQfZNtbS15BklJNVaxMUOlxtEjtcEagCcr1C_VfDS2F_5r1wjELFOL33f8GHnqG42IzTiN7G3drF25ZCtIMJosy8lV-JdLiEsNHfPXunIya_ejTlyJufK5ahVNQ/s640/selenium_down.png" width="640" /></a></div>
<br />
<br />
<br />
윈도우에서 cmd를 통해 명령 프롬프트를 연 후, 아래 명령어를 입력합니다.<br />
<br />
<b>C:\Rselenium</b>에는 파일은 <b><span style="color: red;">다운로드 받은 폴더의 위치</span></b>를 입력하며, standalone 뒤 3.141.59는 본인이 다운로드 받은 <b>selenium-server-standalone 파일의 버젼</b>과 같은 숫자를 입력합니다.<br />
<br />
해당 cmd 창은 계속 열어두어야 합니다.<br />
<br />
<pre style="background-color: white; border-radius: 4px; border: 1px solid rgb(204, 204, 204); box-sizing: border-box; color: #333333; font-size: 13px; line-height: 1.42857; margin-bottom: 10px; overflow-wrap: break-word; overflow: auto; padding: 9.5px; word-break: break-all;"><code class="hljs" style="background-color: transparent; border-radius: 0px; box-sizing: border-box; color: inherit; font-size: inherit; padding: 0px; white-space: pre-wrap;">cd C:\Rselenium
java -Dwebdriver.gecko.driver="geckodriver.exe" -jar selenium-server-standalone-3.141.59.jar -port 4445</code></pre>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjndEleh_fiixMSvkFr4JrSkBt-8Go8nA8tVts5tqVgzVwoUCvZAPT75wRMi0laUTrgYUoW3H1-pIiAp1C3Y-ZLmDobOOn_3kdQuiVgkq0KL1Oq0-FgXZ-99klOm4LhF8lDq2f2EM5Z3g/s1600/selenium_port.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="215" data-original-width="952" height="144" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjndEleh_fiixMSvkFr4JrSkBt-8Go8nA8tVts5tqVgzVwoUCvZAPT75wRMi0laUTrgYUoW3H1-pIiAp1C3Y-ZLmDobOOn_3kdQuiVgkq0KL1Oq0-FgXZ-99klOm4LhF8lDq2f2EM5Z3g/s640/selenium_port.png" width="640" /></a></div>
<br />
<br />
<pre class="r" style="background-color: whitesmoke; border-radius: 4px; border: 1px solid rgb(204, 204, 204); box-sizing: border-box; color: #333333; font-size: 13px; line-height: 1.42857; margin-bottom: 10px; overflow-wrap: break-word; overflow: auto; padding: 9.5px; word-break: break-all;"><code class="hljs" style="background-color: transparent; border-radius: 0px; box-sizing: border-box; color: inherit; font-size: inherit; padding: 0px; white-space: pre-wrap;">install.packages(<span class="hljs-string" style="box-sizing: border-box; color: #dd1144;">'RSelenium'</span>)
install.packages(<span class="hljs-string" style="box-sizing: border-box; color: #dd1144;">'seleniumPipes'</span>)</code></pre>
<pre class="r" style="background-color: whitesmoke; border-radius: 4px; border: 1px solid rgb(204, 204, 204); box-sizing: border-box; color: #333333; font-size: 13px; line-height: 1.42857; margin-bottom: 10px; overflow-wrap: break-word; overflow: auto; padding: 9.5px; word-break: break-all;"><code class="hljs" style="background-color: transparent; border-radius: 0px; box-sizing: border-box; color: inherit; font-size: inherit; padding: 0px; white-space: pre-wrap;"><span class="hljs-keyword" style="box-sizing: border-box; color: #990000; font-weight: bold;">library</span>(RSelenium)
<span class="hljs-keyword" style="box-sizing: border-box; color: #990000; font-weight: bold;">library</span>(seleniumPipes)
<span class="hljs-keyword" style="box-sizing: border-box; color: #990000; font-weight: bold;">library</span>(rvest)
<span class="hljs-keyword" style="box-sizing: border-box; color: #990000; font-weight: bold;">library</span>(httr)</code></pre>
<span style="background-color: white; color: #333333; font-family: "helvetica neue" , "helvetica" , "arial" , sans-serif; font-size: 14px;"><br /></span>
<span style="background-color: white; color: #333333; font-family: "helvetica neue" , "helvetica" , "arial" , sans-serif; font-size: 14px;">셀레니움 관련 패키지인 RSelenium와 seleniumPipes를 인스톨 한 후, 관련 패키지들을 열어줍니다.</span><br />
<span style="background-color: white; color: #333333; font-family: "helvetica neue" , "helvetica" , "arial" , sans-serif; font-size: 14px;"><br /></span>
<span style="background-color: white; color: #333333; font-family: "helvetica neue" , "helvetica" , "arial" , sans-serif; font-size: 14px;"><br /></span>
<br />
<pre class="r" style="background-color: whitesmoke; border-radius: 4px; border: 1px solid rgb(204, 204, 204); box-sizing: border-box; color: #333333; font-size: 13px; line-height: 1.42857; margin-bottom: 10px; overflow-wrap: break-word; overflow: auto; padding: 9.5px; word-break: break-all;"><code class="hljs" style="background-color: transparent; border-radius: 0px; box-sizing: border-box; color: inherit; font-size: inherit; padding: 0px; white-space: pre-wrap;">remDr = remoteDriver(
remoteServerAddr=<span class="hljs-string" style="box-sizing: border-box; color: #dd1144;">"localhost"</span>,
port=<span class="hljs-number" style="box-sizing: border-box; color: #009999;">4445L</span>,
browserName=<span class="hljs-string" style="box-sizing: border-box; color: #dd1144;">"chrome"</span>)
remDr$open()</code></pre>
<pre style="background-color: white; border-radius: 4px; border: 1px solid rgb(204, 204, 204); box-sizing: border-box; color: #333333; font-size: 13px; line-height: 1.42857; margin-bottom: 10px; overflow-wrap: break-word; overflow: auto; padding: 9.5px; word-break: break-all;"><code class="hljs" style="background-color: transparent; border-radius: 0px; box-sizing: border-box; color: inherit; font-size: inherit; padding: 0px; white-space: pre-wrap;">## [1] "Connecting to remote server"
## $acceptInsecureCerts
## [1] FALSE
##
## $browserName
## [1] "chrome"
##
## $browserVersion
## [1] "77.0.3865.75"
##
## $chrome
## $chrome$chromedriverVersion
## [1] "76.0.3809.126 (d80a294506b4c9d18015e755cee48f953ddc3f2f-refs/branch-heads/3809@{#1024})"
##
## $chrome$userDataDir
## [1] "C:\\Users\\Henry\\AppData\\Local\\Temp\\scoped_dir11848_77181124"
##
##
## $`goog:chromeOptions`
## $`goog:chromeOptions`$debuggerAddress
## [1] "localhost:54111"
##
##
## $networkConnectionEnabled
## [1] FALSE
##
## $pageLoadStrategy
## [1] "normal"
##
## $platformName
## [1] "windows nt"
##
## $proxy
## named list()
##
## $setWindowRect
## [1] TRUE
##
## $strictFileInteractability
## [1] FALSE
##
## $timeouts
## $timeouts$implicit
## [1] 0
##
## $timeouts$pageLoad
## [1] 300000
##
## $timeouts$script
## [1] 30000
##
##
## $unhandledPromptBehavior
## [1] "dismiss and notify"
##
## $webdriver.remote.sessionid
## [1] "6de07eeb6dfc9fd8203ce2708342ca05"
##
## $id
## [1] "6de07eeb6dfc9fd8203ce2708342ca05"</code></pre>
<pre class="r" style="background-color: whitesmoke; border-radius: 4px; border: 1px solid rgb(204, 204, 204); box-sizing: border-box; color: #333333; font-size: 13px; line-height: 1.42857; margin-bottom: 10px; overflow-wrap: break-word; overflow: auto; padding: 9.5px; word-break: break-all;"><code class="hljs" style="background-color: transparent; border-radius: 0px; box-sizing: border-box; color: inherit; font-size: inherit; padding: 0px; white-space: pre-wrap;">remDr$navigate(<span class="hljs-string" style="box-sizing: border-box; color: #dd1144;">'https://finance.naver.com/item/coinfo.nhn?code=005930&target=finsum_more'</span>)</code></pre>
<span style="background-color: white; color: #333333; font-family: "helvetica neue" , "helvetica" , "arial" , sans-serif; font-size: 14px;"><br /></span>
<span style="background-color: white; color: #333333; font-family: "helvetica neue" , "helvetica" , "arial" , sans-serif; font-size: 14px;">먼저 </span><code style="background-color: rgba(0, 0, 0, 0.04); border-radius: 4px; box-sizing: border-box; color: #333333; font-size: 12.6px; padding: 2px 4px; white-space: pre;">remoteDriver()</code><span style="background-color: white; color: #333333; font-family: "helvetica neue" , "helvetica" , "arial" , sans-serif; font-size: 14px;"> 함수를 통해 4445번 포트와 크롬을 연결시켜 주며, </span><code style="background-color: rgba(0, 0, 0, 0.04); border-radius: 4px; box-sizing: border-box; color: #333333; font-size: 12.6px; padding: 2px 4px; white-space: pre;">remDr$open()</code><span style="background-color: white; color: #333333; font-family: "helvetica neue" , "helvetica" , "arial" , sans-serif; font-size: 14px;"> 함수를 입력하면 크롬 웹창이 열리게 됩니다. </span><code style="background-color: rgba(0, 0, 0, 0.04); border-radius: 4px; box-sizing: border-box; color: #333333; font-size: 12.6px; padding: 2px 4px; white-space: pre;">remDr$navigate()</code><span style="background-color: white; color: #333333; font-family: "helvetica neue" , "helvetica" , "arial" , sans-serif; font-size: 14px;"> 함수 내부에 크롤링하고자 하는 사이트 주소를 입력하면 해당 주소로 이동하게 됩니다.</span><br />
<span style="background-color: white; color: #333333; font-family: "helvetica neue" , "helvetica" , "arial" , sans-serif; font-size: 14px;"><br /></span>
<span style="background-color: white; color: #333333; font-family: "helvetica neue" , "helvetica" , "arial" , sans-serif; font-size: 14px;">현재 페이지가 셀레니움에 의해 동작되므로, </span><span style="background-color: white; box-sizing: border-box; color: #333333; font-family: "helvetica neue" , "helvetica" , "arial" , sans-serif; font-size: 14px; font-weight: 700;">자동화된 테스트 소프트웨어에 의해 제어되고 있습니다.</span><span style="background-color: white; color: #333333; font-family: "helvetica neue" , "helvetica" , "arial" , sans-serif; font-size: 14px;"> 라는 문구가 뜹니다.</span><br />
<span style="background-color: white; color: #333333; font-family: "helvetica neue" , "helvetica" , "arial" , sans-serif; font-size: 14px;"><br /></span>
<span style="background-color: white; color: #333333; font-family: "helvetica neue" , "helvetica" , "arial" , sans-serif; font-size: 14px;"><br /></span>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiRMHZncD5okA1ZjXgfaBMuY1USmRMMZFF_i-VtqlTFV-0odkqcXkSQhTtgEBVMm40zDZeyCaU0Nn3DaaFM2tr1CkFWy067qLzYA0jmtItd5EQUiruHTSf3oWHResf5qGciXALHmTl0yQ/s1600/selenium_new.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="976" data-original-width="889" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiRMHZncD5okA1ZjXgfaBMuY1USmRMMZFF_i-VtqlTFV-0odkqcXkSQhTtgEBVMm40zDZeyCaU0Nn3DaaFM2tr1CkFWy067qLzYA0jmtItd5EQUiruHTSf3oWHResf5qGciXALHmTl0yQ/s400/selenium_new.png" width="363" /></a></div>
<span style="background-color: white; color: #333333; font-family: "helvetica neue" , "helvetica" , "arial" , sans-serif; font-size: 14px;"><br /></span>
<span style="background-color: white; color: #333333; font-family: "helvetica neue" , "helvetica" , "arial" , sans-serif; font-size: 14px;"><br /></span>
<span style="background-color: white; color: #333333; font-family: "helvetica neue" , "helvetica" , "arial" , sans-serif; font-size: 14px;">이제 Financial Summary에 해당하는 부분을 찾아나갑니다.</span><br />
<span style="background-color: white; color: #333333; font-family: "helvetica neue" , "helvetica" , "arial" , sans-serif; font-size: 14px;"><br /></span>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNVFFB3QdZJahWnEyGTQoR958Js5fmjuHidRAkAPi9AsNxpWKhsrP0z5TIdtciVAVT10K4BnXpi3QmCbE1LqS8jejrVRqfs_Y4JgoLBqnLl-dYrhAq4bwjWh9bgOM3kQ0HD9oEoRnB_w/s1600/selenium_coin_cp.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="986" data-original-width="1280" height="492" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNVFFB3QdZJahWnEyGTQoR958Js5fmjuHidRAkAPi9AsNxpWKhsrP0z5TIdtciVAVT10K4BnXpi3QmCbE1LqS8jejrVRqfs_Y4JgoLBqnLl-dYrhAq4bwjWh9bgOM3kQ0HD9oEoRnB_w/s640/selenium_coin_cp.png" width="640" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<span style="background-color: white; color: #333333; font-family: "helvetica neue" , "helvetica" , "arial" , sans-serif; font-size: 14px;"><br /></span>
<span style="background-color: white; color: #333333; font-family: "helvetica neue" , "helvetica" , "arial" , sans-serif; font-size: 14px;"><br /></span>
<span style="background-color: white; color: #333333; font-family: "helvetica neue" , "helvetica" , "arial" , sans-serif; font-size: 14px;">해당 페이지는 iframe 내부에서 javascript를 통해 타 페이지의 데이터가 들어와있는 형태이므로, 해당 iframe 내부로 접근해야 합니다.</span><br />
<span style="background-color: white; color: #333333; font-family: "helvetica neue" , "helvetica" , "arial" , sans-serif; font-size: 14px;"><br /></span>
<br />
<pre class="r" style="background-color: whitesmoke; border-radius: 4px; border: 1px solid rgb(204, 204, 204); box-sizing: border-box; color: #333333; font-size: 13px; line-height: 1.42857; margin-bottom: 10px; overflow-wrap: break-word; overflow: auto; padding: 9.5px; word-break: break-all;"><code class="hljs" style="background-color: transparent; border-radius: 0px; box-sizing: border-box; color: inherit; font-size: inherit; padding: 0px; white-space: pre-wrap;"><span class="hljs-comment" style="box-sizing: border-box; color: #999988; font-style: italic;"># ID 찾아내기</span>
frames = remDr$findElements(using = <span class="hljs-string" style="box-sizing: border-box; color: #dd1144;">"id"</span>,
value = <span class="hljs-string" style="box-sizing: border-box; color: #dd1144;">'coinfo_cp'</span>)
print(frames)</code></pre>
<pre style="background-color: white; border-radius: 4px; border: 1px solid rgb(204, 204, 204); box-sizing: border-box; color: #333333; font-size: 13px; line-height: 1.42857; margin-bottom: 10px; overflow-wrap: break-word; overflow: auto; padding: 9.5px; word-break: break-all;"><code class="hljs" style="background-color: transparent; border-radius: 0px; box-sizing: border-box; color: inherit; font-size: inherit; padding: 0px; white-space: pre-wrap;">## [[1]]
## [1] "remoteDriver fields"
## $remoteServerAddr
## [1] "localhost"
##
## $port
## [1] 4445
##
## $browserName
## [1] "chrome"
##
## $version
## [1] ""
##
## $platform
## [1] "ANY"
##
## $javascript
## [1] TRUE
##
## $nativeEvents
## [1] TRUE
##
## $extraCapabilities
## list()
##
## [1] "webElement fields"
## $elementId
## [1] "f0bfdfff-3c16-4331-ad30-6df5436064cd"</code></pre>
<pre class="r" style="background-color: whitesmoke; border-radius: 4px; border: 1px solid rgb(204, 204, 204); box-sizing: border-box; color: #333333; font-size: 13px; line-height: 1.42857; margin-bottom: 10px; overflow-wrap: break-word; overflow: auto; padding: 9.5px; word-break: break-all;"><code class="hljs" style="background-color: transparent; border-radius: 0px; box-sizing: border-box; color: inherit; font-size: inherit; padding: 0px; white-space: pre-wrap;"><span class="hljs-comment" style="box-sizing: border-box; color: #999988; font-style: italic;"># Frame 안으로 접근</span>
remDr$switchToFrame(frames[[<span class="hljs-number" style="box-sizing: border-box; color: #009999;">1</span>]])</code></pre>
<span style="background-color: white; color: #333333; font-family: "helvetica neue" , "helvetica" , "arial" , sans-serif; font-size: 14px;"><br /></span>
<br />
<div style="background-color: white; box-sizing: border-box; color: #333333; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 14px; margin-bottom: 10px;">
<code style="background-color: rgba(0, 0, 0, 0.04); border-radius: 4px; box-sizing: border-box; color: inherit; font-size: 12.6px; padding: 2px 4px; white-space: pre;">remDr$findElements()</code> 함수는 원하는 요소로 접근이 가능합니다. 위 iframe은 coinfo_cp라는 id를 사용하고 있으므로 using에는 id를, value에는 coinfo_cp를 입력하며, 이 외에도 xpath, css selector 등 다양한 html 태그를 통해 원하는 html 정보를 찾을 수 있습니다.</div>
<div style="background-color: white; box-sizing: border-box; color: #333333; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 14px; margin-bottom: 10px;">
그 후 <code style="background-color: rgba(0, 0, 0, 0.04); border-radius: 4px; box-sizing: border-box; color: inherit; font-size: 12.6px; padding: 2px 4px; white-space: pre;">remDr$switchToFrame()</code> 함수를 통해 iframe 내부로 접근합니다.</div>
<div style="background-color: white; box-sizing: border-box; color: #333333; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 14px; margin-bottom: 10px;">
우리가 필요한 데이터는 연간 재무제표 이므로, [연간]에 해당하는 탭의 위치를 찾은 후 Xpath를 복사합니다. 해당 위치는 다음과 같습니다.</div>
<pre style="background-color: white; border-radius: 4px; border: 1px solid rgb(204, 204, 204); box-sizing: border-box; color: #333333; font-size: 13px; line-height: 1.42857; margin-bottom: 10px; overflow-wrap: break-word; overflow: auto; padding: 9.5px; word-break: break-all;"><code class="hljs" style="background-color: transparent; border-radius: 0px; box-sizing: border-box; color: inherit; font-size: inherit; padding: 0px; white-space: pre-wrap;">//*[@id="cns_Tab21"]</code></pre>
<div style="background-color: white; box-sizing: border-box; color: #333333; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 14px; margin-bottom: 10px;">
<br /></div>
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYtIdfbwM8iTJV1FvfTH4kQXeq3kn6zcBM1QbtXbETqbvTWc7DLj7INJyvULeXlWl9FP7dGeamckJolAUDVTI1U_MBfMHtkJkkysTcQAYTKI8GXKmyTxqc2nctv5JYsdIE0iyOdFZnhg/s1600/selenium_yr.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" data-original-height="977" data-original-width="1280" height="488" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYtIdfbwM8iTJV1FvfTH4kQXeq3kn6zcBM1QbtXbETqbvTWc7DLj7INJyvULeXlWl9FP7dGeamckJolAUDVTI1U_MBfMHtkJkkysTcQAYTKI8GXKmyTxqc2nctv5JYsdIE0iyOdFZnhg/s640/selenium_yr.png" width="640" /></a><br />
<br />
<br />
<pre class="r" style="background-color: whitesmoke; border-radius: 4px; border: 1px solid rgb(204, 204, 204); box-sizing: border-box; color: #333333; font-size: 13px; line-height: 1.42857; margin-bottom: 10px; overflow-wrap: break-word; overflow: auto; padding: 9.5px; word-break: break-all;"><code class="hljs" style="background-color: transparent; border-radius: 0px; box-sizing: border-box; color: inherit; font-size: inherit; padding: 0px; white-space: pre-wrap;"><span class="hljs-comment" style="box-sizing: border-box; color: #999988; font-style: italic;"># 연간 클릭</span>
remDr$findElement(using = <span class="hljs-string" style="box-sizing: border-box; color: #dd1144;">'xpath'</span>,
value =<span class="hljs-string" style="box-sizing: border-box; color: #dd1144;">'//*[@id="cns_Tab21"]'</span>)$clickElement()</code></pre>
<code style="background-color: rgba(0, 0, 0, 0.04); border-radius: 4px; box-sizing: border-box; color: #333333; font-size: 12.6px; padding: 2px 4px; white-space: pre;">remDr$findElement()</code><span style="background-color: white; color: #333333; font-family: "helvetica neue" , "helvetica" , "arial" , sans-serif; font-size: 14px;"> 함수 내부에 xpath를 사용하여 해당 위치를 찾은 후, </span><code style="background-color: rgba(0, 0, 0, 0.04); border-radius: 4px; box-sizing: border-box; color: #333333; font-size: 12.6px; padding: 2px 4px; white-space: pre;">$clickElement()</code><span style="background-color: white; color: #333333; font-family: "helvetica neue" , "helvetica" , "arial" , sans-serif; font-size: 14px;">를 입력하면 해당 위치를 클릭하게 됩니다. 이제 연간 재무제표가 표시된 페이지를 읽어오도록 하겠습니다.</span><br />
<span style="background-color: white; color: #333333; font-family: "helvetica neue" , "helvetica" , "arial" , sans-serif; font-size: 14px;"><br /></span>
<span style="background-color: white; color: #333333; font-family: "helvetica neue" , "helvetica" , "arial" , sans-serif; font-size: 14px;"><br /></span>
<span style="background-color: white; color: #333333; font-family: "helvetica neue" , "helvetica" , "arial" , sans-serif; font-size: 14px;"><br /></span>
<br />
<pre class="r" style="background-color: whitesmoke; border-radius: 4px; border: 1px solid rgb(204, 204, 204); box-sizing: border-box; color: #333333; font-size: 13px; line-height: 1.42857; margin-bottom: 10px; overflow-wrap: break-word; overflow: auto; padding: 9.5px; word-break: break-all;"><code class="hljs" style="background-color: transparent; border-radius: 0px; box-sizing: border-box; color: inherit; font-size: inherit; padding: 0px; white-space: pre-wrap;">page_parse = remDr$getPageSource()[[<span class="hljs-number" style="box-sizing: border-box; color: #009999;">1</span>]]
page_html = page_parse %>% read_html()</code></pre>
<ol style="background-color: white; box-sizing: border-box; color: #333333; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 14px; margin-bottom: 10px; margin-top: 0px;">
<li style="box-sizing: border-box;"><code style="background-color: rgba(0, 0, 0, 0.04); border-radius: 4px; box-sizing: border-box; color: inherit; font-size: 12.6px; padding: 2px 4px; white-space: pre;">remDr$getPageSource()</code> 함수를 통해 페이지 소스를 읽어옵니다.</li>
<li style="box-sizing: border-box;"><code style="background-color: rgba(0, 0, 0, 0.04); border-radius: 4px; box-sizing: border-box; color: inherit; font-size: 12.6px; padding: 2px 4px; white-space: pre;">read_html()</code> 함수를 통해 HTML 정보만을 읽어옵니다. 이제 재무제표 데이터가 들어있는 테이블만 추출하면 됩니다.</li>
</ol>
<div>
<span style="color: #333333; font-family: "helvetica neue" , "helvetica" , "arial" , sans-serif;"><span style="font-size: 14px;"><br /></span></span></div>
<div>
<pre class="r" style="background-color: whitesmoke; border-radius: 4px; border: 1px solid rgb(204, 204, 204); box-sizing: border-box; color: #333333; font-size: 13px; line-height: 1.42857; margin-bottom: 10px; overflow-wrap: break-word; overflow: auto; padding: 9.5px; word-break: break-all;"><code class="hljs" style="background-color: transparent; border-radius: 0px; box-sizing: border-box; color: inherit; font-size: inherit; padding: 0px; white-space: pre-wrap;">Sys.setlocale(<span class="hljs-string" style="box-sizing: border-box; color: #dd1144;">'LC_ALL'</span>, <span class="hljs-string" style="box-sizing: border-box; color: #dd1144;">'English'</span>)
table = page_html %>% html_table(fill = <span class="hljs-literal" style="box-sizing: border-box; color: #990073;">TRUE</span>)
Sys.setlocale(<span class="hljs-string" style="box-sizing: border-box; color: #dd1144;">'LC_ALL'</span>, <span class="hljs-string" style="box-sizing: border-box; color: #dd1144;">'Korean'</span>)</code></pre>
<pre class="r" style="background-color: whitesmoke; border-radius: 4px; border: 1px solid rgb(204, 204, 204); box-sizing: border-box; color: #333333; font-size: 13px; line-height: 1.42857; margin-bottom: 10px; overflow-wrap: break-word; overflow: auto; padding: 9.5px; word-break: break-all;"><code class="hljs" style="background-color: transparent; border-radius: 0px; box-sizing: border-box; color: inherit; font-size: inherit; padding: 0px; white-space: pre-wrap;">df = table[[<span class="hljs-number" style="box-sizing: border-box; color: #009999;">13</span>]]
head(df)</code></pre>
</div>
<br />
<pre style="background-color: white; border-radius: 4px; border: 1px solid rgb(204, 204, 204); box-sizing: border-box; color: #333333; font-size: 13px; line-height: 1.42857; margin-bottom: 10px; overflow-wrap: break-word; overflow: auto; padding: 9.5px; word-break: break-all;"><code class="hljs" style="background-color: transparent; border-radius: 0px; box-sizing: border-box; color: inherit; font-size: inherit; padding: 0px; white-space: pre-wrap;">## 주요재무정보 연간
## 1 주요재무정보 2014/12\n\t\t\t\t\t\t\t\t\t(IFRS연결)
## 2 매출액 2,062,060
## 3 영업이익 250,251
## 4 영업이익(발표기준) 250,251
## 5 세전계속사업이익 278,750
## 6 당기순이익 233,944
## 연간
## 1 2015/12\n\t\t\t\t\t\t\t\t\t(IFRS연결)
## 2 2,006,535
## 3 264,134
## 4 264,134
## 5 259,610
## 6 190,601
## 연간
## 1 2016/12\n\t\t\t\t\t\t\t\t\t(IFRS연결)
## 2 2,018,667
## 3 292,407
## 4 292,407
## 5 307,137
## 6 227,261
## 연간
## 1 2017/12\n\t\t\t\t\t\t\t\t\t(IFRS연결)
## 2 2,395,754
## 3 536,450
## 4 536,450
## 5 561,960
## 6 421,867
## 연간
## 1 2018/12\n\t\t\t\t\t\t\t\t\t(IFRS연결)
## 2 2,437,714
## 3 588,867
## 4 588,867
## 5 611,600
## 6 443,449
## 연간
## 1 2019/12(E)\n\t\t\t\t\t\t\t\t\t(IFRS연결)
## 2 2,305,363
## 3 268,387
## 4
## 5 294,636
## 6 215,948
## 연간
## 1 2020/12(E)\n\t\t\t\t\t\t\t\t\t(IFRS연결)
## 2 2,469,186
## 3 354,097
## 4
## 5 381,833
## 6 279,894
## 연간
## 1 2021/12(E)\n\t\t\t\t\t\t\t\t\t(IFRS연결)
## 2 2,648,131
## 3 446,023
## 4
## 5 480,005
## 6 352,816</code></pre>
<br />
<ol style="background-color: white; box-sizing: border-box; color: #333333; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 14px; margin-bottom: 10px; margin-top: 0px;">
<li style="box-sizing: border-box;">로케일 언어를 English로 변경합니다.</li>
<li style="box-sizing: border-box;"><code style="background-color: rgba(0, 0, 0, 0.04); border-radius: 4px; box-sizing: border-box; color: inherit; font-size: 12.6px; padding: 2px 4px; white-space: pre;">html_table()</code> 함수를 통해 편하게 테이블 데이터만 추출할 수 있습니다.</li>
<li style="box-sizing: border-box;">다시 로케일 언어를 Korean으로 변경합니다.</li>
<li style="box-sizing: border-box;">총 19개 테이블 중 13번째 테이블이 연간 재무제표에 해당합니다. 만일 다른 테이블을 추출하고자 하면 해당 숫자만 변경해주면 됩니다.</li>
</ol>
<br />
<span style="background-color: white; color: #333333; font-family: "helvetica neue" , "helvetica" , "arial" , sans-serif; font-size: 14px;">우리가 원하는 연간 재무제표 데이터가 제대로 크롤링 되었으며, 간단한 클렌징 작업만 거치면 모든 작업이 완료됩니다.</span><br />
<br />
<pre class="r" style="background-color: whitesmoke; border-radius: 4px; border: 1px solid rgb(204, 204, 204); box-sizing: border-box; color: #333333; font-size: 13px; line-height: 1.42857; margin-bottom: 10px; overflow-wrap: break-word; overflow: auto; padding: 9.5px; word-break: break-all;"><code class="hljs" style="background-color: transparent; border-radius: 0px; box-sizing: border-box; color: inherit; font-size: inherit; padding: 0px; white-space: pre-wrap;"><span class="hljs-keyword" style="box-sizing: border-box; color: #990000; font-weight: bold;">library</span>(stringr)
<span class="hljs-keyword" style="box-sizing: border-box; color: #990000; font-weight: bold;">library</span>(magrittr)
rownames(df) = df[, <span class="hljs-number" style="box-sizing: border-box; color: #009999;">1</span>]
df = df[, -<span class="hljs-number" style="box-sizing: border-box; color: #009999;">1</span>]
colnames(df) = df[<span class="hljs-number" style="box-sizing: border-box; color: #009999;">1</span>, ]
df = df[-<span class="hljs-number" style="box-sizing: border-box; color: #009999;">1</span>, ]
colnames(df) = str_sub(colnames(df), <span class="hljs-number" style="box-sizing: border-box; color: #009999;">1</span>, <span class="hljs-number" style="box-sizing: border-box; color: #009999;">7</span>)
df = sapply(df, <span class="hljs-keyword" style="box-sizing: border-box; color: #990000; font-weight: bold;">function</span>(x) {
str_replace_all(x, <span class="hljs-string" style="box-sizing: border-box; color: #dd1144;">','</span>, <span class="hljs-string" style="box-sizing: border-box; color: #dd1144;">''</span>) %>%
as.numeric()
}) %>%
data.frame(., row.names = rownames(df))
head(df)</code></pre>
<pre style="background-color: white; border-radius: 4px; border: 1px solid rgb(204, 204, 204); box-sizing: border-box; color: #333333; font-size: 13px; line-height: 1.42857; margin-bottom: 10px; overflow-wrap: break-word; overflow: auto; padding: 9.5px; word-break: break-all;"><code class="hljs" style="background-color: transparent; border-radius: 0px; box-sizing: border-box; color: inherit; font-size: inherit; padding: 0px; white-space: pre-wrap;">## X2014.12 X2015.12 X2016.12 X2017.12 X2018.12 X2019.12
## 매출액 2062060 2006535 2018667 2395754 2437714 2305363
## 영업이익 250251 264134 292407 536450 588867 268387
## 영업이익(발표기준) 250251 264134 292407 536450 588867 NA
## 세전계속사업이익 278750 259610 307137 561960 611600 294636
## 당기순이익 233944 190601 227261 421867 443449 215948
## 당기순이익(지배) 230825 186946 224157 413446 438909 213435
## X2020.12 X2021.12
## 매출액 2469186 2648131
## 영업이익 354097 446023
## 영업이익(발표기준) NA NA
## 세전계속사업이익 381833 480005
## 당기순이익 279894 352816
## 당기순이익(지배) 275918 347589</code></pre>
<br />
<ol style="background-color: white; box-sizing: border-box; color: #333333; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 14px; margin-bottom: 10px; margin-top: 0px;">
<li style="box-sizing: border-box;">첫번째 열을 행이름으로 설정한 후, 해당 열을 삭제합니다.</li>
<li style="box-sizing: border-box;">첫번재 행을 열이름으로 설정한 후, 해당 행을 삭제합니다.</li>
<li style="box-sizing: border-box;">열이름에서 <code style="background-color: rgba(0, 0, 0, 0.04); border-radius: 4px; box-sizing: border-box; color: inherit; font-size: 12.6px; padding: 2px 4px; white-space: pre;">str_sub()</code> 함수를 이용해 1~7번째 글자만 선택합니다. (YYYY/MM)</li>
<li style="box-sizing: border-box;"><code style="background-color: rgba(0, 0, 0, 0.04); border-radius: 4px; box-sizing: border-box; color: inherit; font-size: 12.6px; padding: 2px 4px; white-space: pre;">sapply()</code> 함수 내에서 <code style="background-color: rgba(0, 0, 0, 0.04); border-radius: 4px; box-sizing: border-box; color: inherit; font-size: 12.6px; padding: 2px 4px; white-space: pre;">str_replace_all()</code> 함수를 이용해 모든 콤마(,)를 없앤 후 숫자 형태로 변경합니다.</li>
</ol>
<div style="background-color: white; box-sizing: border-box; color: #333333; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 14px; margin-bottom: 10px;">
<br /></div>
<div style="background-color: white; box-sizing: border-box; color: #333333; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 14px; margin-bottom: 10px;">
결과물을 출력해보면 클렌징 작업이 완료되었습니다.</div>
Unknownnoreply@blogger.com7tag:blogger.com,1999:blog-23651150467485474.post-50074618659767351432019-09-06T12:58:00.001+09:002019-09-09T08:46:38.331+09:00AWS를 이용한 투자 자동화 구축하기! (4) 샤이니 서버 설치 및 app 실행하기<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhtUvP5U2PxJU7sTNDE3l9RWWACKMjZKdHatSk8k38wbNm9MxMH83bYLI03hsSj_0s5e2pbWtMJI8_htvSrU5c_2PNyhx-Yq-qHeAHbH6ZQJxbROvXpnIp3qA0d-GKZVqtUSjX-5LpHrw/s1600/aws_process.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="263" data-original-width="568" height="296" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhtUvP5U2PxJU7sTNDE3l9RWWACKMjZKdHatSk8k38wbNm9MxMH83bYLI03hsSj_0s5e2pbWtMJI8_htvSrU5c_2PNyhx-Yq-qHeAHbH6ZQJxbROvXpnIp3qA0d-GKZVqtUSjX-5LpHrw/s640/aws_process.png" width="640" /></a></div>
<br />
<br />
<div style="color: #444444; font-family: arial, tahoma, helvetica, freesans, sans-serif; font-size: 13px; text-align: center;">
<span style="font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEggVFfYoCDi7dLAjOBhWu25VnnQc3ZdE1byunsCPV0a8M2tIsJpBeeRu9mAbbG44rfdJatb_5EQLVZU5Kk3DZrBFiwheSPEDZjswR9UlD2TE-EXP0SsOig5eSd9SsQiEXewJxhOp8a6yw/s1600/R%25EC%259D%2584+%25EC%259D%25B4%25EC%259A%25A9%25ED%2595%259C+%25ED%2580%2580%25ED%258A%25B8+%25ED%2588%25AC%25EC%259E%2590+%25ED%258F%25AC%25ED%258A%25B8%25ED%258F%25B4%25EB%25A6%25AC%25EC%2598%25A4+%25EB%25A7%258C%25EB%2593%25A4%25EA%25B8%25B0_%25EC%259E%2585%25EC%25B2%25B4.png" imageanchor="1" style="clear: right; color: #4d469c; margin-bottom: 1em; margin-left: 1em;"><img border="0" data-original-height="1600" data-original-width="1600" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEggVFfYoCDi7dLAjOBhWu25VnnQc3ZdE1byunsCPV0a8M2tIsJpBeeRu9mAbbG44rfdJatb_5EQLVZU5Kk3DZrBFiwheSPEDZjswR9UlD2TE-EXP0SsOig5eSd9SsQiEXewJxhOp8a6yw/s320/R%25EC%259D%2584+%25EC%259D%25B4%25EC%259A%25A9%25ED%2595%259C+%25ED%2580%2580%25ED%258A%25B8+%25ED%2588%25AC%25EC%259E%2590+%25ED%258F%25AC%25ED%258A%25B8%25ED%258F%25B4%25EB%25A6%25AC%25EC%2598%25A4+%25EB%25A7%258C%25EB%2593%25A4%25EA%25B8%25B0_%25EC%259E%2585%25EC%25B2%25B4.png" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border-radius: 0px; border: 1px solid transparent; box-shadow: rgba(0, 0, 0, 0.2) 0px 0px 0px; padding: 8px; position: relative;" width="320" /></a></span></div>
<div style="color: #444444; font-family: arial, tahoma, helvetica, freesans, sans-serif; font-size: 13px; text-align: center;">
<span style="font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><b><br /></b></span></div>
<div style="color: #444444; font-family: arial, tahoma, helvetica, freesans, sans-serif; font-size: 13px; text-align: center;">
<span style="font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><b><br /></b></span></div>
<div style="color: #444444; font-family: arial, tahoma, helvetica, freesans, sans-serif; font-size: 13px; text-align: center;">
<b>'R을 이용한 퀀트 투자 포트폴리오 만들기'가 출간 되었습니다.</b></div>
<div style="color: #444444; font-family: arial, tahoma, helvetica, freesans, sans-serif; font-size: 13px; text-align: center;">
<span style="font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><b>많은 관심 부탁드리겠습니다.</b></span></div>
<br />
<div style="text-align: center;">
<span style="color: #444444; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif; font-size: 13px; font-weight: 700;"><br /></span></div>
<span style="color: #444444; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif; font-size: 13px;"></span><br />
<div style="text-align: center;">
<span style="color: #444444; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif; font-size: 13px;"><b>↓↓ 구매링크 ↓↓</b></span></div>
<span style="color: #444444; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif; font-size: 13px;"></span><br />
<div style="color: #444444; font-family: arial, tahoma, helvetica, freesans, sans-serif; font-size: 13px; text-align: center;">
<br /></div>
<div style="color: #444444; font-family: arial, tahoma, helvetica, freesans, sans-serif; font-size: 13px; text-align: center;">
<span style="color: #0000ee;"><b><u><a href="http://bit.ly/2ZaG5Bb" style="color: #4d469c;" target="_blank">http://bit.ly/2ZaG5Bb</a></u></b></span></div>
<div style="color: #444444; font-family: arial, tahoma, helvetica, freesans, sans-serif; font-size: 13px; text-align: center;">
<span style="color: #0000ee;"><b><br /></b></span></div>
<div style="color: #444444; font-family: arial, tahoma, helvetica, freesans, sans-serif; font-size: 13px; text-align: center;">
<span style="color: #0000ee;"><b><br /></b></span></div>
<div style="color: #444444; font-family: arial, tahoma, helvetica, freesans, sans-serif; font-size: 13px; text-align: center;">
<span style="color: #0000ee;"><b><br /></b></span></div>
<div style="background-color: white; box-sizing: border-box; color: #333333; font-family: "helvetica neue", helvetica, arial, sans-serif; margin-bottom: 10px;">
Ubuntu 서버에 샤이니 서버를 설치한 후 파일을 업로드하여 샤이니 앱을 실행할 수도 있습니다. Putty를 이용해 Ubuntu에 접속한 후 root 계정에서 다음의 명령어를 통해 샤이니 패키지와 샤이니 서버를 설치합니다. 각 OS별 샤이니 서버 설치 커맨드는 R Studio 사이트에 확인할 수 있습니다.</div>
<div style="color: #444444; font-family: arial, tahoma, helvetica, freesans, sans-serif; text-align: center;">
<span style="color: #0000ee;"></span></div>
<ul style="background-color: white; box-sizing: border-box; color: #333333; font-family: "helvetica neue", helvetica, arial, sans-serif; margin-bottom: 10px; margin-top: 0px;">
<li style="box-sizing: border-box;"><a class="uri" href="https://www.rstudio.com/products/shiny/download-server/" style="background-color: transparent; box-sizing: border-box; color: #337ab7;">https://www.rstudio.com/products/shiny/download-server/</a></li>
</ul>
<div style="color: #444444; font-family: arial, tahoma, helvetica, freesans, sans-serif; font-size: 13px;">
<br style="background-color: white; text-align: center;" /></div>
<pre style="background-color: white; border-radius: 4px; border: 1px solid rgb(204, 204, 204); box-sizing: border-box; color: #333333; font-size: 13px; line-height: 1.42857; margin-bottom: 10px; overflow-wrap: break-word; overflow: auto; padding: 9.5px; word-break: break-all;"><code class="hljs" style="background-color: transparent; border-radius: 0px; box-sizing: border-box; color: inherit; font-size: inherit; padding: 0px; white-space: pre-wrap;">sudo su -c "R -e \"install.packages('shiny', repos='https://cran.rstudio.com/')\""
wget https://download3.rstudio.org/ubuntu-14.04/x86_64/shiny-server-1.5.9.923-amd64.deb
sudo gdebi shiny-server-1.5.9.923-amd64.deb</code></pre>
<div style="color: #444444; font-family: arial, tahoma, helvetica, freesans, sans-serif; font-size: 13px;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJR9l9pWsTTtdlS0WwnqnICGu_Ssbt2-KyZopc6jm8BZPyGxEk94d9jukY37fl8PD6XpVJpiZg3xcZMcU01k9nvoGGh1B8lwVmguHn9FqmJSzrNYMGdGw8mOlrF5lgO8gt-78FWg9XCg/s1600/aws_install_shiny.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="510" data-original-width="873" height="372" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJR9l9pWsTTtdlS0WwnqnICGu_Ssbt2-KyZopc6jm8BZPyGxEk94d9jukY37fl8PD6XpVJpiZg3xcZMcU01k9nvoGGh1B8lwVmguHn9FqmJSzrNYMGdGw8mOlrF5lgO8gt-78FWg9XCg/s640/aws_install_shiny.png" width="640" /></a></div>
<div style="color: #444444; font-family: arial, tahoma, helvetica, freesans, sans-serif; font-size: 13px;">
<br /></div>
<div style="color: #444444; font-family: arial, tahoma, helvetica, freesans, sans-serif; font-size: 13px;">
<br /></div>
<div style="color: #444444; font-family: arial, tahoma, helvetica, freesans, sans-serif;">
<span style="background-color: white; color: #333333; font-family: "helvetica neue" , "helvetica" , "arial" , sans-serif;">샤이니 서버가 잘 설치되었는지 확인하도록 하겠습니다. 퍼블릭 DNS(IPv4) 주소 뒤에 샤이니 서버의 포트번호인 :3838를 붙인 후 웹브라우에 입력해봅니다. 샤이니 서버가 제대로 설치되었다면 다음과 같은 페이지가 열립니다.</span></div>
<div style="color: #444444; font-family: arial, tahoma, helvetica, freesans, sans-serif;">
<span style="background-color: white; color: #333333; font-family: "helvetica neue" , "helvetica" , "arial" , sans-serif;"><br /></span></div>
<div style="color: #444444; font-family: arial, tahoma, helvetica, freesans, sans-serif;">
<span style="background-color: white; color: #333333; font-family: "helvetica neue" , "helvetica" , "arial" , sans-serif;"><br /></span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjgcy3mzhY-UH915lBWDmdUy3Tt7nr-_PeDc86OhAaNgVmD1wT563R-T82s83sPfWWdBUGla7q3VFhN088QZCn2gby_A3mB3oHC72aHMdmXcGZWHghc4VAebFaau1lewKqORkL1xNBbVA/s1600/aws_shiny.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="591" data-original-width="1402" height="268" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjgcy3mzhY-UH915lBWDmdUy3Tt7nr-_PeDc86OhAaNgVmD1wT563R-T82s83sPfWWdBUGla7q3VFhN088QZCn2gby_A3mB3oHC72aHMdmXcGZWHghc4VAebFaau1lewKqORkL1xNBbVA/s640/aws_shiny.png" width="640" /></a></div>
<div style="color: #444444; font-family: arial, tahoma, helvetica, freesans, sans-serif;">
<span style="background-color: white; color: #333333; font-family: "helvetica neue" , "helvetica" , "arial" , sans-serif;"><br /></span></div>
<div style="color: #444444; font-family: arial, tahoma, helvetica, freesans, sans-serif;">
<span style="background-color: white; color: #333333; font-family: "helvetica neue" , "helvetica" , "arial" , sans-serif;"><br /></span></div>
<div style="color: #444444; font-family: arial, tahoma, helvetica, freesans, sans-serif;">
<span style="background-color: white; color: #333333; font-family: "helvetica neue" , "helvetica" , "arial" , sans-serif;">앱의 구성요소들을 저장할 폴더를 만들도록 합니다. screener 부분에 본인이 만들고자 하는 폴더명을 입력하면, 해당 폴더가 생성됩니다. (root 계정이어야 명령어가 실행됩니다.)</span></div>
<div style="color: #444444; font-family: arial, tahoma, helvetica, freesans, sans-serif;">
<span style="background-color: white; color: #333333; font-family: "helvetica neue" , "helvetica" , "arial" , sans-serif;"><br /></span></div>
<pre style="background-color: white; border-radius: 4px; border: 1px solid rgb(204, 204, 204); box-sizing: border-box; color: #333333; font-size: 13px; line-height: 1.42857; margin-bottom: 10px; overflow-wrap: break-word; overflow: auto; padding: 9.5px; word-break: break-all;"><code class="hljs" style="background-color: transparent; border-radius: 0px; box-sizing: border-box; color: inherit; font-size: inherit; padding: 0px; white-space: pre-wrap;">sudo chmod 777 /srv/shiny-server
sudo mkdir /srv/shiny-server/screener
sudo chmod 777 /srv/shiny-server/screener</code></pre>
<div style="color: #444444; font-family: arial, tahoma, helvetica, freesans, sans-serif;">
<br /></div>
<div style="color: #444444; font-family: arial, tahoma, helvetica, freesans, sans-serif;">
<span style="background-color: white; color: #333333; font-family: "helvetica neue" , "helvetica" , "arial" , sans-serif;">샤이니 앱을 업로드 하기 위해 WinSCP를 설치해야 하며, 아래 주소에서 파일을 받을 수 있습니다.</span></div>
<div style="color: #444444; font-family: arial, tahoma, helvetica, freesans, sans-serif;">
<span style="background-color: white; color: #333333; font-family: "helvetica neue" , "helvetica" , "arial" , sans-serif;"><br /></span></div>
<ul style="background-color: white; box-sizing: border-box; color: #333333; font-family: "helvetica neue", helvetica, arial, sans-serif; margin-bottom: 10px; margin-top: 0px;">
<li style="box-sizing: border-box;"><a class="uri" href="https://winscp.net/eng/download.php" style="background-color: transparent; box-sizing: border-box; color: #337ab7;">https://winscp.net/eng/download.php</a></li>
</ul>
<div style="background-color: white; box-sizing: border-box; color: #333333; font-family: "helvetica neue", helvetica, arial, sans-serif; margin-bottom: 10px;">
WinSCP의 로그인 방법은 Putty와 거의 동일합니다.</div>
<ol style="background-color: white; box-sizing: border-box; color: #333333; font-family: "helvetica neue", helvetica, arial, sans-serif; margin-bottom: 10px; margin-top: 0px;">
<li style="box-sizing: border-box;">호스트 이름에 IPv4 퍼블릭 IP 값을 입력합니다.</li>
<li style="box-sizing: border-box;">사용자 이름에 ubuntu를 입력합니다.</li>
<li style="box-sizing: border-box;">[고급] 버튼을 누른 후 SSH의 [인증] 부분에서 개인키 파일에 ppk 형식의 키 페어를 선택합니다.</li>
<li style="box-sizing: border-box;">로그인을 누릅니다.</li>
</ol>
<div>
<span style="color: #333333; font-family: "helvetica neue" , "helvetica" , "arial" , sans-serif;"><br /></span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjG4aMJVZDhh9uPBRuDDtfz-iT_VoaPb9XmyrbyWvQqwArfVBHK_nj3GycAUUEyIAbOET3HxjDsfN6LKomTtW90nE3D4T7enh-yejlVG0KeMHlTRpkTw43v_perjxFimpNoexNa7BucnA/s1600/aws_winscp.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="416" data-original-width="1191" height="222" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjG4aMJVZDhh9uPBRuDDtfz-iT_VoaPb9XmyrbyWvQqwArfVBHK_nj3GycAUUEyIAbOET3HxjDsfN6LKomTtW90nE3D4T7enh-yejlVG0KeMHlTRpkTw43v_perjxFimpNoexNa7BucnA/s640/aws_winscp.png" width="640" /></a></div>
<div>
<span style="color: #333333; font-family: "helvetica neue" , "helvetica" , "arial" , sans-serif;"><br /></span></div>
<div>
<span style="color: #333333; font-family: "helvetica neue" , "helvetica" , "arial" , sans-serif;"><br /></span></div>
<div>
<span style="color: #333333; font-family: "helvetica neue" , "helvetica" , "arial" , sans-serif;">srv/shiny-server 폴더를 확인해보면 미리 만들어둔 screener 폴더가 있습니다.</span></div>
<div>
<span style="color: #333333; font-family: "helvetica neue" , "helvetica" , "arial" , sans-serif;"><br /></span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj6Bxm4GqBRQfevDxOb9NzEFNnvGA-5yKTiIXMl6zOMA2s5NbbbnyzdIK0PSbsbTcNmfC4BqWifjOMFRjv3drTcB6x7BKABRwQIhUdVFA_zU60-pQ_rf58XAjXbWeiGJRtgvVeVoRpIKQ/s1600/aws_winscp2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="646" data-original-width="1070" height="386" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj6Bxm4GqBRQfevDxOb9NzEFNnvGA-5yKTiIXMl6zOMA2s5NbbbnyzdIK0PSbsbTcNmfC4BqWifjOMFRjv3drTcB6x7BKABRwQIhUdVFA_zU60-pQ_rf58XAjXbWeiGJRtgvVeVoRpIKQ/s640/aws_winscp2.png" width="640" /></a></div>
<div>
<span style="color: #333333; font-family: "helvetica neue" , "helvetica" , "arial" , sans-serif;"><br /></span></div>
<div>
<span style="color: #333333; font-family: "helvetica neue" , "helvetica" , "arial" , sans-serif;"><br /></span></div>
<div>
<div style="background-color: white; box-sizing: border-box; color: #333333; font-family: "helvetica neue", helvetica, arial, sans-serif; margin-bottom: 10px;">
다음으로 config file인 shiny-server.conf 파일을 구성해야 합니다. 해당 파일은 etc/shiny-server/ 에 있으며, WinSCP에서 드래그&드롭을 통해 해당 파일을 로컬 PC로 복사해옵니다.</div>
<div style="background-color: white; box-sizing: border-box; color: #333333; font-family: "helvetica neue", helvetica, arial, sans-serif; margin-bottom: 10px;">
간혹 etc 폴더에 접근할 수 없을수 있으며, Putty에서 다음 명령어를 친 후 WinSCP에 재접속하면 접근이 가능합니다.</div>
<div style="background-color: white; box-sizing: border-box; color: #333333; font-family: "helvetica neue", helvetica, arial, sans-serif; margin-bottom: 10px;">
<br /></div>
<pre style="background-color: white; border-radius: 4px; border: 1px solid rgb(204, 204, 204); box-sizing: border-box; color: #333333; font-size: 13px; line-height: 1.42857; margin-bottom: 10px; overflow-wrap: break-word; overflow: auto; padding: 9.5px; word-break: break-all;"><code class="hljs" style="background-color: transparent; border-radius: 0px; box-sizing: border-box; color: inherit; font-size: inherit; padding: 0px; white-space: pre-wrap;">sudo chmod 777 /etc/shiny-server </code></pre>
<div style="background-color: white; box-sizing: border-box; color: #333333; font-family: "helvetica neue", helvetica, arial, sans-serif; margin-bottom: 10px;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhfqI0MduMIQXp6bd19Vo1meXmztukrOZfwPZLMq2MvZptlJPh-UvFASqOIBz0rWWWM6vCkVb28slC9JYNCc8RNpSxYAnbpUoAiG3hl-0fY7DG_NpwlLAdQsz5KJyl5iADaJu53LY1khw/s1600/aws_conf.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="348" data-original-width="1058" height="210" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhfqI0MduMIQXp6bd19Vo1meXmztukrOZfwPZLMq2MvZptlJPh-UvFASqOIBz0rWWWM6vCkVb28slC9JYNCc8RNpSxYAnbpUoAiG3hl-0fY7DG_NpwlLAdQsz5KJyl5iADaJu53LY1khw/s640/aws_conf.png" width="640" /></a></div>
<div style="background-color: white; box-sizing: border-box; color: #333333; font-family: "helvetica neue", helvetica, arial, sans-serif; margin-bottom: 10px;">
<br /></div>
<div style="background-color: white; box-sizing: border-box; color: #333333; font-family: "helvetica neue", helvetica, arial, sans-serif; margin-bottom: 10px;">
로컬 PC에 받은 config 파일에서 아래 사항을 수정해야 하며, # 는 주석표시입니다.</div>
<ol style="background-color: white; box-sizing: border-box; color: #333333; font-family: "helvetica neue", helvetica, arial, sans-serif; margin-bottom: 10px; margin-top: 0px;">
<li style="box-sizing: border-box;">run_as shiny → run_as ubuntu</li>
<li style="box-sizing: border-box;">timeout 추가</li>
</ol>
<div>
<span style="color: #333333; font-family: "helvetica neue" , "helvetica" , "arial" , sans-serif;"><br /></span></div>
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhuYjQeMqDyoAbW3No9Q8rw7kEnbwoCqIK8bcVR08rtBLxxpnIwOzCO-mvw3Wl_fuVSeCb20fqZSHvKekOT5eUZSfRND7Yx2nJW4c-g8td8KftZ-rBsHSqzxQz4RsnlvxkJWQUUG8SkGw/s1600/aws_conf_mod.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="331" data-original-width="820" height="258" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhuYjQeMqDyoAbW3No9Q8rw7kEnbwoCqIK8bcVR08rtBLxxpnIwOzCO-mvw3Wl_fuVSeCb20fqZSHvKekOT5eUZSfRND7Yx2nJW4c-g8td8KftZ-rBsHSqzxQz4RsnlvxkJWQUUG8SkGw/s640/aws_conf_mod.png" width="640" /></a></div>
<div>
<span style="color: #333333; font-family: "helvetica neue" , "helvetica" , "arial" , sans-serif;"><br /></span></div>
<div>
<span style="color: #333333; font-family: "helvetica neue" , "helvetica" , "arial" , sans-serif;"><br /></span></div>
<div>
<div style="background-color: white; box-sizing: border-box; color: #333333; font-family: "helvetica neue", helvetica, arial, sans-serif; margin-bottom: 10px;">
샤이니 앱 파일의 경우 이전에 작성한 스탁 스크리너 예제를 그대로 사용하며 다음 주소에 있는 코드를 복사하여 <b>app.R</b> 파일로 저장합니다.</div>
<div style="background-color: white; box-sizing: border-box; color: #333333; font-family: "helvetica neue", helvetica, arial, sans-serif; margin-bottom: 10px;">
</div>
<ul>
<li>R 파일: <a class="uri" href="https://github.com/hyunyulhenry/stock_screener/blob/master/app.R" style="box-sizing: border-box; color: #337ab7;" target="_blank">https://github.com/hyunyulhenry/stock_screener/blob/master/app.R</a></li>
<li>코드 설명: <a class="uri" href="http://henryquant.blogspot.com/2019/07/r.html" style="box-sizing: border-box; color: #337ab7;" target="_blank">http://henryquant.blogspot.com/2019/07/r.html</a></li>
</ul>
<br />
<div style="background-color: white; box-sizing: border-box; color: #333333; font-family: "helvetica neue", helvetica, arial, sans-serif; margin-bottom: 10px;">
샤이니 앱 파일과 수정한 config 파일을 미리 만들어둔 srv/shiny-server/screener 폴더에 복사합니다. 여러 샤이니 앱을 실행하고자 할 경우 위와 동일한 과정을 거쳐 각각 폴더를 만든 후 앱 파일과 config 파일을 복사하면 됩니다.</div>
<div style="background-color: white; box-sizing: border-box; color: #333333; font-family: "helvetica neue", helvetica, arial, sans-serif; margin-bottom: 10px;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjSJlVQMJa5WsITwDR7dG2Ye-SF3vyRtx4vmWvtRqDxqtciWIz7H8tdPWJGDeK56XRW6eV6qXWGeCUl5OZNKh_kk4dcGFy4xTpt02Pb_4L6KI2SR5Qlkz1KRtKpN6cLqT6WpypNxlxMQ/s1600/aws_copy.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="188" data-original-width="726" height="164" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjSJlVQMJa5WsITwDR7dG2Ye-SF3vyRtx4vmWvtRqDxqtciWIz7H8tdPWJGDeK56XRW6eV6qXWGeCUl5OZNKh_kk4dcGFy4xTpt02Pb_4L6KI2SR5Qlkz1KRtKpN6cLqT6WpypNxlxMQ/s640/aws_copy.png" width="640" /></a></div>
<div style="background-color: white; box-sizing: border-box; color: #333333; font-family: "helvetica neue", helvetica, arial, sans-serif; margin-bottom: 10px;">
<br /></div>
<div style="background-color: white; box-sizing: border-box; color: #333333; font-family: "helvetica neue", helvetica, arial, sans-serif; margin-bottom: 10px;">
마지막으로 샤이니 앱을 호스팅해보도록 하겠습니다. 퍼블릭 DNS(IPv4) 주소 뒤에 샤이니 서버 포트와 폴더명에 해당하는 <span style="box-sizing: border-box; font-weight: 700;">:3838/screener</span>를 붙인 값이 해당 앱의 주소가 됩니다.</div>
<div style="background-color: white; box-sizing: border-box; color: #333333; font-family: "helvetica neue", helvetica, arial, sans-serif; margin-bottom: 10px;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgNDehU8ayqcof5MB1lev5w32cmi9zq-MDeHFJFumGryWcy1h7HE9vrenZ2iswkyj_nvXmkbJ2DyI8CNxBzw8z4U6Lw1hE7zx1zfYZ72evV1HDlquGGsxBQdZkQm6RyAHQe2y0xpXr_dA/s1600/aws_shiny_screener.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="734" data-original-width="1236" height="380" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgNDehU8ayqcof5MB1lev5w32cmi9zq-MDeHFJFumGryWcy1h7HE9vrenZ2iswkyj_nvXmkbJ2DyI8CNxBzw8z4U6Lw1hE7zx1zfYZ72evV1HDlquGGsxBQdZkQm6RyAHQe2y0xpXr_dA/s640/aws_shiny_screener.png" width="640" /></a></div>
<div style="background-color: white; box-sizing: border-box; color: #333333; font-family: "helvetica neue", helvetica, arial, sans-serif; margin-bottom: 10px;">
<br /></div>
<div style="background-color: white; box-sizing: border-box; color: #333333; font-family: "helvetica neue", helvetica, arial, sans-serif; margin-bottom: 10px;">
위 주소를 입력하면 샤이니 앱이 잘 구동됩니다. 주의해야할 점은 해당 코드에 사용된 각종 패키지들은 root 계정을 통해 우분투 서버에 미리 설치되어야 실행된다는 점이며, 그렇지 않을 경우 오류가 발생합니다.</div>
</div>
Unknownnoreply@blogger.com1tag:blogger.com,1999:blog-23651150467485474.post-37826053501456636672019-09-06T12:57:00.001+09:002019-09-09T08:46:38.235+09:00AWS를 이용한 투자 자동화 구축하기! (3) 스케쥴러를 이용한 텔레그램 자동 전송<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhyBTOWKnso1pmYAwR5Ldhb2BXgWQEmdEUQD2P6Xldad6_0Dd5Fwm5wntlBIi5WYSjiaHdjFv04EInBv_DJ2IzGI6LgpZrBBLdSGRFoS-BwIDCjwqjWXXLgqbselQjvahZe4Kg1oBfGNg/s1600/aws_process.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="263" data-original-width="568" height="296" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhyBTOWKnso1pmYAwR5Ldhb2BXgWQEmdEUQD2P6Xldad6_0Dd5Fwm5wntlBIi5WYSjiaHdjFv04EInBv_DJ2IzGI6LgpZrBBLdSGRFoS-BwIDCjwqjWXXLgqbselQjvahZe4Kg1oBfGNg/s640/aws_process.png" width="640" /></a></div>
<br />
<div class="separator" style="background-color: white; clear: both; color: #444444; font-family: arial, tahoma, helvetica, freesans, sans-serif; font-size: 13px; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEggVFfYoCDi7dLAjOBhWu25VnnQc3ZdE1byunsCPV0a8M2tIsJpBeeRu9mAbbG44rfdJatb_5EQLVZU5Kk3DZrBFiwheSPEDZjswR9UlD2TE-EXP0SsOig5eSd9SsQiEXewJxhOp8a6yw/s1600/R%25EC%259D%2584+%25EC%259D%25B4%25EC%259A%25A9%25ED%2595%259C+%25ED%2580%2580%25ED%258A%25B8+%25ED%2588%25AC%25EC%259E%2590+%25ED%258F%25AC%25ED%258A%25B8%25ED%258F%25B4%25EB%25A6%25AC%25EC%2598%25A4+%25EB%25A7%258C%25EB%2593%25A4%25EA%25B8%25B0_%25EC%259E%2585%25EC%25B2%25B4.png" imageanchor="1" style="color: #4d469c; margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1600" data-original-width="1600" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEggVFfYoCDi7dLAjOBhWu25VnnQc3ZdE1byunsCPV0a8M2tIsJpBeeRu9mAbbG44rfdJatb_5EQLVZU5Kk3DZrBFiwheSPEDZjswR9UlD2TE-EXP0SsOig5eSd9SsQiEXewJxhOp8a6yw/s400/R%25EC%259D%2584+%25EC%259D%25B4%25EC%259A%25A9%25ED%2595%259C+%25ED%2580%2580%25ED%258A%25B8+%25ED%2588%25AC%25EC%259E%2590+%25ED%258F%25AC%25ED%258A%25B8%25ED%258F%25B4%25EB%25A6%25AC%25EC%2598%25A4+%25EB%25A7%258C%25EB%2593%25A4%25EA%25B8%25B0_%25EC%259E%2585%25EC%25B2%25B4.png" style="background: transparent; border-radius: 0px; border: 1px solid transparent; box-shadow: rgba(0, 0, 0, 0.2) 0px 0px 0px; padding: 8px; position: relative;" width="400" /></a></div>
<br style="background-color: white; color: #444444; font-family: arial, tahoma, helvetica, freesans, sans-serif; font-size: 13px;" />
<br />
<div style="background-color: white; color: #444444; font-family: arial, tahoma, helvetica, freesans, sans-serif; font-size: 13px; text-align: center;">
</div>
<br />
<div style="background-color: white; text-align: center;">
<div style="color: #444444; font-family: arial, tahoma, helvetica, freesans, sans-serif; font-size: 13px;">
<span style="font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><b>'R을 이용한 퀀트 투자 포트폴리오 만들기'가 출간 되었습니다.</b></span></div>
<div style="color: #444444; font-family: arial, tahoma, helvetica, freesans, sans-serif; font-size: 13px;">
<span style="font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><b>많은 관심 부탁드리겠습니다.</b></span></div>
<div style="color: #444444; font-family: arial, tahoma, helvetica, freesans, sans-serif; font-size: 13px;">
<span style="font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><b><br /></b></span><span style="font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><b>↓↓ 구매링크 ↓↓</b></span></div>
<div style="color: #444444; font-family: arial, tahoma, helvetica, freesans, sans-serif; font-size: 13px;">
<br /></div>
<div style="color: #444444; font-family: arial, tahoma, helvetica, freesans, sans-serif; font-size: 13px;">
<span style="color: #0000ee;"><b><u><a href="http://bit.ly/2ZaG5Bb" style="color: #4d469c;" target="_blank">http://bit.ly/2ZaG5Bb</a></u></b></span></div>
<div style="color: #444444; font-family: arial, tahoma, helvetica, freesans, sans-serif; font-size: 13px;">
<br /></div>
<div style="color: #444444; font-family: arial, tahoma, helvetica, freesans, sans-serif; font-size: 13px;">
<br /></div>
<div style="color: #444444; font-family: arial, tahoma, helvetica, freesans, sans-serif; font-size: 13px; text-align: left;">
<br /></div>
<div style="color: #444444; font-family: arial, tahoma, helvetica, freesans, sans-serif; text-align: left;">
<span style="color: #333333; font-family: "helvetica neue" , "helvetica" , "arial" , sans-serif;">먼저 텔레그램의 채널을 생성합니다. BotFather 계정을 검색한 후 /start를 입력합니다. 그 후 /newbot 을 입력하여 새로운 봇을 만들고, bot 이름과 username을 입력합니다. username의 경우 항상 ’bot’으로 끝나야 합니다.</span></div>
<div style="color: #444444; font-family: arial, tahoma, helvetica, freesans, sans-serif; font-size: 13px; text-align: left;">
<span style="color: #333333; font-family: "helvetica neue" , "helvetica" , "arial" , sans-serif; font-size: 14px;"><br /></span></div>
<div style="color: #444444; font-family: arial, tahoma, helvetica, freesans, sans-serif; font-size: 13px; text-align: left;">
<span style="color: #333333; font-family: "helvetica neue" , "helvetica" , "arial" , sans-serif; font-size: 14px;"><br /></span></div>
<div class="separator" style="clear: both; color: #444444; font-family: arial, tahoma, helvetica, freesans, sans-serif; font-size: 13px;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjTDtJVQvarPDl-4DH8GvD1gmsRB-JQIuJM1Hv9Gf0qOMFTxXD66Q22KuJkbwfDrZqWam4zhjXqvccmhP1uAvWuvnmWCB8c8QUiYvquFJHonKNnbLFfwDYt0S2S0llDqwcv9U2cSBVz4A/s1600/aws_telbot.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="919" data-original-width="1600" height="364" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjTDtJVQvarPDl-4DH8GvD1gmsRB-JQIuJM1Hv9Gf0qOMFTxXD66Q22KuJkbwfDrZqWam4zhjXqvccmhP1uAvWuvnmWCB8c8QUiYvquFJHonKNnbLFfwDYt0S2S0llDqwcv9U2cSBVz4A/s640/aws_telbot.png" width="640" /></a></div>
<div style="color: #444444; font-family: arial, tahoma, helvetica, freesans, sans-serif; font-size: 13px; text-align: left;">
<span style="color: #333333; font-family: "helvetica neue" , "helvetica" , "arial" , sans-serif; font-size: 14px;"><br /></span></div>
<div style="color: #444444; font-family: arial, tahoma, helvetica, freesans, sans-serif; font-size: 13px; text-align: left;">
<span style="color: #333333; font-family: "helvetica neue" , "helvetica" , "arial" , sans-serif; font-size: 14px;"><br /></span></div>
<div style="text-align: left;">
<span style="color: #333333; font-family: "helvetica neue" , "helvetica" , "arial" , sans-serif;">Use this token to access the HTTP API 메세지 아래에 생성한 봇의 API Key가 출력됩니다. 만일 해당 값을 잊어버렸을 시 BotFather 계정에서 /mybots → API Token을 선택하여 찾을 수 있습니다.</span></div>
<div style="text-align: left;">
<span style="color: #333333; font-family: "helvetica neue" , "helvetica" , "arial" , sans-serif;"><br /></span></div>
<div style="text-align: left;">
<span style="color: #333333; font-family: "helvetica neue" , "helvetica" , "arial" , sans-serif;">get id 계정을 검색한 후 /start를 입력하면 Chat ID를 확인할 수 있습니다.</span></div>
<div style="text-align: left;">
<br /></div>
<div class="separator" style="clear: both;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh7DT3VJQQITivd3J-aw9iUOCDLr9Gk70ecRddX8sp5HSKy_addW_O_y2yeJVP1eMiEN6ytw2FqHyhmeFud2RXnz86rnsOF9yFHUGHONON97r5VqTgAo1HxNbu15iJEKlHrkFMj0x43rw/s1600/aws_tel_id.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="403" data-original-width="820" height="312" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh7DT3VJQQITivd3J-aw9iUOCDLr9Gk70ecRddX8sp5HSKy_addW_O_y2yeJVP1eMiEN6ytw2FqHyhmeFud2RXnz86rnsOF9yFHUGHONON97r5VqTgAo1HxNbu15iJEKlHrkFMj0x43rw/s640/aws_tel_id.png" width="640" /></a></div>
<div style="text-align: left;">
<span style="color: #333333; font-family: "helvetica neue" , "helvetica" , "arial" , sans-serif;"><br /></span></div>
<div style="text-align: left;">
<span style="color: #333333; font-family: "helvetica neue" , "helvetica" , "arial" , sans-serif;"><br /></span></div>
<div style="text-align: left;">
<span style="color: #333333; font-family: "helvetica neue" , "helvetica" , "arial" , sans-serif;">마지막으로 본인이 만든 채팅방을 검색한 후 [시작] 버튼을 눌러줍니다.</span></div>
<div style="text-align: left;">
<span style="color: #333333; font-family: "helvetica neue" , "helvetica" , "arial" , sans-serif;"><br /></span></div>
<div class="separator" style="clear: both;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi9fXo_EnzZNUeHFwHb8VRi2TxDJtNx_g1myZhkho-cm8cqDa_dGRiHw4ZP5Xr7F5c_w84C9-R7UijAz-H-0jvddFm8gSyYhZCTz1BTFqNJssNc3Timu3ZE7lNP6XTYMRKLiZeLc8vVkg/s1600/aws_bot_start.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="223" data-original-width="785" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi9fXo_EnzZNUeHFwHb8VRi2TxDJtNx_g1myZhkho-cm8cqDa_dGRiHw4ZP5Xr7F5c_w84C9-R7UijAz-H-0jvddFm8gSyYhZCTz1BTFqNJssNc3Timu3ZE7lNP6XTYMRKLiZeLc8vVkg/s640/aws_bot_start.png" width="640" /></a></div>
<div style="text-align: left;">
<span style="color: #333333; font-family: "helvetica neue" , "helvetica" , "arial" , sans-serif;"><br /></span></div>
<div style="text-align: left;">
<span style="color: #333333; font-family: "helvetica neue" , "helvetica" , "arial" , sans-serif;"><br /></span></div>
<div style="text-align: left;">
<span style="color: #333333; font-family: "helvetica neue" , "helvetica" , "arial" , sans-serif;">이제 R에서 텔레그램에 메세지를 전송하도록 합니다. 웹 브라우저에 서버주소</span><span style="color: #333333; font-family: "helvetica neue" , "helvetica" , "arial" , sans-serif;">(</span>DNS:8787)<span style="color: #333333; font-family: "helvetica neue" , "helvetica" , "arial" , sans-serif;">를 입력하여 R Studio를 실행</span><span style="color: #333333; font-family: "helvetica neue" , "helvetica" , "arial" , sans-serif;">하며, 인스턴스 변경 과정에서 퍼블릭 DNS가 변경된 점을 고려해야 합니다. 그 후 위에서 발급받은 API Token과 Chat ID를 입력하여 다음 코드를 실행합니다.</span><br />
<span style="color: #333333; font-family: "helvetica neue" , "helvetica" , "arial" , sans-serif;"><br /></span>
<span style="color: #333333; font-family: "helvetica neue" , "helvetica" , "arial" , sans-serif;"></span><br />
<pre class="r" style="background-color: whitesmoke; border-radius: 4px; border: 1px solid rgb(204, 204, 204); box-sizing: border-box; color: #333333; font-size: 13px; line-height: 1.42857; margin-bottom: 10px; overflow-wrap: break-word; overflow: auto; padding: 9.5px; word-break: break-all;"><code class="hljs" style="background-color: transparent; border-radius: 0px; box-sizing: border-box; color: inherit; font-size: inherit; padding: 0px; white-space: pre-wrap;"><span class="hljs-keyword" style="box-sizing: border-box; color: #990000; font-weight: bold;">library</span>(telegram.bot)
bot = Bot(token = <span class="hljs-string" style="box-sizing: border-box; color: #dd1144;">'API Token'</span>)
chat_id = <span class="hljs-string" style="box-sizing: border-box; color: #dd1144;">'Chat ID'</span>
bot$sendMessage(chat_id = chat_id, text = <span class="hljs-string" style="box-sizing: border-box; color: #dd1144;">'Hello World'</span>)</code></pre>
<span style="color: #333333; font-family: "helvetica neue" , "helvetica" , "arial" , sans-serif;"><br /></span></div>
<ol style="box-sizing: border-box; color: #333333; font-family: "helvetica neue", helvetica, arial, sans-serif; margin-bottom: 10px; margin-top: 0px;">
<li style="box-sizing: border-box; text-align: left;">root 계정을 통해 telegram.bot 패키지를 미리 설치해 두었으므로 패키지를 실행할 수 있습니다.</li>
<li style="box-sizing: border-box; text-align: left;"><code style="background-color: rgba(0, 0, 0, 0.04); border-radius: 4px; box-sizing: border-box; color: inherit; padding: 2px 4px; white-space: pre;">Bot()</code> 함수에 API Token 값을 입력합니다.</li>
<li style="box-sizing: border-box; text-align: left;">chat_id에 본인의 Chat ID를 입력합니다.</li>
<li style="box-sizing: border-box; text-align: left;"><code style="background-color: rgba(0, 0, 0, 0.04); border-radius: 4px; box-sizing: border-box; color: inherit; padding: 2px 4px; white-space: pre;">bot$sendMessage()</code> 함수의 text 인자에 본인이 전송하고자 하는 내용을 입력합니다.</li>
</ol>
<div style="text-align: left;">
<span style="color: #333333; font-family: "helvetica neue" , "helvetica" , "arial" , sans-serif;"><br /></span></div>
<div style="text-align: left;">
<span style="color: #333333; font-family: "helvetica neue" , "helvetica" , "arial" , sans-serif;">채팅방을 확인해보면 text 인자에 입력한 값이 전송되어 있습니다.</span></div>
<div style="text-align: left;">
<span style="color: #333333; font-family: "helvetica neue" , "helvetica" , "arial" , sans-serif;"><br /></span></div>
<div class="separator" style="clear: both;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhU76qAZsqniCME3P3EpKMH0Q5hQlA22gurMIj62CJY1-66bcXtPbd449wBQZ-z0UpX-aRHvEZiw8U7Vh6My_pC9tVnPcs1U-POMg4YpJF_QtbrANpwcr2BD9ZObEpZVPGcm3eqXpGNWg/s1600/aws_helloworld.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="134" data-original-width="806" height="106" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhU76qAZsqniCME3P3EpKMH0Q5hQlA22gurMIj62CJY1-66bcXtPbd449wBQZ-z0UpX-aRHvEZiw8U7Vh6My_pC9tVnPcs1U-POMg4YpJF_QtbrANpwcr2BD9ZObEpZVPGcm3eqXpGNWg/s640/aws_helloworld.png" width="640" /></a></div>
<div style="text-align: left;">
<span style="color: #333333; font-family: "helvetica neue" , "helvetica" , "arial" , sans-serif;"><br /></span></div>
<div style="text-align: left;">
<span style="color: #333333; font-family: "helvetica neue" , "helvetica" , "arial" , sans-serif;"><br /></span></div>
<div style="text-align: left;">
<span style="color: #333333; font-family: "helvetica neue" , "helvetica" , "arial" , sans-serif;">이번에는 네이버 금융 속보 제목을 크롤링 한 후 가장 최근 뉴스의 제목을 텔레그램에 전송하도록 하겠습니다. 세부사항은 웹북을 참조하시기 바랍니다.</span></div>
<div style="text-align: left;">
<span style="color: #333333; font-family: "helvetica neue" , "helvetica" , "arial" , sans-serif;"><br /></span></div>
<div style="text-align: left;">
<a href="https://hyunyulhenry.github.io/quant_cookbook/section-18.html#section-20" style="text-align: center;" target="_blank">https://hyunyulhenry.github.io/quant_cookbook/section-18.html#section-20</a></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<pre class="r" style="background-color: whitesmoke; border-radius: 4px; border: 1px solid rgb(204, 204, 204); box-sizing: border-box; color: #333333; font-size: 13px; line-height: 1.42857; margin-bottom: 10px; overflow-wrap: break-word; overflow: auto; padding: 9.5px; word-break: break-all;"><code class="hljs" style="background-color: transparent; border-radius: 0px; box-sizing: border-box; color: inherit; font-size: inherit; padding: 0px; white-space: pre-wrap;"><span class="hljs-keyword" style="box-sizing: border-box; color: #990000; font-weight: bold;">library</span>(rvest)
<span class="hljs-keyword" style="box-sizing: border-box; color: #990000; font-weight: bold;">library</span>(httr)
<span class="hljs-keyword" style="box-sizing: border-box; color: #990000; font-weight: bold;">library</span>(telegram.bot)
bot = Bot(token = <span class="hljs-string" style="box-sizing: border-box; color: #dd1144;">'API Token'</span>)
chat_id = <span class="hljs-string" style="box-sizing: border-box; color: #dd1144;">'Chat ID'</span>
url = paste0(<span class="hljs-string" style="box-sizing: border-box; color: #dd1144;">'https://finance.naver.com/news/news_list.nhn?'</span>,
<span class="hljs-string" style="box-sizing: border-box; color: #dd1144;">'mode=LSS2D&section_id=101&section_id2=258'</span>)
data = GET(url)
top_title = data %>%
read_html(encoding = <span class="hljs-string" style="box-sizing: border-box; color: #dd1144;">'EUC-KR'</span>) %>%
html_nodes(<span class="hljs-string" style="box-sizing: border-box; color: #dd1144;">'dl'</span>) %>%
html_nodes(<span class="hljs-string" style="box-sizing: border-box; color: #dd1144;">'.articleSubject'</span>) %>%
html_nodes(<span class="hljs-string" style="box-sizing: border-box; color: #dd1144;">'a'</span>) %>%
html_attr(<span class="hljs-string" style="box-sizing: border-box; color: #dd1144;">'title'</span>) %>%
head(<span class="hljs-number" style="box-sizing: border-box; color: #009999;">1</span>)
bot$sendMessage(chat_id = chat_id, text = top_title)</code></pre>
</div>
<div style="text-align: left;">
<br /></div>
<div class="separator" style="clear: both;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGDwNRfdXhOh3XwWAnvegC45sHGVK7NcNOf0qACsPm2o7hztlTa9mQgq9EQMulWOgvekAm1GIsBRhg_kCpTezjs62MTTOoB-NAWSyi32UqA9zM8DS6QeJ7ys-RwzAI8GliaTWiJYWbCA/s1600/aws_tel_title.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="222" data-original-width="799" height="176" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGDwNRfdXhOh3XwWAnvegC45sHGVK7NcNOf0qACsPm2o7hztlTa9mQgq9EQMulWOgvekAm1GIsBRhg_kCpTezjs62MTTOoB-NAWSyi32UqA9zM8DS6QeJ7ys-RwzAI8GliaTWiJYWbCA/s640/aws_tel_title.png" width="640" /></a></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
스케쥴러를 이용하면 코드를 특정 시간마다 자동으로 실행할 수 있으며, 텔레그램에 자동으로 전송할 수도 있습니다. 먼저 위 코드를 <b>‘send_title.R</b>’ 파일로 저장합니다.</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<br /></div>
<div class="separator" style="clear: both;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0mkP3tq9X0FMN7AGfqVV5bnBBLR_-PGdt4u2WBrSExAEQK9OxcyjJWNoVFTSn4kn6_Ldxcs1_bYqw8pnbxORLX-blFApFklaiqvtiwEBhtXVd58-CfD9DEtTNT2xCPkT7tmfyr_x8tQ/s1600/aws_tel_save.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="357" data-original-width="1086" height="210" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0mkP3tq9X0FMN7AGfqVV5bnBBLR_-PGdt4u2WBrSExAEQK9OxcyjJWNoVFTSn4kn6_Ldxcs1_bYqw8pnbxORLX-blFApFklaiqvtiwEBhtXVd58-CfD9DEtTNT2xCPkT7tmfyr_x8tQ/s640/aws_tel_save.png" width="640" /></a></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<div>
윈도우에서는 <b>taskscheduleR</b> 패키지를 통해 스케쥴링 작업을 수행한 반면 Unix/Linux에서는 <b>cronR</b> 패키지를 이용해 해당 작업을 수행할 수 있습니다.</div>
<div>
<br /></div>
<div>
<div style="box-sizing: border-box; color: #333333; font-family: "helvetica neue", helvetica, arial, sans-serif; margin-bottom: 10px;">
윈도우에서는 taskscheduleR 패키지를 통해 스케쥴링 작업을 수행한 반면 Unix/Linux에서는 cronR 패키지를 이용해 해당 작업을 수행할 수 있습니다.</div>
<div style="box-sizing: border-box; color: #333333; font-family: "helvetica neue", helvetica, arial, sans-serif; margin-bottom: 10px;">
cronR 패키지의 <code style="background-color: rgba(0, 0, 0, 0.04); border-radius: 4px; box-sizing: border-box; color: inherit; padding: 2px 4px; white-space: pre;">cron_add()</code> 함수를 이용해 스케쥴링 작업을 추가할 수도 있지만 R Studio add-in을 이용할 경우 훨씬 쉽게 작업을 추가할 수 있습니다. R Studio add-in을 실행하기 위한 miniUI, shiny, shinyFiles 패키지를 미리 설치해 두어야 실행이 가능합니다.</div>
<div style="box-sizing: border-box; color: #333333; font-family: "helvetica neue", helvetica, arial, sans-serif; margin-bottom: 10px;">
add-in을 실행하기 위해 [Tools] → [Addinds] → [Browse Addins]를 선택한 후 [cronR]을 선택합니다. 혹은 <code style="background-color: rgba(0, 0, 0, 0.04); border-radius: 4px; box-sizing: border-box; color: inherit; padding: 2px 4px; white-space: pre;">cronR::cron_rstudioaddin()</code> 함수를 통해 실행할 수 있습니다.</div>
<div style="box-sizing: border-box; color: #333333; font-family: "helvetica neue", helvetica, arial, sans-serif; margin-bottom: 10px;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhpbK-PWydYWAmTdxslYgKY0UnUhfwSPnLGhzOBG2wBOij5bpIV6XX-98Hl94oijBeB5hG_OElAAnLYwaBrm1ABzri-JqFrliBX5aea0ArWyOE9ktCXqo5F4Ad-nA0nBo9WAWWObJci9A/s1600/aws_addin.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="384" data-original-width="1274" height="192" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhpbK-PWydYWAmTdxslYgKY0UnUhfwSPnLGhzOBG2wBOij5bpIV6XX-98Hl94oijBeB5hG_OElAAnLYwaBrm1ABzri-JqFrliBX5aea0ArWyOE9ktCXqo5F4Ad-nA0nBo9WAWWObJci9A/s640/aws_addin.png" width="640" /></a></div>
<div style="box-sizing: border-box; color: #333333; font-family: "helvetica neue", helvetica, arial, sans-serif; margin-bottom: 10px;">
<br /></div>
<div style="box-sizing: border-box; color: #333333; font-family: "helvetica neue", helvetica, arial, sans-serif; margin-bottom: 10px;">
<br /></div>
<ol style="box-sizing: border-box; color: #333333; font-family: "helvetica neue", helvetica, arial, sans-serif; margin-bottom: 10px; margin-top: 0px;">
<li style="box-sizing: border-box;">[Select file]을 선택하여 자동으로 실행하고자 하는 R 스크립트를 선택합니다.</li>
<li style="box-sizing: border-box;">시작 일자인 Launch date와 시작 시간인 Launch hour를 각각 입력합니다.</li>
<li style="box-sizing: border-box;">원하는 스케쥴링 간격을 선택합니다. 매 분마다 크롤링 결과를 전송하기 위해 [Every MINUTE]을 선택합니다.</li>
<li style="box-sizing: border-box;">Job identifier에서 스케쥴러 이름을 입력합니다.</li>
<li style="box-sizing: border-box;">R 스크립트 파일 및 로그 파일이 저장될 폴더를 선택합니다.</li>
<li style="box-sizing: border-box;">하단의 [Create Job]을 눌러 스케쥴러를 생성합니다.</li>
<li style="box-sizing: border-box;">상단의 Done을 누릅니다.</li>
</ol>
<div>
<div style="box-sizing: border-box; color: #333333; font-family: "helvetica neue", helvetica, arial, sans-serif; margin-bottom: 10px;">
이 외에도 ASIS cron schedule 부분에 다양한 표현식을 입력하여 복잡한 형태(예: 매월 5일과 20일에 8시부터 10시 까지 30분 간격으로 수행)의 스케쥴러도 생성할 수 있으며, 간단한 형태의 표현식은 cronmaker 웹사이트에서 클릭을 통해 생성할 수 있습니다.</div>
<ul style="box-sizing: border-box; color: #333333; font-family: "helvetica neue", helvetica, arial, sans-serif; margin-bottom: 10px; margin-top: 0px;">
<li style="box-sizing: border-box;">cronR GitHub : <a class="uri" href="https://github.com/bnosac/cronR" style="background-color: transparent; box-sizing: border-box; color: #337ab7;">https://github.com/bnosac/cronR</a></li>
<li style="box-sizing: border-box;">cronmaker: <a class="uri" href="http://www.cronmaker.com/" style="background-color: transparent; box-sizing: border-box; color: #337ab7;">http://www.cronmaker.com/</a></li>
</ul>
<div>
<span style="color: #333333; font-family: "helvetica neue" , "helvetica" , "arial" , sans-serif;"><br /></span></div>
</div>
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQki6cmav7oDG0LFDaWt2GFZu3u8J0O_vpZKV2IMn0dTpaYR4x-G_z9I0uR36oHQVidq6_nl2ndcMJ8BsKZUfvCQ96JoSTDIpgfKtgsjSvybdOr-TWJoy4xXyrCChLGm5SzXAj5jgc_A/s1600/aws_addin_set.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="800" data-original-width="1005" height="508" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQki6cmav7oDG0LFDaWt2GFZu3u8J0O_vpZKV2IMn0dTpaYR4x-G_z9I0uR36oHQVidq6_nl2ndcMJ8BsKZUfvCQ96JoSTDIpgfKtgsjSvybdOr-TWJoy4xXyrCChLGm5SzXAj5jgc_A/s640/aws_addin_set.png" width="640" /></a></div>
<div>
<span style="color: #333333; font-family: "helvetica neue" , "helvetica" , "arial" , sans-serif;"><br /></span></div>
<div>
<span style="color: #333333; font-family: "helvetica neue" , "helvetica" , "arial" , sans-serif;"><br /></span></div>
<div>
<span style="color: #333333; font-family: "helvetica neue" , "helvetica" , "arial" , sans-serif;">네이버 금융 속보 중 가장 최근 제목을 텔레그램에 전송하는 스크립트(send_title.R)가 매분 실행되도록 스케쥴러를 입력하였으므로, 텔레그램에는 매분 해당 결과가 전송됩니다. 이러한 스케쥴링이 로컬 PC가 아닌 AWS 가상 서버에 등록되어 있으므로 로컬 PC가 종료된 상태에서도 작업은 계속해서 실행됩니다.</span></div>
<div>
<span style="color: #333333; font-family: "helvetica neue" , "helvetica" , "arial" , sans-serif;"><br /></span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiOhUPzV_MpZRrafqoOUYMMWZNhmojW53qr6ipxz89SHStCtUEXk8uIcS5S0oq9whvutu2Nhk5yRvnMqbpbcxOSOCUOZawLogOOsMLn0MeeiczVP_s9EPbR8roOegwv4HhbFQ39bUN9jg/s1600/aws_cron_result.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="523" data-original-width="425" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiOhUPzV_MpZRrafqoOUYMMWZNhmojW53qr6ipxz89SHStCtUEXk8uIcS5S0oq9whvutu2Nhk5yRvnMqbpbcxOSOCUOZawLogOOsMLn0MeeiczVP_s9EPbR8roOegwv4HhbFQ39bUN9jg/s400/aws_cron_result.png" width="325" /></a></div>
<div>
<span style="color: #333333; font-family: "helvetica neue" , "helvetica" , "arial" , sans-serif;"><br /></span></div>
<div>
<span style="color: #333333; font-family: "helvetica neue" , "helvetica" , "arial" , sans-serif;"><br /></span></div>
<div>
<span style="color: #333333; font-family: "helvetica neue" , "helvetica" , "arial" , sans-serif;">cronR 패키지의 주요 함수는 다음과 같습니다. 만일 위에서 실행한 스케쥴링 작업(send_title)을 중지하고자 할 경우 </span><code style="background-color: rgba(0, 0, 0, 0.04); border-radius: 4px; box-sizing: border-box; color: #333333; padding: 2px 4px; white-space: pre;">cron_rm(id = 'send_title')</code><span style="color: #333333; font-family: "helvetica neue" , "helvetica" , "arial" , sans-serif;">을 입력합니다.</span></div>
<div>
<span style="color: #333333; font-family: "helvetica neue" , "helvetica" , "arial" , sans-serif;"><br /></span></div>
<div>
<div>
<span style="color: #333333; font-family: "helvetica neue" , "helvetica" , "arial" , sans-serif;">함수<span style="white-space: pre;"> </span>내용</span></div>
<div>
<span style="color: #333333; font-family: "helvetica neue" , "helvetica" , "arial" , sans-serif;">cron_add()<span style="white-space: pre;"> </span>스케쥴러 추가</span></div>
<div>
<span style="color: #333333; font-family: "helvetica neue" , "helvetica" , "arial" , sans-serif;">cron_ls()<span style="white-space: pre;"> </span>스케쥴 목록 확인</span></div>
<div>
<span style="color: #333333; font-family: "helvetica neue" , "helvetica" , "arial" , sans-serif;">cron_rm()<span style="white-space: pre;"> </span>특정 스케쥴(id) 삭제</span></div>
<div>
<span style="color: #333333; font-family: "helvetica neue" , "helvetica" , "arial" , sans-serif;">cron_clear()<span style="white-space: pre;"> </span>모든 스케쥴 삭제</span></div>
</div>
<div>
<span style="color: #333333; font-family: "helvetica neue" , "helvetica" , "arial" , sans-serif;"><br /></span></div>
<div>
<span style="color: #333333; font-family: "helvetica neue" , "helvetica" , "arial" , sans-serif;"><br /></span></div>
<div>
<span style="color: #333333; font-family: "helvetica neue" , "helvetica" , "arial" , sans-serif;">이처럼 가상 서버에서 cronR 패키지를 이용해 스케쥴링 작업을 실행하면, 로컬 PC가 꺼진 상태에서도 24시간 쉬지않고 크롤링 결과를 텔레그램으로 전송할 수 있습니다.</span></div>
<div>
<span style="color: #333333; font-family: "helvetica neue" , "helvetica" , "arial" , sans-serif;"><br /></span></div>
<div>
<br /></div>
<div>
<span style="color: #333333; font-family: "helvetica neue" , "helvetica" , "arial" , sans-serif;">관심종목의 DART 공시내역 전송은 아래 글을 참조하시기 바랍니다.</span></div>
<div>
<a href="http://henryquant.blogspot.com/2019/03/r_18.html">http://henryquant.blogspot.com/2019/03/r_18.html</a></div>
</div>
</div>
Unknownnoreply@blogger.com2tag:blogger.com,1999:blog-23651150467485474.post-53494734346526068752019-09-06T12:32:00.005+09:002021-08-31T17:32:25.243+09:00AWS를 이용한 투자 자동화 구축하기! (2) R, R studio 설치 및 패키지 설치하기<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgWaRGlX4cVyMPtqSgDCcsg2kCbeYBFxpMjNtpcb5BWd-7kwXsGTsDd2-aC8c2LyJFOIumMUTmrwQ5o7rIHsbjAASmtLZQcgkwJGlw-HH1gQsRqgnBPZDZaoiWoeWmIr7aPfsJ7NF5nEw/s1600/aws_process.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="263" data-original-width="568" height="296" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgWaRGlX4cVyMPtqSgDCcsg2kCbeYBFxpMjNtpcb5BWd-7kwXsGTsDd2-aC8c2LyJFOIumMUTmrwQ5o7rIHsbjAASmtLZQcgkwJGlw-HH1gQsRqgnBPZDZaoiWoeWmIr7aPfsJ7NF5nEw/s640/aws_process.png" width="640" /></a></div>
<br />
<span face=""helvetica neue" , "helvetica" , "arial" , sans-serif" style="background-color: white; color: #333333;"><br /></span>
<div class="separator" style="background-color: white; clear: both; color: #444444; font-family: arial, tahoma, helvetica, freesans, sans-serif; font-size: 13px; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEggVFfYoCDi7dLAjOBhWu25VnnQc3ZdE1byunsCPV0a8M2tIsJpBeeRu9mAbbG44rfdJatb_5EQLVZU5Kk3DZrBFiwheSPEDZjswR9UlD2TE-EXP0SsOig5eSd9SsQiEXewJxhOp8a6yw/s1600/R%25EC%259D%2584+%25EC%259D%25B4%25EC%259A%25A9%25ED%2595%259C+%25ED%2580%2580%25ED%258A%25B8+%25ED%2588%25AC%25EC%259E%2590+%25ED%258F%25AC%25ED%258A%25B8%25ED%258F%25B4%25EB%25A6%25AC%25EC%2598%25A4+%25EB%25A7%258C%25EB%2593%25A4%25EA%25B8%25B0_%25EC%259E%2585%25EC%25B2%25B4.png" style="color: #4d469c; margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1600" data-original-width="1600" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEggVFfYoCDi7dLAjOBhWu25VnnQc3ZdE1byunsCPV0a8M2tIsJpBeeRu9mAbbG44rfdJatb_5EQLVZU5Kk3DZrBFiwheSPEDZjswR9UlD2TE-EXP0SsOig5eSd9SsQiEXewJxhOp8a6yw/s400/R%25EC%259D%2584+%25EC%259D%25B4%25EC%259A%25A9%25ED%2595%259C+%25ED%2580%2580%25ED%258A%25B8+%25ED%2588%25AC%25EC%259E%2590+%25ED%258F%25AC%25ED%258A%25B8%25ED%258F%25B4%25EB%25A6%25AC%25EC%2598%25A4+%25EB%25A7%258C%25EB%2593%25A4%25EA%25B8%25B0_%25EC%259E%2585%25EC%25B2%25B4.png" style="background: transparent; border-radius: 0px; border: 1px solid transparent; box-shadow: rgba(0, 0, 0, 0.2) 0px 0px 0px; padding: 8px; position: relative;" width="400" /></a></div>
<br style="background-color: white; color: #444444; font-family: arial, tahoma, helvetica, freesans, sans-serif; font-size: 13px;" />
<br />
<div style="background-color: white; color: #444444; font-family: arial, tahoma, helvetica, freesans, sans-serif; font-size: 13px; text-align: center;">
</div>
<br />
<div style="background-color: white; color: #444444; font-family: arial, tahoma, helvetica, freesans, sans-serif; font-size: 13px; text-align: center;">
<div style="margin: 0px;">
<span face=""arial" , "tahoma" , "helvetica" , "freesans" , sans-serif"><b>'R을 이용한 퀀트 투자 포트폴리오 만들기'가 출간 되었습니다.</b></span></div>
<div style="margin: 0px;">
<span face=""arial" , "tahoma" , "helvetica" , "freesans" , sans-serif"><b>많은 관심 부탁드리겠습니다.</b></span></div>
<div style="margin: 0px;">
<span face=""arial" , "tahoma" , "helvetica" , "freesans" , sans-serif"><b><br /></b></span><span face=""arial" , "tahoma" , "helvetica" , "freesans" , sans-serif"><b>↓↓ 구매링크 ↓↓</b></span></div>
<div style="margin: 0px;">
<br /></div>
<div style="margin: 0px;">
<span style="color: #0000ee;"><b><u><a href="http://bit.ly/2ZaG5Bb" style="color: #4d469c;" target="_blank">http://bit.ly/2ZaG5Bb</a></u></b></span></div>
</div>
<span face=""helvetica neue" , "helvetica" , "arial" , sans-serif" style="background-color: white; color: #333333;"><br /></span><span face=""helvetica neue" , "helvetica" , "arial" , sans-serif" style="background-color: white; color: #333333;"><br /></span><span face=""helvetica neue" , "helvetica" , "arial" , sans-serif" style="background-color: white; color: #333333;">Ubuntu 서버에 R을 설치하기 위해 다음과 같이 입력합니다.</span><br />
<span face=""helvetica neue" , "helvetica" , "arial" , sans-serif" style="background-color: white; color: #333333;"><br />최신버젼 설치하기: https://linuxize.com/post/how-to-install-r-on-ubuntu-20-04/<br /><br /></span>
<pre style="background-color: white; border-radius: 4px; border: 1px solid rgb(204, 204, 204); box-sizing: border-box; color: #333333; font-size: 13px; line-height: 1.42857; margin-bottom: 10px; overflow-wrap: break-word; overflow: auto; padding: 9.5px; word-break: break-all;"><code class="hljs" style="background-color: transparent; border-radius: 0px; box-sizing: border-box; color: inherit; font-size: inherit; padding: 0px; white-space: pre-wrap;">sudo -i
sudo apt-get update
sudo apt-get install r-base</code></pre>
<span face=""helvetica neue" , "helvetica" , "arial" , sans-serif" style="background-color: white; color: #333333;"><br /></span>
<ol style="background-color: white; box-sizing: border-box; color: #333333; font-family: "helvetica neue", helvetica, arial, sans-serif; margin-bottom: 10px; margin-top: 0px;">
<li style="box-sizing: border-box;">먼저 sudo -i를 통해 root 권한을 실행합니다.</li>
<li style="box-sizing: border-box;">패키지들을 업데이트 합니다.</li>
<li style="box-sizing: border-box;">R을 설치합니다.</li>
</ol>
<span face=""helvetica neue" , "helvetica" , "arial" , sans-serif" style="background-color: white; color: #333333;"><br /></span><span style="background-color: white;"><span face=""helvetica neue" , "helvetica" , "arial" , sans-serif" style="color: #333333;">터미널에서 R을 입력하면 R 프로그램이 실행되어 R Gui를 실행할 수 있습니다. 시험상아 각종 함수들을 실행해본 후, R의 종료 명령어인 q()를 입력합니다.</span></span><br />
<span style="background-color: white;"><span face=""helvetica neue" , "helvetica" , "arial" , sans-serif" style="color: #333333;"><br /></span></span>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJEp6QMznnGdJnmRm4gpcMm4OQN45qIXZc1KaaVfCxdYCBOHfXavxQPX5NTbthb4ry9MhY1tet_1z_ooBmIPB7Bhq9xT2CALCBwoXou5T0BVTweQf86dlBl-lqS4K31mMdjnbD5l60rw/s1600/aws_r_start.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="371" data-original-width="548" height="432" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJEp6QMznnGdJnmRm4gpcMm4OQN45qIXZc1KaaVfCxdYCBOHfXavxQPX5NTbthb4ry9MhY1tet_1z_ooBmIPB7Bhq9xT2CALCBwoXou5T0BVTweQf86dlBl-lqS4K31mMdjnbD5l60rw/s640/aws_r_start.png" width="640" /></a></div>
<span style="background-color: white;"><span face=""helvetica neue" , "helvetica" , "arial" , sans-serif" style="color: #333333;"><br /></span></span><span face=""helvetica neue" , "helvetica" , "arial" , sans-serif" style="background-color: white; color: #333333;"><br /></span><span face=""helvetica neue" , "helvetica" , "arial" , sans-serif" style="color: #333333;">Ubuntu에서 R Studio를 설치하기 위해서는 R Studio 사이트를 방문하여 버젼에 맞는 명령어를 찾아 입력하면 됩니다. 사이트 주소 밑 Ubuntu 18에 해당하는 명령어를 다음과 같습니다. ($ 표시는 제외한 후 입력해야 합니다.)</span><br />
<span face=""helvetica neue" , "helvetica" , "arial" , sans-serif" style="color: #333333;"><a href="https://www.blogger.com/goog_1944271474"><br /></a></span><span face=""helvetica neue" , "helvetica" , "arial" , sans-serif" style="color: #333333;"><a href="https://www.rstudio.com/products/rstudio/download-server/" target="_blank">https://www.rstudio.com/products/rstudio/download-server/</a></span><br />
<span face=""helvetica neue" , "helvetica" , "arial" , sans-serif" style="color: #333333;"><span style="background-color: white;"></span></span><br />
<br />
<pre style="background-color: white; border-radius: 4px; border: 1px solid rgb(204, 204, 204); box-sizing: border-box; color: #333333; font-size: 13px; line-height: 1.42857; margin-bottom: 10px; overflow-wrap: break-word; overflow: auto; padding: 9.5px; word-break: break-all;"><code class="hljs" style="background-color: transparent; border-radius: 0px; box-sizing: border-box; color: inherit; font-size: inherit; padding: 0px; white-space: pre-wrap;">sudo apt-get install gdebi-core
wget https://download2.rstudio.org/server/bionic/amd64/rstudio-server-1.2.1335-amd64.deb
sudo gdebi rstudio-server-1.2.1335-amd64.deb</code></pre>
<br />
사용자를 추가하기 위해 다음과 같이 입력합니다.<br />
<br />
<pre style="background-color: white; border-radius: 4px; border: 1px solid rgb(204, 204, 204); box-sizing: border-box; color: #333333; font-size: 13px; line-height: 1.42857; margin-bottom: 10px; overflow-wrap: break-word; overflow: auto; padding: 9.5px; word-break: break-all;"><code class="hljs" style="background-color: transparent; border-radius: 0px; box-sizing: border-box; color: inherit; font-size: inherit; padding: 0px; white-space: pre-wrap;">sudo adduser 유저이름</code></pre>
<span face=""helvetica neue" , "helvetica" , "arial" , sans-serif" style="background-color: white; color: #333333;"><br /></span>입력한 유저이름으로 사용자가 추가됩니다. password의 경우 타이핑을 해도 아무것도 입력 되지 않은 것 처럼 보이지만 입력이 되고 있으며, 기타 정보는 엔터를 눌러 건너뛰어도 됩니다.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgU49AfwPdyJFZq5akl46m_71NPhYfPJUTdAfgeWk0YVZ9uMYU_M9xqsLih5ap6hGikk4NGO8dfyk_zpIgtV_Tvq1A_TIHsptpyf3py_XjDg81sRbL4t4qq6xZ3kW8DhzK0pO53cVR0bA/s1600/aws_add_user.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="357" data-original-width="648" height="352" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgU49AfwPdyJFZq5akl46m_71NPhYfPJUTdAfgeWk0YVZ9uMYU_M9xqsLih5ap6hGikk4NGO8dfyk_zpIgtV_Tvq1A_TIHsptpyf3py_XjDg81sRbL4t4qq6xZ3kW8DhzK0pO53cVR0bA/s640/aws_add_user.png" width="640" /></a></div>
<br />
<br />
이제 웹에서 R Studio를 실행하도록 하겠습니다. 퍼블릭 DNS(IPv4) 주소 뒤에 R Studio의 포트번호인 :8787를 붙인 값이 R Studio Server의 주소입니다.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiATqlozilx2zzJ7W7BzTqPeP6R8ogM4GB3Y0NJuEJC8krlDx6gwxFz1tFqZrvIsmaKsK_zniGoO9cNF8raXBIluquiFP2SM6cVee0reVG-IlvSmbU2924JSv7ujcJwW6kjK01WRzoINw/s1600/aws_public_dns.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="735" data-original-width="1054" height="278" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiATqlozilx2zzJ7W7BzTqPeP6R8ogM4GB3Y0NJuEJC8krlDx6gwxFz1tFqZrvIsmaKsK_zniGoO9cNF8raXBIluquiFP2SM6cVee0reVG-IlvSmbU2924JSv7ujcJwW6kjK01WRzoINw/s400/aws_public_dns.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
서버 주소(DNS:8787)를 웹브라우저에 입력하면 로그인 화면이 뜨며, 미리 생성한 사용자 이름과 비밀 번호를 입력하면 R Studio가 실행됩니다.<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi4Ul0LbuwO4EJR3JvQY7u1v3qprquaixF2Qxzml2wXirObGugYqYoBAZntWcgsi4sWxnAycVIIY5MAd8UAl4jPkslRlqWca1iAAojNImswTXaOybQ1ucCWiD-bZhWi6R17Mr8e-TaN4w/s1600/aws_rstudio_server.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="347" data-original-width="1250" height="176" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi4Ul0LbuwO4EJR3JvQY7u1v3qprquaixF2Qxzml2wXirObGugYqYoBAZntWcgsi4sWxnAycVIIY5MAd8UAl4jPkslRlqWca1iAAojNImswTXaOybQ1ucCWiD-bZhWi6R17Mr8e-TaN4w/s640/aws_rstudio_server.png" width="640" /></a></div>
<br />
<br />
<br />
<br />
현재는 R과 R Studio에서 제공하는 기본 패키지만 설치된 상태이며, 추가로 필요한 소프트웨어와 패키지들을 설치해야 합니다. 먼저 Putty를 통해 Ubuntu 커맨드에서 다음 명령어를 입력하여 필요한 소프트웨어들을 설치합니다.<b><span style="color: red;"> (root 계정으로 설치하는 것을 권장합니다.)</span></b><br />
<br />
<pre style="background-color: white; border-radius: 4px; border: 1px solid rgb(204, 204, 204); box-sizing: border-box; line-height: 1.42857; margin-bottom: 10px; overflow-wrap: break-word; overflow: auto; padding: 9.5px; word-break: break-all;"><code class="hljs" style="background-color: transparent; border-radius: 0px; box-sizing: border-box; padding: 0px;"><span style="color: #333333;"><span style="white-space: pre-wrap;"> sudo apt-get install -y libxml2-dev libcurl4-openssl-dev libssl-dev</span></span><span style="color: rgba(0, 0, 0, 0);"><span style="white-space: pre-wrap;">
</span></span></code></pre>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgkqtxiapP2BwDVLwXki2IYK6GCJg6xVQ_WfM4yzdbJwOMr0TyMMu58N6qQd3chjV2TiAgtDSO4d84nfzVPUChQRvg959D_1pHvQSlrNHLmPunWP2s0oc2Wl6SSpRSpqCq-NBilfrzdvQ/s1600/aws_install_software.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="336" data-original-width="680" height="316" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgkqtxiapP2BwDVLwXki2IYK6GCJg6xVQ_WfM4yzdbJwOMr0TyMMu58N6qQd3chjV2TiAgtDSO4d84nfzVPUChQRvg959D_1pHvQSlrNHLmPunWP2s0oc2Wl6SSpRSpqCq-NBilfrzdvQ/s640/aws_install_software.png" width="640" /></a></div>
<br />
<br />
R 패키지의 경우 R에 접속한 후 <b><span style="color: red;">install.packages('package') </span></b>함수를 통해 설치가 가능합니다. <b><i><span style="color: magenta;">그러나 dplyr 혹은 tidyverse 처럼 dependency가 많은 패키지는 t2.micro가 제공하는 메모리로는 설치 과정에서 서버가 멈춰버립니다. </span></i></b>따라서 이러한 패키지들을 설치하기 위해서는 t2.small 혹은 t2.medium으로 업그레이드하여 패키지를 설치한 후, 다시 t2.micro로 변경할 필요가 있습니다. 물론 업그레이드 시간 만큼 요금이 부과되지만, 1시간 내로 설치가 가능하므로 부담이 없는 수준입니다.<br />
<br />
먼저 AWS 웹페이지에서 [작업] → [인스턴스 상태] → [중지]를 선택하면 인스턴스 상태가 stopped로 변경됩니다. 그 후 [작업] → [인스턴스 설정] → [인스턴스 유형 변경]을 통해 t2.small 혹은 t2.medium으로 유형을 변경한 후 적용을 누릅니다. 그 후 [작업] → [인스턴스 상태] → [시작]을 눌러 다시 서버를 가동합니다.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiv-gViNbpgLsIvW-tUF5Jvx9G1LuZ3qEq8X9fbjlvRgN39Z-vd5Cp5hdn4zr1rQp9qmyyyTWeK3OOcHqDqk6da3XEihRvCj-Ml-r9m7-KSxrnvfQFA3GvnWEzohLixmByZZotK58fYhw/s1600/aws_change.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="516" data-original-width="1346" height="244" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiv-gViNbpgLsIvW-tUF5Jvx9G1LuZ3qEq8X9fbjlvRgN39Z-vd5Cp5hdn4zr1rQp9qmyyyTWeK3OOcHqDqk6da3XEihRvCj-Ml-r9m7-KSxrnvfQFA3GvnWEzohLixmByZZotK58fYhw/s640/aws_change.png" width="640" /></a></div>
<br />
<br />
다시 Putty를 통해 Ubuntu에 접속합니다.<b><span style="color: red;"> 주의할 점은 인스턴트를 중지할 경우 퍼블릭 DNS(IPv4)와 퍼블릭 DNS(IPv4)가 변경된다는 점이며, Host Name에 변경된 IP를 입력해야 접속이 됩니다.</span></b><br />
<b><span style="color: red;"><br /></span></b>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhxEZzqficRYjhEMSJZhSnvfqpVazSZxufPZmC8u1n4diJFiG8WWTsHhUaDM9q1wjEhMqRcnPzreSsaxxeLcT7N-WxAF12mxKO0irok5YoF4A4ZTl8W-OimVjpONp5mGEI8xrqMjE9hqQ/s1600/aws_install_package.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="966" data-original-width="1258" height="490" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhxEZzqficRYjhEMSJZhSnvfqpVazSZxufPZmC8u1n4diJFiG8WWTsHhUaDM9q1wjEhMqRcnPzreSsaxxeLcT7N-WxAF12mxKO0irok5YoF4A4ZTl8W-OimVjpONp5mGEI8xrqMjE9hqQ/s640/aws_install_package.png" width="640" /></a></div>
<br />
<br />
변경된 IP로 접속한 후, ubuntu 로그인 및 sudo -i를 통해 root 계정으로 접속합니다. 그 후 R을 실행 후 <b>install.packages('tidyverse') </b>명령어를 입력하여 tidyverse 패키지를 설치합니다. 패키지가 무거운만큼 설치되는데 오랜 시간이 걸립니다. 이 외에도 크롤링, 스케쥴링, 텔레그램 전송, 샤이니 등에 필요한 패키지와 본인이 사용할 패키지를 미리 설치해주는 것이 좋습니다.<br />
<br />
<pre class="r" style="background-color: whitesmoke; border-radius: 4px; border: 1px solid rgb(204, 204, 204); box-sizing: border-box; color: #333333; font-size: 13px; line-height: 1.42857; margin-bottom: 10px; overflow-wrap: break-word; overflow: auto; padding: 9.5px; word-break: break-all;"><code class="hljs" style="background-color: transparent; border-radius: 0px; box-sizing: border-box; color: inherit; font-size: inherit; padding: 0px; white-space: pre-wrap;">install.packages(<span class="hljs-string" style="box-sizing: border-box; color: #dd1144;">'jsonlite'</span>)
install.packages(<span class="hljs-string" style="box-sizing: border-box; color: #dd1144;">'cronR'</span>)
install.packages(<span class="hljs-string" style="box-sizing: border-box; color: #dd1144;">'telegram.bot'</span>)
install.packages(<span class="hljs-string" style="box-sizing: border-box; color: #dd1144;">'miniUI'</span>)
install.packages(<span class="hljs-string" style="box-sizing: border-box; color: #dd1144;">'shiny'</span>)
install.packages(<span class="hljs-string" style="box-sizing: border-box; color: #dd1144;">'shinyFiles'</span>)
install.packages(<span class="hljs-string" style="box-sizing: border-box; color: #dd1144;">'shinycssloaders'</span>)
install.packages(<span class="hljs-string" style="box-sizing: border-box; color: #dd1144;">'DT'</span>)
install.packages(<span class="hljs-string" style="box-sizing: border-box; color: #dd1144;">'plotly'</span>)</code></pre>
<br />
가끔 패키지 설치시 다음과 같은 오류가 발생할 수 있습니다.<br />
<br />
<pre style="background-color: white; border-radius: 4px; border: 1px solid rgb(204, 204, 204); box-sizing: border-box; color: #333333; font-size: 13px; line-height: 1.42857; margin-bottom: 10px; overflow-wrap: break-word; overflow: auto; padding: 9.5px; word-break: break-all;"><code class="hljs" style="background-color: transparent; border-radius: 0px; box-sizing: border-box; color: inherit; font-size: inherit; padding: 0px; white-space: pre-wrap;">failed to lock directory ‘/usr/local/lib/R/site-library’ for modifying Try removing ‘/usr/local/lib/R/site-library/00LOCK-scales’</code></pre>
<br />
<span face=""helvetica neue" , "helvetica" , "arial" , sans-serif" style="background-color: white; color: #333333;">오류 발생 시 다음과 같이 입력하면 문제가 해결됩니다.</span><br />
<span face=""helvetica neue" , "helvetica" , "arial" , sans-serif" style="background-color: white; color: #333333; font-size: 14px;"><br /></span>
<pre style="background-color: white; border-radius: 4px; border: 1px solid rgb(204, 204, 204); box-sizing: border-box; color: #333333; font-size: 13px; line-height: 1.42857; margin-bottom: 10px; overflow-wrap: break-word; overflow: auto; padding: 9.5px; word-break: break-all;"><code class="hljs" style="background-color: transparent; border-radius: 0px; box-sizing: border-box; color: inherit; font-size: inherit; padding: 0px; white-space: pre-wrap;">install.packages('패키지명', dependencies=TRUE, INSTALL_opts = c('--no-lock'))</code></pre>
<span face=""helvetica neue" , "helvetica" , "arial" , sans-serif" style="background-color: white; color: #333333; font-size: 14px;"><br /></span><span face=""helvetica neue" , "helvetica" , "arial" , sans-serif" style="background-color: white;"><span style="color: #333333;">향후 추가적으로 설치할 패키지가 있을 경우에도 위와 같이 </span><b><span style="color: red;">ubuntu에서 root 계정으로 패키지를 설치하는 것을 권장</span></b><span style="color: #333333;">합니다. </span><b><span style="color: red;">패키지 설치가 완료되면 다시 인스턴스 유형을 t2.micro로 변경하며, 퍼블릭 DNS(IPv4)와 퍼블릭 DNS(IPv4)는 다시 변경됩니다.</span></b></span>Unknownnoreply@blogger.com1tag:blogger.com,1999:blog-23651150467485474.post-44149937923188434402019-09-06T12:29:00.002+09:002019-09-06T12:31:40.973+09:00AWS를 이용한 투자 자동화 구축하기! (1) AWS EC2 인스턴스 만들고 접속하기<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgd96U2p8TQzlxOb8LM5zV93cCZrRDzt3_ZaYsKLE27kKNMpnBOljcnAUId01Jeh-A_wM7fGYKea5BV8UFZnry4qIaQVBPkdbvK1YbsoK5awgTE2cZVWBaSTSnhyerUicmwIJmVRNFCfw/s1600/aws_process.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="263" data-original-width="568" height="296" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgd96U2p8TQzlxOb8LM5zV93cCZrRDzt3_ZaYsKLE27kKNMpnBOljcnAUId01Jeh-A_wM7fGYKea5BV8UFZnry4qIaQVBPkdbvK1YbsoK5awgTE2cZVWBaSTSnhyerUicmwIJmVRNFCfw/s640/aws_process.png" width="640" /></a></div>
<br />
스케쥴러를 이용한 크롤링 및 데이터 전송의 단점은 로컬 PC가 켜있는 상태에서만 작동된다는 점입니다. 그러나 <b><span style="color: red;">아마존 웹서비스(AWS: Amazon Web Service)</span></b>를 통해 가상 서버를 이용할 경우 해당 작업을 24시간 수행할 수 있음은 물론, R Studio와 샤이니 서버를 설치하여 샤이니 앱을 언제든 구동할 수 있습니다.<br />
<br />
<br />
<div class="separator" style="background-color: white; clear: both; color: #444444; font-family: arial, tahoma, helvetica, freesans, sans-serif; font-size: 13px; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEggVFfYoCDi7dLAjOBhWu25VnnQc3ZdE1byunsCPV0a8M2tIsJpBeeRu9mAbbG44rfdJatb_5EQLVZU5Kk3DZrBFiwheSPEDZjswR9UlD2TE-EXP0SsOig5eSd9SsQiEXewJxhOp8a6yw/s1600/R%25EC%259D%2584+%25EC%259D%25B4%25EC%259A%25A9%25ED%2595%259C+%25ED%2580%2580%25ED%258A%25B8+%25ED%2588%25AC%25EC%259E%2590+%25ED%258F%25AC%25ED%258A%25B8%25ED%258F%25B4%25EB%25A6%25AC%25EC%2598%25A4+%25EB%25A7%258C%25EB%2593%25A4%25EA%25B8%25B0_%25EC%259E%2585%25EC%25B2%25B4.png" imageanchor="1" style="color: #4d469c; margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1600" data-original-width="1600" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEggVFfYoCDi7dLAjOBhWu25VnnQc3ZdE1byunsCPV0a8M2tIsJpBeeRu9mAbbG44rfdJatb_5EQLVZU5Kk3DZrBFiwheSPEDZjswR9UlD2TE-EXP0SsOig5eSd9SsQiEXewJxhOp8a6yw/s400/R%25EC%259D%2584+%25EC%259D%25B4%25EC%259A%25A9%25ED%2595%259C+%25ED%2580%2580%25ED%258A%25B8+%25ED%2588%25AC%25EC%259E%2590+%25ED%258F%25AC%25ED%258A%25B8%25ED%258F%25B4%25EB%25A6%25AC%25EC%2598%25A4+%25EB%25A7%258C%25EB%2593%25A4%25EA%25B8%25B0_%25EC%259E%2585%25EC%25B2%25B4.png" style="background: transparent; border-radius: 0px; border: 1px solid transparent; box-shadow: rgba(0, 0, 0, 0.2) 0px 0px 0px; padding: 8px; position: relative;" width="400" /></a></div>
<br style="background-color: white; color: #444444; font-family: arial, tahoma, helvetica, freesans, sans-serif; font-size: 13px;" />
<div style="background-color: white; color: #444444; font-family: arial, tahoma, helvetica, freesans, sans-serif; font-size: 13px; text-align: center;">
<span style="font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><b>'R을 이용한 퀀트 투자 포트폴리오 만들기'가 출간 되었습니다.</b></span><br />
<span style="font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><b>많은 관심 부탁드리겠습니다.</b></span><br />
<span style="font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><b><br /></b></span><span style="font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><b>↓↓ 구매링크 ↓↓</b></span><br />
<br />
<span style="color: #0000ee;"><b><u><a href="http://bit.ly/2ZaG5Bb" style="color: #4d469c;" target="_blank">http://bit.ly/2ZaG5Bb</a></u></b></span></div>
<div style="background-color: white; color: #444444; font-family: arial, tahoma, helvetica, freesans, sans-serif; font-size: 13px; text-align: center;">
<span style="color: #0000ee;"><b><br /></b></span></div>
<div style="background-color: white; color: #444444; font-family: arial, tahoma, helvetica, freesans, sans-serif; font-size: 13px; text-align: center;">
<br /></div>
<div style="background-color: white; text-align: center;">
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
먼저 AWS EC2 인스턴스를 만들도록 합니다.</div>
<div style="text-align: left;">
<br /></div>
<div class="separator" style="clear: both;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhGEFlkoKt9bpqhJTdS244OsjMaaOl97sHmduUPkLDdA9ahb-i3auZKhTjypHm12eA05Fu0lKSBYzh9D9OwMHtpM-dzSztUWGa8ulmrFw_Hu3XYD1sXto-juoEj4ZMJcRUEy2Ryish7Fg/s1600/aws_ec2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="414" data-original-width="905" height="291" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhGEFlkoKt9bpqhJTdS244OsjMaaOl97sHmduUPkLDdA9ahb-i3auZKhTjypHm12eA05Fu0lKSBYzh9D9OwMHtpM-dzSztUWGa8ulmrFw_Hu3XYD1sXto-juoEj4ZMJcRUEy2Ryish7Fg/s640/aws_ec2.png" width="640" /></a></div>
<div style="text-align: left;">
<br /></div>
<div style="color: #444444; font-family: arial, tahoma, helvetica, freesans, sans-serif; text-align: left;">
<br /></div>
<div style="text-align: left;">
<span style="color: #444444; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><a href="https://aws.amazon.com/ko/" target="_blank">https://aws.amazon.com/ko/ </a>에서 계정을 만들며, 등록한 카드를 통해 1달러가 결제되지만 추후 환불이 됩니다. 계정 생성이 완료된 후 서비스에서 [EC2]를 선택한 후 [인스턴트 시작] 버튼을 누릅니다. 주의할 점은 서비스 상태가 아시아 태평양(서울)로 만들어야 한다는 점이며, 만일 다른 지역일 경우 상단부의 지역선택란을 통해 해당 지역으로 변경할 수 있습니다.</span></div>
<div style="text-align: left;">
<span style="color: #444444; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><br /></span></div>
<div style="text-align: left;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYv_FW95OETJ6nRfTT_cmWx512bf0ENzXdcc2QCjLAduBeCWawPxBrLABaR1bKwMwWIkgsaqCVZltUxigtNEGn1TYGlOAUMsnNiye4xDEGS4tlEWvmUBPqv92hYi51nwyDrHXBQsyseQ/s1600/aws_local.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" data-original-height="635" data-original-width="967" height="420" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYv_FW95OETJ6nRfTT_cmWx512bf0ENzXdcc2QCjLAduBeCWawPxBrLABaR1bKwMwWIkgsaqCVZltUxigtNEGn1TYGlOAUMsnNiye4xDEGS4tlEWvmUBPqv92hYi51nwyDrHXBQsyseQ/s640/aws_local.png" width="640" /></a></div>
<div style="text-align: left;">
<span style="color: #444444; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><br /></span></div>
<div style="text-align: left;">
<span style="color: #444444; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><br /></span></div>
<div style="text-align: left;">
<span style="color: #444444; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><b>1번 단계</b>인 AMI 선택에서 Ubuntu Server SSD Volume Type을 선택합니다.</span></div>
<div style="text-align: left;">
<span style="color: #444444; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><br /></span></div>
<div class="separator" style="clear: both;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEismwkmhOcuc4caWDr76YoZDrcImV_AOse1L8Pdbv5yy9qqQBctrnYxuzC319BE5TzLEyBLuH0Ph49b0jFnaFjk1YrkKAHyqTNhHZKgCPpfGPWO8ZXHSE4Cv59AGeIGbkYNbEl4XGocLw/s1600/aws_ami.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="470" data-original-width="1219" height="246" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEismwkmhOcuc4caWDr76YoZDrcImV_AOse1L8Pdbv5yy9qqQBctrnYxuzC319BE5TzLEyBLuH0Ph49b0jFnaFjk1YrkKAHyqTNhHZKgCPpfGPWO8ZXHSE4Cv59AGeIGbkYNbEl4XGocLw/s640/aws_ami.png" width="640" /></a></div>
<div class="separator" style="clear: both;">
<br /></div>
<div style="text-align: left;">
<span style="color: #444444; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><br /></span></div>
<div style="text-align: left;">
<span style="color: #444444; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><b>2번 단계</b>인 인스턴스 유형 선택에서는 t2.micro를 선택한 후 하단의 [다음: 인스턴스 세부 정보 구성]을 누릅니다. t2.micro 유형은 최초 12개월 내 일정 시간 동안 무료로 사용이 가능하며, 무료 기간 이후에도 요금이 매우 저렴해 크롤링이나 샤이니 앱 배포 등 간단한 작업을 하기에 적합합니다.</span></div>
<div style="text-align: left;">
<span style="color: #444444; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><br /></span></div>
<div class="separator" style="clear: both;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUtNeXAPUsriczTA_UQRx0AoUZaW7Puh_hSGLGYKN5tr-pbGm4FuKrTwKEysfmuW-RXOo_w_Bjbu3gJHk27uIqGDiC9Ls8Ds17DQw5b1GQK6GfnxjM9oxY513w4HhketspKfDmMGea0w/s1600/aws_instance.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="545" data-original-width="1255" height="276" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUtNeXAPUsriczTA_UQRx0AoUZaW7Puh_hSGLGYKN5tr-pbGm4FuKrTwKEysfmuW-RXOo_w_Bjbu3gJHk27uIqGDiC9Ls8Ds17DQw5b1GQK6GfnxjM9oxY513w4HhketspKfDmMGea0w/s640/aws_instance.png" width="640" /></a></div>
<div style="text-align: left;">
<span style="color: #444444; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><br /></span></div>
<div style="text-align: left;">
<span style="color: #444444; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><br /></span></div>
<div style="text-align: left;">
<span style="color: #444444; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><br /></span></div>
<div style="text-align: left;">
<span style="color: #444444; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;">3~5 단계는 선택사항이 없으므로 바로 <b>6번 단계</b>인 보안 그룹 구성으로 이동하며, 아래 그림과 같이 입력합니다.</span></div>
<div style="text-align: left;">
<span style="color: #444444; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><br /></span></div>
<div class="separator" style="clear: both;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEht25WmiVtirC02qAuASfnXmRP0mMjifU2yD3E7aJa5VUVaGacyBb5FTcF-UYFG_-RWNaawubNjke3dUo5RW5xV3hk8pJ3FFCHpr6tezaVeCzcDiBMoWBQPZlzKc-jm4ty4lPGQydyoTQ/s1600/aws_security.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="504" data-original-width="1254" height="256" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEht25WmiVtirC02qAuASfnXmRP0mMjifU2yD3E7aJa5VUVaGacyBb5FTcF-UYFG_-RWNaawubNjke3dUo5RW5xV3hk8pJ3FFCHpr6tezaVeCzcDiBMoWBQPZlzKc-jm4ty4lPGQydyoTQ/s640/aws_security.png" width="640" /></a></div>
<div style="text-align: left;">
<span style="color: #444444; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><br /></span></div>
<div style="text-align: left;">
<span style="color: #444444; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><br /></span></div>
<div style="text-align: left;">
<span style="color: #444444; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"></span><br />
<div>
<span style="color: #444444; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;">IP에 상관없이 접속하기 위해 소스는 <b>[위치 무관]</b>을 선택하며, R studio의 포트 범위는 8787, R shiny의 포트 범위는 3838을 입력합니다.</span></div>
<span style="color: #444444; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"></span><br />
<div>
<span style="color: #444444; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><br /></span></div>
<span style="color: #444444; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"></span><br />
<div>
<span style="color: #444444; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><b>7번 단계</b>에서 [시작하기]를 누르면 아래 그림과 같이 EC2 인스턴스에 접속할 수 있는 키 페어를 생성하기 위한 팝업이 뜹니다. [새 키페어 생성]을 선택하고 이름을 입력한 뒤 다운로드 버튼을 누르면 pem 확장자의 파일이 생성되며, 해당 파일은 매우 중요하므로 잘 보관해야 합니다.</span></div>
<span style="color: #444444; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"></span><br />
<div>
<span style="color: #444444; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><br /></span></div>
<span style="color: #444444; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"></span></div>
<div style="text-align: left;">
<span style="color: #444444; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><br /></span></div>
<div class="separator" style="clear: both;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhTs6nSZCDDHY_FRcUQvtbc2iT4u2qC5xJGAtFimXMrDElTbaieqAbQhFi7PpeEx5i1VKGQcO7OSU5NTxVHH-20NeSWQfMsfor4CeT3Yss7wyIPtBe_lF-UmnuWIYpzNUkCvK1X91q6Cg/s1600/aws_key.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="690" data-original-width="1136" height="388" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhTs6nSZCDDHY_FRcUQvtbc2iT4u2qC5xJGAtFimXMrDElTbaieqAbQhFi7PpeEx5i1VKGQcO7OSU5NTxVHH-20NeSWQfMsfor4CeT3Yss7wyIPtBe_lF-UmnuWIYpzNUkCvK1X91q6Cg/s640/aws_key.png" width="640" /></a></div>
<div style="text-align: left;">
<span style="color: #444444; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><br /></span></div>
<div style="text-align: left;">
<span style="color: #444444; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><br /></span></div>
<div style="text-align: left;">
<span style="color: #444444; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><br /></span></div>
<div style="text-align: left;">
<span style="color: #444444; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;">인스턴스 생성이 완료되면 아래와 같은 화면을 통해 인스턴스의 상태를 확인할 수 있습니다.</span></div>
<div style="text-align: left;">
<span style="color: #444444; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><br /></span></div>
<div class="separator" style="clear: both;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjMxl9QpgT3OPBvawm_RTEHArTHUAac5synBW4G9gTRSdOHzcQ5Ns-2EkX5sp4RlVQfU8XiP9fyf8y7dWDn-t4Mtv4TNZ0FvwXVRyvcefHq65iSU518w-RXjK7sTrdIVxfT0pbFLZRR4w/s1600/aws_status.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="697" data-original-width="1251" height="356" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjMxl9QpgT3OPBvawm_RTEHArTHUAac5synBW4G9gTRSdOHzcQ5Ns-2EkX5sp4RlVQfU8XiP9fyf8y7dWDn-t4Mtv4TNZ0FvwXVRyvcefHq65iSU518w-RXjK7sTrdIVxfT0pbFLZRR4w/s640/aws_status.png" width="640" /></a></div>
<div style="text-align: left;">
<span style="color: #444444; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><br /></span></div>
<div style="text-align: left;">
<span style="color: #444444; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><br /></span></div>
<div style="text-align: left;">
<span style="color: #444444; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;">.</span></div>
<div style="text-align: left;">
<span style="color: #444444; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;">EC2 인스턴스에 접속하기 위해서 Putty 프로그램을 이용해야 하며, 아래 사이트에서 다운로드 받을 수 있습니다. 본인의 OS에 맞는 설치파일을 다운로드 받은 후 설치합니다.</span></div>
<div style="text-align: left;">
<span style="color: #444444; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><br /></span></div>
<div style="text-align: left;">
<a class="uri" href="https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html" style="box-sizing: border-box; color: #337ab7; font-family: "helvetica neue", helvetica, arial, sans-serif;" target="_blank">https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html</a></div>
<div style="text-align: left;">
<span style="color: #444444; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><br /></span></div>
<div style="text-align: left;">
<span style="color: #444444; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><br /></span></div>
<div class="separator" style="clear: both;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizQl5fcLp2dLFcKbpN-ocjF5YaI0JdtvTcAspX6eyrRh3SyxV1f-2-oU_gscazBDeWeE5OwWxo4B7o-0y11yN6gvsywrzC8kFT529joFBmt7_wDRDW9wqkVmOMuURzfKKHfx1WRClTCQ/s1600/aws_down_putty.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="614" data-original-width="1213" height="201" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizQl5fcLp2dLFcKbpN-ocjF5YaI0JdtvTcAspX6eyrRh3SyxV1f-2-oU_gscazBDeWeE5OwWxo4B7o-0y11yN6gvsywrzC8kFT529joFBmt7_wDRDW9wqkVmOMuURzfKKHfx1WRClTCQ/s400/aws_down_putty.png" width="400" /></a></div>
<div style="text-align: left;">
<span style="color: #444444; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><br /></span></div>
<div style="text-align: left;">
<span style="color: #444444; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><br /></span></div>
<div style="text-align: left;">
<span style="color: #444444; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;">EC2 인스턴스에 접속하기 이전에, 위에서 받은 pem 형식의 키 페어를 ppk 형식으로 변환해야 하며, Putty 설치시 함께 설치되는 puttygen 프로그램을 통해 해당 작업을 수행합니다</span></div>
<div style="text-align: left;">
<span style="color: #444444; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><br /></span></div>
<div style="text-align: left;">
<span style="color: #444444; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><br /></span></div>
<div class="separator" style="clear: both;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgeDQn72L00Bf-JN0GsoOUGfRAfsTl0yhUjEmwqvp9YV7MIvQnnP6BrcrP5hSTDphJ5s6M_I-1DzScU8K_OG4EOgKq9DkrJrKRtX3pl95myjglcf8R3Lv0V2_bZzo-6LSBl7kg1MiWMqA/s1600/aws_puttygen.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="466" data-original-width="469" height="396" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgeDQn72L00Bf-JN0GsoOUGfRAfsTl0yhUjEmwqvp9YV7MIvQnnP6BrcrP5hSTDphJ5s6M_I-1DzScU8K_OG4EOgKq9DkrJrKRtX3pl95myjglcf8R3Lv0V2_bZzo-6LSBl7kg1MiWMqA/s400/aws_puttygen.png" width="400" /></a></div>
<div class="separator" style="clear: both;">
<br /></div>
<div class="separator" style="clear: both;">
<br /></div>
<div class="separator" style="clear: both;">
</div>
<ol>
<li style="text-align: left;">Load an existing private key file의 [Load] 버튼을 누른 후 파일 형식을 All files로 변경하여 미리 다운로드 받은 pem 형식의 키 파일을 선택합니다.</li>
<li style="text-align: left;">Type of key to generate(생성할 키 유형)에서 RSA를 선택하며, 구버전의 PuTTYgen을 사용하는 경우 SSH-2 RSA를 선택합니다.</li>
<li style="text-align: left;">Save the generated key 부분에서 [Save private key]를 누르면 ppk 형식의 키 파일이 저장됩니다.</li>
</ol>
<br />
<div style="text-align: left;">
<span style="color: #333333; font-family: "helvetica neue" , "helvetica" , "arial" , sans-serif;">이제 Putty 프로그램을 통해 EC2 인스턴스에 접속해보도록 하겠습니다.</span></div>
<div style="text-align: left;">
<span style="color: #333333; font-family: "helvetica neue" , "helvetica" , "arial" , sans-serif;"><span style="font-size: 14px;"><br /></span></span></div>
<div style="text-align: left;">
<span style="color: #333333; font-family: "helvetica neue" , "helvetica" , "arial" , sans-serif;"><span style="font-size: 14px;"><br /></span></span></div>
<div class="separator" style="clear: both;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhL08Ezdp-9PGo4TemNxplveeyssd9BABYJvJe_1B84ndmar5Uh0WFWZzzhdV1Un1PBplBn6BZYtYcUhUw2MKdedUnbs7V_s-dOHfViW0yZjnIKfjJf8rJxy6_EOtnySqEbAnXlk2rm4Q/s1600/aws_public_ip.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="730" data-original-width="999" height="291" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhL08Ezdp-9PGo4TemNxplveeyssd9BABYJvJe_1B84ndmar5Uh0WFWZzzhdV1Un1PBplBn6BZYtYcUhUw2MKdedUnbs7V_s-dOHfViW0yZjnIKfjJf8rJxy6_EOtnySqEbAnXlk2rm4Q/s400/aws_public_ip.png" width="400" /></a></div>
<div style="text-align: left;">
<span style="color: #333333; font-family: "helvetica neue" , "helvetica" , "arial" , sans-serif; font-size: 14px;"><br /></span></div>
<div class="separator" style="clear: both;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0NiP_xr11Pw0pHx-GHrCO2IIRTYFzi82C01imq1OS03N0dMo3xyaNQLrAiMEeEfLyjVQSAxdlhsj_sh9tBN_6iYkGP8E6gMD4IWH4xUSjslQqo9Mupo6IXPzZ6QF1FjbQMVOIjSOUSg/s1600/aws_putty_ip.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="436" data-original-width="449" height="387" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0NiP_xr11Pw0pHx-GHrCO2IIRTYFzi82C01imq1OS03N0dMo3xyaNQLrAiMEeEfLyjVQSAxdlhsj_sh9tBN_6iYkGP8E6gMD4IWH4xUSjslQqo9Mupo6IXPzZ6QF1FjbQMVOIjSOUSg/s400/aws_putty_ip.png" width="400" /></a></div>
<div class="separator" style="clear: both;">
<br /></div>
<div class="separator" style="clear: both;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
AWS 홈페이지에서 IPv4 퍼블릭 IP에 해당하는 주소를 복사한 후, Putty의 Host Name에 입력합니다. Port와 Connection type은 각각 기본값인 22와 SSH를 유지합니다.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div style="text-align: left;">
<span style="color: #333333; font-family: "helvetica neue" , "helvetica" , "arial" , sans-serif; font-size: 14px;"><br /></span></div>
<div class="separator" style="clear: both;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgT0yW7mm887eNeWLnCJByndD0-yLbm05USITTCt81xeKH8ZQEDWjP6F43dPxDA3-21zD79mwhYsY3tgsG9X_BfuTAI7SiTBHCOI_X537uUW5Izlq5PT8PpCOTqD3A4lx2YdF94X62alA/s1600/aws_putty_key.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="437" data-original-width="444" height="392" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgT0yW7mm887eNeWLnCJByndD0-yLbm05USITTCt81xeKH8ZQEDWjP6F43dPxDA3-21zD79mwhYsY3tgsG9X_BfuTAI7SiTBHCOI_X537uUW5Izlq5PT8PpCOTqD3A4lx2YdF94X62alA/s400/aws_putty_key.png" width="400" /></a></div>
<div style="text-align: left;">
<span style="color: #333333; font-family: "helvetica neue" , "helvetica" , "arial" , sans-serif; font-size: 14px;"><br /></span></div>
<div style="text-align: left;">
<span style="color: #333333; font-family: "helvetica neue" , "helvetica" , "arial" , sans-serif;">좌측의 SSH → Auth를 선택한 후 [Private key file for authentication] 부분의 [Browse] 버튼을 눌러 위에서 생성한 ppk 형식의 키 페어 파일을 선택합니다.</span></div>
<div style="text-align: left;">
<span style="color: #333333; font-family: "helvetica neue" , "helvetica" , "arial" , sans-serif;"><br /></span></div>
<div style="text-align: left;">
<span style="color: #333333; font-family: "helvetica neue" , "helvetica" , "arial" , sans-serif;"><br /></span></div>
<div class="separator" style="clear: both;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjRn3ByFOnAfNKxZqr_5LO562kemYlCJNsJlA_-ENRegazq1Vrsc2o8TWqO5PD799PB5SVfesO18W7FE9KbXTiKMBkAcuVSq_2vXvt6MD9eHMFaH6pK0F497mgkHpGZIL2GKZMFfdlsdw/s1600/aws_putty_end.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="438" data-original-width="449" height="390" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjRn3ByFOnAfNKxZqr_5LO562kemYlCJNsJlA_-ENRegazq1Vrsc2o8TWqO5PD799PB5SVfesO18W7FE9KbXTiKMBkAcuVSq_2vXvt6MD9eHMFaH6pK0F497mgkHpGZIL2GKZMFfdlsdw/s400/aws_putty_end.png" width="400" /></a></div>
<div class="separator" style="clear: both;">
<br /></div>
<div class="separator" style="clear: both;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
다시 좌측 상단의 Session으로 돌아와 [Save]를 눌러 셋팅을 저장한 후, 하단의 [Open]을 눌러 EC2 인스턴스에 접속합니다.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
PuTTY Security Alert 팝업창에서 [예(Y)]를 누른 후, 터미널에 ubuntu를 입력하면 Ubuntu 서버에 접속이 됩니다.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRfsU9V-QgvyvEU7PlfzPypxTzRx82ejRdaYOIrThrG6l8LvzvxUTx8-kaephxQVumMPgOIDz8DYL6_F2l7t4njSTvYsm1bz4OMTmNmEHivxwEdleUmsuJuZrc-Sz3WiHe2Qm6D3rpIA/s1600/aws_putty_command.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="556" data-original-width="640" height="555" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRfsU9V-QgvyvEU7PlfzPypxTzRx82ejRdaYOIrThrG6l8LvzvxUTx8-kaephxQVumMPgOIDz8DYL6_F2l7t4njSTvYsm1bz4OMTmNmEHivxwEdleUmsuJuZrc-Sz3WiHe2Qm6D3rpIA/s640/aws_putty_command.png" width="640" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div style="text-align: left;">
</div>
</div>
Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-23651150467485474.post-59297598206986384752019-09-01T11:31:00.003+09:002019-09-03T09:47:19.491+09:00그래픽 문법(Grammar of Graphics) 관점에서 이해하는 ggplot<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1ICzp2lpcLEw-mEyUB5i5KG2krVFoq7PjG34noS9AJLCVd8XXEBcHcnlkox9zBsz_6l8PiKJU4qoAQ2HfeIGWCgUBkfavSqjDWwbM66_IYGw2yclGCXU5xFoM7OYgtV1AqXllgjJWKw/s1600/%25ED%2581%25AC%25EA%25B8%25B0%25EB%25B3%2580%25ED%2599%2598_ggplot-3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="627" data-original-width="1200" height="208" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1ICzp2lpcLEw-mEyUB5i5KG2krVFoq7PjG34noS9AJLCVd8XXEBcHcnlkox9zBsz_6l8PiKJU4qoAQ2HfeIGWCgUBkfavSqjDWwbM66_IYGw2yclGCXU5xFoM7OYgtV1AqXllgjJWKw/s400/%25ED%2581%25AC%25EA%25B8%25B0%25EB%25B3%2580%25ED%2599%2598_ggplot-3.png" width="400" /></a></div>
<br />
<br />
<br />
<div class="separator" style="background-color: white; clear: both; color: #444444; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13px; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEggVFfYoCDi7dLAjOBhWu25VnnQc3ZdE1byunsCPV0a8M2tIsJpBeeRu9mAbbG44rfdJatb_5EQLVZU5Kk3DZrBFiwheSPEDZjswR9UlD2TE-EXP0SsOig5eSd9SsQiEXewJxhOp8a6yw/s1600/R%25EC%259D%2584+%25EC%259D%25B4%25EC%259A%25A9%25ED%2595%259C+%25ED%2580%2580%25ED%258A%25B8+%25ED%2588%25AC%25EC%259E%2590+%25ED%258F%25AC%25ED%258A%25B8%25ED%258F%25B4%25EB%25A6%25AC%25EC%2598%25A4+%25EB%25A7%258C%25EB%2593%25A4%25EA%25B8%25B0_%25EC%259E%2585%25EC%25B2%25B4.png" imageanchor="1" style="color: #4d469c; margin-left: 1em; margin-right: 1em; text-decoration-line: none;"><img border="0" data-original-height="1600" data-original-width="1600" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEggVFfYoCDi7dLAjOBhWu25VnnQc3ZdE1byunsCPV0a8M2tIsJpBeeRu9mAbbG44rfdJatb_5EQLVZU5Kk3DZrBFiwheSPEDZjswR9UlD2TE-EXP0SsOig5eSd9SsQiEXewJxhOp8a6yw/s400/R%25EC%259D%2584+%25EC%259D%25B4%25EC%259A%25A9%25ED%2595%259C+%25ED%2580%2580%25ED%258A%25B8+%25ED%2588%25AC%25EC%259E%2590+%25ED%258F%25AC%25ED%258A%25B8%25ED%258F%25B4%25EB%25A6%25AC%25EC%2598%25A4+%25EB%25A7%258C%25EB%2593%25A4%25EA%25B8%25B0_%25EC%259E%2585%25EC%25B2%25B4.png" style="background: transparent; border-radius: 0px; border: 1px solid transparent; box-shadow: rgba(0, 0, 0, 0.2) 0px 0px 0px; padding: 8px; position: relative;" width="400" /></a></div>
<br style="background-color: white; color: #444444; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13px;" />
<div style="text-align: center;">
<span style="color: #444444; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><b>'R을 이용한 퀀트 투자 포트폴리오 만들기'가 출간 되었습니다.</b></span><br />
<span style="color: #444444; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><b>많은 관심 부탁드리겠습니다.</b></span><br />
<span style="color: #444444; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><b><br /></b></span>
<span style="color: #444444; font-family: "arial" , "tahoma" , "helvetica" , "freesans" , sans-serif;"><b>↓↓ 구매링크 ↓↓</b></span><br />
<br />
<span style="color: #0000ee;"><b><u><a href="http://bit.ly/2ZaG5Bb" target="_blank">http://bit.ly/2ZaG5Bb</a></u></b></span><br />
<span style="color: #0000ee;"><b><u><br /></u></b></span></div>
<span style="text-align: center;"><b>====================</b></span><br />
<br />
<br />
<b><i><span style="color: red;">그래픽 문법(Grammar of Graphics)</span></i></b>은 릴랜드 윌킨스(Leland Wilkinson)의 책 The Grammar of Graphics에서 따온 것으로써, 데이터를 어떻게 표현할 것인지에 대한 내용입니다.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjMeGv7Hg2Z_Huo_J52h_htJxOIDO7aoZF-jPP_RdkIpCuI8AMQcQYZXueSsFSMjMfsKyZ_rf4hSeFncLFjBaN3F1ZK7oyHcE_M1cX_qI1JMEt0Y7weuan3M2nG7woO7XsoMXGZxZcMOg/s1600/41w-MN9nlCL._SX313_BO1%252C204%252C203%252C200_.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="499" data-original-width="315" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjMeGv7Hg2Z_Huo_J52h_htJxOIDO7aoZF-jPP_RdkIpCuI8AMQcQYZXueSsFSMjMfsKyZ_rf4hSeFncLFjBaN3F1ZK7oyHcE_M1cX_qI1JMEt0Y7weuan3M2nG7woO7XsoMXGZxZcMOg/s400/41w-MN9nlCL._SX313_BO1%252C204%252C203%252C200_.jpg" width="252" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<i><b>문법은 언어의 표현을 풍부하게 만든다. 단어만 있고 문법이 없는 언어가 있다면(단어 = 문장), 오직 단어의 갯수만큼만 생각을 표현할 수 있다. 문장 내에서 단어가 어떻게 구성되는 지를 규정함으로써, 문법은 언어의 범위를 확장한다.</b></i><br />
<br />
<div style="text-align: right;">
<b>Leland Wilkinson, 《The Grammar of Graphics》</b></div>
<br />
<br />
<br />
그래픽 문법에서 말하는 요소는 다음과 같습니다.<br />
<br />
<ol>
<li><b><span style="color: magenta;">Data: 시각화에 사용될 데이터</span></b></li>
<li><b><span style="color: magenta;">Aesthetics: 데이터를 나타내는 시각적인 요소(x축, y축, 사이즈, 색깔, 모양 등)</span></b></li>
<li><b><span style="color: magenta;">Geometrics: 데이터를 나타내는 도형</span></b></li>
<li><b><span style="color: magenta;">Facets: 하위 집합으로 분할하여 시각화</span></b></li>
<li><b><span style="color: magenta;">Statistics: 통계값을 표현</span></b></li>
<li><b><span style="color: magenta;">Coordinates: 데이터를 표현 할 이차원 좌표계</span></b></li>
<li><b><span style="color: magenta;">Theme: 그래프를 꾸밈</span></b></li>
</ol>
<br />
<div>
ggplot2 패키지의 앞글자가 gg인 것에서 알 수 있듯이, 해당 패키지는 그래픽 문법을 토대로 시각화를 표현하며, 전반적인 시각화의 순서는 위의 순서와 같습니다.</div>
<div>
<div>
<br /></div>
<div>
ggplot2 패키지의 특징은 각 요소를 연결할 때 플러스(+) 기호를 사용한다는 점이며, 이는 그래픽 문법의 순서에 따라 요소들을 쌓아나간 후 최종적인 그래픽을 완성하는 패키지의 특성 때문입니다.</div>
</div>
<br />
<div>
<br /></div>
<div>
<b>1. Data, Aesthetics, Geometrics</b><br />
<br /></div>
<br />
<pre class="brush: py">library(ggplot2)
data(diamonds)
head(diamonds)
## # A tibble: 6 x 10
## carat cut color clarity depth table price x y z
## 1 0.23 Ideal E SI2 61.5 55 326 3.95 3.98 2.43
## 2 0.21 Premium E SI1 59.8 61 326 3.89 3.84 2.31
## 3 0.23 Good E VS1 56.9 65 327 4.05 4.07 2.31
## 4 0.290 Premium I VS2 62.4 58 334 4.2 4.23 2.63
## 5 0.31 Good J SI2 63.3 58 335 4.34 4.35 2.75
## 6 0.24 Very Good J VVS2 62.8 57 336 3.94 3.96 2.48
</pre>
<br />
<br />
ggplot2 패키지를 불러온 후, 기본적으로 제공되는 다이아몬드 데이터를 불러오도록 하겠습니다. 데이터의 각 변수는 다음과 같습니다.<br />
<br />
<ul>
<li><span style="font-size: x-small;">carat: 다이아몬드 무게</span></li>
<li><span style="font-size: x-small;">cut: 컷팅의 가치</span></li>
<li><span style="font-size: x-small;">color: 다이아몬스 색상</span></li>
<li><span style="font-size: x-small;">clarity: 깨끗한 정도</span></li>
<li><span style="font-size: x-small;">depth: 깊이 비율, z / mean(x, y)</span></li>
<li><span style="font-size: x-small;">table: 가장 넓은 부분의 너비 대비 다이아몬드 꼭대기의 너비</span></li>
<li><span style="font-size: x-small;">price: 가격</span></li>
<li><span style="font-size: x-small;">x: 길이</span></li>
<li><span style="font-size: x-small;">y: 너비</span></li>
<li><span style="font-size: x-small;">z: 깊이</span></li>
</ul>
<div>
<br /></div>
<div>
먼저 가장 중요한 Data와 Aesthetics를 정의해주도록 하겠습니다.</div>
<br />
<br />
<pre class="brush: py">ggplot(data = diamonds, aes(x = carat, y = price))
</pre>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEinx0AEPWGR9ox6N-8uzv4znXzmQXrSTkOWk0lKG0hZqqH1jb5UexTegakoqSewVLDCToakva9323QoyRgDHCVgRkS0tQrFxwNJ5EspGw0gteNXf2r0ip9moSwG9KLKRDAnzLfu2rSyMA/s1600/1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="961" data-original-width="1344" height="456" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEinx0AEPWGR9ox6N-8uzv4znXzmQXrSTkOWk0lKG0hZqqH1jb5UexTegakoqSewVLDCToakva9323QoyRgDHCVgRkS0tQrFxwNJ5EspGw0gteNXf2r0ip9moSwG9KLKRDAnzLfu2rSyMA/s640/1.png" width="640" /></a></div>
<br />
<br />
<ol>
<li>ggplot() 함수 내부의 data에 diamonds를 지정해줍니다.</li>
<li>aes() 함수를 통해 데이터를 매핑해주며 x축에 carat을, y축에 price를 지정해줍니다. </li>
</ol>
<br />
x축과 y축에 우리가 매핑한 carat과 price가 표현되었지만, 어떠한 모양(Geometrics)으로 시각화를 할지 정의하지 않았으므로 빈 그림이 생성됩니다. 다음으로 Geometrics을 통해 데이터를 그림으로 표현해주도록 하겠습니다.<br />
<br />
<br />
<pre class="brush: py">ggplot(data = diamonds, aes(x = carat, y = price)) +
geom_point()
</pre>
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3KEewYwX5571jywsmaS8F5WT5Ht2nBBLznX_8HmXrdKwBIp8KxliFE7arvhBgMzeSmZx5gISfrIiGZB-OJ70V0jlkrTfcFXeFSb7t1WXtWJktx-PRWIMlOV7i_G6n0Dcx16XW3IZjRA/s1600/2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="961" data-original-width="1344" height="456" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3KEewYwX5571jywsmaS8F5WT5Ht2nBBLznX_8HmXrdKwBIp8KxliFE7arvhBgMzeSmZx5gISfrIiGZB-OJ70V0jlkrTfcFXeFSb7t1WXtWJktx-PRWIMlOV7i_G6n0Dcx16XW3IZjRA/s640/2.png" width="640" /></a></div>
<br />
Data와 Aesthetics을 정의한 후, 플러스(+) 기호를 통해 geom_point() 함수를 입력하여 산점도가 표현되었습니다. geom은 Geometrics의 약자이며, 이처럼 geom_*() 함수를 통해 원하는 형태의 시각화를 할 수 있습니다.<br />
<br />
<br />
<pre class="brush: py">library(magrittr)
diamonds %>%
ggplot(aes(x = carat, y = price)) +
geom_point()
</pre>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg_m_bA0mjAvgti8kzHEL9E27m6SXyjD69HGx90HNp5RTHeBVfCvauFgfzkYD7c7AaopR1hGcRCRIejau98YpcAnQIIlmwU1dFsgNwXwfrDSTn_emF6oo5Q8PKdAmxmRyGy_5Ops1gvlQ/s1600/3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="961" data-original-width="1344" height="456" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg_m_bA0mjAvgti8kzHEL9E27m6SXyjD69HGx90HNp5RTHeBVfCvauFgfzkYD7c7AaopR1hGcRCRIejau98YpcAnQIIlmwU1dFsgNwXwfrDSTn_emF6oo5Q8PKdAmxmRyGy_5Ops1gvlQ/s640/3.png" width="640" /></a></div>
<br />
일반적으로 Data는 ggplot() 함수 내에서 정의하기 보다는, 일반적으로 dplyr 패키지의 함수들을 이용하여 데이터를 가공한 후 파이프 오퍼레이터를 통해 연결합니다.<br />
<br />
<br />
<pre class="brush: py">diamonds %>%
ggplot(aes(x = carat, y = price)) +
geom_point(aes(color = cut))
</pre>
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjxdv5d54I1pl5sW3TmuphHdxluPLwe0WQOngBN5FOULetICOWkZn5K67rREapUoUAjVKx0iph1QlGFU0WJ0bsybrQ2pTVNE8DCfoaGtrZpPEEl7rDV07oAQGUNX5Q5Y3FeNHfCuCK2AA/s1600/4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="961" data-original-width="1344" height="456" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjxdv5d54I1pl5sW3TmuphHdxluPLwe0WQOngBN5FOULetICOWkZn5K67rREapUoUAjVKx0iph1QlGFU0WJ0bsybrQ2pTVNE8DCfoaGtrZpPEEl7rDV07oAQGUNX5Q5Y3FeNHfCuCK2AA/s640/4.png" width="640" /></a></div>
<br />
geom_point() 내부에서 aes()를 통해 점의 색깔을 매핑해줄 수 있습니다. color = cut을 지정하여 cut에 따라 점의 색깔이 다르게 표현됩니다. 이 외에도 shape, size를 통해 모양과 크기를 각각 다르게 표현할 수 있습니다.<br />
<br />
<br />
<b>2. Facets</b><br />
<br />
Facets은 여러 집합을 하나의 그림에 표현하기 보다 하위 집합으로 나누어 시각화하는 요소입니다.<br />
<br />
<br />
<pre class="brush: py">diamonds %>%
ggplot(aes(x = carat, y = price)) +
geom_point() +
facet_grid(. ~ cut)
</pre>
<br />
facet_grid() 혹은 facet_wrap() 함수를 통해 그림을 분할할 수 있습니다. 물결 표시(~)를 통해 하위 집합으로 나누고자 하는 변수를 선택할 수 있으며, 위 예제에서는 cut에 따라 각기 다른 그림으로 표현되었습니다.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjeh31lebyAmml7cfaQ88-XY8_EoAhogf9pbHcDQTGTcJIdqIHw29dbzUUJEqQDceY7QaWKhx8TKTCHydXpYPmV58i7nBElJvIIA2xZEcCSHC-j5ZeGntU_CHI3rCVJu1dhs-zMjibj0g/s1600/5.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="961" data-original-width="1344" height="456" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjeh31lebyAmml7cfaQ88-XY8_EoAhogf9pbHcDQTGTcJIdqIHw29dbzUUJEqQDceY7QaWKhx8TKTCHydXpYPmV58i7nBElJvIIA2xZEcCSHC-j5ZeGntU_CHI3rCVJu1dhs-zMjibj0g/s640/5.png" width="640" /></a></div>
<br />
<b>3. Statistics</b><br />
<br />
Statistics는 통계값을 나타내는 요소입니다.<br />
<br />
<pre class="brush: py">diamonds %>%
ggplot(aes(x = carat, y = price)) +
geom_point(aes(color = cut)) +
geom_smooth(method = 'lm')
</pre>
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhqJjY5IjGornBXFw2s1l7tUGq7DFXH3YuW29_HgoJzX3-mamuKa7T2GJLQJx5jWVZxnLKV-bb27b8tHBuSm1SNOlW-z6gUUP3S5Fe5BMOgYzL4Mqgzqe8P5l2v5_KI274x5Z-FqTj8Qg/s1600/6.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="961" data-original-width="1344" height="456" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhqJjY5IjGornBXFw2s1l7tUGq7DFXH3YuW29_HgoJzX3-mamuKa7T2GJLQJx5jWVZxnLKV-bb27b8tHBuSm1SNOlW-z6gUUP3S5Fe5BMOgYzL4Mqgzqe8P5l2v5_KI274x5Z-FqTj8Qg/s640/6.png" width="640" /></a></div>
<br />
<br />
geom_smooth() 함수를 통해 평활선을 추가해주며, 방법으로 lm(linear model)을 지정할 경우 선형회귀선을 그려주게 됩니다. 이 외에도 glm, gam, loess 등의 다양한 회귀선을 그려줄 수 있습니다.<br />
<br />
<pre class="brush: py">diamonds %>%
ggplot(aes(x = cut, y = carat)) +
stat_summary_bin(fun.y = 'mean', geom = 'bar')
</pre>
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhzmzy0EXmSP0nRZrDp51gcit5qkfTsLbgx2_voCTDnHFvkT9dtCvY9L04yiMhdPgk-loML2a51kXyCjqzD5OyAyu63r9rSWI9fmX-KlByEruY7WP-wpqUR2fq1CHYMml4qTIYD9HFyJQ/s1600/7.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="961" data-original-width="1344" height="456" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhzmzy0EXmSP0nRZrDp51gcit5qkfTsLbgx2_voCTDnHFvkT9dtCvY9L04yiMhdPgk-loML2a51kXyCjqzD5OyAyu63r9rSWI9fmX-KlByEruY7WP-wpqUR2fq1CHYMml4qTIYD9HFyJQ/s640/7.png" width="640" /></a></div>
<br />
stat_summary_*() 함수를 사용하여 통계값을 직접 표현할 수도 있습니다. cut에 따른 carat의 평균값을 구하고자 할 경우, fun.y에 mean을 입력하여 평균값을 구하고, geom에 bar를 입력하여 막대그래프 형태로 표현하였습니다.<br />
<br />
<br />
<b>4. Coordinates</b><br />
<br />
Coordinates는 좌표를 의미합니다. ggplot2에서는 coord_*() 함수를 이용하여 x축 혹은 y축 정보를 변형할 수 있습니다.<br />
<br />
<br />
<pre class="brush: py">diamonds %>%
ggplot(aes(x = carat, y = price)) +
geom_point(aes(color = cut)) +
geom_smooth(aes(color = cut), method = 'lm') +
coord_cartesian(xlim = c(0, 3), ylim = c(0, 20000))
</pre>
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjxgF9a0YZ52Dou7x7hDLkLpbyJKAhDaF_pRWpdGsBhfPu5mbfurzsmf-iiVzDiIMMV3bjrERup4hBlrHQod2skhnIhXb88D_7LZfGQ0Xw0SJticDbnaY8cNWLkDUF1AHtFk8vaNDAe8Q/s1600/8.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="961" data-original-width="1344" height="456" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjxgF9a0YZ52Dou7x7hDLkLpbyJKAhDaF_pRWpdGsBhfPu5mbfurzsmf-iiVzDiIMMV3bjrERup4hBlrHQod2skhnIhXb88D_7LZfGQ0Xw0SJticDbnaY8cNWLkDUF1AHtFk8vaNDAe8Q/s640/8.png" width="640" /></a></div>
<br />
<br />
coord_cartesian() 함수를 통해 x축과 y축 범위를 지정해 줄 수 있습니다. xlim과 ylim 내부에 범위의 최소 및 최댓값을 지정해주면, 해당 범위의 데이터만을 보여줍니다.<br />
<br />
<br />
<pre class="brush: py">diamonds %>%
ggplot(aes(x = carat, y = price)) +
geom_boxplot(aes(group = cut)) +
coord_flip()
</pre>
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEghGMaFZl9cQEugp-ErnPj5tFbpzGbrSL-PJuuUpJXeUucTIfaQkMqwsPOczxtHcg05_UCWH6rtFRzre-cipLmCn9XJa1OSyLE3DF95AFZTJchvjGYKy6q1BLFey_8yZhLP03e9ZptDuw/s1600/9.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="961" data-original-width="1344" height="456" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEghGMaFZl9cQEugp-ErnPj5tFbpzGbrSL-PJuuUpJXeUucTIfaQkMqwsPOczxtHcg05_UCWH6rtFRzre-cipLmCn9XJa1OSyLE3DF95AFZTJchvjGYKy6q1BLFey_8yZhLP03e9ZptDuw/s640/9.png" width="640" /></a></div>
<br />
coord_flip() 함수는 x축과 y축을 뒤집어 표현합니다. ggplot() 함수의 aes 내부에서 x축은 carat을, y축은 price를 지정해 주었지만, coord_flip() 함수를 통해 x축과 y축이 서로 바뀌었습니다.<br />
<br />
<b>5. Theme</b><br />
<br />
Theme은 그림의 제목, 축 제목, 축 단위, 범례, 디자인 등 그림을 꾸며주는 역할을 담당합니다.<br />
<br />
<br />
<pre class="brush: py">diamonds %>%
ggplot(aes(x = carat, y = price)) +
geom_point(aes(color = cut)) +
theme_bw() +
labs(title = 'Relation between Carat & Price',
x = 'Carat', y = 'Price') +
theme(
legend.position = 'bottom'
) +
theme(panel.grid.major.x = element_blank(),
panel.grid.minor.x = element_blank(),
panel.grid.major.y = element_blank(),
panel.grid.minor.y = element_blank()
) +
scale_y_continuous(
labels = function(x) {
paste0('$',
format(x, big.mark = ',', scientific = FALSE))
})
</pre>
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh43j7vYacDBEi83GJ3nT6lwlPLz0BA74RI8ln5RbTpZUs3FpsaaFJ8P-YV3fa70M8AEpKyVL2eXyPDNvxFQMnJYDigEn4PqhZoF3tPSWBkvHPntUOsy1sFQgaZEXHzwC-_WD_JmKEfBw/s1600/10.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="961" data-original-width="1344" height="456" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh43j7vYacDBEi83GJ3nT6lwlPLz0BA74RI8ln5RbTpZUs3FpsaaFJ8P-YV3fa70M8AEpKyVL2eXyPDNvxFQMnJYDigEn4PqhZoF3tPSWBkvHPntUOsy1sFQgaZEXHzwC-_WD_JmKEfBw/s640/10.png" width="640" /></a></div>
<br />
<ol>
<li>theme_bw() 함수를 통해 배경을 흰색으로 설정합니다.</li>
<li>theme() 함수 내 legend.position을 통해 범례를 하단으로 이동합니다.</li>
<li>theme() 함수 내 panel.grid를 통해 격자를 제거합니다.</li>
<li>scale_y_continuous() 함수를 통해 y축에서 천원 단위로 콤마(,)를 붙여주며, 이를 달러($) 표시와 합쳐줍니다.</li>
</ol>
<br />
<div>
<br /></div>
<div>
ggplot2 패키지의 다양한 예제와 함수는 아래 링크를 참조하시길 바랍니다.</div>
<div>
<div>
<ul>
<li>http://r-statistics.co/ggplot2-Tutorial-With-R.html</li>
<li>https://ggplot2.tidyverse.org/reference/</li>
</ul>
</div>
</div>
<br />
<div>
<br /></div>
Unknownnoreply@blogger.com1tag:blogger.com,1999:blog-23651150467485474.post-86334494647952064812019-08-24T13:33:00.001+09:002019-08-24T13:38:25.269+09:00R을 이용한 스마트베타 지수 크롤링 & 샤이니를 통한 페이지 만들기<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgH4DfNJHSYQNvna_wSpEUGh5f2uztRS69KKgw7BX6AmBM-por9SFTNhF51MKKqJnc-TJ8ACSYM7goGIApgSYbuSvMm2NQaC5ZDU0HQ_l6kKj4cVRw2JfDew8y5SG0HWGoBhLJrAxE2uA/s1600/994x385_what-is-smart-beta.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="385" data-original-width="994" height="246" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgH4DfNJHSYQNvna_wSpEUGh5f2uztRS69KKgw7BX6AmBM-por9SFTNhF51MKKqJnc-TJ8ACSYM7goGIApgSYbuSvMm2NQaC5ZDU0HQ_l6kKj4cVRw2JfDew8y5SG0HWGoBhLJrAxE2uA/s640/994x385_what-is-smart-beta.jpg" width="640" /></a></div>
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEggVFfYoCDi7dLAjOBhWu25VnnQc3ZdE1byunsCPV0a8M2tIsJpBeeRu9mAbbG44rfdJatb_5EQLVZU5Kk3DZrBFiwheSPEDZjswR9UlD2TE-EXP0SsOig5eSd9SsQiEXewJxhOp8a6yw/s1600/R%25EC%259D%2584+%25EC%259D%25B4%25EC%259A%25A9%25ED%2595%259C+%25ED%2580%2580%25ED%258A%25B8+%25ED%2588%25AC%25EC%259E%2590+%25ED%258F%25AC%25ED%258A%25B8%25ED%258F%25B4%25EB%25A6%25AC%25EC%2598%25A4+%25EB%25A7%258C%25EB%2593%25A4%25EA%25B8%25B0_%25EC%259E%2585%25EC%25B2%25B4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1600" data-original-width="1600" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEggVFfYoCDi7dLAjOBhWu25VnnQc3ZdE1byunsCPV0a8M2tIsJpBeeRu9mAbbG44rfdJatb_5EQLVZU5Kk3DZrBFiwheSPEDZjswR9UlD2TE-EXP0SsOig5eSd9SsQiEXewJxhOp8a6yw/s400/R%25EC%259D%2584+%25EC%259D%25B4%25EC%259A%25A9%25ED%2595%259C+%25ED%2580%2580%25ED%258A%25B8+%25ED%2588%25AC%25EC%259E%2590+%25ED%258F%25AC%25ED%258A%25B8%25ED%258F%25B4%25EB%25A6%25AC%25EC%2598%25A4+%25EB%25A7%258C%25EB%2593%25A4%25EA%25B8%25B0_%25EC%259E%2585%25EC%25B2%25B4.png" width="400" /></a></div>
<br />
<b>'R을 이용한 퀀트 투자 포트폴리오 만들기'가 출간 되었습니다.</b><br />
<b>많은 관심 부탁드리겠습니다.</b><br />
<br />
<b>↓</b><b>↓ </b><b>구매링크 </b><b>↓</b><b>↓</b><br />
<a href="http://www.yes24.com/Product/Goods/78125551?scode=032&OzSrank=1" target="_blank"><b><span style="color: red;">http://www.yes24.com/Product/Goods/78125551?scode=032&OzSrank=1</span></b></a><br />
<br />
<br />
<br />
국내에 수많은 스마트베타 관련 지수 중 개인적으로 가장 좋아하는 지수는 <b><i><span style="color: red;">와이즈인덱스에서 제공하는 Wise 스마트베타 Quality, Value, Momentum, LowVol 지수</span></i></b>입니다. 이는 한화자산운용의 Arirang 스마트베타 ETF의 기초지수 이기도 합니다.<br />
<br />
<div style="text-align: center;">
<a href="http://www.wiseindex.com/DataCenter/Index/WSI0601" target="_blank">http://www.wiseindex.com/DataCenter/Index/WSI0601</a></div>
<br />
해당 지수가 웹에서 제공되고 있기는 하지만 최대 3년까지 밖에 조회가 되지 않습니다. 그러나 웹구조만 잘 이해하고 뜯어보면 시작부터의 모든 데이터를 크롤링할 수 있습니다.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjpPX8Dnqq-opa8SxWv7juQCG7BxeggIJWFRYnyGJY8g7E1x-Dkdl3s6UjY23jD_drmnn9l9orYyCt7MtREL0kc9Ww5KrA8Wl0wA1UNLZhS2RuBOLnuLc1i6eqs8R7P3IvBnaCYKg8fyA/s1600/1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="812" data-original-width="1600" height="324" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjpPX8Dnqq-opa8SxWv7juQCG7BxeggIJWFRYnyGJY8g7E1x-Dkdl3s6UjY23jD_drmnn9l9orYyCt7MtREL0kc9Ww5KrA8Wl0wA1UNLZhS2RuBOLnuLc1i6eqs8R7P3IvBnaCYKg8fyA/s640/1.png" width="640" /></a></div>
<br />
<br />
1. 웹페이지에 접속하여 개발자도구화면을 엽니다.<br />
2. 일자 부분을 클릭하여 [최근 3년]을 선택한 후 확인을 누릅니다.<br />
3. 결과보기 부분을 누릅니다. (화면의 스크롤창이 생기지 않아 해당 버튼이 보이지 않습니다. [Tab] 버튼을 눌러 이동시킨 후 클릭합니다.<br />
<br />
Network 탭에는 총 2가지 항목이 생성됩니다. 먼저 첫번째 항목인 ChartData?endDT=2019-08-23&fromDT=2016-08-24&..... 을 클릭하여 Request URL에 접속합니다.<br />
<br />
<a href="http://www.wiseindex.com/DataCenter/ChartData?endDT=2019-08-23&fromDT=2016-08-24&index_ids=WSI0601&isEnd=1&term=1" target="_blank">http://www.wiseindex.com/DataCenter/ChartData?endDT=2019-08-23&fromDT=2016-08-24&index_ids=WSI0601&isEnd=1&term=1</a><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgCusObUjRn158gkbfx0FHzhDOE4cxWHFSdAVolzBrOL-wa0wHGKF7uEh4CRwYggrCnKBXjIjXGYCM74iCQVSCUIEIJkX-yY34gKTeFvYyD-8I4-oNqfxEnPfDSs8vmPSjhvJnb6A1hpA/s1600/2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="627" data-original-width="1600" height="250" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgCusObUjRn158gkbfx0FHzhDOE4cxWHFSdAVolzBrOL-wa0wHGKF7uEh4CRwYggrCnKBXjIjXGYCM74iCQVSCUIEIJkX-yY34gKTeFvYyD-8I4-oNqfxEnPfDSs8vmPSjhvJnb6A1hpA/s640/2.png" width="640" /></a></div>
<br />
Date는 뭔가 날짜를 나타내는 항목으로 보이며, <span style="white-space: pre-wrap;">VAL1은 수익률을 나타내는 항목으로 보입니다. 즉 해당 데이터들은 그래프를 나타내는데 사용되는 데이터들입니다. 그러나 지수값이 아닌 수익률 값으로 표현되어 그리 좋은 데이터는 아닙니다.</span><br />
<span style="white-space: pre-wrap;"><br /></span>
<span style="white-space: pre-wrap;">두번째 항목인 GridData?currentPage=1&endDT=2019-08-23&... 를 클릭하여 Request URL에 접속합니다.</span><br />
<span style="white-space: pre-wrap;"><br /></span>
<span style="white-space: pre-wrap;">http://www.wiseindex.com/DataCenter/GridData?currentPage=1&endDT=2019-08-23&fromDT=2016-08-24&index_ids=WSI0601&isEnd=1&itemType=1&perPage=20&term=1</span><br />
<span style="white-space: pre-wrap;"><br /></span>
<span style="white-space: pre-wrap;"><br /></span>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgaHCTrQXqLhhE_M3y4DOqcv5jZjttKuOP9OAfiBEQKDYo8CMtbcvIYhBg1Aadyl0D0bHXtSyWE4v3E95Nz8mkqCftHbBas_w03b0DYMNt8_iob2Qdw-5qRFK7DUNyQnhl9sz3zd-VPZg/s1600/3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="435" data-original-width="1082" height="256" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgaHCTrQXqLhhE_M3y4DOqcv5jZjttKuOP9OAfiBEQKDYo8CMtbcvIYhBg1Aadyl0D0bHXtSyWE4v3E95Nz8mkqCftHbBas_w03b0DYMNt8_iob2Qdw-5qRFK7DUNyQnhl9sz3zd-VPZg/s640/3.png" width="640" /></a></div>
<span style="white-space: pre-wrap;"><br /></span>
<span style="white-space: pre-wrap;">이는 하단의 Index Value 테이블과 매칭되는 데이터입니다. Date는 날짜를, VAL1은 지수값을, VAL2는 시가총액을, VAL3은 거래대금을 의미합니다. 따라서 지수값 자체가 표시된 해당 데이터를 크롤링 하는것이 훨씬 좋습니다.</span><br />
<span style="white-space: pre-wrap;"><br /></span>
<span style="white-space: pre-wrap;">위의 주소는 총 3년에 해당하는 데이터만이 있으며, 페이지에서도 3년치 데이터밖에 선택할 수 없습니다. 그러나 URL 주소를 조금만 수정하면 훨씬 긴 기간의 데이터를 선택할 수 있습니다. URL 중 수정해야할 항목은 다음과 같습니다.</span><br />
<br />
endDT : 종료일자<br />
fromDT : 시작일자<br />
perPage = 출력갯수<br />
<br />
이를 고려하여 수정된 url은 다음과 같습니다.<br />
<br />
http://www.wiseindex.com/DataCenter/GridData?currentPage=1&endDT=2019-08-09&fromDT=2000-01-01&index_ids=WSI0601&isEnd=1&itemType=1&perPage=10000&term=1<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjLnRB1FjtNlztCZrUD9lVuUSRBce5WbChOIOohofVUJy4jEC3NaYpp1-rSwfpPAAUXvlWcc2B9q20soLoCtIaXYqMlxhWAxSEgrUZ0SJcdT2UKHey7rIXA8i1BtX4E7u2lD9mxDoNEqw/s1600/4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="724" data-original-width="1082" height="428" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjLnRB1FjtNlztCZrUD9lVuUSRBce5WbChOIOohofVUJy4jEC3NaYpp1-rSwfpPAAUXvlWcc2B9q20soLoCtIaXYqMlxhWAxSEgrUZ0SJcdT2UKHey7rIXA8i1BtX4E7u2lD9mxDoNEqw/s640/4.png" width="640" /></a></div>
<br />
시작을 2000년 1월 1일로 변경하며, 데이터를 최대한 넉넉하게 10000으로 잡아줍니다. 해당 url을 접속하면 지수 산출 이후 모든 값이 표시됩니다. 그러나 Date가 15652740000와 같은 익숙하지 않은 모습으로 표시되어 있습니다.<br />
<br />
이제부터 본격적으로 크롤링을 통해 데이터를 클렌징 해보겠습니다.<br />
<br />
<br />
<pre class="brush: py">library(jsonlite)
library(dplyr)
library(stringr)
library(lubridate)
library(magrittr)
library(timetk)
library(PerformanceAnalytics)
library(quantmod)
url = 'http://www.wiseindex.com/DataCenter/GridData?currentPage=1&endDT=2019-08-09&fromDT=2000-01-01&index_ids=WSI0601&isEnd=1&itemType=1&perPage=10000&term=1'
down = fromJSON(url)
head(down)
ROW_IDX TOT_ROW TRD_DT IDX1_VAL1 IDX1_VAL2 IDX1_VAL3
1 1 4489 /Date(1565276400000)/ 5812.28 339538918 928281.6
2 2 4489 /Date(1565190000000)/ 5768.94 337007243 1453117.2
3 3 4489 /Date(1565103600000)/ 5702.72 333138712 1193662.1
4 4 4489 /Date(1565017200000)/ 5738.02 335200868 1575052.4
5 5 4489 /Date(1564930800000)/ 5852.63 341895953 1389064.1
6 6 4489 /Date(1564671600000)/ 5957.01 347993864 1429756.4
</pre>
<br />
JSON 형식의 데이터는 fromJSON() 함수를 통해 쉽게 테이블형태로 읽어올 수 있습니다. 이 중 날짜에 해당하는 TRD_DT와 지수값에 해당하는 IDX1_VAL1를 추출합니다.<br />
<br />
<br />
<pre class="brush: py">data = down %>%
select('TRD_DT', 'IDX1_VAL1') %>%
mutate(TRD_DT = str_match_all(TRD_DT, '[0-9]+'),
TRD_DT = as.numeric(TRD_DT))
head(data)</pre>
<pre class="brush: py"> TRD_DT IDX1_VAL1
1 1565276400000 5812.28
2 1565190000000 5768.94
3 1565103600000 5702.72
4 1565017200000 5738.02
5 1564930800000 5852.63
6 1564671600000 5957.01
</pre>
<br />
먼저 select() 함수를 이용해 두개 열을 선택해준 후, mutate() 함수를 통해 클렌징을 해줍니다. 먼저 str_match_all() 함수에서 정규표현식을 이용해 TRD_DT 열 중 숫자에 해당하는 부분만 추출하며, 이를 numeric 형태로 변경합니다.<br />
<br />
그렇다면 과연 1565276400000 숫자가 왜 date를 의미할까요? 이를 POSIXct 형태이며, 의미를 알아보기 위해 분해해보도록 하겠습니다.<br />
<br />
<pre class="brush: py">gap = data[1,1] - data[2,1]
gap
[1] 86400000
gap / 24 # 시간
[1] 3600000
gap / 24 / 60 # 분
[1] 60000
gap / 24 / 60 / 60 # 초
[1] 1000
</pre>
<br />
1. 먼저 첫번째 행의 데이터와 두번째 행의 데이터를 빼보면 86400000 값이 나옵니다. 지수는 일별로 나오니, 직관적으로 이 숫자가 하루에 해당하는 숫자임을 알수 있습니다.<br />
2. 이를 '시간'에 해당하는 24로 나누면 3600000 값이 나옵니다.<br />
3. 이를 다시 '분'에 해당하는 60으로 나누면 60000 값이 나옵니다.<br />
4. 다시 다시 '초'에 해당하는 60으로 나누면 1000이 나옵니다.<br />
<br />
즉, 86400000 숫자는 천분의 1초인 밀리세컨드의 하루에 해당하는 값입니다. 또한 POSIXct 데이터는 일반적으로 1970년 1월 1일을 시작으로 하며(이는 정의하는 곳 마다 다릅니다), 첫번째 행값인 1565276400000는 1970년 1월 1일부터 1565276400000 밀리세컨드가 지난 날짜를 의미합니다. 한번 해당 값을 날짜로 바꿔보도록 하겠습니다.<br />
<br />
<br />
<pre class="brush: py">test_date = data[1,1]
</pre>
<pre class="brush: py">test_date
[1] 1565276400000
test_date %>%
divide_by(1000) %>%
as.POSIXct(origin = '1970-01-01') %>%
as.character() %>%
as.Date()
[1] "2019-08-09"
</pre>
<br />
1. 일반적으로 R내에서 POSIXct 형식은 초까만 인식하므로, divide_by() 함수를 통해 1000으로 나누어 줍니다.<br />
2. as.POSIXct() 함수를 통해 날짜 형태로 변경해주며, 시작점은 1970년 1월 1일로 입력합니다.<br />
3. as.character()와 as.Date() 함수를 통해 데이트 형태로 변경합니다.<br />
<br />
<b><i><span style="color: red;">물론 as.POSIXct() 함수 뒤 바로 as.Date() 함수를 이용해도 되지만, KST와 UCT 간의 시차 차이로 하루씩 날짜가 밀릴 수도 있으므로, 캐릭터 형태로 변경 후 데이트 형태로 변경하는 것이 안전합니다.</span></i></b><br />
<br />
위 과정을 통해 POSIXct 값을 날짜로 변경하는 법을 알아보았습니다. 이를 함수 형태로 적용하여 TRD_DT에 해당 클렌징 작업을 실시합니다.<br />
<br />
<br />
<pre class="brush: py">posix_to_date = function(df){
df %>%
divide_by(1000) %>%
as.POSIXct(., origin = '1970-01-01') %>%
as.character() %>%
as.Date()
}
data = data %>%
mutate(TRD_DT = posix_to_date(TRD_DT))
head(data)
TRD_DT IDX1_VAL1
1 2019-08-09 5812.28
2 2019-08-08 5768.94
3 2019-08-07 5702.72
4 2019-08-06 5738.02
5 2019-08-05 5852.63
6 2019-08-02 5957.01
data = tk_xts(data, date_var = TRD_DT)
plot(data)
</pre>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjsc4-r3RoaS6bal9F-s27NeGqjDhxpdwn6EquFzQXWTM0R2zg0v2T3qiOuFQ4pgRQVMIceVf1100_uVH5plMUWEPTwR3qRt1hurdpNBrz7cQp8jCWpoqshBb5GKwaCgYgTC0O7YujrlQ/s1600/Rplot.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="439" data-original-width="503" height="278" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjsc4-r3RoaS6bal9F-s27NeGqjDhxpdwn6EquFzQXWTM0R2zg0v2T3qiOuFQ4pgRQVMIceVf1100_uVH5plMUWEPTwR3qRt1hurdpNBrz7cQp8jCWpoqshBb5GKwaCgYgTC0O7YujrlQ/s320/Rplot.png" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
먼저 posix_to_date() 함수를 만든 후, 이를 data의 TRD_DT 열에 적용해줍니다. 결과를 확인해보면 우리에게 익숙한 date 형태로 변경되었습니다.<br />
<br />
tk_xts() 함수를 이용해 xts 형태로 만들어주두록 합니다.<br />
<br />
해당 과정을 4개 지수 모두에 적용할 수도 있으며, fromDT와 endDT, perPage 값만 수정하면 처음부터 오늘까지의 데이터를 자동으로 가져올 수 있습니다.<br />
<br />
먼저 4개 지수의 티커는 다음과 같습니다.<br />
<br />
퀄리티: WSI0601<br />
밸류: WSI0602<br />
모멘텀: WSI0603<br />
로우볼: WSI0604<br />
<br />
이를 고려한 변수는 다음가 같습니다.<br />
<br />
<pre class="brush: py">ticker = c('WSI0601', 'WSI0602', 'WSI0603', 'WSI0604')
DT_start = '2001-06-15' %>% as.Date()
DT_end = today()
DT_length = interval(DT_start, DT_end) / days() + 1
</pre>
<br />
티커에는 지수의 티커를 입력합니다.<br />
DT_start는 지수의 시작값인 2001년 6월 15일을 입력합니다.<br />
DT_end에는 today()를 통해 오늘 날짜를 입력합니다.<br />
DT_length() 에는 시작일과 종료일의 차이를 interval() 함수를 통해 계산합니다.<br />
<br />
<pre class="brush: py">index_list = list()
for (tick in ticker) {
url = str_c('http://www.wiseindex.com/DataCenter/GridData?currentPage=1&endDT=',DT_end,'&fromDT=',DT_start,'&index_ids=',tick,'&isEnd=1&itemType=1&perPage=',DT_length,'&term=1')
down = fromJSON(url) %>%
select('TRD_DT', 'IDX1_VAL1') %>%
mutate(TRD_DT = str_match_all(TRD_DT, '[0-9]+'),
TRD_DT = as.numeric(TRD_DT),
TRD_DT = posix_to_date(TRD_DT))
index_list[[tick]] = tk_xts(down, date_var = TRD_DT)
Sys.sleep(1)
}
index_list = do.call(cbind, index_list)
head(index_list)
IDX1_VAL1 IDX1_VAL1.1 IDX1_VAL1.2 IDX1_VAL1.3
2001-06-15 1000.00 1000.00 1000.00 1000.00
2001-06-18 993.64 994.97 993.30 992.98
2001-06-19 993.45 990.53 990.58 988.40
2001-06-20 981.32 969.01 972.51 971.04
2001-06-21 984.44 969.60 977.13 974.00
2001-06-22 994.70 977.23 987.43 981.58
tail(index_list)
IDX1_VAL1 IDX1_VAL1.1 IDX1_VAL1.2 IDX1_VAL1.3
2019-08-16 5733.32 6672.15 7854.46 7719.23
2019-08-19 5786.91 6827.36 7953.38 7828.81
2019-08-20 5820.50 6855.78 7975.84 7855.61
2019-08-21 5825.33 6896.77 7995.75 7886.54
2019-08-22 5772.74 6859.46 7946.59 7861.81
2019-08-23 5742.52 6824.45 7906.79 7815.98
</pre>
<br />
for loop 내에서 위 변수들을 응용해 4개 지수의 모든 값을 다운로드 합니다. 결과를 확인해보면 시작인 2001년 6월 15일부터 현재까지 지수가 다운로드 됩니다.<br />
<br />
<br />
<pre class="brush: py">KOSPI = getSymbols('^KS11', from = '2001-06-15', auto.assign = FALSE)
KOSPI = Ad(KOSPI)
index_list = cbind(index_list, KOSPI) %>% na.omit()
names(index_list) =
c('퀄리티', '밸류', '모멘텀', '로우볼', '코스피')
</pre>
<br />
<br />
마지막으로 벤치마크인 KOSPI 지수를 getSymbols() 함수를 통해 다운로드 받습니다. 그 후 스마트베타 지수와 코스피 지수를 합친 후, names()를 통해 열 이름을 입력합니다.<br />
<br />
<pre class="brush: py">index_list %>% Return.calculate() %>%
charts.PerformanceSummary(main = 'Smartbeta Index')
</pre>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDtVQlUCbIK-w5jQIWMbBqB10mdMYP0WdTiOKjAc9OpDe2aayibb5GHvwGUyt5TdZkK-_rycmzajebQmnYmWCvDWbKbeg6aOLYV2DJrwoUSxb6cnAQ2JtzLPCwtWKIsUvBx1Dj277mXw/s1600/Rplot01.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="489" data-original-width="682" height="458" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDtVQlUCbIK-w5jQIWMbBqB10mdMYP0WdTiOKjAc9OpDe2aayibb5GHvwGUyt5TdZkK-_rycmzajebQmnYmWCvDWbKbeg6aOLYV2DJrwoUSxb6cnAQ2JtzLPCwtWKIsUvBx1Dj277mXw/s640/Rplot01.png" width="640" /></a></div>
<br />
스마트베타 지수와 코스피 지수가 제대로 들어왔습니다.<br />
<br />
<br />
<pre class="brush: py">index_list['2018::'] %>% Return.calculate() %>%
charts.PerformanceSummary(main = 'Smartbeta Index')
</pre>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjx8acfosW318J7HZbABoDZXs5xRq2DkgTDV0GANspGIaluHibZI52GdknIeA3ZU_mVo8t98GnDoQOEx2Gvz9b-GD4uKjJk-1Rzf1eBCnKbgteablw5XFFnE3AVHREhY5ztot0hrKH7Uw/s1600/Rplot02.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="489" data-original-width="682" height="458" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjx8acfosW318J7HZbABoDZXs5xRq2DkgTDV0GANspGIaluHibZI52GdknIeA3ZU_mVo8t98GnDoQOEx2Gvz9b-GD4uKjJk-1Rzf1eBCnKbgteablw5XFFnE3AVHREhY5ztot0hrKH7Uw/s640/Rplot02.png" width="640" /></a></div>
<br />
xts형식은 내부에 일자를 입력하여 간단하게 시작일과 종료일 기준으로 데이터를 선택할 수 있습니다. index_list['2018::']를 통해 2018년 이후 데이터를 살펴보면 위와 같습니다.<br />
<br />
<div style="text-align: center;">
===================</div>
<br />
이번에는 shiny에서 위 과정을 적용하여 페이지를 만들어 보도록 하겠습니다.<br />
<br />
<br />
<pre class="brush: py">library(jsonlite)
library(dplyr)
library(stringr)
library(lubridate)
library(magrittr)
library(timetk)
library(PerformanceAnalytics)
library(quantmod)
library(shiny)
library(plotly)
library(tidyr)
library(DT)
# Define posix to date function (for mutate date)
posix_to_date = function(df){
df %>%
divide_by(1000) %>%
as.POSIXct(., origin = '1970-01-01') %>%
as.character() %>%
as.Date()
}
# Define Download Data function
down_index = function() {
# smartbeta index ticker
ticker = c('WSI0601', 'WSI0602', 'WSI0603', 'WSI0604')
# set date
DT_start = '2001-06-15' %>% as.Date()
DT_end = today()
DT_length = interval(DT_start, DT_end) / days() + 1
index_list = list()
# download data
for (tick in ticker) {
url = str_c('http://www.wiseindex.com/DataCenter/GridData?currentPage=1&endDT=',DT_end,'&fromDT=',DT_start,'&index_ids=',tick,'&isEnd=1&itemType=1&perPage=',
DT_length,'&term=1')
down = fromJSON(url) %>%
select('TRD_DT', 'IDX1_VAL1') %>%
mutate(TRD_DT = str_match_all(TRD_DT, '[0-9]+'),
TRD_DT = as.numeric(TRD_DT),
TRD_DT = posix_to_date(TRD_DT))
index_list[[tick]] = tk_xts(down, date_var = TRD_DT)
Sys.sleep(1)
}
index_list = do.call(cbind, index_list)
# Download KOSPI index from yahoo
KOSPI = getSymbols('^KS11', from = '2001-06-15', auto.assign = FALSE)
KOSPI = Ad(KOSPI)
# Bind data
index_list = cbind(index_list, KOSPI) %>% na.omit()
names(index_list) =
c('퀄리티', '밸류', '모멘텀', '로우볼', '코스피')
return(index_list)
}
</pre>
<br />
먼저 패키지를 불러오며 데이터 크롤링 및 클렌징 하는 과정을 down_index() 함수로 만들어 줍니다.<br />
<br />
<br />
<pre class="brush: py"># Define UI for application that draws a histogram
ui = fluidPage(
# Application title
titlePanel("Smartbeta Index List"),
# Show a plot of the generated distribution
mainPanel(
sliderInput("range",
"Dates:",
min = as.Date('2001-06-18'),
max = Sys.Date(),
value = c(Sys.Date() - years(3), Sys.Date()),
step = 1,
timeFormat="%Y-%m-%d",
width = '100%'),
br(),
br(),
plotlyOutput("chart"),
br(),
DT::dataTableOutput("table"),
br(),
fluidRow(
column(1, offset = 10,
downloadButton("downloadData", "Download Data")
))
)
)
</pre>
<br />
<br />
ui는 웹페이지에 보이는 내용을 정의합니다.<br />
먼저 sliderInput을 통해 일자를 선택할 수 있는 바를 생성합니다. min 즉 시작일은 지수의 시작일인 2001년 6월 18일, max 즉 종료일은 오늘 날짜를 입력하며, default 값인 value는 오늘부터 3년전 값을 입력합니다. 결과적으로 페이지에는 아래와 같은 모습으로 나타납니다.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJ_q0B0RMjHuIgfUyG2oSZeFw1JCqyKvyD9Ci-NOYGRvFzRImDFec5rEpaehrVx5N-bJWdCro7qT7c1RDLKLmFTJJery1hlGgxCi9sHz3457j7WngckwZ34MdOAUQVN56ZRVS8GUhEZw/s1600/5.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="124" data-original-width="1279" height="62" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJ_q0B0RMjHuIgfUyG2oSZeFw1JCqyKvyD9Ci-NOYGRvFzRImDFec5rEpaehrVx5N-bJWdCro7qT7c1RDLKLmFTJJery1hlGgxCi9sHz3457j7WngckwZ34MdOAUQVN56ZRVS8GUhEZw/s640/5.png" width="640" /></a></div>
<br />
<br />
나중에 server에서 작성될 차트와 테이블을 각각 plotlyOutput() 함수와 dataTableOutput() 함수를 통해 출력해주며, downloadButton() 함수를 통해 지수 데이터를 다운로드 하는 버튼을 만들어 줍니다.<br />
<br />
<br />
<pre class="brush: py"># Define server logic required to draw a return chart
server = function(input, output) {
# download data
df = down_index() %>%
Return.calculate() %>% na.omit()
# plot graph
output$chart = renderPlotly({
# select period
df_plotly = df[paste0(input$range[1],"::",input$range[2])]
df_plotly = cumprod(1+df_plotly) - 1
# draw chart
df_plotly %>%
fortify.zoo() %>%
gather(key, value, -c('Index')) %>%
mutate(key = factor(key, levels = unique(key))) %>%
plot_ly(x = ~Index, y = ~ value, color = ~key) %>%
add_lines() %>%
layout(xaxis = list(title = "",
type = 'date',
tickformat = '%y-%m-%d'),
yaxis = list(title = "",
tickformat = '%'),
legend = list(orientation = 'h',
xanchor = "center",
x = 0.5))
})
# raw data table
output$table = DT::renderDataTable({
data.frame(round(df,4)) %>%
cbind('Date' = rownames(.), .) %>%
`rownames<->%
arrange(desc(Date)) %>%
datatable(options = list(pageLength = 50))
})
# download button
output$downloadData = downloadHandler(
filename = function() {
paste("ret_data", ".csv", sep="")
},
content = function(file) {
write.csv(data.frame(round(df,4)), file)
}
)
}
</-></pre>
<br />
server 부분은 웹페이지에 출력될 데이터를 가공하는 영역입니다.<br />
<br />
먼저 df에는 사전에 정의한 down_index() 함수를 통해 지수 데이터를 다운로드 받고, Return.calculate() 함수를 통해 수익률을 계산합니다.<br />
<br />
output$chart는 plotly 형태의 그래프를 그려줍니다. 먼저 app에서 sliderInput에서 입렫받은 input값(시작일, 종료일)을 통해 xts 형태인 df의 날짜를 선택합니다.<br />
<br />
df[paste0(input$range[1],"::",input$range[2])]<br />
<br />
그 후, cumprod() 함수를 통해 해당일자의 누적수익률을 계산해 줍니다. 마지막으로 plot_ly() 함수를 통해 그래프로 나타내 줍니다.<br />
<br />
output$table은 DataTable형태의 테이블을 만들어줍니다.<br />
output$downloadData은 위의 데이터를 csv 형태로 다운로드 받게합니다.<br />
<br />
<br />
<pre class="brush: py"># Run the application
shinyApp(ui = ui, server = server)
</pre>
<br />
마지막으로 shinyApp() 함수를 통해 샤이니를 실행합니다.<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjxEqJBTrt3MzlscfqdDqGoFC0dd4WoOqcR4cc7xz14R-WTyepYB_Q-WqHeeaU5UKQkxNjrtQFRpZwgaLWnxiqUhJDRNKqZ2d6QzD846PCa7D906QuI35vDJ5Ue7qzy_0K6r42CUFWTRA/s1600/6.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="911" data-original-width="1279" height="454" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjxEqJBTrt3MzlscfqdDqGoFC0dd4WoOqcR4cc7xz14R-WTyepYB_Q-WqHeeaU5UKQkxNjrtQFRpZwgaLWnxiqUhJDRNKqZ2d6QzD846PCa7D906QuI35vDJ5Ue7qzy_0K6r42CUFWTRA/s640/6.png" width="640" /></a></div>
<br />
<br />
실행된 앱을 살펴보면, 최근 3년 기준 지수의 누적수익률이 그래프로 나타나며, 하단에는 모든 raw data가 표시됩니다.<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhMAIEgKzGI5SPZjLUO4cC8DE2fG4nx9xy7v5d4O30MPjfAz6D1UkewFj0ond81Qth7DQNpu26apgdorzPajaEJMGktH99esx1aRQacwXKC40V4mDeCgKF49Opl15dP7I6dLe922rczFg/s1600/7.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="730" data-original-width="1266" height="368" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhMAIEgKzGI5SPZjLUO4cC8DE2fG4nx9xy7v5d4O30MPjfAz6D1UkewFj0ond81Qth7DQNpu26apgdorzPajaEJMGktH99esx1aRQacwXKC40V4mDeCgKF49Opl15dP7I6dLe922rczFg/s640/7.png" width="640" /></a></div>
<br />
상단의 슬라이드를 움직이면, 해당 기간의 그래프로 변경되어 표시됩니다.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhD3cm5BN7sDMEnTw8mErILdFCxcZA3dqzfb1HZC9oxUdeavX5tsFKPFosd27Q25-hezGGYdxd19jCpX1uf4Q77AA8XZKvFPjIKqL7JNTLAsMyifHtqv3pQZ-jqXlyCBrEbxp022NzxjA/s1600/8.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="660" data-original-width="478" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhD3cm5BN7sDMEnTw8mErILdFCxcZA3dqzfb1HZC9oxUdeavX5tsFKPFosd27Q25-hezGGYdxd19jCpX1uf4Q77AA8XZKvFPjIKqL7JNTLAsMyifHtqv3pQZ-jqXlyCBrEbxp022NzxjA/s400/8.png" width="288" /></a></div>
<br />
테이블 맨 하단의 Download Data 버튼을 누르면 'red_data.csv' 파일이 다운로드 되며, 해당 파일을 확인하면 스마트베타 지수 및 코스피 지수의 전체 데이터가 다운로드 됩니다.Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-23651150467485474.post-56963457416994052662019-08-11T19:44:00.000+09:002019-08-11T20:28:56.777+09:00ggplot2 패키지를 더 효율적으로! ggplot의 확장 패키지를 이용한 시각화<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg8nj6Uhgt7at3ApwPOwAXGyQMUgdgh15CSmcGLHS2TvdeMvi58U2R-2eNhPThzPQNdlOoJ5HjNRPKfWMvyQ1gZjt8BXFHmMi3LnN4GQ4hvYc_L0oii_8nLYOzrLTImR5PSR6Rx62SIfQ/s1600/ggplot2%252BExtensions%252BExtending%252Bthe%252Blanguage.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="768" data-original-width="1024" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg8nj6Uhgt7at3ApwPOwAXGyQMUgdgh15CSmcGLHS2TvdeMvi58U2R-2eNhPThzPQNdlOoJ5HjNRPKfWMvyQ1gZjt8BXFHmMi3LnN4GQ4hvYc_L0oii_8nLYOzrLTImR5PSR6Rx62SIfQ/s320/ggplot2%252BExtensions%252BExtending%252Bthe%252Blanguage.jpg" width="320" /></a></div>
<br />
<br />
ggplot2 패키지는 시각화를 대표하는 패키지로써, R의 가장 큰 자랑이기도 합니다. 그러나 기본 패키지 만으로는 모든 데이터를 표현하기 힘들기에, 이를 보완하기 위한 각종 확장 패키지들이 존재합니다. 이러한 확장 패키지를 잘 사용한다면 더욱 다채로운 시각화 표현이 가능합니다.<br />
<br />
<br />
<pre class="brush: py">library(stringr)
library(dplyr)
KOR_ticker =
read.csv('https://raw.githubusercontent.com/hyunyulhenry/quant_cookbook/master/data/KOR_ticker.csv',
row.names = 1,
stringsAsFactors = FALSE)
KOR_sector =
read.csv('https://raw.githubusercontent.com/hyunyulhenry/quant_cookbook/master/data/KOR_sector.csv',
row.names = 1,
stringsAsFactors = FALSE)
KOR_ticker$'종목코드' =
str_pad(KOR_ticker$'종목코드', 6,'left', 0)
KOR_sector$'CMP_CD' =
str_pad(KOR_sector$'CMP_CD', 6, 'left', 0)
data_market = left_join(KOR_ticker, KOR_sector,
by = c('종목코드' = 'CMP_CD',
'종목명' = 'CMP_KOR'))
data_market = data_market %>%
rename(`시가총액` = `시가총액.원.`)
data_market = data_market %>%
mutate(`PBR` = as.numeric(PBR),
`PER` = as.numeric(PER),
`ROE` = PBR / PER,
`ROE` = round(ROE, 4),
`size` = ifelse(`시가총액` >=
median(`시가총액`, na.rm = TRUE),
'big', 'small')
)
</pre>
<br />
<br />
먼저 필요한 데이터를 불러온 후 클렌징 하도록 하겠습니다.<br />
퀀트 투자 쿡북의 책 내용을 그대로 따오도록 합니다.<br />
<a href="https://hyunyulhenry.github.io/quant_cookbook/section-38.html#section-39" target="_blank">https://hyunyulhenry.github.io/quant_cookbook/section-38.html#section-39</a><br />
<br />
<div style="text-align: center;">
<b><i><span style="color: red;"><br /></span></i></b></div>
<div style="text-align: center;">
<b><i><span style="color: red;">8월말에 종이책으로 발간됩니다.</span></i></b></div>
<div style="text-align: center;">
<b><i><span style="color: red;">한권씩 매수매수..... 플리즈...</span></i></b></div>
<b><br /></b>
<b><br />
1. corrplot</b><br />
<b><br /></b>
corrplot은 상관관계 행렬을 시각화해주는 확장 패키지로써, 상관관계의 강도를 더욱 이해하기 쉽게 만들어 줍니다.<br />
<br />
<br />
<pre class="brush: py">data_market %>%
select(PER, PBR, ROE) %>%
mutate(PER = min_rank(PER),
PBR = min_rank(PBR),
ROE = min_rank(desc(ROE))) %>%
cor(use = 'complete.obs')
PER PBR ROE
PER 1.0000000 0.4617038 0.6097884
PBR 0.4617038 1.0000000 -0.3525682
ROE 0.6097884 -0.3525682 1.0000000
</pre>
<br />
<br />
종목의 PER, PBR, ROE의 랭크를 구한 후 (ROE의 경우 내림차순) 상관관계를 구해주었습니다. 단순히 숫자로 표현되어 한눈에 확인하기 힘듭니다.<br />
<br />
<br />
<pre class="brush: py">library(corrplot)
data_market %>%
select(PER, PBR, ROE) %>%
mutate(PER = min_rank(PER),
PBR = min_rank(PBR),
ROE = min_rank(desc(ROE))) %>%
cor(use = 'complete.obs') %>%
corrplot(method = 'circle',
addCoef.col = 'white', number.cex = 0.7)
</pre>
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPBMZuVRSusdLv9GVaWjRbDME7xGUcgXl_oe9oNubtnzZVVL26Jsao1tltcfOZTBJPZZosucDeIzecBFLO_VBlu_4-RSAPnb_03seP3RDsgYv4S2jD8r4IB1WM19d99dphFh73cgIv-g/s1600/Rplot.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="378" data-original-width="606" height="398" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPBMZuVRSusdLv9GVaWjRbDME7xGUcgXl_oe9oNubtnzZVVL26Jsao1tltcfOZTBJPZZosucDeIzecBFLO_VBlu_4-RSAPnb_03seP3RDsgYv4S2jD8r4IB1WM19d99dphFh73cgIv-g/s640/Rplot.png" width="640" /></a></div>
<br />
상관관계의 부호가 색깔, 크기가 원의 지름으로 표현되어 훨씬 이해하기 쉽습니다.<br />
method를 통해 그림 모양을 변경할 수도 있으며, 각종 인자를 변경해가며 원하는 그림을 나타낼 수 있습니다. 자세한 사용법은 아래 링크를 참조하시기 바랍니다.<br />
<br />
<a href="https://cran.r-project.org/web/packages/corrplot/vignettes/corrplot-intro.html" target="_blank">https://cran.r-project.org/web/packages/corrplot/vignettes/corrplot-intro.html</a><br />
<br />
<br />
<b>2. waffle</b><br />
<br />
waffle 패키지는 와플 차트를 그려줌으로써, 각 데이터의 비율을 이해하기 쉽게 합니다.<br />
<br />
<br />
<pre class="brush: py">library(waffle)
library(dplyr)
library(magrittr)
df = data_market %>%
select(SEC_NM_KOR) %>%
filter(!is.na(SEC_NM_KOR)) %>%
table() %>% sort(decreasing = TRUE)
df
.
IT 경기관련소비재 산업재 건강관리 소재
574 393 332 226 216
필수소비재 금융 에너지 유틸리티 커뮤니케이션서비스
96 78 23 19 7
</pre>
<br />
<br />
먼저 table() 함수를 이용해 각 섹터별 구성종목수를 확인해보도록 합니다.<br />
<br />
<pre class="brush: py">df %>%
divide_by(5) %>%
waffle(color = rainbow(10),
size = 1, legend_pos = "bottom")
</pre>
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjo3AST0U0X4QFD84GJ43HzNQ4EaOgwpcsIu4FYz-R0HKzHCGDNnnYXkF8BhJT3psA9Z4JlaxgCYzTQEsvr11nj0EUzU3NYWWxaoQdMRxUGFxnjaqzgWr9Hntif8jqc7gE20ZKVPuXC6A/s1600/Rplot01.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="378" data-original-width="606" height="398" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjo3AST0U0X4QFD84GJ43HzNQ4EaOgwpcsIu4FYz-R0HKzHCGDNnnYXkF8BhJT3psA9Z4JlaxgCYzTQEsvr11nj0EUzU3NYWWxaoQdMRxUGFxnjaqzgWr9Hntif8jqc7gE20ZKVPuXC6A/s640/Rplot01.png" width="640" /></a></div>
<br />
스케일링을 위해 divide_by()를 통해 5로 나눠준 다음, waffle()을 통해 와플차트를 표현합니다. 각 섹터의 갯수만큼 정사각형으로 표현되어 비율의 차이를 한눈에 확인할 수 있습니다.<br />
<br />
<a href="https://github.com/hrbrmstr/waffle/tree/cran" target="_blank">https://github.com/hrbrmstr/waffle/tree/cran</a><br />
<br />
<br />
<b>3. treemapify</b><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBbtJbBpeahkHYbUCVwLbP8M_a3pZWIUf7oLxHDAwBOOLOTIa4QI8THrXFMcXCqIMgJNjXEgeF4hfQdswbyk1nGNNXe5HTgaaHoaXV0ILdrci15iJ_aH8IyrK6oOLDiZtwcPkOKgX9xg/s1600/%25EC%259D%25B4%25EB%25AF%25B8%25EC%25A7%2580_001.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="455" data-original-width="773" height="235" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBbtJbBpeahkHYbUCVwLbP8M_a3pZWIUf7oLxHDAwBOOLOTIa4QI8THrXFMcXCqIMgJNjXEgeF4hfQdswbyk1nGNNXe5HTgaaHoaXV0ILdrci15iJ_aH8IyrK6oOLDiZtwcPkOKgX9xg/s400/%25EC%259D%25B4%25EB%25AF%25B8%25EC%25A7%2580_001.png" width="400" /></a></div>
<br />
주식을 하시는 분이라면 이런 그림을 많이 보셨을 겁니다. treemap을 통해 시가총액을 사각형으로 표현하였으며, 그 내부에 각 종목명 및 수익률이 표현되어 있습니다.<br />
<br />
R의 treemapify 패키지를 사용한다면 treemap을 매우 쉽게 그릴 수 있습니다.<br />
<br />
<br />
<pre class="brush: py">data_market %>%
select(시가총액, SEC_NM_KOR, PBR) %>%
filter(!is.na(SEC_NM_KOR)) %>%
mutate(시총비 = 시가총액 / sum(시가총액),
시총비 = round(시총비, 3)) %>%
group_by(SEC_NM_KOR) %>%
summarize(시총비 = sum(시총비),
PBR = median(PBR, na.rm = TRUE)) %>%
ggplot(aes(area = 시총비,
fill = SEC_NM_KOR,
label = paste(SEC_NM_KOR, PBR, sep = '\n\n'))) +
geom_treemap() +
geom_treemap_text(place = 'centre') +
theme(legend.position = "none")
</pre>
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh7oPM2l-tHfzbxyodEbqMEfC4IGyl0sSC8JUuEc8NBJdmx0vb0iGHdnjPMam7qbvumZibWYajl6B1bbcKMJcemRaoarpi8wP17Xh2m_DmHfUGaJPxkbM2LxFG4SynPjbxPqpVFzjfWSw/s1600/Rplot02.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="378" data-original-width="606" height="398" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh7oPM2l-tHfzbxyodEbqMEfC4IGyl0sSC8JUuEc8NBJdmx0vb0iGHdnjPMam7qbvumZibWYajl6B1bbcKMJcemRaoarpi8wP17Xh2m_DmHfUGaJPxkbM2LxFG4SynPjbxPqpVFzjfWSw/s640/Rplot02.png" width="640" /></a></div>
<br />
<br />
먼저 mutate를 통해 시총비를 구해준 후, 섹터 별 시총비와 PBR의 median 값을 구해줍니다.<br />
<br />
그 후 ggplot을 통해 area(영역)은 시총비, fill(영역색)은 색터 이름, 라벨은 paste 함수를 통해 섹터명과 PBR을 합쳐주며, \n을 통해 줄바꿈을 해줍니다. 그 후 treemapify 패키지의 geom_treemap() 함수를 이용해주면 treemap이 표현됩니다.<br />
<br />
각 사각형의 크기는 시총비를 나타내며, IT와 경기관련소비재가 국내 시총의 절반 정도를 차지함이 보입니다. 반면 건강관리는 시총비중이 그렇게 크지 않음에도 불구하고 PBR이 2.59로 매우 높음이 보입니다.<br />
<br />
<a href="https://wilkox.org/treemapify/">https://wilkox.org/treemapify/</a><br />
<br />
<br />
<br />
<b>4. ggrepel</b><br />
<br />
ggplot을 이용해 그림 위에 텍스트를 표현할 경우 잘 보이지 않을 때가 있습니다. ggrepel은 이러한 텍스트를 보기 쉽게 표현해주는 확장 패키지입니다.<br />
<br />
<br />
<pre class="brush: py">library(ggrepel)
library(gridExtra)
p1 = data_market %>%
filter(!is.na(SEC_NM_KOR)) %>%
group_by(SEC_NM_KOR) %>%
summarize(ROE_sector = median(ROE, na.rm = TRUE),
PBR_sector = median(PBR, na.rm = TRUE)) %>%
ggplot(aes(x = ROE_sector, y = PBR_sector,
color = SEC_NM_KOR, label = SEC_NM_KOR)) +
geom_point() +
geom_text(color = 'black', size = 3, vjust = 1.3) +
theme(legend.position = "none")
p1
</pre>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh3tE6OqBBkMhWgUzEf-Le6diShlB0JxQUdL8C14Yz3o3qOF-cC4ooKgBU1GmuofUkTTiX4UYFuqS1wISnARXkhXrvK1CJgXVUv86ZCU9x_1Avs2kLSuE-WGoZ3_ENbuUrPdv8fnTUl9w/s1600/Rplot03.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="378" data-original-width="606" height="398" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh3tE6OqBBkMhWgUzEf-Le6diShlB0JxQUdL8C14Yz3o3qOF-cC4ooKgBU1GmuofUkTTiX4UYFuqS1wISnARXkhXrvK1CJgXVUv86ZCU9x_1Avs2kLSuE-WGoZ3_ENbuUrPdv8fnTUl9w/s640/Rplot03.png" width="640" /></a></div>
<br />
각 섹터의 ROE와 PBR의 median값을 점으로 나타낸 후, geom_text() 함수를 통해 텍스트를 표현했습니다. 그러나 산업재, 필수소비재, 에너지, 경기관련소비재의 경우 글씨들이 몰려있어 구분하기가 쉽지 않습니다.<br />
<br />
<br />
<pre class="brush: py">p2 = data_market %>%
filter(!is.na(SEC_NM_KOR)) %>%
group_by(SEC_NM_KOR) %>%
summarize(ROE_sector = median(ROE, na.rm = TRUE),
PBR_sector = median(PBR, na.rm = TRUE)) %>%
ggplot(aes(x = ROE_sector, y = PBR_sector)) +
geom_point() +
geom_label_repel(
aes(x = ROE_sector, y = PBR_sector,
label = SEC_NM_KOR, color = SEC_NM_KOR)
) +
theme(legend.position = "none")
p2
</pre>
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgxlMpYpjd5SpzYu_BAH4si8VgLy-h2vNXDehHYoNrRE1SI2e1grGyyKTjws2lmqiBdyU6iCgCgBxcdqQ0ePNf05R7Km774_LPDqzWU6dHlPto8yT7XZf4YKTHJe_H71EQcjspJXCMydg/s1600/Rplot04.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="378" data-original-width="606" height="398" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgxlMpYpjd5SpzYu_BAH4si8VgLy-h2vNXDehHYoNrRE1SI2e1grGyyKTjws2lmqiBdyU6iCgCgBxcdqQ0ePNf05R7Km774_LPDqzWU6dHlPto8yT7XZf4YKTHJe_H71EQcjspJXCMydg/s640/Rplot04.png" width="640" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
<br />
동일한 내용이지만 ggrepel 패키지의 geom_label_repel() 함수를 이용할 경우 훨씬 구분하기가 쉽게 표현됩니다.<br />
<br />
<pre class="brush: py">grid.arrange(p1, p2, ncol = 1)
</pre>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiROJH9WXxzg2FsaljhyWFKjsBKNKffpQTzCmS3KIlgpzALHLZ1x1V1DR4PdWegX5klYfc9vmSRXoChS6xd4EJnrgZwqt1E_3YMqqvx9pnNid_SpOLFYenJPMmVPcdtpFC1xIbYoizUeA/s1600/Rplot06.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="439" data-original-width="848" height="330" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiROJH9WXxzg2FsaljhyWFKjsBKNKffpQTzCmS3KIlgpzALHLZ1x1V1DR4PdWegX5klYfc9vmSRXoChS6xd4EJnrgZwqt1E_3YMqqvx9pnNid_SpOLFYenJPMmVPcdtpFC1xIbYoizUeA/s640/Rplot06.png" width="640" /></a></div>
<br />
gridExtra 패키지의 grid.arrange() 함수는 여러개의 ggplot 그림을 하나의 화면에 출력해줍니다. ggrepel 패키지를 이용하는 것이 내용을 확인하기 훨씬 쉽습니다.<br />
<br />
<a href="https://cran.r-project.org/web/packages/ggrepel/vignettes/ggrepel.html">https://cran.r-project.org/web/packages/ggrepel/vignettes/ggrepel.html</a><br />
<br />
<br />
5. ggradar<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiSG4L0XWrDWhoLgyn4sZcbk_CgUqEvaUTP-xzY7Ub2VEViT-yTA7KeKZ5ABdL38gsqWJIa7K1BKNWOdItKOOuBbnJsr1i9dpfYxE_IjYbh0sZj2S8PuWjS8wpZCkHbwB_loIKFO9rl4A/s1600/1_9I6_4hPdZ94B-VrsYzx5bg.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="588" data-original-width="1178" height="198" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiSG4L0XWrDWhoLgyn4sZcbk_CgUqEvaUTP-xzY7Ub2VEViT-yTA7KeKZ5ABdL38gsqWJIa7K1BKNWOdItKOOuBbnJsr1i9dpfYxE_IjYbh0sZj2S8PuWjS8wpZCkHbwB_loIKFO9rl4A/s400/1_9I6_4hPdZ94B-VrsYzx5bg.png" width="400" /></a></div>
<br />
<br />
레이더 혹은 스파이더 차트는 게임에 많이 나오는 차트입니다. 흔히 능력치를 보기쉽게 나타내주는 그래프입니다.<br />
<br />
ggradar 패키지의 경우 CRAN의 공식 패키지가 아니므로 github를 통해 다운로드 받아야 됩니다.<br />
<br />
<br />
<pre class="brush: py">devtools::install_github("ricardo-bion/ggradar",
dependencies = TRUE)
library(ggradar)
library(scale)</pre>
<pre class="brush: py"><pre class="brush: py">library(dplyr)</pre>
data_market %>%
filter(!is.na(SEC_NM_KOR)) %>%
mutate(tile_size = ntile(desc(시가총액), 5)) %>%
group_by(tile_size) %>%
summarize(ROE = median(ROE, na.rm = TRUE),
PBR = median(PBR, na.rm = TRUE),
PER = median(PER, na.rm = TRUE),
DY = median(배당수익률, na.rm = TRUE)) %>%
mutate_at(vars(-tile_size), rescale) %>%
ggradar() +
theme(legend.position = 'bottom',
legend.title = element_blank())
</pre>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhK9ZMHVGqHNtFKLEbF43JH-gE7glpVwbFc6XRm2tFGUDPWdAESRGtZ-Ey5lqfG8CV07vSte-EcQl_laUFb72LM5mMr5-7dQve-cmBpm-Rh4_0V1Lu42T8k9IlNvSWSQrFrJZcEENsZKA/s1600/Rplot07.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="439" data-original-width="848" height="330" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhK9ZMHVGqHNtFKLEbF43JH-gE7glpVwbFc6XRm2tFGUDPWdAESRGtZ-Ey5lqfG8CV07vSte-EcQl_laUFb72LM5mMr5-7dQve-cmBpm-Rh4_0V1Lu42T8k9IlNvSWSQrFrJZcEENsZKA/s640/Rplot07.png" width="640" /></a></div>
<br />
<br />
먼저 ntile() 함수를 이용해 시가총액을 5개 분위 (내림차순)으로 나눠주도록 합니다. 그 후 각 그룹별 ROE, PBR, PER, DY를 구해준 후, 분위수명(tile_size)를 제외한 컬럼을 scale 패키지의 rescale() 함수를 이용해 0에서 1 값이 되도록 표준화 해줍니다.<br />
<br />
그 후 ggradar() 함수를 입려해주면 레이더 차트가 자동으로 생성됩니다.<br />
<br />
분위수가 높을 수록, 즉 시가총액이 클수록 ROE와 PBR은 높은 Quality 주식이 많고, 분위수가 낮을수록, 즉 시가총액이 작을수록 ROE와 PBR이 낮은 Junk 주식이 많음이 보입니다.<br />
<br />
<br />
이 외에도 ggplot의 다양한 확장 패키지는 아래의 사이트에서 확인할 수 있습니다.<br />
<br />
<a href="http://www.ggplot2-exts.org/gallery/" target="_blank">http://www.ggplot2-exts.org/gallery/</a>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-23651150467485474.post-26225581945590224032019-08-04T00:00:00.002+09:002019-08-04T00:21:33.745+09:00커다란 변화: 투자 리서치의 미래 (Seismic Shifts: The Future of Investment Research)<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi-nHuPawZO6aueMK3oyl-zllh82_89gv7pt-81c5DKyiUR-hBxvYWlM0be_8B3fBdOfhfI7j9lzoiCi35pjmnUpjMT_DJuVbNr4Pv7HE3FCZ3k3excFni5X1c3BMoNc6HTEN00oSZ9Gw/s1600/K-016.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="743" data-original-width="975" height="486" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi-nHuPawZO6aueMK3oyl-zllh82_89gv7pt-81c5DKyiUR-hBxvYWlM0be_8B3fBdOfhfI7j9lzoiCi35pjmnUpjMT_DJuVbNr4Pv7HE3FCZ3k3excFni5X1c3BMoNc6HTEN00oSZ9Gw/s640/K-016.png" width="640" /></a></div>
<br />
<br />
<br />
본 글은 Greenwich Associates가 톰슨 로이터가 공동으로 조사한 내용입니다. 2018년 3월부터 5월까지 북미, 유럽, 아시아 지역 30명의 CIO, 포트폴리오 매니저, 애널리스트 등을 대상으로 하였으며, <b><i><span style="color: red;">향후 5에서 10년 후 투자 리서치가 어떻게 변화</span></i></b>할지에 대한 설문조사 결과 입니다.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgcZE3zEtde6sssZSMFYMP-pi_G6IIktwpvxbK2kkwRZp7_wrvwc-2ECd-B4-4sfmsNB_AE813PaCH3_-ets-A299QP6VBcreKqACjM32Lny05gDH02Pt9T5sr1VhKiEdVsiMM7mEH7Mw/s1600/K-001.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="554" data-original-width="918" height="386" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgcZE3zEtde6sssZSMFYMP-pi_G6IIktwpvxbK2kkwRZp7_wrvwc-2ECd-B4-4sfmsNB_AE813PaCH3_-ets-A299QP6VBcreKqACjM32Lny05gDH02Pt9T5sr1VhKiEdVsiMM7mEH7Mw/s640/K-001.png" width="640" /></a></div>
<br />
<br />
원문은 아래 링크에서 요청하여 다운로드 받을 수 있습니다.<br />
<br />
<b><a href="https://www.greenwich.com/equities/seismic-shifts-future-investment-research" target="_blank">https://www.greenwich.com/equities/seismic-shifts-future-investment-research</a></b><br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjV1U9g-CPG-K-E_Saf2jCccw-AoeWoZBxceDIXiv6jN6tzdrKjVEsAccb41Q5o8pdbHkZ97PUZSCN9KIBOhyphenhyphenQWY1pIkBUXDz3u-OmV8XOw1alohucFwkTh7HgU0oVpDMrVDRMBexrcfg/s1600/K-002.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="463" data-original-width="881" height="336" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjV1U9g-CPG-K-E_Saf2jCccw-AoeWoZBxceDIXiv6jN6tzdrKjVEsAccb41Q5o8pdbHkZ97PUZSCN9KIBOhyphenhyphenQWY1pIkBUXDz3u-OmV8XOw1alohucFwkTh7HgU0oVpDMrVDRMBexrcfg/s640/K-002.png" width="640" /></a></div>
<br />
<br />
대답자의 71%가 미래에는 리서치가 언번들링 될 것이라 보고 있습니다. 이를 이해하기 위해서는 MiFID Ⅱ에 대해 알 필요가 있습니다.<br />
<br />
<b><i style="background-color: #f3f3f3;">MiFID II란?</i></b><br />
<b><i style="background-color: #f3f3f3;"><br /></i></b>
<b><i style="background-color: #f3f3f3;">금융시장의 투명성과 안정성을 높이고 소비자보호를 강화하기 위해 도입되는 EU(유럽연합)의 새로운 금융규제로, 자산운용사가 IB와 중개사에 거래 수수료와 별도로 리서치 이용료를 지불하도록 하는 등의 내용을 담고있다. 금융상품시장규정(MiFIR)과 함께 적용되며 2007년에 발효된 MiFID 법률을 일부 조정한 개정 규정으로 적용대상은 주식과 채권, 파생상품 등 금융상품의 거래와 이와 관련된 서비스를 제공하는 중개기관 등이다.</i></b><br />
<b><i style="background-color: #f3f3f3;">MiFID II는 도입된 목적을 달성하기 위해 적용대상 기관들에게 다양한 보고의무를 부과하게 되고, 유럽계 기관들은 부과된 의무를 다하기 위해 거래상대방에게도 여러가지 정보나 거래관행의 변경을 요구하게 된다.</i></b><br />
<b><i style="background-color: #f3f3f3;">주요 규율 영역은 KYC(Know Your Customer. 고객 파악) 및 적절성, 데이터와 가격 분석 및 SI계산기, 리서치 준법감시 및 관리, 음성으로 거래하는 세일즈 트레이더 업무흐름, 주문 관리, 거래 전 투명성, 거래소, 거래 후 투명성, 기록 보관 및 변경 불가 저장공간, 거래 보고, 거래 재구성, 감시, 최적의 거래 체결 등 13개 분야다.</i></b><br />
<br />
출처: <a href="https://www.bloomberg.co.kr/blog/mifid-ii/" target="_blank">https://www.bloomberg.co.kr/blog/mifid-ii/</a><br />
<br />
짧게 말하자면, 기존에는 자산운용사가 증권사와 거래를 하는 대가로 리서치 서비스를 사실상 무료로 제공받은 반면, 유럽의 MiFID Ⅱ 규제는 이러한 리서치 이용료를 지불하도록 하는 것입니다.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgmfyPhgZRlyueNg-26Tx9Go6HKQAqAbuZRhfAY27KmalgcZ3_cJdMFwz9pMIiB0eOvIbUF0pGKiUwZ3U6c6RT_A_E0VUAzPofu6-YFL7l7Mh8XQJaNzoYwSsYff5o1eiOXBAm4IRY8yw/s1600/K-003.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="682" data-original-width="465" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgmfyPhgZRlyueNg-26Tx9Go6HKQAqAbuZRhfAY27KmalgcZ3_cJdMFwz9pMIiB0eOvIbUF0pGKiUwZ3U6c6RT_A_E0VUAzPofu6-YFL7l7Mh8XQJaNzoYwSsYff5o1eiOXBAm4IRY8yw/s400/K-003.png" width="272" /></a></div>
<br />
이미 리서치에 대한 비용을 지불하거나, 앞으로 지불하는데 긍정적인 의견을 보이는 비율이 과반수를 넘었습니다. 이를 통해 투자 리서치가 더이상 무료 서비스의 성격이 아닌 전문 서비스로 인정받을 수 있음을 생각해볼 수 있습니다.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjSI3VMMoFo1k6VS2jyqWc5FVzMwtAdNdHaZWccuHRSipMfnpGcb_xnxINeu4O0Kar54cqWl0S__6qzDhbuCi7NzEbl2kQzydXf9lRZKleVP2eKNOmWYbPzP8pwPQS5mriVNK7ZegZXtg/s1600/K-004.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="493" data-original-width="465" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjSI3VMMoFo1k6VS2jyqWc5FVzMwtAdNdHaZWccuHRSipMfnpGcb_xnxINeu4O0Kar54cqWl0S__6qzDhbuCi7NzEbl2kQzydXf9lRZKleVP2eKNOmWYbPzP8pwPQS5mriVNK7ZegZXtg/s400/K-004.png" width="376" /></a></div>
<br />
<br />
31%는 패시브의 성장이 끝났다고, 34%는 액티브가 성장할 것이라 믿으며, 패시브가 계속 성장할 것이라 믿는 비중은 34% 밖에 되지 않습니다. 즉 많은 전문가들이 향후에는 패시브 보다는 액티브 투자의 성장에 무게를 두는 모습입니다.<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBLlt01xAvNb-WFA5223TEDqj0XHFfwte6b8RIIwpB4yidpaD5ztGRsjqc_KoV9Hm3mi_6Et7qY9Gqqro84vlKpVE_1o5Qmg3JvfdQ70dI9sS4ZuSi7pw69YtTlvi6sfn9D7Lw6Lg_tw/s1600/K-005.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="748" data-original-width="1406" height="340" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBLlt01xAvNb-WFA5223TEDqj0XHFfwte6b8RIIwpB4yidpaD5ztGRsjqc_KoV9Hm3mi_6Et7qY9Gqqro84vlKpVE_1o5Qmg3JvfdQ70dI9sS4ZuSi7pw69YtTlvi6sfn9D7Lw6Lg_tw/s640/K-005.png" width="640" /></a></div>
<br />
<br />
현재 투자 리서치의 소스를 보면, 내부 리서치를 이용하는 비율이 압도적으로 높습니다. 최근 많은 운용사들이 인하우스 리서치를 늘리는 것과 같은 흐름입니다.<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgbQaqKeVQ6dgL_Zhn38yr089aB4ceoxko5mG-04mwpuoMrpZTexw7bn0MhT9bEnSC6A5DLTT649iDDOFitfMjh3hbfYQ0JFByRpOWHWcFsGjKBZiP1XpXBufX-Mm9go6Yh9Gh8dhS7GA/s1600/K-006.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="762" data-original-width="1406" height="346" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgbQaqKeVQ6dgL_Zhn38yr089aB4ceoxko5mG-04mwpuoMrpZTexw7bn0MhT9bEnSC6A5DLTT649iDDOFitfMjh3hbfYQ0JFByRpOWHWcFsGjKBZiP1XpXBufX-Mm9go6Yh9Gh8dhS7GA/s640/K-006.png" width="640" /></a></div>
<br />
<br />
미래에는 <b><i><span style="color: red;">데이터 소스(데이터 벤더), 내부 리서치, 독립 리서치</span></i></b>에 대한 의존도를 더욱 늘려나갈 것으로 기대됩니다.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgoQ7XNw210qxPRSF87ynX3W1gMi0tQBzXa6sM3Lk4LrZXfzq47MMQ8YWPKSUGa1LaKIvErHPZ3uClZTvx1-IYqwNi0VPmP504dEtKO1eeIv26B7ViBmTrvYIqlNS2O61bUAm6nyByOFw/s1600/K-007.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="828" data-original-width="1247" height="424" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgoQ7XNw210qxPRSF87ynX3W1gMi0tQBzXa6sM3Lk4LrZXfzq47MMQ8YWPKSUGa1LaKIvErHPZ3uClZTvx1-IYqwNi0VPmP504dEtKO1eeIv26B7ViBmTrvYIqlNS2O61bUAm6nyByOFw/s640/K-007.png" width="640" /></a></div>
<br />
현재 사용중인 대체 데이터의 비율을 보면 웹스크랩, 서치 트렌드 등 기존 투자회사에서 거의 사용하지 않던 데이터의 사용 비중이 높습니다. 또한 현재 대체 데이터를 사용중이거나, 사용할 계획에 있는 비중 역시 70%로 매우 높습니다.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhk9nJLzxy4laQWjGC3tVN0guX4xOtnuuxOP9q7D8zjMj0dRLOsFdvthe6JlSo2l_YwTGzE944Vz7Z9Q4Wnqop4OeRNwfkSLt-AUeIeGO1vdlRl8e-JJWrtl4sG2wkvUAoB62YXPo6f2Q/s1600/K-008.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="378" data-original-width="675" height="358" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhk9nJLzxy4laQWjGC3tVN0guX4xOtnuuxOP9q7D8zjMj0dRLOsFdvthe6JlSo2l_YwTGzE944Vz7Z9Q4Wnqop4OeRNwfkSLt-AUeIeGO1vdlRl8e-JJWrtl4sG2wkvUAoB62YXPo6f2Q/s640/K-008.png" width="640" /></a></div>
<br />
데이터 분석 방법으로 보면, 의외로 아직 엑셀이 48%로 1위입니다. 그러나 Python, R등 프로그래밍을 통한 분석도 43%오 매우 높습니다. 조만간 역전 되겠죠??<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhCsAhYUu-uglGm2WsrqyD_FzWfAyCv8eUj0o1dWLTNcJwEBmX1lx0QYLOD-3FM7Q8IwB46O_PVtFpq8fY6F1L1qzD7J_nUxsvNBgWpvqybw2aEDtQAZT1b5B8hvQYPxZjphVW5b1U52Q/s1600/K-009.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="378" data-original-width="438" height="345" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhCsAhYUu-uglGm2WsrqyD_FzWfAyCv8eUj0o1dWLTNcJwEBmX1lx0QYLOD-3FM7Q8IwB46O_PVtFpq8fY6F1L1qzD7J_nUxsvNBgWpvqybw2aEDtQAZT1b5B8hvQYPxZjphVW5b1U52Q/s400/K-009.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
현재 인공지능은 사용하지 않는다는 비중이 73%로 꽤 높습니다. </div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgWux2MxAKQeZiWeIxhLGgaIri_qcVSdcGNXa3cMGgvB1cuCS_rrNiyLyjK1L6AYIAKaL2-l1BUp2tAJWsYfZ1HphX5NCPYUfcIww78Mq9pe3U-yZMJwCQK3WiKqKIuq5Ua4l6l3zJuKA/s1600/K-011.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="378" data-original-width="764" height="316" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgWux2MxAKQeZiWeIxhLGgaIri_qcVSdcGNXa3cMGgvB1cuCS_rrNiyLyjK1L6AYIAKaL2-l1BUp2tAJWsYfZ1HphX5NCPYUfcIww78Mq9pe3U-yZMJwCQK3WiKqKIuq5Ua4l6l3zJuKA/s640/K-011.png" width="640" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
그러나 미래에 기존의 투자 문화와 융합될 가능성은 매우 크게 보고 있으며, 투자할 의향도 높게 보이고 있습니다.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEieornhOWdAyH7xJ2nACkQRcRP8EkL0qB2ZH4V2LZgzxncUzbcIiiAuja3hyphenhyphen4T8zGy3PK7CXWrscZcK7_mv0W12aaSjr7Sf6pVkOzK3kQ12_mXh3prwFwWsCNGT7r5rxZed5AvR-41wrA/s1600/K-012.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="378" data-original-width="764" height="316" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEieornhOWdAyH7xJ2nACkQRcRP8EkL0qB2ZH4V2LZgzxncUzbcIiiAuja3hyphenhyphen4T8zGy3PK7CXWrscZcK7_mv0W12aaSjr7Sf6pVkOzK3kQ12_mXh3prwFwWsCNGT7r5rxZed5AvR-41wrA/s640/K-012.png" width="640" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<br />
그러나 AI가 직접적으로 의사 결정을 하기 보다는 여러 데이터를 분석하는데 사용될 것으로 기대하고 있습니다.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhhEWEiGNt9uoKgzwdu8rUpdF5a7g6Gzl2a9ZlBTdkhVyXlytybrDBrhziSQ06cwDpv9twvEEmpjLl9AgAG6z6-2XB746z7XG80xYyfAmzMle76jVtaImZu2j3IQVcJbTt2EL6f2zeTBw/s1600/K-013.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="378" data-original-width="764" height="316" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhhEWEiGNt9uoKgzwdu8rUpdF5a7g6Gzl2a9ZlBTdkhVyXlytybrDBrhziSQ06cwDpv9twvEEmpjLl9AgAG6z6-2XB746z7XG80xYyfAmzMle76jVtaImZu2j3IQVcJbTt2EL6f2zeTBw/s640/K-013.png" width="640" /></a></div>
<br />
데이터, 그리고 기술에 더욱 투자하겠다는 비중이 각각 81%로 매우 높습니다.<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNSyrsV6SJ8pzuR95XtUW9yk89I_z9AcCQBb0yOD6OudhluHou8Sw8c1ubaGuW3nxZKC4e6Ln20A3rN2_ve-b27lt1y444fmiMLh_CIQ-rFDtaY6TivTDJZeMCbzyWPA-6IHM8pFBmDQ/s1600/K-014.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="780" data-original-width="415" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNSyrsV6SJ8pzuR95XtUW9yk89I_z9AcCQBb0yOD6OudhluHou8Sw8c1ubaGuW3nxZKC4e6Ln20A3rN2_ve-b27lt1y444fmiMLh_CIQ-rFDtaY6TivTDJZeMCbzyWPA-6IHM8pFBmDQ/s640/K-014.png" width="340" /></a></div>
<br />
전통적으로 선호되던 MBA, PhD, CFA 보다는 이러한 데이터를 다루고 모델링 할 수 있는 <b>데이터 사이언스 역량</b>이 가장 중요하다고 보고 있습니다.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg8dQSxUC-QEycDkJkVNgGWKZ_YYsT3jLk0Z0qcSjU_3Fqd2Z9fjZeCVKYT2zzo6QKhBTPZAjK22sa6X9QGb_aTzbrEIV3qXNUmqJmtcpeTL_ZNjUL43enJo6PsEewotp1Xceh_j4F6_g/s1600/K-015.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="402" data-original-width="855" height="300" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg8dQSxUC-QEycDkJkVNgGWKZ_YYsT3jLk0Z0qcSjU_3Fqd2Z9fjZeCVKYT2zzo6QKhBTPZAjK22sa6X9QGb_aTzbrEIV3qXNUmqJmtcpeTL_ZNjUL43enJo6PsEewotp1Xceh_j4F6_g/s640/K-015.png" width="640" /></a></div>
<br />
기관 투자자가 브로커를 거치지 않고 직접 주문을 내는 비율은 점차 올라갈 것으로 기대됩니다. 사실 저도 매니저를 하면서 항상 이게 의문이였습니다. 저는 애초에 리서치를 안보니 증권사에서 서비스를 받을 일도 없고, 증권사 계좌 열어서 직접 주문내면 수수료도 0%라 고객들에게도 이득인데........ 대체 왜때문에....<br />
<br />
<br />Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-23651150467485474.post-62496380006007960402019-07-28T13:19:00.001+09:002019-07-28T13:36:47.455+09:00R 샤이니를 이용한 스탁 스크리너 만들기<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiyYjoItMRvPMjjiFmvUBQgPJoA1QZKxoETjsHlT1KWm5wKVDuX1Db6yl4U9ryq_vNVZxjwzxgNeTfo_bj4k5BwhJpZLgwFBwYfssI1y8FQs36iohsaRNuAXqi2SDF5LNiMc6plLby_dw/s1600/K-002.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="827" data-original-width="1600" height="330" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiyYjoItMRvPMjjiFmvUBQgPJoA1QZKxoETjsHlT1KWm5wKVDuX1Db6yl4U9ryq_vNVZxjwzxgNeTfo_bj4k5BwhJpZLgwFBwYfssI1y8FQs36iohsaRNuAXqi2SDF5LNiMc6plLby_dw/s640/K-002.png" width="640" /></a></div>
<br />
<br />
먼저 샤이니 앱은 크게 3가지 파트로 구성되어 있습니다.<br />
<br />
<pre class="brush: py"># library(shiny)
# Define UI for application
ui = fluidPage(
# Application title
titlePanel("Title"),
# Sidebar
sidebarLayout(
sidebarPanel(
...
),
# Show a plot of the generated distribution
mainPanel(
...
)
)
)
# Define server logic
server = function(input, output) {
...
}
# Run the application
shinyApp(ui, server)
</pre>
<br />
1. ui<br />
<br />
ui는 웹페이지에 보이는 출력 화면을 잡는 부분입니다. titlePanel은 제목 부분을 나타내며, sidebarLayout은 화면 구성을 잡아줍니다. 이 중 sidebarPanel은 좌측 혹은 상단의 메뉴를, mainPanel은 아래 server에서 생성된 결과물을 본문 부분에 어떻게 출력할지 정의합니다.<br />
<br />
페이지를 만드는 함수들이기에 기존 R 문법과는 다소 다를 수 있지만, ui 부분에 사용되는 함수는 그리 많지 않아 샤이니 홈페이지의 예제 문법들을 보며 따라해도 충분히 원하는 화면을 만들 수 있습니다.<br />
<br />
2. server<br />
<br />
server는 페이지에 들어가는 내용들을 잡는 부분입니다. 기존 R 코딩과 거의 비슷하며, 결과물을 어떻게 render 할지만 차이가 있습니다.<br />
<br />
<b><span style="color: red;">ui에서 받아온 input을 통해 계산한 후 이를 output에 저장하면, ui에서는 이 output을 출력하는 형태입니다. 즉, ui 부분과 server 부분은 매우 유기적으로 연결되어 있습니다.</span></b><br />
<br />
3. shinyApp() 함수를 통해 앱을 실행합니다.<br />
<br />
샤이니 문법은 기존 R 문법과 다소 다른 부분도 있으며, html 기반으로 작동하므로 어렵다고 느낄 수 있지만, Rstudio에서 제공하는 각종 샘픔을 따라해보면 금방 이해하실 수 있습니다.<br />
<br />
<a href="https://shiny.rstudio.com/gallery/" target="_blank">https://shiny.rstudio.com/gallery/</a><br />
<br />
<div style="text-align: center;">
<b>------</b><b>------</b><b>------</b><b>------</b><b>------</b></div>
<br />
<br />
다음은 스탁 스크리너를 만드는 코드입니다.<br />
<br />
<br />
<pre class="brush: py">pkg = c('httr', 'rvest', 'stringr', 'readr', 'shiny',
'dplyr', 'shinycssloaders', 'DT')
new.pkg = pkg[!(pkg %in% installed.packages()[, "Package"])]
if (length(new.pkg))
install.packages(new.pkg, dependencies = TRUE)
sapply(pkg, require, character.only = TRUE)
down_df = function() {
# 최근 영업일 구하기
url = 'https://finance.naver.com/sise/sise_deposit.nhn'
biz_day = GET(url) %>%
read_html(encoding = 'EUC-KR') %>%
html_nodes(xpath =
'//*[@id="type_1"]/div/ul[2]/li/span') %>%
html_text() %>%
str_match(('[0-9]+.[0-9]+.[0-9]+') ) %>%
str_replace_all('\\.', '')
# 산업별 현황 OTP 발급
gen_otp_url =
'http://marketdata.krx.co.kr/contents/COM/GenerateOTP.jspx'
gen_otp_data = list(
name = 'fileDown',
filetype = 'csv',
url = 'MKD/03/0303/03030103/mkd03030103',
tp_cd = 'ALL',
date = biz_day, # 최근영업일로 변경
lang = 'ko',
pagePath = '/contents/MKD/03/0303/03030103/MKD03030103.jsp')
otp = POST(gen_otp_url, query = gen_otp_data) %>%
read_html() %>%
html_text()
# 산업별 현황 데이터 다운로드
down_url = 'http://file.krx.co.kr/download.jspx'
down_sector = POST(down_url, query = list(code = otp),
add_headers(referer = gen_otp_url)) %>%
read_html() %>%
html_text() %>%
read_csv()
ifelse(dir.exists('data'), FALSE, dir.create('data'))
write.csv(down_sector, 'data/krx_sector.csv')
# 개별종목 지표 OTP 발급
gen_otp_url =
'http://marketdata.krx.co.kr/contents/COM/GenerateOTP.jspx'
gen_otp_data = list(
name = 'fileDown',
filetype = 'csv',
url = "MKD/13/1302/13020401/mkd13020401",
market_gubun = 'ALL',
gubun = '1',
schdate = biz_day, # 최근영업일로 변경
pagePath = "/contents/MKD/13/1302/13020401/MKD13020401.jsp")
otp = POST(gen_otp_url, query = gen_otp_data) %>%
read_html() %>%
html_text()
# 개별종목 지표 데이터 다운로드
down_url = 'http://file.krx.co.kr/download.jspx'
down_ind = POST(down_url, query = list(code = otp),
add_headers(referer = gen_otp_url)) %>%
read_html() %>%
html_text() %>%
read_csv()
KOR_ticker = merge(down_sector, down_ind,
by = intersect(names(down_sector),
names(down_ind)),
all = FALSE
)
data = KOR_ticker %>%
mutate(PER = parse_number(PER),
PBR = parse_number(PBR),
ROE = PBR / PER,
ROE = round(ROE, 2),
시총순위 = percent_rank(desc(`시가총액(원)`)),
시총순위 = round(시총순위, 2)) %>%
arrange(시총순위) %>%
select(일자, 종목코드, 종목명, 종가, PER, PBR, 배당수익률, ROE, 시총순위)
}
</pre>
<br />
먼저 사전에 필요한 내용들을 정리합니다. 필요한 패키지들을 pkg에 저장한 후, 이를 설치 및 불러오는 코드를 상단에 배치합니다. 그 후, 한국거래소의 티커 및 밸류 지표들을 다운로드 받아 클랜징하는 함수를 <b>down_df()</b>로 만듭니다. 해당 코드에 대한 자세한 설명은 퀀트 투자 쿡북을 참조하시기 바랍니다.<br />
<br />
<a href="https://hyunyulhenry.github.io/quant_cookbook/section-17.html#section-18" target="_blank"><b><i>https://hyunyulhenry.github.io/quant_cookbook/section-17.html#section-18</i></b></a><br />
<b><i>(8월말 종이책으로도 출간됩니다.)</i></b><br />
<br />
<br />
<pre class="brush: py"># Define UI for app ----
ui = fluidPage(
# App title ----
titlePanel('Stock Screener'),
# Sidebar to demonstrate various slider options ----
sidebarPanel(
# Input: Specification of range within PER ----
sliderInput("PER", "PER:",
min = 0,
max = 100,
value = c(0,20),
step = 0.01),
# Input: Specification of range within PBR ----
sliderInput("PBR", "PBR:",
min = 0,
max = 10,
value = c(0, 2),
step = 0.01),
# Input: Specification of range within Div Yield ----
sliderInput("DY", "배당수익률(%):",
min = 0,
max = 20,
value = c(2, 5),
step = 0.01),
# Input: Specification of range within ROE ----
sliderInput("ROE", "ROE:",
min = 0,
max = 2,
value = c(0.1, 0.5),
step = 0.01),
# Input: Specification of range within Size ----
sliderInput("SIZE", "SIZE(%):",
min = 0,
max = 1,
value = c(0, 1),
step = 0.01)
),
mainPanel(
dataTableOutput('screen_table') %>% withSpinner(color="#0dc5c1")
)
)
</pre>
<br />
다음은 ui를 통해 출력 화면을 잡습니다. 먼저 titlePanel을 통해 제목을 정해줍니다. sidebarPanel은 좌측의 스크리너 항목을 잡아주는 부분으로써, sliderInput을 통해 셀렉터 위젯을 설정해 줍니다. 해당 페이지에서는 슬라이더를 만들어 주었으며, 이 외에도 샤이니에서는 굉장히 많은 위젯을 제공하므로, 갤러리에서 원하는 위젯을 찾아 코드를 따오면 됩니다.<br />
<br />
<a href="https://shiny.rstudio.com/gallery/widget-gallery.html" target="_blank">https://shiny.rstudio.com/gallery/widget-gallery.html</a><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEioVXiWmMLpiTx3nwBVgBUn0Rnq4kgljZFx_loYPo3aGDiEwaDaxhf7QOfyGlPIVlUwc15hkiHpyWBcSjsUo1ke02XmV4Xmrd2HlKxOrhOhv_1_3iFG1aYJ_6KIWAFsoh6sS5gjd5bsOg/s1600/K-001.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="751" data-original-width="1600" height="300" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEioVXiWmMLpiTx3nwBVgBUn0Rnq4kgljZFx_loYPo3aGDiEwaDaxhf7QOfyGlPIVlUwc15hkiHpyWBcSjsUo1ke02XmV4Xmrd2HlKxOrhOhv_1_3iFG1aYJ_6KIWAFsoh6sS5gjd5bsOg/s640/K-001.png" width="640" /></a></div>
<br />
<br />
<pre class="brush: py">sliderInput("PER", "PER:",
min = 0,
max = 100,
value = c(0,20),
step = 0.01) </pre>
<br />
<br />
sidebarPanel 내의 위 코드에서 맨앞의 PER는 input의 변수명을, PER:는 화면에 출력될 내용을, min은 슬라이더의 최소값, max는 슬라이더의 최대값, value는 초기에 어디에서 어디까지 보일지, step은 한 단위당 구간을 의미합니다.<br />
<br />
즉 PER에 해당하는 슬라이더는 0에서 100까지 위치하며, 초기에는 0과 20을 슬라이더로 정합니다. 또한 범위는 0.01 단위로 선택이 가능합니다. 나머지 PBR, DY, ROE, SIZE 모두 동일하게 적용이 됩니다.<br />
<br />
<pre class="brush: py">mainPanel(
dataTableOutput('screen_table') %>% withSpinner(color="#0dc5c1")
)
</pre>
<br />
mainPanel은 output을 출력하는 부분입니다. 뒤의 server 부분에서 저장될 screen_table 라는 변수를 dataTable 형태로 출력하며, 출력이 되는 시간 동안 shinycssloaders 패키지의 withSpinner 함수를 통해 대기 화면을 보여줍니다.<br />
<br />
이처럼 shiny의 ui 부분에서는 output을 어떠한 형태로 출력할지 정해주어야 하며, 테이블 형태는 크게 DT 패키지를 이용한 dataTable 형태, knitr과 kableextra 패키지를 이용한 html 형태의 테이블이 많이 사용됩니다. 그래프는 plotly 형태가 많이 사용됩니다.<br />
<br />
<pre class="brush: py"># Define server logic to selected dataset ----
server = function(input, output) {
# Download Data ----
data = down_df()
# Filtered Table ----
output$screen_table = DT::renderDataTable({
data %>%
filter(PER > input$PER[1] & PER < input$PER[2]) %>%
filter(PBR > input$PBR[1] & PBR < input$PBR[2]) %>%
filter(배당수익률 > input$DY[1] & 배당수익률 < input$DY[2]) %>%
filter(ROE > input$ROE[1] & ROE < input$ROE[2]) %>%
filter(시총순위 > input$SIZE[1] & 시총순위 < input$SIZE[2]) %>%
DT::datatable(rownames= FALSE,
extensions = 'Buttons',
options = list(pageLength = 100,
dom = 'Bfrtip',
buttons = c('copy', 'csv', 'excel', 'pdf')
))
})
}
</pre>
<br />
server 부분은 출력될 내용을 잡는 부분이며 매우 간단합니다. 먼저 사전에 정의된 down_df() 함수를 통해 거래소 데이터를 크롤링 및 클랜징 합니다. 그 후, filter() 함수를 이용하여 input에서 정의된 값에 해당하는 데이터를 필터링 합니다. input$PER[1]은 슬라이더 부분의 좌측 값을, input$PER[2]는 슬라이더 부분의 우측 값을 의미합니다.<br />
<br />
그 후 해당 페이들을 datatable() 함수를 이용해 데이터테이블 형태로 변경합니다. rownames = FALSE를 통해 행이름을 삭제하며, extensions를 통해 추가적인 버튼을 생성합니다. pageLength는 한 화면에 몇개의 행을 보일지 정의하며 dom은 버튼의 위치를, buttons는 어떠한 버튼을 보여줄지 정의합니다.<br />
<br />
위의 결과를 renderDataTable()을 통해 데이터 테이블 형태로 렌더링 한 후, output의 screen_table에 저장합니다. ui의 mainPanel 부분에서 dataTableOutput('screen_table')는 이 결과물을 받아 출력하는 것입니다.<br />
<br />
<pre class="brush: py"># Create Shiny app ----
shinyApp(ui, server)
</pre>
<br />
마지막으로 shinyApp 함수를 통해 ui와 server를 받아 웹페이지를 출력합니다.<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBf-hF8RWPCOuDmfXJyBGvtovNmpafTC3gKkI4vzNfy_cxEilE98M8CgZ2T2XXyGdXX072rUGH3EkU8fg7IK9sGwEPmXzCyDuMcJo6HmKG7VjkVblAoTQosiYBtoPx0X_FumNM9KZ2pw/s1600/K-002.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="827" data-original-width="1600" height="330" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBf-hF8RWPCOuDmfXJyBGvtovNmpafTC3gKkI4vzNfy_cxEilE98M8CgZ2T2XXyGdXX072rUGH3EkU8fg7IK9sGwEPmXzCyDuMcJo6HmKG7VjkVblAoTQosiYBtoPx0X_FumNM9KZ2pw/s640/K-002.png" width="640" /></a></div>
<br />
<br />
좌측의 슬라이더 값에는 우리가 사전에 정의했던 값들이 들어 가있으며, 우측의 메인 화면에는 슬라이더 인풋의 조건에 해당하는 종목들이 출력되었습니다.<br />
<br />
이제 슬라이더를 변경해보도록 하겠습니다.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhHVqKy1tRB3yegKuOG2cWH4mDMiszah02LFjg9PiBi-p0L8gNsMdqdBn2tgD3yolmo2XbqK-v6M0SERhx9JXONQyEZ7N7r8M4Ernxv6lPoNXqq10EKACdzJgUoi7Wi_FybMUyGTTiJ_Q/s1600/K-003.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="804" data-original-width="1600" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhHVqKy1tRB3yegKuOG2cWH4mDMiszah02LFjg9PiBi-p0L8gNsMdqdBn2tgD3yolmo2XbqK-v6M0SERhx9JXONQyEZ7N7r8M4Ernxv6lPoNXqq10EKACdzJgUoi7Wi_FybMUyGTTiJ_Q/s640/K-003.png" width="640" /></a></div>
<br />
슬라이더 인풋을 조금씩 변경할때마다 조건에 해당하는 테이블이 출력됩니다. 저 PER, 저 PBR, 고배당, 고ROE, 소형주에 해당하는 종목을 찾아보면 다음과 같이 출력이 됩니다.<br />
<br />
이번에는 상단의 Excel 버튼을 눌러보도록 하겠습니다.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjh8F2GDFRu9ObdkyiScz0VVO0XF-3XNrhSLN1VZZ-dnggs0-399YljFYxjpEjfPx7VFfQx_-51nY4xmvTSWw2rByLvpMZptlO6mFZXA4Nh0GVtXUB_RUXwxIo0JgQJI_7_FC_tm_NpPQ/s1600/K-004.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="364" data-original-width="593" height="245" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjh8F2GDFRu9ObdkyiScz0VVO0XF-3XNrhSLN1VZZ-dnggs0-399YljFYxjpEjfPx7VFfQx_-51nY4xmvTSWw2rByLvpMZptlO6mFZXA4Nh0GVtXUB_RUXwxIo0JgQJI_7_FC_tm_NpPQ/s400/K-004.png" width="400" /></a></div>
<br />
테이블 결과가 그대로 엑셀에 저장되었습니다.<br />
<br />
<br />
그렇다면 이렇게 만들어진 샤이니 앱을 어떻게 배포할까요?<br />
먼저 Rstudio에서 제공하는 shinyapps.io에 계정을 만든 후 배포할 수 있습니다.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyVIynq8qeWsMJwLMFDKxKe6X5XBZ0oJfAMksPVtLQoydSfYKIzIkULmd2-bynvNpIt_TQZ0VSE87w1JWpAzNvNyEe8JmGDMWgoAWESQzsDd-92xtV0I60ioM0vjXFfXtHIx3AlI7k_A/s1600/K-005.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="784" data-original-width="1600" height="312" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyVIynq8qeWsMJwLMFDKxKe6X5XBZ0oJfAMksPVtLQoydSfYKIzIkULmd2-bynvNpIt_TQZ0VSE87w1JWpAzNvNyEe8JmGDMWgoAWESQzsDd-92xtV0I60ioM0vjXFfXtHIx3AlI7k_A/s640/K-005.png" width="640" /></a></div>
<br />
<br />
위 방법을 이용하면 웹주소가 생성되어 언제 어디서든 R을 이용하지 않고도 인터넷이나 모바일을 통해 접속이 가능합니다. 그러나 무료 계정의 경우 월에 제공하는 트래픽 수가 지나치게 작아 여러사람이 이용하기는 어려움이 있습니다. 이와 비슷한 방법으로 AWS와 같은 가상서버를 구매한 후 샤이니를 올리는 방법도 있습니다. (이는 나중에 기회가 되면 다루도록 하겠습니다.)<br />
<br />
github를 이용하는 법도 있습니다. 먼저 github 저장소를 만든 후, 위 코드를 <b>app.R</b>로 저장하여 업로드 합니다. 위 코드의 경우 아래의 깃허브 저장소에 올려져 있습니다.<br />
<br />
<a href="https://github.com/hyunyulhenry/stock_screener" target="_blank">https://github.com/hyunyulhenry/stock_screener</a><br />
<br />
그 후 R내에서 <span style="color: #24292e; font-family: , "consolas" , "liberation mono" , "menlo" , monospace; font-size: 13.6px;"><b style="background-color: #eeeeee;">shiny::runGitHub('저장소 이름', '계정명')</b> </span><span style="color: #24292e; font-family: , "consolas" , "liberation mono" , "menlo" , monospace;">을 입력하면 해당 샤이니가 실행됩니다. </span><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3oWuUSq2cU-3roXhKl4NImr1iJFbB_zsX_V0hWwJL3n2Mx7efvZF91UIn3GOz9UAynsugmzq4Tb6uzQ9iQdb1xFa6g2bhGLIZknF1IiXk7RYihDxbxdmMX7UgZ3gdk56YFsX-62UCHQ/s1600/K-006.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="652" data-original-width="1576" height="264" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3oWuUSq2cU-3roXhKl4NImr1iJFbB_zsX_V0hWwJL3n2Mx7efvZF91UIn3GOz9UAynsugmzq4Tb6uzQ9iQdb1xFa6g2bhGLIZknF1IiXk7RYihDxbxdmMX7UgZ3gdk56YFsX-62UCHQ/s640/K-006.png" width="640" /></a></div>
<br />Unknownnoreply@blogger.com1tag:blogger.com,1999:blog-23651150467485474.post-55264724576064060352019-07-21T16:36:00.002+09:002019-07-21T16:36:31.038+09:00한경컨센서스에서 상장이후 주가 크롤링 하기 (정규표현식 사용)<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg4Y5xM8juOfQk-PE2LyCcxySosXWbJ7qfKeXhc1R1DPZbqkt0qdWxVU_qE48QVtRQOhkCjQms79CHBz9ovkUwvLkTT-MFrImgfypB5MlMnnmvXA_6WMBsAoDbydqOzCH5UXwWJrBUg3w/s1600/stockmarketdataonscreen._176463-630x330.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="330" data-original-width="630" height="334" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg4Y5xM8juOfQk-PE2LyCcxySosXWbJ7qfKeXhc1R1DPZbqkt0qdWxVU_qE48QVtRQOhkCjQms79CHBz9ovkUwvLkTT-MFrImgfypB5MlMnnmvXA_6WMBsAoDbydqOzCH5UXwWJrBUg3w/s640/stockmarketdataonscreen._176463-630x330.jpg" width="640" /></a></div>
<br />
한경컨센서스(<a href="http://hkconsensus.hankyung.com/">http://hkconsensus.hankyung.com</a>)의 기업 레포트에 새로운 기능이 생겼습니다. 리포트 첨부파일 외에 기업정보와 차트를 볼 수 있는 항목이 추가되었습니다.<br />
<br />
기업정보를 클릭하시면 각종 재무 데이터가 보이며(해당 페이지도 크롤링 가능합니다.), 차트를 클릭하면 주가데이터가 차트로 표현됩니다.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEibJ-qnxkKRW19twDDEbP4WajsKCm-IjMGyQbuiqo9koihO5ed7dOQ5_qnqXKO9Fiy_gSjYJRuw-xL7eC52QD71MV_XFUTP6VcD1S8Ofj7gJ4HkgihpxrDhDhXhMTMfKi_vHEqz5hc-wA/s1600/K-001.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="665" data-original-width="984" height="432" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEibJ-qnxkKRW19twDDEbP4WajsKCm-IjMGyQbuiqo9koihO5ed7dOQ5_qnqXKO9Fiy_gSjYJRuw-xL7eC52QD71MV_XFUTP6VcD1S8Ofj7gJ4HkgihpxrDhDhXhMTMfKi_vHEqz5hc-wA/s640/K-001.png" width="640" /></a></div>
<br />
그래프를 보면 highchart로 구현되며, 하단의 셀렉션 부분을 보면 상장이후부터 모든 기간을 선택할 수 있습니다. 따라서 상장이후 모든 주가를 따올 수 있는 굉장히 좋은 먹잇감이 됩니다. 이제 이 데이터를 어디서 물고 오는지 개발자도구 화면을 통해 찾아보도록 하겠습니다.<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnSYTSpt_z3M4lR9_pJBrrOeLXu6t_Zaw9Pw1RGffDbEf-6sKSvyMxzNShvL3M44xJoPDtmUtHXr_t7xcEh0XaGO0NmQFGcNsLlbUFStVc7VvgJuOW6RvQl-SRcOC8Nc51Dglb6akocg/s1600/K-002.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="550" data-original-width="1600" height="220" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnSYTSpt_z3M4lR9_pJBrrOeLXu6t_Zaw9Pw1RGffDbEf-6sKSvyMxzNShvL3M44xJoPDtmUtHXr_t7xcEh0XaGO0NmQFGcNsLlbUFStVc7VvgJuOW6RvQl-SRcOC8Nc51Dglb6akocg/s640/K-002.png" width="640" /></a></div>
<br />
<br />
개발자도구 화면을 연 상태에서 차트 탭을 선택하면 나오는 항목들 중, 1) chart.chartList와 2) chart.report 항목이 있습니다. 각각을 클릭하여 링크를 들어가보면 알겠지만 1)번은 주가데이터를 불러오는, 2)번은 이벤트 데이터를 불러오는 url입니다.<br />
<br />
1)번 url에 접속해보도록 하겠습니다.<br />
<br />
<a href="http://hkconsensus.hankyung.com/apps.chart/chart.chartList?callback=jQuery112406638263512384042_1563692725032&report_type=CO&business_code=105560&_=1563692725033">http://hkconsensus.hankyung.com/apps.chart/chart.chartList?callback=jQuery112406638263512384042_1563692725032&report_type=CO&business_code=105560&_=1563692725033</a><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhKUkspBfVHNz9TI1U8PyonhsaeuJBG-dh0T2guaZOtJm-eUyHBxYApkIvRMXFZOVsDk-cFEYbuurvNZEuacvaqOuZXxw-HGxJWEGZqHJkN-l8wkoh5fOltAfBziEUSt9Vzvsn0AhyphenhyphenzUA/s1600/K-003.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="618" data-original-width="490" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhKUkspBfVHNz9TI1U8PyonhsaeuJBG-dh0T2guaZOtJm-eUyHBxYApkIvRMXFZOVsDk-cFEYbuurvNZEuacvaqOuZXxw-HGxJWEGZqHJkN-l8wkoh5fOltAfBziEUSt9Vzvsn0AhyphenhyphenzUA/s640/K-003.png" width="506" /></a></div>
<br />
[Date.UTC(연도, 월, 날짜), 주가] 형태로 굉장히 퍼가기 쉽게 구성되어 있습니다. 정규표현식을 조금만 활용하면 굉장히 쉽게 날짜와 주가부분만 추출할 수 있을거 같은 기분입니다.<br />
<br />
<pre class="brush: xml">library(httr)
library(rvest)
library(stringr)
library(lubridate)
library(dplyr)
library(timetk)
url = 'http://hkconsensus.hankyung.com/apps.chart/chart.chartList?callback=jQuery112406638263512384042_1563692725032&report_type=CO&business_code=105560&_=1563692725033'
data = GET(url)
</pre>
<br />
먼저 필요한 패키지들을 불러옵니다. 없는 패키지는 깔아주세요. 그 후, GET() 함수를 통해 해당 url 정보를 받아옵니다.<br />
<br />
<pre class="brush: xml">data_parse = read_html(data) %>%
html_text()
head(data_parse)
[1] "jQuery112406638263512384042_1563692725032([[Date.UTC(2008,9,11),47000],\n[Date.UTC(2008,9,14),50700],\n[Date.UTC(2008,9,15),53100],\n[Date.UTC(2008,9,16),51000],\n[Date.UTC(2008,9,17),43400],\n[Date.UTC(2008,9,18),38000],\n[Date.UTC(2008,9,21),39050],\n[Date.UTC(2008,9,22),39200],\n[Date.UTC(2008,9,23),38500],\n[Date.UTC(2008,9,24),36800],\n[Date.UTC(2008,9,25),36800],\n[Date.UTC(2008,9,28),40000],\n[Date.UTC(2008,9,29),37600],\n[Date.UTC(2008,9,30),32000],\n[Date.UTC(2008,9,31),35000],\n[Date.UTC(2008,9,32),32000],\n[Date.UTC(2008,10,4),33050],\n[Date.UTC(2008,10,5),35800],\n
</pre>
<br />
read_html() 함수로 html 정보를 받아온 후, html_text() 함수를 통해 텍스트 부분만을 읽어오면 웹페이지에 있는 내용을 그대로 읽어오게 됩니다. 이 중 우리가 필요한 것은 <b><i><span style="color: red;">(yyyy, m, dd), price</span></i></b> 에 해당하는 부분입니다. 정규표현식을 이용해 해당 부분만을 읽어오도록 하겠습니다.<br />
<br />
<pre class="brush: xml">data_parse = data_parse %>%
str_match_all('\\([0-9]+,[0-9]+,[0-9]+\\),[0-9]+') %>%
unlist()
head(data_parse)
[1] "(2008,9,11),47000" "(2008,9,14),50700" "(2008,9,15),53100" "(2008,9,16),51000"
[5] "(2008,9,17),43400" "(2008,9,18),38000"
</pre>
<br />
먼저 괄호에 해당하는 (와 ) 부분은 이스케이프(\\)를 이용하여 고유 텍스트로 지정해줍니다. 이를 통해 (숫자, 숫자, 숫자),숫자) 형식으로 이루어진 모든 데이터를 읽었으며 이는 (yyyy,mm,dd), price를 나타냅니다. 이 중 괄호는 필요가 없으므로 다시한번 정규표현식을 이용해 숫자 부분만을 추출하도록 하겠습니다.<br />
<br />
<br />
<pre class="brush: xml">data_parse = data_parse %>% str_match_all("[0-9]+")
head(data_parse)
[[1]]
[,1]
[1,] "2008"
[2,] "9"
[3,] "11"
[4,] "47000"
[[2]]
[,1]
[1,] "2008"
[2,] "9"
[3,] "14"
[4,] "50700"
[[3]]
[,1]
[1,] "2008"
[2,] "9"
[3,] "15"
[4,] "53100"
</pre>
<br />
숫자에 해당하는 부분만 추출한 결과, 각 리스트에는 연도, 월, 날짜, 주가가 들어가게 되었습니다. 이제 해당 정보를 테이블로 가공해주도록 합니다.<br />
<br />
<pre class="brush: xml">data_divide = do.call(cbind, data_parse) %>% t()
unique(data_divide[,2])
[1] "9" "10" "11" "0" "1" "2" "3" "4" "5" "6" "7" "8"
unique(data_divide[,3])
[1] "11" "14" "15" "16" "17" "18" "21" "22" "23" "24" "25" "28" "29" "30" "31" "32" "4" "5" "6"
[20] "7" "8" "12" "13" "19" "20" "26" "27" "2" "3" "9" "10"
</pre>
<br />
cbind()를 이용해 연도-월-날짜-주가 끼리 열로 묶어준 후, t()를 이용해 아래로 길게 변형해줍니다.<br />
<br />
그 후 월에 해당하는 데이터를 분석해보면 0부터 11까지만 숫자가 존재하며, 일에 해당하는 데이터를 분석해보면 2부터 32까지 숫자가 존재합니다. 각각 날짜를 실제 주가와 비교해보면 월에 해당하는 숫자는 하나씩 더해주어야 하며, 일에 해당하는 숫자는 하나씩 빼주어야 합니다. (자바스크립트가 그렇게 인식하나 보죠?)<br />
<br />
<pre class="brush: xml">data_divide[,2] = as.numeric(data_divide[,2]) + 1
data_divide[,3] = as.numeric(data_divide[,3]) - 1
data_ymd = str_c(data_divide[,1], data_divide[,2], data_divide[,3], sep = '-') %>% ymd()
data_price = data_divide[, 4] %>% as.numeric()
</pre>
<br />
월에 해당하는 2번째 열은 numeric으로 바꿔준 후 값을 하나씩 더해주며, 일에 해당하는 3번째 열은 numeric으로 바꿔준 후 값을 하나씩 빼줍니다. 그 후, str_c() 함수를 이용해 연-월-일을 합쳐주며, ymd()를 통해 Date 형태로 변형해줍니다. 주가에 해당하는 4번째 열도 numeric 형태로 변형해 줍니다.<br />
<br />
<pre class="brush: xml">data_final = data.frame(data_ymd, data_price) %>%
tk_xts(., date_var = data_ymd)
head(data_final)
data_price
2008-10-10 47000
2008-10-13 50700
2008-10-14 53100
2008-10-15 51000
2008-10-16 43400
2008-10-17 38000
</pre>
<br />
마지막으로 날짜에 해당하는 data_ymd와 주가에 해당하는 data_price를 묶어준 후, tk_xts() 함수를 통해 xts 형태로 변형해줍니다. 최종 결과를 확인해보면 깔끔하게 인덱스는 날짜, 데이터는 주가로 정리되어 있습니다.<br />
<br />
다음으로 이를 함수로 만들어 보도록 하겠습니다.<br />
<br />
<pre class="brush: xml">get_price = function(ticker) {
url = paste0('http://hkconsensus.hankyung.com/apps.chart/chart.chartList?callback=jQuery112409375031790630459_1563253655447&report_type=CO&business_code=',ticker,'&_=1563253655448')
data = GET(url)
data_parse = read_html(data) %>%
html_text() %>%
str_match_all('\\([0-9]+,[0-9]+,[0-9]+\\),[0-9]+') %>%
unlist()
data_parse = data_parse %>% str_match_all("[0-9]+")
head(data_parse)
data_divide = do.call(cbind, data_parse) %>% t()
data_divide[,2] = as.numeric(data_divide[,2]) + 1
data_divide[,3] = as.numeric(data_divide[,3]) - 1
data_ymd = str_c(data_divide[,1], data_divide[,2], data_divide[,3], sep = '-') %>% ymd()
data_price = data_divide[, 4] %>% as.numeric()
data_final = data.frame(data_ymd, data_price) %>%
tk_xts(., date_var = data_ymd)
}
</pre>
<br />
인자로 티커를 입력하면 이에 해당하는 상장 이후 주가를 모두 가져오게 했습니다.<br />
<br />
<pre class="brush: xml">price = get_price('005930')
plot(price)
</pre>
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgwyHrnEn8Eg9Qabvrd-uta1YlPoTLW5nPPwoJlUtzdHRURWbGfDnIAHQpvfXlEG-NHVs-6YU8hy-osMRpRLlD8hziibhiIkAWOWjq8tY7K8bdkCNn-9kg0qiCHpHS-c1YFq_wvEFWbBA/s1600/Rplot.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="378" data-original-width="647" height="372" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgwyHrnEn8Eg9Qabvrd-uta1YlPoTLW5nPPwoJlUtzdHRURWbGfDnIAHQpvfXlEG-NHVs-6YU8hy-osMRpRLlD8hziibhiIkAWOWjq8tY7K8bdkCNn-9kg0qiCHpHS-c1YFq_wvEFWbBA/s640/Rplot.png" width="640" /></a></div>
<br />
삼성전자의 상장이후 주가를 매우 빠르게 불러옵니다. 중간에 주가가 훅 떨어지는걸 봐서는 수정주가를 반영하지는 않는 듯 합니다.<br />
<br />
<br />
애널리스트 레포트에서 다룰 리가 없는 초소형주 주가도 한번 받아보도록 하겠습니다. (에스마크: 030270)<br />
<br />
<pre class="brush: xml">price = get_price('030270')
plot(price)
</pre>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiWraVD127UNwFQDZ_kPbBX8PeK9_C5ObXEX0AF7ozf85uNgURvqvt0zLzWtgUyhDGGeTnlLRGn7RtH4POdCiLiW81Fi0uDHRcf93RGb6cNxA5_NgJZ5s4vv1Iiu8_ubFtUX5Lp5TgJsQ/s1600/Rplot01.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="378" data-original-width="647" height="372" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiWraVD127UNwFQDZ_kPbBX8PeK9_C5ObXEX0AF7ozf85uNgURvqvt0zLzWtgUyhDGGeTnlLRGn7RtH4POdCiLiW81Fi0uDHRcf93RGb6cNxA5_NgJZ5s4vv1Iiu8_ubFtUX5Lp5TgJsQ/s640/Rplot01.png" width="640" /></a></div>
<br />
<br />
잘 받아 집니다....Unknownnoreply@blogger.com4tag:blogger.com,1999:blog-23651150467485474.post-7551181495124019582019-07-14T17:45:00.000+09:002019-07-14T17:50:25.011+09:00Efficient Frontier (Mean Variance Optimization) using ggplot2 in R<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
<pre class="brush: xml">library(quantmod)
library(PerformanceAnalytics)
library(magrittr)
library(ggplot2)
symbols = c('005930.KS', '068270.KS', '005380.KS', '055550.KS', '017670.KS')
names = c('삼성전자', '셀트리온', '현대차', '신한지주', 'SK텔레콤')
getSymbols(symbols, src='yahoo')
prices = do.call(cbind, lapply(symbols, function(x) Cl(get(x)))) %>% setNames(symbols)
rets = Return.calculate(prices) %>% na.omit()
names(rets) = names
covs = cov(rets) * 252
</pre>
<br />
먼저 필요한 패키지들을 불러온 후, 삼성전자, 셀트리온, 현대차, 신한지주, SK텔레콤에 해당하는 종목 가격을 불러옵니다. 그 후 수익률과 공분산을 계산하도록 합니다. 공분산은 연율화를 해주기 위해 252를 곱해줍니다.<br />
<br />
<pre class="brush: xml">library(quantmod)
charts.PerformanceSummary(rets, main = 'rets')
</pre>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjoD2qK4KX7g5Rn9NPkWm459T-2FSg_RHSBGeQnMptUhnRSuZS6QnGFjw_60m7uVQMCcwicJRLM3pQvO4UTosPKppJZbXtBIBWwrCDr0fxBWotLyhW249iLe3otiIo21jYnXSZIIOULdQ/s1600/Rplot.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="378" data-original-width="647" height="231" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjoD2qK4KX7g5Rn9NPkWm459T-2FSg_RHSBGeQnMptUhnRSuZS6QnGFjw_60m7uVQMCcwicJRLM3pQvO4UTosPKppJZbXtBIBWwrCDr0fxBWotLyhW249iLe3otiIo21jYnXSZIIOULdQ/s400/Rplot.png" width="400" /></a></div>
<br />
수익률 그래프를 그려보면 셀트리온의 누적수익률이 압도적으로 높습니다.<br />
<br />
<pre class="brush: xml">yearly_mean = Return.annualized(rets, geometric = FALSE) %>% c()
yearly_vol = StdDev.annualized(rets) %>% c()
# diag(covs) ^ (1/2)
yearly_stat = cbind(yearly_mean, yearly_vol) %>%
data.frame()
</pre>
<br />
연율화 수익률과 연율화 변동성을 계산하도록 합니다. 연율화 변동성의 경우 위에서 구한 연율화 분산-공분산의 대각 부분의 제곱근을 구해도 같습니다. 이를 cbind()를 이용해 열로 묶습니다.<br />
<br />
<br />
<pre class="brush: xml">yearly_stat %>%
ggplot(aes(x = yearly_vol, y = yearly_mean, label = names, color = names)) +
geom_point(shape = 18) +
scale_x_continuous(expand = c(0.02, 0.02)) +
scale_y_continuous(expand = c(0.02, 0.02)) +
geom_text(size = 3, vjust = -0.7) +
theme(legend.position = 'none') +
xlab('Volatility') +
ylab('Return')
</pre>
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEigzGXVLoxWQDseOqbxY_iZ3qdRvtE0JdUFh1BYvIRwIPIy0Kt5dQQ7KnoTxAUUlw1qQovlYVw4LYcEVq5RgbjAmS4LESTKk9pTfpmo7JlsEUytlFXUiwvK3xn6T-7wheXiokddhd8icg/s1600/Rplot01.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="378" data-original-width="647" height="232" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEigzGXVLoxWQDseOqbxY_iZ3qdRvtE0JdUFh1BYvIRwIPIy0Kt5dQQ7KnoTxAUUlw1qQovlYVw4LYcEVq5RgbjAmS4LESTKk9pTfpmo7JlsEUytlFXUiwvK3xn6T-7wheXiokddhd8icg/s400/Rplot01.png" width="400" /></a></div>
<br />
ggplot을 이용해 x축에는 연율화 변동성, y축에는 연율화 수익률을 나타내 줍니다. 셀트리온의 수익률과 변동성이 압도적으로 높습니다.<br />
<br />
<br />
<pre class="brush: xml"># Simulation
numAssets = length(symbols)
numPortfolio = 10000
sim = list()
for (i in 1 : numPortfolio) {
wt = runif(numAssets, min=0, max=1)
wt = wt / sum(wt)
expected_return = wt %*% yearly_mean
expected_vol = (t(wt) %*% covs %*% wt) %>% sqrt()
expected_sharpe = (expected_return-0.05) / expected_vol
sim[[i]] = c(wt, expected_return, expected_vol, expected_sharpe)
}
sim = do.call(rbind, sim) %>% data.frame()
colnames(sim) = c(names, 'Return', 'Volatility', 'Sharpe')
</pre>
<br />
<br />
본격적으로 시뮬레이션을 실행합니다. 시뮬레이션 횟수를 총 10,000번이며 많을 수록 좋습니다. 먼저 runif() 함수를 이용해 난수를 생성하며, 공매도 방지를 위해 0에서 1 사이의 값에서 난수를 생성하도록 합니다. 그 후 합이 1이 되도록 정규화를 해줍니다. (개별 종목별 비중제한을 두고 싶으면 while 구문을 이용해 정규화를 계속해주면 됩니다.)<br />
<br />
기대수익률은 비중과 수익률의 단순 가중평균합이 됩니다.<br />
포트폴리오의 분산은 w'Ωw로 나타낼 수 있으며, 해당값에 sqrt()를 치해주면 포트폴리오의 표준편차가 됩니다.<br />
마지막으로 샤프지수는 포트폴리오 수익률에서 무위험 수익률을 차감한 값을, 포트폴리오 변동성으로 나눠줍니다. 무위험 수익률은 5%로 가정합니다.<br />
<br />
해당 값들을 c()를 이용해 벡터로 묶어준 후 sim 리스트에 저장합니다.<br />
시뮬레이션이 끝나면 do.call() 함수를 이용해 행으로 묶습니다.<br />
<br />
<pre class="brush: xml">target_minvol = sim[which.min(sim$Volatility), ]
target_maxsharpe = sim[which.max(sim$Sharpe), ]
> target_minvol
삼성전자 셀트리온 현대차 신한지주 SK텔레콤 Return Volatility Sharpe
4657 0.2447684 0.09979261 0.0992029 0.1240248 0.4322112 0.1306394 0.1896045 0.4253035
> target_maxsharpe
삼성전자 셀트리온 현대차 신한지주 SK텔레콤 Return Volatility Sharpe
3457 0.3303538 0.5068116 0.1004232 0.009327201 0.05308417 0.3044934 0.3103827 0.8199342
</pre>
<br />
효율적 경계선에서 중요한 지점은 크게 최소분산 지점과 최대샤프 지점입니다. 최소분산 지점은 which.min() 함수를 통해 표준편차가 가장 작은 지점, 최대샤프 지점은 which.max() 함수를 통해 샤프지수가 최대인 지점을 찾으면 됩니다.<br />
<br />
<pre class="brush: xml"># plot simulation
p = sim %>%
ggplot(aes(x = `Volatility`, y = `Return`, color = `Sharpe`)) +
geom_point() +
scale_color_gradient(low = 'blue', high = 'red') +
theme_classic()
p
</pre>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhG5lYhs0SbLGGJcW6t9GW1zu1tSfZj1nCCWHbMTX9qK7ofmUYgYue3csqPrZ8faX8Rb_l0APXEyb4nHQnvR27bnWCSuYf3eXH1BBl_sLo0JKah6-ohMYXuKAtoW6IqEFr7IIM7kIbcxA/s1600/Rplot02.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="378" data-original-width="647" height="232" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhG5lYhs0SbLGGJcW6t9GW1zu1tSfZj1nCCWHbMTX9qK7ofmUYgYue3csqPrZ8faX8Rb_l0APXEyb4nHQnvR27bnWCSuYf3eXH1BBl_sLo0JKah6-ohMYXuKAtoW6IqEFr7IIM7kIbcxA/s400/Rplot02.png" width="400" /></a></div>
<br />
<br />
ggplot을 이용해 시뮬레이션 결과를 그려주도록 합니다. aes() 내부에 color 인자를 Sharpe로 지정하여 샤프지수에 따라 색이 다르며, 샤프지수가 높을수록 붉게 표시됩니다.<br />
<br />
<br />
<pre class="brush: xml"># plot min vol and max sharpe
p2 = p +
geom_point(data = target_minvol,
aes(x = Volatility, y = Return),
col = 'black', shape = 18, size = 3) +
geom_point(data = target_maxsharpe,
aes(x = Volatility, y = Return),
col = 'black', shape = 18, size = 3) +
annotate('text',
x = target_minvol$Volatility + 0.03,
y = target_minvol$Return,
label='Min Vol',
fontface=2) +
annotate('text',
x = target_maxsharpe$Volatility + 0.03,
y = target_maxsharpe$Return,
label='Max Sharpe',
fontface=2) +
geom_point(data = yearly_stat,
aes(x = yearly_vol, y = yearly_mean),
color = 'black', shape = 4, size = 3)
p2
</pre>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgEkoDdZw8VpHvq2Dl3_8FPkrG207VRi9Pc294py87WqvrBUYAsH13hni8t0jV7f4PsSBWavtGx69R5qpXRut-Z86aMMtlCt1TRrJoNcnWDoFe5Bwh08LLyToWwhpvoIgHggU-1ZMVqHg/s1600/Rplot03.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="378" data-original-width="647" height="232" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgEkoDdZw8VpHvq2Dl3_8FPkrG207VRi9Pc294py87WqvrBUYAsH13hni8t0jV7f4PsSBWavtGx69R5qpXRut-Z86aMMtlCt1TRrJoNcnWDoFe5Bwh08LLyToWwhpvoIgHggU-1ZMVqHg/s400/Rplot03.png" width="400" /></a></div>
<br />
<br />
앞선 그림에 추가적으로 최소분산 및 최대 샤프지수 지점을 표시해 주었습니다. 또한 검은색 X는 개별 주식의 변동성과 수익률에 해당하는 부분으로써, 포트폴리오 구성을 통해 훨씬 효율적인 투자가 가능해짐이 보입니다.<br />
<br />
<pre class="brush: xml"># plot CML
p2 +
geom_abline(intercept = 0.05,
slope = target_maxsharpe$Sharpe,
size = 1) +
expand_limits(x=0) +
expand_limits(y=0)
</pre>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgjt6TtPKUgI71sttfFjF4nG2dFrnHF1Ud3O4DvTa3blnme3XpYo0xylkR3jcgHt7K52bmouxv9eTBIdDT2efHRxqYNZ_OiRIvGfzO-sKD1AukG-cwzzuu_VHdzwh_V9JEIYibxD2MTqg/s1600/Rplot04.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="378" data-original-width="647" height="232" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgjt6TtPKUgI71sttfFjF4nG2dFrnHF1Ud3O4DvTa3blnme3XpYo0xylkR3jcgHt7K52bmouxv9eTBIdDT2efHRxqYNZ_OiRIvGfzO-sKD1AukG-cwzzuu_VHdzwh_V9JEIYibxD2MTqg/s400/Rplot04.png" width="400" /></a></div>
<br />
<br />
마지막으로 무위험 수익률과 최대샤프지수 지점를 이은 CML을 그려줍니다. 인터셉트는 무위험 수익률, 기울기는 샤프지수가 됩니다. Max Sharpe 지점에 투자하는 것이 가장 이상적인 포트폴리오이며, 투자자의 risk averse에 따라 직선의 왼쪽이나 오른쪽으로 이동하며 위험자산과 무위험자산의 투자 비중을 조절하게 됩니다.<br />
<br />Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-23651150467485474.post-13306003445543947712019-05-24T10:14:00.000+09:002019-05-24T11:04:36.543+09:00R Shiny를 이용한 포트폴리오 대시보드 만들기 (실시간 수익률 및 비중)<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiH9phzhrsiEoMtNu7i3pKYxjBYBV93RCf3YlJcfhf2gPCHHEXRro4EPrYae5zXmsDjHnV6d2YXKFwxbc9beDP4bE5VBEohU27UNLrnnEzeBS4TFF2PV46nAItMPbRiSRHwH4TQEhzp3Q/s1600/website-monitoring-stock-exchange-prices-statistics-data-dashboard-interface-electronic-chart-with-stock-market-fluctuations-summary-annual-reports-analysis_bb4yval___F0014.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="900" data-original-width="1600" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiH9phzhrsiEoMtNu7i3pKYxjBYBV93RCf3YlJcfhf2gPCHHEXRro4EPrYae5zXmsDjHnV6d2YXKFwxbc9beDP4bE5VBEohU27UNLrnnEzeBS4TFF2PV46nAItMPbRiSRHwH4TQEhzp3Q/s320/website-monitoring-stock-exchange-prices-statistics-data-dashboard-interface-electronic-chart-with-stock-market-fluctuations-summary-annual-reports-analysis_bb4yval___F0014.png" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
R에서 제공하는 '샤이니'를 이용할 경우, 간단한 코딩을 이용하여 나만의 웹페이지를 만들 수 있으며, 이를 응용하면 실시간 포트폴리오 대시보드를 만들수도 있습니다.</div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<b><br /></b></div>
<div class="separator" style="clear: both; text-align: center;">
<b><a href="https://shiny.rstudio.com/gallery/" target="_blank">[샤이니 샘플 갤러리]</a></b></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
그 예제로써 '동적자산배분' 포트폴리오의 실시간 및 역사적 수익률과 비중을 샤이니로 만들어 배포하겠습니다. <b>Github 주소</b>는 다음과 같으며, 샤이니를 이용하여 웹페이지를 만드는 법은 모르셔도 됩니다. (저 또한 열심히 구글링 해가면 만들었기 때문에 어렵지 않게 만드실 수 있을 겁니다.)</div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<b><a href="https://github.com/hyunyulhenry/GDAA" target="_blank">https://github.com/hyunyulhenry/GDAA</a></b></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
해당 웹페이지를 로딩하는 방법은, 먼저 R에서 shiny 패키지를 설치한 후, 다음 명령어를 통해 간단히 실행이 가능합니다.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<pre class="brush: xml">shiny::runGitHub('GDAA', 'hyunyulhenry')
</pre>
<br />
<br />
깃허브에서 GDAA repository의 app.R 파일을 자동으로 읽어봐 웹페이지를 보여줍니다.<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiD7tu7P0DlGy_8OjHfzo1aWlZppvXr1ctfLQrUNzMv3iiTMFZ-cti7FfpFYPbjBRXQaTM-QLPVapBUWVjma6Bvx80c4GwxNK4_v2MFugd_pd7-tB7X9Y955lUY8ymPLE03zijcgFFW0g/s1600/1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="837" data-original-width="1600" height="208" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiD7tu7P0DlGy_8OjHfzo1aWlZppvXr1ctfLQrUNzMv3iiTMFZ-cti7FfpFYPbjBRXQaTM-QLPVapBUWVjma6Bvx80c4GwxNK4_v2MFugd_pd7-tB7X9Y955lUY8ymPLE03zijcgFFW0g/s400/1.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
기본적으로 viewer 창에서 페이지가 로딩되며, 붉은색 탭을 클릭하여 인터넷 창에서 실행이 가능합니다.</div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhF_0yJeDTWxvx6kk9scgNJ5jjwx_mxRcL2MNY_w1NpI9Z7DQN5Z4YjFGtz9Okvkup27MYa5WD_cxiFlFHDrESVUhE5VNuEIuICoX4hZL8yqMoDnVshFyCi0FsBBr_donAmrqYc4ixKEw/s1600/2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="849" data-original-width="1600" height="210" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhF_0yJeDTWxvx6kk9scgNJ5jjwx_mxRcL2MNY_w1NpI9Z7DQN5Z4YjFGtz9Okvkup27MYa5WD_cxiFlFHDrESVUhE5VNuEIuICoX4hZL8yqMoDnVshFyCi0FsBBr_donAmrqYc4ixKEw/s400/2.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
크롬 창에서 페이지가 열린 모습입니다. 우측 하단을 보시면 진행률이 보이며, 이는 야후 API에서 ETF 가격을 가져오는 진행률 입니다. 해당 작업이 마무리 된 후, 자동으로 백테스트가 실시된 후 이에 해당하는 각종 그래프들이 출력됩니다.</div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
첫번째 페이지는 <b><i><span style="color: red;">Cumulative Return, Weight, Raw Data</span></i></b> 페이지로 이루어져 있으며, 이 중 가장 중요한 페이지는 첫번째인 Cumulative Return 페이지 입니다.</div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjKOOV9tJPAWMTGxHm0GQOvSOpbqB8FXIt3d4vTIutpvVuBB0WjWfV9Q1jqgcyZDJgNgMX1oi6ghmhxu8w7nJzpupep_sChjz-X7xHLo6hIbrGtH7DIY5Oiqq7kT7HIrzK7MMDTt4z3Sg/s1600/3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="751" data-original-width="1600" height="299" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjKOOV9tJPAWMTGxHm0GQOvSOpbqB8FXIt3d4vTIutpvVuBB0WjWfV9Q1jqgcyZDJgNgMX1oi6ghmhxu8w7nJzpupep_sChjz-X7xHLo6hIbrGtH7DIY5Oiqq7kT7HIrzK7MMDTt4z3Sg/s640/3.png" width="640" /></a></div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<br />
메인 페이지는 총 4개 항목으로 구성되어 있습니다. 첫번째 그래프는 포트폴리오의 누적 수익률, 두번째 그래프는 연도별 수익률, 세번째 테이블은 일간 수익률, 네번째 테이블은 연도별 수익률 입니다.<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEietHfziXmnRwKmH5L8Xkd2BruM3OhIwpS9X318x6K9JRLB7SJ8LEO4ntepalF3AxjAj_gI1ZiR_WRZs3lE9Gx16vRtldcKtm0ZjLSDW62dyCW_SSQV6UGB0IRxUOYq9s_5ft2_5iiv-w/s1600/4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="751" data-original-width="1600" height="299" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEietHfziXmnRwKmH5L8Xkd2BruM3OhIwpS9X318x6K9JRLB7SJ8LEO4ntepalF3AxjAj_gI1ZiR_WRZs3lE9Gx16vRtldcKtm0ZjLSDW62dyCW_SSQV6UGB0IRxUOYq9s_5ft2_5iiv-w/s640/4.png" width="640" /></a></div>
<br />
해당 페이지 상단에는 시작시점과 종료시점을 선택할 수 있는 항목이 있습니다. 원하는 시점을 클릭하여 선택하거나, 혹은 직접 숫자로 입력할 경우 해당 시점에 해당하는 포트폴리오 수익률만을 보여주게 됩니다. 이를 통해 MTD, YTD 수익률을 손쉽게 확인할 수 있습니다. (하단의 일간수익률 테이블 역시 해당 시점 데이터로 바뀌게 됩니다.)<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXtJlNrLLgbeD2vUTrqfX2Fe7vPDz83nS_Ye7rVmq7gO5UCc5_PbBmigenVGKQBTkpchFTnmMhOwTLYvP9Xo1JN34rKC1UH36PAiIwurdbZkNpVhb5qnXmV7K2IFL1m7VxopNY5mTHJQ/s1600/5.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="738" data-original-width="1600" height="294" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXtJlNrLLgbeD2vUTrqfX2Fe7vPDz83nS_Ye7rVmq7gO5UCc5_PbBmigenVGKQBTkpchFTnmMhOwTLYvP9Xo1JN34rKC1UH36PAiIwurdbZkNpVhb5qnXmV7K2IFL1m7VxopNY5mTHJQ/s640/5.png" width="640" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
Weight 페이지는 총 3가지 데이터로 구성되어 있습니다. 첫번째 그래프는 현재 시점에서 추천 포트폴리오, 두번째 그래프와 세번째 테이블은 역사적 비중입니다.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjXmacZjNUGvvKUJLRUewnMyFwv5Natm8Ss4WfRbVCudxWE-e5J1Id0R09deVlZ-ghRf_qt5XpCrmPdsUJRKVYHr-mRZp17pLQ-o7mIfumQcKQh80PB1VBFMUJd1Gj6QmlOcj42S07vCw/s1600/6.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="719" data-original-width="1600" height="286" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjXmacZjNUGvvKUJLRUewnMyFwv5Natm8Ss4WfRbVCudxWE-e5J1Id0R09deVlZ-ghRf_qt5XpCrmPdsUJRKVYHr-mRZp17pLQ-o7mIfumQcKQh80PB1VBFMUJd1Gj6QmlOcj42S07vCw/s640/6.png" width="640" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
<br />
해당 페이지 역시 시작과 종료시점을 선택할 수 있는 탭이 존재하며, 이를 통해 원하는 시점만의 그래프 및 테이블을 뽑아낼 수 있습니다.<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhZ89iqdafyGWzY8iHWRM_0_lCYEhfJS7jDmi8uViNSr07ZmwUoHquWCJELgZJn_4wxyOaWEZfy54uMExc8uIvDVYwKKCN-mF3D6L1npOc-H6AaQpXnSRDQfhJLwcH3AWWJO28TVjv4Mg/s1600/7.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="676" data-original-width="1600" height="270" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhZ89iqdafyGWzY8iHWRM_0_lCYEhfJS7jDmi8uViNSr07ZmwUoHquWCJELgZJn_4wxyOaWEZfy54uMExc8uIvDVYwKKCN-mF3D6L1npOc-H6AaQpXnSRDQfhJLwcH3AWWJO28TVjv4Mg/s640/7.png" width="640" /></a></div>
<br />
<br />
Raw Data 탭에는 백테스트에 사용된 ETF의 일간 수정주가가 나타나며, 하단의 Download Data를 클릭할 경우, 해당 데이터를 csv 파일로 다운로드 받을 수 있습니다.<br />
<br />
<br />
Description과 About Henry 페이지는 단순 텍스트이므로, 설명은 넘어가도록 하겠습니다.<br />
<br />
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
또한 해당 코드를 <a href="https://www.shinyapps.io/" target="_blank">https://www.shinyapps.io/</a> 에 업로드 할 경우, 굳이 R 프로그램을 켜지 않고도, 심지어 휴대폰을 통해서도 코드를 실행할 수 있습니다. 해당 페이지에 계정을 만든 후 R Studio 내에서 손쉽게 업로드가 가능합니다. (Github 코드를 ui.R과 server.R 코드로 쪼갠 후 업로드 하셔야 합니다.)</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<b><i>shiny에서 부여받은 url을 통해 공유하고 싶지만, 무료 계정의 경우 부여받은 트래픽 한도가 너무 작아, 아마 블로그에 글 쓰는 순간 하루도 안되서 한도가 다 찰듯 하여.... 돈 많이 벌어서 유료계정 산 후 공유할게요....</i></b></div>
<div style="text-align: justify;">
<b><i><br /></i></b></div>
<div style="text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifJcY1gH29ijRFmQ4HULtvX3N80D5wFTnlGuJaDqihq4pkmCnFGegYJB2tUdGo1hrWKh8AogzVXAKljZXMFcdb92dm-QZzhyVNSQ6CgLwKOP6dQe7mW_vPZU8PFOxGR7mTGeGbvC-6xQ/s1600/8.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="900" data-original-width="1600" height="360" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifJcY1gH29ijRFmQ4HULtvX3N80D5wFTnlGuJaDqihq4pkmCnFGegYJB2tUdGo1hrWKh8AogzVXAKljZXMFcdb92dm-QZzhyVNSQ6CgLwKOP6dQe7mW_vPZU8PFOxGR7mTGeGbvC-6xQ/s640/8.png" width="640" /></a></div>
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg0k36ajST3gimlZxrDiVtaDosuQi8MR7w7pkla3NvXlbSFnVP78rJ_mPEaZjSBBgI5avYKC3Tfz_-0yg0Fkb2SIdW2T0oUJW_fT4rw61eZQ1qwvWBcY7bvvC9mZ25vTJy__zuIlRFoag/s1600/9.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="797" data-original-width="1600" height="318" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg0k36ajST3gimlZxrDiVtaDosuQi8MR7w7pkla3NvXlbSFnVP78rJ_mPEaZjSBBgI5avYKC3Tfz_-0yg0Fkb2SIdW2T0oUJW_fT4rw61eZQ1qwvWBcY7bvvC9mZ25vTJy__zuIlRFoag/s640/9.png" width="640" /></a></div>
<br />
<br />
업로드가 완성되면, R을 켜지않고 생성된 url에 접속하는 것만으로도 해당 웹페이지를 동일하게 로딩할 수 있습니다. 페이지 내의 백테스팅 코드 역시 샤이니 서버 내에서 돌아가므로, R이 설치되지 않은 컴퓨터에서도 해당 페이지가 출력됩니다.<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhGR5cWNAWrLJV1BM9qGS6mh3yml-H5IIKHu28jTEN_upRtiiRVLOiLKxyJyrNcTDmTUaGwYINwCngiHT5jh-kA6zk6i8v6-w1hNcHR7KOyainw55spTbfHapXXhmVB4eXO0CSRPXRu-w/s1600/Screenshot_20190524-100739.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1200" data-original-width="1600" height="480" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhGR5cWNAWrLJV1BM9qGS6mh3yml-H5IIKHu28jTEN_upRtiiRVLOiLKxyJyrNcTDmTUaGwYINwCngiHT5jh-kA6zk6i8v6-w1hNcHR7KOyainw55spTbfHapXXhmVB4eXO0CSRPXRu-w/s640/Screenshot_20190524-100739.png" width="640" /></a></div>
<br />
<br />
<br />
코드가 나의 디바이스가 아닌 서버에서 돌아가므로, 심지어 휴대폰이나 태블릿PC 에서도 동일한 웹페이지가 구현됩니다. 위는 태블릿PC로 shiny url에 접속한 화면이며, PC로 실행한 것과 동일한 결과를 보여줍니다.<br />
<br />
본인의 포트폴리오 내역 혹은 각종 정보를 대쉬보드 형태로 만든 후 shiny에 업로드하면, 언제 어디서나 간편하게 이를 확인할 수 있습니다.Unknownnoreply@blogger.com3tag:blogger.com,1999:blog-23651150467485474.post-71783759972758404302019-05-02T10:55:00.000+09:002019-05-02T11:04:43.609+09:00퀀트투자(팩터투자)에 도움이 되는 펀드매니저들이 쓴 책 12선<div style="text-align: center;">
</div>
<div style="text-align: center;">
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://www.blogger.com/blogger.g?blogID=23651150467485474" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgw3OOs8vWC_UEWjqJ_E0FJG_dv3E972S2P-yCy8A0RIhyphenhyphenkisS67wc_mPI3G6HaizFC3FJJE0CLtklaUbkrSGfQAunsmGFfXRNKUBzF9R_oX35SvZ0ser-jA8xd7uvi_EZfWyFUFciYIQ/s1600/Books_HD_8314929977-1200x799.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="799" data-original-width="1200" height="266" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgw3OOs8vWC_UEWjqJ_E0FJG_dv3E972S2P-yCy8A0RIhyphenhyphenkisS67wc_mPI3G6HaizFC3FJJE0CLtklaUbkrSGfQAunsmGFfXRNKUBzF9R_oX35SvZ0ser-jA8xd7uvi_EZfWyFUFciYIQ/s400/Books_HD_8314929977-1200x799.jpg" width="400" /></a></div>
<a href="https://www.blogger.com/blogger.g?blogID=23651150467485474" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"></a><br />
<br /></div>
<div style="text-align: center;">
<b><a href="https://www.twocenturies.com/blog/2019/4/29/12-factor-investing-books-by-asset-managers" target="_blank">원글: 12 Books on Factor Investing by Asset Managers</a></b></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<b><a href="https://www.amazon.com/Quantitative-Equity-Portfolio-Management-Applications-ebook/dp/B005H7L85C" target="_blank">1. Quantitative Portfolio Management by Edward Qian, Ronald Hua, Eric Sorensen </a></b></div>
<div>
<br /></div>
<div style="text-align: center;">
<img height="200" src="https://images-na.ssl-images-amazon.com/images/I/51ZUm73%2BawL._SX331_BO1,204,203,200_.jpg" width="133" /></div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: justify;">
PanAgora Asset Management의 유명한 에드워드 퀴안이 쓴 책입니다. 저 또한 예전부터 워낙 극찬을 많이 받은 책이라 사놓기는 했는데 바빠서 아직 읽지는 못했습니다. 개인적으로는 Qian이 쓴 다른책 Risk Parity Fundamentals을 매우 재밌게 읽었습니다.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
비슷한 제목인 <b><a href="https://www.amazon.com/Quantitative-Equity-Portfolio-Management-Construction-ebook/dp/B000N2HBYI/ref=pd_sim_351_1/143-7417714-3699652?_encoding=UTF8&pd_rd_i=B000N2HBYI&pd_rd_r=bf5941c0-6c72-11e9-9381-ffdfe42e5ee6&pd_rd_w=SUbJf&pd_rd_wg=fKqX3&pf_rd_p=90485860-83e9-4fd9-b838-b28a9b7fda30&pf_rd_r=BCYCHJH9PH1P6S8MVGYF&psc=1&refRID=BCYCHJH9PH1P6S8MVGYF" target="_blank">Quantitative Equity Portfolio Management: An Active Approach to Portfolio Construction and Management</a></b> 이라는 책도 있습니다. 공저자가 무려 김대환 교수님이며, 너무 재밌게 봤던 책입니다.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
(두 책 모두 국내 번역본은 없습니다.)</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<b><a href="https://www.amazon.com/Expected-Returns-Investors-Harvesting-Rewards-ebook/dp/B004YK0JLW/ref=sr_1_1?keywords=expected+returns&qid=1556146447&s=digital-text&sr=1-1" target="_blank">2. Expected Returns by Antti Ilmanen </a></b></div>
<div style="text-align: justify;">
<b><br /></b></div>
<div style="text-align: center;">
<img alt="Expected Returns: An Investor's Guide to Harvesting Market Rewards by [Ilmanen, Antti]" height="200" src="https://images-na.ssl-images-amazon.com/images/I/51Q0LkKhAFL.jpg" width="132" /></div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
무려 AQR의 Antti Ilmanen가 쓰신 책입니다. (그래서 서평도 Asness가..) 이 책도 워낙 추천을 많이 받아서 아마존 카트에 몇년째 넣어둔 듯 합니다... 이 참에 사야겠습니다.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
(국내 번역본은 없습니다.)</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<b><a href="https://www.amazon.com/Quantitative-Value-Practitioners-Intelligent-Eliminating-ebook/dp/B00B1FK0AS/ref=pd_sim_b2b_2/137-7666751-7332435?_encoding=UTF8&pd_rd_i=B00B1FK0AS&pd_rd_r=fabc3b04-66e3-11e9-94bd-393e388bbf8d&pd_rd_w=cjpIb&pd_rd_wg=BlONO&pf_rd_p=a07701e4-f565-442a-b97f-93ab23cbb7ef&pf_rd_r=416J9X0KQ8W5M2HKZAPB&psc=1&refRID=416J9X0KQ8W5M2HKZAPB" target="_blank">3. Quantitative Value by Wesley Gray and Tobias Carlisle</a></b></div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: center;">
<img alt="Quantitative Value: A Practitioner's Guide to Automating Intelligent Investment and Eliminating Behavioral Errors (Wiley Finance) by [Gray, Wesley R., Carlisle, Tobias E.]" height="200" src="https://images-na.ssl-images-amazon.com/images/I/41A0Bj0%2BnOL.jpg" width="133" /></div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: justify;">
알파 아키텍트의 웨슬리 그레이가 쓴 계량적 (우량)가치 포트폴리오 구성방법에 대해 쓴 책입니다. 가치투자에 대한 철학이나 좋은 문구가 많기는 하지만, 기술적인 내용들은 본인들이 운용중인 <b><a href="https://etfsite.alphaarchitect.com/wp-content/uploads/2017/12/Philosophy_final.pdf" target="_blank">Quantitative Value ETF</a></b>의 상품설명서에 거의 다 나와있기는 합니다.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
하지만 생각할 거리가 많아 한번쯤 사서 읽으면 좋은 책이기는 합니다.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
(국내 번역본은 없습니다.)</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<a href="https://www.amazon.com/Quantitative-Momentum-Practitioners-Momentum-Based-Selection-ebook/dp/B01LY6P2LB/ref=pd_sim_b2b_8?_encoding=UTF8&pd_rd_i=B01LY6P2LB&pd_rd_r=df4ff7ed-66e3-11e9-bbed-57e65051719f&pd_rd_w=vuFj1&pd_rd_wg=0pDiG&pf_rd_p=a07701e4-f565-442a-b97f-93ab23cbb7ef&pf_rd_r=T4NDCTCW3D81NCG8RBN3&psc=1&refRID=T4NDCTCW3D81NCG8RBN3" target="_blank">4. Quantitative Momentum by Wesley Gray and Jack Vogel </a></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: center;">
<img alt="Quantitative Momentum: A Practitioner's Guide to Building a Momentum-Based Stock Selection System (Wiley Finance) by [Gray, Wesley R., Vogel, Jack R.]" height="200" src="https://images-na.ssl-images-amazon.com/images/I/51TxxIcQaML.jpg" width="132" /></div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: justify;">
역시나 알파 아키텍트의 웨슬리가 쓴 책이며, 계량적 모멘텀 포트폴리오 운용방법에 대한 책입니다. Quantitative Value가 읽을만한 내용이 많았다면 사실 이책은 볼 내용이 별로 없습니다. 본인들 <a href="https://etfsite.alphaarchitect.com/wp-content/uploads/2017/12/Quantitative_Momentum_philosophy_final.pdf" target="_blank">Quantitative Momentum ETF</a>의 White Paper 보는 것만으로도 충분할 듯 합니다.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
(국내 번역본은 없습니다.)</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<b><a href="https://www.amazon.com/Dual-Momentum-Investing-Innovative-Strategy/dp/0071849440/ref=sr_1_2?crid=KIJO8K783VII&keywords=dual+momentum+investing&qid=1556540058&s=books&sprefix=dual+momentum%2Cstripbooks%2C134&sr=1-2" target="_blank">5. Dual Momentum Investing by Gary Antonacci</a></b></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: center;">
<img height="200" src="https://images-na.ssl-images-amazon.com/images/I/517RE3XodTL._SX330_BO1,204,203,200_.jpg" width="133" /></div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: justify;">
최근에 워낙 유명한 듀얼 모멘텀에 관련된 내용입니다. 책 내용은 전반적으로 좋지만 저자 본인이 올려둔 강의용 <a href="http://www.siliconvalleyaaii.org/2017_SVAAII/20170211_Dual_Momentum_Gary_Antonacci.pdf" style="font-weight: bold;" target="_blank">summary 자료</a>가 너무 좋기에 굳이 책을 사지 않아도 내용을 알 수 있습니다.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<a href="http://www.yes24.com/Product/Goods/59395635?Acode=101" target="_blank">(국내 번역본: 듀얼 모멘텀 투자 전략 뜨는 종목을 잡아내는 과학적 주식 투자 기법)</a></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<a href="https://www.amazon.com/Little-Still-Market-Books-Profits-ebook/dp/B003VWCQB0/ref=pd_sim_b2b_4/137-7666751-7332435?_encoding=UTF8&pd_rd_i=B003VWCQB0&pd_rd_r=33690d46-66e4-11e9-94d4-49728df24266&pd_rd_w=bXR8a&pd_rd_wg=KVqhW&pf_rd_p=a07701e4-f565-442a-b97f-93ab23cbb7ef&pf_rd_r=7HX1NTD26F0PX8QCR3YV&psc=1&refRID=7HX1NTD26F0PX8QCR3YV" target="_blank"><b>6. The Little Book That Still Beats the Market</b></a></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: center;">
<img alt="The Little Book That Still Beats the Market (Little Books. Big Profits 29) by [Greenblatt, Joel]" height="200" src="https://images-na.ssl-images-amazon.com/images/I/51h-wxNpKUL.jpg" width="141" /></div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
두말할 필요 없는 주식계의 명작, 고엘 그린블라트의 마법공식에 관한 책입니다. 퀀트를 떠나서 주식이 무엇인지에 대해 어린아이의 관점에서도 이해할 수 있게 설명해주는 면이 너무나 좋았습니다. </div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<a href="http://www.yes24.com/Product/Goods/5228739?Acode=101" target="_blank">(국내 번역본: 주식시장을 이기는 작은 책)</a></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<b><a href="http://henryquant.blogspot.com/2018/09/blog-post_5.html" target="_blank">관련 POST: 뛰어난 퀀트 로직으로도 돈을 벌지 못하는 이유?</a></b></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<a href="https://www.amazon.com/Your-Complete-Guide-Factor-Based-Investing-ebook/dp/B01N7FCW2D/ref=pd_sim_b2b_5/137-7666751-7332435?_encoding=UTF8&pd_rd_i=B01N7FCW2D&pd_rd_r=6b295c91-66e4-11e9-94bd-393e388bbf8d&pd_rd_w=tpJ4p&pd_rd_wg=hb3Eh&pf_rd_p=a07701e4-f565-442a-b97f-93ab23cbb7ef&pf_rd_r=28XZ80AGDTW88GS05A53&psc=1&refRID=28XZ80AGDTW88GS05A53" target="_blank">7. Complete Guide to Factor Investing by Andrew Berkin and Larry Swedroe</a></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: center;">
<img alt="Your Complete Guide to Factor-Based Investing: The Way Smart Money Invests Today by [Berkin, Andrew L., Swedroe, Larry E.]" height="200" src="https://images-na.ssl-images-amazon.com/images/I/519GSNGhMnL.jpg" width="128" /></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
팩터 투자에 대한 입문서로 이보다 좋은 책은 없다고 생각될 정도로 좋은 책입니다. 각 팩터들이 작동하는 원리, 관련 논문, 실제 성과에 대해 매우 자세하게 풀어 놓았습니다. 처음 책을 보고 놀랐던게 <a href="http://www.yes24.com/Product/Goods/56018775?scode=032&OzSrank=1" target="_blank">'스마트베타'</a>와 내용 흐름이 너무 비슷했던 점이고, 그래서 자극적인 내용을 좋아하시는 분이라면 책이 다소 재미없을 수도 있습니다.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<div>
(국내 번역본은 없습니다.)</div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<a href="https://www.amazon.com/What-Works-Wall-Street-Fourth/dp/0071625763" target="_blank">8. What Works on Wall Street</a></div>
<div>
<br /></div>
<div style="text-align: center;">
<img height="200" src="https://images-na.ssl-images-amazon.com/images/I/51eKtSvZPrL._SX393_BO1,204,203,200_.jpg" width="157" /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
'다우의 개' 및 각종 계량 투자전략으로 유명한 제임스 오쇼너시의 책입니다. 사실 이정도로 유명한 책이 왜 아직도 번역본이 없는게 신기할 정도입니다. (제가 한번....??)</div>
<div>
<br /></div>
<div>
(국내 번역본은 없습니다.)</div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<a href="https://www.amazon.com/Active-Portfolio-Management-Quantitative-Controlling/dp/0070248826/ref=sr_1_1?keywords=active+portfolio+management&qid=1556148313&s=gateway&sr=8-1" target="_blank">9. Active Portfolio Management</a></div>
<div>
<br /></div>
<div style="text-align: center;">
<img height="200" src="https://images-na.ssl-images-amazon.com/images/I/51ZjvjFbEsL._SX345_BO1,204,203,200_.jpg" width="138" /></div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
1번에 있는 퀴안 책이나 김대환 교수님 책이랑 내용은 비슷하며, 그거 읽으시는걸 더 추천드립니다.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
(국내 번역본은 없습니다.)</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<a href="https://www.amazon.com/Asset-Management-Systematic-Investing-Association/dp/0199959323" target="_blank"><br /></a></div>
<div style="text-align: justify;">
<a href="https://www.amazon.com/Asset-Management-Systematic-Investing-Association/dp/0199959323" target="_blank">10. Asset Management: A Systematic Approach to Factor Investing by Andrew Ang</a></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: center;">
<img height="200" src="https://images-na.ssl-images-amazon.com/images/I/41tnBkI49ML._SX330_BO1,204,203,200_.jpg" width="133" /></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
너무나 유명한 앤드류 앙 교수님의 책입니다. 경제적 이론부터 라이프 사이클, 주식, 채권, 부동산 등 다양한 자산에서 리스크 프리미엄 관점에서의 팩터에 대해 설명해줍니다.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
책 자체는 매우 좋고 배울게 많습니다. 700 페이지가 넘어 읽다가 지치지만 않는다면요.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
(국내 번역본은 없습니다.)</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<a href="https://www.amazon.com/Fundamental-Index-Better-Way-Invest/dp/047027784X" target="_blank">11. The Fundamental Index: A Better Way to Invest by Robert D. Arnott, Jason Hsu, John West</a></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: center;">
<img height="200" src="https://images-na.ssl-images-amazon.com/images/I/51a17eZE6ZL._SX338_BO1,204,203,200_.jpg" width="135" /></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
인덱스펀드, 그리고 인핸스드 인덱스의 일종인 펀더멘털 지수에 대한 내용입니다. 퀀트 매니저 대부분의 업무가 (인핸스드) 인덱스 운용이며 이에 대한 책이 거의 없는 만큼, 해당 커리어를 생각하시는 분이라면 한번쯤 읽어봐도 좋을 듯 합니다. </div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<div>
<a href="http://henryquant.blogspot.com/2019/03/blog-post.html" target="_blank">관련 POST: 퀀트 매니저는 어떻게 포트폴리오를 구성할까? (인덱스펀드 구성 예시)</a></div>
<div>
<br /></div>
<div>
(국내 번역본은 없습니다.)</div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<a href="https://www.amazon.com/gp/product/B00CRLSL4W/ref=dbs_a_def_rwt_bibl_vppi_i4" target="_blank">12. Shareholder Yield: A Better Approach to Dividend Investing by Mebane Faber</a></div>
<div>
<br /></div>
<div style="text-align: center;">
<img alt="Shareholder Yield: A Better Approach to Dividend Investing by [Faber, Mebane]" height="200" src="https://images-na.ssl-images-amazon.com/images/I/51JBj5Xm-9L.jpg" width="133" /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
퀀트 쪽에서는 워낙 유명한 메브 파버의 책입니다. 배당에 관한 전반적 내용을 다루고 있다고 하며, 개인적으로 파버의 책을 별로 좋아하지 않고 평점도 그다지 좋은 책은 아닙니다.</div>
<div>
<br /></div>
<div>
(국내 번역본은 없습니다.)</div>
</div>
</div>
Unknownnoreply@blogger.com2tag:blogger.com,1999:blog-23651150467485474.post-59274985877085808812019-04-25T10:55:00.003+09:002019-04-25T10:55:24.508+09:00ETF는 과연 폭락의 '촉매'가 될 것인가?<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiChb-v5TjNr8u5PwhkZukf3EMYLLfAbTextu_hBh1z6nlMjgJwjMf45yHlQl06JC_bnblQZeD0hG7G-fNFXWgfT2BNranIH5lgyrtjkSlOwRQuBjelSOV_k1vXqXWiM3kq3NGpfJxWaQ/s1600/d52903df61ec4584a6b9e2199b231fe5.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="311" data-original-width="500" height="248" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiChb-v5TjNr8u5PwhkZukf3EMYLLfAbTextu_hBh1z6nlMjgJwjMf45yHlQl06JC_bnblQZeD0hG7G-fNFXWgfT2BNranIH5lgyrtjkSlOwRQuBjelSOV_k1vXqXWiM3kq3NGpfJxWaQ/s400/d52903df61ec4584a6b9e2199b231fe5.jpg" width="400" /></a></div>
<br />
<br />
<br />
<div style="text-align: justify;">
최근 몇년새 패시브 투자로의 자금유입은 놀랄만큼 증가하는 추세이며, 그 중심에는 ETF가 있습니다. 그러나 이러한 ETF로의 지나친 쏠림이 다음 금융위기의 주범이 될 가능성이 높다는 경고 또한 계속 나오고 있습니다.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
</div>
<ul>
<li><a href="https://www.cnbc.com/2018/08/23/etfs-are-overinflated-could-spark-the-next-crash-trader-says.html" target="_blank"><b>ETFs are ‘overinflated’ and could spark the next market crash, trader says</b></a></li>
<li><b><a href="https://portfolio-adviser.com/etfs-could-spark-next-financial-crisis/" target="_blank">ETFs could spark next financial crisis</a></b></li>
</ul>
<div>
<br /></div>
<div>
최근 시장을 보면 이러한 경고들이 기우가 아니다는 것을 느낄 수 있습니다. <b><i><span style="color: red;">현물시장 - 선물시장 - ETF시장</span></i></b>을 동시에 관찰하면, 어떻게 시장의 변동성이 확대되고, 이 변동성이 잠재적 위험이 될 수 있다는 것을 느낄 수 있습니다.</div>
<div style="text-align: justify;">
<br /></div>
<div>
<br /></div>
<div style="text-align: center;">
<span id="docs-internal-guid-60ebeb1e-7fff-c7e1-c5dd-7a4f40b0da30"><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"></span></span><span id="docs-internal-guid-b18d51e2-7fff-d922-2528-99c7d0c70a05"><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"></span></span><span id="docs-internal-guid-b18d51e2-7fff-d922-2528-99c7d0c70a05"><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"></span></span><span id="docs-internal-guid-5ce2c09c-7fff-f642-8a71-3dde9249ef66"><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"><img height="361" src="https://lh5.googleusercontent.com/QwskyY2pzYYN9y4g8iJS3BO_jMkEXdGylGLNGh4mcYW-idwwMCwJ-GfsRHHvv9Ewawa9oxyI8MGFG-j90AusDY6UiusrS3jO_O9uB9gL9d2A22tnfJHOCE0VDpTPXCkYXCkUH52K" style="border: none; transform: rotate(0rad);" width="602" /></span></span></div>
<div style="text-align: center;">
<span><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"><br /></span></span></div>
<div style="text-align: center;">
<span><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"><br /></span></span></div>
<div style="text-align: left;">
<span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">코스피200과 코스닥150 시장의 시가총액 비교입니다. 코스피200 시장이 코스닥150 시장 대비 10배 가량 큽니다. (19-4-24 기준 코스피200 1,200조 vs 코스닥150 123조, 유동비 미적용)</span></span></div>
<div style="text-align: left;">
<span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;"><br /></span></span></div>
<div style="text-align: left;">
<span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;"><br /></span></span></div>
<div style="text-align: left;">
<span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;"><br /></span></span></div>
<div style="text-align: left;">
<span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;"><br /></span></span></div>
<div style="text-align: left;">
<span id="docs-internal-guid-c56d6fc2-7fff-8eaa-2434-49ba472fce57"><div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;">
<span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"></span></div>
</span><span id="docs-internal-guid-87467e46-7fff-b708-bb33-0548024cb41e"><div style="text-align: center;">
<img height="361" src="https://lh6.googleusercontent.com/dbotvUDN1JCxWRuCKaPfNvwgQ-0VVYuCDqmCChVrdHUuMR6f4CNGEz9AOe6WKiiYcKHdsoAW9OZhazAjleKhHm0H7OCcsYKgiregMYDw0bOv_IZvKYqKDypOnU6yxVc2pCZBoj2U" style="border: none; font-family: Arial; font-size: 11pt; transform: rotate(0rad); white-space: pre-wrap;" width="602" /></div>
</span></div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: center;">
<img height="361" src="https://lh3.googleusercontent.com/2kSrK4eYnQOiiCkAMpuyK1rsu1g_CCfpow15OnGnClesUFVLKbIhe42eS9QF8sLegbMbU8UMhAAyLwngtZMcmXdFgjFpoqABc48yZWLpZWokg39WN4Rnu_wF-HxUgWgyRQ5vm2ED" style="border: none; font-family: Arial; font-size: 11pt; text-align: justify; transform: rotate(0rad); white-space: pre-wrap;" width="602" /></div>
<div style="text-align: left;">
<span style="font-family: Arial; text-align: justify;"><span style="font-size: 14.6667px; white-space: pre-wrap;"><br /></span></span></div>
<div style="text-align: left;">
<span style="font-family: Arial; text-align: justify;"><span style="font-size: 14.6667px; white-space: pre-wrap;"><br /></span></span></div>
<div style="text-align: justify;">
<span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">각 시장의 연결선물 거래대금의 비교입니다. 코스피 선물 시장이 코스닥 선물 시장 대비 압도적으로 사이즈가 큰 마켓입니다. 그나마 2018년 이후로는 코스닥 선물 시장 역시 거래대금이 늘긴 했지만, 여전히 코스피 선물 시장이 코스닥 대비 30배 정도 시장의 Depth가 큽니다.
(19-4-24 기준 코스피200 17조 vs 코스닥150 5천억)</span></span></div>
<div style="text-align: justify;">
<span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;"><br /></span></span></div>
<div style="text-align: justify;">
<span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;"><br /></span></span></div>
<div style="text-align: justify;">
<span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;"><br /></span></span></div>
<div style="text-align: justify;">
<span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;"><br /></span></span></div>
<div style="text-align: center;">
<span id="docs-internal-guid-59956aad-7fff-6844-796b-dca0c90efbbc"><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"></span></span><span id="docs-internal-guid-9f68d231-7fff-c7a6-38d9-5cdefef17ead"><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"><img height="361" src="https://lh4.googleusercontent.com/C_DUdj0C8R_PrH0OI7-yvPcn6-QftldS21-Xxvrbs-4wc66OvlNwDEw01HY39GKnNix4HYn5SKHaKIaWEdAIy5o04KLXy69KrMQ-RKwAi0N17m3XAmFH8jfy-s1uHsFECKazk7t3" style="border: none; transform: rotate(0rad);" width="602" /></span></span></div>
<div style="text-align: left;">
<span><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"><br /></span></span></div>
<div style="text-align: left;">
<span><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"><br /></span></span></div>
<div style="text-align: justify;">
<span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">그러나 우리가 어떤 민족입니까? 가즈아의 민족 입니다. 코스피200과 코스닥150 지수의 30일 이동 표준편차(연율화)를 비교해보면, 코스닥의 변동성이 코스피 변동성 대비 훨씬 높습니다. 이런 화끈한 변동성 만큼 개인투자자들이 좋아할 만한 소재는 없죠</span></span></div>
<div style="text-align: justify;">
<span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;"><br /></span></span></div>
<div style="text-align: justify;">
<span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;"><br /></span></span></div>
<div style="text-align: justify;">
<span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;"><br /></span></span></div>
<div style="text-align: justify;">
<span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;"><br /></span></span></div>
<div style="text-align: center;">
<span id="docs-internal-guid-0aa1ec3a-7fff-e586-0107-e42e54c2df40"><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"><img height="361" src="https://lh5.googleusercontent.com/5_AFDuIqnNzd8kQQfxtcrxyVMlCaBQ_aZ12OCoizkA2fI8WTUrrP_VuLz4sBj5E0hdcqikRANiErgvNc_lZ22WBQNgfa5Fzl7P-oTOd3Z72eoLUasqMngJCDugpLnC2oaat-rkRt" style="border: none; transform: rotate(0rad);" width="602" /></span></span></div>
<div style="text-align: justify;">
<span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;"><br /></span></span></div>
<div style="text-align: justify;">
<span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;"><br /></span></span></div>
<div style="text-align: justify;">
<span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">이번엔 각 지수를 추종하는 레버리지 ETF의 시가총액 비교입니다. 2018년부터 코스닥 레버리지 ETF가 무서운 속도로 증가하는 것이 보입니다. (당시 모 은행의 신탁에서 해당 ETF를 조 단위로 팔았던 기억이 나실겁니다.) </span></span></div>
<div style="text-align: justify;">
<span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;"><br /></span></span></div>
<div style="text-align: justify;">
<span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">그 결과 코스피200 레버리지 ETF와 코스닥150 레버리지 ETF의 시가총액 차이가 2배 밖에 나지 않는 기현상이 벌어지게 되었습니다. 기초지수는 시장 차이가 10배 이상 나는데, 이를 추종하는 (레버리지) ETF의 시장 차이는 겨우 2배인.. 코스닥 레버리지 ETF가 비이상적으로 커지게 되는 현상이 발생하게 된 것입니다.</span></span></div>
<div style="text-align: justify;">
<span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;"><br /></span></span></div>
<div style="text-align: justify;">
<span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;"><br /></span></span></div>
<div style="text-align: justify;">
<span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;"><br /></span></span></div>
<div style="text-align: justify;">
<span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">사실 단순히 1X ETF의 사이즈가 커지는 것은 그리 큰 문제가 안됩니다. 그러나 레버리지 ETF가 커진다는 점, 그것도 시장의 depth가 얕은 코스닥 ETF가 커진다는 점은 잠재적으로 큰 문제가 될 수도 있습니다.</span></span></div>
<div style="text-align: justify;">
<span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;"><br /></span></span></div>
<div style="text-align: justify;">
<span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;"><br /></span></span></div>
<div style="text-align: justify;">
<span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;"><br /></span></span></div>
<div style="text-align: justify;">
<span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;"><br /></span></span></div>
<div style="text-align: center;">
<span id="docs-internal-guid-5058762f-7fff-8617-7280-4718911d95a4"><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"><img height="335" src="https://lh5.googleusercontent.com/EWo_N033RDYBHepCGqfeQ39Jv6DuEhPDjD06VJmi2CszDLtKdi7pgEIAyroc25_jzXfqkBGfDYuIJUwMKZUgqEAxlur-4AfTazOvkO383IXfI88jVsPrenmzEzGm1Q46G8JBJqc4" style="border: none; transform: rotate(0rad);" width="602" /></span></span></div>
<div style="text-align: justify;">
<span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;"><br /></span></span></div>
<div style="text-align: justify;">
<span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;"><br /></span></span></div>
<div style="text-align: justify;">
<span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">코스닥 레버리지 ETF의 PDF를 확인해보면, 구성종목 중 절반정도를 코스닥 선물로 보유하고 있으며, 이를 이용해 beta를 2로 맞추고 있습니다. 당연히 현물로는 레버리지 이펙트를 일으킬 수 없으니 선물을 이용해 포지션을 맞춰야 겠죠.</span></span></div>
<div style="text-align: justify;">
<span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;"><br /></span></span></div>
<div style="text-align: justify;">
<span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">그러나 레버리지의 경우 매일매일 beta를 2로 맞추어야 된다는 점이 있습니다. 단순히 1X ETF의 경우기초지수에 해당하는 현물 바스켓을 보유하면 끝이지만, 2X ETF의 경우 그날의 상승/하락에 따른 효과로 인해 노출도(beta)가 2가 아닌 지속적으로 변하므로, 이를 맞춰주기 위해 매일 트레이딩을 해야 하며, 대부분 선물을 이용합니다.</span></span></div>
<div style="text-align: justify;">
<span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;"><br /></span></span></div>
<div style="text-align: justify;">
<span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;"><br /></span></span></div>
<div style="text-align: justify;">
<span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">예를 들어 AUM이 100억짜리인 레버리지 펀드가 있을 경우, 2X를 추종하기 위해 해당 펀드는 200억의 노출을 맞출 것입니다. 이를 위해 선물을 이용한다고 가정하고, 선물이 개당 8천만원일 경우 250개를 매수해야 합니다.</span></span></div>
<div style="text-align: justify;">
<span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;"><br /></span></span></div>
<div style="text-align: justify;">
<span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">만약 다음날 기초지수가 1% 올랐다면 펀드의 AUM은 101억이 되며, 2배를 추종하기 위해 펀드의 노출 금액은 200억에서 1%의 2배, 즉 2%가 상승한 204억이 되야 합니다. 그러나 추종하는 선물 자체가 1% 상승했으므로 펀드의 노출 금액은 80,000,000 * 1.01 * 250 = </span></span>20,200,000,000 (202억)<span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">이 되어 목표금액에 2억이 모자라게 됩니다. 따라서 해당 금액만큼 선물을 추가 매수해야 합니다. 매수 혹은 매도해야 하는 선물의 양은 <b><i><span style="color: red;">펀드의 AUM이 클수록, 혹은 당일 변동성이 클 수록 늘어나게 됩니다.</span></i></b></span></span></div>
<div style="text-align: justify;">
<span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;"><b><i><span style="color: red;"><br /></span></i></b></span></span></div>
<div style="text-align: justify;">
<span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;"><br /></span></span></div>
<div style="text-align: justify;">
<span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;"><br /></span></span></div>
<div style="text-align: justify;">
<div align="center">
<table border="0" cellpadding="0" cellspacing="0" class="MsoNormalTable" style="border-collapse: collapse; mso-padding-alt: 0cm 4.95pt 0cm 4.95pt; mso-yfti-tbllook: 1184; width: 0px;">
<tbody>
<tr style="height: 9.4pt; mso-yfti-firstrow: yes; mso-yfti-irow: 0;">
<td nowrap="" style="border: solid windowtext 1.0pt; height: 9.4pt; mso-border-alt: solid windowtext .5pt; padding: 0cm 4.95pt 0cm 4.95pt; width: 100.35pt;" width="134">
<div align="left" class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt; word-break: keep-all;">
<span style="font-size: 11pt;"> <span lang="EN-US"><o:p></o:p></span></span></div>
</td>
<td nowrap="" style="border-left: none; border: solid windowtext 1.0pt; height: 9.4pt; mso-border-bottom-alt: solid windowtext .5pt; mso-border-right-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0cm 4.95pt 0cm 4.95pt; width: 138.15pt;" width="184">
<div align="center" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-pagination: widow-orphan; text-align: center; text-autospace: ideograph-numeric ideograph-other; word-break: keep-all;">
<span lang="EN-US" style="font-size: 11pt;">AUM<o:p></o:p></span></div>
</td>
<td nowrap="" style="border-left: none; border: solid windowtext 1.0pt; height: 9.4pt; mso-border-bottom-alt: solid windowtext .5pt; mso-border-right-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0cm 4.95pt 0cm 4.95pt; width: 154.25pt;" width="206">
<div align="center" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-pagination: widow-orphan; text-align: center; text-autospace: ideograph-numeric ideograph-other; word-break: keep-all;">
<span lang="EN-US" style="font-size: 11pt;">2X </span><span style="font-size: 11pt;">노출도<span lang="EN-US"> (</span>목표<span lang="EN-US">)<o:p></o:p></span></span></div>
</td>
</tr>
<tr style="height: 9.4pt; mso-yfti-irow: 1;">
<td nowrap="" style="border-top: none; border: solid windowtext 1.0pt; height: 9.4pt; mso-border-bottom-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-right-alt: solid windowtext .5pt; padding: 0cm 4.95pt 0cm 4.95pt; width: 100.35pt;" width="134">
<div align="left" class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt; word-break: keep-all;">
<span style="font-size: 11pt;"> <span lang="EN-US"><o:p></o:p></span></span></div>
</td>
<td nowrap="" style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; height: 9.4pt; mso-border-bottom-alt: solid windowtext .5pt; mso-border-right-alt: solid windowtext .5pt; padding: 0cm 4.95pt 0cm 4.95pt; width: 138.15pt;" width="184">
<div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-pagination: widow-orphan; text-align: right; text-autospace: ideograph-numeric ideograph-other; word-break: keep-all;">
<span lang="EN-US" style="font-size: 11pt;">
10,000,000,000<o:p></o:p></span></div>
</td>
<td nowrap="" style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; height: 9.4pt; mso-border-bottom-alt: solid windowtext .5pt; mso-border-right-alt: solid windowtext .5pt; padding: 0cm 4.95pt 0cm 4.95pt; width: 154.25pt;" width="206">
<div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-pagination: widow-orphan; text-align: right; text-autospace: ideograph-numeric ideograph-other; word-break: keep-all;">
<span lang="EN-US" style="font-size: 11pt;">
20,000,000,000<o:p></o:p></span></div>
</td>
</tr>
<tr style="height: 9.4pt; mso-yfti-irow: 2;">
<td nowrap="" style="border-top: none; border: solid windowtext 1.0pt; height: 9.4pt; mso-border-bottom-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-right-alt: solid windowtext .5pt; padding: 0cm 4.95pt 0cm 4.95pt; width: 100.35pt;" width="134">
<div align="left" class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt; word-break: keep-all;">
<span style="font-size: 11pt;">선물 노출<span lang="EN-US"><o:p></o:p></span></span></div>
</td>
<td nowrap="" style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; height: 9.4pt; mso-border-bottom-alt: solid windowtext .5pt; mso-border-right-alt: solid windowtext .5pt; padding: 0cm 4.95pt 0cm 4.95pt; width: 138.15pt;" width="184">
<div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-pagination: widow-orphan; text-align: right; text-autospace: ideograph-numeric ideograph-other; word-break: keep-all;">
<span style="font-size: 11pt;"> <span lang="EN-US"><o:p></o:p></span></span></div>
</td>
<td nowrap="" style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; height: 9.4pt; mso-border-bottom-alt: solid windowtext .5pt; mso-border-right-alt: solid windowtext .5pt; padding: 0cm 4.95pt 0cm 4.95pt; width: 154.25pt;" width="206">
<div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-pagination: widow-orphan; text-align: right; text-autospace: ideograph-numeric ideograph-other; word-break: keep-all;">
<span lang="EN-US" style="font-size: 11pt;">
20,000,000,000<o:p></o:p></span></div>
</td>
</tr>
<tr style="height: 9.4pt; mso-yfti-irow: 3;">
<td nowrap="" style="border-top: none; border: solid windowtext 1.0pt; height: 9.4pt; mso-border-bottom-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-right-alt: solid windowtext .5pt; padding: 0cm 4.95pt 0cm 4.95pt; width: 100.35pt;" width="134">
<div align="left" class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt; word-break: keep-all;">
<span style="font-size: 11pt;">선물 개당 금액<span lang="EN-US"><o:p></o:p></span></span></div>
</td>
<td nowrap="" style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; height: 9.4pt; mso-border-bottom-alt: solid windowtext .5pt; mso-border-right-alt: solid windowtext .5pt; padding: 0cm 4.95pt 0cm 4.95pt; width: 138.15pt;" width="184">
<div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-pagination: widow-orphan; text-align: right; text-autospace: ideograph-numeric ideograph-other; word-break: keep-all;">
<span style="font-size: 11pt;"> <span lang="EN-US"><o:p></o:p></span></span></div>
</td>
<td nowrap="" style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; height: 9.4pt; mso-border-bottom-alt: solid windowtext .5pt; mso-border-right-alt: solid windowtext .5pt; padding: 0cm 4.95pt 0cm 4.95pt; width: 154.25pt;" width="206">
<div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-pagination: widow-orphan; text-align: right; text-autospace: ideograph-numeric ideograph-other; word-break: keep-all;">
<span lang="EN-US" style="font-size: 11pt;">
80,000,000<o:p></o:p></span></div>
</td>
</tr>
<tr style="height: 9.4pt; mso-yfti-irow: 4;">
<td nowrap="" style="border-top: none; border: solid windowtext 1.0pt; height: 9.4pt; mso-border-bottom-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-right-alt: solid windowtext .5pt; padding: 0cm 4.95pt 0cm 4.95pt; width: 100.35pt;" width="134">
<div align="left" class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt; word-break: keep-all;">
<span style="font-size: 11pt;">선물 개수<span lang="EN-US"><o:p></o:p></span></span></div>
</td>
<td nowrap="" style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; height: 9.4pt; mso-border-bottom-alt: solid windowtext .5pt; mso-border-right-alt: solid windowtext .5pt; padding: 0cm 4.95pt 0cm 4.95pt; width: 138.15pt;" width="184">
<div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-pagination: widow-orphan; text-align: right; text-autospace: ideograph-numeric ideograph-other; word-break: keep-all;">
<span style="font-size: 11pt;"> <span lang="EN-US"><o:p></o:p></span></span></div>
</td>
<td nowrap="" style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; height: 9.4pt; mso-border-bottom-alt: solid windowtext .5pt; mso-border-right-alt: solid windowtext .5pt; padding: 0cm 4.95pt 0cm 4.95pt; width: 154.25pt;" width="206">
<div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-pagination: widow-orphan; text-align: right; text-autospace: ideograph-numeric ideograph-other; word-break: keep-all;">
<span lang="EN-US" style="font-size: 11pt;">
250.00<o:p></o:p></span></div>
</td>
</tr>
<tr style="height: 9.4pt; mso-yfti-irow: 5;">
<td nowrap="" style="height: 9.4pt; padding: 0cm 4.95pt 0cm 4.95pt; width: 100.35pt;" width="134"></td>
<td nowrap="" style="height: 9.4pt; padding: 0cm 4.95pt 0cm 4.95pt; width: 138.15pt;" width="184"></td>
<td nowrap="" style="height: 9.4pt; padding: 0cm 4.95pt 0cm 4.95pt; width: 154.25pt;" width="206"></td>
</tr>
<tr style="height: 9.4pt; mso-yfti-irow: 6;">
<td nowrap="" style="height: 9.4pt; padding: 0cm 4.95pt 0cm 4.95pt; width: 100.35pt;" width="134">
<div align="center" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-pagination: widow-orphan; text-align: center; text-autospace: ideograph-numeric ideograph-other; word-break: keep-all;">
<b><span lang="EN-US" style="font-size: 11pt;">1% </span></b><b><span style="font-size: 11pt;">상승시<span lang="EN-US"><o:p></o:p></span></span></b></div>
</td>
<td nowrap="" style="height: 9.4pt; padding: 0cm 4.95pt 0cm 4.95pt; width: 138.15pt;" width="184"></td>
<td nowrap="" style="height: 9.4pt; padding: 0cm 4.95pt 0cm 4.95pt; width: 154.25pt;" width="206"></td>
</tr>
<tr style="height: 9.4pt; mso-yfti-irow: 7;">
<td nowrap="" style="border: solid windowtext 1.0pt; height: 9.4pt; mso-border-alt: solid windowtext .5pt; padding: 0cm 4.95pt 0cm 4.95pt; width: 100.35pt;" width="134">
<div align="left" class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt; word-break: keep-all;">
<span style="font-size: 11pt;"> <span lang="EN-US"><o:p></o:p></span></span></div>
</td>
<td nowrap="" style="border-left: none; border: solid windowtext 1.0pt; height: 9.4pt; mso-border-bottom-alt: solid windowtext .5pt; mso-border-right-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0cm 4.95pt 0cm 4.95pt; width: 138.15pt;" width="184">
<div align="center" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-pagination: widow-orphan; text-align: center; text-autospace: ideograph-numeric ideograph-other; word-break: keep-all;">
<span lang="EN-US" style="font-size: 11pt;">AUM<o:p></o:p></span></div>
</td>
<td nowrap="" style="border-left: none; border: solid windowtext 1.0pt; height: 9.4pt; mso-border-bottom-alt: solid windowtext .5pt; mso-border-right-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0cm 4.95pt 0cm 4.95pt; width: 154.25pt;" width="206">
<div align="center" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-pagination: widow-orphan; text-align: center; text-autospace: ideograph-numeric ideograph-other; word-break: keep-all;">
<span lang="EN-US" style="font-size: 11pt;">2X </span><span style="font-size: 11pt;">노출도<span lang="EN-US"> (</span>목표<span lang="EN-US">)<o:p></o:p></span></span></div>
</td>
</tr>
<tr style="height: 9.4pt; mso-yfti-irow: 8;">
<td nowrap="" style="border-top: none; border: solid windowtext 1.0pt; height: 9.4pt; mso-border-bottom-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-right-alt: solid windowtext .5pt; padding: 0cm 4.95pt 0cm 4.95pt; width: 100.35pt;" width="134">
<div align="left" class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt; word-break: keep-all;">
<span style="font-size: 11pt;"> <span lang="EN-US"><o:p></o:p></span></span></div>
</td>
<td nowrap="" style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; height: 9.4pt; mso-border-bottom-alt: solid windowtext .5pt; mso-border-right-alt: solid windowtext .5pt; padding: 0cm 4.95pt 0cm 4.95pt; width: 138.15pt;" width="184">
<div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-pagination: widow-orphan; text-align: right; text-autospace: ideograph-numeric ideograph-other; word-break: keep-all;">
<span lang="EN-US" style="font-size: 11pt;">
10,100,000,000 <o:p></o:p></span></div>
</td>
<td nowrap="" style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; height: 9.4pt; mso-border-bottom-alt: solid windowtext .5pt; mso-border-right-alt: solid windowtext .5pt; padding: 0cm 4.95pt 0cm 4.95pt; width: 154.25pt;" width="206">
<div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-pagination: widow-orphan; text-align: right; text-autospace: ideograph-numeric ideograph-other; word-break: keep-all;">
<span lang="EN-US" style="font-size: 11pt;"> 20,400,000,000<o:p></o:p></span></div>
</td>
</tr>
<tr style="height: 9.4pt; mso-yfti-irow: 9;">
<td nowrap="" style="border-top: none; border: solid windowtext 1.0pt; height: 9.4pt; mso-border-bottom-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-right-alt: solid windowtext .5pt; padding: 0cm 4.95pt 0cm 4.95pt; width: 100.35pt;" width="134">
<div align="left" class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt; word-break: keep-all;">
<span style="font-size: 11pt;">선물 금액<span lang="EN-US"><o:p></o:p></span></span></div>
</td>
<td nowrap="" style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; height: 9.4pt; mso-border-bottom-alt: solid windowtext .5pt; mso-border-right-alt: solid windowtext .5pt; padding: 0cm 4.95pt 0cm 4.95pt; width: 138.15pt;" width="184">
<div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-pagination: widow-orphan; text-align: right; text-autospace: ideograph-numeric ideograph-other; word-break: keep-all;">
<span style="font-size: 11pt;"> <span lang="EN-US"><o:p></o:p></span></span></div>
</td>
<td nowrap="" style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; height: 9.4pt; mso-border-bottom-alt: solid windowtext .5pt; mso-border-right-alt: solid windowtext .5pt; padding: 0cm 4.95pt 0cm 4.95pt; width: 154.25pt;" width="206">
<div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-pagination: widow-orphan; text-align: right; text-autospace: ideograph-numeric ideograph-other; word-break: keep-all;">
<span lang="EN-US" style="font-size: 11pt;">
20,200,000,000<o:p></o:p></span></div>
</td>
</tr>
<tr style="height: 9.4pt; mso-yfti-irow: 10;">
<td nowrap="" style="border-top: none; border: solid windowtext 1.0pt; height: 9.4pt; mso-border-bottom-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-right-alt: solid windowtext .5pt; padding: 0cm 4.95pt 0cm 4.95pt; width: 100.35pt;" width="134">
<div align="left" class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt; word-break: keep-all;">
<span style="font-size: 11pt;">선물 개당 금액<span lang="EN-US"><o:p></o:p></span></span></div>
</td>
<td nowrap="" style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; height: 9.4pt; mso-border-bottom-alt: solid windowtext .5pt; mso-border-right-alt: solid windowtext .5pt; padding: 0cm 4.95pt 0cm 4.95pt; width: 138.15pt;" width="184">
<div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-pagination: widow-orphan; text-align: right; text-autospace: ideograph-numeric ideograph-other; word-break: keep-all;">
<span style="font-size: 11pt;"> <span lang="EN-US"><o:p></o:p></span></span></div>
</td>
<td nowrap="" style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; height: 9.4pt; mso-border-bottom-alt: solid windowtext .5pt; mso-border-right-alt: solid windowtext .5pt; padding: 0cm 4.95pt 0cm 4.95pt; width: 154.25pt;" width="206">
<div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-pagination: widow-orphan; text-align: right; text-autospace: ideograph-numeric ideograph-other; word-break: keep-all;">
<span lang="EN-US" style="font-size: 11pt;">
80,800,000<o:p></o:p></span></div>
</td>
</tr>
<tr style="height: 9.4pt; mso-yfti-irow: 11;">
<td nowrap="" style="border-top: none; border: solid windowtext 1.0pt; height: 9.4pt; mso-border-bottom-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-right-alt: solid windowtext .5pt; padding: 0cm 4.95pt 0cm 4.95pt; width: 100.35pt;" width="134">
<div align="left" class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt; word-break: keep-all;">
<span style="font-size: 11pt;">차이<span lang="EN-US"><o:p></o:p></span></span></div>
</td>
<td nowrap="" style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; height: 9.4pt; mso-border-bottom-alt: solid windowtext .5pt; mso-border-right-alt: solid windowtext .5pt; padding: 0cm 4.95pt 0cm 4.95pt; width: 138.15pt;" width="184">
<div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-pagination: widow-orphan; text-align: right; text-autospace: ideograph-numeric ideograph-other; word-break: keep-all;">
<span style="font-size: 11pt;"> <span lang="EN-US"><o:p></o:p></span></span></div>
</td>
<td nowrap="" style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; height: 9.4pt; mso-border-bottom-alt: solid windowtext .5pt; mso-border-right-alt: solid windowtext .5pt; padding: 0cm 4.95pt 0cm 4.95pt; width: 154.25pt;" width="206">
<div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-pagination: widow-orphan; text-align: right; text-autospace: ideograph-numeric ideograph-other; word-break: keep-all;">
<span lang="EN-US" style="font-size: 11pt;">
200,000,000 <o:p></o:p></span></div>
</td>
</tr>
<tr style="height: 9.4pt; mso-yfti-irow: 12;">
<td nowrap="" style="border-top: none; border: solid windowtext 1.0pt; height: 9.4pt; mso-border-bottom-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-right-alt: solid windowtext .5pt; padding: 0cm 4.95pt 0cm 4.95pt; width: 100.35pt;" width="134">
<div align="left" class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt; word-break: keep-all;">
<span style="font-size: 11pt;">추가 매수<span lang="EN-US"><o:p></o:p></span></span></div>
</td>
<td nowrap="" style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; height: 9.4pt; mso-border-bottom-alt: solid windowtext .5pt; mso-border-right-alt: solid windowtext .5pt; padding: 0cm 4.95pt 0cm 4.95pt; width: 138.15pt;" width="184">
<div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-pagination: widow-orphan; text-align: right; text-autospace: ideograph-numeric ideograph-other; word-break: keep-all;">
<span style="font-size: 11pt;"> <span lang="EN-US"><o:p></o:p></span></span></div>
</td>
<td nowrap="" style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; height: 9.4pt; mso-border-bottom-alt: solid windowtext .5pt; mso-border-right-alt: solid windowtext .5pt; padding: 0cm 4.95pt 0cm 4.95pt; width: 154.25pt;" width="206">
<div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-pagination: widow-orphan; text-align: right; text-autospace: ideograph-numeric ideograph-other; word-break: keep-all;">
<span lang="EN-US" style="font-size: 11pt;">2.5<o:p></o:p></span></div>
</td>
</tr>
<tr style="height: 9.4pt; mso-yfti-irow: 13;">
<td nowrap="" style="height: 9.4pt; padding: 0cm 4.95pt 0cm 4.95pt; width: 100.35pt;" width="134"></td>
<td nowrap="" style="height: 9.4pt; padding: 0cm 4.95pt 0cm 4.95pt; width: 138.15pt;" width="184"></td>
<td nowrap="" style="height: 9.4pt; padding: 0cm 4.95pt 0cm 4.95pt; width: 154.25pt;" width="206"></td>
</tr>
<tr style="height: 9.4pt; mso-yfti-irow: 14;">
<td nowrap="" style="height: 9.4pt; padding: 0cm 4.95pt 0cm 4.95pt; width: 100.35pt;" width="134">
<div align="center" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-pagination: widow-orphan; text-align: center; text-autospace: ideograph-numeric ideograph-other; word-break: keep-all;">
<b><span lang="EN-US" style="font-size: 11pt;">2% </span></b><b><span style="font-size: 11pt;">상승시<span lang="EN-US"><o:p></o:p></span></span></b></div>
</td>
<td nowrap="" style="height: 9.4pt; padding: 0cm 4.95pt 0cm 4.95pt; width: 138.15pt;" width="184"></td>
<td nowrap="" style="height: 9.4pt; padding: 0cm 4.95pt 0cm 4.95pt; width: 154.25pt;" width="206"></td>
</tr>
<tr style="height: 9.4pt; mso-yfti-irow: 15;">
<td nowrap="" style="border: solid windowtext 1.0pt; height: 9.4pt; mso-border-alt: solid windowtext .5pt; padding: 0cm 4.95pt 0cm 4.95pt; width: 100.35pt;" width="134">
<div align="left" class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt; word-break: keep-all;">
<span style="font-size: 11pt;"> <span lang="EN-US"><o:p></o:p></span></span></div>
</td>
<td nowrap="" style="border-left: none; border: solid windowtext 1.0pt; height: 9.4pt; mso-border-bottom-alt: solid windowtext .5pt; mso-border-right-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0cm 4.95pt 0cm 4.95pt; width: 138.15pt;" width="184">
<div align="center" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-pagination: widow-orphan; text-align: center; text-autospace: ideograph-numeric ideograph-other; word-break: keep-all;">
<span lang="EN-US" style="font-size: 11pt;">AUM<o:p></o:p></span></div>
</td>
<td nowrap="" style="border-left: none; border: solid windowtext 1.0pt; height: 9.4pt; mso-border-bottom-alt: solid windowtext .5pt; mso-border-right-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0cm 4.95pt 0cm 4.95pt; width: 154.25pt;" width="206">
<div align="center" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-pagination: widow-orphan; text-align: center; text-autospace: ideograph-numeric ideograph-other; word-break: keep-all;">
<span lang="EN-US" style="font-size: 11pt;">2X </span><span style="font-size: 11pt;">노출도<span lang="EN-US"> (</span>목표<span lang="EN-US">)<o:p></o:p></span></span></div>
</td>
</tr>
<tr style="height: 9.4pt; mso-yfti-irow: 16;">
<td nowrap="" style="border-top: none; border: solid windowtext 1.0pt; height: 9.4pt; mso-border-bottom-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-right-alt: solid windowtext .5pt; padding: 0cm 4.95pt 0cm 4.95pt; width: 100.35pt;" width="134">
<div align="left" class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt; word-break: keep-all;">
<span style="font-size: 11pt;"> <span lang="EN-US"><o:p></o:p></span></span></div>
</td>
<td nowrap="" style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; height: 9.4pt; mso-border-bottom-alt: solid windowtext .5pt; mso-border-right-alt: solid windowtext .5pt; padding: 0cm 4.95pt 0cm 4.95pt; width: 138.15pt;" width="184">
<div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-pagination: widow-orphan; text-align: right; text-autospace: ideograph-numeric ideograph-other; word-break: keep-all;">
<span lang="EN-US" style="font-size: 11pt;">
10,200,000,000 <o:p></o:p></span></div>
</td>
<td nowrap="" style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; height: 9.4pt; mso-border-bottom-alt: solid windowtext .5pt; mso-border-right-alt: solid windowtext .5pt; padding: 0cm 4.95pt 0cm 4.95pt; width: 154.25pt;" width="206">
<div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-pagination: widow-orphan; text-align: right; text-autospace: ideograph-numeric ideograph-other; word-break: keep-all;">
<span lang="EN-US" style="font-size: 11pt;">
20,800,000,000 <o:p></o:p></span></div>
</td>
</tr>
<tr style="height: 9.4pt; mso-yfti-irow: 17;">
<td nowrap="" style="border-top: none; border: solid windowtext 1.0pt; height: 9.4pt; mso-border-bottom-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-right-alt: solid windowtext .5pt; padding: 0cm 4.95pt 0cm 4.95pt; width: 100.35pt;" width="134">
<div align="left" class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt; word-break: keep-all;">
<span style="font-size: 11pt;">선물 금액<span lang="EN-US"><o:p></o:p></span></span></div>
</td>
<td nowrap="" style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; height: 9.4pt; mso-border-bottom-alt: solid windowtext .5pt; mso-border-right-alt: solid windowtext .5pt; padding: 0cm 4.95pt 0cm 4.95pt; width: 138.15pt;" width="184">
<div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-pagination: widow-orphan; text-align: right; text-autospace: ideograph-numeric ideograph-other; word-break: keep-all;">
<span style="font-size: 11pt;"> <span lang="EN-US"><o:p></o:p></span></span></div>
</td>
<td nowrap="" style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; height: 9.4pt; mso-border-bottom-alt: solid windowtext .5pt; mso-border-right-alt: solid windowtext .5pt; padding: 0cm 4.95pt 0cm 4.95pt; width: 154.25pt;" width="206">
<div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-pagination: widow-orphan; text-align: right; text-autospace: ideograph-numeric ideograph-other; word-break: keep-all;">
<span lang="EN-US" style="font-size: 11pt;">
20,400,000,000 <o:p></o:p></span></div>
</td>
</tr>
<tr style="height: 9.4pt; mso-yfti-irow: 18;">
<td nowrap="" style="border-top: none; border: solid windowtext 1.0pt; height: 9.4pt; mso-border-bottom-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-right-alt: solid windowtext .5pt; padding: 0cm 4.95pt 0cm 4.95pt; width: 100.35pt;" width="134">
<div align="left" class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt; word-break: keep-all;">
<span style="font-size: 11pt;">선물 개당 금액<span lang="EN-US"><o:p></o:p></span></span></div>
</td>
<td nowrap="" style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; height: 9.4pt; mso-border-bottom-alt: solid windowtext .5pt; mso-border-right-alt: solid windowtext .5pt; padding: 0cm 4.95pt 0cm 4.95pt; width: 138.15pt;" width="184">
<div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-pagination: widow-orphan; text-align: right; text-autospace: ideograph-numeric ideograph-other; word-break: keep-all;">
<span style="font-size: 11pt;"> <span lang="EN-US"><o:p></o:p></span></span></div>
</td>
<td nowrap="" style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; height: 9.4pt; mso-border-bottom-alt: solid windowtext .5pt; mso-border-right-alt: solid windowtext .5pt; padding: 0cm 4.95pt 0cm 4.95pt; width: 154.25pt;" width="206">
<div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-pagination: widow-orphan; text-align: right; text-autospace: ideograph-numeric ideograph-other; word-break: keep-all;">
<span lang="EN-US" style="font-size: 11pt;">
81,600,000 <o:p></o:p></span></div>
</td>
</tr>
<tr style="height: 9.4pt; mso-yfti-irow: 19;">
<td nowrap="" style="border-top: none; border: solid windowtext 1.0pt; height: 9.4pt; mso-border-bottom-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-right-alt: solid windowtext .5pt; padding: 0cm 4.95pt 0cm 4.95pt; width: 100.35pt;" width="134">
<div align="left" class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt; word-break: keep-all;">
<span style="font-size: 11pt;">차이<span lang="EN-US"><o:p></o:p></span></span></div>
</td>
<td nowrap="" style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; height: 9.4pt; mso-border-bottom-alt: solid windowtext .5pt; mso-border-right-alt: solid windowtext .5pt; padding: 0cm 4.95pt 0cm 4.95pt; width: 138.15pt;" width="184">
<div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-pagination: widow-orphan; text-align: right; text-autospace: ideograph-numeric ideograph-other; word-break: keep-all;">
<span style="font-size: 11pt;"> <span lang="EN-US"><o:p></o:p></span></span></div>
</td>
<td nowrap="" style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; height: 9.4pt; mso-border-bottom-alt: solid windowtext .5pt; mso-border-right-alt: solid windowtext .5pt; padding: 0cm 4.95pt 0cm 4.95pt; width: 154.25pt;" width="206">
<div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-pagination: widow-orphan; text-align: right; text-autospace: ideograph-numeric ideograph-other; word-break: keep-all;">
<span lang="EN-US" style="font-size: 11pt;">
400,000,000 <o:p></o:p></span></div>
</td>
</tr>
<tr style="height: 9.4pt; mso-yfti-irow: 20; mso-yfti-lastrow: yes;">
<td nowrap="" style="border-top: none; border: solid windowtext 1.0pt; height: 9.4pt; mso-border-bottom-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-right-alt: solid windowtext .5pt; padding: 0cm 4.95pt 0cm 4.95pt; width: 100.35pt;" width="134">
<div align="left" class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt; word-break: keep-all;">
<span style="font-size: 11pt;">추가 매수<span lang="EN-US"><o:p></o:p></span></span></div>
</td>
<td nowrap="" style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; height: 9.4pt; mso-border-bottom-alt: solid windowtext .5pt; mso-border-right-alt: solid windowtext .5pt; padding: 0cm 4.95pt 0cm 4.95pt; width: 138.15pt;" width="184">
<div align="left" class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt; word-break: keep-all;">
<span style="font-size: 11pt;"> <span lang="EN-US"><o:p></o:p></span></span></div>
</td>
<td nowrap="" style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; height: 9.4pt; mso-border-bottom-alt: solid windowtext .5pt; mso-border-right-alt: solid windowtext .5pt; padding: 0cm 4.95pt 0cm 4.95pt; width: 154.25pt;" width="206">
<div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-pagination: widow-orphan; text-align: right; text-autospace: ideograph-numeric ideograph-other; word-break: keep-all;">
<span lang="EN-US" style="font-size: 11pt;">4.9<o:p></o:p></span></div>
</td>
</tr>
</tbody></table>
</div>
<div align="center">
<br /></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">물론 해당 선물시장의 거래대금이 충분히 크다면 ETF의 일간 리밸런싱으로 인한 효과는 시장에 전혀 충격이 되지 않을 겁니다. 그러나 선물시장이 얉다면 얘기는 다르죠</span></span></div>
<div style="text-align: justify;">
<span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;"><br /></span></span></div>
<div style="text-align: justify;">
<span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;"><br /></span></span></div>
<div style="text-align: justify;">
<span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;"><br /></span></span></div>
<div style="text-align: justify;">
<span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;"><br /></span></span></div>
<div style="text-align: center;">
<span id="docs-internal-guid-b8b22272-7fff-a67b-0f40-508750eb3925"><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"></span></span><span id="docs-internal-guid-14a91ff5-7fff-bf23-9c9f-5f3dd00c813c"><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"><img height="361" src="https://lh6.googleusercontent.com/cQvlQVae3q-buGqM2mgr470Vf3upNw7wsuI83rfHjpgEtnXBFUmiR5v3lxU0BQU-ZhyeyzgLxDi5EBiyM2J2PoNKkNRfzvyx38Lb2hotp51JeR_-AvGxiLNh2yuxCH5uEUj3qCBY" style="border: none; transform: rotate(0rad);" width="602" /></span></span></div>
<div style="text-align: justify;">
<span><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"><br /></span></span></div>
<div style="text-align: center;">
<span id="docs-internal-guid-97b43e82-7fff-0172-e076-133489f83dd4"><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"><img height="361" src="https://lh6.googleusercontent.com/txSqCKNtCwK9SAY8fRN9IUFk1XhPO0J7794Mi2oOtXYQw71mZZcDdPt5qKLBkrB3m69qeZpx3wRgn-2ZielfQacNE9R8XW9KFQHAa7OvZ8KuJFJqr9-Pu71qoml0DzDUI-Nk0Gjc" style="border: none; transform: rotate(0rad);" width="602" /></span></span></div>
<div style="text-align: center;">
<span><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"><br /></span></span></div>
<div style="text-align: center;">
<span><span style="font-family: Arial; font-size: 11pt; font-variant-east-asian: normal; font-variant-numeric: normal; vertical-align: baseline; white-space: pre-wrap;"><br /></span></span></div>
<div style="text-align: justify;">
<span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">코스피200과 코스닥150 시장의 선물 거래대금과 추종 레버리지 ETF의 시가총액 비교입니다. 코스피 시장의 경우 선물 시장의 규모가 워낙 크므로 비중이 30% 정도에 불과합니다. 일간 리밸런싱으로 인한 물량이 있다 한들 충분히 소화하고도 남을 선물시장이 존재합니다.</span></span></div>
<div style="text-align: justify;">
<span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;"><br /></span></span></div>
<div style="text-align: justify;">
<span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;"><br /></span></span></div>
<div style="text-align: justify;">
<span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;">그러나 코스닥 시장은 얘기가 완전 다릅니다. 선물시장의 거래대금이 그리 크지 않은 상황에서 레버리지 ETF가 지나치게 커져, 그 비중이 7~8배에 달합니다. 즉 레버리지 ETF의 리밸런싱 자금이 선물 시장에 상당한 충격으로 작용할 수 있을 가능성이, 아니 이미 충격으로 작용하고 있습니다. 만일 해당 ETF의 사이즈가 더욱 커진다면, 혹은 금융위기 급 충격이 온다면 해당 ETF에서 파생되는 물량으로 발생하는 선물 시장의 충격이 있을 수 있으며, 이로 인해 현물 시장에도 영향을 미치는 'wag the dog' 현상이 나올 가능성이 언제나 열려 있습니다.</span></span></div>
<div style="text-align: justify;">
<span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;"><br /></span></span></div>
<div style="text-align: justify;">
<span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;"><br /></span></span></div>
<div style="text-align: justify;">
<span style="color: magenta; font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;"><b>물론 이러한 시장의 구조, 눈치(?), 지를 수 있는 용기만 있다면 오르든 내리든 달콤한 포도주는 언제나 마실 수 있겠죠. 그게 설령 누군가의 피일지라도...</b></span></span></div>
<div style="text-align: justify;">
<span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;"><br /></span></span></div>
<div style="text-align: justify;">
<span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;"><br /></span></span></div>
<div style="text-align: justify;">
<span style="font-family: Arial;"><span style="font-size: 14.6667px; white-space: pre-wrap;"><br /></span></span></div>
</div>
Unknownnoreply@blogger.com1tag:blogger.com,1999:blog-23651150467485474.post-52350440177143213772019-04-09T15:11:00.000+09:002019-04-09T16:35:52.497+09:002018년 최고의 수익을 거둔 헤지펀드 매니저와 트레이더들<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjuEmODc_v8LbKQ9QraHdF0pqlZox_L86MBrrHaDmyfL-rdsD9JsjFA_fX5EGpKS9cu78vU41P4CgObFCQtM9osm12_qXrcy5M-XoVSD_44TOQpK6ey2CJpJyW91j3C_FBwkTBEkq1VZQ/s1600/960x0.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="640" data-original-width="960" height="266" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjuEmODc_v8LbKQ9QraHdF0pqlZox_L86MBrrHaDmyfL-rdsD9JsjFA_fX5EGpKS9cu78vU41P4CgObFCQtM9osm12_qXrcy5M-XoVSD_44TOQpK6ey2CJpJyW91j3C_FBwkTBEkq1VZQ/s400/960x0.jpg" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
본 글은 포브스의 <b><a href="https://www.forbes.com/sites/nathanvardi/2019/03/20/the-highest-earning-hedge-fund-managers-and-traders/#5d2b6cf340eb" target="_blank">The Highest-Earning Hedge Fund Managers And Traders [Link]</a></b> 를 번역하였습니다. </div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
<b><span style="color: magenta;"><i>2018년 최고의 수익을 거둔 헤지펀드 매니저와 트레이더들</i></span></b></div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
컴퓨터 괴짜들이 월가를 점령하고 있습니다. 2018년은 대부분 헤지펀드 매니저들이 손실을 본 실망스러운 한 해 였지만, 특출난 퀀트 트레이더들은 주목을 끌었습니다. 2018년 최고의 수익을 거둔 헤지펀드 매니저와 트레이더 20명 중 절반 이상이 컴퓨터를 이용한 알고리즘 트레이딩과 관련 있습니다.</div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
역대 퀀트 트레이더 중 가장 유명한 짐 사이먼스는, 16억 달러를 벌었습니다. 그는 현재 600억 달러를 운용하는 르네상스 테크놀러지를 설립하였으며, 일상적 업무에서는 2010년에 은퇴하였음에도 불구하고 여전히 회사 내에서 중요한 업무를 맡고 있습니다. 르네상스 테크놀러지의 헤지펀드는 2018년에도 훌륭한 성과를 기록하였습니다. 예를 들어, ‘Renaissance Institutional Equities’ 펀드는 지난해 8.5%의 수익률을, ‘Renaissance Institutional Diversified Global Equities’ 펀드는 10.3%의 수익률을 기록하였습니다. 짐 사이먼스의 수익은 르네상스의 메달리온 펀드 덕분에 더욱 커졌습니다. 이 펀드는 투자 전략이 외부에 전혀 알려지지 않은채 운용되는 100억 달러 가량의 펀드이며, 오직 짐 사이먼과 르네상스의 파트너 및 직원들을 위해서만 운용됩니다.</div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
헤지펀드 업계는 2018년 비참한 한해를 보냈습니다. HFR(헤지펀드 수익률 인덱스)에 따르면, 헤지펀드 매니저는 평균 -4.07%의 성과를 기록하였습니다. 이는 지난해 -4.38%를 기록한 미국 주식시장보다 약간 나은 정도에 지나지 않습니다. 그러나 최고 연봉을 기록한 20명의 헤지 펀드 매니저와 트레이더들의 2018년 수익을 합치면 총 103억 달러에 이릅니다. 이는 매우 큰 숫자지만, 이러한 수익은 금융 위기 이후 여전히 가장 낮은 수준입니다. 포브스의 조사에 따르면, 2015년 최고의 수익을 거둔 20명의 합계는 114억 달러였으며, 2011년에는 117억 달러였습니다.</div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
이러한 고수익자에는, 운용 자산의 대부분 혹은 전체가 본인의 자산인 헤지펀드 매니저와 트레이더도 포함하였으며, 그럼에도 불구하고 상위 20명에 이름을 올린 사람들이 있습니다. 예를 들어, 마이클 플랫의 BlueCrest Capital Management은 2015년 이후 모든 외부 자금을 고객들에게 돌려주었습니다. 그 후 그들은 매우 훌륭한 트레이딩 성과를 기록하였으며, 2018년 에는 모든 비용을 제하고도 25%의 놀라운 수익을 기록하였습니다. 플랫은 지난해 대략 12억 달러를 벌어들인 것으로 추정됩니다.</div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
운용 자산이 1천 6백억 달러 정도로 세계에서 가장 큰 헤지펀드인 레이 달리오의 브릿지워터는, 2018년 혼재된 성과를 기록하였습니다. 브릿지워의 투자 프로세스는 경제 및 기타 신호를 검색하는 데이터 기반입니다. 회사는 전통적인 ’기본적 분석’을 수행한 후, 이를 트레이딩 알고리즘으로 녹여냅니다. ‘Pure Alpha’ 헤지펀드는 2018년 비용을 제한 후 14.6%의 수익을 기록하였습니다. 그러나 달리오의 심블이자 본인이 가장 많은 투자를 하고 있는 ‘All Weather’ 펀드는 6% 가량의 손실을 기록하였습니다. 달리오는 2018년에 대략 10억 달러의 수익을 기록하였습니다.</div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
켄 그리핀은 정량적, 기본적 트레이딩 기술을 사용하여 시타델을 300억 달러 짜리 헤지펀드로 만들었습니다. 그는 2018년에도 견고한 성과를 기록하였으며, 금융위기로 인한 파멸의 위기에서 벗어난 후 꾸준한 성과를 보이고 있습니다. 시타델의 대표적 펀드는 지난해 9.1%의 수익을 기록하였으며, 다른 펀드들 역시 각각 수수료 이후 6%에서 9% 가량의 수익을 기록하였습니다. 그리핀은 지난해 대략 8억 7천만 달러를 벌었습니다.</div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
John Overdeck 과 David Siegel은 그들이 설립한 퀀트 트레이딩 회사인 ‘투 시그마’를 세계에서 가장 큰 헤지펀드 중 하나로 키웠습니다. 그들의 펀드 역시 2018년 훌륭한 성과를 기록하였습니다. 예를 들어, 투 시그마의 ‘Absolute Return’ 펀드는 11%의 수익을, ‘Compass’ 펀드는 14%의 순 수익률을 기록하였습니다. Overdeck과 Siegel은 지난해 각각 7억 달러 가량의 수익을 거두었습니다.</div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
이 두명은 콜럼비아 대학교의 컴퓨터 사이언스 교수 출신인 데이비드 쇼가 설립한 퀀트 트레이딩 회사인 D.E.Shaw에서 직장생활을 시작할 때 만나게 되었습니다. 데이비드 쇼는 회사 운영 관리에서는 한 걸음 물러 났지만 여전히 회사에 관여하고 있습니다. D.E.Shaw는 현재 500억 달러 가량을 운용하고 있으며, ‘Composite Fund’는 지난해 11%의 성과를 기록하였습니다. 쇼는 작년동안 5억 달러 가량을 벌었습니다.</div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
Israel Englander은 퀀트로 알려져 있지는 않습니다. 그는 밀레니엄 매니지먼트를 설립하였으며, 이 회사는 모든 자산에서 다양한 스타일의 팀으로 운용하는 멀티-매니저 전략을 이용하여 350억 달러 가량을 운용하고 있습니다. 밀레니엄의 성공 중 많은 부분은 퀀트 트레이딩 자회사인 월드퀀트에서 찾을 수 있습니다. 지난해 밀레니엄의 헤지펀드는 4.8%의 순 수익률을 기록하였으며, Englander는 약 5억 달러를 벌었습니다.</div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
2018년 최고의 수익을 기록한 헤지펀드 매니저와 트레이더를 결정하기 위해, 포브스는 헤지펀드의 수익률들을 조사했고 여러 운용사의 수수료와 소유 구조를 이해하기 위해 노력했습니다. 헤지펀드는 일반적으로 2%의 운용보수와 20%의 성과 보수를 부과하지만, 조사 결과 여러 종류의 수수료 형태 또한 존재했습니다. 또한, 우리의 조사에는 각 펀드에 매니저들의 투자지분에 따른 이익과 손실 분도 포함됩니다. </div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<span style="background-color: transparent; color: #333333; font-family: "arial"; font-size: 11.5pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;"><br /></span></div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<span style="background-color: transparent; color: #333333; font-family: "arial"; font-size: 11.5pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;"><br /></span></div>
<div dir="ltr" style="margin-left: 0pt;">
<table style="border-collapse: collapse; border: none; text-align: center;"><colgroup><col width="42"></col><col width="134"></col><col width="340"></col><col width="85"></col></colgroup><tbody>
<tr style="height: 0pt;"><td style="border-bottom: solid #000000 1pt; border-left: solid #000000 1pt; border-right: solid #000000 1pt; border-top: solid #000000 1pt; padding: 5pt 5pt 5pt 5pt; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<span style="background-color: transparent; color: #333333; font-family: "arial"; font-size: 10pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;">순위</span></div>
</td><td style="border-bottom: solid #000000 1pt; border-left: solid #000000 1pt; border-right: solid #000000 1pt; border-top: solid #000000 1pt; padding: 5pt 5pt 5pt 5pt; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<span style="background-color: transparent; color: #333333; font-family: "arial"; font-size: 10pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;">이름</span></div>
</td><td style="border-bottom: solid #000000 1pt; border-left: solid #000000 1pt; border-right: solid #000000 1pt; border-top: solid #000000 1pt; padding: 5pt 5pt 5pt 5pt; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<span style="background-color: transparent; color: #333333; font-family: "arial"; font-size: 10pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;">회사 (직위)</span></div>
</td><td style="border-bottom: solid #000000 1pt; border-left: solid #000000 1pt; border-right: solid #000000 1pt; border-top: solid #000000 1pt; padding: 5pt 5pt 5pt 5pt; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<span style="background-color: transparent; color: #333333; font-family: "arial"; font-size: 10pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;">수익 (달러)</span></div>
</td></tr>
<tr style="height: 0pt;"><td style="border-bottom: solid #000000 1pt; border-left: solid #000000 1pt; border-right: solid #000000 1pt; border-top: solid #000000 1pt; padding: 5pt 5pt 5pt 5pt; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<span style="background-color: transparent; color: #333333; font-family: "arial"; font-size: 10pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;">1</span></div>
</td><td style="border-bottom: solid #000000 1pt; border-left: solid #000000 1pt; border-right: solid #000000 1pt; border-top: solid #000000 1pt; padding: 5pt 5pt 5pt 5pt; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<span style="background-color: transparent; color: #333333; font-family: "arial"; font-size: 10pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;">Jim Simons</span></div>
</td><td style="border-bottom: solid #000000 1pt; border-left: solid #000000 1pt; border-right: solid #000000 1pt; border-top: solid #000000 1pt; padding: 5pt 5pt 5pt 5pt; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<span style="background-color: transparent; color: #333333; font-family: "arial"; font-size: 10pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;">Renaissance Technologies (Founder)</span></div>
</td><td style="border-bottom: solid #000000 1pt; border-left: solid #000000 1pt; border-right: solid #000000 1pt; border-top: solid #000000 1pt; padding: 5pt 5pt 5pt 5pt; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<span style="background-color: transparent; color: #333333; font-family: "arial"; font-size: 10pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;">16억</span></div>
</td></tr>
<tr style="height: 0pt;"><td style="border-bottom: solid #000000 1pt; border-left: solid #000000 1pt; border-right: solid #000000 1pt; border-top: solid #000000 1pt; padding: 5pt 5pt 5pt 5pt; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<span style="background-color: transparent; color: #333333; font-family: "arial"; font-size: 10pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;">2</span></div>
</td><td style="border-bottom: solid #000000 1pt; border-left: solid #000000 1pt; border-right: solid #000000 1pt; border-top: solid #000000 1pt; padding: 5pt 5pt 5pt 5pt; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<span style="background-color: transparent; color: #333333; font-family: "arial"; font-size: 10pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;">Mike Platt</span></div>
</td><td style="border-bottom: solid #000000 1pt; border-left: solid #000000 1pt; border-right: solid #000000 1pt; border-top: solid #000000 1pt; padding: 5pt 5pt 5pt 5pt; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<span style="background-color: transparent; color: #333333; font-family: "arial"; font-size: 10pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;">BlueCrest Capital Management (Founder)</span></div>
</td><td style="border-bottom: solid #000000 1pt; border-left: solid #000000 1pt; border-right: solid #000000 1pt; border-top: solid #000000 1pt; padding: 5pt 5pt 5pt 5pt; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<span style="background-color: transparent; color: #333333; font-family: "arial"; font-size: 10pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;">12억</span></div>
</td></tr>
<tr style="height: 0pt;"><td style="border-bottom: solid #000000 1pt; border-left: solid #000000 1pt; border-right: solid #000000 1pt; border-top: solid #000000 1pt; padding: 5pt 5pt 5pt 5pt; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<span style="background-color: transparent; color: #333333; font-family: "arial"; font-size: 10pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;">3</span></div>
</td><td style="border-bottom: solid #000000 1pt; border-left: solid #000000 1pt; border-right: solid #000000 1pt; border-top: solid #000000 1pt; padding: 5pt 5pt 5pt 5pt; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<span style="background-color: transparent; color: #333333; font-family: "arial"; font-size: 10pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;">Ray Dalio</span></div>
</td><td style="border-bottom: solid #000000 1pt; border-left: solid #000000 1pt; border-right: solid #000000 1pt; border-top: solid #000000 1pt; padding: 5pt 5pt 5pt 5pt; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<span style="background-color: transparent; color: #333333; font-family: "arial"; font-size: 10pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;">Bridgewater Associates (Founder)</span></div>
</td><td style="border-bottom: solid #000000 1pt; border-left: solid #000000 1pt; border-right: solid #000000 1pt; border-top: solid #000000 1pt; padding: 5pt 5pt 5pt 5pt; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<span style="background-color: transparent; color: #333333; font-family: "arial"; font-size: 10pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;">10억</span></div>
</td></tr>
<tr style="height: 0pt;"><td style="border-bottom: solid #000000 1pt; border-left: solid #000000 1pt; border-right: solid #000000 1pt; border-top: solid #000000 1pt; padding: 5pt 5pt 5pt 5pt; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<span style="background-color: transparent; color: #333333; font-family: "arial"; font-size: 10pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;">4</span></div>
</td><td style="border-bottom: solid #000000 1pt; border-left: solid #000000 1pt; border-right: solid #000000 1pt; border-top: solid #000000 1pt; padding: 5pt 5pt 5pt 5pt; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<span style="background-color: transparent; color: #333333; font-family: "arial"; font-size: 10pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;">Ken Griffin</span></div>
</td><td style="border-bottom: solid #000000 1pt; border-left: solid #000000 1pt; border-right: solid #000000 1pt; border-top: solid #000000 1pt; padding: 5pt 5pt 5pt 5pt; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<span style="background-color: transparent; color: #333333; font-family: "arial"; font-size: 10pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;">Citadel (Founder)</span></div>
</td><td style="border-bottom: solid #000000 1pt; border-left: solid #000000 1pt; border-right: solid #000000 1pt; border-top: solid #000000 1pt; padding: 5pt 5pt 5pt 5pt; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<span style="background-color: transparent; color: #333333; font-family: "arial"; font-size: 10pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;">8억 7천</span></div>
</td></tr>
<tr style="height: 0pt;"><td style="border-bottom: solid #000000 1pt; border-left: solid #000000 1pt; border-right: solid #000000 1pt; border-top: solid #000000 1pt; padding: 5pt 5pt 5pt 5pt; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<span style="background-color: transparent; color: #333333; font-family: "arial"; font-size: 10pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;">5</span></div>
</td><td style="border-bottom: solid #000000 1pt; border-left: solid #000000 1pt; border-right: solid #000000 1pt; border-top: solid #000000 1pt; padding: 5pt 5pt 5pt 5pt; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<span style="background-color: transparent; color: #333333; font-family: "arial"; font-size: 10pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;">John Overdeck</span></div>
</td><td style="border-bottom: solid #000000 1pt; border-left: solid #000000 1pt; border-right: solid #000000 1pt; border-top: solid #000000 1pt; padding: 5pt 5pt 5pt 5pt; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<span style="background-color: transparent; color: #333333; font-family: "arial"; font-size: 10pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;">Two Sigma Investments (Founder)</span></div>
</td><td style="border-bottom: solid #000000 1pt; border-left: solid #000000 1pt; border-right: solid #000000 1pt; border-top: solid #000000 1pt; padding: 5pt 5pt 5pt 5pt; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<span style="background-color: transparent; color: #333333; font-family: "arial"; font-size: 10pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;">7억</span></div>
</td></tr>
<tr style="height: 0pt;"><td style="border-bottom: solid #000000 1pt; border-left: solid #000000 1pt; border-right: solid #000000 1pt; border-top: solid #000000 1pt; padding: 5pt 5pt 5pt 5pt; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<span style="background-color: transparent; color: #333333; font-family: "arial"; font-size: 10pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;">5</span></div>
</td><td style="border-bottom: solid #000000 1pt; border-left: solid #000000 1pt; border-right: solid #000000 1pt; border-top: solid #000000 1pt; padding: 5pt 5pt 5pt 5pt; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<span style="background-color: transparent; color: #333333; font-family: "arial"; font-size: 10pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;">David Siegel</span></div>
</td><td style="border-bottom: solid #000000 1pt; border-left: solid #000000 1pt; border-right: solid #000000 1pt; border-top: solid #000000 1pt; padding: 5pt 5pt 5pt 5pt; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<span style="background-color: transparent; color: #333333; font-family: "arial"; font-size: 10pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;">Two Sigma Investments (Founder)</span></div>
</td><td style="border-bottom: solid #000000 1pt; border-left: solid #000000 1pt; border-right: solid #000000 1pt; border-top: solid #000000 1pt; padding: 5pt 5pt 5pt 5pt; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<span style="background-color: transparent; color: #333333; font-family: "arial"; font-size: 10pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;">7억</span></div>
</td></tr>
<tr style="height: 0pt;"><td style="border-bottom: solid #000000 1pt; border-left: solid #000000 1pt; border-right: solid #000000 1pt; border-top: solid #000000 1pt; padding: 5pt 5pt 5pt 5pt; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<span style="background-color: transparent; color: #333333; font-family: "arial"; font-size: 10pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;">7</span></div>
</td><td style="border-bottom: solid #000000 1pt; border-left: solid #000000 1pt; border-right: solid #000000 1pt; border-top: solid #000000 1pt; padding: 5pt 5pt 5pt 5pt; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<span style="background-color: transparent; color: #333333; font-family: "arial"; font-size: 10pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;">David Shaw</span></div>
</td><td style="border-bottom: solid #000000 1pt; border-left: solid #000000 1pt; border-right: solid #000000 1pt; border-top: solid #000000 1pt; padding: 5pt 5pt 5pt 5pt; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<span style="background-color: transparent; color: #333333; font-family: "arial"; font-size: 10pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;">D.E.Shaw (Founder)</span></div>
</td><td style="border-bottom: solid #000000 1pt; border-left: solid #000000 1pt; border-right: solid #000000 1pt; border-top: solid #000000 1pt; padding: 5pt 5pt 5pt 5pt; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<span style="background-color: transparent; color: #333333; font-family: "arial"; font-size: 10pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;">5억</span></div>
</td></tr>
<tr style="height: 0pt;"><td style="border-bottom: solid #000000 1pt; border-left: solid #000000 1pt; border-right: solid #000000 1pt; border-top: solid #000000 1pt; padding: 5pt 5pt 5pt 5pt; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<span style="background-color: transparent; color: #333333; font-family: "arial"; font-size: 10pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;">7</span></div>
</td><td style="border-bottom: solid #000000 1pt; border-left: solid #000000 1pt; border-right: solid #000000 1pt; border-top: solid #000000 1pt; padding: 5pt 5pt 5pt 5pt; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<span style="background-color: transparent; color: #333333; font-family: "arial"; font-size: 10pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;">Israel Englander</span></div>
</td><td style="border-bottom: solid #000000 1pt; border-left: solid #000000 1pt; border-right: solid #000000 1pt; border-top: solid #000000 1pt; padding: 5pt 5pt 5pt 5pt; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<span style="background-color: transparent; color: #333333; font-family: "arial"; font-size: 10pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;">Millennium Management (Founder)</span></div>
</td><td style="border-bottom: solid #000000 1pt; border-left: solid #000000 1pt; border-right: solid #000000 1pt; border-top: solid #000000 1pt; padding: 5pt 5pt 5pt 5pt; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<span style="background-color: transparent; color: #333333; font-family: "arial"; font-size: 10pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;">5억</span></div>
</td></tr>
<tr style="height: 0pt;"><td style="border-bottom: solid #000000 1pt; border-left: solid #000000 1pt; border-right: solid #000000 1pt; border-top: solid #000000 1pt; padding: 5pt 5pt 5pt 5pt; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<span style="background-color: transparent; color: #333333; font-family: "arial"; font-size: 10pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;">7</span></div>
</td><td style="border-bottom: solid #000000 1pt; border-left: solid #000000 1pt; border-right: solid #000000 1pt; border-top: solid #000000 1pt; padding: 5pt 5pt 5pt 5pt; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<span style="background-color: transparent; color: #333333; font-family: "arial"; font-size: 10pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;">Paul Tudor Jones</span></div>
</td><td style="border-bottom: solid #000000 1pt; border-left: solid #000000 1pt; border-right: solid #000000 1pt; border-top: solid #000000 1pt; padding: 5pt 5pt 5pt 5pt; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<span style="background-color: transparent; color: #333333; font-family: "arial"; font-size: 10pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;">Tudor Investments Corporation (Founder)</span></div>
</td><td style="border-bottom: solid #000000 1pt; border-left: solid #000000 1pt; border-right: solid #000000 1pt; border-top: solid #000000 1pt; padding: 5pt 5pt 5pt 5pt; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<span style="background-color: transparent; color: #333333; font-family: "arial"; font-size: 10pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;">5억</span></div>
</td></tr>
<tr style="height: 0pt;"><td style="border-bottom: solid #000000 1pt; border-left: solid #000000 1pt; border-right: solid #000000 1pt; border-top: solid #000000 1pt; padding: 5pt 5pt 5pt 5pt; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<span style="background-color: transparent; color: #333333; font-family: "arial"; font-size: 10pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;">7</span></div>
</td><td style="border-bottom: solid #000000 1pt; border-left: solid #000000 1pt; border-right: solid #000000 1pt; border-top: solid #000000 1pt; padding: 5pt 5pt 5pt 5pt; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<span style="background-color: transparent; color: #333333; font-family: "arial"; font-size: 10pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;">Jeffrey Talpins</span></div>
</td><td style="border-bottom: solid #000000 1pt; border-left: solid #000000 1pt; border-right: solid #000000 1pt; border-top: solid #000000 1pt; padding: 5pt 5pt 5pt 5pt; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<span style="background-color: transparent; color: #333333; font-family: "arial"; font-size: 10pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;">Element Capital Management (Founder)</span></div>
</td><td style="border-bottom: solid #000000 1pt; border-left: solid #000000 1pt; border-right: solid #000000 1pt; border-top: solid #000000 1pt; padding: 5pt 5pt 5pt 5pt; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<span style="background-color: transparent; color: #333333; font-family: "arial"; font-size: 10pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;">5억</span></div>
</td></tr>
<tr style="height: 0pt;"><td style="border-bottom: solid #000000 1pt; border-left: solid #000000 1pt; border-right: solid #000000 1pt; border-top: solid #000000 1pt; padding: 5pt 5pt 5pt 5pt; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<span style="background-color: transparent; color: #333333; font-family: "arial"; font-size: 10pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;">11</span></div>
</td><td style="border-bottom: solid #000000 1pt; border-left: solid #000000 1pt; border-right: solid #000000 1pt; border-top: solid #000000 1pt; padding: 5pt 5pt 5pt 5pt; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<span style="background-color: transparent; color: #333333; font-family: "arial"; font-size: 10pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;">Carl Icahn</span></div>
</td><td style="border-bottom: solid #000000 1pt; border-left: solid #000000 1pt; border-right: solid #000000 1pt; border-top: solid #000000 1pt; padding: 5pt 5pt 5pt 5pt; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<span style="background-color: transparent; color: #333333; font-family: "arial"; font-size: 10pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;">Icahn Capital Management (Founder)</span></div>
</td><td style="border-bottom: solid #000000 1pt; border-left: solid #000000 1pt; border-right: solid #000000 1pt; border-top: solid #000000 1pt; padding: 5pt 5pt 5pt 5pt; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<span style="background-color: transparent; color: #333333; font-family: "arial"; font-size: 10pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;">4억 8천</span></div>
</td></tr>
<tr style="height: 0pt;"><td style="border-bottom: solid #000000 1pt; border-left: solid #000000 1pt; border-right: solid #000000 1pt; border-top: solid #000000 1pt; padding: 5pt 5pt 5pt 5pt; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<span style="background-color: transparent; color: #333333; font-family: "arial"; font-size: 10pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;">12</span></div>
</td><td style="border-bottom: solid #000000 1pt; border-left: solid #000000 1pt; border-right: solid #000000 1pt; border-top: solid #000000 1pt; padding: 5pt 5pt 5pt 5pt; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<span style="background-color: transparent; color: #333333; font-family: "arial"; font-size: 10pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;">Chase Coleman</span></div>
</td><td style="border-bottom: solid #000000 1pt; border-left: solid #000000 1pt; border-right: solid #000000 1pt; border-top: solid #000000 1pt; padding: 5pt 5pt 5pt 5pt; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<span style="background-color: transparent; color: #333333; font-family: "arial"; font-size: 10pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;">Tiger Global Management (Founder)</span></div>
</td><td style="border-bottom: solid #000000 1pt; border-left: solid #000000 1pt; border-right: solid #000000 1pt; border-top: solid #000000 1pt; padding: 5pt 5pt 5pt 5pt; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<span style="background-color: transparent; color: #333333; font-family: "arial"; font-size: 10pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;">4억 5천</span></div>
</td></tr>
<tr style="height: 0pt;"><td style="border-bottom: solid #000000 1pt; border-left: solid #000000 1pt; border-right: solid #000000 1pt; border-top: solid #000000 1pt; padding: 5pt 5pt 5pt 5pt; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<span style="background-color: transparent; color: #333333; font-family: "arial"; font-size: 10pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;">13</span></div>
</td><td style="border-bottom: solid #000000 1pt; border-left: solid #000000 1pt; border-right: solid #000000 1pt; border-top: solid #000000 1pt; padding: 5pt 5pt 5pt 5pt; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<span style="background-color: transparent; color: #333333; font-family: "arial"; font-size: 10pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;">Alan Howard</span></div>
</td><td style="border-bottom: solid #000000 1pt; border-left: solid #000000 1pt; border-right: solid #000000 1pt; border-top: solid #000000 1pt; padding: 5pt 5pt 5pt 5pt; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<span style="background-color: transparent; color: #333333; font-family: "arial"; font-size: 10pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;">Brevan Howard Asset Management (Founder)</span></div>
</td><td style="border-bottom: solid #000000 1pt; border-left: solid #000000 1pt; border-right: solid #000000 1pt; border-top: solid #000000 1pt; padding: 5pt 5pt 5pt 5pt; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<span style="background-color: transparent; color: #333333; font-family: "arial"; font-size: 10pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;">3억</span></div>
</td></tr>
<tr style="height: 0pt;"><td style="border-bottom: solid #000000 1pt; border-left: solid #000000 1pt; border-right: solid #000000 1pt; border-top: solid #000000 1pt; padding: 5pt 5pt 5pt 5pt; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<span style="background-color: transparent; color: #333333; font-family: "arial"; font-size: 10pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;">14</span></div>
</td><td style="border-bottom: solid #000000 1pt; border-left: solid #000000 1pt; border-right: solid #000000 1pt; border-top: solid #000000 1pt; padding: 5pt 5pt 5pt 5pt; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<span style="background-color: transparent; color: #333333; font-family: "arial"; font-size: 10pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;">Crispin Odey</span></div>
</td><td style="border-bottom: solid #000000 1pt; border-left: solid #000000 1pt; border-right: solid #000000 1pt; border-top: solid #000000 1pt; padding: 5pt 5pt 5pt 5pt; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<span style="background-color: transparent; color: #333333; font-family: "arial"; font-size: 10pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;">Odey Asset Management (Founder)</span></div>
</td><td style="border-bottom: solid #000000 1pt; border-left: solid #000000 1pt; border-right: solid #000000 1pt; border-top: solid #000000 1pt; padding: 5pt 5pt 5pt 5pt; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<span style="background-color: transparent; color: #333333; font-family: "arial"; font-size: 10pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;">2억</span></div>
</td></tr>
<tr style="height: 0pt;"><td style="border-bottom: solid #000000 1pt; border-left: solid #000000 1pt; border-right: solid #000000 1pt; border-top: solid #000000 1pt; padding: 5pt 5pt 5pt 5pt; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<span style="background-color: transparent; color: #333333; font-family: "arial"; font-size: 10pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;">15</span></div>
</td><td style="border-bottom: solid #000000 1pt; border-left: solid #000000 1pt; border-right: solid #000000 1pt; border-top: solid #000000 1pt; padding: 5pt 5pt 5pt 5pt; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<span style="background-color: transparent; color: #333333; font-family: "arial"; font-size: 10pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;">Greg Jensen</span></div>
</td><td style="border-bottom: solid #000000 1pt; border-left: solid #000000 1pt; border-right: solid #000000 1pt; border-top: solid #000000 1pt; padding: 5pt 5pt 5pt 5pt; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<span style="background-color: transparent; color: #333333; font-family: "arial"; font-size: 10pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;">Bridgewater Associates (Co-CIO)</span></div>
</td><td style="border-bottom: solid #000000 1pt; border-left: solid #000000 1pt; border-right: solid #000000 1pt; border-top: solid #000000 1pt; padding: 5pt 5pt 5pt 5pt; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<span style="background-color: transparent; color: #333333; font-family: "arial"; font-size: 10pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;">1억 5천</span></div>
</td></tr>
<tr style="height: 0pt;"><td style="border-bottom: solid #000000 1pt; border-left: solid #000000 1pt; border-right: solid #000000 1pt; border-top: solid #000000 1pt; padding: 5pt 5pt 5pt 5pt; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<span style="background-color: transparent; color: #333333; font-family: "arial"; font-size: 10pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;">15</span></div>
</td><td style="border-bottom: solid #000000 1pt; border-left: solid #000000 1pt; border-right: solid #000000 1pt; border-top: solid #000000 1pt; padding: 5pt 5pt 5pt 5pt; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<span style="background-color: transparent; color: #333333; font-family: "arial"; font-size: 10pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;">Robert Prince</span></div>
</td><td style="border-bottom: solid #000000 1pt; border-left: solid #000000 1pt; border-right: solid #000000 1pt; border-top: solid #000000 1pt; padding: 5pt 5pt 5pt 5pt; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<span style="background-color: transparent; color: #333333; font-family: "arial"; font-size: 10pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;">Bridgewater Associates (Co-CIO)</span></div>
</td><td style="border-bottom: solid #000000 1pt; border-left: solid #000000 1pt; border-right: solid #000000 1pt; border-top: solid #000000 1pt; padding: 5pt 5pt 5pt 5pt; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<span style="background-color: transparent; color: #333333; font-family: "arial"; font-size: 10pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;">1억 5천</span></div>
</td></tr>
<tr style="height: 0pt;"><td style="border-bottom: solid #000000 1pt; border-left: solid #000000 1pt; border-right: solid #000000 1pt; border-top: solid #000000 1pt; padding: 5pt 5pt 5pt 5pt; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<span style="background-color: transparent; color: #333333; font-family: "arial"; font-size: 10pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;">15</span></div>
</td><td style="border-bottom: solid #000000 1pt; border-left: solid #000000 1pt; border-right: solid #000000 1pt; border-top: solid #000000 1pt; padding: 5pt 5pt 5pt 5pt; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<span style="background-color: transparent; color: #333333; font-family: "arial"; font-size: 10pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;">Robert Prince</span></div>
</td><td style="border-bottom: solid #000000 1pt; border-left: solid #000000 1pt; border-right: solid #000000 1pt; border-top: solid #000000 1pt; padding: 5pt 5pt 5pt 5pt; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<span style="background-color: transparent; color: #333333; font-family: "arial"; font-size: 10pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;">Bridgewater Associates (Co-CIO)</span></div>
</td><td style="border-bottom: solid #000000 1pt; border-left: solid #000000 1pt; border-right: solid #000000 1pt; border-top: solid #000000 1pt; padding: 5pt 5pt 5pt 5pt; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<span style="background-color: transparent; color: #333333; font-family: "arial"; font-size: 10pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;">1억 5천</span></div>
</td></tr>
<tr style="height: 0pt;"><td style="border-bottom: solid #000000 1pt; border-left: solid #000000 1pt; border-right: solid #000000 1pt; border-top: solid #000000 1pt; padding: 5pt 5pt 5pt 5pt; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<span style="background-color: transparent; color: #333333; font-family: "arial"; font-size: 10pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;">15</span></div>
</td><td style="border-bottom: solid #000000 1pt; border-left: solid #000000 1pt; border-right: solid #000000 1pt; border-top: solid #000000 1pt; padding: 5pt 5pt 5pt 5pt; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<span style="background-color: transparent; color: #333333; font-family: "arial"; font-size: 10pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;">Peter Muller</span></div>
</td><td style="border-bottom: solid #000000 1pt; border-left: solid #000000 1pt; border-right: solid #000000 1pt; border-top: solid #000000 1pt; padding: 5pt 5pt 5pt 5pt; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<span style="background-color: transparent; color: #333333; font-family: "arial"; font-size: 10pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;">PDT Partners (Founder)</span></div>
</td><td style="border-bottom: solid #000000 1pt; border-left: solid #000000 1pt; border-right: solid #000000 1pt; border-top: solid #000000 1pt; padding: 5pt 5pt 5pt 5pt; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<span style="background-color: transparent; color: #333333; font-family: "arial"; font-size: 10pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;">1억 5천</span></div>
</td></tr>
<tr style="height: 0pt;"><td style="border-bottom: solid #000000 1pt; border-left: solid #000000 1pt; border-right: solid #000000 1pt; border-top: solid #000000 1pt; padding: 5pt 5pt 5pt 5pt; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<span style="background-color: transparent; color: #333333; font-family: "arial"; font-size: 10pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;">18</span></div>
</td><td style="border-bottom: solid #000000 1pt; border-left: solid #000000 1pt; border-right: solid #000000 1pt; border-top: solid #000000 1pt; padding: 5pt 5pt 5pt 5pt; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<span style="background-color: transparent; color: #333333; font-family: "arial"; font-size: 10pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;">Steven Schonfeld</span></div>
</td><td style="border-bottom: solid #000000 1pt; border-left: solid #000000 1pt; border-right: solid #000000 1pt; border-top: solid #000000 1pt; padding: 5pt 5pt 5pt 5pt; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<span style="background-color: transparent; color: #333333; font-family: "arial"; font-size: 10pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;">Schonfeld Strategic Advisors (Founder)</span></div>
</td><td style="border-bottom: solid #000000 1pt; border-left: solid #000000 1pt; border-right: solid #000000 1pt; border-top: solid #000000 1pt; padding: 5pt 5pt 5pt 5pt; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<span style="background-color: transparent; color: #333333; font-family: "arial"; font-size: 10pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;">1억 3천</span></div>
</td></tr>
<tr style="height: 0pt;"><td style="border-bottom: solid #000000 1pt; border-left: solid #000000 1pt; border-right: solid #000000 1pt; border-top: solid #000000 1pt; padding: 5pt 5pt 5pt 5pt; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<span style="background-color: transparent; color: #333333; font-family: "arial"; font-size: 10pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;">19</span></div>
</td><td style="border-bottom: solid #000000 1pt; border-left: solid #000000 1pt; border-right: solid #000000 1pt; border-top: solid #000000 1pt; padding: 5pt 5pt 5pt 5pt; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<span style="background-color: transparent; color: #333333; font-family: "arial"; font-size: 10pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;">Peter Brown</span></div>
</td><td style="border-bottom: solid #000000 1pt; border-left: solid #000000 1pt; border-right: solid #000000 1pt; border-top: solid #000000 1pt; padding: 5pt 5pt 5pt 5pt; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<span style="background-color: transparent; color: #333333; font-family: "arial"; font-size: 10pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;">Renaissance Technologies (CEO)</span></div>
</td><td style="border-bottom: solid #000000 1pt; border-left: solid #000000 1pt; border-right: solid #000000 1pt; border-top: solid #000000 1pt; padding: 5pt 5pt 5pt 5pt; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<span style="background-color: transparent; color: #333333; font-family: "arial"; font-size: 10pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;">1억</span></div>
</td></tr>
<tr style="height: 0pt;"><td style="border-bottom: solid #000000 1pt; border-left: solid #000000 1pt; border-right: solid #000000 1pt; border-top: solid #000000 1pt; padding: 5pt 5pt 5pt 5pt; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<span style="background-color: transparent; color: #333333; font-family: "arial"; font-size: 10pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;">19</span></div>
</td><td style="border-bottom: solid #000000 1pt; border-left: solid #000000 1pt; border-right: solid #000000 1pt; border-top: solid #000000 1pt; padding: 5pt 5pt 5pt 5pt; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<span style="background-color: transparent; color: #333333; font-family: "arial"; font-size: 10pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;">Paul Singer</span></div>
</td><td style="border-bottom: solid #000000 1pt; border-left: solid #000000 1pt; border-right: solid #000000 1pt; border-top: solid #000000 1pt; padding: 5pt 5pt 5pt 5pt; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<span style="background-color: transparent; color: #333333; font-family: "arial"; font-size: 10pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;">Elliott Management (Founder)</span></div>
</td><td style="border-bottom: solid #000000 1pt; border-left: solid #000000 1pt; border-right: solid #000000 1pt; border-top: solid #000000 1pt; padding: 5pt 5pt 5pt 5pt; vertical-align: top;"><div dir="ltr" style="line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; text-align: center;">
<span style="background-color: transparent; color: #333333; font-family: "arial"; font-size: 10pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;">1억</span></div>
</td></tr>
</tbody></table>
</div>
<div dir="ltr" style="line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt; text-align: justify;">
<span style="background-color: transparent; color: #333333; font-family: "arial"; font-size: 11.5pt; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;"><br /></span></div>
Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-23651150467485474.post-1080169737320831502019-03-24T15:01:00.000+09:002019-03-24T15:01:03.129+09:00퀀트 매니저는 어떻게 포트폴리오를 구성할까? (인덱스펀드 구성 예시)<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEglGjCtHjJWe_7GgZZxLJXUZfHUVC1cB0NJ0lCWBOrIB-2LeAHO-ZTECSA8_3DMqwAdxskhPDoEhYQNuHrb-iUpCyNo94ob3MvXuz0hESyp8J3vgMgIM9PblIvwZyYOmfpE31ZUYpPm_A/s1600/%25ED%2581%25AC%25EA%25B8%25B0%25EB%25B3%2580%25ED%2599%2598_unnamed.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="672" data-original-width="1200" height="223" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEglGjCtHjJWe_7GgZZxLJXUZfHUVC1cB0NJ0lCWBOrIB-2LeAHO-ZTECSA8_3DMqwAdxskhPDoEhYQNuHrb-iUpCyNo94ob3MvXuz0hESyp8J3vgMgIM9PblIvwZyYOmfpE31ZUYpPm_A/s400/%25ED%2581%25AC%25EA%25B8%25B0%25EB%25B3%2580%25ED%2599%2598_unnamed.jpg" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
아마 여러분이 퀀트 포트폴리오 매니저 업무를 담당한다면, 십중팔구 (인핸스드) 인덱스 펀드 매니지, 즉 패시브펀드 업무를 담당하실 겁니다. 인핸스드 인덱스 펀드의 운용은 그 중심이 되는 <b><i><span style="color: red;">기초지수의 추종,</span></i></b> 그리고 알파를 내기 위한 여러 방법으로 <b><i><span style="color: red;">차익거래, 대차, 배팅</span></i></b> 등의 방법을 이용합니다. </div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVlomdaKOXqmpfJfYckqWmwkWMM6r-1VgDiEunvp1eiU52Ff81FADGC68OBUZSCGfME8IOJTLon1x37CqAKLbZlejwqDAwrDXM8eYjAvXqMZohnzPKHzyhvPUrVbNkmYZhvSKYgdyCxA/s1600/1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="568" data-original-width="854" height="265" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVlomdaKOXqmpfJfYckqWmwkWMM6r-1VgDiEunvp1eiU52Ff81FADGC68OBUZSCGfME8IOJTLon1x37CqAKLbZlejwqDAwrDXM8eYjAvXqMZohnzPKHzyhvPUrVbNkmYZhvSKYgdyCxA/s400/1.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
먼저, 인덱스 펀드의 가장 중심이 되는 <b><i><span style="color: magenta;">기초지수의 추종</span></i></b>에 대해 살펴보도록 하겠습니다. 가장 많이 사용되는 기초지수는 각 국가의 주가지수이며, 우리나라의 경우 <b><span style="color: red;">KOSPI 200</span></b>지수를 대상으로 합니다.</div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
기초지수는 일반적으로 시가총액가중평균 방법을 사용합니다. 따라서 지수를 정확히 복제하기 위해서는 지수 내에 있는 각 종목들의 시가총액을비중을 알 필요가 있습니다. 시가총액은 <b><i><u>주가 * 상장주식수</u></i></b>로 이루어집니다. 그러나 각 기업의 상장된 모든 주식이 (자사주 등의 이유로) 거래가 되는 것은 아니며, 상장된 주식 중 유동적으로 거래되는 비율을 유동비라고 합니다. 따라서 지수를 만들때 시가총액은 <b><i><u>주가 * 상장주식수 * 유동비</u></i></b>로 계산됩니다.</div>
<br />
<br />
<div align="center">
<table border="1" cellpadding="0" cellspacing="0" class="MsoNormalTable" style="border-collapse: collapse; border: none; mso-border-alt: solid windowtext .5pt; mso-border-insideh: .5pt solid windowtext; mso-border-insidev: .5pt solid windowtext; mso-padding-alt: 0cm 4.95pt 0cm 4.95pt; mso-yfti-tbllook: 1184; width: 0px;">
<tbody>
<tr style="height: 10.45pt; mso-yfti-firstrow: yes; mso-yfti-irow: 0;">
<td style="background: #4E5C68; border: solid windowtext 1.0pt; height: 10.45pt; mso-border-alt: solid windowtext .5pt; padding: 0cm 4.95pt 0cm 4.95pt; width: 35.45pt;" width="47"></td>
<td style="background: #4E5C68; border-left: none; border: solid windowtext 1.0pt; height: 10.45pt; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; padding: 0cm 4.95pt 0cm 4.95pt; width: 63.55pt;" width="85"><div align="center" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-pagination: widow-orphan; text-align: center; text-autospace: ideograph-numeric ideograph-other; word-break: keep-all;">
<span style="color: white; font-size: 8.0pt;">종목</span><span lang="EN-US" style="color: white; font-family: "segoe ui" , sans-serif; font-size: 8.0pt;"><o:p></o:p></span></div>
</td>
<td style="background: #4E5C68; border-left: none; border: solid windowtext 1.0pt; height: 10.45pt; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; padding: 0cm 4.95pt 0cm 4.95pt; width: 69.25pt;" width="92"><div align="center" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-pagination: widow-orphan; text-align: center; text-autospace: ideograph-numeric ideograph-other; word-break: keep-all;">
<span style="color: white; font-size: 8.0pt;">종가</span><span lang="EN-US" style="color: white; font-family: "segoe ui" , sans-serif; font-size: 8.0pt;"><o:p></o:p></span></div>
</td>
<td style="background: #4E5C68; border-left: none; border: solid windowtext 1.0pt; height: 10.45pt; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; padding: 0cm 4.95pt 0cm 4.95pt; width: 90.9pt;" width="121"><div align="center" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-pagination: widow-orphan; text-align: center; text-autospace: ideograph-numeric ideograph-other; word-break: keep-all;">
<span style="color: white; font-size: 8.0pt;">주식수</span><span lang="EN-US" style="color: white; font-family: "segoe ui" , sans-serif; font-size: 8.0pt;"><o:p></o:p></span></div>
</td>
<td style="background: #4E5C68; border-left: none; border: solid windowtext 1.0pt; height: 10.45pt; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; padding: 0cm 4.95pt 0cm 4.95pt; width: 41.0pt;" width="55"><div align="center" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-pagination: widow-orphan; text-align: center; text-autospace: ideograph-numeric ideograph-other; word-break: keep-all;">
<span style="color: white; font-size: 8.0pt;">유동비</span><span style="color: white; font-family: "segoe ui" , sans-serif; font-size: 8.0pt;"> <span lang="EN-US"><o:p></o:p></span></span></div>
</td>
</tr>
<tr style="height: 10.45pt; mso-yfti-irow: 1;">
<td nowrap="" style="background: #4E5C68; border-top: none; border: solid windowtext 1.0pt; height: 10.45pt; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0cm 4.95pt 0cm 4.95pt; width: 35.45pt;" width="47"><div align="center" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-pagination: widow-orphan; text-align: center; text-autospace: ideograph-numeric ideograph-other; word-break: keep-all;">
<span lang="EN-US" style="color: white; font-family: "segoe ui" , sans-serif; font-size: 8.0pt;">1<o:p></o:p></span></div>
</td>
<td nowrap="" style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; height: 10.45pt; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0cm 4.95pt 0cm 4.95pt; width: 63.55pt;" width="85"><div align="center" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-pagination: widow-orphan; text-align: center; text-autospace: ideograph-numeric ideograph-other; word-break: keep-all;">
<span style="color: black; font-size: 8.0pt;">삼성전자</span><span lang="EN-US" style="color: black; font-family: "segoe ui" , sans-serif; font-size: 8.0pt;"><o:p></o:p></span></div>
</td>
<td nowrap="" style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; height: 10.45pt; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0cm 4.95pt 0cm 4.95pt; width: 69.25pt;" width="92"><div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-pagination: widow-orphan; text-align: right; text-autospace: ideograph-numeric ideograph-other; word-break: keep-all;">
<span lang="EN-US" style="color: black; font-family: "segoe ui" , sans-serif; font-size: 8.0pt;">45,850 <o:p></o:p></span></div>
</td>
<td nowrap="" style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; height: 10.45pt; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0cm 4.95pt 0cm 4.95pt; width: 90.9pt;" width="121"><div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-pagination: widow-orphan; text-align: right; text-autospace: ideograph-numeric ideograph-other; word-break: keep-all;">
<span lang="EN-US" style="color: black; font-family: "segoe ui" , sans-serif; font-size: 8.0pt;">5,969,782,550 <o:p></o:p></span></div>
</td>
<td nowrap="" style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; height: 10.45pt; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0cm 4.95pt 0cm 4.95pt; width: 41.0pt;" width="55"><div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-pagination: widow-orphan; text-align: right; text-autospace: ideograph-numeric ideograph-other; word-break: keep-all;">
<span lang="EN-US" style="color: black; font-family: "segoe ui" , sans-serif; font-size: 8.0pt;">0.7879 <o:p></o:p></span></div>
</td>
</tr>
<tr style="height: 10.45pt; mso-yfti-irow: 2;">
<td nowrap="" style="background: #4E5C68; border-top: none; border: solid windowtext 1.0pt; height: 10.45pt; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0cm 4.95pt 0cm 4.95pt; width: 35.45pt;" width="47"><div align="center" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-pagination: widow-orphan; text-align: center; text-autospace: ideograph-numeric ideograph-other; word-break: keep-all;">
<span lang="EN-US" style="color: white; font-family: "segoe ui" , sans-serif; font-size: 8.0pt;">2<o:p></o:p></span></div>
</td>
<td nowrap="" style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; height: 10.45pt; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0cm 4.95pt 0cm 4.95pt; width: 63.55pt;" width="85"><div align="center" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-pagination: widow-orphan; text-align: center; text-autospace: ideograph-numeric ideograph-other; word-break: keep-all;">
<span lang="EN-US" style="color: black; font-family: "segoe ui" , sans-serif; font-size: 8.0pt;">SK</span><span style="color: black; font-size: 8.0pt;">하이닉스</span><span lang="EN-US" style="color: black; font-family: "segoe ui" , sans-serif; font-size: 8.0pt;"><o:p></o:p></span></div>
</td>
<td nowrap="" style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; height: 10.45pt; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0cm 4.95pt 0cm 4.95pt; width: 69.25pt;" width="92"><div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-pagination: widow-orphan; text-align: right; text-autospace: ideograph-numeric ideograph-other; word-break: keep-all;">
<span lang="EN-US" style="color: black; font-family: "segoe ui" , sans-serif; font-size: 8.0pt;">75,900 <o:p></o:p></span></div>
</td>
<td nowrap="" style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; height: 10.45pt; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0cm 4.95pt 0cm 4.95pt; width: 90.9pt;" width="121"><div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-pagination: widow-orphan; text-align: right; text-autospace: ideograph-numeric ideograph-other; word-break: keep-all;">
<span lang="EN-US" style="color: black; font-family: "segoe ui" , sans-serif; font-size: 8.0pt;">728,002,365 <o:p></o:p></span></div>
</td>
<td nowrap="" style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; height: 10.45pt; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0cm 4.95pt 0cm 4.95pt; width: 41.0pt;" width="55"><div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-pagination: widow-orphan; text-align: right; text-autospace: ideograph-numeric ideograph-other; word-break: keep-all;">
<span lang="EN-US" style="color: black; font-family: "segoe ui" , sans-serif; font-size: 8.0pt;">0.7389 <o:p></o:p></span></div>
</td>
</tr>
<tr style="height: 10.45pt; mso-yfti-irow: 3;">
<td nowrap="" style="background: #4E5C68; border-top: none; border: solid windowtext 1.0pt; height: 10.45pt; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0cm 4.95pt 0cm 4.95pt; width: 35.45pt;" width="47"><div align="center" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-pagination: widow-orphan; text-align: center; text-autospace: ideograph-numeric ideograph-other; word-break: keep-all;">
<span lang="EN-US" style="color: white; font-family: "segoe ui" , sans-serif; font-size: 8.0pt;">3<o:p></o:p></span></div>
</td>
<td nowrap="" style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; height: 10.45pt; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0cm 4.95pt 0cm 4.95pt; width: 63.55pt;" width="85"><div align="center" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-pagination: widow-orphan; text-align: center; text-autospace: ideograph-numeric ideograph-other; word-break: keep-all;">
<span style="color: black; font-size: 8.0pt;">셀트리온</span><span lang="EN-US" style="color: black; font-family: "segoe ui" , sans-serif; font-size: 8.0pt;"><o:p></o:p></span></div>
</td>
<td nowrap="" style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; height: 10.45pt; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0cm 4.95pt 0cm 4.95pt; width: 69.25pt;" width="92"><div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-pagination: widow-orphan; text-align: right; text-autospace: ideograph-numeric ideograph-other; word-break: keep-all;">
<span lang="EN-US" style="color: black; font-family: "segoe ui" , sans-serif; font-size: 8.0pt;">200,500 <o:p></o:p></span></div>
</td>
<td nowrap="" style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; height: 10.45pt; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0cm 4.95pt 0cm 4.95pt; width: 90.9pt;" width="121"><div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-pagination: widow-orphan; text-align: right; text-autospace: ideograph-numeric ideograph-other; word-break: keep-all;">
<span lang="EN-US" style="color: black; font-family: "segoe ui" , sans-serif; font-size: 8.0pt;">125,461,438 <o:p></o:p></span></div>
</td>
<td nowrap="" style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; height: 10.45pt; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0cm 4.95pt 0cm 4.95pt; width: 41.0pt;" width="55"><div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-pagination: widow-orphan; text-align: right; text-autospace: ideograph-numeric ideograph-other; word-break: keep-all;">
<span lang="EN-US" style="color: black; font-family: "segoe ui" , sans-serif; font-size: 8.0pt;">0.6670<o:p></o:p></span></div>
</td>
</tr>
<tr style="height: 10.45pt; mso-yfti-irow: 4;">
<td nowrap="" style="background: #4E5C68; border-top: none; border: solid windowtext 1.0pt; height: 10.45pt; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0cm 4.95pt 0cm 4.95pt; width: 35.45pt;" width="47"><div align="center" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-pagination: widow-orphan; text-align: center; text-autospace: ideograph-numeric ideograph-other; word-break: keep-all;">
<span lang="EN-US" style="color: white; font-family: "segoe ui" , sans-serif; font-size: 8.0pt;">4<o:p></o:p></span></div>
</td>
<td nowrap="" style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; height: 10.45pt; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0cm 4.95pt 0cm 4.95pt; width: 63.55pt;" width="85"><div align="center" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-pagination: widow-orphan; text-align: center; text-autospace: ideograph-numeric ideograph-other; word-break: keep-all;">
<span lang="EN-US" style="color: black; font-family: "segoe ui" , sans-serif; font-size: 8.0pt;">POSCO<o:p></o:p></span></div>
</td>
<td nowrap="" style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; height: 10.45pt; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0cm 4.95pt 0cm 4.95pt; width: 69.25pt;" width="92"><div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-pagination: widow-orphan; text-align: right; text-autospace: ideograph-numeric ideograph-other; word-break: keep-all;">
<span lang="EN-US" style="color: black; font-family: "segoe ui" , sans-serif; font-size: 8.0pt;">258,000 <o:p></o:p></span></div>
</td>
<td nowrap="" style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; height: 10.45pt; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0cm 4.95pt 0cm 4.95pt; width: 90.9pt;" width="121"><div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-pagination: widow-orphan; text-align: right; text-autospace: ideograph-numeric ideograph-other; word-break: keep-all;">
<span lang="EN-US" style="color: black; font-family: "segoe ui" , sans-serif; font-size: 8.0pt;">87,186,835 <o:p></o:p></span></div>
</td>
<td nowrap="" style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; height: 10.45pt; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0cm 4.95pt 0cm 4.95pt; width: 41.0pt;" width="55"><div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-pagination: widow-orphan; text-align: right; text-autospace: ideograph-numeric ideograph-other; word-break: keep-all;">
<span lang="EN-US" style="color: black; font-family: "segoe ui" , sans-serif; font-size: 8.0pt;">0.8117 <o:p></o:p></span></div>
</td>
</tr>
<tr style="height: 10.45pt; mso-yfti-irow: 5;">
<td nowrap="" style="background: #4E5C68; border-top: none; border: solid windowtext 1.0pt; height: 10.45pt; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0cm 4.95pt 0cm 4.95pt; width: 35.45pt;" width="47"><div align="center" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-pagination: widow-orphan; text-align: center; text-autospace: ideograph-numeric ideograph-other; word-break: keep-all;">
<span lang="EN-US" style="color: white; font-family: "segoe ui" , sans-serif; font-size: 8.0pt;">5<o:p></o:p></span></div>
</td>
<td nowrap="" style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; height: 10.45pt; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0cm 4.95pt 0cm 4.95pt; width: 63.55pt;" width="85"><div align="center" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-pagination: widow-orphan; text-align: center; text-autospace: ideograph-numeric ideograph-other; word-break: keep-all;">
<span style="color: black; font-size: 8.0pt;">신한지주</span><span lang="EN-US" style="color: black; font-family: "segoe ui" , sans-serif; font-size: 8.0pt;"><o:p></o:p></span></div>
</td>
<td nowrap="" style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; height: 10.45pt; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0cm 4.95pt 0cm 4.95pt; width: 69.25pt;" width="92"><div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-pagination: widow-orphan; text-align: right; text-autospace: ideograph-numeric ideograph-other; word-break: keep-all;">
<span lang="EN-US" style="color: black; font-family: "segoe ui" , sans-serif; font-size: 8.0pt;">43,300 <o:p></o:p></span></div>
</td>
<td nowrap="" style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; height: 10.45pt; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0cm 4.95pt 0cm 4.95pt; width: 90.9pt;" width="121"><div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-pagination: widow-orphan; text-align: right; text-autospace: ideograph-numeric ideograph-other; word-break: keep-all;">
<span lang="EN-US" style="color: black; font-family: "segoe ui" , sans-serif; font-size: 8.0pt;">474,199,587 <o:p></o:p></span></div>
</td>
<td nowrap="" style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; height: 10.45pt; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0cm 4.95pt 0cm 4.95pt; width: 41.0pt;" width="55"><div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-pagination: widow-orphan; text-align: right; text-autospace: ideograph-numeric ideograph-other; word-break: keep-all;">
<span lang="EN-US" style="color: black; font-family: "segoe ui" , sans-serif; font-size: 8.0pt;">0.8978 <o:p></o:p></span></div>
</td>
</tr>
<tr style="height: 10.45pt; mso-yfti-irow: 6;">
<td nowrap="" style="background: #4E5C68; border-top: none; border: solid windowtext 1.0pt; height: 10.45pt; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0cm 4.95pt 0cm 4.95pt; width: 35.45pt;" width="47"><div align="center" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-pagination: widow-orphan; text-align: center; text-autospace: ideograph-numeric ideograph-other; word-break: keep-all;">
<span lang="EN-US" style="color: white; font-family: "segoe ui" , sans-serif; font-size: 8.0pt;">6<o:p></o:p></span></div>
</td>
<td nowrap="" style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; height: 10.45pt; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0cm 4.95pt 0cm 4.95pt; width: 63.55pt;" width="85"><div align="center" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-pagination: widow-orphan; text-align: center; text-autospace: ideograph-numeric ideograph-other; word-break: keep-all;">
<span lang="EN-US" style="color: black; font-family: "segoe ui" , sans-serif; font-size: 8.0pt;">LG</span><span style="color: black; font-size: 8.0pt;">화학</span><span lang="EN-US" style="color: black; font-family: "segoe ui" , sans-serif; font-size: 8.0pt;"><o:p></o:p></span></div>
</td>
<td nowrap="" style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; height: 10.45pt; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0cm 4.95pt 0cm 4.95pt; width: 69.25pt;" width="92"><div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-pagination: widow-orphan; text-align: right; text-autospace: ideograph-numeric ideograph-other; word-break: keep-all;">
<span lang="EN-US" style="color: black; font-family: "segoe ui" , sans-serif; font-size: 8.0pt;">382,000 <o:p></o:p></span></div>
</td>
<td nowrap="" style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; height: 10.45pt; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0cm 4.95pt 0cm 4.95pt; width: 90.9pt;" width="121"><div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-pagination: widow-orphan; text-align: right; text-autospace: ideograph-numeric ideograph-other; word-break: keep-all;">
<span lang="EN-US" style="color: black; font-family: "segoe ui" , sans-serif; font-size: 8.0pt;">70,592,343 <o:p></o:p></span></div>
</td>
<td nowrap="" style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; height: 10.45pt; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0cm 4.95pt 0cm 4.95pt; width: 41.0pt;" width="55"><div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-pagination: widow-orphan; text-align: right; text-autospace: ideograph-numeric ideograph-other; word-break: keep-all;">
<span lang="EN-US" style="color: black; font-family: "segoe ui" , sans-serif; font-size: 8.0pt;">0.6611 <o:p></o:p></span></div>
</td>
</tr>
<tr style="height: 10.45pt; mso-yfti-irow: 7;">
<td nowrap="" style="background: #4E5C68; border-top: none; border: solid windowtext 1.0pt; height: 10.45pt; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0cm 4.95pt 0cm 4.95pt; width: 35.45pt;" width="47"><div align="center" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-pagination: widow-orphan; text-align: center; text-autospace: ideograph-numeric ideograph-other; word-break: keep-all;">
<span lang="EN-US" style="color: white; font-family: "segoe ui" , sans-serif; font-size: 8.0pt;">7<o:p></o:p></span></div>
</td>
<td nowrap="" style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; height: 10.45pt; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0cm 4.95pt 0cm 4.95pt; width: 63.55pt;" width="85"><div align="center" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-pagination: widow-orphan; text-align: center; text-autospace: ideograph-numeric ideograph-other; word-break: keep-all;">
<span style="color: black; font-size: 8.0pt;">현대차</span><span lang="EN-US" style="color: black; font-family: "segoe ui" , sans-serif; font-size: 8.0pt;"><o:p></o:p></span></div>
</td>
<td nowrap="" style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; height: 10.45pt; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0cm 4.95pt 0cm 4.95pt; width: 69.25pt;" width="92"><div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-pagination: widow-orphan; text-align: right; text-autospace: ideograph-numeric ideograph-other; word-break: keep-all;">
<span lang="EN-US" style="color: black; font-family: "segoe ui" , sans-serif; font-size: 8.0pt;">124,500 <o:p></o:p></span></div>
</td>
<td nowrap="" style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; height: 10.45pt; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0cm 4.95pt 0cm 4.95pt; width: 90.9pt;" width="121"><div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-pagination: widow-orphan; text-align: right; text-autospace: ideograph-numeric ideograph-other; word-break: keep-all;">
<span lang="EN-US" style="color: black; font-family: "segoe ui" , sans-serif; font-size: 8.0pt;">213,668,187 <o:p></o:p></span></div>
</td>
<td nowrap="" style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; height: 10.45pt; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0cm 4.95pt 0cm 4.95pt; width: 41.0pt;" width="55"><div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-pagination: widow-orphan; text-align: right; text-autospace: ideograph-numeric ideograph-other; word-break: keep-all;">
<span lang="EN-US" style="color: black; font-family: "segoe ui" , sans-serif; font-size: 8.0pt;">0.6577 <o:p></o:p></span></div>
</td>
</tr>
<tr style="height: 10.45pt; mso-yfti-irow: 8;">
<td nowrap="" style="background: #4E5C68; border-top: none; border: solid windowtext 1.0pt; height: 10.45pt; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0cm 4.95pt 0cm 4.95pt; width: 35.45pt;" width="47"><div align="center" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-pagination: widow-orphan; text-align: center; text-autospace: ideograph-numeric ideograph-other; word-break: keep-all;">
<span lang="EN-US" style="color: white; font-family: "segoe ui" , sans-serif; font-size: 8.0pt;">8<o:p></o:p></span></div>
</td>
<td nowrap="" style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; height: 10.45pt; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0cm 4.95pt 0cm 4.95pt; width: 63.55pt;" width="85"><div align="center" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-pagination: widow-orphan; text-align: center; text-autospace: ideograph-numeric ideograph-other; word-break: keep-all;">
<span lang="EN-US" style="color: black; font-family: "segoe ui" , sans-serif; font-size: 8.0pt;">NAVER<o:p></o:p></span></div>
</td>
<td nowrap="" style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; height: 10.45pt; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0cm 4.95pt 0cm 4.95pt; width: 69.25pt;" width="92"><div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-pagination: widow-orphan; text-align: right; text-autospace: ideograph-numeric ideograph-other; word-break: keep-all;">
<span lang="EN-US" style="color: black; font-family: "segoe ui" , sans-serif; font-size: 8.0pt;">128,000 <o:p></o:p></span></div>
</td>
<td nowrap="" style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; height: 10.45pt; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0cm 4.95pt 0cm 4.95pt; width: 90.9pt;" width="121"><div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-pagination: widow-orphan; text-align: right; text-autospace: ideograph-numeric ideograph-other; word-break: keep-all;">
<span lang="EN-US" style="color: black; font-family: "segoe ui" , sans-serif; font-size: 8.0pt;">164,813,395 <o:p></o:p></span></div>
</td>
<td nowrap="" style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; height: 10.45pt; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0cm 4.95pt 0cm 4.95pt; width: 41.0pt;" width="55"><div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-pagination: widow-orphan; text-align: right; text-autospace: ideograph-numeric ideograph-other; word-break: keep-all;">
<span lang="EN-US" style="color: black; font-family: "segoe ui" , sans-serif; font-size: 8.0pt;">0.7877 <o:p></o:p></span></div>
</td>
</tr>
<tr style="height: 10.45pt; mso-yfti-irow: 9;">
<td nowrap="" style="background: #4E5C68; border-top: none; border: solid windowtext 1.0pt; height: 10.45pt; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0cm 4.95pt 0cm 4.95pt; width: 35.45pt;" width="47"><div align="center" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-pagination: widow-orphan; text-align: center; text-autospace: ideograph-numeric ideograph-other; word-break: keep-all;">
<span lang="EN-US" style="color: white; font-family: "segoe ui" , sans-serif; font-size: 8.0pt;">9<o:p></o:p></span></div>
</td>
<td nowrap="" style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; height: 10.45pt; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0cm 4.95pt 0cm 4.95pt; width: 63.55pt;" width="85"><div align="center" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-pagination: widow-orphan; text-align: center; text-autospace: ideograph-numeric ideograph-other; word-break: keep-all;">
<span lang="EN-US" style="color: black; font-family: "segoe ui" , sans-serif; font-size: 8.0pt;">KB</span><span style="color: black; font-size: 8.0pt;">금융</span><span lang="EN-US" style="color: black; font-family: "segoe ui" , sans-serif; font-size: 8.0pt;"><o:p></o:p></span></div>
</td>
<td nowrap="" style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; height: 10.45pt; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0cm 4.95pt 0cm 4.95pt; width: 69.25pt;" width="92"><div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-pagination: widow-orphan; text-align: right; text-autospace: ideograph-numeric ideograph-other; word-break: keep-all;">
<span lang="EN-US" style="color: black; font-family: "segoe ui" , sans-serif; font-size: 8.0pt;">43,000 <o:p></o:p></span></div>
</td>
<td nowrap="" style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; height: 10.45pt; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0cm 4.95pt 0cm 4.95pt; width: 90.9pt;" width="121"><div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-pagination: widow-orphan; text-align: right; text-autospace: ideograph-numeric ideograph-other; word-break: keep-all;">
<span lang="EN-US" style="color: black; font-family: "segoe ui" , sans-serif; font-size: 8.0pt;">418,111,537 <o:p></o:p></span></div>
</td>
<td nowrap="" style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; height: 10.45pt; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0cm 4.95pt 0cm 4.95pt; width: 41.0pt;" width="55"><div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-pagination: widow-orphan; text-align: right; text-autospace: ideograph-numeric ideograph-other; word-break: keep-all;">
<span lang="EN-US" style="color: black; font-family: "segoe ui" , sans-serif; font-size: 8.0pt;">0.8452 <o:p></o:p></span></div>
</td>
</tr>
<tr style="height: 10.45pt; mso-yfti-irow: 10; mso-yfti-lastrow: yes;">
<td nowrap="" style="background: #4E5C68; border-top: none; border: solid windowtext 1.0pt; height: 10.45pt; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0cm 4.95pt 0cm 4.95pt; width: 35.45pt;" width="47"><div align="center" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-pagination: widow-orphan; text-align: center; text-autospace: ideograph-numeric ideograph-other; word-break: keep-all;">
<span lang="EN-US" style="color: white; font-family: "segoe ui" , sans-serif; font-size: 8.0pt;">10<o:p></o:p></span></div>
</td>
<td nowrap="" style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; height: 10.45pt; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0cm 4.95pt 0cm 4.95pt; width: 63.55pt;" width="85"><div align="center" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-pagination: widow-orphan; text-align: center; text-autospace: ideograph-numeric ideograph-other; word-break: keep-all;">
<span style="color: black; font-size: 8.0pt;">현대모비스</span><span lang="EN-US" style="color: black; font-family: "segoe ui" , sans-serif; font-size: 8.0pt;"><o:p></o:p></span></div>
</td>
<td nowrap="" style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; height: 10.45pt; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0cm 4.95pt 0cm 4.95pt; width: 69.25pt;" width="92"><div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-pagination: widow-orphan; text-align: right; text-autospace: ideograph-numeric ideograph-other; word-break: keep-all;">
<span lang="EN-US" style="color: black; font-family: "segoe ui" , sans-serif; font-size: 8.0pt;">213,500 <o:p></o:p></span></div>
</td>
<td nowrap="" style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; height: 10.45pt; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0cm 4.95pt 0cm 4.95pt; width: 90.9pt;" width="121"><div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-pagination: widow-orphan; text-align: right; text-autospace: ideograph-numeric ideograph-other; word-break: keep-all;">
<span lang="EN-US" style="color: black; font-family: "segoe ui" , sans-serif; font-size: 8.0pt;">97,343,863 <o:p></o:p></span></div>
</td>
<td nowrap="" style="border-bottom: solid windowtext 1.0pt; border-left: none; border-right: solid windowtext 1.0pt; border-top: none; height: 10.45pt; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding: 0cm 4.95pt 0cm 4.95pt; width: 41.0pt;" width="55"><div align="right" class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-pagination: widow-orphan; text-align: right; text-autospace: ideograph-numeric ideograph-other; word-break: keep-all;">
<span lang="EN-US" style="color: black; font-family: "segoe ui" , sans-serif; font-size: 8.0pt;">0.6712<o:p></o:p></span></div>
</td>
</tr>
</tbody></table>
</div>
<br />
<br />
위 테이블은 국내 상위 10 종목의 종가, 주식수 및 유동비입니다. 위의 주식들로 구성된 가상의 지수를 추종하기 위해 어떻게 포트폴리오를 구성해야 하는지 살펴보도록 합시다.<br />
<br />
<br />
<pre class="brush: xml">const = tibble(
'종목' = c('삼성전자','SK하이닉스','셀트리온','POSCO','신한지주',
'LG화학','현대차','NAVER','KB금융','현대모비스'),
'종가' = c(45850,75900,200500,258000,43300,
382000,124500,128000,43000,213500),
'주식수' = c(5969782550,728002365,125461438,87186835,474199587,
70592343,213668187,164813395,418111537,97343863),
'유동비' = c(0.7879,0.7389,0.667,0.8117,0.8978,
0.6611,0.6577,0.7877,0.8452,0.6712)
)
const = const %>%
mutate(cap = 종가 * 주식수 * 유동비,
cap.ratio = cap / sum(cap))
const
# A tibble: 10 x 6
종목 종가 주식수 유동비 cap cap.ratio
1 삼성전자 45850 5969782550 0.788 2.16e14 0.551
2 SK하이닉스 75900 728002365 0.739 4.08e13 0.104
3 셀트리온 200500 125461438 0.667 1.68e13 0.0429
4 POSCO 258000 87186835 0.812 1.83e13 0.0467
5 신한지주 43300 474199587 0.898 1.84e13 0.0471
6 LG화학 382000 70592343 0.661 1.78e13 0.0456
7 현대차 124500 213668187 0.658 1.75e13 0.0447
8 NAVER 128000 164813395 0.788 1.66e13 0.0425
9 KB금융 43000 418111537 0.845 1.52e13 0.0389
10 현대모비스 213500 97343863 0.671 1.39e13 0.0357
</pre>
<br />
<br />
각 종목의 시가총액을 구한 후, 이를 전체 합으로 나누어 시총비중을 구하였습니다. 이제 특정 펀드의 투자금액이 100억일 경우 각 종목 당 투자금액을 어떻게 할지 살펴보겠습니다.<br />
<br />
<br />
<pre class="brush: xml">invest = 10000000000
const = const %>%
mutate(inv.number = floor(invest * cap.ratio / 종가),
inv.money = inv.number * 종가,
inv.ratio = inv.money / sum(inv.money))
const
# A tibble: 10 x 9
종목 종가 주식수 유동비 cap cap.ratio inv.number inv.money inv.ratio
1 삼성전자 45850 5969782550 0.788 2.16e14 0.551 120282 5514929700 0.552
2 SK하이닉스 75900 728002365 0.739 4.08e13 0.104 13755 1044004500 0.104
3 셀트리온 200500 125461438 0.667 1.68e13 0.0429 2139 428869500 0.0429
4 POSCO 258000 87186835 0.812 1.83e13 0.0467 1809 466722000 0.0467
5 신한지주 43300 474199587 0.898 1.84e13 0.0471 10887 471407100 0.0471
6 LG화학 382000 70592343 0.661 1.78e13 0.0456 1193 455726000 0.0456
7 현대차 124500 213668187 0.658 1.75e13 0.0447 3593 447328500 0.0447
8 NAVER 128000 164813395 0.788 1.66e13 0.0425 3319 424832000 0.0425
9 KB금융 43000 418111537 0.845 1.52e13 0.0389 9037 388591000 0.0389
10 현대모비스 213500 97343863 0.671 1.39e13 0.0357 1670 356545000 0.0357
invest - (const$inv.money %>% sum)
[1] 1044700
</pre>
<br />
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
먼저 각 종목당 투자되는 주식수는 <b><i><span style="color: magenta;">총투자금액 * 시총비중 / 종가</span></i></b>를 통해 계산되며, 소수점 이하로를 투자를 할 수 없으므로 내림을 해주도록 합니다. 펀드의 투자금액 100억원과 각 종목 별 투자금액을 합한 금액의 차릴 보면 대략 100만원 정도(0.01% 가량)가 남습니다. 이처럼 실제 포트폴리오의 구성에서는 모델 포트폴리오와는 다르게 약간의 현금이 남기 마련입니다.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
또한 위 처럼 99.9% 금액을 주식으로 투자하는 경우도 잘 없습니다. 펀드는 매일매일 설정과 해지가 일어납니다. 만일 여러분이 위와 같이 포트폴리오를 구성했는데 내일 5억원의 해지가 발생한다면 어떡할까요? 5억원치에 해당하는 주식을 매도해야 하며, 이때 발생하는 세금은 여러분 펀드에 손해가 되게 됩니다. 따라서 대부분 펀드는 이러한 현금이 필요할 경우를 대비하여 지수의 일부를 선물로 추종하게 됩니다. </div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
100억원 중 90억원의 금액을 현물(실제 주식)로 추종하고, 나머지 10억원의 금액은 선물을 매수하여 추종하면 간단합니다.<b> KOSPI 200 선물</b>의 한 계약당 명목금액은 지수 * 250,000 이므로 KOSPI 200 지수가 300pt임을 가정하면 한 계약당 명목금액이 7천 5백만원 정도 됩니다. 따라서 나머지 10억원에 해당하는 선물 13개를 매수(7천5백*13 = 9억 7천 5백)하면, 총 100억원의 명목금액이 맞춰지게 됩니다. 선물의 경우 매수를 하더라도 현금이 들어가지 않기 때문에 펀드에는 아직 10억원 가량의 현금이 남게되며, 이를 통해 해지 금액을 지불하고, 해당 금액만큼의 선물을 매도하면 됩니다. (선물의 경우 매매시 세금이 거의 없다고 봐도 무방합니다.)</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
위와 같이 펀드를 구성할 경우 기초지수의 수익률을 거의 복제가 가능합니다. 그러나 우리는 언제나 지수+알파를 원합니다. 이를 위해 위에서 살펴본 것처럼 <b><i><span style="color: red;">차익거래, 대차, 배팅</span></i></b> 등의 방법이 이용됩니다.</div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
먼저 <b><i><span style="color: magenta;">차익거래</span></i></b>에 대해 살펴봅시다. 파생상품에 대해 공부해보셨으면 알다시피 선물의 가격은 <b><span style="color: red;">현물 가격(주가 지수)와 무위험 이자율, 배당, 만기</span></b>에 의해 가격이 결정되게 됩니다. </div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhoR6R1oI5Nd0sNzhxQqtI7R66y16gu61WvAMrZ_7CUo-z8o-pg1sgSG1G0RWJLOAaQkvNbRO8vhsg7gIKSDUX616a8J_ELMpSlvSLewZXRpVfsCyRdji3uBIQBJMBysstOTpv8t7SlEQ/s1600/Index-future-theoretical-value1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="247" data-original-width="408" height="241" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhoR6R1oI5Nd0sNzhxQqtI7R66y16gu61WvAMrZ_7CUo-z8o-pg1sgSG1G0RWJLOAaQkvNbRO8vhsg7gIKSDUX616a8J_ELMpSlvSLewZXRpVfsCyRdji3uBIQBJMBysstOTpv8t7SlEQ/s400/Index-future-theoretical-value1.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
그러나 가끔 이러한 이론가격과 실제 선물의 가격이 벌어지게 되는 일이 생기며, 이를 이용하여 <b><span style="color: blue;"><i>현물 바스켓과 선물간의 차익거래, 현물 바스켓과 ETF간의 차익거래, ETF와 선물간의 차익거래</i></span></b> 등을 통해 아비트리지 수익을 얻을 수 있는 경우가 존재합니다. 또한 합병 차익거래, 배당 차익거래 등 상당히 낮은 위험으로 수익률을 얻을 수 있는 기회가 종종 나타나기도 합니다. 대부분의 퀀트 매니저들은 이러한 기회를 놓치지 않고 수익을 얻습니다.</div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
<b><span style="color: magenta;"><i>대차</i></span></b>는 말그대로 주식을 빌려주는 행위입니다. 인덱스 펀드를 구성하는 종목들은 지수의 구성종목이 바뀌지 않는 이상 거의 바뀔일이 없으므로, 매도를 할 일도 잘 없습니다. 주식을 빌려주어 조금의 수익이라도 더 보태는 것이 좋습니다.</div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
마지막으로는 <b><i><span style="color: magenta;">배팅</span></i></b>에 대한 내용입니다. 매니저의 스타일에 따라 배팅을 하는 방법은 제각각이지만, 일반적으로 많이 사용되는 팩터 모형을 이용하여 특정 종목에 비중을 더욱 싣습니다. 이부분에 대해서 자세히 알아보도록 하겠습니다.</div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
먼저 KOSPI 200 지수를 구성하는 종목들의 시총비에 대해 살펴보겠습니다. 실제 업무에서는 기초지수 제공자(KOSPI 200의 경우 한국거래소)가 각 종목들의 비중을 판매하지만, 여러분이 손쉽게 그 비중을 구할 수 있는 방법도 있습니다. 바로 해당 지수를 추종하는 ETF의 PDF를 통해서 말이죠. </div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi_tGaom356r4ATbl5YR-vXXlEXWD-uaVSffyGkA1rw8hwVsV57xDhWTR48-J4XAYunX6T1P8AAWVA70ZbtbefO5fjmyZGggAZ-SzfRHQm6DugX8yxoJ0l1serrYa_mVsawkM12e1HA7A/s1600/123.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="704" data-original-width="1228" height="366" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi_tGaom356r4ATbl5YR-vXXlEXWD-uaVSffyGkA1rw8hwVsV57xDhWTR48-J4XAYunX6T1P8AAWVA70ZbtbefO5fjmyZGggAZ-SzfRHQm6DugX8yxoJ0l1serrYa_mVsawkM12e1HA7A/s640/123.png" width="640" /></a></div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
ETF의 경우 보유종목과 비중을 실시간으로 공표해야 하기에 이를 통해 간단히 기초지수의 종목별 비중을 추론할 수 있습니다. 먼저 KODEX 200 ETF의 PDF를 크롤링하여 그 비중을 추출해 보도록 하겠습니다.</div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<pre class="brush: xml">library(httr)
library(rvest)
library(readxl)
library(dplyr)
library(ggplot2)
library(tidyr)
date = '20190322'
pdf_200 = POST(url = 'http://www.kodex.com/excel_pdf.do',
query = list(
fId = '2ETF01',
gijunYMD = date
),
write_disk(tf <- tempfile(fileext = '.xls')))
pdf_data = read_excel(tf, skip = 2, col_names = TRUE)
pdf_data
# A tibble: 202 x 9
번호 종목명 ISIN 종목코드 수량 `비중(%)` `평가금액(원)` `현재가(원)` `등락(원)`
1 1 원화예금 KRD010010001 KRD010010001 28653419 0 28653419 0 0
2 2 삼성전자 KR7005930003 005930 8220 0.268 376887000 46550 700
3 3 SK하이닉스 KR7000660001 000660 977 0.0527 74154300 76100 200
4 4 셀트리온 KR7068270008 068270 172 0.0245 34486000 199500 -1000
5 5 POSCO KR7005490008 005490 120 0.0220 30960000 259000 1000
6 6 신한지주 KR7055550008 055550 710 0.0219 30743000 43250 -50
7 7 LG화학 KR7051910008 051910 80 0.0217 30560000 379500 -2500
8 8 현대차 KR7005380001 005380 245 0.0217 30502500 123500 -1000
9 9 NAVER KR7035420009 035420 221 0.0201 28288000 127000 -1000
10 10 KB금융 KR7105560007 105560 619 0.0189 26617000 42500 -500
# ... with 192 more rows
</pre>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<br />
이 중 원화예금에 해당하는 부분을 제외한 뒤, 각 평가금액들을 바탕으로 비중을 새롭게 구하며, 종목명, 종목코드, 비중 만을 남기도록 하겠습니다.<br />
<br />
<br />
<pre class="brush: xml"># Data cleansing
pdf_data_mod =
pdf_data %>%
filter(종목명 != '원화예금') %>%
mutate(비중 = `평가금액(원)` / sum(`평가금액(원)`)) %>%
select(종목명, 종목코드, 비중) %>%
mutate(종목명 = factor(종목명, levels = unique(종목명)))
ggplot(pdf_data_mod, aes(x = 종목명, y = 비중)) +
geom_point()
</pre>
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiudwK5o-g2xSkGGhRmMXZfGagRxEB2UBZqKPK4qQ9obV1p05tcFVNyagDhOlyay1cKSpX_wryCsRpeB5IdybRC9mG9ZqA4n-XmpZynIddseJ8vNfQJrVEHm6XAc1dMxOSuza-eD_TC5w/s1600/Rplot.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="473" data-original-width="632" height="298" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiudwK5o-g2xSkGGhRmMXZfGagRxEB2UBZqKPK4qQ9obV1p05tcFVNyagDhOlyay1cKSpX_wryCsRpeB5IdybRC9mG9ZqA4n-XmpZynIddseJ8vNfQJrVEHm6XAc1dMxOSuza-eD_TC5w/s400/Rplot.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
삼성전자의 비중이 압도록으로 높습니다. 이제 각 종목들의 팩터를 구해야 합니다. 간단한 예시로 모멘텀에는 12개월 수익률, 밸류에는 PBR, 퀄리티에는 ROE 데이터를 사용하겠습니다. 물론 데이터가이드와 같은 유료 벤더를 통해 해당 데이터를 손쉽게 구할 수 있지만, 크롤링을 통해 온라인에서도 손쉽게 해당 데이터를 구할 수 있습니다.</div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJw-UBU0b8Rq_6iRdSwJ2b_6VSGOJvFKKfk5Ix__VYp5fYbIa3n6OR_NUV4GErMD-njQ9cPNtrDh_4GcdfoHJcoRUO_7y08ph8-FMyEkUg9MhBVq7ZMRi9LCS9Co-C28E44yPEPtGN8A/s1600/2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="641" data-original-width="1014" height="403" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJw-UBU0b8Rq_6iRdSwJ2b_6VSGOJvFKKfk5Ix__VYp5fYbIa3n6OR_NUV4GErMD-njQ9cPNtrDh_4GcdfoHJcoRUO_7y08ph8-FMyEkUg9MhBVq7ZMRi9LCS9Co-C28E44yPEPtGN8A/s640/2.png" width="640" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
CompanyGuide의 종목별 정보에서 PBR과 12개월 수익률을 손쉽게 따올 수 있으며, ROE의 경우 상당의 PBR / PER를 통해 계산할 수 있습니다. KOSPI 200에 해당하는 종목들의 종목코드도 이미 보유하고 있기에, for loop를 통하여 해당 팩터 데이터들을 수집해 보도록 하겠습니다.</div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: justify;">
<br /></div>
<pre class="brush: xml"># Download Factor data from Company Guide
data_factor = list()
for (i in pdf_data_mod$종목코드) {
# i = '005930'
url = paste0('http://comp.fnguide.com/SVO2/ASP/SVD_main.asp?pGB=1&gicode=A',i)
down_page = GET(url) %>% read_html
fct_mom = down_page %>% html_nodes(xpath = '//*[@id="svdMainGrid1"]/table/tbody/tr[3]/td[1]/span[4]') %>%
html_text() %>% as.numeric()
if (length(fct_mom) == 0) {
fct_mom = NA
}
fct_pbr = down_page %>% html_nodes(xpath = '//*[@id="corp_group2"]/dl[4]/dd') %>%
html_text() %>% as.numeric()
fct_per = down_page %>% html_nodes(xpath = '//*[@id="corp_group2"]/dl[1]/dd') %>%
html_text() %>% as.numeric()
fct_roe = fct_pbr / fct_per
fct_data = data.frame(fct_mom, fct_pbr, fct_roe)
data_factor[[i]] = fct_data
print(i)
Sys.sleep(2)
}
# Bind Data
data_factor_bind = bind_rows(data_factor)
rownames(data_factor_bind) = pdf_data_mod$종목명
summary(data_factor_bind)
fct_mom fct_pbr fct_roe
Min. :-63.100 Min. : 0.220 Min. :0.002087
1st Qu.:-23.265 1st Qu.: 0.650 1st Qu.:0.053074
Median :-10.320 Median : 0.945 Median :0.078653
Mean : -9.378 Mean : 1.599 Mean :0.113277
3rd Qu.: 3.248 3rd Qu.: 1.708 3rd Qu.:0.124089
Max. : 49.740 Max. :14.860 Max. :1.250000
NA's :3 NA's :1 NA's :27
</pre>
<br />
<br />
각 종목들의 팩터 데이터가 구해졌다면, 이를 바탕으로 팩터의 강도를 구해보도록 하겠습니다. 먼저 각 팩터별 랭킹을 구한 후, 이를 다시 Z-Score로 치환하도록 하겠습니다. 또한 모멘텀과 ROE는 높을수록 좋으며, PBR은 낮을수록 좋기때문에, 부호의 통일을 위해 PBR의 Z-Score값에 (-)를 곱하도록 합니다.<br />
<br />
<br />
<pre class="brush: xml"># Calculate Factor Strength
data_factor_scale = apply(data_factor_bind, 2, rank, na.last = 'keep') %>%
scale() %>% data.frame()
data_factor_scale$fct_pbr = -data_factor_scale$fct_pbr
data_factor_scale %>%
gather(key, value) %>%
ggplot(aes(x = value, group = key)) +
geom_histogram() +
facet_grid(key ~ .)
</pre>
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZUuGtKzG1gEe8ggXCka-iJHQf6VDOQFgKlaLNV-0-HJm74KTf1UzDaP3uCnKaSCg13tb_sVUtJYCDYj-eoIGjqx_x-7Rfe45ZmzXJJP9MrMU34E7V01QTalDDM63REFyD8a46fSsCKA/s1600/Rplot01.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="473" data-original-width="632" height="298" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZUuGtKzG1gEe8ggXCka-iJHQf6VDOQFgKlaLNV-0-HJm74KTf1UzDaP3uCnKaSCg13tb_sVUtJYCDYj-eoIGjqx_x-7Rfe45ZmzXJJP9MrMU34E7V01QTalDDM63REFyD8a46fSsCKA/s400/Rplot01.png" width="400" /></a></div>
<br />
<br />
<div style="text-align: justify;">
각 팩터의 Z-Score가 균등하게 분포되어 있음이 확인됩니다. 이제 이를 바탕으로 멀티팩터의 강도를 계산해야 합니다. AQR의 방법론에 따라 모멘텀 팩터에는 40%의 비중을, 밸류 팩터에는 40%의 비중을, 퀄리티 팩터에는 20%의 비중을 주도록 하겠습니다. 해당 비중은 매니저의 재량에 의해 결정됩니다. 이렇게 결정된 스코어를 내림차순 해준 후 랭킹을 구해주도록 합니다. (스코어가 높을수록 좋은 종목, 스코어가 낮을 수록 나쁜 이므로, 내림차순을 기준으로 랭킹을 구해야 합니다.)</div>
<div style="text-align: justify;">
<br /></div>
<pre class="brush: xml"># Bind factor strength
# Momentum 40%, Value 40%, Quality 20%
data_factor_scale = data_factor_scale %>%
mutate(score = 0.4 * fct_mom + 0.4 * fct_pbr + 0.2 * fct_roe,
rank = rank(desc(score)),
종목명 = pdf_data_mod$종목명)
</pre>
<div style="text-align: left;">
<br />
<br />
이제 랭킹 상위 10개 종목의 각 팩터값들을 살펴보도록 하겠습니다.<br />
<br />
<br />
<pre class="brush: xml"># Top 10
top.10 = data_factor_scale %>%
filter(rank <= 10) %>%
select(종목명) %>% unlist() %>% as.character()
data_factor_bind %>%
mutate(종목명 = rownames(.)) %>%
filter(종목명 %in% top.10)
fct_mom fct_pbr fct_roe 종목명
1 8.86 0.83 0.12749616 SK텔레콤
2 8.15 0.51 0.04214876 기아차
3 29.71 0.68 0.12078153 대림산업
4 43.62 0.92 0.16197183 GS건설
5 9.08 0.58 0.05669599 현대백화점
6 2.57 0.88 0.23466667 대우조선해양
7 38.38 0.56 0.06481481 태광산업
8 1.93 0.65 1.25000000 효성
9 15.80 0.77 0.40314136 대덕전자
10 42.81 0.67 0.09795322 세방전지
</pre>
<br />
전반적으로 12개월 수익률도 높고, PBR은 낮으며, ROE 또한 높은 모습을 보입니다. 이번에는 반대로 하위 20개 종목의 각 팩터값들을 살펴보도록 하겠습니다.<br />
<br />
<pre class="brush: xml"># Bottom 10
bottom.10 = data_factor_scale %>%
filter(rank >= 190) %>%
select(종목명) %>% unlist() %>% as.character()
data_factor_bind %>%
mutate(종목명 = rownames(.)) %>%
filter(종목명 %in% bottom.10)
fct_mom fct_pbr fct_roe 종목명
1 -15.22 1.39 NA 동아에스티
2 -24.17 0.38 NA 동국제강
3 -49.55 0.27 NA 두산중공업
4 -4.46 3.28 NA JW중외제약
5 -37.08 0.59 NA LG상사
6 14.57 2.38 NA 한세실업
7 -26.89 3.00 NA 일양약품
8 -21.76 1.41 NA LIG넥스원
9 -22.65 0.66 NA LG하우시스
10 NA 0.41 0.002087258 효성중공업
11 2.99 1.03 NA 쌍용차
12 -63.10 0.22 NA 한진중공업
</pre>
<br />
<br />
<div style="text-align: justify;">
12개월 수익률이 없거나, PBR이 음수거나, ROE가 없는 경우 하위 종목으로 구성됨이 보입니다. 이러한 종목들의 경우 score값도 NA 즉 결측치로 나타나 있으며, 해당 값들을 최하값으로 강제치환 해주도록 하겠습니다.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<br /></div>
</div>
<pre class="brush: xml"># Change NA to lower number
data_factor_scale %>%
filter(is.na(score)) %>% head()
data_factor_scale = data_factor_scale %>%
mutate_at(vars(score), list(~ifelse(is.na(.), min(score, na.rm = TRUE), .)))
</pre>
</div>
<br />
<br />
<div style="text-align: justify;">
이제 팩터 스코어가 준비되었으므로 기초지수 복제 포트폴리오에 팩터투자를 통해 배팅을 해주면 됩니다. 배팅 비중은 매니저의 재량 혹은 펀드의 규정에 따라 다르며, 여기서는 간단하게 5%를 예를 들어보겠습니다. 먼저 가장 간단한 방법은 200 종목 중 상위 100 종목에서 각 5bp씩 투자비중을 차감하고, 멀티팩터 기준 상위 50 종목에 각 10bp 씩 투자비중을 더해주는 방법입니다. </div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<br /></div>
<pre class="brush: xml">top.50 = data_factor_scale %>%
filter(rank <= 50) %>%
select(종목명) %>% unlist() %>% as.character()
# 시총 상위 100종목에서 언더 웨이트
method_first = pdf_data_mod %>%
mutate(투자비중 = 비중,
시총랭킹 = rank(desc(비중))) %>%
mutate_at(vars(투자비중), list(~ifelse(시총랭킹 <= 100, 투자비중 - 0.0005, 투자비중)))
sum(method_first$투자비중)
# 상위 50 종목에 오버웨이트
method_first = method_first %>%
mutate_at(vars(투자비중), list(~ifelse(종목명 %in% top.50, 투자비중 + 0.0010, 투자비중)))
# 둘 간의 비중 비교
method_first %>%
select(종목명, 비중, 투자비중) %>%
gather(key, value, -종목명) %>%
ggplot(aes(x = 종목명)) +
geom_point(aes(y = value, color = key))
</pre>
<div style="text-align: justify;">
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjdua7L3U-4GfweVR-rLycpf7eWylP3EDzPGs21FZx3uQuvwJDaNdfpxZ74mldh7xwjCLqMhtbIH8JHyIEHrqM-t7MtLO5CkL_XtDTr8ijmrUsPNtYaLyG4M5dNpK04TWtqB-JX4jZ6ug/s1600/Rplot02.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="473" data-original-width="632" height="478" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjdua7L3U-4GfweVR-rLycpf7eWylP3EDzPGs21FZx3uQuvwJDaNdfpxZ74mldh7xwjCLqMhtbIH8JHyIEHrqM-t7MtLO5CkL_XtDTr8ijmrUsPNtYaLyG4M5dNpK04TWtqB-JX4jZ6ug/s640/Rplot02.png" width="640" /></a></div>
<br />
빨간색은 지수 내 비중, 파란색은 투자비중입니다. 삼성전자의 비중이 지나치게 큰 관계로 둘 간의 차이가 잘 확인되지 않습니다. 따라서 삼성전자를 제외한 나머지 종목들의 비중만을 한번 살펴보도록 하겠습니다.<br />
<br />
<br />
<pre class="brush: xml"># 삼성전자 제외
p1 = method_first %>%
slice(-1) %>%
select(종목명, 비중, 투자비중) %>%
gather(key, value, -종목명) %>%
ggplot(aes(x = 종목명)) +
geom_point(aes(y = value, color = key, shape = key), size = 1)
p1
</pre>
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEipKITcuBTfOwuqbGcQYVGgabcSV6kP__I076qs91d5mgouQGsJgjj5Lz0hW1l6kuzxgrOMv8nw4b5tK6RRXhJiQqwsSdYul4G2-Z0cQ-TWe3qQwaqgFMzFubR0B2MH-2aHYg4jZzyYng/s1600/Rplot03.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="473" data-original-width="632" height="475" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEipKITcuBTfOwuqbGcQYVGgabcSV6kP__I076qs91d5mgouQGsJgjj5Lz0hW1l6kuzxgrOMv8nw4b5tK6RRXhJiQqwsSdYul4G2-Z0cQ-TWe3qQwaqgFMzFubR0B2MH-2aHYg4jZzyYng/s640/Rplot03.png" width="640" /></a></div>
<br />
<br />
시총 상위주의 투자비중이 지수비중보다 조금씩 작으며, 멀티팩터 기준 상위 50 종목의 투자비중이 지수 대비 조금씩 많은 것이 확인됩니다. 팩터 모델이 장기적으로 지수 대비 뛰어난 성과를 보인다면, 이런식으로 구성한 포트폴리오도 장기적으로 지수 대비 초과성과를 기록할 수 있을 겁니다.<br />
<br />
그러나 위 방법으로 포트폴리오를 구성할 경우 배팅금액이 전체 포트폴리오의 5% 밖에 되지 않으며, 좀더 팩터모델을 활용하여 적극적으로 포트폴리오를 구성하고자 할 수 있습니다. 이럴 경우 전 종목에 팩터의 강도를 활용하여 비중을 조절하는 방법이 있습니다. 이는 예전에 썼는 글을 참조하시면 좋습니다.<br />
<br />
<ul>
<li><b><a href="http://henryquant.blogspot.com/2017/10/kospi-200-factor-tilt-index.html" target="_blank">KOSPI 200 Factor Tilt Index</a></b></li>
</ul>
<br />
<pre class="brush: xml"># (2) 전체 종목에 팩터 강도 적용
method_second = data_factor_scale %>%
select(score) %>%
mutate(cdf = pnorm(score)) %>%
bind_cols(pdf_data_mod)
method_second = method_second %>%
mutate(투자비중 = cdf * 비중,
투자비중 = 투자비중 / sum(투자비중))
</pre>
<br />
먼저 앞에서 계산된 Z-Score를 바탕으로 pnorm() 함수를 이용하여 각 Z-Score 값들의 CDF 값을 구해준 후, 기초지수의 비중과 CDF 값을 곱해주도록 합니다. 즉 Z-Score가 높은 값들은 CDF 값 역시 높아 기초지수의 비중만큼 투자할 것이며, Z-Score가 낮은 값들은 CDF 값이 낮아, 기초지수 대비 매우 작은 비중을 투자할 것입니다. 이를 다시 투자비중의 합으로 나누어 합계가 1이 되도록 표준화를 해줍니다.<br />
<br />
<br />
<pre class="brush: xml">method_second %>%
slice(-1) %>%
select(종목명, 비중, 투자비중) %>%
gather(key, value, -종목명) %>%
ggplot(aes(x = 종목명)) +
geom_point(aes(y = value, color = key, shape = key), size = 1)
</pre>
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgh-qq4SFdBpy65cnRgy89P3-agoEKZWnK0IxS2cYwp7-O544g20AWJPraYEaBJdpxnirCfvfkyg6-5jJHykEz3VJs6IQvuS_yFOTBQycs8GI_41AQWMgo6381Bmqir9jN4sbVxy2l3LQ/s1600/Rplot04.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="473" data-original-width="632" height="478" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgh-qq4SFdBpy65cnRgy89P3-agoEKZWnK0IxS2cYwp7-O544g20AWJPraYEaBJdpxnirCfvfkyg6-5jJHykEz3VJs6IQvuS_yFOTBQycs8GI_41AQWMgo6381Bmqir9jN4sbVxy2l3LQ/s640/Rplot04.png" width="640" /></a></div>
<br />
<br />
삼성전자를 제외한 종목들의 기초지수 비중과 투자비중의 차이입니다. 첫번째 방법에 비해 훨씬 둘 간의 차이가 큰 것이 확인되며, 이는 전체 포트폴리오가 팩터에 훨씬 노출된 정도가 크다는 것을 의미합니다.<br />
<br />
그러나 인덱스 펀드에는 각 종목별 지수내 비중과 투자 비중간에 지나치게 차이가 벌어지는 것을 방지하는 제약이 대부분 있습니다. 예로써 둘 간의 차이가 50bp 이상이 되지 않도록 생각해 봅시다.<br />
<br />
<br />
<pre class="brush: xml">method_second = method_second %>%
mutate(TE = 투자비중 - 비중)
TE.max = 0.005
method_second %>%
select(종목명, TE) %>%
ggplot(aes(x = 종목명, y = TE)) +
geom_point() +
geom_hline(aes(yintercept = TE.max)) +
geom_hline(aes(yintercept = -TE.max))
</pre>
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRwvJ4KMtgwO3N0cTsjfvmAuDj4z3O6piBkAVjACnTVEt0Fa8uHB6wcxrNRF4R6jM0i02hvaAOFKZJJLtRulP3qB5rCnbGuurWoLOuVxDZSzZK_WFgmpYCcB1qRPzhEE0ir03EuuimXg/s1600/Rplot05.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="473" data-original-width="632" height="478" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRwvJ4KMtgwO3N0cTsjfvmAuDj4z3O6piBkAVjACnTVEt0Fa8uHB6wcxrNRF4R6jM0i02hvaAOFKZJJLtRulP3qB5rCnbGuurWoLOuVxDZSzZK_WFgmpYCcB1qRPzhEE0ir03EuuimXg/s640/Rplot05.png" width="640" /></a></div>
<br />
일부 종목의 경우 허용치인 50bp 대비 차이가 더 큰것이 확인됩니다. 이러한 종목의 경우 차이가 50bp 이상 벌어지지 않도록 강제로 변경해주어야 합니다. 즉, 개별종목 투자비중의 상한은 지수내 비중 + 50bp, 하한은 지수내 비중 - 50bp로 바꿔주도록 합니다. 그 후 다시 투자비중의 합이 1이 되도록 표준화를 시행해 줍니다. 해당 작업은 비중의 차이가 50bp 이상 벌어지지 않을 때까지 while() 구문을 사용하여 계산하며, 미세한 비중차이로 인한 무한루프에 빠지는 것을 방지하기 위해 TE.max 값에 매우 작은 값을 더해주도록 합니다.<br />
<br />
<br />
<pre class="brush: xml">while (max(abs(method_second$TE)) > (TE.max + 0.0001)) {
method_second = method_second %>%
mutate_at(vars(투자비중), list(~ifelse(TE < -TE.max, 비중 - TE.max, 투자비중))) %>%
mutate_at(vars(투자비중), list(~ifelse(TE > TE.max, 비중 + TE.max, 투자비중))) %>%
mutate(투자비중 = 투자비중 / sum(투자비중),
TE = 투자비중 - 비중)
}
method_second %>%
select(종목명, TE) %>%
ggplot(aes(x = 종목명, y = TE)) +
geom_point() +
geom_hline(aes(yintercept = TE.max)) +
geom_hline(aes(yintercept = -TE.max))
</pre>
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqmXIdf59FbsUfkXPNSN8m2FMkgDafhvckA6Cpj3qYj569sqGMBIGZJHX8a-33tx8TANZIkxo6ZVcBdJpaipJsLg11YCKMbOOx49ve3qoTGhSz1iSPkrpv-jwKX2JBYGTBpxRea1Ohxg/s1600/Rplot06.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="473" data-original-width="632" height="478" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqmXIdf59FbsUfkXPNSN8m2FMkgDafhvckA6Cpj3qYj569sqGMBIGZJHX8a-33tx8TANZIkxo6ZVcBdJpaipJsLg11YCKMbOOx49ve3qoTGhSz1iSPkrpv-jwKX2JBYGTBpxRea1Ohxg/s640/Rplot06.png" width="640" /></a></div>
<br />
<br />
이제 지수내 비중과 투자비중의 최대 차이가 50bp 이내로 좁혀지게 되었습니다. 마지막으로 첫번째 방법과 두번째 방법의 비중 차이를 한번에 시각화 하도록 하겠습니다. (삼성전자 제외)<br />
<br />
<br />
<pre class="brush: xml">p2 = method_second %>%
slice(-1) %>%
select(종목명, 비중, 투자비중) %>%
gather(key, value, -종목명) %>%
ggplot(aes(x = 종목명)) +
geom_point(aes(y = value, color = key, shape = key), size = 1)
library(gridExtra)
grid.arrange(p1, p2)
</pre>
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjQ2brFOEpEh7BfAHe3AFBDV0t3EJwxb5k0V414u4DIQvK1HOSJOD2m_0GQZyZOvso5akjJJgbkieFN-uRDEdG45Zb7_qS1m-rJZxEsXfvBgAigBjIUWhOreHZxpD_B43LCp-lmYWnJgQ/s1600/Rplot07.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="473" data-original-width="632" height="478" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjQ2brFOEpEh7BfAHe3AFBDV0t3EJwxb5k0V414u4DIQvK1HOSJOD2m_0GQZyZOvso5akjJJgbkieFN-uRDEdG45Zb7_qS1m-rJZxEsXfvBgAigBjIUWhOreHZxpD_B43LCp-lmYWnJgQ/s640/Rplot07.png" width="640" /></a></div>
<br />
<br />
두번째 방법의 포트폴리오가 훨씬 더 기초지수 대비 액티브하게 배팅이 된 것을 확인할 수 있습니다. 팩터가 장기적으로 아웃퍼폼 한다면 두번째 포트폴리오의 아웃퍼폼 정도도 더욱 크겠지만, 트래킹 에러 또한 커질 수 있다는 점은 주의해야겠죠?</div>
Unknownnoreply@blogger.com0