├── .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 | [](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
--------------------------------------------------------------------------------