├── .gitignore ├── LICENSE ├── README.md ├── data_loader.py ├── detection_engine.py ├── dictionaries ├── readme.txt └── sample_dict.npy ├── docker-compose.yml.template ├── dockerfile ├── entry_point.sh ├── feature_generator.py ├── figures ├── black_logo.png ├── correlation_plot.png ├── logo.png └── logo_custom.png ├── library_installation.bat ├── requirements.txt └── stocks ├── cryptos.txt └── stocks.txt /.gitignore: -------------------------------------------------------------------------------- 1 | __pycache__/ 2 | docker-compose.yml 3 | dictionaries/* 4 | !dictionaries/readme.txt 5 | !dictionaries/sample_dict.npy 6 | -------------------------------------------------------------------------------- /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 |

2 | 3 |

4 | 5 | # Surpriver - Find High Moving Stocks before they Move 6 | Find high moving stocks before they move using anomaly detection and machine learning. Surpriver uses machine learning to look at volume + price action and infer unusual patterns which can result in big moves in stocks. 7 | 8 | ### Files Description 9 | | Path | Description 10 | | :--- | :---------- 11 | | surpriver | Main folder. 12 | | └  dictionaries | Folder to save data dictionaries for later use. 13 | | └  figures | Figures for this github repositories. 14 | | └  stocks | List of all the stocks that you want to analyze. 15 | | data_loader.py | Module for loading data from yahoo finance. 16 | | detection_engine.py | Main module for running anomaly detection on data and finding stocks with most unusual price and volume patterns. 17 | | feature_generator.py | Generates price and volume return features as well as plenty of technical indicators. 18 | 19 | ## Usage 20 | ### Packages 21 | You will need to install the following package to train and test the models. 22 | - [Scikit-learn](https://scikit-learn.org/) 23 | - [Numpy](https://numpy.org/) 24 | - [Tqdm](https://github.com/tqdm/tqdm) 25 | - [Yfinance](https://github.com/ranaroussi/yfinance) 26 | - [Pandas](https://pandas.pydata.org/) 27 | - [Scipy](https://www.scipy.org/install.html) 28 | - [Ta](https://github.com/bukosabino/ta) 29 | 30 | You can install all packages using the following command. Please note that the script was written using python3. 31 | ``` 32 | pip install -r requirements.txt 33 | ``` 34 | 35 | ## Running with Docker 36 | You can also use docker if you know what it is and have some knowledge on how to use it. Here are the steps to run the tool with docker. 37 | 38 | - First you must build the container: `docker build . -t surpriver` 39 | - Then you need to copy the contents of docker-compose.yml.template to a new file called docker-compose.yml 40 | - Replace `` with the directory you are working in. 41 | - Run the container by executing `docker-compose up -d` 42 | - Execute any of the commands below by prepending `docker exec -it surpriver` to your command line. 43 | 44 | ### Predictions for Today 45 | If you want to go ahead and directly get the most anomalous stocks for today, you can simple run the following command to get the stocks with the most unusual patterns. We will dive deeper into the command in the following sections. 46 | 47 | #### Get Most Anomalous Stocks for Today 48 | ##### When you do not have the data dictionary saved and you are running it for the first time. 49 | ``` 50 | python detection_engine.py --top_n 25 --min_volume 5000 --data_granularity_minutes 60 --history_to_use 14 --is_load_from_dictionary 0 --data_dictionary_path 'dictionaries/data_dict.npy' --is_save_dictionary 1 --is_test 0 --future_bars 0 51 | ``` 52 | This command will give you the top **25 stocks** that had the highest anomaly score in the last **14 bars** of **60 minute candles**. It will also store all the data that it used to make predictions in the **dictionaries/data_dict.npy** folder. Below is a more detailed explanation of each parameter. 53 | - **top_n**: The total number of most anomalous stocks you want to see. 54 | - **min_volume**: Filter for volume. Any stock that has an average of volume lower than this value will be ignored. 55 | - **data_granularity_minutes**: Data granularity to use for analysis. The available options are *1min, 5min, 15min, 30min, 60min*. 56 | - **history_to_use**: Historical bars to use to analyze the unusual and anomalous patterns. 57 | - **is_save_dictionary**: Whether to save the stock data that is used for analysis in a dictionary or not. Enabling this would save you time if you want to do some further analysis on the data. 58 | - **data_dictionary_path**: Dictionary path where data would be stored. 59 | - **is_load_from_dictionary**: Whether to load the data from dictionary or download it from yahoo finance directly. You can use the dictionary you saved above here for multiple runs. 60 | - **is_test**: You can actually test the predictions by leaving some of the recent data as future data and analyzing whether the most anomalous stocks moved the most after their predictions. If this value is 1, the value of **future_bars** should be greater than 5. 61 | - **future_bars**: These number of bars will be saved from the recent history for testing purposes. 62 | - **output_format**: The format for results. If you pass CLI, the results will be printed to the console. If you pass JSON, a JSON file will be created with results for today's date. The default is CLI. 63 | 64 | ##### When you have the data dictionary saved, you can just run the following command. 65 | ``` 66 | python detection_engine.py --top_n 25 --min_volume 5000 --data_granularity_minutes 60 --history_to_use 14 --is_load_from_dictionary 1 --data_dictionary_path 'dictionaries/data_dict.npy' --is_save_dictionary 0 --is_test 0 --future_bars 0 --output_format 'CLI' 67 | ``` 68 | Notice the change in **is_save_dictionary** and **is_load_from_dictionary**. 69 | 70 | Here is an output of how a single prediction looks like. **Please note that negative scores indicate higher anomalous and unusual patterns while positive scores indicate normal patterns. The lower the better**. 71 | 72 | ``` 73 | Last Bar Time: 2020-08-25 11:30:00-04:00 74 | Symbol: SPI 75 | Anomaly Score: -0.029 76 | Today Volume (Today = Date Above): 313.94K 77 | Average Volume 5d: 206.53K 78 | Average Volume 20d: 334.14K 79 | Volatility 5bars: 0.013 80 | Volatility 20bars: 0.038 81 | Future Absolute Sum Price Changes: 72.87 82 | ``` 83 | 84 | ### Test on Historical Data 85 | If you are suspicious of the use of Machine Learning and Artificial Intelligence in trading, you can actually test the predictions from this tool on historical data. The two most important command line arguments for testing are **is_test** and **future_bars**. If the former one is set to 1 and the later one is set to anything more than 5, the tool will actually leave that amount of data for analysis purposes and use the data prior to that for anomalous predictions. Next, it will look at that remaining data to see how well the predictions did. Here is an example of a scatter plot from the following command. 86 | 87 | #### Find Anomalous Stocks and Test them on Historical Data 88 | ``` 89 | python detection_engine.py --top_n 25 --min_volume 5000 --data_granularity_minutes 60 --history_to_use 14 --is_load_from_dictionary 0 --data_dictionary_path 'dictionaries/data_dict.npy' --is_save_dictionary 1 --is_test 1 --future_bars 25 90 | ``` 91 | 92 | If you have already generated the data dictionary, you can use the following command where we set **is_load_from_dictionary** to 1 and **is_save_dictionary** to 0. 93 | ``` 94 | python detection_engine.py --top_n 25 --min_volume 5000 --data_granularity_minutes 60 --history_to_use 14 --is_load_from_dictionary 1 --data_dictionary_path 'dictionaries/data_dict.npy' --is_save_dictionary 0 --is_test 1 --future_bars 25 95 | ``` 96 | 97 |

98 | 99 |

100 | 101 | As you can see in the image above, the anomalous stocks (score < 0) usually have a higher absolute change in the future on average. That proves that the predictions are actually for those stocks that moved more than average in the next few hours/days. One question arises here, what if the tool is just picking the highest volatility stocks because those would yield high future absolute change. In order to prove that it's not the case, here is the more detailed description of stats you get from the above command. 102 | ``` 103 | --> Future Performance 104 | Correlation between future absolute change vs anomalous score (lower is better, range = (-1, 1)): **-0.23** 105 | Total absolute change in future for Anomalous Stocks: **89.660** 106 | Total absolute change in future for Normal Stocks: **43.000** 107 | Average future volatility of Anomalous Stocks: **0.332** 108 | Average future volatility of Normal Stocks: **0.585** 109 | Historical volatility for Anomalous Stocks: **2.528** 110 | Historical volatility for Normal Stocks: **2.076** 111 | ``` 112 | 113 | You can see that historical volatility for normal vs anomalous stocks is not that different. However, the difference in total absolute future change is double for anomalous stocks as compared to normal stocks. 114 | 115 | ### Support for Crypto Currencies 116 | You can now specify which data source you wold like to use along with which stocks list you would like to use. 117 | ``` 118 | python detection_engine.py --top_n 25 --min_volume 500 --data_granularity_minutes 60 --history_to_use 14 --is_load_from_dictionary 0 --data_dictionary_path 'dictionaries/feature_dict.npy' --is_save_dictionary 1 --is_test 0 --future_bars 0 --data_source binance --stock_list cryptos.txt 119 | ``` 120 | - **data_source**: Specifies where to get data from, current supported options are binance and yahoo_finance(default) 121 | - **stocks_list**: Which file in the stocks directory contains the list of tickers to analyze. Default is stocks.txt. 122 | ### Results 123 | We will try to post the top 25 results for a single set of parameters every week. 124 | ##### August 31, 2020 to September 05, 2020: https://pastebin.com/L5T2BYUx 125 | 126 | ### Limitations 127 | The tool only finds stocks that have some unusual behavior in their price and volume action combined. It does not predict which direction the stock is going to move. That might be a feature that I'll implement in the future but for right now, you'll need to look at the charts and do your DD to figure that out. 128 | 129 | ## License 130 | [![License: GPL v3](https://img.shields.io/badge/License-GPLv3-blue.svg)](https://www.gnu.org/licenses/gpl-3.0) 131 | 132 | A product by [Tradytics](https://www.tradytics.com/) 133 | 134 | Copyright (c) 2020-present, Tradytics.com 135 | 136 | -------------------------------------------------------------------------------- /data_loader.py: -------------------------------------------------------------------------------- 1 | # Basic libraries 2 | import os 3 | import ta 4 | import sys 5 | import json 6 | import math 7 | import pickle 8 | import random 9 | import requests 10 | import collections 11 | import numpy as np 12 | from os import walk 13 | import pandas as pd 14 | import yfinance as yf 15 | import datetime as dt 16 | from tqdm import tqdm 17 | from scipy.stats import linregress 18 | from datetime import datetime, timedelta 19 | from feature_generator import TAEngine 20 | import warnings 21 | from binance.client import Client 22 | 23 | warnings.filterwarnings("ignore") 24 | 25 | class DataEngine: 26 | def __init__(self, history_to_use, data_granularity_minutes, is_save_dict, is_load_dict, dict_path, min_volume_filter, is_test, future_bars_for_testing, volatility_filter, stocks_list, data_source): 27 | print("Data engine has been initialized...") 28 | self.DATA_GRANULARITY_MINUTES = data_granularity_minutes 29 | self.IS_SAVE_DICT = is_save_dict 30 | self.IS_LOAD_DICT = is_load_dict 31 | self.DICT_PATH = dict_path 32 | self.VOLUME_FILTER = min_volume_filter 33 | self.FUTURE_FOR_TESTING = future_bars_for_testing 34 | self.IS_TEST = is_test 35 | self.VOLATILITY_THRESHOLD = volatility_filter 36 | self.DATA_SOURCE = data_source 37 | 38 | # Stocks list 39 | self.directory_path = str(os.path.dirname(os.path.abspath(__file__))) 40 | self.stocks_file_path = self.directory_path + f"/stocks/{stocks_list}" 41 | self.stocks_list = [] 42 | 43 | # Load stock names in a list 44 | self.load_stocks_from_file() 45 | 46 | # Load Technical Indicator engine 47 | self.taEngine = TAEngine(history_to_use = history_to_use) 48 | 49 | # Dictionary to store data. This will only store and save data if the argument is_save_dictionary is 1. 50 | self.features_dictionary_for_all_symbols = {} 51 | 52 | # Data length 53 | self.stock_data_length = [] 54 | 55 | # Create an instance of the Binance Client with no api key and no secret (api key and secret not required for the functionality needed for this script) 56 | self.binance_client = Client("","") 57 | 58 | def load_stocks_from_file(self): 59 | """ 60 | Load stock names from the file 61 | """ 62 | print("Loading all stocks from file...") 63 | stocks_list = open(self.stocks_file_path, "r").readlines() 64 | stocks_list = [str(item).strip("\n") for item in stocks_list] 65 | 66 | # Load symbols 67 | stocks_list = list(sorted(set(stocks_list))) 68 | print("Total number of stocks: %d" % len(stocks_list)) 69 | self.stocks_list = stocks_list 70 | 71 | def get_most_frequent_key(self, input_list): 72 | counter = collections.Counter(input_list) 73 | counter_keys = list(counter.keys()) 74 | frequent_key = counter_keys[0] 75 | return frequent_key 76 | 77 | def get_data(self, symbol): 78 | """ 79 | Get stock data. 80 | """ 81 | 82 | # Find period 83 | if self.DATA_GRANULARITY_MINUTES == 1: 84 | period = "7d" 85 | else: 86 | period = "30d" 87 | 88 | try: 89 | # get crytpo price from Binance 90 | if(self.DATA_SOURCE == 'binance'): 91 | # Binance clients doesn't like 60m as an interval 92 | if(self.DATA_GRANULARITY_MINUTES == 60): 93 | interval = '1h' 94 | else: 95 | interval = str(self.DATA_GRANULARITY_MINUTES) + "m" 96 | stock_prices = self.binance_client.get_klines(symbol=symbol, interval = interval) 97 | # ensure that stock prices contains some data, otherwise the pandas operations below could fail 98 | if len(stock_prices) == 0: 99 | return [], [], True 100 | # convert list to pandas dataframe 101 | stock_prices = pd.DataFrame(stock_prices, columns=['Datetime', 'Open', 'High', 'Low', 'Close', 102 | 'Volume', 'close_time', 'quote_av', 'trades', 'tb_base_av', 'tb_quote_av', 'ignore']) 103 | stock_prices['Datetime'] = stock_prices['Datetime'].astype(float) 104 | stock_prices['Open'] = stock_prices['Open'].astype(float) 105 | stock_prices['High'] = stock_prices['High'].astype(float) 106 | stock_prices['Low'] = stock_prices['Low'].astype(float) 107 | stock_prices['Close'] = stock_prices['Close'].astype(float) 108 | stock_prices['Volume'] = stock_prices['Volume'].astype(float) 109 | # get stock prices from yahoo finance 110 | else: 111 | stock_prices = yf.download( 112 | tickers = symbol, 113 | period = period, 114 | interval = str(self.DATA_GRANULARITY_MINUTES) + "m", 115 | auto_adjust = False, 116 | progress=False) 117 | stock_prices = stock_prices.reset_index() 118 | stock_prices = stock_prices[['Datetime','Open', 'High', 'Low', 'Close', 'Volume']] 119 | data_length = len(stock_prices.values.tolist()) 120 | self.stock_data_length.append(data_length) 121 | 122 | # After getting some data, ignore partial data based on number of data samples 123 | if len(self.stock_data_length) > 5: 124 | most_frequent_key = self.get_most_frequent_key(self.stock_data_length) 125 | if data_length != most_frequent_key: 126 | return [], [], True 127 | 128 | if self.IS_TEST == 1: 129 | stock_prices_list = stock_prices.values.tolist() 130 | stock_prices_list = stock_prices_list[1:] # For some reason, yfinance gives some 0 values in the first index 131 | future_prices_list = stock_prices_list[-(self.FUTURE_FOR_TESTING + 1):] 132 | historical_prices = stock_prices_list[:-self.FUTURE_FOR_TESTING] 133 | historical_prices = pd.DataFrame(historical_prices) 134 | historical_prices.columns = ['Datetime','Open', 'High', 'Low', 'Close', 'Volume'] 135 | else: 136 | # No testing 137 | stock_prices_list = stock_prices.values.tolist() 138 | stock_prices_list = stock_prices_list[1:] 139 | historical_prices = pd.DataFrame(stock_prices_list) 140 | historical_prices.columns = ['Datetime','Open', 'High', 'Low', 'Close', 'Volume'] 141 | future_prices_list = [] 142 | 143 | if len(stock_prices.values.tolist()) == 0: 144 | return [], [], True 145 | except: 146 | return [], [], True 147 | 148 | return historical_prices, future_prices_list, False 149 | 150 | def calculate_volatility(self, stock_price_data): 151 | CLOSE_PRICE_INDEX = 4 152 | stock_price_data_list = stock_price_data.values.tolist() 153 | close_prices = [float(item[CLOSE_PRICE_INDEX]) for item in stock_price_data_list] 154 | close_prices = [item for item in close_prices if item != 0] 155 | volatility = np.std(close_prices) 156 | return volatility 157 | 158 | def collect_data_for_all_tickers(self): 159 | """ 160 | Iterates over all symbols and collects their data 161 | """ 162 | 163 | print("Loading data for all stocks...") 164 | features = [] 165 | symbol_names = [] 166 | historical_price_info = [] 167 | future_price_info = [] 168 | 169 | # Any stock with very low volatility is ignored. You can change this line to address that. 170 | for i in tqdm(range(len(self.stocks_list))): 171 | symbol = self.stocks_list[i] 172 | try: 173 | stock_price_data, future_prices, not_found = self.get_data(symbol) 174 | 175 | if not not_found: 176 | volatility = self.calculate_volatility(stock_price_data) 177 | 178 | # Filter low volatility stocks 179 | if volatility < self.VOLATILITY_THRESHOLD: 180 | continue 181 | 182 | features_dictionary = self.taEngine.get_technical_indicators(stock_price_data) 183 | feature_list = self.taEngine.get_features(features_dictionary) 184 | 185 | # Add to dictionary 186 | self.features_dictionary_for_all_symbols[symbol] = {"features": features_dictionary, "current_prices": stock_price_data, "future_prices": future_prices} 187 | 188 | # Save dictionary after every 100 symbols 189 | if len(self.features_dictionary_for_all_symbols) % 100 == 0 and self.IS_SAVE_DICT == 1: 190 | np.save(self.DICT_PATH, self.features_dictionary_for_all_symbols) 191 | 192 | if np.isnan(feature_list).any() == True: 193 | continue 194 | 195 | # Check for volume 196 | average_volume_last_30_tickers = np.mean(list(stock_price_data["Volume"])[-30:]) 197 | if average_volume_last_30_tickers < self.VOLUME_FILTER: 198 | continue 199 | 200 | # Add to lists 201 | features.append(feature_list) 202 | symbol_names.append(symbol) 203 | historical_price_info.append(stock_price_data) 204 | future_price_info.append(future_prices) 205 | 206 | except Exception as e: 207 | print("Exception", e) 208 | continue 209 | 210 | # Sometimes, there are some errors in feature generation or price extraction, let us remove that stuff 211 | features, historical_price_info, future_price_info, symbol_names = self.remove_bad_data(features, historical_price_info, future_price_info, symbol_names) 212 | 213 | return features, historical_price_info, future_price_info, symbol_names 214 | 215 | def load_data_from_dictionary(self): 216 | # Load data from dictionary 217 | print("Loading data from dictionary") 218 | dictionary_data = np.load(self.DICT_PATH, allow_pickle = True).item() 219 | 220 | features = [] 221 | symbol_names = [] 222 | historical_price_info = [] 223 | future_price_info = [] 224 | for symbol in dictionary_data: 225 | feature_list = self.taEngine.get_features(dictionary_data[symbol]["features"]) 226 | current_prices = dictionary_data[symbol]["current_prices"] 227 | future_prices = dictionary_data[symbol]["future_prices"] 228 | 229 | # Check if there is any null value 230 | if np.isnan(feature_list).any() == True: 231 | continue 232 | 233 | features.append(feature_list) 234 | symbol_names.append(symbol) 235 | historical_price_info.append(current_prices) 236 | future_price_info.append(future_prices) 237 | 238 | # Sometimes, there are some errors in feature generation or price extraction, let us remove that stuff 239 | features, historical_price_info, future_price_info, symbol_names = self.remove_bad_data(features, historical_price_info, future_price_info, symbol_names) 240 | 241 | return features, historical_price_info, future_price_info, symbol_names 242 | 243 | def remove_bad_data(self, features, historical_price_info, future_price_info, symbol_names): 244 | """ 245 | Remove bad data i.e data that had some errors while scraping or feature generation 246 | """ 247 | length_dictionary = collections.Counter([len(feature) for feature in features]) 248 | length_dictionary = list(length_dictionary.keys()) 249 | most_common_length = length_dictionary[0] 250 | 251 | filtered_features, filtered_historical_price, filtered_future_prices, filtered_symbols = [], [], [], [] 252 | for i in range(0, len(features)): 253 | if len(features[i]) == most_common_length: 254 | filtered_features.append(features[i]) 255 | filtered_symbols.append(symbol_names[i]) 256 | filtered_historical_price.append(historical_price_info[i]) 257 | filtered_future_prices.append(future_price_info[i]) 258 | 259 | return filtered_features, filtered_historical_price, filtered_future_prices, filtered_symbols -------------------------------------------------------------------------------- /detection_engine.py: -------------------------------------------------------------------------------- 1 | # Basic libraries 2 | import os 3 | import ta 4 | import sys 5 | import json 6 | import math 7 | import pickle 8 | import random 9 | import requests 10 | import collections 11 | import numpy as np 12 | from os import walk, path 13 | import pandas as pd 14 | import yfinance as yf 15 | import datetime as dt 16 | from scipy.stats import linregress 17 | from datetime import datetime, timedelta 18 | import matplotlib.pyplot as plt 19 | from sklearn.ensemble import IsolationForest 20 | from data_loader import DataEngine 21 | import warnings 22 | 23 | warnings.filterwarnings("ignore") 24 | 25 | # Styling for plots 26 | plt.style.use('seaborn-white') 27 | plt.rc('grid', linestyle="dotted", color='#a0a0a0') 28 | plt.rcParams['axes.edgecolor'] = "#04383F" 29 | 30 | # Argument parsing 31 | import argparse 32 | argParser = argparse.ArgumentParser() 33 | argParser.add_argument("--top_n", type=int, default = 25, help="How many top predictions do you want to print") 34 | argParser.add_argument("--min_volume", type=int, default = 5000, help="Minimum volume filter. Stocks with average volume of less than this value will be ignored") 35 | argParser.add_argument("--history_to_use", type=int, default = 7, help="How many bars of 1 hour do you want to use for the anomaly detection model.") 36 | argParser.add_argument("--is_load_from_dictionary", type=int, default = 0, help="Whether to load data from dictionary or get it from data source.") 37 | argParser.add_argument("--data_dictionary_path", type=str, default = "dictionaries/data_dictionary.npy", help="Data dictionary path.") 38 | argParser.add_argument("--is_save_dictionary", type=int, default = 1, help="Whether to save data in a dictionary.") 39 | argParser.add_argument("--data_granularity_minutes", type=int, default = 15, help="Minute level data granularity that you want to use. Default is 60 minute bars.") 40 | argParser.add_argument("--is_test", type=int, default = 0, help="Whether to test the tool or just predict for future. When testing, you should set the future_bars to larger than 1.") 41 | argParser.add_argument("--future_bars", type=int, default = 25, help="How many bars to keep for testing purposes.") 42 | argParser.add_argument("--volatility_filter", type=float, default = 0.05, help="Stocks with volatility less than this value will be ignored.") 43 | argParser.add_argument("--output_format", type=str, default = "CLI", help="What format to use for printing/storing results. Can be CLI or JSON.") 44 | argParser.add_argument("--stock_list", type=str, default = "stocks.txt", help="What is the name of the file in the stocks directory which contains the stocks you wish to predict.") 45 | argParser.add_argument("--data_source", type=str, default = "yahoo_finance", help="The name of the data engine to use.") 46 | 47 | args = argParser.parse_args() 48 | top_n = args.top_n 49 | min_volume = args.min_volume 50 | history_to_use = args.history_to_use 51 | is_load_from_dictionary = args.is_load_from_dictionary 52 | data_dictionary_path = args.data_dictionary_path 53 | is_save_dictionary = args.is_save_dictionary 54 | data_granularity_minutes = args.data_granularity_minutes 55 | is_test = args.is_test 56 | future_bars = args.future_bars 57 | volatility_filter = args.volatility_filter 58 | output_format = args.output_format.upper() 59 | stock_list = args.stock_list 60 | data_source = args.data_source 61 | 62 | """ 63 | Sample run: 64 | python detection_engine.py --is_test 1 --future_bars 25 --top_n 25 --min_volume 5000 --data_granularity_minutes 60 --history_to_use 14 --is_load_from_dictionary 0 --data_dictionary_path 'dictionaries/feature_dict.npy' --is_save_dictionary 1 --output_format 'CLI' 65 | """ 66 | 67 | class ArgChecker: 68 | def __init__(self): 69 | print("Checking arguments...") 70 | self.check_arugments() 71 | 72 | def check_arugments(self): 73 | granularity_constraints_list = [1, 5, 10, 15, 30, 60] 74 | granularity_constraints_list_string = ''.join(str(value) + "," for value in granularity_constraints_list).strip(",") 75 | directory_path = str(os.path.dirname(os.path.abspath(__file__))) 76 | 77 | if data_granularity_minutes not in granularity_constraints_list: 78 | print("You can only choose the following values for 'data_granularity_minutes' argument -> %s\nExiting now..." % granularity_constraints_list_string) 79 | exit() 80 | 81 | if is_test == 1 and future_bars < 2: 82 | print("You want to test but the future bars are less than 2. That does not give us enough data to test the model properly. Please use a value larger than 2.\nExiting now...") 83 | exit() 84 | 85 | if output_format not in ["CLI", "JSON"]: 86 | print("Please choose CLI or JSON for the output format field. Default is CLI.") 87 | exit() 88 | if not path.exists(directory_path + f'/stocks/{stock_list}'): 89 | print("The stocks list file must exist in the stocks directory") 90 | exit() 91 | if data_source not in ['binance', 'yahoo_finance']: 92 | print("Data source must be a valid and supported service.") 93 | exit() 94 | 95 | class Surpriver: 96 | def __init__(self): 97 | print("Surpriver has been initialized...") 98 | self.TOP_PREDICTIONS_TO_PRINT = top_n 99 | self.HISTORY_TO_USE = history_to_use 100 | self.MINIMUM_VOLUME = min_volume 101 | self.IS_LOAD_FROM_DICTIONARY = is_load_from_dictionary 102 | self.DATA_DICTIONARY_PATH = data_dictionary_path 103 | self.IS_SAVE_DICTIONARY = is_save_dictionary 104 | self.DATA_GRANULARITY_MINUTES = data_granularity_minutes 105 | self.IS_TEST = is_test 106 | self.FUTURE_BARS_FOR_TESTING = future_bars 107 | self.VOLATILITY_FILTER = volatility_filter 108 | self.OUTPUT_FORMAT = output_format 109 | self.STOCK_LIST = stock_list 110 | self.DATA_SOURCE = data_source 111 | 112 | # Create data engine 113 | self.dataEngine = DataEngine(self.HISTORY_TO_USE, self.DATA_GRANULARITY_MINUTES, 114 | self.IS_SAVE_DICTIONARY, self.IS_LOAD_FROM_DICTIONARY, self.DATA_DICTIONARY_PATH, 115 | self.MINIMUM_VOLUME, 116 | self.IS_TEST, self.FUTURE_BARS_FOR_TESTING, 117 | self.VOLATILITY_FILTER, 118 | self.STOCK_LIST, 119 | self.DATA_SOURCE) 120 | 121 | 122 | def is_nan(self, object): 123 | """ 124 | Checks if a value is null. 125 | """ 126 | return object != object 127 | 128 | def calculate_percentage_change(self, old, new): 129 | return ((new - old) * 100) / old 130 | 131 | def calculate_return(self, old, new): 132 | return new / old 133 | 134 | def parse_large_values(self, value): 135 | if value < 1000: 136 | value = str(value) 137 | elif value >= 1000 and value < 1000000: 138 | value = round(value / 1000, 2) 139 | value = str(value) + "K" 140 | else: 141 | value = round(value / 1000000, 1) 142 | value = str(value) + "M" 143 | 144 | return value 145 | 146 | def calculate_volume_changes(self, historical_price): 147 | volume = list(historical_price["Volume"]) 148 | dates = list(historical_price["Datetime"]) 149 | dates = [str(date) for date in dates] 150 | 151 | # Get volume by date 152 | volume_by_date_dictionary = collections.defaultdict(list) 153 | for j in range(0, len(volume)): 154 | date = dates[j].split(" ")[0] 155 | volume_by_date_dictionary[date].append(volume[j]) 156 | 157 | for key in volume_by_date_dictionary: 158 | volume_by_date_dictionary[key] = np.sum(volume_by_date_dictionary[key]) # taking average as we have multiple bars per day. 159 | 160 | # Get all dates 161 | all_dates = list(reversed(sorted(volume_by_date_dictionary.keys()))) 162 | latest_date = all_dates[0] 163 | latest_data_point = list(reversed(sorted(dates)))[0] 164 | 165 | # Get volume information 166 | today_volume = volume_by_date_dictionary[latest_date] 167 | average_vol_last_five_days = np.mean([volume_by_date_dictionary[date] for date in all_dates[1:6]]) 168 | average_vol_last_twenty_days = np.mean([volume_by_date_dictionary[date] for date in all_dates[1:20]]) 169 | 170 | 171 | return latest_data_point, self.parse_large_values(today_volume), self.parse_large_values(average_vol_last_five_days), self.parse_large_values(average_vol_last_twenty_days) 172 | 173 | def calculate_recent_volatility(self, historical_price): 174 | close_price = list(historical_price["Close"]) 175 | volatility_five_bars = np.std(close_price[-5:]) 176 | volatility_twenty_bars = np.std(close_price[-20:]) 177 | volatility_all = np.std(close_price) 178 | return volatility_five_bars, volatility_twenty_bars, volatility_all 179 | 180 | def calculate_future_performance(self, future_data): 181 | CLOSE_PRICE_INDEX = 4 182 | price_at_alert = future_data[0][CLOSE_PRICE_INDEX] 183 | prices_in_future = [item[CLOSE_PRICE_INDEX] for item in future_data[1:]] 184 | prices_in_future = [item for item in prices_in_future if item != 0] 185 | total_sum_percentage_change = abs(sum([self.calculate_percentage_change(price_at_alert, next_price) for next_price in prices_in_future])) 186 | future_volatility = np.std(prices_in_future) 187 | return total_sum_percentage_change, future_volatility 188 | 189 | def find_anomalies(self): 190 | """ 191 | Main function that does everything 192 | """ 193 | 194 | # Gather data for all stocks 195 | if self.IS_LOAD_FROM_DICTIONARY == 0: 196 | features, historical_price_info, future_prices, symbol_names = self.dataEngine.collect_data_for_all_tickers() 197 | else: 198 | # Load data from dictionary 199 | features, historical_price_info, future_prices, symbol_names = self.dataEngine.load_data_from_dictionary() 200 | 201 | # Find anomalous stocks using the Isolation Forest model. Read more about the model at -> https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.IsolationForest.html 202 | detector = IsolationForest(n_estimators = 100, random_state = 0) 203 | detector.fit(features) 204 | predictions = detector.decision_function(features) 205 | 206 | # Print top predictions with some statistics 207 | predictions_with_output_data = [[predictions[i], symbol_names[i], historical_price_info[i], future_prices[i]] for i in range(0, len(predictions))] 208 | predictions_with_output_data = list(sorted(predictions_with_output_data)) 209 | 210 | #Results object for storing results in JSON format 211 | results = [] 212 | 213 | for item in predictions_with_output_data[:self.TOP_PREDICTIONS_TO_PRINT]: 214 | # Get some stats to print 215 | prediction, symbol, historical_price, future_price = item 216 | 217 | # Check if future data is present or not 218 | if self.IS_TEST == 1 and len(future_price) < 5: 219 | print("No future data is present. Please make sure that you ran the prior command with is_test enabled or disable that command now. Exiting now...") 220 | exit() 221 | 222 | latest_date, today_volume, average_vol_last_five_days, average_vol_last_twenty_days = self.calculate_volume_changes(historical_price) 223 | volatility_vol_last_five_days, volatility_vol_last_twenty_days, _ = self.calculate_recent_volatility(historical_price) 224 | if average_vol_last_five_days == None or volatility_vol_last_five_days == None: 225 | continue 226 | 227 | if self.IS_TEST == 0: 228 | # Not testing so just add/print the predictions 229 | 230 | if self.OUTPUT_FORMAT == "CLI": 231 | print("Last Bar Time: %s\nSymbol: %s\nAnomaly Score: %.3f\nToday Volume: %s\nAverage Volume 5d: %s\nAverage Volume 20d: %s\nVolatility 5bars: %.3f\nVolatility 20bars: %.3f\n----------------------" % 232 | (latest_date, symbol, prediction, 233 | today_volume, average_vol_last_five_days, average_vol_last_twenty_days, 234 | volatility_vol_last_five_days, volatility_vol_last_twenty_days)) 235 | results.append({ 236 | 'latest_date' : latest_date, 237 | 'Symbol' : symbol, 238 | 'Anomaly Score' : prediction, 239 | 'Today Volume' : today_volume, 240 | 'Average Volume 5d' : average_vol_last_five_days, 241 | 'Average Volume 20d' : average_vol_last_twenty_days, 242 | 'Volatility 5bars' : volatility_vol_last_five_days, 243 | 'Volatility 20bars' : volatility_vol_last_twenty_days 244 | }) 245 | 246 | else: 247 | # Testing so show what happened in the future 248 | future_abs_sum_percentage_change, _ = self.calculate_future_performance(future_price) 249 | 250 | if self.OUTPUT_FORMAT == "CLI": 251 | print("Last Bar Time: %s\nSymbol: %s\nAnomaly Score: %.3f\nToday Volume: %s\nAverage Volume 5d: %s\nAverage Volume 20d: %s\nVolatility 5bars: %.3f\nVolatility 20bars: %.3f\nFuture Absolute Sum Price Changes: %.2f\n----------------------" % 252 | (latest_date, symbol, prediction, 253 | today_volume, average_vol_last_five_days, average_vol_last_twenty_days, 254 | volatility_vol_last_five_days, volatility_vol_last_twenty_days, 255 | future_abs_sum_percentage_change)) 256 | results.append({ 257 | 'latest_date' : latest_date, 258 | 'Symbol' : symbol, 259 | 'Anomaly Score' : prediction, 260 | 'Today Volume' : today_volume, 261 | 'Average Volume 5d' : average_vol_last_five_days, 262 | 'Average Volume 20d' : average_vol_last_twenty_days, 263 | 'Volatility 5bars' : volatility_vol_last_five_days, 264 | 'Volatility 20bars' : volatility_vol_last_twenty_days, 265 | 'Future Absolute Sum Price Changes' : future_abs_sum_percentage_change 266 | }) 267 | 268 | if self.OUTPUT_FORMAT == "JSON": 269 | self.store_results(results) 270 | 271 | if self.IS_TEST == 1: 272 | self.calculate_future_stats(predictions_with_output_data) 273 | 274 | def store_results(self, results): 275 | """ 276 | Function for storing results in a file 277 | """ 278 | today= dt.datetime.today().strftime('%Y-%m-%d') 279 | 280 | prefix = "results" 281 | 282 | if self.IS_TEST != 0: 283 | prefix = "results_future" 284 | 285 | file_name = '%s_%s.json' % (prefix, str(today)) 286 | 287 | #Print results to Result File 288 | with open(file_name, 'w+') as result_file: 289 | json.dump(results, result_file) 290 | 291 | print("Results stored successfully in", file_name) 292 | 293 | def calculate_future_stats(self, predictions_with_output_data): 294 | """ 295 | Calculate different stats for future data to show whether the anomalous stocks found were actually better than non-anomalous ones 296 | """ 297 | future_change = [] 298 | anomalous_score = [] 299 | historical_volatilities = [] 300 | future_volatilities = [] 301 | 302 | for item in predictions_with_output_data: 303 | prediction, symbol, historical_price, future_price = item 304 | future_sum_percentage_change, future_volatility = self.calculate_future_performance(future_price) 305 | _, _, historical_volatility = self.calculate_recent_volatility(historical_price) 306 | 307 | # Skip for when there is a reverse split, the yfinance package does not handle that well so percentages get weirdly large 308 | if abs(future_sum_percentage_change) > 250 or self.is_nan(future_sum_percentage_change) == True or self.is_nan(prediction) == True: 309 | continue 310 | 311 | future_change.append(future_sum_percentage_change) 312 | anomalous_score.append(prediction) 313 | future_volatilities.append(future_volatility) 314 | historical_volatilities.append(historical_volatility) 315 | 316 | # Calculate correlation and stats 317 | correlation = np.corrcoef(anomalous_score, future_change)[0, 1] 318 | anomalous_future_changes = np.mean([future_change[x] for x in range(0, len(future_change)) if anomalous_score[x] < 0]) # Anything less than 0 is considered anomalous 319 | normal_future_changes = np.mean([future_change[x] for x in range(0, len(future_change)) if anomalous_score[x] >= 0]) 320 | anomalous_future_volatilities = np.mean([future_volatilities[x] for x in range(0, len(future_volatilities)) if anomalous_score[x] < 0]) # Anything less than 0 is considered anomalous 321 | normal_future_volatilities = np.mean([future_volatilities[x] for x in range(0, len(future_volatilities)) if anomalous_score[x] >= 0]) 322 | anomalous_historical_volatilities = np.mean([historical_volatilities[x] for x in range(0, len(historical_volatilities)) if anomalous_score[x] < 0]) # Anything less than 0 is considered anomalous 323 | normal_historical_volatilities = np.mean([historical_volatilities[x] for x in range(0, len(historical_volatilities)) if anomalous_score[x] >= 0]) 324 | 325 | print("\n*************** Future Performance ***************") 326 | print("Correlation between future absolute change vs anomalous score (lower is better, range = (-1, 1)): **%.2f**\nTotal absolute change in future for Anomalous Stocks: **%.3f**\nTotal absolute change in future for Normal Stocks: **%.3f**\nAverage future volatility of Anomalous Stocks: **%.3f**\nAverage future volatility of Normal Stocks: **%.3f**\nHistorical volatility for Anomalous Stocks: **%.3f**\nHistorical volatility for Normal Stocks: **%.3f**\n" % ( 327 | correlation, 328 | anomalous_future_changes, normal_future_changes, 329 | anomalous_future_volatilities, normal_future_volatilities, 330 | anomalous_historical_volatilities, normal_historical_volatilities)) 331 | 332 | # Plot 333 | FONT_SIZE = 14 334 | colors = ['#c91414' if anomalous_score[x] < 0 else '#035AA6' for x in range(0, len(anomalous_score))] 335 | anomalous_vs_normal = np.array([1 if anomalous_score[x] < 0 else 0 for x in range(0, len(anomalous_score))]) 336 | plt.scatter(np.array(anomalous_score)[anomalous_vs_normal == 1], np.array(future_change)[anomalous_vs_normal == 1], marker='v', color = '#c91414') 337 | plt.scatter(np.array(anomalous_score)[anomalous_vs_normal == 0], np.array(future_change)[anomalous_vs_normal == 0], marker='P', color = '#035AA6') 338 | plt.axvline(x = 0, linestyle = '--', color = '#848484') 339 | plt.xlabel("Anomaly Score", fontsize = FONT_SIZE) 340 | plt.ylabel("Absolute Future Change", fontsize = FONT_SIZE) 341 | plt.xticks(fontsize = FONT_SIZE) 342 | plt.yticks(fontsize = FONT_SIZE) 343 | plt.legend(["Anomalous", "Normal"], fontsize = FONT_SIZE) 344 | plt.title("Absolute Future Change", fontsize = FONT_SIZE) 345 | plt.tight_layout() 346 | plt.grid() 347 | plt.show() 348 | 349 | 350 | # Check arguments 351 | argumentChecker = ArgChecker() 352 | 353 | # Create surpriver instance 354 | supriver = Surpriver() 355 | 356 | # Generate predictions 357 | supriver.find_anomalies() -------------------------------------------------------------------------------- /dictionaries/readme.txt: -------------------------------------------------------------------------------- 1 | This folder saves all the data dictionary files. -------------------------------------------------------------------------------- /dictionaries/sample_dict.npy: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tradytics/surpriver/52417660e44c9533ba4dfc49f0dcb45c885d05dc/dictionaries/sample_dict.npy -------------------------------------------------------------------------------- /docker-compose.yml.template: -------------------------------------------------------------------------------- 1 | version: "3" 2 | services: 3 | surpriver: 4 | image: surpriver:latest 5 | container_name: surpriver 6 | restart: always 7 | volumes: 8 | - ":/usr/src/app" 9 | -------------------------------------------------------------------------------- /dockerfile: -------------------------------------------------------------------------------- 1 | FROM python:3.8 2 | 3 | # Setup environment 4 | RUN cp /usr/local/bin/pip3.8 /usr/local/bin/pip3 # reenable pip3 5 | RUN pip3 install --upgrade pip 6 | WORKDIR /usr/src/app 7 | 8 | # Install requirements 9 | COPY requirements.txt ./ 10 | RUN pip3 install --no-cache-dir -r requirements.txt 11 | 12 | COPY . . 13 | 14 | VOLUME ["/usr/src/app"] 15 | 16 | CMD ["/usr/src/app/entry_point.sh"] 17 | -------------------------------------------------------------------------------- /entry_point.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | tail -f /dev/null 4 | -------------------------------------------------------------------------------- /feature_generator.py: -------------------------------------------------------------------------------- 1 | # Basic libraries 2 | import os 3 | import ta 4 | import sys 5 | import json 6 | import math 7 | import pickle 8 | import random 9 | import requests 10 | import matplotlib 11 | import collections 12 | import numpy as np 13 | from os import walk 14 | import pandas as pd 15 | import yfinance as yf 16 | import datetime as dt 17 | from scipy.stats import linregress 18 | from datetime import datetime, timedelta 19 | import warnings 20 | warnings.filterwarnings("ignore") 21 | 22 | class TAEngine: 23 | def __init__(self, history_to_use): 24 | print("Technical Indicator Engine has been initialized") 25 | self.HISTORY_TO_USE = history_to_use 26 | 27 | def calculate_slope(self, data): 28 | """ 29 | Calculate slope, p value, and r^2 value given some data 30 | """ 31 | x_axis = np.arange(len(data)) 32 | regression_model = linregress(x_axis, data) 33 | slope, r_value, p_value = round(regression_model.slope, 3), round(abs(regression_model.rvalue), 3), round(regression_model.pvalue, 4) 34 | return slope, r_value, p_value 35 | 36 | def get_technical_indicators(self, price_data): 37 | """ 38 | Given a pandas data frame with columns -> 'Open', 'High', 'Low', 'Close', 'Volume', extract different technical indicators and returns 39 | """ 40 | technical_indicators_dictionary = {} 41 | 42 | # RSI 43 | rsi_history = [5, 10, 15] 44 | for history in rsi_history: 45 | rsi = ta.momentum.RSIIndicator(price_data['Close'], n = history, fillna = True).rsi().values.tolist() 46 | slope_rsi, r_value_rsi, p_value_rsi = self.calculate_slope(rsi[-self.HISTORY_TO_USE:]) 47 | technical_indicators_dictionary["rsi-" + str(history)] = rsi[-self.HISTORY_TO_USE:] + [slope_rsi, r_value_rsi, p_value_rsi] 48 | 49 | # Stochastics 50 | stochastic_history = [5, 10, 15] 51 | for history in stochastic_history: 52 | stochs = ta.momentum.StochasticOscillator(price_data['High'], price_data['Low'], price_data['Close'], n = history, d_n = int(history/3), fillna = True).stoch().values.tolist() 53 | slope_stoch, r_value_stoch, p_value_stoch = self.calculate_slope(stochs[-self.HISTORY_TO_USE:]) 54 | technical_indicators_dictionary["stochs-" + str(history)] = stochs[-self.HISTORY_TO_USE:] + [slope_stoch, r_value_stoch, p_value_stoch] 55 | 56 | # Accumulation Distribution 57 | acc_dist = ta.volume.acc_dist_index(price_data['High'], price_data['Low'], price_data['Close'], price_data['Volume'], fillna=True).values.tolist() 58 | acc_dist = acc_dist[-self.HISTORY_TO_USE:] 59 | slope_acc_dist, r_value_acc_dist, p_value_acc_dist = self.calculate_slope(acc_dist) 60 | technical_indicators_dictionary["acc_dist"] = [slope_acc_dist, r_value_acc_dist, p_value_acc_dist] 61 | 62 | # Ease of movement 63 | eom_history = [5, 10, 20] 64 | for history in eom_history: 65 | eom = ta.volume.ease_of_movement(price_data['High'], price_data['Low'], price_data['Volume'], n=history, fillna=True).values.tolist() 66 | slope_eom, r_value_eom, p_value_eom = self.calculate_slope(eom[-self.HISTORY_TO_USE:]) 67 | technical_indicators_dictionary["eom-" + str(history)] = [slope_eom, r_value_eom, p_value_eom] 68 | 69 | # CCI 70 | cci_history = [5, 10, 20] 71 | for history in cci_history: 72 | cci = ta.trend.cci(price_data['High'], price_data['Low'], price_data['Close'], n=history, c=0.015, fillna=True).values.tolist() 73 | slope_cci, r_value_cci, p_value_cci = self.calculate_slope(cci[-self.HISTORY_TO_USE:]) 74 | technical_indicators_dictionary["cci-" + str(history)] = cci[-self.HISTORY_TO_USE:] + [slope_cci, r_value_cci, p_value_cci] 75 | 76 | # Daily log return 77 | daily_return = ta.others.daily_return(price_data['Close'], fillna=True).values.tolist() 78 | daily_log_return = ta.others.daily_log_return(price_data['Close'], fillna=True).values.tolist() 79 | technical_indicators_dictionary["daily_log_return"] = daily_log_return[-self.HISTORY_TO_USE:] 80 | 81 | # Volume difference 82 | volume_list = price_data['Volume'].values.tolist() 83 | volume_list = [vol for vol in volume_list if vol != 0] 84 | volume_returns = [volume_list[x] / volume_list[x - 1] for x in range(1, len(volume_list))] 85 | slope_vol, r_value_vol, p_value_vol = self.calculate_slope(volume_returns[-self.HISTORY_TO_USE:]) 86 | technical_indicators_dictionary["volume_returns"] = volume_returns[-self.HISTORY_TO_USE:] + [slope_vol, r_value_vol, p_value_vol] 87 | 88 | return technical_indicators_dictionary 89 | 90 | def get_features(self, features_dictionary): 91 | """ 92 | Extract features from the data dictionary. The data dictionary contains values for multiple TAs such as cci, rsi, stocks etc. But here, we will only use the price returns, volume returns, and eom values. 93 | """ 94 | 95 | keys_to_use = ["volume_returns", "daily_log_return", "eom"] 96 | all_keys = list(sorted(features_dictionary.keys())) 97 | feature_list = [] 98 | for key in all_keys: 99 | 100 | # Check if key is present 101 | key_in_keys_to_use = [k in key for k in keys_to_use] 102 | if key_in_keys_to_use.count(True) > 0: 103 | # Add values for the key 104 | feature_list.extend(features_dictionary[key]) 105 | else: 106 | # TAs such as CCI, RSI, STOCHS are being ignored. You can add another condition above to use them 107 | _ = None 108 | 109 | return feature_list -------------------------------------------------------------------------------- /figures/black_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tradytics/surpriver/52417660e44c9533ba4dfc49f0dcb45c885d05dc/figures/black_logo.png -------------------------------------------------------------------------------- /figures/correlation_plot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tradytics/surpriver/52417660e44c9533ba4dfc49f0dcb45c885d05dc/figures/correlation_plot.png -------------------------------------------------------------------------------- /figures/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tradytics/surpriver/52417660e44c9533ba4dfc49f0dcb45c885d05dc/figures/logo.png -------------------------------------------------------------------------------- /figures/logo_custom.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tradytics/surpriver/52417660e44c9533ba4dfc49f0dcb45c885d05dc/figures/logo_custom.png -------------------------------------------------------------------------------- /library_installation.bat: -------------------------------------------------------------------------------- 1 | @ECHO OFF 2 | pip install -r requirements.txt 3 | PAUSE 4 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | attrs==20.2.0 2 | autobahn==20.7.1 3 | Automat==20.2.0 4 | certifi==2020.6.20 5 | cffi==1.14.2 6 | chardet==3.0.4 7 | constantly==15.1.0 8 | cryptography==3.1 9 | cycler==0.10.0 10 | dateparser==0.7.6 11 | hyperlink==20.0.1 12 | idna==2.10 13 | incremental==17.5.0 14 | joblib==0.16.0 15 | kiwisolver==1.2.0 16 | matplotlib==3.3.1 17 | multitasking==0.0.9 18 | numpy==1.19.1 19 | pandas==1.1.1 20 | Pillow==7.2.0 21 | pyasn1==0.4.8 22 | pyasn1-modules==0.2.8 23 | pycparser==2.20 24 | PyHamcrest==2.0.2 25 | pyOpenSSL==19.1.0 26 | pyparsing==2.4.7 27 | python-binance==0.7.5 28 | python-dateutil==2.8.1 29 | pytz==2020.1 30 | regex==2020.7.14 31 | requests==2.24.0 32 | scikit-learn==0.23.2 33 | scipy==1.5.2 34 | service-identity==18.1.0 35 | six==1.15.0 36 | ta==0.5.25 37 | threadpoolctl==2.1.0 38 | tqdm==4.48.2 39 | Twisted==20.3.0 40 | txaio==20.4.1 41 | tzlocal==2.1 42 | urllib3==1.25.10 43 | yfinance==0.1.54 44 | zope.interface==5.1.0 45 | -------------------------------------------------------------------------------- /stocks/cryptos.txt: -------------------------------------------------------------------------------- 1 | BTCUSDT 2 | ETHUSDT 3 | BNBUSDT 4 | BCCUSDT 5 | NEOUSDT 6 | LTCUSDT 7 | QTUMUSDT 8 | ADAUSDT 9 | XRPUSDT 10 | EOSUSDT 11 | TUSDUSDT 12 | IOTAUSDT 13 | XLMUSDT 14 | ONTUSDT 15 | TRXUSDT 16 | ETCUSDT 17 | ICXUSDT 18 | VENUSDT 19 | NULSUSDT 20 | VETUSDT 21 | PAXUSDT 22 | BCHABCUSDT 23 | BCHSVUSDT 24 | USDCUSDT 25 | LINKUSDT 26 | WAVESUSDT 27 | BTTUSDT 28 | USDSUSDT 29 | ONGUSDT 30 | HOTUSDT 31 | ZILUSDT 32 | ZRXUSDT 33 | FETUSDT 34 | BATUSDT 35 | XMRUSDT 36 | ZECUSDT 37 | IOSTUSDT 38 | CELRUSDT 39 | DASHUSDT 40 | NANOUSDT 41 | OMGUSDT 42 | THETAUSDT 43 | ENJUSDT 44 | MITHUSDT 45 | MATICUSDT 46 | ATOMUSDT 47 | TFUELUSDT 48 | ONEUSDT 49 | FTMUSDT 50 | ALGOUSDT 51 | USDSBUSDT 52 | GTOUSDT 53 | ERDUSDT 54 | DOGEUSDT 55 | DUSKUSDT 56 | ANKRUSDT 57 | WINUSDT 58 | COSUSDT 59 | NPXSUSDT 60 | COCOSUSDT 61 | MTLUSDT 62 | TOMOUSDT 63 | PERLUSDT 64 | DENTUSDT 65 | MFTUSDT 66 | KEYUSDT 67 | STORMUSDT 68 | DOCKUSDT 69 | WANUSDT 70 | FUNUSDT 71 | CVCUSDT 72 | CHZUSDT 73 | BANDUSDT 74 | BUSDUSDT 75 | BEAMUSDT 76 | XTZUSDT 77 | RENUSDT 78 | RVNUSDT 79 | HCUSDT 80 | HBARUSDT 81 | NKNUSDT 82 | STXUSDT 83 | KAVAUSDT 84 | ARPAUSDT 85 | IOTXUSDT 86 | RLCUSDT 87 | MCOUSDT 88 | CTXCUSDT 89 | BCHUSDT 90 | TROYUSDT 91 | VITEUSDT 92 | FTTUSDT 93 | BUSDTRY 94 | USDTTRY 95 | USDTRUB 96 | EURUSDT 97 | OGNUSDT 98 | DREPUSDT 99 | BULLUSDT 100 | BEARUSDT 101 | ETHBULLUSDT 102 | ETHBEARUSDT 103 | TCTUSDT 104 | WRXUSDT 105 | BTSUSDT 106 | LSKUSDT 107 | BNTUSDT 108 | LTOUSDT 109 | EOSBULLUSDT 110 | EOSBEARUSDT 111 | XRPBULLUSDT 112 | XRPBEARUSDT 113 | STRATUSDT 114 | AIONUSDT 115 | MBLUSDT 116 | COTIUSDT 117 | BNBBULLUSDT 118 | BNBBEARUSDT 119 | STPTUSDT 120 | USDTZAR 121 | WTCUSDT 122 | DATAUSDT 123 | XZCUSDT 124 | SOLUSDT 125 | USDTIDRT 126 | CTSIUSDT 127 | HIVEUSDT 128 | CHRUSDT 129 | BTCUPUSDT 130 | BTCDOWNUSDT 131 | GXSUSDT 132 | ARDRUSDT 133 | LENDUSDT 134 | MDTUSDT 135 | STMXUSDT 136 | KNCUSDT 137 | REPUSDT 138 | LRCUSDT 139 | PNTUSDT 140 | USDTUAH 141 | COMPUSDT 142 | USDTBIDR 143 | BKRWUSDT 144 | SCUSDT 145 | ZENUSDT 146 | SNXUSDT 147 | ETHUPUSDT 148 | ETHDOWNUSDT 149 | ADAUPUSDT 150 | ADADOWNUSDT 151 | LINKUPUSDT 152 | LINKDOWNUSDT 153 | VTHOUSDT 154 | DGBUSDT 155 | GBPUSDT 156 | SXPUSDT 157 | MKRUSDT 158 | DAIUSDT 159 | DCRUSDT 160 | STORJUSDT 161 | BNBUPUSDT 162 | BNBDOWNUSDT 163 | XTZUPUSDT 164 | XTZDOWNUSDT 165 | USDTBKRW 166 | MANAUSDT 167 | AUDUSDT 168 | YFIUSDT 169 | BALUSDT 170 | BLZUSDT 171 | IRISUSDT 172 | KMDUSDT 173 | USDTDAI 174 | JSTUSDT 175 | SRMUSDT 176 | ANTUSDT 177 | CRVUSDT 178 | SANDUSDT 179 | OCEANUSDT 180 | NMRUSDT 181 | DOTUSDT 182 | LUNAUSDT 183 | RSRUSDT 184 | PAXGUSDT 185 | WNXMUSDT 186 | TRBUSDT 187 | BZRXUSDT 188 | SUSHIUSDT 189 | YFIIUSDT 190 | KSMUSDT 191 | EGLDUSDT 192 | DIAUSDT 193 | RUNEUSDT 194 | FIOUSDT -------------------------------------------------------------------------------- /stocks/stocks.txt: -------------------------------------------------------------------------------- 1 | A 2 | AA 3 | AACG 4 | AAL 5 | AAMC 6 | AAME 7 | AAN 8 | AAOI 9 | AAON 10 | AAP 11 | AAPL 12 | AAT 13 | AAU 14 | AAWW 15 | AAXJ 16 | AAXN 17 | AB 18 | ABB 19 | ABBV 20 | ABC 21 | ABCB 22 | ABEO 23 | ABEV 24 | ABG 25 | ABIO 26 | ABM 27 | ABMD 28 | ABR 29 | ABT 30 | ABTX 31 | ABUS 32 | AC 33 | ACA 34 | ACAD 35 | ACAM 36 | ACB 37 | ACBI 38 | ACC 39 | ACCO 40 | ACEL 41 | ACER 42 | ACGL 43 | ACH 44 | ACHC 45 | ACHV 46 | ACIA 47 | ACIU 48 | ACIW 49 | ACLS 50 | ACM 51 | ACMR 52 | ACN 53 | ACNB 54 | ACOR 55 | ACP 56 | ACRE 57 | ACRS 58 | ACRX 59 | ACST 60 | ACT 61 | ACTG 62 | ACU 63 | ACV 64 | ACWI 65 | ACWX 66 | ACY 67 | ADAP 68 | ADBE 69 | ADC 70 | ADCT 71 | ADES 72 | ADI 73 | ADIL 74 | ADM 75 | ADMA 76 | ADMP 77 | ADMS 78 | ADNT 79 | ADP 80 | ADPT 81 | ADRE 82 | ADRO 83 | ADS 84 | ADSK 85 | ADSW 86 | ADT 87 | ADTN 88 | ADUS 89 | ADVM 90 | ADX 91 | ADXS 92 | AE 93 | AEE 94 | AEF 95 | AEG 96 | AEGN 97 | AEHR 98 | AEIS 99 | AEL 100 | AEM 101 | AEMD 102 | AEO 103 | AEP 104 | AER 105 | AERI 106 | AES 107 | AESE 108 | AEY 109 | AEYE 110 | AEZS 111 | AFB 112 | AFG 113 | AFH 114 | AFI 115 | AFIN 116 | AFL 117 | AFMD 118 | AFT 119 | AFYA 120 | AG 121 | AGCO 122 | AGD 123 | AGE 124 | AGEN 125 | AGFS 126 | AGI 127 | AGIO 128 | AGLE 129 | AGM 130 | AGMH 131 | AGNC 132 | AGO 133 | AGR 134 | AGRO 135 | AGRX 136 | AGS 137 | AGTC 138 | AGX 139 | AGYS 140 | AGZD 141 | AHC 142 | AHCO 143 | AHH 144 | AHPI 145 | AHT 146 | AI 147 | AIA 148 | AIF 149 | AIG 150 | AIH 151 | AIHS 152 | AIKI 153 | AIM 154 | AIMC 155 | AIMT 156 | AIN 157 | AINC 158 | AINV 159 | AIQ 160 | AIR 161 | AIRG 162 | AIRI 163 | AIRR 164 | AIRT 165 | AIT 166 | AIV 167 | AIZ 168 | AJG 169 | AJRD 170 | AJX 171 | AKAM 172 | AKBA 173 | AKCA 174 | AKER 175 | AKR 176 | AKRO 177 | AKTS 178 | AKTX 179 | AL 180 | ALAC 181 | ALB 182 | ALBO 183 | ALC 184 | ALCO 185 | ALDX 186 | ALE 187 | ALEC 188 | ALEX 189 | ALG 190 | ALGN 191 | ALGT 192 | ALIM 193 | ALJJ 194 | ALK 195 | ALKS 196 | ALL 197 | ALLE 198 | ALLK 199 | ALLO 200 | ALLT 201 | ALLY 202 | ALNA 203 | ALNY 204 | ALO 205 | ALOT 206 | ALPN 207 | ALRM 208 | ALRN 209 | ALRS 210 | ALSK 211 | ALSN 212 | ALT 213 | ALTG 214 | ALTM 215 | ALTR 216 | ALTY 217 | ALV 218 | ALX 219 | ALXN 220 | ALYA 221 | AM 222 | AMAG 223 | AMAL 224 | AMAT 225 | AMBA 226 | AMBC 227 | AMBO 228 | AMC 229 | AMCA 230 | AMCI 231 | AMCR 232 | AMCX 233 | AMD 234 | AME 235 | AMED 236 | AMEH 237 | AMG 238 | AMGN 239 | AMH 240 | AMK 241 | AMKR 242 | AMN 243 | AMNB 244 | AMOT 245 | AMP 246 | AMPE 247 | AMPH 248 | AMPY 249 | AMRB 250 | AMRC 251 | AMRH 252 | AMRK 253 | AMRN 254 | AMRS 255 | AMRX 256 | AMS 257 | AMSC 258 | AMSF 259 | AMSWA 260 | AMT 261 | AMTB 262 | AMTD 263 | AMTI 264 | AMTX 265 | AMWD 266 | AMX 267 | AMZN 268 | AN 269 | ANAB 270 | ANAT 271 | ANCN 272 | ANDA 273 | ANDE 274 | ANET 275 | ANF 276 | ANGI 277 | ANGL 278 | ANGO 279 | ANH 280 | ANIK 281 | ANIP 282 | ANIX 283 | ANPC 284 | ANSS 285 | ANTE 286 | ANTM 287 | ANVS 288 | ANY 289 | AOD 290 | AON 291 | AOS 292 | AOSL 293 | AP 294 | APA 295 | APAM 296 | APD 297 | APDN 298 | APEI 299 | APEN 300 | APEX 301 | APG 302 | APH 303 | APHA 304 | APLE 305 | APLS 306 | APLT 307 | APM 308 | APO 309 | APOG 310 | APOP 311 | APPF 312 | APPN 313 | APPS 314 | APRE 315 | APRN 316 | APT 317 | APTO 318 | APTS 319 | APTV 320 | APTX 321 | APVO 322 | APWC 323 | APXT 324 | APYX 325 | AQB 326 | AQMS 327 | AQN 328 | AQST 329 | AQUA 330 | AR 331 | ARA 332 | ARAV 333 | ARAY 334 | ARC 335 | ARCB 336 | ARCC 337 | ARCE 338 | ARCH 339 | ARCO 340 | ARCT 341 | ARD 342 | ARDC 343 | ARDS 344 | ARDX 345 | ARE 346 | ARES 347 | ARGO 348 | ARGX 349 | ARI 350 | ARKR 351 | ARL 352 | ARLO 353 | ARLP 354 | ARMK 355 | ARMP 356 | ARNA 357 | ARNC 358 | AROC 359 | AROW 360 | ARPO 361 | ARQT 362 | ARR 363 | ARTL 364 | ARTNA 365 | ARTW 366 | ARVN 367 | ARW 368 | ARWR 369 | ARYA 370 | ASA 371 | ASB 372 | ASC 373 | ASET 374 | ASFI 375 | ASG 376 | ASGN 377 | ASH 378 | ASIX 379 | ASLN 380 | ASM 381 | ASMB 382 | ASML 383 | ASNA 384 | ASND 385 | ASPN 386 | ASPS 387 | ASPU 388 | ASR 389 | ASRT 390 | ASRV 391 | ASTC 392 | ASTE 393 | ASUR 394 | ASX 395 | ASYS 396 | AT 397 | ATAX 398 | ATCO 399 | ATCX 400 | ATEC 401 | ATEN 402 | ATEX 403 | ATGE 404 | ATH 405 | ATHE 406 | ATHM 407 | ATHX 408 | ATI 409 | ATIF 410 | ATKR 411 | ATLC 412 | ATLO 413 | ATNI 414 | ATNM 415 | ATNX 416 | ATO 417 | ATOM 418 | ATOS 419 | ATR 420 | ATRA 421 | ATRC 422 | ATRI 423 | ATRO 424 | ATRS 425 | ATSG 426 | ATTO 427 | ATUS 428 | ATV 429 | ATVI 430 | ATXI 431 | AU 432 | AUB 433 | AUBN 434 | AUDC 435 | AUG 436 | AUMN 437 | AUPH 438 | AUTL 439 | AUTO 440 | AUY 441 | AVA 442 | AVAL 443 | AVAV 444 | AVB 445 | AVCO 446 | AVCT 447 | AVD 448 | AVDL 449 | AVEO 450 | AVGO 451 | AVGR 452 | AVID 453 | AVK 454 | AVLR 455 | AVNS 456 | AVNW 457 | AVRO 458 | AVT 459 | AVTR 460 | AVXL 461 | AVY 462 | AVYA 463 | AWF 464 | AWH 465 | AWI 466 | AWK 467 | AWP 468 | AWR 469 | AWRE 470 | AWX 471 | AX 472 | AXAS 473 | AXDX 474 | AXGN 475 | AXGT 476 | AXL 477 | AXLA 478 | AXNX 479 | AXP 480 | AXR 481 | AXS 482 | AXSM 483 | AXTA 484 | AXTI 485 | AXU 486 | AY 487 | AYI 488 | AYLA 489 | AYRO 490 | AYTU 491 | AYX 492 | AZEK 493 | AZN 494 | AZO 495 | AZPN 496 | AZRE 497 | AZRX 498 | AZUL 499 | AZZ 500 | B 501 | BA 502 | BABA 503 | BAC 504 | BAF 505 | BAH 506 | BAK 507 | BAM 508 | BANC 509 | BAND 510 | BANF 511 | BANR 512 | BANX 513 | BAP 514 | BASI 515 | BATL 516 | BATRA 517 | BATRK 518 | BAX 519 | BB 520 | BBAR 521 | BBBY 522 | BBC 523 | BBCP 524 | BBD 525 | BBDC 526 | BBF 527 | BBGI 528 | BBH 529 | BBI 530 | BBIO 531 | BBK 532 | BBL 533 | BBN 534 | BBP 535 | BBQ 536 | BBSI 537 | BBU 538 | BBVA 539 | BBW 540 | BBX 541 | BBY 542 | BC 543 | BCBP 544 | BCC 545 | BCDA 546 | BCE 547 | BCEI 548 | BCEL 549 | BCH 550 | BCLI 551 | BCML 552 | BCO 553 | BCOM 554 | BCOR 555 | BCOV 556 | BCPC 557 | BCRX 558 | BCS 559 | BCSF 560 | BCV 561 | BCX 562 | BCYC 563 | BDC 564 | BDGE 565 | BDJ 566 | BDL 567 | BDN 568 | BDR 569 | BDSI 570 | BDTX 571 | BDX 572 | BE 573 | BEAM 574 | BEAT 575 | BECN 576 | BEDU 577 | BELFB 578 | BEN 579 | BEP 580 | BERY 581 | BEST 582 | BFAM 583 | BFIN 584 | BFIT 585 | BFK 586 | BFO 587 | BFRA 588 | BFS 589 | BFST 590 | BFY 591 | BFYT 592 | BFZ 593 | BG 594 | BGB 595 | BGCP 596 | BGFV 597 | BGG 598 | BGH 599 | BGI 600 | BGIO 601 | BGNE 602 | BGR 603 | BGRN 604 | BGS 605 | BGSF 606 | BGT 607 | BGX 608 | BGY 609 | BH 610 | BHAT 611 | BHB 612 | BHC 613 | BHE 614 | BHF 615 | BHK 616 | BHLB 617 | BHP 618 | BHR 619 | BHTG 620 | BHV 621 | BHVN 622 | BIB 623 | BICK 624 | BIDU 625 | BIF 626 | BIG 627 | BIIB 628 | BILI 629 | BILL 630 | BIMI 631 | BIO 632 | BIOC 633 | BIOL 634 | BIOX 635 | BIP 636 | BIPC 637 | BIS 638 | BIT 639 | BITA 640 | BJ 641 | BJK 642 | BJRI 643 | BK 644 | BKCC 645 | BKD 646 | BKE 647 | BKEP 648 | BKH 649 | BKI 650 | BKK 651 | BKN 652 | BKNG 653 | BKR 654 | BKSC 655 | BKT 656 | BKTI 657 | BKU 658 | BKYI 659 | BL 660 | BLBD 661 | BLCM 662 | BLCN 663 | BLD 664 | BLDP 665 | BLDR 666 | BLE 667 | BLFS 668 | BLIN 669 | BLK 670 | BLKB 671 | BLL 672 | BLMN 673 | BLNK 674 | BLPH 675 | BLRX 676 | BLU 677 | BLUE 678 | BLW 679 | BLX 680 | BMA 681 | BMCH 682 | BME 683 | BMI 684 | BMLP 685 | BMO 686 | BMRA 687 | BMRC 688 | BMRN 689 | BMTC 690 | BMY 691 | BND 692 | BNDW 693 | BNDX 694 | BNED 695 | BNFT 696 | BNGO 697 | BNR 698 | BNS 699 | BNSO 700 | BNTC 701 | BNTX 702 | BNY 703 | BOCH 704 | BOE 705 | BOH 706 | BOKF 707 | BOMN 708 | BOOM 709 | BOOT 710 | BORR 711 | BOSC 712 | BOTJ 713 | BOTZ 714 | BOX 715 | BOXL 716 | BP 717 | BPFH 718 | BPMC 719 | BPMP 720 | BPOP 721 | BPT 722 | BPTH 723 | BPY 724 | BPYU 725 | BQH 726 | BR 727 | BRBR 728 | BRC 729 | BREW 730 | BRFS 731 | BRG 732 | BRID 733 | BRKL 734 | BRKR 735 | BRKS 736 | BRMK 737 | BRN 738 | BRO 739 | BROG 740 | BRP 741 | BRPA 742 | BRQS 743 | BRT 744 | BRX 745 | BRY 746 | BSA 747 | BSAC 748 | BSAE 749 | BSBE 750 | BSBK 751 | BSBR 752 | BSCK 753 | BSCL 754 | BSCM 755 | BSCN 756 | BSCO 757 | BSCP 758 | BSCQ 759 | BSCR 760 | BSCS 761 | BSCT 762 | BSD 763 | BSDE 764 | BSE 765 | BSET 766 | BSGM 767 | BSIG 768 | BSJK 769 | BSJL 770 | BSJM 771 | BSJN 772 | BSJO 773 | BSJP 774 | BSJQ 775 | BSJR 776 | BSL 777 | BSM 778 | BSML 779 | BSMM 780 | BSMN 781 | BSMO 782 | BSMP 783 | BSMQ 784 | BSMR 785 | BSMS 786 | BSMT 787 | BSMX 788 | BSQR 789 | BSRR 790 | BST 791 | BSTC 792 | BSX 793 | BTA 794 | BTAI 795 | BTE 796 | BTEC 797 | BTG 798 | BTI 799 | BTN 800 | BTO 801 | BTT 802 | BTU 803 | BTZ 804 | BUD 805 | BUG 806 | BUI 807 | BURL 808 | BUSE 809 | BV 810 | BVN 811 | BVXV 812 | BW 813 | BWA 814 | BWAY 815 | BWB 816 | BWEN 817 | BWFG 818 | BWG 819 | BWMX 820 | BWXT 821 | BX 822 | BXC 823 | BXG 824 | BXMT 825 | BXMX 826 | BXP 827 | BXRX 828 | BXS 829 | BY 830 | BYD 831 | BYFC 832 | BYM 833 | BYND 834 | BYSI 835 | BZH 836 | BZM 837 | BZUN 838 | C 839 | CAAP 840 | CAAS 841 | CABA 842 | CABO 843 | CAC 844 | CACC 845 | CACG 846 | CACI 847 | CADE 848 | CAE 849 | CAF 850 | CAG 851 | CAH 852 | CAI 853 | CAJ 854 | CAKE 855 | CAL 856 | CALA 857 | CALM 858 | CALT 859 | CALX 860 | CAMP 861 | CAMT 862 | CAN 863 | CANF 864 | CANG 865 | CAPL 866 | CAPR 867 | CAR 868 | CARA 869 | CARE 870 | CARG 871 | CARR 872 | CARS 873 | CARV 874 | CARZ 875 | CASA 876 | CASH 877 | CASI 878 | CASS 879 | CASY 880 | CAT 881 | CATB 882 | CATC 883 | CATH 884 | CATM 885 | CATO 886 | CATS 887 | CATY 888 | CB 889 | CBAN 890 | CBAT 891 | CBAY 892 | CBB 893 | CBD 894 | CBFV 895 | CBH 896 | CBIO 897 | CBL 898 | CBLI 899 | CBMB 900 | CBMG 901 | CBNK 902 | CBOE 903 | CBPO 904 | CBRE 905 | CBRL 906 | CBSH 907 | CBT 908 | CBTX 909 | CBU 910 | CBZ 911 | CC 912 | CCAP 913 | CCBG 914 | CCC 915 | CCCL 916 | CCD 917 | CCEP 918 | CCF 919 | CCH 920 | CCI 921 | CCJ 922 | CCK 923 | CCL 924 | CCLP 925 | CCM 926 | CCMP 927 | CCNE 928 | CCO 929 | CCOI 930 | CCR 931 | CCRC 932 | CCRN 933 | CCS 934 | CCU 935 | CCX 936 | CCXI 937 | CCXX 938 | CDAY 939 | CDC 940 | CDE 941 | CDEV 942 | CDK 943 | CDL 944 | CDLX 945 | CDMO 946 | CDNA 947 | CDNS 948 | CDOR 949 | CDR 950 | CDTX 951 | CDW 952 | CDXC 953 | CDXS 954 | CDZI 955 | CE 956 | CEA 957 | CECE 958 | CEE 959 | CEI 960 | CEIX 961 | CEL 962 | CELC 963 | CELH 964 | CELP 965 | CEM 966 | CEMI 967 | CEN 968 | CENT 969 | CENTA 970 | CENX 971 | CEO 972 | CEPU 973 | CEQP 974 | CERC 975 | CERN 976 | CERS 977 | CET 978 | CETV 979 | CETX 980 | CEV 981 | CEVA 982 | CEY 983 | CEZ 984 | CF 985 | CFA 986 | CFB 987 | CFBK 988 | CFFA 989 | CFFI 990 | CFFN 991 | CFG 992 | CFMS 993 | CFO 994 | CFR 995 | CFRX 996 | CFX 997 | CG 998 | CGA 999 | CGBD 1000 | CGC 1001 | CGEN 1002 | CGIX 1003 | CGNX 1004 | CGO 1005 | CGROU 1006 | CHA 1007 | CHAP 1008 | CHCI 1009 | CHCO 1010 | CHCT 1011 | CHD 1012 | CHDN 1013 | CHE 1014 | CHEF 1015 | CHEK 1016 | CHFS 1017 | CHGG 1018 | CHH 1019 | CHI 1020 | CHIC 1021 | CHKP 1022 | CHL 1023 | CHMA 1024 | CHMG 1025 | CHMI 1026 | CHN 1027 | CHNA 1028 | CHNG 1029 | CHNR 1030 | CHPM 1031 | CHRA 1032 | CHRS 1033 | CHRW 1034 | CHS 1035 | CHSCL 1036 | CHSCM 1037 | CHSCN 1038 | CHSCO 1039 | CHSCP 1040 | CHT 1041 | CHTR 1042 | CHU 1043 | CHUY 1044 | CHW 1045 | CHWY 1046 | CHX 1047 | CHY 1048 | CI 1049 | CIA 1050 | CIB 1051 | CIBR 1052 | CID 1053 | CIDM 1054 | CIEN 1055 | CIF 1056 | CIG 1057 | CIGI 1058 | CIH 1059 | CII 1060 | CIIC 1061 | CIK 1062 | CIL 1063 | CIM 1064 | CINF 1065 | CINR 1066 | CIO 1067 | CIR 1068 | CIT 1069 | CIVB 1070 | CIX 1071 | CIZ 1072 | CIZN 1073 | CJJD 1074 | CKH 1075 | CKPT 1076 | CKX 1077 | CL 1078 | CLAR 1079 | CLB 1080 | CLBK 1081 | CLBS 1082 | CLCT 1083 | CLDR 1084 | CLDT 1085 | CLDX 1086 | CLEU 1087 | CLF 1088 | CLFD 1089 | CLGN 1090 | CLGX 1091 | CLH 1092 | CLI 1093 | CLIR 1094 | CLLS 1095 | CLM 1096 | CLMT 1097 | CLNC 1098 | CLNE 1099 | CLNY 1100 | CLOU 1101 | CLPR 1102 | CLPS 1103 | CLPT 1104 | CLR 1105 | CLRB 1106 | CLRG 1107 | CLRO 1108 | CLS 1109 | CLSD 1110 | CLSK 1111 | CLSN 1112 | CLUB 1113 | CLVS 1114 | CLW 1115 | CLWT 1116 | CLX 1117 | CLXT 1118 | CM 1119 | CMA 1120 | CMBM 1121 | CMC 1122 | CMCM 1123 | CMCO 1124 | CMCSA 1125 | CMCT 1126 | CMD 1127 | CME 1128 | CMG 1129 | CMI 1130 | CMLS 1131 | CMO 1132 | CMP 1133 | CMPR 1134 | CMRE 1135 | CMRX 1136 | CMS 1137 | CMT 1138 | CMTL 1139 | CMU 1140 | CNA 1141 | CNBKA 1142 | CNC 1143 | CNCE 1144 | CNCR 1145 | CNDT 1146 | CNET 1147 | CNF 1148 | CNFR 1149 | CNHI 1150 | CNI 1151 | CNK 1152 | CNMD 1153 | CNNE 1154 | CNO 1155 | CNOB 1156 | CNP 1157 | CNQ 1158 | CNR 1159 | CNS 1160 | CNSL 1161 | CNSP 1162 | CNST 1163 | CNTG 1164 | CNTY 1165 | CNX 1166 | CNXM 1167 | CNXN 1168 | CO 1169 | COCP 1170 | CODA 1171 | CODI 1172 | CODX 1173 | COE 1174 | COF 1175 | COG 1176 | COHN 1177 | COHR 1178 | COHU 1179 | COKE 1180 | COLB 1181 | COLD 1182 | COLL 1183 | COLM 1184 | COMM 1185 | COMT 1186 | CONE 1187 | CONN 1188 | COO 1189 | COOP 1190 | COP 1191 | COR 1192 | CORE 1193 | CORR 1194 | CORT 1195 | COST 1196 | COTY 1197 | COUP 1198 | COWN 1199 | CP 1200 | CPA 1201 | CPAA 1202 | CPAC 1203 | CPAH 1204 | CPB 1205 | CPE 1206 | CPF 1207 | CPG 1208 | CPHC 1209 | CPHI 1210 | CPIX 1211 | CPLG 1212 | CPLP 1213 | CPRI 1214 | CPRT 1215 | CPRX 1216 | CPS 1217 | CPSH 1218 | CPSI 1219 | CPSS 1220 | CPST 1221 | CPT 1222 | CPTA 1223 | CQP 1224 | CR 1225 | CRAI 1226 | CRBP 1227 | CRC 1228 | CRDF 1229 | CREE 1230 | CREG 1231 | CRESY 1232 | CREX 1233 | CRF 1234 | CRH 1235 | CRHM 1236 | CRI 1237 | CRIS 1238 | CRK 1239 | CRL 1240 | CRM 1241 | CRMD 1242 | CRMT 1243 | CRNC 1244 | CRNT 1245 | CRNX 1246 | CRON 1247 | CROX 1248 | CRS 1249 | CRSA 1250 | CRSP 1251 | CRT 1252 | CRTO 1253 | CRTX 1254 | CRUS 1255 | CRVL 1256 | CRVS 1257 | CRWD 1258 | CRWS 1259 | CRY 1260 | CS 1261 | CSA 1262 | CSB 1263 | CSBR 1264 | CSCO 1265 | CSF 1266 | CSGP 1267 | CSGS 1268 | CSII 1269 | CSIQ 1270 | CSL 1271 | CSLT 1272 | CSML 1273 | CSOD 1274 | CSPI 1275 | CSPR 1276 | CSQ 1277 | CSSE 1278 | CSTE 1279 | CSTL 1280 | CSTM 1281 | CSTR 1282 | CSU 1283 | CSV 1284 | CSWC 1285 | CSWI 1286 | CSX 1287 | CTAS 1288 | CTB 1289 | CTBB 1290 | CTBI 1291 | CTEK 1292 | CTG 1293 | CTHR 1294 | CTIB 1295 | CTIC 1296 | CTK 1297 | CTL 1298 | CTLT 1299 | CTMX 1300 | CTO 1301 | CTR 1302 | CTRA 1303 | CTRE 1304 | CTRM 1305 | CTRN 1306 | CTS 1307 | CTSH 1308 | CTSO 1309 | CTT 1310 | CTVA 1311 | CTXR 1312 | CTXS 1313 | CUB 1314 | CUBA 1315 | CUBE 1316 | CUBI 1317 | CUE 1318 | CUK 1319 | CULP 1320 | CURO 1321 | CUTR 1322 | CUZ 1323 | CVA 1324 | CVBF 1325 | CVCO 1326 | CVCY 1327 | CVE 1328 | CVEO 1329 | CVET 1330 | CVGI 1331 | CVGW 1332 | CVI 1333 | CVIA 1334 | CVLT 1335 | CVLY 1336 | CVM 1337 | CVNA 1338 | CVR 1339 | CVS 1340 | CVTI 1341 | CVU 1342 | CVV 1343 | CVX 1344 | CW 1345 | CWBC 1346 | CWBR 1347 | CWCO 1348 | CWEN 1349 | CWH 1350 | CWK 1351 | CWST 1352 | CWT 1353 | CX 1354 | CXDC 1355 | CXE 1356 | CXH 1357 | CXO 1358 | CXP 1359 | CXSE 1360 | CXW 1361 | CYAD 1362 | CYAN 1363 | CYBE 1364 | CYBR 1365 | CYCC 1366 | CYCN 1367 | CYD 1368 | CYH 1369 | CYRN 1370 | CYRX 1371 | CYTK 1372 | CZNC 1373 | CZR 1374 | CZWI 1375 | CZZ 1376 | D 1377 | DAC 1378 | DADA 1379 | DAIO 1380 | DAKT 1381 | DAL 1382 | DALI 1383 | DAN 1384 | DAO 1385 | DAR 1386 | DARE 1387 | DAVA 1388 | DAX 1389 | DB 1390 | DBCP 1391 | DBD 1392 | DBI 1393 | DBL 1394 | DBVT 1395 | DBX 1396 | DCI 1397 | DCO 1398 | DCOM 1399 | DCP 1400 | DCPH 1401 | DCTH 1402 | DD 1403 | DDD 1404 | DDF 1405 | DDIV 1406 | DDOG 1407 | DDS 1408 | DE 1409 | DEA 1410 | DECK 1411 | DEI 1412 | DELL 1413 | DENN 1414 | DEO 1415 | DESP 1416 | DEX 1417 | DFFN 1418 | DFIN 1419 | DFNL 1420 | DFP 1421 | DFPHU 1422 | DFS 1423 | DG 1424 | DGICA 1425 | DGII 1426 | DGLD 1427 | DGLY 1428 | DGRE 1429 | DGRS 1430 | DGRW 1431 | DGX 1432 | DHC 1433 | DHF 1434 | DHI 1435 | DHIL 1436 | DHR 1437 | DHT 1438 | DHX 1439 | DHY 1440 | DIAX 1441 | DIN 1442 | DINT 1443 | DIOD 1444 | DIS 1445 | DISCA 1446 | DISCK 1447 | DISH 1448 | DIT 1449 | DJCO 1450 | DK 1451 | DKL 1452 | DKNG 1453 | DKS 1454 | DL 1455 | DLA 1456 | DLB 1457 | DLHC 1458 | DLNG 1459 | DLPH 1460 | DLPN 1461 | DLR 1462 | DLTH 1463 | DLTR 1464 | DLX 1465 | DMAC 1466 | DMB 1467 | DMF 1468 | DMLP 1469 | DMO 1470 | DMPI 1471 | DMRC 1472 | DMTK 1473 | DNI 1474 | DNJR 1475 | DNK 1476 | DNKN 1477 | DNLI 1478 | DNN 1479 | DNOW 1480 | DNP 1481 | DNR 1482 | DOC 1483 | DOCU 1484 | DOGZ 1485 | DOMO 1486 | DOOO 1487 | DOOR 1488 | DORM 1489 | DOV 1490 | DOW 1491 | DOX 1492 | DOYU 1493 | DPG 1494 | DPHC 1495 | DPW 1496 | DPZ 1497 | DQ 1498 | DRAD 1499 | DRD 1500 | DRE 1501 | DRH 1502 | DRI 1503 | DRIO 1504 | DRIV 1505 | DRNA 1506 | DRQ 1507 | DRRX 1508 | DRTT 1509 | DS 1510 | DSE 1511 | DSGX 1512 | DSKE 1513 | DSL 1514 | DSLV 1515 | DSM 1516 | DSPG 1517 | DSS 1518 | DSSI 1519 | DSU 1520 | DSWL 1521 | DSX 1522 | DT 1523 | DTE 1524 | DTEA 1525 | DTF 1526 | DTIL 1527 | DTJ 1528 | DTSS 1529 | DTYL 1530 | DUC 1531 | DUK 1532 | DUKH 1533 | DUO 1534 | DUOT 1535 | DUSA 1536 | DVA 1537 | DVAX 1538 | DVD 1539 | DVLU 1540 | DVN 1541 | DVOL 1542 | DVY 1543 | DWAS 1544 | DWAT 1545 | DWAW 1546 | DWEQ 1547 | DWFI 1548 | DWLD 1549 | DWMC 1550 | DWPP 1551 | DWSH 1552 | DWSN 1553 | DWUS 1554 | DX 1555 | DXC 1556 | DXCM 1557 | DXF 1558 | DXGE 1559 | DXJS 1560 | DXLG 1561 | DXPE 1562 | DXR 1563 | DXYN 1564 | DY 1565 | DYAI 1566 | DYNT 1567 | DZSI 1568 | E 1569 | EA 1570 | EAD 1571 | EAF 1572 | EARN 1573 | EARS 1574 | EAST 1575 | EAT 1576 | EB 1577 | EBAY 1578 | EBF 1579 | EBIX 1580 | EBIZ 1581 | EBMT 1582 | EBR 1583 | EBS 1584 | EBSB 1585 | EBTC 1586 | EC 1587 | ECC 1588 | ECF 1589 | ECHO 1590 | ECL 1591 | ECOL 1592 | ECOM 1593 | ECOR 1594 | ECOW 1595 | ECPG 1596 | ECT 1597 | ED 1598 | EDAP 1599 | EDD 1600 | EDF 1601 | EDI 1602 | EDIT 1603 | EDN 1604 | EDNT 1605 | EDRY 1606 | EDSA 1607 | EDU 1608 | EDUC 1609 | EE 1610 | EEA 1611 | EEFT 1612 | EEMA 1613 | EEX 1614 | EFAS 1615 | EFC 1616 | EFF 1617 | EFOI 1618 | EFR 1619 | EFSC 1620 | EFT 1621 | EFX 1622 | EGAN 1623 | EGBN 1624 | EGF 1625 | EGHT 1626 | EGIF 1627 | EGLE 1628 | EGO 1629 | EGOV 1630 | EGP 1631 | EGRX 1632 | EGY 1633 | EH 1634 | EHC 1635 | EHI 1636 | EHT 1637 | EHTH 1638 | EIDX 1639 | EIG 1640 | EIGI 1641 | EIGR 1642 | EIM 1643 | EIX 1644 | EKSO 1645 | EL 1646 | ELA 1647 | ELAN 1648 | ELF 1649 | ELGX 1650 | ELLO 1651 | ELMD 1652 | ELOX 1653 | ELP 1654 | ELS 1655 | ELSE 1656 | ELTK 1657 | ELVT 1658 | ELY 1659 | EMAN 1660 | EMB 1661 | EMCB 1662 | EMCF 1663 | EMD 1664 | EME 1665 | EMF 1666 | EMIF 1667 | EMKR 1668 | EML 1669 | EMN 1670 | EMO 1671 | EMR 1672 | EMX 1673 | EMXC 1674 | ENB 1675 | ENBL 1676 | ENDP 1677 | ENG 1678 | ENIA 1679 | ENIC 1680 | ENLC 1681 | ENLV 1682 | ENOB 1683 | ENPH 1684 | ENR 1685 | ENS 1686 | ENSG 1687 | ENSV 1688 | ENT 1689 | ENTA 1690 | ENTG 1691 | ENTX 1692 | ENV 1693 | ENVA 1694 | ENX 1695 | ENZ 1696 | ENZL 1697 | EOD 1698 | EOG 1699 | EOI 1700 | EOLS 1701 | EOS 1702 | EOT 1703 | EPAC 1704 | EPAM 1705 | EPAY 1706 | EPC 1707 | EPD 1708 | EPIX 1709 | EPM 1710 | EPR 1711 | EPRT 1712 | EPSN 1713 | EPZM 1714 | EQ 1715 | EQBK 1716 | EQC 1717 | EQH 1718 | EQIX 1719 | EQNR 1720 | EQR 1721 | EQRR 1722 | EQS 1723 | EQT 1724 | EQX 1725 | ERC 1726 | ERF 1727 | ERH 1728 | ERI 1729 | ERIC 1730 | ERIE 1731 | ERII 1732 | ERJ 1733 | EROS 1734 | ERYP 1735 | ES 1736 | ESBK 1737 | ESCA 1738 | ESE 1739 | ESEA 1740 | ESG 1741 | ESGD 1742 | ESGE 1743 | ESGG 1744 | ESGR 1745 | ESGU 1746 | ESI 1747 | ESLT 1748 | ESNT 1749 | ESP 1750 | ESPO 1751 | ESPR 1752 | ESQ 1753 | ESRT 1754 | ESS 1755 | ESSA 1756 | ESTA 1757 | ESTC 1758 | ESTE 1759 | ESXB 1760 | ET 1761 | ETB 1762 | ETFC 1763 | ETG 1764 | ETH 1765 | ETJ 1766 | ETM 1767 | ETN 1768 | ETNB 1769 | ETO 1770 | ETON 1771 | ETR 1772 | ETRN 1773 | ETSY 1774 | ETTX 1775 | ETV 1776 | ETW 1777 | ETX 1778 | ETY 1779 | EUFN 1780 | EURN 1781 | EV 1782 | EVA 1783 | EVBG 1784 | EVBN 1785 | EVC 1786 | EVER 1787 | EVF 1788 | EVFM 1789 | EVG 1790 | EVGN 1791 | EVH 1792 | EVI 1793 | EVK 1794 | EVLO 1795 | EVM 1796 | EVN 1797 | EVOK 1798 | EVOL 1799 | EVOP 1800 | EVR 1801 | EVRG 1802 | EVRI 1803 | EVSI 1804 | EVT 1805 | EVTC 1806 | EVV 1807 | EVY 1808 | EW 1809 | EWBC 1810 | EWJE 1811 | EWJV 1812 | EWZS 1813 | EXAS 1814 | EXC 1815 | EXD 1816 | EXEL 1817 | EXFO 1818 | EXG 1819 | EXK 1820 | EXLS 1821 | EXP 1822 | EXPD 1823 | EXPE 1824 | EXPI 1825 | EXPO 1826 | EXPR 1827 | EXR 1828 | EXTN 1829 | EXTR 1830 | EYE 1831 | EYEG 1832 | EYEN 1833 | EYES 1834 | EYPT 1835 | EZPW 1836 | F 1837 | FAAR 1838 | FAB 1839 | FAD 1840 | FAF 1841 | FALN 1842 | FAM 1843 | FAMI 1844 | FANG 1845 | FANH 1846 | FARM 1847 | FARO 1848 | FAST 1849 | FAT 1850 | FATE 1851 | FAX 1852 | FB 1853 | FBC 1854 | FBHS 1855 | FBIO 1856 | FBIZ 1857 | FBK 1858 | FBM 1859 | FBMS 1860 | FBNC 1861 | FBP 1862 | FBRX 1863 | FBSS 1864 | FBZ 1865 | FC 1866 | FCA 1867 | FCAL 1868 | FCAN 1869 | FCAP 1870 | FCAU 1871 | FCBC 1872 | FCBP 1873 | FCCO 1874 | FCCY 1875 | FCEF 1876 | FCEL 1877 | FCF 1878 | FCFS 1879 | FCN 1880 | FCNCA 1881 | FCNCP 1882 | FCO 1883 | FCPT 1884 | FCT 1885 | FCVT 1886 | FCX 1887 | FDEU 1888 | FDIV 1889 | FDNI 1890 | FDP 1891 | FDS 1892 | FDT 1893 | FDTS 1894 | FDUS 1895 | FDX 1896 | FE 1897 | FEAC 1898 | FEDU 1899 | FEI 1900 | FEIM 1901 | FELE 1902 | FEM 1903 | FEMB 1904 | FEMS 1905 | FEN 1906 | FENC 1907 | FENG 1908 | FEO 1909 | FEP 1910 | FET 1911 | FEUZ 1912 | FEX 1913 | FEYE 1914 | FF 1915 | FFA 1916 | FFBC 1917 | FFBW 1918 | FFC 1919 | FFG 1920 | FFHL 1921 | FFIC 1922 | FFIN 1923 | FFIV 1924 | FFNW 1925 | FFWM 1926 | FGB 1927 | FGBI 1928 | FGEN 1929 | FGM 1930 | FHB 1931 | FHI 1932 | FHK 1933 | FHN 1934 | FI 1935 | FIBK 1936 | FICO 1937 | FID 1938 | FIF 1939 | FINV 1940 | FINX 1941 | FIS 1942 | FISI 1943 | FISV 1944 | FIT 1945 | FITB 1946 | FIV 1947 | FIVE 1948 | FIVN 1949 | FIX 1950 | FIXD 1951 | FIXX 1952 | FIZZ 1953 | FJP 1954 | FKO 1955 | FKU 1956 | FL 1957 | FLAT 1958 | FLC 1959 | FLDM 1960 | FLEX 1961 | FLGT 1962 | FLIC 1963 | FLIR 1964 | FLL 1965 | FLMN 1966 | FLN 1967 | FLNG 1968 | FLNT 1969 | FLO 1970 | FLOW 1971 | FLR 1972 | FLS 1973 | FLT 1974 | FLWS 1975 | FLXN 1976 | FLXS 1977 | FLY 1978 | FMAO 1979 | FMB 1980 | FMBH 1981 | FMBI 1982 | FMC 1983 | FMCI 1984 | FMHI 1985 | FMK 1986 | FMN 1987 | FMNB 1988 | FMO 1989 | FMS 1990 | FMX 1991 | FMY 1992 | FN 1993 | FNB 1994 | FNCB 1995 | FND 1996 | FNF 1997 | FNHC 1998 | FNJN 1999 | FNK 2000 | FNKO 2001 | FNLC 2002 | FNV 2003 | FNWB 2004 | FNX 2005 | FNY 2006 | FOCS 2007 | FOE 2008 | FOF 2009 | FOLD 2010 | FONR 2011 | FOR 2012 | FORD 2013 | FORK 2014 | FORM 2015 | FORR 2016 | FORTY 2017 | FOSL 2018 | FOUR 2019 | FOX 2020 | FOXA 2021 | FOXF 2022 | FPA 2023 | FPAC 2024 | FPAY 2025 | FPF 2026 | FPH 2027 | FPI 2028 | FPL 2029 | FPRX 2030 | FPXE 2031 | FPXI 2032 | FR 2033 | FRA 2034 | FRAN 2035 | FRBA 2036 | FRBK 2037 | FRC 2038 | FRD 2039 | FREQ 2040 | FRG 2041 | FRGI 2042 | FRHC 2043 | FRME 2044 | FRO 2045 | FRPH 2046 | FRPT 2047 | FRSX 2048 | FRT 2049 | FRTA 2050 | FSB 2051 | FSBW 2052 | FSCT 2053 | FSD 2054 | FSFG 2055 | FSI 2056 | FSK 2057 | FSLF 2058 | FSLR 2059 | FSLY 2060 | FSM 2061 | FSP 2062 | FSS 2063 | FSTR 2064 | FSV 2065 | FSZ 2066 | FT 2067 | FTA 2068 | FTAC 2069 | FTAG 2070 | FTAI 2071 | FTC 2072 | FTCH 2073 | FTCS 2074 | FTDR 2075 | FTEK 2076 | FTF 2077 | FTFT 2078 | FTGC 2079 | FTHI 2080 | FTI 2081 | FTK 2082 | FTLB 2083 | FTNT 2084 | FTRI 2085 | FTS 2086 | FTSI 2087 | FTSL 2088 | FTSM 2089 | FTV 2090 | FTXD 2091 | FTXG 2092 | FTXH 2093 | FTXL 2094 | FTXN 2095 | FTXO 2096 | FTXR 2097 | FUL 2098 | FULC 2099 | FULT 2100 | FUN 2101 | FUNC 2102 | FUND 2103 | FUTU 2104 | FUV 2105 | FV 2106 | FVC 2107 | FVCB 2108 | FVE 2109 | FVRR 2110 | FWONA 2111 | FWONK 2112 | FWP 2113 | FWRD 2114 | FYC 2115 | FYT 2116 | FYX 2117 | G 2118 | GAB 2119 | GABC 2120 | GAIA 2121 | GAIN 2122 | GALT 2123 | GAM 2124 | GAN 2125 | GARS 2126 | GASS 2127 | GATX 2128 | GAU 2129 | GBAB 2130 | GBCI 2131 | GBDC 2132 | GBIO 2133 | GBL 2134 | GBLI 2135 | GBR 2136 | GBT 2137 | GBX 2138 | GCAP 2139 | GCBC 2140 | GCI 2141 | GCO 2142 | GCP 2143 | GCV 2144 | GD 2145 | GDDY 2146 | GDEN 2147 | GDL 2148 | GDO 2149 | GDOT 2150 | GDP 2151 | GDS 2152 | GDV 2153 | GDYN 2154 | GE 2155 | GEC 2156 | GECC 2157 | GEF 2158 | GEL 2159 | GEN 2160 | GENC 2161 | GENE 2162 | GENY 2163 | GEO 2164 | GEOS 2165 | GER 2166 | GERN 2167 | GES 2168 | GEVO 2169 | GF 2170 | GFED 2171 | GFF 2172 | GFI 2173 | GFL 2174 | GFN 2175 | GFY 2176 | GGAL 2177 | GGB 2178 | GGG 2179 | GGM 2180 | GGN 2181 | GGT 2182 | GGZ 2183 | GH 2184 | GHC 2185 | GHG 2186 | GHL 2187 | GHM 2188 | GHSI 2189 | GHY 2190 | GIB 2191 | GIFI 2192 | GIGE 2193 | GIGM 2194 | GIII 2195 | GIL 2196 | GILD 2197 | GILT 2198 | GIM 2199 | GIS 2200 | GIX 2201 | GKOS 2202 | GL 2203 | GLAD 2204 | GLBS 2205 | GLBZ 2206 | GLDD 2207 | GLDI 2208 | GLG 2209 | GLIBA 2210 | GLMD 2211 | GLNG 2212 | GLO 2213 | GLOB 2214 | GLOG 2215 | GLOP 2216 | GLP 2217 | GLPG 2218 | GLPI 2219 | GLQ 2220 | GLRE 2221 | GLT 2222 | GLU 2223 | GLUU 2224 | GLV 2225 | GLW 2226 | GLYC 2227 | GM 2228 | GMAB 2229 | GMBL 2230 | GMDA 2231 | GME 2232 | GMED 2233 | GMHI 2234 | GMLP 2235 | GMO 2236 | GMRE 2237 | GMS 2238 | GMZ 2239 | GNC 2240 | GNCA 2241 | GNE 2242 | GNFT 2243 | GNK 2244 | GNL 2245 | GNLN 2246 | GNMA 2247 | GNMK 2248 | GNOM 2249 | GNPX 2250 | GNRC 2251 | GNRS 2252 | GNSS 2253 | GNT 2254 | GNTX 2255 | GNTY 2256 | GNUS 2257 | GNW 2258 | GO 2259 | GOF 2260 | GOGL 2261 | GOGO 2262 | GOL 2263 | GOLD 2264 | GOLF 2265 | GOOD 2266 | GOOG 2267 | GOOGL 2268 | GOOS 2269 | GORO 2270 | GOSS 2271 | GPAQ 2272 | GPC 2273 | GPI 2274 | GPK 2275 | GPL 2276 | GPM 2277 | GPMT 2278 | GPN 2279 | GPOR 2280 | GPP 2281 | GPRE 2282 | GPRK 2283 | GPRO 2284 | GPS 2285 | GPX 2286 | GRA 2287 | GRAF 2288 | GRAM 2289 | GRBK 2290 | GRC 2291 | GRF 2292 | GRFS 2293 | GRID 2294 | GRIF 2295 | GRIL 2296 | GRIN 2297 | GRMN 2298 | GRNQ 2299 | GROW 2300 | GRPN 2301 | GRTS 2302 | GRTX 2303 | GRUB 2304 | GRVY 2305 | GRWG 2306 | GRX 2307 | GS 2308 | GSAT 2309 | GSB 2310 | GSBC 2311 | GSBD 2312 | GSH 2313 | GSHD 2314 | GSIT 2315 | GSK 2316 | GSKY 2317 | GSL 2318 | GSM 2319 | GSMG 2320 | GSS 2321 | GSUM 2322 | GSV 2323 | GSX 2324 | GT 2325 | GTE 2326 | GTEC 2327 | GTES 2328 | GTHX 2329 | GTIM 2330 | GTLS 2331 | GTN 2332 | GTS 2333 | GTT 2334 | GTX 2335 | GTY 2336 | GTYH 2337 | GURE 2338 | GUT 2339 | GV 2340 | GVA 2341 | GVP 2342 | GWB 2343 | GWGH 2344 | GWPH 2345 | GWRE 2346 | GWRS 2347 | GWW 2348 | GXTG 2349 | GYC 2350 | GYRO 2351 | H 2352 | HA 2353 | HAE 2354 | HAFC 2355 | HAIN 2356 | HAL 2357 | HALL 2358 | HALO 2359 | HAPP 2360 | HARP 2361 | HAS 2362 | HASI 2363 | HAYN 2364 | HBAN 2365 | HBB 2366 | HBCP 2367 | HBI 2368 | HBIO 2369 | HBM 2370 | HBMD 2371 | HBNC 2372 | HBP 2373 | HBT 2374 | HCA 2375 | HCAC 2376 | HCAP 2377 | HCAT 2378 | HCC 2379 | HCCH 2380 | HCCI 2381 | HCCO 2382 | HCFT 2383 | HCHC 2384 | HCI 2385 | HCKT 2386 | HCM 2387 | HCR 2388 | HCSG 2389 | HD 2390 | HDB 2391 | HDS 2392 | HDSN 2393 | HE 2394 | HEAR 2395 | HEBT 2396 | HECCU 2397 | HEES 2398 | HEI 2399 | HELE 2400 | HEP 2401 | HEPA 2402 | HEQ 2403 | HERD 2404 | HERO 2405 | HES 2406 | HESM 2407 | HEWG 2408 | HEXO 2409 | HFBL 2410 | HFC 2411 | HFFG 2412 | HFRO 2413 | HFWA 2414 | HGSH 2415 | HGV 2416 | HHC 2417 | HHR 2418 | HHS 2419 | HHT 2420 | HI 2421 | HIBB 2422 | HIE 2423 | HIFS 2424 | HIG 2425 | HIHO 2426 | HII 2427 | HIL 2428 | HIMX 2429 | HIO 2430 | HIW 2431 | HIX 2432 | HJLI 2433 | HKIB 2434 | HL 2435 | HLAL 2436 | HLF 2437 | HLG 2438 | HLI 2439 | HLIO 2440 | HLIT 2441 | HLNE 2442 | HLT 2443 | HLX 2444 | HMC 2445 | HMHC 2446 | HMI 2447 | HMLP 2448 | HMN 2449 | HMNF 2450 | HMST 2451 | HMSY 2452 | HMTV 2453 | HMY 2454 | HNDL 2455 | HNGR 2456 | HNI 2457 | HNNA 2458 | HNP 2459 | HNRG 2460 | HNW 2461 | HOFT 2462 | HOG 2463 | HOLI 2464 | HOLX 2465 | HOMB 2466 | HOME 2467 | HON 2468 | HONE 2469 | HOOK 2470 | HOPE 2471 | HOTH 2472 | HOV 2473 | HOVNP 2474 | HP 2475 | HPE 2476 | HPF 2477 | HPI 2478 | HPP 2479 | HPQ 2480 | HPR 2481 | HPS 2482 | HQH 2483 | HQI 2484 | HQL 2485 | HQY 2486 | HR 2487 | HRB 2488 | HRC 2489 | HRI 2490 | HRL 2491 | HROW 2492 | HRTG 2493 | HRTX 2494 | HRZN 2495 | HSBC 2496 | HSC 2497 | HSDT 2498 | HSIC 2499 | HSII 2500 | HSKA 2501 | HSON 2502 | HST 2503 | HSTM 2504 | HSTO 2505 | HSY 2506 | HT 2507 | HTA 2508 | HTBI 2509 | HTBK 2510 | HTBX 2511 | HTD 2512 | HTGC 2513 | HTGM 2514 | HTH 2515 | HTHT 2516 | HTLD 2517 | HTLF 2518 | HTY 2519 | HTZ 2520 | HUBB 2521 | HUBG 2522 | HUBS 2523 | HUD 2524 | HUGE 2525 | HUIZ 2526 | HUM 2527 | HUN 2528 | HURC 2529 | HURN 2530 | HUSA 2531 | HUSN 2532 | HUYA 2533 | HVT 2534 | HWBK 2535 | HWC 2536 | HWCC 2537 | HWKN 2538 | HWM 2539 | HX 2540 | HXL 2541 | HY 2542 | HYAC 2543 | HYB 2544 | HYI 2545 | HYLS 2546 | HYMC 2547 | HYRE 2548 | HYT 2549 | HYXE 2550 | HYZD 2551 | HZN 2552 | HZNP 2553 | HZO 2554 | IAA 2555 | IAC 2556 | IAE 2557 | IAF 2558 | IAG 2559 | IART 2560 | IBA 2561 | IBB 2562 | IBCP 2563 | IBIO 2564 | IBKC 2565 | IBKR 2566 | IBM 2567 | IBN 2568 | IBOC 2569 | IBP 2570 | IBTA 2571 | IBTB 2572 | IBTD 2573 | IBTE 2574 | IBTF 2575 | IBTG 2576 | IBTH 2577 | IBTI 2578 | IBTJ 2579 | IBTX 2580 | IBUY 2581 | ICAD 2582 | ICBK 2583 | ICCC 2584 | ICD 2585 | ICE 2586 | ICFI 2587 | ICHR 2588 | ICL 2589 | ICLK 2590 | ICLN 2591 | ICLR 2592 | ICMB 2593 | ICON 2594 | ICPT 2595 | ICUI 2596 | IDA 2597 | IDCC 2598 | IDE 2599 | IDEX 2600 | IDLB 2601 | IDN 2602 | IDRA 2603 | IDT 2604 | IDXG 2605 | IDXX 2606 | IDYA 2607 | IEA 2608 | IEC 2609 | IEF 2610 | IEI 2611 | IEP 2612 | IESC 2613 | IEUS 2614 | IEX 2615 | IFEU 2616 | IFF 2617 | IFGL 2618 | IFMK 2619 | IFN 2620 | IFRX 2621 | IFS 2622 | IFV 2623 | IGA 2624 | IGC 2625 | IGD 2626 | IGF 2627 | IGI 2628 | IGIB 2629 | IGMS 2630 | IGOV 2631 | IGR 2632 | IGSB 2633 | IGT 2634 | IHC 2635 | IHD 2636 | IHG 2637 | IHIT 2638 | IHRT 2639 | IHT 2640 | IID 2641 | IIF 2642 | III 2643 | IIIN 2644 | IIIV 2645 | IIM 2646 | IIN 2647 | IIPR 2648 | IIVI 2649 | IJT 2650 | IKNX 2651 | ILMN 2652 | ILPT 2653 | IMAB 2654 | IMAC 2655 | IMAX 2656 | IMBI 2657 | IMGN 2658 | IMH 2659 | IMKTA 2660 | IMMP 2661 | IMMR 2662 | IMMU 2663 | IMO 2664 | IMOS 2665 | IMRA 2666 | IMRN 2667 | IMTE 2668 | IMUX 2669 | IMV 2670 | IMVT 2671 | IMXI 2672 | INBK 2673 | INCY 2674 | INDB 2675 | INDO 2676 | INDY 2677 | INFI 2678 | INFN 2679 | INFO 2680 | INFR 2681 | INFU 2682 | INFY 2683 | ING 2684 | INGN 2685 | INGR 2686 | INMB 2687 | INMD 2688 | INN 2689 | INO 2690 | INOD 2691 | INOV 2692 | INPX 2693 | INS 2694 | INSE 2695 | INSG 2696 | INSI 2697 | INSM 2698 | INSP 2699 | INSU 2700 | INSW 2701 | INT 2702 | INTC 2703 | INTG 2704 | INTL 2705 | INTT 2706 | INTU 2707 | INUV 2708 | INVA 2709 | INVE 2710 | INVH 2711 | INWK 2712 | IO 2713 | IONS 2714 | IOR 2715 | IOSP 2716 | IOVA 2717 | IP 2718 | IPAR 2719 | IPDN 2720 | IPG 2721 | IPGP 2722 | IPHA 2723 | IPHI 2724 | IPI 2725 | IPKW 2726 | IPLDP 2727 | IPOC 2728 | IPWR 2729 | IQ 2730 | IQI 2731 | IQV 2732 | IR 2733 | IRBT 2734 | IRDM 2735 | IRET 2736 | IRIX 2737 | IRL 2738 | IRM 2739 | IRMD 2740 | IROQ 2741 | IRR 2742 | IRS 2743 | IRT 2744 | IRTC 2745 | IRWD 2746 | ISBC 2747 | ISD 2748 | ISDR 2749 | ISDS 2750 | ISDX 2751 | ISEE 2752 | ISEM 2753 | ISHG 2754 | ISIG 2755 | ISNS 2756 | ISR 2757 | ISRG 2758 | ISSC 2759 | ISTB 2760 | ISTR 2761 | IT 2762 | ITCB 2763 | ITCI 2764 | ITEQ 2765 | ITGR 2766 | ITI 2767 | ITIC 2768 | ITMR 2769 | ITP 2770 | ITRI 2771 | ITRM 2772 | ITRN 2773 | ITT 2774 | ITUB 2775 | ITW 2776 | IUS 2777 | IUSB 2778 | IUSG 2779 | IUSS 2780 | IUSV 2781 | IVAC 2782 | IVC 2783 | IVH 2784 | IVR 2785 | IVZ 2786 | IX 2787 | IXUS 2788 | IZEA 2789 | J 2790 | JACK 2791 | JAGX 2792 | JAKK 2793 | JAN 2794 | JAX 2795 | JAZZ 2796 | JBGS 2797 | JBHT 2798 | JBL 2799 | JBLU 2800 | JBSS 2801 | JBT 2802 | JCAP 2803 | JCE 2804 | JCI 2805 | JCO 2806 | JCOM 2807 | JCS 2808 | JCTCF 2809 | JD 2810 | JDD 2811 | JE 2812 | JEF 2813 | JELD 2814 | JEQ 2815 | JFIN 2816 | JFK 2817 | JFR 2818 | JG 2819 | JGH 2820 | JHG 2821 | JHI 2822 | JHS 2823 | JHX 2824 | JHY 2825 | JILL 2826 | JJSF 2827 | JKHY 2828 | JKI 2829 | JKS 2830 | JLL 2831 | JLS 2832 | JMIA 2833 | JMM 2834 | JMP 2835 | JNCE 2836 | JNJ 2837 | JNPR 2838 | JOB 2839 | JOBS 2840 | JOE 2841 | JOF 2842 | JOUT 2843 | JP 2844 | JPC 2845 | JPI 2846 | JPM 2847 | JPS 2848 | JQC 2849 | JRI 2850 | JRJC 2851 | JRO 2852 | JRS 2853 | JRSH 2854 | JRVR 2855 | JSD 2856 | JSMD 2857 | JSML 2858 | JT 2859 | JTA 2860 | JTD 2861 | JVA 2862 | JWN 2863 | JYNT 2864 | K 2865 | KAI 2866 | KALA 2867 | KALU 2868 | KALV 2869 | KAMN 2870 | KAR 2871 | KB 2872 | KBAL 2873 | KBH 2874 | KBR 2875 | KBSF 2876 | KBWB 2877 | KBWD 2878 | KBWP 2879 | KBWR 2880 | KBWY 2881 | KC 2882 | KDMN 2883 | KDP 2884 | KE 2885 | KELYA 2886 | KEN 2887 | KEP 2888 | KEQU 2889 | KERN 2890 | KEX 2891 | KEY 2892 | KEYS 2893 | KF 2894 | KFFB 2895 | KFRC 2896 | KFS 2897 | KFY 2898 | KGC 2899 | KGJI 2900 | KHC 2901 | KIDS 2902 | KIM 2903 | KIN 2904 | KINS 2905 | KIO 2906 | KIQ 2907 | KIRK 2908 | KKR 2909 | KL 2910 | KLAC 2911 | KLDO 2912 | KLIC 2913 | KLR 2914 | KLXE 2915 | KMB 2916 | KMDA 2917 | KMF 2918 | KMI 2919 | KMPR 2920 | KMT 2921 | KMX 2922 | KN 2923 | KNDI 2924 | KNL 2925 | KNOP 2926 | KNSA 2927 | KNSL 2928 | KNX 2929 | KO 2930 | KOD 2931 | KODK 2932 | KOF 2933 | KOP 2934 | KOPN 2935 | KOS 2936 | KOSS 2937 | KPTI 2938 | KR 2939 | KRA 2940 | KRC 2941 | KREF 2942 | KRG 2943 | KRKR 2944 | KRMA 2945 | KRMD 2946 | KRNT 2947 | KRNY 2948 | KRO 2949 | KROS 2950 | KRP 2951 | KRTX 2952 | KRUS 2953 | KRYS 2954 | KSM 2955 | KSS 2956 | KSU 2957 | KT 2958 | KTB 2959 | KTCC 2960 | KTF 2961 | KTOS 2962 | KTOV 2963 | KURA 2964 | KVHI 2965 | KW 2966 | KWEB 2967 | KWR 2968 | KXIN 2969 | KYN 2970 | KZIA 2971 | KZR 2972 | L 2973 | LAC 2974 | LACQ 2975 | LAD 2976 | LADR 2977 | LAIX 2978 | LAKE 2979 | LAMR 2980 | LANC 2981 | LAND 2982 | LARK 2983 | LASR 2984 | LATN 2985 | LAUR 2986 | LAWS 2987 | LAZ 2988 | LAZY 2989 | LB 2990 | LBAI 2991 | LBC 2992 | LBRDA 2993 | LBRDK 2994 | LBRT 2995 | LBTYA 2996 | LBTYK 2997 | LC 2998 | LCA 2999 | LCI 3000 | LCII 3001 | LCNB 3002 | LCTX 3003 | LCUT 3004 | LDEM 3005 | LDL 3006 | LDOS 3007 | LDP 3008 | LDSF 3009 | LE 3010 | LEA 3011 | LEAF 3012 | LECO 3013 | LEDS 3014 | LEE 3015 | LEG 3016 | LEGH 3017 | LEGN 3018 | LEGR 3019 | LEJU 3020 | LEN 3021 | LEO 3022 | LEU 3023 | LEVI 3024 | LFAC 3025 | LFC 3026 | LFUS 3027 | LFVN 3028 | LGC 3029 | LGHL 3030 | LGI 3031 | LGIH 3032 | LGL 3033 | LGND 3034 | LH 3035 | LHC 3036 | LHCG 3037 | LHX 3038 | LIFE 3039 | LII 3040 | LILA 3041 | LILAK 3042 | LIN 3043 | LINC 3044 | LIND 3045 | LINX 3046 | LIQT 3047 | LITB 3048 | LITE 3049 | LIVE 3050 | LIVN 3051 | LIVX 3052 | LIZI 3053 | LJPC 3054 | LKCO 3055 | LKFN 3056 | LKOR 3057 | LKQ 3058 | LL 3059 | LLIT 3060 | LLNW 3061 | LLY 3062 | LM 3063 | LMAT 3064 | LMB 3065 | LMBS 3066 | LMFA 3067 | LMHB 3068 | LMNL 3069 | LMNR 3070 | LMNX 3071 | LMPX 3072 | LMRK 3073 | LMT 3074 | LN 3075 | LNC 3076 | LND 3077 | LNDC 3078 | LNG 3079 | LNGR 3080 | LNN 3081 | LNT 3082 | LNTH 3083 | LOAK 3084 | LOAN 3085 | LOB 3086 | LOCO 3087 | LODE 3088 | LOGC 3089 | LOGI 3090 | LOGM 3091 | LOMA 3092 | LONE 3093 | LOOP 3094 | LOPE 3095 | LORL 3096 | LOV 3097 | LOVE 3098 | LOW 3099 | LPCN 3100 | LPG 3101 | LPI 3102 | LPL 3103 | LPLA 3104 | LPRO 3105 | LPSN 3106 | LPTH 3107 | LPTX 3108 | LPX 3109 | LQDA 3110 | LQDT 3111 | LRCX 3112 | LRGE 3113 | LRMR 3114 | LRN 3115 | LSBK 3116 | LSCC 3117 | LSI 3118 | LSTR 3119 | LSXMA 3120 | LSXMK 3121 | LTBR 3122 | LTC 3123 | LTHM 3124 | LTRN 3125 | LTRPA 3126 | LTRPB 3127 | LTRX 3128 | LUB 3129 | LULU 3130 | LUMO 3131 | LUNA 3132 | LUV 3133 | LVGO 3134 | LVHD 3135 | LVS 3136 | LW 3137 | LWAY 3138 | LX 3139 | LXFR 3140 | LXP 3141 | LXRX 3142 | LXU 3143 | LYB 3144 | LYFT 3145 | LYG 3146 | LYL 3147 | LYRA 3148 | LYTS 3149 | LYV 3150 | LZB 3151 | M 3152 | MA 3153 | MAA 3154 | MAC 3155 | MACK 3156 | MAG 3157 | MAGS 3158 | MAIN 3159 | MAN 3160 | MANH 3161 | MANT 3162 | MANU 3163 | MAR 3164 | MARA 3165 | MARK 3166 | MARPS 3167 | MAS 3168 | MASI 3169 | MAT 3170 | MATW 3171 | MATX 3172 | MAV 3173 | MAXR 3174 | MAYS 3175 | MBB 3176 | MBI 3177 | MBII 3178 | MBIN 3179 | MBIO 3180 | MBNKP 3181 | MBOT 3182 | MBRX 3183 | MBSD 3184 | MBT 3185 | MBUU 3186 | MBWM 3187 | MC 3188 | MCA 3189 | MCACU 3190 | MCB 3191 | MCBC 3192 | MCBS 3193 | MCC 3194 | MCD 3195 | MCEF 3196 | MCEP 3197 | MCF 3198 | MCFT 3199 | MCHI 3200 | MCHP 3201 | MCHX 3202 | MCI 3203 | MCK 3204 | MCN 3205 | MCO 3206 | MCR 3207 | MCRB 3208 | MCRI 3209 | MCS 3210 | MCY 3211 | MD 3212 | MDB 3213 | MDC 3214 | MDCA 3215 | MDGL 3216 | MDGS 3217 | MDIA 3218 | MDIV 3219 | MDJH 3220 | MDLA 3221 | MDLY 3222 | MDLZ 3223 | MDP 3224 | MDRX 3225 | MDT 3226 | MDU 3227 | MDWD 3228 | MEC 3229 | MED 3230 | MEDP 3231 | MEDS 3232 | MEET 3233 | MEI 3234 | MEIP 3235 | MELI 3236 | MEN 3237 | MEOH 3238 | MERC 3239 | MESA 3240 | MESO 3241 | MET 3242 | METC 3243 | METX 3244 | MFA 3245 | MFAC 3246 | MFC 3247 | MFD 3248 | MFG 3249 | MFGP 3250 | MFH 3251 | MFIN 3252 | MFL 3253 | MFM 3254 | MFNC 3255 | MFT 3256 | MFV 3257 | MG 3258 | MGA 3259 | MGEE 3260 | MGEN 3261 | MGF 3262 | MGI 3263 | MGIC 3264 | MGLN 3265 | MGM 3266 | MGNX 3267 | MGP 3268 | MGPI 3269 | MGRC 3270 | MGTA 3271 | MGTX 3272 | MGU 3273 | MGY 3274 | MGYR 3275 | MHD 3276 | MHE 3277 | MHF 3278 | MHH 3279 | MHI 3280 | MHK 3281 | MHLD 3282 | MHN 3283 | MHO 3284 | MIC 3285 | MICT 3286 | MIDD 3287 | MIE 3288 | MIK 3289 | MILN 3290 | MIME 3291 | MIN 3292 | MIND 3293 | MINI 3294 | MIRM 3295 | MIST 3296 | MITK 3297 | MITO 3298 | MITT 3299 | MIXT 3300 | MIY 3301 | MJCO 3302 | MKC 3303 | MKD 3304 | MKGI 3305 | MKL 3306 | MKSI 3307 | MKTX 3308 | MLAB 3309 | MLCO 3310 | MLHR 3311 | MLI 3312 | MLM 3313 | MLND 3314 | MLP 3315 | MLR 3316 | MLSS 3317 | MLVF 3318 | MMAC 3319 | MMC 3320 | MMD 3321 | MMI 3322 | MMLP 3323 | MMM 3324 | MMP 3325 | MMS 3326 | MMSI 3327 | MMT 3328 | MMU 3329 | MMX 3330 | MMYT 3331 | MN 3332 | MNCL 3333 | MNDO 3334 | MNK 3335 | MNKD 3336 | MNLO 3337 | MNOV 3338 | MNP 3339 | MNPR 3340 | MNR 3341 | MNRL 3342 | MNRO 3343 | MNSB 3344 | MNST 3345 | MNTA 3346 | MNTX 3347 | MO 3348 | MOBL 3349 | MOD 3350 | MODN 3351 | MOFG 3352 | MOGO 3353 | MOGU 3354 | MOH 3355 | MOHO 3356 | MOMO 3357 | MOR 3358 | MORF 3359 | MORN 3360 | MOS 3361 | MOSY 3362 | MOTS 3363 | MOV 3364 | MOXC 3365 | MPA 3366 | MPAA 3367 | MPB 3368 | MPC 3369 | MPLX 3370 | MPV 3371 | MPW 3372 | MPWR 3373 | MPX 3374 | MQT 3375 | MQY 3376 | MR 3377 | MRAM 3378 | MRC 3379 | MRCC 3380 | MRCY 3381 | MREO 3382 | MRIN 3383 | MRK 3384 | MRKR 3385 | MRLN 3386 | MRNA 3387 | MRNS 3388 | MRO 3389 | MRSN 3390 | MRTN 3391 | MRTX 3392 | MRUS 3393 | MRVL 3394 | MS 3395 | MSA 3396 | MSB 3397 | MSBF 3398 | MSBI 3399 | MSC 3400 | MSCI 3401 | MSD 3402 | MSEX 3403 | MSFT 3404 | MSGE 3405 | MSGN 3406 | MSGS 3407 | MSI 3408 | MSM 3409 | MSN 3410 | MSON 3411 | MSTR 3412 | MSVB 3413 | MT 3414 | MTA 3415 | MTB 3416 | MTBC 3417 | MTC 3418 | MTCH 3419 | MTD 3420 | MTDR 3421 | MTEM 3422 | MTEX 3423 | MTG 3424 | MTH 3425 | MTL 3426 | MTLS 3427 | MTN 3428 | MTNB 3429 | MTOR 3430 | MTP 3431 | MTR 3432 | MTRN 3433 | MTRX 3434 | MTSC 3435 | MTSI 3436 | MTSL 3437 | MTT 3438 | MTW 3439 | MTX 3440 | MTZ 3441 | MU 3442 | MUA 3443 | MUC 3444 | MUE 3445 | MUFG 3446 | MUH 3447 | MUI 3448 | MUJ 3449 | MUR 3450 | MUS 3451 | MUSA 3452 | MUX 3453 | MVBF 3454 | MVC 3455 | MVF 3456 | MVIS 3457 | MVO 3458 | MVT 3459 | MWA 3460 | MWK 3461 | MX 3462 | MXC 3463 | MXE 3464 | MXF 3465 | MXIM 3466 | MXL 3467 | MYC 3468 | MYD 3469 | MYE 3470 | MYF 3471 | MYGN 3472 | MYI 3473 | MYJ 3474 | MYL 3475 | MYN 3476 | MYO 3477 | MYOK 3478 | MYOS 3479 | MYOV 3480 | MYRG 3481 | MYSZ 3482 | MYT 3483 | MZA 3484 | NAC 3485 | NAD 3486 | NAII 3487 | NAK 3488 | NAKD 3489 | NAN 3490 | NARI 3491 | NAT 3492 | NATH 3493 | NATI 3494 | NATR 3495 | NAV 3496 | NAVB 3497 | NAVI 3498 | NAZ 3499 | NBAC 3500 | NBB 3501 | NBEV 3502 | NBH 3503 | NBHC 3504 | NBIX 3505 | NBL 3506 | NBLX 3507 | NBN 3508 | NBO 3509 | NBR 3510 | NBRV 3511 | NBSE 3512 | NBTB 3513 | NBW 3514 | NBY 3515 | NC 3516 | NCA 3517 | NCB 3518 | NCBS 3519 | NCLH 3520 | NCMI 3521 | NCNA 3522 | NCR 3523 | NCSM 3524 | NCTY 3525 | NCV 3526 | NCZ 3527 | NDAQ 3528 | NDLS 3529 | NDP 3530 | NDRA 3531 | NDSN 3532 | NE 3533 | NEA 3534 | NEE 3535 | NEM 3536 | NEN 3537 | NEO 3538 | NEOG 3539 | NEON 3540 | NEOS 3541 | NEP 3542 | NEPH 3543 | NEPT 3544 | NERV 3545 | NES 3546 | NESR 3547 | NET 3548 | NETE 3549 | NEU 3550 | NEV 3551 | NEW 3552 | NEWA 3553 | NEWR 3554 | NEWT 3555 | NEX 3556 | NEXA 3557 | NEXT 3558 | NFBK 3559 | NFE 3560 | NFG 3561 | NFH 3562 | NFIN 3563 | NFJ 3564 | NFLX 3565 | NFTY 3566 | NG 3567 | NGD 3568 | NGG 3569 | NGHC 3570 | NGL 3571 | NGM 3572 | NGS 3573 | NGVC 3574 | NGVT 3575 | NH 3576 | NHA 3577 | NHC 3578 | NHF 3579 | NHI 3580 | NHLD 3581 | NHS 3582 | NHTC 3583 | NI 3584 | NICE 3585 | NICK 3586 | NID 3587 | NIE 3588 | NIM 3589 | NINE 3590 | NIO 3591 | NIQ 3592 | NIU 3593 | NJR 3594 | NJV 3595 | NK 3596 | NKE 3597 | NKG 3598 | NKLA 3599 | NKSH 3600 | NKTR 3601 | NKX 3602 | NL 3603 | NLOK 3604 | NLS 3605 | NLSN 3606 | NLTX 3607 | NLY 3608 | NM 3609 | NMCI 3610 | NMFC 3611 | NMI 3612 | NMIH 3613 | NML 3614 | NMM 3615 | NMR 3616 | NMRD 3617 | NMRK 3618 | NMS 3619 | NMT 3620 | NMTR 3621 | NMY 3622 | NMZ 3623 | NNA 3624 | NNBR 3625 | NNDM 3626 | NNI 3627 | NNN 3628 | NNVC 3629 | NNY 3630 | NOA 3631 | NOAH 3632 | NOC 3633 | NODK 3634 | NOG 3635 | NOK 3636 | NOM 3637 | NOMD 3638 | NOV 3639 | NOVA 3640 | NOVN 3641 | NOVS 3642 | NOVSU 3643 | NOVT 3644 | NOW 3645 | NP 3646 | NPAUU 3647 | NPK 3648 | NPN 3649 | NPO 3650 | NPTN 3651 | NPV 3652 | NQP 3653 | NR 3654 | NRBO 3655 | NRC 3656 | NREF 3657 | NRG 3658 | NRIM 3659 | NRK 3660 | NRO 3661 | NRP 3662 | NRT 3663 | NRZ 3664 | NS 3665 | NSA 3666 | NSC 3667 | NSCO 3668 | NSEC 3669 | NSIT 3670 | NSL 3671 | NSP 3672 | NSPR 3673 | NSSC 3674 | NSTG 3675 | NSYS 3676 | NTAP 3677 | NTB 3678 | NTCO 3679 | NTCT 3680 | NTEC 3681 | NTES 3682 | NTG 3683 | NTGR 3684 | NTIC 3685 | NTIP 3686 | NTLA 3687 | NTN 3688 | NTNX 3689 | NTP 3690 | NTR 3691 | NTRA 3692 | NTRP 3693 | NTRS 3694 | NTUS 3695 | NTWK 3696 | NTZ 3697 | NUAN 3698 | NUE 3699 | NUM 3700 | NUO 3701 | NURO 3702 | NUS 3703 | NUV 3704 | NUVA 3705 | NUW 3706 | NVAX 3707 | NVCN 3708 | NVCR 3709 | NVDA 3710 | NVEC 3711 | NVEE 3712 | NVFY 3713 | NVG 3714 | NVGS 3715 | NVIV 3716 | NVMI 3717 | NVO 3718 | NVR 3719 | NVRO 3720 | NVS 3721 | NVST 3722 | NVT 3723 | NVTA 3724 | NVUS 3725 | NWBI 3726 | NWE 3727 | NWFL 3728 | NWGI 3729 | NWHM 3730 | NWL 3731 | NWLI 3732 | NWN 3733 | NWPX 3734 | NWS 3735 | NWSA 3736 | NX 3737 | NXC 3738 | NXE 3739 | NXGN 3740 | NXJ 3741 | NXN 3742 | NXP 3743 | NXPI 3744 | NXQ 3745 | NXR 3746 | NXRT 3747 | NXST 3748 | NXTC 3749 | NXTD 3750 | NXTG 3751 | NYCB 3752 | NYMT 3753 | NYMX 3754 | NYT 3755 | NYV 3756 | NZF 3757 | O 3758 | OAC 3759 | OAS 3760 | OBAS 3761 | OBCI 3762 | OBLG 3763 | OBLN 3764 | OBNK 3765 | OBSV 3766 | OC 3767 | OCC 3768 | OCCI 3769 | OCFC 3770 | OCFT 3771 | OCGN 3772 | OCN 3773 | OCSI 3774 | OCSL 3775 | OCUL 3776 | OCX 3777 | ODC 3778 | ODFL 3779 | ODP 3780 | ODT 3781 | OEC 3782 | OEG 3783 | OESX 3784 | OFC 3785 | OFED 3786 | OFG 3787 | OFIX 3788 | OFLX 3789 | OFS 3790 | OGE 3791 | OGEN 3792 | OGI 3793 | OGS 3794 | OHI 3795 | OI 3796 | OIA 3797 | OII 3798 | OIIM 3799 | OIS 3800 | OKE 3801 | OKTA 3802 | OLD 3803 | OLED 3804 | OLLI 3805 | OLN 3806 | OLP 3807 | OMAB 3808 | OMC 3809 | OMCL 3810 | OMER 3811 | OMEX 3812 | OMF 3813 | OMI 3814 | OMP 3815 | ON 3816 | ONB 3817 | ONCS 3818 | ONCT 3819 | ONCY 3820 | ONDK 3821 | ONE 3822 | ONEM 3823 | ONEQ 3824 | ONEW 3825 | ONTO 3826 | ONTX 3827 | ONVO 3828 | OOMA 3829 | OPBK 3830 | OPCH 3831 | OPES 3832 | OPGN 3833 | OPHC 3834 | OPI 3835 | OPK 3836 | OPNT 3837 | OPOF 3838 | OPP 3839 | OPRA 3840 | OPRT 3841 | OPRX 3842 | OPTN 3843 | OPTT 3844 | OPY 3845 | OR 3846 | ORA 3847 | ORAN 3848 | ORBC 3849 | ORC 3850 | ORCC 3851 | ORCL 3852 | ORGO 3853 | ORGS 3854 | ORI 3855 | ORIC 3856 | ORLY 3857 | ORMP 3858 | ORN 3859 | ORRF 3860 | ORTX 3861 | OSB 3862 | OSBC 3863 | OSG 3864 | OSIS 3865 | OSK 3866 | OSMT 3867 | OSN 3868 | OSPN 3869 | OSS 3870 | OSTK 3871 | OSUR 3872 | OSW 3873 | OTEL 3874 | OTEX 3875 | OTIC 3876 | OTIS 3877 | OTLK 3878 | OTTR 3879 | OUT 3880 | OVBC 3881 | OVID 3882 | OVLY 3883 | OVV 3884 | OXBR 3885 | OXFD 3886 | OXLC 3887 | OXM 3888 | OXSQ 3889 | OXY 3890 | OYST 3891 | OZK 3892 | PAA 3893 | PAAS 3894 | PAC 3895 | PACB 3896 | PACD 3897 | PACK 3898 | PACQ 3899 | PACW 3900 | PAE 3901 | PAG 3902 | PAGP 3903 | PAGS 3904 | PAHC 3905 | PAI 3906 | PAM 3907 | PANL 3908 | PANW 3909 | PAR 3910 | PARR 3911 | PASG 3912 | PATI 3913 | PATK 3914 | PAVM 3915 | PAYC 3916 | PAYS 3917 | PAYX 3918 | PB 3919 | PBA 3920 | PBCT 3921 | PBF 3922 | PBFS 3923 | PBFX 3924 | PBH 3925 | PBHC 3926 | PBI 3927 | PBIP 3928 | PBPB 3929 | PBR 3930 | PBT 3931 | PBTS 3932 | PBYI 3933 | PCAR 3934 | PCB 3935 | PCF 3936 | PCG 3937 | PCH 3938 | PCI 3939 | PCK 3940 | PCM 3941 | PCN 3942 | PCOM 3943 | PCPL 3944 | PCQ 3945 | PCRX 3946 | PCSB 3947 | PCTI 3948 | PCTY 3949 | PCVX 3950 | PCYG 3951 | PCYO 3952 | PD 3953 | PDBC 3954 | PDCE 3955 | PDCO 3956 | PDD 3957 | PDEX 3958 | PDFS 3959 | PDI 3960 | PDLB 3961 | PDLI 3962 | PDM 3963 | PDP 3964 | PDS 3965 | PDSB 3966 | PDT 3967 | PE 3968 | PEAK 3969 | PEB 3970 | PEBK 3971 | PEBO 3972 | PECK 3973 | PED 3974 | PEG 3975 | PEGA 3976 | PEI 3977 | PEIX 3978 | PEN 3979 | PENN 3980 | PEO 3981 | PEP 3982 | PER 3983 | PERI 3984 | PESI 3985 | PETQ 3986 | PETS 3987 | PETZ 3988 | PEY 3989 | PEZ 3990 | PFBC 3991 | PFBI 3992 | PFD 3993 | PFE 3994 | PFF 3995 | PFG 3996 | PFGC 3997 | PFHD 3998 | PFI 3999 | PFIE 4000 | PFIN 4001 | PFIS 4002 | PFL 4003 | PFLT 4004 | PFM 4005 | PFMT 4006 | PFN 4007 | PFNX 4008 | PFO 4009 | PFPT 4010 | PFS 4011 | PFSI 4012 | PFSW 4013 | PG 4014 | PGC 4015 | PGEN 4016 | PGJ 4017 | PGNY 4018 | PGP 4019 | PGR 4020 | PGRE 4021 | PGTI 4022 | PGZ 4023 | PH 4024 | PHAS 4025 | PHAT 4026 | PHCF 4027 | PHD 4028 | PHG 4029 | PHGE 4030 | PHI 4031 | PHIO 4032 | PHK 4033 | PHM 4034 | PHO 4035 | PHR 4036 | PHT 4037 | PHUN 4038 | PHX 4039 | PI 4040 | PIC 4041 | PICO 4042 | PID 4043 | PIE 4044 | PIH 4045 | PII 4046 | PIM 4047 | PINC 4048 | PINE 4049 | PING 4050 | PINS 4051 | PIO 4052 | PIPR 4053 | PIRS 4054 | PIXY 4055 | PIZ 4056 | PJT 4057 | PK 4058 | PKBK 4059 | PKE 4060 | PKG 4061 | PKI 4062 | PKO 4063 | PKOH 4064 | PKW 4065 | PKX 4066 | PLAB 4067 | PLAG 4068 | PLAN 4069 | PLAY 4070 | PLBC 4071 | PLC 4072 | PLCE 4073 | PLD 4074 | PLG 4075 | PLIN 4076 | PLL 4077 | PLM 4078 | PLMR 4079 | PLNT 4080 | PLOW 4081 | PLPC 4082 | PLRX 4083 | PLSE 4084 | PLT 4085 | PLUG 4086 | PLUS 4087 | PLW 4088 | PLX 4089 | PLXP 4090 | PLXS 4091 | PLYA 4092 | PLYM 4093 | PM 4094 | PMBC 4095 | PMD 4096 | PME 4097 | PMF 4098 | PML 4099 | PMM 4100 | PMO 4101 | PMOM 4102 | PMT 4103 | PMX 4104 | PNBK 4105 | PNC 4106 | PNF 4107 | PNFP 4108 | PNI 4109 | PNM 4110 | PNNT 4111 | PNQI 4112 | PNR 4113 | PNRG 4114 | PNTG 4115 | PNW 4116 | POAI 4117 | PODD 4118 | POL 4119 | POLA 4120 | POOL 4121 | POR 4122 | POST 4123 | POTX 4124 | POWI 4125 | POWL 4126 | PPBI 4127 | PPC 4128 | PPD 4129 | PPG 4130 | PPH 4131 | PPIH 4132 | PPL 4133 | PPR 4134 | PPSI 4135 | PPT 4136 | PQG 4137 | PRA 4138 | PRAA 4139 | PRAH 4140 | PRCP 4141 | PRDO 4142 | PRFT 4143 | PRFZ 4144 | PRGO 4145 | PRGS 4146 | PRGX 4147 | PRI 4148 | PRIM 4149 | PRK 4150 | PRLB 4151 | PRMW 4152 | PRN 4153 | PRNB 4154 | PRO 4155 | PROF 4156 | PROS 4157 | PROV 4158 | PRPH 4159 | PRPL 4160 | PRPO 4161 | PRQR 4162 | PRSC 4163 | PRSP 4164 | PRT 4165 | PRTA 4166 | PRTH 4167 | PRTK 4168 | PRTS 4169 | PRTY 4170 | PRU 4171 | PRVB 4172 | PRVL 4173 | PS 4174 | PSA 4175 | PSB 4176 | PSC 4177 | PSCC 4178 | PSCD 4179 | PSCE 4180 | PSCF 4181 | PSCH 4182 | PSCI 4183 | PSCM 4184 | PSCT 4185 | PSCU 4186 | PSEC 4187 | PSET 4188 | PSF 4189 | PSHG 4190 | PSL 4191 | PSM 4192 | PSMT 4193 | PSN 4194 | PSNL 4195 | PSO 4196 | PSTG 4197 | PSTI 4198 | PSTL 4199 | PSTV 4200 | PSV 4201 | PSX 4202 | PSXP 4203 | PT 4204 | PTC 4205 | PTCT 4206 | PTE 4207 | PTEN 4208 | PTF 4209 | PTGX 4210 | PTH 4211 | PTI 4212 | PTLA 4213 | PTMN 4214 | PTN 4215 | PTNR 4216 | PTON 4217 | PTR 4218 | PTSI 4219 | PTVCB 4220 | PTY 4221 | PUB 4222 | PUI 4223 | PUK 4224 | PULM 4225 | PUMP 4226 | PUYI 4227 | PVAC 4228 | PVAL 4229 | PVBC 4230 | PVG 4231 | PVH 4232 | PVL 4233 | PW 4234 | PWFL 4235 | PWOD 4236 | PWR 4237 | PXD 4238 | PXI 4239 | PXLW 4240 | PXS 4241 | PY 4242 | PYN 4243 | PYPD 4244 | PYPL 4245 | PYZ 4246 | PZC 4247 | PZG 4248 | PZN 4249 | PZZA 4250 | QABA 4251 | QADA 4252 | QAT 4253 | QCLN 4254 | QCOM 4255 | QCRH 4256 | QD 4257 | QDEL 4258 | QEP 4259 | QES 4260 | QFIN 4261 | QGEN 4262 | QIWI 4263 | QK 4264 | QLC 4265 | QLGN 4266 | QLYS 4267 | QMCO 4268 | QNST 4269 | QQEW 4270 | QQQ 4271 | SPY 4272 | QQQX 4273 | QQXT 4274 | QRHC 4275 | QRTEA 4276 | QRVO 4277 | QSR 4278 | QTEC 4279 | QTNT 4280 | QTRX 4281 | QTS 4282 | QTT 4283 | QTWO 4284 | QUAD 4285 | QUIK 4286 | QUMU 4287 | QUOT 4288 | QURE 4289 | QYLD 4290 | R 4291 | RA 4292 | RACE 4293 | RAD 4294 | RADA 4295 | RAIL 4296 | RAMP 4297 | RAND 4298 | RAPT 4299 | RARE 4300 | RAVE 4301 | RAVN 4302 | RBA 4303 | RBB 4304 | RBBN 4305 | RBC 4306 | RBCAA 4307 | RBCN 4308 | RBNC 4309 | RBS 4310 | RC 4311 | RCEL 4312 | RCG 4313 | RCI 4314 | RCII 4315 | RCKT 4316 | RCKY 4317 | RCL 4318 | RCM 4319 | RCMT 4320 | RCON 4321 | RCS 4322 | RCUS 4323 | RDCM 4324 | RDFN 4325 | RDHL 4326 | RDI 4327 | RDN 4328 | RDNT 4329 | RDUS 4330 | RDVT 4331 | RDVY 4332 | RDWR 4333 | RDY 4334 | RE 4335 | REAL 4336 | REDU 4337 | REED 4338 | REFR 4339 | REG 4340 | REGI 4341 | REGN 4342 | REI 4343 | REKR 4344 | RELL 4345 | RELV 4346 | RELX 4347 | RENN 4348 | REPH 4349 | REPL 4350 | RES 4351 | RESI 4352 | RESN 4353 | RETA 4354 | RETO 4355 | REV 4356 | REVG 4357 | REX 4358 | REXN 4359 | REXR 4360 | REYN 4361 | REZI 4362 | RF 4363 | RFAP 4364 | RFDI 4365 | RFEM 4366 | RFEU 4367 | RFI 4368 | RFIL 4369 | RFL 4370 | RFP 4371 | RGA 4372 | RGCO 4373 | RGEN 4374 | RGLD 4375 | RGLS 4376 | RGNX 4377 | RGP 4378 | RGR 4379 | RGS 4380 | RGT 4381 | RH 4382 | RHE 4383 | RHI 4384 | RHP 4385 | RIBT 4386 | RICK 4387 | RIF 4388 | RIG 4389 | RIGL 4390 | RILY 4391 | RING 4392 | RIO 4393 | RIOT 4394 | RIV 4395 | RJF 4396 | RKDA 4397 | RL 4398 | RLGT 4399 | RLGY 4400 | RLH 4401 | RLI 4402 | RLJ 4403 | RLMD 4404 | RM 4405 | RMAX 4406 | RMBI 4407 | RMBL 4408 | RMBS 4409 | RMCF 4410 | RMD 4411 | RMED 4412 | RMG 4413 | RMI 4414 | RMNI 4415 | RMR 4416 | RMT 4417 | RMTI 4418 | RNA 4419 | RNDM 4420 | RNDV 4421 | RNEM 4422 | RNET 4423 | RNG 4424 | RNGR 4425 | RNLC 4426 | RNMC 4427 | RNP 4428 | RNR 4429 | RNSC 4430 | RNST 4431 | RNWK 4432 | ROAD 4433 | ROBO 4434 | ROBT 4435 | ROCK 4436 | ROG 4437 | ROIC 4438 | ROK 4439 | ROKU 4440 | ROL 4441 | ROLL 4442 | ROP 4443 | ROSE 4444 | ROST 4445 | ROYT 4446 | RP 4447 | RPAI 4448 | RPAY 4449 | RPD 4450 | RPLA 4451 | RPM 4452 | RPRX 4453 | RPT 4454 | RPTX 4455 | RQI 4456 | RRBI 4457 | RRC 4458 | RRD 4459 | RRGB 4460 | RRR 4461 | RS 4462 | RSG 4463 | RSSS 4464 | RST 4465 | RTH 4466 | RTIX 4467 | RTLR 4468 | RTRX 4469 | RTW 4470 | RTX 4471 | RUBI 4472 | RUBY 4473 | RUHN 4474 | RUN 4475 | RUSHA 4476 | RUTH 4477 | RVI 4478 | RVLV 4479 | RVMD 4480 | RVNC 4481 | RVP 4482 | RVSB 4483 | RVT 4484 | RWLK 4485 | RWT 4486 | RXN 4487 | RY 4488 | RYAAY 4489 | RYAM 4490 | RYB 4491 | RYCE 4492 | RYI 4493 | RYN 4494 | RYTM 4495 | SA 4496 | SABR 4497 | SACH 4498 | SAFE 4499 | SAFM 4500 | SAFT 4501 | SAGE 4502 | SAH 4503 | SAIA 4504 | SAIC 4505 | SAIL 4506 | SAL 4507 | SALM 4508 | SALT 4509 | SAM 4510 | SAMA 4511 | SAMG 4512 | SAN 4513 | SAND 4514 | SANM 4515 | SANW 4516 | SAP 4517 | SAR 4518 | SASR 4519 | SATS 4520 | SAVA 4521 | SAVE 4522 | SB 4523 | SBAC 4524 | SBBP 4525 | SBBX 4526 | SBCF 4527 | SBE 4528 | SBFG 4529 | SBGI 4530 | SBH 4531 | SBI 4532 | SBLK 4533 | SBNY 4534 | SBOW 4535 | SBPH 4536 | SBR 4537 | SBRA 4538 | SBS 4539 | SBSI 4540 | SBSW 4541 | SBT 4542 | SBUX 4543 | SC 4544 | SCCO 4545 | SCD 4546 | SCHL 4547 | SCHN 4548 | SCHW 4549 | SCI 4550 | SCKT 4551 | SCL 4552 | SCM 4553 | SCON 4554 | SCOR 4555 | SCPH 4556 | SCPL 4557 | SCS 4558 | SCSC 4559 | SCU 4560 | SCVL 4561 | SCWX 4562 | SCX 4563 | SCYX 4564 | SCZ 4565 | SD 4566 | SDC 4567 | SDG 4568 | SDGR 4569 | SDPI 4570 | SDVY 4571 | SE 4572 | SEAC 4573 | SEAS 4574 | SEB 4575 | SECO 4576 | SEDG 4577 | SEE 4578 | SEED 4579 | SEEL 4580 | SEIC 4581 | SELB 4582 | SELF 4583 | SEM 4584 | SENEA 4585 | SENS 4586 | SERV 4587 | SESN 4588 | SF 4589 | SFBC 4590 | SFBS 4591 | SFE 4592 | SFET 4593 | SFIX 4594 | SFL 4595 | SFM 4596 | SFNC 4597 | SFST 4598 | SFTW 4599 | SFUN 4600 | SG 4601 | SGA 4602 | SGBX 4603 | SGC 4604 | SGEN 4605 | SGH 4606 | SGLB 4607 | SGMA 4608 | SGMO 4609 | SGMS 4610 | SGOC 4611 | SGRP 4612 | SGRY 4613 | SGU 4614 | SHAK 4615 | SHBI 4616 | SHEN 4617 | SHG 4618 | SHI 4619 | SHIP 4620 | SHLL 4621 | SHLO 4622 | SHLX 4623 | SHO 4624 | SHOO 4625 | SHOP 4626 | SHSP 4627 | SHV 4628 | SHW 4629 | SHY 4630 | SHYF 4631 | SI 4632 | SIBN 4633 | SIC 4634 | SID 4635 | SIEB 4636 | SIEN 4637 | SIF 4638 | SIFY 4639 | SIG 4640 | SIGA 4641 | SIGI 4642 | SILC 4643 | SILK 4644 | SILV 4645 | SIM 4646 | SIMO 4647 | SINA 4648 | SINO 4649 | SINT 4650 | SIRI 4651 | SITC 4652 | SITE 4653 | SITM 4654 | SIVB 4655 | SIX 4656 | SJ 4657 | SJI 4658 | SJM 4659 | SJR 4660 | SJT 4661 | SJW 4662 | SKM 4663 | SKOR 4664 | SKT 4665 | SKX 4666 | SKY 4667 | SKYS 4668 | SKYW 4669 | SKYY 4670 | SLAB 4671 | SLB 4672 | SLCA 4673 | SLCT 4674 | SLDB 4675 | SLF 4676 | SLG 4677 | SLGG 4678 | SLGL 4679 | SLGN 4680 | SLM 4681 | SLNO 4682 | SLP 4683 | SLQD 4684 | SLQT 4685 | SLRC 4686 | SLRX 4687 | SLS 4688 | SLVO 4689 | SM 4690 | SMAR 4691 | SMBC 4692 | SMBK 4693 | SMCI 4694 | SMCP 4695 | SMED 4696 | SMFG 4697 | SMG 4698 | SMH 4699 | SMIT 4700 | SMLP 4701 | SMM 4702 | SMMCU 4703 | SMMF 4704 | SMMT 4705 | SMP 4706 | SMPL 4707 | SMRT 4708 | SMSI 4709 | SMTC 4710 | SMTS 4711 | SMTX 4712 | SNA 4713 | SNAP 4714 | SNBR 4715 | SNCA 4716 | SNCR 4717 | SND 4718 | SNDE 4719 | SNDL 4720 | SNDR 4721 | SNDX 4722 | SNE 4723 | SNES 4724 | SNFCA 4725 | SNGX 4726 | SNLN 4727 | SNMP 4728 | SNN 4729 | SNOA 4730 | SNP 4731 | SNPS 4732 | SNR 4733 | SNSR 4734 | SNSS 4735 | SNUG 4736 | SNV 4737 | SNX 4738 | SNY 4739 | SO 4740 | SOCL 4741 | SOGO 4742 | SOHO 4743 | SOHU 4744 | SOI 4745 | SOL 4746 | SOLO 4747 | SOLY 4748 | SON 4749 | SONA 4750 | SONM 4751 | SONN 4752 | SONO 4753 | SOR 4754 | SOXX 4755 | SP 4756 | SPAQ 4757 | SPB 4758 | SPCB 4759 | SPCE 4760 | SPE 4761 | SPFI 4762 | SPG 4763 | SPGI 4764 | SPH 4765 | SPI 4766 | SPKE 4767 | SPLK 4768 | SPLP 4769 | SPN 4770 | SPNE 4771 | SPNS 4772 | SPOK 4773 | SPOT 4774 | SPPI 4775 | SPR 4776 | SPRO 4777 | SPRT 4778 | SPSC 4779 | SPT 4780 | SPTN 4781 | SPWH 4782 | SPWR 4783 | SPXC 4784 | SPXX 4785 | SQ 4786 | SQBG 4787 | SQLV 4788 | SQM 4789 | SQNS 4790 | SQQQ 4791 | SR 4792 | SRAX 4793 | SRC 4794 | SRCE 4795 | SRCL 4796 | SRDX 4797 | SRE 4798 | SRET 4799 | SREV 4800 | SRG 4801 | SRI 4802 | SRL 4803 | SRLP 4804 | SRNE 4805 | SRPT 4806 | SRRA 4807 | SRRK 4808 | SRT 4809 | SRTS 4810 | SRV 4811 | SSB 4812 | SSBI 4813 | SSD 4814 | SSKN 4815 | SSL 4816 | SSNC 4817 | SSNT 4818 | SSP 4819 | SSPK 4820 | SSRM 4821 | SSSS 4822 | SSTI 4823 | SSTK 4824 | SSY 4825 | SSYS 4826 | ST 4827 | STAA 4828 | STAF 4829 | STAG 4830 | STAR 4831 | STAY 4832 | STBA 4833 | STC 4834 | STCN 4835 | STE 4836 | STFC 4837 | STG 4838 | STIM 4839 | STK 4840 | STKL 4841 | STKS 4842 | STL 4843 | STLD 4844 | STM 4845 | STMP 4846 | STN 4847 | STNE 4848 | STNG 4849 | STOK 4850 | STON 4851 | STOR 4852 | STPP 4853 | STRA 4854 | STRL 4855 | STRM 4856 | STRO 4857 | STRS 4858 | STRT 4859 | STSA 4860 | STT 4861 | STWD 4862 | STX 4863 | STXB 4864 | STXS 4865 | STZ 4866 | SU 4867 | SUI 4868 | SUM 4869 | SUMR 4870 | SUN 4871 | SUNS 4872 | SUNW 4873 | SUP 4874 | SUPN 4875 | SUPV 4876 | SURF 4877 | SUSB 4878 | SUSC 4879 | SUSL 4880 | SUZ 4881 | SVBI 4882 | SVC 4883 | SVM 4884 | SVMK 4885 | SVRA 4886 | SVT 4887 | SVVC 4888 | SWAV 4889 | SWBI 4890 | SWCH 4891 | SWI 4892 | SWIR 4893 | SWK 4894 | SWKS 4895 | SWM 4896 | SWN 4897 | SWTX 4898 | SWX 4899 | SWZ 4900 | SXC 4901 | SXI 4902 | SXT 4903 | SXTC 4904 | SY 4905 | SYBT 4906 | SYBX 4907 | SYF 4908 | SYK 4909 | SYKE 4910 | SYN 4911 | SYNA 4912 | SYNC 4913 | SYNH 4914 | SYNL 4915 | SYPR 4916 | SYRS 4917 | SYX 4918 | SYY 4919 | SZC 4920 | T 4921 | TA 4922 | TAC 4923 | TACO 4924 | TACT 4925 | TAIT 4926 | TAK 4927 | TAL 4928 | TALO 4929 | TANH 4930 | TAOP 4931 | TAP 4932 | TARA 4933 | TARO 4934 | TAST 4935 | TAT 4936 | TATT 4937 | TAYD 4938 | TBBK 4939 | TBI 4940 | TBIO 4941 | TBK 4942 | TBLT 4943 | TBNK 4944 | TBPH 4945 | TC 4946 | TCBI 4947 | TCBK 4948 | TCCO 4949 | TCDA 4950 | TCF 4951 | TCFC 4952 | TCI 4953 | TCMD 4954 | TCO 4955 | TCOM 4956 | TCON 4957 | TCP 4958 | TCPC 4959 | TCRD 4960 | TCRR 4961 | TCS 4962 | TCX 4963 | TD 4964 | TDC 4965 | TDF 4966 | TDG 4967 | TDIV 4968 | TDOC 4969 | TDS 4970 | TDW 4971 | TDY 4972 | TEAF 4973 | TEAM 4974 | TECD 4975 | TECH 4976 | TECK 4977 | TEDU 4978 | TEF 4979 | TEI 4980 | TEL 4981 | TELA 4982 | TELL 4983 | TEN 4984 | TENB 4985 | TENX 4986 | TEO 4987 | TER 4988 | TERP 4989 | TESS 4990 | TEUM 4991 | TEVA 4992 | TEX 4993 | TFC 4994 | TFFP 4995 | TFII 4996 | TFSL 4997 | TFX 4998 | TG 4999 | TGA 5000 | TGB 5001 | TGC 5002 | TGH 5003 | TGI 5004 | TGLS 5005 | TGNA 5006 | TGP 5007 | TGS 5008 | TGT 5009 | TGTX 5010 | TH 5011 | THBR 5012 | THC 5013 | THCA 5014 | THCB 5015 | THFF 5016 | THG 5017 | THM 5018 | THMO 5019 | THO 5020 | THQ 5021 | THR 5022 | THRM 5023 | THS 5024 | THTX 5025 | THW 5026 | TIF 5027 | TIGO 5028 | TIGR 5029 | TILE 5030 | TIPT 5031 | TISI 5032 | TITN 5033 | TJX 5034 | TK 5035 | TKAT 5036 | TKC 5037 | TKR 5038 | TLC 5039 | TLF 5040 | TLGT 5041 | TLI 5042 | TLK 5043 | TLND 5044 | TLRD 5045 | TLRY 5046 | TLSA 5047 | TLT 5048 | TLYS 5049 | TM 5050 | TMBR 5051 | TMDI 5052 | TMDX 5053 | TME 5054 | TMHC 5055 | TMO 5056 | TMP 5057 | TMQ 5058 | TMST 5059 | TMUS 5060 | TNAV 5061 | TNC 5062 | TNDM 5063 | TNET 5064 | TNK 5065 | TNP 5066 | TNXP 5067 | TOL 5068 | TOPS 5069 | TORC 5070 | TOT 5071 | TOTA 5072 | TOUR 5073 | TOWN 5074 | TPB 5075 | TPC 5076 | TPCO 5077 | TPH 5078 | TPHS 5079 | TPIC 5080 | TPL 5081 | TPR 5082 | TPRE 5083 | TPTX 5084 | TPVG 5085 | TPX 5086 | TPZ 5087 | TQQQ 5088 | TR 5089 | TRC 5090 | TRCH 5091 | TREC 5092 | TREE 5093 | TREX 5094 | TRGP 5095 | TRHC 5096 | TRI 5097 | TRIB 5098 | TRIL 5099 | TRIP 5100 | TRMB 5101 | TRMD 5102 | TRMK 5103 | TRMT 5104 | TRN 5105 | TRNE 5106 | TRNO 5107 | TRNS 5108 | TROW 5109 | TROX 5110 | TRP 5111 | TRPX 5112 | TRQ 5113 | TRS 5114 | TRST 5115 | TRT 5116 | TRTN 5117 | TRTX 5118 | TRU 5119 | TRUE 5120 | TRUP 5121 | TRV 5122 | TRVG 5123 | TRVI 5124 | TRVN 5125 | TRWH 5126 | TRX 5127 | TRXC 5128 | TS 5129 | TSBK 5130 | TSC 5131 | TSCO 5132 | TSE 5133 | TSEM 5134 | TSI 5135 | TSLA 5136 | TSLX 5137 | TSM 5138 | TSN 5139 | TSQ 5140 | TSRI 5141 | TSU 5142 | TT 5143 | TTC 5144 | TTD 5145 | TTEC 5146 | TTEK 5147 | TTGT 5148 | TTI 5149 | TTM 5150 | TTMI 5151 | TTNP 5152 | TTOO 5153 | TTP 5154 | TTPH 5155 | TTTN 5156 | TTWO 5157 | TU 5158 | TUFN 5159 | TUP 5160 | TUR 5161 | TURN 5162 | TUSA 5163 | TUSK 5164 | TV 5165 | TVE 5166 | TVIX 5167 | TVTY 5168 | TW 5169 | TWI 5170 | TWIN 5171 | TWLO 5172 | TWMC 5173 | TWN 5174 | TWNK 5175 | TWO 5176 | TWOU 5177 | TWST 5178 | TWTR 5179 | TX 5180 | TXG 5181 | TXMD 5182 | TXN 5183 | TXRH 5184 | TXT 5185 | TY 5186 | TYG 5187 | TYHT 5188 | TYL 5189 | TYME 5190 | TZAC 5191 | TZOO 5192 | UA 5193 | UAA 5194 | UAE 5195 | UAL 5196 | UAMY 5197 | UAN 5198 | UAVS 5199 | UBA 5200 | UBCP 5201 | UBER 5202 | UBFO 5203 | UBOH 5204 | UBS 5205 | UBSI 5206 | UBX 5207 | UCBI 5208 | UCL 5209 | UCTT 5210 | UDR 5211 | UE 5212 | UEC 5213 | UEIC 5214 | UEPS 5215 | UFAB 5216 | UFCS 5217 | UFI 5218 | UFO 5219 | UFPI 5220 | UFPT 5221 | UFS 5222 | UG 5223 | UGI 5224 | UGLD 5225 | UGP 5226 | UHAL 5227 | UHS 5228 | UHT 5229 | UI 5230 | UIHC 5231 | UIS 5232 | UL 5233 | ULBI 5234 | ULH 5235 | ULTA 5236 | UMBF 5237 | UMC 5238 | UMH 5239 | UMPQ 5240 | UMRX 5241 | UN 5242 | UNB 5243 | UNF 5244 | UNFI 5245 | UNH 5246 | UNIT 5247 | UNM 5248 | UNP 5249 | UNTY 5250 | UNVR 5251 | UONE 5252 | UONEK 5253 | UPLD 5254 | UPS 5255 | UPWK 5256 | URBN 5257 | URG 5258 | URGN 5259 | URI 5260 | UROV 5261 | USA 5262 | USAC 5263 | USAK 5264 | USAP 5265 | USAS 5266 | USAU 5267 | USB 5268 | USCR 5269 | USDP 5270 | USEG 5271 | USFD 5272 | USIG 5273 | USIO 5274 | USLB 5275 | USLM 5276 | USLV 5277 | USM 5278 | USMC 5279 | USNA 5280 | USOI 5281 | USPH 5282 | USWS 5283 | USX 5284 | UTF 5285 | UTG 5286 | UTHR 5287 | UTI 5288 | UTL 5289 | UTMD 5290 | UTSI 5291 | UUU 5292 | UUUU 5293 | UVE 5294 | UVSP 5295 | UVV 5296 | UXIN 5297 | V 5298 | VAC 5299 | VAL 5300 | VALE 5301 | VALU 5302 | VAPO 5303 | VAR 5304 | VBF 5305 | VBFC 5306 | VBIV 5307 | VBLT 5308 | VBND 5309 | VBTX 5310 | VC 5311 | VCEL 5312 | VCF 5313 | VCIF 5314 | VCIT 5315 | VCLT 5316 | VCNX 5317 | VCRA 5318 | VCSH 5319 | VCTR 5320 | VCV 5321 | VCYT 5322 | VEC 5323 | VECO 5324 | VEDL 5325 | VEEV 5326 | VEL 5327 | VEON 5328 | VER 5329 | VERB 5330 | VERI 5331 | VERO 5332 | VERU 5333 | VERY 5334 | VET 5335 | VETS 5336 | VFC 5337 | VFF 5338 | VFL 5339 | VG 5340 | VGI 5341 | VGIT 5342 | VGLT 5343 | VGM 5344 | VGR 5345 | VGSH 5346 | VGZ 5347 | VHC 5348 | VHI 5349 | VIAC 5350 | VIAV 5351 | VICI 5352 | VICR 5353 | VIDI 5354 | VIE 5355 | VIGI 5356 | VIIX 5357 | VIOT 5358 | VIPS 5359 | VIR 5360 | VIRC 5361 | VIRT 5362 | VISL 5363 | VIST 5364 | VIV 5365 | VIVE 5366 | VIVO 5367 | VJET 5368 | VKI 5369 | VKQ 5370 | VKTX 5371 | VLGEA 5372 | VLO 5373 | VLRS 5374 | VLT 5375 | VLY 5376 | VMBS 5377 | VMC 5378 | VMD 5379 | VMI 5380 | VMM 5381 | VMO 5382 | VMW 5383 | VNCE 5384 | VNDA 5385 | VNE 5386 | VNET 5387 | VNO 5388 | VNOM 5389 | VNQI 5390 | VNRX 5391 | VNTR 5392 | VOC 5393 | VOD 5394 | VOLT 5395 | VONE 5396 | VONG 5397 | VONV 5398 | VOXX 5399 | VOYA 5400 | VPG 5401 | VPV 5402 | VRA 5403 | VRAY 5404 | VRCA 5405 | VREX 5406 | VRIG 5407 | VRM 5408 | VRNA 5409 | VRNS 5410 | VRNT 5411 | VRRM 5412 | VRS 5413 | VRSK 5414 | VRSN 5415 | VRT 5416 | VRTS 5417 | VRTU 5418 | VRTV 5419 | VRTX 5420 | VSAT 5421 | VSDA 5422 | VSEC 5423 | VSH 5424 | VSLR 5425 | VSMV 5426 | VST 5427 | VSTM 5428 | VSTO 5429 | VTA 5430 | VTC 5431 | VTGN 5432 | VTHR 5433 | VTIP 5434 | VTN 5435 | VTNR 5436 | VTR 5437 | VTSI 5438 | VTVT 5439 | VTWG 5440 | VTWO 5441 | VTWV 5442 | VUSE 5443 | VUZI 5444 | VVI 5445 | VVNT 5446 | VVPR 5447 | VVR 5448 | VVUS 5449 | VVV 5450 | VWOB 5451 | VXRT 5452 | VXUS 5453 | VYGR 5454 | VYMI 5455 | VZ 5456 | W 5457 | WAB 5458 | WABC 5459 | WAFD 5460 | WAFU 5461 | WAL 5462 | WALA 5463 | WASH 5464 | WAT 5465 | WATT 5466 | WB 5467 | WBA 5468 | WBAI 5469 | WBK 5470 | WBND 5471 | WBS 5472 | WBT 5473 | WCC 5474 | WCLD 5475 | WCN 5476 | WD 5477 | WDAY 5478 | WDC 5479 | WDFC 5480 | WDR 5481 | WEA 5482 | WEC 5483 | WEI 5484 | WELL 5485 | WEN 5486 | WERN 5487 | WES 5488 | WETF 5489 | WEX 5490 | WEYS 5491 | WF 5492 | WFC 5493 | WGO 5494 | WH 5495 | WHD 5496 | WHF 5497 | WHG 5498 | WHLM 5499 | WHLR 5500 | WHR 5501 | WIA 5502 | WIFI 5503 | WILC 5504 | WIMI 5505 | WINA 5506 | WINC 5507 | WING 5508 | WINS 5509 | WINT 5510 | WIRE 5511 | WISA 5512 | WIT 5513 | WIW 5514 | WIX 5515 | WK 5516 | WKHS 5517 | WLDN 5518 | WLFC 5519 | WLK 5520 | WLKP 5521 | WLL 5522 | WLTW 5523 | WM 5524 | WMB 5525 | WMC 5526 | WMG 5527 | WMGI 5528 | WMK 5529 | WMS 5530 | WMT 5531 | WNC 5532 | WNEB 5533 | WNS 5534 | WOOD 5535 | WOR 5536 | WORK 5537 | WOW 5538 | WPC 5539 | WPG 5540 | WPM 5541 | WPP 5542 | WPRT 5543 | WPX 5544 | WRB 5545 | WRE 5546 | WRI 5547 | WRK 5548 | WRLD 5549 | WRN 5550 | WRTC 5551 | WSBC 5552 | WSBF 5553 | WSC 5554 | WSFS 5555 | WSG 5556 | WSM 5557 | WSO 5558 | WSR 5559 | WST 5560 | WSTG 5561 | WSTL 5562 | WTBA 5563 | WTER 5564 | WTFC 5565 | WTI 5566 | WTM 5567 | WTRE 5568 | WTRG 5569 | WTRH 5570 | WTRU 5571 | WTS 5572 | WTT 5573 | WTTR 5574 | WU 5575 | WUBA 5576 | WVE 5577 | WVFC 5578 | WVVI 5579 | WW 5580 | WWD 5581 | WWE 5582 | WWR 5583 | WWW 5584 | WY 5585 | WYND 5586 | WYNN 5587 | WYY 5588 | X 5589 | XAIR 5590 | XAN 5591 | XBIO 5592 | XBIT 5593 | XCUR 5594 | XEC 5595 | XEL 5596 | XELA 5597 | XELB 5598 | XENE 5599 | XENT 5600 | XERS 5601 | XFLT 5602 | XFOR 5603 | XGN 5604 | XHR 5605 | XIN 5606 | XLNX 5607 | XLRN 5608 | XNCR 5609 | XNET 5610 | XOM 5611 | XOMA 5612 | XONE 5613 | XP 5614 | XPEL 5615 | XPER 5616 | XPL 5617 | XPO 5618 | XRAY 5619 | XRF 5620 | XRX 5621 | XSPA 5622 | XT 5623 | XTLB 5624 | XTNT 5625 | XXII 5626 | XYF 5627 | XYL 5628 | Y 5629 | YCBD 5630 | YELP 5631 | YETI 5632 | YEXT 5633 | YGYI 5634 | YI 5635 | YIN 5636 | YJ 5637 | YLCO 5638 | YLDE 5639 | YMAB 5640 | YNDX 5641 | YORW 5642 | YPF 5643 | YRCW 5644 | YRD 5645 | YTEN 5646 | YTRA 5647 | YUM 5648 | YUMC 5649 | YVR 5650 | YY 5651 | Z 5652 | ZAGG 5653 | ZBH 5654 | ZBRA 5655 | ZCMD 5656 | ZDGE 5657 | ZEAL 5658 | ZEN 5659 | ZEUS 5660 | ZG 5661 | ZGNX 5662 | ZI 5663 | ZION 5664 | ZIOP 5665 | ZIV 5666 | ZIXI 5667 | ZKIN 5668 | ZLAB 5669 | ZM 5670 | ZN 5671 | ZNGA 5672 | ZNH 5673 | ZNTL 5674 | ZOM 5675 | ZS 5676 | ZSAN 5677 | ZTO 5678 | ZTR 5679 | ZTS 5680 | ZUMZ 5681 | ZUO 5682 | ZVO 5683 | ZYME 5684 | ZYNE 5685 | ZYXI 5686 | NAIL 5687 | DPST 5688 | FVAC 5689 | OTRK 5690 | RKT 5691 | GLD 5692 | JAMF 5693 | NAIL 5694 | UUP --------------------------------------------------------------------------------