workspace.ipynb 160 KB
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 2221 2222 2223 2224 2225 2226 2227 2228 2229 2230 2231 2232 2233 2234 2235 2236 2237 2238 2239 2240 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 2272 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 2284 2285 2286 2287 2288 2289 2290 2291 2292 2293 2294 2295 2296 2297 2298 2299 2300 2301 2302 2303 2304 2305 2306 2307 2308 2309 2310 2311 2312 2313 2314 2315 2316 2317 2318 2319 2320 2321 2322 2323 2324 2325 2326 2327 2328 2329 2330 2331 2332 2333 2334 2335 2336 2337 2338 2339 2340 2341 2342 2343 2344 2345 2346 2347 2348 2349 2350 2351 2352 2353 2354 2355 2356 2357 2358 2359 2360 2361 2362 2363 2364 2365 2366 2367 2368 2369 2370 2371 2372 2373 2374 2375 2376 2377 2378 2379 2380 2381 2382 2383 2384 2385 2386 2387 2388 2389 2390 2391 2392 2393 2394 2395 2396 2397 2398 2399 2400 2401 2402 2403 2404 2405 2406 2407 2408 2409 2410 2411 2412 2413 2414 2415 2416 2417 2418 2419 2420 2421 2422 2423 2424 2425 2426 2427 2428 2429 2430 2431 2432 2433 2434 2435 2436 2437 2438 2439 2440 2441 2442 2443 2444 2445 2446 2447 2448 2449 2450 2451 2452 2453 2454 2455 2456 2457 2458 2459 2460 2461 2462 2463 2464 2465 2466 2467 2468 2469 2470 2471 2472 2473 2474 2475 2476 2477 2478 2479 2480 2481 2482 2483 2484 2485 2486 2487 2488 2489 2490 2491 2492 2493 2494 2495 2496 2497 2498 2499 2500 2501 2502 2503 2504 2505 2506 2507 2508 2509 2510 2511 2512 2513 2514 2515 2516 2517 2518 2519 2520 2521 2522 2523 2524 2525 2526 2527 2528 2529 2530 2531 2532 2533 2534 2535 2536 2537 2538 2539 2540 2541 2542 2543 2544 2545 2546 2547 2548 2549 2550 2551 2552 2553 2554 2555 2556 2557 2558 2559 2560 2561 2562 2563 2564 2565 2566 2567 2568 2569 2570 2571 2572 2573 2574 2575 2576 2577 2578 2579 2580 2581 2582 2583 2584 2585 2586 2587 2588 2589 2590 2591 2592 2593 2594 2595 2596 2597 2598 2599 2600 2601 2602 2603 2604 2605 2606 2607 2608 2609 2610 2611 2612 2613 2614 2615 2616 2617 2618 2619 2620 2621 2622 2623 2624 2625 2626 2627 2628 2629 2630 2631 2632 2633 2634 2635 2636 2637 2638 2639 2640 2641 2642 2643 2644 2645 2646 2647 2648 2649 2650 2651 2652 2653 2654 2655 2656 2657 2658 2659 2660 2661 2662 2663 2664 2665 2666 2667 2668 2669 2670 2671 2672 2673 2674 2675 2676 2677 2678 2679 2680 2681 2682 2683 2684 2685 2686 2687 2688 2689 2690 2691 2692 2693 2694 2695 2696 2697 2698 2699 2700 2701 2702 2703 2704 2705 2706 2707 2708 2709 2710 2711 2712 2713 2714 2715 2716 2717 2718 2719 2720 2721 2722 2723 2724 2725 2726 2727 2728 2729 2730 2731 2732 2733 2734 2735 2736 2737 2738
{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import FinanceDataReader as fdr\n",
    "import numpy as np\n",
    "import pandas as pd"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "def basicinform(input):\n",
    "    stocks = pd.read_csv('stockcodename.csv',index_col=0)\n",
    "    symbol = ''\n",
    "    for i in enumerate(stocks.Name) :\n",
    "        if i[1] == input:\n",
    "            symbol = (stocks.iloc[i[0]].Symbol)\n",
    "            break\n",
    "    df = fdr.DataReader(symbol)\n",
    "    ror_df = df.Close.pct_change()\n",
    "    volume = df.Volume.iloc[-1]\n",
    "    price = df.Close.iloc[-1]\n",
    "    ror = ror_df[-1]\n",
    "    #print(\"현재가: \", price)\n",
    "    #print(\"거래량: \", volume)\n",
    "    #print(\"전일 대비 수익률:\", ror)\n",
    "    #display(df)\n",
    "    value = {\"현재가\": price ,\n",
    "              \"거래랑\": volume ,\n",
    "              \"전일 대비 수익률:\" : ror\n",
    "            }\n",
    "    return value"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "print(basicinform('삼성전자'))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "stocks = fdr.StockListing('KOSPI') # 코스피\n",
    "stocks.to_csv(\"stockcodename.csv\",mode='w', encoding='utf-8-sig')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "import datetime\n",
    "import pandas as pd\n",
    "import numpy as np\n",
    "import FinanceDataReader as fdr\n",
    "from scipy.optimize import minimize\n",
    "import json\n",
    "from datetime import date\n",
    "import math\n",
    "import itertools as it\n",
    "import operator\n",
    "from datetime import datetime\n",
    "from scipy import stats\n",
    "from scipy.stats import norm\n",
    "from dateutil import rrule\n",
    "from calendar import monthrange\n",
    "from dateutil.relativedelta import relativedelta\n",
    "from ast import literal_eval\n",
    "\n",
    "#소숫점 표현\n",
    "pd.options.display.float_format = '{:.3f}'.format\n",
    "np.set_printoptions(precision=3, suppress=True)\n",
    "\n",
    "class c_Models:\n",
    "    #Input 값으로, 자산 list, 사용자 포트폴리오 비중, 시작일, 마지막일\n",
    "    def __init__(self, assets, assets_w, start, end):\n",
    "        self.result = None\n",
    "        self.graph = None\n",
    "    \n",
    "        stocks = pd.read_csv('stockcodename.csv', index_col=0)\n",
    "        symbol = ''\n",
    "        self.asset_name = assets[:]\n",
    "        for k in range(len(assets)):\n",
    "            for i in enumerate(stocks.Name):\n",
    "                if i[1] == assets[k]:\n",
    "                    assets[k] = (stocks.iloc[i[0]].Symbol)\n",
    "                    break\n",
    "\n",
    "        data = pd.DataFrame()\n",
    "        # 전체 자산 data들을 가지고 온 후, 정리함\n",
    "        \n",
    "        for asset in assets: #total_list:\n",
    "            tmp = fdr.DataReader(asset,start,end).Close\n",
    "            if len(data) == 0 :\n",
    "                data = tmp\n",
    "            else:\n",
    "                data = pd.concat([data,tmp], axis=1)\n",
    "   \n",
    "        data.columns = self.asset_name\n",
    "   \n",
    "        if data.isnull().values.any() == True: #불러온 data에 오류가 있다면\n",
    "            return \"No Data\",''\n",
    "\n",
    "        else:\n",
    "            data = data.resample('M').mean() #일별 데이터를 월별 데이터로 만들어줌\n",
    "            data = data.pct_change() #월별 주가 데이터를 이용해 수익률 데이터로 변환\n",
    "            data.dropna(inplace=True) #결측치 제외(첫 row)\n",
    "\n",
    "            self.data = data\n",
    "            self.assets_w = assets_w\n",
    "            self.mu = data.mean() * 12\n",
    "            self.cov = data.cov() * 12\n",
    "\n",
    "    #GMV 최적화 : 제약 조건은 비중합=1, 공매도 불가능\n",
    "    def gmv_opt(self):\n",
    "        n_assets = len(self.data.columns)\n",
    "        w0 = np.ones(n_assets) / n_assets\n",
    "        fun = lambda w: np.dot(w.T, np.dot(self.cov, w))\n",
    "        constraints = ({'type':'eq', 'fun':lambda x: np.sum(x)-1})\n",
    "        bd = ((0,1),) * n_assets\n",
    "        #cov = data.cov() * 12\n",
    "        gmv = minimize(fun, w0, method = 'SLSQP', constraints=constraints, bounds=bd)\n",
    "        result = dict(zip(self.asset_name, np.round(gmv.x,3)))\n",
    "        return result\n",
    "    \n",
    "    #Max Sharp ratio : risk free rate은 0.8%로 지정했고, \n",
    "    def ms_opt(self):\n",
    "        n_assets = len(self.data.columns)\n",
    "        w0 = np.ones(n_assets) / n_assets\n",
    "        fun = lambda w: -(np.dot(w.T, self.mu) - 0.008) / np.sqrt(np.dot(w.T, np.dot(self.cov, w)))\n",
    "        bd = ((0,1),) * n_assets     \n",
    "        constraints = ({'type': 'eq', 'fun': lambda x:  np.sum(x) - 1})\n",
    "        maxsharp = minimize(fun, w0, method ='SLSQP', constraints=constraints, bounds=bd)\n",
    "        result = dict(zip(self.asset_name, np.round(maxsharp.x,3)))\n",
    "        return result\n",
    "    \n",
    "    def rp_opt(self):\n",
    "        def RC(cov, w):\n",
    "            pfo_std = np.sqrt(np.dot(w.T, np.dot(self.cov, w)))\n",
    "            mrc = 1/pfo_std * (np.dot(self.cov, w))\n",
    "            rc = mrc * w\n",
    "            rc = rc / rc.sum()\n",
    "            return rc\n",
    "        \n",
    "        \n",
    "        def RP_objective(x):\n",
    "            pfo_std = np.sqrt(np.dot(x.T, np.dot(self.cov, x)))\n",
    "            mrc = 1/pfo_std * (np.dot(self.cov, x))\n",
    "            rc = mrc * x\n",
    "            rc = rc / rc.sum()\n",
    "\n",
    "            a = np.reshape(rc, (len(rc),1))\n",
    "            differs = a - a.T\n",
    "            objective = np.sum(np.square(differs))\n",
    "\n",
    "            return objective    \n",
    "        \n",
    "        n_assets = len(self.data.columns)\n",
    "        w0 = np.ones(n_assets) / n_assets\n",
    "        constraints = [{'type':'eq', 'fun': lambda x: np.sum(x) -1}]\n",
    "        bd = ((0,1),) * n_assets\n",
    "\n",
    "        rp = minimize(RP_objective, w0,  constraints=constraints, bounds = bd, method='SLSQP')\n",
    "        result = dict(zip(self.asset_name, np.round(rp.x,3)))\n",
    "        return result     #, RC(self.cov, rp.x)\n",
    "\n",
    "    def plotting(self):\n",
    "        wt_gmv = np.asarray(list(self.gmv_opt().values()))\n",
    "        wt_ms = np.asarray(list(self.ms_opt().values()))\n",
    "        wt_rp = np.asarray(list(self.rp_opt().values()))\n",
    "        \n",
    "        ret_gmv = np.dot(wt_gmv, self.mu)\n",
    "        ret_ms = np.dot(wt_ms, self.mu)\n",
    "        ret_rp = np.dot(wt_rp, self.mu)\n",
    "        vol_gmv = np.sqrt(np.dot(wt_gmv.T, np.dot(self.cov, wt_gmv)))\n",
    "        vol_ms = np.sqrt(np.dot(wt_ms.T, np.dot(self.cov, wt_ms)))\n",
    "        vol_rp = np.sqrt(np.dot(wt_rp.T, np.dot(self.cov, wt_rp)))\n",
    "        \n",
    "        wt_gmv = wt_gmv.tolist()\n",
    "        wt_ms = wt_ms.tolist()\n",
    "        wt_rp = wt_rp.tolist()\n",
    "        \n",
    "        user_ret = np.dot(self.assets_w, self.mu)\n",
    "        user_risk = np.sqrt(np.dot(self.assets_w, np.dot(self.cov, self.assets_w)))\n",
    "\n",
    "        weights = {'gmv': wt_gmv, \"ms\" : wt_ms, \"rp\": wt_rp}\n",
    "        \n",
    "        #rec_rs = recommended_asset()\n",
    "\n",
    "        trets = np.linspace(ret_gmv, max(self.mu), 30) # 30개 짜르기 \n",
    "        tvols = []\n",
    "        \n",
    "        efpoints = dict()\n",
    "        for i, tret in enumerate(trets): #이 개별 return마다 최소 risk 찾기\n",
    "            n_assets = len(self.data.columns)\n",
    "            w0 = np.ones(n_assets) / n_assets\n",
    "            fun = lambda w: np.dot(w.T ,np.dot(self.cov, w))\n",
    "            constraints = [{'type': 'eq', 'fun': lambda x: np.sum(x) - 1},\n",
    "                           {'type': 'ineq', 'fun': lambda x: np.dot(x, self.mu) - tret}]\n",
    "                           #{'type': 'ineq', 'fun': lambda x: x}]\n",
    "            bd = ((0,1),) * n_assets\n",
    "\n",
    "            minvol = minimize(fun, w0, method='SLSQP',bounds = bd, constraints=constraints)\n",
    "            tvols.append(np.sqrt(np.dot(minvol.x, np.dot(self.cov, minvol.x))))\n",
    "            \n",
    "            pnumber = '{}point'.format(i+1)\n",
    "            efpoints[pnumber] = minvol.x.tolist()\n",
    "        \n",
    "        if self.data.shape[0] <= 1:\n",
    "            error = '기간에러'\n",
    "            return error,1,1\n",
    "        else:\n",
    "            ret_vol = {\"GMV\": [vol_gmv, ret_gmv],\"MaxSharp\": [vol_ms, ret_ms],\"RiskParity\": [vol_rp, ret_rp], \"Trets\" : trets.tolist(), \"Tvols\": tvols, \"User\" : [user_risk,user_ret]} #, \"Recommended\" : rec_rs}        \n",
    "            return ret_vol, json.dumps(efpoints), json.dumps(weights)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "class back_test:\n",
    "    # 단순 일별수익률의 평균을 *365하여 연간수익률을 산출\n",
    "    def __init__(self):\n",
    "        self.test = 0\n",
    "        \n",
    "    def Arithmetic_Mean_Annual(self,ret):\n",
    "        month_return =  np.mean(ret)\n",
    "        return (month_return*252)\n",
    "\n",
    "    # 기간중 투자했을때 하락할 수 있는 비율\n",
    "    def dd(self,ret):\n",
    "        cum_ret = (1 + ret).cumprod()\n",
    "        max_drawdown = 0\n",
    "        max_ret = 1\n",
    "        dd_list = []\n",
    "        c = 0\n",
    "        for ix_ret in cum_ret.values:\n",
    "            if max_ret < ix_ret:\n",
    "                max_ret = ix_ret\n",
    "            dd_list.append((ix_ret - max_ret) / max_ret) \n",
    "            c= c+1\n",
    "        return dd_list\n",
    "    \n",
    "    # 기간중 투자했을때 최고로 많이 하락할 수 있는 비율\n",
    "    def mdd(self,ret):\n",
    "        \n",
    "        cum_ret = (1 + ret).cumprod()\n",
    "        max_drawdown = 0\n",
    "        max_ret = 1\n",
    "        for ix_ret in cum_ret.values:\n",
    "            if max_drawdown > (ix_ret - max_ret) / max_ret:\n",
    "                max_drawdown = (ix_ret - max_ret) / max_ret\n",
    "            if max_ret < ix_ret:\n",
    "                max_ret = ix_ret\n",
    "\n",
    "        return abs(max_drawdown)\n",
    "\n",
    "    # 포트폴리오 수익률에서 무위험 수익률을 제한 후 이를 포트폴리오의 표준편차로 나눠 산출한 값, 즉 위험대비 얼마나 수익이 좋은지의 척도\n",
    "    def sharpe_ratio(self,ret, rf=0.008, num_of_date=252):\n",
    "        \n",
    "        return ((np.mean(ret - (rf / num_of_date))) / (np.std(ret))) * np.sqrt(num_of_date)\n",
    "    \n",
    "    # 설정한 confidence level에 따른(95%) 확률로 발생할 수 있는 손실액의 최대 액수\n",
    "    def value_at_risk(self,ret, para_or_hist=\"para\", confidence_level=0.95):\n",
    "        \n",
    "        vol = np.std(ret)\n",
    "        if para_or_hist == \"para\":\n",
    "            VaR = np.mean(ret) - vol * norm.ppf(confidence_level)\n",
    "        else:\n",
    "            print('error')\n",
    "\n",
    "        return VaR\n",
    "    \n",
    "    # 전체 투자기간에서 상승한 ( ret > 0 ) 기간의 비율\n",
    "    def winning_rate(self,ret):\n",
    "        var_winning_rate = np.sum(ret > 0) / len(ret)\n",
    "        return var_winning_rate    \n",
    "    \n",
    "    # 상승한날의 평균상승값을 하락한날의 평균하락값으로 나눈 비율\n",
    "    def profit_loss_ratio(self,ret):\n",
    "\n",
    "        if np.sum(ret > 0) == 0:\n",
    "            var_profit_loss_ratio = 0\n",
    "        elif np.sum(ret < 0) == 0:\n",
    "            var_profit_loss_ratio = np.inf\n",
    "        else:\n",
    "            win_mean = np.mean(ret[ret > 0])\n",
    "            loss_mean = np.mean(ret[ret < 0])\n",
    "            var_profit_loss_ratio = win_mean / loss_mean\n",
    "        return abs(var_profit_loss_ratio)\n",
    "\n",
    "    # 데이터 취합하는 코드 \n",
    "    #임시로 5가지 데이터 예시를 활용해 코드작성\n",
    "    # 선택한 종목의 이름과 비중, 투자기간을 input 값으로 받음       \n",
    "    \n",
    "    def backtest_data(self, assets,weight,start_data_1, end_data_1,start_amount,rebalancing_month, interval, opt_option):\n",
    "        # input으로 받는 assetnames 입력\n",
    "        a = assets\n",
    "        stock_num = len(a)\n",
    "        # input으로 받는 assetweights 입력\n",
    "        rebal_month = int(rebalancing_month)\n",
    "        # input으로 받는 rebalancing_month를 입력\n",
    "        # 나타내는 데이터 간격을 표시\n",
    "\n",
    "        # weight 간격  \n",
    "        b = list(map(float, weight))\n",
    "        \n",
    "\n",
    "        # input으로 받는 from_period와 to_period 입력\n",
    "        stock_return = pd.date_range(start=start_data_1, end=end_data_1)\n",
    "        stock_return = pd.DataFrame(stock_return)\n",
    "        stock_return.columns = ['Date']\n",
    "\n",
    "        stocks = pd.read_csv('stockcodename.csv', index_col=0)\n",
    "        symbol = ''\n",
    "        asset_name = assets[:]\n",
    "        for k in range(len(assets)):\n",
    "            for i in enumerate(stocks.Name):\n",
    "                if i[1] == assets[k]:\n",
    "                    assets[k] = (stocks.iloc[i[0]].Symbol)\n",
    "                    break\n",
    "        \n",
    "        # input으로 받는 from_period와 to_period 입력\n",
    "        stock_return = pd.date_range(start=start_data_1, end=end_data_1)\n",
    "        stock_return = pd.DataFrame(stock_return)\n",
    "        stock_return.columns = ['Date']\n",
    "        \n",
    "\n",
    "        for asset in assets: #total_list:\n",
    "            tmp = fdr.DataReader(asset,start_data_1,end_data_1)\n",
    "            tmp.insert(1,\"Date\",tmp.index.copy(),True)\n",
    "            tmp = tmp[['Date','Change']]\n",
    "            tmp.columns = ['Date',asset]\n",
    "            tmp = tmp.reset_index(drop=True)\n",
    "            stock_return = pd.merge(stock_return,tmp,how='inner', on='Date')\n",
    "\n",
    "        stock_return = stock_return.dropna(axis=0)\n",
    "\n",
    "        #print(stock_return)\n",
    "        if opt_option == 'basic' :\n",
    "\n",
    "            # 투자비중으로 이루어진 dataframe 만들기\n",
    "\n",
    "            start_datetime = stock_return.iloc[0,0]\n",
    "            end_datetime = stock_return.iloc[-1,0]\n",
    "            diff_months_list = list(rrule.rrule(rrule.MONTHLY, dtstart=start_datetime, until=end_datetime))\n",
    "            month_gap = len(diff_months_list)\n",
    "            rebal_roof = month_gap//rebal_month\n",
    "            rebal_weight = pd.DataFrame()\n",
    "\n",
    "            for i in range(rebal_roof+1):\n",
    "                # 데이터로부터 리밸런싱기간만큼 가져오기\n",
    "                filtered_df =stock_return.loc[stock_return[\"Date\"].between(start_datetime, \n",
    "                                                                         start_datetime + relativedelta(months=rebal_month)+relativedelta(days = -1))]\n",
    "                # 리밸런싱 기간의 누적수익률 산출\n",
    "                for j in range(stock_num):\n",
    "                    filtered_df.iloc[:,j+1] = (1 + filtered_df.iloc[:,j+1]).cumprod()\n",
    "                # 해당 누적수익률에 initial 투자비중을 곱해준다 \n",
    "                for j in range(stock_num):\n",
    "                    filtered_df.iloc[:,j+1] = filtered_df.iloc[:,j+1]*float(b[j])\n",
    "                # 이후 각각의 종목의 비중을 계산해서 산출한다\n",
    "                filtered_df['total_value'] = filtered_df.sum(axis=1)\n",
    "                for j in range(stock_num):\n",
    "                    filtered_df.iloc[:,j+1] = filtered_df.iloc[:,j+1]/filtered_df['total_value']\n",
    "\n",
    "                rebal_weight = pd.concat([rebal_weight,filtered_df])\n",
    "                start_datetime = start_datetime + relativedelta(months=rebal_month)\n",
    "\n",
    "                #final_day = monthrange(start_datetime.year, start_datetime.month)\n",
    "\n",
    "            stock_weight = rebal_weight.iloc[:,:-1]\n",
    "            #print(stock_weight)\n",
    "            '''\n",
    "            stock_weight = stock_return.Date\n",
    "            stock_weight = pd.DataFrame(stock_weight)\n",
    "            c = 0\n",
    "            for stockweight in b:\n",
    "                stock_weight[a[c]] = float(stockweight)\n",
    "                c = c + 1\n",
    "            #print(stock_weight)\n",
    "            '''\n",
    "        else :\n",
    "            # 포트폴리오 최적화 코드를 통한 리벨런싱 이중 리스트 weight 산출\n",
    "            # 1. 입력 받은 start ~ end 날짜를 리밸런싱 기간으로 쪼개기   \n",
    "            opt_start_datetime = stock_return.iloc[0,0]\n",
    "            opt_end_datetime = stock_return.iloc[-1,0]\n",
    "            opt_diff_months_list = list(rrule.rrule(rrule.MONTHLY, dtstart=opt_start_datetime, until=opt_end_datetime))\n",
    "            opt_month_gap = len(opt_diff_months_list)\n",
    "            opt_rebal_roof = opt_month_gap//rebal_month\n",
    "            opt_rebal_weight = pd.DataFrame()\n",
    "            #opt_array = [[0]*stock_num]*(opt_rebal_roof+1)\n",
    "\n",
    "            for i in range(opt_rebal_roof+1):\n",
    "                opt_df = stock_return.loc[stock_return[\"Date\"].between(opt_start_datetime,opt_start_datetime + relativedelta(months=rebal_month)+relativedelta(days = -1))]\n",
    "                # 최적화 코드에서 기간마다의 가중치를 가져온다\n",
    "                c_m = c_Models(a,b,opt_df.iat[0,0]- relativedelta(months=3),opt_df.iat[-1,0])\n",
    "                ret_vol, efpoints, weights = c_m.plotting()\n",
    "                weights = literal_eval(weights)\n",
    "                weights = weights.get(opt_option)\n",
    "                ##print(weights)\n",
    "                # 리밸런싱 기간의 누적수익률 산출\n",
    "                for j in range(stock_num):\n",
    "                    opt_df.iloc[:,j+1] = (1 + opt_df.iloc[:,j+1]).cumprod()\n",
    "                # 해당 누적수익률에 initial 투자비중을 곱해준다 \n",
    "                for j in range(stock_num):\n",
    "                    opt_df.iloc[:,j+1] = opt_df.iloc[:,j+1]*float(weights[j])\n",
    "                # 이후 각각의 종목의 비중을 계산해서 산출한다\n",
    "                opt_df['total_value'] = opt_df.sum(axis=1)\n",
    "                for j in range(stock_num):\n",
    "                    opt_df.iloc[:,j+1] = opt_df.iloc[:,j+1]/opt_df['total_value']\n",
    "\n",
    "                # 이후 각각의 종목의 비중을 계산해서 산출한다\n",
    "                #print(opt_df)\n",
    "                opt_rebal_weight = pd.concat([opt_rebal_weight,opt_df])\n",
    "                opt_start_datetime = opt_start_datetime + relativedelta(months=rebal_month)\n",
    "                #리밸런싱으로 start 기간이 고객이 원하는 end 기간보다 커지게 되면 종료 \n",
    "                if opt_start_datetime > stock_return.iloc[-1,0]:    # i가 100일 때\n",
    "                    break    \n",
    "            stock_weight = opt_rebal_weight.iloc[:,:-1]\n",
    "            ##print(stock_weight)\n",
    "        # 수익률 데이터와 투자비중을 곱한 하나의 데이터 생성 \n",
    "        pfo_return = stock_weight.Date\n",
    "        pfo_return = pd.DataFrame(pfo_return)\n",
    "        # weight 와 return의 날짜 맞춰주기 \n",
    "        #pfo_return = pfo_return[0:len(stock_weight)]\n",
    "        pfo_return = pd.merge(pfo_return, stock_return, left_on='Date', right_on='Date', how='left')\n",
    "        pfo_return['mean_return'] = 0\n",
    "        ##print(pfo_return)\n",
    "        for i in range(0,len(pfo_return)):\n",
    "            return_result = list(pfo_return.iloc[i,1:1+stock_num])\n",
    "            return_weight = list(stock_weight.iloc[i,1:1+stock_num])\n",
    "            pfo_return.iloc[i,1+stock_num]  = np.dot(return_result,return_weight)\n",
    "            #rint(pfo_return)\n",
    "        pfo_return['acc_return'] = [x+1 for x in pfo_return['mean_return']]\n",
    "        pfo_return['acc_return'] = list(it.accumulate(pfo_return['acc_return'], operator.mul))\n",
    "        pfo_return['acc_return'] = [x-1 for x in pfo_return['acc_return']]\n",
    "        pfo_return['final_balance'] = float(start_amount) + float(start_amount)*pfo_return['acc_return']\n",
    "        pfo_return['Drawdown_list'] = back_test.dd(input,pfo_return['mean_return'])\n",
    "        pfo_return = pfo_return.set_index('Date') \n",
    "        #print(pfo_return)\n",
    "        \n",
    "        \n",
    "        ### 벤치마크 데이터 로드 및 전처리\n",
    "        \n",
    "        tiker_list = ['KS11','US500'] \n",
    "        bench_list = [fdr.DataReader(ticker, start_data_1,  end_data_1)['Change'] for ticker in tiker_list]\n",
    "        bench = pd.concat(bench_list, axis=1)\n",
    "        bench.columns = ['KOSPI', 'S&P500']\n",
    "        bench['KOSPI'] = bench['KOSPI'].fillna(0)\n",
    "        bench['S&P500'] = bench['S&P500'].fillna(0)\n",
    "        #bench = bench.dropna()\n",
    "        \n",
    "        # 벤치마크 누적수익률, DD 값 \n",
    "        \n",
    "        bench['KOSPI_acc'] = [x+1 for x in bench['KOSPI']]\n",
    "        bench['KOSPI_acc'] = list(it.accumulate(bench['KOSPI_acc'], operator.mul))\n",
    "        bench['KOSPI_acc'] = [x-1 for x in bench['KOSPI_acc']]\n",
    "        bench['KOSPI_balance'] = float(start_amount) + float(start_amount)*bench['KOSPI_acc']\n",
    "        bench['KOSPI_Drawdown'] = back_test.dd(input,bench['KOSPI'])\n",
    "        bench['S&P500_acc'] = [x+1 for x in bench['S&P500']]\n",
    "        bench['S&P500_acc'] = list(it.accumulate(bench['S&P500_acc'], operator.mul))\n",
    "        bench['S&P500_acc'] = [x-1 for x in bench['S&P500_acc']]\n",
    "        bench['S&P500_balance'] = float(start_amount) + float(start_amount)*bench['S&P500_acc']\n",
    "        bench['S&P500_Drawdown'] = back_test.dd(input,bench['S&P500'])\n",
    "        \n",
    "        if interval == 'monthly' or interval == 'weekly' :\n",
    "            if interval == 'monthly' :\n",
    "                inter = 'M'\n",
    "            if interval == 'weekly' :\n",
    "                inter = 'W'\n",
    "            pfo_return_interval = pfo_return.resample(inter).last()\n",
    "            pfo_return_first = pd.DataFrame(pfo_return.iloc[0]).transpose()\n",
    "            pfo_return_interval = pd.concat([pfo_return_first, pfo_return_interval])\n",
    "            pfo_return_interval['mean_return'] = pfo_return_interval['final_balance'].pct_change()\n",
    "            pfo_return_interval = pfo_return_interval.dropna()\n",
    "            \n",
    "            # 월별 간격으로 만들어주기, 여기서는 return과 value만 monthly로 산출함 나머지값은 daily\n",
    "            bench_interval = bench.resample(inter).last()\n",
    "            #bench_ex['KOSPI'] = bench_ex['final_balance'].pct_change()\n",
    "            bench_first = pd.DataFrame(bench.iloc[0]).transpose()\n",
    "            bench_interval = pd.concat([bench_first, bench_interval])\n",
    "            bench_interval['KOSPI'] = bench_interval['KOSPI_balance'].pct_change()\n",
    "            bench_interval['S&P500'] = bench_interval['S&P500_balance'].pct_change()\n",
    "            bench_interval = bench_interval.dropna()\n",
    "            \n",
    "            # 날짜타입 열로 만들기 및 str 타입으로 전처리 \n",
    "            pfo_return = pfo_return.rename_axis('Date').reset_index()\n",
    "            pfo_return['Date'] =  pd.to_datetime(pfo_return['Date'], format='%d/%m/%Y').dt.date\n",
    "            pfo_return['Date'] = list(map(str, pfo_return['Date']))\n",
    "            \n",
    "            pfo_return_interval = pfo_return_interval.rename_axis('Date').reset_index()\n",
    "            pfo_return_interval['Date'] =  pd.to_datetime(pfo_return_interval['Date'], format='%d/%m/%Y').dt.date\n",
    "            pfo_return_interval['Date'] = list(map(str, pfo_return_interval['Date']))\n",
    "            \n",
    "            bench = bench.rename_axis('Date').reset_index()\n",
    "            bench['Date'] =  pd.to_datetime(bench['Date'], format='%d/%m/%Y').dt.date\n",
    "            bench['Date'] = list(map(str, bench['Date']))        \n",
    "           \n",
    "            bench_interval = bench_interval.rename_axis('Date').reset_index()\n",
    "            bench_interval['Date'] =  pd.to_datetime(bench_interval['Date'], format='%d/%m/%Y').dt.date\n",
    "            bench_interval['Date'] = list(map(str, bench_interval['Date']))       \n",
    "            \n",
    "            backtest_return = {\n",
    "                 'pfo_return': [\n",
    "                         {\n",
    "                         'Date': list(pfo_return_interval['Date']),\n",
    "                         'mean_return': list(pfo_return_interval['mean_return']),                 \n",
    "                         'acc_return ratio': list(pfo_return_interval['acc_return']),\n",
    "                         'final_balance': list(pfo_return_interval['final_balance']),\n",
    "                         'Drawdown_list' : list(pfo_return_interval['Drawdown_list'])\n",
    "                          }\n",
    "                 ],         \n",
    "                 'bench': [\n",
    "                         {\n",
    "                         'Date': list(bench_interval['Date']),\n",
    "                         'KOSPI_return': list(bench_interval['KOSPI']),              \n",
    "                         'S&P500_return': list(bench_interval['S&P500']),\n",
    "                         'KOSPI_acc_return': list(bench_interval['KOSPI_acc']),\n",
    "                         'KOSPI_balance' : list(bench_interval['KOSPI_balance']),                 \n",
    "                         'KOSPI_Drawdown': list(bench_interval['KOSPI_Drawdown']),\n",
    "                         'S&P500_acc_return': list(bench_interval['S&P500_acc']),\n",
    "                         'S&P500_balance' : list(bench_interval['S&P500_balance']),                 \n",
    "                         'S&P500_Drawdown': list(bench_interval['S&P500_Drawdown'])\n",
    "                          }\n",
    "                 ],    \n",
    "                 'indicator': [\n",
    "                         {\n",
    "                         'Mean': back_test.Arithmetic_Mean_Annual(input,pfo_return['mean_return']),\n",
    "                         'Std': pfo_return['mean_return'].std() * np.sqrt(365),                 \n",
    "                         'Sharpe ratio': back_test.sharpe_ratio(input,pfo_return['mean_return']),\n",
    "                         'VaR': back_test.value_at_risk(input,pfo_return['mean_return']),\n",
    "                         'MDD': back_test.mdd(input,pfo_return['mean_return']),\n",
    "                         'Winning ratio': back_test.winning_rate(input,pfo_return['mean_return']),\n",
    "                         'Gain/Loss Ratio': back_test.profit_loss_ratio(input,pfo_return['mean_return'])\n",
    "                          }\n",
    "                 ],    \n",
    "                 'KOSPI_indicator': [\n",
    "                         {\n",
    "                         'Mean': back_test.Arithmetic_Mean_Annual(input,bench['KOSPI']),\n",
    "                         'Std': bench['KOSPI'].std() * np.sqrt(365),                 \n",
    "                         'Sharpe ratio': back_test.sharpe_ratio(input,bench['KOSPI']),\n",
    "                         'VaR': back_test.value_at_risk(input,bench['KOSPI']),\n",
    "                         'MDD': back_test.mdd(input,bench['KOSPI']),\n",
    "                         'Winning ratio': back_test.winning_rate(input,bench['KOSPI']),\n",
    "                         'Gain/Loss Ratio': back_test.profit_loss_ratio(input,bench['KOSPI'])\n",
    "                          }\n",
    "                 ],    \n",
    "                 'S&P500_indicator': [\n",
    "                         {\n",
    "                         'Mean': back_test.Arithmetic_Mean_Annual(input,bench['S&P500']),\n",
    "                         'Std': bench['S&P500'].std() * np.sqrt(365),                 \n",
    "                         'Sharpe ratio': back_test.sharpe_ratio(input,bench['S&P500']),\n",
    "                        'VaR': back_test.value_at_risk(input,bench['S&P500']),\n",
    "                         'MDD': back_test.mdd(input,bench['S&P500']),\n",
    "                         'Winning ratio': back_test.winning_rate(input,bench['S&P500']),\n",
    "                         'Gain/Loss Ratio': back_test.profit_loss_ratio(input,bench['S&P500'])\n",
    "                          }\n",
    "                 ]\n",
    "             } \n",
    "            \n",
    "        else :\n",
    "            # 날짜타입 열로 만들기 및 str 타입으로 전처리 \n",
    "            pfo_return = pfo_return.rename_axis('Date').reset_index()\n",
    "            pfo_return['Date'] =  pd.to_datetime(pfo_return['Date'], format='%d/%m/%Y').dt.date\n",
    "            pfo_return['Date'] = list(map(str, pfo_return['Date']))\n",
    "            \n",
    "            bench = bench.rename_axis('Date').reset_index()\n",
    "            bench['Date'] =  pd.to_datetime(bench['Date'], format='%d/%m/%Y').dt.date\n",
    "            bench['Date'] = list(map(str, bench['Date']))\n",
    "            backtest_return = {\n",
    "                 'pfo_return': [\n",
    "                         {\n",
    "                         'Date': list(pfo_return['Date']),\n",
    "                         'mean_return': list(pfo_return['mean_return']),                 \n",
    "                         'acc_return ratio': list(pfo_return['acc_return']),\n",
    "                         'final_balance': list(pfo_return['final_balance']),\n",
    "                         'Drawdown_list' : list(pfo_return['Drawdown_list'])\n",
    "                          }\n",
    "                 ],         \n",
    "                 'bench': [\n",
    "                         {\n",
    "                         'Date': list(bench['Date']),\n",
    "                         'KOSPI_return': list(bench['KOSPI']),              \n",
    "                         'S&P500_return': list(bench['S&P500']),\n",
    "                         'KOSPI_acc_return': list(bench['KOSPI_acc']),\n",
    "                         'KOSPI_balance' : list(bench['KOSPI_balance']),                 \n",
    "                         'KOSPI_Drawdown': list(bench['KOSPI_Drawdown']),\n",
    "                         'S&P500_acc_return': list(bench['S&P500_acc']),\n",
    "                         'S&P500_balance' : list(bench['S&P500_balance']),                 \n",
    "                         'S&P500_Drawdown': list(bench['S&P500_Drawdown'])\n",
    "                          }\n",
    "                 ],    \n",
    "                 'indicator': [\n",
    "                         {\n",
    "                         'Mean': back_test.Arithmetic_Mean_Annual(input,pfo_return['mean_return']),\n",
    "                         'Std': pfo_return['mean_return'].std() * np.sqrt(365),                 \n",
    "                         'Sharpe ratio': back_test.sharpe_ratio(input,pfo_return['mean_return']),\n",
    "                         'VaR': back_test.value_at_risk(input,pfo_return['mean_return']),\n",
    "                         'MDD': back_test.mdd(input,pfo_return['mean_return']),\n",
    "                         'Winning ratio': back_test.winning_rate(input,pfo_return['mean_return']),\n",
    "                         'Gain/Loss Ratio': back_test.profit_loss_ratio(input,pfo_return['mean_return'])\n",
    "                          }\n",
    "                 ],    \n",
    "                 'KOSPI_indicator': [\n",
    "                         {\n",
    "                         'Mean': back_test.Arithmetic_Mean_Annual(input,bench['KOSPI']),\n",
    "                         'Std': bench['KOSPI'].std() * np.sqrt(365),                 \n",
    "                         'Sharpe ratio': back_test.sharpe_ratio(input,bench['KOSPI']),\n",
    "                         'VaR': back_test.value_at_risk(input,bench['KOSPI']),\n",
    "                         'MDD': back_test.mdd(input,bench['KOSPI']),\n",
    "                         'Winning ratio': back_test.winning_rate(input,bench['KOSPI']),\n",
    "                         'Gain/Loss Ratio': back_test.profit_loss_ratio(input,bench['KOSPI'])\n",
    "                          }\n",
    "                 ],    \n",
    "                 'S&P500_indicator': [\n",
    "                         {\n",
    "                         'Mean': back_test.Arithmetic_Mean_Annual(input,bench['S&P500']),\n",
    "                         'Std': bench['S&P500'].std() * np.sqrt(365),                 \n",
    "                         'Sharpe ratio': back_test.sharpe_ratio(input,bench['S&P500']),\n",
    "                        'VaR': back_test.value_at_risk(input,bench['S&P500']),\n",
    "                         'MDD': back_test.mdd(input,bench['S&P500']),\n",
    "                         'Winning ratio': back_test.winning_rate(input,bench['S&P500']),\n",
    "                         'Gain/Loss Ratio': back_test.profit_loss_ratio(input,bench['S&P500'])\n",
    "                          }\n",
    "                 ]\n",
    "             }  \n",
    "\n",
    "        \n",
    "\n",
    "        return backtest_return"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#gmv 포트폴리오 -> 해당 종목을 각각 몇 퍼센트로 투자해야 위험이 제일 적은가\n",
    "c_Models(['삼성전자','LG전자','카카오'],[0.2,0.5,0.3],'2015-01-01','2021-04-01').plotting()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'삼성전자': 0.727, 'LG전자': 0.0, '카카오': 0.273}"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "c_Models(['삼성전자','LG전자','카카오'],[0,0,0],'2015-01-01','2021-04-01').gmv_opt()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'삼성전자': 0.674, 'LG전자': 0.0, '카카오': 0.326}"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "c_Models(['삼성전자','LG전자','카카오'],[0,0,0],'2015-01-01','2021-04-01').ms_opt()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'삼성전자': 0.443, 'LG전자': 0.238, '카카오': 0.319}"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#risk parity -> 포트폴리오에 대한 자산 위험 비중을 동일하게 조정, 즉 삼전,lg,카카오의 포트폴리오 위험 기여도를 0.33으로 하게 만드는 비중\n",
    "c_Models(['삼성전자','LG전자','카카오'],[0,0,0],'2015-01-01','2021-04-01').rp_opt()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Anaconda3\\lib\\site-packages\\pandas\\core\\indexing.py:494: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame.\n",
      "Try using .loc[row_indexer,col_indexer] = value instead\n",
      "\n",
      "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  self.obj[item] = s\n",
      "C:\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:188: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame.\n",
      "Try using .loc[row_indexer,col_indexer] = value instead\n",
      "\n",
      "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n"
     ]
    }
   ],
   "source": [
    "#def backtest_data(self,assets,weight,start_data_1, end_data_1,start_amount,rebalancing_month, interval, opt_option):\n",
    "data = back_test().backtest_data(['삼성전자','LG전자'],[0.9,0.1],'2010-01-01', '2021-01-02',10000000,3, 'monthly', 'gmv')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'pfo_return': [{'Date': ['2010-01-31',\n",
       "    '2010-02-28',\n",
       "    '2010-03-31',\n",
       "    '2010-04-30',\n",
       "    '2010-05-31',\n",
       "    '2010-06-30',\n",
       "    '2010-07-31',\n",
       "    '2010-08-31',\n",
       "    '2010-09-30',\n",
       "    '2010-10-31',\n",
       "    '2010-11-30',\n",
       "    '2010-12-31',\n",
       "    '2011-01-31',\n",
       "    '2011-02-28',\n",
       "    '2011-03-31',\n",
       "    '2011-04-30',\n",
       "    '2011-05-31',\n",
       "    '2011-06-30',\n",
       "    '2011-07-31',\n",
       "    '2011-08-31',\n",
       "    '2011-09-30',\n",
       "    '2011-10-31',\n",
       "    '2011-11-30',\n",
       "    '2011-12-31',\n",
       "    '2012-01-31',\n",
       "    '2012-02-29',\n",
       "    '2012-03-31',\n",
       "    '2012-04-30',\n",
       "    '2012-05-31',\n",
       "    '2012-06-30',\n",
       "    '2012-07-31',\n",
       "    '2012-08-31',\n",
       "    '2012-09-30',\n",
       "    '2012-10-31',\n",
       "    '2012-11-30',\n",
       "    '2012-12-31',\n",
       "    '2013-01-31',\n",
       "    '2013-02-28',\n",
       "    '2013-03-31',\n",
       "    '2013-04-30',\n",
       "    '2013-05-31',\n",
       "    '2013-06-30',\n",
       "    '2013-07-31',\n",
       "    '2013-08-31',\n",
       "    '2013-09-30',\n",
       "    '2013-10-31',\n",
       "    '2013-11-30',\n",
       "    '2013-12-31',\n",
       "    '2014-01-31',\n",
       "    '2014-02-28',\n",
       "    '2014-03-31',\n",
       "    '2014-04-30',\n",
       "    '2014-05-31',\n",
       "    '2014-06-30',\n",
       "    '2014-07-31',\n",
       "    '2014-08-31',\n",
       "    '2014-09-30',\n",
       "    '2014-10-31',\n",
       "    '2014-11-30',\n",
       "    '2014-12-31',\n",
       "    '2015-01-31',\n",
       "    '2015-02-28',\n",
       "    '2015-03-31',\n",
       "    '2015-04-30',\n",
       "    '2015-05-31',\n",
       "    '2015-06-30',\n",
       "    '2015-07-31',\n",
       "    '2015-08-31',\n",
       "    '2015-09-30',\n",
       "    '2015-10-31',\n",
       "    '2015-11-30',\n",
       "    '2015-12-31',\n",
       "    '2016-01-31',\n",
       "    '2016-02-29',\n",
       "    '2016-03-31',\n",
       "    '2016-04-30',\n",
       "    '2016-05-31',\n",
       "    '2016-06-30',\n",
       "    '2016-07-31',\n",
       "    '2016-08-31',\n",
       "    '2016-09-30',\n",
       "    '2016-10-31',\n",
       "    '2016-11-30',\n",
       "    '2016-12-31',\n",
       "    '2017-01-31',\n",
       "    '2017-02-28',\n",
       "    '2017-03-31',\n",
       "    '2017-04-30',\n",
       "    '2017-05-31',\n",
       "    '2017-06-30',\n",
       "    '2017-07-31',\n",
       "    '2017-08-31',\n",
       "    '2017-09-30',\n",
       "    '2017-10-31',\n",
       "    '2017-11-30',\n",
       "    '2017-12-31',\n",
       "    '2018-01-31',\n",
       "    '2018-02-28',\n",
       "    '2018-03-31',\n",
       "    '2018-04-30',\n",
       "    '2018-05-31',\n",
       "    '2018-06-30',\n",
       "    '2018-07-31',\n",
       "    '2018-08-31',\n",
       "    '2018-09-30',\n",
       "    '2018-10-31',\n",
       "    '2018-11-30',\n",
       "    '2018-12-31',\n",
       "    '2019-01-31',\n",
       "    '2019-02-28',\n",
       "    '2019-03-31',\n",
       "    '2019-04-30',\n",
       "    '2019-05-31',\n",
       "    '2019-06-30',\n",
       "    '2019-07-31',\n",
       "    '2019-08-31',\n",
       "    '2019-09-30',\n",
       "    '2019-10-31',\n",
       "    '2019-11-30',\n",
       "    '2019-12-31',\n",
       "    '2020-01-31',\n",
       "    '2020-02-29',\n",
       "    '2020-03-31',\n",
       "    '2020-04-30',\n",
       "    '2020-05-31',\n",
       "    '2020-06-30',\n",
       "    '2020-07-31',\n",
       "    '2020-08-31',\n",
       "    '2020-09-30',\n",
       "    '2020-10-31',\n",
       "    '2020-11-30',\n",
       "    '2020-12-31'],\n",
       "   'mean_return': [-0.05067854441549435,\n",
       "    -0.04392728728061679,\n",
       "    0.09608616909605039,\n",
       "    0.04224004683675231,\n",
       "    -0.09349880594338011,\n",
       "    -0.013304369076572953,\n",
       "    0.049223594176685204,\n",
       "    -0.06455863090060376,\n",
       "    0.025910073719470406,\n",
       "    0.006800406553817195,\n",
       "    0.06191113306131535,\n",
       "    0.1483376513043253,\n",
       "    0.039085886857121555,\n",
       "    -0.059123343527013095,\n",
       "    0.009750812567713707,\n",
       "    -0.041845493562231995,\n",
       "    0.010078387458006821,\n",
       "    -0.08425720620842636,\n",
       "    0.02179176755447987,\n",
       "    -0.1184834123222751,\n",
       "    0.12903225806451557,\n",
       "    0.15238095238095206,\n",
       "    0.037190082644627864,\n",
       "    0.05378486055776932,\n",
       "    0.05540454593420452,\n",
       "    0.08461117503885873,\n",
       "    0.04817377650237287,\n",
       "    0.06168751591343846,\n",
       "    -0.12024654885956909,\n",
       "    -0.015023161011744612,\n",
       "    0.09419507114381642,\n",
       "    -0.05360097030904998,\n",
       "    0.08906160524237716,\n",
       "    0.01391334548400236,\n",
       "    0.05706752901958012,\n",
       "    0.05303008690584776,\n",
       "    -0.0413600106125549,\n",
       "    0.07346230722260616,\n",
       "    0.005565938289372685,\n",
       "    -0.007694871745331899,\n",
       "    0.011842105263158098,\n",
       "    -0.1274382314694409,\n",
       "    -0.00869020359158268,\n",
       "    0.012645042805025541,\n",
       "    -0.01209766387784994,\n",
       "    -0.013173248671310755,\n",
       "    0.010620269246981673,\n",
       "    -0.02577391440739274,\n",
       "    -0.04181497050031768,\n",
       "    -0.0047116773186722805,\n",
       "    0.0264384177564132,\n",
       "    -0.005284687211537187,\n",
       "    0.07400337935195145,\n",
       "    -0.07781942479695025,\n",
       "    0.01775925075947149,\n",
       "    -0.07660168101637443,\n",
       "    -0.04604590126576491,\n",
       "    -0.0075742446790788565,\n",
       "    -0.009510364534897064,\n",
       "    -0.04377798602349714,\n",
       "    0.030989496657980675,\n",
       "    0.012156704187521017,\n",
       "    -0.021547004254093394,\n",
       "    0.010295713111592386,\n",
       "    -0.07999770751897439,\n",
       "    -0.10478070290624009,\n",
       "    -0.061186364124779624,\n",
       "    -0.07719329872833658,\n",
       "    0.041172382120483686,\n",
       "    0.13861687697147196,\n",
       "    0.036449864731442405,\n",
       "    -0.009150716161753225,\n",
       "    0.004857507271232464,\n",
       "    0.08225283677732453,\n",
       "    0.015132225079005357,\n",
       "    -0.0456287804107095,\n",
       "    0.024224128812404988,\n",
       "    0.07669041163678636,\n",
       "    0.035539651043967835,\n",
       "    0.00560851059328038,\n",
       "    -0.03921248858993742,\n",
       "    0.025734687901158182,\n",
       "    0.04093426575898129,\n",
       "    0.0546084401581961,\n",
       "    0.10172698127582347,\n",
       "    -0.021052767198139533,\n",
       "    0.07530814822076137,\n",
       "    0.0833224594605575,\n",
       "    0.0017929179740028278,\n",
       "    0.06353467561521309,\n",
       "    -0.009768279015226478,\n",
       "    -0.009149571864888517,\n",
       "    0.09583977174807479,\n",
       "    0.10123470426030678,\n",
       "    -0.025222340901627893,\n",
       "    0.14217311367806795,\n",
       "    -0.011729193399137916,\n",
       "    -0.042344602452739855,\n",
       "    0.06631358738729642,\n",
       "    0.09024124067507455,\n",
       "    -0.04339622641509444,\n",
       "    -0.07988165680473347,\n",
       "    -0.013816138019827062,\n",
       "    0.046646728577094176,\n",
       "    -0.043620068479856666,\n",
       "    -0.08746060779675291,\n",
       "    -0.009072696233403343,\n",
       "    -0.07689576012436616,\n",
       "    0.08254940697189328,\n",
       "    0.03243358663672535,\n",
       "    0.04477828772143466,\n",
       "    0.016257609343450996,\n",
       "    0.0006404363675809321,\n",
       "    0.04119748469393292,\n",
       "    -0.04030983067003302,\n",
       "    -0.030325964051258425,\n",
       "    0.1146751747971102,\n",
       "    0.027787414396262866,\n",
       "    -0.001984126984127199,\n",
       "    0.10934393638170947,\n",
       "    -0.053254834746302215,\n",
       "    -0.0697308061424583,\n",
       "    -0.17592104143125498,\n",
       "    0.08434961916264672,\n",
       "    0.014000000000000012,\n",
       "    0.041420118343195256,\n",
       "    0.09659090909090895,\n",
       "    -0.06735751295336789,\n",
       "    0.07777777777777795,\n",
       "    -0.036368465091615954,\n",
       "    0.1545463117851742,\n",
       "    0.28197138103272],\n",
       "   'acc_return ratio': [-0.03398208329183405,\n",
       "    -0.07641662983729647,\n",
       "    0.012326958042457203,\n",
       "    0.055087696164277666,\n",
       "    -0.043561743592634206,\n",
       "    -0.05628655115483172,\n",
       "    -0.009833583329797224,\n",
       "    -0.07375737155378215,\n",
       "    -0.04975835676862461,\n",
       "    -0.043296327270283874,\n",
       "    0.015934281112334636,\n",
       "    0.16663558625208652,\n",
       "    0.21223457277982738,\n",
       "    0.14056321169804376,\n",
       "    0.15168462979694097,\n",
       "    0.1034918180350517,\n",
       "    0.11461323613394914,\n",
       "    0.020699038854369523,\n",
       "    0.042941875052164846,\n",
       "    -0.08062943715780757,\n",
       "    0.037999022563765195,\n",
       "    0.19617030219252918,\n",
       "    0.24065597458811894,\n",
       "    0.30738448318150424,\n",
       "    0.3798195268336002,\n",
       "    0.49656767834055304,\n",
       "    0.5686629951976061,\n",
       "    0.6654299186766806,\n",
       "    0.46516771858833694,\n",
       "    0.44315626804277386,\n",
       "    0.5790944753827074,\n",
       "    0.49445347929253414,\n",
       "    0.6275519051183829,\n",
       "    0.6501965970674413,\n",
       "    0.7443692392585997,\n",
       "    0.8368732916123707,\n",
       "    0.7609001927773642,\n",
       "    0.8902599837275214,\n",
       "    0.9007810541478194,\n",
       "    0.886154787720195,\n",
       "    0.9084908312589872,\n",
       "    0.6652761349476988,\n",
       "    0.6508045462987992,\n",
       "    0.6716790404494786,\n",
       "    0.6514556293064739,\n",
       "    0.6297005936319837,\n",
       "    0.6470084527283215,\n",
       "    0.6045585978394494,\n",
       "    0.5374640274047617,\n",
       "    0.5302199930185643,\n",
       "    0.5706765884532046,\n",
       "    0.5623760539727451,\n",
       "    0.6779971617852953,\n",
       "    0.5474163878442484,\n",
       "    0.57489734350529,\n",
       "    0.4542575595645624,\n",
       "    0.3872949595618602,\n",
       "    0.3767872480960859,\n",
       "    0.3636934994796943,\n",
       "    0.3039937445191383,\n",
       "    0.34440385430694187,\n",
       "    0.3607473742723144,\n",
       "    0.33142734481012237,\n",
       "    0.3451353387812166,\n",
       "    0.23752759537596035,\n",
       "    0.1078585840665982,\n",
       "    0.04007274534313643,\n",
       "    -0.04021390078733744,\n",
       "    -0.0006972207566251498,\n",
       "    0.1378230096510038,\n",
       "    0.17929650444110568,\n",
       "    0.1685050968584172,\n",
       "    0.17418111886287901,\n",
       "    0.2707608467797238,\n",
       "    0.28999028593478204,\n",
       "    0.23112960244591552,\n",
       "    0.2609526445203305,\n",
       "    0.35765562188308886,\n",
       "    0.4059062289226951,\n",
       "    0.4137912689007668,\n",
       "    0.35835299490044226,\n",
       "    0.39330978528380856,\n",
       "    0.4503438983192052,\n",
       "    0.5295449162993744,\n",
       "    0.685140903360292,\n",
       "    0.6496640242257852,\n",
       "    0.7738971670766384,\n",
       "    0.9217026418675796,\n",
       "    0.9251480970748727,\n",
       "    1.0474617569337692,\n",
       "    1.0274615792190342,\n",
       "    1.0089111737966694,\n",
       "    1.2014447621554991,\n",
       "    1.4243073715977124,\n",
       "    1.3631606646209455,\n",
       "    1.6991385744316378,\n",
       "    1.6674798560810555,\n",
       "    1.5545264820246114,\n",
       "    1.7239262971235139,\n",
       "    1.9697367856834012,\n",
       "    1.8408614157386496,\n",
       "    1.6139286990968054,\n",
       "    1.5778142994160973,\n",
       "    1.6980609033631122,\n",
       "    1.5803713019955898,\n",
       "    1.3546904595817568,\n",
       "    1.3333270683182783,\n",
       "    1.1539041097811853,\n",
       "    1.3317076167179462,\n",
       "    1.4073332577162798,\n",
       "    1.515129518971678,\n",
       "    1.5560195121393012,\n",
       "    1.5576564799911212,\n",
       "    1.6630254936778939,\n",
       "    1.5556793869577574,\n",
       "    1.478175945742334,\n",
       "    1.7623612054983298,\n",
       "    1.839120081027672,\n",
       "    1.8334869062637278,\n",
       "    2.143311518280636,\n",
       "    1.9759149828184523,\n",
       "    1.7684020320551017,\n",
       "    1.2813818634755654,\n",
       "    1.4738155548242986,\n",
       "    1.5084489725918386,\n",
       "    1.6123492258944592,\n",
       "    1.8646784124865374,\n",
       "    1.671720799210242,\n",
       "    1.8795213058154836,\n",
       "    1.7747975357243688,\n",
       "    2.20363226082116,\n",
       "    3.106964873725878],\n",
       "   'final_balance': [9660179.16708166,\n",
       "    9235833.701627035,\n",
       "    10123269.580424571,\n",
       "    10550876.961642776,\n",
       "    9564382.564073658,\n",
       "    9437134.488451682,\n",
       "    9901664.166702028,\n",
       "    9262426.284462178,\n",
       "    9502416.432313753,\n",
       "    9567036.72729716,\n",
       "    10159342.811123347,\n",
       "    11666355.862520866,\n",
       "    12122345.727798274,\n",
       "    11405632.116980437,\n",
       "    11516846.29796941,\n",
       "    11034918.180350516,\n",
       "    11146132.36133949,\n",
       "    10206990.388543695,\n",
       "    10429418.750521649,\n",
       "    9193705.628421925,\n",
       "    10379990.225637652,\n",
       "    11961703.021925291,\n",
       "    12406559.745881189,\n",
       "    13073844.831815042,\n",
       "    13798195.268336002,\n",
       "    14965676.783405531,\n",
       "    15686629.95197606,\n",
       "    16654299.186766805,\n",
       "    14651677.18588337,\n",
       "    14431562.680427738,\n",
       "    15790944.753827075,\n",
       "    14944534.792925341,\n",
       "    16275519.05118383,\n",
       "    16501965.970674412,\n",
       "    17443692.392585997,\n",
       "    18368732.916123707,\n",
       "    17609001.927773643,\n",
       "    18902599.837275214,\n",
       "    19007810.541478194,\n",
       "    18861547.877201952,\n",
       "    19084908.312589873,\n",
       "    16652761.349476987,\n",
       "    16508045.462987993,\n",
       "    16716790.404494785,\n",
       "    16514556.29306474,\n",
       "    16297005.936319837,\n",
       "    16470084.527283214,\n",
       "    16045585.978394493,\n",
       "    15374640.274047617,\n",
       "    15302199.930185642,\n",
       "    15706765.884532046,\n",
       "    15623760.539727451,\n",
       "    16779971.617852952,\n",
       "    15474163.878442485,\n",
       "    15748973.4350529,\n",
       "    14542575.595645623,\n",
       "    13872949.595618602,\n",
       "    13767872.480960859,\n",
       "    13636934.994796943,\n",
       "    13039937.445191383,\n",
       "    13444038.543069419,\n",
       "    13607473.742723145,\n",
       "    13314273.448101224,\n",
       "    13451353.387812166,\n",
       "    12375275.953759603,\n",
       "    11078585.840665981,\n",
       "    10400727.453431364,\n",
       "    9597860.992126625,\n",
       "    9993027.792433748,\n",
       "    11378230.096510038,\n",
       "    11792965.044411056,\n",
       "    11685050.968584172,\n",
       "    11741811.18862879,\n",
       "    12707608.467797238,\n",
       "    12899902.85934782,\n",
       "    12311296.024459155,\n",
       "    12609526.445203304,\n",
       "    13576556.21883089,\n",
       "    14059062.289226951,\n",
       "    14137912.689007668,\n",
       "    13583529.949004423,\n",
       "    13933097.852838086,\n",
       "    14503438.983192053,\n",
       "    15295449.162993744,\n",
       "    16851409.03360292,\n",
       "    16496640.242257852,\n",
       "    17738971.670766383,\n",
       "    19217026.418675795,\n",
       "    19251480.970748726,\n",
       "    20474617.569337692,\n",
       "    20274615.792190343,\n",
       "    20089111.737966694,\n",
       "    22014447.621554993,\n",
       "    24243073.715977125,\n",
       "    23631606.646209456,\n",
       "    26991385.744316377,\n",
       "    26674798.560810555,\n",
       "    25545264.820246115,\n",
       "    27239262.971235137,\n",
       "    29697367.856834013,\n",
       "    28408614.157386497,\n",
       "    26139286.990968056,\n",
       "    25778142.994160973,\n",
       "    26980609.033631124,\n",
       "    25803713.019955896,\n",
       "    23546904.595817566,\n",
       "    23333270.683182783,\n",
       "    21539041.097811855,\n",
       "    23317076.16717946,\n",
       "    24073332.5771628,\n",
       "    25151295.18971678,\n",
       "    25560195.12139301,\n",
       "    25576564.799911212,\n",
       "    26630254.93677894,\n",
       "    25556793.86957757,\n",
       "    24781759.45742334,\n",
       "    27623612.0549833,\n",
       "    28391200.81027672,\n",
       "    28334869.062637277,\n",
       "    31433115.182806358,\n",
       "    29759149.828184523,\n",
       "    27684020.320551015,\n",
       "    22813818.634755656,\n",
       "    24738155.548242986,\n",
       "    25084489.725918386,\n",
       "    26123492.258944593,\n",
       "    28646784.124865375,\n",
       "    26717207.99210242,\n",
       "    28795213.058154836,\n",
       "    27747975.357243687,\n",
       "    32036322.6082116,\n",
       "    41069648.73725878],\n",
       "   'Drawdown_list': [-0.07754960145733585,\n",
       "    -0.11807034511623878,\n",
       "    -0.0333291031662563,\n",
       "    -0.02032201292858712,\n",
       "    -0.11192073492877848,\n",
       "    -0.12373606924053768,\n",
       "    -0.08060320912116696,\n",
       "    -0.139958207194713,\n",
       "    -0.11767446094130253,\n",
       "    -0.1116742885628874,\n",
       "    -0.05667703724031674,\n",
       "    0.0,\n",
       "    -0.0287128712871287,\n",
       "    -0.08613861386138592,\n",
       "    -0.07722772277227723,\n",
       "    -0.11584158415841594,\n",
       "    -0.10693069306930708,\n",
       "    -0.18217821782178292,\n",
       "    -0.16435643564356484,\n",
       "    -0.263366336633664,\n",
       "    -0.1683168316831694,\n",
       "    -0.04158415841584302,\n",
       "    -0.00594059405940757,\n",
       "    -0.023985239852398286,\n",
       "    -0.01227156705182603,\n",
       "    0.0,\n",
       "    -0.028366116629887382,\n",
       "    0.0,\n",
       "    -0.13387766686349267,\n",
       "    -0.14688956213007032,\n",
       "    -0.06653076374137999,\n",
       "    -0.1165656205584898,\n",
       "    -0.03788553659912559,\n",
       "    -0.02449930567467362,\n",
       "    -0.015638148254153737,\n",
       "    -0.0051701859801974335,\n",
       "    -0.0780397524429489,\n",
       "    -0.010310425489882789,\n",
       "    -0.004801874392523945,\n",
       "    -0.012987012987013007,\n",
       "    -0.0038860103626943057,\n",
       "    -0.1308290155440415,\n",
       "    -0.1383822883548602,\n",
       "    -0.1274870955095391,\n",
       "    -0.13804246335715137,\n",
       "    -0.1493972443314581,\n",
       "    -0.14036361404403347,\n",
       "    -0.16251980867714297,\n",
       "    -0.19753901817190864,\n",
       "    -0.20131995537910752,\n",
       "    -0.1802041187057097,\n",
       "    -0.18453648351565646,\n",
       "    -0.12418942755758919,\n",
       "    -0.19234450253614543,\n",
       "    -0.17800114602941916,\n",
       "    -0.2409676400370989,\n",
       "    -0.2759179691414712,\n",
       "    -0.28140234361091804,\n",
       "    -0.2882364692771009,\n",
       "    -0.319396043177123,\n",
       "    -0.298304469131752,\n",
       "    -0.2897741641332812,\n",
       "    -0.3050774032400685,\n",
       "    -0.29792267954906543,\n",
       "    -0.3540872556862045,\n",
       "    -0.4217664470515025,\n",
       "    -0.45714645577137436,\n",
       "    -0.49905111157675097,\n",
       "    -0.47842585251975733,\n",
       "    -0.40612687308698814,\n",
       "    -0.3844802779433701,\n",
       "    -0.39011272421187165,\n",
       "    -0.38715019233509873,\n",
       "    -0.33674155713622284,\n",
       "    -0.3267049810932575,\n",
       "    -0.3574266116625778,\n",
       "    -0.3418608311320684,\n",
       "    -0.2913878673572944,\n",
       "    -0.2662040394376507,\n",
       "    -0.26208853701953044,\n",
       "    -0.2910238818420362,\n",
       "    -0.2727786027118664,\n",
       "    -0.2430103287696562,\n",
       "    -0.2016723036079014,\n",
       "    -0.12046083698505101,\n",
       "    -0.13897757022565124,\n",
       "    -0.07413556546280446,\n",
       "    0.0,\n",
       "    -0.049340706082517984,\n",
       "    -0.01573498964803305,\n",
       "    -0.055603059170859635,\n",
       "    -0.0642438868499567,\n",
       "    -0.040980489791817065,\n",
       "    -0.04593377606453268,\n",
       "    -0.0700080898864739,\n",
       "    -0.001300381701730636,\n",
       "    -0.05075765889529387,\n",
       "    -0.09095294846068076,\n",
       "    -0.04201227911004851,\n",
       "    0.0,\n",
       "    -0.043396226415094406,\n",
       "    -0.11981132075471686,\n",
       "    -0.13197212903065883,\n",
       "    -0.09148146853619904,\n",
       "    -0.13111110909386867,\n",
       "    -0.20710465960036548,\n",
       "    -0.21429835816869242,\n",
       "    -0.2747154831482734,\n",
       "    -0.21484367639626706,\n",
       "    -0.18937824075129273,\n",
       "    -0.15307998638239856,\n",
       "    -0.13931109165585345,\n",
       "    -0.1387598751777765,\n",
       "    -0.10327894831761204,\n",
       "    -0.13942562206918285,\n",
       "    -0.16552336971774698,\n",
       "    -0.06982961627602621,\n",
       "    -0.04398258636435734,\n",
       "    -0.06331471135940431,\n",
       "    -0.015873015873015647,\n",
       "    -0.08030298428681344,\n",
       "    -0.1444341985993071,\n",
       "    -0.29494622539468335,\n",
       "    -0.23547520801753832,\n",
       "    -0.2247718609297839,\n",
       "    -0.19266181966652052,\n",
       "    -0.1146802908843095,\n",
       "    -0.17431322465894153,\n",
       "    -0.11009314213241461,\n",
       "    -0.14245768862756153,\n",
       "    -0.022579715311894056,\n",
       "    0.0]}],\n",
       " 'bench': [{'Date': ['2010-01-31',\n",
       "    '2010-02-28',\n",
       "    '2010-03-31',\n",
       "    '2010-04-30',\n",
       "    '2010-05-31',\n",
       "    '2010-06-30',\n",
       "    '2010-07-31',\n",
       "    '2010-08-31',\n",
       "    '2010-09-30',\n",
       "    '2010-10-31',\n",
       "    '2010-11-30',\n",
       "    '2010-12-31',\n",
       "    '2011-01-31',\n",
       "    '2011-02-28',\n",
       "    '2011-03-31',\n",
       "    '2011-04-30',\n",
       "    '2011-05-31',\n",
       "    '2011-06-30',\n",
       "    '2011-07-31',\n",
       "    '2011-08-31',\n",
       "    '2011-09-30',\n",
       "    '2011-10-31',\n",
       "    '2011-11-30',\n",
       "    '2011-12-31',\n",
       "    '2012-01-31',\n",
       "    '2012-02-29',\n",
       "    '2012-03-31',\n",
       "    '2012-04-30',\n",
       "    '2012-05-31',\n",
       "    '2012-06-30',\n",
       "    '2012-07-31',\n",
       "    '2012-08-31',\n",
       "    '2012-09-30',\n",
       "    '2012-10-31',\n",
       "    '2012-11-30',\n",
       "    '2012-12-31',\n",
       "    '2013-01-31',\n",
       "    '2013-02-28',\n",
       "    '2013-03-31',\n",
       "    '2013-04-30',\n",
       "    '2013-05-31',\n",
       "    '2013-06-30',\n",
       "    '2013-07-31',\n",
       "    '2013-08-31',\n",
       "    '2013-09-30',\n",
       "    '2013-10-31',\n",
       "    '2013-11-30',\n",
       "    '2013-12-31',\n",
       "    '2014-01-31',\n",
       "    '2014-02-28',\n",
       "    '2014-03-31',\n",
       "    '2014-04-30',\n",
       "    '2014-05-31',\n",
       "    '2014-06-30',\n",
       "    '2014-07-31',\n",
       "    '2014-08-31',\n",
       "    '2014-09-30',\n",
       "    '2014-10-31',\n",
       "    '2014-11-30',\n",
       "    '2014-12-31',\n",
       "    '2015-01-31',\n",
       "    '2015-02-28',\n",
       "    '2015-03-31',\n",
       "    '2015-04-30',\n",
       "    '2015-05-31',\n",
       "    '2015-06-30',\n",
       "    '2015-07-31',\n",
       "    '2015-08-31',\n",
       "    '2015-09-30',\n",
       "    '2015-10-31',\n",
       "    '2015-11-30',\n",
       "    '2015-12-31',\n",
       "    '2016-01-31',\n",
       "    '2016-02-29',\n",
       "    '2016-03-31',\n",
       "    '2016-04-30',\n",
       "    '2016-05-31',\n",
       "    '2016-06-30',\n",
       "    '2016-07-31',\n",
       "    '2016-08-31',\n",
       "    '2016-09-30',\n",
       "    '2016-10-31',\n",
       "    '2016-11-30',\n",
       "    '2016-12-31',\n",
       "    '2017-01-31',\n",
       "    '2017-02-28',\n",
       "    '2017-03-31',\n",
       "    '2017-04-30',\n",
       "    '2017-05-31',\n",
       "    '2017-06-30',\n",
       "    '2017-07-31',\n",
       "    '2017-08-31',\n",
       "    '2017-09-30',\n",
       "    '2017-10-31',\n",
       "    '2017-11-30',\n",
       "    '2017-12-31',\n",
       "    '2018-01-31',\n",
       "    '2018-02-28',\n",
       "    '2018-03-31',\n",
       "    '2018-04-30',\n",
       "    '2018-05-31',\n",
       "    '2018-06-30',\n",
       "    '2018-07-31',\n",
       "    '2018-08-31',\n",
       "    '2018-09-30',\n",
       "    '2018-10-31',\n",
       "    '2018-11-30',\n",
       "    '2018-12-31',\n",
       "    '2019-01-31',\n",
       "    '2019-02-28',\n",
       "    '2019-03-31',\n",
       "    '2019-04-30',\n",
       "    '2019-05-31',\n",
       "    '2019-06-30',\n",
       "    '2019-07-31',\n",
       "    '2019-08-31',\n",
       "    '2019-09-30',\n",
       "    '2019-10-31',\n",
       "    '2019-11-30',\n",
       "    '2019-12-31',\n",
       "    '2020-01-31',\n",
       "    '2020-02-29',\n",
       "    '2020-03-31',\n",
       "    '2020-04-30',\n",
       "    '2020-05-31',\n",
       "    '2020-06-30',\n",
       "    '2020-07-31',\n",
       "    '2020-08-31',\n",
       "    '2020-09-30',\n",
       "    '2020-10-31',\n",
       "    '2020-11-30',\n",
       "    '2020-12-31'],\n",
       "   'KOSPI_return': [-0.05526756127403576,\n",
       "    -0.00481574130848661,\n",
       "    0.06134554152501992,\n",
       "    0.028856896104355156,\n",
       "    -0.05753344178852371,\n",
       "    0.03482237511608921,\n",
       "    0.03590458080512704,\n",
       "    -0.009294359081618686,\n",
       "    0.07465949044895193,\n",
       "    0.00535972307275423,\n",
       "    0.011617492376811311,\n",
       "    0.07682296293010449,\n",
       "    0.009231489521092318,\n",
       "    -0.06302076918965516,\n",
       "    0.08645659583359988,\n",
       "    0.040946568323624755,\n",
       "    -0.022959808272454696,\n",
       "    -0.019318983703492054,\n",
       "    0.015433368337522957,\n",
       "    -0.11863279665843596,\n",
       "    -0.05899199301350777,\n",
       "    0.07860039737232505,\n",
       "    -0.03223784253997908,\n",
       "    -0.011821956948384393,\n",
       "    0.07121356190411365,\n",
       "    0.03812165348127872,\n",
       "    -0.007674423748582848,\n",
       "    -0.015777149639128574,\n",
       "    -0.069940722879965,\n",
       "    0.005566157340927358,\n",
       "    0.015059251333322532,\n",
       "    0.01226802696181406,\n",
       "    0.04785722664160752,\n",
       "    -0.042401208594317175,\n",
       "    0.010849984702257842,\n",
       "    0.033180235902925626,\n",
       "    -0.017561471696768804,\n",
       "    0.033033220887884296,\n",
       "    -0.010806399378178622,\n",
       "    -0.02047156889564472,\n",
       "    0.018899612099777308,\n",
       "    -0.06853754384800981,\n",
       "    0.02691136963617624,\n",
       "    0.006685220542028691,\n",
       "    0.03646366708754356,\n",
       "    0.016659936453917945,\n",
       "    0.007425420787237735,\n",
       "    -0.016470778019000543,\n",
       "    -0.03497707474517031,\n",
       "    0.02019282438530645,\n",
       "    0.0027726357616191244,\n",
       "    -0.012098805396888346,\n",
       "    0.016896572704217627,\n",
       "    0.0037303319495238796,\n",
       "    0.03702240538925672,\n",
       "    -0.0038425837621287595,\n",
       "    -0.023435796373886708,\n",
       "    -0.027522539933030443,\n",
       "    0.00836978771628405,\n",
       "    -0.0330198878739304,\n",
       "    0.017595588367244064,\n",
       "    0.01861647035409164,\n",
       "    0.02781286232671043,\n",
       "    0.042260233416768545,\n",
       "    -0.005759157844634211,\n",
       "    -0.019226896622861034,\n",
       "    -0.02128306672804281,\n",
       "    -0.043524950571507626,\n",
       "    0.010992708379438998,\n",
       "    0.03393512837413204,\n",
       "    -0.018387672146351508,\n",
       "    -0.015629818364925496,\n",
       "    -0.025209269597184725,\n",
       "    0.0024622345403157997,\n",
       "    0.04114407533173425,\n",
       "    -0.0009622028968907514,\n",
       "    -0.005196380546329427,\n",
       "    -0.006326236214060921,\n",
       "    0.02331280474580799,\n",
       "    0.009075734119199819,\n",
       "    0.0044583885082305486,\n",
       "    -0.017385232344621637,\n",
       "    -0.012152609988212326,\n",
       "    0.021654379384350442,\n",
       "    0.020324226999567374,\n",
       "    0.01152009524351616,\n",
       "    0.03268976133723833,\n",
       "    0.02094301935683518,\n",
       "    0.06430529867241619,\n",
       "    0.019012714115760776,\n",
       "    0.00453351971039706,\n",
       "    -0.016459486834594417,\n",
       "    0.013208747197360982,\n",
       "    0.05367864970740732,\n",
       "    -0.018712598417968684,\n",
       "    -0.0037007335251139084,\n",
       "    0.040191592489587924,\n",
       "    -0.05412177571482346,\n",
       "    0.007233153269651016,\n",
       "    0.028559674268676005,\n",
       "    -0.03660222079074904,\n",
       "    -0.03992578079694897,\n",
       "    -0.01324080349407264,\n",
       "    0.01228213417282964,\n",
       "    0.008937826924118708,\n",
       "    -0.13373721699679886,\n",
       "    0.0331346270670545,\n",
       "    -0.026608769216538097,\n",
       "    0.08058430633505709,\n",
       "    -0.0043910894445098325,\n",
       "    -0.025042871945960332,\n",
       "    0.029293665757534004,\n",
       "    -0.07318812473725322,\n",
       "    0.0436116532105284,\n",
       "    -0.04985257899245399,\n",
       "    -0.028186740293772217,\n",
       "    0.048419799710129885,\n",
       "    0.009961267829478926,\n",
       "    0.0022130807968894217,\n",
       "    0.05256619852525879,\n",
       "    -0.035647962068593664,\n",
       "    -0.062074631069693575,\n",
       "    -0.11681447328810801,\n",
       "    0.11009161838386183,\n",
       "    0.042073861832342185,\n",
       "    0.03887935245837326,\n",
       "    0.06688187267078272,\n",
       "    0.03429304825152091,\n",
       "    0.0009431530579293579,\n",
       "    -0.026087553773174732,\n",
       "    0.14329520129682582,\n",
       "    0.10883421689734085],\n",
       "   'S&P500_return': [-0.05216188003565769,\n",
       "    0.028609665769995463,\n",
       "    0.058639531580342075,\n",
       "    0.014908060422157199,\n",
       "    -0.08199891616943134,\n",
       "    -0.05380459773110857,\n",
       "    0.06879846701281522,\n",
       "    -0.04739836654966689,\n",
       "    0.08735194732265605,\n",
       "    0.03672073759453687,\n",
       "    -0.002366266095723657,\n",
       "    0.06512199104021632,\n",
       "    0.022619055430014967,\n",
       "    0.03217289730049,\n",
       "    -0.0009750533848418286,\n",
       "    0.028480602449755255,\n",
       "    -0.013575967951341417,\n",
       "    -0.01828243361613291,\n",
       "    -0.02138466906757508,\n",
       "    -0.05685019353315235,\n",
       "    -0.07187089681280978,\n",
       "    0.10774026290936023,\n",
       "    -0.005115622238303419,\n",
       "    0.008562005503513603,\n",
       "    0.04381063414397457,\n",
       "    0.04080035894782563,\n",
       "    0.03140748396982462,\n",
       "    -0.007585843257574165,\n",
       "    -0.06260483470765765,\n",
       "    0.039441175884679325,\n",
       "    0.012708809125439258,\n",
       "    0.01962878545074198,\n",
       "    0.02417112778250985,\n",
       "    -0.01966986189478792,\n",
       "    0.0029493822787767243,\n",
       "    0.007110457382669688,\n",
       "    0.05048606085457319,\n",
       "    0.011139382760499084,\n",
       "    0.03609396577287094,\n",
       "    0.018118289184594127,\n",
       "    0.020501419988412595,\n",
       "    -0.015016503139298476,\n",
       "    0.04964281159901218,\n",
       "    -0.031567857684544065,\n",
       "    0.029929388428498127,\n",
       "    0.0445495988129887,\n",
       "    0.027962345070335237,\n",
       "    0.023400351769913952,\n",
       "    -0.035607702288935505,\n",
       "    0.04317938641020058,\n",
       "    0.006689074916660154,\n",
       "    0.006334484657756878,\n",
       "    0.02093848511417762,\n",
       "    0.01893702039194145,\n",
       "    -0.014667628435200197,\n",
       "    0.037410649176835786,\n",
       "    -0.01553995927590357,\n",
       "    0.02308920874515863,\n",
       "    0.02441881737347429,\n",
       "    -0.004085646312357638,\n",
       "    -0.031119467831855263,\n",
       "    0.05484726374376936,\n",
       "    -0.017506968953680313,\n",
       "    0.008549385891699846,\n",
       "    0.010612985342665304,\n",
       "    -0.021103522005337938,\n",
       "    0.019608518105364237,\n",
       "    -0.06277911202501785,\n",
       "    -0.026480736218457257,\n",
       "    0.0830687673494761,\n",
       "    0.0008423457795214695,\n",
       "    -0.017464737740075065,\n",
       "    -0.050726913274912744,\n",
       "    -0.004291840673648073,\n",
       "    0.06616498300637064,\n",
       "    0.0026955123043757023,\n",
       "    0.015419911688980603,\n",
       "    0.0008548962043062325,\n",
       "    0.03578714606783495,\n",
       "    -0.0014386519857052527,\n",
       "    -0.0010392765166636897,\n",
       "    -0.019489951303723885,\n",
       "    0.034202060075722907,\n",
       "    0.018100379727351124,\n",
       "    0.01789106309472044,\n",
       "    0.037162048880302834,\n",
       "    -0.0002884290811416834,\n",
       "    0.00924819602607374,\n",
       "    0.011410399382509206,\n",
       "    0.004787781742395136,\n",
       "    0.019253073266539023,\n",
       "    0.00032300856872269357,\n",
       "    0.01925489473494313,\n",
       "    0.02202997070796453,\n",
       "    0.028008628536642544,\n",
       "    0.009724985301528433,\n",
       "    0.056134337643113597,\n",
       "    -0.038843583498628376,\n",
       "    -0.026862034179550465,\n",
       "    0.0028192663160948594,\n",
       "    0.021568470472365098,\n",
       "    0.005102043295926562,\n",
       "    0.03611018311831882,\n",
       "    0.03021293602634234,\n",
       "    0.00429397361587025,\n",
       "    -0.06957367518626378,\n",
       "    0.017839816911489503,\n",
       "    -0.09180128062118387,\n",
       "    0.07853624412686266,\n",
       "    0.029768700989396768,\n",
       "    0.018209034620196407,\n",
       "    0.03916079882641221,\n",
       "    -0.06566563461065367,\n",
       "    0.06905172189290898,\n",
       "    0.013087959989040998,\n",
       "    -0.018105070603036788,\n",
       "    0.017144684157406997,\n",
       "    0.020448131532615266,\n",
       "    0.03401227923719019,\n",
       "    0.028447559374776388,\n",
       "    -0.0015617132306704473,\n",
       "    -0.08400223672351914,\n",
       "    -0.1252088201212309,\n",
       "    0.12699900554878818,\n",
       "    0.045155761009440853,\n",
       "    0.018497998093304435,\n",
       "    0.054955774700922166,\n",
       "    0.06986338946459902,\n",
       "    -0.0392825158376523,\n",
       "    -0.027751758824443473,\n",
       "    0.1073443140695245,\n",
       "    0.0370325982869566],\n",
       "   'KOSPI_acc_return': [-0.047804175008100636,\n",
       "    -0.052389703776282714,\n",
       "    0.0057419630002457644,\n",
       "    0.03476455433433401,\n",
       "    -0.024769011917288086,\n",
       "    0.00919084737456255,\n",
       "    0.04542542170191699,\n",
       "    0.035708862439566946,\n",
       "    0.11303435836276865,\n",
       "    0.11899991429405388,\n",
       "    0.1319998872680177,\n",
       "    0.2189634726444909,\n",
       "    0.23021632116880286,\n",
       "    0.152687142339077,\n",
       "    0.25234454872687384,\n",
       "    0.3036237603560379,\n",
       "    0.27369280875884683,\n",
       "    0.2490863581431797,\n",
       "    0.2683639679937784,\n",
       "    0.11789440328988543,\n",
       "    0.051947584461169205,\n",
       "    0.13463108261467438,\n",
       "    0.09805302443237651,\n",
       "    0.08507188885049377,\n",
       "    0.16234372297756194,\n",
       "    0.20665418761105192,\n",
       "    0.19739381205732287,\n",
       "    0.17850235070752785,\n",
       "    0.09607704438330522,\n",
       "    0.10217798167012138,\n",
       "    0.11877595691014586,\n",
       "    0.13250113051374868,\n",
       "    0.18669949378862194,\n",
       "    0.13638200101372,\n",
       "    0.14871172834064006,\n",
       "    0.18682625447143986,\n",
       "    0.16598383879455758,\n",
       "    0.2045000404931614,\n",
       "    0.19148373200455993,\n",
       "    0.16709219069678882,\n",
       "    0.18914978038563723,\n",
       "    0.10764837517060544,\n",
       "    0.13745671002173165,\n",
       "    0.14506085898523735,\n",
       "    0.18681397694225188,\n",
       "    0.20658622238073132,\n",
       "    0.21554563279799188,\n",
       "    0.19552465050821066,\n",
       "    0.1537086954476914,\n",
       "    0.1770053325266676,\n",
       "    0.1802687396032474,\n",
       "    0.16598889780675719,\n",
       "    0.18569011399085977,\n",
       "    0.1901131317053144,\n",
       "    0.23417398252638644,\n",
       "    0.22943156562148892,\n",
       "    0.20061885779395494,\n",
       "    0.16757477733597148,\n",
       "    0.17734713036516125,\n",
       "    0.13847126013180988,\n",
       "    0.1585033317930269,\n",
       "    0.18007057472446797,\n",
       "    0.21289171515508176,\n",
       "    0.26414880214680037,\n",
       "    0.2568683696561318,\n",
       "    0.2327026914442094,\n",
       "    0.20646699780636424,\n",
       "    0.1539555813606872,\n",
       "    0.16664067854941123,\n",
       "    0.20623077974246984,\n",
       "    0.18405100363172733,\n",
       "    0.16554450151015576,\n",
       "    0.13616197594406998,\n",
       "    0.13895947320463287,\n",
       "    0.18582090756995662,\n",
       "    0.18467990725749917,\n",
       "    0.1785238596337988,\n",
       "    0.17106823931384874,\n",
       "    0.19836912452098976,\n",
       "    0.20924520407180047,\n",
       "    0.21463648899326704,\n",
       "    0.19351975141786348,\n",
       "    0.17901537136565415,\n",
       "    0.20454621751718682,\n",
       "    0.22902768827347653,\n",
       "    0.24318620429930538,\n",
       "    0.2838256646155968,\n",
       "    0.31071285036044305,\n",
       "    0.3949986316766454,\n",
       "    0.42152134185259094,\n",
       "    0.42796583687462975,\n",
       "    0.4044622519823411,\n",
       "    0.42301343881701214,\n",
       "    0.49939887872820354,\n",
       "    0.47134122964221015,\n",
       "    0.4658961878267909,\n",
       "    0.5248128900399656,\n",
       "    0.4422873087981507,\n",
       "    0.4527195939615605,\n",
       "    0.49420879236882587,\n",
       "    0.4395174322430637,\n",
       "    0.3820435747899402,\n",
       "    0.36374420739590096,\n",
       "    0.3804938967285565,\n",
       "    0.39283251224731885,\n",
       "    0.20655896831670262,\n",
       "    0.24653784976628645,\n",
       "    0.2133690118021756,\n",
       "    0.31114751194670753,\n",
       "    0.30539014594680314,\n",
       "    0.2726994276823389,\n",
       "    0.3099814593266701,\n",
       "    0.21410637287798084,\n",
       "    0.26705555897262756,\n",
       "    0.20388957163111687,\n",
       "    0.16995584893316984,\n",
       "    0.22660487680820873,\n",
       "    0.23882341650704042,\n",
       "    0.24156503282084918,\n",
       "    0.3068293868181291,\n",
       "    0.2602435824067131,\n",
       "    0.18201442697086745,\n",
       "    0.043938034265320836,\n",
       "    0.15886686195005728,\n",
       "    0.20762486618182407,\n",
       "    0.25457653899160304,\n",
       "    0.33848496732819067,\n",
       "    0.38438569689671165,\n",
       "    0.38569138450009355,\n",
       "    0.34954208599392245,\n",
       "    0.5429249908649596,\n",
       "    0.7108480239770842],\n",
       "   'KOSPI_balance': [9521958.249918994,\n",
       "    9476102.962237174,\n",
       "    10057419.630002458,\n",
       "    10347645.543343341,\n",
       "    9752309.88082712,\n",
       "    10091908.473745625,\n",
       "    10454254.21701917,\n",
       "    10357088.624395669,\n",
       "    11130343.583627686,\n",
       "    11189999.142940538,\n",
       "    11319998.872680176,\n",
       "    12189634.72644491,\n",
       "    12302163.211688029,\n",
       "    11526871.42339077,\n",
       "    12523445.487268738,\n",
       "    13036237.603560379,\n",
       "    12736928.087588469,\n",
       "    12490863.581431797,\n",
       "    12683639.679937784,\n",
       "    11178944.032898854,\n",
       "    10519475.844611691,\n",
       "    11346310.826146744,\n",
       "    10980530.244323766,\n",
       "    10850718.888504937,\n",
       "    11623437.229775619,\n",
       "    12066541.87611052,\n",
       "    11973938.120573228,\n",
       "    11785023.507075278,\n",
       "    10960770.443833053,\n",
       "    11021779.816701213,\n",
       "    11187759.569101458,\n",
       "    11325011.305137487,\n",
       "    11866994.93788622,\n",
       "    11363820.0101372,\n",
       "    11487117.283406401,\n",
       "    11868262.544714399,\n",
       "    11659838.387945576,\n",
       "    12045000.404931614,\n",
       "    11914837.3200456,\n",
       "    11670921.906967888,\n",
       "    11891497.803856373,\n",
       "    11076483.751706054,\n",
       "    11374567.100217316,\n",
       "    11450608.589852374,\n",
       "    11868139.769422518,\n",
       "    12065862.223807313,\n",
       "    12155456.327979919,\n",
       "    11955246.505082106,\n",
       "    11537086.954476913,\n",
       "    11770053.325266676,\n",
       "    11802687.396032475,\n",
       "    11659888.978067571,\n",
       "    11856901.139908597,\n",
       "    11901131.317053145,\n",
       "    12341739.825263865,\n",
       "    12294315.65621489,\n",
       "    12006188.57793955,\n",
       "    11675747.773359714,\n",
       "    11773471.303651612,\n",
       "    11384712.601318099,\n",
       "    11585033.317930268,\n",
       "    11800705.74724468,\n",
       "    12128917.151550818,\n",
       "    12641488.021468004,\n",
       "    12568683.696561318,\n",
       "    12327026.914442094,\n",
       "    12064669.978063643,\n",
       "    11539555.813606871,\n",
       "    11666406.785494111,\n",
       "    12062307.797424698,\n",
       "    11840510.036317274,\n",
       "    11655445.015101558,\n",
       "    11361619.7594407,\n",
       "    11389594.732046328,\n",
       "    11858209.075699566,\n",
       "    11846799.072574992,\n",
       "    11785238.596337989,\n",
       "    11710682.393138487,\n",
       "    11983691.245209897,\n",
       "    12092452.040718004,\n",
       "    12146364.88993267,\n",
       "    11935197.514178636,\n",
       "    11790153.713656541,\n",
       "    12045462.175171869,\n",
       "    12290276.882734764,\n",
       "    12431862.042993054,\n",
       "    12838256.646155968,\n",
       "    13107128.50360443,\n",
       "    13949986.316766454,\n",
       "    14215213.418525908,\n",
       "    14279658.368746297,\n",
       "    14044622.519823411,\n",
       "    14230134.388170121,\n",
       "    14993988.787282035,\n",
       "    14713412.296422102,\n",
       "    14658961.878267908,\n",
       "    15248128.900399655,\n",
       "    14422873.087981507,\n",
       "    14527195.939615604,\n",
       "    14942087.923688259,\n",
       "    14395174.322430637,\n",
       "    13820435.747899402,\n",
       "    13637442.07395901,\n",
       "    13804938.967285566,\n",
       "    13928325.122473188,\n",
       "    12065589.683167025,\n",
       "    12465378.497662865,\n",
       "    12133690.118021756,\n",
       "    13111475.119467076,\n",
       "    13053901.459468031,\n",
       "    12726994.276823388,\n",
       "    13099814.593266701,\n",
       "    12141063.728779808,\n",
       "    12670555.589726277,\n",
       "    12038895.716311168,\n",
       "    11699558.489331698,\n",
       "    12266048.768082088,\n",
       "    12388234.165070403,\n",
       "    12415650.328208491,\n",
       "    13068293.868181292,\n",
       "    12602435.82406713,\n",
       "    11820144.269708674,\n",
       "    10439380.342653207,\n",
       "    11588668.619500574,\n",
       "    12076248.66181824,\n",
       "    12545765.38991603,\n",
       "    13384849.673281906,\n",
       "    13843856.968967117,\n",
       "    13856913.845000936,\n",
       "    13495420.859939225,\n",
       "    15429249.908649597,\n",
       "    17108480.239770845],\n",
       "   'KOSPI_Drawdown': [-0.06952292537600757,\n",
       "    -0.0740038622608742,\n",
       "    -0.017198127741190596,\n",
       "    -0.006056418656672124,\n",
       "    -0.06324141383496527,\n",
       "    -0.03062125495430894,\n",
       "    -0.007990249999999862,\n",
       "    -0.026583310249938135,\n",
       "    0.0,\n",
       "    -0.019016870129000003,\n",
       "    -0.03207116408869202,\n",
       "    0.0,\n",
       "    -0.021682180445405038,\n",
       "    -0.08333652194568193,\n",
       "    -0.004084918108117748,\n",
       "    -0.010678593107564818,\n",
       "    -0.03900836851820075,\n",
       "    -0.05757375018598983,\n",
       "    -0.04302893874165989,\n",
       "    -0.15655709205992827,\n",
       "    -0.20631347019242155,\n",
       "    -0.14392939356048431,\n",
       "    -0.17152726297398582,\n",
       "    -0.18132143200401749,\n",
       "    -0.12302041512246445,\n",
       "    -0.08958850327760744,\n",
       "    -0.09657538688903651,\n",
       "    -0.11082885219776005,\n",
       "    -0.17301812503905697,\n",
       "    -0.1684150138049292,\n",
       "    -0.15589196649280013,\n",
       "    -0.14553642637905007,\n",
       "    -0.10464416947927434,\n",
       "    -0.14260833881532173,\n",
       "    -0.1333056524076245,\n",
       "    -0.10454852949877728,\n",
       "    -0.12027397515381448,\n",
       "    -0.0912137910542501,\n",
       "    -0.1010344977774988,\n",
       "    -0.1194377319910545,\n",
       "    -0.10279544669598545,\n",
       "    -0.16428764310869334,\n",
       "    -0.14179747896287134,\n",
       "    -0.13606020584001308,\n",
       "    -0.10455779280208227,\n",
       "    -0.08963978253200902,\n",
       "    -0.08287997484934792,\n",
       "    -0.09798565520038448,\n",
       "    -0.12953547835965643,\n",
       "    -0.1119583411405332,\n",
       "    -0.10949612507937191,\n",
       "    -0.12027015816721147,\n",
       "    -0.10540573893461379,\n",
       "    -0.10206860538070092,\n",
       "    -0.06882502527736459,\n",
       "    -0.07240314311493432,\n",
       "    -0.09414211416995007,\n",
       "    -0.1190736240063581,\n",
       "    -0.11170045724561584,\n",
       "    -0.14103200854582928,\n",
       "    -0.12591796134756322,\n",
       "    -0.10964563898794631,\n",
       "    -0.08488233572313174,\n",
       "    -0.046209249626983175,\n",
       "    -0.05170228110913339,\n",
       "    -0.06993510331794306,\n",
       "    -0.08972973657543759,\n",
       "    -0.12934920479770476,\n",
       "    -0.11977839450571928,\n",
       "    -0.08990796132558639,\n",
       "    -0.10664243535573618,\n",
       "    -0.12060545182605815,\n",
       "    -0.1427743460732695,\n",
       "    -0.14066365545932635,\n",
       "    -0.10530705616424775,\n",
       "    -0.10616793230663424,\n",
       "    -0.11081262387488156,\n",
       "    -0.11643783325481,\n",
       "    -0.09583952098069626,\n",
       "    -0.08763360087202875,\n",
       "    -0.08356591700286095,\n",
       "    -0.0994983364642966,\n",
       "    -0.11044178197498233,\n",
       "    -0.09117895083740189,\n",
       "    -0.07270786553223617,\n",
       "    -0.0620253718246042,\n",
       "    -0.03136320508916573,\n",
       "    -0.011077025943605302,\n",
       "    -0.0033039337600000254,\n",
       "    -0.001600000000000034,\n",
       "    -0.019871512555774296,\n",
       "    -0.03600392449107353,\n",
       "    -0.023270744030428,\n",
       "    0.0,\n",
       "    -0.03196425173704777,\n",
       "    -0.035546694084153216,\n",
       "    -0.012194149999999924,\n",
       "    -0.06565595666349053,\n",
       "    -0.05889770299145193,\n",
       "    -0.03202012793538504,\n",
       "    -0.06745034093369502,\n",
       "    -0.10468311420384586,\n",
       "    -0.1165378291535978,\n",
       "    -0.10568702823464304,\n",
       "    -0.09769381367700981,\n",
       "    -0.2183657319148416,\n",
       "    -0.19246657193900987,\n",
       "    -0.21395404256092468,\n",
       "    -0.15061107433322105,\n",
       "    -0.1543408170789999,\n",
       "    -0.17551855170681596,\n",
       "    -0.1513664677372279,\n",
       "    -0.21347636455269142,\n",
       "    -0.17917476852167952,\n",
       "    -0.22009502321295168,\n",
       "    -0.24207800224746873,\n",
       "    -0.20537957092038975,\n",
       "    -0.1974641440035522,\n",
       "    -0.1956880673118312,\n",
       "    -0.15340844658191052,\n",
       "    -0.18358771016575026,\n",
       "    -0.234266201857975,\n",
       "    -0.323714992166838,\n",
       "    -0.24926168116574263,\n",
       "    -0.21767522086686517,\n",
       "    -0.187258940042029,\n",
       "    -0.13290129595560304,\n",
       "    -0.10316583825897731,\n",
       "    -0.10231998637687569,\n",
       "    -0.12573826200337315,\n",
       "    -0.01600000000000003,\n",
       "    0.0],\n",
       "   'S&P500_acc_return': [-0.03699647011622831,\n",
       "    -0.009445260990927795,\n",
       "    0.048640404909252144,\n",
       "    0.0642735994267547,\n",
       "    -0.02299568223397863,\n",
       "    -0.07556300653293557,\n",
       "    -0.011963158532465545,\n",
       "    -0.05879449090891897,\n",
       "    0.023421643140998816,\n",
       "    0.061002440747349285,\n",
       "    0.05849182664432884,\n",
       "    0.127422921895203,\n",
       "    0.15292416345862003,\n",
       "    0.1900170741648275,\n",
       "    0.1888567439886435,\n",
       "    0.22271610028389466,\n",
       "    0.20611654569285132,\n",
       "    0.1840658000129023,\n",
       "    0.15874494472539302,\n",
       "    0.0928700703621923,\n",
       "    0.01432451830538306,\n",
       "    0.12360810858301519,\n",
       "    0.11786015395560989,\n",
       "    0.1274312787459364,\n",
       "    0.17682475802154807,\n",
       "    0.22483963056751533,\n",
       "    0.26330876163017036,\n",
       "    0.25372549937852384,\n",
       "    0.17523622172115583,\n",
       "    0.22158892024810584,\n",
       "    0.23711386066529028,\n",
       "    0.2613969032144281,\n",
       "    0.2918862889464864,\n",
       "    0.2664750640591391,\n",
       "    0.2702103831695877,\n",
       "    0.27924215996613966,\n",
       "    0.34382605750192585,\n",
       "    0.3587954503199722,\n",
       "    0.40783976679615397,\n",
       "    0.4333474148165384,\n",
       "    0.4627330721569973,\n",
       "    0.4407679363869961,\n",
       "    0.5122917076109534,\n",
       "    0.4645518982075747,\n",
       "    0.5083850408427235,\n",
       "    0.5755829892677804,\n",
       "    0.6196399845006362,\n",
       "    0.657540129878569,\n",
       "    0.5985189344018895,\n",
       "    0.6675420011544506,\n",
       "    0.6786963145268503,\n",
       "    0.689329990576254,\n",
       "    0.7247020014368688,\n",
       "    0.7573627184081011,\n",
       "    0.7315863750286176,\n",
       "    0.7963661454242019,\n",
       "    0.7684506886796982,\n",
       "    0.8092828157861431,\n",
       "    0.85346336244179,\n",
       "    0.8458907666899398,\n",
       "    0.7884476283548136,\n",
       "    0.8865390871191088,\n",
       "    0.8535115058910103,\n",
       "    0.8693578910095783,\n",
       "    0.8891973589070585,\n",
       "    0.8493286408709371,\n",
       "    0.8855912350082233,\n",
       "    0.7672154916322504,\n",
       "    0.7204183243571656,\n",
       "    0.8633313538869662,\n",
       "    0.8649009231887632,\n",
       "    0.8323309176540474,\n",
       "    0.7393824261032691,\n",
       "    0.7319172738598907,\n",
       "    0.8465095508532698,\n",
       "    0.851486840067742,\n",
       "    0.8800366036348966,\n",
       "    0.8816438397913007,\n",
       "    0.9489825027335537,\n",
       "    0.9461785951858916,\n",
       "    0.9441559774746813,\n",
       "    0.9062644721468562,\n",
       "    0.9714626441434393,\n",
       "    1.0071468666207233,\n",
       "    1.0430568578518051,\n",
       "    1.118981036668532,\n",
       "    1.1183698609151693,\n",
       "    1.137960960644639,\n",
       "    1.1623559490698079,\n",
       "    1.1727088374033237,\n",
       "    1.2145401598367065,\n",
       "    1.2152554752841147,\n",
       "    1.257909986271717,\n",
       "    1.3076516771305031,\n",
       "    1.3722858357472112,\n",
       "    1.3953562806308772,\n",
       "    1.5298180188633634,\n",
       "    1.4315508214113097,\n",
       "    1.366234420137245,\n",
       "    1.3729054651339223,\n",
       "    1.4240854065923774,\n",
       "    1.4364531952898352,\n",
       "    1.5244339663309638,\n",
       "    1.6007045282584471,\n",
       "    1.6118718848854634,\n",
       "    1.4301543587383079,\n",
       "    1.473507867564857,\n",
       "    1.2464366776958293,\n",
       "    1.4228633770308874,\n",
       "    1.4949888724398797,\n",
       "    1.5404202111951424,\n",
       "    1.639905096020307,\n",
       "    1.466554052578235,\n",
       "    1.6368738570506949,\n",
       "    1.6713851565879225,\n",
       "    1.6230195397199934,\n",
       "    1.6679903812672001,\n",
       "    1.7225457995111042,\n",
       "    1.8151457874801151,\n",
       "    1.8952298144181077,\n",
       "    1.8907082957110992,\n",
       "    1.6478823331561347,\n",
       "    1.3163441104018032,\n",
       "    1.6105175089316246,\n",
       "    1.7283974136759017,\n",
       "    1.7788673038318552,\n",
       "    1.9315821093049976,\n",
       "    2.1363923719548232,\n",
       "    2.013186988930416,\n",
       "    1.929565750320668,\n",
       "    2.244037976310412,\n",
       "    2.364173131514747],\n",
       "   'S&P500_balance': [9630035.298837718,\n",
       "    9905547.390090723,\n",
       "    10486404.049092522,\n",
       "    10642735.994267548,\n",
       "    9770043.177660214,\n",
       "    9244369.934670644,\n",
       "    9880368.414675344,\n",
       "    9412055.090910811,\n",
       "    10234216.431409989,\n",
       "    10610024.407473493,\n",
       "    10584918.266443288,\n",
       "    11274229.21895203,\n",
       "    11529241.6345862,\n",
       "    11900170.741648275,\n",
       "    11888567.439886436,\n",
       "    12227161.002838947,\n",
       "    12061165.456928514,\n",
       "    11840658.000129024,\n",
       "    11587449.44725393,\n",
       "    10928700.703621924,\n",
       "    10143245.18305383,\n",
       "    11236081.085830152,\n",
       "    11178601.5395561,\n",
       "    11274312.787459364,\n",
       "    11768247.58021548,\n",
       "    12248396.305675153,\n",
       "    12633087.616301704,\n",
       "    12537254.993785238,\n",
       "    11752362.217211558,\n",
       "    12215889.202481057,\n",
       "    12371138.606652902,\n",
       "    12613969.032144282,\n",
       "    12918862.889464865,\n",
       "    12664750.64059139,\n",
       "    12702103.831695877,\n",
       "    12792421.599661397,\n",
       "    13438260.575019259,\n",
       "    13587954.503199723,\n",
       "    14078397.66796154,\n",
       "    14333474.148165382,\n",
       "    14627330.721569974,\n",
       "    14407679.363869961,\n",
       "    15122917.076109534,\n",
       "    14645518.982075747,\n",
       "    15083850.408427235,\n",
       "    15755829.892677803,\n",
       "    16196399.845006362,\n",
       "    16575401.29878569,\n",
       "    15985189.344018895,\n",
       "    16675420.011544507,\n",
       "    16786963.145268504,\n",
       "    16893299.90576254,\n",
       "    17247020.014368687,\n",
       "    17573627.18408101,\n",
       "    17315863.750286177,\n",
       "    17963661.45424202,\n",
       "    17684506.88679698,\n",
       "    18092828.15786143,\n",
       "    18534633.6244179,\n",
       "    18458907.666899398,\n",
       "    17884476.283548135,\n",
       "    18865390.871191088,\n",
       "    18535115.0589101,\n",
       "    18693578.91009578,\n",
       "    18891973.589070585,\n",
       "    18493286.40870937,\n",
       "    18855912.350082234,\n",
       "    17672154.916322503,\n",
       "    17204183.243571654,\n",
       "    18633313.538869664,\n",
       "    18649009.23188763,\n",
       "    18323309.176540475,\n",
       "    17393824.261032693,\n",
       "    17319172.738598906,\n",
       "    18465095.5085327,\n",
       "    18514868.40067742,\n",
       "    18800366.036348965,\n",
       "    18816438.39791301,\n",
       "    19489825.02733554,\n",
       "    19461785.951858915,\n",
       "    19441559.774746813,\n",
       "    19062644.72146856,\n",
       "    19714626.44143439,\n",
       "    20071468.66620723,\n",
       "    20430568.57851805,\n",
       "    21189810.36668532,\n",
       "    21183698.60915169,\n",
       "    21379609.606446393,\n",
       "    21623559.490698077,\n",
       "    21727088.374033235,\n",
       "    22145401.598367065,\n",
       "    22152554.752841145,\n",
       "    22579099.862717167,\n",
       "    23076516.771305032,\n",
       "    23722858.357472114,\n",
       "    23953562.806308772,\n",
       "    25298180.188633636,\n",
       "    24315508.214113098,\n",
       "    23662344.201372452,\n",
       "    23729054.651339225,\n",
       "    24240854.065923773,\n",
       "    24364531.952898353,\n",
       "    25244339.66330964,\n",
       "    26007045.282584473,\n",
       "    26118718.848854635,\n",
       "    24301543.587383077,\n",
       "    24735078.67564857,\n",
       "    22464366.776958294,\n",
       "    24228633.770308875,\n",
       "    24949888.7243988,\n",
       "    25404202.111951426,\n",
       "    26399050.96020307,\n",
       "    24665540.52578235,\n",
       "    26368738.57050695,\n",
       "    26713851.565879226,\n",
       "    26230195.397199936,\n",
       "    26679903.812672,\n",
       "    27225457.99511104,\n",
       "    28151457.87480115,\n",
       "    28952298.144181076,\n",
       "    28907082.957110994,\n",
       "    26478823.33156135,\n",
       "    23163441.104018033,\n",
       "    26105175.089316245,\n",
       "    27283974.136759017,\n",
       "    27788673.038318552,\n",
       "    29315821.093049977,\n",
       "    31363923.719548233,\n",
       "    30131869.88930416,\n",
       "    29295657.50320668,\n",
       "    32440379.763104122,\n",
       "    33641731.315147474],\n",
       "   'S&P500_Drawdown': [-0.06623940759467108,\n",
       "    -0.03952482913676168,\n",
       "    -0.004129960911486199,\n",
       "    -0.025109627861824954,\n",
       "    -0.10504958176116883,\n",
       "    -0.1532020290037965,\n",
       "    -0.09494362672969522,\n",
       "    -0.13784182045807336,\n",
       "    -0.06253062457492996,\n",
       "    -0.028106057637031494,\n",
       "    -0.03703682364167275,\n",
       "    -0.0016996999999999225,\n",
       "    -0.010337829999999928,\n",
       "    -0.011635409687289018,\n",
       "    -0.012599117926531248,\n",
       "    0.0,\n",
       "    -0.013575967951341441,\n",
       "    -0.03161019983462915,\n",
       "    -0.052318895239580616,\n",
       "    -0.10619474945292226,\n",
       "    -0.17043333438573882,\n",
       "    -0.08105560373161703,\n",
       "    -0.08575657612093186,\n",
       "    -0.07792881889412814,\n",
       "    -0.03753229572399625,\n",
       "    -0.004700000000000074,\n",
       "    -0.005608295685222691,\n",
       "    -0.01497354169486274,\n",
       "    -0.07664096029972528,\n",
       "    -0.04022259401019821,\n",
       "    -0.028024966154564738,\n",
       "    -0.008946276751735226,\n",
       "    -0.017088995298985575,\n",
       "    -0.03642271901632161,\n",
       "    -0.03358076125955656,\n",
       "    -0.026709078448700477,\n",
       "    -0.006489860000000004,\n",
       "    -0.010647276611048974,\n",
       "    0.0,\n",
       "    0.0,\n",
       "    -0.023024266935656613,\n",
       "    -0.03769502609823575,\n",
       "    -0.005703360259950916,\n",
       "    -0.045051727295136734,\n",
       "    -0.025351509282157427,\n",
       "    -0.008681380000000015,\n",
       "    -0.0008000000000000818,\n",
       "    0.0,\n",
       "    -0.03560770228893546,\n",
       "    0.0,\n",
       "    -0.003183166798866691,\n",
       "    -0.0035505924004526138,\n",
       "    0.0,\n",
       "    -0.001334251139657178,\n",
       "    -0.02870444000558507,\n",
       "    0.0,\n",
       "    -0.019464008088350186,\n",
       "    0.0,\n",
       "    -0.0024999999999999836,\n",
       "    -0.015149530000000055,\n",
       "    -0.04579755252035255,\n",
       "    -0.00529190359999993,\n",
       "    -0.023463839532531783,\n",
       "    -0.015115055059496467,\n",
       "    -0.010958189109944231,\n",
       "    -0.031830454730261824,\n",
       "    -0.012846084672777975,\n",
       "    -0.07481873090904057,\n",
       "    -0.09931821205009579,\n",
       "    -0.024499686150975142,\n",
       "    -0.023677977578682414,\n",
       "    -0.0407291856501305,\n",
       "    -0.08939003305681134,\n",
       "    -0.09329822595076731,\n",
       "    -0.033306318478953864,\n",
       "    -0.030700583765851684,\n",
       "    -0.01575407236734055,\n",
       "    -0.014912644259703593,\n",
       "    -0.0007075814065506601,\n",
       "    -0.008817642662283492,\n",
       "    -0.009847755209996013,\n",
       "    -0.029145774244225976,\n",
       "    -0.0066960713969999456,\n",
       "    -0.014597396606013514,\n",
       "    -0.008482942983598104,\n",
       "    -0.0026000000000000532,\n",
       "    -0.013799377607913136,\n",
       "    -0.00467880093099535,\n",
       "    -0.001699399999999768,\n",
       "    -0.012356986934607453,\n",
       "    -0.0029970909099998858,\n",
       "    -0.0038610651657301127,\n",
       "    0.0,\n",
       "    -0.002302880000000097,\n",
       "    0.0,\n",
       "    -0.006204356879003444,\n",
       "    -0.017035733485000232,\n",
       "    -0.055217588047543634,\n",
       "    -0.08059636548964871,\n",
       "    -0.07800432179197843,\n",
       "    -0.05811828523090037,\n",
       "    -0.05331276394250696,\n",
       "    -0.019127714492695885,\n",
       "    -0.0043004400000000555,\n",
       "    -0.005700127065855784,\n",
       "    -0.07487722346311919,\n",
       "    -0.05837320250905261,\n",
       "    -0.14481574838594577,\n",
       "    -0.07765278922773604,\n",
       "    -0.05019571090185251,\n",
       "    -0.032900691719253236,\n",
       "    0.0,\n",
       "    -0.06566563461065364,\n",
       "    -0.004163690502721182,\n",
       "    -0.01505010534400002,\n",
       "    -0.03288269272720068,\n",
       "    -0.016301771950846453,\n",
       "    -0.0029999999999999628,\n",
       "    -0.003999999999999987,\n",
       "    -0.0029168200000001857,\n",
       "    -0.03128417746936503,\n",
       "    -0.127552590525381,\n",
       "    -0.23679070128352242,\n",
       "    -0.13986387932094174,\n",
       "    -0.10102377821997069,\n",
       "    -0.08439451778355771,\n",
       "    -0.03407670918794173,\n",
       "    -0.0022000000000000418,\n",
       "    -0.0608964535118505,\n",
       "    -0.08695822864516915,\n",
       "    -0.004600000000000018,\n",
       "    0.0]}],\n",
       " 'indicator': [{'Mean': 0.1642931796250566,\n",
       "   'Std': 0.31009740658645263,\n",
       "   'Sharpe ratio': 0.606691735623862,\n",
       "   'VaR': -0.026041138050481374,\n",
       "   'MDD': 0.5092525478472374,\n",
       "   'Winning ratio': 0.5077376565954311,\n",
       "   'Gain/Loss Ratio': 1.0584216709276888}],\n",
       " 'KOSPI_indicator': [{'Mean': 0.060352718344440656,\n",
       "   'Std': 0.19303941793498092,\n",
       "   'Sharpe ratio': 0.32644917684840274,\n",
       "   'VaR': -0.016377429535298044,\n",
       "   'MDD': 0.4381875851692738,\n",
       "   'Winning ratio': 0.5015783935461242,\n",
       "   'Gain/Loss Ratio': 0.9515509731489774}],\n",
       " 'S&P500_indicator': [{'Mean': 0.1221903893370747,\n",
       "   'Std': 0.20753149406227922,\n",
       "   'Sharpe ratio': 0.6623200182189786,\n",
       "   'VaR': -0.017379526723227807,\n",
       "   'MDD': 0.33925448191870333,\n",
       "   'Winning ratio': 0.5289372150122764,\n",
       "   'Gain/Loss Ratio': 0.9437313817386278}]}"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAmEAAAF6CAYAAABRDI+OAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAgAElEQVR4nOzdd3TUVdrA8e+d9N4TSkIKoaURQqhBsAEWhLVj767ttSuuu6+r+K6ra1uQtRfWFYUVVl07HaQbeguQkB5Ib5M+mfv+kSIhgQTIZFKezzlzMvx+d+59JvEcn3Pv/T1Xaa0RQgghhBBdy2DtAIQQQggh+iJJwoQQQgghrECSMCGEEEIIK5AkTAghhBDCCiQJE0IIIYSwAknChBBCCCGsQJIwIYToIKXU80qpz6wdhxCid5AkTAghzoJSKkQppZVSttaORQjRM0kSJoTodSQxEkL0BJKECSF6BaVUmlJqjlJqD1ChlBqklFqmlMpXSqUqpR4+oe1YpVSiUqpMKZWrlHqj8fr5SqmsNvq9uI0h1zf+LFFKGZVSEyz25YQQvZIkYUKI3uQG4HLAG/gK2A0MBC4CHlVKTW9sNw+Yp7V2BwYD/z6LsSY3/vTUWrtqrTefU+RCiD5HkjAhRG8yX2udCUQBflrruVrrWq31UeADYHZjuzogXCnlq7U2aq23WCtgIUTfJUmYEKI3yWz8GQwMUEqVNL2AZ4GAxvt3AUOBJKXUr0qpGVaIVQjRx8nmVSFEb6Ibf2YCqVrrIW020voIcINSygBcBSxVSvkAFYBzUzullA3g185YQghxVmQmTAjRG20Dyho36jsppWyUUlFKqTEASqmblVJ+WmszUNL4mXrgMOColLpcKWUH/AlwOMUY+YAZCLPsVxFC9FaShAkheh2tdT1wBRALpAIFwIeAR2OTS4D9SikjDZv0Z2utq7XWpcADjW2zaZgZy6INWutK4C/AxsYlz/EW/EpCiF5IaS0z6kIIIYQQXU1mwoQQQgghrECSMCGEEEIIK5AkTAghhBDCCiQJE0IIIYSwAknChBBCCCGsoMcVa/X19dUhISHWDkMIIYQQol3bt28v0Fq3WfS5xyVhISEhJCYmWjsMIYQQQoh2KaXST3VPliOFEEIIIaxAkjAhhBBCCCuQJEwIIYQQwgp63J6wttTV1ZGVlUV1dbW1QxGn4OjoSGBgIHZ2dtYORQghhOgWekUSlpWVhZubGyEhISilrB2OOInWmsLCQrKysggNDbV2OEIIIUS30CuWI6urq/Hx8ZEErJtSSuHj4yMzlUIIIcQJekUSBkgC1s3J30cIIYRoqdckYeLspKWlERUVBcCuXbv44YcfrByREEII0TdIEtYDaa0xm82d3q8kYUIIIUTXkSSsk7z44osMHz6cqVOncsMNN/Daa68BcP755/PYY48xefJkRowYwa+//spVV13FkCFD+NOf/gTAnDlzePvtt5v7ev7553n99ddb9J+WlsaIESN44IEHiIuLIzMzk+XLlzNhwgTi4uK49tprMRqNADzzzDNEREQQExPDk08+CcDtt9/O0qVLm/tzdXVt0X9tbS3PPfccS5YsITY2liVLlnT+L0kIIYToJv6xJpkVB3KtGkOveDryRC98u58DOWWd2mfEAHf+fEXkKe8nJiaybNkydu7ciclkIi4ujtGjRzfft7e3Z/369cybN49Zs2axfft2vL29GTx4MI899hizZ8/m0Ucf5YEHHgDg3//+Nz/99FOrcQ4dOsQnn3zC22+/TUFBAf/3f//HypUrcXFx4ZVXXuGNN97goYce4quvviIpKQmlFCUlJR36jvb29sydO5fExEQWLFhwhr8hIYQQomd5b10KV8UFMjUiwGox9LokzBo2bNjArFmzcHJyAuCKK65ocX/mzJkAREdHExkZSf/+/QEICwsjMzOTUaNGkZeXR05ODvn5+Xh5eTFo0KBW4wQHBzN+/HgAtmzZwoEDB0hISAAaZrImTJiAu7s7jo6O3H333Vx++eXMmDHDYt9bCCGE6Im01hhrTLg6WDcN6nVJ2OlmrCxFa33a+w4ODgAYDIbm903/NplMAFxzzTUsXbqU48ePM3v27Db7cXFxaTHm1KlT+eKLL1q127ZtG6tWrWLx4sUsWLCA1atXY2tr27yPTGtNbW3tmX1JIYQQopeoqqvHrMHV0bppkOwJ6wSTJk3i22+/pbq6GqPRyPfff3/GfcyePZvFixezdOlSrrnmmnbbjx8/no0bN5KcnAxAZWUlhw8fxmg0UlpaymWXXcbf//53du3aBUBISAjbt28H4JtvvqGurq5Vn25ubpSXl59x7EIIIURPYqxumABxkySs5xszZgwzZ85k5MiRXHXVVcTHx+Ph4XFGfURGRlJeXs7AgQOblytPx8/Pj4ULF3LDDTcQExPD+PHjSUpKory8nBkzZhATE8OUKVN48803AbjnnntYt24dY8eOZevWrS1m1ZpccMEFHDhwQDbmCyGE6NXKaxqSMGsvR6r2ltLOumOlHIH1gAMNy55LtdZ/PqmNA/ApMBooBK7XWqedrt/4+HidmJjY4trBgwcZMWJE5wV/FoxGI66urlRWVjJ58mTef/994uLirBpTd9Md/k5CCCHE7swSZv1jIx/fHs+Fwy27MV8ptV1rHd/WPUumgDXAhVpro1LKDtiglPpRa73lhDZ3AcVa63Cl1GzgFeB6C8ZkMffeey8HDhygurqa2267TRIwIYQQopsqr26aCbOzahwWS8J0wxSbsfGfdo2vk6fdZgHPN75fCixQSiltqek5C/r888+tHYIQQgghOsBY07Av2trLkRbdE6aUslFK7QLygBVa660nNRkIZAJorU1AKeBjyZiEEEII0beV94WN+Vrreq11LBAIjFVKRZ3UpK1TnVvNgiml7lVKJSqlEvPz8y0RqhBCCCH6CGNNH0jCmmitS4C1wCUn3coCggCUUraAB1DUxuff11rHa63j/fz8LBytEEIIIXqzphIVLr11OVIp5aeU8mx87wRcDCSd1Oy/wG2N768BVvfE/WBCCCGE6DmMNSYc7QzY2Vi3UpclR+8PrFFK7QF+pWFP2HdKqblKqZmNbT4CfJRSycDjwDMWjMdi0tLSiIo6eaW189x9990cOHDAYv2fLCQkhIKCAkpKSlocLC6EEEL0BmXVJqs/GQmWfTpyDzCqjevPnfC+GrjWUjH0Fh9++GG7berr67GxsenUcZuSsKaDxYUQQojewFhjsvp+MJCK+Z3u6NGjjBo1il9//ZXq6mruuOMOoqOjGTVqFGvWrAFg//79jB07ltjYWGJiYjhy5AhpaWkMHz6c2267jZiYGK655hoqKysBOP/88zm5QC00zFjNnTuXSZMm8eWXX5KSksIll1zC6NGjOe+880hKalj9/fLLL4mKimLkyJFMnjwZgIULF/LQQw819zVjxgzWrl3bov9nnnmGlJQUYmNjeeqppyzx6xJCCCG6nLG6zurlKaAXHuDNj8/A8b2d22e/aLj05XabHTp0iNmzZ/PJJ58QGxvL66+/DsDevXtJSkpi2rRpHD58mHfffZdHHnmEm266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\n",
      "text/plain": [
       "<Figure size 720x360 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "#data['pfo_return'][0]['mean_return']\n",
    "from matplotlib import pyplot as plt\n",
    "import numpy as np\n",
    "import matplotlib.ticker as ticker\n",
    "\n",
    "\n",
    "x = data['pfo_return'][0]['Date']\n",
    "y = data['pfo_return'][0]['acc_return ratio']\n",
    "y2 = data['bench'][0]['KOSPI_acc_return']\n",
    "y3 = data['bench'][0]['S&P500_acc_return']\n",
    "x_ticks = []\n",
    "for i,j in enumerate(x):\n",
    "    if (i % 6) == 0:\n",
    "        x_ticks.append(j)\n",
    "    else:\n",
    "        x_ticks.append('')\n",
    "x_ticks[-1]= x[-1]\n",
    "plt.figure(figsize=(10,5))\n",
    "ax=plt.gca()\n",
    "ax.xaxis.set_major_locator(ticker.MultipleLocator(12))\n",
    "plt.plot(x,y,label = 'gmv result')\n",
    "plt.plot(x,y2 ,label = 'kospi result')\n",
    "plt.plot(x,y3, label = 's&p500 result')\n",
    "plt.xticks(x_ticks,rotation=60)\n",
    "plt.xlabel('Date')\n",
    "plt.ylabel('Return')\n",
    "plt.title('result')\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "df = fdr.DataReader('005930')\n",
    "df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "c_m = c_Models(['삼성전자','LG전자','카카오'],[0,0,0],'2015-01-01','2021-04-01')\n",
    "ret_vol, efpoints, weights = c_m.plotting()\n",
    "print(weights)\n",
    "weights = literal_eval(weights)\n",
    "weights = weights.get('ms')\n",
    "print(weights)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}