From a437b30567d7b9818128e86e032c66e448391c15 Mon Sep 17 00:00:00 2001 From: lim-deriv Date: Fri, 21 Jun 2024 03:42:08 +0000 Subject: [PATCH 1/5] update Changes --- Changes | 1 + 1 file changed, 1 insertion(+) diff --git a/Changes b/Changes index f5b5b9f..d47c289 100644 --- a/Changes +++ b/Changes @@ -1,6 +1,7 @@ Revision history for Finance-Exchange {{$NEXT}} + - Add new OTC exchanges (CME_OTC and SGX_OTC) for new symbols 0.01 2022-10-14 10:50:42 +0000 - Initial release From 85b2a5309645ba7f5b6f95609c8f3f05b69beb10 Mon Sep 17 00:00:00 2001 From: lim-deriv Date: Fri, 21 Jun 2024 08:10:41 +0000 Subject: [PATCH 2/5] update version --- lib/Finance/Exchange.pm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/Finance/Exchange.pm b/lib/Finance/Exchange.pm index 70f23d7..ad128dc 100644 --- a/lib/Finance/Exchange.pm +++ b/lib/Finance/Exchange.pm @@ -7,7 +7,7 @@ use Clone qw(clone); use File::ShareDir; use YAML::XS qw(LoadFile); -our $VERSION = '0.01'; +our $VERSION = '0.02'; =head1 NAME From 94f114bcac467825440830551f019aa9399ccb85 Mon Sep 17 00:00:00 2001 From: lim-deriv Date: Fri, 21 Jun 2024 08:37:03 +0000 Subject: [PATCH 3/5] Release Finance-Exchange 0.02 - Add new OTC exchanges (CME_OTC and SGX_OTC) for new symbols --- Changes | 2 ++ Makefile.PL | 24 +++++++++++++++--------- lib/Finance/Exchange.pm | 2 +- 3 files changed, 18 insertions(+), 10 deletions(-) diff --git a/Changes b/Changes index d47c289..dde0741 100644 --- a/Changes +++ b/Changes @@ -1,6 +1,8 @@ Revision history for Finance-Exchange {{$NEXT}} + +0.02 2024-06-21 08:36:16+00:00 UTC - Add new OTC exchanges (CME_OTC and SGX_OTC) for new symbols 0.01 2022-10-14 10:50:42 +0000 diff --git a/Makefile.PL b/Makefile.PL index 0011128..ab7ccbb 100644 --- a/Makefile.PL +++ b/Makefile.PL @@ -1,10 +1,10 @@ -# This file was automatically generated by Dist::Zilla::Plugin::MakeMaker v6.024. +# This file was automatically generated by Dist::Zilla::Plugin::MakeMaker v6.029. use strict; use warnings; -use 5.010000; +use 5.006; -use ExtUtils::MakeMaker 6.48; +use ExtUtils::MakeMaker 7.64; use File::ShareDir::Install; $File::ShareDir::Install::INCLUDE_DOTFILES = 1; @@ -14,14 +14,14 @@ install_share dist => "share"; my %WriteMakefileArgs = ( "ABSTRACT" => "represents a financial stock exchange object.", - "AUTHOR" => "binary.com ", + "AUTHOR" => "DERIV ", "CONFIGURE_REQUIRES" => { - "ExtUtils::MakeMaker" => "6.48", + "ExtUtils::MakeMaker" => "7.64", "File::ShareDir::Install" => "0.06" }, "DISTNAME" => "Finance-Exchange", "LICENSE" => "perl", - "MIN_PERL_VERSION" => "5.010000", + "MIN_PERL_VERSION" => "5.006", "NAME" => "Finance::Exchange", "PREREQ_PM" => { "Clone" => 0, @@ -36,12 +36,15 @@ my %WriteMakefileArgs = ( "IO::Handle" => 0, "IPC::Open3" => 0, "Test::CheckDeps" => "0.010", + "Test::Deep" => 0, "Test::Exception" => 0, "Test::FailWarnings" => "0.008", "Test::More" => "0.98", - "Test::Most" => "0.34" + "Test::Most" => "0.34", + "strict" => 0, + "warnings" => 0 }, - "VERSION" => "0.01", + "VERSION" => "0.03", "test" => { "TESTS" => "t/*.t" } @@ -57,12 +60,15 @@ my %FallbackPrereqs = ( "IPC::Open3" => 0, "Moose" => 0, "Test::CheckDeps" => "0.010", + "Test::Deep" => 0, "Test::Exception" => 0, "Test::FailWarnings" => "0.008", "Test::More" => "0.98", "Test::Most" => "0.34", "Time::Duration::Concise::Localize" => 0, - "YAML::XS" => 0 + "YAML::XS" => 0, + "strict" => 0, + "warnings" => 0 ); diff --git a/lib/Finance/Exchange.pm b/lib/Finance/Exchange.pm index ad128dc..3b5797a 100644 --- a/lib/Finance/Exchange.pm +++ b/lib/Finance/Exchange.pm @@ -7,7 +7,7 @@ use Clone qw(clone); use File::ShareDir; use YAML::XS qw(LoadFile); -our $VERSION = '0.02'; +our $VERSION = '0.03'; =head1 NAME From cacde4a4cd02504915bb00fbd48748cdce871b00 Mon Sep 17 00:00:00 2001 From: lim-deriv Date: Fri, 21 Jun 2024 08:47:20 +0000 Subject: [PATCH 4/5] release to pause --- Finance-Exchange-0.02/Changes | 7 + Finance-Exchange-0.02/LICENSE | 379 ++++ Finance-Exchange-0.02/MANIFEST | 32 + Finance-Exchange-0.02/META.json | 122 ++ Finance-Exchange-0.02/META.yml | 67 + Finance-Exchange-0.02/Makefile.PL | 90 + Finance-Exchange-0.02/README | 99 + Finance-Exchange-0.02/cpanfile | 12 + Finance-Exchange-0.02/dist.ini | 13 + Finance-Exchange-0.02/lib/Finance/Exchange.pm | 243 +++ Finance-Exchange-0.02/share/exchange.yml | 1608 +++++++++++++++++ .../share/exchanges_trading_days_aliases.yml | 29 + Finance-Exchange-0.02/t/00-check-deps.t | 15 + Finance-Exchange-0.02/t/00-compile.t | 60 + Finance-Exchange-0.02/t/00-report-prereqs.dd | 61 + Finance-Exchange-0.02/t/00-report-prereqs.t | 184 ++ Finance-Exchange-0.02/t/exchange.t | 172 ++ Finance-Exchange-0.02/t/rc/perlcriticrc | 25 + Finance-Exchange-0.02/t/rc/perltidyrc | 62 + Finance-Exchange-0.02/t/usage.t | 19 + Finance-Exchange-0.02/xt/author/critic.t | 7 + Finance-Exchange-0.02/xt/author/distmeta.t | 7 + Finance-Exchange-0.02/xt/author/eol.t | 33 + .../xt/author/minimum-version.t | 6 + Finance-Exchange-0.02/xt/author/mojibake.t | 9 + Finance-Exchange-0.02/xt/author/no-tabs.t | 33 + Finance-Exchange-0.02/xt/author/pod-syntax.t | 7 + Finance-Exchange-0.02/xt/author/portability.t | 10 + .../xt/author/test-version.t | 23 + .../xt/release/common_spelling.t | 11 + .../xt/release/cpan-changes.t | 10 + LICENSE | 379 ++++ 32 files changed, 3834 insertions(+) create mode 100644 Finance-Exchange-0.02/Changes create mode 100644 Finance-Exchange-0.02/LICENSE create mode 100644 Finance-Exchange-0.02/MANIFEST create mode 100644 Finance-Exchange-0.02/META.json create mode 100644 Finance-Exchange-0.02/META.yml create mode 100644 Finance-Exchange-0.02/Makefile.PL create mode 100644 Finance-Exchange-0.02/README create mode 100644 Finance-Exchange-0.02/cpanfile create mode 100644 Finance-Exchange-0.02/dist.ini create mode 100644 Finance-Exchange-0.02/lib/Finance/Exchange.pm create mode 100644 Finance-Exchange-0.02/share/exchange.yml create mode 100644 Finance-Exchange-0.02/share/exchanges_trading_days_aliases.yml create mode 100644 Finance-Exchange-0.02/t/00-check-deps.t create mode 100644 Finance-Exchange-0.02/t/00-compile.t create mode 100644 Finance-Exchange-0.02/t/00-report-prereqs.dd create mode 100644 Finance-Exchange-0.02/t/00-report-prereqs.t create mode 100755 Finance-Exchange-0.02/t/exchange.t create mode 100644 Finance-Exchange-0.02/t/rc/perlcriticrc create mode 100644 Finance-Exchange-0.02/t/rc/perltidyrc create mode 100644 Finance-Exchange-0.02/t/usage.t create mode 100644 Finance-Exchange-0.02/xt/author/critic.t create mode 100644 Finance-Exchange-0.02/xt/author/distmeta.t create mode 100644 Finance-Exchange-0.02/xt/author/eol.t create mode 100644 Finance-Exchange-0.02/xt/author/minimum-version.t create mode 100644 Finance-Exchange-0.02/xt/author/mojibake.t create mode 100644 Finance-Exchange-0.02/xt/author/no-tabs.t create mode 100644 Finance-Exchange-0.02/xt/author/pod-syntax.t create mode 100644 Finance-Exchange-0.02/xt/author/portability.t create mode 100644 Finance-Exchange-0.02/xt/author/test-version.t create mode 100644 Finance-Exchange-0.02/xt/release/common_spelling.t create mode 100644 Finance-Exchange-0.02/xt/release/cpan-changes.t create mode 100644 LICENSE diff --git a/Finance-Exchange-0.02/Changes b/Finance-Exchange-0.02/Changes new file mode 100644 index 0000000..ef35f4f --- /dev/null +++ b/Finance-Exchange-0.02/Changes @@ -0,0 +1,7 @@ +Revision history for Finance-Exchange + +0.02 2024-06-21 08:36:16+00:00 UTC + - Add new OTC exchanges (CME_OTC and SGX_OTC) for new symbols + +0.01 2022-10-14 10:50:42 +0000 + - Initial release diff --git a/Finance-Exchange-0.02/LICENSE b/Finance-Exchange-0.02/LICENSE new file mode 100644 index 0000000..77d8c9e --- /dev/null +++ b/Finance-Exchange-0.02/LICENSE @@ -0,0 +1,379 @@ +This software is copyright (c) 2022 by Deriv Services Ltd. + +This is free software; you can redistribute it and/or modify it under +the same terms as the Perl 5 programming language system itself. + +Terms of the Perl programming language system itself + +a) the GNU General Public License as published by the Free + Software Foundation; either version 1, or (at your option) any + later version, or +b) the "Artistic License" + +--- The GNU General Public License, Version 1, February 1989 --- + +This software is Copyright (c) 2022 by Deriv Services Ltd. + +This is free software, licensed under: + + The GNU General Public License, Version 1, February 1989 + + GNU GENERAL PUBLIC LICENSE + Version 1, February 1989 + + Copyright (C) 1989 Free Software Foundation, Inc. + 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The license agreements of most software companies try to keep users +at the mercy of those companies. By contrast, our General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. The +General Public License applies to the Free Software Foundation's +software and to any other program whose authors commit to using it. +You can use it for your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Specifically, the General Public License is designed to make +sure that you have the freedom to give away or sell copies of free +software, that you receive source code or can get it if you want it, +that you can change the software or use pieces of it in new free +programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of a such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must tell them their rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any program or other work which +contains a notice placed by the copyright holder saying it may be +distributed under the terms of this General Public License. The +"Program", below, refers to any such program or work, and a "work based +on the Program" means either the Program or any work containing the +Program or a portion of it, either verbatim or with modifications. Each +licensee is addressed as "you". + + 1. You may copy and distribute verbatim copies of the Program's source +code as you receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice and +disclaimer of warranty; keep intact all the notices that refer to this +General Public License and to the absence of any warranty; and give any +other recipients of the Program a copy of this General Public License +along with the Program. You may charge a fee for the physical act of +transferring a copy. + + 2. You may modify your copy or copies of the Program or any portion of +it, and copy and distribute such modifications under the terms of Paragraph +1 above, provided that you also do the following: + + a) cause the modified files to carry prominent notices stating that + you changed the files and the date of any change; and + + b) cause the whole of any work that you distribute or publish, that + in whole or in part contains the Program or any part thereof, either + with or without modifications, to be licensed at no charge to all + third parties under the terms of this General Public License (except + that you may choose to grant warranty protection to some or all + third parties, at your option). + + c) If the modified program normally reads commands interactively when + run, you must cause it, when started running for such interactive use + in the simplest and most usual way, to print or display an + announcement including an appropriate copyright notice and a notice + that there is no warranty (or else, saying that you provide a + warranty) and that users may redistribute the program under these + conditions, and telling the user how to view a copy of this General + Public License. + + d) You may charge a fee for the physical act of transferring a + copy, and you may at your option offer warranty protection in + exchange for a fee. + +Mere aggregation of another independent work with the Program (or its +derivative) on a volume of a storage or distribution medium does not bring +the other work under the scope of these terms. + + 3. You may copy and distribute the Program (or a portion or derivative of +it, under Paragraph 2) in object code or executable form under the terms of +Paragraphs 1 and 2 above provided that you also do one of the following: + + a) accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of + Paragraphs 1 and 2 above; or, + + b) accompany it with a written offer, valid for at least three + years, to give any third party free (except for a nominal charge + for the cost of distribution) a complete machine-readable copy of the + corresponding source code, to be distributed under the terms of + Paragraphs 1 and 2 above; or, + + c) accompany it with the information you received as to where the + corresponding source code may be obtained. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form alone.) + +Source code for a work means the preferred form of the work for making +modifications to it. For an executable file, complete source code means +all the source code for all modules it contains; but, as a special +exception, it need not include source code for modules which are standard +libraries that accompany the operating system on which the executable +file runs, or for standard header files or definitions files that +accompany that operating system. + + 4. You may not copy, modify, sublicense, distribute or transfer the +Program except as expressly provided under this General Public License. +Any attempt otherwise to copy, modify, sublicense, distribute or transfer +the Program is void, and will automatically terminate your rights to use +the Program under this License. However, parties who have received +copies, or rights to use copies, from you under this General Public +License will not have their licenses terminated so long as such parties +remain in full compliance. + + 5. By copying, distributing or modifying the Program (or any work based +on the Program) you indicate your acceptance of this license to do so, +and all its terms and conditions. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the original +licensor to copy, distribute or modify the Program subject to these +terms and conditions. You may not impose any further restrictions on the +recipients' exercise of the rights granted herein. + + 7. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of the license which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +the license, you may choose any version ever published by the Free Software +Foundation. + + 8. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 9. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 10. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + Appendix: How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to humanity, the best way to achieve this is to make it +free software which everyone can redistribute and change under these +terms. + + To do so, attach the following notices to the program. It is safest to +attach them to the start of each source file to most effectively convey +the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + + Copyright (C) 19yy + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 1, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) 19xx name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the +appropriate parts of the General Public License. Of course, the +commands you use may be called something other than `show w' and `show +c'; they could even be mouse-clicks or menu items--whatever suits your +program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + program `Gnomovision' (a program to direct compilers to make passes + at assemblers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +That's all there is to it! + + +--- The Artistic License 1.0 --- + +This software is Copyright (c) 2022 by Deriv Services Ltd. + +This is free software, licensed under: + + The Artistic License 1.0 + +The Artistic License + +Preamble + +The intent of this document is to state the conditions under which a Package +may be copied, such that the Copyright Holder maintains some semblance of +artistic control over the development of the package, while giving the users of +the package the right to use and distribute the Package in a more-or-less +customary fashion, plus the right to make reasonable modifications. + +Definitions: + + - "Package" refers to the collection of files distributed by the Copyright + Holder, and derivatives of that collection of files created through + textual modification. + - "Standard Version" refers to such a Package if it has not been modified, + or has been modified in accordance with the wishes of the Copyright + Holder. + - "Copyright Holder" is whoever is named in the copyright or copyrights for + the package. + - "You" is you, if you're thinking about copying or distributing this Package. + - "Reasonable copying fee" is whatever you can justify on the basis of media + cost, duplication charges, time of people involved, and so on. (You will + not be required to justify it to the Copyright Holder, but only to the + computing community at large as a market that must bear the fee.) + - "Freely Available" means that no fee is charged for the item itself, though + there may be fees involved in handling the item. It also means that + recipients of the item may redistribute it under the same conditions they + received it. + +1. You may make and give away verbatim copies of the source form of the +Standard Version of this Package without restriction, provided that you +duplicate all of the original copyright notices and associated disclaimers. + +2. You may apply bug fixes, portability fixes and other modifications derived +from the Public Domain or from the Copyright Holder. A Package modified in such +a way shall still be considered the Standard Version. + +3. You may otherwise modify your copy of this Package in any way, provided that +you insert a prominent notice in each changed file stating how and when you +changed that file, and provided that you do at least ONE of the following: + + a) place your modifications in the Public Domain or otherwise make them + Freely Available, such as by posting said modifications to Usenet or an + equivalent medium, or placing the modifications on a major archive site + such as ftp.uu.net, or by allowing the Copyright Holder to include your + modifications in the Standard Version of the Package. + + b) use the modified Package only within your corporation or organization. + + c) rename any non-standard executables so the names do not conflict with + standard executables, which must also be provided, and provide a separate + manual page for each non-standard executable that clearly documents how it + differs from the Standard Version. + + d) make other distribution arrangements with the Copyright Holder. + +4. You may distribute the programs of this Package in object code or executable +form, provided that you do at least ONE of the following: + + a) distribute a Standard Version of the executables and library files, + together with instructions (in the manual page or equivalent) on where to + get the Standard Version. + + b) accompany the distribution with the machine-readable source of the Package + with your modifications. + + c) accompany any non-standard executables with their corresponding Standard + Version executables, giving the non-standard executables non-standard + names, and clearly documenting the differences in manual pages (or + equivalent), together with instructions on where to get the Standard + Version. + + d) make other distribution arrangements with the Copyright Holder. + +5. You may charge a reasonable copying fee for any distribution of this +Package. You may charge any fee you choose for support of this Package. You +may not charge a fee for this Package itself. However, you may distribute this +Package in aggregate with other (possibly commercial) programs as part of a +larger (possibly commercial) software distribution provided that you do not +advertise this Package as a product of your own. + +6. The scripts and library files supplied as input to or produced as output +from the programs of this Package do not automatically fall under the copyright +of this Package, but belong to whomever generated them, and may be sold +commercially, and may be aggregated with this Package. + +7. C or perl subroutines supplied by you and linked into this Package shall not +be considered part of this Package. + +8. The name of the Copyright Holder may not be used to endorse or promote +products derived from this software without specific prior written permission. + +9. THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED +WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + +The End + diff --git a/Finance-Exchange-0.02/MANIFEST b/Finance-Exchange-0.02/MANIFEST new file mode 100644 index 0000000..fd5265c --- /dev/null +++ b/Finance-Exchange-0.02/MANIFEST @@ -0,0 +1,32 @@ +# This file was automatically generated by Dist::Zilla::Plugin::Manifest v6.029. +Changes +LICENSE +MANIFEST +META.json +META.yml +Makefile.PL +README +cpanfile +dist.ini +lib/Finance/Exchange.pm +share/exchange.yml +share/exchanges_trading_days_aliases.yml +t/00-check-deps.t +t/00-compile.t +t/00-report-prereqs.dd +t/00-report-prereqs.t +t/exchange.t +t/rc/perlcriticrc +t/rc/perltidyrc +t/usage.t +xt/author/critic.t +xt/author/distmeta.t +xt/author/eol.t +xt/author/minimum-version.t +xt/author/mojibake.t +xt/author/no-tabs.t +xt/author/pod-syntax.t +xt/author/portability.t +xt/author/test-version.t +xt/release/common_spelling.t +xt/release/cpan-changes.t diff --git a/Finance-Exchange-0.02/META.json b/Finance-Exchange-0.02/META.json new file mode 100644 index 0000000..b38666d --- /dev/null +++ b/Finance-Exchange-0.02/META.json @@ -0,0 +1,122 @@ +{ + "abstract" : "represents a financial stock exchange object.", + "author" : [ + "DERIV " + ], + "dynamic_config" : 0, + "generated_by" : "Dist::Zilla version 6.029, CPAN::Meta::Converter version 2.150010", + "license" : [ + "perl_5" + ], + "meta-spec" : { + "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", + "version" : 2 + }, + "name" : "Finance-Exchange", + "no_index" : { + "directory" : [ + "eg", + "share", + "shares", + "t", + "xt" + ] + }, + "prereqs" : { + "configure" : { + "requires" : { + "ExtUtils::MakeMaker" : "7.64", + "File::ShareDir::Install" : "0.06" + } + }, + "develop" : { + "requires" : { + "Dist::Zilla" : "5", + "Dist::Zilla::Plugin::PerlTidy" : "0", + "Dist::Zilla::Plugin::Test::Perl::Critic" : "0", + "Dist::Zilla::PluginBundle::Author::DERIV" : "0", + "Software::License::Perl_5" : "0", + "Test::CPAN::Changes" : "0.19", + "Test::CPAN::Meta" : "0", + "Test::EOL" : "0", + "Test::MinimumVersion" : "0", + "Test::Mojibake" : "0", + "Test::More" : "0.96", + "Test::NoTabs" : "0", + "Test::Perl::Critic" : "0", + "Test::Pod" : "1.41", + "Test::Portability::Files" : "0", + "Test::Version" : "1", + "strict" : "0", + "warnings" : "0" + } + }, + "runtime" : { + "requires" : { + "Clone" : "0", + "File::ShareDir" : "0", + "Moose" : "0", + "Time::Duration::Concise::Localize" : "0", + "YAML::XS" : "0" + } + }, + "test" : { + "recommends" : { + "CPAN::Meta" : "2.120900" + }, + "requires" : { + "ExtUtils::MakeMaker" : "0", + "File::Spec" : "0", + "IO::Handle" : "0", + "IPC::Open3" : "0", + "Test::CheckDeps" : "0.010", + "Test::Deep" : "0", + "Test::Exception" : "0", + "Test::FailWarnings" : "0.008", + "Test::More" : "0.98", + "Test::Most" : "0.34", + "perl" : "5.006", + "strict" : "0", + "warnings" : "0" + } + } + }, + "provides" : { + "Finance::Exchange" : { + "file" : "lib/Finance/Exchange.pm", + "version" : "0.02" + } + }, + "release_status" : "stable", + "resources" : { + "bugtracker" : { + "web" : "https://github.com/binary-com/perl-Finance-Exchange/issues" + }, + "homepage" : "https://github.com/binary-com/perl-Finance-Exchange", + "repository" : { + "type" : "git", + "url" : "https://github.com/binary-com/perl-Finance-Exchange.git", + "web" : "https://github.com/binary-com/perl-Finance-Exchange" + } + }, + "version" : "0.02", + "x_authority" : "cpan:DERIV", + "x_contributors" : [ + "Jun Bon ", + "Md Masud Rana ", + "Jean-Yves Sireau ", + "Tom Molesworth ", + "Yng Shan ", + "chylli-binary <52912308+chylli-binary@users.noreply.github.com>", + "lim-deriv ", + "Arun Venkataraman ", + "Hossein Shahsahebi <67314444+hossein-binary@users.noreply.github.com>", + "mukesh-deriv <85932084+mukesh-deriv@users.noreply.github.com>", + "Raunak Kathuria ", + "stanly-binary " + ], + "x_generated_by_perl" : "v5.26.2", + "x_serialization_backend" : "Cpanel::JSON::XS version 4.32", + "x_spdx_expression" : "Artistic-1.0-Perl OR GPL-1.0-or-later" +} + diff --git a/Finance-Exchange-0.02/META.yml b/Finance-Exchange-0.02/META.yml new file mode 100644 index 0000000..a22d71a --- /dev/null +++ b/Finance-Exchange-0.02/META.yml @@ -0,0 +1,67 @@ +--- +abstract: 'represents a financial stock exchange object.' +author: + - 'DERIV ' +build_requires: + ExtUtils::MakeMaker: '0' + File::Spec: '0' + IO::Handle: '0' + IPC::Open3: '0' + Test::CheckDeps: '0.010' + Test::Deep: '0' + Test::Exception: '0' + Test::FailWarnings: '0.008' + Test::More: '0.98' + Test::Most: '0.34' + perl: '5.006' + strict: '0' + warnings: '0' +configure_requires: + ExtUtils::MakeMaker: '7.64' + File::ShareDir::Install: '0.06' +dynamic_config: 0 +generated_by: 'Dist::Zilla version 6.029, CPAN::Meta::Converter version 2.150010' +license: perl +meta-spec: + url: http://module-build.sourceforge.net/META-spec-v1.4.html + version: '1.4' +name: Finance-Exchange +no_index: + directory: + - eg + - share + - shares + - t + - xt +provides: + Finance::Exchange: + file: lib/Finance/Exchange.pm + version: '0.02' +requires: + Clone: '0' + File::ShareDir: '0' + Moose: '0' + Time::Duration::Concise::Localize: '0' + YAML::XS: '0' +resources: + bugtracker: https://github.com/binary-com/perl-Finance-Exchange/issues + homepage: https://github.com/binary-com/perl-Finance-Exchange + repository: https://github.com/binary-com/perl-Finance-Exchange.git +version: '0.02' +x_authority: cpan:DERIV +x_contributors: + - 'Jun Bon ' + - 'Md Masud Rana ' + - 'Jean-Yves Sireau ' + - 'Tom Molesworth ' + - 'Yng Shan ' + - 'chylli-binary <52912308+chylli-binary@users.noreply.github.com>' + - 'lim-deriv ' + - 'Arun Venkataraman ' + - 'Hossein Shahsahebi <67314444+hossein-binary@users.noreply.github.com>' + - 'mukesh-deriv <85932084+mukesh-deriv@users.noreply.github.com>' + - 'Raunak Kathuria ' + - 'stanly-binary ' +x_generated_by_perl: v5.26.2 +x_serialization_backend: 'YAML::Tiny version 1.73' +x_spdx_expression: 'Artistic-1.0-Perl OR GPL-1.0-or-later' diff --git a/Finance-Exchange-0.02/Makefile.PL b/Finance-Exchange-0.02/Makefile.PL new file mode 100644 index 0000000..8879dc2 --- /dev/null +++ b/Finance-Exchange-0.02/Makefile.PL @@ -0,0 +1,90 @@ +# This file was automatically generated by Dist::Zilla::Plugin::MakeMaker v6.029. +use strict; +use warnings; + +use 5.006; + +use ExtUtils::MakeMaker 7.64; + +use File::ShareDir::Install; +$File::ShareDir::Install::INCLUDE_DOTFILES = 1; +$File::ShareDir::Install::INCLUDE_DOTDIRS = 1; +install_share dist => "share"; + + +my %WriteMakefileArgs = ( + "ABSTRACT" => "represents a financial stock exchange object.", + "AUTHOR" => "DERIV ", + "CONFIGURE_REQUIRES" => { + "ExtUtils::MakeMaker" => "7.64", + "File::ShareDir::Install" => "0.06" + }, + "DISTNAME" => "Finance-Exchange", + "LICENSE" => "perl", + "MIN_PERL_VERSION" => "5.006", + "NAME" => "Finance::Exchange", + "PREREQ_PM" => { + "Clone" => 0, + "File::ShareDir" => 0, + "Moose" => 0, + "Time::Duration::Concise::Localize" => 0, + "YAML::XS" => 0 + }, + "TEST_REQUIRES" => { + "ExtUtils::MakeMaker" => 0, + "File::Spec" => 0, + "IO::Handle" => 0, + "IPC::Open3" => 0, + "Test::CheckDeps" => "0.010", + "Test::Deep" => 0, + "Test::Exception" => 0, + "Test::FailWarnings" => "0.008", + "Test::More" => "0.98", + "Test::Most" => "0.34", + "strict" => 0, + "warnings" => 0 + }, + "VERSION" => "0.02", + "test" => { + "TESTS" => "t/*.t" + } +); + + +my %FallbackPrereqs = ( + "Clone" => 0, + "ExtUtils::MakeMaker" => 0, + "File::ShareDir" => 0, + "File::Spec" => 0, + "IO::Handle" => 0, + "IPC::Open3" => 0, + "Moose" => 0, + "Test::CheckDeps" => "0.010", + "Test::Deep" => 0, + "Test::Exception" => 0, + "Test::FailWarnings" => "0.008", + "Test::More" => "0.98", + "Test::Most" => "0.34", + "Time::Duration::Concise::Localize" => 0, + "YAML::XS" => 0, + "strict" => 0, + "warnings" => 0 +); + + +unless ( eval { ExtUtils::MakeMaker->VERSION(6.63_03) } ) { + delete $WriteMakefileArgs{TEST_REQUIRES}; + delete $WriteMakefileArgs{BUILD_REQUIRES}; + $WriteMakefileArgs{PREREQ_PM} = \%FallbackPrereqs; +} + +delete $WriteMakefileArgs{CONFIGURE_REQUIRES} + unless eval { ExtUtils::MakeMaker->VERSION(6.52) }; + +WriteMakefile(%WriteMakefileArgs); + +{ +package +MY; +use File::ShareDir::Install qw(postamble); +} diff --git a/Finance-Exchange-0.02/README b/Finance-Exchange-0.02/README new file mode 100644 index 0000000..85bab26 --- /dev/null +++ b/Finance-Exchange-0.02/README @@ -0,0 +1,99 @@ +NAME + + Finance::Exchange - represents a financial stock exchange object. + +VERSION + + version 0.01 + +SYNOPSIS + + use Finance::Exchange; + + my $exchange_symbol = 'LSE'; # London Stocks Exchange + my $exchange = Finance::Exchange->create_exchange($exchange_symbol); + +DESCRIPTION + + This is a generic representation of a financial stock exchange. + + USAGE + + my $exchange = Finance::Exchange->create_exchange('LSE'); + is $exchange->symbol, 'LSE'; + is $exchange->display_name, 'London Stock Exchange'; + is $exchange->trading_days, 'weekdays'; + is $exchange->trading_timezone, 'Europe/London'; + # The list of days starts on Sunday and is a set of flags indicating whether + # we trade on that day or not + is $exchange->trading_days_list, [ 0, 1, 1, 1, 1, 1, 0 ]; + is $exchange->market_times, { ... }; + is $exchange->delay_amount, 15, 'LSE minimum delay is 15 minutes'; + is $exchange->currency, 'GBP', 'LSE is traded in pound sterling'; + is $exchange->trading_date_can_differ, 0, 'only applies to AU/NZ'; + ... + + create_exchange + + Exchange object constructor. + +ATTRIBUTES + + display_name + + Exchange display name, e.g. London Stock Exchange. + + symbol + + Exchange symbol, e.g. LSE to represent London Stocks Exchange. + + trading_days + + An exchange's trading day category. + + For example, an exchange that trades from Monday to Friday is given a + trading days category of 'weekdays'. + + The list is enumerated in the exchanges_trading_days_aliases.yml file. + + trading_timezone + + The timezone in which the exchange conducts business. + + This should be a string which will allow the standard DateTime module + to find the proper information. + + trading_days_list + + List the trading day index which is defined in + exchanges_trading_days_aliases.yml. + + An example of a 'weekdays' trading days list is as follow: - 0 # Sun - + 1 # Mon - 1 # Tues - 1 # Wed - 1 # Thurs - 1 # Fri - 0 # Sat + + market_times + + A hash reference of human-readable exchange trading times in Greenwich + Mean Time (GMT). + + The trading times are broken into three categories: + + 1. standard - which represents the trading times in non Day Light + Saving (DST) period. 2. dst - which represents the trading time in DST + period. 3. partial_trading - which represents the trading breaks (e.g. + lunch break) in a trading day + + delay_amount + + The acceptable delay amount of feed on this exchange, in minutes. + Default is 60 minutes. + + currency + + The currency in which the exchange is traded in. + + trading_date_can_differ + + A boolean flag to indicate if an exchange would open on the previous + GMT date due to DST. + diff --git a/Finance-Exchange-0.02/cpanfile b/Finance-Exchange-0.02/cpanfile new file mode 100644 index 0000000..e30bb71 --- /dev/null +++ b/Finance-Exchange-0.02/cpanfile @@ -0,0 +1,12 @@ +requires 'Moose'; +requires 'Time::Duration::Concise::Localize'; +requires 'Clone'; +requires 'File::ShareDir'; +requires 'YAML::XS'; + +on test => sub { + requires 'Test::More', '>= 0.98'; + requires 'Test::Most', '>= 0.34'; + requires 'Test::FailWarnings', '>= 0.008'; + requires 'Test::Exception'; +}; diff --git a/Finance-Exchange-0.02/dist.ini b/Finance-Exchange-0.02/dist.ini new file mode 100644 index 0000000..2bae747 --- /dev/null +++ b/Finance-Exchange-0.02/dist.ini @@ -0,0 +1,13 @@ +name = Finance-Exchange +author = DERIV +license = Perl_5 +copyright_holder = Deriv Services Ltd +copyright_year = 2022 + +[@Author::DERIV] +allow_dirty = lib/Finance/Exchange.pm +-remove = PodInherit +[PerlTidy] +perltidyrc = t/rc/perltidyrc +[Test::Perl::Critic] +critic_config = t/rc/perlcriticrc diff --git a/Finance-Exchange-0.02/lib/Finance/Exchange.pm b/Finance-Exchange-0.02/lib/Finance/Exchange.pm new file mode 100644 index 0000000..77028e6 --- /dev/null +++ b/Finance-Exchange-0.02/lib/Finance/Exchange.pm @@ -0,0 +1,243 @@ +package Finance::Exchange; + +use Moose; + +use Time::Duration::Concise::Localize; +use Clone qw(clone); +use File::ShareDir; +use YAML::XS qw(LoadFile); + +our $VERSION = '0.02'; + +=head1 NAME + +Finance::Exchange - represents a financial stock exchange object. + +=head1 VERSION + +version 0.01 + +=head1 SYNOPSIS + + use Finance::Exchange; + + my $exchange_symbol = 'LSE'; # London Stocks Exchange + my $exchange = Finance::Exchange->create_exchange($exchange_symbol); + +=head1 DESCRIPTION + +This is a generic representation of a financial stock exchange. + +=head2 USAGE + + my $exchange = Finance::Exchange->create_exchange('LSE'); + is $exchange->symbol, 'LSE'; + is $exchange->display_name, 'London Stock Exchange'; + is $exchange->trading_days, 'weekdays'; + is $exchange->trading_timezone, 'Europe/London'; + # The list of days starts on Sunday and is a set of flags indicating whether + # we trade on that day or not + is $exchange->trading_days_list, [ 0, 1, 1, 1, 1, 1, 0 ]; + is $exchange->market_times, { ... }; + is $exchange->delay_amount, 15, 'LSE minimum delay is 15 minutes'; + is $exchange->currency, 'GBP', 'LSE is traded in pound sterling'; + is $exchange->trading_date_can_differ, 0, 'only applies to AU/NZ'; + ... + +=cut + +my ($cached_objects, $exchange_config, $trading_day_aliases); + +BEGIN { + $exchange_config = YAML::XS::LoadFile(File::ShareDir::dist_file('Finance-Exchange', 'exchange.yml')); + $trading_day_aliases = YAML::XS::LoadFile(File::ShareDir::dist_file('Finance-Exchange', 'exchanges_trading_days_aliases.yml')); +} + +=head2 create_exchange + +Exchange object constructor. + +=cut + +sub create_exchange { + my ($class, $symbol) = @_; + + die 'symbol is required' unless $symbol; + + if (my $cached = $cached_objects->{$symbol}) { + return $cached; + } + + my $params_ref = clone($exchange_config->{$symbol}); + die 'Config for exchange[' . $symbol . '] not specified in exchange.yml' unless $params_ref; + + $params_ref->{_market_times} = delete $params_ref->{market_times}; + my $new = $class->new($params_ref); + $cached_objects->{$symbol} = $new; + + return $new; +} + +=head1 ATTRIBUTES + +=head2 display_name + +Exchange display name, e.g. London Stock Exchange. + +=head2 symbol + +Exchange symbol, e.g. LSE to represent London Stocks Exchange. + +=head2 trading_days + +An exchange's trading day category. + +For example, an exchange that trades from Monday to Friday is given a trading days category of 'weekdays'. + +The list is enumerated in the exchanges_trading_days_aliases.yml file. + +=head2 trading_timezone + +The timezone in which the exchange conducts business. + +This should be a string which will allow the standard DateTime module to find the proper information. + +=cut + +has [ + qw( display_name symbol trading_days trading_timezone + ) +] => ( + is => 'ro', + required => 1, +); + +has _market_times => ( + is => 'ro', + required => 1, +); + +=head2 trading_days_list + +List the trading day index which is defined in exchanges_trading_days_aliases.yml. + +An example of a 'weekdays' trading days list is as follow: +- 0 # Sun +- 1 # Mon +- 1 # Tues +- 1 # Wed +- 1 # Thurs +- 1 # Fri +- 0 # Sat + +=cut + +has trading_days_list => ( + is => 'ro', + lazy_build => 1, +); + +sub _build_trading_days_list { + my $self = shift; + + return $trading_day_aliases->{$self->trading_days}; +} + +=head2 market_times + +A hash reference of human-readable exchange trading times in Greenwich Mean Time (GMT). + +The trading times are broken into three categories: + +1. standard - which represents the trading times in non Day Light Saving (DST) period. + 2. dst - which represents the trading time in DST period. + 3. partial_trading - which represents the trading breaks (e.g. lunch break) in a trading day + +=cut + +has market_times => ( + is => 'ro', + lazy_build => 1, +); + +sub _build_market_times { + my $self = shift; + + my $mt = $self->_market_times; + my $market_times; + + foreach my $key (keys %$mt) { + foreach my $trading_segment (keys %{$mt->{$key}}) { + if ($trading_segment eq 'day_of_week_extended_trading_breaks') { next; } + elsif ($trading_segment ne 'trading_breaks') { + $market_times->{$key}->{$trading_segment} = Time::Duration::Concise::Localize->new( + interval => $mt->{$key}->{$trading_segment}, + ); + } else { + my $break_intervals = $mt->{$key}->{$trading_segment}; + my @converted; + foreach my $int (@$break_intervals) { + my $open_int = Time::Duration::Concise::Localize->new( + interval => $int->[0], + ); + my $close_int = Time::Duration::Concise::Localize->new( + interval => $int->[1], + ); + push @converted, [$open_int, $close_int]; + } + $market_times->{$key}->{$trading_segment} = \@converted; + } + } + } + + return $market_times; +} + +=head2 delay_amount + +The acceptable delay amount of feed on this exchange, in minutes. Default is 60 minutes. + +=cut + +has delay_amount => ( + is => 'ro', + isa => 'Num', + default => 60, +); + +=head2 currency + +The currency in which the exchange is traded in. + +=cut + +has currency => ( + is => 'ro', +); + +=head2 trading_date_can_differ + +A boolean flag to indicate if an exchange would open on the previous GMT date due to DST. + +=cut + +has trading_date_can_differ => ( + is => 'ro', + lazy_build => 1, +); + +sub _build_trading_date_can_differ { + my $self = shift; + + my @premidnight_opens = + grep { $_->seconds < 0 } + map { $self->market_times->{$_}->{daily_open} } + grep { exists $self->market_times->{$_}->{daily_open} } + keys %{$self->market_times}; + return (scalar @premidnight_opens) ? 1 : 0; +} + +no Moose; +__PACKAGE__->meta->make_immutable; + +1; diff --git a/Finance-Exchange-0.02/share/exchange.yml b/Finance-Exchange-0.02/share/exchange.yml new file mode 100644 index 0000000..04ab48e --- /dev/null +++ b/Finance-Exchange-0.02/share/exchange.yml @@ -0,0 +1,1608 @@ +--- +ADS: + currency: AED + delay_amount: '1440' + display_name: Abu Dhabi Exchange + market_times: + partial_trading: {} + standard: + daily_close: 10h + daily_open: 6h + daily_settlement: 13h + symbol: ADS + trading_days: sun_thru_thu + trading_timezone: Asia/Dubai +ASX: + currency: AUD + delay_amount: '15' + display_name: Australian Stock Exchange + market_times: + dst: + daily_close: 5h + daily_open: -1h + daily_settlement: 8h + partial_trading: + dst_close: 3h10m + dst_open: -1h + standard_close: 4h10m + standard_open: 0s + standard: + daily_close: 6h + daily_open: 0s + daily_settlement: 9h + symbol: ASX + trading_days: weekdays + trading_timezone: Australia/Sydney +ASX_OTC: + currency: AUD + delay_amount: '0' + display_name: OTC Australia Stock Exchange + market_times: + dst: + daily_close: 19h + daily_open: 0s + daily_settlement: 21h + trading_breaks: + - - 5h30m + - 6h30m + partial_trading: {} + standard: + daily_close: 20h + daily_open: 0s + daily_settlement: 22h + trading_breaks: + - - 6h30m + - 7h30m + symbol: ASX_OTC + trading_days: weekdays + trading_timezone: Australia/Sydney +ASX_S: + currency: AUD + delay_amount: '20' + display_name: Australian Stock Exchange + market_times: + dst: + daily_close: 5h + daily_open: -1h + daily_settlement: 8h + partial_trading: + dst_close: 3h10m + dst_open: -1h + standard_close: 4h10m + standard_open: 0s + standard: + daily_close: 6h + daily_open: 0s + daily_settlement: 9h + symbol: ASX_S + trading_days: weekdays + trading_timezone: Australia/Sydney +BI: + currency: EUR + delay_amount: '1440' + display_name: Borsa Italiana + market_times: + dst: + daily_close: 15h25m + daily_open: 7h + daily_settlement: 18h25m + partial_trading: {} + standard: + daily_close: 16h25m + daily_open: 8h + daily_settlement: 19h25m + symbol: BI + trading_days: weekdays + trading_timezone: Europe/Rome +BIS: + currency: TRY + delay_amount: '0' + display_name: Borsa Istanbul + market_times: + dst: + daily_close: 14h30m + daily_open: 6h35m + daily_settlement: 17h30m + trading_breaks: + - - 9h30m + - 10h30m + partial_trading: + dst_close: 9h30m + dst_open: 6h35m + standard_close: 10h30m + standard_open: 7h35m + standard: + daily_close: 15h30m + daily_open: 7h35m + daily_settlement: 18h30m + trading_breaks: + - - 10h30m + - 11h30m + symbol: BIS + trading_days: weekdays + trading_timezone: Europe/Istanbul +BM: + currency: EUR + delay_amount: '15' + display_name: Borsa Madrid + market_times: + dst: + daily_close: 15h30m + daily_open: 7h + daily_settlement: 18h30m + partial_trading: + dst_close: 8h + dst_open: 12h + standard_close: 7h + standard_open: 11h + standard: + daily_close: 16h30m + daily_open: 8h + daily_settlement: 19h30m + symbol: BM + trading_days: weekdays + trading_timezone: Europe/Madrid +BM_OTC: + currency: EUR + delay_amount: '0' + display_name: OTC Borsa Madrid + market_times: + dst: + daily_close: 17h + daily_open: 6h + daily_settlement: 19h + partial_trading: {} + standard: + daily_close: 18h + daily_open: 7h + daily_settlement: 20h + symbol: BM_OTC + trading_days: weekdays + trading_timezone: Europe/Madrid +BMF: + currency: BRL + delay_amount: '1440' + display_name: Borsa de Mercadorias Future Exchange + market_times: + dst: + daily_close: 18h55m + daily_open: 10h + daily_settlement: 23h59m59s + partial_trading: {} + standard: + daily_close: 19h55m + daily_open: 11h + daily_settlement: 23h59m59s + symbol: BMF + trading_days: weekdays + trading_timezone: EST +BOVESPA: + currency: BRL + delay_amount: '15' + display_name: BOVESPA + market_times: + dst: + daily_close: 18h55m + daily_open: 12h00m + daily_settlement: 21h55m + partial_trading: {} + standard: + daily_close: 19h55m + daily_open: 13h00m + daily_settlement: 22h55m + symbol: BOVESPA + trading_days: weekdays + trading_timezone: America/Sao_Paulo +BRENT_OTC: + currency: USD + delay_amount: '0' + display_name: OTC BRENT EXCHANGE + market_times: + dst: + daily_close: 21h + daily_open: 0 + daily_settlement: 23h59m59s + standard: + daily_close: 22h + daily_open: 1h + daily_settlement: 23h59m59s + symbol: BRENT_OTC + trading_days: weekdays + trading_timezone: UTC +BSE: + currency: INR + delay_amount: '10' + display_name: Bombay Stock Exchange + market_times: + partial_trading: {} + standard: + daily_close: 10h00m + daily_open: 03h45m + daily_settlement: 13h + symbol: BSE + trading_days: weekdays + trading_timezone: Asia/Kolkata +CME: + currency: USD + delay_amount: '1440' + display_name: Chicago Board of Trade Exchange + market_times: + dst: + daily_close: 21h15m + daily_open: -2h + daily_settlement: 23h59m59s + partial_trading: + dst_close: 17h15m + dst_open: -1h + standard_close: 18h15m + standard_open: -2h + standard: + daily_close: 22h15m + daily_open: -1h + daily_settlement: 23h59m59s + symbol: CME + trading_days: weekdays + trading_timezone: America/New_York +CME_OTC: + currency: USD + delay_amount: '0' + display_name: OTC Chicago Board of Trade Exchange + market_times: + dst: + daily_close: 20h + daily_open: 13h30m + daily_settlement: 22h + partial_trading: {} + standard: + daily_close: 21h + daily_open: 14h30m + daily_settlement: 23h + symbol: CME_OTC + trading_days: weekdays + trading_timezone: America/New_York +DFM: + currency: AED + delay_amount: '1440' + display_name: Dubai Exchange + market_times: + partial_trading: {} + standard: + daily_close: 9h45m + daily_open: 6h + daily_settlement: 12h45m + symbol: DFM + trading_days: sun_thru_thu + trading_timezone: Asia/Dubai +EEI_AM: + currency: EUR + delay_amount: '1440' + display_name: Euronext Derivatives Amsterdam Exchange + market_times: + dst: + daily_close: 20h00m + daily_open: 6h + daily_settlement: 23h59m59s + partial_trading: + dst_close: 11h + dst_open: 6h + standard_close: 12h + standard_open: 7h + standard: + daily_close: 21h00m + daily_open: 7h + daily_settlement: 23h59m59s + symbol: EEI_AM + trading_days: weekdays + trading_timezone: Europe/Berlin +EEI_BU: + currency: EUR + delay_amount: '1440' + display_name: Euronext Derivatives Brussels Exchange + market_times: + dst: + daily_close: 15h35m + daily_open: 7h + daily_settlement: 23h59m59s + partial_trading: + dst_close: 11h + dst_open: 7h + standard_close: 12h + standard_open: 8h + standard: + daily_close: 16h35m + daily_open: 8h + daily_settlement: 23h59m59s + symbol: EEI_BU + trading_days: weekdays + trading_timezone: Europe/Berlin +EEI_LI: + currency: EUR + delay_amount: '1440' + display_name: Euronext Derivatives Lisbon Exchange + market_times: + dst: + daily_close: 15h40m + daily_open: 7h + daily_settlement: 23h59m59s + partial_trading: + dst_close: 11h + dst_open: 7h + standard_close: 12h + standard_open: 8h + standard: + daily_close: 16h40m + daily_open: 8h + daily_settlement: 23h59m59s + symbol: EEI_LI + trading_days: weekdays + trading_timezone: Europe/Berlin +EEI_PA: + currency: EUR + delay_amount: '1440' + display_name: Euronext Derivatives Paris Exchange + market_times: + dst: + daily_close: 20h00m + daily_open: 6h + daily_settlement: 23h59m59s + partial_trading: + dst_close: 11h + dst_open: 6h + standard_close: 12h + standard_open: 7h + standard: + daily_close: 21h00m + daily_open: 7h + daily_settlement: 23h59m59s + symbol: EEI_PA + trading_days: weekdays + trading_timezone: Europe/Berlin +EGX: + currency: EGP + delay_amount: '1440' + display_name: Egypt Exchange + market_times: + partial_trading: {} + standard: + daily_close: 12h30m + daily_open: 8h + daily_settlement: 15h30m + symbol: EGX + trading_days: sun_thru_thu + trading_timezone: Asia/Dubai +EUREX: + currency: EUR + delay_amount: '1440' + display_name: EUREX + market_times: + dst: + daily_close: 20h + daily_open: 5h50m + daily_settlement: 23h59m59s + partial_trading: {} + standard: + daily_close: 21h + daily_open: 6h50m + daily_settlement: 23h59m59s + symbol: EUREX + trading_days: weekdays + trading_timezone: Europe/Berlin +EUREX_SWISS: + currency: CHF + delay_amount: '1440' + display_name: EUREX SWISS Exchange + market_times: + dst: + daily_close: 20h + daily_open: 5h50m + daily_settlement: 23h59m59s + partial_trading: {} + standard: + daily_close: 21h + daily_open: 6h50m + daily_settlement: 23h59m59s + symbol: EUREX_SWISS + trading_days: weekdays + trading_timezone: Europe/Zurich +EURONEXT: + currency: EUR + delay_amount: 0 + display_name: EURONEXT + market_times: + dst: + daily_close: 15h30m + daily_open: 7h + daily_settlement: 18h30m + partial_trading: + dst_close: 13h05m + dst_open: 7h + standard_close: 14h05m + standard_open: 8h + standard: + daily_close: 16h30m + daily_open: 8h + daily_settlement: 19h30m + symbol: EURONEXT + trading_days: weekdays + trading_timezone: Europe/Paris +EURONEXT_OTC: + currency: EUR + delay_amount: '0' + display_name: OTC EURONEXT + market_times: + dst: + daily_close: 19h30m + daily_open: 6h + daily_settlement: 21h30m + partial_trading: {} + standard: + daily_close: 20h30m + daily_open: 7h + daily_settlement: 22h30m + symbol: EURONEXT_OTC + trading_days: weekdays + trading_timezone: Europe/Paris +FOREX: + delay_amount: '0' + display_name: Forex + market_times: + partial_trading: {} + standard: + daily_close: 23h59m59s + daily_open: 0s + daily_settlement: 23h59m59s + symbol: FOREX + trading_days: weekdays + trading_timezone: UTC +METAL: + delay_amount: '0' + display_name: Metal + market_times: + partial_trading: + standard_close: 16h30m + standard_open: 0s + dst: + daily_close: 23h59m59s + daily_open: 0s + daily_settlement: 23h59m59s + trading_breaks: + - - 21h + - 22h + standard: + daily_close: 23h59m59s + daily_open: 0s + daily_settlement: 23h59m59s + trading_breaks: + - - 22h + - 23h + symbol: METAL + trading_days: weekdays + trading_timezone: America/New_York +FS: + currency: GBP + delay_amount: '1440' + display_name: FS + market_times: + dst: + daily_close: 20h00m + daily_open: 13h30m + daily_settlement: 23h59m59s + partial_trading: {} + standard: + daily_close: 21h00m + daily_open: 14h30m + daily_settlement: 23h59m59s + symbol: FS + trading_days: weekdays + trading_timezone: Europe/London +FSE: + currency: EUR + delay_amount: '15' + display_name: Frankfurt Stock Exchange + market_times: + dst: + daily_close: 15h30m + daily_open: 7h + daily_settlement: 18h30m + partial_trading: + dst_close: 12h + dst_open: 7h + standard_close: 13h + standard_open: 8h + standard: + daily_close: 16h30m + daily_open: 8h + daily_settlement: 19h30m + symbol: FSE + trading_days: weekdays + trading_timezone: Europe/Berlin +FSE_OTC: + currency: EUR + delay_amount: '0' + display_name: OTC Frankfurt Stock Exchange + market_times: + dst: + daily_close: 19h30m + daily_open: 6h + daily_settlement: 21h30m + partial_trading: {} + standard: + daily_close: 20h30m + daily_open: 7h + daily_settlement: 22h30m + symbol: FSE_OTC + trading_days: weekdays + trading_timezone: Europe/Berlin +HKF: + currency: HKD + delay_amount: '1440' + display_name: Hong Kong Future Exchange + market_times: + partial_trading: + standard_close: 4h + standard_open: 1h15m + standard: + afternoon_open: 5h + daily_close: 15h45m + daily_open: 1h15m + daily_settlement: 23h59m59s + morning_close: 4h + symbol: HKF + trading_days: weekdays + trading_timezone: Asia/Hong_Kong +HKSE: + currency: HKD + delay_amount: '60' + display_name: Hong Kong Stock Exchange + market_times: + partial_trading: + standard_close: 3h59m + standard_open: 1h30m + standard: + daily_close: 7h40m + daily_open: 1h30m + daily_settlement: 10h40m + trading_breaks: + - - 3h59m + - 5h00m + symbol: HKSE + trading_days: weekdays + trading_timezone: Asia/Hong_Kong +HKSE_OTC: + currency: HKD + delay_amount: '0' + display_name: OTC Hong Kong Stock Exchange + market_times: + partial_trading: + standard_close: 4h + standard_open: 1h30m + standard: + daily_close: 8h + daily_open: 1h30m + daily_settlement: 10h + trading_breaks: + - - 4h + - 5h + symbol: HKSE_OTC + trading_days: weekdays + trading_timezone: Asia/Hong_Kong +ICE_LIFFE: + currency: GBP + delay_amount: '1440' + display_name: LIFFE Exchange + market_times: + dst: + daily_close: 20h + daily_open: 00h00m + daily_settlement: 23h59m59s + partial_trading: + dst_close: 11h + dst_open: 00h00m + standard_close: 12h + standard_open: 1h + standard: + daily_close: 21h + daily_open: 1h + daily_settlement: 23h59m59s + symbol: ICE_LIFFE + trading_days: weekdays + trading_timezone: UTC +IDM: + currency: EUR + delay_amount: '1440' + display_name: Borsa Italiana Future Exchange + market_times: + dst: + daily_close: 15h40m + daily_open: 7h + daily_settlement: 23h59m59s + partial_trading: + dst_close: 11h + dst_open: 7h + standard_close: 12h + standard_open: 8h + standard: + daily_close: 16h40m + daily_open: 8h + daily_settlement: 23h59m59s + symbol: IDM + trading_days: weekdays + trading_timezone: Europe/Rome +ISE: + currency: EUR + delay_amount: '15' + display_name: Irish Stock Exchange + market_times: + dst: + daily_close: 15h30m + daily_open: 7h + daily_settlement: 21h30m + partial_trading: + dst_close: 11h30m + dst_open: 7h + standard_close: 12h30m + standard_open: 8h + standard: + daily_close: 16h30m + daily_open: 8h + daily_settlement: 22h30m + symbol: ISE + trading_days: weekdays + trading_timezone: Europe/Dublin +JSC: + currency: IDR + delay_amount: '1440' + display_name: Jakarta Stock Exchange + market_times: + partial_trading: {} + standard: + daily_close: 8h50m + daily_open: 2h00m + daily_settlement: 11h50m + day_of_week_extended_trading_breaks: 5 + trading_breaks: + - - 5h00m + - 6h30m + - - 4h30m + - 7h00m + symbol: JSC + trading_days: weekdays + trading_timezone: Asia/Jakarta +JSE: + currency: ZAR + delay_amount: '30' + display_name: Johannesburg Stock Exchange + market_times: + partial_trading: + standard_close: 10h + standard_open: 7h + standard: + daily_close: 14h50m + daily_open: 7h + daily_settlement: 17h50m + symbol: JSE + trading_days: weekdays + trading_timezone: Africa/Johannesburg +JSE_OTC: + currency: ZAR + delay_amount: '0' + display_name: OTC Johannesburg Stock Exchange + market_times: + dst: + daily_close: 14h30m + daily_open: 5h30m + daily_settlement: 17h30m + partial_trading: {} + standard: + daily_close: 15h30m + daily_open: 6h30m + daily_settlement: 18h30m + symbol: JSE_OTC + trading_days: weekdays + trading_timezone: Africa/Johannesburg +KRX: + currency: KRW + delay_amount: '1440' + display_name: Korean Stock Exchange + market_times: + partial_trading: + standard_close: 6h + standard_open: 1h + standard: + daily_close: 5h50m + daily_open: 0s + daily_settlement: 9h + symbol: KRX + trading_days: weekdays + trading_timezone: Asia/Seoul +KSE: + currency: KWD + delay_amount: 0 + display_name: Kuwait Stock Exchange + market_times: + partial_trading: {} + standard: + daily_close: 9h30m + daily_open: 6h + daily_settlement: 12h30m + symbol: KRX + trading_days: sun_thru_thu + trading_timezone: Asia/Kuwait +LSE: + currency: GBP + delay_amount: '15' + display_name: London Stock Exchange + market_times: + dst: + daily_close: 15h30m + daily_open: 7h + daily_settlement: 18h30m + partial_trading: + dst_close: 11h30m + dst_open: 7h + standard_close: 12h30m + standard_open: 8h + standard: + daily_close: 16h30m + daily_open: 8h + daily_settlement: 19h30m + symbol: LSE + trading_days: weekdays + trading_timezone: Europe/London +LSE_OTC: + currency: GBP + delay_amount: '0' + display_name: OTC London Stock Exchange + market_times: + dst: + daily_close: 20h + daily_open: 6h + daily_settlement: 22h + partial_trading: {} + standard: + daily_close: 21h + daily_open: 7h + daily_settlement: 23h + symbol: LSE_OTC + trading_days: weekdays + trading_timezone: Europe/London +MICEX: + currency: RUB + delay_amount: '0' + display_name: Moscow MICEX Exchange + market_times: + partial_trading: {} + standard: + daily_close: 15h30m + daily_open: 7h + daily_settlement: 18h30m + symbol: MICEX + trading_days: weekdays + trading_timezone: Europe/Moscow +MEFF: + currency: EUR + delay_amount: '1440' + display_name: Marid Future Exchange + market_times: + dst: + daily_close: 18h + daily_open: 7h + daily_settlement: 23h59m59s + partial_trading: {} + standard: + daily_close: 19h + daily_open: 8h + daily_settlement: 23h59m59s + symbol: MEFF + trading_days: weekdays + trading_timezone: Europe/Madrid +MOF: + currency: USD + delay_amount: '1440' + display_name: Russian future Exchange + market_times: + partial_trading: ~ + standard: + afternoon_open: 16h30m + daily_close: 20h50m + daily_open: 7h + daily_settlement: 23h59m59s + morning_close: 15h45m + symbol: MOF + trading_days: weekdays + trading_timezone: UTC +NASDAQ: + currency: USD + delay_amount: '60' + display_name: NASDAQ + market_times: + dst: + daily_close: 20h + daily_open: 13h30m + daily_settlement: 22h59m59s + partial_trading: + dst_close: 17h + dst_open: 13h30m + standard_close: 18h + standard_open: 14h30m + standard: + daily_close: 21h + daily_open: 14h30m + daily_settlement: 23h59m59s + symbol: NASDAQ + trading_days: weekdays + trading_timezone: America/New_York +NASDAQ_OTC: + currency: USD + delay_amount: '0' + display_name: NASDAQ_OTC + market_times: + dst: + daily_close: 20h + daily_open: 6h + daily_settlement: 22h + partial_trading: {} + standard: + daily_close: 21h + daily_open: 7h + daily_settlement: 23h + symbol: NASDAQ_OTC + trading_days: weekdays + trading_timezone: America/New_York +NASDAQ_INDEX: + currency: USD + delay_amount: '60' + display_name: NASDAQ + market_times: + dst: + daily_close: 20h + daily_open: 13h30m + daily_settlement: 22h59m59s + partial_trading: + dst_close: 17h + dst_open: 13h30m + standard_close: 18h + standard_open: 14h30m + standard: + daily_close: 21h + daily_open: 14h30m + daily_settlement: 23h59m59s + symbol: NASDAQ_INDEX + trading_days: weekdays + trading_timezone: America/New_York +NSE: + currency: INR + delay_amount: '15' + display_name: India National Stock Exchange + market_times: + partial_trading: {} + standard: + daily_close: 10h00m + daily_open: 03h45m + daily_settlement: 13h + symbol: NSE + trading_days: weekdays + trading_timezone: Asia/Calcutta +NSE_OTC: + currency: INR + delay_amount: '0' + display_name: OTC India National Stock Exchange + market_times: + dst: + daily_close: 9h + daily_open: 0s + daily_settlement: 12h + partial_trading: {} + standard: + daily_close: 10h + daily_open: 1h + daily_settlement: 13h + symbol: NSE_OTC + trading_days: weekdays + trading_timezone: Asia/Calcutta +NYSE: + currency: USD + delay_amount: '1440' + display_name: New York Stock Exchange + market_times: + dst: + daily_close: 20h + daily_open: 13h30m + daily_settlement: 22h59m59s + partial_trading: + dst_close: 17h + dst_open: 13h30m + standard_close: 18h + standard_open: 14h30m + standard: + daily_close: 21h + daily_open: 14h30m + daily_settlement: 23h59m59s + symbol: NYSE + trading_days: weekdays + trading_timezone: America/New_York +NYSE_OTC: + currency: USD + delay_amount: '0' + display_name: OTC New York Stock Exchange + market_times: + dst: + daily_close: 20h + daily_open: 6h + daily_settlement: 22h + partial_trading: {} + standard: + daily_close: 21h + daily_open: 7h + daily_settlement: 23h + symbol: NYSE_OTC + trading_days: weekdays + trading_timezone: America/New_York +NYSE_SPC: + currency: USD + delay_amount: '1440' + display_name: New York Stock Exchange + market_times: + dst: + daily_close: 20h + daily_open: 13h30m + daily_settlement: 22h59m59s + partial_trading: + dst_close: 17h + dst_open: 13h30m + standard_close: 18h + standard_open: 14h30m + standard: + daily_close: 21h + daily_open: 14h30m + daily_settlement: 23h59m59s + symbol: NYSE_SPC + trading_days: weekdays + trading_timezone: America/New_York +NYSE_SPC_OTC: + currency: USD + delay_amount: '0' + display_name: OTC New York Stock Exchange + market_times: + dst: + daily_close: 20h + daily_open: 6h + daily_settlement: 22h + partial_trading: {} + standard: + daily_close: 21h + daily_open: 7h + daily_settlement: 23h + symbol: NYSE_SPC_OTC + trading_days: weekdays + trading_timezone: America/New_York +NZSE: + currency: NZD + delay_amount: '15' + display_name: New Zealand Stock Exchange + market_times: + dst: + daily_close: 6h + daily_open: -1h + daily_settlement: 9h + partial_trading: + dst_close: 6h + dst_open: -1h + standard_close: 5h + standard_open: -2h + standard: + daily_close: 5h + daily_open: -2h + daily_settlement: 8h + symbol: NZSE + trading_days: weekdays + trading_timezone: Pacific/Auckland +ODLS: + currency: USD + delay_amount: '0' + display_name: ODL Securities + market_times: + dst: + daily_close: 18h30m + daily_open: 7h15m + daily_settlement: 23h59m59s + partial_trading: + dst_close: 11h30m + dst_open: 7h15m + standard_close: 12h30m + standard_open: 8h15m + standard: + daily_close: 19h30m + daily_open: 8h15m + daily_settlement: 23h59m59s + symbol: ODLS + trading_days: weekdays + trading_timezone: Europe/London +OIL_OTC: + currency: USD + delay_amount: '0' + display_name: OTC Oil Exchange + market_times: + dst: + daily_close: 24h + daily_open: 0 + daily_settlement: 23h59m59s + day_of_week_extended_trading_breaks: 5 + trading_breaks: + - - 21h - 22h + - 21h - 24h + standard: + daily_close: 24h + daily_open: 0 + daily_settlement: 23h59m59s + day_of_week_extended_trading_breaks: 5 + trading_breaks: + - - 22h - 23h + - 22h - 24h + symbol: OIL_OTC + trading_days: weekdays + trading_timezone: UTC +OMX: + currency: SEK + delay_amount: '15' + display_name: OMX + market_times: + dst: + daily_close: 15h25m + daily_open: 7h + daily_settlement: 18h25m + partial_trading: + dst_close: 11h + dst_open: 7h + standard_close: 12h + standard_open: 8h + standard: + daily_close: 16h25m + daily_open: 8h + daily_settlement: 19h25m + symbol: OMX + trading_days: weekdays + trading_timezone: Europe/Stockholm +OSE: + currency: JPY + delay_amount: '1440' + display_name: Osaka Exchange + market_times: + partial_trading: ~ + standard: + afternoon_open: 7h30m + daily_close: 17h55m + daily_open: 0s + daily_settlement: 23h59m59s + morning_close: 6h15m + symbol: OSE + trading_days: weekdays + trading_timezone: Asia/Tokyo +OSLO: + currency: NOK + delay_amount: '15' + display_name: OSLO + market_times: + dst: + daily_close: 14h30m + daily_open: 07h00m + daily_settlement: 17h30m + partial_trading: + dst_close: 11h + dst_open: 7h + standard_close: 12h + standard_open: 8h + standard: + daily_close: 15h30m + daily_open: 08h00m + daily_settlement: 18h30m + symbol: OSLO + trading_days: weekdays + trading_timezone: Europe/Oslo +RANDOM: + delay_amount: '0' + display_name: Randoms + market_times: + partial_trading: {} + standard: + daily_close: 23h59m59s + daily_open: 0s + daily_settlement: 23h59m59s + symbol: RANDOM + trading_days: everyday + trading_timezone: UTC +RANDOM_NOCTURNE: + delay_amount: '0' + display_name: Nocturnal Randoms + market_times: + partial_trading: {} + standard: + daily_close: 11h59m59s + daily_open: -12h + daily_settlement: 11h59m59s + symbol: RANDOM_NOCTURNE + trading_days: everyday + trading_timezone: UTC +RTS: + currency: USD + delay_amount: '15' + display_name: RTS + market_times: + partial_trading: {} + standard: + daily_close: 15h45m + daily_open: 07h00m + daily_settlement: 18h45m + symbol: RTS + trading_days: weekdays + trading_timezone: Europe/Moscow +SAS: + currency: SAR + delay_amount: '1440' + display_name: Saudi Arabic Exchange + market_times: + partial_trading: {} + standard: + daily_close: 12h30m + daily_open: 8h + daily_settlement: 15h30m + symbol: SAS + trading_days: sun_thru_thu + trading_timezone: Asia/Dubai +SES: + currency: SGD + delay_amount: '1440' + display_name: Singapore Stock Exchange + market_times: + partial_trading: + standard_close: 4h30m + standard_open: 1h + standard: + daily_close: 9h + daily_open: 1h + daily_settlement: 12h + symbol: SES + trading_days: weekdays + trading_timezone: Asia/Singapore +SFE: + currency: AUD + delay_amount: '1440' + display_name: Sydney Future Exchange + market_times: + dst: + afternoon_open: 6h30m + daily_close: 8h00m + daily_open: -2h50m + daily_settlement: 23h59m59s + morning_close: 6h00m + partial_trading: + dst_close: 3h10m + dst_open: -1h + standard_close: 4h10m + standard_open: -1h + standard: + afternoon_open: 7h30m + daily_close: 9h00m + daily_open: -1h50m + daily_settlement: 23h59m59s + morning_close: 7h00m + symbol: SFE + trading_days: weekdays + trading_timezone: Australia/Sydney +SGX: + currency: SGD + delay_amount: '1440' + display_name: Singapore Derivatives Exchange + market_times: + partial_trading: + standard_close: 4h30m + standard_open: 1h + standard: + daily_close: 9h + daily_open: 1h + daily_settlement: 23h59m59s + symbol: SGX + trading_days: weekdays + trading_timezone: Asia/Singapore +SGX_OTC: + currency: SGD + delay_amount: '0' + display_name: OTC Singapore Derivatives Exchange + market_times: + partial_trading: {} + standard: + daily_close: 9h + daily_open: 1h + daily_settlement: 23h + symbol: SGX_OTC + trading_days: weekdays + trading_timezone: Asia/Singapore +SP_GLOBAL: + currency: USD + delay_amount: '1440' + display_name: CME_GLOBAL + market_times: + dst: + daily_close: 20h00m + daily_open: 13h30m + daily_settlement: 23h59m59s + partial_trading: {} + standard: + daily_close: 21h00m + daily_open: 14h30m + daily_settlement: 23h59m59s + symbol: SP_GLOBAL + trading_days: weekdays + trading_timezone: America/Chicago +SP_GSCI: + currency: USD + delay_amount: '1440' + display_name: SP_GSCI + market_times: + dst: + daily_close: 15h30m + daily_open: 07h00m + daily_settlement: 23h59m59s + partial_trading: + dst_close: 11h30m + dst_open: 07h00m + standard_close: 12h30m + standard_open: 08h00m + standard: + daily_close: 16h30m + daily_open: 08h00m + daily_settlement: 23h59m59s + symbol: SP_GSCI + trading_days: weekdays + trading_timezone: America/Chicago +SSE: + currency: CNY + delay_amount: '15' + display_name: Shanghai Stock Exchange + market_times: + partial_trading: {} + standard: + daily_close: 7h + daily_open: 1h30m + daily_settlement: 10h + trading_breaks: + - - 3h30m + - 5h00m + symbol: SSE + trading_days: weekdays + trading_timezone: Asia/Shanghai +STOXX: + currency: EUR + delay_amount: '20' + display_name: STOXX Exchange + market_times: + dst: + daily_close: 15h30m + daily_open: 7h + daily_settlement: 18h30m + partial_trading: + dst_close: 13h05m + dst_open: 7h + standard_close: 14h05m + standard_open: 8h + standard: + daily_close: 16h30m + daily_open: 8h + daily_settlement: 19h30m + symbol: STOXX + trading_days: weekdays + trading_timezone: Europe/Berlin +STOXX_OTC: + currency: EUR + delay_amount: '0' + display_name: OTC STOXX Exchange + market_times: + dst: + daily_close: 19h + daily_open: 6h + daily_settlement: 21h + partial_trading: {} + standard: + daily_close: 20h + daily_open: 7h + daily_settlement: 22h + symbol: STOXX_OTC + trading_days: weekdays + trading_timezone: Europe/Berlin +SWX: + currency: CHF + delay_amount: '1440' + display_name: Swiss Exchange + market_times: + dst: + daily_close: 15h20m + daily_open: 7h + daily_settlement: 18h20m + partial_trading: {} + standard: + daily_close: 16h20m + daily_open: 8h + daily_settlement: 19h20m + symbol: SWX + trading_days: weekdays + trading_timezone: Europe/Zurich +SWX_OTC: + currency: CHF + delay_amount: '0' + display_name: OTC Swiss Exchange + market_times: + dst: + daily_close: 16h + daily_open: 7h + daily_settlement: 18h + partial_trading: {} + standard: + daily_close: 17h + daily_open: 8h + daily_settlement: 19h + symbol: SWX_OTC + trading_days: weekdays + trading_timezone: Europe/Zurich +SYNEURONEXT: + currency: EUR + delay_amount: '0' + display_name: Synthetic Euronext + market_times: + dst: + daily_close: 20h00m + daily_open: 7h15m + daily_settlement: 20h00m + standard: + daily_close: 21h00m + daily_open: 8h15m + daily_settlement: 21h00m + symbol: SYNEURONEXT + trading_days: weekdays + trading_timezone: Europe/Paris +SYNFSE: + currency: EUR + delay_amount: '0' + display_name: Synthetic FSE + market_times: + dst: + daily_close: 20h + daily_open: 7h15m + daily_settlement: 20h00m + partial_trading: + dst_close: 12h + dst_open: 7h15m + standard_close: 13h + standard_open: 8h15m + standard: + daily_close: 21h00m + daily_open: 8h15m + daily_settlement: 21h00m + symbol: SYNFSE + trading_days: weekdays + trading_timezone: Europe/Berlin +SYNLSE: + currency: GBP + delay_amount: '0' + display_name: Synthetic LSE + market_times: + dst: + daily_close: 20h00m + daily_open: 7h15m + daily_settlement: 20h00m + standard: + daily_close: 21h00m + daily_open: 8h15m + daily_settlement: 21h00m + symbol: SYNLSE + trading_days: weekdays + trading_timezone: Europe/London +SYNNYSE_DJI: + currency: USD + delay_amount: '0' + display_name: Synthetic NYSE + market_times: + dst: + daily_close: 20h + daily_open: 7h15m + daily_settlement: 20h + trading_breaks: + - - 13h20m + - 13h40m + partial_trading: + dst_close: 17h + dst_open: 13h40m + standard_close: 18h + standard_open: 14h40m + standard: + daily_close: 21h + daily_open: 8h15m + daily_settlement: 21h + trading_breaks: + - - 14h20m + - 14h40m + symbol: SYNNYSE_DJI + trading_days: weekdays + trading_timezone: America/New_York +SYNNYSE_SPC: + currency: USD + delay_amount: '0' + display_name: Synthetic NYSE_SPC + market_times: + dst: + daily_close: 20h + daily_open: 7h20m + daily_settlement: 20h + trading_breaks: + - - 13h20m + - 13h40m + partial_trading: + dst_close: 17h + dst_open: 13h40m + standard_close: 18h + standard_open: 14h40m + standard: + daily_close: 21h + daily_open: 8h20m + daily_settlement: 21h + trading_breaks: + - - 14h20m + - 14h40m + symbol: SYNNYSE_SPC + trading_days: weekdays + trading_timezone: America/New_York +SYNSTOXX: + currency: EUR + delay_amount: '0' + display_name: Synthetic STOXX + market_times: + dst: + daily_close: 20h + daily_open: 7h15m + daily_settlement: 20h + standard: + daily_close: 21h + daily_open: 8h15m + daily_settlement: 21h + symbol: SYNSTOXX + trading_days: weekdays + trading_timezone: Europe/Berlin +SYNSWX: + currency: CHF + delay_amount: '0' + display_name: Synthetic SWX + market_times: + dst: + daily_close: 20h + daily_open: 7h + daily_settlement: 20h + partial_trading: ~ + standard: + daily_close: 21h + daily_open: 8h + daily_settlement: 21h + symbol: SYNSWX + trading_days: weekdays + trading_timezone: Europe/Zurich +SYNTSE: + currency: JPY + delay_amount: '0' + display_name: Synthetic TSE + market_times: + partial_trading: ~ + standard: + daily_close: 20h00m + daily_open: 00h15m + daily_settlement: 20h00m + symbol: SYNTSE + trading_days: weekdays + trading_timezone: Asia/Tokyo +SZSE: + currency: CNY + delay_amount: '30' + display_name: Shenzhen Stock Exchange + market_times: + partial_trading: {} + standard: + daily_close: 7h + daily_open: 1h30m + daily_settlement: 10h + trading_breaks: + - - 3h30m + - 5h00m + symbol: SZSE + trading_days: weekdays + trading_timezone: Asia/Shanghai +TRSE: + currency: CAD + delay_amount: '1440' + display_name: Toronto Stock Exchange + market_times: + dst: + daily_close: 20h + daily_open: 13h30m + daily_settlement: 22h59m59s + partial_trading: + dst_close: 17h + dst_open: 13h30m + standard_close: 18h + standard_open: 14h30m + standard: + daily_close: 21h + daily_open: 14h30m + daily_settlement: 23h59m59s + symbol: TRSE + trading_days: weekdays + trading_timezone: America/Toronto +TRSE_OTC: + currency: CAD + delay_amount: '0' + display_name: OTC Toronto Stock Exchange + market_times: + dst: + daily_close: 19h15m + daily_open: 12h30m + daily_settlement: 22h30m + partial_trading: {} + standard: + daily_close: 20h15m + daily_open: 13h30m + daily_settlement: 23h30m + symbol: TRSE_OTC + trading_days: weekdays + trading_timezone: America/Toronto +TSE: + currency: JPY + delay_amount: '1440' + display_name: Tokyo Stock Exchange + market_times: + partial_trading: {} + standard: + daily_close: 6h + daily_open: 0s + daily_settlement: 9h + trading_breaks: + - - 2h30m + - 3h30m + symbol: TSE + trading_days: weekdays + trading_timezone: Asia/Tokyo +TSE_OTC: + currency: JPY + delay_amount: '0' + display_name: OTC Tokyo Stock Exchange + market_times: + partial_trading: {} + standard: + daily_close: 20h + daily_open: 0s + daily_settlement: 22h + symbol: TSE_OTC + trading_days: weekdays + trading_timezone: Asia/Tokyo +TSE_S: + currency: JPY + delay_amount: '1440' + display_name: Tokyo Stock Exchange + market_times: + partial_trading: {} + standard: + afternoon_open: 3h30m + daily_close: 6h + daily_open: 0s + daily_settlement: 9h + morning_close: 2h30m + symbol: TSE_S + trading_days: weekdays + trading_timezone: Asia/Tokyo +CRYPTOCURRENCY: + delay_amount: '0' + display_name: Cryptocurrency + market_times: + partial_trading: {} + standard: + daily_close: 23h59m59s + daily_open: 0s + daily_settlement: 23h59m59s + symbol: CRYPTOCURRENCY + trading_days: everyday + trading_timezone: UTC diff --git a/Finance-Exchange-0.02/share/exchanges_trading_days_aliases.yml b/Finance-Exchange-0.02/share/exchanges_trading_days_aliases.yml new file mode 100644 index 0000000..49fc101 --- /dev/null +++ b/Finance-Exchange-0.02/share/exchanges_trading_days_aliases.yml @@ -0,0 +1,29 @@ +--- +## +# This is a bitmap of the day number mod 7: [0..6] => [Sunday .. Saturday] that represent whether the exchange is open or not on that day. +# All markets are traded in either of these three group . Example: Volatility Indices trade on everyday, Forex and most of the indices trade on weekedays and Middle east indices trade on Sun to Thurs. + +everyday: + - 1 # Sun + - 1 # Mon + - 1 # Tues + - 1 # Wed + - 1 # Thurs + - 1 # Fri + - 1 # Sat +weekdays: + - 0 # Sun + - 1 # Mon + - 1 # Tues + - 1 # Wed + - 1 # Thurs + - 1 # Fri + - 0 # Sat +sun_thru_thu: + - 1 # Sun + - 1 # Mon + - 1 # Tues + - 1 # Wed + - 1 # Thurs + - 0 # Fri + - 0 # Sat diff --git a/Finance-Exchange-0.02/t/00-check-deps.t b/Finance-Exchange-0.02/t/00-check-deps.t new file mode 100644 index 0000000..a0a25c6 --- /dev/null +++ b/Finance-Exchange-0.02/t/00-check-deps.t @@ -0,0 +1,15 @@ +use strict; +use warnings; + +# this test was generated with Dist::Zilla::Plugin::Test::CheckDeps 0.014 + +use Test::More 0.94; +use Test::CheckDeps 0.010; + +check_dependencies('classic'); + +if (0) { + BAIL_OUT("Missing dependencies") if !Test::More->builder->is_passing; +} + +done_testing; diff --git a/Finance-Exchange-0.02/t/00-compile.t b/Finance-Exchange-0.02/t/00-compile.t new file mode 100644 index 0000000..8d2b088 --- /dev/null +++ b/Finance-Exchange-0.02/t/00-compile.t @@ -0,0 +1,60 @@ +use 5.006; +use strict; +use warnings; + +# this test was generated with Dist::Zilla::Plugin::Test::Compile 2.058 + +use Test::More; + +plan tests => 1 + ($ENV{AUTHOR_TESTING} ? 1 : 0); + +my @module_files = ( + 'Finance/Exchange.pm' +); + + + +# no fake home requested + +my @switches = ( + -d 'blib' ? '-Mblib' : '-Ilib', +); + +use File::Spec; +use IPC::Open3; +use IO::Handle; + +open my $stdin, '<', File::Spec->devnull or die "can't open devnull: $!"; + +my @warnings; +for my $lib (@module_files) +{ + # see L + my $stderr = IO::Handle->new; + + diag('Running: ', join(', ', map { my $str = $_; $str =~ s/'/\\'/g; q{'} . $str . q{'} } + $^X, @switches, '-e', "require q[$lib]")) + if $ENV{PERL_COMPILE_TEST_DEBUG}; + + my $pid = open3($stdin, '>&STDERR', $stderr, $^X, @switches, '-e', "require q[$lib]"); + binmode $stderr, ':crlf' if $^O eq 'MSWin32'; + my @_warnings = <$stderr>; + waitpid($pid, 0); + is($?, 0, "$lib loaded ok"); + + shift @_warnings if @_warnings and $_warnings[0] =~ /^Using .*\bblib/ + and not eval { +require blib; blib->VERSION('1.01') }; + + if (@_warnings) + { + warn @_warnings; + push @warnings, @_warnings; + } +} + + + +is(scalar(@warnings), 0, 'no warnings found') + or diag 'got warnings: ', ( Test::More->can('explain') ? Test::More::explain(\@warnings) : join("\n", '', @warnings) ) if $ENV{AUTHOR_TESTING}; + + diff --git a/Finance-Exchange-0.02/t/00-report-prereqs.dd b/Finance-Exchange-0.02/t/00-report-prereqs.dd new file mode 100644 index 0000000..e3560b8 --- /dev/null +++ b/Finance-Exchange-0.02/t/00-report-prereqs.dd @@ -0,0 +1,61 @@ +do { my $x = { + 'configure' => { + 'requires' => { + 'ExtUtils::MakeMaker' => '7.64', + 'File::ShareDir::Install' => '0.06' + } + }, + 'develop' => { + 'requires' => { + 'Dist::Zilla' => '5', + 'Dist::Zilla::Plugin::PerlTidy' => '0', + 'Dist::Zilla::Plugin::Test::Perl::Critic' => '0', + 'Dist::Zilla::PluginBundle::Author::DERIV' => '0', + 'Software::License::Perl_5' => '0', + 'Test::CPAN::Changes' => '0.19', + 'Test::CPAN::Meta' => '0', + 'Test::EOL' => '0', + 'Test::MinimumVersion' => '0', + 'Test::Mojibake' => '0', + 'Test::More' => '0.96', + 'Test::NoTabs' => '0', + 'Test::Perl::Critic' => '0', + 'Test::Pod' => '1.41', + 'Test::Portability::Files' => '0', + 'Test::Version' => '1', + 'strict' => '0', + 'warnings' => '0' + } + }, + 'runtime' => { + 'requires' => { + 'Clone' => '0', + 'File::ShareDir' => '0', + 'Moose' => '0', + 'Time::Duration::Concise::Localize' => '0', + 'YAML::XS' => '0' + } + }, + 'test' => { + 'recommends' => { + 'CPAN::Meta' => '2.120900' + }, + 'requires' => { + 'ExtUtils::MakeMaker' => '0', + 'File::Spec' => '0', + 'IO::Handle' => '0', + 'IPC::Open3' => '0', + 'Test::CheckDeps' => '0.010', + 'Test::Deep' => '0', + 'Test::Exception' => '0', + 'Test::FailWarnings' => '0.008', + 'Test::More' => '0.98', + 'Test::Most' => '0.34', + 'perl' => '5.006', + 'strict' => '0', + 'warnings' => '0' + } + } + }; + $x; + } \ No newline at end of file diff --git a/Finance-Exchange-0.02/t/00-report-prereqs.t b/Finance-Exchange-0.02/t/00-report-prereqs.t new file mode 100644 index 0000000..1fa9c75 --- /dev/null +++ b/Finance-Exchange-0.02/t/00-report-prereqs.t @@ -0,0 +1,184 @@ +#!perl + +use strict; +use warnings; + +# This test was generated by Dist::Zilla::Plugin::Test::ReportPrereqs 0.029 + +use Test::More tests => 1; + +use ExtUtils::MakeMaker; +use File::Spec; + +# from $version::LAX +my $lax_version_re = qr/(?: undef | (?: (?:[0-9]+) (?: \. | (?:\.[0-9]+) (?:_[0-9]+)? )? + | + (?:\.[0-9]+) (?:_[0-9]+)? + ) | (?: + v (?:[0-9]+) (?: (?:\.[0-9]+)+ (?:_[0-9]+)? )? + | + (?:[0-9]+)? (?:\.[0-9]+){2,} (?:_[0-9]+)? + ) + )/x; + +# hide optional CPAN::Meta modules from prereq scanner +# and check if they are available +my $cpan_meta = "CPAN::Meta"; +my $cpan_meta_pre = "CPAN::Meta::Prereqs"; +my $HAS_CPAN_META = eval "require $cpan_meta; $cpan_meta->VERSION('2.120900')" && eval "require $cpan_meta_pre"; ## no critic + +# Verify requirements? +my $DO_VERIFY_PREREQS = 1; + +sub _max { + my $max = shift; + $max = ($_ > $max) ? $_ : $max for @_; + return $max; +} + +sub _merge_prereqs { + my ($collector, $prereqs) = @_; + + # CPAN::Meta::Prereqs object + if (ref $collector eq $cpan_meta_pre) { + return $collector->with_merged_prereqs(CPAN::Meta::Prereqs->new($prereqs)); + } + + # Raw hashrefs + for my $phase (keys %$prereqs) { + for my $type (keys %{$prereqs->{$phase}}) { + for my $module (keys %{$prereqs->{$phase}{$type}}) { + $collector->{$phase}{$type}{$module} = $prereqs->{$phase}{$type}{$module}; + } + } + } + + return $collector; +} + +my @include = qw( + +); + +my @exclude = qw( + +); + +# Add static prereqs to the included modules list +my $static_prereqs = do './t/00-report-prereqs.dd'; + +# Merge all prereqs (either with ::Prereqs or a hashref) +my $full_prereqs = _merge_prereqs(($HAS_CPAN_META ? $cpan_meta_pre->new : {}), $static_prereqs); + +# Add dynamic prereqs to the included modules list (if we can) +my ($source) = grep { -f } 'MYMETA.json', 'MYMETA.yml'; +my $cpan_meta_error; +if ( $source + && $HAS_CPAN_META + && (my $meta = eval { CPAN::Meta->load_file($source) })) +{ + $full_prereqs = _merge_prereqs($full_prereqs, $meta->prereqs); +} else { + $cpan_meta_error = $@; # capture error from CPAN::Meta->load_file($source) + $source = 'static metadata'; +} + +my @full_reports; +my @dep_errors; +my $req_hash = $HAS_CPAN_META ? $full_prereqs->as_string_hash : $full_prereqs; + +# Add static includes into a fake section +for my $mod (@include) { + $req_hash->{other}{modules}{$mod} = 0; +} + +for my $phase (qw(configure build test runtime develop other)) { + next unless $req_hash->{$phase}; + next if ($phase eq 'develop' and not $ENV{AUTHOR_TESTING}); + + for my $type (qw(requires recommends suggests conflicts modules)) { + next unless $req_hash->{$phase}{$type}; + + my $title = ucfirst($phase) . ' ' . ucfirst($type); + my @reports = [qw/Module Want Have/]; + + for my $mod (sort keys %{$req_hash->{$phase}{$type}}) { + next if grep { $_ eq $mod } @exclude; + + my $want = $req_hash->{$phase}{$type}{$mod}; + $want = "undef" unless defined $want; + $want = "any" if !$want && $want == 0; + + if ($mod eq 'perl') { + push @reports, ['perl', $want, $]]; + next; + } + + my $req_string = $want eq 'any' ? 'any version required' : "version '$want' required"; + + my $file = $mod; + $file =~ s{::}{/}g; + $file .= ".pm"; + my ($prefix) = grep { -e File::Spec->catfile($_, $file) } @INC; + + if ($prefix) { + my $have = MM->parse_version(File::Spec->catfile($prefix, $file)); + $have = "undef" unless defined $have; + push @reports, [$mod, $want, $have]; + + if ($DO_VERIFY_PREREQS && $HAS_CPAN_META && $type eq 'requires') { + if ($have !~ /\A$lax_version_re\z/) { + push @dep_errors, "$mod version '$have' cannot be parsed ($req_string)"; + } elsif (!$full_prereqs->requirements_for($phase, $type)->accepts_module($mod => $have)) { + push @dep_errors, "$mod version '$have' is not in required range '$want'"; + } + } + } else { + push @reports, [$mod, $want, "missing"]; + + if ($DO_VERIFY_PREREQS && $type eq 'requires') { + push @dep_errors, "$mod is not installed ($req_string)"; + } + } + } + + if (@reports) { + push @full_reports, "=== $title ===\n\n"; + + my $ml = _max(map { length $_->[0] } @reports); + my $wl = _max(map { length $_->[1] } @reports); + my $hl = _max(map { length $_->[2] } @reports); + + if ($type eq 'modules') { + splice @reports, 1, 0, ["-" x $ml, "", "-" x $hl]; + push @full_reports, map { sprintf(" %*s %*s\n", -$ml, $_->[0], $hl, $_->[2]) } @reports; + } else { + splice @reports, 1, 0, ["-" x $ml, "-" x $wl, "-" x $hl]; + push @full_reports, map { sprintf(" %*s %*s %*s\n", -$ml, $_->[0], $wl, $_->[1], $hl, $_->[2]) } @reports; + } + + push @full_reports, "\n"; + } + } +} + +if (@full_reports) { + diag "\nVersions for all modules listed in $source (including optional ones):\n\n", @full_reports; +} + +if ($cpan_meta_error || @dep_errors) { + diag "\n*** WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING ***\n"; +} + +if ($cpan_meta_error) { + my ($orig_source) = grep { -f } 'MYMETA.json', 'MYMETA.yml'; + diag "\nCPAN::Meta->load_file('$orig_source') failed with: $cpan_meta_error\n"; +} + +if (@dep_errors) { + diag join("\n", "\nThe following REQUIRED prerequisites were not satisfied:\n", @dep_errors, "\n"); +} + +pass('Reported prereqs'); + +# vim: ts=4 sts=4 sw=4 et: diff --git a/Finance-Exchange-0.02/t/exchange.t b/Finance-Exchange-0.02/t/exchange.t new file mode 100755 index 0000000..8d1a530 --- /dev/null +++ b/Finance-Exchange-0.02/t/exchange.t @@ -0,0 +1,172 @@ +#!/usr/bin/perl + +use Test::Most; +use Test::Deep; +use Test::Exception; +use Test::FailWarnings; + +use Finance::Exchange; + +my @exchanges = ( + 'ICE_LIFFE', 'EEI_PA', 'BIS', 'NYSE_SPC', 'EGX', 'KRX', 'SYNFSE', 'BSE', + 'HKF', 'BOVESPA', 'SWX', 'TRSE', 'EURONEXT', 'SYNTSE', 'RANDOM', 'TSE_S', + 'TSE', 'OSLO', 'LSE', 'SES', 'SYNLSE', 'EEI_BU', 'SFE', 'SAS', + 'EUREX', 'SYNNYSE_SPC', 'ISE', 'NSE', 'KSE', 'STOXX', 'SGX', 'EEI_AM', + 'BI', 'FSE', 'MEFF', 'ASX_S', 'SYNEURONEXT', 'NYSE', 'MOF', 'BMF', + 'NASDAQ_INDEX', 'EEI_LI', 'CME', 'ASX', 'OMX', 'FOREX', 'DFM', 'ADS', + 'SYNSTOXX', 'SZSE', 'SYNSWX', 'RTS', 'JSC', 'METAL', 'OSE', 'FS', + 'NZSE', 'ODLS', 'SP_GLOBAL', 'JSE', 'NASDAQ', 'BM', 'HKSE', 'MICEX', + 'SYNNYSE_DJI', 'SP_GSCI', 'EUREX_SWISS', 'RANDOM_NOCTURNE', 'IDM', 'SSE', 'OIL_OTC', 'BRENT_OTC' +); +subtest 'exchange object construction' => sub { + foreach my $exchange_symbol (@exchanges) { + lives_ok { Finance::Exchange->create_exchange('ASX') } 'can create an exchange object for ' . $exchange_symbol; + } + throws_ok { Finance::Exchange->create_exchange('unknown') } qr/Config for exchange\[unknown\] not specified in exchange.yml/, + 'throws error if exchange symbol is unknown'; +}; + +subtest 'trading_days' => sub { + my $expected = { + everyday => ['RANDOM', 'RANDOM_NOCTURNE'], + sun_thru_thu => ['EGX', 'SAS', 'KRX', 'DFM', 'ADS'], + weekdays => [ + 'ICE_LIFFE', 'EEI_PA', 'BIS', 'NYSE_SPC', 'KRX', 'SYNFSE', 'BSE', 'HKF', + 'BOVESPA', 'SWX', 'TRSE', 'EURONEXT', 'SYNTSE', 'TSE_S', 'TSE', 'OSLO', + 'LSE', 'SES', 'SYNLSE', 'EEI_BU', 'SFE', 'EUREX', 'SYNNYSE_SPC', 'ISE', + 'NSE', 'STOXX', 'SGX', 'EEI_AM', 'BI', 'FSE', 'MEFF', 'ASX_S', + 'SYNEURONEXT', 'NYSE', 'MOF', 'BMF', 'NASDAQ_INDEX', 'EEI_LI', 'CME', 'ASX', + 'OMX', 'FOREX', 'SYNSTOXX', 'SZSE', 'SYNSWX', 'RTS', 'JSC', 'METAL', + 'OSE', 'FS', 'NZSE', 'ODLS', 'SP_GLOBAL', 'JSE', 'NASDAQ', 'BM', + 'HKSE', 'MICEX', 'SYNNYSE_DJI', 'SP_GSCI', 'EUREX_SWISS', 'IDM', 'SSE', 'OIL_OTC', + 'BRENT_OTC', 'CME_OTC', 'SGX_OTC' + ], + }; + + foreach my $ex (map { Finance::Exchange->create_exchange($_) } @exchanges) { + unless ($expected->{$ex->trading_days}) { + fail('unknown trading days ' . $ex->trading_days); + } else { + if (grep { $ex->symbol eq $_ } @{$expected->{$ex->trading_days}}) { + pass('trading_days matched for ' . $ex->symbol); + } else { + fail('Wrong trading_days found for ' . $ex->symbol); + } + } + } +}; + +subtest 'exchange currency' => sub { + my $expected = { + 'AED' => ['DFM', 'ADS'], + 'AUD' => ['SFE', 'ASX_S', 'ASX'], + 'BRL' => ['BOVESPA', 'BMF'], + 'CAD' => ['TRSE'], + 'CHF' => ['SWX', 'SYNSWX', 'EUREX_SWISS'], + 'CNY' => ['SZSE', 'SSE'], + 'EGP' => ['EGX'], + 'EUR' => [ + 'EEI_PA', 'SYNFSE', 'EURONEXT', 'EEI_BU', 'EUREX', 'ISE', 'STOXX', 'EEI_AM', + 'BI', 'FSE', 'MEFF', 'SYNEURONEXT', 'EEI_LI', 'SYNSTOXX', 'BM', 'IDM' + ], + 'GBP' => ['ICE_LIFFE', 'LSE', 'SYNLSE', 'FS'], + 'HKD' => ['HKF', 'HKSE'], + 'IDR' => ['JSC'], + 'INR' => ['BSE', 'NSE'], + 'JPY' => ['SYNTSE', 'TSE_S', 'TSE', 'OSE'], + 'KRW' => ['KRX'], + 'KWD' => ['KRX'], + 'NOK' => ['OSLO'], + 'NZD' => ['NZSE'], + 'RUB' => ['MICEX'], + 'SAR' => ['SAS'], + 'SEK' => ['OMX'], + 'SGD' => ['SES', 'SGX'], + 'TRY' => ['BIS'], + 'USD' => [ + 'NYSE_SPC', 'SYNNYSE_SPC', 'NYSE', 'MOF', 'NASDAQ_INDEX', 'CME', 'RTS', 'ODLS', + 'SP_GLOBAL', 'NASDAQ', 'SYNNYSE_DJI', 'SP_GSCI', 'OIL_OTC', 'BRENT_OTC' + ], + 'ZAR' => ['JSE'], + }; + my %undef_currency_exchanges = ( + RANDOM => 1, + FOREX => 1, + METAL => 1, + RANDOM_NOCTURNE => 1 + ); + + foreach my $ex (map { Finance::Exchange->create_exchange($_) } @exchanges) { + if (not $ex->currency and exists $undef_currency_exchanges{$ex->symbol}) { + pass('Currency is undefined for ' . $ex->symbol); + } elsif (grep { $ex->symbol eq $_ } @{$expected->{$ex->currency}}) { + pass('currency matched for ' . $ex->symbol); + } else { + fail('Wrong currency found for ' . $ex->symbol); + } + } +}; + +subtest 'market_times' => sub { + my $expected = { + 'ASX' => { + dst => { + daily_close => 5 * 3600, + daily_open => -1 * 3600, + daily_settlement => 8 * 3600, + }, + partial_trading => { + dst_close => 3 * 3600 + 10 * 60, + dst_open => -1 * 3600, + standard_close => 4 * 3600 + 10 * 60, + standard_open => 0, + }, + standard => { + daily_close => 6 * 3600, + daily_open => 0, + daily_settlement => 9 * 3600, + }, + }, + 'ASX_OTC' => { + dst => { + daily_close => 19 * 3600, + daily_open => 0 * 3600, + daily_settlement => 21 * 3600, + trading_breaks => [5 * 3600 + 30 * 60, 6 * 3600 + 30 * 60], + }, + standard => { + daily_close => 20 * 3600, + daily_open => 0 * 3600, + daily_settlement => 22 * 3600, + trading_breaks => [6 * 3600 + 30 * 60, 7 * 3600 + 30 * 60], + }, + }, + + }; + + foreach my $exchange (keys %{$expected}) { + my $asx = Finance::Exchange->create_exchange($exchange); + foreach my $key (keys %{$asx->market_times}) { + foreach my $key2 (keys %{$asx->market_times->{$key}}) { + if ($key2 eq 'trading_breaks') { + is $asx->market_times->{$key}->{$key2}[0][0]->seconds, $expected->{$exchange}->{$key}->{$key2}[0], 'trading breaks matches'; + is $asx->market_times->{$key}->{$key2}[0][1]->seconds, $expected->{$exchange}->{$key}->{$key2}[1], 'trading breaks matches'; + + } else { + is $asx->market_times->{$key}->{$key2}->seconds, $expected->{$exchange}->{$key}->{$key2}, 'market times matches'; + } + } + } + } +}; + +subtest 'exchange object caching' => sub { + my $obj1 = Finance::Exchange->create_exchange('ASX'); + my $obj2 = Finance::Exchange->create_exchange('ASX'); + my $obj3 = Finance::Exchange->create_exchange('FOREX'); + + is $obj1, $obj2, 'cached'; + isnt $obj1, $obj3, 'returns a different object for FOREX'; +}; + +done_testing(); diff --git a/Finance-Exchange-0.02/t/rc/perlcriticrc b/Finance-Exchange-0.02/t/rc/perlcriticrc new file mode 100644 index 0000000..17852cd --- /dev/null +++ b/Finance-Exchange-0.02/t/rc/perlcriticrc @@ -0,0 +1,25 @@ +severity = 4 +criticism-fatal = 1 +color = 1 +include = TestingAndDebugging::RequireUseWarnings Subroutines::RequireArgUnpacking TestingAndDebugging::ProhibitNoStrict ErrorHandling::RequireCheckingReturnValueOfEval TestingAndDebugging::RequireUseStrict Freenode::Each Freenode::IndirectObjectNotation Freenode::DollarAB Freenode::DeprecatedFeatures BuiltinFunctions::ProhibitReturnOr Dynamic::NoIndirect ProhibitSmartmatch Subroutines::ProhibitAmbiguousFunctionCalls Modules::ProhibitPOSIXimport +exclude = ValuesAndExpressions::ProhibitConstantPragma Subroutines::ProhibitExplicitReturnUndef Subroutines::RequireFinalReturn Community::PackageMatchesFilename Freenode::PackageMatchesFilename Community::DiscouragedModules Freenode::DiscouragedModules Modules::RequireEndWithOn CodeLayout::RequireTidyCode + +[TestingAndDebugging::RequireUseWarnings] +equivalent_modules=MooseX::Singleton Mojo::Base + +[Subroutines::RequireArgUnpacking] +short_subroutine_statements=3 + +[TestingAndDebugging::ProhibitNoStrict] +allow=refs + +[ErrorHandling::RequireCheckingReturnValueOfEval] +severity=4 + +[TestingAndDebugging::RequireUseStrict] +equivalent_modules=MooseX::Singleton Mojo::Base + +[-Perl::Critic::Policy::Subroutines::ProhibitBuiltinHomonyms] + +[Variables::ProhibitEvilVariables] +variables = $@ diff --git a/Finance-Exchange-0.02/t/rc/perltidyrc b/Finance-Exchange-0.02/t/rc/perltidyrc new file mode 100644 index 0000000..8750fcf --- /dev/null +++ b/Finance-Exchange-0.02/t/rc/perltidyrc @@ -0,0 +1,62 @@ +#line length; keep it quite short so that lists of arguments to subs +#are wrapped +--maximum-line-length=150 + +#Cuddled else +-ce + +#Stack Closing Tokens +#http://perltidy.sourceforge.net/stylekey.html#stack_closing_tokens +#"The manual shows how all of these vertical tightness controls may be +#applied independently to each type of non-block opening and opening token." +--stack-closing-tokens + +## Similarly for opening. +--stack-opening-tokens + +#4 char wide tabs instead of spaces for indentation. +-i=4 + +#Horizontal Tightness +#http://perltidy.sourceforge.net/stylekey.html#define_horizontal_tightness +#parentheses if ((my $len_tab = length($tabstr)) > 0) +-pt=2 + +#square brackets $width = $col[$j + $k] - $col[$j]; +-sbt=2 + +#braces $width = $col[$j + $k] - $col[$j]; +-bt=2 + +#block braces map { $_ => -M $_ } grep { /\.deb$/ } +-bbt=0 + +#no space in front of semi-colons in a for loop +--nospace-for-semicolon + +#no outdenting of long quotes +#http://perltidy.sourceforge.net/stylekey.html#outdenting_long_quotes +--no-outdent-long-quotes + +--add-semicolons + +#always break a new line after a semi-colon +--want-break-after=";" + +#all hash key/values on a separate line +--comma-arrow-breakpoints=0 + +#No newlines before comments +-nbbc + +--no-outdent-long-lines + +#do not outdent labels +--no-outdent-labels + +--check-syntax + +--indent-spaced-block-comments + +#4 character if its breaks the line +--continuation-indentation=4 diff --git a/Finance-Exchange-0.02/t/usage.t b/Finance-Exchange-0.02/t/usage.t new file mode 100644 index 0000000..82d4479 --- /dev/null +++ b/Finance-Exchange-0.02/t/usage.t @@ -0,0 +1,19 @@ +use strict; +use warnings; +use Test::More; +use Test::Deep; +use Finance::Exchange; + +my $exchange = Finance::Exchange->create_exchange('LSE'); +is $exchange->symbol, 'LSE'; +is $exchange->display_name, 'London Stock Exchange'; +is $exchange->trading_days, 'weekdays'; +is $exchange->trading_timezone, 'Europe/London'; +# The list of days starts on Sunday and is a set of flags indicating whether +# we trade on that day or not +cmp_deeply $exchange->trading_days_list, [0, 1, 1, 1, 1, 1, 0]; +is $exchange->delay_amount, 15, 'LSE minimum delay is 15 minutes'; +is $exchange->currency, 'GBP', 'LSE is traded in pound sterling'; +is $exchange->trading_date_can_differ, 0, 'only applies to AU/NZ'; + +done_testing; diff --git a/Finance-Exchange-0.02/xt/author/critic.t b/Finance-Exchange-0.02/xt/author/critic.t new file mode 100644 index 0000000..b28e2e3 --- /dev/null +++ b/Finance-Exchange-0.02/xt/author/critic.t @@ -0,0 +1,7 @@ +#!perl + +use strict; +use warnings; + +use Test::Perl::Critic (-profile => "t/rc/perlcriticrc") x!! -e "t/rc/perlcriticrc"; +all_critic_ok(); diff --git a/Finance-Exchange-0.02/xt/author/distmeta.t b/Finance-Exchange-0.02/xt/author/distmeta.t new file mode 100644 index 0000000..d13978a --- /dev/null +++ b/Finance-Exchange-0.02/xt/author/distmeta.t @@ -0,0 +1,7 @@ +#!perl +# This file was automatically generated by Dist::Zilla::Plugin::MetaTests. +use strict; +use warnings; +use Test::CPAN::Meta; + +meta_yaml_ok(); diff --git a/Finance-Exchange-0.02/xt/author/eol.t b/Finance-Exchange-0.02/xt/author/eol.t new file mode 100644 index 0000000..e040d56 --- /dev/null +++ b/Finance-Exchange-0.02/xt/author/eol.t @@ -0,0 +1,33 @@ +use strict; +use warnings; + +# this test was generated with Dist::Zilla::Plugin::Test::EOL 0.19 + +use Test::More 0.88; +use Test::EOL; + +my @files = ( + 'lib/Finance/Exchange.pm', + 't/00-check-deps.t', + 't/00-compile.t', + 't/00-report-prereqs.dd', + 't/00-report-prereqs.t', + 't/exchange.t', + 't/rc/perlcriticrc', + 't/rc/perltidyrc', + 't/usage.t', + 'xt/author/critic.t', + 'xt/author/distmeta.t', + 'xt/author/eol.t', + 'xt/author/minimum-version.t', + 'xt/author/mojibake.t', + 'xt/author/no-tabs.t', + 'xt/author/pod-syntax.t', + 'xt/author/portability.t', + 'xt/author/test-version.t', + 'xt/release/common_spelling.t', + 'xt/release/cpan-changes.t' +); + +eol_unix_ok($_, { trailing_whitespace => 1 }) foreach @files; +done_testing; diff --git a/Finance-Exchange-0.02/xt/author/minimum-version.t b/Finance-Exchange-0.02/xt/author/minimum-version.t new file mode 100644 index 0000000..1e5e5b4 --- /dev/null +++ b/Finance-Exchange-0.02/xt/author/minimum-version.t @@ -0,0 +1,6 @@ +use strict; +use warnings; + +use Test::More; +use Test::MinimumVersion; +all_minimum_version_ok( qq{5.14.0} ); diff --git a/Finance-Exchange-0.02/xt/author/mojibake.t b/Finance-Exchange-0.02/xt/author/mojibake.t new file mode 100644 index 0000000..5ef161e --- /dev/null +++ b/Finance-Exchange-0.02/xt/author/mojibake.t @@ -0,0 +1,9 @@ +#!perl + +use strict; +use warnings qw(all); + +use Test::More; +use Test::Mojibake; + +all_files_encoding_ok(); diff --git a/Finance-Exchange-0.02/xt/author/no-tabs.t b/Finance-Exchange-0.02/xt/author/no-tabs.t new file mode 100644 index 0000000..5ee5f75 --- /dev/null +++ b/Finance-Exchange-0.02/xt/author/no-tabs.t @@ -0,0 +1,33 @@ +use strict; +use warnings; + +# this test was generated with Dist::Zilla::Plugin::Test::NoTabs 0.15 + +use Test::More 0.88; +use Test::NoTabs; + +my @files = ( + 'lib/Finance/Exchange.pm', + 't/00-check-deps.t', + 't/00-compile.t', + 't/00-report-prereqs.dd', + 't/00-report-prereqs.t', + 't/exchange.t', + 't/rc/perlcriticrc', + 't/rc/perltidyrc', + 't/usage.t', + 'xt/author/critic.t', + 'xt/author/distmeta.t', + 'xt/author/eol.t', + 'xt/author/minimum-version.t', + 'xt/author/mojibake.t', + 'xt/author/no-tabs.t', + 'xt/author/pod-syntax.t', + 'xt/author/portability.t', + 'xt/author/test-version.t', + 'xt/release/common_spelling.t', + 'xt/release/cpan-changes.t' +); + +notabs_ok($_) foreach @files; +done_testing; diff --git a/Finance-Exchange-0.02/xt/author/pod-syntax.t b/Finance-Exchange-0.02/xt/author/pod-syntax.t new file mode 100644 index 0000000..e563e5d --- /dev/null +++ b/Finance-Exchange-0.02/xt/author/pod-syntax.t @@ -0,0 +1,7 @@ +#!perl +# This file was automatically generated by Dist::Zilla::Plugin::PodSyntaxTests. +use strict; use warnings; +use Test::More; +use Test::Pod 1.41; + +all_pod_files_ok(); diff --git a/Finance-Exchange-0.02/xt/author/portability.t b/Finance-Exchange-0.02/xt/author/portability.t new file mode 100644 index 0000000..c531252 --- /dev/null +++ b/Finance-Exchange-0.02/xt/author/portability.t @@ -0,0 +1,10 @@ +use strict; +use warnings; + +use Test::More; + +eval 'use Test::Portability::Files'; +plan skip_all => 'Test::Portability::Files required for testing portability' + if $@; + +run_tests(); diff --git a/Finance-Exchange-0.02/xt/author/test-version.t b/Finance-Exchange-0.02/xt/author/test-version.t new file mode 100644 index 0000000..247ba9a --- /dev/null +++ b/Finance-Exchange-0.02/xt/author/test-version.t @@ -0,0 +1,23 @@ +use strict; +use warnings; +use Test::More; + +# generated by Dist::Zilla::Plugin::Test::Version 1.09 +use Test::Version; + +my @imports = qw( version_all_ok ); + +my $params = { + is_strict => 0, + has_version => 1, + multiple => 0, + +}; + +push @imports, $params + if version->parse( $Test::Version::VERSION ) >= version->parse('1.002'); + +Test::Version->import(@imports); + +version_all_ok; +done_testing; diff --git a/Finance-Exchange-0.02/xt/release/common_spelling.t b/Finance-Exchange-0.02/xt/release/common_spelling.t new file mode 100644 index 0000000..7aed722 --- /dev/null +++ b/Finance-Exchange-0.02/xt/release/common_spelling.t @@ -0,0 +1,11 @@ +#!/usr/bin/perl +use strict; use warnings; + +use Test::More; + +eval "use Test::Pod::Spelling::CommonMistakes"; +if ( $@ ) { + plan skip_all => 'Test::Pod::Spelling::CommonMistakes required for testing POD'; +} else { + all_pod_files_ok(); +} diff --git a/Finance-Exchange-0.02/xt/release/cpan-changes.t b/Finance-Exchange-0.02/xt/release/cpan-changes.t new file mode 100644 index 0000000..286005a --- /dev/null +++ b/Finance-Exchange-0.02/xt/release/cpan-changes.t @@ -0,0 +1,10 @@ +use strict; +use warnings; + +# this test was generated with Dist::Zilla::Plugin::Test::CPAN::Changes 0.012 + +use Test::More 0.96 tests => 1; +use Test::CPAN::Changes; +subtest 'changes_ok' => sub { + changes_file_ok('Changes'); +}; diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..77d8c9e --- /dev/null +++ b/LICENSE @@ -0,0 +1,379 @@ +This software is copyright (c) 2022 by Deriv Services Ltd. + +This is free software; you can redistribute it and/or modify it under +the same terms as the Perl 5 programming language system itself. + +Terms of the Perl programming language system itself + +a) the GNU General Public License as published by the Free + Software Foundation; either version 1, or (at your option) any + later version, or +b) the "Artistic License" + +--- The GNU General Public License, Version 1, February 1989 --- + +This software is Copyright (c) 2022 by Deriv Services Ltd. + +This is free software, licensed under: + + The GNU General Public License, Version 1, February 1989 + + GNU GENERAL PUBLIC LICENSE + Version 1, February 1989 + + Copyright (C) 1989 Free Software Foundation, Inc. + 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The license agreements of most software companies try to keep users +at the mercy of those companies. By contrast, our General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. The +General Public License applies to the Free Software Foundation's +software and to any other program whose authors commit to using it. +You can use it for your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Specifically, the General Public License is designed to make +sure that you have the freedom to give away or sell copies of free +software, that you receive source code or can get it if you want it, +that you can change the software or use pieces of it in new free +programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of a such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must tell them their rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any program or other work which +contains a notice placed by the copyright holder saying it may be +distributed under the terms of this General Public License. The +"Program", below, refers to any such program or work, and a "work based +on the Program" means either the Program or any work containing the +Program or a portion of it, either verbatim or with modifications. Each +licensee is addressed as "you". + + 1. You may copy and distribute verbatim copies of the Program's source +code as you receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice and +disclaimer of warranty; keep intact all the notices that refer to this +General Public License and to the absence of any warranty; and give any +other recipients of the Program a copy of this General Public License +along with the Program. You may charge a fee for the physical act of +transferring a copy. + + 2. You may modify your copy or copies of the Program or any portion of +it, and copy and distribute such modifications under the terms of Paragraph +1 above, provided that you also do the following: + + a) cause the modified files to carry prominent notices stating that + you changed the files and the date of any change; and + + b) cause the whole of any work that you distribute or publish, that + in whole or in part contains the Program or any part thereof, either + with or without modifications, to be licensed at no charge to all + third parties under the terms of this General Public License (except + that you may choose to grant warranty protection to some or all + third parties, at your option). + + c) If the modified program normally reads commands interactively when + run, you must cause it, when started running for such interactive use + in the simplest and most usual way, to print or display an + announcement including an appropriate copyright notice and a notice + that there is no warranty (or else, saying that you provide a + warranty) and that users may redistribute the program under these + conditions, and telling the user how to view a copy of this General + Public License. + + d) You may charge a fee for the physical act of transferring a + copy, and you may at your option offer warranty protection in + exchange for a fee. + +Mere aggregation of another independent work with the Program (or its +derivative) on a volume of a storage or distribution medium does not bring +the other work under the scope of these terms. + + 3. You may copy and distribute the Program (or a portion or derivative of +it, under Paragraph 2) in object code or executable form under the terms of +Paragraphs 1 and 2 above provided that you also do one of the following: + + a) accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of + Paragraphs 1 and 2 above; or, + + b) accompany it with a written offer, valid for at least three + years, to give any third party free (except for a nominal charge + for the cost of distribution) a complete machine-readable copy of the + corresponding source code, to be distributed under the terms of + Paragraphs 1 and 2 above; or, + + c) accompany it with the information you received as to where the + corresponding source code may be obtained. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form alone.) + +Source code for a work means the preferred form of the work for making +modifications to it. For an executable file, complete source code means +all the source code for all modules it contains; but, as a special +exception, it need not include source code for modules which are standard +libraries that accompany the operating system on which the executable +file runs, or for standard header files or definitions files that +accompany that operating system. + + 4. You may not copy, modify, sublicense, distribute or transfer the +Program except as expressly provided under this General Public License. +Any attempt otherwise to copy, modify, sublicense, distribute or transfer +the Program is void, and will automatically terminate your rights to use +the Program under this License. However, parties who have received +copies, or rights to use copies, from you under this General Public +License will not have their licenses terminated so long as such parties +remain in full compliance. + + 5. By copying, distributing or modifying the Program (or any work based +on the Program) you indicate your acceptance of this license to do so, +and all its terms and conditions. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the original +licensor to copy, distribute or modify the Program subject to these +terms and conditions. You may not impose any further restrictions on the +recipients' exercise of the rights granted herein. + + 7. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of the license which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +the license, you may choose any version ever published by the Free Software +Foundation. + + 8. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 9. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 10. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + Appendix: How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to humanity, the best way to achieve this is to make it +free software which everyone can redistribute and change under these +terms. + + To do so, attach the following notices to the program. It is safest to +attach them to the start of each source file to most effectively convey +the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + + Copyright (C) 19yy + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 1, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) 19xx name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the +appropriate parts of the General Public License. Of course, the +commands you use may be called something other than `show w' and `show +c'; they could even be mouse-clicks or menu items--whatever suits your +program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + program `Gnomovision' (a program to direct compilers to make passes + at assemblers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +That's all there is to it! + + +--- The Artistic License 1.0 --- + +This software is Copyright (c) 2022 by Deriv Services Ltd. + +This is free software, licensed under: + + The Artistic License 1.0 + +The Artistic License + +Preamble + +The intent of this document is to state the conditions under which a Package +may be copied, such that the Copyright Holder maintains some semblance of +artistic control over the development of the package, while giving the users of +the package the right to use and distribute the Package in a more-or-less +customary fashion, plus the right to make reasonable modifications. + +Definitions: + + - "Package" refers to the collection of files distributed by the Copyright + Holder, and derivatives of that collection of files created through + textual modification. + - "Standard Version" refers to such a Package if it has not been modified, + or has been modified in accordance with the wishes of the Copyright + Holder. + - "Copyright Holder" is whoever is named in the copyright or copyrights for + the package. + - "You" is you, if you're thinking about copying or distributing this Package. + - "Reasonable copying fee" is whatever you can justify on the basis of media + cost, duplication charges, time of people involved, and so on. (You will + not be required to justify it to the Copyright Holder, but only to the + computing community at large as a market that must bear the fee.) + - "Freely Available" means that no fee is charged for the item itself, though + there may be fees involved in handling the item. It also means that + recipients of the item may redistribute it under the same conditions they + received it. + +1. You may make and give away verbatim copies of the source form of the +Standard Version of this Package without restriction, provided that you +duplicate all of the original copyright notices and associated disclaimers. + +2. You may apply bug fixes, portability fixes and other modifications derived +from the Public Domain or from the Copyright Holder. A Package modified in such +a way shall still be considered the Standard Version. + +3. You may otherwise modify your copy of this Package in any way, provided that +you insert a prominent notice in each changed file stating how and when you +changed that file, and provided that you do at least ONE of the following: + + a) place your modifications in the Public Domain or otherwise make them + Freely Available, such as by posting said modifications to Usenet or an + equivalent medium, or placing the modifications on a major archive site + such as ftp.uu.net, or by allowing the Copyright Holder to include your + modifications in the Standard Version of the Package. + + b) use the modified Package only within your corporation or organization. + + c) rename any non-standard executables so the names do not conflict with + standard executables, which must also be provided, and provide a separate + manual page for each non-standard executable that clearly documents how it + differs from the Standard Version. + + d) make other distribution arrangements with the Copyright Holder. + +4. You may distribute the programs of this Package in object code or executable +form, provided that you do at least ONE of the following: + + a) distribute a Standard Version of the executables and library files, + together with instructions (in the manual page or equivalent) on where to + get the Standard Version. + + b) accompany the distribution with the machine-readable source of the Package + with your modifications. + + c) accompany any non-standard executables with their corresponding Standard + Version executables, giving the non-standard executables non-standard + names, and clearly documenting the differences in manual pages (or + equivalent), together with instructions on where to get the Standard + Version. + + d) make other distribution arrangements with the Copyright Holder. + +5. You may charge a reasonable copying fee for any distribution of this +Package. You may charge any fee you choose for support of this Package. You +may not charge a fee for this Package itself. However, you may distribute this +Package in aggregate with other (possibly commercial) programs as part of a +larger (possibly commercial) software distribution provided that you do not +advertise this Package as a product of your own. + +6. The scripts and library files supplied as input to or produced as output +from the programs of this Package do not automatically fall under the copyright +of this Package, but belong to whomever generated them, and may be sold +commercially, and may be aggregated with this Package. + +7. C or perl subroutines supplied by you and linked into this Package shall not +be considered part of this Package. + +8. The name of the Copyright Holder may not be used to endorse or promote +products derived from this software without specific prior written permission. + +9. THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED +WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + +The End + From 73a73212ecb247b2247d8ed7105eb7decc6bfa38 Mon Sep 17 00:00:00 2001 From: lim-deriv Date: Fri, 21 Jun 2024 09:01:31 +0000 Subject: [PATCH 5/5] remove unwanted file --- Finance-Exchange-0.02/Changes | 7 - Finance-Exchange-0.02/LICENSE | 379 ---- Finance-Exchange-0.02/MANIFEST | 32 - Finance-Exchange-0.02/META.json | 122 -- Finance-Exchange-0.02/META.yml | 67 - Finance-Exchange-0.02/Makefile.PL | 90 - Finance-Exchange-0.02/README | 99 - Finance-Exchange-0.02/cpanfile | 12 - Finance-Exchange-0.02/dist.ini | 13 - Finance-Exchange-0.02/lib/Finance/Exchange.pm | 243 --- Finance-Exchange-0.02/share/exchange.yml | 1608 ----------------- .../share/exchanges_trading_days_aliases.yml | 29 - Finance-Exchange-0.02/t/00-check-deps.t | 15 - Finance-Exchange-0.02/t/00-compile.t | 60 - Finance-Exchange-0.02/t/00-report-prereqs.dd | 61 - Finance-Exchange-0.02/t/00-report-prereqs.t | 184 -- Finance-Exchange-0.02/t/exchange.t | 172 -- Finance-Exchange-0.02/t/rc/perlcriticrc | 25 - Finance-Exchange-0.02/t/rc/perltidyrc | 62 - Finance-Exchange-0.02/t/usage.t | 19 - Finance-Exchange-0.02/xt/author/critic.t | 7 - Finance-Exchange-0.02/xt/author/distmeta.t | 7 - Finance-Exchange-0.02/xt/author/eol.t | 33 - .../xt/author/minimum-version.t | 6 - Finance-Exchange-0.02/xt/author/mojibake.t | 9 - Finance-Exchange-0.02/xt/author/no-tabs.t | 33 - Finance-Exchange-0.02/xt/author/pod-syntax.t | 7 - Finance-Exchange-0.02/xt/author/portability.t | 10 - .../xt/author/test-version.t | 23 - .../xt/release/common_spelling.t | 11 - .../xt/release/cpan-changes.t | 10 - LICENSE | 379 ---- 32 files changed, 3834 deletions(-) delete mode 100644 Finance-Exchange-0.02/Changes delete mode 100644 Finance-Exchange-0.02/LICENSE delete mode 100644 Finance-Exchange-0.02/MANIFEST delete mode 100644 Finance-Exchange-0.02/META.json delete mode 100644 Finance-Exchange-0.02/META.yml delete mode 100644 Finance-Exchange-0.02/Makefile.PL delete mode 100644 Finance-Exchange-0.02/README delete mode 100644 Finance-Exchange-0.02/cpanfile delete mode 100644 Finance-Exchange-0.02/dist.ini delete mode 100644 Finance-Exchange-0.02/lib/Finance/Exchange.pm delete mode 100644 Finance-Exchange-0.02/share/exchange.yml delete mode 100644 Finance-Exchange-0.02/share/exchanges_trading_days_aliases.yml delete mode 100644 Finance-Exchange-0.02/t/00-check-deps.t delete mode 100644 Finance-Exchange-0.02/t/00-compile.t delete mode 100644 Finance-Exchange-0.02/t/00-report-prereqs.dd delete mode 100644 Finance-Exchange-0.02/t/00-report-prereqs.t delete mode 100755 Finance-Exchange-0.02/t/exchange.t delete mode 100644 Finance-Exchange-0.02/t/rc/perlcriticrc delete mode 100644 Finance-Exchange-0.02/t/rc/perltidyrc delete mode 100644 Finance-Exchange-0.02/t/usage.t delete mode 100644 Finance-Exchange-0.02/xt/author/critic.t delete mode 100644 Finance-Exchange-0.02/xt/author/distmeta.t delete mode 100644 Finance-Exchange-0.02/xt/author/eol.t delete mode 100644 Finance-Exchange-0.02/xt/author/minimum-version.t delete mode 100644 Finance-Exchange-0.02/xt/author/mojibake.t delete mode 100644 Finance-Exchange-0.02/xt/author/no-tabs.t delete mode 100644 Finance-Exchange-0.02/xt/author/pod-syntax.t delete mode 100644 Finance-Exchange-0.02/xt/author/portability.t delete mode 100644 Finance-Exchange-0.02/xt/author/test-version.t delete mode 100644 Finance-Exchange-0.02/xt/release/common_spelling.t delete mode 100644 Finance-Exchange-0.02/xt/release/cpan-changes.t delete mode 100644 LICENSE diff --git a/Finance-Exchange-0.02/Changes b/Finance-Exchange-0.02/Changes deleted file mode 100644 index ef35f4f..0000000 --- a/Finance-Exchange-0.02/Changes +++ /dev/null @@ -1,7 +0,0 @@ -Revision history for Finance-Exchange - -0.02 2024-06-21 08:36:16+00:00 UTC - - Add new OTC exchanges (CME_OTC and SGX_OTC) for new symbols - -0.01 2022-10-14 10:50:42 +0000 - - Initial release diff --git a/Finance-Exchange-0.02/LICENSE b/Finance-Exchange-0.02/LICENSE deleted file mode 100644 index 77d8c9e..0000000 --- a/Finance-Exchange-0.02/LICENSE +++ /dev/null @@ -1,379 +0,0 @@ -This software is copyright (c) 2022 by Deriv Services Ltd. - -This is free software; you can redistribute it and/or modify it under -the same terms as the Perl 5 programming language system itself. - -Terms of the Perl programming language system itself - -a) the GNU General Public License as published by the Free - Software Foundation; either version 1, or (at your option) any - later version, or -b) the "Artistic License" - ---- The GNU General Public License, Version 1, February 1989 --- - -This software is Copyright (c) 2022 by Deriv Services Ltd. - -This is free software, licensed under: - - The GNU General Public License, Version 1, February 1989 - - GNU GENERAL PUBLIC LICENSE - Version 1, February 1989 - - Copyright (C) 1989 Free Software Foundation, Inc. - 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The license agreements of most software companies try to keep users -at the mercy of those companies. By contrast, our General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. The -General Public License applies to the Free Software Foundation's -software and to any other program whose authors commit to using it. -You can use it for your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Specifically, the General Public License is designed to make -sure that you have the freedom to give away or sell copies of free -software, that you receive source code or can get it if you want it, -that you can change the software or use pieces of it in new free -programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of a such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must tell them their rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License Agreement applies to any program or other work which -contains a notice placed by the copyright holder saying it may be -distributed under the terms of this General Public License. The -"Program", below, refers to any such program or work, and a "work based -on the Program" means either the Program or any work containing the -Program or a portion of it, either verbatim or with modifications. Each -licensee is addressed as "you". - - 1. You may copy and distribute verbatim copies of the Program's source -code as you receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice and -disclaimer of warranty; keep intact all the notices that refer to this -General Public License and to the absence of any warranty; and give any -other recipients of the Program a copy of this General Public License -along with the Program. You may charge a fee for the physical act of -transferring a copy. - - 2. You may modify your copy or copies of the Program or any portion of -it, and copy and distribute such modifications under the terms of Paragraph -1 above, provided that you also do the following: - - a) cause the modified files to carry prominent notices stating that - you changed the files and the date of any change; and - - b) cause the whole of any work that you distribute or publish, that - in whole or in part contains the Program or any part thereof, either - with or without modifications, to be licensed at no charge to all - third parties under the terms of this General Public License (except - that you may choose to grant warranty protection to some or all - third parties, at your option). - - c) If the modified program normally reads commands interactively when - run, you must cause it, when started running for such interactive use - in the simplest and most usual way, to print or display an - announcement including an appropriate copyright notice and a notice - that there is no warranty (or else, saying that you provide a - warranty) and that users may redistribute the program under these - conditions, and telling the user how to view a copy of this General - Public License. - - d) You may charge a fee for the physical act of transferring a - copy, and you may at your option offer warranty protection in - exchange for a fee. - -Mere aggregation of another independent work with the Program (or its -derivative) on a volume of a storage or distribution medium does not bring -the other work under the scope of these terms. - - 3. You may copy and distribute the Program (or a portion or derivative of -it, under Paragraph 2) in object code or executable form under the terms of -Paragraphs 1 and 2 above provided that you also do one of the following: - - a) accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of - Paragraphs 1 and 2 above; or, - - b) accompany it with a written offer, valid for at least three - years, to give any third party free (except for a nominal charge - for the cost of distribution) a complete machine-readable copy of the - corresponding source code, to be distributed under the terms of - Paragraphs 1 and 2 above; or, - - c) accompany it with the information you received as to where the - corresponding source code may be obtained. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form alone.) - -Source code for a work means the preferred form of the work for making -modifications to it. For an executable file, complete source code means -all the source code for all modules it contains; but, as a special -exception, it need not include source code for modules which are standard -libraries that accompany the operating system on which the executable -file runs, or for standard header files or definitions files that -accompany that operating system. - - 4. You may not copy, modify, sublicense, distribute or transfer the -Program except as expressly provided under this General Public License. -Any attempt otherwise to copy, modify, sublicense, distribute or transfer -the Program is void, and will automatically terminate your rights to use -the Program under this License. However, parties who have received -copies, or rights to use copies, from you under this General Public -License will not have their licenses terminated so long as such parties -remain in full compliance. - - 5. By copying, distributing or modifying the Program (or any work based -on the Program) you indicate your acceptance of this license to do so, -and all its terms and conditions. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the original -licensor to copy, distribute or modify the Program subject to these -terms and conditions. You may not impose any further restrictions on the -recipients' exercise of the rights granted herein. - - 7. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of the license which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -the license, you may choose any version ever published by the Free Software -Foundation. - - 8. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 9. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 10. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS - - Appendix: How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to humanity, the best way to achieve this is to make it -free software which everyone can redistribute and change under these -terms. - - To do so, attach the following notices to the program. It is safest to -attach them to the start of each source file to most effectively convey -the exclusion of warranty; and each file should have at least the -"copyright" line and a pointer to where the full notice is found. - - - Copyright (C) 19yy - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 1, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA - - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) 19xx name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the -appropriate parts of the General Public License. Of course, the -commands you use may be called something other than `show w' and `show -c'; they could even be mouse-clicks or menu items--whatever suits your -program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the - program `Gnomovision' (a program to direct compilers to make passes - at assemblers) written by James Hacker. - - , 1 April 1989 - Ty Coon, President of Vice - -That's all there is to it! - - ---- The Artistic License 1.0 --- - -This software is Copyright (c) 2022 by Deriv Services Ltd. - -This is free software, licensed under: - - The Artistic License 1.0 - -The Artistic License - -Preamble - -The intent of this document is to state the conditions under which a Package -may be copied, such that the Copyright Holder maintains some semblance of -artistic control over the development of the package, while giving the users of -the package the right to use and distribute the Package in a more-or-less -customary fashion, plus the right to make reasonable modifications. - -Definitions: - - - "Package" refers to the collection of files distributed by the Copyright - Holder, and derivatives of that collection of files created through - textual modification. - - "Standard Version" refers to such a Package if it has not been modified, - or has been modified in accordance with the wishes of the Copyright - Holder. - - "Copyright Holder" is whoever is named in the copyright or copyrights for - the package. - - "You" is you, if you're thinking about copying or distributing this Package. - - "Reasonable copying fee" is whatever you can justify on the basis of media - cost, duplication charges, time of people involved, and so on. (You will - not be required to justify it to the Copyright Holder, but only to the - computing community at large as a market that must bear the fee.) - - "Freely Available" means that no fee is charged for the item itself, though - there may be fees involved in handling the item. It also means that - recipients of the item may redistribute it under the same conditions they - received it. - -1. You may make and give away verbatim copies of the source form of the -Standard Version of this Package without restriction, provided that you -duplicate all of the original copyright notices and associated disclaimers. - -2. You may apply bug fixes, portability fixes and other modifications derived -from the Public Domain or from the Copyright Holder. A Package modified in such -a way shall still be considered the Standard Version. - -3. You may otherwise modify your copy of this Package in any way, provided that -you insert a prominent notice in each changed file stating how and when you -changed that file, and provided that you do at least ONE of the following: - - a) place your modifications in the Public Domain or otherwise make them - Freely Available, such as by posting said modifications to Usenet or an - equivalent medium, or placing the modifications on a major archive site - such as ftp.uu.net, or by allowing the Copyright Holder to include your - modifications in the Standard Version of the Package. - - b) use the modified Package only within your corporation or organization. - - c) rename any non-standard executables so the names do not conflict with - standard executables, which must also be provided, and provide a separate - manual page for each non-standard executable that clearly documents how it - differs from the Standard Version. - - d) make other distribution arrangements with the Copyright Holder. - -4. You may distribute the programs of this Package in object code or executable -form, provided that you do at least ONE of the following: - - a) distribute a Standard Version of the executables and library files, - together with instructions (in the manual page or equivalent) on where to - get the Standard Version. - - b) accompany the distribution with the machine-readable source of the Package - with your modifications. - - c) accompany any non-standard executables with their corresponding Standard - Version executables, giving the non-standard executables non-standard - names, and clearly documenting the differences in manual pages (or - equivalent), together with instructions on where to get the Standard - Version. - - d) make other distribution arrangements with the Copyright Holder. - -5. You may charge a reasonable copying fee for any distribution of this -Package. You may charge any fee you choose for support of this Package. You -may not charge a fee for this Package itself. However, you may distribute this -Package in aggregate with other (possibly commercial) programs as part of a -larger (possibly commercial) software distribution provided that you do not -advertise this Package as a product of your own. - -6. The scripts and library files supplied as input to or produced as output -from the programs of this Package do not automatically fall under the copyright -of this Package, but belong to whomever generated them, and may be sold -commercially, and may be aggregated with this Package. - -7. C or perl subroutines supplied by you and linked into this Package shall not -be considered part of this Package. - -8. The name of the Copyright Holder may not be used to endorse or promote -products derived from this software without specific prior written permission. - -9. THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED -WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - -The End - diff --git a/Finance-Exchange-0.02/MANIFEST b/Finance-Exchange-0.02/MANIFEST deleted file mode 100644 index fd5265c..0000000 --- a/Finance-Exchange-0.02/MANIFEST +++ /dev/null @@ -1,32 +0,0 @@ -# This file was automatically generated by Dist::Zilla::Plugin::Manifest v6.029. -Changes -LICENSE -MANIFEST -META.json -META.yml -Makefile.PL -README -cpanfile -dist.ini -lib/Finance/Exchange.pm -share/exchange.yml -share/exchanges_trading_days_aliases.yml -t/00-check-deps.t -t/00-compile.t -t/00-report-prereqs.dd -t/00-report-prereqs.t -t/exchange.t -t/rc/perlcriticrc -t/rc/perltidyrc -t/usage.t -xt/author/critic.t -xt/author/distmeta.t -xt/author/eol.t -xt/author/minimum-version.t -xt/author/mojibake.t -xt/author/no-tabs.t -xt/author/pod-syntax.t -xt/author/portability.t -xt/author/test-version.t -xt/release/common_spelling.t -xt/release/cpan-changes.t diff --git a/Finance-Exchange-0.02/META.json b/Finance-Exchange-0.02/META.json deleted file mode 100644 index b38666d..0000000 --- a/Finance-Exchange-0.02/META.json +++ /dev/null @@ -1,122 +0,0 @@ -{ - "abstract" : "represents a financial stock exchange object.", - "author" : [ - "DERIV " - ], - "dynamic_config" : 0, - "generated_by" : "Dist::Zilla version 6.029, CPAN::Meta::Converter version 2.150010", - "license" : [ - "perl_5" - ], - "meta-spec" : { - "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", - "version" : 2 - }, - "name" : "Finance-Exchange", - "no_index" : { - "directory" : [ - "eg", - "share", - "shares", - "t", - "xt" - ] - }, - "prereqs" : { - "configure" : { - "requires" : { - "ExtUtils::MakeMaker" : "7.64", - "File::ShareDir::Install" : "0.06" - } - }, - "develop" : { - "requires" : { - "Dist::Zilla" : "5", - "Dist::Zilla::Plugin::PerlTidy" : "0", - "Dist::Zilla::Plugin::Test::Perl::Critic" : "0", - "Dist::Zilla::PluginBundle::Author::DERIV" : "0", - "Software::License::Perl_5" : "0", - "Test::CPAN::Changes" : "0.19", - "Test::CPAN::Meta" : "0", - "Test::EOL" : "0", - "Test::MinimumVersion" : "0", - "Test::Mojibake" : "0", - "Test::More" : "0.96", - "Test::NoTabs" : "0", - "Test::Perl::Critic" : "0", - "Test::Pod" : "1.41", - "Test::Portability::Files" : "0", - "Test::Version" : "1", - "strict" : "0", - "warnings" : "0" - } - }, - "runtime" : { - "requires" : { - "Clone" : "0", - "File::ShareDir" : "0", - "Moose" : "0", - "Time::Duration::Concise::Localize" : "0", - "YAML::XS" : "0" - } - }, - "test" : { - "recommends" : { - "CPAN::Meta" : "2.120900" - }, - "requires" : { - "ExtUtils::MakeMaker" : "0", - "File::Spec" : "0", - "IO::Handle" : "0", - "IPC::Open3" : "0", - "Test::CheckDeps" : "0.010", - "Test::Deep" : "0", - "Test::Exception" : "0", - "Test::FailWarnings" : "0.008", - "Test::More" : "0.98", - "Test::Most" : "0.34", - "perl" : "5.006", - "strict" : "0", - "warnings" : "0" - } - } - }, - "provides" : { - "Finance::Exchange" : { - "file" : "lib/Finance/Exchange.pm", - "version" : "0.02" - } - }, - "release_status" : "stable", - "resources" : { - "bugtracker" : { - "web" : "https://github.com/binary-com/perl-Finance-Exchange/issues" - }, - "homepage" : "https://github.com/binary-com/perl-Finance-Exchange", - "repository" : { - "type" : "git", - "url" : "https://github.com/binary-com/perl-Finance-Exchange.git", - "web" : "https://github.com/binary-com/perl-Finance-Exchange" - } - }, - "version" : "0.02", - "x_authority" : "cpan:DERIV", - "x_contributors" : [ - "Jun Bon ", - "Md Masud Rana ", - "Jean-Yves Sireau ", - "Tom Molesworth ", - "Yng Shan ", - "chylli-binary <52912308+chylli-binary@users.noreply.github.com>", - "lim-deriv ", - "Arun Venkataraman ", - "Hossein Shahsahebi <67314444+hossein-binary@users.noreply.github.com>", - "mukesh-deriv <85932084+mukesh-deriv@users.noreply.github.com>", - "Raunak Kathuria ", - "stanly-binary " - ], - "x_generated_by_perl" : "v5.26.2", - "x_serialization_backend" : "Cpanel::JSON::XS version 4.32", - "x_spdx_expression" : "Artistic-1.0-Perl OR GPL-1.0-or-later" -} - diff --git a/Finance-Exchange-0.02/META.yml b/Finance-Exchange-0.02/META.yml deleted file mode 100644 index a22d71a..0000000 --- a/Finance-Exchange-0.02/META.yml +++ /dev/null @@ -1,67 +0,0 @@ ---- -abstract: 'represents a financial stock exchange object.' -author: - - 'DERIV ' -build_requires: - ExtUtils::MakeMaker: '0' - File::Spec: '0' - IO::Handle: '0' - IPC::Open3: '0' - Test::CheckDeps: '0.010' - Test::Deep: '0' - Test::Exception: '0' - Test::FailWarnings: '0.008' - Test::More: '0.98' - Test::Most: '0.34' - perl: '5.006' - strict: '0' - warnings: '0' -configure_requires: - ExtUtils::MakeMaker: '7.64' - File::ShareDir::Install: '0.06' -dynamic_config: 0 -generated_by: 'Dist::Zilla version 6.029, CPAN::Meta::Converter version 2.150010' -license: perl -meta-spec: - url: http://module-build.sourceforge.net/META-spec-v1.4.html - version: '1.4' -name: Finance-Exchange -no_index: - directory: - - eg - - share - - shares - - t - - xt -provides: - Finance::Exchange: - file: lib/Finance/Exchange.pm - version: '0.02' -requires: - Clone: '0' - File::ShareDir: '0' - Moose: '0' - Time::Duration::Concise::Localize: '0' - YAML::XS: '0' -resources: - bugtracker: https://github.com/binary-com/perl-Finance-Exchange/issues - homepage: https://github.com/binary-com/perl-Finance-Exchange - repository: https://github.com/binary-com/perl-Finance-Exchange.git -version: '0.02' -x_authority: cpan:DERIV -x_contributors: - - 'Jun Bon ' - - 'Md Masud Rana ' - - 'Jean-Yves Sireau ' - - 'Tom Molesworth ' - - 'Yng Shan ' - - 'chylli-binary <52912308+chylli-binary@users.noreply.github.com>' - - 'lim-deriv ' - - 'Arun Venkataraman ' - - 'Hossein Shahsahebi <67314444+hossein-binary@users.noreply.github.com>' - - 'mukesh-deriv <85932084+mukesh-deriv@users.noreply.github.com>' - - 'Raunak Kathuria ' - - 'stanly-binary ' -x_generated_by_perl: v5.26.2 -x_serialization_backend: 'YAML::Tiny version 1.73' -x_spdx_expression: 'Artistic-1.0-Perl OR GPL-1.0-or-later' diff --git a/Finance-Exchange-0.02/Makefile.PL b/Finance-Exchange-0.02/Makefile.PL deleted file mode 100644 index 8879dc2..0000000 --- a/Finance-Exchange-0.02/Makefile.PL +++ /dev/null @@ -1,90 +0,0 @@ -# This file was automatically generated by Dist::Zilla::Plugin::MakeMaker v6.029. -use strict; -use warnings; - -use 5.006; - -use ExtUtils::MakeMaker 7.64; - -use File::ShareDir::Install; -$File::ShareDir::Install::INCLUDE_DOTFILES = 1; -$File::ShareDir::Install::INCLUDE_DOTDIRS = 1; -install_share dist => "share"; - - -my %WriteMakefileArgs = ( - "ABSTRACT" => "represents a financial stock exchange object.", - "AUTHOR" => "DERIV ", - "CONFIGURE_REQUIRES" => { - "ExtUtils::MakeMaker" => "7.64", - "File::ShareDir::Install" => "0.06" - }, - "DISTNAME" => "Finance-Exchange", - "LICENSE" => "perl", - "MIN_PERL_VERSION" => "5.006", - "NAME" => "Finance::Exchange", - "PREREQ_PM" => { - "Clone" => 0, - "File::ShareDir" => 0, - "Moose" => 0, - "Time::Duration::Concise::Localize" => 0, - "YAML::XS" => 0 - }, - "TEST_REQUIRES" => { - "ExtUtils::MakeMaker" => 0, - "File::Spec" => 0, - "IO::Handle" => 0, - "IPC::Open3" => 0, - "Test::CheckDeps" => "0.010", - "Test::Deep" => 0, - "Test::Exception" => 0, - "Test::FailWarnings" => "0.008", - "Test::More" => "0.98", - "Test::Most" => "0.34", - "strict" => 0, - "warnings" => 0 - }, - "VERSION" => "0.02", - "test" => { - "TESTS" => "t/*.t" - } -); - - -my %FallbackPrereqs = ( - "Clone" => 0, - "ExtUtils::MakeMaker" => 0, - "File::ShareDir" => 0, - "File::Spec" => 0, - "IO::Handle" => 0, - "IPC::Open3" => 0, - "Moose" => 0, - "Test::CheckDeps" => "0.010", - "Test::Deep" => 0, - "Test::Exception" => 0, - "Test::FailWarnings" => "0.008", - "Test::More" => "0.98", - "Test::Most" => "0.34", - "Time::Duration::Concise::Localize" => 0, - "YAML::XS" => 0, - "strict" => 0, - "warnings" => 0 -); - - -unless ( eval { ExtUtils::MakeMaker->VERSION(6.63_03) } ) { - delete $WriteMakefileArgs{TEST_REQUIRES}; - delete $WriteMakefileArgs{BUILD_REQUIRES}; - $WriteMakefileArgs{PREREQ_PM} = \%FallbackPrereqs; -} - -delete $WriteMakefileArgs{CONFIGURE_REQUIRES} - unless eval { ExtUtils::MakeMaker->VERSION(6.52) }; - -WriteMakefile(%WriteMakefileArgs); - -{ -package -MY; -use File::ShareDir::Install qw(postamble); -} diff --git a/Finance-Exchange-0.02/README b/Finance-Exchange-0.02/README deleted file mode 100644 index 85bab26..0000000 --- a/Finance-Exchange-0.02/README +++ /dev/null @@ -1,99 +0,0 @@ -NAME - - Finance::Exchange - represents a financial stock exchange object. - -VERSION - - version 0.01 - -SYNOPSIS - - use Finance::Exchange; - - my $exchange_symbol = 'LSE'; # London Stocks Exchange - my $exchange = Finance::Exchange->create_exchange($exchange_symbol); - -DESCRIPTION - - This is a generic representation of a financial stock exchange. - - USAGE - - my $exchange = Finance::Exchange->create_exchange('LSE'); - is $exchange->symbol, 'LSE'; - is $exchange->display_name, 'London Stock Exchange'; - is $exchange->trading_days, 'weekdays'; - is $exchange->trading_timezone, 'Europe/London'; - # The list of days starts on Sunday and is a set of flags indicating whether - # we trade on that day or not - is $exchange->trading_days_list, [ 0, 1, 1, 1, 1, 1, 0 ]; - is $exchange->market_times, { ... }; - is $exchange->delay_amount, 15, 'LSE minimum delay is 15 minutes'; - is $exchange->currency, 'GBP', 'LSE is traded in pound sterling'; - is $exchange->trading_date_can_differ, 0, 'only applies to AU/NZ'; - ... - - create_exchange - - Exchange object constructor. - -ATTRIBUTES - - display_name - - Exchange display name, e.g. London Stock Exchange. - - symbol - - Exchange symbol, e.g. LSE to represent London Stocks Exchange. - - trading_days - - An exchange's trading day category. - - For example, an exchange that trades from Monday to Friday is given a - trading days category of 'weekdays'. - - The list is enumerated in the exchanges_trading_days_aliases.yml file. - - trading_timezone - - The timezone in which the exchange conducts business. - - This should be a string which will allow the standard DateTime module - to find the proper information. - - trading_days_list - - List the trading day index which is defined in - exchanges_trading_days_aliases.yml. - - An example of a 'weekdays' trading days list is as follow: - 0 # Sun - - 1 # Mon - 1 # Tues - 1 # Wed - 1 # Thurs - 1 # Fri - 0 # Sat - - market_times - - A hash reference of human-readable exchange trading times in Greenwich - Mean Time (GMT). - - The trading times are broken into three categories: - - 1. standard - which represents the trading times in non Day Light - Saving (DST) period. 2. dst - which represents the trading time in DST - period. 3. partial_trading - which represents the trading breaks (e.g. - lunch break) in a trading day - - delay_amount - - The acceptable delay amount of feed on this exchange, in minutes. - Default is 60 minutes. - - currency - - The currency in which the exchange is traded in. - - trading_date_can_differ - - A boolean flag to indicate if an exchange would open on the previous - GMT date due to DST. - diff --git a/Finance-Exchange-0.02/cpanfile b/Finance-Exchange-0.02/cpanfile deleted file mode 100644 index e30bb71..0000000 --- a/Finance-Exchange-0.02/cpanfile +++ /dev/null @@ -1,12 +0,0 @@ -requires 'Moose'; -requires 'Time::Duration::Concise::Localize'; -requires 'Clone'; -requires 'File::ShareDir'; -requires 'YAML::XS'; - -on test => sub { - requires 'Test::More', '>= 0.98'; - requires 'Test::Most', '>= 0.34'; - requires 'Test::FailWarnings', '>= 0.008'; - requires 'Test::Exception'; -}; diff --git a/Finance-Exchange-0.02/dist.ini b/Finance-Exchange-0.02/dist.ini deleted file mode 100644 index 2bae747..0000000 --- a/Finance-Exchange-0.02/dist.ini +++ /dev/null @@ -1,13 +0,0 @@ -name = Finance-Exchange -author = DERIV -license = Perl_5 -copyright_holder = Deriv Services Ltd -copyright_year = 2022 - -[@Author::DERIV] -allow_dirty = lib/Finance/Exchange.pm --remove = PodInherit -[PerlTidy] -perltidyrc = t/rc/perltidyrc -[Test::Perl::Critic] -critic_config = t/rc/perlcriticrc diff --git a/Finance-Exchange-0.02/lib/Finance/Exchange.pm b/Finance-Exchange-0.02/lib/Finance/Exchange.pm deleted file mode 100644 index 77028e6..0000000 --- a/Finance-Exchange-0.02/lib/Finance/Exchange.pm +++ /dev/null @@ -1,243 +0,0 @@ -package Finance::Exchange; - -use Moose; - -use Time::Duration::Concise::Localize; -use Clone qw(clone); -use File::ShareDir; -use YAML::XS qw(LoadFile); - -our $VERSION = '0.02'; - -=head1 NAME - -Finance::Exchange - represents a financial stock exchange object. - -=head1 VERSION - -version 0.01 - -=head1 SYNOPSIS - - use Finance::Exchange; - - my $exchange_symbol = 'LSE'; # London Stocks Exchange - my $exchange = Finance::Exchange->create_exchange($exchange_symbol); - -=head1 DESCRIPTION - -This is a generic representation of a financial stock exchange. - -=head2 USAGE - - my $exchange = Finance::Exchange->create_exchange('LSE'); - is $exchange->symbol, 'LSE'; - is $exchange->display_name, 'London Stock Exchange'; - is $exchange->trading_days, 'weekdays'; - is $exchange->trading_timezone, 'Europe/London'; - # The list of days starts on Sunday and is a set of flags indicating whether - # we trade on that day or not - is $exchange->trading_days_list, [ 0, 1, 1, 1, 1, 1, 0 ]; - is $exchange->market_times, { ... }; - is $exchange->delay_amount, 15, 'LSE minimum delay is 15 minutes'; - is $exchange->currency, 'GBP', 'LSE is traded in pound sterling'; - is $exchange->trading_date_can_differ, 0, 'only applies to AU/NZ'; - ... - -=cut - -my ($cached_objects, $exchange_config, $trading_day_aliases); - -BEGIN { - $exchange_config = YAML::XS::LoadFile(File::ShareDir::dist_file('Finance-Exchange', 'exchange.yml')); - $trading_day_aliases = YAML::XS::LoadFile(File::ShareDir::dist_file('Finance-Exchange', 'exchanges_trading_days_aliases.yml')); -} - -=head2 create_exchange - -Exchange object constructor. - -=cut - -sub create_exchange { - my ($class, $symbol) = @_; - - die 'symbol is required' unless $symbol; - - if (my $cached = $cached_objects->{$symbol}) { - return $cached; - } - - my $params_ref = clone($exchange_config->{$symbol}); - die 'Config for exchange[' . $symbol . '] not specified in exchange.yml' unless $params_ref; - - $params_ref->{_market_times} = delete $params_ref->{market_times}; - my $new = $class->new($params_ref); - $cached_objects->{$symbol} = $new; - - return $new; -} - -=head1 ATTRIBUTES - -=head2 display_name - -Exchange display name, e.g. London Stock Exchange. - -=head2 symbol - -Exchange symbol, e.g. LSE to represent London Stocks Exchange. - -=head2 trading_days - -An exchange's trading day category. - -For example, an exchange that trades from Monday to Friday is given a trading days category of 'weekdays'. - -The list is enumerated in the exchanges_trading_days_aliases.yml file. - -=head2 trading_timezone - -The timezone in which the exchange conducts business. - -This should be a string which will allow the standard DateTime module to find the proper information. - -=cut - -has [ - qw( display_name symbol trading_days trading_timezone - ) -] => ( - is => 'ro', - required => 1, -); - -has _market_times => ( - is => 'ro', - required => 1, -); - -=head2 trading_days_list - -List the trading day index which is defined in exchanges_trading_days_aliases.yml. - -An example of a 'weekdays' trading days list is as follow: -- 0 # Sun -- 1 # Mon -- 1 # Tues -- 1 # Wed -- 1 # Thurs -- 1 # Fri -- 0 # Sat - -=cut - -has trading_days_list => ( - is => 'ro', - lazy_build => 1, -); - -sub _build_trading_days_list { - my $self = shift; - - return $trading_day_aliases->{$self->trading_days}; -} - -=head2 market_times - -A hash reference of human-readable exchange trading times in Greenwich Mean Time (GMT). - -The trading times are broken into three categories: - -1. standard - which represents the trading times in non Day Light Saving (DST) period. - 2. dst - which represents the trading time in DST period. - 3. partial_trading - which represents the trading breaks (e.g. lunch break) in a trading day - -=cut - -has market_times => ( - is => 'ro', - lazy_build => 1, -); - -sub _build_market_times { - my $self = shift; - - my $mt = $self->_market_times; - my $market_times; - - foreach my $key (keys %$mt) { - foreach my $trading_segment (keys %{$mt->{$key}}) { - if ($trading_segment eq 'day_of_week_extended_trading_breaks') { next; } - elsif ($trading_segment ne 'trading_breaks') { - $market_times->{$key}->{$trading_segment} = Time::Duration::Concise::Localize->new( - interval => $mt->{$key}->{$trading_segment}, - ); - } else { - my $break_intervals = $mt->{$key}->{$trading_segment}; - my @converted; - foreach my $int (@$break_intervals) { - my $open_int = Time::Duration::Concise::Localize->new( - interval => $int->[0], - ); - my $close_int = Time::Duration::Concise::Localize->new( - interval => $int->[1], - ); - push @converted, [$open_int, $close_int]; - } - $market_times->{$key}->{$trading_segment} = \@converted; - } - } - } - - return $market_times; -} - -=head2 delay_amount - -The acceptable delay amount of feed on this exchange, in minutes. Default is 60 minutes. - -=cut - -has delay_amount => ( - is => 'ro', - isa => 'Num', - default => 60, -); - -=head2 currency - -The currency in which the exchange is traded in. - -=cut - -has currency => ( - is => 'ro', -); - -=head2 trading_date_can_differ - -A boolean flag to indicate if an exchange would open on the previous GMT date due to DST. - -=cut - -has trading_date_can_differ => ( - is => 'ro', - lazy_build => 1, -); - -sub _build_trading_date_can_differ { - my $self = shift; - - my @premidnight_opens = - grep { $_->seconds < 0 } - map { $self->market_times->{$_}->{daily_open} } - grep { exists $self->market_times->{$_}->{daily_open} } - keys %{$self->market_times}; - return (scalar @premidnight_opens) ? 1 : 0; -} - -no Moose; -__PACKAGE__->meta->make_immutable; - -1; diff --git a/Finance-Exchange-0.02/share/exchange.yml b/Finance-Exchange-0.02/share/exchange.yml deleted file mode 100644 index 04ab48e..0000000 --- a/Finance-Exchange-0.02/share/exchange.yml +++ /dev/null @@ -1,1608 +0,0 @@ ---- -ADS: - currency: AED - delay_amount: '1440' - display_name: Abu Dhabi Exchange - market_times: - partial_trading: {} - standard: - daily_close: 10h - daily_open: 6h - daily_settlement: 13h - symbol: ADS - trading_days: sun_thru_thu - trading_timezone: Asia/Dubai -ASX: - currency: AUD - delay_amount: '15' - display_name: Australian Stock Exchange - market_times: - dst: - daily_close: 5h - daily_open: -1h - daily_settlement: 8h - partial_trading: - dst_close: 3h10m - dst_open: -1h - standard_close: 4h10m - standard_open: 0s - standard: - daily_close: 6h - daily_open: 0s - daily_settlement: 9h - symbol: ASX - trading_days: weekdays - trading_timezone: Australia/Sydney -ASX_OTC: - currency: AUD - delay_amount: '0' - display_name: OTC Australia Stock Exchange - market_times: - dst: - daily_close: 19h - daily_open: 0s - daily_settlement: 21h - trading_breaks: - - - 5h30m - - 6h30m - partial_trading: {} - standard: - daily_close: 20h - daily_open: 0s - daily_settlement: 22h - trading_breaks: - - - 6h30m - - 7h30m - symbol: ASX_OTC - trading_days: weekdays - trading_timezone: Australia/Sydney -ASX_S: - currency: AUD - delay_amount: '20' - display_name: Australian Stock Exchange - market_times: - dst: - daily_close: 5h - daily_open: -1h - daily_settlement: 8h - partial_trading: - dst_close: 3h10m - dst_open: -1h - standard_close: 4h10m - standard_open: 0s - standard: - daily_close: 6h - daily_open: 0s - daily_settlement: 9h - symbol: ASX_S - trading_days: weekdays - trading_timezone: Australia/Sydney -BI: - currency: EUR - delay_amount: '1440' - display_name: Borsa Italiana - market_times: - dst: - daily_close: 15h25m - daily_open: 7h - daily_settlement: 18h25m - partial_trading: {} - standard: - daily_close: 16h25m - daily_open: 8h - daily_settlement: 19h25m - symbol: BI - trading_days: weekdays - trading_timezone: Europe/Rome -BIS: - currency: TRY - delay_amount: '0' - display_name: Borsa Istanbul - market_times: - dst: - daily_close: 14h30m - daily_open: 6h35m - daily_settlement: 17h30m - trading_breaks: - - - 9h30m - - 10h30m - partial_trading: - dst_close: 9h30m - dst_open: 6h35m - standard_close: 10h30m - standard_open: 7h35m - standard: - daily_close: 15h30m - daily_open: 7h35m - daily_settlement: 18h30m - trading_breaks: - - - 10h30m - - 11h30m - symbol: BIS - trading_days: weekdays - trading_timezone: Europe/Istanbul -BM: - currency: EUR - delay_amount: '15' - display_name: Borsa Madrid - market_times: - dst: - daily_close: 15h30m - daily_open: 7h - daily_settlement: 18h30m - partial_trading: - dst_close: 8h - dst_open: 12h - standard_close: 7h - standard_open: 11h - standard: - daily_close: 16h30m - daily_open: 8h - daily_settlement: 19h30m - symbol: BM - trading_days: weekdays - trading_timezone: Europe/Madrid -BM_OTC: - currency: EUR - delay_amount: '0' - display_name: OTC Borsa Madrid - market_times: - dst: - daily_close: 17h - daily_open: 6h - daily_settlement: 19h - partial_trading: {} - standard: - daily_close: 18h - daily_open: 7h - daily_settlement: 20h - symbol: BM_OTC - trading_days: weekdays - trading_timezone: Europe/Madrid -BMF: - currency: BRL - delay_amount: '1440' - display_name: Borsa de Mercadorias Future Exchange - market_times: - dst: - daily_close: 18h55m - daily_open: 10h - daily_settlement: 23h59m59s - partial_trading: {} - standard: - daily_close: 19h55m - daily_open: 11h - daily_settlement: 23h59m59s - symbol: BMF - trading_days: weekdays - trading_timezone: EST -BOVESPA: - currency: BRL - delay_amount: '15' - display_name: BOVESPA - market_times: - dst: - daily_close: 18h55m - daily_open: 12h00m - daily_settlement: 21h55m - partial_trading: {} - standard: - daily_close: 19h55m - daily_open: 13h00m - daily_settlement: 22h55m - symbol: BOVESPA - trading_days: weekdays - trading_timezone: America/Sao_Paulo -BRENT_OTC: - currency: USD - delay_amount: '0' - display_name: OTC BRENT EXCHANGE - market_times: - dst: - daily_close: 21h - daily_open: 0 - daily_settlement: 23h59m59s - standard: - daily_close: 22h - daily_open: 1h - daily_settlement: 23h59m59s - symbol: BRENT_OTC - trading_days: weekdays - trading_timezone: UTC -BSE: - currency: INR - delay_amount: '10' - display_name: Bombay Stock Exchange - market_times: - partial_trading: {} - standard: - daily_close: 10h00m - daily_open: 03h45m - daily_settlement: 13h - symbol: BSE - trading_days: weekdays - trading_timezone: Asia/Kolkata -CME: - currency: USD - delay_amount: '1440' - display_name: Chicago Board of Trade Exchange - market_times: - dst: - daily_close: 21h15m - daily_open: -2h - daily_settlement: 23h59m59s - partial_trading: - dst_close: 17h15m - dst_open: -1h - standard_close: 18h15m - standard_open: -2h - standard: - daily_close: 22h15m - daily_open: -1h - daily_settlement: 23h59m59s - symbol: CME - trading_days: weekdays - trading_timezone: America/New_York -CME_OTC: - currency: USD - delay_amount: '0' - display_name: OTC Chicago Board of Trade Exchange - market_times: - dst: - daily_close: 20h - daily_open: 13h30m - daily_settlement: 22h - partial_trading: {} - standard: - daily_close: 21h - daily_open: 14h30m - daily_settlement: 23h - symbol: CME_OTC - trading_days: weekdays - trading_timezone: America/New_York -DFM: - currency: AED - delay_amount: '1440' - display_name: Dubai Exchange - market_times: - partial_trading: {} - standard: - daily_close: 9h45m - daily_open: 6h - daily_settlement: 12h45m - symbol: DFM - trading_days: sun_thru_thu - trading_timezone: Asia/Dubai -EEI_AM: - currency: EUR - delay_amount: '1440' - display_name: Euronext Derivatives Amsterdam Exchange - market_times: - dst: - daily_close: 20h00m - daily_open: 6h - daily_settlement: 23h59m59s - partial_trading: - dst_close: 11h - dst_open: 6h - standard_close: 12h - standard_open: 7h - standard: - daily_close: 21h00m - daily_open: 7h - daily_settlement: 23h59m59s - symbol: EEI_AM - trading_days: weekdays - trading_timezone: Europe/Berlin -EEI_BU: - currency: EUR - delay_amount: '1440' - display_name: Euronext Derivatives Brussels Exchange - market_times: - dst: - daily_close: 15h35m - daily_open: 7h - daily_settlement: 23h59m59s - partial_trading: - dst_close: 11h - dst_open: 7h - standard_close: 12h - standard_open: 8h - standard: - daily_close: 16h35m - daily_open: 8h - daily_settlement: 23h59m59s - symbol: EEI_BU - trading_days: weekdays - trading_timezone: Europe/Berlin -EEI_LI: - currency: EUR - delay_amount: '1440' - display_name: Euronext Derivatives Lisbon Exchange - market_times: - dst: - daily_close: 15h40m - daily_open: 7h - daily_settlement: 23h59m59s - partial_trading: - dst_close: 11h - dst_open: 7h - standard_close: 12h - standard_open: 8h - standard: - daily_close: 16h40m - daily_open: 8h - daily_settlement: 23h59m59s - symbol: EEI_LI - trading_days: weekdays - trading_timezone: Europe/Berlin -EEI_PA: - currency: EUR - delay_amount: '1440' - display_name: Euronext Derivatives Paris Exchange - market_times: - dst: - daily_close: 20h00m - daily_open: 6h - daily_settlement: 23h59m59s - partial_trading: - dst_close: 11h - dst_open: 6h - standard_close: 12h - standard_open: 7h - standard: - daily_close: 21h00m - daily_open: 7h - daily_settlement: 23h59m59s - symbol: EEI_PA - trading_days: weekdays - trading_timezone: Europe/Berlin -EGX: - currency: EGP - delay_amount: '1440' - display_name: Egypt Exchange - market_times: - partial_trading: {} - standard: - daily_close: 12h30m - daily_open: 8h - daily_settlement: 15h30m - symbol: EGX - trading_days: sun_thru_thu - trading_timezone: Asia/Dubai -EUREX: - currency: EUR - delay_amount: '1440' - display_name: EUREX - market_times: - dst: - daily_close: 20h - daily_open: 5h50m - daily_settlement: 23h59m59s - partial_trading: {} - standard: - daily_close: 21h - daily_open: 6h50m - daily_settlement: 23h59m59s - symbol: EUREX - trading_days: weekdays - trading_timezone: Europe/Berlin -EUREX_SWISS: - currency: CHF - delay_amount: '1440' - display_name: EUREX SWISS Exchange - market_times: - dst: - daily_close: 20h - daily_open: 5h50m - daily_settlement: 23h59m59s - partial_trading: {} - standard: - daily_close: 21h - daily_open: 6h50m - daily_settlement: 23h59m59s - symbol: EUREX_SWISS - trading_days: weekdays - trading_timezone: Europe/Zurich -EURONEXT: - currency: EUR - delay_amount: 0 - display_name: EURONEXT - market_times: - dst: - daily_close: 15h30m - daily_open: 7h - daily_settlement: 18h30m - partial_trading: - dst_close: 13h05m - dst_open: 7h - standard_close: 14h05m - standard_open: 8h - standard: - daily_close: 16h30m - daily_open: 8h - daily_settlement: 19h30m - symbol: EURONEXT - trading_days: weekdays - trading_timezone: Europe/Paris -EURONEXT_OTC: - currency: EUR - delay_amount: '0' - display_name: OTC EURONEXT - market_times: - dst: - daily_close: 19h30m - daily_open: 6h - daily_settlement: 21h30m - partial_trading: {} - standard: - daily_close: 20h30m - daily_open: 7h - daily_settlement: 22h30m - symbol: EURONEXT_OTC - trading_days: weekdays - trading_timezone: Europe/Paris -FOREX: - delay_amount: '0' - display_name: Forex - market_times: - partial_trading: {} - standard: - daily_close: 23h59m59s - daily_open: 0s - daily_settlement: 23h59m59s - symbol: FOREX - trading_days: weekdays - trading_timezone: UTC -METAL: - delay_amount: '0' - display_name: Metal - market_times: - partial_trading: - standard_close: 16h30m - standard_open: 0s - dst: - daily_close: 23h59m59s - daily_open: 0s - daily_settlement: 23h59m59s - trading_breaks: - - - 21h - - 22h - standard: - daily_close: 23h59m59s - daily_open: 0s - daily_settlement: 23h59m59s - trading_breaks: - - - 22h - - 23h - symbol: METAL - trading_days: weekdays - trading_timezone: America/New_York -FS: - currency: GBP - delay_amount: '1440' - display_name: FS - market_times: - dst: - daily_close: 20h00m - daily_open: 13h30m - daily_settlement: 23h59m59s - partial_trading: {} - standard: - daily_close: 21h00m - daily_open: 14h30m - daily_settlement: 23h59m59s - symbol: FS - trading_days: weekdays - trading_timezone: Europe/London -FSE: - currency: EUR - delay_amount: '15' - display_name: Frankfurt Stock Exchange - market_times: - dst: - daily_close: 15h30m - daily_open: 7h - daily_settlement: 18h30m - partial_trading: - dst_close: 12h - dst_open: 7h - standard_close: 13h - standard_open: 8h - standard: - daily_close: 16h30m - daily_open: 8h - daily_settlement: 19h30m - symbol: FSE - trading_days: weekdays - trading_timezone: Europe/Berlin -FSE_OTC: - currency: EUR - delay_amount: '0' - display_name: OTC Frankfurt Stock Exchange - market_times: - dst: - daily_close: 19h30m - daily_open: 6h - daily_settlement: 21h30m - partial_trading: {} - standard: - daily_close: 20h30m - daily_open: 7h - daily_settlement: 22h30m - symbol: FSE_OTC - trading_days: weekdays - trading_timezone: Europe/Berlin -HKF: - currency: HKD - delay_amount: '1440' - display_name: Hong Kong Future Exchange - market_times: - partial_trading: - standard_close: 4h - standard_open: 1h15m - standard: - afternoon_open: 5h - daily_close: 15h45m - daily_open: 1h15m - daily_settlement: 23h59m59s - morning_close: 4h - symbol: HKF - trading_days: weekdays - trading_timezone: Asia/Hong_Kong -HKSE: - currency: HKD - delay_amount: '60' - display_name: Hong Kong Stock Exchange - market_times: - partial_trading: - standard_close: 3h59m - standard_open: 1h30m - standard: - daily_close: 7h40m - daily_open: 1h30m - daily_settlement: 10h40m - trading_breaks: - - - 3h59m - - 5h00m - symbol: HKSE - trading_days: weekdays - trading_timezone: Asia/Hong_Kong -HKSE_OTC: - currency: HKD - delay_amount: '0' - display_name: OTC Hong Kong Stock Exchange - market_times: - partial_trading: - standard_close: 4h - standard_open: 1h30m - standard: - daily_close: 8h - daily_open: 1h30m - daily_settlement: 10h - trading_breaks: - - - 4h - - 5h - symbol: HKSE_OTC - trading_days: weekdays - trading_timezone: Asia/Hong_Kong -ICE_LIFFE: - currency: GBP - delay_amount: '1440' - display_name: LIFFE Exchange - market_times: - dst: - daily_close: 20h - daily_open: 00h00m - daily_settlement: 23h59m59s - partial_trading: - dst_close: 11h - dst_open: 00h00m - standard_close: 12h - standard_open: 1h - standard: - daily_close: 21h - daily_open: 1h - daily_settlement: 23h59m59s - symbol: ICE_LIFFE - trading_days: weekdays - trading_timezone: UTC -IDM: - currency: EUR - delay_amount: '1440' - display_name: Borsa Italiana Future Exchange - market_times: - dst: - daily_close: 15h40m - daily_open: 7h - daily_settlement: 23h59m59s - partial_trading: - dst_close: 11h - dst_open: 7h - standard_close: 12h - standard_open: 8h - standard: - daily_close: 16h40m - daily_open: 8h - daily_settlement: 23h59m59s - symbol: IDM - trading_days: weekdays - trading_timezone: Europe/Rome -ISE: - currency: EUR - delay_amount: '15' - display_name: Irish Stock Exchange - market_times: - dst: - daily_close: 15h30m - daily_open: 7h - daily_settlement: 21h30m - partial_trading: - dst_close: 11h30m - dst_open: 7h - standard_close: 12h30m - standard_open: 8h - standard: - daily_close: 16h30m - daily_open: 8h - daily_settlement: 22h30m - symbol: ISE - trading_days: weekdays - trading_timezone: Europe/Dublin -JSC: - currency: IDR - delay_amount: '1440' - display_name: Jakarta Stock Exchange - market_times: - partial_trading: {} - standard: - daily_close: 8h50m - daily_open: 2h00m - daily_settlement: 11h50m - day_of_week_extended_trading_breaks: 5 - trading_breaks: - - - 5h00m - - 6h30m - - - 4h30m - - 7h00m - symbol: JSC - trading_days: weekdays - trading_timezone: Asia/Jakarta -JSE: - currency: ZAR - delay_amount: '30' - display_name: Johannesburg Stock Exchange - market_times: - partial_trading: - standard_close: 10h - standard_open: 7h - standard: - daily_close: 14h50m - daily_open: 7h - daily_settlement: 17h50m - symbol: JSE - trading_days: weekdays - trading_timezone: Africa/Johannesburg -JSE_OTC: - currency: ZAR - delay_amount: '0' - display_name: OTC Johannesburg Stock Exchange - market_times: - dst: - daily_close: 14h30m - daily_open: 5h30m - daily_settlement: 17h30m - partial_trading: {} - standard: - daily_close: 15h30m - daily_open: 6h30m - daily_settlement: 18h30m - symbol: JSE_OTC - trading_days: weekdays - trading_timezone: Africa/Johannesburg -KRX: - currency: KRW - delay_amount: '1440' - display_name: Korean Stock Exchange - market_times: - partial_trading: - standard_close: 6h - standard_open: 1h - standard: - daily_close: 5h50m - daily_open: 0s - daily_settlement: 9h - symbol: KRX - trading_days: weekdays - trading_timezone: Asia/Seoul -KSE: - currency: KWD - delay_amount: 0 - display_name: Kuwait Stock Exchange - market_times: - partial_trading: {} - standard: - daily_close: 9h30m - daily_open: 6h - daily_settlement: 12h30m - symbol: KRX - trading_days: sun_thru_thu - trading_timezone: Asia/Kuwait -LSE: - currency: GBP - delay_amount: '15' - display_name: London Stock Exchange - market_times: - dst: - daily_close: 15h30m - daily_open: 7h - daily_settlement: 18h30m - partial_trading: - dst_close: 11h30m - dst_open: 7h - standard_close: 12h30m - standard_open: 8h - standard: - daily_close: 16h30m - daily_open: 8h - daily_settlement: 19h30m - symbol: LSE - trading_days: weekdays - trading_timezone: Europe/London -LSE_OTC: - currency: GBP - delay_amount: '0' - display_name: OTC London Stock Exchange - market_times: - dst: - daily_close: 20h - daily_open: 6h - daily_settlement: 22h - partial_trading: {} - standard: - daily_close: 21h - daily_open: 7h - daily_settlement: 23h - symbol: LSE_OTC - trading_days: weekdays - trading_timezone: Europe/London -MICEX: - currency: RUB - delay_amount: '0' - display_name: Moscow MICEX Exchange - market_times: - partial_trading: {} - standard: - daily_close: 15h30m - daily_open: 7h - daily_settlement: 18h30m - symbol: MICEX - trading_days: weekdays - trading_timezone: Europe/Moscow -MEFF: - currency: EUR - delay_amount: '1440' - display_name: Marid Future Exchange - market_times: - dst: - daily_close: 18h - daily_open: 7h - daily_settlement: 23h59m59s - partial_trading: {} - standard: - daily_close: 19h - daily_open: 8h - daily_settlement: 23h59m59s - symbol: MEFF - trading_days: weekdays - trading_timezone: Europe/Madrid -MOF: - currency: USD - delay_amount: '1440' - display_name: Russian future Exchange - market_times: - partial_trading: ~ - standard: - afternoon_open: 16h30m - daily_close: 20h50m - daily_open: 7h - daily_settlement: 23h59m59s - morning_close: 15h45m - symbol: MOF - trading_days: weekdays - trading_timezone: UTC -NASDAQ: - currency: USD - delay_amount: '60' - display_name: NASDAQ - market_times: - dst: - daily_close: 20h - daily_open: 13h30m - daily_settlement: 22h59m59s - partial_trading: - dst_close: 17h - dst_open: 13h30m - standard_close: 18h - standard_open: 14h30m - standard: - daily_close: 21h - daily_open: 14h30m - daily_settlement: 23h59m59s - symbol: NASDAQ - trading_days: weekdays - trading_timezone: America/New_York -NASDAQ_OTC: - currency: USD - delay_amount: '0' - display_name: NASDAQ_OTC - market_times: - dst: - daily_close: 20h - daily_open: 6h - daily_settlement: 22h - partial_trading: {} - standard: - daily_close: 21h - daily_open: 7h - daily_settlement: 23h - symbol: NASDAQ_OTC - trading_days: weekdays - trading_timezone: America/New_York -NASDAQ_INDEX: - currency: USD - delay_amount: '60' - display_name: NASDAQ - market_times: - dst: - daily_close: 20h - daily_open: 13h30m - daily_settlement: 22h59m59s - partial_trading: - dst_close: 17h - dst_open: 13h30m - standard_close: 18h - standard_open: 14h30m - standard: - daily_close: 21h - daily_open: 14h30m - daily_settlement: 23h59m59s - symbol: NASDAQ_INDEX - trading_days: weekdays - trading_timezone: America/New_York -NSE: - currency: INR - delay_amount: '15' - display_name: India National Stock Exchange - market_times: - partial_trading: {} - standard: - daily_close: 10h00m - daily_open: 03h45m - daily_settlement: 13h - symbol: NSE - trading_days: weekdays - trading_timezone: Asia/Calcutta -NSE_OTC: - currency: INR - delay_amount: '0' - display_name: OTC India National Stock Exchange - market_times: - dst: - daily_close: 9h - daily_open: 0s - daily_settlement: 12h - partial_trading: {} - standard: - daily_close: 10h - daily_open: 1h - daily_settlement: 13h - symbol: NSE_OTC - trading_days: weekdays - trading_timezone: Asia/Calcutta -NYSE: - currency: USD - delay_amount: '1440' - display_name: New York Stock Exchange - market_times: - dst: - daily_close: 20h - daily_open: 13h30m - daily_settlement: 22h59m59s - partial_trading: - dst_close: 17h - dst_open: 13h30m - standard_close: 18h - standard_open: 14h30m - standard: - daily_close: 21h - daily_open: 14h30m - daily_settlement: 23h59m59s - symbol: NYSE - trading_days: weekdays - trading_timezone: America/New_York -NYSE_OTC: - currency: USD - delay_amount: '0' - display_name: OTC New York Stock Exchange - market_times: - dst: - daily_close: 20h - daily_open: 6h - daily_settlement: 22h - partial_trading: {} - standard: - daily_close: 21h - daily_open: 7h - daily_settlement: 23h - symbol: NYSE_OTC - trading_days: weekdays - trading_timezone: America/New_York -NYSE_SPC: - currency: USD - delay_amount: '1440' - display_name: New York Stock Exchange - market_times: - dst: - daily_close: 20h - daily_open: 13h30m - daily_settlement: 22h59m59s - partial_trading: - dst_close: 17h - dst_open: 13h30m - standard_close: 18h - standard_open: 14h30m - standard: - daily_close: 21h - daily_open: 14h30m - daily_settlement: 23h59m59s - symbol: NYSE_SPC - trading_days: weekdays - trading_timezone: America/New_York -NYSE_SPC_OTC: - currency: USD - delay_amount: '0' - display_name: OTC New York Stock Exchange - market_times: - dst: - daily_close: 20h - daily_open: 6h - daily_settlement: 22h - partial_trading: {} - standard: - daily_close: 21h - daily_open: 7h - daily_settlement: 23h - symbol: NYSE_SPC_OTC - trading_days: weekdays - trading_timezone: America/New_York -NZSE: - currency: NZD - delay_amount: '15' - display_name: New Zealand Stock Exchange - market_times: - dst: - daily_close: 6h - daily_open: -1h - daily_settlement: 9h - partial_trading: - dst_close: 6h - dst_open: -1h - standard_close: 5h - standard_open: -2h - standard: - daily_close: 5h - daily_open: -2h - daily_settlement: 8h - symbol: NZSE - trading_days: weekdays - trading_timezone: Pacific/Auckland -ODLS: - currency: USD - delay_amount: '0' - display_name: ODL Securities - market_times: - dst: - daily_close: 18h30m - daily_open: 7h15m - daily_settlement: 23h59m59s - partial_trading: - dst_close: 11h30m - dst_open: 7h15m - standard_close: 12h30m - standard_open: 8h15m - standard: - daily_close: 19h30m - daily_open: 8h15m - daily_settlement: 23h59m59s - symbol: ODLS - trading_days: weekdays - trading_timezone: Europe/London -OIL_OTC: - currency: USD - delay_amount: '0' - display_name: OTC Oil Exchange - market_times: - dst: - daily_close: 24h - daily_open: 0 - daily_settlement: 23h59m59s - day_of_week_extended_trading_breaks: 5 - trading_breaks: - - - 21h - 22h - - 21h - 24h - standard: - daily_close: 24h - daily_open: 0 - daily_settlement: 23h59m59s - day_of_week_extended_trading_breaks: 5 - trading_breaks: - - - 22h - 23h - - 22h - 24h - symbol: OIL_OTC - trading_days: weekdays - trading_timezone: UTC -OMX: - currency: SEK - delay_amount: '15' - display_name: OMX - market_times: - dst: - daily_close: 15h25m - daily_open: 7h - daily_settlement: 18h25m - partial_trading: - dst_close: 11h - dst_open: 7h - standard_close: 12h - standard_open: 8h - standard: - daily_close: 16h25m - daily_open: 8h - daily_settlement: 19h25m - symbol: OMX - trading_days: weekdays - trading_timezone: Europe/Stockholm -OSE: - currency: JPY - delay_amount: '1440' - display_name: Osaka Exchange - market_times: - partial_trading: ~ - standard: - afternoon_open: 7h30m - daily_close: 17h55m - daily_open: 0s - daily_settlement: 23h59m59s - morning_close: 6h15m - symbol: OSE - trading_days: weekdays - trading_timezone: Asia/Tokyo -OSLO: - currency: NOK - delay_amount: '15' - display_name: OSLO - market_times: - dst: - daily_close: 14h30m - daily_open: 07h00m - daily_settlement: 17h30m - partial_trading: - dst_close: 11h - dst_open: 7h - standard_close: 12h - standard_open: 8h - standard: - daily_close: 15h30m - daily_open: 08h00m - daily_settlement: 18h30m - symbol: OSLO - trading_days: weekdays - trading_timezone: Europe/Oslo -RANDOM: - delay_amount: '0' - display_name: Randoms - market_times: - partial_trading: {} - standard: - daily_close: 23h59m59s - daily_open: 0s - daily_settlement: 23h59m59s - symbol: RANDOM - trading_days: everyday - trading_timezone: UTC -RANDOM_NOCTURNE: - delay_amount: '0' - display_name: Nocturnal Randoms - market_times: - partial_trading: {} - standard: - daily_close: 11h59m59s - daily_open: -12h - daily_settlement: 11h59m59s - symbol: RANDOM_NOCTURNE - trading_days: everyday - trading_timezone: UTC -RTS: - currency: USD - delay_amount: '15' - display_name: RTS - market_times: - partial_trading: {} - standard: - daily_close: 15h45m - daily_open: 07h00m - daily_settlement: 18h45m - symbol: RTS - trading_days: weekdays - trading_timezone: Europe/Moscow -SAS: - currency: SAR - delay_amount: '1440' - display_name: Saudi Arabic Exchange - market_times: - partial_trading: {} - standard: - daily_close: 12h30m - daily_open: 8h - daily_settlement: 15h30m - symbol: SAS - trading_days: sun_thru_thu - trading_timezone: Asia/Dubai -SES: - currency: SGD - delay_amount: '1440' - display_name: Singapore Stock Exchange - market_times: - partial_trading: - standard_close: 4h30m - standard_open: 1h - standard: - daily_close: 9h - daily_open: 1h - daily_settlement: 12h - symbol: SES - trading_days: weekdays - trading_timezone: Asia/Singapore -SFE: - currency: AUD - delay_amount: '1440' - display_name: Sydney Future Exchange - market_times: - dst: - afternoon_open: 6h30m - daily_close: 8h00m - daily_open: -2h50m - daily_settlement: 23h59m59s - morning_close: 6h00m - partial_trading: - dst_close: 3h10m - dst_open: -1h - standard_close: 4h10m - standard_open: -1h - standard: - afternoon_open: 7h30m - daily_close: 9h00m - daily_open: -1h50m - daily_settlement: 23h59m59s - morning_close: 7h00m - symbol: SFE - trading_days: weekdays - trading_timezone: Australia/Sydney -SGX: - currency: SGD - delay_amount: '1440' - display_name: Singapore Derivatives Exchange - market_times: - partial_trading: - standard_close: 4h30m - standard_open: 1h - standard: - daily_close: 9h - daily_open: 1h - daily_settlement: 23h59m59s - symbol: SGX - trading_days: weekdays - trading_timezone: Asia/Singapore -SGX_OTC: - currency: SGD - delay_amount: '0' - display_name: OTC Singapore Derivatives Exchange - market_times: - partial_trading: {} - standard: - daily_close: 9h - daily_open: 1h - daily_settlement: 23h - symbol: SGX_OTC - trading_days: weekdays - trading_timezone: Asia/Singapore -SP_GLOBAL: - currency: USD - delay_amount: '1440' - display_name: CME_GLOBAL - market_times: - dst: - daily_close: 20h00m - daily_open: 13h30m - daily_settlement: 23h59m59s - partial_trading: {} - standard: - daily_close: 21h00m - daily_open: 14h30m - daily_settlement: 23h59m59s - symbol: SP_GLOBAL - trading_days: weekdays - trading_timezone: America/Chicago -SP_GSCI: - currency: USD - delay_amount: '1440' - display_name: SP_GSCI - market_times: - dst: - daily_close: 15h30m - daily_open: 07h00m - daily_settlement: 23h59m59s - partial_trading: - dst_close: 11h30m - dst_open: 07h00m - standard_close: 12h30m - standard_open: 08h00m - standard: - daily_close: 16h30m - daily_open: 08h00m - daily_settlement: 23h59m59s - symbol: SP_GSCI - trading_days: weekdays - trading_timezone: America/Chicago -SSE: - currency: CNY - delay_amount: '15' - display_name: Shanghai Stock Exchange - market_times: - partial_trading: {} - standard: - daily_close: 7h - daily_open: 1h30m - daily_settlement: 10h - trading_breaks: - - - 3h30m - - 5h00m - symbol: SSE - trading_days: weekdays - trading_timezone: Asia/Shanghai -STOXX: - currency: EUR - delay_amount: '20' - display_name: STOXX Exchange - market_times: - dst: - daily_close: 15h30m - daily_open: 7h - daily_settlement: 18h30m - partial_trading: - dst_close: 13h05m - dst_open: 7h - standard_close: 14h05m - standard_open: 8h - standard: - daily_close: 16h30m - daily_open: 8h - daily_settlement: 19h30m - symbol: STOXX - trading_days: weekdays - trading_timezone: Europe/Berlin -STOXX_OTC: - currency: EUR - delay_amount: '0' - display_name: OTC STOXX Exchange - market_times: - dst: - daily_close: 19h - daily_open: 6h - daily_settlement: 21h - partial_trading: {} - standard: - daily_close: 20h - daily_open: 7h - daily_settlement: 22h - symbol: STOXX_OTC - trading_days: weekdays - trading_timezone: Europe/Berlin -SWX: - currency: CHF - delay_amount: '1440' - display_name: Swiss Exchange - market_times: - dst: - daily_close: 15h20m - daily_open: 7h - daily_settlement: 18h20m - partial_trading: {} - standard: - daily_close: 16h20m - daily_open: 8h - daily_settlement: 19h20m - symbol: SWX - trading_days: weekdays - trading_timezone: Europe/Zurich -SWX_OTC: - currency: CHF - delay_amount: '0' - display_name: OTC Swiss Exchange - market_times: - dst: - daily_close: 16h - daily_open: 7h - daily_settlement: 18h - partial_trading: {} - standard: - daily_close: 17h - daily_open: 8h - daily_settlement: 19h - symbol: SWX_OTC - trading_days: weekdays - trading_timezone: Europe/Zurich -SYNEURONEXT: - currency: EUR - delay_amount: '0' - display_name: Synthetic Euronext - market_times: - dst: - daily_close: 20h00m - daily_open: 7h15m - daily_settlement: 20h00m - standard: - daily_close: 21h00m - daily_open: 8h15m - daily_settlement: 21h00m - symbol: SYNEURONEXT - trading_days: weekdays - trading_timezone: Europe/Paris -SYNFSE: - currency: EUR - delay_amount: '0' - display_name: Synthetic FSE - market_times: - dst: - daily_close: 20h - daily_open: 7h15m - daily_settlement: 20h00m - partial_trading: - dst_close: 12h - dst_open: 7h15m - standard_close: 13h - standard_open: 8h15m - standard: - daily_close: 21h00m - daily_open: 8h15m - daily_settlement: 21h00m - symbol: SYNFSE - trading_days: weekdays - trading_timezone: Europe/Berlin -SYNLSE: - currency: GBP - delay_amount: '0' - display_name: Synthetic LSE - market_times: - dst: - daily_close: 20h00m - daily_open: 7h15m - daily_settlement: 20h00m - standard: - daily_close: 21h00m - daily_open: 8h15m - daily_settlement: 21h00m - symbol: SYNLSE - trading_days: weekdays - trading_timezone: Europe/London -SYNNYSE_DJI: - currency: USD - delay_amount: '0' - display_name: Synthetic NYSE - market_times: - dst: - daily_close: 20h - daily_open: 7h15m - daily_settlement: 20h - trading_breaks: - - - 13h20m - - 13h40m - partial_trading: - dst_close: 17h - dst_open: 13h40m - standard_close: 18h - standard_open: 14h40m - standard: - daily_close: 21h - daily_open: 8h15m - daily_settlement: 21h - trading_breaks: - - - 14h20m - - 14h40m - symbol: SYNNYSE_DJI - trading_days: weekdays - trading_timezone: America/New_York -SYNNYSE_SPC: - currency: USD - delay_amount: '0' - display_name: Synthetic NYSE_SPC - market_times: - dst: - daily_close: 20h - daily_open: 7h20m - daily_settlement: 20h - trading_breaks: - - - 13h20m - - 13h40m - partial_trading: - dst_close: 17h - dst_open: 13h40m - standard_close: 18h - standard_open: 14h40m - standard: - daily_close: 21h - daily_open: 8h20m - daily_settlement: 21h - trading_breaks: - - - 14h20m - - 14h40m - symbol: SYNNYSE_SPC - trading_days: weekdays - trading_timezone: America/New_York -SYNSTOXX: - currency: EUR - delay_amount: '0' - display_name: Synthetic STOXX - market_times: - dst: - daily_close: 20h - daily_open: 7h15m - daily_settlement: 20h - standard: - daily_close: 21h - daily_open: 8h15m - daily_settlement: 21h - symbol: SYNSTOXX - trading_days: weekdays - trading_timezone: Europe/Berlin -SYNSWX: - currency: CHF - delay_amount: '0' - display_name: Synthetic SWX - market_times: - dst: - daily_close: 20h - daily_open: 7h - daily_settlement: 20h - partial_trading: ~ - standard: - daily_close: 21h - daily_open: 8h - daily_settlement: 21h - symbol: SYNSWX - trading_days: weekdays - trading_timezone: Europe/Zurich -SYNTSE: - currency: JPY - delay_amount: '0' - display_name: Synthetic TSE - market_times: - partial_trading: ~ - standard: - daily_close: 20h00m - daily_open: 00h15m - daily_settlement: 20h00m - symbol: SYNTSE - trading_days: weekdays - trading_timezone: Asia/Tokyo -SZSE: - currency: CNY - delay_amount: '30' - display_name: Shenzhen Stock Exchange - market_times: - partial_trading: {} - standard: - daily_close: 7h - daily_open: 1h30m - daily_settlement: 10h - trading_breaks: - - - 3h30m - - 5h00m - symbol: SZSE - trading_days: weekdays - trading_timezone: Asia/Shanghai -TRSE: - currency: CAD - delay_amount: '1440' - display_name: Toronto Stock Exchange - market_times: - dst: - daily_close: 20h - daily_open: 13h30m - daily_settlement: 22h59m59s - partial_trading: - dst_close: 17h - dst_open: 13h30m - standard_close: 18h - standard_open: 14h30m - standard: - daily_close: 21h - daily_open: 14h30m - daily_settlement: 23h59m59s - symbol: TRSE - trading_days: weekdays - trading_timezone: America/Toronto -TRSE_OTC: - currency: CAD - delay_amount: '0' - display_name: OTC Toronto Stock Exchange - market_times: - dst: - daily_close: 19h15m - daily_open: 12h30m - daily_settlement: 22h30m - partial_trading: {} - standard: - daily_close: 20h15m - daily_open: 13h30m - daily_settlement: 23h30m - symbol: TRSE_OTC - trading_days: weekdays - trading_timezone: America/Toronto -TSE: - currency: JPY - delay_amount: '1440' - display_name: Tokyo Stock Exchange - market_times: - partial_trading: {} - standard: - daily_close: 6h - daily_open: 0s - daily_settlement: 9h - trading_breaks: - - - 2h30m - - 3h30m - symbol: TSE - trading_days: weekdays - trading_timezone: Asia/Tokyo -TSE_OTC: - currency: JPY - delay_amount: '0' - display_name: OTC Tokyo Stock Exchange - market_times: - partial_trading: {} - standard: - daily_close: 20h - daily_open: 0s - daily_settlement: 22h - symbol: TSE_OTC - trading_days: weekdays - trading_timezone: Asia/Tokyo -TSE_S: - currency: JPY - delay_amount: '1440' - display_name: Tokyo Stock Exchange - market_times: - partial_trading: {} - standard: - afternoon_open: 3h30m - daily_close: 6h - daily_open: 0s - daily_settlement: 9h - morning_close: 2h30m - symbol: TSE_S - trading_days: weekdays - trading_timezone: Asia/Tokyo -CRYPTOCURRENCY: - delay_amount: '0' - display_name: Cryptocurrency - market_times: - partial_trading: {} - standard: - daily_close: 23h59m59s - daily_open: 0s - daily_settlement: 23h59m59s - symbol: CRYPTOCURRENCY - trading_days: everyday - trading_timezone: UTC diff --git a/Finance-Exchange-0.02/share/exchanges_trading_days_aliases.yml b/Finance-Exchange-0.02/share/exchanges_trading_days_aliases.yml deleted file mode 100644 index 49fc101..0000000 --- a/Finance-Exchange-0.02/share/exchanges_trading_days_aliases.yml +++ /dev/null @@ -1,29 +0,0 @@ ---- -## -# This is a bitmap of the day number mod 7: [0..6] => [Sunday .. Saturday] that represent whether the exchange is open or not on that day. -# All markets are traded in either of these three group . Example: Volatility Indices trade on everyday, Forex and most of the indices trade on weekedays and Middle east indices trade on Sun to Thurs. - -everyday: - - 1 # Sun - - 1 # Mon - - 1 # Tues - - 1 # Wed - - 1 # Thurs - - 1 # Fri - - 1 # Sat -weekdays: - - 0 # Sun - - 1 # Mon - - 1 # Tues - - 1 # Wed - - 1 # Thurs - - 1 # Fri - - 0 # Sat -sun_thru_thu: - - 1 # Sun - - 1 # Mon - - 1 # Tues - - 1 # Wed - - 1 # Thurs - - 0 # Fri - - 0 # Sat diff --git a/Finance-Exchange-0.02/t/00-check-deps.t b/Finance-Exchange-0.02/t/00-check-deps.t deleted file mode 100644 index a0a25c6..0000000 --- a/Finance-Exchange-0.02/t/00-check-deps.t +++ /dev/null @@ -1,15 +0,0 @@ -use strict; -use warnings; - -# this test was generated with Dist::Zilla::Plugin::Test::CheckDeps 0.014 - -use Test::More 0.94; -use Test::CheckDeps 0.010; - -check_dependencies('classic'); - -if (0) { - BAIL_OUT("Missing dependencies") if !Test::More->builder->is_passing; -} - -done_testing; diff --git a/Finance-Exchange-0.02/t/00-compile.t b/Finance-Exchange-0.02/t/00-compile.t deleted file mode 100644 index 8d2b088..0000000 --- a/Finance-Exchange-0.02/t/00-compile.t +++ /dev/null @@ -1,60 +0,0 @@ -use 5.006; -use strict; -use warnings; - -# this test was generated with Dist::Zilla::Plugin::Test::Compile 2.058 - -use Test::More; - -plan tests => 1 + ($ENV{AUTHOR_TESTING} ? 1 : 0); - -my @module_files = ( - 'Finance/Exchange.pm' -); - - - -# no fake home requested - -my @switches = ( - -d 'blib' ? '-Mblib' : '-Ilib', -); - -use File::Spec; -use IPC::Open3; -use IO::Handle; - -open my $stdin, '<', File::Spec->devnull or die "can't open devnull: $!"; - -my @warnings; -for my $lib (@module_files) -{ - # see L - my $stderr = IO::Handle->new; - - diag('Running: ', join(', ', map { my $str = $_; $str =~ s/'/\\'/g; q{'} . $str . q{'} } - $^X, @switches, '-e', "require q[$lib]")) - if $ENV{PERL_COMPILE_TEST_DEBUG}; - - my $pid = open3($stdin, '>&STDERR', $stderr, $^X, @switches, '-e', "require q[$lib]"); - binmode $stderr, ':crlf' if $^O eq 'MSWin32'; - my @_warnings = <$stderr>; - waitpid($pid, 0); - is($?, 0, "$lib loaded ok"); - - shift @_warnings if @_warnings and $_warnings[0] =~ /^Using .*\bblib/ - and not eval { +require blib; blib->VERSION('1.01') }; - - if (@_warnings) - { - warn @_warnings; - push @warnings, @_warnings; - } -} - - - -is(scalar(@warnings), 0, 'no warnings found') - or diag 'got warnings: ', ( Test::More->can('explain') ? Test::More::explain(\@warnings) : join("\n", '', @warnings) ) if $ENV{AUTHOR_TESTING}; - - diff --git a/Finance-Exchange-0.02/t/00-report-prereqs.dd b/Finance-Exchange-0.02/t/00-report-prereqs.dd deleted file mode 100644 index e3560b8..0000000 --- a/Finance-Exchange-0.02/t/00-report-prereqs.dd +++ /dev/null @@ -1,61 +0,0 @@ -do { my $x = { - 'configure' => { - 'requires' => { - 'ExtUtils::MakeMaker' => '7.64', - 'File::ShareDir::Install' => '0.06' - } - }, - 'develop' => { - 'requires' => { - 'Dist::Zilla' => '5', - 'Dist::Zilla::Plugin::PerlTidy' => '0', - 'Dist::Zilla::Plugin::Test::Perl::Critic' => '0', - 'Dist::Zilla::PluginBundle::Author::DERIV' => '0', - 'Software::License::Perl_5' => '0', - 'Test::CPAN::Changes' => '0.19', - 'Test::CPAN::Meta' => '0', - 'Test::EOL' => '0', - 'Test::MinimumVersion' => '0', - 'Test::Mojibake' => '0', - 'Test::More' => '0.96', - 'Test::NoTabs' => '0', - 'Test::Perl::Critic' => '0', - 'Test::Pod' => '1.41', - 'Test::Portability::Files' => '0', - 'Test::Version' => '1', - 'strict' => '0', - 'warnings' => '0' - } - }, - 'runtime' => { - 'requires' => { - 'Clone' => '0', - 'File::ShareDir' => '0', - 'Moose' => '0', - 'Time::Duration::Concise::Localize' => '0', - 'YAML::XS' => '0' - } - }, - 'test' => { - 'recommends' => { - 'CPAN::Meta' => '2.120900' - }, - 'requires' => { - 'ExtUtils::MakeMaker' => '0', - 'File::Spec' => '0', - 'IO::Handle' => '0', - 'IPC::Open3' => '0', - 'Test::CheckDeps' => '0.010', - 'Test::Deep' => '0', - 'Test::Exception' => '0', - 'Test::FailWarnings' => '0.008', - 'Test::More' => '0.98', - 'Test::Most' => '0.34', - 'perl' => '5.006', - 'strict' => '0', - 'warnings' => '0' - } - } - }; - $x; - } \ No newline at end of file diff --git a/Finance-Exchange-0.02/t/00-report-prereqs.t b/Finance-Exchange-0.02/t/00-report-prereqs.t deleted file mode 100644 index 1fa9c75..0000000 --- a/Finance-Exchange-0.02/t/00-report-prereqs.t +++ /dev/null @@ -1,184 +0,0 @@ -#!perl - -use strict; -use warnings; - -# This test was generated by Dist::Zilla::Plugin::Test::ReportPrereqs 0.029 - -use Test::More tests => 1; - -use ExtUtils::MakeMaker; -use File::Spec; - -# from $version::LAX -my $lax_version_re = qr/(?: undef | (?: (?:[0-9]+) (?: \. | (?:\.[0-9]+) (?:_[0-9]+)? )? - | - (?:\.[0-9]+) (?:_[0-9]+)? - ) | (?: - v (?:[0-9]+) (?: (?:\.[0-9]+)+ (?:_[0-9]+)? )? - | - (?:[0-9]+)? (?:\.[0-9]+){2,} (?:_[0-9]+)? - ) - )/x; - -# hide optional CPAN::Meta modules from prereq scanner -# and check if they are available -my $cpan_meta = "CPAN::Meta"; -my $cpan_meta_pre = "CPAN::Meta::Prereqs"; -my $HAS_CPAN_META = eval "require $cpan_meta; $cpan_meta->VERSION('2.120900')" && eval "require $cpan_meta_pre"; ## no critic - -# Verify requirements? -my $DO_VERIFY_PREREQS = 1; - -sub _max { - my $max = shift; - $max = ($_ > $max) ? $_ : $max for @_; - return $max; -} - -sub _merge_prereqs { - my ($collector, $prereqs) = @_; - - # CPAN::Meta::Prereqs object - if (ref $collector eq $cpan_meta_pre) { - return $collector->with_merged_prereqs(CPAN::Meta::Prereqs->new($prereqs)); - } - - # Raw hashrefs - for my $phase (keys %$prereqs) { - for my $type (keys %{$prereqs->{$phase}}) { - for my $module (keys %{$prereqs->{$phase}{$type}}) { - $collector->{$phase}{$type}{$module} = $prereqs->{$phase}{$type}{$module}; - } - } - } - - return $collector; -} - -my @include = qw( - -); - -my @exclude = qw( - -); - -# Add static prereqs to the included modules list -my $static_prereqs = do './t/00-report-prereqs.dd'; - -# Merge all prereqs (either with ::Prereqs or a hashref) -my $full_prereqs = _merge_prereqs(($HAS_CPAN_META ? $cpan_meta_pre->new : {}), $static_prereqs); - -# Add dynamic prereqs to the included modules list (if we can) -my ($source) = grep { -f } 'MYMETA.json', 'MYMETA.yml'; -my $cpan_meta_error; -if ( $source - && $HAS_CPAN_META - && (my $meta = eval { CPAN::Meta->load_file($source) })) -{ - $full_prereqs = _merge_prereqs($full_prereqs, $meta->prereqs); -} else { - $cpan_meta_error = $@; # capture error from CPAN::Meta->load_file($source) - $source = 'static metadata'; -} - -my @full_reports; -my @dep_errors; -my $req_hash = $HAS_CPAN_META ? $full_prereqs->as_string_hash : $full_prereqs; - -# Add static includes into a fake section -for my $mod (@include) { - $req_hash->{other}{modules}{$mod} = 0; -} - -for my $phase (qw(configure build test runtime develop other)) { - next unless $req_hash->{$phase}; - next if ($phase eq 'develop' and not $ENV{AUTHOR_TESTING}); - - for my $type (qw(requires recommends suggests conflicts modules)) { - next unless $req_hash->{$phase}{$type}; - - my $title = ucfirst($phase) . ' ' . ucfirst($type); - my @reports = [qw/Module Want Have/]; - - for my $mod (sort keys %{$req_hash->{$phase}{$type}}) { - next if grep { $_ eq $mod } @exclude; - - my $want = $req_hash->{$phase}{$type}{$mod}; - $want = "undef" unless defined $want; - $want = "any" if !$want && $want == 0; - - if ($mod eq 'perl') { - push @reports, ['perl', $want, $]]; - next; - } - - my $req_string = $want eq 'any' ? 'any version required' : "version '$want' required"; - - my $file = $mod; - $file =~ s{::}{/}g; - $file .= ".pm"; - my ($prefix) = grep { -e File::Spec->catfile($_, $file) } @INC; - - if ($prefix) { - my $have = MM->parse_version(File::Spec->catfile($prefix, $file)); - $have = "undef" unless defined $have; - push @reports, [$mod, $want, $have]; - - if ($DO_VERIFY_PREREQS && $HAS_CPAN_META && $type eq 'requires') { - if ($have !~ /\A$lax_version_re\z/) { - push @dep_errors, "$mod version '$have' cannot be parsed ($req_string)"; - } elsif (!$full_prereqs->requirements_for($phase, $type)->accepts_module($mod => $have)) { - push @dep_errors, "$mod version '$have' is not in required range '$want'"; - } - } - } else { - push @reports, [$mod, $want, "missing"]; - - if ($DO_VERIFY_PREREQS && $type eq 'requires') { - push @dep_errors, "$mod is not installed ($req_string)"; - } - } - } - - if (@reports) { - push @full_reports, "=== $title ===\n\n"; - - my $ml = _max(map { length $_->[0] } @reports); - my $wl = _max(map { length $_->[1] } @reports); - my $hl = _max(map { length $_->[2] } @reports); - - if ($type eq 'modules') { - splice @reports, 1, 0, ["-" x $ml, "", "-" x $hl]; - push @full_reports, map { sprintf(" %*s %*s\n", -$ml, $_->[0], $hl, $_->[2]) } @reports; - } else { - splice @reports, 1, 0, ["-" x $ml, "-" x $wl, "-" x $hl]; - push @full_reports, map { sprintf(" %*s %*s %*s\n", -$ml, $_->[0], $wl, $_->[1], $hl, $_->[2]) } @reports; - } - - push @full_reports, "\n"; - } - } -} - -if (@full_reports) { - diag "\nVersions for all modules listed in $source (including optional ones):\n\n", @full_reports; -} - -if ($cpan_meta_error || @dep_errors) { - diag "\n*** WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING ***\n"; -} - -if ($cpan_meta_error) { - my ($orig_source) = grep { -f } 'MYMETA.json', 'MYMETA.yml'; - diag "\nCPAN::Meta->load_file('$orig_source') failed with: $cpan_meta_error\n"; -} - -if (@dep_errors) { - diag join("\n", "\nThe following REQUIRED prerequisites were not satisfied:\n", @dep_errors, "\n"); -} - -pass('Reported prereqs'); - -# vim: ts=4 sts=4 sw=4 et: diff --git a/Finance-Exchange-0.02/t/exchange.t b/Finance-Exchange-0.02/t/exchange.t deleted file mode 100755 index 8d1a530..0000000 --- a/Finance-Exchange-0.02/t/exchange.t +++ /dev/null @@ -1,172 +0,0 @@ -#!/usr/bin/perl - -use Test::Most; -use Test::Deep; -use Test::Exception; -use Test::FailWarnings; - -use Finance::Exchange; - -my @exchanges = ( - 'ICE_LIFFE', 'EEI_PA', 'BIS', 'NYSE_SPC', 'EGX', 'KRX', 'SYNFSE', 'BSE', - 'HKF', 'BOVESPA', 'SWX', 'TRSE', 'EURONEXT', 'SYNTSE', 'RANDOM', 'TSE_S', - 'TSE', 'OSLO', 'LSE', 'SES', 'SYNLSE', 'EEI_BU', 'SFE', 'SAS', - 'EUREX', 'SYNNYSE_SPC', 'ISE', 'NSE', 'KSE', 'STOXX', 'SGX', 'EEI_AM', - 'BI', 'FSE', 'MEFF', 'ASX_S', 'SYNEURONEXT', 'NYSE', 'MOF', 'BMF', - 'NASDAQ_INDEX', 'EEI_LI', 'CME', 'ASX', 'OMX', 'FOREX', 'DFM', 'ADS', - 'SYNSTOXX', 'SZSE', 'SYNSWX', 'RTS', 'JSC', 'METAL', 'OSE', 'FS', - 'NZSE', 'ODLS', 'SP_GLOBAL', 'JSE', 'NASDAQ', 'BM', 'HKSE', 'MICEX', - 'SYNNYSE_DJI', 'SP_GSCI', 'EUREX_SWISS', 'RANDOM_NOCTURNE', 'IDM', 'SSE', 'OIL_OTC', 'BRENT_OTC' -); -subtest 'exchange object construction' => sub { - foreach my $exchange_symbol (@exchanges) { - lives_ok { Finance::Exchange->create_exchange('ASX') } 'can create an exchange object for ' . $exchange_symbol; - } - throws_ok { Finance::Exchange->create_exchange('unknown') } qr/Config for exchange\[unknown\] not specified in exchange.yml/, - 'throws error if exchange symbol is unknown'; -}; - -subtest 'trading_days' => sub { - my $expected = { - everyday => ['RANDOM', 'RANDOM_NOCTURNE'], - sun_thru_thu => ['EGX', 'SAS', 'KRX', 'DFM', 'ADS'], - weekdays => [ - 'ICE_LIFFE', 'EEI_PA', 'BIS', 'NYSE_SPC', 'KRX', 'SYNFSE', 'BSE', 'HKF', - 'BOVESPA', 'SWX', 'TRSE', 'EURONEXT', 'SYNTSE', 'TSE_S', 'TSE', 'OSLO', - 'LSE', 'SES', 'SYNLSE', 'EEI_BU', 'SFE', 'EUREX', 'SYNNYSE_SPC', 'ISE', - 'NSE', 'STOXX', 'SGX', 'EEI_AM', 'BI', 'FSE', 'MEFF', 'ASX_S', - 'SYNEURONEXT', 'NYSE', 'MOF', 'BMF', 'NASDAQ_INDEX', 'EEI_LI', 'CME', 'ASX', - 'OMX', 'FOREX', 'SYNSTOXX', 'SZSE', 'SYNSWX', 'RTS', 'JSC', 'METAL', - 'OSE', 'FS', 'NZSE', 'ODLS', 'SP_GLOBAL', 'JSE', 'NASDAQ', 'BM', - 'HKSE', 'MICEX', 'SYNNYSE_DJI', 'SP_GSCI', 'EUREX_SWISS', 'IDM', 'SSE', 'OIL_OTC', - 'BRENT_OTC', 'CME_OTC', 'SGX_OTC' - ], - }; - - foreach my $ex (map { Finance::Exchange->create_exchange($_) } @exchanges) { - unless ($expected->{$ex->trading_days}) { - fail('unknown trading days ' . $ex->trading_days); - } else { - if (grep { $ex->symbol eq $_ } @{$expected->{$ex->trading_days}}) { - pass('trading_days matched for ' . $ex->symbol); - } else { - fail('Wrong trading_days found for ' . $ex->symbol); - } - } - } -}; - -subtest 'exchange currency' => sub { - my $expected = { - 'AED' => ['DFM', 'ADS'], - 'AUD' => ['SFE', 'ASX_S', 'ASX'], - 'BRL' => ['BOVESPA', 'BMF'], - 'CAD' => ['TRSE'], - 'CHF' => ['SWX', 'SYNSWX', 'EUREX_SWISS'], - 'CNY' => ['SZSE', 'SSE'], - 'EGP' => ['EGX'], - 'EUR' => [ - 'EEI_PA', 'SYNFSE', 'EURONEXT', 'EEI_BU', 'EUREX', 'ISE', 'STOXX', 'EEI_AM', - 'BI', 'FSE', 'MEFF', 'SYNEURONEXT', 'EEI_LI', 'SYNSTOXX', 'BM', 'IDM' - ], - 'GBP' => ['ICE_LIFFE', 'LSE', 'SYNLSE', 'FS'], - 'HKD' => ['HKF', 'HKSE'], - 'IDR' => ['JSC'], - 'INR' => ['BSE', 'NSE'], - 'JPY' => ['SYNTSE', 'TSE_S', 'TSE', 'OSE'], - 'KRW' => ['KRX'], - 'KWD' => ['KRX'], - 'NOK' => ['OSLO'], - 'NZD' => ['NZSE'], - 'RUB' => ['MICEX'], - 'SAR' => ['SAS'], - 'SEK' => ['OMX'], - 'SGD' => ['SES', 'SGX'], - 'TRY' => ['BIS'], - 'USD' => [ - 'NYSE_SPC', 'SYNNYSE_SPC', 'NYSE', 'MOF', 'NASDAQ_INDEX', 'CME', 'RTS', 'ODLS', - 'SP_GLOBAL', 'NASDAQ', 'SYNNYSE_DJI', 'SP_GSCI', 'OIL_OTC', 'BRENT_OTC' - ], - 'ZAR' => ['JSE'], - }; - my %undef_currency_exchanges = ( - RANDOM => 1, - FOREX => 1, - METAL => 1, - RANDOM_NOCTURNE => 1 - ); - - foreach my $ex (map { Finance::Exchange->create_exchange($_) } @exchanges) { - if (not $ex->currency and exists $undef_currency_exchanges{$ex->symbol}) { - pass('Currency is undefined for ' . $ex->symbol); - } elsif (grep { $ex->symbol eq $_ } @{$expected->{$ex->currency}}) { - pass('currency matched for ' . $ex->symbol); - } else { - fail('Wrong currency found for ' . $ex->symbol); - } - } -}; - -subtest 'market_times' => sub { - my $expected = { - 'ASX' => { - dst => { - daily_close => 5 * 3600, - daily_open => -1 * 3600, - daily_settlement => 8 * 3600, - }, - partial_trading => { - dst_close => 3 * 3600 + 10 * 60, - dst_open => -1 * 3600, - standard_close => 4 * 3600 + 10 * 60, - standard_open => 0, - }, - standard => { - daily_close => 6 * 3600, - daily_open => 0, - daily_settlement => 9 * 3600, - }, - }, - 'ASX_OTC' => { - dst => { - daily_close => 19 * 3600, - daily_open => 0 * 3600, - daily_settlement => 21 * 3600, - trading_breaks => [5 * 3600 + 30 * 60, 6 * 3600 + 30 * 60], - }, - standard => { - daily_close => 20 * 3600, - daily_open => 0 * 3600, - daily_settlement => 22 * 3600, - trading_breaks => [6 * 3600 + 30 * 60, 7 * 3600 + 30 * 60], - }, - }, - - }; - - foreach my $exchange (keys %{$expected}) { - my $asx = Finance::Exchange->create_exchange($exchange); - foreach my $key (keys %{$asx->market_times}) { - foreach my $key2 (keys %{$asx->market_times->{$key}}) { - if ($key2 eq 'trading_breaks') { - is $asx->market_times->{$key}->{$key2}[0][0]->seconds, $expected->{$exchange}->{$key}->{$key2}[0], 'trading breaks matches'; - is $asx->market_times->{$key}->{$key2}[0][1]->seconds, $expected->{$exchange}->{$key}->{$key2}[1], 'trading breaks matches'; - - } else { - is $asx->market_times->{$key}->{$key2}->seconds, $expected->{$exchange}->{$key}->{$key2}, 'market times matches'; - } - } - } - } -}; - -subtest 'exchange object caching' => sub { - my $obj1 = Finance::Exchange->create_exchange('ASX'); - my $obj2 = Finance::Exchange->create_exchange('ASX'); - my $obj3 = Finance::Exchange->create_exchange('FOREX'); - - is $obj1, $obj2, 'cached'; - isnt $obj1, $obj3, 'returns a different object for FOREX'; -}; - -done_testing(); diff --git a/Finance-Exchange-0.02/t/rc/perlcriticrc b/Finance-Exchange-0.02/t/rc/perlcriticrc deleted file mode 100644 index 17852cd..0000000 --- a/Finance-Exchange-0.02/t/rc/perlcriticrc +++ /dev/null @@ -1,25 +0,0 @@ -severity = 4 -criticism-fatal = 1 -color = 1 -include = TestingAndDebugging::RequireUseWarnings Subroutines::RequireArgUnpacking TestingAndDebugging::ProhibitNoStrict ErrorHandling::RequireCheckingReturnValueOfEval TestingAndDebugging::RequireUseStrict Freenode::Each Freenode::IndirectObjectNotation Freenode::DollarAB Freenode::DeprecatedFeatures BuiltinFunctions::ProhibitReturnOr Dynamic::NoIndirect ProhibitSmartmatch Subroutines::ProhibitAmbiguousFunctionCalls Modules::ProhibitPOSIXimport -exclude = ValuesAndExpressions::ProhibitConstantPragma Subroutines::ProhibitExplicitReturnUndef Subroutines::RequireFinalReturn Community::PackageMatchesFilename Freenode::PackageMatchesFilename Community::DiscouragedModules Freenode::DiscouragedModules Modules::RequireEndWithOn CodeLayout::RequireTidyCode - -[TestingAndDebugging::RequireUseWarnings] -equivalent_modules=MooseX::Singleton Mojo::Base - -[Subroutines::RequireArgUnpacking] -short_subroutine_statements=3 - -[TestingAndDebugging::ProhibitNoStrict] -allow=refs - -[ErrorHandling::RequireCheckingReturnValueOfEval] -severity=4 - -[TestingAndDebugging::RequireUseStrict] -equivalent_modules=MooseX::Singleton Mojo::Base - -[-Perl::Critic::Policy::Subroutines::ProhibitBuiltinHomonyms] - -[Variables::ProhibitEvilVariables] -variables = $@ diff --git a/Finance-Exchange-0.02/t/rc/perltidyrc b/Finance-Exchange-0.02/t/rc/perltidyrc deleted file mode 100644 index 8750fcf..0000000 --- a/Finance-Exchange-0.02/t/rc/perltidyrc +++ /dev/null @@ -1,62 +0,0 @@ -#line length; keep it quite short so that lists of arguments to subs -#are wrapped ---maximum-line-length=150 - -#Cuddled else --ce - -#Stack Closing Tokens -#http://perltidy.sourceforge.net/stylekey.html#stack_closing_tokens -#"The manual shows how all of these vertical tightness controls may be -#applied independently to each type of non-block opening and opening token." ---stack-closing-tokens - -## Similarly for opening. ---stack-opening-tokens - -#4 char wide tabs instead of spaces for indentation. --i=4 - -#Horizontal Tightness -#http://perltidy.sourceforge.net/stylekey.html#define_horizontal_tightness -#parentheses if ((my $len_tab = length($tabstr)) > 0) --pt=2 - -#square brackets $width = $col[$j + $k] - $col[$j]; --sbt=2 - -#braces $width = $col[$j + $k] - $col[$j]; --bt=2 - -#block braces map { $_ => -M $_ } grep { /\.deb$/ } --bbt=0 - -#no space in front of semi-colons in a for loop ---nospace-for-semicolon - -#no outdenting of long quotes -#http://perltidy.sourceforge.net/stylekey.html#outdenting_long_quotes ---no-outdent-long-quotes - ---add-semicolons - -#always break a new line after a semi-colon ---want-break-after=";" - -#all hash key/values on a separate line ---comma-arrow-breakpoints=0 - -#No newlines before comments --nbbc - ---no-outdent-long-lines - -#do not outdent labels ---no-outdent-labels - ---check-syntax - ---indent-spaced-block-comments - -#4 character if its breaks the line ---continuation-indentation=4 diff --git a/Finance-Exchange-0.02/t/usage.t b/Finance-Exchange-0.02/t/usage.t deleted file mode 100644 index 82d4479..0000000 --- a/Finance-Exchange-0.02/t/usage.t +++ /dev/null @@ -1,19 +0,0 @@ -use strict; -use warnings; -use Test::More; -use Test::Deep; -use Finance::Exchange; - -my $exchange = Finance::Exchange->create_exchange('LSE'); -is $exchange->symbol, 'LSE'; -is $exchange->display_name, 'London Stock Exchange'; -is $exchange->trading_days, 'weekdays'; -is $exchange->trading_timezone, 'Europe/London'; -# The list of days starts on Sunday and is a set of flags indicating whether -# we trade on that day or not -cmp_deeply $exchange->trading_days_list, [0, 1, 1, 1, 1, 1, 0]; -is $exchange->delay_amount, 15, 'LSE minimum delay is 15 minutes'; -is $exchange->currency, 'GBP', 'LSE is traded in pound sterling'; -is $exchange->trading_date_can_differ, 0, 'only applies to AU/NZ'; - -done_testing; diff --git a/Finance-Exchange-0.02/xt/author/critic.t b/Finance-Exchange-0.02/xt/author/critic.t deleted file mode 100644 index b28e2e3..0000000 --- a/Finance-Exchange-0.02/xt/author/critic.t +++ /dev/null @@ -1,7 +0,0 @@ -#!perl - -use strict; -use warnings; - -use Test::Perl::Critic (-profile => "t/rc/perlcriticrc") x!! -e "t/rc/perlcriticrc"; -all_critic_ok(); diff --git a/Finance-Exchange-0.02/xt/author/distmeta.t b/Finance-Exchange-0.02/xt/author/distmeta.t deleted file mode 100644 index d13978a..0000000 --- a/Finance-Exchange-0.02/xt/author/distmeta.t +++ /dev/null @@ -1,7 +0,0 @@ -#!perl -# This file was automatically generated by Dist::Zilla::Plugin::MetaTests. -use strict; -use warnings; -use Test::CPAN::Meta; - -meta_yaml_ok(); diff --git a/Finance-Exchange-0.02/xt/author/eol.t b/Finance-Exchange-0.02/xt/author/eol.t deleted file mode 100644 index e040d56..0000000 --- a/Finance-Exchange-0.02/xt/author/eol.t +++ /dev/null @@ -1,33 +0,0 @@ -use strict; -use warnings; - -# this test was generated with Dist::Zilla::Plugin::Test::EOL 0.19 - -use Test::More 0.88; -use Test::EOL; - -my @files = ( - 'lib/Finance/Exchange.pm', - 't/00-check-deps.t', - 't/00-compile.t', - 't/00-report-prereqs.dd', - 't/00-report-prereqs.t', - 't/exchange.t', - 't/rc/perlcriticrc', - 't/rc/perltidyrc', - 't/usage.t', - 'xt/author/critic.t', - 'xt/author/distmeta.t', - 'xt/author/eol.t', - 'xt/author/minimum-version.t', - 'xt/author/mojibake.t', - 'xt/author/no-tabs.t', - 'xt/author/pod-syntax.t', - 'xt/author/portability.t', - 'xt/author/test-version.t', - 'xt/release/common_spelling.t', - 'xt/release/cpan-changes.t' -); - -eol_unix_ok($_, { trailing_whitespace => 1 }) foreach @files; -done_testing; diff --git a/Finance-Exchange-0.02/xt/author/minimum-version.t b/Finance-Exchange-0.02/xt/author/minimum-version.t deleted file mode 100644 index 1e5e5b4..0000000 --- a/Finance-Exchange-0.02/xt/author/minimum-version.t +++ /dev/null @@ -1,6 +0,0 @@ -use strict; -use warnings; - -use Test::More; -use Test::MinimumVersion; -all_minimum_version_ok( qq{5.14.0} ); diff --git a/Finance-Exchange-0.02/xt/author/mojibake.t b/Finance-Exchange-0.02/xt/author/mojibake.t deleted file mode 100644 index 5ef161e..0000000 --- a/Finance-Exchange-0.02/xt/author/mojibake.t +++ /dev/null @@ -1,9 +0,0 @@ -#!perl - -use strict; -use warnings qw(all); - -use Test::More; -use Test::Mojibake; - -all_files_encoding_ok(); diff --git a/Finance-Exchange-0.02/xt/author/no-tabs.t b/Finance-Exchange-0.02/xt/author/no-tabs.t deleted file mode 100644 index 5ee5f75..0000000 --- a/Finance-Exchange-0.02/xt/author/no-tabs.t +++ /dev/null @@ -1,33 +0,0 @@ -use strict; -use warnings; - -# this test was generated with Dist::Zilla::Plugin::Test::NoTabs 0.15 - -use Test::More 0.88; -use Test::NoTabs; - -my @files = ( - 'lib/Finance/Exchange.pm', - 't/00-check-deps.t', - 't/00-compile.t', - 't/00-report-prereqs.dd', - 't/00-report-prereqs.t', - 't/exchange.t', - 't/rc/perlcriticrc', - 't/rc/perltidyrc', - 't/usage.t', - 'xt/author/critic.t', - 'xt/author/distmeta.t', - 'xt/author/eol.t', - 'xt/author/minimum-version.t', - 'xt/author/mojibake.t', - 'xt/author/no-tabs.t', - 'xt/author/pod-syntax.t', - 'xt/author/portability.t', - 'xt/author/test-version.t', - 'xt/release/common_spelling.t', - 'xt/release/cpan-changes.t' -); - -notabs_ok($_) foreach @files; -done_testing; diff --git a/Finance-Exchange-0.02/xt/author/pod-syntax.t b/Finance-Exchange-0.02/xt/author/pod-syntax.t deleted file mode 100644 index e563e5d..0000000 --- a/Finance-Exchange-0.02/xt/author/pod-syntax.t +++ /dev/null @@ -1,7 +0,0 @@ -#!perl -# This file was automatically generated by Dist::Zilla::Plugin::PodSyntaxTests. -use strict; use warnings; -use Test::More; -use Test::Pod 1.41; - -all_pod_files_ok(); diff --git a/Finance-Exchange-0.02/xt/author/portability.t b/Finance-Exchange-0.02/xt/author/portability.t deleted file mode 100644 index c531252..0000000 --- a/Finance-Exchange-0.02/xt/author/portability.t +++ /dev/null @@ -1,10 +0,0 @@ -use strict; -use warnings; - -use Test::More; - -eval 'use Test::Portability::Files'; -plan skip_all => 'Test::Portability::Files required for testing portability' - if $@; - -run_tests(); diff --git a/Finance-Exchange-0.02/xt/author/test-version.t b/Finance-Exchange-0.02/xt/author/test-version.t deleted file mode 100644 index 247ba9a..0000000 --- a/Finance-Exchange-0.02/xt/author/test-version.t +++ /dev/null @@ -1,23 +0,0 @@ -use strict; -use warnings; -use Test::More; - -# generated by Dist::Zilla::Plugin::Test::Version 1.09 -use Test::Version; - -my @imports = qw( version_all_ok ); - -my $params = { - is_strict => 0, - has_version => 1, - multiple => 0, - -}; - -push @imports, $params - if version->parse( $Test::Version::VERSION ) >= version->parse('1.002'); - -Test::Version->import(@imports); - -version_all_ok; -done_testing; diff --git a/Finance-Exchange-0.02/xt/release/common_spelling.t b/Finance-Exchange-0.02/xt/release/common_spelling.t deleted file mode 100644 index 7aed722..0000000 --- a/Finance-Exchange-0.02/xt/release/common_spelling.t +++ /dev/null @@ -1,11 +0,0 @@ -#!/usr/bin/perl -use strict; use warnings; - -use Test::More; - -eval "use Test::Pod::Spelling::CommonMistakes"; -if ( $@ ) { - plan skip_all => 'Test::Pod::Spelling::CommonMistakes required for testing POD'; -} else { - all_pod_files_ok(); -} diff --git a/Finance-Exchange-0.02/xt/release/cpan-changes.t b/Finance-Exchange-0.02/xt/release/cpan-changes.t deleted file mode 100644 index 286005a..0000000 --- a/Finance-Exchange-0.02/xt/release/cpan-changes.t +++ /dev/null @@ -1,10 +0,0 @@ -use strict; -use warnings; - -# this test was generated with Dist::Zilla::Plugin::Test::CPAN::Changes 0.012 - -use Test::More 0.96 tests => 1; -use Test::CPAN::Changes; -subtest 'changes_ok' => sub { - changes_file_ok('Changes'); -}; diff --git a/LICENSE b/LICENSE deleted file mode 100644 index 77d8c9e..0000000 --- a/LICENSE +++ /dev/null @@ -1,379 +0,0 @@ -This software is copyright (c) 2022 by Deriv Services Ltd. - -This is free software; you can redistribute it and/or modify it under -the same terms as the Perl 5 programming language system itself. - -Terms of the Perl programming language system itself - -a) the GNU General Public License as published by the Free - Software Foundation; either version 1, or (at your option) any - later version, or -b) the "Artistic License" - ---- The GNU General Public License, Version 1, February 1989 --- - -This software is Copyright (c) 2022 by Deriv Services Ltd. - -This is free software, licensed under: - - The GNU General Public License, Version 1, February 1989 - - GNU GENERAL PUBLIC LICENSE - Version 1, February 1989 - - Copyright (C) 1989 Free Software Foundation, Inc. - 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The license agreements of most software companies try to keep users -at the mercy of those companies. By contrast, our General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. The -General Public License applies to the Free Software Foundation's -software and to any other program whose authors commit to using it. -You can use it for your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Specifically, the General Public License is designed to make -sure that you have the freedom to give away or sell copies of free -software, that you receive source code or can get it if you want it, -that you can change the software or use pieces of it in new free -programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of a such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must tell them their rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License Agreement applies to any program or other work which -contains a notice placed by the copyright holder saying it may be -distributed under the terms of this General Public License. The -"Program", below, refers to any such program or work, and a "work based -on the Program" means either the Program or any work containing the -Program or a portion of it, either verbatim or with modifications. Each -licensee is addressed as "you". - - 1. You may copy and distribute verbatim copies of the Program's source -code as you receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice and -disclaimer of warranty; keep intact all the notices that refer to this -General Public License and to the absence of any warranty; and give any -other recipients of the Program a copy of this General Public License -along with the Program. You may charge a fee for the physical act of -transferring a copy. - - 2. You may modify your copy or copies of the Program or any portion of -it, and copy and distribute such modifications under the terms of Paragraph -1 above, provided that you also do the following: - - a) cause the modified files to carry prominent notices stating that - you changed the files and the date of any change; and - - b) cause the whole of any work that you distribute or publish, that - in whole or in part contains the Program or any part thereof, either - with or without modifications, to be licensed at no charge to all - third parties under the terms of this General Public License (except - that you may choose to grant warranty protection to some or all - third parties, at your option). - - c) If the modified program normally reads commands interactively when - run, you must cause it, when started running for such interactive use - in the simplest and most usual way, to print or display an - announcement including an appropriate copyright notice and a notice - that there is no warranty (or else, saying that you provide a - warranty) and that users may redistribute the program under these - conditions, and telling the user how to view a copy of this General - Public License. - - d) You may charge a fee for the physical act of transferring a - copy, and you may at your option offer warranty protection in - exchange for a fee. - -Mere aggregation of another independent work with the Program (or its -derivative) on a volume of a storage or distribution medium does not bring -the other work under the scope of these terms. - - 3. You may copy and distribute the Program (or a portion or derivative of -it, under Paragraph 2) in object code or executable form under the terms of -Paragraphs 1 and 2 above provided that you also do one of the following: - - a) accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of - Paragraphs 1 and 2 above; or, - - b) accompany it with a written offer, valid for at least three - years, to give any third party free (except for a nominal charge - for the cost of distribution) a complete machine-readable copy of the - corresponding source code, to be distributed under the terms of - Paragraphs 1 and 2 above; or, - - c) accompany it with the information you received as to where the - corresponding source code may be obtained. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form alone.) - -Source code for a work means the preferred form of the work for making -modifications to it. For an executable file, complete source code means -all the source code for all modules it contains; but, as a special -exception, it need not include source code for modules which are standard -libraries that accompany the operating system on which the executable -file runs, or for standard header files or definitions files that -accompany that operating system. - - 4. You may not copy, modify, sublicense, distribute or transfer the -Program except as expressly provided under this General Public License. -Any attempt otherwise to copy, modify, sublicense, distribute or transfer -the Program is void, and will automatically terminate your rights to use -the Program under this License. However, parties who have received -copies, or rights to use copies, from you under this General Public -License will not have their licenses terminated so long as such parties -remain in full compliance. - - 5. By copying, distributing or modifying the Program (or any work based -on the Program) you indicate your acceptance of this license to do so, -and all its terms and conditions. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the original -licensor to copy, distribute or modify the Program subject to these -terms and conditions. You may not impose any further restrictions on the -recipients' exercise of the rights granted herein. - - 7. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of the license which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -the license, you may choose any version ever published by the Free Software -Foundation. - - 8. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 9. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 10. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS - - Appendix: How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to humanity, the best way to achieve this is to make it -free software which everyone can redistribute and change under these -terms. - - To do so, attach the following notices to the program. It is safest to -attach them to the start of each source file to most effectively convey -the exclusion of warranty; and each file should have at least the -"copyright" line and a pointer to where the full notice is found. - - - Copyright (C) 19yy - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 1, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA - - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) 19xx name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the -appropriate parts of the General Public License. Of course, the -commands you use may be called something other than `show w' and `show -c'; they could even be mouse-clicks or menu items--whatever suits your -program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the - program `Gnomovision' (a program to direct compilers to make passes - at assemblers) written by James Hacker. - - , 1 April 1989 - Ty Coon, President of Vice - -That's all there is to it! - - ---- The Artistic License 1.0 --- - -This software is Copyright (c) 2022 by Deriv Services Ltd. - -This is free software, licensed under: - - The Artistic License 1.0 - -The Artistic License - -Preamble - -The intent of this document is to state the conditions under which a Package -may be copied, such that the Copyright Holder maintains some semblance of -artistic control over the development of the package, while giving the users of -the package the right to use and distribute the Package in a more-or-less -customary fashion, plus the right to make reasonable modifications. - -Definitions: - - - "Package" refers to the collection of files distributed by the Copyright - Holder, and derivatives of that collection of files created through - textual modification. - - "Standard Version" refers to such a Package if it has not been modified, - or has been modified in accordance with the wishes of the Copyright - Holder. - - "Copyright Holder" is whoever is named in the copyright or copyrights for - the package. - - "You" is you, if you're thinking about copying or distributing this Package. - - "Reasonable copying fee" is whatever you can justify on the basis of media - cost, duplication charges, time of people involved, and so on. (You will - not be required to justify it to the Copyright Holder, but only to the - computing community at large as a market that must bear the fee.) - - "Freely Available" means that no fee is charged for the item itself, though - there may be fees involved in handling the item. It also means that - recipients of the item may redistribute it under the same conditions they - received it. - -1. You may make and give away verbatim copies of the source form of the -Standard Version of this Package without restriction, provided that you -duplicate all of the original copyright notices and associated disclaimers. - -2. You may apply bug fixes, portability fixes and other modifications derived -from the Public Domain or from the Copyright Holder. A Package modified in such -a way shall still be considered the Standard Version. - -3. You may otherwise modify your copy of this Package in any way, provided that -you insert a prominent notice in each changed file stating how and when you -changed that file, and provided that you do at least ONE of the following: - - a) place your modifications in the Public Domain or otherwise make them - Freely Available, such as by posting said modifications to Usenet or an - equivalent medium, or placing the modifications on a major archive site - such as ftp.uu.net, or by allowing the Copyright Holder to include your - modifications in the Standard Version of the Package. - - b) use the modified Package only within your corporation or organization. - - c) rename any non-standard executables so the names do not conflict with - standard executables, which must also be provided, and provide a separate - manual page for each non-standard executable that clearly documents how it - differs from the Standard Version. - - d) make other distribution arrangements with the Copyright Holder. - -4. You may distribute the programs of this Package in object code or executable -form, provided that you do at least ONE of the following: - - a) distribute a Standard Version of the executables and library files, - together with instructions (in the manual page or equivalent) on where to - get the Standard Version. - - b) accompany the distribution with the machine-readable source of the Package - with your modifications. - - c) accompany any non-standard executables with their corresponding Standard - Version executables, giving the non-standard executables non-standard - names, and clearly documenting the differences in manual pages (or - equivalent), together with instructions on where to get the Standard - Version. - - d) make other distribution arrangements with the Copyright Holder. - -5. You may charge a reasonable copying fee for any distribution of this -Package. You may charge any fee you choose for support of this Package. You -may not charge a fee for this Package itself. However, you may distribute this -Package in aggregate with other (possibly commercial) programs as part of a -larger (possibly commercial) software distribution provided that you do not -advertise this Package as a product of your own. - -6. The scripts and library files supplied as input to or produced as output -from the programs of this Package do not automatically fall under the copyright -of this Package, but belong to whomever generated them, and may be sold -commercially, and may be aggregated with this Package. - -7. C or perl subroutines supplied by you and linked into this Package shall not -be considered part of this Package. - -8. The name of the Copyright Holder may not be used to endorse or promote -products derived from this software without specific prior written permission. - -9. THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED -WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - -The End -