├── .gitignore ├── LICENSE ├── README.md ├── docs └── img │ ├── 1.png │ ├── 2.png │ ├── 3.png │ ├── 4.png │ ├── 5.png │ ├── 6.png │ ├── 7.png │ └── 8.png ├── setup.py ├── term-sheets └── JPM_termsheet_20161019.pdf ├── tests ├── BENCH.csv └── JPM.csv └── volatility ├── __init__.py ├── data.py ├── models ├── GarmanKlass.py ├── HodgesTompkins.py ├── Kurtosis.py ├── Parkinson.py ├── Raw.py ├── RogersSatchell.py ├── Skew.py ├── YangZhang.py ├── __init__.py └── api.py └── volest.py /.gitignore: -------------------------------------------------------------------------------- 1 | __pycache__ 2 | *.pyc 3 | *.egg-info 4 | *.pdf 5 | .coverage 6 | build 7 | dist 8 | docs/build 9 | .tox/ 10 | .ipynb_checkpoints/ 11 | *.ipynb 12 | *.idea 13 | venv/ 14 | debug.py -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | GNU GENERAL PUBLIC LICENSE 2 | Version 3, 29 June 2007 3 | 4 | Copyright (C) 2007 Free Software Foundation, Inc. 5 | Everyone is permitted to copy and distribute verbatim copies 6 | of this license document, but changing it is not allowed. 7 | 8 | Preamble 9 | 10 | The GNU General Public License is a free, copyleft license for 11 | software and other kinds of works. 12 | 13 | The licenses for most software and other practical works are designed 14 | to take away your freedom to share and change the works. By contrast, 15 | the GNU General Public License is intended to guarantee your freedom to 16 | share and change all versions of a program--to make sure it remains free 17 | software for all its users. We, the Free Software Foundation, use the 18 | GNU General Public License for most of our software; it applies also to 19 | any other work released this way by its authors. You can apply it to 20 | your programs, too. 21 | 22 | When we speak of free software, we are referring to freedom, not 23 | price. Our General Public Licenses are designed to make sure that you 24 | have the freedom to distribute copies of free software (and charge for 25 | them if you wish), that you receive source code or can get it if you 26 | want it, that you can change the software or use pieces of it in new 27 | free programs, and that you know you can do these things. 28 | 29 | To protect your rights, we need to prevent others from denying you 30 | these rights or asking you to surrender the rights. Therefore, you have 31 | certain responsibilities if you distribute copies of the software, or if 32 | you modify it: responsibilities to respect the freedom of others. 33 | 34 | For example, if you distribute copies of such a program, whether 35 | gratis or for a fee, you must pass on to the recipients the same 36 | freedoms that you received. You must make sure that they, too, receive 37 | or can get the source code. And you must show them these terms so they 38 | know their rights. 39 | 40 | Developers that use the GNU GPL protect your rights with two steps: 41 | (1) assert copyright on the software, and (2) offer you this License 42 | giving you legal permission to copy, distribute and/or modify it. 43 | 44 | For the developers' and authors' protection, the GPL clearly explains 45 | that there is no warranty for this free software. For both users' and 46 | authors' sake, the GPL requires that modified versions be marked as 47 | changed, so that their problems will not be attributed erroneously to 48 | authors of previous versions. 49 | 50 | Some devices are designed to deny users access to install or run 51 | modified versions of the software inside them, although the manufacturer 52 | can do so. This is fundamentally incompatible with the aim of 53 | protecting users' freedom to change the software. The systematic 54 | pattern of such abuse occurs in the area of products for individuals to 55 | use, which is precisely where it is most unacceptable. Therefore, we 56 | have designed this version of the GPL to prohibit the practice for those 57 | products. If such problems arise substantially in other domains, we 58 | stand ready to extend this provision to those domains in future versions 59 | of the GPL, as needed to protect the freedom of users. 60 | 61 | Finally, every program is threatened constantly by software patents. 62 | States should not allow patents to restrict development and use of 63 | software on general-purpose computers, but in those that do, we wish to 64 | avoid the special danger that patents applied to a free program could 65 | make it effectively proprietary. To prevent this, the GPL assures that 66 | patents cannot be used to render the program non-free. 67 | 68 | The precise terms and conditions for copying, distribution and 69 | modification follow. 70 | 71 | TERMS AND CONDITIONS 72 | 73 | 0. Definitions. 74 | 75 | "This License" refers to version 3 of the GNU General Public License. 76 | 77 | "Copyright" also means copyright-like laws that apply to other kinds of 78 | works, such as semiconductor masks. 79 | 80 | "The Program" refers to any copyrightable work licensed under this 81 | License. Each licensee is addressed as "you". "Licensees" and 82 | "recipients" may be individuals or organizations. 83 | 84 | To "modify" a work means to copy from or adapt all or part of the work 85 | in a fashion requiring copyright permission, other than the making of an 86 | exact copy. The resulting work is called a "modified version" of the 87 | earlier work or a work "based on" the earlier work. 88 | 89 | A "covered work" means either the unmodified Program or a work based 90 | on the Program. 91 | 92 | To "propagate" a work means to do anything with it that, without 93 | permission, would make you directly or secondarily liable for 94 | infringement under applicable copyright law, except executing it on a 95 | computer or modifying a private copy. Propagation includes copying, 96 | distribution (with or without modification), making available to the 97 | public, and in some countries other activities as well. 98 | 99 | To "convey" a work means any kind of propagation that enables other 100 | parties to make or receive copies. Mere interaction with a user through 101 | a computer network, with no transfer of a copy, is not conveying. 102 | 103 | An interactive user interface displays "Appropriate Legal Notices" 104 | to the extent that it includes a convenient and prominently visible 105 | feature that (1) displays an appropriate copyright notice, and (2) 106 | tells the user that there is no warranty for the work (except to the 107 | extent that warranties are provided), that licensees may convey the 108 | work under this License, and how to view a copy of this License. If 109 | the interface presents a list of user commands or options, such as a 110 | menu, a prominent item in the list meets this criterion. 111 | 112 | 1. Source Code. 113 | 114 | The "source code" for a work means the preferred form of the work 115 | for making modifications to it. "Object code" means any non-source 116 | form of a work. 117 | 118 | A "Standard Interface" means an interface that either is an official 119 | standard defined by a recognized standards body, or, in the case of 120 | interfaces specified for a particular programming language, one that 121 | is widely used among developers working in that language. 122 | 123 | The "System Libraries" of an executable work include anything, other 124 | than the work as a whole, that (a) is included in the normal form of 125 | packaging a Major Component, but which is not part of that Major 126 | Component, and (b) serves only to enable use of the work with that 127 | Major Component, or to implement a Standard Interface for which an 128 | implementation is available to the public in source code form. A 129 | "Major Component", in this context, means a major essential component 130 | (kernel, window system, and so on) of the specific operating system 131 | (if any) on which the executable work runs, or a compiler used to 132 | produce the work, or an object code interpreter used to run it. 133 | 134 | The "Corresponding Source" for a work in object code form means all 135 | the source code needed to generate, install, and (for an executable 136 | work) run the object code and to modify the work, including scripts to 137 | control those activities. However, it does not include the work's 138 | System Libraries, or general-purpose tools or generally available free 139 | programs which are used unmodified in performing those activities but 140 | which are not part of the work. For example, Corresponding Source 141 | includes interface definition files associated with source files for 142 | the work, and the source code for shared libraries and dynamically 143 | linked subprograms that the work is specifically designed to require, 144 | such as by intimate data communication or control flow between those 145 | subprograms and other parts of the work. 146 | 147 | The Corresponding Source need not include anything that users 148 | can regenerate automatically from other parts of the Corresponding 149 | Source. 150 | 151 | The Corresponding Source for a work in source code form is that 152 | same work. 153 | 154 | 2. Basic Permissions. 155 | 156 | All rights granted under this License are granted for the term of 157 | copyright on the Program, and are irrevocable provided the stated 158 | conditions are met. This License explicitly affirms your unlimited 159 | permission to run the unmodified Program. The output from running a 160 | covered work is covered by this License only if the output, given its 161 | content, constitutes a covered work. This License acknowledges your 162 | rights of fair use or other equivalent, as provided by copyright law. 163 | 164 | You may make, run and propagate covered works that you do not 165 | convey, without conditions so long as your license otherwise remains 166 | in force. You may convey covered works to others for the sole purpose 167 | of having them make modifications exclusively for you, or provide you 168 | with facilities for running those works, provided that you comply with 169 | the terms of this License in conveying all material for which you do 170 | not control copyright. Those thus making or running the covered works 171 | for you must do so exclusively on your behalf, under your direction 172 | and control, on terms that prohibit them from making any copies of 173 | your copyrighted material outside their relationship with you. 174 | 175 | Conveying under any other circumstances is permitted solely under 176 | the conditions stated below. Sublicensing is not allowed; section 10 177 | makes it unnecessary. 178 | 179 | 3. Protecting Users' Legal Rights From Anti-Circumvention Law. 180 | 181 | No covered work shall be deemed part of an effective technological 182 | measure under any applicable law fulfilling obligations under article 183 | 11 of the WIPO copyright treaty adopted on 20 December 1996, or 184 | similar laws prohibiting or restricting circumvention of such 185 | measures. 186 | 187 | When you convey a covered work, you waive any legal power to forbid 188 | circumvention of technological measures to the extent such circumvention 189 | is effected by exercising rights under this License with respect to 190 | the covered work, and you disclaim any intention to limit operation or 191 | modification of the work as a means of enforcing, against the work's 192 | users, your or third parties' legal rights to forbid circumvention of 193 | technological measures. 194 | 195 | 4. Conveying Verbatim Copies. 196 | 197 | You may convey verbatim copies of the Program's source code as you 198 | receive it, in any medium, provided that you conspicuously and 199 | appropriately publish on each copy an appropriate copyright notice; 200 | keep intact all notices stating that this License and any 201 | non-permissive terms added in accord with section 7 apply to the code; 202 | keep intact all notices of the absence of any warranty; and give all 203 | recipients a copy of this License along with the Program. 204 | 205 | You may charge any price or no price for each copy that you convey, 206 | and you may offer support or warranty protection for a fee. 207 | 208 | 5. Conveying Modified Source Versions. 209 | 210 | You may convey a work based on the Program, or the modifications to 211 | produce it from the Program, in the form of source code under the 212 | terms of section 4, provided that you also meet all of these conditions: 213 | 214 | a) The work must carry prominent notices stating that you modified 215 | it, and giving a relevant date. 216 | 217 | b) The work must carry prominent notices stating that it is 218 | released under this License and any conditions added under section 219 | 7. This requirement modifies the requirement in section 4 to 220 | "keep intact all notices". 221 | 222 | c) You must license the entire work, as a whole, under this 223 | License to anyone who comes into possession of a copy. This 224 | License will therefore apply, along with any applicable section 7 225 | additional terms, to the whole of the work, and all its parts, 226 | regardless of how they are packaged. This License gives no 227 | permission to license the work in any other way, but it does not 228 | invalidate such permission if you have separately received it. 229 | 230 | d) If the work has interactive user interfaces, each must display 231 | Appropriate Legal Notices; however, if the Program has interactive 232 | interfaces that do not display Appropriate Legal Notices, your 233 | work need not make them do so. 234 | 235 | A compilation of a covered work with other separate and independent 236 | works, which are not by their nature extensions of the covered work, 237 | and which are not combined with it such as to form a larger program, 238 | in or on a volume of a storage or distribution medium, is called an 239 | "aggregate" if the compilation and its resulting copyright are not 240 | used to limit the access or legal rights of the compilation's users 241 | beyond what the individual works permit. Inclusion of a covered work 242 | in an aggregate does not cause this License to apply to the other 243 | parts of the aggregate. 244 | 245 | 6. Conveying Non-Source Forms. 246 | 247 | You may convey a covered work in object code form under the terms 248 | of sections 4 and 5, provided that you also convey the 249 | machine-readable Corresponding Source under the terms of this License, 250 | in one of these ways: 251 | 252 | a) Convey the object code in, or embodied in, a physical product 253 | (including a physical distribution medium), accompanied by the 254 | Corresponding Source fixed on a durable physical medium 255 | customarily used for software interchange. 256 | 257 | b) Convey the object code in, or embodied in, a physical product 258 | (including a physical distribution medium), accompanied by a 259 | written offer, valid for at least three years and valid for as 260 | long as you offer spare parts or customer support for that product 261 | model, to give anyone who possesses the object code either (1) a 262 | copy of the Corresponding Source for all the software in the 263 | product that is covered by this License, on a durable physical 264 | medium customarily used for software interchange, for a price no 265 | more than your reasonable cost of physically performing this 266 | conveying of source, or (2) access to copy the 267 | Corresponding Source from a network server at no charge. 268 | 269 | c) Convey individual copies of the object code with a copy of the 270 | written offer to provide the Corresponding Source. This 271 | alternative is allowed only occasionally and noncommercially, and 272 | only if you received the object code with such an offer, in accord 273 | with subsection 6b. 274 | 275 | d) Convey the object code by offering access from a designated 276 | place (gratis or for a charge), and offer equivalent access to the 277 | Corresponding Source in the same way through the same place at no 278 | further charge. You need not require recipients to copy the 279 | Corresponding Source along with the object code. If the place to 280 | copy the object code is a network server, the Corresponding Source 281 | may be on a different server (operated by you or a third party) 282 | that supports equivalent copying facilities, provided you maintain 283 | clear directions next to the object code saying where to find the 284 | Corresponding Source. Regardless of what server hosts the 285 | Corresponding Source, you remain obligated to ensure that it is 286 | available for as long as needed to satisfy these requirements. 287 | 288 | e) Convey the object code using peer-to-peer transmission, provided 289 | you inform other peers where the object code and Corresponding 290 | Source of the work are being offered to the general public at no 291 | charge under subsection 6d. 292 | 293 | A separable portion of the object code, whose source code is excluded 294 | from the Corresponding Source as a System Library, need not be 295 | included in conveying the object code work. 296 | 297 | A "User Product" is either (1) a "consumer product", which means any 298 | tangible personal property which is normally used for personal, family, 299 | or household purposes, or (2) anything designed or sold for incorporation 300 | into a dwelling. In determining whether a product is a consumer product, 301 | doubtful cases shall be resolved in favor of coverage. For a particular 302 | product received by a particular user, "normally used" refers to a 303 | typical or common use of that class of product, regardless of the status 304 | of the particular user or of the way in which the particular user 305 | actually uses, or expects or is expected to use, the product. A product 306 | is a consumer product regardless of whether the product has substantial 307 | commercial, industrial or non-consumer uses, unless such uses represent 308 | the only significant mode of use of the product. 309 | 310 | "Installation Information" for a User Product means any methods, 311 | procedures, authorization keys, or other information required to install 312 | and execute modified versions of a covered work in that User Product from 313 | a modified version of its Corresponding Source. The information must 314 | suffice to ensure that the continued functioning of the modified object 315 | code is in no case prevented or interfered with solely because 316 | modification has been made. 317 | 318 | If you convey an object code work under this section in, or with, or 319 | specifically for use in, a User Product, and the conveying occurs as 320 | part of a transaction in which the right of possession and use of the 321 | User Product is transferred to the recipient in perpetuity or for a 322 | fixed term (regardless of how the transaction is characterized), the 323 | Corresponding Source conveyed under this section must be accompanied 324 | by the Installation Information. But this requirement does not apply 325 | if neither you nor any third party retains the ability to install 326 | modified object code on the User Product (for example, the work has 327 | been installed in ROM). 328 | 329 | The requirement to provide Installation Information does not include a 330 | requirement to continue to provide support service, warranty, or updates 331 | for a work that has been modified or installed by the recipient, or for 332 | the User Product in which it has been modified or installed. Access to a 333 | network may be denied when the modification itself materially and 334 | adversely affects the operation of the network or violates the rules and 335 | protocols for communication across the network. 336 | 337 | Corresponding Source conveyed, and Installation Information provided, 338 | in accord with this section must be in a format that is publicly 339 | documented (and with an implementation available to the public in 340 | source code form), and must require no special password or key for 341 | unpacking, reading or copying. 342 | 343 | 7. Additional Terms. 344 | 345 | "Additional permissions" are terms that supplement the terms of this 346 | License by making exceptions from one or more of its conditions. 347 | Additional permissions that are applicable to the entire Program shall 348 | be treated as though they were included in this License, to the extent 349 | that they are valid under applicable law. If additional permissions 350 | apply only to part of the Program, that part may be used separately 351 | under those permissions, but the entire Program remains governed by 352 | this License without regard to the additional permissions. 353 | 354 | When you convey a copy of a covered work, you may at your option 355 | remove any additional permissions from that copy, or from any part of 356 | it. (Additional permissions may be written to require their own 357 | removal in certain cases when you modify the work.) You may place 358 | additional permissions on material, added by you to a covered work, 359 | for which you have or can give appropriate copyright permission. 360 | 361 | Notwithstanding any other provision of this License, for material you 362 | add to a covered work, you may (if authorized by the copyright holders of 363 | that material) supplement the terms of this License with terms: 364 | 365 | a) Disclaiming warranty or limiting liability differently from the 366 | terms of sections 15 and 16 of this License; or 367 | 368 | b) Requiring preservation of specified reasonable legal notices or 369 | author attributions in that material or in the Appropriate Legal 370 | Notices displayed by works containing it; or 371 | 372 | c) Prohibiting misrepresentation of the origin of that material, or 373 | requiring that modified versions of such material be marked in 374 | reasonable ways as different from the original version; or 375 | 376 | d) Limiting the use for publicity purposes of names of licensors or 377 | authors of the material; or 378 | 379 | e) Declining to grant rights under trademark law for use of some 380 | trade names, trademarks, or service marks; or 381 | 382 | f) Requiring indemnification of licensors and authors of that 383 | material by anyone who conveys the material (or modified versions of 384 | it) with contractual assumptions of liability to the recipient, for 385 | any liability that these contractual assumptions directly impose on 386 | those licensors and authors. 387 | 388 | All other non-permissive additional terms are considered "further 389 | restrictions" within the meaning of section 10. If the Program as you 390 | received it, or any part of it, contains a notice stating that it is 391 | governed by this License along with a term that is a further 392 | restriction, you may remove that term. If a license document contains 393 | a further restriction but permits relicensing or conveying under this 394 | License, you may add to a covered work material governed by the terms 395 | of that license document, provided that the further restriction does 396 | not survive such relicensing or conveying. 397 | 398 | If you add terms to a covered work in accord with this section, you 399 | must place, in the relevant source files, a statement of the 400 | additional terms that apply to those files, or a notice indicating 401 | where to find the applicable terms. 402 | 403 | Additional terms, permissive or non-permissive, may be stated in the 404 | form of a separately written license, or stated as exceptions; 405 | the above requirements apply either way. 406 | 407 | 8. Termination. 408 | 409 | You may not propagate or modify a covered work except as expressly 410 | provided under this License. Any attempt otherwise to propagate or 411 | modify it is void, and will automatically terminate your rights under 412 | this License (including any patent licenses granted under the third 413 | paragraph of section 11). 414 | 415 | However, if you cease all violation of this License, then your 416 | license from a particular copyright holder is reinstated (a) 417 | provisionally, unless and until the copyright holder explicitly and 418 | finally terminates your license, and (b) permanently, if the copyright 419 | holder fails to notify you of the violation by some reasonable means 420 | prior to 60 days after the cessation. 421 | 422 | Moreover, your license from a particular copyright holder is 423 | reinstated permanently if the copyright holder notifies you of the 424 | violation by some reasonable means, this is the first time you have 425 | received notice of violation of this License (for any work) from that 426 | copyright holder, and you cure the violation prior to 30 days after 427 | your receipt of the notice. 428 | 429 | Termination of your rights under this section does not terminate the 430 | licenses of parties who have received copies or rights from you under 431 | this License. If your rights have been terminated and not permanently 432 | reinstated, you do not qualify to receive new licenses for the same 433 | material under section 10. 434 | 435 | 9. Acceptance Not Required for Having Copies. 436 | 437 | You are not required to accept this License in order to receive or 438 | run a copy of the Program. Ancillary propagation of a covered work 439 | occurring solely as a consequence of using peer-to-peer transmission 440 | to receive a copy likewise does not require acceptance. However, 441 | nothing other than this License grants you permission to propagate or 442 | modify any covered work. These actions infringe copyright if you do 443 | not accept this License. Therefore, by modifying or propagating a 444 | covered work, you indicate your acceptance of this License to do so. 445 | 446 | 10. Automatic Licensing of Downstream Recipients. 447 | 448 | Each time you convey a covered work, the recipient automatically 449 | receives a license from the original licensors, to run, modify and 450 | propagate that work, subject to this License. You are not responsible 451 | for enforcing compliance by third parties with this License. 452 | 453 | An "entity transaction" is a transaction transferring control of an 454 | organization, or substantially all assets of one, or subdividing an 455 | organization, or merging organizations. If propagation of a covered 456 | work results from an entity transaction, each party to that 457 | transaction who receives a copy of the work also receives whatever 458 | licenses to the work the party's predecessor in interest had or could 459 | give under the previous paragraph, plus a right to possession of the 460 | Corresponding Source of the work from the predecessor in interest, if 461 | the predecessor has it or can get it with reasonable efforts. 462 | 463 | You may not impose any further restrictions on the exercise of the 464 | rights granted or affirmed under this License. For example, you may 465 | not impose a license fee, royalty, or other charge for exercise of 466 | rights granted under this License, and you may not initiate litigation 467 | (including a cross-claim or counterclaim in a lawsuit) alleging that 468 | any patent claim is infringed by making, using, selling, offering for 469 | sale, or importing the Program or any portion of it. 470 | 471 | 11. Patents. 472 | 473 | A "contributor" is a copyright holder who authorizes use under this 474 | License of the Program or a work on which the Program is based. The 475 | work thus licensed is called the contributor's "contributor version". 476 | 477 | A contributor's "essential patent claims" are all patent claims 478 | owned or controlled by the contributor, whether already acquired or 479 | hereafter acquired, that would be infringed by some manner, permitted 480 | by this License, of making, using, or selling its contributor version, 481 | but do not include claims that would be infringed only as a 482 | consequence of further modification of the contributor version. For 483 | purposes of this definition, "control" includes the right to grant 484 | patent sublicenses in a manner consistent with the requirements of 485 | this License. 486 | 487 | Each contributor grants you a non-exclusive, worldwide, royalty-free 488 | patent license under the contributor's essential patent claims, to 489 | make, use, sell, offer for sale, import and otherwise run, modify and 490 | propagate the contents of its contributor version. 491 | 492 | In the following three paragraphs, a "patent license" is any express 493 | agreement or commitment, however denominated, not to enforce a patent 494 | (such as an express permission to practice a patent or covenant not to 495 | sue for patent infringement). To "grant" such a patent license to a 496 | party means to make such an agreement or commitment not to enforce a 497 | patent against the party. 498 | 499 | If you convey a covered work, knowingly relying on a patent license, 500 | and the Corresponding Source of the work is not available for anyone 501 | to copy, free of charge and under the terms of this License, through a 502 | publicly available network server or other readily accessible means, 503 | then you must either (1) cause the Corresponding Source to be so 504 | available, or (2) arrange to deprive yourself of the benefit of the 505 | patent license for this particular work, or (3) arrange, in a manner 506 | consistent with the requirements of this License, to extend the patent 507 | license to downstream recipients. "Knowingly relying" means you have 508 | actual knowledge that, but for the patent license, your conveying the 509 | covered work in a country, or your recipient's use of the covered work 510 | in a country, would infringe one or more identifiable patents in that 511 | country that you have reason to believe are valid. 512 | 513 | If, pursuant to or in connection with a single transaction or 514 | arrangement, you convey, or propagate by procuring conveyance of, a 515 | covered work, and grant a patent license to some of the parties 516 | receiving the covered work authorizing them to use, propagate, modify 517 | or convey a specific copy of the covered work, then the patent license 518 | you grant is automatically extended to all recipients of the covered 519 | work and works based on it. 520 | 521 | A patent license is "discriminatory" if it does not include within 522 | the scope of its coverage, prohibits the exercise of, or is 523 | conditioned on the non-exercise of one or more of the rights that are 524 | specifically granted under this License. You may not convey a covered 525 | work if you are a party to an arrangement with a third party that is 526 | in the business of distributing software, under which you make payment 527 | to the third party based on the extent of your activity of conveying 528 | the work, and under which the third party grants, to any of the 529 | parties who would receive the covered work from you, a discriminatory 530 | patent license (a) in connection with copies of the covered work 531 | conveyed by you (or copies made from those copies), or (b) primarily 532 | for and in connection with specific products or compilations that 533 | contain the covered work, unless you entered into that arrangement, 534 | or that patent license was granted, prior to 28 March 2007. 535 | 536 | Nothing in this License shall be construed as excluding or limiting 537 | any implied license or other defenses to infringement that may 538 | otherwise be available to you under applicable patent law. 539 | 540 | 12. No Surrender of Others' Freedom. 541 | 542 | If conditions are imposed on you (whether by court order, agreement or 543 | otherwise) that contradict the conditions of this License, they do not 544 | excuse you from the conditions of this License. If you cannot convey a 545 | covered work so as to satisfy simultaneously your obligations under this 546 | License and any other pertinent obligations, then as a consequence you may 547 | not convey it at all. For example, if you agree to terms that obligate you 548 | to collect a royalty for further conveying from those to whom you convey 549 | the Program, the only way you could satisfy both those terms and this 550 | License would be to refrain entirely from conveying the Program. 551 | 552 | 13. Use with the GNU Affero General Public License. 553 | 554 | Notwithstanding any other provision of this License, you have 555 | permission to link or combine any covered work with a work licensed 556 | under version 3 of the GNU Affero General Public License into a single 557 | combined work, and to convey the resulting work. The terms of this 558 | License will continue to apply to the part which is the covered work, 559 | but the special requirements of the GNU Affero General Public License, 560 | section 13, concerning interaction through a network will apply to the 561 | combination as such. 562 | 563 | 14. Revised Versions of this License. 564 | 565 | The Free Software Foundation may publish revised and/or new versions of 566 | the GNU General Public License from time to time. Such new versions will 567 | be similar in spirit to the present version, but may differ in detail to 568 | address new problems or concerns. 569 | 570 | Each version is given a distinguishing version number. If the 571 | Program specifies that a certain numbered version of the GNU General 572 | Public License "or any later version" applies to it, you have the 573 | option of following the terms and conditions either of that numbered 574 | version or of any later version published by the Free Software 575 | Foundation. If the Program does not specify a version number of the 576 | GNU General Public License, you may choose any version ever published 577 | by the Free Software Foundation. 578 | 579 | If the Program specifies that a proxy can decide which future 580 | versions of the GNU General Public License can be used, that proxy's 581 | public statement of acceptance of a version permanently authorizes you 582 | to choose that version for the Program. 583 | 584 | Later license versions may give you additional or different 585 | permissions. However, no additional obligations are imposed on any 586 | author or copyright holder as a result of your choosing to follow a 587 | later version. 588 | 589 | 15. Disclaimer of Warranty. 590 | 591 | THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY 592 | APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT 593 | HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY 594 | OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, 595 | THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 596 | PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM 597 | IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF 598 | ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 599 | 600 | 16. Limitation of Liability. 601 | 602 | IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING 603 | WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS 604 | THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY 605 | GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE 606 | USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF 607 | DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD 608 | PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), 609 | EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF 610 | SUCH DAMAGES. 611 | 612 | 17. Interpretation of Sections 15 and 16. 613 | 614 | If the disclaimer of warranty and limitation of liability provided 615 | above cannot be given local legal effect according to their terms, 616 | reviewing courts shall apply local law that most closely approximates 617 | an absolute waiver of all civil liability in connection with the 618 | Program, unless a warranty or assumption of liability accompanies a 619 | copy of the Program in return for a fee. 620 | 621 | END OF TERMS AND CONDITIONS 622 | 623 | How to Apply These Terms to Your New Programs 624 | 625 | If you develop a new program, and you want it to be of the greatest 626 | possible use to the public, the best way to achieve this is to make it 627 | free software which everyone can redistribute and change under these terms. 628 | 629 | To do so, attach the following notices to the program. It is safest 630 | to attach them to the start of each source file to most effectively 631 | state the exclusion of warranty; and each file should have at least 632 | the "copyright" line and a pointer to where the full notice is found. 633 | 634 | 635 | Copyright (C) 636 | 637 | This program is free software: you can redistribute it and/or modify 638 | it under the terms of the GNU General Public License as published by 639 | the Free Software Foundation, either version 3 of the License, or 640 | (at your option) any later version. 641 | 642 | This program is distributed in the hope that it will be useful, 643 | but WITHOUT ANY WARRANTY; without even the implied warranty of 644 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 645 | GNU General Public License for more details. 646 | 647 | You should have received a copy of the GNU General Public License 648 | along with this program. If not, see . 649 | 650 | Also add information on how to contact you by electronic and paper mail. 651 | 652 | If the program does terminal interaction, make it output a short 653 | notice like this when it starts in an interactive mode: 654 | 655 | Copyright (C) 656 | This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. 657 | This is free software, and you are welcome to redistribute it 658 | under certain conditions; type `show c' for details. 659 | 660 | The hypothetical commands `show w' and `show c' should show the appropriate 661 | parts of the General Public License. Of course, your program's commands 662 | might be different; for a GUI interface, you would use an "about box". 663 | 664 | You should also get your employer (if you work as a programmer) or school, 665 | if any, to sign a "copyright disclaimer" for the program, if necessary. 666 | For more information on this, and how to apply and follow the GNU GPL, see 667 | . 668 | 669 | The GNU General Public License does not permit incorporating your program 670 | into proprietary programs. If your program is a subroutine library, you 671 | may consider it more useful to permit linking proprietary applications with 672 | the library. If this is what you want to do, use the GNU Lesser General 673 | Public License instead of this License. But first, please read 674 | . 675 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # volest # 2 | 3 | ## Learn how to apply this code to your own options trading ## 4 | 5 | [Getting Started With Python for Quant Finance](https://gettingstartedwithpythonforquantfinance.com) is the cohort-based course and community that will take you from complete beginner to up and running with Python for quant finance in 30 days. 6 | 7 | ## [A complete set of volatility estimators based on Euan Sinclair's Volatility Trading](https://amzn.to/3UhddGP) ## 8 | 9 | The original version incorporated network data acquisition from Yahoo!Finance 10 | from `pandas_datareader`. Yahoo! changed their API and broke `pandas_datareader`. 11 | 12 | The changes allow you to specify your own data so you're not tied into equity 13 | data from Yahoo! finance. If you're still using equity data, just download 14 | a CSV from finance.yahoo.com and use the `data.yahoo_data_helper` method 15 | to form the data properly. 16 | 17 | ### Volatility estimators include: ### 18 | 19 | * Garman Klass 20 | * Hodges Tompkins 21 | * Parkinson 22 | * Rogers Satchell 23 | * Yang Zhang 24 | * Standard Deviation 25 | 26 | Also includes 27 | 28 | * Skew 29 | * Kurtosis 30 | * Correlation 31 | 32 | For each of the estimators, plot: 33 | 34 | * Probability cones 35 | * Rolling quantiles 36 | * Rolling extremes 37 | * Rolling descriptive statistics 38 | * Histogram 39 | * Comparison against arbirary comparable 40 | * Correlation against arbirary comparable 41 | * Regression against arbirary comparable 42 | 43 | Create a term sheet with all the metrics printed to a PDF. 44 | 45 | ### Page 1 - Volatility cones ### 46 | ![Capture-1](docs/img/1.png) 47 | 48 | ### Page 2 - Volatility rolling percentiles ### 49 | ![Capture-2](docs/img/2.png) 50 | 51 | ### Page 3 - Volatility rolling min and max ### 52 | ![Capture-3](docs/img/3.png) 53 | 54 | ### Page 4 - Volatility rolling mean, standard deviation and zscore ### 55 | ![Capture-4](docs/img/4.png) 56 | 57 | ### Page 5 - Volatility distribution ### 58 | ![Capture-5](docs/img/5.png) 59 | 60 | ### Page 6 - Volatility, benchmark volatility and ratio### 61 | ![Capture-6](docs/img/6.png) 62 | 63 | ### Page 7 - Volatility rolling correlation with benchmark ### 64 | ![Capture-7](docs/img/7.png) 65 | 66 | ### Page 3 - Volatility OLS results ### 67 | ![Capture-8](docs/img/8.png) 68 | 69 | Example usage: 70 | 71 | ```python 72 | 73 | from volatility import volest 74 | import yfinance as yf 75 | 76 | # data 77 | symbol = 'JPM' 78 | bench = 'SPY' 79 | estimator = 'GarmanKlass' 80 | 81 | # estimator windows 82 | window = 30 83 | windows = [30, 60, 90, 120] 84 | quantiles = [0.25, 0.75] 85 | bins = 100 86 | normed = True 87 | 88 | # use the yahoo helper to correctly format data from finance.yahoo.com 89 | jpm_price_data = yf.Ticker(symbol).history(period="5y") 90 | jpm_price_data.symbol = symbol 91 | spx_price_data = yf.Ticker(bench).history(period="5y") 92 | spx_price_data.symbol = bench 93 | 94 | # initialize class 95 | vol = volest.VolatilityEstimator( 96 | price_data=jpm_price_data, 97 | estimator=estimator, 98 | bench_data=spx_price_data 99 | ) 100 | 101 | # call plt.show() on any of the below... 102 | _, plt = vol.cones(windows=windows, quantiles=quantiles) 103 | _, plt = vol.rolling_quantiles(window=window, quantiles=quantiles) 104 | _, plt = vol.rolling_extremes(window=window) 105 | _, plt = vol.rolling_descriptives(window=window) 106 | _, plt = vol.histogram(window=window, bins=bins, normed=normed) 107 | 108 | _, plt = vol.benchmark_compare(window=window) 109 | _, plt = vol.benchmark_correlation(window=window) 110 | 111 | # ... or create a pdf term sheet with all metrics in term-sheets/ 112 | vol.term_sheet( 113 | window, 114 | windows, 115 | quantiles, 116 | bins, 117 | normed 118 | ) 119 | 120 | ``` 121 | 122 | Hit me on twitter with comments, questions, issues @jasonstrimpel 123 | -------------------------------------------------------------------------------- /docs/img/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jasonstrimpel/volatility-trading/03186089284600461acdaa0e64b9a7d83bf9badd/docs/img/1.png -------------------------------------------------------------------------------- /docs/img/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jasonstrimpel/volatility-trading/03186089284600461acdaa0e64b9a7d83bf9badd/docs/img/2.png -------------------------------------------------------------------------------- /docs/img/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jasonstrimpel/volatility-trading/03186089284600461acdaa0e64b9a7d83bf9badd/docs/img/3.png -------------------------------------------------------------------------------- /docs/img/4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jasonstrimpel/volatility-trading/03186089284600461acdaa0e64b9a7d83bf9badd/docs/img/4.png -------------------------------------------------------------------------------- /docs/img/5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jasonstrimpel/volatility-trading/03186089284600461acdaa0e64b9a7d83bf9badd/docs/img/5.png -------------------------------------------------------------------------------- /docs/img/6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jasonstrimpel/volatility-trading/03186089284600461acdaa0e64b9a7d83bf9badd/docs/img/6.png -------------------------------------------------------------------------------- /docs/img/7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jasonstrimpel/volatility-trading/03186089284600461acdaa0e64b9a7d83bf9badd/docs/img/7.png -------------------------------------------------------------------------------- /docs/img/8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jasonstrimpel/volatility-trading/03186089284600461acdaa0e64b9a7d83bf9badd/docs/img/8.png -------------------------------------------------------------------------------- /setup.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | from setuptools import setup 3 | 4 | setup( 5 | name='volatility-trading', 6 | version='0.0.1', 7 | url='https://github.com/jasonstrimpel/volatility-trading/', 8 | license='GPL-3.0-or-later', 9 | packages=['volatility','volatility/models'], 10 | ) 11 | -------------------------------------------------------------------------------- /term-sheets/JPM_termsheet_20161019.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jasonstrimpel/volatility-trading/03186089284600461acdaa0e64b9a7d83bf9badd/term-sheets/JPM_termsheet_20161019.pdf -------------------------------------------------------------------------------- /tests/BENCH.csv: -------------------------------------------------------------------------------- 1 | Date,Open,High,Low,Close,Adj Close,Volume 2 | 2014-07-21,1976.930054,1976.930054,1965.770020,1973.630005,1973.630005,2611160000 3 | 2014-07-22,1975.650024,1986.239990,1975.650024,1983.530029,1983.530029,2890480000 4 | 2014-07-23,1985.319946,1989.229980,1982.439941,1987.010010,1987.010010,2869720000 5 | 2014-07-24,1988.069946,1991.390015,1985.790039,1987.979980,1987.979980,3203530000 6 | 2014-07-25,1984.599976,1984.599976,1974.369995,1978.339966,1978.339966,2638960000 7 | 2014-07-28,1978.250000,1981.520020,1967.310059,1978.910034,1978.910034,2803320000 8 | 2014-07-29,1980.030029,1984.849976,1969.949951,1969.949951,1969.949951,3183300000 9 | 2014-07-30,1973.209961,1978.900024,1962.420044,1970.069946,1970.069946,3448250000 10 | 2014-07-31,1965.140015,1965.140015,1930.670044,1930.670044,1930.670044,4193000000 11 | 2014-08-01,1929.800049,1937.349976,1916.369995,1925.150024,1925.150024,3789660000 12 | 2014-08-04,1926.619995,1942.920044,1921.199951,1938.989990,1938.989990,3072920000 13 | 2014-08-05,1936.339966,1936.339966,1913.770020,1920.209961,1920.209961,3462520000 14 | 2014-08-06,1917.290039,1927.910034,1911.449951,1920.239990,1920.239990,3539150000 15 | 2014-08-07,1923.030029,1928.890015,1904.780029,1909.569946,1909.569946,3230520000 16 | 2014-08-08,1910.349976,1932.380005,1909.010010,1931.589966,1931.589966,2902280000 17 | 2014-08-11,1933.430054,1944.900024,1933.430054,1936.920044,1936.920044,2784890000 18 | 2014-08-12,1935.729980,1939.650024,1928.290039,1933.750000,1933.750000,2611700000 19 | 2014-08-13,1935.599976,1948.410034,1935.599976,1946.719971,1946.719971,2718020000 20 | 2014-08-14,1947.410034,1955.229980,1947.410034,1955.180054,1955.180054,2609460000 21 | 2014-08-15,1958.869995,1964.040039,1941.500000,1955.060059,1955.060059,3023380000 22 | 2014-08-18,1958.359985,1971.989990,1958.359985,1971.739990,1971.739990,2638160000 23 | 2014-08-19,1972.729980,1982.569946,1972.729980,1981.599976,1981.599976,2656430000 24 | 2014-08-20,1980.459961,1988.569946,1977.680054,1986.510010,1986.510010,2579560000 25 | 2014-08-21,1986.819946,1994.760010,1986.819946,1992.369995,1992.369995,2638920000 26 | 2014-08-22,1992.599976,1993.540039,1984.760010,1988.400024,1988.400024,2301860000 27 | 2014-08-25,1991.739990,2001.949951,1991.739990,1997.920044,1997.920044,2233880000 28 | 2014-08-26,1998.589966,2005.040039,1998.589966,2000.020020,2000.020020,2451950000 29 | 2014-08-27,2000.540039,2002.140015,1996.199951,2000.119995,2000.119995,2344350000 30 | 2014-08-28,1997.420044,1998.550049,1990.520020,1996.739990,1996.739990,2282400000 31 | 2014-08-29,1998.449951,2003.380005,1994.650024,2003.369995,2003.369995,2259130000 32 | 2014-09-02,2004.069946,2006.119995,1994.849976,2002.280029,2002.280029,2819980000 33 | 2014-09-03,2003.569946,2009.280029,1998.140015,2000.719971,2000.719971,2809980000 34 | 2014-09-04,2001.670044,2011.170044,1992.540039,1997.650024,1997.650024,3072410000 35 | 2014-09-05,1998.000000,2007.709961,1990.099976,2007.709961,2007.709961,2818300000 36 | 2014-09-08,2007.170044,2007.170044,1995.599976,2001.540039,2001.540039,2789090000 37 | 2014-09-09,2000.729980,2001.010010,1984.609985,1988.439941,1988.439941,2882830000 38 | 2014-09-10,1988.410034,1996.660034,1982.989990,1995.689941,1995.689941,2912430000 39 | 2014-09-11,1992.849976,1997.650024,1985.930054,1997.449951,1997.449951,2941690000 40 | 2014-09-12,1996.739990,1996.739990,1980.260010,1985.540039,1985.540039,3206570000 41 | 2014-09-15,1986.040039,1987.180054,1978.479980,1984.130005,1984.130005,2776530000 42 | 2014-09-16,1981.930054,2002.280029,1979.060059,1998.979980,1998.979980,3160310000 43 | 2014-09-17,1999.300049,2010.739990,1993.290039,2001.569946,2001.569946,3209420000 44 | 2014-09-18,2003.069946,2012.339966,2003.069946,2011.359985,2011.359985,3235340000 45 | 2014-09-19,2012.739990,2019.260010,2006.589966,2010.400024,2010.400024,4880220000 46 | 2014-09-22,2009.079956,2009.079956,1991.010010,1994.290039,1994.290039,3349670000 47 | 2014-09-23,1992.780029,1995.410034,1982.770020,1982.770020,1982.770020,3279350000 48 | 2014-09-24,1983.339966,1999.790039,1978.630005,1998.300049,1998.300049,3313850000 49 | 2014-09-25,1997.319946,1997.319946,1965.989990,1965.989990,1965.989990,3273050000 50 | 2014-09-26,1966.219971,1986.369995,1966.219971,1982.849976,1982.849976,2929440000 51 | 2014-09-29,1978.959961,1981.280029,1964.040039,1977.800049,1977.800049,3094440000 52 | 2014-09-30,1978.209961,1985.170044,1968.959961,1972.290039,1972.290039,3951100000 53 | 2014-10-01,1971.439941,1971.439941,1941.719971,1946.160034,1946.160034,4188590000 54 | 2014-10-02,1945.829956,1952.319946,1926.030029,1946.170044,1946.170044,4012510000 55 | 2014-10-03,1948.119995,1971.189941,1948.119995,1967.900024,1967.900024,3560970000 56 | 2014-10-06,1970.010010,1977.839966,1958.430054,1964.819946,1964.819946,3358220000 57 | 2014-10-07,1962.359985,1962.359985,1934.869995,1935.099976,1935.099976,3687870000 58 | 2014-10-08,1935.550049,1970.359985,1925.250000,1968.890015,1968.890015,4441890000 59 | 2014-10-09,1967.680054,1967.680054,1927.560059,1928.209961,1928.209961,4344020000 60 | 2014-10-10,1925.630005,1936.979980,1906.050049,1906.130005,1906.130005,4550540000 61 | 2014-10-13,1905.650024,1912.089966,1874.140015,1874.739990,1874.739990,4352580000 62 | 2014-10-14,1877.109985,1898.709961,1871.790039,1877.699951,1877.699951,4812010000 63 | 2014-10-15,1874.180054,1874.180054,1820.660034,1862.489990,1862.489990,6090800000 64 | 2014-10-16,1855.949951,1876.010010,1835.020020,1862.760010,1862.760010,5073150000 65 | 2014-10-17,1864.910034,1898.160034,1864.910034,1886.760010,1886.760010,4482120000 66 | 2014-10-20,1885.619995,1905.030029,1882.300049,1904.010010,1904.010010,3331210000 67 | 2014-10-21,1909.380005,1942.449951,1909.380005,1941.280029,1941.280029,3987090000 68 | 2014-10-22,1941.290039,1949.310059,1926.829956,1927.109985,1927.109985,3761930000 69 | 2014-10-23,1931.020020,1961.949951,1931.020020,1950.819946,1950.819946,3789250000 70 | 2014-10-24,1951.589966,1965.270020,1946.270020,1964.579956,1964.579956,3078380000 71 | 2014-10-27,1962.969971,1964.640015,1951.369995,1961.630005,1961.630005,3538860000 72 | 2014-10-28,1964.140015,1985.050049,1964.140015,1985.050049,1985.050049,3653260000 73 | 2014-10-29,1983.290039,1991.400024,1969.040039,1982.300049,1982.300049,3740350000 74 | 2014-10-30,1979.489990,1999.400024,1974.750000,1994.650024,1994.650024,3586150000 75 | 2014-10-31,2001.199951,2018.189941,2001.199951,2018.050049,2018.050049,4292290000 76 | 2014-11-03,2018.209961,2024.459961,2013.680054,2017.810059,2017.810059,3555440000 77 | 2014-11-04,2015.810059,2015.979980,2001.010010,2012.099976,2012.099976,3956260000 78 | 2014-11-05,2015.290039,2023.770020,2014.420044,2023.569946,2023.569946,3766590000 79 | 2014-11-06,2023.329956,2031.609985,2015.859985,2031.209961,2031.209961,3669770000 80 | 2014-11-07,2032.359985,2034.260010,2025.069946,2031.920044,2031.920044,3704280000 81 | 2014-11-10,2032.010010,2038.699951,2030.170044,2038.260010,2038.260010,3284940000 82 | 2014-11-11,2038.199951,2041.280029,2035.280029,2039.680054,2039.680054,2958320000 83 | 2014-11-12,2037.750000,2040.329956,2031.949951,2038.250000,2038.250000,3246650000 84 | 2014-11-13,2039.209961,2046.180054,2030.439941,2039.329956,2039.329956,3455270000 85 | 2014-11-14,2039.739990,2042.219971,2035.199951,2039.819946,2039.819946,3227130000 86 | 2014-11-17,2038.290039,2043.069946,2034.459961,2041.319946,2041.319946,3152890000 87 | 2014-11-18,2041.479980,2056.080078,2041.479980,2051.800049,2051.800049,3416190000 88 | 2014-11-19,2051.159912,2052.139893,2040.369995,2048.719971,2048.719971,3390850000 89 | 2014-11-20,2045.869995,2053.840088,2040.489990,2052.750000,2052.750000,3128290000 90 | 2014-11-21,2057.459961,2071.459961,2056.750000,2063.500000,2063.500000,3916420000 91 | 2014-11-24,2065.070068,2070.169922,2065.070068,2069.409912,2069.409912,3128060000 92 | 2014-11-25,2070.149902,2074.209961,2064.750000,2067.030029,2067.030029,3392940000 93 | 2014-11-26,2067.360107,2073.290039,2066.620117,2072.830078,2072.830078,2745260000 94 | 2014-11-28,2074.780029,2075.760010,2065.060059,2067.560059,2067.560059,2504640000 95 | 2014-12-01,2065.780029,2065.780029,2049.570068,2053.439941,2053.439941,4159010000 96 | 2014-12-02,2053.770020,2068.770020,2053.770020,2066.550049,2066.550049,3686650000 97 | 2014-12-03,2067.449951,2076.280029,2066.649902,2074.330078,2074.330078,3612680000 98 | 2014-12-04,2073.639893,2077.340088,2062.340088,2071.919922,2071.919922,3408340000 99 | 2014-12-05,2072.780029,2079.469971,2070.810059,2075.370117,2075.370117,3419620000 100 | 2014-12-08,2074.840088,2075.780029,2054.270020,2060.310059,2060.310059,3800990000 101 | 2014-12-09,2056.550049,2060.600098,2034.170044,2059.820068,2059.820068,3970150000 102 | 2014-12-10,2058.860107,2058.860107,2024.260010,2026.140015,2026.140015,4114440000 103 | 2014-12-11,2027.920044,2055.530029,2027.920044,2035.329956,2035.329956,3917950000 104 | 2014-12-12,2030.359985,2032.250000,2002.329956,2002.329956,2002.329956,4157650000 105 | 2014-12-15,2005.030029,2018.689941,1982.260010,1989.630005,1989.630005,4361990000 106 | 2014-12-16,1986.709961,2016.890015,1972.560059,1972.739990,1972.739990,4958680000 107 | 2014-12-17,1973.770020,2016.750000,1973.770020,2012.890015,2012.890015,4942370000 108 | 2014-12-18,2018.979980,2061.229980,2018.979980,2061.229980,2061.229980,4703380000 109 | 2014-12-19,2061.040039,2077.850098,2061.030029,2070.649902,2070.649902,6465530000 110 | 2014-12-22,2069.280029,2078.760010,2069.280029,2078.540039,2078.540039,3369520000 111 | 2014-12-23,2081.479980,2086.729980,2079.770020,2082.169922,2082.169922,3043950000 112 | 2014-12-24,2083.250000,2087.560059,2081.860107,2081.879883,2081.879883,1416980000 113 | 2014-12-26,2084.300049,2092.699951,2084.300049,2088.770020,2088.770020,1735230000 114 | 2014-12-29,2087.629883,2093.550049,2085.750000,2090.570068,2090.570068,2452360000 115 | 2014-12-30,2088.489990,2088.489990,2079.530029,2080.350098,2080.350098,2440280000 116 | 2014-12-31,2082.110107,2085.580078,2057.939941,2058.899902,2058.899902,2606070000 117 | 2015-01-02,2058.899902,2072.360107,2046.040039,2058.199951,2058.199951,2708700000 118 | 2015-01-05,2054.439941,2054.439941,2017.339966,2020.579956,2020.579956,3799120000 119 | 2015-01-06,2022.150024,2030.250000,1992.439941,2002.609985,2002.609985,4460110000 120 | 2015-01-07,2005.550049,2029.609985,2005.550049,2025.900024,2025.900024,3805480000 121 | 2015-01-08,2030.609985,2064.080078,2030.609985,2062.139893,2062.139893,3934010000 122 | 2015-01-09,2063.449951,2064.429932,2038.329956,2044.810059,2044.810059,3364140000 123 | 2015-01-12,2046.130005,2049.300049,2022.579956,2028.260010,2028.260010,3456460000 124 | 2015-01-13,2031.579956,2056.929932,2008.250000,2023.030029,2023.030029,4107300000 125 | 2015-01-14,2018.400024,2018.400024,1988.439941,2011.270020,2011.270020,4378680000 126 | 2015-01-15,2013.750000,2021.349976,1991.469971,1992.670044,1992.670044,4276720000 127 | 2015-01-16,1992.250000,2020.459961,1988.119995,2019.420044,2019.420044,4056410000 128 | 2015-01-20,2020.760010,2028.939941,2004.489990,2022.550049,2022.550049,3944340000 129 | 2015-01-21,2020.189941,2038.290039,2012.040039,2032.119995,2032.119995,3730070000 130 | 2015-01-22,2034.300049,2064.620117,2026.380005,2063.149902,2063.149902,4176050000 131 | 2015-01-23,2062.979980,2062.979980,2050.540039,2051.820068,2051.820068,3573560000 132 | 2015-01-26,2050.419922,2057.620117,2040.969971,2057.090088,2057.090088,3465760000 133 | 2015-01-27,2047.859985,2047.859985,2019.910034,2029.550049,2029.550049,3329810000 134 | 2015-01-28,2032.339966,2042.489990,2001.489990,2002.160034,2002.160034,4067530000 135 | 2015-01-29,2002.449951,2024.640015,1989.180054,2021.250000,2021.250000,4127140000 136 | 2015-01-30,2019.349976,2023.319946,1993.380005,1994.989990,1994.989990,4568650000 137 | 2015-02-02,1996.670044,2021.660034,1980.900024,2020.849976,2020.849976,4008330000 138 | 2015-02-03,2022.709961,2050.300049,2022.709961,2050.030029,2050.030029,4615900000 139 | 2015-02-04,2048.860107,2054.739990,2036.719971,2041.510010,2041.510010,4141920000 140 | 2015-02-05,2043.449951,2063.550049,2043.449951,2062.520020,2062.520020,3821990000 141 | 2015-02-06,2062.280029,2072.399902,2049.969971,2055.469971,2055.469971,4232970000 142 | 2015-02-09,2053.469971,2056.159912,2041.880005,2046.739990,2046.739990,3549540000 143 | 2015-02-10,2049.379883,2070.860107,2048.620117,2068.590088,2068.590088,3669850000 144 | 2015-02-11,2068.550049,2073.479980,2057.989990,2068.530029,2068.530029,3596860000 145 | 2015-02-12,2069.979980,2088.530029,2069.979980,2088.479980,2088.479980,3788350000 146 | 2015-02-13,2088.780029,2097.030029,2086.699951,2096.989990,2096.989990,3527450000 147 | 2015-02-17,2096.469971,2101.300049,2089.800049,2100.340088,2100.340088,3361750000 148 | 2015-02-18,2099.159912,2100.229980,2092.149902,2099.679932,2099.679932,3370020000 149 | 2015-02-19,2099.250000,2102.129883,2090.790039,2097.449951,2097.449951,3247100000 150 | 2015-02-20,2097.649902,2110.610107,2085.439941,2110.300049,2110.300049,3281600000 151 | 2015-02-23,2109.830078,2110.050049,2103.000000,2109.659912,2109.659912,3093680000 152 | 2015-02-24,2109.100098,2117.939941,2105.870117,2115.479980,2115.479980,3199840000 153 | 2015-02-25,2115.300049,2119.590088,2109.889893,2113.860107,2113.860107,3312340000 154 | 2015-02-26,2113.909912,2113.909912,2103.760010,2110.739990,2110.739990,3408690000 155 | 2015-02-27,2110.879883,2112.739990,2103.750000,2104.500000,2104.500000,3547380000 156 | 2015-03-02,2105.229980,2117.520020,2104.500000,2117.389893,2117.389893,3409490000 157 | 2015-03-03,2115.760010,2115.760010,2098.260010,2107.780029,2107.780029,3262300000 158 | 2015-03-04,2107.719971,2107.719971,2094.489990,2098.530029,2098.530029,3421110000 159 | 2015-03-05,2098.540039,2104.250000,2095.219971,2101.040039,2101.040039,3103030000 160 | 2015-03-06,2100.909912,2100.909912,2067.270020,2071.260010,2071.260010,3853570000 161 | 2015-03-09,2072.250000,2083.489990,2072.209961,2079.429932,2079.429932,3349090000 162 | 2015-03-10,2076.139893,2076.139893,2044.160034,2044.160034,2044.160034,3668900000 163 | 2015-03-11,2044.689941,2050.080078,2039.689941,2040.239990,2040.239990,3406570000 164 | 2015-03-12,2041.099976,2066.409912,2041.099976,2065.949951,2065.949951,3405860000 165 | 2015-03-13,2064.560059,2064.560059,2041.170044,2053.399902,2053.399902,3498560000 166 | 2015-03-16,2055.350098,2081.409912,2055.350098,2081.189941,2081.189941,3295600000 167 | 2015-03-17,2080.590088,2080.590088,2065.080078,2074.280029,2074.280029,3221840000 168 | 2015-03-18,2072.840088,2106.850098,2061.229980,2099.500000,2099.500000,4128210000 169 | 2015-03-19,2098.689941,2098.689941,2085.560059,2089.270020,2089.270020,3305220000 170 | 2015-03-20,2090.320068,2113.919922,2090.320068,2108.100098,2108.100098,5554120000 171 | 2015-03-23,2107.989990,2114.860107,2104.419922,2104.419922,2104.419922,3267960000 172 | 2015-03-24,2103.939941,2107.629883,2091.500000,2091.500000,2091.500000,3189820000 173 | 2015-03-25,2093.100098,2097.429932,2061.050049,2061.050049,2061.050049,3521140000 174 | 2015-03-26,2059.939941,2067.149902,2045.500000,2056.149902,2056.149902,3510670000 175 | 2015-03-27,2055.780029,2062.830078,2052.959961,2061.020020,2061.020020,3008550000 176 | 2015-03-30,2064.110107,2088.969971,2064.110107,2086.239990,2086.239990,2917690000 177 | 2015-03-31,2084.050049,2084.050049,2067.040039,2067.889893,2067.889893,3376550000 178 | 2015-04-01,2067.629883,2067.629883,2048.379883,2059.689941,2059.689941,3543270000 179 | 2015-04-02,2060.030029,2072.169922,2057.320068,2066.959961,2066.959961,3095960000 180 | 2015-04-06,2064.870117,2086.989990,2056.520020,2080.620117,2080.620117,3302970000 181 | 2015-04-07,2080.790039,2089.810059,2076.100098,2076.330078,2076.330078,3065510000 182 | 2015-04-08,2076.939941,2086.689941,2073.300049,2081.899902,2081.899902,3265330000 183 | 2015-04-09,2081.290039,2093.310059,2074.290039,2091.179932,2091.179932,3172360000 184 | 2015-04-10,2091.510010,2102.610107,2091.510010,2102.060059,2102.060059,3156200000 185 | 2015-04-13,2102.030029,2107.649902,2092.330078,2092.429932,2092.429932,2908420000 186 | 2015-04-14,2092.280029,2098.620117,2083.239990,2095.840088,2095.840088,3301270000 187 | 2015-04-15,2097.820068,2111.909912,2097.820068,2106.629883,2106.629883,4013760000 188 | 2015-04-16,2105.959961,2111.300049,2100.020020,2104.989990,2104.989990,3434120000 189 | 2015-04-17,2102.580078,2102.580078,2072.370117,2081.179932,2081.179932,3627600000 190 | 2015-04-20,2084.110107,2103.939941,2084.110107,2100.399902,2100.399902,3000160000 191 | 2015-04-21,2102.820068,2109.639893,2094.379883,2097.290039,2097.290039,3243410000 192 | 2015-04-22,2098.270020,2109.979980,2091.050049,2107.959961,2107.959961,3348480000 193 | 2015-04-23,2107.209961,2120.489990,2103.189941,2112.929932,2112.929932,3636670000 194 | 2015-04-24,2112.800049,2120.919922,2112.800049,2117.689941,2117.689941,3375780000 195 | 2015-04-27,2119.290039,2125.919922,2107.040039,2108.919922,2108.919922,3438750000 196 | 2015-04-28,2108.350098,2116.040039,2094.889893,2114.760010,2114.760010,3546270000 197 | 2015-04-29,2112.489990,2113.649902,2097.409912,2106.850098,2106.850098,4074970000 198 | 2015-04-30,2105.520020,2105.520020,2077.590088,2085.510010,2085.510010,4509680000 199 | 2015-05-01,2087.379883,2108.409912,2087.379883,2108.290039,2108.290039,3379390000 200 | 2015-05-04,2110.229980,2120.949951,2110.229980,2114.489990,2114.489990,3091580000 201 | 2015-05-05,2112.629883,2115.239990,2088.459961,2089.459961,2089.459961,3793950000 202 | 2015-05-06,2091.260010,2098.419922,2067.929932,2080.149902,2080.149902,3792210000 203 | 2015-05-07,2079.959961,2092.899902,2074.989990,2088.000000,2088.000000,3676640000 204 | 2015-05-08,2092.129883,2117.659912,2092.129883,2116.100098,2116.100098,3399440000 205 | 2015-05-11,2115.560059,2117.689941,2104.580078,2105.330078,2105.330078,2992670000 206 | 2015-05-12,2102.870117,2105.060059,2085.570068,2099.120117,2099.120117,3139520000 207 | 2015-05-13,2099.620117,2110.189941,2096.040039,2098.479980,2098.479980,3374260000 208 | 2015-05-14,2100.429932,2121.449951,2100.429932,2121.100098,2121.100098,3225740000 209 | 2015-05-15,2122.070068,2123.889893,2116.810059,2122.729980,2122.729980,3092080000 210 | 2015-05-18,2121.300049,2131.780029,2120.010010,2129.199951,2129.199951,2888190000 211 | 2015-05-19,2129.449951,2133.020020,2124.500000,2127.830078,2127.830078,3296030000 212 | 2015-05-20,2127.790039,2134.719971,2122.590088,2125.850098,2125.850098,3025880000 213 | 2015-05-21,2125.550049,2134.280029,2122.949951,2130.820068,2130.820068,3070460000 214 | 2015-05-22,2130.360107,2132.149902,2126.060059,2126.060059,2126.060059,2571860000 215 | 2015-05-26,2125.340088,2125.340088,2099.179932,2104.199951,2104.199951,3342130000 216 | 2015-05-27,2105.129883,2126.219971,2105.129883,2123.479980,2123.479980,3127960000 217 | 2015-05-28,2122.270020,2122.270020,2112.860107,2120.790039,2120.790039,2980350000 218 | 2015-05-29,2120.659912,2120.659912,2104.889893,2107.389893,2107.389893,3927390000 219 | 2015-06-01,2108.639893,2119.149902,2102.540039,2111.729980,2111.729980,3011710000 220 | 2015-06-02,2110.409912,2117.590088,2099.139893,2109.600098,2109.600098,3049350000 221 | 2015-06-03,2110.639893,2121.919922,2109.610107,2114.070068,2114.070068,3099980000 222 | 2015-06-04,2112.350098,2112.889893,2093.229980,2095.840088,2095.840088,3200050000 223 | 2015-06-05,2095.090088,2100.989990,2085.669922,2092.830078,2092.830078,3243690000 224 | 2015-06-08,2092.340088,2093.010010,2079.110107,2079.280029,2079.280029,2917150000 225 | 2015-06-09,2079.070068,2085.620117,2072.139893,2080.149902,2080.149902,3034580000 226 | 2015-06-10,2081.120117,2108.500000,2081.120117,2105.199951,2105.199951,3414320000 227 | 2015-06-11,2106.239990,2115.020020,2106.239990,2108.860107,2108.860107,3128600000 228 | 2015-06-12,2107.429932,2107.429932,2091.330078,2094.110107,2094.110107,2719400000 229 | 2015-06-15,2091.340088,2091.340088,2072.489990,2084.429932,2084.429932,3061570000 230 | 2015-06-16,2084.260010,2097.399902,2082.100098,2096.290039,2096.290039,2919900000 231 | 2015-06-17,2097.399902,2106.790039,2088.860107,2100.439941,2100.439941,3222240000 232 | 2015-06-18,2101.580078,2126.649902,2101.580078,2121.239990,2121.239990,3520360000 233 | 2015-06-19,2121.060059,2121.639893,2109.449951,2109.989990,2109.989990,4449810000 234 | 2015-06-22,2112.500000,2129.870117,2112.500000,2122.850098,2122.850098,3030020000 235 | 2015-06-23,2123.159912,2128.030029,2119.889893,2124.199951,2124.199951,3091190000 236 | 2015-06-24,2123.649902,2125.100098,2108.580078,2108.580078,2108.580078,3102480000 237 | 2015-06-25,2109.959961,2116.040039,2101.780029,2102.310059,2102.310059,3214610000 238 | 2015-06-26,2102.620117,2108.919922,2095.379883,2101.489990,2101.489990,5025470000 239 | 2015-06-29,2098.629883,2098.629883,2056.639893,2057.639893,2057.639893,3678960000 240 | 2015-06-30,2061.189941,2074.280029,2056.320068,2063.110107,2063.110107,4078540000 241 | 2015-07-01,2067.000000,2082.780029,2067.000000,2077.419922,2077.419922,3727260000 242 | 2015-07-02,2078.030029,2085.060059,2071.020020,2076.780029,2076.780029,2996540000 243 | 2015-07-06,2073.949951,2078.610107,2058.399902,2068.760010,2068.760010,3486360000 244 | 2015-07-07,2069.520020,2083.739990,2044.020020,2081.340088,2081.340088,4458660000 245 | 2015-07-08,2077.659912,2077.659912,2044.660034,2046.680054,2046.680054,3608780000 246 | 2015-07-09,2049.729980,2074.280029,2049.729980,2051.310059,2051.310059,3446810000 247 | 2015-07-10,2052.739990,2081.310059,2052.739990,2076.620117,2076.620117,3065070000 248 | 2015-07-13,2080.030029,2100.669922,2080.030029,2099.600098,2099.600098,3096730000 249 | 2015-07-14,2099.719971,2111.979980,2098.179932,2108.949951,2108.949951,3002120000 250 | 2015-07-15,2109.010010,2114.139893,2102.489990,2107.399902,2107.399902,3261810000 251 | 2015-07-16,2110.550049,2124.419922,2110.550049,2124.290039,2124.290039,3227080000 252 | 2015-07-17,2126.800049,2128.909912,2119.879883,2126.639893,2126.639893,3362750000 253 | 2015-07-20,2126.850098,2132.820068,2123.659912,2128.280029,2128.280029,3245870000 254 | 2015-07-21,2127.550049,2128.489990,2115.399902,2119.209961,2119.209961,3343690000 255 | 2015-07-22,2118.209961,2118.510010,2110.000000,2114.149902,2114.149902,3694070000 256 | 2015-07-23,2114.159912,2116.870117,2098.629883,2102.149902,2102.149902,3772810000 257 | 2015-07-24,2102.239990,2106.010010,2077.090088,2079.649902,2079.649902,3870040000 258 | 2015-07-27,2078.189941,2078.189941,2063.520020,2067.639893,2067.639893,3836750000 259 | 2015-07-28,2070.750000,2095.600098,2069.090088,2093.250000,2093.250000,4117740000 260 | 2015-07-29,2094.699951,2110.600098,2094.080078,2108.570068,2108.570068,4038900000 261 | 2015-07-30,2106.780029,2110.479980,2094.969971,2108.629883,2108.629883,3579410000 262 | 2015-07-31,2111.600098,2114.239990,2102.070068,2103.840088,2103.840088,3681340000 263 | 2015-08-03,2104.489990,2105.699951,2087.310059,2098.040039,2098.040039,3476770000 264 | 2015-08-04,2097.679932,2102.510010,2088.600098,2093.320068,2093.320068,3546710000 265 | 2015-08-05,2095.270020,2112.659912,2095.270020,2099.840088,2099.840088,3968680000 266 | 2015-08-06,2100.750000,2103.320068,2075.530029,2083.560059,2083.560059,4246570000 267 | 2015-08-07,2082.610107,2082.610107,2067.909912,2077.570068,2077.570068,3602320000 268 | 2015-08-10,2080.979980,2105.350098,2080.979980,2104.179932,2104.179932,3514460000 269 | 2015-08-11,2102.659912,2102.659912,2076.489990,2084.070068,2084.070068,3708880000 270 | 2015-08-12,2081.100098,2089.060059,2052.090088,2086.050049,2086.050049,4269130000 271 | 2015-08-13,2086.189941,2092.929932,2078.260010,2083.389893,2083.389893,3221300000 272 | 2015-08-14,2083.149902,2092.449951,2080.610107,2091.540039,2091.540039,2795590000 273 | 2015-08-17,2089.699951,2102.870117,2079.300049,2102.439941,2102.439941,2867690000 274 | 2015-08-18,2101.989990,2103.469971,2094.139893,2096.919922,2096.919922,2949990000 275 | 2015-08-19,2095.689941,2096.169922,2070.530029,2079.610107,2079.610107,3512920000 276 | 2015-08-20,2076.610107,2076.610107,2035.729980,2035.729980,2035.729980,3922470000 277 | 2015-08-21,2034.079956,2034.079956,1970.890015,1970.890015,1970.890015,5018240000 278 | 2015-08-24,1965.150024,1965.150024,1867.010010,1893.209961,1893.209961,6612690000 279 | 2015-08-25,1898.079956,1948.040039,1867.079956,1867.609985,1867.609985,5183560000 280 | 2015-08-26,1872.750000,1943.089966,1872.750000,1940.510010,1940.510010,5338250000 281 | 2015-08-27,1942.770020,1989.599976,1942.770020,1987.660034,1987.660034,5006390000 282 | 2015-08-28,1986.060059,1993.479980,1975.189941,1988.869995,1988.869995,3949080000 283 | 2015-08-31,1986.729980,1986.729980,1965.979980,1972.180054,1972.180054,3915100000 284 | 2015-09-01,1970.089966,1970.089966,1903.069946,1913.849976,1913.849976,4371850000 285 | 2015-09-02,1916.520020,1948.910034,1916.520020,1948.859985,1948.859985,3742620000 286 | 2015-09-03,1950.790039,1975.010010,1944.719971,1951.130005,1951.130005,3520700000 287 | 2015-09-04,1947.760010,1947.760010,1911.209961,1921.219971,1921.219971,3167090000 288 | 2015-09-08,1927.300049,1970.420044,1927.300049,1969.410034,1969.410034,3548650000 289 | 2015-09-09,1971.449951,1988.630005,1937.880005,1942.040039,1942.040039,3652120000 290 | 2015-09-10,1941.589966,1965.290039,1937.189941,1952.290039,1952.290039,3626320000 291 | 2015-09-11,1951.449951,1961.050049,1939.189941,1961.050049,1961.050049,3218590000 292 | 2015-09-14,1963.060059,1963.060059,1948.270020,1953.030029,1953.030029,3000200000 293 | 2015-09-15,1955.099976,1983.189941,1954.300049,1978.089966,1978.089966,3239860000 294 | 2015-09-16,1978.020020,1997.260010,1977.930054,1995.310059,1995.310059,3630680000 295 | 2015-09-17,1995.329956,2020.859985,1986.729980,1990.199951,1990.199951,4183790000 296 | 2015-09-18,1989.660034,1989.660034,1953.449951,1958.030029,1958.030029,6021240000 297 | 2015-09-21,1960.839966,1979.640015,1955.800049,1966.969971,1966.969971,3269350000 298 | 2015-09-22,1961.390015,1961.390015,1929.219971,1942.739990,1942.739990,3808260000 299 | 2015-09-23,1943.239990,1949.520020,1932.569946,1938.760010,1938.760010,3190530000 300 | 2015-09-24,1934.810059,1937.170044,1908.920044,1932.239990,1932.239990,4091530000 301 | 2015-09-25,1935.930054,1952.890015,1921.500000,1931.339966,1931.339966,3721870000 302 | 2015-09-28,1929.180054,1929.180054,1879.209961,1881.770020,1881.770020,4326660000 303 | 2015-09-29,1881.900024,1899.479980,1871.910034,1884.089966,1884.089966,4132390000 304 | 2015-09-30,1887.140015,1920.530029,1887.140015,1920.030029,1920.030029,4525070000 305 | 2015-10-01,1919.650024,1927.209961,1900.699951,1923.819946,1923.819946,3983600000 306 | 2015-10-02,1921.770020,1951.359985,1893.699951,1951.359985,1951.359985,4378570000 307 | 2015-10-05,1954.329956,1989.170044,1954.329956,1987.050049,1987.050049,4334490000 308 | 2015-10-06,1986.630005,1991.619995,1971.989990,1979.920044,1979.920044,4202400000 309 | 2015-10-07,1982.339966,1999.310059,1976.439941,1995.829956,1995.829956,4666470000 310 | 2015-10-08,1994.010010,2016.500000,1987.530029,2013.430054,2013.430054,3939140000 311 | 2015-10-09,2013.729980,2020.130005,2007.609985,2014.890015,2014.890015,3706900000 312 | 2015-10-12,2015.650024,2018.660034,2010.550049,2017.459961,2017.459961,2893250000 313 | 2015-10-13,2015.000000,2022.339966,2001.780029,2003.689941,2003.689941,3401920000 314 | 2015-10-14,2003.660034,2009.560059,1990.729980,1994.239990,1994.239990,3644590000 315 | 2015-10-15,1996.469971,2024.150024,1996.469971,2023.859985,2023.859985,3746290000 316 | 2015-10-16,2024.369995,2033.540039,2020.459961,2033.109985,2033.109985,3595430000 317 | 2015-10-19,2031.729980,2034.449951,2022.310059,2033.660034,2033.660034,3287320000 318 | 2015-10-20,2033.130005,2039.119995,2026.609985,2030.770020,2030.770020,3331500000 319 | 2015-10-21,2033.469971,2037.969971,2017.219971,2018.939941,2018.939941,3627790000 320 | 2015-10-22,2021.880005,2055.199951,2021.880005,2052.510010,2052.510010,4430850000 321 | 2015-10-23,2058.189941,2079.739990,2058.189941,2075.149902,2075.149902,4108460000 322 | 2015-10-26,2075.080078,2075.139893,2066.530029,2071.179932,2071.179932,3385800000 323 | 2015-10-27,2068.750000,2070.370117,2058.840088,2065.889893,2065.889893,4216880000 324 | 2015-10-28,2066.479980,2090.350098,2063.110107,2090.350098,2090.350098,4698110000 325 | 2015-10-29,2088.350098,2092.520020,2082.629883,2089.409912,2089.409912,4008940000 326 | 2015-10-30,2090.000000,2094.320068,2079.340088,2079.360107,2079.360107,4256200000 327 | 2015-11-02,2080.760010,2106.199951,2080.760010,2104.050049,2104.050049,3760020000 328 | 2015-11-03,2102.629883,2116.479980,2097.510010,2109.790039,2109.790039,4272060000 329 | 2015-11-04,2110.600098,2114.590088,2096.979980,2102.310059,2102.310059,4078870000 330 | 2015-11-05,2101.679932,2108.780029,2090.409912,2099.929932,2099.929932,4051890000 331 | 2015-11-06,2098.600098,2101.909912,2083.739990,2099.199951,2099.199951,4369020000 332 | 2015-11-09,2096.560059,2096.560059,2068.239990,2078.580078,2078.580078,3882350000 333 | 2015-11-10,2077.189941,2083.669922,2069.909912,2081.719971,2081.719971,3821440000 334 | 2015-11-11,2083.409912,2086.939941,2074.850098,2075.000000,2075.000000,3692410000 335 | 2015-11-12,2072.290039,2072.290039,2045.660034,2045.969971,2045.969971,4016370000 336 | 2015-11-13,2044.640015,2044.640015,2022.020020,2023.040039,2023.040039,4278750000 337 | 2015-11-16,2022.079956,2053.219971,2019.390015,2053.189941,2053.189941,3741240000 338 | 2015-11-17,2053.669922,2066.689941,2045.900024,2050.439941,2050.439941,4427350000 339 | 2015-11-18,2051.989990,2085.310059,2051.989990,2083.580078,2083.580078,3926390000 340 | 2015-11-19,2083.699951,2086.739990,2078.760010,2081.239990,2081.239990,3628110000 341 | 2015-11-20,2082.820068,2097.060059,2082.820068,2089.169922,2089.169922,3929600000 342 | 2015-11-23,2089.409912,2095.610107,2081.389893,2086.590088,2086.590088,3587980000 343 | 2015-11-24,2084.419922,2094.120117,2070.290039,2089.139893,2089.139893,3884930000 344 | 2015-11-25,2089.300049,2093.000000,2086.300049,2088.870117,2088.870117,2852940000 345 | 2015-11-27,2088.820068,2093.290039,2084.129883,2090.110107,2090.110107,1466840000 346 | 2015-11-30,2090.949951,2093.810059,2080.409912,2080.409912,2080.409912,4275030000 347 | 2015-12-01,2082.929932,2103.370117,2082.929932,2102.629883,2102.629883,3712120000 348 | 2015-12-02,2101.709961,2104.270020,2077.110107,2079.510010,2079.510010,3950640000 349 | 2015-12-03,2080.709961,2085.000000,2042.349976,2049.620117,2049.620117,4306490000 350 | 2015-12-04,2051.239990,2093.840088,2051.239990,2091.689941,2091.689941,4214910000 351 | 2015-12-07,2090.419922,2090.419922,2066.780029,2077.070068,2077.070068,4043820000 352 | 2015-12-08,2073.389893,2073.850098,2052.320068,2063.590088,2063.590088,4173570000 353 | 2015-12-09,2061.169922,2080.330078,2036.530029,2047.619995,2047.619995,4385250000 354 | 2015-12-10,2047.930054,2067.649902,2045.670044,2052.229980,2052.229980,3715150000 355 | 2015-12-11,2047.270020,2047.270020,2008.800049,2012.369995,2012.369995,4301060000 356 | 2015-12-14,2013.369995,2022.920044,1993.260010,2021.939941,2021.939941,4612440000 357 | 2015-12-15,2025.550049,2053.870117,2025.550049,2043.410034,2043.410034,4353540000 358 | 2015-12-16,2046.500000,2076.719971,2042.430054,2073.070068,2073.070068,4635450000 359 | 2015-12-17,2073.760010,2076.370117,2041.660034,2041.890015,2041.890015,4327390000 360 | 2015-12-18,2040.810059,2040.810059,2005.329956,2005.550049,2005.550049,6683070000 361 | 2015-12-21,2010.270020,2022.900024,2005.930054,2021.150024,2021.150024,3760280000 362 | 2015-12-22,2023.150024,2042.739990,2020.489990,2038.969971,2038.969971,3520860000 363 | 2015-12-23,2042.199951,2064.729980,2042.199951,2064.290039,2064.290039,3484090000 364 | 2015-12-24,2063.520020,2067.360107,2058.729980,2060.989990,2060.989990,1411860000 365 | 2015-12-28,2057.770020,2057.770020,2044.199951,2056.500000,2056.500000,2492510000 366 | 2015-12-29,2060.540039,2081.560059,2060.540039,2078.360107,2078.360107,2542000000 367 | 2015-12-30,2077.340088,2077.340088,2061.969971,2063.360107,2063.360107,2367430000 368 | 2015-12-31,2060.590088,2062.540039,2043.619995,2043.939941,2043.939941,2655330000 369 | 2016-01-04,2038.199951,2038.199951,1989.680054,2012.660034,2012.660034,4304880000 370 | 2016-01-05,2013.780029,2021.939941,2004.170044,2016.709961,2016.709961,3706620000 371 | 2016-01-06,2011.709961,2011.709961,1979.050049,1990.260010,1990.260010,4336660000 372 | 2016-01-07,1985.319946,1985.319946,1938.829956,1943.089966,1943.089966,5076590000 373 | 2016-01-08,1945.969971,1960.400024,1918.459961,1922.030029,1922.030029,4664940000 374 | 2016-01-11,1926.119995,1935.650024,1901.099976,1923.670044,1923.670044,4607290000 375 | 2016-01-12,1927.829956,1947.380005,1914.349976,1938.680054,1938.680054,4887260000 376 | 2016-01-13,1940.339966,1950.329956,1886.410034,1890.280029,1890.280029,5087030000 377 | 2016-01-14,1891.680054,1934.469971,1878.930054,1921.839966,1921.839966,5241110000 378 | 2016-01-15,1916.680054,1916.680054,1857.829956,1880.329956,1880.329956,5468460000 379 | 2016-01-19,1888.660034,1901.439941,1864.599976,1881.329956,1881.329956,4928350000 380 | 2016-01-20,1876.180054,1876.180054,1812.290039,1859.329956,1859.329956,6416070000 381 | 2016-01-21,1861.459961,1889.849976,1848.979980,1868.989990,1868.989990,5078810000 382 | 2016-01-22,1877.400024,1908.849976,1877.400024,1906.900024,1906.900024,4901760000 383 | 2016-01-25,1906.280029,1906.280029,1875.969971,1877.079956,1877.079956,4401380000 384 | 2016-01-26,1878.790039,1906.729980,1878.790039,1903.630005,1903.630005,4357940000 385 | 2016-01-27,1902.520020,1916.989990,1872.699951,1882.949951,1882.949951,4754040000 386 | 2016-01-28,1885.219971,1902.959961,1873.650024,1893.359985,1893.359985,4693010000 387 | 2016-01-29,1894.000000,1940.239990,1894.000000,1940.239990,1940.239990,5497570000 388 | 2016-02-01,1936.939941,1947.199951,1920.300049,1939.380005,1939.380005,4322530000 389 | 2016-02-02,1935.260010,1935.260010,1897.290039,1903.030029,1903.030029,4463190000 390 | 2016-02-03,1907.069946,1918.010010,1872.229980,1912.530029,1912.530029,5172950000 391 | 2016-02-04,1911.670044,1927.349976,1900.520020,1915.449951,1915.449951,5193320000 392 | 2016-02-05,1913.069946,1913.069946,1872.650024,1880.050049,1880.050049,4929940000 393 | 2016-02-08,1873.250000,1873.250000,1828.459961,1853.439941,1853.439941,5636460000 394 | 2016-02-09,1848.459961,1868.250000,1834.939941,1852.209961,1852.209961,5183220000 395 | 2016-02-10,1857.099976,1881.599976,1850.319946,1851.859985,1851.859985,4471170000 396 | 2016-02-11,1847.000000,1847.000000,1810.099976,1829.079956,1829.079956,5500800000 397 | 2016-02-12,1833.400024,1864.780029,1833.400024,1864.780029,1864.780029,4696920000 398 | 2016-02-16,1871.439941,1895.770020,1871.439941,1895.579956,1895.579956,4570670000 399 | 2016-02-17,1898.800049,1930.680054,1898.800049,1926.819946,1926.819946,5011540000 400 | 2016-02-18,1927.569946,1930.000000,1915.089966,1917.829956,1917.829956,4436490000 401 | 2016-02-19,1916.739990,1918.780029,1902.170044,1917.780029,1917.780029,4142850000 402 | 2016-02-22,1924.439941,1946.699951,1924.439941,1945.500000,1945.500000,4054710000 403 | 2016-02-23,1942.380005,1942.380005,1919.439941,1921.270020,1921.270020,3890650000 404 | 2016-02-24,1917.560059,1932.079956,1891.000000,1929.800049,1929.800049,4317250000 405 | 2016-02-25,1931.869995,1951.829956,1925.410034,1951.699951,1951.699951,4118210000 406 | 2016-02-26,1954.949951,1962.959961,1945.780029,1948.050049,1948.050049,4348510000 407 | 2016-02-29,1947.130005,1958.270020,1931.810059,1932.229980,1932.229980,4588180000 408 | 2016-03-01,1937.089966,1978.349976,1937.089966,1978.349976,1978.349976,4819750000 409 | 2016-03-02,1976.599976,1986.510010,1968.800049,1986.449951,1986.449951,4666610000 410 | 2016-03-03,1985.599976,1993.689941,1977.369995,1993.400024,1993.400024,5081700000 411 | 2016-03-04,1994.010010,2009.130005,1986.770020,1999.989990,1999.989990,6049930000 412 | 2016-03-07,1996.109985,2006.119995,1989.380005,2001.760010,2001.760010,4968180000 413 | 2016-03-08,1996.880005,1996.880005,1977.430054,1979.260010,1979.260010,4641650000 414 | 2016-03-09,1981.439941,1992.689941,1979.839966,1989.260010,1989.260010,4038120000 415 | 2016-03-10,1990.969971,2005.079956,1969.250000,1989.569946,1989.569946,4376790000 416 | 2016-03-11,1994.709961,2022.369995,1994.709961,2022.189941,2022.189941,4078620000 417 | 2016-03-14,2019.270020,2024.569946,2012.050049,2019.640015,2019.640015,3487850000 418 | 2016-03-15,2015.270020,2015.939941,2005.229980,2015.930054,2015.930054,3560280000 419 | 2016-03-16,2014.239990,2032.020020,2010.040039,2027.219971,2027.219971,4057020000 420 | 2016-03-17,2026.900024,2046.239990,2022.160034,2040.589966,2040.589966,4530480000 421 | 2016-03-18,2041.160034,2052.360107,2041.160034,2049.580078,2049.580078,6503140000 422 | 2016-03-21,2047.880005,2053.909912,2043.140015,2051.600098,2051.600098,3376600000 423 | 2016-03-22,2048.639893,2056.600098,2040.569946,2049.800049,2049.800049,3418460000 424 | 2016-03-23,2048.550049,2048.550049,2034.859985,2036.709961,2036.709961,3639510000 425 | 2016-03-24,2032.479980,2036.040039,2022.489990,2035.939941,2035.939941,3407720000 426 | 2016-03-28,2037.890015,2042.670044,2031.959961,2037.050049,2037.050049,2809090000 427 | 2016-03-29,2035.750000,2055.909912,2028.310059,2055.010010,2055.010010,3822330000 428 | 2016-03-30,2058.270020,2072.209961,2058.270020,2063.949951,2063.949951,3590310000 429 | 2016-03-31,2063.770020,2067.919922,2057.459961,2059.739990,2059.739990,3715280000 430 | 2016-04-01,2056.620117,2075.070068,2043.979980,2072.780029,2072.780029,3749990000 431 | 2016-04-04,2073.189941,2074.020020,2062.570068,2066.129883,2066.129883,3485710000 432 | 2016-04-05,2062.500000,2062.500000,2042.560059,2045.170044,2045.170044,4154920000 433 | 2016-04-06,2045.560059,2067.330078,2043.089966,2066.659912,2066.659912,3750800000 434 | 2016-04-07,2063.010010,2063.010010,2033.800049,2041.910034,2041.910034,3801250000 435 | 2016-04-08,2045.540039,2060.629883,2041.689941,2047.599976,2047.599976,3359530000 436 | 2016-04-11,2050.229980,2062.929932,2041.880005,2041.989990,2041.989990,3567840000 437 | 2016-04-12,2043.719971,2065.050049,2039.739990,2061.719971,2061.719971,4239740000 438 | 2016-04-13,2065.919922,2083.179932,2065.919922,2082.419922,2082.419922,4191830000 439 | 2016-04-14,2082.889893,2087.840088,2078.129883,2082.780029,2082.780029,3765870000 440 | 2016-04-15,2083.100098,2083.219971,2076.310059,2080.729980,2080.729980,3701450000 441 | 2016-04-18,2078.830078,2094.659912,2073.649902,2094.340088,2094.340088,3316880000 442 | 2016-04-19,2096.050049,2104.050049,2091.679932,2100.800049,2100.800049,3896830000 443 | 2016-04-20,2101.520020,2111.050049,2096.320068,2102.399902,2102.399902,4184880000 444 | 2016-04-21,2102.090088,2103.780029,2088.520020,2091.479980,2091.479980,4175290000 445 | 2016-04-22,2091.489990,2094.320068,2081.199951,2091.580078,2091.580078,3790580000 446 | 2016-04-25,2089.370117,2089.370117,2077.520020,2087.790039,2087.790039,3319740000 447 | 2016-04-26,2089.840088,2096.870117,2085.800049,2091.699951,2091.699951,3557190000 448 | 2016-04-27,2092.330078,2099.889893,2082.310059,2095.149902,2095.149902,4100110000 449 | 2016-04-28,2090.929932,2099.300049,2071.620117,2075.810059,2075.810059,4309840000 450 | 2016-04-29,2071.820068,2073.850098,2052.280029,2065.300049,2065.300049,4704720000 451 | 2016-05-02,2067.169922,2083.419922,2066.110107,2081.429932,2081.429932,3841110000 452 | 2016-05-03,2077.179932,2077.179932,2054.889893,2063.370117,2063.370117,4173390000 453 | 2016-05-04,2060.300049,2060.300049,2045.550049,2051.120117,2051.120117,4058560000 454 | 2016-05-05,2052.949951,2060.229980,2045.770020,2050.629883,2050.629883,4008530000 455 | 2016-05-06,2047.770020,2057.719971,2039.449951,2057.139893,2057.139893,3796350000 456 | 2016-05-09,2057.550049,2064.149902,2054.310059,2058.689941,2058.689941,3788620000 457 | 2016-05-10,2062.629883,2084.870117,2062.629883,2084.389893,2084.389893,3600200000 458 | 2016-05-11,2083.290039,2083.290039,2064.459961,2064.459961,2064.459961,3821980000 459 | 2016-05-12,2067.169922,2073.989990,2053.129883,2064.110107,2064.110107,3782390000 460 | 2016-05-13,2062.500000,2066.790039,2043.130005,2046.609985,2046.609985,3579880000 461 | 2016-05-16,2046.530029,2071.879883,2046.530029,2066.659912,2066.659912,3501360000 462 | 2016-05-17,2065.040039,2065.689941,2040.819946,2047.209961,2047.209961,4108960000 463 | 2016-05-18,2044.380005,2060.610107,2034.489990,2047.630005,2047.630005,4101320000 464 | 2016-05-19,2044.209961,2044.209961,2025.910034,2040.040039,2040.040039,3846770000 465 | 2016-05-20,2041.880005,2058.350098,2041.880005,2052.320068,2052.320068,3507650000 466 | 2016-05-23,2052.229980,2055.580078,2047.260010,2048.040039,2048.040039,3055480000 467 | 2016-05-24,2052.649902,2079.669922,2052.649902,2076.060059,2076.060059,3627340000 468 | 2016-05-25,2078.929932,2094.729980,2078.929932,2090.540039,2090.540039,3859160000 469 | 2016-05-26,2091.439941,2094.300049,2087.080078,2090.100098,2090.100098,3230990000 470 | 2016-05-27,2090.060059,2099.060059,2090.060059,2099.060059,2099.060059,3079150000 471 | 2016-05-31,2100.129883,2103.479980,2088.659912,2096.949951,2096.949951,4514410000 472 | 2016-06-01,2093.939941,2100.969971,2085.100098,2099.330078,2099.330078,3525170000 473 | 2016-06-02,2097.709961,2105.260010,2088.590088,2105.260010,2105.260010,3632720000 474 | 2016-06-03,2104.070068,2104.070068,2085.360107,2099.129883,2099.129883,3627780000 475 | 2016-06-06,2100.830078,2113.360107,2100.830078,2109.409912,2109.409912,3442020000 476 | 2016-06-07,2110.179932,2119.219971,2110.179932,2112.129883,2112.129883,3534730000 477 | 2016-06-08,2112.709961,2120.550049,2112.709961,2119.120117,2119.120117,3562060000 478 | 2016-06-09,2115.649902,2117.639893,2107.729980,2115.479980,2115.479980,3290320000 479 | 2016-06-10,2109.570068,2109.570068,2089.959961,2096.070068,2096.070068,3515010000 480 | 2016-06-13,2091.750000,2098.120117,2078.459961,2079.060059,2079.060059,3392030000 481 | 2016-06-14,2076.649902,2081.300049,2064.100098,2075.320068,2075.320068,3759770000 482 | 2016-06-15,2077.600098,2085.649902,2069.800049,2071.500000,2071.500000,3544720000 483 | 2016-06-16,2066.360107,2079.620117,2050.370117,2077.989990,2077.989990,3628280000 484 | 2016-06-17,2078.199951,2078.199951,2062.840088,2071.219971,2071.219971,4952630000 485 | 2016-06-20,2075.580078,2100.659912,2075.580078,2083.250000,2083.250000,3467440000 486 | 2016-06-21,2085.189941,2093.659912,2083.020020,2088.899902,2088.899902,3232880000 487 | 2016-06-22,2089.750000,2099.709961,2084.360107,2085.449951,2085.449951,3168160000 488 | 2016-06-23,2092.800049,2113.320068,2092.800049,2113.320068,2113.320068,3297940000 489 | 2016-06-24,2103.810059,2103.810059,2032.569946,2037.410034,2037.410034,7597450000 490 | 2016-06-27,2031.449951,2031.449951,1991.680054,2000.540039,2000.540039,5431220000 491 | 2016-06-28,2006.670044,2036.089966,2006.670044,2036.089966,2036.089966,4385810000 492 | 2016-06-29,2042.689941,2073.129883,2042.689941,2070.770020,2070.770020,4241740000 493 | 2016-06-30,2073.169922,2098.939941,2070.000000,2098.860107,2098.860107,4622820000 494 | 2016-07-01,2099.340088,2108.709961,2097.899902,2102.949951,2102.949951,3458890000 495 | 2016-07-05,2095.050049,2095.050049,2080.860107,2088.550049,2088.550049,3658380000 496 | 2016-07-06,2084.429932,2100.719971,2074.020020,2099.729980,2099.729980,3909380000 497 | 2016-07-07,2100.419922,2109.080078,2089.389893,2097.899902,2097.899902,3604550000 498 | 2016-07-08,2106.969971,2131.709961,2106.969971,2129.899902,2129.899902,3607500000 499 | 2016-07-11,2131.719971,2143.159912,2131.719971,2137.159912,2137.159912,3253340000 500 | 2016-07-12,2139.500000,2155.399902,2139.500000,2152.139893,2152.139893,4097820000 501 | 2016-07-13,2153.810059,2156.449951,2146.209961,2152.429932,2152.429932,3502320000 502 | 2016-07-14,2157.879883,2168.989990,2157.879883,2163.750000,2163.750000,3465610000 503 | 2016-07-15,2165.129883,2169.050049,2155.790039,2161.739990,2161.739990,3122600000 504 | 2016-07-18,2162.040039,2168.350098,2159.629883,2166.889893,2166.889893,3009310000 505 | 2016-07-19,2163.790039,2164.629883,2159.010010,2163.780029,2163.780029,2968340000 506 | 2016-07-20,2166.100098,2175.629883,2164.889893,2173.020020,2173.020020,3211860000 507 | 2016-07-21,2172.909912,2174.560059,2159.750000,2165.169922,2165.169922,3438900000 508 | 2016-07-22,2166.469971,2175.110107,2163.239990,2175.030029,2175.030029,3023280000 509 | 2016-07-25,2173.709961,2173.709961,2161.949951,2168.479980,2168.479980,3057240000 510 | 2016-07-26,2168.969971,2173.540039,2160.179932,2169.179932,2169.179932,3442350000 511 | 2016-07-27,2169.810059,2174.979980,2159.070068,2166.580078,2166.580078,3995500000 512 | 2016-07-28,2166.050049,2172.850098,2159.739990,2170.060059,2170.060059,3664240000 513 | 2016-07-29,2168.830078,2177.090088,2163.489990,2173.600098,2173.600098,4038840000 514 | 2016-08-01,2173.149902,2178.290039,2166.209961,2170.840088,2170.840088,3505990000 515 | 2016-08-02,2169.939941,2170.199951,2147.580078,2157.030029,2157.030029,3848750000 516 | 2016-08-03,2156.810059,2163.790039,2152.560059,2163.790039,2163.790039,3786530000 517 | 2016-08-04,2163.510010,2168.189941,2159.070068,2164.250000,2164.250000,3709200000 518 | 2016-08-05,2168.790039,2182.870117,2168.790039,2182.870117,2182.870117,3663070000 519 | 2016-08-08,2183.760010,2185.439941,2177.850098,2180.889893,2180.889893,3327550000 520 | 2016-08-09,2182.239990,2187.659912,2178.610107,2181.739990,2181.739990,3334300000 521 | 2016-08-10,2182.810059,2183.409912,2172.000000,2175.489990,2175.489990,3254950000 522 | 2016-08-11,2177.969971,2188.449951,2177.969971,2185.790039,2185.790039,3423160000 523 | 2016-08-12,2183.739990,2186.280029,2179.419922,2184.050049,2184.050049,3000660000 524 | 2016-08-15,2186.080078,2193.810059,2186.080078,2190.149902,2190.149902,3078530000 525 | 2016-08-16,2186.239990,2186.239990,2178.139893,2178.149902,2178.149902,3196400000 526 | 2016-08-17,2177.840088,2183.080078,2168.500000,2182.219971,2182.219971,3388910000 527 | 2016-08-18,2181.899902,2187.030029,2180.459961,2187.020020,2187.020020,3300570000 528 | 2016-08-19,2184.239990,2185.000000,2175.129883,2183.870117,2183.870117,3084800000 529 | 2016-08-22,2181.580078,2185.149902,2175.959961,2182.639893,2182.639893,2777550000 530 | 2016-08-23,2187.810059,2193.419922,2186.800049,2186.899902,2186.899902,3041490000 531 | 2016-08-24,2185.090088,2186.659912,2171.250000,2175.439941,2175.439941,3148280000 532 | 2016-08-25,2173.290039,2179.000000,2169.739990,2172.469971,2172.469971,2969310000 533 | 2016-08-26,2175.100098,2187.939941,2160.389893,2169.040039,2169.040039,3342340000 534 | 2016-08-29,2170.189941,2183.479980,2170.189941,2180.379883,2180.379883,2654780000 535 | 2016-08-30,2179.449951,2182.270020,2170.409912,2176.120117,2176.120117,3006800000 536 | 2016-08-31,2173.560059,2173.790039,2161.350098,2170.949951,2170.949951,3766390000 537 | 2016-09-01,2171.330078,2173.560059,2157.090088,2170.860107,2170.860107,3392120000 538 | 2016-09-02,2177.489990,2184.870117,2173.590088,2179.979980,2179.979980,3091120000 539 | 2016-09-06,2181.610107,2186.570068,2175.100098,2186.479980,2186.479980,3447650000 540 | 2016-09-07,2185.169922,2187.870117,2179.070068,2186.159912,2186.159912,3319420000 541 | 2016-09-08,2182.760010,2184.939941,2177.489990,2181.300049,2181.300049,3727840000 542 | 2016-09-09,2169.080078,2169.080078,2127.810059,2127.810059,2127.810059,4233960000 543 | 2016-09-12,2120.860107,2163.300049,2119.120117,2159.040039,2159.040039,4010480000 544 | 2016-09-13,2150.469971,2150.469971,2120.270020,2127.020020,2127.020020,4141670000 545 | 2016-09-14,2127.860107,2141.330078,2119.899902,2125.770020,2125.770020,3664100000 546 | 2016-09-15,2125.360107,2151.310059,2122.360107,2147.260010,2147.260010,3373720000 547 | 2016-09-16,2146.479980,2146.479980,2131.199951,2139.159912,2139.159912,5014360000 548 | 2016-09-19,2143.989990,2153.610107,2135.909912,2139.120117,2139.120117,3163000000 549 | 2016-09-20,2145.939941,2150.800049,2139.169922,2139.760010,2139.760010,3140730000 550 | 2016-09-21,2144.580078,2165.110107,2139.570068,2163.120117,2163.120117,3712090000 551 | 2016-09-22,2170.939941,2179.989990,2170.939941,2177.179932,2177.179932,3552830000 552 | 2016-09-23,2173.290039,2173.750000,2163.969971,2164.689941,2164.689941,3317190000 553 | 2016-09-26,2158.540039,2158.540039,2145.040039,2146.100098,2146.100098,3216170000 554 | 2016-09-27,2146.040039,2161.129883,2141.550049,2159.929932,2159.929932,3437770000 555 | 2016-09-28,2161.850098,2172.399902,2151.790039,2171.370117,2171.370117,3891460000 556 | 2016-09-29,2168.899902,2172.669922,2145.199951,2151.129883,2151.129883,4249220000 557 | 2016-09-30,2156.510010,2175.300049,2156.510010,2168.270020,2168.270020,4173340000 558 | 2016-10-03,2164.330078,2164.409912,2154.770020,2161.199951,2161.199951,3137550000 559 | 2016-10-04,2163.370117,2165.459961,2144.010010,2150.489990,2150.489990,3750890000 560 | 2016-10-05,2155.149902,2163.949951,2155.149902,2159.729980,2159.729980,3906550000 561 | 2016-10-06,2158.219971,2162.929932,2150.280029,2160.770020,2160.770020,3461550000 562 | 2016-10-07,2164.189941,2165.860107,2144.850098,2153.739990,2153.739990,3619890000 563 | 2016-10-10,2160.389893,2169.600098,2160.389893,2163.659912,2163.659912,2916550000 564 | 2016-10-11,2161.350098,2161.560059,2128.840088,2136.729980,2136.729980,3438270000 565 | 2016-10-12,2137.669922,2145.360107,2132.770020,2139.179932,2139.179932,2977100000 566 | 2016-10-13,2130.260010,2138.189941,2114.719971,2132.550049,2132.550049,3580450000 567 | 2016-10-14,2139.679932,2149.189941,2132.979980,2132.979980,2132.979980,3228150000 568 | 2016-10-17,2132.949951,2135.610107,2124.429932,2126.500000,2126.500000,2830390000 569 | 2016-10-18,2138.310059,2144.379883,2135.489990,2139.600098,2139.600098,3170000000 570 | 2016-10-19,2140.810059,2148.439941,2138.149902,2144.290039,2144.290039,3362670000 571 | 2016-10-20,2142.510010,2147.179932,2133.439941,2141.340088,2141.340088,3337170000 572 | 2016-10-21,2139.429932,2142.629883,2130.090088,2141.159912,2141.159912,3448850000 573 | 2016-10-24,2148.500000,2154.790039,2146.909912,2151.330078,2151.330078,3357320000 574 | 2016-10-25,2149.719971,2151.439941,2141.929932,2143.159912,2143.159912,3751340000 575 | 2016-10-26,2136.969971,2145.729980,2131.590088,2139.429932,2139.429932,3775200000 576 | 2016-10-27,2144.060059,2147.129883,2132.520020,2133.040039,2133.040039,4204830000 577 | 2016-10-28,2132.229980,2140.719971,2119.360107,2126.409912,2126.409912,4019510000 578 | 2016-10-31,2129.780029,2133.250000,2125.530029,2126.149902,2126.149902,3922400000 579 | 2016-11-01,2128.679932,2131.449951,2097.850098,2111.719971,2111.719971,4532160000 580 | 2016-11-02,2109.429932,2111.760010,2094.000000,2097.939941,2097.939941,4248580000 581 | 2016-11-03,2098.800049,2102.560059,2085.229980,2088.659912,2088.659912,3886740000 582 | 2016-11-04,2083.790039,2099.070068,2083.790039,2085.179932,2085.179932,3837860000 583 | 2016-11-07,2100.590088,2132.000000,2100.590088,2131.520020,2131.520020,3736060000 584 | 2016-11-08,2129.919922,2146.870117,2123.560059,2139.560059,2139.560059,3916930000 585 | 2016-11-09,2131.560059,2170.100098,2125.350098,2163.260010,2163.260010,6264150000 586 | 2016-11-10,2167.489990,2182.300049,2151.169922,2167.479980,2167.479980,6451640000 587 | 2016-11-11,2162.709961,2165.919922,2152.489990,2164.449951,2164.449951,4988050000 588 | 2016-11-14,2165.639893,2171.360107,2156.080078,2164.199951,2164.199951,5367200000 589 | 2016-11-15,2168.290039,2180.840088,2166.379883,2180.389893,2180.389893,4543860000 590 | 2016-11-16,2177.530029,2179.219971,2172.199951,2176.939941,2176.939941,3830590000 591 | 2016-11-17,2178.610107,2188.060059,2176.649902,2187.120117,2187.120117,3809160000 592 | 2016-11-18,2186.850098,2189.889893,2180.379883,2181.899902,2181.899902,3572400000 593 | 2016-11-21,2186.429932,2198.699951,2186.429932,2198.179932,2198.179932,3607010000 594 | 2016-11-22,2201.560059,2204.800049,2194.510010,2202.939941,2202.939941,3957940000 595 | 2016-11-23,2198.550049,2204.719971,2194.510010,2204.719971,2204.719971,3418640000 596 | 2016-11-25,2206.270020,2213.350098,2206.270020,2213.350098,2213.350098,1584600000 597 | 2016-11-28,2210.209961,2211.139893,2200.360107,2201.719971,2201.719971,3505650000 598 | 2016-11-29,2200.760010,2210.459961,2198.149902,2204.659912,2204.659912,3706560000 599 | 2016-11-30,2204.969971,2214.100098,2198.810059,2198.810059,2198.810059,5533980000 600 | 2016-12-01,2200.169922,2202.600098,2187.439941,2191.080078,2191.080078,5063740000 601 | 2016-12-02,2191.120117,2197.949951,2188.370117,2191.949951,2191.949951,3779500000 602 | 2016-12-05,2200.649902,2209.419922,2199.969971,2204.709961,2204.709961,3895230000 603 | 2016-12-06,2207.260010,2212.780029,2202.209961,2212.229980,2212.229980,3855320000 604 | 2016-12-07,2210.719971,2241.629883,2208.929932,2241.350098,2241.350098,4501820000 605 | 2016-12-08,2241.129883,2251.689941,2237.570068,2246.189941,2246.189941,4200580000 606 | 2016-12-09,2249.729980,2259.800049,2249.229980,2259.530029,2259.530029,3884480000 607 | 2016-12-12,2258.830078,2264.030029,2252.370117,2256.959961,2256.959961,4034510000 608 | 2016-12-13,2263.320068,2277.530029,2263.320068,2271.719971,2271.719971,3857590000 609 | 2016-12-14,2268.350098,2276.199951,2248.439941,2253.280029,2253.280029,4406970000 610 | 2016-12-15,2253.770020,2272.120117,2253.770020,2262.030029,2262.030029,4168200000 611 | 2016-12-16,2266.810059,2268.050049,2254.239990,2258.070068,2258.070068,5920340000 612 | 2016-12-19,2259.239990,2267.469971,2258.209961,2262.530029,2262.530029,3248370000 613 | 2016-12-20,2266.500000,2272.560059,2266.139893,2270.760010,2270.760010,3298780000 614 | 2016-12-21,2270.540039,2271.229980,2265.149902,2265.179932,2265.179932,2852230000 615 | 2016-12-22,2262.929932,2263.179932,2256.080078,2260.959961,2260.959961,2876320000 616 | 2016-12-23,2260.250000,2263.790039,2258.840088,2263.790039,2263.790039,2020550000 617 | 2016-12-27,2266.229980,2273.820068,2266.149902,2268.879883,2268.879883,1987080000 618 | 2016-12-28,2270.229980,2271.310059,2249.110107,2249.919922,2249.919922,2392360000 619 | 2016-12-29,2249.500000,2254.510010,2244.560059,2249.260010,2249.260010,2336370000 620 | 2016-12-30,2251.610107,2253.580078,2233.620117,2238.830078,2238.830078,2670900000 621 | 2017-01-03,2251.570068,2263.879883,2245.129883,2257.830078,2257.830078,3770530000 622 | 2017-01-04,2261.600098,2272.820068,2261.600098,2270.750000,2270.750000,3764890000 623 | 2017-01-05,2268.179932,2271.500000,2260.449951,2269.000000,2269.000000,3761820000 624 | 2017-01-06,2271.139893,2282.100098,2264.060059,2276.979980,2276.979980,3339890000 625 | 2017-01-09,2273.590088,2275.489990,2268.899902,2268.899902,2268.899902,3217610000 626 | 2017-01-10,2269.719971,2279.270020,2265.270020,2268.899902,2268.899902,3638790000 627 | 2017-01-11,2268.600098,2275.320068,2260.830078,2275.320068,2275.320068,3620410000 628 | 2017-01-12,2271.139893,2271.780029,2254.250000,2270.439941,2270.439941,3462130000 629 | 2017-01-13,2272.739990,2278.679932,2271.510010,2274.639893,2274.639893,3081270000 630 | 2017-01-17,2269.139893,2272.080078,2262.810059,2267.889893,2267.889893,3584990000 631 | 2017-01-18,2269.139893,2272.010010,2263.350098,2271.889893,2271.889893,3315250000 632 | 2017-01-19,2271.899902,2274.330078,2258.409912,2263.689941,2263.689941,3165970000 633 | 2017-01-20,2269.959961,2276.959961,2265.010010,2271.310059,2271.310059,3524970000 634 | 2017-01-23,2267.780029,2271.780029,2257.020020,2265.199951,2265.199951,3152710000 635 | 2017-01-24,2267.879883,2284.629883,2266.679932,2280.070068,2280.070068,3810960000 636 | 2017-01-25,2288.879883,2299.550049,2288.879883,2298.370117,2298.370117,3846020000 637 | 2017-01-26,2298.629883,2300.989990,2294.080078,2296.679932,2296.679932,3610360000 638 | 2017-01-27,2299.020020,2299.020020,2291.620117,2294.689941,2294.689941,3135890000 639 | 2017-01-30,2286.010010,2286.010010,2268.040039,2280.899902,2280.899902,3591270000 640 | 2017-01-31,2274.020020,2279.090088,2267.209961,2278.870117,2278.870117,4087450000 641 | 2017-02-01,2285.590088,2289.139893,2272.439941,2279.550049,2279.550049,3916610000 642 | 2017-02-02,2276.689941,2283.969971,2271.649902,2280.850098,2280.850098,3807710000 643 | 2017-02-03,2288.540039,2298.310059,2287.879883,2297.419922,2297.419922,3597970000 644 | 2017-02-06,2294.280029,2296.179932,2288.570068,2292.560059,2292.560059,3109050000 645 | 2017-02-07,2295.870117,2299.399902,2290.159912,2293.080078,2293.080078,3448690000 646 | 2017-02-08,2289.550049,2295.909912,2285.379883,2294.669922,2294.669922,3609740000 647 | 2017-02-09,2296.699951,2311.080078,2296.610107,2307.870117,2307.870117,3677940000 648 | 2017-02-10,2312.270020,2319.229980,2311.100098,2316.100098,2316.100098,3475020000 649 | 2017-02-13,2321.719971,2331.580078,2321.419922,2328.250000,2328.250000,3349730000 650 | 2017-02-14,2326.120117,2337.580078,2322.169922,2337.580078,2337.580078,3520910000 651 | 2017-02-15,2335.580078,2351.300049,2334.810059,2349.250000,2349.250000,3775590000 652 | 2017-02-16,2349.639893,2351.310059,2338.870117,2347.219971,2347.219971,3672370000 653 | 2017-02-17,2343.010010,2351.159912,2339.580078,2351.159912,2351.159912,3513060000 654 | 2017-02-21,2354.909912,2366.709961,2354.909912,2365.379883,2365.379883,3579780000 655 | 2017-02-22,2361.110107,2365.129883,2358.340088,2362.820068,2362.820068,3468670000 656 | 2017-02-23,2367.500000,2368.260010,2355.090088,2363.810059,2363.810059,4015260000 657 | 2017-02-24,2355.729980,2367.340088,2352.870117,2367.340088,2367.340088,3831570000 658 | 2017-02-27,2365.229980,2371.540039,2361.870117,2369.750000,2369.750000,3582610000 659 | 2017-02-28,2366.080078,2367.790039,2358.959961,2363.639893,2363.639893,4210140000 660 | 2017-03-01,2380.129883,2400.979980,2380.129883,2395.959961,2395.959961,4345180000 661 | 2017-03-02,2394.750000,2394.750000,2380.169922,2381.919922,2381.919922,3821320000 662 | 2017-03-03,2380.919922,2383.889893,2375.389893,2383.120117,2383.120117,3555260000 663 | 2017-03-06,2375.229980,2378.800049,2367.979980,2375.310059,2375.310059,3232700000 664 | 2017-03-07,2370.739990,2375.120117,2365.510010,2368.389893,2368.389893,3518390000 665 | 2017-03-08,2369.810059,2373.090088,2361.010010,2362.979980,2362.979980,3812100000 666 | 2017-03-09,2363.489990,2369.080078,2354.540039,2364.870117,2364.870117,3716340000 667 | 2017-03-10,2372.520020,2376.860107,2363.040039,2372.600098,2372.600098,3432950000 668 | 2017-03-13,2371.560059,2374.419922,2368.520020,2373.469971,2373.469971,3133900000 669 | 2017-03-14,2368.550049,2368.550049,2358.179932,2365.449951,2365.449951,3172630000 670 | 2017-03-15,2370.340088,2390.010010,2368.939941,2385.260010,2385.260010,3906840000 671 | 2017-03-16,2387.709961,2388.100098,2377.179932,2381.379883,2381.379883,3365660000 672 | 2017-03-17,2383.709961,2385.709961,2377.639893,2378.250000,2378.250000,5178040000 673 | 2017-03-20,2378.239990,2379.550049,2369.659912,2373.469971,2373.469971,3054930000 674 | 2017-03-21,2379.320068,2381.929932,2341.899902,2344.020020,2344.020020,4265590000 675 | 2017-03-22,2343.000000,2351.810059,2336.449951,2348.449951,2348.449951,3572730000 676 | 2017-03-23,2345.969971,2358.919922,2342.129883,2345.959961,2345.959961,3260600000 677 | 2017-03-24,2350.419922,2356.219971,2335.739990,2343.979980,2343.979980,2975130000 678 | 2017-03-27,2329.110107,2344.899902,2322.250000,2341.590088,2341.590088,3240230000 679 | 2017-03-28,2339.790039,2363.780029,2337.629883,2358.570068,2358.570068,3367780000 680 | 2017-03-29,2356.540039,2363.360107,2352.939941,2361.129883,2361.129883,3106940000 681 | 2017-03-30,2361.310059,2370.419922,2358.580078,2368.060059,2368.060059,3158420000 682 | 2017-03-31,2364.820068,2370.350098,2362.600098,2362.719971,2362.719971,3354110000 683 | 2017-04-03,2362.340088,2365.870117,2344.729980,2358.840088,2358.840088,3416400000 684 | 2017-04-04,2354.760010,2360.530029,2350.719971,2360.159912,2360.159912,3206240000 685 | 2017-04-05,2366.590088,2378.360107,2350.520020,2352.949951,2352.949951,3770520000 686 | 2017-04-06,2353.790039,2364.159912,2348.899902,2357.489990,2357.489990,3201920000 687 | 2017-04-07,2356.590088,2363.760010,2350.739990,2355.540039,2355.540039,3053150000 688 | 2017-04-10,2357.159912,2366.370117,2351.500000,2357.159912,2357.159912,2785410000 689 | 2017-04-11,2353.919922,2355.219971,2337.250000,2353.780029,2353.780029,3117420000 690 | 2017-04-12,2352.149902,2352.719971,2341.179932,2344.929932,2344.929932,3196950000 691 | 2017-04-13,2341.979980,2348.260010,2328.949951,2328.949951,2328.949951,3143890000 692 | 2017-04-17,2332.620117,2349.139893,2332.510010,2349.010010,2349.010010,2824710000 693 | 2017-04-18,2342.530029,2348.350098,2334.540039,2342.189941,2342.189941,3269840000 694 | 2017-04-19,2346.790039,2352.629883,2335.050049,2338.169922,2338.169922,3519900000 695 | 2017-04-20,2342.689941,2361.370117,2340.909912,2355.840088,2355.840088,3647420000 696 | 2017-04-21,2354.739990,2356.179932,2344.510010,2348.689941,2348.689941,3503360000 697 | 2017-04-24,2370.330078,2376.979980,2369.189941,2374.149902,2374.149902,3690650000 698 | 2017-04-25,2381.510010,2392.479980,2381.149902,2388.610107,2388.610107,3995240000 699 | 2017-04-26,2388.979980,2398.159912,2386.780029,2387.449951,2387.449951,4105920000 700 | 2017-04-27,2389.699951,2392.100098,2382.679932,2388.770020,2388.770020,4098460000 701 | 2017-04-28,2393.679932,2393.679932,2382.360107,2384.199951,2384.199951,3718270000 702 | 2017-05-01,2388.500000,2394.489990,2384.830078,2388.330078,2388.330078,3199240000 703 | 2017-05-02,2391.050049,2392.929932,2385.820068,2391.169922,2391.169922,3813680000 704 | 2017-05-03,2386.500000,2389.820068,2379.750000,2388.129883,2388.129883,3893990000 705 | 2017-05-04,2389.790039,2391.429932,2380.350098,2389.520020,2389.520020,4362540000 706 | 2017-05-05,2392.370117,2399.290039,2389.379883,2399.290039,2399.290039,3540140000 707 | 2017-05-08,2399.939941,2401.360107,2393.919922,2399.379883,2399.379883,3429440000 708 | 2017-05-09,2401.580078,2403.870117,2392.439941,2396.919922,2396.919922,3653590000 709 | 2017-05-10,2396.790039,2399.739990,2392.790039,2399.629883,2399.629883,3643530000 710 | 2017-05-11,2394.840088,2395.719971,2381.739990,2394.439941,2394.439941,3727420000 711 | 2017-05-12,2392.439941,2392.439941,2387.189941,2390.899902,2390.899902,3305630000 712 | 2017-05-15,2393.979980,2404.050049,2393.939941,2402.320068,2402.320068,3473600000 713 | 2017-05-16,2404.550049,2405.770020,2396.050049,2400.669922,2400.669922,3420790000 714 | 2017-05-17,2382.949951,2384.870117,2356.209961,2357.030029,2357.030029,4163000000 715 | 2017-05-18,2354.689941,2375.739990,2352.719971,2365.719971,2365.719971,4319420000 716 | 2017-05-19,2371.370117,2389.060059,2370.429932,2381.729980,2381.729980,3825160000 717 | 2017-05-22,2387.209961,2395.459961,2386.919922,2394.020020,2394.020020,3172830000 718 | 2017-05-23,2397.040039,2400.850098,2393.879883,2398.419922,2398.419922,3213570000 719 | 2017-05-24,2401.409912,2405.580078,2397.989990,2404.389893,2404.389893,3389900000 720 | 2017-05-25,2409.540039,2418.709961,2408.010010,2415.070068,2415.070068,3535390000 721 | 2017-05-26,2414.500000,2416.679932,2412.199951,2415.820068,2415.820068,2805040000 722 | 2017-05-30,2411.669922,2415.260010,2409.429932,2412.909912,2412.909912,3203160000 723 | 2017-05-31,2415.629883,2415.989990,2403.590088,2411.800049,2411.800049,4516110000 724 | 2017-06-01,2415.649902,2430.060059,2413.540039,2430.060059,2430.060059,3857140000 725 | 2017-06-02,2431.280029,2440.229980,2427.709961,2439.070068,2439.070068,3461680000 726 | 2017-06-05,2437.830078,2439.550049,2434.320068,2436.100098,2436.100098,2912600000 727 | 2017-06-06,2431.919922,2436.209961,2428.120117,2429.330078,2429.330078,3357840000 728 | 2017-06-07,2432.030029,2435.280029,2424.750000,2433.139893,2433.139893,3572300000 729 | 2017-06-08,2434.270020,2439.270020,2427.939941,2433.790039,2433.790039,3728860000 730 | 2017-06-09,2436.389893,2446.199951,2415.699951,2431.770020,2431.770020,4027340000 731 | 2017-06-12,2425.879883,2430.379883,2419.969971,2429.389893,2429.389893,4027750000 732 | 2017-06-13,2434.149902,2441.489990,2431.280029,2440.350098,2440.350098,3275500000 733 | 2017-06-14,2443.750000,2443.750000,2428.340088,2437.919922,2437.919922,3555590000 734 | 2017-06-15,2424.139893,2433.949951,2418.530029,2432.459961,2432.459961,3353050000 735 | 2017-06-16,2431.239990,2433.149902,2422.879883,2433.149902,2433.149902,5284720000 736 | 2017-06-19,2442.550049,2453.820068,2441.790039,2453.459961,2453.459961,3264700000 737 | 2017-06-20,2450.659912,2450.659912,2436.600098,2437.030029,2437.030029,3416510000 738 | 2017-06-21,2439.310059,2442.229980,2430.739990,2435.610107,2435.610107,3594820000 739 | 2017-06-22,2437.399902,2441.620117,2433.270020,2434.500000,2434.500000,3468210000 740 | 2017-06-23,2434.649902,2441.399902,2431.110107,2438.300049,2438.300049,5278330000 741 | 2017-06-26,2443.320068,2450.419922,2437.030029,2439.070068,2439.070068,3238970000 742 | 2017-06-27,2436.340088,2440.149902,2419.379883,2419.379883,2419.379883,3563910000 743 | 2017-06-28,2428.699951,2442.969971,2428.020020,2440.689941,2440.689941,3500800000 744 | 2017-06-29,2442.379883,2442.729980,2405.699951,2419.699951,2419.699951,3900280000 745 | 2017-06-30,2429.199951,2432.709961,2421.649902,2423.409912,2423.409912,3361590000 746 | 2017-07-03,2431.389893,2439.169922,2428.689941,2429.010010,2429.010010,1962290000 747 | 2017-07-05,2430.780029,2434.899902,2422.050049,2432.540039,2432.540039,3367220000 748 | 2017-07-06,2423.439941,2424.280029,2407.699951,2409.750000,2409.750000,3364520000 749 | 2017-07-07,2413.520020,2426.919922,2413.520020,2425.179932,2425.179932,2901330000 750 | 2017-07-10,2424.510010,2432.000000,2422.270020,2427.429932,2427.429932,2999130000 751 | 2017-07-11,2427.350098,2429.300049,2412.790039,2425.530029,2425.530029,3106750000 752 | 2017-07-12,2435.750000,2445.760010,2435.750000,2443.250000,2443.250000,3171620000 753 | 2017-07-13,2444.989990,2449.320068,2441.689941,2447.830078,2447.830078,3067670000 754 | 2017-07-14,2449.159912,2463.540039,2446.689941,2459.270020,2459.270020,2736640000 755 | 2017-07-17,2459.500000,2462.820068,2457.159912,2459.139893,2459.139893,2793170000 756 | 2017-07-18,2455.879883,2460.919922,2450.340088,2460.610107,2460.610107,2962130000 757 | -------------------------------------------------------------------------------- /tests/JPM.csv: -------------------------------------------------------------------------------- 1 | Date,Open,High,Low,Close,Adj Close,Volume 2 | 2014-07-21,58.119999,58.410000,57.900002,53.802700,58.240002,9141400 3 | 2014-07-22,58.419998,58.799999,58.369999,54.199936,58.669998,10375200 4 | 2014-07-23,58.759998,59.189999,58.520000,54.504795,59.000000,11122100 5 | 2014-07-24,59.070000,59.349998,58.990002,54.661850,59.169998,9844100 6 | 2014-07-25,58.919998,59.270000,58.840000,54.514038,59.009998,10500600 7 | 2014-07-28,58.939999,59.259998,58.669998,54.680321,59.189999,12382800 8 | 2014-07-29,59.130001,59.130001,58.439999,54.172222,58.639999,13498800 9 | 2014-07-30,59.020000,59.279999,58.610001,54.421661,58.910000,11815700 10 | 2014-07-31,58.650002,58.680000,57.660000,53.276123,57.669998,15955900 11 | 2014-08-01,57.389999,57.490002,55.970001,52.176792,56.480000,23915400 12 | 2014-08-04,56.910000,56.980000,56.340000,52.333851,56.650002,13543900 13 | 2014-08-05,56.430000,56.599998,55.599998,51.788799,56.060001,16863300 14 | 2014-08-06,55.889999,56.689999,55.830002,51.945839,56.230000,12190600 15 | 2014-08-07,56.630001,56.689999,55.680000,51.650219,55.910000,11743800 16 | 2014-08-08,55.889999,56.360001,55.639999,52.047459,56.340000,12213200 17 | 2014-08-11,56.540001,56.580002,56.169998,52.028984,56.320000,9066800 18 | 2014-08-12,56.230000,56.549999,56.130001,52.056698,56.349998,11289600 19 | 2014-08-13,56.689999,56.840000,56.509998,52.398514,56.720001,7012600 20 | 2014-08-14,56.770000,57.000000,56.700001,52.638702,56.980000,8275900 21 | 2014-08-15,57.240002,57.500000,56.389999,52.426224,56.750000,12727400 22 | 2014-08-18,56.860001,57.430000,56.759998,52.869648,57.230000,8881400 23 | 2014-08-19,57.599998,57.720001,57.340000,53.174507,57.560001,9040500 24 | 2014-08-20,57.419998,57.849998,57.389999,53.248413,57.639999,8121400 25 | 2014-08-21,57.660000,58.770000,57.599998,54.042896,58.500000,12745500 26 | 2014-08-22,58.439999,59.080002,58.330002,54.033661,58.490002,10228600 27 | 2014-08-25,58.980000,59.830002,58.860001,54.818890,59.340000,13996800 28 | 2014-08-26,59.570000,59.950001,59.389999,55.188416,59.740002,10281100 29 | 2014-08-27,59.849998,59.950001,59.529999,55.049847,59.590000,11410900 30 | 2014-08-28,59.250000,59.369999,58.810001,54.652603,59.160000,9096100 31 | 2014-08-29,59.340000,59.650002,59.230000,54.920509,59.450001,8897900 32 | 2014-09-02,59.459999,59.709999,59.150002,55.123741,59.669998,8671100 33 | 2014-09-03,60.020000,60.369999,59.459999,55.151463,59.700001,11791800 34 | 2014-09-04,59.630001,60.139999,59.430000,55.160698,59.709999,9811900 35 | 2014-09-05,59.619999,59.910000,59.220001,55.345463,59.910000,9600900 36 | 2014-09-08,59.840000,60.220001,59.740002,55.326981,59.889999,8090000 37 | 2014-09-09,59.630001,59.680000,58.779999,54.560230,59.060001,14868700 38 | 2014-09-10,59.150002,59.560001,58.919998,54.708038,59.220001,9153800 39 | 2014-09-11,59.180000,59.840000,58.970001,55.206886,59.759998,11467000 40 | 2014-09-12,59.799999,60.410000,59.750000,55.456322,60.029999,14359100 41 | 2014-09-15,59.779999,59.990002,59.450001,55.373177,59.939999,10685600 42 | 2014-09-16,59.709999,60.200001,59.619999,55.419373,59.990002,10947900 43 | 2014-09-17,59.950001,60.590000,59.820000,55.714989,60.310001,15091800 44 | 2014-09-18,60.540001,61.400002,60.540001,56.648033,61.320000,16973700 45 | 2014-09-19,61.740002,61.849998,60.980000,56.454041,61.110001,18739300 46 | 2014-09-22,60.939999,61.450001,60.799999,56.269272,60.910000,13225200 47 | 2014-09-23,60.820000,61.400002,60.770000,56.296986,60.939999,14328800 48 | 2014-09-24,61.180000,61.639999,61.020000,56.934410,61.630001,13728200 49 | 2014-09-25,61.490002,61.500000,60.150002,55.567177,60.150002,16340100 50 | 2014-09-26,60.330002,60.880001,60.320000,55.945942,60.560001,11948900 51 | 2014-09-29,60.029999,60.500000,59.730000,55.733467,60.330002,10686500 52 | 2014-09-30,60.400002,60.740002,60.130001,55.650326,60.240002,14384800 53 | 2014-10-01,60.240002,60.400002,59.730000,55.216129,59.770000,18995800 54 | 2014-10-02,59.150002,59.490002,58.610001,54.723217,58.840000,24559100 55 | 2014-10-03,59.250000,60.389999,59.049999,56.081062,60.299999,18321100 56 | 2014-10-06,60.779999,60.799999,60.000000,55.969460,60.180000,11578000 57 | 2014-10-07,59.919998,59.919998,59.189999,55.123123,59.270000,14542000 58 | 2014-10-08,59.360001,60.430000,59.180000,56.174076,60.400002,15834100 59 | 2014-10-09,60.330002,60.330002,58.889999,54.946434,59.080002,19189500 60 | 2014-10-10,59.029999,59.820000,58.509998,54.425602,58.520000,16689400 61 | 2014-10-13,58.500000,59.150002,58.110001,54.090790,58.160000,17169300 62 | 2014-10-14,56.689999,58.520000,56.060001,53.932682,57.990002,29096800 63 | 2014-10-15,57.020000,57.380001,54.259998,51.644798,55.529999,37866900 64 | 2014-10-16,54.750000,55.980000,54.279999,51.226288,55.080002,31965100 65 | 2014-10-17,55.730000,56.779999,55.570000,52.267925,56.200001,20183500 66 | 2014-10-20,56.099998,56.750000,56.070000,52.667835,56.630001,10807600 67 | 2014-10-21,57.230000,58.009998,57.080002,53.876877,57.930000,14020400 68 | 2014-10-22,58.040001,58.259998,57.439999,53.430466,57.450001,13750700 69 | 2014-10-23,58.119999,58.599998,57.939999,53.997791,58.060001,12641900 70 | 2014-10-24,58.000000,58.779999,58.000000,54.630219,58.740002,13758000 71 | 2014-10-27,58.450001,58.790001,58.250000,54.537209,58.639999,11087100 72 | 2014-10-28,58.869999,59.689999,58.810001,55.457943,59.630001,13625000 73 | 2014-10-29,59.619999,59.779999,58.759998,55.141727,59.290001,16712100 74 | 2014-10-30,58.939999,59.680000,58.919998,55.234726,59.389999,14709800 75 | 2014-10-31,60.119999,60.540001,59.869999,56.248466,60.480000,18347600 76 | 2014-11-03,60.790001,61.150002,60.360001,56.620487,60.880001,11841200 77 | 2014-11-04,60.240002,60.369999,59.419998,56.034561,60.250000,15295800 78 | 2014-11-05,60.799999,61.230000,60.389999,56.871597,61.150002,14063800 79 | 2014-11-06,61.080002,61.310001,60.630001,56.945992,61.230000,10421600 80 | 2014-11-07,61.070000,61.549999,60.860001,57.169205,61.470001,12384600 81 | 2014-11-10,61.250000,61.930000,61.200001,57.597019,61.930000,10801000 82 | 2014-11-11,61.709999,61.889999,61.290001,57.076199,61.369999,12539800 83 | 2014-11-12,60.419998,60.840000,60.230000,56.322876,60.560001,17219600 84 | 2014-11-13,60.500000,60.630001,59.990002,56.015965,60.230000,12240400 85 | 2014-11-14,60.250000,60.619999,60.180000,56.062466,60.279999,6803400 86 | 2014-11-17,60.000000,60.529999,59.889999,56.155472,60.380001,9017600 87 | 2014-11-18,60.349998,60.820000,60.200001,56.294968,60.529999,8897800 88 | 2014-11-19,60.450001,60.790001,60.150002,56.360065,60.599998,9210100 89 | 2014-11-20,60.200001,60.250000,59.750000,55.913658,60.119999,10917300 90 | 2014-11-21,61.070000,61.070000,60.299999,56.220573,60.450001,12340500 91 | 2014-11-24,60.700001,61.310001,60.700001,56.694889,60.959999,8335000 92 | 2014-11-25,61.160000,61.160000,59.950001,56.081062,60.299999,14802600 93 | 2014-11-26,60.570000,60.570000,60.200001,56.118267,60.340000,7626600 94 | 2014-11-28,60.400002,60.560001,60.029999,55.950859,60.160000,6759600 95 | 2014-12-01,59.980000,60.209999,59.549999,55.802048,60.000000,12771600 96 | 2014-12-02,60.009998,61.189999,60.000000,56.806492,61.080002,12546600 97 | 2014-12-03,60.959999,61.619999,60.810001,57.234306,61.540001,12115500 98 | 2014-12-04,61.099998,61.570000,60.840000,57.085503,61.380001,11515200 99 | 2014-12-05,62.009998,63.060001,61.880001,58.313148,62.700001,20071100 100 | 2014-12-08,62.599998,63.160000,62.259998,58.285244,62.669998,15528200 101 | 2014-12-09,61.849998,62.849998,61.560001,58.080639,62.450001,19676400 102 | 2014-12-10,62.160000,62.240002,60.369999,56.434471,60.680000,29620600 103 | 2014-12-11,61.169998,62.060001,61.110001,56.862286,61.139999,16886200 104 | 2014-12-12,60.529999,61.220001,59.959999,55.839264,60.040001,17405400 105 | 2014-12-15,60.740002,60.810001,58.790001,55.020824,59.160000,19209900 106 | 2014-12-16,58.419998,59.860001,58.110001,54.341904,58.430000,20709700 107 | 2014-12-17,58.570000,59.830002,58.340000,55.588146,59.770000,17856400 108 | 2014-12-18,60.639999,61.480000,60.439999,57.178501,61.480000,18173400 109 | 2014-12-19,61.400002,62.349998,61.369999,57.597019,61.930000,22756400 110 | 2014-12-22,62.160000,62.330002,61.610001,57.606316,61.939999,17073400 111 | 2014-12-23,62.049999,62.970001,61.930000,58.108536,62.480000,13552600 112 | 2014-12-24,62.740002,62.869999,62.270000,58.108536,62.480000,7412500 113 | 2014-12-26,62.669998,62.889999,62.410000,58.173637,62.549999,6086500 114 | 2014-12-29,62.419998,63.340000,62.250000,58.554955,62.959999,10601200 115 | 2014-12-30,62.720001,63.279999,62.570000,58.731663,63.150002,7518100 116 | 2014-12-31,63.299999,63.490002,62.580002,58.201542,62.580002,18529400 117 | 2015-01-02,62.180000,62.959999,62.070000,58.491711,62.490002,12600000 118 | 2015-01-05,62.060001,62.279999,60.230000,56.675838,60.549999,20100600 119 | 2015-01-06,60.639999,60.750000,58.349998,55.206284,58.980000,29074100 120 | 2015-01-07,59.889999,59.889999,58.669998,55.290531,59.070000,23843200 121 | 2015-01-08,59.970001,60.900002,59.970001,56.526073,60.389999,16971100 122 | 2015-01-09,60.720001,60.790001,59.290001,55.543251,59.340000,15396200 123 | 2015-01-12,59.279999,59.400002,58.270000,55.065887,58.830002,15455200 124 | 2015-01-13,59.259998,59.700001,58.369999,55.075245,58.840000,21644700 125 | 2015-01-14,58.840000,58.840000,55.270000,53.175133,56.810001,49394500 126 | 2015-01-15,55.730000,56.610001,54.500000,51.471577,54.990002,42458100 127 | 2015-01-16,54.660000,56.000000,54.639999,52.351437,55.930000,29368900 128 | 2015-01-20,56.040001,56.389999,55.419998,52.145515,55.709999,23477700 129 | 2015-01-21,55.450001,56.419998,55.189999,52.313995,55.889999,21842400 130 | 2015-01-22,56.380001,57.730000,55.959999,53.905224,57.590000,31423500 131 | 2015-01-23,57.720001,57.869999,56.660000,53.053448,56.680000,15458300 132 | 2015-01-26,56.410000,56.990002,56.200001,53.137688,56.770000,12577700 133 | 2015-01-27,56.049999,56.610001,55.759998,52.604164,56.200001,15220500 134 | 2015-01-28,56.619999,56.680000,54.750000,51.246937,54.750000,24354400 135 | 2015-01-29,55.270000,55.889999,54.680000,52.108074,55.669998,20393300 136 | 2015-01-30,54.990002,55.500000,54.369999,50.900612,54.380001,26943700 137 | 2015-02-02,54.529999,55.650002,54.270000,51.920868,55.470001,20308900 138 | 2015-02-03,55.910000,56.779999,55.869999,53.090889,56.720001,18812500 139 | 2015-02-04,56.320000,57.070000,56.279999,52.772640,56.380001,14934100 140 | 2015-02-05,56.860001,57.040001,56.459999,53.137688,56.770000,11293900 141 | 2015-02-06,57.750000,58.730000,57.540001,54.186024,57.889999,25214000 142 | 2015-02-09,57.419998,58.099998,57.230000,54.120510,57.820000,14372400 143 | 2015-02-10,58.419998,58.709999,58.049999,54.719551,58.459999,16367300 144 | 2015-02-11,58.060001,58.660000,57.840000,54.635319,58.369999,13061900 145 | 2015-02-12,58.930000,59.709999,58.549999,55.758537,59.570000,23211300 146 | 2015-02-13,59.459999,60.220001,59.340000,55.852139,59.669998,16479100 147 | 2015-02-17,59.360001,60.139999,59.320000,56.254620,60.099998,15308800 148 | 2015-02-18,60.099998,60.099998,59.119999,55.571339,59.369999,14278100 149 | 2015-02-19,59.150002,59.480000,58.799999,55.440292,59.230000,11256500 150 | 2015-02-20,58.959999,59.889999,58.349998,55.973820,59.799999,15379000 151 | 2015-02-23,59.500000,59.529999,58.799999,55.552612,59.349998,16814000 152 | 2015-02-24,60.250000,61.250000,60.080002,56.928566,60.820000,22937700 153 | 2015-02-25,60.759998,61.270000,60.750000,57.228085,61.139999,18307900 154 | 2015-02-26,61.029999,61.700001,60.910000,57.639931,61.580002,15444800 155 | 2015-02-27,61.130001,61.919998,61.130001,57.359127,61.279999,15225900 156 | 2015-03-02,61.279999,61.830002,61.029999,57.817780,61.770000,13047300 157 | 2015-03-03,61.650002,61.990002,61.500000,58.004982,61.970001,13706900 158 | 2015-03-04,61.639999,62.169998,61.349998,58.154747,62.130001,16625500 159 | 2015-03-05,62.200001,62.230000,61.599998,58.033062,62.000000,10931300 160 | 2015-03-06,62.160000,62.869999,60.799999,56.994080,60.889999,22719200 161 | 2015-03-09,60.840000,61.630001,60.799999,57.565044,61.500000,13001500 162 | 2015-03-10,60.759998,61.009998,59.959999,56.123585,59.959999,16357700 163 | 2015-03-11,60.130001,60.650002,59.959999,56.385670,60.240002,13015600 164 | 2015-03-12,60.650002,61.450001,60.650002,57.443363,61.369999,18159600 165 | 2015-03-13,61.400002,61.860001,60.430000,57.097046,61.000000,16506200 166 | 2015-03-16,61.500000,61.919998,61.250000,57.892662,61.849998,15182900 167 | 2015-03-17,61.340000,61.660000,60.919998,57.668015,61.610001,11718300 168 | 2015-03-18,61.389999,62.049999,61.090000,57.799057,61.750000,15697900 169 | 2015-03-19,61.570000,61.650002,60.759998,57.284241,61.200001,11523800 170 | 2015-03-20,61.320000,62.099998,61.150002,57.799057,61.750000,18368300 171 | 2015-03-23,61.750000,62.080002,61.119999,57.228085,61.139999,15112900 172 | 2015-03-24,60.970001,61.240002,60.450001,56.591591,60.459999,12128700 173 | 2015-03-25,60.529999,60.639999,59.590000,55.795982,59.610001,14950900 174 | 2015-03-26,59.459999,59.790001,58.869999,55.730453,59.540001,14039600 175 | 2015-03-27,59.490002,59.779999,59.000000,55.739815,59.549999,11755800 176 | 2015-03-30,60.880001,61.459999,60.610001,57.059601,60.959999,20656500 177 | 2015-03-31,60.720001,60.939999,60.419998,56.703922,60.580002,17346700 178 | 2015-04-01,60.410000,60.570000,59.730000,56.487198,59.950001,18100600 179 | 2015-04-02,60.070000,60.700001,60.000000,57.024281,60.520000,12697800 180 | 2015-04-06,59.919998,60.750000,59.650002,56.977169,60.470001,12025200 181 | 2015-04-07,61.150002,61.500000,60.849998,57.335213,60.849998,11505500 182 | 2015-04-08,61.060001,61.560001,60.939999,57.523666,61.049999,11734000 183 | 2015-04-09,61.270000,61.580002,60.830002,57.919403,61.470001,11728500 184 | 2015-04-10,61.349998,61.779999,61.200001,58.136120,61.700001,9869700 185 | 2015-04-13,61.639999,62.270000,61.500000,58.484741,62.070000,15468700 186 | 2015-04-14,62.959999,63.610001,62.740002,59.398724,63.040001,33775400 187 | 2015-04-15,63.080002,64.480003,63.009998,60.501137,64.209999,28732200 188 | 2015-04-16,64.080002,64.269997,63.660000,60.124237,63.810001,16640500 189 | 2015-04-17,63.250000,63.400002,62.490002,59.210266,62.840000,20221200 190 | 2015-04-20,63.220001,63.520000,63.139999,59.587162,63.240002,12755300 191 | 2015-04-21,63.330002,63.599998,62.130001,58.710888,62.310001,14985100 192 | 2015-04-22,62.650002,63.150002,62.029999,59.304493,62.939999,14484700 193 | 2015-04-23,62.790001,63.209999,62.599998,59.172573,62.799999,12851300 194 | 2015-04-24,62.630001,62.840000,62.340000,58.984131,62.599998,9597500 195 | 2015-04-27,62.700001,63.150002,62.310001,58.739151,62.340000,11146400 196 | 2015-04-28,62.490002,62.779999,61.770000,59.134884,62.759998,12307800 197 | 2015-04-29,62.560001,63.889999,62.459999,59.926376,63.599998,17601200 198 | 2015-04-30,63.580002,63.880001,62.919998,59.606014,63.259998,16840900 199 | 2015-05-01,63.700001,63.869999,63.330002,59.935791,63.610001,11640100 200 | 2015-05-04,63.680000,64.870003,63.639999,60.981682,64.720001,14972500 201 | 2015-05-05,64.510002,65.320000,64.290001,60.680161,64.400002,17692400 202 | 2015-05-06,64.529999,65.070000,63.419998,60.227879,63.919998,18087900 203 | 2015-05-07,63.669998,64.599998,63.250000,60.774384,64.500000,15039900 204 | 2015-05-08,64.970001,65.650002,64.599998,61.707195,65.489998,16802600 205 | 2015-05-11,65.260002,65.639999,65.080002,61.669514,65.449997,13798800 206 | 2015-05-12,65.309998,65.540001,64.760002,61.584713,65.360001,12762200 207 | 2015-05-13,65.419998,65.629997,65.059998,61.735462,65.519997,11874100 208 | 2015-05-14,65.830002,66.180000,65.709999,62.234848,66.050003,11855500 209 | 2015-05-15,66.129997,66.160004,65.440002,62.074665,65.879997,11152100 210 | 2015-05-18,65.800003,66.540001,65.800003,62.583481,66.419998,10510900 211 | 2015-05-19,66.769997,67.190002,66.570000,63.139404,67.010002,14282700 212 | 2015-05-20,66.949997,67.029999,66.400002,62.640030,66.480003,12446000 213 | 2015-05-21,66.139999,66.680000,66.010002,62.800190,66.650002,12934500 214 | 2015-05-22,66.629997,66.830002,66.320000,62.630596,66.470001,9296900 215 | 2015-05-26,66.199997,66.290001,65.309998,61.933342,65.730003,15571300 216 | 2015-05-27,65.949997,66.650002,65.820000,62.630596,66.470001,10963700 217 | 2015-05-28,66.360001,66.400002,65.739998,62.376190,66.199997,11797400 218 | 2015-05-29,66.180000,66.220001,65.360001,61.980457,65.779999,14310700 219 | 2015-06-01,65.989998,66.660004,65.970001,62.263123,66.080002,11899300 220 | 2015-06-02,65.830002,66.389999,65.580002,62.206585,66.019997,12784200 221 | 2015-06-03,66.430000,67.129997,66.269997,62.847298,66.699997,12832500 222 | 2015-06-04,66.309998,67.050003,66.010002,62.498684,66.330002,13863300 223 | 2015-06-05,67.370003,67.839996,67.010002,63.525715,67.419998,20801100 224 | 2015-06-08,67.459999,67.550003,66.809998,63.026337,66.889999,14558700 225 | 2015-06-09,66.949997,67.269997,66.470001,63.299591,67.180000,13263500 226 | 2015-06-10,67.589996,68.500000,67.470001,64.317200,68.260002,17478900 227 | 2015-06-11,68.360001,68.680000,68.150002,64.562180,68.519997,13739900 228 | 2015-06-12,68.309998,68.540001,67.870003,64.307777,68.250000,11804700 229 | 2015-06-15,67.580002,68.209999,67.300003,64.062798,67.989998,14082300 230 | 2015-06-16,67.769997,68.519997,67.620003,64.420853,68.370003,11692800 231 | 2015-06-17,68.410004,68.680000,68.040001,64.204132,68.139999,14521900 232 | 2015-06-18,68.349998,68.820000,67.900002,64.807159,68.779999,16759600 233 | 2015-06-19,68.459999,68.669998,67.919998,64.147598,68.080002,21606400 234 | 2015-06-22,68.870003,69.290001,68.750000,64.976776,68.959999,14306700 235 | 2015-06-23,69.349998,69.820000,69.190002,65.721138,69.750000,15736900 236 | 2015-06-24,69.510002,69.769997,68.910004,65.033295,69.019997,16995000 237 | 2015-06-25,69.320000,69.470001,68.639999,64.684669,68.650002,13314300 238 | 2015-06-26,68.940002,69.290001,68.769997,64.967354,68.949997,14489200 239 | 2015-06-29,67.680000,68.260002,67.160004,63.318420,67.199997,19934400 240 | 2015-06-30,67.889999,68.110001,67.160004,63.846077,67.760002,20677400 241 | 2015-07-01,68.120003,68.389999,67.779999,64.557373,68.070000,13964400 242 | 2015-07-02,67.949997,68.129997,67.190002,64.035751,67.519997,12822900 243 | 2015-07-06,66.879997,67.459999,66.540001,63.855560,67.330002,13527100 244 | 2015-07-07,67.089996,67.220001,65.300003,63.352921,66.800003,22421500 245 | 2015-07-08,66.000000,66.160004,65.209999,62.053612,65.430000,17707200 246 | 2015-07-09,66.489998,66.699997,65.989998,62.698524,66.110001,14915200 247 | 2015-07-10,67.220001,67.400002,66.830002,63.590015,67.050003,12356100 248 | 2015-07-13,67.889999,68.139999,67.680000,64.576347,68.089996,16175600 249 | 2015-07-14,67.980003,69.099998,67.760002,65.477333,69.040001,20185100 250 | 2015-07-15,69.230003,69.430000,68.849998,65.619583,69.190002,16891600 251 | 2015-07-16,69.629997,69.949997,69.410004,65.970482,69.559998,18035700 252 | 2015-07-17,69.349998,69.489998,68.919998,65.638550,69.209999,14040700 253 | 2015-07-20,69.500000,69.769997,69.180000,65.685974,69.260002,11512900 254 | 2015-07-21,69.160004,69.540001,68.870003,65.534218,69.099998,11659900 255 | 2015-07-22,69.279999,70.290001,69.199997,66.463661,70.080002,15493000 256 | 2015-07-23,70.190002,70.610001,69.459999,66.046356,69.639999,14331800 257 | 2015-07-24,69.440002,69.559998,68.680000,65.354034,68.910004,12413900 258 | 2015-07-27,68.150002,68.220001,67.570000,64.500481,68.010002,16801600 259 | 2015-07-28,68.550003,68.599998,67.769997,64.538414,68.050003,14932400 260 | 2015-07-29,68.320000,69.099998,68.160004,65.382477,68.940002,13059200 261 | 2015-07-30,68.930000,69.449997,68.540001,65.477333,69.040001,10197200 262 | 2015-07-31,69.010002,69.040001,68.400002,64.993637,68.529999,11911800 263 | 2015-08-03,68.589996,68.839996,68.000000,64.993637,68.529999,9980600 264 | 2015-08-04,68.470001,68.949997,68.309998,64.927246,68.459999,10964000 265 | 2015-08-05,69.050003,69.419998,68.559998,65.183319,68.730003,11302900 266 | 2015-08-06,68.750000,68.940002,68.000000,64.728096,68.250000,10803400 267 | 2015-08-07,68.330002,68.739998,67.550003,64.538414,68.050003,11453300 268 | 2015-08-10,68.220001,69.010002,68.220001,65.335068,68.889999,12661400 269 | 2015-08-11,68.230003,68.400002,67.849998,64.709129,68.230003,14800300 270 | 2015-08-12,67.410004,67.550003,66.070000,63.770214,67.239998,21069000 271 | 2015-08-13,67.250000,67.800003,66.970001,64.064224,67.550003,11930600 272 | 2015-08-14,67.419998,67.910004,67.400002,64.386665,67.889999,11248800 273 | 2015-08-17,67.620003,68.239998,67.400002,64.557373,68.070000,10326500 274 | 2015-08-18,67.980003,68.360001,67.839996,64.690155,68.209999,10617500 275 | 2015-08-19,67.930000,68.309998,67.360001,64.111633,67.599998,15166900 276 | 2015-08-20,66.809998,67.040001,65.940002,62.537289,65.940002,20972300 277 | 2015-08-21,65.089996,65.440002,63.570000,60.318043,63.599998,28235500 278 | 2015-08-24,59.290001,62.919998,50.070000,57.140915,60.250000,36339100 279 | 2015-08-25,63.099998,63.320000,59.730000,56.818459,59.910000,31772500 280 | 2015-08-26,61.799999,62.980000,60.549999,59.663651,62.910000,33576800 281 | 2015-08-27,63.980000,64.730003,63.139999,61.152634,64.480003,29045700 282 | 2015-08-28,64.290001,64.459999,63.599998,60.820694,64.129997,16687300 283 | 2015-08-31,63.610001,64.349998,63.470001,60.792244,64.099998,14223400 284 | 2015-09-01,62.849998,62.849998,60.990002,58.278992,61.450001,23637300 285 | 2015-09-02,62.619999,62.910000,61.540001,59.341198,62.570000,17757900 286 | 2015-09-03,62.880001,63.660000,62.450001,59.445522,62.680000,17065400 287 | 2015-09-04,61.799999,61.919998,60.750000,58.326412,61.500000,20189000 288 | 2015-09-08,62.770000,63.200001,62.330002,59.900745,63.160000,13385100 289 | 2015-09-09,63.939999,64.339996,62.000000,58.971321,62.180000,13889500 290 | 2015-09-10,61.860001,63.000000,61.450001,59.426552,62.660000,15751100 291 | 2015-09-11,62.380001,62.660000,61.990002,59.331715,62.560001,12766700 292 | 2015-09-14,62.639999,62.689999,62.119999,59.160999,62.380001,10202800 293 | 2015-09-15,62.759998,63.889999,62.509998,60.299084,63.580002,14023500 294 | 2015-09-16,63.889999,64.290001,63.209999,60.830181,64.139999,12235900 295 | 2015-09-17,64.139999,64.639999,62.389999,59.417068,62.650002,21249200 296 | 2015-09-18,61.830002,61.830002,60.779999,57.795307,60.939999,31008000 297 | 2015-09-21,61.520000,61.910000,61.080002,58.278992,61.450001,13136400 298 | 2015-09-22,60.599998,61.090000,60.419998,57.766857,60.910000,14811900 299 | 2015-09-23,60.799999,61.150002,60.320000,57.510792,60.639999,11712200 300 | 2015-09-24,60.009998,60.380001,59.459999,57.112465,60.220001,17293400 301 | 2015-09-25,61.270000,61.860001,60.869999,58.297958,61.470001,18384300 302 | 2015-09-28,60.919998,61.009998,59.689999,56.884850,59.980000,17452200 303 | 2015-09-29,59.980000,60.130001,58.730000,56.752075,59.840000,19334900 304 | 2015-09-30,60.700001,61.000000,60.110001,57.823765,60.970001,18743800 305 | 2015-10-01,61.119999,61.869999,60.540001,58.250542,61.419998,16863200 306 | 2015-10-02,59.590000,60.860001,58.529999,58.088150,60.810001,20435100 307 | 2015-10-05,61.240002,62.240002,61.220001,59.243992,62.020000,13471100 308 | 2015-10-06,62.110001,62.360001,61.619999,59.272648,62.049999,12134800 309 | 2015-10-07,62.549999,63.029999,61.759998,59.349064,62.130001,12773100 310 | 2015-10-08,61.849998,62.250000,61.430000,59.349064,62.130001,13964600 311 | 2015-10-09,62.389999,62.549999,61.580002,59.158020,61.930000,12112000 312 | 2015-10-12,61.840000,62.009998,61.400002,58.957417,61.720001,10857400 313 | 2015-10-13,61.389999,62.160000,61.310001,58.795021,61.549999,15621900 314 | 2015-10-14,60.759998,60.970001,59.540001,57.304855,59.990002,28989400 315 | 2015-10-15,60.470001,61.959999,60.099998,59.119812,61.889999,18147900 316 | 2015-10-16,62.430000,62.650002,62.090000,59.635635,62.430000,17456600 317 | 2015-10-19,62.000000,62.770000,61.910000,59.435040,62.220001,14510400 318 | 2015-10-20,62.360001,62.820000,62.080002,59.721611,62.520000,11487700 319 | 2015-10-21,62.880001,62.959999,62.049999,59.282196,62.060001,12113400 320 | 2015-10-22,62.419998,63.580002,62.419998,60.361614,63.189999,15295700 321 | 2015-10-23,63.630001,64.190002,63.500000,61.011181,63.869999,16985200 322 | 2015-10-26,63.840000,63.990002,63.410000,61.039841,63.900002,13880200 323 | 2015-10-27,63.529999,63.860001,63.310001,60.791477,63.639999,8831900 324 | 2015-10-28,63.700001,65.739998,63.689999,62.568222,65.500000,17962000 325 | 2015-10-29,65.260002,65.830002,64.879997,62.291206,65.209999,12753700 326 | 2015-10-30,65.300003,65.339996,64.129997,61.374168,64.250000,15731400 327 | 2015-11-02,64.449997,65.750000,64.389999,62.606430,65.540001,15253300 328 | 2015-11-03,65.290001,66.099998,65.169998,62.835690,65.779999,11519500 329 | 2015-11-04,66.010002,66.150002,65.629997,62.902561,65.849998,11388400 330 | 2015-11-05,65.790001,66.669998,65.750000,63.466148,66.440002,12715900 331 | 2015-11-06,68.370003,69.029999,68.099998,65.395737,68.459999,23262700 332 | 2015-11-09,68.699997,68.720001,67.080002,64.373634,67.389999,17143800 333 | 2015-11-10,67.190002,67.849998,66.930000,64.650650,67.680000,13239700 334 | 2015-11-11,68.099998,68.169998,67.250000,64.335419,67.349998,8513900 335 | 2015-11-12,66.860001,66.900002,65.949997,63.045845,66.000000,13576900 336 | 2015-11-13,65.839996,66.169998,65.230003,62.625534,65.559998,11837000 337 | 2015-11-16,65.459999,66.580002,65.169998,63.533020,66.510002,11041100 338 | 2015-11-17,66.669998,66.739998,65.889999,63.170025,66.129997,12354800 339 | 2015-11-18,66.480003,67.550003,66.370003,64.430931,67.449997,12911400 340 | 2015-11-19,67.580002,67.820000,67.040001,64.631546,67.660004,12839500 341 | 2015-11-20,67.989998,68.110001,67.379997,64.516914,67.540001,11209600 342 | 2015-11-23,67.309998,67.580002,66.779999,63.886452,66.879997,11339000 343 | 2015-11-24,66.169998,67.139999,66.040001,63.790932,66.779999,10910000 344 | 2015-11-25,66.930000,67.120003,66.550003,63.867344,66.860001,7772000 345 | 2015-11-27,67.000000,67.330002,66.639999,64.163483,67.169998,4052500 346 | 2015-11-30,67.279999,67.519997,66.680000,63.695408,66.680000,15147500 347 | 2015-12-01,67.339996,67.830002,66.989998,64.583771,67.610001,12708800 348 | 2015-12-02,67.830002,67.879997,66.480003,63.676319,66.660004,13440900 349 | 2015-12-03,66.830002,67.029999,65.580002,62.854786,65.800003,14626900 350 | 2015-12-04,66.099998,68.000000,66.029999,64.851250,67.889999,17786000 351 | 2015-12-07,67.660004,67.750000,66.400002,64.001076,67.000000,11686000 352 | 2015-12-08,66.250000,66.959999,65.699997,63.007633,65.959999,13084500 353 | 2015-12-09,65.610001,66.580002,65.040001,62.530010,65.459999,16770200 354 | 2015-12-10,65.540001,66.500000,65.080002,62.673294,65.610001,12807800 355 | 2015-12-11,64.800003,65.160004,63.509998,61.202229,64.070000,17889300 356 | 2015-12-14,64.230003,64.760002,63.599998,61.393276,64.269997,17638200 357 | 2015-12-15,65.070000,66.650002,65.070000,63.141361,66.099998,18126600 358 | 2015-12-16,66.910004,67.739998,65.910004,64.507347,67.529999,21720000 359 | 2015-12-17,67.900002,68.000000,66.080002,63.313305,66.279999,18122100 360 | 2015-12-18,65.970001,65.970001,64.400002,61.517464,64.400002,23819600 361 | 2015-12-21,65.019997,65.559998,64.830002,62.606430,65.540001,18869300 362 | 2015-12-22,65.919998,66.000000,64.980003,62.740162,65.680000,12149500 363 | 2015-12-23,66.120003,66.849998,66.050003,63.743172,66.730003,12524500 364 | 2015-12-24,66.620003,66.889999,66.320000,63.618996,66.599998,4468200 365 | 2015-12-28,66.290001,66.449997,65.709999,63.408833,66.379997,6610600 366 | 2015-12-29,66.839996,67.300003,66.739998,64.067940,67.070000,9820800 367 | 2015-12-30,67.040001,67.050003,66.449997,63.609436,66.589996,7190700 368 | 2015-12-31,66.190002,66.779999,66.000000,63.074501,66.029999,14490200 369 | 2016-01-04,63.950001,64.059998,63.009998,61.180050,63.619999,25393200 370 | 2016-01-05,63.700001,64.129997,63.040001,61.285831,63.730000,16566700 371 | 2016-01-06,62.720001,63.130001,62.340000,60.401123,62.810001,22961500 372 | 2016-01-07,61.459999,62.000000,60.080002,57.958534,60.270000,27630900 373 | 2016-01-08,61.130001,61.270000,58.849998,56.660305,58.919998,22373300 374 | 2016-01-11,58.830002,59.220001,58.040001,56.573753,58.830002,20925500 375 | 2016-01-12,59.450001,59.560001,58.099998,56.698772,58.959999,22971600 376 | 2016-01-13,59.459999,59.680000,56.910000,55.140900,57.340000,28808100 377 | 2016-01-14,58.160000,59.380001,57.290001,55.967922,58.200001,31296300 378 | 2016-01-15,56.450001,57.570000,56.220001,54.852406,57.040001,37573000 379 | 2016-01-19,57.730000,57.970001,56.509998,54.823563,57.009998,22818900 380 | 2016-01-20,55.630001,56.180000,54.660000,53.381088,55.509998,34646100 381 | 2016-01-21,55.740002,56.520000,55.060001,53.131054,55.250000,31301100 382 | 2016-01-22,56.439999,57.160000,56.299999,54.765858,56.950001,22732200 383 | 2016-01-25,56.480000,56.849998,55.599998,53.525337,55.660000,21114400 384 | 2016-01-26,55.849998,57.150002,55.810001,54.890877,57.080002,17535700 385 | 2016-01-27,57.080002,58.270000,56.560001,54.852406,57.040001,20560000 386 | 2016-01-28,57.520000,57.970001,56.630001,55.083210,57.279999,15497900 387 | 2016-01-29,57.830002,59.540001,57.509998,57.218063,59.500000,26992200 388 | 2016-02-01,59.160000,59.650002,58.439999,56.602608,58.860001,16807900 389 | 2016-02-02,57.880001,57.980000,56.750000,54.842789,57.029999,22448200 390 | 2016-02-03,57.369999,57.799999,55.020000,55.208214,57.410000,31543200 391 | 2016-02-04,57.060001,58.520000,57.060001,56.160255,58.400002,21651300 392 | 2016-02-05,58.580002,59.139999,57.419998,55.535179,57.750000,22001300 393 | 2016-02-08,56.689999,56.919998,55.540001,54.371586,56.540001,28267600 394 | 2016-02-09,55.290001,56.689999,55.130001,54.044624,56.200001,26300000 395 | 2016-02-10,56.570000,57.410000,55.470001,53.390701,55.520000,22389600 396 | 2016-02-11,53.900002,53.910000,52.500000,51.034660,53.070000,44334700 397 | 2016-02-12,55.650002,57.570000,55.169998,55.285152,57.490002,37011400 398 | 2016-02-16,58.230000,58.599998,57.639999,56.112164,58.349998,23730700 399 | 2016-02-17,58.849998,59.250000,58.389999,56.516064,58.770000,21580100 400 | 2016-02-18,58.840000,58.860001,57.250000,55.592880,57.810001,17037800 401 | 2016-02-19,57.500000,58.169998,57.080002,55.602489,57.820000,15658200 402 | 2016-02-22,58.509998,58.880001,58.419998,56.323730,58.570000,14882800 403 | 2016-02-23,57.900002,58.090000,55.959999,53.967690,56.119999,31772500 404 | 2016-02-24,55.200001,56.209999,54.330002,53.986923,56.139999,25560100 405 | 2016-02-25,56.130001,57.029999,56.040001,54.823563,57.009998,14473300 406 | 2016-02-26,57.639999,58.110001,57.139999,55.333233,57.540001,20947500 407 | 2016-02-29,57.410000,57.610001,56.290001,54.140793,56.299999,19554100 408 | 2016-03-01,56.759998,59.200001,56.669998,56.929565,59.200001,23958100 409 | 2016-03-02,59.200001,59.900002,58.959999,57.468094,59.759998,20943100 410 | 2016-03-03,59.580002,59.959999,59.099998,57.660416,59.959999,15790600 411 | 2016-03-04,60.099998,60.549999,59.529999,57.746967,60.049999,18459000 412 | 2016-03-07,59.540001,60.049999,59.320000,57.641190,59.939999,12832400 413 | 2016-03-08,59.209999,59.500000,58.680000,56.525681,58.779999,14132900 414 | 2016-03-09,59.150002,59.540001,58.680000,56.852634,59.119999,13238800 415 | 2016-03-10,59.590000,59.669998,57.810001,56.362198,58.610001,21139200 416 | 2016-03-11,59.389999,59.509998,58.650002,57.064198,59.340000,21055000 417 | 2016-03-14,59.150002,59.310001,58.599998,56.852634,59.119999,13436100 418 | 2016-03-15,58.540001,59.209999,58.430000,56.929565,59.200001,10910500 419 | 2016-03-16,58.980000,59.750000,58.470001,56.660305,58.919998,17423900 420 | 2016-03-17,58.770000,59.130001,57.990002,56.496822,58.750000,19405700 421 | 2016-03-18,60.049999,60.970001,59.660000,58.160480,60.480000,29570200 422 | 2016-03-21,60.220001,60.820000,59.959999,58.141243,60.459999,12684400 423 | 2016-03-22,59.990002,60.580002,59.619999,57.929684,60.240002,12042700 424 | 2016-03-23,60.340000,60.509998,59.860001,57.641190,59.939999,11658700 425 | 2016-03-24,59.299999,59.509998,58.869999,57.198830,59.480000,12921200 426 | 2016-03-28,59.529999,59.750000,59.180000,57.121899,59.400002,11159700 427 | 2016-03-29,59.330002,59.330002,58.529999,56.766087,59.029999,15933400 428 | 2016-03-30,59.459999,60.230000,59.380001,57.420013,59.709999,13307100 429 | 2016-03-31,59.450001,59.930000,59.110001,56.948803,59.220001,14904700 430 | 2016-04-01,59.020000,60.060001,58.560001,57.573872,59.869999,15417500 431 | 2016-04-04,59.439999,59.570000,58.959999,57.351059,59.200001,12305000 432 | 2016-04-05,58.590000,58.830002,58.209999,56.537292,58.360001,12886600 433 | 2016-04-06,58.180000,58.880001,57.950001,56.973232,58.810001,12167900 434 | 2016-04-07,58.259998,58.430000,57.070000,55.529770,57.320000,19226800 435 | 2016-04-08,57.709999,58.580002,57.689999,55.936657,57.740002,13547700 436 | 2016-04-11,57.910000,58.880001,57.910000,56.382286,58.200001,17627800 437 | 2016-04-12,58.340000,59.389999,58.200001,57.428558,59.279999,17779200 438 | 2016-04-13,60.480000,62.160000,60.380001,59.860168,61.790001,37516800 439 | 2016-04-14,61.689999,62.910000,61.610001,60.635178,62.590000,24249900 440 | 2016-04-15,62.880001,62.900002,61.450001,59.937664,61.869999,19290700 441 | 2016-04-18,61.639999,62.580002,61.529999,60.325176,62.270000,13794200 442 | 2016-04-19,62.549999,63.480000,62.549999,61.342381,63.320000,19255600 443 | 2016-04-20,63.480000,64.309998,63.150002,62.233643,64.239998,14594400 444 | 2016-04-21,64.260002,64.660004,63.340000,61.613632,63.599998,15395800 445 | 2016-04-22,63.639999,64.379997,63.639999,61.972080,63.970001,12444700 446 | 2016-04-25,63.599998,63.950001,63.150002,61.613632,63.599998,10687200 447 | 2016-04-26,63.810001,64.070000,63.330002,61.933331,63.930000,12048000 448 | 2016-04-27,63.860001,64.639999,63.599998,62.107708,64.110001,15284100 449 | 2016-04-28,63.639999,64.419998,63.349998,61.613632,63.599998,12852500 450 | 2016-04-29,63.090000,63.610001,62.700001,61.226128,63.200001,16376400 451 | 2016-05-02,63.689999,64.000000,63.139999,61.797703,63.790001,10247300 452 | 2016-05-03,62.900002,62.910000,61.799999,60.606121,62.560001,18988200 453 | 2016-05-04,61.750000,62.259998,61.270000,59.647038,61.570000,17030200 454 | 2016-05-05,61.599998,62.000000,61.060001,59.327347,61.240002,14033900 455 | 2016-05-06,60.700001,61.680000,60.590000,59.676102,61.599998,11046300 456 | 2016-05-09,61.369999,61.889999,61.049999,59.298283,61.209999,11197100 457 | 2016-05-10,61.549999,62.259998,61.349998,60.102356,62.040001,11897200 458 | 2016-05-11,61.970001,62.599998,61.810001,59.879543,61.810001,11254000 459 | 2016-05-12,62.270000,62.560001,61.369999,59.840790,61.770000,11071700 460 | 2016-05-13,61.700001,62.400002,61.020000,59.288597,61.200001,15122300 461 | 2016-05-16,61.209999,61.990002,61.000000,59.734222,61.660000,10951300 462 | 2016-05-17,61.430000,62.160000,61.150002,59.734222,61.660000,12180900 463 | 2016-05-18,61.700001,64.169998,61.689999,62.039894,64.040001,24007100 464 | 2016-05-19,63.529999,64.220001,62.900002,61.410191,63.389999,16076200 465 | 2016-05-20,63.860001,64.190002,63.369999,61.526443,63.509998,11862000 466 | 2016-05-23,63.450001,63.869999,63.160000,61.478008,63.459999,9347500 467 | 2016-05-24,63.939999,64.769997,63.810001,62.524281,64.540001,13839400 468 | 2016-05-25,64.940002,66.199997,64.919998,63.473667,65.519997,18935200 469 | 2016-05-26,65.570000,65.580002,64.910004,62.998978,65.029999,9428400 470 | 2016-05-27,65.209999,65.459999,65.050003,63.386478,65.430000,10070000 471 | 2016-05-31,65.730003,65.820000,64.959999,63.231480,65.269997,15139400 472 | 2016-06-01,64.760002,65.919998,64.260002,63.638355,65.690002,14031000 473 | 2016-06-02,65.519997,65.809998,65.160004,63.754608,65.809998,10637600 474 | 2016-06-03,64.250000,64.860001,63.549999,62.621155,64.639999,20225100 475 | 2016-06-06,64.639999,65.760002,64.599998,63.241161,65.279999,13193500 476 | 2016-06-07,65.449997,65.739998,65.040001,63.028034,65.059998,9924100 477 | 2016-06-08,64.930000,65.480003,64.919998,63.212097,65.250000,9428000 478 | 2016-06-09,64.790001,64.900002,64.269997,62.727715,64.750000,10817800 479 | 2016-06-10,63.930000,64.070000,63.580002,61.846142,63.840000,16678400 480 | 2016-06-13,63.480000,64.339996,63.259998,61.293941,63.270000,14314900 481 | 2016-06-14,62.680000,63.470001,61.680000,60.141109,62.080002,19509300 482 | 2016-06-15,62.410000,62.980000,61.910000,60.034546,61.970001,16982100 483 | 2016-06-16,61.450001,62.299999,60.900002,60.276737,62.220001,16791200 484 | 2016-06-17,62.299999,62.709999,61.930000,60.334858,62.279999,15751500 485 | 2016-06-20,63.450001,63.849998,62.340000,60.422050,62.369999,12213200 486 | 2016-06-21,62.730000,63.000000,62.139999,60.983932,62.950001,11611600 487 | 2016-06-22,62.950001,63.709999,62.680000,60.751427,62.709999,12643500 488 | 2016-06-23,63.700001,64.150002,63.529999,62.049583,64.050003,16583600 489 | 2016-06-24,60.480000,61.700001,59.340000,57.738564,59.599998,44108700 490 | 2016-06-27,58.709999,58.750000,57.049999,55.810719,57.610001,37300700 491 | 2016-06-28,59.189999,59.549999,58.259998,57.661060,59.520000,29088700 492 | 2016-06-29,60.360001,61.209999,60.000000,59.288597,61.200001,21483000 493 | 2016-06-30,61.630001,62.189999,61.020000,60.199230,62.139999,21343600 494 | 2016-07-01,61.660000,62.009998,61.160000,59.808708,61.259998,14217800 495 | 2016-07-05,60.450001,60.599998,59.099998,58.139217,59.549999,23357700 496 | 2016-07-06,59.009998,60.290001,58.759998,58.764057,60.189999,20429800 497 | 2016-07-07,60.520000,61.139999,60.160000,59.144817,60.580002,13771400 498 | 2016-07-08,61.330002,62.169998,61.330002,60.365204,61.830002,16998800 499 | 2016-07-11,62.419998,62.950001,62.139999,60.794781,62.270000,13151400 500 | 2016-07-12,63.029999,63.560001,62.889999,61.702747,63.200001,16588100 501 | 2016-07-13,63.080002,63.430000,62.639999,61.663692,63.160000,18526900 502 | 2016-07-14,64.739998,64.980003,64.050003,62.600952,64.120003,28985900 503 | 2016-07-15,64.750000,64.800003,63.610001,62.659527,64.180000,17607100 504 | 2016-07-18,64.129997,64.400002,63.900002,62.444744,63.959999,10824400 505 | 2016-07-19,63.610001,64.099998,63.459999,62.347115,63.860001,9737400 506 | 2016-07-20,64.110001,64.230003,63.709999,62.415455,63.930000,10411100 507 | 2016-07-21,64.000000,64.180000,63.630001,62.181137,63.689999,9808700 508 | 2016-07-22,63.900002,64.089996,63.599998,62.522846,64.040001,8195700 509 | 2016-07-25,63.980000,64.169998,63.680000,62.356873,63.869999,8168300 510 | 2016-07-26,63.980000,64.260002,63.709999,62.610710,64.129997,8067800 511 | 2016-07-27,64.080002,64.690002,64.059998,62.805981,64.330002,11806800 512 | 2016-07-28,64.000000,64.190002,63.720001,62.581425,64.099998,10013400 513 | 2016-07-29,63.799999,64.290001,63.750000,62.454510,63.970001,13210400 514 | 2016-08-01,64.150002,64.309998,63.610001,62.288532,63.799999,11422600 515 | 2016-08-02,63.590000,64.010002,63.380001,62.142086,63.650002,13550000 516 | 2016-08-03,63.689999,64.669998,63.650002,63.128162,64.660004,13122300 517 | 2016-08-04,64.489998,64.820000,64.269997,63.030521,64.559998,9873000 518 | 2016-08-05,65.139999,66.370003,65.070000,64.729301,66.300003,20752700 519 | 2016-08-08,66.070000,66.489998,65.839996,64.534042,66.099998,11359200 520 | 2016-08-09,66.180000,66.279999,65.690002,64.309494,65.870003,10097000 521 | 2016-08-10,65.919998,66.070000,65.160004,63.733467,65.279999,11556100 522 | 2016-08-11,65.269997,65.690002,65.019997,63.909206,65.459999,9604500 523 | 2016-08-12,64.970001,65.349998,64.860001,63.772522,65.320000,7685400 524 | 2016-08-15,65.559998,65.830002,65.459999,64.163055,65.720001,8371600 525 | 2016-08-16,65.360001,65.959999,65.239998,64.153282,65.709999,10128900 526 | 2016-08-17,65.800003,65.980003,65.540001,64.329018,65.889999,11868100 527 | 2016-08-18,65.620003,65.989998,65.529999,64.387596,65.949997,9313600 528 | 2016-08-19,65.720001,65.910004,65.220001,64.299736,65.860001,9084900 529 | 2016-08-22,65.750000,65.879997,65.410004,64.241150,65.800003,9055600 530 | 2016-08-23,66.070000,66.339996,65.760002,64.211861,65.769997,8949600 531 | 2016-08-24,65.989998,66.230003,65.769997,64.387596,65.949997,10167200 532 | 2016-08-25,65.910004,66.139999,65.790001,64.504753,66.070000,9978700 533 | 2016-08-26,66.330002,66.879997,65.849998,64.651207,66.220001,14038600 534 | 2016-08-29,66.489998,67.099998,66.459999,65.363907,66.949997,14583100 535 | 2016-08-30,66.949997,67.599998,66.949997,65.900879,67.500000,13791200 536 | 2016-08-31,67.459999,67.769997,66.860001,65.900879,67.500000,14952300 537 | 2016-09-01,67.639999,67.720001,66.650002,65.617752,67.209999,12226500 538 | 2016-09-02,67.400002,67.580002,66.980003,65.891113,67.489998,13720700 539 | 2016-09-06,67.500000,67.550003,66.709999,65.842300,67.440002,16649400 540 | 2016-09-07,67.160004,67.589996,66.959999,65.568932,67.160004,10070400 541 | 2016-09-08,67.220001,67.680000,67.000000,65.656807,67.250000,12253000 542 | 2016-09-09,67.029999,67.430000,66.639999,65.071014,66.650002,19686900 543 | 2016-09-12,66.139999,67.300003,65.760002,65.471291,67.059998,16453000 544 | 2016-09-13,66.110001,66.860001,65.820000,64.953857,66.529999,18876100 545 | 2016-09-14,66.269997,67.250000,66.209999,64.826942,66.400002,12648600 546 | 2016-09-15,66.290001,66.930000,66.089996,65.061256,66.639999,12531300 547 | 2016-09-16,66.089996,66.260002,65.440002,64.260674,65.820000,25161500 548 | 2016-09-19,66.150002,66.639999,65.849998,64.621918,66.190002,13466900 549 | 2016-09-20,66.750000,66.849998,66.239998,64.885521,66.459999,10092200 550 | 2016-09-21,66.839996,67.129997,66.309998,65.256516,66.839996,14116800 551 | 2016-09-22,66.989998,67.419998,66.839996,65.793480,67.389999,12781700 552 | 2016-09-23,67.389999,67.900002,67.180000,65.656807,67.250000,13967400 553 | 2016-09-26,66.599998,66.800003,65.540001,64.221626,65.779999,16408100 554 | 2016-09-27,65.410004,66.410004,65.110001,64.787888,66.360001,13711400 555 | 2016-09-28,66.580002,66.769997,65.989998,65.129601,66.709999,11278000 556 | 2016-09-29,66.699997,67.209999,65.349998,64.094711,65.650002,18727200 557 | 2016-09-30,66.080002,67.059998,66.080002,65.012436,66.589996,21680100 558 | 2016-10-03,66.349998,66.919998,66.260002,64.934334,66.510002,14901700 559 | 2016-10-04,66.209999,67.180000,66.099998,65.494873,66.599998,17226900 560 | 2016-10-05,66.889999,68.070000,66.800003,66.566795,67.690002,16280000 561 | 2016-10-06,67.730003,67.970001,67.050003,66.743805,67.870003,17485000 562 | 2016-10-07,67.790001,68.180000,67.400002,66.979820,68.110001,18497000 563 | 2016-10-10,68.339996,69.059998,68.230003,67.501015,68.639999,13027500 564 | 2016-10-11,68.500000,68.820000,67.930000,67.176491,68.309998,15657100 565 | 2016-10-12,68.260002,68.589996,68.050003,66.999481,68.129997,11899800 566 | 2016-10-13,67.459999,67.870003,66.820000,66.615959,67.739998,17890000 567 | 2016-10-14,68.800003,69.029999,67.300003,66.399597,67.519997,24163800 568 | 2016-10-17,67.419998,67.790001,66.739998,66.055412,67.169998,14963400 569 | 2016-10-18,67.849998,68.209999,67.540001,66.576607,67.699997,11870300 570 | 2016-10-19,67.809998,68.500000,67.809998,67.215836,68.349998,12705800 571 | 2016-10-20,68.080002,68.680000,67.940002,67.127319,68.260002,14122000 572 | 2016-10-21,67.809998,68.529999,67.699997,67.353508,68.489998,12175700 573 | 2016-10-24,68.970001,69.050003,68.500000,67.727211,68.870003,10197100 574 | 2016-10-25,68.879997,68.930000,68.379997,67.658371,68.800003,9945100 575 | 2016-10-26,68.370003,69.250000,68.370003,67.982887,69.129997,9801300 576 | 2016-10-27,69.489998,69.769997,69.099998,68.081238,69.230003,14210700 577 | 2016-10-28,69.529999,69.550003,68.470001,67.963219,69.110001,12766500 578 | 2016-10-31,69.430000,69.580002,69.230003,68.110733,69.260002,14336300 579 | 2016-11-01,69.480003,69.779999,68.330002,67.825546,68.970001,15564500 580 | 2016-11-02,68.650002,68.849998,68.010002,67.540367,68.680000,12449800 581 | 2016-11-03,68.860001,69.190002,68.220001,67.245331,68.379997,10369700 582 | 2016-11-04,68.489998,68.559998,67.639999,66.635628,67.760002,13571300 583 | 2016-11-07,69.080002,69.970001,69.000000,68.720444,69.879997,16515100 584 | 2016-11-08,69.699997,70.550003,69.239998,68.867950,70.029999,17475400 585 | 2016-11-09,71.459999,74.150002,71.320000,72.034515,73.250000,50948400 586 | 2016-11-10,74.220001,77.250000,74.220001,75.378105,76.650002,56192300 587 | 2016-11-11,76.300003,76.720001,75.769997,75.417442,76.690002,27475100 588 | 2016-11-14,77.250000,80.440002,77.250000,78.190651,79.510002,46130700 589 | 2016-11-15,78.370003,79.410004,77.779999,78.043137,79.360001,28126300 590 | 2016-11-16,78.220001,78.349998,76.879997,76.115662,77.400002,26054900 591 | 2016-11-17,77.930000,78.459999,77.599998,76.725372,78.019997,19306700 592 | 2016-11-18,77.959999,78.419998,77.550003,76.420517,77.709999,19770000 593 | 2016-11-21,78.000000,78.169998,77.290001,76.754875,78.050003,11983500 594 | 2016-11-22,78.349998,78.559998,77.760002,77.226906,78.529999,14410100 595 | 2016-11-23,78.870003,79.239998,77.889999,77.551437,78.860001,13373700 596 | 2016-11-25,79.099998,79.449997,78.470001,77.521935,78.830002,6185700 597 | 2016-11-28,78.180000,78.870003,78.019997,77.020401,78.320000,13007200 598 | 2016-11-29,78.389999,79.160004,78.389999,77.610435,78.919998,14144100 599 | 2016-11-30,79.919998,80.529999,79.699997,78.839691,80.169998,25351900 600 | 2016-12-01,80.650002,82.279999,80.650002,80.432823,81.790001,23823600 601 | 2016-12-02,81.800003,81.830002,80.900002,80.245964,81.599998,16931500 602 | 2016-12-05,82.300003,83.290001,82.290001,81.878426,83.260002,18529800 603 | 2016-12-06,83.599998,83.809998,82.430000,82.301292,83.690002,16130000 604 | 2016-12-07,83.550003,84.089996,82.849998,82.674988,84.070000,18996900 605 | 2016-12-08,84.230003,85.500000,83.940002,83.707565,85.120003,20844900 606 | 2016-12-09,85.019997,85.500000,84.139999,84.071411,85.489998,14567200 607 | 2016-12-12,85.360001,85.790001,84.290001,83.324028,84.730003,14511300 608 | 2016-12-13,84.980003,85.669998,83.820000,83.353539,84.760002,16669000 609 | 2016-12-14,83.879997,86.120003,83.760002,83.324028,84.730003,22622600 610 | 2016-12-15,85.400002,86.489998,84.900002,84.572952,86.000000,19438900 611 | 2016-12-16,86.290001,86.290001,84.889999,83.530548,84.940002,23008500 612 | 2016-12-19,84.800003,85.440002,84.190002,84.012421,85.430000,21685100 613 | 2016-12-20,85.790001,86.540001,85.550003,85.094162,86.529999,14587300 614 | 2016-12-21,86.430000,86.809998,86.029999,85.310516,86.750000,11400500 615 | 2016-12-22,86.440002,87.169998,86.209999,85.448196,86.889999,13924200 616 | 2016-12-23,87.000000,87.150002,86.400002,85.605537,87.050003,10725000 617 | 2016-12-27,87.050003,87.160004,86.750000,85.684196,87.129997,6946400 618 | 2016-12-28,87.160004,87.389999,86.349998,85.064659,86.500000,9455600 619 | 2016-12-29,86.580002,86.669998,85.040001,84.464783,85.889999,14689000 620 | 2016-12-30,86.099998,86.419998,85.660004,84.858147,86.290001,13617800 621 | 2017-01-03,87.339996,87.760002,85.980003,85.782555,87.230003,20550700 622 | 2017-01-04,86.959999,87.180000,86.400002,85.940773,86.910004,15266600 623 | 2017-01-05,86.809998,87.110001,85.260002,85.149689,86.110001,14300800 624 | 2017-01-06,86.389999,86.620003,85.940002,85.159576,86.120003,12893300 625 | 2017-01-09,85.730003,86.769997,85.519997,85.218903,86.180000,12806600 626 | 2017-01-10,86.070000,86.900002,85.720001,85.466118,86.430000,13989000 627 | 2017-01-11,86.430000,87.080002,85.910004,86.108864,87.080002,14713100 628 | 2017-01-12,86.760002,87.269997,86.019997,85.278229,86.239998,21337400 629 | 2017-01-13,87.110001,88.169998,86.099998,85.733101,86.699997,28296000 630 | 2017-01-17,84.930000,85.220001,83.279999,82.618240,83.550003,30024600 631 | 2017-01-18,83.629997,84.230003,83.029999,83.003891,83.940002,21270100 632 | 2017-01-19,84.059998,84.669998,83.120003,82.371025,83.300003,16555600 633 | 2017-01-20,83.430000,83.830002,83.290001,82.736893,83.669998,18436800 634 | 2017-01-23,83.300003,84.000000,83.209999,82.776451,83.709999,12179200 635 | 2017-01-24,83.919998,85.000000,83.559998,83.775192,84.720001,15175300 636 | 2017-01-25,85.839996,86.169998,85.169998,85.070580,86.029999,17551000 637 | 2017-01-26,85.949997,86.949997,85.949997,85.782555,86.750000,15962800 638 | 2017-01-27,86.660004,86.980003,86.269997,85.960541,86.930000,12535400 639 | 2017-01-30,86.190002,86.500000,85.320000,85.070580,86.029999,13661900 640 | 2017-01-31,85.599998,86.150002,84.089996,83.686188,84.629997,15655100 641 | 2017-02-01,85.540001,86.099998,84.680000,84.002617,84.949997,15430900 642 | 2017-02-02,84.339996,84.910004,84.160004,83.646629,84.589996,11081400 643 | 2017-02-03,86.190002,87.309998,85.870003,86.207756,87.180000,17885200 644 | 2017-02-06,86.790001,87.449997,86.610001,85.802322,86.769997,11828400 645 | 2017-02-07,87.139999,87.400002,86.480003,85.752884,86.720001,9392800 646 | 2017-02-08,86.180000,86.309998,85.370003,85.001358,85.959999,13970900 647 | 2017-02-09,85.959999,87.330002,85.959999,86.227531,87.199997,13749100 648 | 2017-02-10,87.480003,87.480003,86.889999,86.029755,87.000000,10992500 649 | 2017-02-13,87.440002,88.739998,87.430000,87.166931,88.150002,18739100 650 | 2017-02-14,88.300003,89.699997,88.110001,88.561203,89.559998,17932100 651 | 2017-02-15,90.080002,90.870003,89.349998,89.579720,90.589996,17381800 652 | 2017-02-16,90.400002,91.040001,89.769997,89.520393,90.529999,17672700 653 | 2017-02-17,89.820000,90.470001,89.690002,89.223747,90.230003,15776600 654 | 2017-02-21,90.510002,91.150002,90.459999,89.995049,91.010002,14068300 655 | 2017-02-22,90.519997,91.300003,90.419998,90.044479,91.059998,11839000 656 | 2017-02-23,91.180000,91.339996,90.519997,90.113701,91.129997,11067000 657 | 2017-02-24,90.180000,90.540001,89.730003,89.322624,90.330002,15062300 658 | 2017-02-27,90.320000,90.730003,90.019997,89.421509,90.430000,12361000 659 | 2017-02-28,89.849998,90.820000,89.589996,89.609398,90.620003,15183500 660 | 2017-03-01,92.790001,93.980003,92.610001,92.556152,93.599998,24451400 661 | 2017-03-02,93.870003,93.919998,92.029999,91.112434,92.139999,16862500 662 | 2017-03-03,92.139999,93.110001,92.139999,91.765076,92.800003,12817500 663 | 2017-03-06,92.250000,92.320000,91.099998,90.894890,91.919998,15059200 664 | 2017-03-07,91.639999,92.089996,91.209999,90.390579,91.410004,11156800 665 | 2017-03-08,92.680000,92.849998,91.099998,90.192810,91.209999,17378400 666 | 2017-03-09,91.599998,92.139999,91.150002,90.548790,91.570000,13726200 667 | 2017-03-10,91.949997,92.000000,90.529999,90.262024,91.279999,13729900 668 | 2017-03-13,91.309998,91.779999,90.930000,90.341133,91.360001,10004300 669 | 2017-03-14,91.019997,91.650002,90.769997,90.489464,91.510002,10237700 670 | 2017-03-15,91.800003,92.550003,91.129997,90.707008,91.730003,16601400 671 | 2017-03-16,92.029999,92.809998,91.570000,90.618011,91.639999,14492000 672 | 2017-03-17,91.830002,92.040001,90.650002,89.668724,90.680000,21734700 673 | 2017-03-20,90.269997,91.169998,89.790001,89.025963,90.029999,14623600 674 | 2017-03-21,90.360001,90.639999,87.059998,86.415405,87.389999,33089200 675 | 2017-03-22,86.889999,88.070000,86.010002,86.553841,87.529999,21741000 676 | 2017-03-23,87.209999,88.500000,87.089996,86.415405,87.389999,16090100 677 | 2017-03-24,87.790001,88.089996,86.769997,86.316528,87.290001,16093200 678 | 2017-03-27,85.529999,87.400002,85.230003,86.267082,87.239998,16689300 679 | 2017-03-28,87.019997,89.019997,86.980003,87.611916,88.599998,16264400 680 | 2017-03-29,88.599998,88.820000,88.080002,87.285591,88.269997,10207600 681 | 2017-03-30,88.199997,89.459999,88.120003,88.037117,89.029999,11631000 682 | 2017-03-31,88.709999,88.739998,87.750000,86.860382,87.839996,16987600 683 | 2017-04-03,87.989998,88.169998,86.599998,86.543961,87.519997,19831800 684 | 2017-04-04,86.889999,87.669998,86.720001,86.832375,87.309998,14280800 685 | 2017-04-05,88.419998,88.540001,86.129997,85.718506,86.190002,17635500 686 | 2017-04-06,85.980003,86.910004,85.250000,86.006920,86.480003,14379600 687 | 2017-04-07,85.930000,86.809998,85.709999,85.708557,86.180000,13097100 688 | 2017-04-10,86.080002,86.690002,85.400002,85.410194,85.879997,15081600 689 | 2017-04-11,85.540001,85.790001,84.800003,85.261024,85.730003,14690500 690 | 2017-04-12,85.930000,85.949997,85.029999,84.932823,85.400002,14730600 691 | 2017-04-13,85.500000,86.989998,84.400002,83.938293,84.400002,30529800 692 | 2017-04-17,84.440002,86.080002,84.370003,85.390305,85.860001,19071700 693 | 2017-04-18,85.360001,85.629997,84.739998,84.694138,85.160004,14127000 694 | 2017-04-19,85.500000,85.919998,84.360001,83.997963,84.459999,17588500 695 | 2017-04-20,84.980003,85.779999,84.550003,85.082008,85.550003,15635800 696 | 2017-04-21,85.500000,85.680000,84.510002,84.057632,84.519997,19820600 697 | 2017-04-24,86.550003,88.050003,86.419998,87.021332,87.500000,25468300 698 | 2017-04-25,88.550003,89.129997,88.260002,87.777184,88.260002,18253800 699 | 2017-04-26,88.349998,89.050003,88.139999,87.946251,88.430000,12832200 700 | 2017-04-27,88.370003,88.370003,87.010002,87.130737,87.610001,13329000 701 | 2017-04-28,87.599998,87.849998,86.949997,86.524071,87.000000,10755600 702 | 2017-05-01,87.360001,87.739998,86.559998,86.583740,87.059998,15712300 703 | 2017-05-02,86.709999,86.879997,86.019997,86.026802,86.500000,14414200 704 | 2017-05-03,86.059998,87.099998,86.019997,86.524071,87.000000,11540500 705 | 2017-05-04,87.690002,87.730003,86.570000,86.623520,87.099998,11540100 706 | 2017-05-05,87.250000,87.339996,86.419998,86.524071,87.000000,9436000 707 | 2017-05-08,87.040001,87.320000,86.650002,86.623520,87.099998,8162200 708 | 2017-05-09,87.260002,87.839996,86.500000,86.275436,86.750000,10273900 709 | 2017-05-10,86.529999,87.480003,86.470001,86.951721,87.430000,8334900 710 | 2017-05-11,87.089996,87.480003,86.349998,86.683197,87.160004,10907400 711 | 2017-05-12,86.680000,87.050003,86.339996,86.444504,86.919998,8738800 712 | 2017-05-15,87.099998,87.489998,86.860001,86.862206,87.339996,8835600 713 | 2017-05-16,87.360001,88.089996,87.339996,87.130737,87.610001,9795000 714 | 2017-05-17,87.610001,87.610001,83.970001,83.808998,84.269997,24679700 715 | 2017-05-18,84.070000,84.800003,83.360001,83.500702,83.959999,23350100 716 | 2017-05-19,84.209999,85.339996,84.150002,84.316216,84.779999,13412900 717 | 2017-05-22,85.180000,85.290001,84.209999,84.236649,84.699997,11636000 718 | 2017-05-23,84.750000,86.070000,84.510002,85.290855,85.760002,11753000 719 | 2017-05-24,85.879997,85.970001,85.239998,85.241127,85.709999,9833800 720 | 2017-05-25,85.989998,86.080002,85.080002,84.883095,85.349998,12238500 721 | 2017-05-26,85.110001,85.559998,85.019997,84.893044,85.360001,8087500 722 | 2017-05-30,85.129997,85.150002,83.779999,83.441032,83.900002,12603200 723 | 2017-05-31,83.730003,83.820000,81.639999,81.700607,82.150002,28327900 724 | 2017-06-01,82.459999,83.080002,81.650002,82.605621,83.059998,17123500 725 | 2017-06-02,82.290001,82.989998,81.980003,82.187920,82.639999,14998500 726 | 2017-06-05,82.639999,83.510002,82.580002,82.337105,82.790001,9080200 727 | 2017-06-06,82.290001,83.220001,82.129997,82.506172,82.959999,12196800 728 | 2017-06-07,83.309998,84.110001,83.099998,83.450981,83.910004,13711100 729 | 2017-06-08,83.910004,85.730003,83.889999,84.485283,84.949997,17951000 730 | 2017-06-09,85.510002,87.050003,85.389999,86.484291,86.959999,19120200 731 | 2017-06-12,86.959999,87.739998,86.889999,86.504181,86.980003,16053400 732 | 2017-06-13,87.550003,87.849998,86.980003,86.792587,87.269997,12557200 733 | 2017-06-14,86.769997,87.309998,85.820000,86.613571,87.089996,16175700 734 | 2017-06-15,86.250000,87.080002,86.239998,86.096420,86.570000,12509700 735 | 2017-06-16,86.849998,86.959999,86.019997,85.708557,86.180000,16936600 736 | 2017-06-19,86.970001,88.230003,86.849998,87.588219,88.070000,15972300 737 | 2017-06-20,87.750000,87.919998,87.370003,87.041222,87.519997,11197800 738 | 2017-06-21,87.480003,87.550003,86.760002,86.643417,87.120003,10005900 739 | 2017-06-22,86.930000,87.360001,86.650002,86.543961,87.019997,12180600 740 | 2017-06-23,87.660004,88.000000,86.610001,86.384834,86.860001,18812000 741 | 2017-06-26,87.010002,87.669998,86.620003,86.762756,87.239998,10082400 742 | 2017-06-27,87.709999,88.940002,87.500000,87.568329,88.050003,15415200 743 | 2017-06-28,88.599998,90.070000,88.599998,89.328644,89.820000,17466200 744 | 2017-06-29,92.339996,92.650002,90.309998,90.651367,91.150002,27697800 745 | 2017-06-30,91.959999,92.000000,91.160004,90.900002,91.400002,16331800 746 | 2017-07-03,91.559998,93.480003,91.410004,92.750000,92.750000,13208100 747 | 2017-07-05,93.120003,93.790001,92.610001,93.680000,93.680000,17535400 748 | 2017-07-06,93.540001,94.510002,92.879997,93.379997,93.379997,16596100 749 | 2017-07-07,93.959999,94.169998,93.230003,93.849998,93.849998,12817800 750 | 2017-07-10,93.500000,93.680000,93.089996,93.190002,93.190002,13987200 751 | 2017-07-11,93.330002,93.330002,92.279999,92.830002,92.830002,13262300 752 | 2017-07-12,92.610001,92.830002,92.070000,92.510002,92.510002,13540100 753 | 2017-07-13,92.690002,93.379997,92.339996,93.099998,93.099998,12820100 754 | 2017-07-14,90.809998,92.610001,90.580002,92.250000,92.250000,22235200 755 | 2017-07-17,91.820000,91.989998,91.250000,91.389999,91.389999,14374200 756 | 2017-07-18,90.449997,91.580002,90.320000,91.070000,91.070000,14532700 757 | -------------------------------------------------------------------------------- /volatility/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jasonstrimpel/volatility-trading/03186089284600461acdaa0e64b9a7d83bf9badd/volatility/__init__.py -------------------------------------------------------------------------------- /volatility/data.py: -------------------------------------------------------------------------------- 1 | import pandas 2 | 3 | 4 | def yahoo_helper(symbol, data_path, *args): 5 | """ 6 | Returns DataFrame/Panel of historical stock prices from symbols, over date 7 | range, start to end. 8 | 9 | Parameters 10 | ---------- 11 | symbol : string 12 | Single stock symbol (ticker) 13 | data_path: string 14 | Path to Yahoo! historical data CSV file 15 | *args: 16 | Additional arguments to pass to pandas.read_csv 17 | """ 18 | 19 | try: 20 | data = pandas.read_csv( 21 | data_path, 22 | parse_dates=['Date'], 23 | index_col='Date', 24 | usecols=[ 25 | 'Date', 26 | 'Open', 27 | 'High', 28 | 'Low', 29 | 'Adj Close', 30 | ], 31 | *args 32 | ).rename(columns={ 33 | 'Adj Close': 'Close' 34 | }) 35 | 36 | except Exception as e: 37 | raise e 38 | 39 | data.symbol = symbol 40 | return data 41 | -------------------------------------------------------------------------------- /volatility/models/GarmanKlass.py: -------------------------------------------------------------------------------- 1 | import math 2 | 3 | import numpy as np 4 | 5 | 6 | def get_estimator(price_data, window=30, trading_periods=252, clean=True): 7 | 8 | log_hl = (price_data['High'] / price_data['Low']).apply(np.log) 9 | log_co = (price_data['Close'] / price_data['Open']).apply(np.log) 10 | 11 | rs = 0.5 * log_hl**2 - (2*math.log(2)-1) * log_co**2 12 | 13 | def f(v): 14 | return (trading_periods * v.mean())**0.5 15 | 16 | result = rs.rolling(window=window, center=False).apply(func=f) 17 | 18 | if clean: 19 | return result.dropna() 20 | else: 21 | return result 22 | -------------------------------------------------------------------------------- /volatility/models/HodgesTompkins.py: -------------------------------------------------------------------------------- 1 | import math 2 | 3 | import numpy as np 4 | 5 | 6 | def get_estimator(price_data, window=30, trading_periods=252, clean=True): 7 | 8 | log_return = (price_data['Close'] / price_data['Close'].shift(1)).apply(np.log) 9 | 10 | vol = log_return.rolling( 11 | window=window, 12 | center=False 13 | ).std() * math.sqrt(trading_periods) 14 | 15 | h = window 16 | n = (log_return.count() - h) + 1 17 | 18 | adj_factor = 1.0 / (1.0 - (h / n) + ((h**2 - 1) / (3 * n**2))) 19 | 20 | result = vol * adj_factor 21 | 22 | if clean: 23 | return result.dropna() 24 | else: 25 | return result 26 | -------------------------------------------------------------------------------- /volatility/models/Kurtosis.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | 3 | 4 | def get_estimator(price_data, window=30, clean=True): 5 | 6 | log_return = (price_data['Close'] / price_data['Close'].shift(1)).apply(np.log) 7 | 8 | result = log_return.rolling( 9 | window=window, 10 | center=False 11 | ).kurt() 12 | 13 | if clean: 14 | return result.dropna() 15 | else: 16 | return result 17 | -------------------------------------------------------------------------------- /volatility/models/Parkinson.py: -------------------------------------------------------------------------------- 1 | import math 2 | 3 | import numpy as np 4 | 5 | 6 | def get_estimator(price_data, window=30, trading_periods=252, clean=True): 7 | 8 | rs = (1.0 / (4.0 * math.log(2.0))) * ((price_data['High'] / price_data['Low']).apply(np.log))**2.0 9 | 10 | def f(v): 11 | return (trading_periods * v.mean())**0.5 12 | 13 | result = rs.rolling( 14 | window=window, 15 | center=False 16 | ).apply(func=f) 17 | 18 | if clean: 19 | return result.dropna() 20 | else: 21 | return result 22 | -------------------------------------------------------------------------------- /volatility/models/Raw.py: -------------------------------------------------------------------------------- 1 | import math 2 | 3 | import numpy as np 4 | 5 | 6 | def get_estimator(price_data, window=30, trading_periods=252, clean=True): 7 | 8 | log_return = (price_data['Close'] / price_data['Close'].shift(1)).apply(np.log) 9 | 10 | result = log_return.rolling( 11 | window=window, 12 | center=False 13 | ).std() * math.sqrt(trading_periods) 14 | 15 | if clean: 16 | return result.dropna() 17 | else: 18 | return result 19 | -------------------------------------------------------------------------------- /volatility/models/RogersSatchell.py: -------------------------------------------------------------------------------- 1 | import math 2 | 3 | import numpy as np 4 | 5 | 6 | def get_estimator(price_data, window=30, trading_periods=252, clean=True): 7 | 8 | log_ho = (price_data['High'] / price_data['Open']).apply(np.log) 9 | log_lo = (price_data['Low'] / price_data['Open']).apply(np.log) 10 | log_co = (price_data['Close'] / price_data['Open']).apply(np.log) 11 | 12 | rs = log_ho * (log_ho - log_co) + log_lo * (log_lo - log_co) 13 | 14 | def f(v): 15 | return (trading_periods * v.mean())**0.5 16 | 17 | result = rs.rolling( 18 | window=window, 19 | center=False 20 | ).apply(func=f) 21 | 22 | if clean: 23 | return result.dropna() 24 | else: 25 | return result 26 | -------------------------------------------------------------------------------- /volatility/models/Skew.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | 3 | 4 | def get_estimator(price_data, window=30, clean=True): 5 | 6 | log_return = (price_data['Close'] / price_data['Close'].shift(1)).apply(np.log) 7 | 8 | result = log_return.rolling( 9 | window=window, 10 | center=False 11 | ).skew() 12 | 13 | if clean: 14 | return result.dropna() 15 | else: 16 | return result 17 | -------------------------------------------------------------------------------- /volatility/models/YangZhang.py: -------------------------------------------------------------------------------- 1 | import math 2 | 3 | import numpy as np 4 | 5 | 6 | def get_estimator(price_data, window=30, trading_periods=252, clean=True): 7 | 8 | log_ho = (price_data['High'] / price_data['Open']).apply(np.log) 9 | log_lo = (price_data['Low'] / price_data['Open']).apply(np.log) 10 | log_co = (price_data['Close'] / price_data['Open']).apply(np.log) 11 | 12 | log_oc = (price_data['Open'] / price_data['Close'].shift(1)).apply(np.log) 13 | log_oc_sq = log_oc**2 14 | 15 | log_cc = (price_data['Close'] / price_data['Close'].shift(1)).apply(np.log) 16 | log_cc_sq = log_cc**2 17 | 18 | rs = log_ho * (log_ho - log_co) + log_lo * (log_lo - log_co) 19 | 20 | close_vol = log_cc_sq.rolling( 21 | window=window, 22 | center=False 23 | ).sum() * (1.0 / (window - 1.0)) 24 | open_vol = log_oc_sq.rolling( 25 | window=window, 26 | center=False 27 | ).sum() * (1.0 / (window - 1.0)) 28 | window_rs = rs.rolling( 29 | window=window, 30 | center=False 31 | ).sum() * (1.0 / (window - 1.0)) 32 | 33 | k = 0.34 / (1.34 + (window + 1) / (window - 1)) 34 | result = (open_vol + k * close_vol + (1 - k) * window_rs).apply(np.sqrt) * math.sqrt(trading_periods) 35 | 36 | if clean: 37 | return result.dropna() 38 | else: 39 | return result 40 | -------------------------------------------------------------------------------- /volatility/models/__init__.py: -------------------------------------------------------------------------------- 1 | from volatility.models.api import * 2 | -------------------------------------------------------------------------------- /volatility/models/api.py: -------------------------------------------------------------------------------- 1 | from volatility.models import GarmanKlass 2 | from volatility.models import HodgesTompkins 3 | from volatility.models import Kurtosis 4 | from volatility.models import Parkinson 5 | from volatility.models import Raw 6 | from volatility.models import RogersSatchell 7 | from volatility.models import Skew 8 | from volatility.models import YangZhang 9 | 10 | __all__ = [ 11 | 'GarmanKlass', 12 | 'HodgesTompkins', 13 | 'Kurtosis', 14 | 'Parkinson', 15 | 'Raw', 16 | 'RogersSatchell', 17 | 'Skew', 18 | 'YangZhang', 19 | ] 20 | -------------------------------------------------------------------------------- /volatility/volest.py: -------------------------------------------------------------------------------- 1 | import datetime 2 | import os 3 | 4 | import pandas 5 | import numpy 6 | from scipy.stats import norm 7 | import statsmodels.api as sm 8 | import matplotlib 9 | import matplotlib.pyplot as plt 10 | from matplotlib.backends.backend_pdf import PdfPages 11 | 12 | from volatility import models 13 | 14 | ESTIMATORS = [ 15 | 'GarmanKlass', 16 | 'HodgesTompkins', 17 | 'Kurtosis', 18 | 'Parkinson', 19 | 'Raw', 20 | 'RogersSatchell', 21 | 'Skew', 22 | 'YangZhang' 23 | ] 24 | PRICE_COLUMNS = { 25 | 'Open', 26 | 'High', 27 | 'Low', 28 | 'Close' 29 | } 30 | 31 | 32 | def array_to_dataframe(ndarray): 33 | return pandas.DataFrame( 34 | ndarray, 35 | columns=['Open', 'High', 'Low', 'Close'] 36 | ) 37 | 38 | 39 | class VolatilityEstimator(object): 40 | 41 | def __init__(self, price_data, estimator, bench_data=None): 42 | """Constructor for volatility estimators 43 | 44 | Parameters 45 | ---------- 46 | price_data: pandas.DataFrame or numpy.ndarray 47 | If pandas.DataFrame, must include columns Open, High, Low, Close. Also 48 | must include property symbol with the symbol we're working with. If 49 | numpy.ndarray, must be of shape (r, 4) with columns in order of open, 50 | high, low, close prices. If numpy.ndarray, will be coerced to pandas.DataFrame 51 | with no date data 52 | estimator : string 53 | Estimator estimator; valid arguments are: 54 | "GarmanKlass", "HodgesTompkins", "Kurtosis", "Parkinson", "Raw", 55 | "RogersSatchell", "Skew", "YangZhang" 56 | """ 57 | 58 | if not isinstance(price_data, numpy.ndarray) and not \ 59 | isinstance(price_data, pandas.DataFrame): 60 | raise ValueError('price_data must be of type numpy.ndarray or pandas.DataFrame') 61 | if isinstance(price_data, numpy.ndarray) and price_data.shape[0] != 4: 62 | raise ValueError('price_data of type numpy.ndarray shape of (r, 4)') 63 | if isinstance(price_data, pandas.DataFrame) and not \ 64 | PRICE_COLUMNS.issubset(price_data.columns): 65 | raise ValueError('price_data requires Open, High, Low, Close') 66 | if price_data.symbol is None or price_data.symbol == '': 67 | raise ValueError('Symbol required as property of price_data') 68 | if estimator not in ESTIMATORS: 69 | raise ValueError('Acceptable volatility model is required') 70 | 71 | if isinstance(price_data, numpy.ndarray): 72 | price_data = array_to_dataframe(price_data) 73 | price_data.symbol = '-NA-' 74 | start = price_data.index[0] 75 | end = price_data.index[0] 76 | else: 77 | start = price_data.index[0].to_pydatetime().strftime('%Y-%m-%d') 78 | end = price_data.index[-1].to_pydatetime().strftime('%Y-%m-%d') 79 | 80 | if bench_data is not None: 81 | if price_data.shape != bench_data.shape: 82 | raise ValueError('price_data and bench_data must be same shape') 83 | if not isinstance(bench_data, numpy.ndarray) and not \ 84 | isinstance(bench_data, pandas.DataFrame): 85 | raise ValueError('bench_data must be of type numpy.ndarray or pandas.DataFrame') 86 | if isinstance(bench_data, numpy.ndarray) and bench_data.shape[0] != 4: 87 | raise ValueError('bench_data of type numpy.ndarray shape of (r, 4)') 88 | if isinstance(bench_data, pandas.DataFrame) and not \ 89 | PRICE_COLUMNS.issubset(bench_data.columns): 90 | raise ValueError('bench_data requires Open, High, Low, Close') 91 | if bench_data.symbol is None or bench_data.symbol == '': 92 | raise ValueError('Symbol required as property of bench_data') 93 | 94 | # bench_data = bench_data.loc[start:end] 95 | 96 | if isinstance(bench_data, numpy.ndarray): 97 | bench_data = array_to_dataframe(bench_data) 98 | bench_data.symbol = '-NA-' 99 | 100 | self._bench_data = bench_data 101 | self._bench_symbol = bench_data.symbol 102 | 103 | self._price_data = price_data 104 | self._symbol = price_data.symbol 105 | self._start = start 106 | self._end = end 107 | self._estimator = estimator 108 | 109 | matplotlib.rc('image', origin='upper') 110 | 111 | matplotlib.rcParams['font.size'] = '11' 112 | 113 | matplotlib.rcParams['grid.color'] = 'lightgrey' 114 | matplotlib.rcParams['grid.linestyle'] = '-' 115 | 116 | matplotlib.rcParams['figure.subplot.left'] = 0.1 117 | matplotlib.rcParams['figure.subplot.bottom'] = 0.13 118 | matplotlib.rcParams['figure.subplot.right'] = 0.9 119 | matplotlib.rcParams['figure.subplot.top'] = 0.9 120 | 121 | def _get_estimator(self, window, price_data, clean=True): 122 | """Selector for volatility estimator 123 | 124 | Parameters 125 | ---------- 126 | window : int 127 | Rolling window for which to calculate the estimator 128 | clean : boolean 129 | Set to True to remove the NaNs at the beginning of the series 130 | 131 | Returns 132 | ------- 133 | y : pandas.DataFrame 134 | Estimator series values 135 | """ 136 | 137 | return getattr(models, self._estimator).get_estimator( 138 | price_data=price_data, 139 | window=window, 140 | clean=clean 141 | ) 142 | 143 | def cones(self, windows=[30, 60, 90, 120], quantiles=[0.25, 0.75]): 144 | """Plots volatility cones 145 | 146 | Parameters 147 | ---------- 148 | windows : [int, int, ...] 149 | List of rolling windows for which to calculate the estimator cones 150 | quantiles : [lower, upper] 151 | List of lower and upper quantiles for which to plot the cones 152 | """ 153 | 154 | price_data = self._price_data 155 | 156 | if len(windows) < 2: 157 | raise ValueError( 158 | 'Two or more window periods required') 159 | if len(quantiles) != 2: 160 | raise ValueError( 161 | 'A two element list of quantiles is required, lower and upper') 162 | if quantiles[0] + quantiles[1] != 1.0: 163 | raise ValueError( 164 | 'The sum of the quantiles must equal 1.0') 165 | if quantiles[0] > quantiles[1]: 166 | raise ValueError( 167 | 'The lower quantiles (first element) must be less than the upper quantile (second element)') 168 | 169 | max_ = [] 170 | min_ = [] 171 | top_q = [] 172 | median = [] 173 | bottom_q = [] 174 | realized = [] 175 | data = [] 176 | 177 | for window in windows: 178 | 179 | estimator = self._get_estimator( 180 | window=window, 181 | price_data=price_data 182 | ) 183 | 184 | max_.append(estimator.max()) 185 | top_q.append(estimator.quantile(quantiles[1])) 186 | median.append(estimator.median()) 187 | bottom_q.append(estimator.quantile(quantiles[0])) 188 | min_.append(estimator.min()) 189 | realized.append(estimator[-1]) 190 | 191 | data.append(estimator) 192 | 193 | if self._estimator is "Skew" or self._estimator is "Kurtosis": 194 | f = lambda x: "%i" % round(x, 0) 195 | else: 196 | f = lambda x: "%i%%" % round(x*100, 0) 197 | 198 | # figure 199 | fig = plt.figure(figsize=(8, 6)) 200 | fig.autofmt_xdate() 201 | left, width = 0.07, 0.65 202 | bottom, height = 0.2, 0.7 203 | left_h = left+width+0.02 204 | rect_cones = [left, bottom, width, height] 205 | rect_box = [left_h, bottom, 0.17, height] 206 | cones = plt.axes(rect_cones) 207 | box = plt.axes(rect_box) 208 | 209 | # set the plots 210 | cones.plot(windows, max_, label="Max") 211 | cones.plot(windows, top_q, label=str(int(quantiles[1]*100)) + " Prctl") 212 | cones.plot(windows, median, label="Median") 213 | cones.plot(windows, bottom_q, label=str(int(quantiles[0]*100)) + " Prctl") 214 | cones.plot(windows, min_, label="Min") 215 | cones.plot(windows, realized, 'r-.', label="Realized") 216 | 217 | # set the x ticks and limits 218 | cones.set_xticks(windows) 219 | cones.set_xlim((windows[0]-5, windows[-1]+5)) 220 | 221 | # set and format the y-axis labels 222 | locs = cones.get_yticks() 223 | cones.set_yticklabels(map(f, locs)) 224 | 225 | # turn on the grid 226 | cones.grid(True, axis='y', which='major', alpha=0.5) 227 | 228 | # set the title 229 | cones.set_title(self._estimator + ' (' + self._symbol + ', daily ' + self._start + ' to ' + self._end + ')') 230 | 231 | # set the legend 232 | cones.legend(loc='upper center', bbox_to_anchor=(0.5, -0.05), ncol=3) 233 | 234 | # box plot 235 | box.boxplot(data, notch=1, sym='+') 236 | box.plot([i for i in range(1, len(windows)+1)], realized, color='r', marker='*', markeredgecolor='k') 237 | 238 | # set and format the y-axis labels 239 | locs = box.get_yticks() 240 | box.set_yticklabels(map(f, locs)) 241 | 242 | # move the y-axis ticks on the right side 243 | box.yaxis.tick_right() 244 | 245 | # turn on the grid 246 | box.grid(True, axis='y', which='major', alpha=0.5) 247 | 248 | return fig, plt 249 | 250 | def rolling_quantiles(self, window=30, quantiles=[0.25, 0.75]): 251 | """Plots rolling quantiles of volatility 252 | 253 | Parameters 254 | ---------- 255 | window : int 256 | Rolling window for which to calculate the estimator 257 | quantiles : [lower, upper] 258 | List of lower and upper quantiles for which to plot 259 | """ 260 | 261 | price_data = self._price_data 262 | 263 | if len(quantiles) != 2: 264 | raise ValueError( 265 | 'A two element list of quantiles is required, lower and upper') 266 | if quantiles[0] + quantiles[1] != 1.0: 267 | raise ValueError( 268 | 'The sum of the quantiles must equal 1.0') 269 | if quantiles[0] > quantiles[1]: 270 | raise ValueError( 271 | 'The lower quantiles (first element) must be less than the upper quantile (second element)') 272 | 273 | estimator = self._get_estimator( 274 | window=window, 275 | price_data=price_data 276 | ) 277 | date = estimator.index 278 | 279 | top_q = estimator.rolling(window=window, center=False).quantile(quantiles[1]) 280 | median = estimator.rolling(window=window, center=False).median() 281 | bottom_q = estimator.rolling(window=window, center=False).quantile(quantiles[0]) 282 | realized = estimator 283 | last = estimator[-1] 284 | 285 | if self._estimator is "Skew" or self._estimator is "Kurtosis": 286 | f = lambda x: "%i" % round(x, 0) 287 | else: 288 | f = lambda x: "%i%%" % round(x*100, 0) 289 | 290 | # figure 291 | fig = plt.figure(figsize=(8, 6)) 292 | fig.autofmt_xdate() 293 | left, width = 0.07, 0.65 294 | bottom, height = 0.2, 0.7 295 | left_h = left+width+0.02 296 | 297 | rect_cones = [left, bottom, width, height] 298 | rect_box = [left_h, bottom, 0.17, height] 299 | 300 | cones = plt.axes(rect_cones) 301 | box = plt.axes(rect_box) 302 | 303 | # set the plots 304 | cones.plot(date, top_q, label=str(int(quantiles[1]*100)) + " Prctl") 305 | cones.plot(date, median, label="Median") 306 | cones.plot(date, bottom_q, label=str(int(quantiles[0]*100)) + " Prctl") 307 | cones.plot(date, realized, 'r-.', label="Realized") 308 | 309 | # set and format the y-axis labels 310 | locs = cones.get_yticks() 311 | cones.set_yticklabels(map(f, locs)) 312 | 313 | # turn on the grid 314 | cones.grid(True, axis='y', which='major', alpha=0.5) 315 | 316 | # set the title 317 | cones.set_title(self._estimator + ' (' + self._symbol + ', daily ' + self._start + ' to ' + self._end + ')') 318 | 319 | # set the legend 320 | cones.legend(loc='upper center', bbox_to_anchor=(0.5, -0.05), ncol=3) 321 | 322 | # box plots 323 | box.boxplot(realized, notch=1, sym='+') 324 | box.plot(1, last, color='r', marker='*', markeredgecolor='k') 325 | 326 | # set and format the y-axis labels 327 | locs = box.get_yticks() 328 | box.set_yticklabels(map(f, locs)) 329 | 330 | # move the y-axis ticks on the right side 331 | box.yaxis.tick_right() 332 | 333 | # turn on the grid 334 | box.grid(True, axis='y', which='major', alpha=0.5) 335 | 336 | return fig, plt 337 | 338 | def rolling_extremes(self, window=30): 339 | """Plots rolling max and min of volatility estimator 340 | 341 | Parameters 342 | ---------- 343 | window : int 344 | Rolling window for which to calculate the estimator 345 | """ 346 | 347 | price_data = self._price_data 348 | 349 | estimator = self._get_estimator( 350 | window=window, 351 | price_data=price_data 352 | ) 353 | date = estimator.index 354 | max_ = estimator.rolling(window=window, center=False).max() 355 | min_ = estimator.rolling(window=window, center=False).min() 356 | realized = estimator 357 | last = estimator[-1] 358 | 359 | if self._estimator is "Skew" or self._estimator is "Kurtosis": 360 | f = lambda x: "%i" % round(x, 0) 361 | else: 362 | f = lambda x: "%i%%" % round(x*100, 0) 363 | 364 | # figure 365 | fig = plt.figure(figsize=(8, 6)) 366 | fig.autofmt_xdate() 367 | left, width = 0.07, 0.65 368 | bottom, height = 0.2, 0.7 369 | left_h = left+width+0.02 370 | 371 | rect_cones = [left, bottom, width, height] 372 | rect_box = [left_h, bottom, 0.17, height] 373 | 374 | cones = plt.axes(rect_cones) 375 | box = plt.axes(rect_box) 376 | 377 | # set the plots 378 | cones.plot(date, max_, label="Max") 379 | cones.plot(date, min_, label="Min") 380 | cones.plot(date, realized, 'r-.', label="Realized") 381 | 382 | # set and format the y-axis labels 383 | locs = cones.get_yticks() 384 | cones.set_yticklabels(map(f, locs)) 385 | 386 | # turn on the grid 387 | cones.grid(True, axis='y', which='major', alpha=0.5) 388 | 389 | # set the title 390 | cones.set_title(self._estimator + ' (' + self._symbol + ', daily ' + self._start + ' to ' + self._end + ')') 391 | 392 | # set the legend 393 | cones.legend(loc='upper center', bbox_to_anchor=(0.5, -0.05), ncol=3) 394 | 395 | # box plot 396 | box.boxplot(realized, notch=1, sym='+') 397 | box.plot(1, last, color='r', marker='*', markeredgecolor='k') 398 | 399 | # set and format the y-axis labels 400 | locs = box.get_yticks() 401 | box.set_yticklabels(map(f, locs)) 402 | 403 | # move the y-axis ticks on the right side 404 | box.yaxis.tick_right() 405 | 406 | # turn on the grid 407 | box.grid(True, axis='y', which='major', alpha=0.5) 408 | 409 | return fig, plt 410 | 411 | def rolling_descriptives(self, window=30): 412 | """Plots rolling first and second moment of volatility estimator 413 | 414 | Parameters 415 | ---------- 416 | window : int 417 | Rolling window for which to calculate the estimator 418 | """ 419 | 420 | price_data = self._price_data 421 | 422 | estimator = self._get_estimator( 423 | window=window, 424 | price_data=price_data 425 | ) 426 | date = estimator.index 427 | mean = estimator.rolling(window=window, center=False).mean() 428 | std = estimator.rolling(window=window, center=False).std() 429 | z_score = (estimator - mean) / std 430 | 431 | realized = estimator 432 | last = estimator[-1] 433 | 434 | if self._estimator is "Skew" or self._estimator is "Kurtosis": 435 | f = lambda x: "%i" % round(x, 0) 436 | else: 437 | f = lambda x: "%i%%" % round(x*100, 0) 438 | 439 | # figure 440 | fig = plt.figure(figsize=(8, 6)) 441 | fig.autofmt_xdate() 442 | left, width = 0.07, 0.65 443 | left_h = left+width+0.02 444 | 445 | rect_cones = [left, 0.35, width, 0.55] 446 | rect_box = [left_h, 0.15, 0.17, 0.75] 447 | rect_z = [left, 0.15, width, 0.15] 448 | 449 | cones = plt.axes(rect_cones) 450 | box = plt.axes(rect_box) 451 | z = plt.axes(rect_z) 452 | 453 | if self._estimator is "Skew" or self._estimator is "Kurtosis": 454 | f = lambda x: "%i" % round(x, 0) 455 | else: 456 | f = lambda x: "%i%%" % round(x*100, 0) 457 | 458 | # set the plots 459 | cones.plot(date, mean, label="Mean") 460 | cones.plot(date, std, label="Std. Dev.") 461 | cones.plot(date, realized, 'r-.', label="Realized") 462 | 463 | # set and format the y-axis labels 464 | locs = cones.get_yticks() 465 | cones.set_yticklabels(map(f, locs)) 466 | 467 | # turn on the grid 468 | cones.grid(True, axis='y', which='major', alpha=0.5) 469 | 470 | # set the title 471 | cones.set_title(self._estimator + ' (' + self._symbol + ', daily ' + self._start + ' to ' + self._end + ')') 472 | 473 | # shrink the plot up a bit and set the legend 474 | pos = cones.get_position() 475 | cones.set_position([pos.x0, pos.y0 + pos.height * 0.1, pos.width, pos.height * 0.9]) # 476 | cones.legend(loc='upper center', bbox_to_anchor=(0.5, -0.05), ncol=3) 477 | 478 | # box plot 479 | box.boxplot(realized, notch=1, sym='+') 480 | box.plot(1, last, color='r', marker='*', markeredgecolor='k') 481 | 482 | # set and format the y-axis labels 483 | locs = box.get_yticks() 484 | box.set_yticklabels(map(f, locs)) 485 | 486 | # move the y-axis ticks on the right side 487 | box.yaxis.tick_right() 488 | 489 | # turn on the grid 490 | box.grid(True, axis='y', which='major', alpha=0.5) 491 | 492 | # z-score set the plots 493 | z.plot(date, z_score, 'm-', label="Z-Score") 494 | 495 | # turn on the grid 496 | z.grid(True, axis='y', which='major', alpha=0.5) 497 | 498 | # create a horizontal line at y=0 499 | z.axhline(0, 0, 1, linestyle='-', linewidth=1.0, color='black') 500 | 501 | # set the legend 502 | z.legend(loc='upper center', bbox_to_anchor=(0.5, -0.2), ncol=3) 503 | 504 | return fig, plt 505 | 506 | def histogram(self, window=90, bins=100, normed=True): 507 | """ 508 | 509 | Parameters 510 | ---------- 511 | window : int 512 | Rolling window for which to calculate the estimator 513 | bins : int 514 | 515 | """ 516 | 517 | price_data = self._price_data 518 | 519 | estimator = self._get_estimator( 520 | window=window, 521 | price_data=price_data 522 | ) 523 | mean = estimator.mean() 524 | std = estimator.std() 525 | last = estimator[-1] 526 | 527 | fig = plt.figure(figsize=(8, 6)) 528 | 529 | n, bins, patches = plt.hist(estimator, bins, normed=normed, facecolor='blue', alpha=0.25) 530 | 531 | if normed: 532 | y = norm.pdf(bins, mean, std) 533 | plt.plot(bins, y, 'g--', linewidth=1) 534 | 535 | plt.axvline(last, 0, 1, linestyle='-', linewidth=1.5, color='r') 536 | 537 | plt.grid(True, axis='y', which='major', alpha=0.5) 538 | plt.title('Distribution of ' + self._estimator + 539 | ' estimator values (' + self._symbol + 540 | ', daily ' + self._start + ' to ' + self._end + ')') 541 | 542 | return fig, plt 543 | 544 | def benchmark_compare(self, window=90): 545 | """ 546 | 547 | Parameters 548 | ---------- 549 | window : int 550 | Rolling window for which to calculate the estimator 551 | bins : int 552 | 553 | """ 554 | 555 | price_data = self._price_data 556 | bench_data = self._bench_data 557 | 558 | y = self._get_estimator( 559 | window=window, 560 | price_data=price_data 561 | ) 562 | x = self._get_estimator( 563 | window=window, 564 | price_data=bench_data 565 | ) 566 | date = y.index 567 | 568 | ratio = y / x 569 | 570 | if self._estimator is "Skew" or self._estimator is "Kurtosis": 571 | f = lambda x: "%i" % round(x, 0) 572 | else: 573 | f = lambda x: "%i%%" % round(x*100, 0) 574 | 575 | # figure 576 | fig = plt.figure(figsize=(8, 6)) 577 | fig.autofmt_xdate() 578 | left, width = 0.07, .9 579 | 580 | rect_cones = [left, 0.4, width, .5] 581 | rect_box = [left, 0.15, width, 0.15] 582 | 583 | cones = plt.axes(rect_cones) 584 | box = plt.axes(rect_box) 585 | 586 | # set the plots 587 | cones.plot(date, y, label=self._symbol.upper()) 588 | cones.plot(date, x, label=self._bench_symbol) 589 | 590 | # set and format the y-axis labels 591 | locs = cones.get_yticks() 592 | cones.set_yticklabels(map(f, locs)) 593 | 594 | # turn on the grid 595 | cones.grid(True, axis='y', which='major', alpha=0.5) 596 | 597 | # set the title 598 | cones.set_title(self._estimator + ' (' + self._symbol + 599 | ' v. ' + self._bench_symbol + ', daily ' + 600 | self._start + ' to ' + self._end + ')') 601 | 602 | # shrink the plot up a bit and set the legend 603 | cones.legend(loc='upper center', bbox_to_anchor=(0.5, -0.05), ncol=3) 604 | 605 | # set the plot 606 | box.plot(date, ratio, label=self._symbol.upper() + '/' + self._bench_symbol) 607 | 608 | # set the y-limits 609 | box.set_ylim((ratio.min() - 0.05, ratio.max() + 0.05)) 610 | 611 | # fill the area 612 | box.fill_between(date, ratio, 0, color='blue', alpha=0.25) 613 | 614 | # set the legend 615 | box.legend(loc='upper center', bbox_to_anchor=(0.5, -0.2), ncol=3) 616 | 617 | return fig, plt 618 | 619 | def benchmark_correlation(self, window=90): 620 | """ 621 | 622 | Parameters 623 | ---------- 624 | window : int 625 | Rolling window for which to calculate the estimator 626 | bins : int 627 | 628 | """ 629 | 630 | price_data = self._price_data 631 | bench_data = self._bench_data 632 | 633 | y = self._get_estimator( 634 | window=window, 635 | price_data=price_data 636 | ) 637 | x = self._get_estimator( 638 | window=window, 639 | price_data=bench_data 640 | ) 641 | date = y.index 642 | 643 | corr = x.rolling(window=window).corr(other=y) 644 | 645 | if self._estimator is "Skew" or self._estimator is "Kurtosis": 646 | f = lambda x: "%i" % round(x, 0) 647 | else: 648 | f = lambda x: "%i%%" % round(x*100, 0) 649 | 650 | # figure 651 | fig = plt.figure(figsize=(8, 6)) 652 | cones = plt.axes() 653 | 654 | # set the plots 655 | cones.plot(date, corr) 656 | 657 | # set the y-limits 658 | cones.set_ylim((corr.min() - 0.05, corr.max() + 0.05)) 659 | 660 | # set and format the y-axis labels 661 | locs = cones.get_yticks() 662 | cones.set_yticklabels(map(f, locs)) 663 | 664 | # turn on the grid 665 | cones.grid(True, axis='y', which='major', alpha=0.5) 666 | 667 | # set the title 668 | cones.set_title(self._estimator + ' (Correlation of ' + 669 | self._symbol + ' v. ' + self._bench_symbol + 670 | ', daily ' + self._start + ' to ' + self._end + ')') 671 | 672 | return fig, plt 673 | 674 | def benchmark_regression(self, window=90): 675 | """ 676 | 677 | Parameters 678 | ---------- 679 | window : int 680 | Rolling window for which to calculate the estimator 681 | bins : int 682 | 683 | """ 684 | price_data = self._price_data 685 | bench_data = self._bench_data 686 | 687 | y = self._get_estimator( 688 | window=window, 689 | price_data=price_data 690 | ) 691 | X = self._get_estimator( 692 | window=window, 693 | price_data=bench_data 694 | ) 695 | 696 | model = sm.OLS(y, X) 697 | results = model.fit() 698 | 699 | return results.summary() 700 | 701 | def term_sheet( 702 | self, 703 | window=30, 704 | windows=[30, 60, 90, 120], 705 | quantiles=[0.25, 0.75], 706 | bins=100, 707 | normed=True, 708 | open=False): 709 | 710 | cones_fig, cones_plt = self.cones(windows=windows, quantiles=quantiles) 711 | rolling_quantiles_fig, rolling_quantiles_plt = self.rolling_quantiles(window=window, quantiles=quantiles) 712 | rolling_extremes_fig, rolling_extremes_plt = self.rolling_extremes(window=window) 713 | rolling_descriptives_fig, rolling_descriptives_plt = self.rolling_descriptives(window=window) 714 | histogram_fig, histogram_plt = self.histogram(window=window, bins=bins, normed=normed) 715 | benchmark_compare_fig, benchmark_compare_plt = self.benchmark_compare(window=window) 716 | benchmark_corr_fig, benchmark_corr_plt = self.benchmark_correlation(window=window) 717 | benchmark_regression = self.benchmark_regression(window=window) 718 | 719 | filename = self._symbol.upper() + '_termsheet_' + datetime.datetime.today().strftime("%Y%m%d") + '.pdf' 720 | fn = os.path.abspath(os.path.join(u'..', u'term-sheets', filename)) 721 | pp = PdfPages(fn) 722 | 723 | pp.savefig(cones_fig) 724 | pp.savefig(rolling_quantiles_fig) 725 | pp.savefig(rolling_extremes_fig) 726 | pp.savefig(rolling_descriptives_fig) 727 | pp.savefig(histogram_fig) 728 | pp.savefig(benchmark_compare_fig) 729 | pp.savefig(benchmark_corr_fig) 730 | 731 | fig = plt.figure(figsize=(8, 6)) 732 | ax = fig.add_subplot(111) 733 | ax.text( 734 | 0, .2, 735 | benchmark_regression, 736 | family='monospace', 737 | fontsize=9 738 | ) 739 | 740 | plt.axis('off') 741 | fig.tight_layout() 742 | pp.savefig(fig) 743 | pp.close() 744 | 745 | print('%s output complete' % filename) 746 | --------------------------------------------------------------------------------