├── .gitignore ├── Bond_ETFs.ipynb ├── ETFs.csv ├── ETFs.ipynb ├── LICENSE ├── Lazy_Backtests.ipynb ├── OLPS_Comparison.ipynb ├── OLPS_algos.png ├── README.md ├── spy_100.py ├── swensen.py ├── vti_agg_5050.py ├── vti_agg_6040.py └── vti_agg_7030.py /.gitignore: -------------------------------------------------------------------------------- 1 | # Byte-compiled / optimized / DLL files 2 | __pycache__/ 3 | *.py[cod] 4 | 5 | # C extensions 6 | *.so 7 | 8 | # Distribution / packaging 9 | .Python 10 | env/ 11 | build/ 12 | develop-eggs/ 13 | dist/ 14 | downloads/ 15 | eggs/ 16 | .eggs/ 17 | lib/ 18 | lib64/ 19 | parts/ 20 | sdist/ 21 | var/ 22 | *.egg-info/ 23 | .installed.cfg 24 | *.egg 25 | 26 | # PyInstaller 27 | # Usually these files are written by a python script from a template 28 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 29 | *.manifest 30 | *.spec 31 | 32 | # Installer logs 33 | pip-log.txt 34 | pip-delete-this-directory.txt 35 | 36 | # Unit test / coverage reports 37 | htmlcov/ 38 | .tox/ 39 | .coverage 40 | .coverage.* 41 | .cache 42 | nosetests.xml 43 | coverage.xml 44 | *,cover 45 | 46 | # Translations 47 | *.mo 48 | *.pot 49 | 50 | # Django stuff: 51 | *.log 52 | 53 | # Sphinx documentation 54 | docs/_build/ 55 | 56 | # PyBuilder 57 | target/ 58 | 59 | # emacs 60 | *~ 61 | #*# 62 | .#* 63 | 64 | # ipython 65 | .ipynb_checkpoints 66 | 67 | # Mac 68 | .DS_Store 69 | 70 | -------------------------------------------------------------------------------- /ETFs.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Exploratory Data Analysis (EDA) of ETFs" 8 | ] 9 | }, 10 | { 11 | "cell_type": "markdown", 12 | "metadata": { 13 | "collapsed": true 14 | }, 15 | "source": [ 16 | "Original data from https://s3.amazonaws.com/zanran_storage/www.etftopics.com/ContentPages/13968652.xls , modified and available locally as ETFs.csv . \n", 17 | "\n", 18 | "This notebook only works in Quantopian Research, but one only needs to modify the loading of the file to work with it locally." 19 | ] 20 | }, 21 | { 22 | "cell_type": "code", 23 | "execution_count": 193, 24 | "metadata": { 25 | "collapsed": false 26 | }, 27 | "outputs": [], 28 | "source": [ 29 | "import numpy as np\n", 30 | "import pandas as pd\n", 31 | "import matplotlib.pyplot as pyplot\n", 32 | "import seaborn as sns" 33 | ] 34 | }, 35 | { 36 | "cell_type": "code", 37 | "execution_count": 194, 38 | "metadata": { 39 | "collapsed": false 40 | }, 41 | "outputs": [ 42 | { 43 | "data": { 44 | "text/html": [ 45 | "
\n", 46 | "\n", 47 | " \n", 48 | " \n", 49 | " \n", 50 | " \n", 51 | " \n", 52 | " \n", 53 | " \n", 54 | " \n", 55 | " \n", 56 | " \n", 57 | " \n", 58 | " \n", 59 | " \n", 60 | " \n", 61 | " \n", 62 | " \n", 63 | " \n", 64 | " \n", 65 | " \n", 66 | " \n", 67 | " \n", 68 | " \n", 69 | " \n", 70 | " \n", 71 | " \n", 72 | " \n", 73 | " \n", 74 | " \n", 75 | " \n", 76 | " \n", 77 | " \n", 78 | " \n", 79 | " \n", 80 | " \n", 81 | " \n", 82 | " \n", 83 | " \n", 84 | " \n", 85 | " \n", 86 | " \n", 87 | " \n", 88 | " \n", 89 | " \n", 90 | " \n", 91 | " \n", 92 | " \n", 93 | " \n", 94 | " \n", 95 | " \n", 96 | " \n", 97 | " \n", 98 | " \n", 99 | " \n", 100 | " \n", 101 | " \n", 102 | " \n", 103 | " \n", 104 | " \n", 105 | " \n", 106 | " \n", 107 | " \n", 108 | " \n", 109 | " \n", 110 | " \n", 111 | " \n", 112 | " \n", 113 | " \n", 114 | " \n", 115 | " \n", 116 | " \n", 117 | " \n", 118 | " \n", 119 | " \n", 120 | " \n", 121 | " \n", 122 | " \n", 123 | " \n", 124 | " \n", 125 | " \n", 126 | " \n", 127 | " \n", 128 | " \n", 129 | " \n", 130 | " \n", 131 | " \n", 132 | " \n", 133 | " \n", 134 | " \n", 135 | " \n", 136 | " \n", 137 | " \n", 138 | " \n", 139 | " \n", 140 | " \n", 141 | " \n", 142 | " \n", 143 | " \n", 144 | " \n", 145 | " \n", 146 | " \n", 147 | "
NameIndexDescriptionCategoryProviderExpense_RatioDividendDiv_YieldMarket_CapShares...BetaAssetSizeStyleRegionSectorLeveragedInverseTop_HoldingsChart
Symbol
AAXJiShares MSCI All Country Asia ex Japan Index FundMSCI All Country Asia ex Japan IndexThe index measures the performance of 11 devel...Asia Pacific EquitiesiShares0.7400%$0.361.8400%$1,687.8931...1EquityNaNNaNPacific ex-JapanNaNNaNNaNNaNNaN
ACWIMSCI All Country World Index FundMSCI All Country World IndexThe Index is designed to measure the performan...Global EquitiesiShares0.3500%$0.361.4100%$1,176.6430...1EquityLarge-CapBlendGlobal/Multi-RegionNaNNaNNaNNaNNaN
\n", 148 | "

2 rows × 21 columns

\n", 149 | "
" 150 | ], 151 | "text/plain": [ 152 | " Name \\\n", 153 | "Symbol \n", 154 | "AAXJ iShares MSCI All Country Asia ex Japan Index Fund \n", 155 | "ACWI MSCI All Country World Index Fund \n", 156 | "\n", 157 | " Index \\\n", 158 | "Symbol \n", 159 | "AAXJ MSCI All Country Asia ex Japan Index \n", 160 | "ACWI MSCI All Country World Index \n", 161 | "\n", 162 | " Description \\\n", 163 | "Symbol \n", 164 | "AAXJ The index measures the performance of 11 devel... \n", 165 | "ACWI The Index is designed to measure the performan... \n", 166 | "\n", 167 | " Category Provider Expense_Ratio Dividend Div_Yield \\\n", 168 | "Symbol \n", 169 | "AAXJ Asia Pacific Equities iShares 0.7400% $0.36 1.8400% \n", 170 | "ACWI Global Equities iShares 0.3500% $0.36 1.4100% \n", 171 | "\n", 172 | " Market_Cap Shares ... Beta Asset Size Style \\\n", 173 | "Symbol ... \n", 174 | "AAXJ $1,687.89 31 ... 1 Equity NaN NaN \n", 175 | "ACWI $1,176.64 30 ... 1 Equity Large-Cap Blend \n", 176 | "\n", 177 | " Region Sector Leveraged Inverse Top_Holdings Chart \n", 178 | "Symbol \n", 179 | "AAXJ Pacific ex-Japan NaN NaN NaN NaN NaN \n", 180 | "ACWI Global/Multi-Region NaN NaN NaN NaN NaN \n", 181 | "\n", 182 | "[2 rows x 21 columns]" 183 | ] 184 | }, 185 | "execution_count": 194, 186 | "metadata": {}, 187 | "output_type": "execute_result" 188 | } 189 | ], 190 | "source": [ 191 | "ETFs = local_csv('ETFs.csv', skipinitialspace=True, \n", 192 | " na_values=['n/a','NaN'], thousands=',')\n", 193 | "ETFs = ETFs.set_index('Symbol')\n", 194 | "ETFs[:2]" 195 | ] 196 | }, 197 | { 198 | "cell_type": "code", 199 | "execution_count": 195, 200 | "metadata": { 201 | "collapsed": false 202 | }, 203 | "outputs": [], 204 | "source": [ 205 | "del ETFs['Top_Holdings']\n", 206 | "del ETFs['Chart']" 207 | ] 208 | }, 209 | { 210 | "cell_type": "code", 211 | "execution_count": 196, 212 | "metadata": { 213 | "collapsed": false 214 | }, 215 | "outputs": [ 216 | { 217 | "data": { 218 | "text/plain": [ 219 | "Index([u'Name', u'Index', u'Description', u'Category', u'Provider', u'Expense_Ratio', u'Dividend', u'Div_Yield', u'Market_Cap', u'Shares', u'Avg_Vol', u'Beta', u'Asset', u'Size', u'Style', u'Region', u'Sector', u'Leveraged', u'Inverse'], dtype='object')" 220 | ] 221 | }, 222 | "execution_count": 196, 223 | "metadata": {}, 224 | "output_type": "execute_result" 225 | } 226 | ], 227 | "source": [ 228 | "ETFs.columns" 229 | ] 230 | }, 231 | { 232 | "cell_type": "code", 233 | "execution_count": 197, 234 | "metadata": { 235 | "collapsed": false 236 | }, 237 | "outputs": [], 238 | "source": [ 239 | "def p2f(x):\n", 240 | " if type(x) is str:\n", 241 | " return float(x.strip('%'))/100\n", 242 | " else:\n", 243 | " return x / 100\n", 244 | "\n", 245 | "def d2f(x):\n", 246 | " if type(x) is str:\n", 247 | " return float(x.strip('$').replace(',',''))\n", 248 | " else:\n", 249 | " return x\n", 250 | "\n", 251 | "def s2b(x):\n", 252 | " if type(x) is str:\n", 253 | " if x == 'Yes':\n", 254 | " return True\n", 255 | " else:\n", 256 | " return False\n", 257 | " else:\n", 258 | " return False " 259 | ] 260 | }, 261 | { 262 | "cell_type": "code", 263 | "execution_count": 198, 264 | "metadata": { 265 | "collapsed": false 266 | }, 267 | "outputs": [ 268 | { 269 | "data": { 270 | "text/html": [ 271 | "
\n", 272 | "\n", 273 | " \n", 274 | " \n", 275 | " \n", 276 | " \n", 277 | " \n", 278 | " \n", 279 | " \n", 280 | " \n", 281 | " \n", 282 | " \n", 283 | " \n", 284 | " \n", 285 | " \n", 286 | " \n", 287 | " \n", 288 | " \n", 289 | " \n", 290 | " \n", 291 | " \n", 292 | " \n", 293 | " \n", 294 | " \n", 295 | " \n", 296 | " \n", 297 | " \n", 298 | " \n", 299 | " \n", 300 | " \n", 301 | " \n", 302 | " \n", 303 | " \n", 304 | " \n", 305 | " \n", 306 | " \n", 307 | " \n", 308 | " \n", 309 | " \n", 310 | " \n", 311 | " \n", 312 | " \n", 313 | " \n", 314 | " \n", 315 | " \n", 316 | " \n", 317 | " \n", 318 | " \n", 319 | " \n", 320 | " \n", 321 | " \n", 322 | " \n", 323 | " \n", 324 | " \n", 325 | " \n", 326 | " \n", 327 | " \n", 328 | " \n", 329 | " \n", 330 | " \n", 331 | " \n", 332 | " \n", 333 | " \n", 334 | " \n", 335 | " \n", 336 | " \n", 337 | " \n", 338 | " \n", 339 | " \n", 340 | " \n", 341 | " \n", 342 | " \n", 343 | " \n", 344 | " \n", 345 | " \n", 346 | " \n", 347 | " \n", 348 | " \n", 349 | " \n", 350 | " \n", 351 | " \n", 352 | " \n", 353 | " \n", 354 | " \n", 355 | " \n", 356 | " \n", 357 | " \n", 358 | " \n", 359 | " \n", 360 | " \n", 361 | " \n", 362 | " \n", 363 | " \n", 364 | " \n", 365 | " \n", 366 | " \n", 367 | " \n", 368 | " \n", 369 | " \n", 370 | " \n", 371 | " \n", 372 | " \n", 373 | " \n", 374 | " \n", 375 | " \n", 376 | " \n", 377 | " \n", 378 | " \n", 379 | " \n", 380 | " \n", 381 | " \n", 382 | " \n", 383 | " \n", 384 | " \n", 385 | " \n", 386 | " \n", 387 | "
NameIndexDescriptionCategoryProviderExpense_RatioDividendDiv_YieldMarket_CapSharesAvg_VolBetaAssetSizeStyleRegionSectorLeveragedInverse
Symbol
AAXJiShares MSCI All Country Asia ex Japan Index FundMSCI All Country Asia ex Japan IndexThe index measures the performance of 11 devel...Asia Pacific EquitiesiShares0.00740.360.01841687.89315278901EquityNaNNaNPacific ex-JapanNaNNaNFalse
ACWIMSCI All Country World Index FundMSCI All Country World IndexThe Index is designed to measure the performan...Global EquitiesiShares0.00350.360.01411176.64303797811EquityLarge-CapBlendGlobal/Multi-RegionNaNNaNFalse
ACWXiShares MSCI ACWI ex US Index FundMSCI All Country World ex-U.S. IndexThe index measures the performance of global e...Global EquitiesiShares0.00350.520.0147654.07171619241EquityLarge-CapBlendEx-U.S.NaNNaNFalse
\n", 388 | "
" 389 | ], 390 | "text/plain": [ 391 | " Name \\\n", 392 | "Symbol \n", 393 | "AAXJ iShares MSCI All Country Asia ex Japan Index Fund \n", 394 | "ACWI MSCI All Country World Index Fund \n", 395 | "ACWX iShares MSCI ACWI ex US Index Fund \n", 396 | "\n", 397 | " Index \\\n", 398 | "Symbol \n", 399 | "AAXJ MSCI All Country Asia ex Japan Index \n", 400 | "ACWI MSCI All Country World Index \n", 401 | "ACWX MSCI All Country World ex-U.S. Index \n", 402 | "\n", 403 | " Description \\\n", 404 | "Symbol \n", 405 | "AAXJ The index measures the performance of 11 devel... \n", 406 | "ACWI The Index is designed to measure the performan... \n", 407 | "ACWX The index measures the performance of global e... \n", 408 | "\n", 409 | " Category Provider Expense_Ratio Dividend Div_Yield \\\n", 410 | "Symbol \n", 411 | "AAXJ Asia Pacific Equities iShares 0.0074 0.36 0.0184 \n", 412 | "ACWI Global Equities iShares 0.0035 0.36 0.0141 \n", 413 | "ACWX Global Equities iShares 0.0035 0.52 0.0147 \n", 414 | "\n", 415 | " Market_Cap Shares Avg_Vol Beta Asset Size Style \\\n", 416 | "Symbol \n", 417 | "AAXJ 1687.89 31 527890 1 Equity NaN NaN \n", 418 | "ACWI 1176.64 30 379781 1 Equity Large-Cap Blend \n", 419 | "ACWX 654.07 17 161924 1 Equity Large-Cap Blend \n", 420 | "\n", 421 | " Region Sector Leveraged Inverse \n", 422 | "Symbol \n", 423 | "AAXJ Pacific ex-Japan NaN NaN False \n", 424 | "ACWI Global/Multi-Region NaN NaN False \n", 425 | "ACWX Ex-U.S. NaN NaN False " 426 | ] 427 | }, 428 | "execution_count": 198, 429 | "metadata": {}, 430 | "output_type": "execute_result" 431 | } 432 | ], 433 | "source": [ 434 | "# Apply conversions\n", 435 | "ETFs.Expense_Ratio = ETFs.Expense_Ratio.apply(p2f) \n", 436 | "ETFs.Dividend = ETFs.Dividend.apply(d2f)\n", 437 | "ETFs.Div_Yield = ETFs.Div_Yield.apply(p2f)\n", 438 | "ETFs.Market_Cap = ETFs.Market_Cap.apply(d2f)\n", 439 | "ETFs.Inverse = ETFs.Inverse.apply(s2b)\n", 440 | "ETFs[:3]" 441 | ] 442 | }, 443 | { 444 | "cell_type": "code", 445 | "execution_count": 199, 446 | "metadata": { 447 | "collapsed": false 448 | }, 449 | "outputs": [ 450 | { 451 | "data": { 452 | "text/plain": [ 453 | "1020" 454 | ] 455 | }, 456 | "execution_count": 199, 457 | "metadata": {}, 458 | "output_type": "execute_result" 459 | } 460 | ], 461 | "source": [ 462 | "len(ETFs.index)" 463 | ] 464 | }, 465 | { 466 | "cell_type": "code", 467 | "execution_count": 223, 468 | "metadata": { 469 | "collapsed": false 470 | }, 471 | "outputs": [ 472 | { 473 | "data": { 474 | "text/plain": [ 475 | "Leveraged Equities 120\n", 476 | "Emerging Markets Equities 46\n", 477 | "Energy Equities 40\n", 478 | "Large Cap Value Equities 36\n", 479 | "Technology Equities 32\n", 480 | "Large Cap Blend Equities 30\n", 481 | "Currency 29\n", 482 | "Financials Equities 28\n", 483 | "Europe Equities 25\n", 484 | "Foreign Large Cap Equities 25\n", 485 | "Health & Biotech Equities 22\n", 486 | "National Munis 21\n", 487 | "Commodities 19\n", 488 | "All Cap Equities 19\n", 489 | "Commodity Producers Equities 18\n", 490 | "Precious Metals 18\n", 491 | "Government Bonds 18\n", 492 | "Leveraged Commodities 18\n", 493 | "Large Cap Growth Equities 18\n", 494 | "Asia Pacific Equities 17\n", 495 | "China Equities 16\n", 496 | "Quantitative Methodology Indexes 16\n", 497 | "Global Equities 16\n", 498 | "Oil & Gas 15\n", 499 | "Inverse Equities 15\n", 500 | "Small Cap Blend Equities 15\n", 501 | "Consumer Discretionary Equities 14\n", 502 | "Miscellaneous Sector Equities 14\n", 503 | "Utilities Equities 14\n", 504 | "Real Estate 12\n", 505 | " ... \n", 506 | "Consumer Staples Equities 11\n", 507 | "Corporate Bonds 11\n", 508 | "Latin America Equities 10\n", 509 | "Materials 10\n", 510 | "Foreign Small & Mid Cap Equities 10\n", 511 | "Diversified Portfolio 10\n", 512 | "Small Cap Value Equities 10\n", 513 | "Global Real Estate 9\n", 514 | "Mid Cap Value Equities 9\n", 515 | "Metals 9\n", 516 | "Communications Equities 8\n", 517 | "Inverse Commodities 8\n", 518 | "Mid Cap Growth Equities 8\n", 519 | "Japan Equities 8\n", 520 | "Leveraged Real Estate 7\n", 521 | "Small Cap Growth Equities 7\n", 522 | "Money Market 7\n", 523 | "Leveraged Currency 6\n", 524 | "Inflation-Protected Bonds 6\n", 525 | "Hedge Fund 6\n", 526 | "Long-Short 6\n", 527 | "Preferred Stock/Convertible Bonds 5\n", 528 | "International Government Bonds 4\n", 529 | "Transportation Equities 4\n", 530 | "Mortgage Backed Securities 3\n", 531 | "High Yield Bonds 3\n", 532 | "California Munis 3\n", 533 | "New York Munis 3\n", 534 | "Volatility 2\n", 535 | "Emerging Markets Bonds 2\n", 536 | "dtype: int64" 537 | ] 538 | }, 539 | "execution_count": 223, 540 | "metadata": {}, 541 | "output_type": "execute_result" 542 | } 543 | ], 544 | "source": [ 545 | "ETFs.Category.value_counts()" 546 | ] 547 | }, 548 | { 549 | "cell_type": "code", 550 | "execution_count": 222, 551 | "metadata": { 552 | "collapsed": false 553 | }, 554 | "outputs": [ 555 | { 556 | "data": { 557 | "text/plain": [ 558 | "iShares 201\n", 559 | "Invesco PowerShares 146\n", 560 | "ProShares 111\n", 561 | "State Street 89\n", 562 | "Wisdom Tree 52\n", 563 | "Vanguard 46\n", 564 | "First Trust 44\n", 565 | "Rydex 40\n", 566 | "Barclays iPath 38\n", 567 | "Claymore 36\n", 568 | "Direxion 34\n", 569 | "Van Eck 29\n", 570 | "Merrill Lynch HOLDRs 17\n", 571 | "ELEMENTS 16\n", 572 | "UBS 13\n", 573 | "PIMCO 10\n", 574 | "Global X 10\n", 575 | "IndexIQ 9\n", 576 | "Charles Schwab 8\n", 577 | "Grail Advisors 7\n", 578 | "US Commodity Funds 7\n", 579 | "EG Shares 6\n", 580 | "XShares 6\n", 581 | "RevenueShares 6\n", 582 | "GlobalShares 5\n", 583 | "FaithShares 5\n", 584 | "ETF Securities 4\n", 585 | "MacroMarkets 4\n", 586 | "Jefferies 4\n", 587 | "Credit Suisse 2\n", 588 | "JP Morgan 2\n", 589 | "Javelin Funds 2\n", 590 | "Geary Advisors 2\n", 591 | "ALPS 2\n", 592 | "Goldman Sachs 2\n", 593 | "GreenHaven 1\n", 594 | "Fidelity 1\n", 595 | "AdvisorShares 1\n", 596 | "Sprott Asset Management 1\n", 597 | "U.S. One 1\n", 598 | "dtype: int64" 599 | ] 600 | }, 601 | "execution_count": 222, 602 | "metadata": {}, 603 | "output_type": "execute_result" 604 | } 605 | ], 606 | "source": [ 607 | "ETFs.Provider.value_counts()" 608 | ] 609 | }, 610 | { 611 | "cell_type": "code", 612 | "execution_count": 202, 613 | "metadata": { 614 | "collapsed": false 615 | }, 616 | "outputs": [ 617 | { 618 | "data": { 619 | "text/plain": [ 620 | "" 621 | ] 622 | }, 623 | "execution_count": 202, 624 | "metadata": {}, 625 | "output_type": "execute_result" 626 | }, 627 | { 628 | "data": { 629 | "image/png": [ 630 | "iVBORw0KGgoAAAANSUhEUgAAA1AAAAHiCAYAAADmhi1mAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\n", 631 | "AAALEgAACxIB0t1+/AAAG7tJREFUeJzt3X+Q3Hd93/GXYqFg4aswUBmQXQTU94mNoRBlHNpMC81A\n", 632 | "x4UW6GQGAg2YH02YQqCTaVNsmBD6i18pDA0ZSCk/akhtcFNwXCcMGNpQaPhRbgjgsfuhBt3FdpDE\n", 633 | "GBDCxsg/1D9uDWcjn96S9rvfle7x+Ee7393v7Xvvc+vbp7+7e5sOHToUAAAAjuynxh4AAADgRCGg\n", 634 | "AAAAigQUAABAkYACAAAoElAAAABFAgoAAKBo81BfuLV2VpL3J9me5FCSd/Xef7e19qAkH0ryiCTL\n", 635 | "SZ7de//uZJ+Lk7w4yZ1JXtl7//hQ8wEAABytIY9A3Z7kN3rvj0nyxCQvb62dk+SiJFf33heTfHJy\n", 636 | "Pq21c5M8J8m5SS5I8o7WmiNkAADA3BgsUHrve3rvfz45/f0k1yXZkeQZSS6ZXO2SJM+anH5mkst6\n", 637 | "77f33peTXJ/k/KHmAwAAOFozOcLTWtuZ5AlJPp/kjN773slFe5OcMTn98CQ3rtntxqwGFwAAwFwY\n", 638 | "7D1Qd2utnZbkvyX5Z733A621H13Wez/UWju0zu7rXZalpaV1LwcAANi1a9emaX2tQQOqtXa/rMbT\n", 639 | "B3rvV0w2722tPbT3vqe19rAk+ybbb0py1prdz5xsW9euXbumOTIzsrS0ZO1OYNbvxGb9TlzW7sRm\n", 640 | "/U5c1u7EtrS0NNWvN9hL+Fprm5K8J8m1vfe3rbnoyiQXTk5fmOSKNdt/ubW2pbX2yCRnJ/nCUPMB\n", 641 | "AAAcrSGPQP1Ckl9J8pXW2pcm2y5O8sYkl7fWXpLJx5gnSe/92tba5UmuTXJHkpf13r1EDwAAmBuD\n", 642 | "BVTv/TO57yNcT7mPfV6f5PVDzQQwawcPHszy8vLYY9zDyspKFhYWZn67O3fuzJYtW2Z+uwAwTYN/\n", 643 | "iATARra8vJznX3xptm7bPvYo93TVnpne3K379+UDb3heFhcXZ3q7ADBtAgpgYFu3bc9pp/urDABw\n", 644 | "MpjJ34ECAAA4GQgoAACAIgEFAABQJKAAAACKBBQAAECRgAIAACgSUAAAAEUCCgAAoEhAAQAAFAko\n", 645 | "AACAIgEFAABQJKAAAACKBBQAAECRgAIAACgSUAAAAEUCCgAAoEhAAQAAFAkoAACAIgEFAABQJKAA\n", 646 | "AACKBBQAAECRgAIAACgSUAAAAEUCCgAAoEhAAQAAFAkoAACAIgEFAABQJKAAAACKBBQAAECRgAIA\n", 647 | "ACgSUAAAAEUCCgAAoEhAAQAAFAkoAACAIgEFAABQJKAAAACKBBQAAECRgAIAACgSUAAAAEUCCgAA\n", 648 | "oEhAAQAAFAkoAACAIgEFAABQJKAAAACKBBQAAECRgAIAACgSUAAAAEUCCgAAoEhAAQAAFAkoAACA\n", 649 | "IgEFAABQJKAAAACKBBQAAECRgAIAACgSUAAAAEUCCgAAoEhAAQAAFAkoAACAIgEFAABQJKAAAACK\n", 650 | "BBQAAECRgAIAACgSUAAAAEUCCgAAoEhAAQAAFAkoAACAIgEFAABQJKAAAACKBBQAAECRgAIAACgS\n", 651 | "UAAAAEUCCgAAoEhAAQAAFAkoAACAIgEFAABQJKAAAACKBBQAAECRgAIAACgSUAAAAEUCCgAAoEhA\n", 652 | "AQAAFAkoAACAIgEFAABQJKAAAACKBBQAAECRgAIAACgSUAAAAEUCCgAAoEhAAQAAFAkoAACAIgEF\n", 653 | "AABQtHnsAQA4+d115x3ZvXv32GPMjZ07d2bLli1jjzGqgwcPZnl5eewxZmplZSULCwuHvczPBJw4\n", 654 | "BBQAg7vt+zfnte/6bLZu+/rYo4zu1v378oE3PC+Li4tjjzKq5eXlPP/iS7N12/axR5mtq/b8xCY/\n", 655 | "E3BiEVAAzMTWbdtz2uk7xh6DOeJnAjgReQ8UAABAkYACAAAoElAAAABFAgoAAKBIQAEAABQJKAAA\n", 656 | "gCIBBQAAUDTo34Fqrb03ydOT7Ou9P3ay7XVJ/kmSb02u9ure+0cnl12c5MVJ7kzyyt77x4ecDwAA\n", 657 | "4GgM/Yd035fk7Unev2bboSRv7b2/de0VW2vnJnlOknOT7EjyidbaYu/9roFnBAAAKBn0JXy9908n\n", 658 | "+c5hLtp0mG3PTHJZ7/323vtykuuTnD/geAAAAEdlrPdAvaK19uXW2ntaaw+cbHt4khvXXOfGrB6J\n", 659 | "AgAAmAtDv4TvcN6Z5F9PTv+bJG9J8pL7uO6hI32xpaWlKY3FrFm7E5v1q1lZWRl7BObQNddckwMH\n", 660 | "DhzTvifLY89j456O52eC2ThZHnscv5kHVO99392nW2vvTvLfJ2dvSnLWmqueOdm2rl27dk11PmZj\n", 661 | "aWnJ2p3ArF/dwsJCctWescdgzpx33nlZXFw86v1Opseex8Y9HevPBLNxMj32NqJpx+/MX8LXWnvY\n", 662 | "mrP/KMlXJ6evTPLLrbUtrbVHJjk7yRdmPR8AAMB9GfpjzC9L8qQkD2mt3ZDkt5M8ubX2+Ky+PG93\n", 663 | "kpcmSe/92tba5UmuTXJHkpf13o/4Ej4AAIBZGTSgeu/PPczm965z/dcnef1wEwEAABy7sT6FDwAA\n", 664 | "4IQjoAAAAIoEFAAAQJGAAgAAKBJQAAAARTP/Q7rAxnDw4MEsLy+PPcbodu/ePfYIAMAUCShgEMvL\n", 665 | "y3n+xZdm67btY48yqptvvC4PPvOcsccAAKZEQAGD2bpte047fcfYY4zq1v17xx4BAJgi74ECAAAo\n", 666 | "ElAAAABFAgoAAKBIQAEAABQJKAAAgCIBBQAAUCSgAAAAigQUAABAkYACAAAoElAAAABFAgoAAKBI\n", 667 | "QAEAABQJKAAAgCIBBQAAUCSgAAAAigQUAABAkYACAAAoElAAAABFAgoAAKBIQAEAABQJKAAAgCIB\n", 668 | "BQAAUCSgAAAAigQUAABAkYACAAAoElAAAABFAgoAAKBIQAEAABQJKAAAgCIBBQAAUCSgAAAAigQU\n", 669 | "AABAkYACAAAoElAAAABFAgoAAKBIQAEAABQJKAAAgCIBBQAAUCSgAAAAigQUAABAkYACAAAoElAA\n", 670 | "AABFm8cegJPDwYMHs7y8XL7+yspKFhYWhhtoRDt37syWLVvGHgMAgAEIKKZieXk5z7/40mzdtr2+\n", 671 | "01V7hhtoJLfu35cPvOF5WVxcHHsUAAAGIKCYmq3btue003eMPQYAAAzGe6AAAACKBBQAAECRgAIA\n", 672 | "ACgSUAAAAEUCCgAAoEhAAQAAFAkoAACAIgEFAABQJKAAAACKBBQAAECRgAIAACgSUAAAAEUCCgAA\n", 673 | "oEhAAQAAFAkoAACAIgEFAABQJKAAAACKBBQAAECRgAIAACjaPPYAcDK56847snv37rHHGNzKykoW\n", 674 | "FhbWvc5G+D4AABuPgIIpuu37N+e17/pstm77+tijDO+qPetefPON1+XBZ54zo2EAAGZDQMGUbd22\n", 675 | "PaedvmPsMUZ36/69Y48AADB13gMFAABQJKAAAACKBBQAAECRgAIAACgSUAAAAEUCCgAAoEhAAQAA\n", 676 | "FAkoAACAIgEFAABQJKAAAACKBBQAAECRgAIAACgSUAAAAEUCCgAAoEhAAQAAFG0+0hVaa2ckeUuS\n", 677 | "R/Te/3Zr7XFJ/lbv/fcHnw4AAGCOVI5A/ack/zvJAyfne5KXDzYRAADAnKoE1I7e+zuT3JEkvfcf\n", 678 | "Jrlr0KkAAADmUCWg7mitbbr7TGvtgetdGQAA4GRVCagPJ/n9JH+ltfbCJFcned+QQwEAAMyjIwZU\n", 679 | "7/1NST6dZCnJ05L8h97724YeDAAAYN4c8VP4kqT3/gdJ/mDgWQAAAObaEY9AtdYWW2ufaa0tT87/\n", 680 | "bGvtdQPPBQAAMHcq74F6Z5J/l+S7k/NfTvLswSYCAACYU5WA2tZ7/2iSQ0nSe78zycFBpwIAAJhD\n", 681 | "1Y8x33L3mdbajiR3DjcSAADAfKq+hO/DSR7SWvtXST6T5C2DTgUAADCHjvgpfL33S1pr30jyD5Oc\n", 682 | "muQFvfdPV754a+29SZ6eZF/v/bGTbQ9K8qEkj0iynOTZvffvTi67OMmLs3qE65W9948f9T0CAAAY\n", 683 | "yLoB1VrbnOQLvfefzerfgjpa70vy9iTvX7PtoiRX997f3Fp71eT8Ra21c5M8J8m5SXYk+URrbbH3\n", 684 | "ftcx3C4AAMDUrfsSvt77HUm+31o79Vi++ORI1XfutfkZSS6ZnL4kybMmp5+Z5LLe++299+Uk1yc5\n", 685 | "/1huFwAAYAiVP6T7tSSfaq39YZJbJtsO9d7fcYy3eUbvfe/k9N4kZ0xOPzzJ59Zc78asHokCAACY\n", 686 | "C5WA2pzk2iTnTPvGe++HWmuH1rnKepcBAADMVOVDJF445dvc21p7aO99T2vtYUn2TbbflOSsNdc7\n", 687 | "c7JtXUtLS1Mej2OxsrIy9ggAJ4xrrrkmBw4cOKZ9T5bfe35v3NPx/EwwGyfLY4/jd8SAaq29PD95\n", 688 | "JGh/Vj9c4v8dw21emeTCJG+a/HvFmu2XttbemtWX7p2d5AtH+mK7du06hhGYtoWFheSqPWOPAXBC\n", 689 | "OO+887K4uHjU+y0tLZ00v/f83rinY/2ZYDZOpsfeRjTt+K38HagLkrwhyVOSPDXJ67MaPv+jtfaS\n", 690 | "9XZsrV2W5M9WT7YbWmsvSvLGJE9trX0tyS9Ozqf3fm2Sy7P6csGPJnlZ791L+AAAgLlReQ/UXUke\n", 691 | "23v/iyRprZ2V5B1Z/YS8TyR5z33t2Ht/7n1c9JT7uP7rsxpoAAAAc6dyBOrRd8dTkvTeb0jyyN77\n", 692 | "N5PcPthkAAAAc6ZyBGpva+3VWf2juJuy+vK9fa21U+JT8gAAgA2kcgTqBUl2JbkmyVeT/Nxk2/0m\n", 693 | "/wIAAGwIlY8xvynJL93HxV+d7jgAAADzq/Ix5g9IcnGSR/Xen9da+5kkP9N7v+IIuwIAAJxUKi/h\n", 694 | "e2dWX673+Mn5m5K8bqiBAAAA5lUloB7Xe39Vkh8mSe/9QFY/TAIAAGBDqQTUD9eeaa3dv7gfAADA\n", 695 | "SaUSQv+rtfaaJPdvrT05yX9N8keDTgUAADCHKgH16sm/30vy5iSfj/dAAQAAG9C6n8LXWjs/yb9I\n", 696 | "8pjJpmuSfKz3fsfQgwEAAMyb+zwC1Vr7m0k+luTrSV6T5LeSfCPJx1trT5zNeAAAAPNjvSNQr0ry\n", 697 | "4t77R9Zs+3Br7XNJLkryrEEnAwAAmDPrvQfqMfeKpyRJ7/2P8uOX9AEAAGwY6wXULcd4GQAAwElp\n", 698 | "vZfw/XRr7dzDbN+U5KcHmgcAAGBurRdQpyb541kNAgAAMO/uM6B67ztnOAcAAMDcq/whXQAAACKg\n", 699 | "AAAAygQUAABAkYACAAAoElAAAABFAgoAAKBIQAEAABQJKAAAgCIBBQAAUCSgAAAAigQUAABAkYAC\n", 700 | "AAAoElAAAABFAgoAAKBIQAEAABQJKAAAgCIBBQAAUCSgAAAAigQUAABAkYACAAAoElAAAABFAgoA\n", 701 | "AKBIQAEAABQJKAAAgCIBBQAAUCSgAAAAigQUAABAkYACAAAoElAAAABFAgoAAKBIQAEAABQJKAAA\n", 702 | "gCIBBQAAUCSgAAAAigQUAABAkYACAAAoElAAAABFAgoAAKBIQAEAABQJKAAAgCIBBQAAUCSgAAAA\n", 703 | "igQUAABAkYACAAAoElAAAABFAgoAAKBIQAEAABQJKAAAgCIBBQAAUCSgAAAAigQUAABAkYACAAAo\n", 704 | "ElAAAABFAgoAAKBIQAEAABQJKAAAgCIBBQAAUCSgAAAAigQUAABAkYACAAAoElAAAABFAgoAAKBI\n", 705 | "QAEAABQJKAAAgCIBBQAAUCSgAAAAijaPPcCJ7mNX/89873vfH3uM0e3f/+2xRwAAgMEJqOP0n6/4\n", 706 | "QvZvftTYY4xu07e+ktz/0WOPAQAAgxJQx+mUUzbnlM1bxh5jdId+yo8SAAAnP++BAgAAKBJQAAAA\n", 707 | "RQIKAACgSEABAAAUCSgAAIAiAQUAAFAkoAAAAIoEFAAAQJGAAgAAKBJQAAAARQIKAACgSEABAAAU\n", 708 | "CSgAAIAiAQUAAFAkoAAAAIoEFAAAQNHmsW64tbac5HtJ7kxye+/9/Nbag5J8KMkjkiwneXbv/btj\n", 709 | "zQgAALDWmEegDiV5cu/9Cb338yfbLkpyde99McknJ+cBAADmwtgv4dt0r/PPSHLJ5PQlSZ4123EA\n", 710 | "AADu29hHoD7RWvtia+1XJ9vO6L3vnZzem+SMcUYDAAD4SaO9ByrJL/Tev9la+6tJrm6t/d+1F/be\n", 711 | "D7XWDh3piywtLQ02YMUtt96SbBt1hLlw220/SLaMPQXAieGaa67JgQMHjmnfsX/vTcvKysrYI8yV\n", 712 | "4/mZYDZOlscex2+0gOq9f3Py77daax9Jcn6Sva21h/be97TWHpZk35G+zq5duwaedH0P2Pqn2T/q\n", 713 | "BPPh/vc/NbeMPQTACeK8887L4uLiUe+3tLQ0+u+9aVlYWEiu2jP2GHPjWH8mmI2T6bG3EU07fkd5\n", 714 | "CV9rbWtrbWFy+gFJ/l6Srya5MsmFk6tdmOSKMeYDAAA4nLGOQJ2R5COttbtn+C+994+31r6Y5PLW\n", 715 | "2ksy+RjzkeYDAAD4CaMEVO99d5LHH2b7t5M8ZfYTAQAAHNnYH2MOAABwwhBQAAAARQIKAACgSEAB\n", 716 | "AAAUCSgAAIAiAQUAAFAkoAAAAIoEFAAAQJGAAgAAKBJQAAAARZvHHgAANpK77rwju3fvPqZ9V1ZW\n", 717 | "srCwMOWJxnGs3wOAsQkoAJih275/c177rs9m67avH9sXuGrPdAcayc03XpcHn3nO2GMAHDUBBQAz\n", 718 | "tnXb9px2+o6xxxjVrfv3jj0CwDHxHigAAIAiAQUAAFAkoAAAAIoEFAAAQJGAAgAAKBJQAAAARQIK\n", 719 | "AACgSEABAAAUCSgAAIAiAQUAAFAkoAAAAIoEFAAAQJGAAgAAKBJQAAAARQIKAACgSEABAAAUCSgA\n", 720 | "AIAiAQUAAFAkoAAAAIoEFAAAQJGAAgAAKBJQAAAARQIKAACgSEABAAAUCSgAAIAiAQUAAFAkoAAA\n", 721 | "AIoEFAAAQJGAAgAAKBJQAAAARQIKAACgSEABAAAUCSgAAIAiAQUAAFAkoAAAAIoEFAAAQJGAAgAA\n", 722 | "KBJQAAAARQIKAACgSEABAAAUCSgAAIAiAQUAAFAkoAAAAIoEFAAAQJGAAgAAKBJQAAAARQIKAACg\n", 723 | "SEABAAAUCSgAAIAiAQUAAFAkoAAAAIoEFAAAQJGAAgAAKBJQAAAARQIKAACgSEABAAAUCSgAAIAi\n", 724 | "AQUAAFAkoAAAAIoEFAAAQJGAAgAAKBJQAAAARQIKAACgSEABAAAUCSgAAIAiAQUAAFAkoAAAAIoE\n", 725 | "FAAAQJGAAgAAKBJQAAAARQIKAACgSEABAAAUCSgAAIAiAQUAAFAkoAAAAIoEFAAAQJGAAgAAKBJQ\n", 726 | "AAAARQIKAACgSEABAAAUCSgAAIAiAQUAAFAkoAAAAIoEFAAAQNHmsQcAAICDBw9meXl57DEOa2Vl\n", 727 | "JQsLCzO7vZ07d2bLli0zuz2OjoACAGB0y8vLef7Fl2brtu1jj3J4V+2Zyc3cun9fPvCG52VxcXEm\n", 728 | "t8fRE1AAAMyFrdu257TTd4w9BqzLe6AAAACKBBQAAECRgAIAACiau/dAtdYuSPK2JKckeXfv/U0j\n", 729 | "jwQAAJBkzo5AtdZOSfJ7SS5Icm6S57bWzhl3KgAAgFVzFVBJzk9yfe99ufd+e5IPJnnmyDMBAAAk\n", 730 | "mb+X8O1IcsOa8zcm+fmRZik5eGBPNp3yw7HHGN3tt3wrt/7g1LHHGN0PDnw7yaaxx5gLvherfB9W\n", 731 | "+T78mO/FKt+HH7t1/77s3r177DFGt3v37ty6f9/YY4zO92D+bTp06NDYM/xIa+2XklzQe//Vyflf\n", 732 | "SfLzvfdXHO76S0tL8zM8AAAwl3bt2jW1/2Mzb0egbkpy1przZ2X1KNRhTfMbAQAAcCTzFlBfTHJ2\n", 733 | "a21nkr9M8pwkzx11IgAAgIm5+hCJ3vsdSX49yceSXJvkQ73368adCgAAYNVcvQcKAABgns3VESgA\n", 734 | "AIB5JqAAAACKBBQAAEDR3HwKX2vtgiRvS3JKknf33t90mOv8bpK/n+TWJC/svX9pvX1baw9K8qEk\n", 735 | "j0iynOTZvffvDn9vNp6B1u93kvyDJAeTfD3Ji3rv+2dwdzaUIdZuzX7/PMnvJHlI7/3bg96RDWqo\n", 736 | "9WutvSLJy5LcmeSPe++vGvq+bEQD/bfz/CS/l+R+Se5I8rLe+/+Zwd3ZUI5z7d6b5OlJ9vXeH7vm\n", 737 | "+p63zMhA6+d5ywwMsXZr9is9b5mLI1CttVOy+h/7C5Kcm+S5rbVz7nWdpyX56733s5P8WpJ3Fva9\n", 738 | "KMnVvffFJJ+cnGfKBly/jyd5TO/9byT5WpKLZ3B3NpQB1y6ttbOSPDXJygzuyoY01Pq11v5ukmck\n", 739 | "eVzv/bwk/34292hjGfDx9+Ykv9V7f0KS107OM0XHs3YT75vse2+et8zAgOvnecvABly7o3reMhcB\n", 740 | "leT8JNf33pd777cn+WCSZ97rOs9IckmS9N4/n+SBrbWHHmHfH+0z+fdZw96NDWuQ9eu9X917v2uy\n", 741 | "/+eTnDn8XdlwhnrsJclbk/zLoe/ABjfU+v3TJG+YbE/v/VvD35UNaaj1+2aSbZPTD8zqH6lnuo5n\n", 742 | "7dJ7/3SS7xzm63reMhuDrJ/nLTMx1GMvOYrnLfMSUDuS3LDm/I2TbZXrPHydfc/ove+dnN6b5Ixp\n", 743 | "Dcw9DLV+a704yZ8c96Tc2yBr11p7ZpIbe+9fmfbA3MNQj72zk/yd1trnWmt/2lr7ualOzd2GWr+L\n", 744 | "kryltfYXWX0piv8LPn3Hs3br8bxlNoZav7U8bxnGIGt3tM9b5iWgqn+MalPxOj/x9Xrvh47idjg6\n", 745 | "01y/n9Bae02Sg733S49lf9Y19bVrrZ2a5NVJfvtY9ueoDPXY25zk9N77E5P8ZpLLj3J/aoZav/ck\n", 746 | "eWXv/a8l+Y0k7z3K/TmyY1278vMQz1sGNej6ed4yqKmvXWtta47yecu8BNRNSc5ac/6srNbietc5\n", 747 | "c3Kdw22/++UKe+8+ZNdae1iSfVOcmR+b5vrdY9/W2guTPC3JP57euKwxxNo9OsnOJF9ure2eXH+p\n", 748 | "tbZ9qpOTDPfYuzHJh5Nk8uEDd7XWHjy9sZkYav3O771/ZHL6D7P6khem61jX7kgvp/S8ZTaGWj/P\n", 749 | "W4Y3xNod9fOWefkUvi8mObu1tjPJXyZ5TpLn3us6Vyb59SQfbK09Mcl3e+97W2s3r7PvlUkuTPKm\n", 750 | "yb9XDHw/NqpB1m/yKSu/meRJvffbZnFHNqCpr13v/bqsednJ5D9Gu3wK3yCG+m/nFUl+McmnWmuL\n", 751 | "Sbb03m8e+s5sQEOt3/WttSf13j+V1XX82uD3ZOM55rU7wtf1vGU2Blk/z1tmYupr13v/ao7yectc\n", 752 | "HIHqvd+R1Tv6sSTXJvlQ7/261tpLW2svnVznT5J8o7V2fZL/mNWP173PfSdf+o1Jntpa+1pWf4m8\n", 753 | "cYZ3a8MYcP3enuS0JFe31r7UWnvHLO/XRjDg2q3lJSgDGXD93pvkUa21rya5LMkLZni3NowB1+/X\n", 754 | "kry5tfbnSf7t5DxTdDxrlySttcuS/FmSxdbaDa21F00u8rxlBgZcP89bBjbg2q11xOctmw4d8twG\n", 755 | "AACgYi6OQAEAAJwIBBQAAECRgAIAACgSUAAAAEUCCgAAoEhAAQAAFAkoAACAov8PTBT1Ld3pXj4A\n", 756 | "AAAASUVORK5CYII=\n" 757 | ], 758 | "text/plain": [ 759 | "" 760 | ] 761 | }, 762 | "metadata": {}, 763 | "output_type": "display_data" 764 | } 765 | ], 766 | "source": [ 767 | "ETFs.Expense_Ratio.plot(kind='hist')" 768 | ] 769 | }, 770 | { 771 | "cell_type": "code", 772 | "execution_count": 203, 773 | "metadata": { 774 | "collapsed": false 775 | }, 776 | "outputs": [ 777 | { 778 | "data": { 779 | "text/plain": [ 780 | "" 781 | ] 782 | }, 783 | "execution_count": 203, 784 | "metadata": {}, 785 | "output_type": "execute_result" 786 | }, 787 | { 788 | "data": { 789 | "image/png": [ 790 | "iVBORw0KGgoAAAANSUhEUgAAA0UAAAHiCAYAAAAnAWfKAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\n", 791 | "AAALEgAACxIB0t1+/AAAHyRJREFUeJzt3X+sZ3dd5/FXbR2g/CiDLNOfaavpvGUQFrhaUXQV0pr6\n", 792 | "g7aJSVsIUinhH1DQjYQWo3Gz2fJjdcWNWw2LkgHW2opQii6hpRgWV6VyAwoOvGuxo0ylU5ZOC4hA\n", 793 | "f8z+cU/hUmemF+j5fu/M5/FImjnnfM+5827u6U2ePT/uUfv37w8AAMCovm3ZAwAAACyTKAIAAIYm\n", 794 | "igAAgKGJIgAAYGiiCAAAGJooAgAAhnbMnF+8qi5L8vwk9yX5aJIXJnlkkquSnJpkd5ILuvvOdftf\n", 795 | "kuTeJC/r7uvmnA8AAGC2K0VVdVqSFyd5enc/OcnRSS5KcmmS67t7e5IbpvVU1Y4kFybZkeScJFdU\n", 796 | "lStZAADArOaMjs8luTvJsVV1TJJjk/xzknOT7Jz22Znk/Gn5vCRXdvfd3b07yc1JzpxxPgAAgPmi\n", 797 | "qLvvSPIbSf4pazF0Z3dfn2Rbd++ddtubZNu0fGKSPeu+xJ4kJ801HwAAQDLjM0VV9V1JfiHJaUnu\n", 798 | "SvJHVfX89ft09/6q2n+IL3Ooz7K6unrIzwEAAFZWVo461Odzvmjhe5P8RXd/Nkmq6u1JfiDJbVV1\n", 799 | "fHffVlUnJLl92v/WJKesO/7kadshraysPLRTw0Gsrq4631go5xyL5HxjkZxvLNLq6uqD7jPnM0Wf\n", 800 | "SPKMqnpEVR2V5Kwku5K8K8nF0z4XJ7lmWr42yUVVtaWqTk9yRpIbZ5wPAABg1meK/ibJm5N8KMnf\n", 801 | "TpvfkOQ1Sc6uqpuSPHtaT3fvSnJ11sLp3Ule0t1ujwMAAGY16+8p6u7XJXndAzbfkbWrRgfa//Ik\n", 802 | "l885EwAAwHp+DxAAADA0UQQAAAxNFAEAAEMTRQAAwNBEEQAAMDRRBAAADE0UAQAAQxNFAADA0EQR\n", 803 | "AAAwNFEEAAAMTRQBAABDE0UAAMDQRBEAADA0UQQAAAxNFAEAAEMTRQAAwNBEEQAAMDRRBAAADE0U\n", 804 | "AQAAQxNFAADA0EQRAAAwNFEEAAAMTRQBAABDE0UAAMDQRBEAADA0UQQAAAxNFAEAAEMTRQAAwNBE\n", 805 | "EQAAMDRRBAAADE0UAQAAQxNFAADA0EQRAAAwtGOWPcC36oX/8TeXPUKS5OTvOCb/+Zd/ftljAAAA\n", 806 | "36DDPor+31HfuewRkiTHfXnPskcAAAC+CW6fAwAAhiaKAACAoYkiAABgaKIIAAAYmigCAACGJooA\n", 807 | "AIChiSIAAGBooggAABiaKAIAAIYmigAAgKGJIgAAYGiiCAAAGNoxc37xqqokf7hu03cm+ZUkb01y\n", 808 | "VZJTk+xOckF33zkdc1mSS5Lcm+Rl3X3dnDMCAABjm/VKUa95Wnc/LclKki8meUeSS5Nc393bk9ww\n", 809 | "raeqdiS5MMmOJOckuaKqXM0CAABms8jgOCvJzd39qSTnJtk5bd+Z5Pxp+bwkV3b33d29O8nNSc5c\n", 810 | "4IwAAMBgFhlFFyW5clre1t17p+W9SbZNyycm2bPumD1JTlrMeAAAwIhmfaboflW1JclzkrzygZ91\n", 811 | "9/6q2n+Iww/12aaxb9++rK6uLnsMZuZ7zKI551gk5xuL5HxjM1lIFCX58SSr3f2ZaX1vVR3f3bdV\n", 812 | "1QlJbp+235rklHXHnTxt2/S2bt2alZWVZY/BjFZXV32PWSjnHIvkfGORnG8s0kYCfFG3zz03X7t1\n", 813 | "LkmuTXLxtHxxkmvWbb+oqrZU1elJzkhy44JmBAAABjR7FFXVI7P2koW3r9v8miRnV9VNSZ49rae7\n", 814 | "dyW5OsmuJO9O8pLuPixunwMAAA5Ps98+193/kuTxD9h2R9ZC6UD7X57k8rnnAgAASBb79jkAAIBN\n", 815 | "RxQBAABDE0UAAMDQRBEAADA0UQQAAAxNFAEAAEMTRQAAwNBEEQAAMDRRBAAADE0UAQAAQxNFAADA\n", 816 | "0EQRAAAwNFEEAAAMTRQBAABDE0UAAMDQRBEAADA0UQQAAAxNFAEAAEMTRQAAwNBEEQAAMDRRBAAA\n", 817 | "DE0UAQAAQxNFAADA0EQRAAAwNFEEAAAMTRQBAABDE0UAAMDQRBEAADA0UQQAAAxNFAEAAEMTRQAA\n", 818 | "wNBEEQAAMDRRBAAADE0UAQAAQxNFAADA0EQRAAAwNFEEAAAMTRQBAABDE0UAAMDQRBEAADA0UQQA\n", 819 | "AAxNFAEAAEMTRQAAwNBEEQAAMDRRBAAADE0UAQAAQxNFAADA0I6Z+y+oqscmeWOSJyXZn+SFSf4+\n", 820 | "yVVJTk2yO8kF3X3ntP9lSS5Jcm+Sl3X3dXPPCAAAjGsRV4p+K8n/7u4nJnlKkk8kuTTJ9d29PckN\n", 821 | "03qqakeSC5PsSHJOkiuqytUsAABgNrMGR1Udl+SHu/v3k6S77+nuu5Kcm2TntNvOJOdPy+clubK7\n", 822 | "7+7u3UluTnLmnDMCAABjm/v2udOTfKaq3pTk3ydZTfILSbZ1995pn71Jtk3LJyb5q3XH70ly0swz\n", 823 | "AgAAA5s7io5J8vQkP9fdf11Vr890q9z9unt/Ve0/xNc41Gebxr59+7K6urrsMZiZ7zGL5pxjkZxv\n", 824 | "LJLzjc1k7ijak2RPd//1tP62JJclua2qju/u26rqhCS3T5/fmuSUdcefPG3b9LZu3ZqVlZVlj8GM\n", 825 | "VldXfY9ZKOcci+R8Y5GcbyzSRgJ81meKuvu2JJ+qqu3TprOS/F2SdyW5eNp2cZJrpuVrk1xUVVuq\n", 826 | "6vQkZyS5cc4ZAQCAsc3+Su4kP5/kf1XVliSfzNoruY9OcnVVvSjTK7mTpLt3VdXVSXYluSfJS7r7\n", 827 | "sLh9DgAAODzNHkXd/TdJvu8AH511kP0vT3L5rEMBAABM/A4gAABgaKIIAAAYmigCAACGJooAAICh\n", 828 | "iSIAAGBooggAABiaKAIAAIYmigAAgKGJIgAAYGiiCAAAGJooAgAAhiaKAACAoYkiAABgaKIIAAAY\n", 829 | "migCAACGJooAAIChiSIAAGBooggAABiaKAIAAIYmigAAgKGJIgAAYGiiCAAAGJooAgAAhiaKAACA\n", 830 | "oYkiAABgaKIIAAAYmigCAACGJooAAIChiSIAAGBooggAABiaKAIAAIYmigAAgKGJIgAAYGiiCAAA\n", 831 | "GJooAgAAhiaKAACAoYkiAABgaKIIAAAYmigCAACGJooAAIChiSIAAGBooggAABiaKAIAAIYmigAA\n", 832 | "gKGJIgAAYGiiCAAAGJooAgAAhnbM3H9BVe1O8rkk9ya5u7vPrKrHJbkqyalJdie5oLvvnPa/LMkl\n", 833 | "0/4v6+7r5p4RAAAY1yKuFO1P8qPd/bTuPnPadmmS67t7e5IbpvVU1Y4kFybZkeScJFdUlatZAADA\n", 834 | "bBYVHEc9YP3cJDun5Z1Jzp+Wz0tyZXff3d27k9yc5MwAAADMZFFXit5bVR+qqhdP27Z1995peW+S\n", 835 | "bdPyiUn2rDt2T5KTFjAjAAAwqNmfKUryzO7+dFX9uyTXV9Un1n/Y3furav8hjj/UZ5vGvn37srq6\n", 836 | "uuwxmJnvMYvmnGORnG8skvONzWT2KOruT09/fqaq3pG12+H2VtXx3X1bVZ2Q5PZp91uTnLLu8JOn\n", 837 | "bZve1q1bs7KysuwxmNHq6qrvMQvlnGORnG8skvONRdpIgM96+1xVHVtVj56WH5nkx5J8NMm1SS6e\n", 838 | "drs4yTXT8rVJLqqqLVV1epIzktw454wAAMDY5n6maFuSD1TVR5J8MMmfTK/Yfk2Ss6vqpiTPntbT\n", 839 | "3buSXJ1kV5J3J3lJdx8Wt88BAACHp1lvn+vuW5I89QDb70hy1kGOuTzJ5XPOBQAAcD+/AwgAABia\n", 840 | "KAIAAIYmigAAgKGJIgAAYGiiCAAAGJooAgAAhiaKAACAoYkiAABgaKIIAAAYmigCAACGJooAAICh\n", 841 | "iSIAAGBooggAABiaKAIAAIYmigAAgKGJIgAAYGiiCAAAGJooAgAAhiaKAACAoYkiAABgaKIIAAAY\n", 842 | "migCAACGJooAAIChiSIAAGBooggAABiaKAIAAIYmigAAgKGJIgAAYGiiCAAAGJooAgAAhiaKAACA\n", 843 | "oYkiAABgaKIIAAAYmigCAACGdsyD7VBV25L8RpJTu/uHq+opSX6wu3939ukAAABmtpErRf8zyf9N\n", 844 | "8thpvZO8dLaJAAAAFmgjUXRSd/9OknuSpLu/nOS+WacCAABYkI1E0T1VddT9K1X12EPtDAAAcDjZ\n", 845 | "SBS9PcnvJnlMVf1skuuTvGnOoQAAABblQaOou1+b5ANJVpP8RJLf6u7Xzz0YAADAIjzo2+eSpLvf\n", 846 | "muStM88CAACwcA96paiqtlfVn1fV7mn96VX1azPPBQAAsBAbeabod5L8lyR3Tut/k+SC2SYCAABY\n", 847 | "oI1E0XHd/e4k+5Oku+9N8pVZpwIAAFiQjb6Se8v9K1V1UpJ75xsJAABgcTZ6+9zbkzy+qv5Tkj9P\n", 848 | "8huzTgUAALAgD/r2ue7eWVX/kOQ5SR6R5AXd/YGN/gVVdXSSDyXZ093PqarHJbkqyalJdie5oLvv\n", 849 | "nPa9LMklWbsS9bLuvu4b/PcBAAD4hhwyiqrqmCQ3dvfTs/a7ir4ZL0+yK8mjp/VLk1zf3a+rqldO\n", 850 | "65dW1Y4kFybZkeSkJO+tqu3dfd83+fcCAAA8qEPePtfd9yT5QlU94pv54lV1ctZ+4esbkxw1bT43\n", 851 | "yc5peWeS86fl85Jc2d13d/fuJDcnOfOb+XsBAAA2aiO/vPWmJO+vqrcl+Zdp2/7uvmIDx/5mklck\n", 852 | "ecy6bdu6e++0vDfJtmn5xCR/tW6/PVm7YgQAADCbjbxo4Zis3f72xCTfO/3zfQ92UFX9VJLbu/vD\n", 853 | "+dpVoq/T3fszver7IA71GQAAwLdsIy9a+Nlv8mv/YJJzq+onkjw8yWOq6i1J9lbV8d19W1WdkOT2\n", 854 | "af9bk5yy7viTp22HhX379mV1dXXZYzAz32MWzTnHIjnfWCTnG5vJg0ZRVb00//aKzV1ZewHD3x/s\n", 855 | "uO5+VZJXTV/jR5L8Unf/TFW9LsnFSV47/XnNdMi1Sf6gqv5b1m6bOyPJjd/Yv87ybN26NSsrK8se\n", 856 | "gxmtrq76HrNQzjkWyfnGIjnfWKSNBPhGbp87J8mrk5yV5Owkl2ctZt5XVS/6Bua5P6xek+Tsqrop\n", 857 | "ybOn9XT3riRXZ+1WvXcnecl0ex0AAMBsNvKihfuSPLm7/ylJquqUJFdk7c1w703yew/2Bbr7/Une\n", 858 | "Py3fkbXAOtB+l2ctugAAABZiI1eKvuv+IEqS7v5UktO7+9NJ7p5tMgAAgAXYyJWivVX1qiRvytpb\n", 859 | "5C5OcntVHR1vhwMAAA5zG7lS9IIkK0k+luSjWXsl9wuSfPv0JwAAwGFrI6/kvjXJTx/k448+tOMA\n", 860 | "AAAs1kZeyf3IJJcl+c7ufl5VfXeS7+7uax7kUAAAgE1vI7fP/U7WbpV76rR+a5Jfm2sgAACARdpI\n", 861 | "FD2lu1+Z5MtJ0t2fz9oLFwAAAA57G4miL69fqaqHb/A4AACATW8jcfN/quqXkzy8qn40yR8leees\n", 862 | "UwEAACzIRqLoVdOfn0vyuiQfjGeKAACAI8Qh3z5XVWcm+aUkT5o2fSzJe7r7nrkHAwAAWISDXimq\n", 863 | "qh9I8p4kn0zyy0l+Jck/JLmuqp6xmPEAAADmdagrRa9Mckl3v2PdtrdX1V8luTTJ+bNOBgAAsACH\n", 864 | "eqboSQ8IoiRJd78zX7udDgAA4LB2qCj6l2/yMwAAgMPGoW6fe1hV7TjA9qOSPGymeQAAABbqUFH0\n", 865 | "iCR/uqhBAAAAluGgUdTdpy1wDgAAgKXYyC9vBQAAOGKJIgAAYGiiCAAAGJooAgAAhiaKAACAoYki\n", 866 | "AABgaKIIAAAYmigCAACGJooAAIChiSIAAGBooggAABiaKAIAAIYmigAAgKGJIgAAYGiiCAAAGJoo\n", 867 | "AgAAhiaKAACAoYkiAABgaKIIAAAYmigCAACGJooAAIChiSIAAGBooggAABiaKAIAAIYmigAAgKGJ\n", 868 | "IgAAYGiiCAAAGJooAgAAhiaKAACAoR0z1xeuqocneX+ShyXZkuSd3X1ZVT0uyVVJTk2yO8kF3X3n\n", 869 | "dMxlSS5Jcm+Sl3X3dXPNBwAAkMx4pai7v5TkWd391CRPSfKsqvqhJJcmub67tye5YVpPVe1IcmGS\n", 870 | "HUnOSXJFVbmSBQAAzGrW6OjuL06LW5IcnWRfknOT7Jy270xy/rR8XpIru/vu7t6d5OYkZ845HwAA\n", 871 | "wKxRVFXfVlUfSbI3yZ91998l2dbde6dd9ibZNi2fmGTPusP3JDlpzvkAAABme6YoSbr7viRPrarj\n", 872 | "krynqp71gM/3V9X+Q3yJQ322qezbty+rq6vLHoOZ+R6zaM45Fsn5xiI539hMZo2i+3X3XVX1p0lW\n", 873 | "kuytquO7+7aqOiHJ7dNutyY5Zd1hJ0/bDgtbt27NysrKssdgRqurq77HLJRzjkVyvrFIzjcWaSMB\n", 874 | "Ptvtc1X1+Kp67LT8iCRnJ/lwkmuTXDztdnGSa6bla5NcVFVbqur0JGckuXGu+QAAAJJ5nyk6Icn7\n", 875 | "pmeKPpjkXd19Q5LXJDm7qm5K8uxpPd29K8nVSXYleXeSl3T3YXP7HAAAcHia7fa57v5okqcfYPsd\n", 876 | "Sc46yDGXJ7l8rpkAAAAeyO8BAgAAhiaKAACAoYkiAABgaKIIAAAYmigCAACGJooAAIChiSIAAGBo\n", 877 | "oggAABiaKAIAAIYmigAAgKGJIgAAYGiiCAAAGJooAgAAhiaKAACAoYkiAABgaKIIAAAYmigCAACG\n", 878 | "JooAAIChiSIAAGBooggAABiaKAIAAIYmigAAgKGJIgAAYGiiCAAAGJooAgAAhiaKAACAoYkiAABg\n", 879 | "aKIIAAAYmigCAACGJooAAIChiSIAAGBooggAABiaKAIAAIYmigAAgKGJIgAAYGiiCAAAGJooAgAA\n", 880 | "hiaKAACAoYkiAABgaKIIAAAYmigCAACGJooAAIChiSIAAGBooggAABiaKAIAAIYmigAAgKGJIgAA\n", 881 | "YGjHzPnFq+qUJG9O8oQk+5O8obv/e1U9LslVSU5NsjvJBd1953TMZUkuSXJvkpd193VzzggAAIxt\n", 882 | "7itFdyf5xe5+UpJnJHlpVT0xyaVJru/u7UlumNZTVTuSXJhkR5JzklxRVa5mAQAAs5k1OLr7tu7+\n", 883 | "yLT8hSQfT3JSknOT7Jx225nk/Gn5vCRXdvfd3b07yc1JzpxzRgAAYGwLuwpTVacleVqSDybZ1t17\n", 884 | "p4/2Jtk2LZ+YZM+6w/ZkLaIAAABmMeszRferqkcl+eMkL+/uz1fVVz/r7v1Vtf8Qhx/qs01j3759\n", 885 | "WV1dXfYYzMz3mEVzzrFIzjcWyfnGZjJ7FFXVt2ctiN7S3ddMm/dW1fHdfVtVnZDk9mn7rUlOWXf4\n", 886 | "ydO2TW/r1q1ZWVlZ9hjMaHV11feYhXLOsUjONxbJ+cYibSTAZ719rqqOSvJ7SXZ19+vXfXRtkoun\n", 887 | "5YuTXLNu+0VVtaWqTk9yRpIb55wRAAAY29xXip6Z5PlJ/raqPjxtuyzJa5JcXVUvyvRK7iTp7l1V\n", 888 | "dXWSXUnuSfKS7j4sbp8DAAAOT7NGUXf/eQ5+NeqsgxxzeZLLZxsKAABgHb8DCAAAGJooAgAAhiaK\n", 889 | "AACAoYkiAABgaKIIAAAYmigCAACGNvfvKRrGvffek5tuumnZY3zVaaedli1btix7DAAA2PRE0UPk\n", 890 | "c3d+Nj9z2R/k2OOesOxR8sW7bs9bXv28bN++fdmjAADApieKHkLHHveEPGrrScseAwAA+AZ4pggA\n", 891 | "ABiaKAIAAIYmigAAgKGJIgAAYGiiCAAAGJooAgAAhiaKAACAoYkiAABgaKIIAAAYmigCAACGJooA\n", 892 | "AIChiSIAAGBooggAABiaKAIAAIYmigAAgKGJIgAAYGiiCAAAGJooAgAAhiaKAACAoYkiAABgaKII\n", 893 | "AAAYmigCAACGJooAAIChiSIAAGBooggAABiaKAIAAIYmigAAgKGJIgAAYGiiCAAAGJooAgAAhiaK\n", 894 | "AACAoYkiAABgaKIIAAAYmigCAACGJooAAIChiSIAAGBooggAABiaKAIAAIZ2zJxfvKp+P8lPJrm9\n", 895 | "u588bXtckquSnJpkd5ILuvvO6bPLklyS5N4kL+vu6+acDwAAYO4rRW9Kcs4Dtl2a5Pru3p7khmk9\n", 896 | "VbUjyYVJdkzHXFFVrmQBAACzmjU6uvsDSfY9YPO5SXZOyzuTnD8tn5fkyu6+u7t3J7k5yZlzzgcA\n", 897 | "ALCMKzHbunvvtLw3ybZp+cQke9bttyfJSYscDAAAGM+szxQ9mO7eX1X7D7HLoT7bVD531+eSLccv\n", 898 | "e4yv+tjHPpbPf/7zyx7jiLO6urrsERiMc45Fcr6xSM43NpNlRNHeqjq+u2+rqhOS3D5tvzXJKev2\n", 899 | "O3nadlh4zHGPyZ3/uuwpvuZ7vud7sn379mWPcURZXV3NysrKssdgIM45Fsn5xiI531ikjQT4Mm6f\n", 900 | "uzbJxdPyxUmuWbf9oqraUlWnJzkjyY1LmA8AABjI3K/kvjLJjyR5fFV9KsmvJnlNkqur6kWZXsmd\n", 901 | "JN29q6quTrIryT1JXtLdh83tcwAAwOFp1ijq7uce5KOzDrL/5Ukun28iAACAr+f3AAEAAEMTRQAA\n", 902 | "wNBEEQAAMDRRBAAADE0UAQAAQxNFAADA0EQRAAAwNFEEAAAMTRQBAABDE0UAAMDQRBEAADA0UQQA\n", 903 | "AAxNFAEAAEMTRQAAwNBEEQAAMDRRBAAADE0UAQAAQxNFAADA0EQRAAAwNFEEAAAMTRQBAABDE0UA\n", 904 | "AMDQRBEAADA0UQQAAAztmGUPwEPvvnvvyS233LLsMb7qtNNOy5YtW5Y9BgAAHJAoOgJ96Qufza++\n", 905 | "4S9z7HGfXPYo+eJdt+ctr35etm/fvuxRAADggETREerY456QR209adljAADApueZIgAAYGiiCAAA\n", 906 | "GJooAgAAhiaKAACAoYkiAABgaKIIAAAYmigCAACGJooAAIChiSIAAGBooggAABiaKAIAAIZ2zLIH\n", 907 | "4Mh237335JZbbln2GF/ntNNOy5YtW5Y9BgAAm4QoYlZf+sJn86tv+Msce9wnlz1KkuSLd92et7z6\n", 908 | "edm+ffuyRwEAYJMQRczu2OOekEdtPWnZYwAAwAF5pggAABiaKAIAAIYmigAAgKF5poihfCtvw/vH\n", 909 | "f/zHPPrRj35I5/EmPACA5RNFDOVbfhven9z2kM3iTXgAAJuDKGI43oYHAMB6my6KquqcJK9PcnSS\n", 910 | "N3b3a5c8EhzxvvKVr2T37t3LHuPruLUQAFiUTRVFVXV0kt9OclaSW5P8dVVd290fX+5k8ND7Vp5v\n", 911 | "eqjdcsst022FT1j2KEk2162FywzGgz3HJhgB4KG1qaIoyZlJbu7u3UlSVX+Y5Lwkoogjzrf8fNND\n", 912 | "6LN7Pp7vOPmJm+a2QsG4zgOeYxOMB/aVr3wlSTZVLIpXeGhspp81yeb7eeNnzUNjs0XRSUk+tW59\n", 913 | "T5LvP9QBR931d7MOtFH35vP54l2b4w3n//r5O5IctewxkmyuWZLNNc+/fv6OPOLR37HsMb7qi3fd\n", 914 | "vuwRvmrfp/8+r/j1T+Thj3rcskfJXXv/IY89YfkBst5mCsZX/Po7N8336WGPfOymmCVJvvSFO/Jf\n", 915 | "f+m8nH766cseZcPmeMMmHMw3cr5tpp81yeb6efOlL9yRt/2PX9gU/6PscHfU/v37lz3DV1XVTyc5\n", 916 | "p7tfPK0/P8n3d/fPH2j/1dXVzTM8AACwKa2srBzy/4pvtitFtyY5Zd36KVm7WnRAD/YvBwAA8GA2\n", 917 | "WxR9KMkZVXVakn9OcmGS5y51IgAA4Ii2OR6CmXT3PUl+Lsl7kuxKcpU3zwEAAHPaVM8UAQAALNqm\n", 918 | "ulIEAACwaKIIAAAYmigCAACGttnePrdhVXVOktcnOTrJG7v7tUseiSNUVf1+kp9Mcnt3P3nZ83Bk\n", 919 | "q6pTkrw5yROS7E/yhu7+78udiiNVVT08yfuTPCzJliTv7O7LljsVR7qqOjprbxze093PWfY8HNmq\n", 920 | "aneSzyW5N8nd3X3mgfY7LK8UTf8x/XaSc5LsSPLcqnricqfiCPamrJ1rsAh3J/nF7n5Skmckeamf\n", 921 | "b8ylu7+U5Fnd/dQkT0nyrKr6oSWPxZHv5Vl7y7C3fbEI+5P8aHc/7WBBlBymUZTkzCQ3d/fu7r47\n", 922 | "yR8mOW/JM3GE6u4PJNm37DkYQ3ff1t0fmZa/kOTjSU5c7lQcybr7i9PilqzdfXHHEsfhCFdVJyf5\n", 923 | "iSRvTHLUksdhHA96rh2uUXRSkk+tW98zbQM4Yky/yPppST645FE4glXVt1XVR5LsTfJn3b1r2TNx\n", 924 | "RPvNJK9Ict+yB2EY+5O8t6o+VFUvPthOh2sUudwKHNGq6lFJ3pbk5dMVI5hFd9833T53cpL/UFU/\n", 925 | "uuSROEJV1U9l7fncD8dVIhbnmd39tCQ/nrVb0n/4QDsdrlF0a5JT1q2fkrWrRQCHvar69iR/nOSt\n", 926 | "3X3NsudhDN19V5I/TfK9y56FI9YPJjm3qm5JcmWSZ1fVm5c8E0e47v709Odnkrwja4/h/BuHaxR9\n", 927 | "KMkZVXVaVW1JcmGSa5c8E8C3rKqOSvJ7SXZ19+uXPQ9Htqp6fFU9dlp+RJKzk3x4uVNxpOruV3X3\n", 928 | "Kd19epKLkryvu1+w7Lk4clXVsVX16Gn5kUl+LMlHD7TvYRlF3X1Pkp9L8p6svb3kqu7++HKn4khV\n", 929 | "VVcm+Ysk26vqU1X1wmXPxBHtmUmen7W3gH14+sfbD5nLCUneNz1T9MEk7+ruG5Y8E+PwOARz25bk\n", 930 | "A+t+xv1Jd193oB2P2r/f+QgAAIzrsLxSBAAA8FARRQAAwNBEEQAAMDRRBAAADE0UAQAAQxNFAADA\n", 931 | "0EQRAAAwtP8P0ukbo4bXAD4AAAAASUVORK5CYII=\n" 932 | ], 933 | "text/plain": [ 934 | "" 935 | ] 936 | }, 937 | "metadata": {}, 938 | "output_type": "display_data" 939 | } 940 | ], 941 | "source": [ 942 | "ETFs.Dividend.plot(kind='hist', bins=20)" 943 | ] 944 | }, 945 | { 946 | "cell_type": "code", 947 | "execution_count": 204, 948 | "metadata": { 949 | "collapsed": false 950 | }, 951 | "outputs": [ 952 | { 953 | "data": { 954 | "text/plain": [ 955 | "" 956 | ] 957 | }, 958 | "execution_count": 204, 959 | "metadata": {}, 960 | "output_type": "execute_result" 961 | }, 962 | { 963 | "data": { 964 | "image/png": [ 965 | "iVBORw0KGgoAAAANSUhEUgAAA00AAAHiCAYAAAA01ic+AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\n", 966 | "AAALEgAACxIB0t1+/AAAHqBJREFUeJzt3X3QpXdd3/FPSFgggAGGZvPYJNbdrywrBbZG60MLTLCR\n", 967 | "1iTWmSTgQzSMfQBB29GS6MjotA1odYqOBUWU2aKGpAohPjAkoEOxRQK3qKyr3xjYVTaQDQWSTUgx\n", 968 | "m+TuH3sS7252f3vvw3m4d1+vf/Y617muO99sfnsm773Ouc5Jy8vLAQAA4MCeMO8BAAAAFploAgAA\n", 969 | "GBBNAAAAA6IJAABgQDQBAAAMiCYAAICBU6b5w6uqkrxzxa6vTPLjSX4tyQ1JzkuyM8nl3X3P5Jxr\n", 970 | "k1yd5OEkr+3uW6Y5IwAAwMhJs/qepqp6QpI7k1yY5DVJ/k93/3RVvS7JM7v7mqralOQ3knxtkrOT\n", 971 | "vD/Jxu5+ZCZDAgAA7GeWb8+7KMkd3f3pJJck2TrZvzXJZZPtS5Nc3917u3tnkjuyL7IAAADmYpbR\n", 972 | "dGWS6yfb67t792R7d5L1k+2zkuxacc6u7LviBAAAMBdT/UzTo6pqXZJvS/K6/Z/r7uWqGr1H8KDP\n", 973 | "LS0tzea9hQAAwJq1ZcuWk47m/JlEU5JvTbLU3Z+bPN5dVWd0911VdWaSuyf770xy7orzzpnsO6gt\n", 974 | "W7Yc82HhQJaWlqw3ZsqaY5asN2bJemOWlpaWjvpnzOrteS/P3701L0luTnLVZPuqJDet2H9lVa2r\n", 975 | "qguSbEhy24xmBAAAeJypR1NVPTX7bgLxrhW735jkpVV1e5KXTB6nu7cnuTHJ9iTvTfKq7vYWPAAA\n", 976 | "YG6m/va87v5Skmfvt+8L2RdSBzr+uiTXTXsuAACA1Zjl3fMAAADWHNEEAAAwIJoAAAAGRBMAAMCA\n", 977 | "aAIAABgQTQAAAAOiCQAAYEA0AQAADIgmAACAAdEEAAAwIJoAAAAGRBMAAMCAaAIAABg4Zd4DHK13\n", 978 | "3/zeeY9wQP/son+aU089dd5jAAAAR2nNR9Nb379n3iM8zpe+cGc2P+ersmHDhnmPAgAAHKU1H02n\n", 979 | "PPHJ8x7hcU5+4pPmPQIAAHCM+EwTAADAgGgCAAAYEE0AAAADogkAAGBANAEAAAyIJgAAgAHRBAAA\n", 980 | "MCCaAAAABkQTAADAgGgCAAAYEE0AAAADogkAAGBANAEAAAyIJgAAgAHRBAAAMCCaAAAABkQTAADA\n", 981 | "gGgCAAAYEE0AAAADogkAAGBANAEAAAyIJgAAgAHRBAAAMCCaAAAABkQTAADAgGgCAAAYEE0AAAAD\n", 982 | "ogkAAGBANAEAAAyIJgAAgAHRBAAAMCCaAAAABkQTAADAgGgCAAAYEE0AAAADogkAAGBANAEAAAyI\n", 983 | "JgAAgAHRBAAAMHDKtP8BVfWMJG9L8twky0m+L8lfJbkhyXlJdia5vLvvmRx/bZKrkzyc5LXdfcu0\n", 984 | "ZwQAADiYWVxp+rkkv9fdz0nyvCR/meSaJLd298YkH5g8TlVtSnJFkk1JLk7y5qpyNQwAAJibqQZJ\n", 985 | "VZ2W5Ju7+1eTpLsf6u57k1ySZOvksK1JLptsX5rk+u7e2907k9yR5MJpzggAADAy7bfnXZDkc1X1\n", 986 | "9iT/MMlSkh9Ksr67d0+O2Z1k/WT7rCR/tOL8XUnOnvKMAAAABzXtaDolyQuT/EB3f7Sq3pTJW/Ee\n", 987 | "1d3LVbU8+Bmj5xbWtm3bsmfPnnmPwTG2tLQ07xE4wVhzzJL1xixZb6wl046mXUl2dfdHJ49/M8m1\n", 988 | "Se6qqjO6+66qOjPJ3ZPn70xy7orzz5nsW3M2b96cDRs2zHsMjqGlpaVs2bJl3mNwArHmmCXrjVmy\n", 989 | "3pilYxHoU/1MU3ffleTTVbVxsuuiJH+e5LeTXDXZd1WSmybbNye5sqrWVdUFSTYkuW2aMwIAAIxM\n", 990 | "/ZbjSV6T5Neral2ST2bfLcdPTnJjVb0yk1uOJ0l3b6+qG5NsT/JQkld195p8ex4AAHB8mHo0dfef\n", 991 | "JvnaAzx10UGOvy7JdVMdCgAAYJV8BxIAAMCAaAIAABgQTQAAAAOiCQAAYEA0AQAADIgmAACAAdEE\n", 992 | "AAAwIJoAAAAGRBMAAMCAaAIAABgQTQAAAAOiCQAAYEA0AQAADIgmAACAAdEEAAAwIJoAAAAGRBMA\n", 993 | "AMCAaAIAABgQTQAAAAOiCQAAYEA0AQAADIgmAACAAdEEAAAwIJoAAAAGRBMAAMCAaAIAABgQTQAA\n", 994 | "AAOiCQAAYEA0AQAADIgmAACAAdEEAAAwIJoAAAAGRBMAAMCAaAIAABgQTQAAAAOiCQAAYEA0AQAA\n", 995 | "DIgmAACAAdEEAAAwIJoAAAAGRBMAAMCAaAIAABgQTQAAAAOiCQAAYEA0AQAADIgmAACAAdEEAAAw\n", 996 | "IJoAAAAGRBMAAMCAaAIAABgQTQAAAAOiCQAAYEA0AQAADIgmAACAAdEEAAAwcMq0/wFVtTPJniQP\n", 997 | "J9nb3RdW1bOS3JDkvCQ7k1ze3fdMjr82ydWT41/b3bdMe0YAAICDmcWVpuUkL+ruF3T3hZN91yS5\n", 998 | "tbs3JvnA5HGqalOSK5JsSnJxkjdXlathAADA3MwqSE7a7/ElSbZOtrcmuWyyfWmS67t7b3fvTHJH\n", 999 | "kgsDAAAwJ7O60vT+qvpYVX3/ZN/67t492d6dZP1k+6wku1acuyvJ2TOYEQAA4ICm/pmmJN/Y3Z+t\n", 1000 | "qr+X5Naq+suVT3b3clUtD84fPbewtm3blj179sx7DI6xpaWleY/ACcaaY5asN2bJemMtmXo0dfdn\n", 1001 | "J79+rqrenX1vt9tdVWd0911VdWaSuyeH35nk3BWnnzPZt+Zs3rw5GzZsmPcYHENLS0vZsmXLvMfg\n", 1002 | "BGLNMUvWG7NkvTFLxyLQp/r2vKo6taqePtl+apJvSfKJJDcnuWpy2FVJbpps35zkyqpaV1UXJNmQ\n", 1003 | "5LZpzggAADAy7c80rU/yoar6kyQfSfI7k1uIvzHJS6vq9iQvmTxOd29PcmOS7Unem+RV3b0m354H\n", 1004 | "AAAcH6b69rzu3pHk+QfY/4UkFx3knOuSXDfNuQAAAFbLdyABAAAMiCYAAIAB0QQAADAgmgAAAAZE\n", 1005 | "EwAAwIBoAgAAGBBNAAAAA6IJAABgQDQBAAAMiCYAAIAB0QQAADAgmgAAAAZEEwAAwIBoAgAAGBBN\n", 1006 | "AAAAA6IJAABgQDQBAAAMiCYAAIAB0QQAADAgmgAAAAZEEwAAwIBoAgAAGBBNAAAAA6IJAABgQDQB\n", 1007 | "AAAMiCYAAIAB0QQAADAgmgAAAAZEEwAAwIBoAgAAGBBNAAAAA6IJAABgQDQBAAAMiCYAAIAB0QQA\n", 1008 | "ADAgmgAAAAZEEwAAwIBoAgAAGBBNAAAAA6IJAABgQDQBAAAMiCYAAIAB0QQAADAgmgAAAAZEEwAA\n", 1009 | "wIBoAgAAGBBNAAAAA6IJAABgQDQBAAAMiCYAAIAB0QQAADAgmgAAAAZEEwAAwIBoAgAAGBBNAAAA\n", 1010 | "A6dM+x9QVScn+ViSXd39bVX1rCQ3JDkvyc4kl3f3PZNjr01ydZKHk7y2u2+Z9nwAAAAjs7jS9INJ\n", 1011 | "tidZnjy+Jsmt3b0xyQcmj1NVm5JckWRTkouTvLmqXAkDAADmaqpRUlXnJHlZkrclOWmy+5IkWyfb\n", 1012 | "W5NcNtm+NMn13b23u3cmuSPJhdOcDwAA4FCmfSXnvyb5kSSPrNi3vrt3T7Z3J1k/2T4rya4Vx+1K\n", 1013 | "cvaU5wMAABia2meaqupfJLm7uz9eVS860DHdvVxVywd6bmL03ELbtm1b9uzZM+8xOMaWlpbmPQIn\n", 1014 | "GGuOWbLemCXrjbVkmjeC+IYkl1TVy5I8OclXVNU7kuyuqjO6+66qOjPJ3ZPj70xy7orzz5nsW5M2\n", 1015 | "b96cDRs2zHsMjqGlpaVs2bJl3mNwArHmmCXrjVmy3pilYxHoU3t7Xnf/aHef290XJLkyye9393cn\n", 1016 | "uTnJVZPDrkpy02T75iRXVtW6qrogyYYkt01rPgAAgNWY5d3pHn2r3RuTvLSqbk/yksnjdPf2JDdm\n", 1017 | "35323pvkVd29Zt+eBwAAHB+m/j1NSdLdH0zywcn2F5JcdJDjrkty3SxmAgAAWA3fgwQAADAgmgAA\n", 1018 | "AAZEEwAAwIBoAgAAGBBNAAAAA6IJAABgQDQBAAAMiCYAAIAB0QQAADAgmgAAAAZOOdQBVbU+yc8m\n", 1019 | "Oa+7v7mqnpfkG7r7F6c+HQAAwJyt5krTLyf5X0meMXncSV49tYkAAAAWyGqi6ezufkuSh5Kku/82\n", 1020 | "ySNTnQoAAGBBrCaaHqqqkx59UFXPGB0MAABwPFlNNL0ryS8m+Yqq+t4ktyZ5+zSHAgAAWBSHjKbu\n", 1021 | "/qkkH0qylORlSX6uu9807cEAAAAWwSHvnpck3f1rSX5tyrMAAAAsnENeaaqqjVX1h1W1c/L4hVX1\n", 1022 | "E1OeCwAAYCGs5jNNb0nyn5PcM3n8p0kun9pEAAAAC2Q10XRad783yXKSdPfDSR6c6lQAAAALYrW3\n", 1023 | "HF/36IOqOjvJw9MbCQAAYHGs9u1570ry7Kr6ySR/mORnpzoVAADAgjjk3fO6e2tVfSrJtyV5SpLv\n", 1024 | "6e4PTX0yAACABTCMpqo6Jclt3f3C7PuuJgAAgBPK8O153f1Qkvur6ikzmgcAAGChrObLbW9P8sGq\n", 1025 | "+s0kX5rsW+7uN09vLAAAgMWwmmg6Jcn2JM+Z8iwAAAALZzU3gvjeGcwBAACwkA4ZTVX16ky+2HaF\n", 1026 | "e7PvBhF/NZWpAAAAFsRqvqfp4iRvSHJRkpcmuS7JVUl+v6peOcXZAAAA5m410fRIkq/p7n/Z3d+e\n", 1027 | "5GuS/G2SC5P8+2kOBwAAMG+riaZ/0N1/8+iD7v50kgu6+7NJ9k5tMgAAgAWwmrvn7a6qH03y9iQn\n", 1028 | "Zd9b8+6uqpPz+M86AQAAHFdWc6Xpe5JsSbItySeS/KPJvidOfgUAADhureaW43cm+Y6DPP2JYzsO\n", 1029 | "AADAYlnNLcefmuTaJF/Z3a+oqq9O8tXdfdPUpwMAAJiz1bw97y3Z91a8508e35nkJ6Y1EAAAwCJZ\n", 1030 | "TTQ9r7tfl323GU9335d9N4QAAAA47q0mmv525YOqevIqzwMAAFjzVhM//7OqfizJk6vqRUn+R5L3\n", 1031 | "THUqAACABbGaaPrRya97kvx0ko/EZ5oAAIATxPDueVV1YZIfTvLcya5tSd7X3Q9NezAAAIBFcNAr\n", 1032 | "TVX1j5O8L8knk/xYkh9P8qkkt1TV189mPAAAgPkaXWl6XZKru/vdK/a9q6r+KMk1SS6b6mQAAAAL\n", 1033 | "YPSZpufuF0xJku5+T/7u7XoAAADHtVE0fekInwMAADhujN6e96Sq2nSA/ScledKU5gEAAFgoo2h6\n", 1034 | "SpLfndUgAAAAi+ig0dTd589wDgAAgIW0mi+3BQAAOGGJJgAAgAHRBAAAMCCaAAAABkQTAADAwOiW\n", 1035 | "40elqp6c5IPZ951O65K8p7uvrapnJbkhyXlJdia5vLvvmZxzbZKrkzyc5LXdfcu05gMAAFiNqV1p\n", 1036 | "6u4vJ3lxdz8/yfOSvLiqvinJNUlu7e6NST4weZzJF+lekWRTkouTvLmqXAkDAADmaqpR0t0PTDbX\n", 1037 | "JTk5yReTXJJk62T/1iSXTbYvTXJ9d+/t7p1J7khy4TTnAwAAOJSpRlNVPaGq/iTJ7iR/0N1/nmR9\n", 1038 | "d++eHLI7yfrJ9llJdq04fVeSs6c5HwAAwKFM7TNNSdLdjyR5flWdluR9VfXi/Z5frqrlwY8YPbfQ\n", 1039 | "tm3blj179sx7DI6xpaWleY/ACcaaY5asN2bJemMtmWo0Paq7762q302yJcnuqjqju++qqjOT3D05\n", 1040 | "7M4k56447ZzJvjVp8+bN2bBhw7zH4BhaWlrKli1b5j0GJxBrjlmy3pgl641ZOhaBPrW351XVs6vq\n", 1041 | "GZPtpyR5aZKPJ7k5yVWTw65KctNk++YkV1bVuqq6IMmGJLdNaz4AAIDVmOZnms5M8vuTzzR9JMlv\n", 1042 | "d/cHkrwxyUur6vYkL5k8TndvT3Jjku1J3pvkVd29Zt+eBwAAHB+m9va87v5EkhceYP8Xklx0kHOu\n", 1043 | "S3LdtGYCAAA4XL4HCQAAYEA0AQAADIgmAACAAdEEAAAwIJoAAAAGRBMAAMCAaAIAABgQTQAAAAOi\n", 1044 | "CQAAYEA0AQAADIgmAACAAdEEAAAwIJoAAAAGRBMAAMCAaAIAABgQTQAAAAOiCQAAYEA0AQAADIgm\n", 1045 | "AACAAdEEAAAwIJoAAAAGRBMAAMCAaAIAABgQTQAAAAOiCQAAYEA0AQAADIgmAACAAdEEAAAwIJoA\n", 1046 | "AAAGRBMAAMCAaAIAABgQTQAAAAOiCQAAYEA0AQAADIgmAACAAdEEAAAwIJoAAAAGRBMAAMCAaAIA\n", 1047 | "ABgQTQAAAAOiCQAAYEA0AQAADIgmAACAAdEEAAAwIJoAAAAGRBMAAMCAaAIAABgQTQAAAAOiCQAA\n", 1048 | "YEA0AQAADIgmAACAAdEEAAAwIJoAAAAGRBMAAMCAaAIAABg4ZZo/vKrOTfLfk5yeZDnJW7v756vq\n", 1049 | "WUluSHJekp1JLu/ueybnXJvk6iQPJ3ltd98yzRkBAABGpn2laW+Sf9fdz03y9UleXVXPSXJNklu7\n", 1050 | "e2OSD0wep6o2JbkiyaYkFyd5c1W5GgYAAMzNVIOku+/q7j+ZbN+f5C+SnJ3kkiRbJ4dtTXLZZPvS\n", 1051 | "JNd3997u3pnkjiQXTnNGAACAkZldxamq85O8IMlHkqzv7t2Tp3YnWT/ZPivJrhWn7cq+yAIAAJiL\n", 1052 | "qX6m6VFV9bQkv5XkB7v7vqp67LnuXq6q5cHpo+cW1rZt27Jnz555j8ExtrS0NO8ROMFYc8yS9cYs\n", 1053 | "WW+sJVOPpqp6YvYF0zu6+6bJ7t1VdUZ331VVZya5e7L/ziTnrjj9nMm+NWfz5s3ZsGHDvMfgGFpa\n", 1054 | "WsqWLVvmPQYnEGuOWbLemCXrjVk6FoE+1bfnVdVJSX4lyfbuftOKp25OctVk+6okN63Yf2VVrauq\n", 1055 | "C5JsSHLbNGcEAAAYmfaVpm9M8l1J/qyqPj7Zd22SNya5sapemcktx5Oku7dX1Y1Jtid5KMmruntN\n", 1056 | "vj0PAAA4Pkw1mrr7D3Pwq1kXHeSc65JcN7WhAAAADoPvQAIAABgQTQAAAAOiCQAAYEA0AQAADIgm\n", 1057 | "AACAAdEEAAAwIJoAAAAGRBMAAMCAaAIAABgQTQAAAAOiCQAAYEA0AQAADIgmAACAAdEEAAAwIJoA\n", 1058 | "AAAGRBMAAMCAaAIAABgQTQAAAAOiCQAAYEA0AQAADIgmAACAAdEEAAAwIJoAAAAGRBMAAMCAaAIA\n", 1059 | "ABgQTQAAAAOnzHuA49EjDz+UHTt2ZHl5ed6jHND555+fdevWzXsMAABYE0TTFHz5/s/nx3/pf+fU\n", 1060 | "0+6Y9yiP88C9d+cdb3hFNm7cOO9RAABgTRBNU3Lqaafnac88e95jAAAAR8lnmgAAAAZEEwAAwIBo\n", 1061 | "AgAAGBBNAAAAA6IJAABgQDQBAAAMiCYAAIAB0QQAADAgmgAAAAZEEwAAwIBoAgAAGBBNAAAAA6IJ\n", 1062 | "AABgQDQBAAAMiCYAAIAB0QQAADAgmgAAAAZEEwAAwIBoAgAAGBBNAAAAA6IJAABgQDQBAAAMiCYA\n", 1063 | "AIAB0QQAADAgmgAAAAZEEwAAwMAp0/zhVfWrSf55kru7+2sm+56V5IYk5yXZmeTy7r5n8ty1Sa5O\n", 1064 | "8nCS13b3LdOcDwAA4FCmfaXp7Uku3m/fNUlu7e6NST4weZyq2pTkiiSbJue8uapcCQMAAOZqqlHS\n", 1065 | "3R9K8sX9dl+SZOtke2uSyybblya5vrv3dvfOJHckuXCa8wEAABzKPK7krO/u3ZPt3UnWT7bPSrJr\n", 1066 | "xXG7kpw9y8EAAAD2N9XPNB1Kdy9X1fLgkNFzHKFt27blvvvum/cYa9LS0tK8R+AEY80xS9Ybs2S9\n", 1067 | "sZbMI5p2V9UZ3X1XVZ2Z5O7J/juTnLviuHMm+zjGNm/enI0bN857jDVnaWkpW7ZsmfcYnECsOWbJ\n", 1068 | "emOWrDdm6VgE+jzenndzkqsm21cluWnF/iural1VXZBkQ5Lb5jAfAADAY6Z9y/Hrk/zTJM+uqk8n\n", 1069 | "eX2SNya5sapemcktx5Oku7dX1Y1Jtid5KMmrutvb8wAAgLmaajR198sP8tRFBzn+uiTXTW8iAACA\n", 1070 | "w+N7kAAAAAZEEwAAwIBoAgAAGBBNAAAAA6IJAABgQDQBAAAMiCYAAICBqX5PE4vnkYcfyo4dO+Y9\n", 1071 | "xkGdf/75Wbdu3bzHAACAx4imE8yX7/98Xv/WD+fU0z4571Ee54F778473vCKbNy4cd6jAADAY0TT\n", 1072 | "CejU007P05559rzHAACANcFnmgAAAAZEEwAAwIBoAgAAGBBNAAAAA6IJAABgQDQBAAAMiCYAAIAB\n", 1073 | "0QQAADAgmgAAAAZEEwAAwIBoAgAAGBBNAAAAA6IJAABg4JR5DwCPeuThh7Jjx455j3FQe/funfcI\n", 1074 | "AADMgWhiYXz5/s/n9W/9cE497ZPzHuVxHrj37rzuO5837zEAAJgD0cRCOfW00/O0Z5497zEAAOAx\n", 1075 | "PtMEAAAwIJoAAAAGRBMAAMCAaAIAABgQTQAAAAOiCQAAYEA0AQAADIgmAACAAdEEAAAwIJoAAAAG\n", 1076 | "RBMAAMCAaAIAABgQTQAAAAOiCQAAYEA0AQAADIgmAACAAdEEAAAwIJoAAAAGRBMAAMCAaAIAABg4\n", 1077 | "Zd4DwFrwyMMP5TOf+Uxuv/32eY/yOOeff37WrVs37zEAAI5boglW4cv3fz7v+IOT8lt//P55j/L/\n", 1078 | "eeDeu/OON7wiGzdunPcoAADHLdEEq3Tqaafnac88e95jAAAwYz7TBAAAMCCaAAAABkQTAADAgM80\n", 1079 | "wRr2yMMPZceOHfMe46Dc2Q8AOB6IJljDvnz/5/P6t344p572yXmP8jj3f/Gz+U//5ptywQUXzHuU\n", 1080 | "AxJ0AMBqiSZY4xb1rn4P3Lt7YYPOrdoBgMOxcNFUVRcneVOSk5O8rbt/as4jAUdoUYNukT344IPZ\n", 1081 | "uXNnkuSv//qv8/SnP32+A+3HFToATkQLFU1VdXKSX0hyUZI7k3y0qm7u7r+Y72QAs7Fz585897W/\n", 1082 | "kVNPO33fjt+5a74DrbDIV+hWxuYiEpsAa9tCRVOSC5Pc0d07k6Sq3pnk0iSiCThmFvkGGjt27FjY\n", 1083 | "K3SL/vu27+2gp897lMdZ1NjcPzQX7crmooamQD8yi7zeHnzwwSRZyN+3ZDH/m56Ifw4WLZrOTvLp\n", 1084 | "FY93Jfm60Qkn3fvnUx3oSDzhgU/ngZMW827u//e+LyQ5ad5jHJDZDt+izpUs9mxf/Oxf5Ud+5i/z\n", 1085 | "5Kc9a96jPM69uz+VZ5y5WP9z/Si/b0duEWNzx44d+ZGfec9+/z3/eG7zrPTl+7+Q//LDly7kjWQO\n", 1086 | "/Pu2GNbe79tirLd7d38qT3rqM/w3PQyL/ufgN//bDx3zv6g6aXl5+Zj+wKNRVd+R5OLu/v7J4+9K\n", 1087 | "8nXd/ZoDHb+0tLQ4wwMAAAtpy5YtR/U3uYt2penOJOeueHxu9l1tOqCj/ZcHAAA4lEWLpo8l2VBV\n", 1088 | "5yf5TJIrkrx8rhMBAAAntIX64E13P5TkB5K8L8n2JDe4cx4AADBPC/WZJgAAgEWzUFeaAAAAFo1o\n", 1089 | "AgAAGBBNAAAAA4t297zHVNXFSd6U5OQkb+vunzrAMT+f5FuTPJDke7v746s9F1Y6yvW2M8meJA8n\n", 1090 | "2dvdF85obNaoQ623qvrqJG9P8oIkP9bdP7vac2F/R7nedsbrG4dpFWvuO5P8h+z7BvT7kvzb7v6z\n", 1091 | "1ZwL+zvK9bYzq3yNW8grTVV1cpJfSHJxkk1JXl5Vz9nvmJcl+aru3pDkXyV5y2rPhZWOZr1NLCd5\n", 1092 | "UXe/wP9QcCirfI36fJLXJPmZIzgXHnM0623C6xuHZZVr7lNJ/kl3Py/Jf0zy1sM4Fx5zNOttYtWv\n", 1093 | "cQsZTUkuTHJHd+/s7r1J3pnk0v2OuSTJ1iTp7o8keUZVnbHKc2GlI11v61c874uWWa1Drrfu/lx3\n", 1094 | "fyzJ3sM9F/ZzNOvtUV7fOByrWXMf7u57Jw8/kuSc1Z4L+zma9faoVb3GLWo0nZ3k0yse75rsW80x\n", 1095 | "Z63iXFjpaNZbsu9vKd5fVR+rqu+f2pQcL1az3qZxLiemo10zXt84XIe75l6Z5PeO8Fw4mvWWHMZr\n", 1096 | "3KJG02q/PMrffnEsHO16+6bufkH2fd7p1VX1zcdmLI5TR/PleL5Yj8N1tGvmG72+cZhWveaq6sVJ\n", 1097 | "rk7yusM9FyaOZr0lh/Eat6jRdGeSc1c8Pjf7ynF0zDmTY1ZzLqx0pOvtziTp7s9Mfv1ckndn36Vi\n", 1098 | "OJijeY3y+sbhOqo1092fnfzq9Y3VWtWaq6rnJfnlJJd09xcP51xY4WjW22G9xi3q3fM+lmRDVZ2f\n", 1099 | "5DNJrkjy8v2OuTnJDyR5Z1V9fZJ7unt3VX1+FefCSkez3k5NcnJ331dVT03yLUl+cnajswatZr09\n", 1100 | "av+rm4dzLiRHsd68vnGEDrnmqurvJ3lXku/q7jsO51zYzxGvt8N9jTtpeXkxr4RW1bfm724f+Cvd\n", 1101 | "/Yaq+tdJ0t2/NDnm0btlfCnJ93X3Hx/s3Dn8K7CGHOl6q6qvzL4/iMm+v4T4deuNQznUepvc1Oaj\n", 1102 | "Sb4iySPZd4vUTd19v9c3DteRrrckp8frG0dgFWvubUm+PcnfTE557FbPXuM4XEe63g73/+EWNpoA\n", 1103 | "AAAWwaJ+pgkAAGAhiCYAAIAB0QQAADAgmgAAAAZEEwAAwIBoAgAAGBBNAAAAA/8PpsFEcPB1IGoA\n", 1104 | "AAAASUVORK5CYII=\n" 1105 | ], 1106 | "text/plain": [ 1107 | "" 1108 | ] 1109 | }, 1110 | "metadata": {}, 1111 | "output_type": "display_data" 1112 | } 1113 | ], 1114 | "source": [ 1115 | "ETFs.Div_Yield.plot(kind='hist', bins=20)" 1116 | ] 1117 | }, 1118 | { 1119 | "cell_type": "code", 1120 | "execution_count": 205, 1121 | "metadata": { 1122 | "collapsed": false 1123 | }, 1124 | "outputs": [ 1125 | { 1126 | "data": { 1127 | "text/plain": [ 1128 | "" 1129 | ] 1130 | }, 1131 | "execution_count": 205, 1132 | "metadata": {}, 1133 | "output_type": "execute_result" 1134 | }, 1135 | { 1136 | "data": { 1137 | "image/png": [ 1138 | "iVBORw0KGgoAAAANSUhEUgAAA1gAAAHiCAYAAAD1UW2SAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\n", 1139 | "AAALEgAACxIB0t1+/AAAHotJREFUeJzt3X2QZXdd5/HPkBhIIBtkKZKQZEliJV8JNawwbkBd1ocN\n", 1140 | "WxElYdctEiwwmhT/BHlwS0qCq+VW7UZwRdFyg4U8GKLGRMQQyweSxS0W19VAgzgy8JVABjOjmVhk\n", 1141 | "Eh4ikkl6/7hn1mZMJk3md+/t7rxe/8w5555772/ur7tn3n3OPXfb6upqAAAAOHKPWfYAAAAAtgqB\n", 1142 | "BQAAMIjAAgAAGERgAQAADCKwAAAABhFYAAAAgxw9rweuqnck+Z4kd3b39mnbk5Jcl+RpSXYneXF3\n", 1143 | "3z3ddkWSS5Pcn+RV3X3TtH1Hkl9N8rgkv9/dr57XmAEAAI7EPI9gvTPJ+Ydse12Sm7v77CTvn9ZT\n", 1144 | "VeckuSjJOdN9rqqqbdN93pLksu4+K8lZVXXoYwIAAGwIcwus7v5gkv2HbL4gydXT8tVJXjQtX5jk\n", 1145 | "2u6+r7t3J7k1yXOq6uQkx3f3LdN+71pzHwAAgA1l0e/BOrG7903L+5KcOC0/NcmeNfvtSXLKg2zf\n", 1146 | "O20HAADYcOb2HqyH092rVbU6j8deWVmZy+MCAABbx44dO7Y9/F5fm0UH1r6qOqm775hO/7tz2r43\n", 1147 | "yWlr9js1syNXe6fltdv3rueJduzYMWC4PFIrKyvmYAMwDxuDeVg+c7AxmIeNwTwsnznYGFZWVuby\n", 1148 | "uIs+RfDGJJdMy5ckuWHN9our6piqOiPJWUlu6e47kny+qp4zXfTiZWvuAwAAsKHM8zLt1yb59iRP\n", 1149 | "rqrbk/xkkjckub6qLst0mfYk6e5dVXV9kl1JDiS5vLsPnuZ3eWaXaT82s8u0/+G8xgwAAHAk5hZY\n", 1150 | "3f2Sh7jpvIfY/8okVz7I9pUk2wcODQAAYC4WfYogAADAliWwAAAABhFYAAAAgwgsAACAQQQWAADA\n", 1151 | "IAILAABgEIEFAAAwiMACAAAYRGABAAAMIrAAAAAGEVgAAACDCCwAAIBBBBYAAMAgAgsAAGAQgQUA\n", 1152 | "ADCIwAIAABhEYAEAAAwisAAAAAYRWAAAAIMILAAAgEEEFgAAwCACCwAAYBCBBQAAMIjAAgAAGERg\n", 1153 | "AQAADCKwAAAABhFYAAAAgwgsAACAQQQWAADAIAILAABgEIEFAAAwiMACAAAY5OhlD2BeXvmff+kR\n", 1154 | "3/fvv/T5/NcfuzQnnXTSwBEBAABb3ZYNrN1/f9ojvu+X7r49995778DRAAAAjwZOEQQAABhEYAEA\n", 1155 | "AAwisAAAAAYRWAAAAIMILAAAgEEEFgAAwCACCwAAYBCBBQAAMIjAAgAAGERgAQAADCKwAAAABhFY\n", 1156 | "AAAAgwgsAACAQQQWAADAIAILAABgEIEFAAAwiMACAAAYRGABAAAMIrAAAAAGEVgAAACDCCwAAIBB\n", 1157 | "BBYAAMAgAgsAAGAQgQUAADCIwAIAABhEYAEAAAwisAAAAAYRWAAAAIMILAAAgEEEFgAAwCACCwAA\n", 1158 | "YBCBBQAAMIjAAgAAGERgAQAADCKwAAAABhFYAAAAgwgsAACAQQQWAADAIAILAABgEIEFAAAwiMAC\n", 1159 | "AAAYRGABAAAMIrAAAAAGEVgAAACDCCwAAIBBBBYAAMAgRy/jSavqiiQvTfJAkp1JfijJ45Ncl+Rp\n", 1160 | "SXYneXF3371m/0uT3J/kVd190xKGDQAAcFgLP4JVVacneXmSZ3f39iRHJbk4yeuS3NzdZyd5/7Se\n", 1161 | "qjonyUVJzklyfpKrqsqRNwAAYMNZRqh8Psl9SY6rqqOTHJfkb5JckOTqaZ+rk7xoWr4wybXdfV93\n", 1162 | "705ya5JzFzpiAACAdVh4YHX3XUnelOSvMwuru7v75iQndve+abd9SU6clp+aZM+ah9iT5JQFDRcA\n", 1163 | "AGDdlnGK4DckeU2S0zOLpydU1UvX7tPdq0lWD/Mwh7sNAABgKZZxkYtvTvIn3f25JKmq9yT5liR3\n", 1164 | "VNVJ3X1HVZ2c5M5p/71JTltz/1OnbXOzurqanTt3Zv/+/fN8mi1vZWVl2UMg5mGjMA/LZw42BvOw\n", 1165 | "MZiH5TMHW9cyAuuTSX6iqo5N8uUk5yW5JcmXklyS5I3TnzdM+9+Y5Deq6ucyOzXwrGn/udm2bVu2\n", 1166 | "b9+eM888c55Ps6WtrKxkx44dyx7Go5552BjMw/KZg43BPGwM5mH5zMHGMK/IXcZ7sD6W5F1JPpzk\n", 1167 | "L6bNb03yhiTPr6q/SvJd03q6e1eS65PsSvIHSS6fTiEEAADYUJbyOVjd/TNJfuaQzXdldjTrwfa/\n", 1168 | "MsmV8x4XAADAkfB5UgAAAIMILAAAgEEEFgAAwCACCwAAYBCBBQAAMIjAAgAAGERgAQAADCKwAAAA\n", 1169 | "BhFYAAAAgwgsAACAQQQWAADAIAILAABgEIEFAAAwiMACAAAYRGABAAAMIrAAAAAGEVgAAACDCCwA\n", 1170 | "AIBBBBYAAMAgAgsAAGAQgQUAADCIwAIAABhEYAEAAAwisAAAAAYRWAAAAIMILAAAgEEEFgAAwCAC\n", 1171 | "CwAAYBCBBQAAMIjAAgAAGERgAQAADCKwAAAABhFYAAAAgwgsAACAQQQWAADAIAILAABgEIEFAAAw\n", 1172 | "iMACAAAYRGABAAAMIrAAAAAGEVgAAACDCCwAAIBBBBYAAMAgAgsAAGAQgQUAADCIwAIAABhEYAEA\n", 1173 | "AAwisAAAAAYRWAAAAIMILAAAgEEEFgAAwCACCwAAYBCBBQAAMIjAAgAAGERgAQAADCKwAAAABhFY\n", 1174 | "AAAAgwgsAACAQQQWAADAIAILAABgEIEFAAAwiMACAAAYRGABAAAMIrAAAAAGEVgAAACDCCwAAIBB\n", 1175 | "BBYAAMAgAgsAAGAQgQUAADCIwAIAABhEYAEAAAwisAAAAAYRWAAAAIMILAAAgEEEFgAAwCACCwAA\n", 1176 | "YBCBBQAAMIjAAgAAGERgAQAADCKwAAAABhFYAAAAgxy9jCetqicmeVuSZyRZTfJDST6V5LokT0uy\n", 1177 | "O8mLu/vuaf8rklya5P4kr+rum5YwbAAAgMNa1hGsX0jy+9399CTPTPLJJK9LcnN3n53k/dN6quqc\n", 1178 | "JBclOSfJ+UmuqipH3gAAgA1n4aFSVSckeV53vyNJuvtAd9+T5IIkV0+7XZ3kRdPyhUmu7e77unt3\n", 1179 | "kluTnLvYUQMAADy8ZZwieEaSv6uqdyb5l0lWkrwmyYndvW/aZ1+SE6flpyb50zX335PklAWNFQAA\n", 1180 | "YN2WEVhHJ3l2kh/u7g9V1ZsznQ54UHevVtXqYR7jcLcdsdXV1ezcuTP79++f59NseSsrK8seAjEP\n", 1181 | "G4V5WD5zsDGYh43BPCyfOdi6lhFYe5Ls6e4PTevvTnJFkjuq6qTuvqOqTk5y53T73iSnrbn/qdO2\n", 1182 | "udm2bVu2b9+eM888c55Ps6WtrKxkx44dyx7Go5552BjMw/KZg43BPGwM5mH5zMHGMK/IXfh7sLr7\n", 1183 | "jiS3V9XZ06bzknw8ye8muWTadkmSG6blG5NcXFXHVNUZSc5KcssChwwAALAuS7lMe5JXJvn1qjom\n", 1184 | "yaczu0z7UUmur6rLMl2mPUm6e1dVXZ9kV5IDSS7v7rmeIggAAPBILCWwuvtjSf7Vg9x03kPsf2WS\n", 1185 | "K+c6KAAAgCPk86QAAAAGEVgAAACDCCwAAIBBBBYAAMAgAgsAAGAQgQUAADCIwAIAABhEYAEAAAwi\n", 1186 | "sAAAAAYRWAAAAIMILAAAgEEEFgAAwCACCwAAYBCBBQAAMIjAAgAAGERgAQAADCKwAAAABhFYAAAA\n", 1187 | "gwgsAACAQQQWAADAIAILAABgEIEFAAAwiMACAAAY5OiH26GqTkzypiRP6+7nVdUzk3xrd//y3EcH\n", 1188 | "AACwiaznCNavJPk/SZ44rXeSV8xtRAAAAJvUegLrlO5+S5IDSdLd/5DkgbmOCgAAYBNaT2AdqKpt\n", 1189 | "B1eq6omH2xkAAODRaj2B9Z4kv5zkn1XVDya5Ock75zkoAACAzehhA6u735jkg0lWkrwgyS9095vn\n", 1190 | "PTAAAIDN5mGvIpgk3f1rSX5tzmMBAADY1B72CFZVnV1Vf1xVu6f1Z1fVT815XAAAAJvOet6D9ZYk\n", 1191 | "/y3J3dP6x5K8eG4jAgAA2KTWE1gndPcfJFlNku6+P8lX5joqAACATWi9l2k/5uBKVZ2S5P75DQkA\n", 1192 | "AGBzWu8pgu9J8uSq+i9J/jjJm+Y6KgAAgE3oYa8i2N1XV9VnkrwwybFJfqC7Pzj3kQEAAGwyhw2s\n", 1193 | "qjo6yS3d/ezMPgsLAACAh3DYUwS7+0CSL1bVsQsaDwAAwKa1ng8a/qskH6iqdyf50rRttbuvmt+w\n", 1194 | "AAAANp/1BNbRSXYlefqcxwIAALCpreciFz+4gHEAAABseg8bWFX1ikwfMrzGPZld/OJTcxkVAADA\n", 1195 | "JrSez8E6P8lPJzkvyfOTXJnkkiR/VFWXzXFsAAAAm8p6AuuBJNu7+z90979Psj3JPyQ5N8l/mufg\n", 1196 | "AAAANpP1BNY3dPdfH1zp7tuTnNHdf5vkvrmNDAAAYJNZz1UE91XV65O8M8m2zE4PvLOqjso/fW8W\n", 1197 | "AADAo9Z6jmD9QJIdSf4yyc4k3zxt+7rpTwAAALK+y7TvTfJ9D3HzzrHDAQAA2LzWc5n2xye5IsmZ\n", 1198 | "3f39VfWNSb6xu2+Y++gAAAA2kfWcIviWzE4H/KZpfW+Sn5rXgAAAADar9QTWM7v7xzK7NHu6+wuZ\n", 1199 | "XewCAACANdYTWP+wdqWqHrfO+wEAADyqrCeU/ndV/XiSx1XVdyT5rSTvneuoAAAANqH1BNbrpz8/\n", 1200 | "n+RnkvxZvAcLAADgnzjsVQSr6twkP5rkGdOmv0zyvu4+MO+BAQAAbDYPeQSrqr4lyfuSfDrJjyf5\n", 1201 | "iSSfSXJTVT13McMDAADYPA53BOvHklza3b+zZtt7qupPk7wuyYvmOjIAAIBN5nDvwXrGIXGVJOnu\n", 1202 | "9+YfTxkEAABgcrjA+tIjvA0AAOBR6XCnCD62qs55kO3bkjx2TuMBAADYtA4XWMcm+b1FDQQAAGCz\n", 1203 | "e8jA6u7TFzgOAACATW89HzQMAADAOggsAACAQQQWAADAIAILAABgEIEFAAAwiMACAAAYRGABAAAM\n", 1204 | "IrAAAAAGEVgAAACDCCwAAIBBBBYAAMAgAgsAAGAQgQUAADCIwAIAABhEYAEAAAwisAAAAAYRWAAA\n", 1205 | "AIMILAAAgEGOXtYTV9VRST6cZE93v7CqnpTkuiRPS7I7yYu7++5p3yuSXJrk/iSv6u6bljNqAACA\n", 1206 | "h7bMI1ivTrIryeq0/rokN3f32UneP62nqs5JclGSc5Kcn+SqqnLkDQAA2HCWEipVdWqSFyR5W5Jt\n", 1207 | "0+YLklw9LV+d5EXT8oVJru3u+7p7d5Jbk5y7uNECAACsz7KOBP18ktcmeWDNthO7e9+0vC/JidPy\n", 1208 | "U5PsWbPfniSnzH2EAAAAX6OFvwerqr43yZ3d/dGq+o4H26e7V6tq9cFumxzutiO2urqanTt3Zv/+\n", 1209 | "/fN8mi1vZWVl2UMg5mGjMA/LZw42BvOwMZiH5TMHW9cyLnLxrUkuqKoXJHlckn9WVdck2VdVJ3X3\n", 1210 | "HVV1cpI7p/33Jjltzf1PnbbNzbZt27J9+/aceeaZ83yaLW1lZSU7duxY9jAe9czDxmAels8cbAzm\n", 1211 | "YWMwD8tnDjaGeUXuwk8R7O7Xd/dp3X1GkouT/FF3vyzJjUkumXa7JMkN0/KNSS6uqmOq6owkZyW5\n", 1212 | "ZdHjBgAAeDgb4Wp8B0/3e0OS51fVXyX5rmk93b0ryfWZXXHwD5Jc3t1zPUUQAADgkVja52AlSXd/\n", 1213 | "IMkHpuW7kpz3EPtdmeTKBQ4NAADga7YRjmABAABsCQILAABgEIEFAAAwiMACAAAYRGABAAAMIrAA\n", 1214 | "AAAGEVgAAACDCCwAAIBBBBYAAMAgAgsAAGAQgQUAADCIwAIAABhEYAEAAAwisAAAAAYRWAAAAIMI\n", 1215 | "LAAAgEEEFgAAwCACCwAAYBCBBQAAMIjAAgAAGERgAQAADCKwAAAABhFYAAAAgwgsAACAQQQWAADA\n", 1216 | "IAILAABgEIEFAAAwiMACAAAYRGABAAAMIrAAAAAGEVgAAACDCCwAAIBBBBYAAMAgAgsAAGAQgQUA\n", 1217 | "ADCIwAIAABhEYAEAAAwisAAAAAYRWAAAAIMILAAAgEEEFgAAwCACCwAAYBCBBQAAMIjAAgAAGERg\n", 1218 | "AQAADCKwAAAABhFYAAAAgwgsAACAQQQWAADAIAILAABgEIEFAAAwiMACAAAYRGABAAAMIrAAAAAG\n", 1219 | "EVgAAACDCCwAAIBBBBYAAMAgAgsAAGAQgQUAADCIwAIAABhEYAEAAAwisAAAAAYRWAAAAIMILAAA\n", 1220 | "gEEEFgAAwCACCwAAYBCBBQAAMIjAAgAAGERgAQAADCKwAAAABhFYAAAAgwgsAACAQQQWAADAIAIL\n", 1221 | "AABgEIEFAAAwiMACAAAYRGABAAAMIrAAAAAGEVgAAACDCCwAAIBBjl70E1bVaUneleQpSVaTvLW7\n", 1222 | "f7GqnpTkuiRPS7I7yYu7++7pPlckuTTJ/Ule1d03LXrcAAAAD2cZR7DuS/Ij3f2MJM9N8oqqenqS\n", 1223 | "1yW5ubvPTvL+aT1VdU6Si5Kck+T8JFdVlSNvAADAhrPwUOnuO7r7z6flLyb5RJJTklyQ5Oppt6uT\n", 1224 | "vGhavjDJtd19X3fvTnJrknMXOmgAAIB1WOqRoKo6PcmzkvxZkhO7e990074kJ07LT02yZ83d9mQW\n", 1225 | "ZAAAABvK0gKrqp6Q5LeTvLq7v7D2tu5ezez9WQ/lcLcBAAAsxcIvcpEkVfV1mcXVNd19w7R5X1Wd\n", 1226 | "1N13VNXJSe6ctu9Nctqau586bZub1dXV7Ny5M/v375/n02x5Kysryx4CMQ8bhXlYPnOwMZiHjcE8\n", 1227 | "LJ852LqWcRXBbUnenmRXd795zU03JrkkyRunP29Ys/03qurnMjs18Kwkt8xzjNu2bcv27dtz5pln\n", 1228 | "zvNptrSVlZXs2LFj2cN41DMPG4N5WD5zsDGYh43BPCyfOdgY5hW5yziC9W1JXprkL6rqo9O2K5K8\n", 1229 | "Icn1VXVZpsu0J0l376qq65PsSnIgyeXTKYQAAAAbysIDq7v/OA/93q/zHuI+Vya5cm6DAgAAGMDn\n", 1230 | "SQEAAAwisAAAAAYRWAAAAIMILAAAgEEEFgAAwCACCwAAYBCBBQAAMIjAAgAAGERgAQAADCKwAAAA\n", 1231 | "BhFYAAAAgwgsAACAQQQWAADAIAILAABgEIEFAAAwiMACAAAYRGABAAAMIrAAAAAGEVgAAACDCCwA\n", 1232 | "AIBBBBYAAMAgAgsAAGAQgQUAADCIwAIAABhEYAEAAAwisAAAAAYRWAAAAIMILAAAgEEEFgAAwCAC\n", 1233 | "CwAAYBCBBQAAMIjAAgAAGERgAQAADCKwAAAABhFYAAAAgwgsAACAQQQWAADAIAILAABgEIEFAAAw\n", 1234 | "iMACAAAYRGABAAAMIrAAAAAGEVgAAACDCCwAAIBBBBYAAMAgAgsAAGAQgQUAADCIwAIAABhEYAEA\n", 1235 | "AAwisAAAAAYRWAAAAIMILAAAgEEEFgAAwCACCwAAYBCBBQAAMIjAAgAAGERgAQAADCKwAAAABhFY\n", 1236 | "AAAAgwgsAACAQQQWAADAIAILAABgEIEFAAAwiMACAAAYRGABAAAMcvSyB7ARPXD/gdx22205cODA\n", 1237 | "ET3O6aefnmOOOWbQqAAAgI1OYD2IL3/xrrz+qg/muBOe8ogf49577sw1P/39OfvssweODAAA2MgE\n", 1238 | "1kM47oSn5Alff8qyhwEAAGwi3oMFAAAwiMACAAAYRGABAAAMIrAAAAAGEVgAAACDCCwAAIBBBBYA\n", 1239 | "AMAgAgsAAGAQHzQ8Jw/cfyC33XbbET/O6aefnmOOOWbAiAAAgHkTWHPy5S9+Lj/51v+b40749CN+\n", 1240 | "jHvvuTPX/PT35+yzzx44MgAAYF4E1hwdd8JT8oSvP2XZwwAAABbEe7AAAAAGEVgAAACDbJpTBKvq\n", 1241 | "/CRvTnJUkrd19xuXPKS5G3GhjK985StJMuRCGS64AQAAh7cpAquqjkryS0nOS7I3yYeq6sbu/sRy\n", 1242 | "RzZfIy6U8bk9n8ixx//zHHfCU45oLBvlghtf+cpXsnv37iN+HLEIAMA8bIrASnJuklu7e3eSVNVv\n", 1243 | "JrkwyZYOrOTIL5Rx7z37hlxs42s9mvbZz342xx9//FdtG3E07bbbbpui85EH41aKxYd7TR9sHh7J\n", 1244 | "46zXkYargP5qo16PjTK/bG3r+Xpdz88kX2dsFkfyM3rt94Kv+a1nswTWKUluX7O+J8lzDneHbfd8\n", 1245 | "/BE/2WPuvT33bjuyt6f9/RfuSrJtSzxGkuz/20/ltT/7yTzuCU/6Gu71ka9au2ffZ/LYxz/xa3yM\n", 1246 | "r3bPvs/kiScfeRiN+IyyEWN47c++94hfj4d/TT9ymNu+lsc5vC9/8a789x+9MGecccYjfowRr8mI\n", 1247 | "cYy23tA91IjXI9k487tMj3QOWL/1f70+9M+kzf51tln4fhjjyH9GfyRf/uJdeff/eM3Sf+nLWNtW\n", 1248 | "V1eXPYaHVVXfl+T87n75tP7SJM/p7lc+2P4rKysb/y8FAAAs1Y4dO478SMQhNssRrL1JTluzflpm\n", 1249 | "R7Ee1DxeKAAAgIezWQLrw0nOqqrTk/xNkouSvGSpIwIAADjEpvgcrO4+kOSHk7wvya4k1231KwgC\n", 1250 | "AACbz6Z4DxYAAMBmsCmOYAEAAGwGAgsAAGAQgQUAADDIZrmK4LpU1flJ3pzkqCRv6+43LnlIm1pV\n", 1251 | "vSPJ9yS5s7u3T9uelOS6JE9LsjvJi7v77um2K5JcmuT+JK/q7pum7TuS/GqSxyX5/e5+9bT9sUne\n", 1252 | "leTZST6X5KLu/uyi/n6bRVWdltnr9JQkq0ne2t2/aC4Wq6oel+QDSR6b5Jgk7+3uK8zD4lXVUZld\n", 1253 | "XXZPd7/QHCxeVe1O8vnMXtf7uvtc87B4VfXEJG9L8ozM/n34oSSfinlYiKqqJL+5ZtOZSX4iya/F\n", 1254 | "HCzU9Lq+NMkDSXZm9r3w+CxpHrbMEazpH9xfSnJ+knOSvKSqnr7cUW1678zs9VzrdUlu7u6zk7x/\n", 1255 | "Wk9VnZPZ5fPPme5zVVUd/DyytyS5rLvPyuxy+wcf87Ikn5u2/3wSQfzg7kvyI939jCTPTfKK6Wvb\n", 1256 | "XCxQd385yXd29zcleWaS76yqfx3zsAyvzuyKsgev0mQOFm81yXd097O6+9xpm3lYvF/I7D+BT8/s\n", 1257 | "59InYx4Wpmee1d3PSrIjyb1JfifmYKGmj3F6eZJnTwcEjkpycZY4D1smsJKcm+TW7t7d3fdl9huF\n", 1258 | "C5c8pk2tuz+YZP8hmy9IcvW0fHWSF03LFya5trvv6+7dSW5N8pyqOjnJ8d19y7Tfu9bcZ+1j/XaS\n", 1259 | "fzv8L7EFdPcd3f3n0/IXk3wiySkxFwvX3fdOi8dk9gN8f8zDQlXVqUlekNlv7Q/+g2gOlmPbIevm\n", 1260 | "YYGq6oQkz+vudySzj7Tp7ntiHpblvMz+H3p7zMGifT6zX0YfV1VHJzkus8/NXdo8bKXAOiXJ7WvW\n", 1261 | "90zbGOvE7t43Le9LcuK0/NTMXvODDr7+h27fm3+cl/8/Z9Nnnd0znWLCQ5h+S/OsJH8Wc7FwVfWY\n", 1262 | "qvrzzF7v/9XdH495WLSfT/LazE4DOcgcLN5qkv9ZVR+uqpdP28zDYp2R5O+q6p1V9ZGq+pWqenzM\n", 1263 | "w7JcnOTaadkcLFB335XkTUn+OrOwuru7b84S52ErBZYP9Fqw7l6N131hquoJmf3W5NXd/YW1t5mL\n", 1264 | "xejuB6ZTBE9N8m+q6jsPud08zFFVfW9m7wn9aP7p0ZMk5mCBvm06Leq7Mztt+XlrbzQPC3F0Zu8H\n", 1265 | "uaq7n53kS5lOgTrIPCxGVR2T5IVJfuvQ28zB/FXVNyR5TZLTM4ukJ1TVS9fus+h52EqBtTfJaWvW\n", 1266 | "T8tXVyhj7Kuqk5JkOpR657T90Nf/1Mxe/73T8qHbD97nX0yPdXSSE6bfQnCIqvq6zOLqmu6+Ydps\n", 1267 | "LpZkOg3n9zI75948LM63Jrmgqm7L7DfF31VV18QcLFx3/+30599l9p6Tc2MeFm1PZhd6+dC0/u7M\n", 1268 | "gusO87Bw351kZfp+SHwvLNo3J/mT7v7cdHTpPUm+JUv8XthKgfXhzN6Mdvr0m4SLkty45DFtRTcm\n", 1269 | "uWRaviTJDWu2X1xVx1TVGUnOSnJLd9+R5PNV9ZzpDYQvS/LeB3ms/5jZGxA5xPS6vT3Jru5+85qb\n", 1270 | "zMUCVdWTpyt2paqOTfL8JB+NeViY7n59d5/W3WdkdjrOH3X3y2IOFqqqjquq46flxyf5d5ldtcs8\n", 1271 | "LND0+t1eVWdPm85L8vEkvxvzsGgvyT+eHpj4Xli0TyZ5blUdO71+52V2IaSlfS9smcu0d/eBqvrh\n", 1272 | "JO/L7M3nb+/uTyx5WJtaVV2b5NuTPLmqbk/yk0nekOT6qros0yUvk6S7d1XV9Zl9QR9Icvl0ODZJ\n", 1273 | "Ls/skpfHZna1oz+ctr89yTVV9anMLnl58SL+XpvQt2V26dG/qKqPTtuuiLlYtJOTXF1Vj8nsl1PX\n", 1274 | "dPf7pzkxD8tx8PX0vbBYJyb5napKZv+P+PXuvqmqPhzzsGivTPLr0y+WP53ZpamPinlYmOmXDOdl\n", 1275 | "dhW7g/xMWqDu/lhVvSuzgy0PJPlIkrcmOT5Lmodtq6tOCwUAABhhK50iCAAAsFQCCwAAYBCBBQAA\n", 1276 | "MIjAAgAAGERgAQAADCKwAAAABhFYAAAAg/w/VsBKp2oQeIMAAAAASUVORK5CYII=\n" 1277 | ], 1278 | "text/plain": [ 1279 | "" 1280 | ] 1281 | }, 1282 | "metadata": {}, 1283 | "output_type": "display_data" 1284 | } 1285 | ], 1286 | "source": [ 1287 | "ETFs.Market_Cap.plot(kind='hist',bins=40)" 1288 | ] 1289 | }, 1290 | { 1291 | "cell_type": "code", 1292 | "execution_count": 221, 1293 | "metadata": { 1294 | "collapsed": false 1295 | }, 1296 | "outputs": [ 1297 | { 1298 | "data": { 1299 | "text/plain": [ 1300 | "Equity 725\n", 1301 | "Bond 106\n", 1302 | "Commodity 100\n", 1303 | "Currency 35\n", 1304 | "Real Estate 28\n", 1305 | "Multi-Asset 26\n", 1306 | "dtype: int64" 1307 | ] 1308 | }, 1309 | "execution_count": 221, 1310 | "metadata": {}, 1311 | "output_type": "execute_result" 1312 | } 1313 | ], 1314 | "source": [ 1315 | "ETFs.Asset.value_counts()" 1316 | ] 1317 | }, 1318 | { 1319 | "cell_type": "code", 1320 | "execution_count": 220, 1321 | "metadata": { 1322 | "collapsed": false 1323 | }, 1324 | "outputs": [ 1325 | { 1326 | "data": { 1327 | "text/plain": [ 1328 | "Large-Cap 205\n", 1329 | "Small-Cap 79\n", 1330 | "Mid-Cap 53\n", 1331 | "Multi-Cap 24\n", 1332 | "dtype: int64" 1333 | ] 1334 | }, 1335 | "execution_count": 220, 1336 | "metadata": {}, 1337 | "output_type": "execute_result" 1338 | } 1339 | ], 1340 | "source": [ 1341 | "ETFs.Size.value_counts()" 1342 | ] 1343 | }, 1344 | { 1345 | "cell_type": "code", 1346 | "execution_count": 219, 1347 | "metadata": { 1348 | "collapsed": false 1349 | }, 1350 | "outputs": [ 1351 | { 1352 | "data": { 1353 | "text/plain": [ 1354 | "Blend 177\n", 1355 | "Value 85\n", 1356 | "Growth 59\n", 1357 | "dtype: int64" 1358 | ] 1359 | }, 1360 | "execution_count": 219, 1361 | "metadata": {}, 1362 | "output_type": "execute_result" 1363 | } 1364 | ], 1365 | "source": [ 1366 | "ETFs.Style.value_counts()" 1367 | ] 1368 | }, 1369 | { 1370 | "cell_type": "code", 1371 | "execution_count": 209, 1372 | "metadata": { 1373 | "collapsed": false 1374 | }, 1375 | "outputs": [ 1376 | { 1377 | "data": { 1378 | "text/plain": [ 1379 | "" 1380 | ] 1381 | }, 1382 | "execution_count": 209, 1383 | "metadata": {}, 1384 | "output_type": "execute_result" 1385 | }, 1386 | { 1387 | "data": { 1388 | "image/png": [ 1389 | "iVBORw0KGgoAAAANSUhEUgAAA0YAAAHiCAYAAADMNtzJAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\n", 1390 | "AAALEgAACxIB0t1+/AAAHdZJREFUeJzt3X+w5Xdd3/FXSFwg5rKANEt+7CSpk/uWsCKyGq0/RqCh\n", 1391 | "TVETnE4JMmIwTP8QLNSZMmahRZ2OAWytaB1wKMhELJHUHyEGKYk4InQQ5ArKuvDG4N5bNrIbBRIX\n", 1392 | "U8yv7R/3pF0he/duds8999zP4/HPfs853++97/CZvdznfr/ne047cuRIAAAARvaoWQ8AAAAwa8II\n", 1393 | "AAAYnjACAACGJ4wAAIDhCSMAAGB4wggAABjeGdP+BlX1+CRvSfLUJEeS/EiSv0jyziQXJFlO8vzu\n", 1394 | "vmuy/54k1yR5IMnLu/vWac8IAACMbSPOGP1Ckt/t7qckeVqSTyW5Nslt3b2Y5H2Tx6mqS5JcleSS\n", 1395 | "JJcneWNVOasFAABM1VSjo6q2J/nu7v6VJOnu+7v77iRXJLl+stv1SZ432b4yyQ3dfV93Lye5Pcml\n", 1396 | "05wRAABg2pfSXZTkr6vqbUm+KclSkn+bZEd3H5rscyjJjsn2uUn+6KjjDyQ5b8ozAgAAg5t2GJ2R\n", 1397 | "5BlJfqy7/7iq3pDJZXMP6e4jVXVkja9xzNeWlpbWOg4AACC7d+8+7Xj7TDuMDiQ50N1/PHn8G0n2\n", 1398 | "JDlYVU/u7oNVdU6SOyev35Fk51HHnz957ph27959ikdmoywtLVm/OWXt5pv1m2/Wb35Zu/lm/ebX\n", 1399 | "0tLSuvab6nuMuvtgks9W1eLkqcuS/HmS30ly9eS5q5PcNNm+OckLqmpbVV2U5OIkH5nmjAAAAFO/\n", 1400 | "XXeSf5Pkv1fVtiSfyertuk9PcmNVvSST23UnSXfvq6obk+xLcn+Sl3a3y+UAAICpmnoYdfefJvnW\n", 1401 | "h3npsmPsf12S66Y6FAAAwFF8RhAAADA8YQQAAAxPGAEAAMMTRgAAwPCEEQAAMDxhBAAADE8YAQAA\n", 1402 | "wxNGAADA8IQRAAAwPGEEAAAMTxgBAADDE0YAAMDwhBEAADA8YQQAAAxPGAEAAMMTRgAAwPCEEQAA\n", 1403 | "MDxhBAAADE8YAQAAwxNGAADA8IQRAAAwPGEEAAAMTxgBAADDE0YAAMDwhBEAADA8YQQAAAxPGAEA\n", 1404 | "AMMTRgAAwPCEEQAAMDxhBAAADE8YAQAAwxNGAADA8IQRAAAwPGEEAAAMTxgBAADDE0YAAMDwhBEA\n", 1405 | "ADA8YQQAAAxPGAEAAMMTRgAAwPCEEQAAMDxhBAAADE8YAQAAwxNGAADA8IQRAAAwPGEEAAAMTxgB\n", 1406 | "AADDE0YAAMDwhBEAADA8YQQAAAxPGAEAAMMTRgAAwPCEEQAAMDxhBAAADE8YAQAAwxNGAADA8IQR\n", 1407 | "AAAwPGEEAAAMTxgBAADDO2PWAwDAqXLvvfdmeXl51mNM1crKShYWFmY9xpouvPDCbNu2bdZjAJwQ\n", 1408 | "YQTAlrG8vJwX7XlHztx+9qxHma5bDs56gmO65+478/bXvjCLi4uzHgXghAgjALaUM7efnbOecN6s\n", 1409 | "xwBgzniPEQAAMDxhBAAADE8YAQAAwxNGAADA8KZ+84WqWk7yt0keSHJfd19aVU9M8s4kFyRZTvL8\n", 1410 | "7r5rsv+eJNdM9n95d9867RkBAICxbcQZoyNJntnd39zdl06euzbJbd29mOR9k8epqkuSXJXkkiSX\n", 1411 | "J3ljVTmrBQAATNVGRcdpX/H4iiTXT7avT/K8yfaVSW7o7vu6eznJ7UkuDQAAwBRt1Bmj36uqj1bV\n", 1412 | "v548t6O7D022DyXZMdk+N8mBo449kMSHUQAAAFO1ER/w+p3d/bmq+kdJbquqTx39Yncfqaojaxy/\n", 1413 | "1mtZWlo6FTMyI9Zvflm7+bZV129lZWXWI5Bk7969OXz48KzH2JS26t+9UVi/rW3qYdTdn5v8+ddV\n", 1414 | "9dtZvTTuUFU9ubsPVtU5Se6c7H5Hkp1HHX7+5Llj2r179xSmZiMsLS1Zvzll7ebbVl6/hYWF5JaD\n", 1415 | "sx5jeLt27cri4uKsx9h0tvLfvRFYv/m13qCd6qV0VXVmVS1Mtr82yT9L8okkNye5erLb1Ulummzf\n", 1416 | "nOQFVbWtqi5KcnGSj0xzRgAAgGm/x2hHkg9U1ceTfDjJLZPbb78uyXOq6tNJnj15nO7el+TGJPuS\n", 1417 | "vCfJS7t7zUvpAAAATtZUL6Xr7v1Jnv4wz38hyWXHOOa6JNdNcy4AAICj+YwgAABgeMIIAAAYnjAC\n", 1418 | "AACGJ4wAAIDhCSMAAGB4wggAABieMAIAAIYnjAAAgOEJIwAAYHjCCAAAGJ4wAgAAhieMAACA4Qkj\n", 1419 | "AABgeMIIAAAYnjACAACGJ4wAAIDhCSMAAGB4wggAABieMAIAAIYnjAAAgOEJIwAAYHjCCAAAGJ4w\n", 1420 | "AgAAhieMAACA4QkjAABgeMIIAAAYnjACAACGJ4wAAIDhCSMAAGB4wggAABieMAIAAIYnjAAAgOEJ\n", 1421 | "IwAAYHjCCAAAGJ4wAgAAhieMAACA4QkjAABgeMIIAAAYnjACAACGJ4wAAIDhCSMAAGB4wggAABie\n", 1422 | "MAIAAIYnjAAAgOEJIwAAYHjCCAAAGJ4wAgAAhieMAACA4QkjAABgeMIIAAAYnjACAACGJ4wAAIDh\n", 1423 | "CSMAAGB4wggAABieMAIAAIYnjAAAgOEJIwAAYHjCCAAAGJ4wAgAAhieMAACA4QkjAABgeMIIAAAY\n", 1424 | "njACAACGJ4wAAIDhCSMAAGB4Z0z7G1TV6Uk+muRAd39/VT0xyTuTXJBkOcnzu/uuyb57klyT5IEk\n", 1425 | "L+/uW6c9HwAAwEacMXpFkn1JjkweX5vktu5eTPK+yeNU1SVJrkpySZLLk7yxqpzRAgAApm6q4VFV\n", 1426 | "5yd5bpK3JDlt8vQVSa6fbF+f5HmT7SuT3NDd93X3cpLbk1w6zfkAAACS6Z8x+vkkr0zy4FHP7eju\n", 1427 | "Q5PtQ0l2TLbPTXLgqP0OJDlvyvMBAABM7z1GVfV9Se7s7o9V1TMfbp/uPlJVRx7utYm1XkuSLC0t\n", 1428 | "PcIJ2Qys3/yydvNtq67fysrKrEcgyd69e3P48OFZj7EpbdW/e6OwflvbNG++8B1Jrqiq5yZ5TJLH\n", 1429 | "VdXbkxyqqid398GqOifJnZP970iy86jjz588t6bdu3ef4rHZKEtLS9ZvTlm7+baV129hYSG55eCs\n", 1430 | "xxjerl27sri4OOsxNp2t/HdvBNZvfq03aKd2KV13v6q7d3b3RUlekOT3u/tFSW5OcvVkt6uT3DTZ\n", 1431 | "vjnJC6pqW1VdlOTiJB+Z1nwAAAAP2ci7vj10Wdzrkjynqj6d5NmTx+nufUluzOod7N6T5KXdfdxL\n", 1432 | "6QAAAE7W1D/HKEm6+/1J3j/Z/kKSy46x33VJrtuImQAAAB7ic4IAAIDhCSMAAGB4wggAABieMAIA\n", 1433 | "AIYnjAAAgOEJIwAAYHjCCAAAGJ4wAgAAhieMAACA4QkjAABgeMIIAAAYnjACAACGJ4wAAIDhCSMA\n", 1434 | "AGB4wggAABieMAIAAIYnjAAAgOEJIwAAYHjCCAAAGJ4wAgAAhieMAACA4QkjAABgeMIIAAAYnjAC\n", 1435 | "AACGJ4wAAIDhCSMAAGB4wggAABieMAIAAIYnjAAAgOEJIwAAYHjCCAAAGJ4wAgAAhieMAACA4Qkj\n", 1436 | "AABgeMIIAAAYnjACAACGJ4wAAIDhnTHrAQC2gnvvvTfLy8uzHmNdVlZWsrCwMOsxpmL//v2zHgGA\n", 1437 | "OSWMAE6B5eXlvGjPO3Lm9rNnPcr63HJw1hNMxecPfDJfd/5TZj0GAHNIGAGcImduPztnPeG8WY8x\n", 1438 | "tHvuPjTrEQCYU95jBAAADE8YAQAAwxNGAADA8IQRAAAwPGEEAAAMTxgBAADDE0YAAMDwhBEAADA8\n", 1439 | "YQQAAAxPGAEAAMMTRgAAwPCEEQAAMDxhBAAADO+M4+1QVTuS/FySC7r7u6vqaUm+o7t/eerTAQAA\n", 1440 | "bID1nDH6b0n+V5LHTx53kpdNbSIAAIANtp4wOq+735Tk/iTp7r9P8uBUpwIAANhA6wmj+6vqtIce\n", 1441 | "VNXj19oZAABg3qwnjH4ryS8neVxVvTjJbUneNs2hAAAANtJxw6i7X5/kA0mWkjw3yS909xumPRgA\n", 1442 | "AMBGOe5d6ZKku38tya9NeRYAAICZOO4Zo6parKoPVtXy5PEzquqnpjwXAADAhlnPe4zelORnktw1\n", 1443 | "efynSZ4/tYkAAAA22HrCaHt3vyfJkSTp7geS3DvVqQAAADbQem/Xve2hB1V1XpIHpjcSAADAxlrv\n", 1444 | "pXS/leRJVfXTST6Y5OemOhUAAMAGOu5d6br7+qr6yyTfn+SxSX64uz9wvOOq6jFJ3p/k0Um2JXlX\n", 1445 | "d++pqicmeWeSC5IsJ3l+d981OWZPkmuyekbq5d196yP6rwIAADgBa4ZRVZ2R5CPd/YysfpbRunX3\n", 1446 | "l6vqWd19z+TrfLCqvivJFUlu6+6fraqfSHJtkmur6pIkVyW5JMl5SX6vqha7+8FH8N8FAACwbmte\n", 1447 | "Stfd9yf5UlU99pF88e6+Z7K5LcnpSb6Y1TC6fvL89UmeN9m+MskN3X1fdy8nuT3JpY/k+wIAAJyI\n", 1448 | "9XzA66eTvL+qfiPJ302eO9LdbzzegVX1qCR/kuTrk7ypu/+8qnZ096HJLoeS7Jhsn5vkj446/EBW\n", 1449 | "zxwBAABM1XrC6Iwk+5I85US/+OQyuKdX1fYk762qZ33F60eq6sgaX2Kt1wAAAE6J9dx84cUn+026\n", 1450 | "++6qeneS3UkOVdWTu/tgVZ2T5M7Jbnck2XnUYedPnlvT0tLSyY7HDFm/+WXt/qGVlZVZjwCbxt69\n", 1451 | "e3P48OFZj7Ep+dk536zf1nbcMKqql+Wrz9zcndWbMvzFGsc9Kcn93X3X5D1Kz0ny00luTnJ1ktdP\n", 1452 | "/rxpcsjNSd5RVf8lq5fQXZzkI8ebb/fu3cfbhU1qaWnJ+s0pa/fVFhYWklsOznoM2BR27dqVxcXF\n", 1453 | "WY+x6fjZOd+s3/xab9Cu53OMLk/y2iSXZTVurstq0Px+Vb1kjePOmezz8SQfTvI73f2+JK9L8pyq\n", 1454 | "+nSSZ08ep7v3Jbkxq5ftvSfJS7vbpXQAAMDUrec9Rg8m+cbu/t9JUlU7k7wxq3eM+70kb324g7r7\n", 1455 | "E0me8TDPfyGrkfVwx1yX1fACAADYMOs5Y/T1D0VRknT3Z5Nc1N2fS3Lf1CYDAADYIOs5Y3Soql6V\n", 1456 | "5G1JTsvqZXR3VtXpcdc4AABgC1jPGaMfzurd5PYm+USSb5k89zWTPwEAAObaem7XfUeSf3mMlz9x\n", 1457 | "ascBAADYeOu5XffXJtmT5B939wur6huSfEN333ScQwEAAObCei6le1NWL5t7+uTxHUl+aloDAQAA\n", 1458 | "bLT1hNHTuvsnkvx9knT34azehAEAAGBLWE8Y/f3RD6rqMes8DgAAYC6sJ3D+sKpeneQxVfXMJP8j\n", 1459 | "ybumOhUAAMAGWk8YvWry598m+dkkH473GAEAAFvImnelq6pLk/y7JE+dPLU3yXu7+/5pDwYAALBR\n", 1460 | "jnnGqKr+SZL3JvlMklcn+Q9J/jLJrVX17RszHgAAwPStdcboJ5Jc092/fdRzv1VVf5Tk2iTPm+pk\n", 1461 | "AAAAG2St9xg99SuiKEnS3e/K/7+0DgAAYO6tFUZ/9whfAwAAmCtrXUr36Kq65GGePy3Jo6c0DwAA\n", 1462 | "wIZbK4wem+TdGzUIAADArBwzjLr7wg2cAwAAYGbW8wGvAAAAW5owAgAAhieMAACA4QkjAABgeMII\n", 1463 | "AAAYnjACAACGJ4wAAIDhCSMAAGB4wggAABieMAIAAIYnjAAAgOEJIwAAYHjCCAAAGJ4wAgAAhieM\n", 1464 | "AACA4QkjAABgeMIIAAAYnjACAACGJ4wAAIDhCSMAAGB4wggAABieMAIAAIYnjAAAgOEJIwAAYHjC\n", 1465 | "CAAAGJ4wAgAAhieMAACA4QkjAABgeMIIAAAYnjACAACGJ4wAAIDhCSMAAGB4wggAABieMAIAAIYn\n", 1466 | "jAAAgOEJIwAAYHjCCAAAGJ4wAgAAhieMAACA4QkjAABgeMIIAAAYnjACAACGJ4wAAIDhCSMAAGB4\n", 1467 | "wggAABieMAIAAIYnjAAAgOEJIwAAYHhnTPOLV9XOJL+a5OwkR5K8ubt/saqemOSdSS5Ispzk+d19\n", 1468 | "1+SYPUmuSfJAkpd3963TnBEAAGDaZ4zuS/Lj3f3UJN+e5GVV9ZQk1ya5rbsXk7xv8jhVdUmSq5Jc\n", 1469 | "kuTyJG+sKme1AACAqZpqdHT3we7++GT7S0k+meS8JFckuX6y2/VJnjfZvjLJDd19X3cvJ7k9yaXT\n", 1470 | "nBEAAGDDzsZU1YVJvjnJh5Ps6O5Dk5cOJdkx2T43yYGjDjuQ1ZACAACYmqm+x+ghVXVWkt9M8oru\n", 1471 | "PlxV/++17j5SVUfWOHyt17K0tHRqhmQmrN/8snb/0MrKyqxHgE1j7969OXz48KzH2JT87Jxv1m9r\n", 1472 | "m3oYVdXXZDWK3t7dN02ePlRVT+7ug1V1TpI7J8/fkWTnUYefP3numHbv3n2qR2aDLC0tWb85Ze2+\n", 1473 | "2sLCQnLLwVmPAZvCrl27sri4OOsxNh0/O+eb9Ztf6w3aqV5KV1WnJXlrkn3d/YajXro5ydWT7auT\n", 1474 | "3HTU8y+oqm1VdVGSi5N8ZJozAgAATPuM0Xcm+aEkf1ZVH5s8tyfJ65LcWFUvyeR23UnS3fuq6sYk\n", 1475 | "+5Lcn+Sl3b3mpXQAAAAna6ph1N0fzLHPSl12jGOuS3Ld1IYCAAD4Cj4jCAAAGJ4wAgAAhieMAACA\n", 1476 | "4QkjAABgeMIIAAAYnjACAACGJ4wAAIDhCSMAAGB4wggAABieMAIAAIYnjAAAgOEJIwAAYHjCCAAA\n", 1477 | "GJ4wAgAAhieMAACA4QkjAABgeMIIAAAYnjACAACGJ4wAAIDhCSMAAGB4wggAABieMAIAAIYnjAAA\n", 1478 | "gOEJIwAAYHjCCAAAGJ4wAgAAhieMAACA4QkjAABgeMIIAAAYnjACAACGJ4wAAIDhCSMAAGB4wggA\n", 1479 | "ABieMAIAAIYnjAAAgOEJIwAAYHjCCAAAGJ4wAgAAhieMAACA4QkjAABgeMIIAAAYnjACAACGJ4wA\n", 1480 | "AIDhCSMAAGB4wggAABieMAIAAIYnjAAAgOEJIwAAYHjCCAAAGJ4wAgAAhieMAACA4QkjAABgeMII\n", 1481 | "AAAYnjACAACGJ4wAAIDhCSMAAGB4wggAABieMAIAAIYnjAAAgOEJIwAAYHjCCAAAGJ4wAgAAhieM\n", 1482 | "AACA4QkjAABgeMIIAAAY3hnT/OJV9StJvjfJnd39jZPnnpjknUkuSLKc5PndfdfktT1JrknyQJKX\n", 1483 | "d/et05wPAAAgmf4Zo7clufwrnrs2yW3dvZjkfZPHqapLklyV5JLJMW+sKme0AACAqZtqeHT3B5J8\n", 1484 | "8SueviLJ9ZPt65M8b7J9ZZIbuvu+7l5OcnuSS6c5HwAAQDKb9xjt6O5Dk+1DSXZMts9NcuCo/Q4k\n", 1485 | "OW8jBwMAAMY01fcYHU93H6mqI2vsstZrSZKlpaVTOBEbzfrNL2v3D62srMx6BNg09u7dm8OHD896\n", 1486 | "jE3Jz875Zv22tlmE0aGqenJ3H6yqc5LcOXn+jiQ7j9rv/Mlza9q9e/cURmQjLC0tWb85Ze2+2sLC\n", 1487 | "QnLLwVmPAZvCrl27sri4OOsxNh0/O+eb9Ztf6w3aWVxKd3OSqyfbVye56ajnX1BV26rqoiQXJ/nI\n", 1488 | "DOYDAAAGM+3bdd+Q5HuSPKmqPpvkNUlel+TGqnpJJrfrTpLu3ldVNybZl+T+JC/t7uNeSgcAAHCy\n", 1489 | "phpG3f2Dx3jpsmPsf12S66Y3EQAAwFfzOUEAAMDwhBEAADA8YQQAAAxPGAEAAMMTRgAAwPCEEQAA\n", 1490 | "MDxhBAAADE8YAQAAwxNGAADA8IQRAAAwPGEEAAAMTxgBAADDE0YAAMDwhBEAADA8YQQAAAxPGAEA\n", 1491 | "AMMTRgAAwPCEEQAAMDxhBAAADE8YAQAAwxNGAADA8IQRAAAwPGEEAAAMTxgBAADDE0YAAMDwhBEA\n", 1492 | "ADA8YQQAAAxPGAEAAMMTRgAAwPDOmPUAAMDW8eAD92f//v2zHmNTWllZycLCwoZ9vwsvvDDbtm3b\n", 1493 | "sO8H804YAQCnzJe/9Pm85s0fypnbPzPrUTanWw5uyLe55+478/bXvjCLi4sb8v1gKxBGAMApdeb2\n", 1494 | "s3PWE86b9RgAJ8R7jAAAgOEJIwAAYHjCCAAAGJ4wAgAAhieMAACA4QkjAABgeMIIAAAYnjACAACG\n", 1495 | "J4wAAIDhCSMAAGB4wggAABieMAIAAIYnjAAAgOEJIwAAYHjCCAAAGJ4wAgAAhnfGrAcATs69996b\n", 1496 | "5eXlDf2eKysrWVhY2NDvudnt379/1iMAACdBGHFSTuaXcr9cnxr79+/Pa978oZy5/eyN/ca3HNzY\n", 1497 | "77fJff7AJ/N15z9l1mMAAI+QMOKkLC8v50V73vHIfyn3y/VJe+gX8rOecN6sRxnaPXcfmvUIAMBJ\n", 1498 | "EEactDO3n+2X8hnyCzkAwMlz8wUAAGB4wggAABieMAIAAIYnjAAAgOEJIwAAYHjCCAAAGJ4wAgAA\n", 1499 | "hieMAACA4QkjAABgeMIIAAAYnjACAACGJ4wAAIDhCSMAAGB4Z8x6AAAATq0HH7g/+/fvn/UYW8rK\n", 1500 | "ykoWFhZO+LgLL7ww27Ztm8JEnGqbLoyq6vIkb0hyepK3dPfrZzwSAMBc+fKXPp/XvPlDOXP7Z2Y9\n", 1501 | "ytZyy8ET2v2eu+/M21/7wiwuLk5pIE6lTRVGVXV6kl9KclmSO5L8cVXd3N2fPNYx//61b96o8XgY\n", 1502 | "f3NwJcl5sx4DAPgKZ24/O2c9wf9Hw3ptqjBKcmmS27t7OUmq6teTXJnkmGH0p3+zY2Mm42Hd81ed\n", 1503 | "nPhZZQCALc8ljfNls4XReUk+e9TjA0m+ba0DTrv7z6c6EGu7/+8O5ssPKqNZ+j+Hv5DktFmPMTzr\n", 1504 | "sDlYh9mzBpuDddgcvvi5v8gr//On8piznjjrUYb15S99IW973UvWte9mC6MjJ3rAT/7oP5/GHKyb\n", 1505 | "//1nb81/O2DDWIfNwTrMnjXYHKzD5mAd5slmC6M7kuw86vHOrJ41eli7d+/2TyEAAMBJ22xh9NEk\n", 1506 | "F1fVhUn+KslVSX5wphMBAABb3qb6gNfuvj/JjyV5b5J9Sd651h3pAAAAToXTjhw54bf1AAAAbCmb\n", 1507 | "6owRAADALAgjAABgeMIIAAAY3ma7K90Jq6r/mOSKrH4G0ueTvLi7P7v2UWwGVfWfknxfknuTfCbJ\n", 1508 | "j3T33bOdivWqqn+V5KeSfEOSb+3uP5ntRBxPVV2e5A1JTk/ylu5+/YxHYp2q6leSfG+SO7v7G2c9\n", 1509 | "DyemqnYm+dUkZ2f195U3d/cvznYq1qOqHpPk/UkenWRbknd1957ZTsWJqqrTs3r36wPd/f3H2m8r\n", 1510 | "nDH62e7+pu5+epKbkvzkrAdi3W5N8tTu/qYkn07iB818+USSH0jyh7MehOOb/J/CLyW5PMklSX6w\n", 1511 | "qp4y26k4AW/L6toxn+5L8uPd/dQk357kZf7+zYfu/nKSZ01+z3xakmdV1XfNeCxO3CuyesfrNe86\n", 1512 | "N/dh1N2Hj3p4VpK/mdUsnJjuvq27H5w8/HCS82c5Dyemuz/V3Z+e9Rys26VJbu/u5e6+L8mvJ7ly\n", 1513 | "xjOxTt39gSRfnPUcPDLdfbC7Pz7Z/lKSTyY5d7ZTsV7dfc9kc1tWz7h/YYbjcIKq6vwkz03yliSn\n", 1514 | "rbXv3F9KlyRV9TNJXpTknqz+Swzz55okN8x6CNjCzkty9GXGB5J824xmgWFNPsT+m7P6D4LMgap6\n", 1515 | "VJI/SfL1Sd7U3ftmPBIn5ueTvDLJ446341yEUVXdluTJD/PSq7r7d7r71UleXVXXZvU//kc2dECO\n", 1516 | "6XhrN9nn1Unu7e53bOhwHNd61o+54UPrYMaq6qwkv5HkFZMzR8yBydUtT6+q7UneW1XP7O4/mPFY\n", 1517 | "rENVfV9W35v5sap65vH2n4sw6u7nrHPXdyT53WnOwok53tpV1Yuzenrzn27IQJyQE/i7x+Z3R5Kd\n", 1518 | "Rz3emdWzRsAGqKqvSfKbSX6tu2+a9TycuO6+u6reneRbkvzBjMdhfb4jyRVV9dwkj0nyuKr61e7+\n", 1519 | "4Yfbee7fY1RVFx/18MokH5vVLJyYyR2yXpnkysmbG5lfa16zy6bw0SQXV9WFVbUtyVVJbp7xTDCE\n", 1520 | "qjotyVuT7OvuN8x6Htavqp5UVY+fbD82yXPid8250d2v6u6d3X1Rkhck+f1jRVEyJ2eMjuO1VVVJ\n", 1521 | "HsjqLZ9/dMbzsH7/NatvZLxtdQnzoe5+6WxHYr2q6geS/GKSJyV5d1V9rLv/xYzH4hi6+/6q+rEk\n", 1522 | "783qm4ff2t2fnPFYrFNV3ZDke5J8XVV9NslruvttMx6L9fvOJD+U5M+q6qFfqvd09/+c4UyszzlJ\n", 1523 | "rp+8z+hRSd7e3e+b8Uw8cmteVn7akSMuOwcAAMY295fSAQAAnCxhBAAADE8YAQAAwxNGAADA8IQR\n", 1524 | "AAAwPGEEAAAMTxgBAADD+79lB14xV812IQAAAABJRU5ErkJggg==\n" 1525 | ], 1526 | "text/plain": [ 1527 | "" 1528 | ] 1529 | }, 1530 | "metadata": {}, 1531 | "output_type": "display_data" 1532 | } 1533 | ], 1534 | "source": [ 1535 | "ETFs.Beta.plot(kind='hist',bins=8)" 1536 | ] 1537 | }, 1538 | { 1539 | "cell_type": "code", 1540 | "execution_count": 218, 1541 | "metadata": { 1542 | "collapsed": false 1543 | }, 1544 | "outputs": [ 1545 | { 1546 | "data": { 1547 | "text/plain": [ 1548 | "U.S. 460\n", 1549 | "Global/Multi-Region 107\n", 1550 | "Emerging Markets 28\n", 1551 | "China 20\n", 1552 | "Europe 15\n", 1553 | "Japan 10\n", 1554 | "Developed Markets 9\n", 1555 | "Ex-U.S. 9\n", 1556 | "EAFE 8\n", 1557 | "Asia 7\n", 1558 | "India 6\n", 1559 | "Pacific ex-Japan 6\n", 1560 | "BRIC 5\n", 1561 | "Brazil 5\n", 1562 | "Latin America 5\n", 1563 | "Canada 3\n", 1564 | "Euro-Pacific 3\n", 1565 | "Middle East 3\n", 1566 | "Mexico 3\n", 1567 | "South Korea 2\n", 1568 | "Africa 2\n", 1569 | "Taiwan 2\n", 1570 | "Australia 2\n", 1571 | "Russia 2\n", 1572 | "Indonesia 2\n", 1573 | "Middle East/Africa 2\n", 1574 | "Israel 1\n", 1575 | "Colombia 1\n", 1576 | "Austria 1\n", 1577 | "France 1\n", 1578 | "Turkey 1\n", 1579 | "Ireland 1\n", 1580 | "Italy 1\n", 1581 | "Switzerland 1\n", 1582 | "Malaysia 1\n", 1583 | "United Kingdom 1\n", 1584 | "Germany 1\n", 1585 | "Pacific 1\n", 1586 | "Singapore 1\n", 1587 | "Chindia 1\n", 1588 | "Nordic 1\n", 1589 | "Poland 1\n", 1590 | "Chile 1\n", 1591 | "Belgium 1\n", 1592 | "Thailand 1\n", 1593 | "Hong Kong 1\n", 1594 | "Netherlands 1\n", 1595 | "South Africa 1\n", 1596 | "Peru 1\n", 1597 | "North America 1\n", 1598 | "Sweden 1\n", 1599 | "Vietnam 1\n", 1600 | "Spain 1\n", 1601 | "dtype: int64" 1602 | ] 1603 | }, 1604 | "execution_count": 218, 1605 | "metadata": {}, 1606 | "output_type": "execute_result" 1607 | } 1608 | ], 1609 | "source": [ 1610 | "ETFs.Region.value_counts()" 1611 | ] 1612 | }, 1613 | { 1614 | "cell_type": "code", 1615 | "execution_count": 217, 1616 | "metadata": { 1617 | "collapsed": false 1618 | }, 1619 | "outputs": [ 1620 | { 1621 | "data": { 1622 | "text/plain": [ 1623 | "Energy 45\n", 1624 | "Technology 41\n", 1625 | "Financial 41\n", 1626 | "Industrial 32\n", 1627 | "Health & Biotech 25\n", 1628 | "Utilities 17\n", 1629 | "Retail & Consumer 15\n", 1630 | "Materials 12\n", 1631 | "Communications 11\n", 1632 | "Consumer Staples 6\n", 1633 | "Consumer Discretionary 6\n", 1634 | "Transportation 4\n", 1635 | "Building & Construction 3\n", 1636 | "Agriculture 3\n", 1637 | "Aerospace & Defense 2\n", 1638 | "Environmental 1\n", 1639 | "dtype: int64" 1640 | ] 1641 | }, 1642 | "execution_count": 217, 1643 | "metadata": {}, 1644 | "output_type": "execute_result" 1645 | } 1646 | ], 1647 | "source": [ 1648 | "ETFs.Sector.value_counts()" 1649 | ] 1650 | }, 1651 | { 1652 | "cell_type": "code", 1653 | "execution_count": 216, 1654 | "metadata": { 1655 | "collapsed": false 1656 | }, 1657 | "outputs": [ 1658 | { 1659 | "data": { 1660 | "text/plain": [ 1661 | "2x 116\n", 1662 | "3x 44\n", 1663 | "dtype: int64" 1664 | ] 1665 | }, 1666 | "execution_count": 216, 1667 | "metadata": {}, 1668 | "output_type": "execute_result" 1669 | } 1670 | ], 1671 | "source": [ 1672 | "ETFs.Leveraged.value_counts()" 1673 | ] 1674 | }, 1675 | { 1676 | "cell_type": "code", 1677 | "execution_count": 215, 1678 | "metadata": { 1679 | "collapsed": false 1680 | }, 1681 | "outputs": [ 1682 | { 1683 | "data": { 1684 | "text/plain": [ 1685 | "False 914\n", 1686 | "True 106\n", 1687 | "dtype: int64" 1688 | ] 1689 | }, 1690 | "execution_count": 215, 1691 | "metadata": {}, 1692 | "output_type": "execute_result" 1693 | } 1694 | ], 1695 | "source": [ 1696 | "ETFs.Inverse.value_counts()" 1697 | ] 1698 | }, 1699 | { 1700 | "cell_type": "markdown", 1701 | "metadata": {}, 1702 | "source": [ 1703 | "## Places to collect holdings data " 1704 | ] 1705 | }, 1706 | { 1707 | "cell_type": "code", 1708 | "execution_count": 213, 1709 | "metadata": { 1710 | "collapsed": true 1711 | }, 1712 | "outputs": [], 1713 | "source": [ 1714 | "# http://www.etfreplay.com/" 1715 | ] 1716 | }, 1717 | { 1718 | "cell_type": "code", 1719 | "execution_count": null, 1720 | "metadata": { 1721 | "collapsed": true 1722 | }, 1723 | "outputs": [], 1724 | "source": [ 1725 | "# http://etfdb.com/etf/###\n", 1726 | "# http://finance.yahoo.com/q/hl?s=### ETF holdings" 1727 | ] 1728 | }, 1729 | { 1730 | "cell_type": "code", 1731 | "execution_count": null, 1732 | "metadata": { 1733 | "collapsed": true 1734 | }, 1735 | "outputs": [], 1736 | "source": [ 1737 | "# https://accounts.profunds.com/etfdata/ByFund/EFAD-psdlyhld.csv\n", 1738 | "# http://www.ishares.com/us/products/239709/ishares-russell-2000-growth-etf" 1739 | ] 1740 | }, 1741 | { 1742 | "cell_type": "code", 1743 | "execution_count": null, 1744 | "metadata": { 1745 | "collapsed": true 1746 | }, 1747 | "outputs": [], 1748 | "source": [] 1749 | } 1750 | ], 1751 | "metadata": { 1752 | "kernelspec": { 1753 | "display_name": "Python 2", 1754 | "language": "python", 1755 | "name": "python2" 1756 | }, 1757 | "language_info": { 1758 | "codemirror_mode": { 1759 | "name": "ipython", 1760 | "version": 2 1761 | }, 1762 | "file_extension": ".py", 1763 | "mimetype": "text/x-python", 1764 | "name": "python", 1765 | "nbconvert_exporter": "python", 1766 | "pygments_lexer": "ipython2", 1767 | "version": "2.7.9" 1768 | } 1769 | }, 1770 | "nbformat": 4, 1771 | "nbformat_minor": 0 1772 | } 1773 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The Feedback MIT License (FMIT) 2 | 3 | Copyright (c) 2014, Paul O. Perry 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy of 6 | this software and associated documentation files (the "Software"), to deal in 7 | the Software without restriction, including without limitation the rights to 8 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 9 | the Software, and to permit persons to whom the Software is furnished to do so, 10 | subject to the following conditions: 11 | 12 | 1. The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | 2. Person obtaining a copy must return feedback to the authors. 16 | 17 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS 19 | FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 20 | COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 21 | IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 22 | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 23 | -------------------------------------------------------------------------------- /OLPS_algos.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paulperry/quant/a94ff7ea34aa0319e81307390a238e041af56dff/OLPS_algos.png -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # quant 2 | 3 | Here I collect some Quantitative Finance and Algorithmic Trading 4 | exhaust; mostly ipython notebooks based on 5 | [Quantopian](https://www.quantopian.com), 6 | [Zipline](https://github.com/quantopian/zipline), or 7 | [Pandas](http://pandas.pydata.org/). 8 | 9 | 1. [Comparing some Lazy Portfolios](https://github.com/paulperry/quant/blob/master/Lazy_Backtests.ipynb) 10 | 2. [Exploratory Data Analysis (EDA) of ETFs](https://github.com/paulperry/quant/blob/master/ETFs.ipynb) 11 | 3. [Comparing OLPS Algorithms on ETFs](https://github.com/paulperry/quant/blob/master/OLPS_Comparison.ipynb) 12 | 4. [Comparing Bond ETF's in the 2008 downturn](https://github.com/paulperry/quant/blob/master/Bond_ETFs.ipynb) 13 | 14 | More to come ... 15 | -------------------------------------------------------------------------------- /spy_100.py: -------------------------------------------------------------------------------- 1 | ''' 2 | A benchmark comparison to buying and holding SPY at 100%. 3 | 4 | NOTE: This algo can run in minute-mode simulation and is compatible with LIVE TRADING. 5 | ''' 6 | 7 | import pandas as pd 8 | from zipline.api import order_target_percent 9 | 10 | def initialize(context): 11 | set_long_only() 12 | set_symbol_lookup_date('2008-01-01') 13 | schedule_function(trade, 14 | date_rule=date_rules.every_day(), 15 | time_rule=time_rules.market_open()) 16 | 17 | context.secs = [symbol('SPY')] 18 | context.pcts = [1.0] 19 | context.ETFs = zip(context.secs, context.pcts) # list of tuples 20 | 21 | def handle_data(context, data): 22 | pass 23 | 24 | def trade(context, data): 25 | """ 26 | Make sure the porfolio is fully invested every day. 27 | """ 28 | threshold = 0.05 29 | 30 | need_full_rebalance = False 31 | # rebalance if we have too much cash 32 | if context.portfolio.cash / context.portfolio.portfolio_value > threshold: 33 | need_full_rebalance = True 34 | 35 | # What we should do is first sell the overs and then buy the unders. 36 | if need_full_rebalance: 37 | # Get the current exchange time, in the exchange timezone 38 | exchange_time = pd.Timestamp(get_datetime()).tz_convert('US/Eastern') 39 | # perform the full rebalance if we flagged the need to do so 40 | for sid, target in context.ETFs: 41 | order_target_percent(sid, target) 42 | log.info("Rebalanced at %s" % str(exchange_time)) 43 | 44 | -------------------------------------------------------------------------------- /swensen.py: -------------------------------------------------------------------------------- 1 | ''' 2 | This algorithm defines a long-only portfolio of 6 ETF's and rebalances all of 3 | them when any one of them is off the target by a threshold of 5%. 4 | It is based on David Swensen's rationale for portfolio construction as defined in 5 | his book: "Unconventional Success: A Fundamental Approach to Personal Investment": 6 | http://www.amazon.com/Unconventional-Success-Fundamental-Approach-Investment/dp/0743228383 . 7 | The representative ETF's are defined here: 8 | http://seekingalpha.com/article/531591-swensens-6-etf-portfolio 9 | The target percents are defined here: 10 | https://www.yalealumnimagazine.com/articles/2398/david-swensen-s-guide-to-sleeping-soundly 11 | The rebalancing strategy is defined in the book and here: 12 | http://socialize.morningstar.com/NewSocialize/forums/p/102207/102207.aspx 13 | 14 | This is effectively a passive managment strategy or Lazy portfolio: 15 | http://en.wikipedia.org/wiki/Passive_management 16 | http://www.bogleheads.org/wiki/Lazy_portfolios 17 | 18 | Taxes are not modelled. 19 | 20 | NOTE: This algo can run in minute-mode simulation and is compatible with LIVE TRADING. 21 | ''' 22 | 23 | from __future__ import division 24 | import datetime 25 | import pytz 26 | import pandas as pd 27 | from zipline.api import order_target_percent 28 | 29 | def initialize(context): 30 | 31 | set_long_only() 32 | set_symbol_lookup_date('2005-01-01') # because EEM has multiple sid's. 33 | 34 | context.secs = symbols('TIP', 'TLT', 'VNQ', 'EEM', 'EFA', 'VTI') # Securities 35 | context.pcts = [ 0.15, 0.15, 0.15, 0.1, 0.15, 0.3 ] # Percentages 36 | context.ETFs = zip(context.secs, context.pcts) # list of tuples 37 | 38 | # Change this variable if you want to rebalance less frequently 39 | context.rebalance_days = 20 # 1 = can rebalance any day, 20 = every month 40 | 41 | # Set the trade time, if in minute mode, we trade between 10am and 3pm. 42 | context.rebalance_date = None 43 | context.rebalance_hour_start = 10 44 | context.rebalance_hour_end = 15 45 | 46 | def handle_data(context, data): 47 | 48 | # Get the current exchange time, in the exchange timezone 49 | exchange_time = pd.Timestamp(get_datetime()).tz_convert('US/Eastern') 50 | 51 | # If it's a rebalance day (defined in intialize()) then rebalance: 52 | if context.rebalance_date == None or \ 53 | exchange_time >= context.rebalance_date + datetime.timedelta(days=context.rebalance_days): 54 | 55 | # Do nothing if there are open orders: 56 | if has_orders(context): 57 | print('has open orders - doing nothing!') 58 | return 59 | 60 | rebalance(context, data, exchange_time) 61 | 62 | def rebalance(context, data, exchange_time, threshold = 0.05): 63 | """ 64 | For every stock or cash position, if the target percent is off by the threshold 65 | amount (5% as a default), then place orders to adjust all positions to the target 66 | percent of the current portfolio value. 67 | """ 68 | 69 | # if the backtest is in minute mode 70 | if get_environment('data_frequency') == 'minute': 71 | # rebalance if we are in the user specified rebalance time-of-day window 72 | if exchange_time.hour < context.rebalance_hour_start or \ 73 | exchange_time.hour > context.rebalance_hour_end: 74 | return 75 | 76 | need_full_rebalance = False 77 | portfolio_value = context.portfolio.portfolio_value 78 | 79 | # rebalance if we have too much cash 80 | if context.portfolio.cash / portfolio_value > threshold: 81 | need_full_rebalance = True 82 | 83 | # or rebalance if an ETF is off by the given threshold 84 | for sid, target in context.ETFs: 85 | pos = context.portfolio.positions[sid] 86 | position_pct = (pos.amount * pos.last_sale_price) / portfolio_value 87 | # if any position is out of range then rebalance the whole portfolio 88 | if abs(position_pct - target) > threshold: 89 | need_full_rebalance = True 90 | break # don't bother checking the rest 91 | 92 | # perform the full rebalance if we flagged the need to do so 93 | # What we should do is first sell the overs and then buy the unders. 94 | if need_full_rebalance: 95 | for sid, target in context.ETFs: 96 | order_target_percent(sid, target) 97 | log.info("Rebalanced at %s" % str(exchange_time)) 98 | context.rebalance_date = exchange_time 99 | 100 | 101 | def has_orders(context): 102 | # Return true if there are pending orders. 103 | has_orders = False 104 | for sec in context.secs: 105 | orders = get_open_orders(sec) 106 | if orders: 107 | for oo in orders: 108 | message = 'Open order for {amount} shares in {stock}' 109 | message = message.format(amount=oo.amount, stock=sec) 110 | log.info(message) 111 | 112 | has_orders = True 113 | return has_orders 114 | -------------------------------------------------------------------------------- /vti_agg_5050.py: -------------------------------------------------------------------------------- 1 | ''' 2 | A Basic Markowitz portfolio of Stocks and Bonds. 3 | Change it from 50/50 to 60/40 or 70/30. 4 | ''' 5 | 6 | from __future__ import division 7 | import datetime 8 | import pytz 9 | import pandas as pd 10 | from zipline.api import order_target_percent 11 | 12 | def initialize(context): 13 | set_long_only() 14 | set_symbol_lookup_date('2005-01-01') 15 | 16 | context.secs = symbols( 'VTI', 'AGG') # Securities 17 | context.pcts = [ 0.5, 0.5 ] # Percentages 18 | context.ETFs = zip(context.secs, context.pcts) 19 | # Check to rebalance every month, but only do it in December 20 | schedule_function(rebalance, 21 | date_rules.month_end(days_offset=5), # trade before EOY settlment dates 22 | time_rules.market_open(minutes=45)) # trade after 10:15am 23 | return 24 | 25 | def rebalance(context, data): 26 | threshold = 0.05 # trigger a rebalance if we are off by this threshold (5%) 27 | # Get the current exchange time, in the exchange timezone 28 | exchange_time = pd.Timestamp(get_datetime()).tz_convert('US/Eastern') 29 | if exchange_time.month < 12: 30 | return # bail if it's not December 31 | 32 | need_full_rebalance = False 33 | portfolio_value = context.portfolio.portfolio_value 34 | 35 | # rebalance if we have too much cash 36 | if context.portfolio.cash / portfolio_value > threshold: 37 | need_full_rebalance = True 38 | 39 | # or rebalance if an ETF is off by the given threshold 40 | for sid, target in context.ETFs: 41 | pos = context.portfolio.positions[sid] 42 | position_pct = (pos.amount * pos.last_sale_price) / portfolio_value 43 | # if any position is out of range then rebalance the whole portfolio 44 | if abs(position_pct - target) > threshold: 45 | need_full_rebalance = True 46 | break # don't bother checking the rest 47 | # perform the full rebalance if we flagged the need to do so 48 | if need_full_rebalance: 49 | for sid, target in context.ETFs: 50 | order_target_percent(sid, target) 51 | log.info("Rebalanced at %s" % str(exchange_time)) 52 | context.rebalance_date = exchange_time 53 | 54 | def handle_data(context, data): 55 | pass 56 | 57 | 58 | -------------------------------------------------------------------------------- /vti_agg_6040.py: -------------------------------------------------------------------------------- 1 | ''' 2 | A Basic Markowitz portfolio of Stocks and Bonds. 3 | Change it from 50/50 to 60/40 or 70/30. 4 | ''' 5 | 6 | from __future__ import division 7 | import datetime 8 | import pytz 9 | import pandas as pd 10 | from zipline.api import order_target_percent 11 | 12 | def initialize(context): 13 | set_long_only() 14 | set_symbol_lookup_date('2005-01-01') 15 | 16 | context.secs = symbols( 'VTI', 'AGG') # Securities 17 | context.pcts = [ 0.6, 0.4 ] # Percentages 18 | context.ETFs = zip(context.secs, context.pcts) 19 | # Check to rebalance every month, but only do it in December 20 | schedule_function(rebalance, 21 | date_rules.month_end(days_offset=5), # trade before EOY settlment dates 22 | time_rules.market_open(minutes=45)) # trade after 10:15am 23 | return 24 | 25 | def rebalance(context, data): 26 | threshold = 0.05 # trigger a rebalance if we are off by this threshold (5%) 27 | # Get the current exchange time, in the exchange timezone 28 | exchange_time = pd.Timestamp(get_datetime()).tz_convert('US/Eastern') 29 | if exchange_time.month < 12: 30 | return # bail if it's not December 31 | 32 | need_full_rebalance = False 33 | portfolio_value = context.portfolio.portfolio_value 34 | 35 | # rebalance if we have too much cash 36 | if context.portfolio.cash / portfolio_value > threshold: 37 | need_full_rebalance = True 38 | 39 | # or rebalance if an ETF is off by the given threshold 40 | for sid, target in context.ETFs: 41 | pos = context.portfolio.positions[sid] 42 | position_pct = (pos.amount * pos.last_sale_price) / portfolio_value 43 | # if any position is out of range then rebalance the whole portfolio 44 | if abs(position_pct - target) > threshold: 45 | need_full_rebalance = True 46 | break # don't bother checking the rest 47 | # perform the full rebalance if we flagged the need to do so 48 | if need_full_rebalance: 49 | for sid, target in context.ETFs: 50 | order_target_percent(sid, target) 51 | log.info("Rebalanced at %s" % str(exchange_time)) 52 | context.rebalance_date = exchange_time 53 | 54 | def handle_data(context, data): 55 | pass 56 | 57 | 58 | -------------------------------------------------------------------------------- /vti_agg_7030.py: -------------------------------------------------------------------------------- 1 | ''' 2 | A Basic Markowitz portfolio of Stocks and Bonds. 3 | Change it from 50/50 to 60/40 or 70/30. 4 | ''' 5 | 6 | from __future__ import division 7 | import datetime 8 | import pytz 9 | import pandas as pd 10 | from zipline.api import order_target_percent 11 | 12 | def initialize(context): 13 | set_long_only() 14 | set_symbol_lookup_date('2005-01-01') 15 | 16 | context.secs = symbols( 'VTI', 'AGG') # Securities 17 | context.pcts = [ 0.7, 0.3 ] # Percentages 18 | context.ETFs = zip(context.secs, context.pcts) 19 | # Check to rebalance every month, but only do it in December 20 | schedule_function(rebalance, 21 | date_rules.month_end(days_offset=5), # trade before EOY settlment dates 22 | time_rules.market_open(minutes=45)) # trade after 10:15am 23 | return 24 | 25 | def rebalance(context, data): 26 | threshold = 0.05 # trigger a rebalance if we are off by this threshold (5%) 27 | # Get the current exchange time, in the exchange timezone 28 | exchange_time = pd.Timestamp(get_datetime()).tz_convert('US/Eastern') 29 | if exchange_time.month < 12: 30 | return # bail if it's not December 31 | 32 | need_full_rebalance = False 33 | portfolio_value = context.portfolio.portfolio_value 34 | 35 | # rebalance if we have too much cash 36 | if context.portfolio.cash / portfolio_value > threshold: 37 | need_full_rebalance = True 38 | 39 | # or rebalance if an ETF is off by the given threshold 40 | for sid, target in context.ETFs: 41 | pos = context.portfolio.positions[sid] 42 | position_pct = (pos.amount * pos.last_sale_price) / portfolio_value 43 | # if any position is out of range then rebalance the whole portfolio 44 | if abs(position_pct - target) > threshold: 45 | need_full_rebalance = True 46 | break # don't bother checking the rest 47 | # perform the full rebalance if we flagged the need to do so 48 | if need_full_rebalance: 49 | for sid, target in context.ETFs: 50 | order_target_percent(sid, target) 51 | log.info("Rebalanced at %s" % str(exchange_time)) 52 | context.rebalance_date = exchange_time 53 | 54 | def handle_data(context, data): 55 | pass 56 | 57 | 58 | --------------------------------------------------------------------------------