Skip to content

Instantly share code, notes, and snippets.

@va2577
Created June 7, 2018 01:11
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save va2577/9d59dc85a0f2e91943f7ad45a91ec56a to your computer and use it in GitHub Desktop.
Save va2577/9d59dc85a0f2e91943f7ad45a91ec56a to your computer and use it in GitHub Desktop.
最大ドローダウンの計算
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 最大ドローダウンの計算\n",
"\n",
"* [numpy - Start, End and Duration of Maximum Drawdown in Python - Stack Overflow](https://stackoverflow.com/questions/22607324/start-end-and-duration-of-maximum-drawdown-in-python)"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"%matplotlib inline\n",
"import matplotlib.pyplot as plt\n",
"import numpy as np\n",
"import pandas as pd"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[<matplotlib.lines.Line2D at 0x7f5e98d17710>]"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAXwAAAD8CAYAAAB0IB+mAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAIABJREFUeJzt3Xd8m9W9+PHPkSx57zhOnD2BbMAkQNkjrEJaSnuhC+igBfqjpfTSArdQ2tJSWsot95ZSSi8to5SWUnbYG8JIAllkOYPEWbaTeFvWOr8/nueRHg3bsi1bkvV9v15+IT3PY+nICl8dfc8536O01gghhBj5HKlugBBCiOEhAV8IIbKEBHwhhMgSEvCFECJLSMAXQogsIQFfCCGyhAR8IYTIEhLwhRAiS0jAF0KILJGT6gbYjRo1Sk+ePDnVzRBCiIyyYsWKJq11VV/XpVXAnzx5MsuXL091M4QQIqMopT5J5DpJ6QghRJaQgC+EEFlCAr4QQmQJCfgAW7bAFVdASQk4HMZ/r7jCOC6EECOEBPylS2HePLj3XmhrA62N/957r3F86dJUt1AIIZIiuwP+li1wwQXQ2Qk+X+Q5n884fsEF0tMXQowI2R3wb789NtBH8/ngjjuGpz1CCDGEsjvgP/hgYgH/gQeGpz1CCDGEsjvgt7cn9zohhEhj2R3wi4qSe50QQqSxrA74H596HsEcV+8XuVzwla/0+7E9vgDff+QjdjV3DbB1QgiRXFkb8ANBzbdHn4Snrz+BywVXX93vx1/5yUEe+3AX1z66qsdrlm8/wL9W1Pf7sYUQYiCyNuDva/Wwo3wsV3zmOnRBAV6HM+K8znFBQQE8+ihMm9bvx3c4FAA7D/Tcw7/g7mVc889VBIO6348vhBD9lbUBf0+LEYhfm1bLU/c/x8Pzz6TNXYBWijZ3Afu/+FVYvRrOOqvfj/3ix/u48J53AdhxoJMtjb0P+tYflLSPEGLoZW3Ab/X4Q7ev+qCVmxZfzj1PreTdzY3MvfofbLrx1gH17AHuX7Y94v6pt7/e6/Xr97YO6HmEEKI/sjbgd3T7I+5Xl+RyzeJDKMw1Ujud3YEBP3Zpfh8DwVG+9cCKAT+XEEIkKmsDfnRAf/DriwAocBt7wnR4/TG/k6jyAnfMsWdW74n4kNm8ry3i/Ec7mwf8fEIIkYisDfirdxkB9qKFE3jnR6cwo7oYgKJcM+APooe/bndLzLEr/7aS//fwh6H7z6/bG3H+M79/e8DP15s/vLaFb/z1gyF5bCFEZsnagP/guzsAuPm8OdSU5YeOF1gpnQH28A92eFm5w/gw+ULt+Ihzr2xoCN3e2+qhotDN7y5cMKDnSdSvntvAS+sb8PqDQ/o8Qoj0l7UB3+LOifwTFLiMgD/QHv772w8AcNIhVRTnxebyu/3G43Z2ByhwO6kqyh3Q8/TXpqgUkhAi+2R1wD9+xqiYYzlOB7k5jgHn8PeYK2tv//x8Pnv4uJjzq3Ya6Z72bj9FuTlMrRq6sg1vbm4M3X569Z4hex4hRGYYMQG/yxtIeAGT1cteNKUi7vmi3JyYWTyJ2tvajdvpoKLQzZxxpdz2uXkR562edqfX6OGPKc3jkmMn43QotE7uAqybnlwXun3361u44iGZDSRENhsRAb/bH+CwG5/j1y9sTOj6dnMOvjVAG60g10mnN9DvPH4wqPnjG1uoKHSjlLHS9vwjxnH23DGha7Y1dQDGLKBC8/lryvIIBDXtfXzIeHwBrnr4Qz7Z35FQe6ab3x5qJ5UD8Oyavb1dLoQY4UZEwN/T7AHgz29uQ2vNd//+Ia9uaGDpmj14fLG5+DYz4MfLsQMUunP494e7mHXj82ztY5Ws3TNr9qC1MSBryXE6uOtLR1J3y1kcOqaYbU0deP1BPtrZHPrAsebtt3SFa/Ov+OQgj62MrLPz1uYmnly1m58+9XFC7Wnu8rFwSgUTKgrM1xv/A04IkR1GRATYbZZJ8AWD1B/s4omPdvPER7sBuOTYyfzkvNkALNuyn3W7Wzh6aiXQcwAstPX897V2J5RnDwQ1H+7oeS59jtPB1KpCnl2zlz+9uRWtYZr5uPaA73R0cd/b27nnja0AHDOtkrGlxiwiX8CYaeM06/T0xuML8P62A5w+q5off3oW//5wV8LjBbubuyhwOymLs55ACJG5hryHr5Q6Uym1USlVp5T60VA8R1O7FzD2H391Y0PEuY17w7NTLvrTu/z8mfW0eoyedE89/AJ3uJBaMMG8+i3PrOf/3t4GwN1fPiLuNZWFxoycXz9vpJ4Wz64GoMQW8L95//JQsAc45pev8PL6fUD4m8kLH+9juTkbqCdvbDIGbCdXFlBR6GbxrGq643zbsbt/2XbqGto49tZXOKWPchBCiMwzpAFfKeUEfg+cBcwCLlJKzUr285w3v4bLTpiKUkYqxM5jDtAGbAO6rV1WwO+hh+8OH//3h7sSasPf3v8kdPvMOWMT+p3qkjwgvDJ354FO1u+JnT75/jYjuDe2d4eOXXD3Mmbd+ByvbNgX97Hf3NxEgdvJf55xKAB5Lmfc9JYlENTc+MQ6zv0fYwHYgQ5v6Lj13/96fA1XPfwhzZ3ehF6fECK9DHUPfyFQp7XeqrX2An8HlgzFE80dV4rW8MRHu6kuCc9t9/iMNEhdQzgXv6/VCJw9BXxr8RXAownWq/cF+j/Dxgr0o4uN9v7wX2siPpgs9c1drNxxkL+9tyPieKc3wJ0v1wHw48fXcuMTa0PnVtc3c/jEstA6g3yXk65eAr51zn7Npn1tTLv+WV7d0MDNT63jwXd38OSq3dzw+NqeHkYIkcaGOuCPA3ba7tebx0KUUpcppZYrpZY3NjYyUCcfOjp0e19rN8eYeXorjXHGf78ROm/l/HtK6eRE5ci7vL2nQrq8gbiBui9WMI5Xe8eutcvH+Xe9E9o9yz7rxxr4feDdT7h/WfhbRnOXj1G2RV15Lkfowy+eeDOSFt9h/M2Wbd3PA++GH3u37OIlREZK+SwdrfU9WutarXVtVVXVgB8neorlQ99YxHnza9ja1MHjUWmZLQ3tuJyqx6qW5YWRAdg+6yaeFz5ObLpjWUH853P0MAi74r9OY1pVId22QH3U5HKuP/uwiLa2ecKzez5/9ztsa+qgsa074htMXh89/N6qg0Z/ALZ7Bl5YTgiROkMd8HcBE2z3x5vHhtT3TpuBw6GYMdqYlfK9Rz6KOL92Vys1Zfk9zna5+rSZ3HfpUaH7Bzq6414XPp9YTvvKk6dz+qzquOe+f/rMmGOVRblMrCgIjUOAMUNndHFe6P72po6I3vcH2w9y8m9eo9MboMT2DWZMaR5ef5B9cT68tNa9jlXsa+3GPnbtlx26hMhIQx3wPwBmKKWmKKXcwIXAk0P8nFx67BQAqkvzIo5fd5YxgLm31UN1cV7M71nyXE6OnVYZum/NAorn9N++zs0JzovPczn54ZmHxj3XUymH3JzIwVaPL4g7x8G7153KCTOrWLOrhduei7/grMT2DWbe+FIAVtfHVvJctmU/v3t5c8zxpd89nmlVhTEpnOgef6bw+oP4A1JETmSvIQ34Wms/8B3geWA98A+t9bref2vgLjjSqE5ppTKsWTCWOeNKQ7fz3ZF72EZzOx2cO78G6LkH39LpY7NtMPjVH5zEu9ed2uvjVhbGz9d/odb4InTKoaMpdDu5+JhJQDj3XmN+eP38M3MAo8f+uSNia/X09FyzxpbiULCmPnatQCBq6mmB28lPl8zmsLElTBlVFFOrP8eZ8kzggJz7P29x4q9f63NMRoiRasgXXmmtnwWeHernAbj1/Ln8+JxZoZz4rLElEefHlOZx2QlTueeNrfzi/Lm9PpZSil9fMI+nVu3uMeDvONAZcX/KqMI+2xg9PmCZVlXE9lvPiTmem+Ok/mAnQQ2nz6qO+NA6YUbvYx5WjX8wPuCmjy5i7e7Y7RSjB3NPOXQ0Xz1mMgCzakp4yVwH4HIqfAFNbk7mBfz/fWUzG806Rpv2tTF/QlmKWyTE8Mu8/3N7keN0UGobGK0qNnLglooCN9effRjbbz2HcbYa+D3JczkpdDvZ30NKxz5Yen6cypg9eeo7x/HsVccndG2ey4GVMrcWU1nKC91c+qnJPf7ulMrID6BZY0v4OE7Aj56hY/+b2Qe2//s/DmdmdREqAzM6v3lhU+h2mww6iyw1ogJ+PFbeHnqeJdObiiJ3j4O2bbZiZ8dOjy213JO540uZVVPS94UYHzqWu74Uu4L3e6eFB3ujvyGU5Ed+gZtdU8reVg/72yNfT6eZ4phUaQT6Uw8LT3Etts1+KsrLYWJFQcSsoUxk/6AWIpuM+IBfaZuLrgbQNa0ozOX5dfvizrO39xTbhyiI2Ns805aisURPLbXPPIp+vbPHGR8ya3ZFDtxapaAfu/xYnv/eCRw5KVw2usg2tTPf5cSd48CbYQOf0d9qLn9oJU+t2p2i1giROiM+4FcVD25HqS0N7XT5AhH1bSxWT7Gi0J1wOYX+umhheFZrriv+2zWzOlwU7cWrT+CSYydz2wXzYq6z8v/rogKg1cMvyXdxyJjIDxX7+oZx5fnk5jgzbrvEzQ2x5Sr++s724W+IECk2Iqpl9sYK+IkMqMZjbZayZlfs7JY1u1pwOhTvX3/qkM1cmWTLw+e74s8seur/HUfQjMFTq4pC1UGjleS54o5JbNzbRnVJLq44r8Hewx9Xlo/b6ci4gB8vZy+VQEU2GvE9/KLcHH534QIe/ubRA/p9KwhG18pp8/h4bOUuAkE9bNMU83oI+Lk5zj6nmVqK81y0dPn40xtbQ99QNuxt5fAJ5XGvH1UY+Q3JneMIfQhmioO2WVbbbz2Hzx0xnjc2NcqcfJF1RnzAB1iyYBxjSnteaNWbv1y6EIidyWJN1Txn7tCkcuKJ1wPvr4Y2D/9aWc8tz67n1qUbAKMH3NOA9uiSyICfm+OgO8N6+O3me2etcp43vhRvIEhzlwzeiuySFQF/MBZOqeCceWOpPxi52tRKE5y3oCYVzRow+9hzc6cR8No8/h4rh0Z/qygvdNPpDfRaajnddHT7KS9w8aev1gLh2VpS5llkmxGfw0+GMSV5vLI+cmOVvS1GTZriHvbFTab/u6SW97cd7PvCfvIHg7xd10SXL9Bj5VCAv35tIePLjXUL1urlvS0eJg9wXGQ4+QJBDnb4InYxs6qTHuyUHr7ILtLDT0BxXg5dvkBEzvcb9y8HIrdDHCqnHFrNj86KX4Onv/7vktrQ7efX7eNL974H0OtA7Ikzq0LbMY4xA/6elt4riKaLz9+9jGfW7ImYbRQK+AkWvRNipJCAnwCr99sRp4RwooOl6eKUQ+NX61w0tSLu8WhjSo2cfryqm+nIqgNk37bSSunsPCh1/UV2kYCfACttY+2Fa5/D3VvVzUxyfB91eSxjzA3V+9ojIN0ssM1CsuoZ/ezpxKqcCjFSSMBPgDWg2W6uSL3pSaPg52mHVUfU7skUN583m1s+Oyd036rMmYii3ByKcnNCYxjpztpV7IdnHRI6Vmjr7WfS4LMQgyWDtgmwUjptHj/aVkrY5czAKmLAxcdOBoxZOut2t3DjufEXavVkVJGb/RmS/1bAt06YSm5OOMjbS05kyuCzEMkgPfwEFIV6+D46vPbNSDK7d3jlydO560tH9rjzV08qi3JjCrClo25/gG5/MGIjGMtVp84AMmcsQohkkICfACul0+bx02JbrNPbHrEjWWWhm4172yK+7aQja+/d6P2OAc6YbQxey9RMkU0k4CcgPGjrp8UWIBra0r+XOxRm15Syv8PL+j2xRcnSibU4Lt6iMquWTktXZqSmhEgGCfgJCOfwfTy6oj50fHx5QU+/MqItnGJM4WxO82BpDbLH6+GXm4Pt0sMX2UQGbROQ53KQ41ChzcKdDsWDX1/EYWNj69NnA6vH/N8vbaal08dZtnpCgaDmty9u5LCxJXx6XmrLToR7+LE5/HyXE5dThcpLCJENJOAnQClFUV5OKDg8ctnR1E5ObKHSSGRtuvL+tgO8v+1AxE5bf31nO79/dQsACyaUpfRbkFUNNF5KRylFYW4OXV7Z7lBkD0npJKjALCJ2+UnTsjrYQ2wA3d3cFff29x9ZhS+FJYh7S+mA8Z7aZ10JMdJJwE+Q16yHXzPAMssjSXSK5LIHloduW6tYAd7ffiBUqycVehu0BaMsRpcEfJFFJOAnyOqpVhQObsvEkcDpUGy/9RzGmh9+a3eFt0yMnqr5/rYDbNqXmtk8oR5+DwG/wJ0Ts8+BECOZBPwEWQG/vDDzSikMlT9ffBTWotUPth9g5Y6DtHcHcDsdVNs2Tll8xxspaV+rx4c7xxGxytYu3+0M7ecrRDaQgJ+g2TUlAFRKDz9kVk0JPz5nFmCUIT7/rnfo6PZTmOvEqVJfdqK1y09JD717MCpoZuviOZGdJOAn6N6Lj+LW8+cys7oo1U1JK9FlC4yAn8NxM0bFvb7+YCdbGtuHo2kc6OimorDnzcoLpIcvssygAr5S6vNKqXVKqaBSqjbq3HVKqTql1Eal1BmDa2bqlea7uHDhxIjCWyI8RdPS2N5NUW4OPzrrMP6jdkLouJXbP+5Xr3Lq7a8Pebu01jy/bl+vO3nlu3Jk0FZklcH28NcC5wMRSVql1CzgQmA2cCZwl1Iqs3YKEQkpzI18W9/c3ERhbg4VhW6+ecKU0PHo1EkgOLR1eKyNT1Z80vPWkEYPXwZtRfYYVMDXWq/XWm+Mc2oJ8HetdbfWehtQBywczHOJ9FTgjs2RW/Pea8ryQ8esGTOWgWyg0tLlC21CY9FaM/lHz/Cr5zZEHG82i9xddcr0Hh9PUjoi2wxVDn8csNN2v948JkaYgjhbPFoBv8CdExo07YzaHvJAe//r8My/+QWO/NmLEceu/NtKAP7w2paI482dxuN/5vCe/9nlu510+4MR3zb2tXp4Yd3efrdNiEzQZ8BXSr2klFob52dJMhqglLpMKbVcKbW8sbExGQ8phlG+KxzwrbL69jTPrz8/H4jt4e/vGFilUV9Ac8wvX+a+t7ehtebZNfGDs1UGw6qKGY/1YWVPNy36xctc9sCKmG8SQowEfQZ8rfVpWus5cX6e6OXXdgETbPfHm8fiPf49WutarXVtVVVi+6qK9GHfxN3q2RfaShlYx6zUiTXmPZiNR/a0eLj5qY9p9UR+iFgLvP723g7W7GpBqdhBZTsrHdVpfhg1tIXbtGN/54DbJ0S6GqqUzpPAhUqpXKXUFGAG8P4QPZdIIXtKxwr09to11vkOM6iOKjLWMbyyoaFfz+P1R9bkyc1xsL2pI+LY4jve4IZ/r+H6f6/hsZW7KMlz9bqbl/VNxPr20dAa/tax44AEfDHyDHZa5meVUvXAMcAzSqnnAbTW64B/AB8DzwFXaq1ldGwEysuxp3SM4Bqvh98RNRumqZ85/Pe3HYi47wsEeXbNHnIciv88I7xB+UPv7QjdLutjg3mrTMYX/vgu/kCQJtu2jfYicEKMFIOdpfNvrfV4rXWu1rpaa32G7dwtWutpWutDtNZLB99UkY4cDsXnjhjPn74aXoYR0cPPjRy0tXrqHd39mw65ckfk9Mqghtc3NXLImGKuOGkaJ86MTQf2lr8HqDK/bTS1d7N9fyf7bR9CP39mfcxzCpHpZKWtGLTbvzCf02dVh+4Xxenhf7Dd6KFbAT96ELcvW+Oszt2wt41DqotRSrGnJbZHXtZL/h6gqjhcJmPZ1v1c889VEeffqWvqVxuFSHcS8EXS2VM6pfkuZteUsGZXCwDeQM89fK11xMCp3Z4WD4eNLeH4GaP4weKZoeOHjDF2Hbv1c/Mozsvha58KL/aKLvsQzZ7y+fHja2POD/HaMCGGnQR8kTTW9MaKqIqitZPK2bC3jd++uCk05z26h+8LBLl16QYW3vIy+1o9bGvqCO1YdeMTa3lv2wEmVxbwwNcX8cVFk0K/N67cWNx1xMRy1vzkDG48d1ZoYLinOvgWl7P3f/7Wh5QQI4UEfJE0BzqMHPjEisKI49aK2ztf3gzAlFGF+AI6Iuh/64EV/PGNrYCxovbk37zGF//0HsGg5v5lnwDhGT7ltp55RZw8vXW+r4DfE3eO8b/F8u0H+rhSiMwiAV8kzeUnTQNgVFFkEB5rK7EAMGdcKQDbGsPTKu3TNHcdNPLxa3a10GRboGUFfKVUaH59eS/VMEt6KZzWm5euPpGpVYUc7PThT+EWjUIkmwR8kTQ/PPNQtt96TkxF0cKo8gsLJ5cD8NL6faFjLmf4dy79yweh23uawzl9+yDrERPLgPhTL7vNgeGe9rLty8TKAr51wlTj+VsGvkBMiHQjAV8MucMnloduz6wu4stHT+KkQ6p47MP60PEJFQVxf9c++8b+zeF3Fx3O3V8+krGl+TG/Y80ESiSl8+oPTuK+S47iV5+bC8B4c0xgQrnRnp2yAEuMIAPrAgnRDxWFbn501qHcunQDp8+qRinFIdXFvLt1f+ia4h5649c9tiZ0u7Io3MMvyXNx5pwxcX/Hbw4M91YL3zJlVCFTRhljDgXuHI6cZHw4WR9AOw9KwBcjhwR8MSy+tGgim/e1843jjFRJbo4Djy+I1hqlFJ3eALNrSli329gQvTTfRUuXj4NmEbS/fWNRKI3TFys91N9B23Pn14RuV5cYG7Tbyy0IkekkpSOGRXGei9u/MD80yJprVtm08u2d3gBjzCD77ROn8dGNp4d+9+y5Yzh2+qiEdxuzplsOdJYOGDN18lwO2vq5QEyIdCY9fJESeVbA9wXJcxk7T9WU5fPBDadRWeiOCO6Xn9jzJibxWD38vubZ96Ukz0Vrl5RJFiOH9PBFSuS5jH96Hr+xWKvDG6Ag10lVcS6OqAqXlUW918SJ9ovPzmXuuFIm9jAQnKiSfJfUxRcjivTwRUpYVTY9vgD+QBCvP0iBK/4/x4pe5trHs2hqJU/9v+MG3caSvBxapIcvRhDp4YuUsFI6Hl+QTrMkQ/SG6NHXDrfqkrzQIjAhRgIJ+CIlrJROtz9Al7kbVn6c/XFTaUZ1MTsOdOLxRW7l4AsECUplNZGBJOCLlLD38K3KmYXu9MowjivLI6iJ2BgFYMYNS5l6/bN0+2VPH5FZ0uv/MJE1cs0CZR5fgHe2GAuwonv4y647JVRdMxWsHbEOdHgZb668bbMN4r66obHHxV9CpCMJ+CIlrB7+k6t2s2lfG06HChVVs8QrmzCcrMFiqwrozgOdHH/bq6HzQS1pHZFZJKUjUsLK4T+6op797V6WLKhhXFlqA3y06ID/0c7miPOp/PYhxEBIwBcpkWvb/HxXcxcFaTZgC7EB3xG10tcabBYiU0jAFykRPdUy3QZswZiHn+NQoYDf4Y0ss9Dc5Y33a0KkLQn4IiWslI6lIA0DvlKK8kJ3KOBf++jqiPP7pLCayDAS8EVKpGoxVX9VFrrZ3xHZk1/xX6cxqsgdUatfiEyQft0qkRVyourlbG1qT1FLeldh6+GX5rtYsqCGyqJcZlYXs1d2wxIZRnr4IiWiSx1/+8RpKWpJ7yoK3Rzs8OIPBGnp8oUGckvzXbR6pHSyyCwS8EXKvHf9qYDR2z9sbEmKWxNfhZnSsYqolRcYAV9KJ4tMJAFfpIy1snbBhMR2skqFMrNEshXwrU1VSvJzaJMevsgwgwr4SqlfK6U2KKVWK6X+rZQqs527TilVp5TaqJQ6Y/BNFSNNSZ6L+y45insvrk11U3pUmJuD1tDUbuTxrX1yi/NcdPkC+ALBVDZPiH4ZbA//RWCO1noesAm4DkApNQu4EJgNnAncpZTKjGkZYlidfOhoygr6V+9+OBWYm6vvazUGaIvM+yVmT196+SKTDCrga61f0Fpb/+LfBcabt5cAf9dad2uttwF1wMLBPJcQqVBopp2sgB9O6Rg9fcnji0ySzBz+14Cl5u1xwE7buXrzmBAZxVoQFt3Dt1I7sgWiyCR9zsNXSr0ExKsBe4PW+gnzmhsAP/BQfxuglLoMuAxg4sSJ/f11IYaUFeD3mqtqi/IkpSMyV58BX2t9Wm/nlVKXAJ8GTtU6VC92FzDBdtl481i8x78HuAegtrZWyg+KtGIF+Lc2Nxr3o3v4ktIRGWSws3TOBK4FztNad9pOPQlcqJTKVUpNAWYA7w/muYRIhSmVhQAc7PThdjpCJSFGFRsDzfWy563IIIPN4f8vUAy8qJT6SCl1N4DWeh3wD+Bj4DngSq211JIVGae0wBW6bfX2AUYX5zF1VCHvbTuQimYJMSCDqqWjtZ7ey7lbgFsG8/hCpIOrTp3BnS9vjqnZP6GiIDSYK0QmkJW2QvShKNcI9G5n5P8u1SW5bG/qkKAvMoYEfCH6UGgO1E6oKIg4XlWcS1u3n0W/eDkVzRKi3yTgC9GH/WZZhRmjiyKOF+WG8/tf+OOyYW2TEAMhAV+IPtROKgdgyYLItYOFueGc/vsyeCsygGyAIkQfjp0+irpbziInKocfvQ+v1x/EnSN9KJG+5F+nEAmIDvYQu01jQ5sM3or0JgFfiAHq8kUuLZEtD0W6k4AvxABZ9XTGlOQBsEcCvkhzEvCFGKDTZ1Vzz1eO5JmrjgOgoa07xS0SoncyaCvEACmlWDx7DH5z16uObqmcKdKb9PCFGKQcp4M8l4OdBzr7vliIFJKAL0QSeHxB/rminn8s39n3xUKkiAR8IZLonje2proJA/J2XRP3vLGF8JYWYiSSHL4QSVTX0J7qJgzITU+uo66hnV0Hu7h5yZxUN0cMEenhC5EEP/70rNDt9gwcvD3QYdQL+uuyT2hq76auoY373t7G2l0tKW6ZSCbp4QuRBF8/bgqVhW6+98hH7Gv1UFRV1PcvpZHivJxQ0K8/2MVnfv926Nz2W89JVbNEkkkPX4gkGV2SC5CR9fELbHWB9jTLto0jlQR8IZKk2lxx29CaOQuwvP4g/kCQbl+AhVMqAGjq8DKtytjLtyQvMgmwp0U+DDKZBHwhksQK+OnUw+/2B/hg+wE8vtgtpbXWnH7H63z7wZV0eP2hEhE/fnwtWxo7AGj1+PH6jYVl6/e0cswvX+H+ZduHq/kiySTgC5EkRbk5FLid7E2jgL/wlpf5/N3LuP2FjTHfOQYlAAAdlUlEQVTn9nd4+WR/Jy+t38e+1m5GFeVGnHco478HO43c/iX3vQ/AjU+so8sb+wEi0p8EfCGSaHRxLk3mDlkA+9u7Qz3kVGjp8gGwK05ePjpoVxVHBvwpo4y0jrXj1z5bqmrljoNJbacYHhLwhUiiUUW5NJp18YNBzZE/f4nv/+OjlE3VtHLwM6uLY851+yMDfnVJZMA/emolAPs7jEBfXuAK7f71Vl0TVz38IfUHpZxEJpGAL0QSVRXnhgZtm83e9dOr9zDnpudp9fgirl26Zg+PfLBjSNvjCxgrZz2+2G8ZXd7IY9YYhOXkQ0YDsHz7QYJBTUuXj9k1JQD84bUtPLlqN8+t3TsUzRZDRAK+EEk0Y3QRW5s6mPeT5zn7d29GnFtTH17EpLXm8odW8sN/rRmytnR6/aFNWuIN2r5Z1xhxv7okl4e/eXTo/qKpFcyuKWHljoO0dfsJahhfXhCR+mlsz5wZSUICvhBJVTvZmNrY6vHHDN7usFXTbO6M7O0nWyCo+e0Lm0L3rfSNLxDk2kdXsb2pg9ueixzIrSrO45hplZQXuAAoznMxqbKA3c1dtJjtLStwcdz0UaHfyaQpqEJW2gqRVMdMq+zx3E1PrOOihROBoe8ZP7VqN/e+tS10f1tTB60eH3UN7fxjeX1EzZ/cHAfd/mAo3//MVcez2xzkrSnN55UNDaGZOuUFbgrc4b18ZQ+AzCI9fCGSyOV08NMls+Oe8waCoWqUjbbdsYaiQmV0CufdrQe48fG1OJUx13LTvnDA/8ulC3n9P09CmedqyvJD31RqyvLx+ILcunQDYPTw7QG/O4UzkET/DSrgK6V+ppRarZT6SCn1glKqxjyulFJ3KqXqzPNHJKe5QqS/0cV5PZ7bsLcNCM9tB+ODINn8wdgPkcc/2k2H1+iR22cNTasqZFJlYdzHGVeeD8CyrfsBI+Dnu+wBX+bjZ5LB9vB/rbWep7VeADwN3GgePwuYYf5cBvxhkM8jRMYoNlMjx00fxXvXnxpx7qzfvYnHFwjNjwfo7E5+0LQKodk5HYp2T2QK5qXvn8Dokp4/oGonlTN9dLgQXFmBm3xb3R3p4WeWQQV8rXWr7W4hYHUrlgD3a8O7QJlSauxgnkuITHHU5ArOP3wcNy+ZTXVJHo9cdjS/+tzc0PlN+9po7QoH3qGYo28va+x2Gv+bO5UK9fAtpfnuXh+nsiiXl75/Yuh+RYGbfFc4bHTHme4p0tegc/hKqVuUUjuBLxHu4Y8D7Hu91ZvH4v3+ZUqp5Uqp5Y2NjfEuESKjuHMc/PY/FjDNLJG8aGplxBz3/e3eiB7+lsbkb5qycV9b6PbDlxlTLf3BYGjVrKUot3/zNhwOFVFZU1I6maXPgK+UekkptTbOzxIArfUNWusJwEPAd/rbAK31PVrrWq11bVVVVf9fgRAZYGxpfuh2U3s3LV0+XE5jkPTp1XuS/nyNbd18+eiJrLpxMUdOKuf3XzyCoIaH3w8v9HI6FHmuxPp8R00uZ0KF8RpmmYuvQFI6mabPj3et9WkJPtZDwLPATcAuYILt3HjzmBBZaYYtD76v1UNrl48JFQVsbezg0RX13HTuLIrzXEl5rvZuP53eABPKCyg159QfNtYorWBVwQRQEJqZ05d/fvvY0O0540oZVeSmqd0rAT/DDHaWzgzb3SXABvP2k8BXzdk6RwMtWuvkd2OEyBAOh6LulrOYMbqI97YdoKXLR2l+OMDbUzyD9fpGIzVqn3kTbxaO05FYsI9n2XWncvExk1JaGE7032Bz+Lea6Z3VwGLgu+bxZ4GtQB3wJ+CKQT6PEBkvx+mgdnI5b25u4q26piEL+Nv3G734kw4Jp0jtwf3aMw8BYHIPUzET4XI6yHM7Q6UbRGYY1EpbrfXnejiugSsH89hCjESza0qx5jOU5rsYU5LH3lZPqHRBMrR6fLidDvJs8+XtPrNgHI8ur+dXF8wb1PMU5+bg9Qfx+oO4c2QNZyaQd0mIYXTegprQ7drJFfzfJUcBye3ht3v8obUAdkdPDa+efeUHJ7FgQtmgnscac2jzDG1dIJE8EvCFGEYlea7QzJijp1SEBlWTGfDbPH6K4gT8B76+iA0/OzNpz2N9qLR5MqeeTkuXj3k/eZ53tjSluikpIQFfiGFWZi52GluWT1n+UAR8X9wevquXNM9AWD38nzy1jhNuezUjCqnVNbTR6vHzq+dit3zMBhLwhRhmD35jETedOyu0B26OQyUt4De0eXh1YyN5OckL7D2xPlRe29jIjgOdPPLBzj5+I/XcTuPvcqAjO8s6S8AXYphNH13EpZ+aAhjz4EvzXaHdsQbrxsfXAbDattnKUBlXlh9x/6dPfzzkzzlY3oAxq2io9yNIVxLwhUix0nxX0nr4bd3G45TkD/1WF9EBPxNYtX8CcaqJZgMJ+EKkWEm+i9YkBXxrD1tHgitoB8PhUMysDq8gnj++dMifc7A8Zu2f4BDsQZAJJOALkWJlBcnp4Wut6fYNb0C77uzDAHCozKirY/Xwg+nf1CEhAV+IFEtWSuf6f69llZm7P29+3OK0SXfSzCrev+FUPj2vJjMCvtlGbyDIV/78Hp3e9J9ZlEwS8IVIsdJ816AHEbXWoUqYc8aVcMM5hyWjaX1SSjG6OI88lyNmW8VU01rz2xc38erGhtAxexvf3NzEsi37U9G0lJFNzIVIsdJ8F60eH8GgxjHAgmb3vLE1dHvuuNJBFUYbiDyXM+0CfmuXnztf3gzA9lvPAWLTTi5ndvV5s+vVCpGGSvNdaA1tg1i49Py6vQBcftI0rll8SLKalrDcHEfapXT2tXlCt3ce6ARidxcbit3G0pkEfCFSzKqaOZiZOrk5To6YWMYPzzyUUUW5yWpawvJcTjq9gbSa7ri3JRzwj7/tVTy+QMyOX9F7/I50EvCFSDEr4C//5MCAH+NAh5eq4uEP9JYJ5QUAvLk5fbYpXbY1Mj//0Hs7aGrvZlJlAatuWgwM7ltVJpKAL0SKjTb3u/3N85sG/BhG/Zzk7Jg1EIvMSpwHOsI96LqGdhpaPT39ypDbdbAr4v7Pnv6YJ1ftZnRxbmgvX+nhCyGG1fzxpYwry2dXcxdrdw2sJEKrx09JCgN+vtuoUdPhNQZu6xraOe23r3PhPe8OyfP5A0H2t/deD6fLF4i7SfuJM6tCg9p3vLSJLm96DTYPJQn4QqSYUoozZo8B4NP/81a/fz8Q1LR3x6+BP1wK3MZzd3n9vLqhgd+Zs2O2NnUkdXMXy0+f/pgjf/5Sr/PoPb4A0217CVvGlEaWhHh0ZX3S25euZFqmEGnAvt1hf1lpiVQG/Hyz7PIvnt0Qc25rUzuHTyxP6vM9tWo3YMyycToULocjZkprlzdAgdvJ+p+eSYfXT+3PXwJi/06rdzbD0ZOS2r50JT18IdKALxCe0hjs50yXVo9VMC11KR2nQ/U497+xLfmliK2/UJvHz1E/f4kv//m9mGu6fAHyXU7y3U5GFeVy3PRRADF7AnxiTtnMBhLwhUgDPltxl6nXP8urGxp6uTpSKOCnsIcPsRUo544ziqk1mrn26dc/yy+Xrk/qc+5u7qLV4+edOCtmPb5ARHC36snpqDpDzZ2RUzVHMgn4QqSBK06azvjycG750r98kPDvtoVSOqnr4dudcuhoAM6dPxYwevif7O/AH9T88fWtvf1qwqyYvae551lAHl8wIuAbG8gTWqfw3/+xAIADHdlTG18CvhBpoDTfxfVnD6z+zY79RkoilTl8u2sWz+TuLx/BN46bSnFuDs2dPk789Wuh81c+tHJQj6+1DhWb293S1eM1bR4f+e5wiLtm8Uz++e1jmGN+8/jM4eO4/KRpNLV3s6WxfVBtyhQS8IVIE9bUxv669l+rgfTp4c8YXcyZc8bicChK8l385Z3tEeefWbNnUI9/1C0vh27vbg4HfL9tHGTd7lZaPX7mjy8LHXM5HRw1uSLiseaZwX/lJwcH1aZMkR5dAiEEhe7I/x0TKaZmn7dvTwmlwi2fncPSNXtx54T7kbua4/fAf/vCRr4/gJo/nV4/Tbb593tbw7fbu/089N4Otjd1sMIM4FZvvifHzTAGcu1lGEYy6eELkSbsgRKg3TbHvKHNw31vb4sZcLT3nlNd+fFLiybx4DcWJXTtna/U9Xs2EsDGvW0AfP/0mUDkDKDdzR5+/fxG/rminq1NHQDUlPb+IWgtzLr9xYGvcs4kEvCFSFNttmX/Vz60kpuf+piPdjZHXGN9ARhbmjecTUvY1afN7PGctd1goj7a2cxn73oHCL/eRltFzLPvfDPmd/ra21cNw1aQ6SQpAV8pdY1SSiulRpn3lVLqTqVUnVJqtVLqiGQ8jxAjmVX8bHKlUYjMXj1zc4MxqLh2d2vE71h72N7/tYXD0cR+++5pM3o819nPkgbrdofTV+PM9FVTe89TKv/nosMTCuhnzzVWOdvHAEaqQQd8pdQEYDGww3b4LGCG+XMZ8IfBPo8QI924snze+M+T+cl5s4FwD98fCIZ2xOqKKiXQ0e3n0DHFzKguHt7G9sNlJ0yNe7y/NWzs33jm9pGbh8RnLR0+wVgF3JVmG7gMhWT08O8AriW8+A1gCXC/NrwLlCmlxibhuYQY0SZWFlBW4AaMCpgAO21VH7u8kb3QDq+fwjgFwtLJ9WcfxrfiBP3+9vA3mfn7HyyeSXGeK5TO+tT0yrjXF7gT+7tYs6OyoYjaoAK+UmoJsEtrvSrq1Dhgp+1+vXlMCNEHq2dq9WitgUqIzXu3dwfSPuADXHzsZGbXlFBeEJ462p8NxO99cyuPfbiLUw4dzXdOMdJEVg9z4eRwwC+2/S0KEpzmal3X3w+gTNRnwFdKvaSUWhvnZwlwPXDjYBqglLpMKbVcKbW8sTF9Nk8QIlXCAd/o4a+qb8blVLhzHDG90M5uP4UDnL8/nGrK8nnmquND6SogNADbl93NXfz8GaMkw0mHVIWOWxOWRpfk8pNzZ3HnRYez5uYzQucTXddgFX4bypTOZ+96m7tf3zJkj5+oPrsGWuvT4h1XSs0FpgCrzIGR8cBKpdRCYBcwwXb5ePNYvMe/B7gHoLa2Nn32RxMiRay69q0eP+t2t/BOXRPjywvo9PpDG4Xf+MRaun1BOrrTP6Vjt2TBOI6eWsmiXxiLp/74+hbeqmvir5cujLvmYNO+Nhbf8Ubofrxyx2X5Ls5aODHmeKI9/Pwh7uF3dPv5cEczH+5o5tsnThuS50jUgFM6Wus1WuvRWuvJWuvJGGmbI7TWe4Enga+as3WOBlq01oNbXidElsjNcZDnctDU3s05d77FqvoWygtc5LucoV7o/cs+4ZHlO9nd4olIk2SC6pI8vrTICNC/XLqBNzc39bjV4C+fjSy2Vl0SO/20MmoPX6tWTr4r0ZSOVcs/+QF/T0sXVz38YcxxrTW/eHY9a+oHtuHNQA1V1+BZ4GygDugELh2i5xFixFFKMWtsCattwaCi0E2nN8CKTw7GrAqdVhXb60130YG7vdsfsydAS6cvouTymJK8iNdaXZLLvtZu5owrifi9f11+DM+s2ZPwHgPhHH7ytzv8+l+W8/EeYyrtqCJ36HinN8A9b2zlwXc/4WufmsJjK+t557pTk/780ZIW8M1evnVbA1cm67GFyDbHz6gK7RoFRg33MaV5vLaxkaN/+XLEtUdNqYj+9bQX3fvu6I6dbjr/py9EHPvG8VMi7j/5nePY0tAeMxtnUmUhV5w0PfG2uIcuh7+5ITzgbk+9WQPynd4A//tqXdKftyey0laINDR/QuQ882OnjeI/z4itPbPyx6dnZA+/O2q20U+f+jgipdIUZ7/a6B57dUkex5qbmgxGaNA2CSmdTq8/YktHa2EcEKrwCeEBebvov8lQkIAvRBoaXRxOebx73al8cdFEZteUstDWm59cWUBFoTver6c9e/ADeKuuiX+u2Nnj+XPn13DOvKFZypPMaZnf/ftHzP/pC6HBdbvWLl+oflCrJzZ91BbnWLJJwBciDVllFgDG2OrklNhKIEdv1ZdJJlYWAjChIlzcrKfecGm+i/+56PCEF1L1l5XSeXaQZZsBXvx4HwD1B2OrhAZ1uCBevB7+/l7KRCSLBHwh0lBV1MwTi30bwz9+5cjhak7SfWnhRP59xbG88L0TQ8cabIXQrIBfVuDizxfXDmlb3GaV0eVJrIkfHdBdTmPw2Ur3HOiIDe43/HtN0p6/J5kzgVeILOJwKJ76znFE1/6yFmUdOamcSWYvORM5HIrDJxo1bL64aCJ/e28HXd4AHl+AXz23IfQN57nvnhDxDWcoJKNi5v72bly28tZWeqbQ7WRqVRHfPGEqVz38IS1dPiYA1z1mBPePbjydTm+A3764iR8MYH+A/pKAL0Samjs+tkBYiTlwmeiiokzwi8/O5ZX1DXT7gixdu4f73t4eOpfo1MrBuvbMQ7jtuY10eQMD2nnsyJ+/FLHiub3bT7c/QIc3wMmHjqbCrI/U0e0nGNR0+42aSGUFbsoK4Defn5+cF9IHSekIkUGsHv5Iq+Oe63LQ7Q/g9UcWh8tzDU+IqjQHv/d3xM4OSlSHbdD3tY0NnG+Wjpg7rjT0Ojz+IE3mc5xsKxMxXCTgC5FBrEHb6J2vMl1ujoOnVu/hh/+KzGMP1wdbab4R8Fu7YtcD/OTJdTHrBPryj+X1rDP3LqidVB4aYPf4AuxrMQL+fxwVWw5iqEnAFyKDWOmGERbvyc1xEhjAlofJYn1zao8K7Pe9vY2/vLM9ZiP2/igrcIUC/qqdzXztrx8AqdmlTAK+EBnEqhPz6SGak54quTmxoeiihRPiXDk0rL1t27t9PLqinrW7WtBas8csY9HboqzoNFQ0pVQopXPXa1tC+/AO9WB0PDJoK0QGOXZaJS9fc2JGrq7tTW6cXP3XPjUlzpVDo8i2B8EP/mls7/Ff5xzGQ+8ZG/n5etn+0J7uyXM58Phir423ZmJUD1Nvh5L08IXIIEqpERfswUjpWC44cjybbzlrWLdttDZO+d9XwnVt6sx9hAG8vQV8W9G1j28+M+410QH/qlOmRxSGGy4S8IUQKWctfjp3fg23fW4eLufwhiarh7/ZFuTt48X2qaLRrCmWv7twAQ6HIl4cz4tKWV3ej+JuySQpHSFEyjnMeDhrbEncjVCGWr7LiUMZ5Q/AWNgWPWPnmdV7OGfeWLq8Ad6qa+L0WdVAOIdvjUMsu+5UlILXNjYyp8ZYS5Fj+wD7y6VHDWiufzJID18IkXLWDJ3qkuHPa4ORKrN/q+jo9rNmV+TmJFf+bSUAP316Hd+8fzkfm9Muu0MB3wji1SV5jC7O4wu1E5hVE67Vv/S7x3PRwgkcO23wFT4HSgK+ECLlrBS5PZc/3KzArRRs2NvGjgOdca/bYG4qX3/QOL/JvB9vppHdYWNL+OX583D3cd1QkoAvhEi5H511CAunVHD8zNT1fi1ftO2Pm+9y8qevRhZvs8Ybtu/vQGvNtf9abRxPYSBPVPq3UAgx4k0fXcw/vnVMRPnnVJldE65h9L9fPJzTZ1Vz7LTKUEE3a3bN1sYOHn4/XMM/ld9OEiWDtkIIAdz++fn4g0GmjDKmvToUnHqYMTA7taqQjWbqxtoo5e8f7IxI+2RCD18CvhBCAJ87cjwQrlVv300sL8cZ2sXKvtn5O1v2h273lcNPBxLwhRDCpqLQzbVnHsLJh4wOHct1OfCYg7o9bYWYioVU/SUBXwgholwRtTAqzyzu5g8E6fIGcDlVxJaMEL88RLpJ/xYKIUSKhcob+4N0egMRc+k/s6CGJ678VMTG8+lKAr4QQvShINcI+K1dPrp8AQ6fWMZ/nXMYYKzKnT+hLJXNS5ikdIQQog/WdNFdzV2h+5ccO5nx5fksnjUmlU3rFwn4QgjRmy1bOPJXP2fNvx6h6DYPa1x57NtyAY6xN3HmnGmpbl2/SEpHCCF6snQpzJvHmH8+RLG3C6U1xd4upj7+MMybZ5zPIIMK+EqpnyildimlPjJ/zradu04pVaeU2qiUOmPwTRVCiGG0ZQtccAF0duLw+yJOOfx+6Ow0zm/ZkqIG9l8yevh3aK0XmD/PAiilZgEXArOBM4G7lFLpv+5YCCEst98OPl/v1/h8cMcdw9OeJBiqlM4S4O9a626t9TagDlg4RM8lhBDJ9+CDiQX8Bx4YnvYkQTIC/neUUquVUv+nlCo3j40DdtquqTePCSFEZmhv7/ua/lyXBvoM+Eqpl5RSa+P8LAH+AEwDFgB7gNv72wCl1GVKqeVKqeWNjY39fgFCCDEkihLcOzjR69JAn9MytdanJfJASqk/AU+bd3cBE2ynx5vH4j3+PcA9ALW1tTreNUIIMey+/GW4997e0zouF3zlK8PXpkEa7Cydsba7nwXWmrefBC5USuUqpaYAM4D3B/NcQggxrK65xgjovXG54Oqrh6c9STDYhVe3KaUWABrYDnwLQGu9Tin1D+BjwA9cqbWOX2JOCCHS0bRp8OijxtRLny+yp+9yGT+PPmpclyGU1umTRamtrdXLly9PdTOEECJsyxZj6uUDDxgDtEVFRhrn6qvTJtgrpVZorWv7vE4CvhBCZLZEA76UVhBCiCwhAV8IIbKEBHwhhMgSaZXDV0o1Ap8M8NdHAU1JbE4mkNecHeQ1Z4fBvOZJWuuqvi5Kq4A/GEqp5YkMWowk8pqzg7zm7DAcr1lSOkIIkSUk4AshRJYYSQH/nlQ3IAXkNWcHec3ZYchf84jJ4QshhOjdSOrhCyGE6MWICPhKqTPNvXPrlFI/SnV7kkUpNUEp9apS6mOl1Dql1HfN4xVKqReVUpvN/5abx5VS6k7z77BaKXVEal/BwCilnEqpD5VST5v3pyil3jNf1yNKKbd5PNe8X2een5zKdg+GUqpMKfWoUmqDUmq9UuqYkfw+K6WuNv9Nr1VKPayUyhuJ77O5MVSDUmqt7Vi/31el1MXm9ZuVUhcPtD0ZH/DNvXJ/D5wFzAIuMvfUHQn8wDVa61nA0cCV5mv7EfCy1noG8LJ5H4y/wQzz5zKMDWoy0XeB9bb7v8LYO3k6cBD4unn868BB8/gd5nWZ6nfAc1rrQ4H5GK9/RL7PSqlxwFVArdZ6DuDE2AN7JL7Pf8HY19uuX++rUqoCuAlYhLFV7E223QX7R2ud0T/AMcDztvvXAdelul1D9FqfAE4HNgJjzWNjgY3m7T8CF9muD12XKT8Ym+W8DJyCsaGOwliMkhP9fgPPA8eYt3PM61SqX8MAXnMpsC267SP1fSa8BWqF+b49DZwxUt9nYDKwdqDvK3AR8Efb8Yjr+vOT8T18smT/XPNr7OHAe0C11nqPeWovUG3eHgl/i/8GrgWC5v1KoFlr7Tfv219T6PWa51vM6zPNFKARuM9MZd2rlCpkhL7PWutdwG+AHRhbo7YAKxj577Olv+9r0t7vkRDwRzylVBHwL+B7WutW+zltfOSPiKlWSqlPAw1a6xWpbsswywGOAP6gtT4c6CD8NR8Yce9zObAE44OuBigkNu2RFYb7fR0JAT/h/XMzkVLKhRHsH9JaP2Ye3mdtL2n+t8E8nul/i08B5ymltgN/x0jr/A4oU0pZu7PZX1Po9ZrnS4H9w9ngJKkH6rXW75n3H8X4ABip7/NpwDatdaPW2gc8hvHej/T32dLf9zVp7/dICPgfADPMEX43xuDPkyluU1IopRTwZ2C91vq3tlNPAtZI/cUYuX3r+FfN0f6jgRbbV8e0p7W+Tms9Xms9GeN9fEVr/SXgVeAC87Lo12v9HS4wr8+4XrDWei+wUyl1iHnoVIztQUfk+4yRyjlaKVVg/hu3Xu+Ifp9t+vu+Pg8sVkqVm9+OFpvH+i/VAxpJGhQ5G9gEbAFuSHV7kvi6jsP4urca+Mj8ORsjf/kysBl4Cagwr1cYM5a2AGswZkGk/HUM8LWfBDxt3p4KvA/UAf8Ecs3jeeb9OvP81FS3exCvdwGw3HyvHwfKR/L7DNwMbADWAg8AuSPxfQYexhin8GF8k/v6QN5X4Gvm668DLh1oe2SlrRBCZImRkNIRQgiRAAn4QgiRJSTgCyFElpCAL4QQWUICvhBCZAkJ+EIIkSUk4AshRJaQgC+EEFni/wN/gnFWNH3rQgAAAABJRU5ErkJggg==\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"n = 1000\n",
"xs = np.random.randn(n).cumsum()\n",
"i = np.argmax(np.maximum.accumulate(xs) - xs) # end of the period\n",
"j = np.argmax(xs[:i])\n",
"plt.plot(xs)\n",
"plt.plot([i, j], [xs[i], xs[j]], 'o', color='Red', markersize=10)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## randn\n",
"\n",
"* [numpy.random.randn](https://docs.scipy.org/doc/numpy/reference/generated/numpy.random.randn.html)\n",
"* [numpy.random.standard_normal](https://docs.scipy.org/doc/numpy/reference/generated/numpy.random.standard_normal.html)"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([ 0.19078308, -0.77451052, 1.08907138])"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"np.random.randn(3)"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([[ 0.52867101, 1.40271136, 2.29026888],\n",
" [ 0.37268287, -0.44136897, -1.26289375]])"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"np.random.standard_normal((2, 3))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## random\n",
"\n",
"* [numpy.random.random](https://docs.scipy.org/doc/numpy/reference/generated/numpy.random.random.html)\n",
"* [numpy.random.random_sample](https://docs.scipy.org/doc/numpy/reference/generated/numpy.random.random_sample.html)"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([0.14603611, 0.90276365, 0.64492619])"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"np.random.random(3)"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([[0.25621421, 0.21111521, 0.47538457],\n",
" [0.20236014, 0.94825614, 0.01658783]])"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"np.random.random_sample((2, 3))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## cumsum\n",
"\n",
"* [numpy.cumsum](https://docs.scipy.org/doc/numpy/reference/generated/numpy.cumsum.html)"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([ -20, 7655, 8620, -170, -3633, 15082, 17608, 11909, 5525,\n",
" 10390])"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"l = [-20, 7675, 965, -8790, -3463, 18715, 2526, -5699, -6384, 4865]\n",
"ndarray1 = np.array(l).cumsum()\n",
"ndarray1"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[<matplotlib.lines.Line2D at 0x7f5e96a24cf8>]"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.plot(ndarray1)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## accumulate\n",
"\n",
"* [numpy.ufunc.accumulate](https://docs.scipy.org/doc/numpy/reference/generated/numpy.ufunc.accumulate.html)\n",
"* [Universal Functions](https://docs.scipy.org/doc/numpy/user/quickstart.html#universal-functions)"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([ -20, 7655, 8620, 8620, 8620, 15082, 17608, 17608, 17608,\n",
" 17608])"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"ndarray2 = np.maximum.accumulate(ndarray1)\n",
"ndarray2"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.plot(ndarray1, label='numpy.cumsum')\n",
"plt.plot(ndarray2, label='numpy.ufunc.accumulate')\n",
"plt.legend(loc='best')\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Basic Operations\n",
"\n",
"* [Basic Operations](https://docs.scipy.org/doc/numpy/user/quickstart.html#basic-operations)"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([ 0, 0, 0, 8790, 12253, 0, 0, 5699, 12083,\n",
" 7218])"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"ndarray3 = ndarray2 - ndarray1\n",
"ndarray3"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## argmax\n",
"\n",
"* [numpy.argmax](https://docs.scipy.org/doc/numpy/reference/generated/numpy.argmax.html)"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"4"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"index1 = np.argmax(ndarray3)\n",
"index1"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## ndarray[n:n]\n",
"\n",
"* [Indexing, Slicing and Iterating](https://docs.scipy.org/doc/numpy/user/quickstart.html#indexing-slicing-and-iterating)"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([ -20, 7655, 8620, -170])"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"ndarray4 = ndarray1[:index1]\n",
"ndarray4"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"2"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"index2 = np.argmax(ndarray4)\n",
"index2"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[<matplotlib.lines.Line2D at 0x7f5e96a01d30>]"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.plot(ndarray1)\n",
"plt.plot([index1, index2], [ndarray1[index1], ndarray1[index2]], 'o', color='Red', markersize=10)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## max\n",
"\n",
"* [numpy.amax](https://docs.scipy.org/doc/numpy/reference/generated/numpy.amax.html)\n",
"* [numpy.ndarray.max](https://docs.scipy.org/doc/numpy/reference/generated/numpy.ndarray.max.html)"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"12253\n",
"12253\n"
]
}
],
"source": [
"print(np.amax(ndarray3))\n",
"print(ndarray3.max())"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### NumPy ndarray 最大ドローダウン"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"12253"
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"def mdd(a):\n",
" a1 = a.cumsum()\n",
" a2 = np.maximum.accumulate(a1)\n",
" a3 = a2 - a1\n",
" return a3.max()\n",
"\n",
"mdd(np.array(l))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## pandas"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0 -20\n",
"1 7675\n",
"2 965\n",
"3 -8790\n",
"4 -3463\n",
"5 18715\n",
"6 2526\n",
"7 -5699\n",
"8 -6384\n",
"9 4865\n",
"dtype: int64"
]
},
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"s = pd.Series(l)\n",
"s"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### cumsum\n",
"\n",
"* [pandas.DataFrame.cumsum](https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.cumsum.html)\n",
"* [pandas.Series.cumsum](https://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.cumsum.html)"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0 -20\n",
"1 7655\n",
"2 8620\n",
"3 -170\n",
"4 -3633\n",
"5 15082\n",
"6 17608\n",
"7 11909\n",
"8 5525\n",
"9 10390\n",
"dtype: int64"
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"s2 = s.cumsum()\n",
"s2"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### cummax\n",
"\n",
"* [pandas.DataFrame.cummax](https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.cummax.html)\n",
"* [pandas.Series.cummax](https://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.cummax.html)"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0 -20\n",
"1 7655\n",
"2 8620\n",
"3 8620\n",
"4 8620\n",
"5 15082\n",
"6 17608\n",
"7 17608\n",
"8 17608\n",
"9 17608\n",
"dtype: int64"
]
},
"execution_count": 20,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"s3 = s2.cummax()\n",
"s3"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0 0\n",
"1 0\n",
"2 0\n",
"3 8790\n",
"4 12253\n",
"5 0\n",
"6 0\n",
"7 5699\n",
"8 12083\n",
"9 7218\n",
"dtype: int64"
]
},
"execution_count": 21,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"s4 = s3 - s2\n",
"s4"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### max\n",
"\n",
"* [pandas.DataFrame.max](https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.max.html)\n",
"* [pandas.Series.max](https://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.max.html)"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"12253"
]
},
"execution_count": 22,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"s4.max()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### pandas Series 最大ドローダウン"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"12253"
]
},
"execution_count": 23,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"def mdd(s):\n",
" s1 = s.cumsum()\n",
" s2 = s1.cummax()\n",
" s3 = s2 - s1\n",
" return s3.max()\n",
"\n",
"mdd(pd.Series(l))"
]
}
],
"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.5.2"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment