Compare commits

...

679 Commits

Author SHA1 Message Date
Value Raider
308e58b914 Bump version to 0.2.31 2023-10-04 22:03:24 +01:00
ValueRaider
f6beadf448 Merge pull request #1716 from ranaroussi/dev
sync dev -> main
2023-10-04 22:01:43 +01:00
Value Raider
7da64b679e Dev version 0.2.31b2 2023-10-01 22:40:15 +01:00
ValueRaider
38f8ccd40a Merge pull request #1709 from ranaroussi/feature/tz-cache-lazy-load
Feature/tz cache lazy load
2023-10-01 22:39:19 +01:00
ValueRaider
13acc3dc97 Merge pull request #1707 from rickturner2001/fix-testing
Test Fix: Check for type and expect exceptions in tests
2023-10-01 21:19:31 +01:00
Value Raider
cc1ac7bbcc Fix cache on read-only filesystem, + tests 2023-10-01 21:17:59 +01:00
rickturner2001
75449fd0ac Merge branch 'dev' into fix-testing 2023-10-01 15:08:12 -04:00
Value Raider
22e0c414c4 Rename for clarity 2023-10-01 13:04:48 +01:00
Value Raider
37d60e6efb Complete TZ cache lazy-loading
The initial singleton design pattern for database access meant that lazy-loading was broken,
due to structure of '_KV' class. So errors were blocking import.
Fix = use 'peewee' proxy database and initialise when needed.
2023-10-01 12:53:49 +01:00
Value Raider
dac9a48742 Dev version 0.2.31b1 2023-10-01 10:06:34 +01:00
rickturner2001
bd52326091 Fix testing: Fixed broken tests and refactored code 2023-09-30 18:23:03 -04:00
ValueRaider
9581b8bd45 Merge pull request #1705 from ranaroussi/fix/tz-cache-init
Fix TZ cache exception blocking import
2023-09-30 21:16:04 +01:00
Value Raider
62b2c25da8 Disable broken Ticker tests 2023-09-27 21:45:46 +01:00
Value Raider
7618dda5d0 Hopefully fix TZ cache exception blocking import
Hopefully fix TZ cache exception blocking import. Also:
- relocate cache init lock
- add test for setTzCacheLocation()
2023-09-27 21:34:59 +01:00
ValueRaider
95ef486e13 Merge pull request #1704 from ranaroussi/main
sync main -> dev
2023-09-27 20:53:42 +01:00
ValueRaider
9e59f6b61c Merge pull request #1703 from ranaroussi/fix/prices-intraday-merge-events
Fix merging pre-market events with intraday prices
2023-09-27 20:52:23 +01:00
Value Raider
716cd65fd3 Fix merging pre-market events with intraday prices 2023-09-25 22:19:24 +01:00
Value Raider
5b1605b5a1 Bump version to 0.2.30 2023-09-24 22:18:30 +01:00
ValueRaider
412cfbcd6d Merge pull request #1698 from ranaroussi/hotfix/download-database-error
Fix: OperationalError('unable to open database file')
2023-09-24 22:15:15 +01:00
Value Raider
6abee6df44 Remove unrelated change (will go in another PR) 2023-09-23 15:20:06 +01:00
Value Raider
fad21dfeac Enhance testing - use new cache folder 2023-09-23 13:41:59 +01:00
Value Raider
fc27f9c367 Refactor TZ cache 2023-09-23 13:30:58 +01:00
Value Raider
bb79b573ed Fix download() ''unable to open database file' 2023-09-23 11:40:39 +01:00
ValueRaider
127b53ee7f Merge pull request #1693 from ranaroussi/main
sync main -> dev
2023-09-22 14:52:36 +01:00
Value Raider
88525abcbd Bump version to 0.2.29 2023-09-22 12:00:47 +01:00
ValueRaider
99ef055cc4 Merge pull request #1692 from ranaroussi/dev
sync dev -> main
2023-09-22 12:00:06 +01:00
ValueRaider
0f36f7980b Merge pull request #1688 from ranaroussi/fix/price-repair
Price repair fixes
2023-09-22 11:27:38 +01:00
ValueRaider
8282af9ce4 Merge pull request #1684 from ranaroussi/fix/prices-intraday-merge-events
Fix merging events with intraday prices
2023-09-22 11:24:30 +01:00
Value Raider
5208c8cf05 Price repair improvements
Price repair improvements:
- don't attempt repair of empty prices table
- random-mixups: fix 0.01x errors, not just 100x
- stop zeroes, big-dividends, and 100x errors triggering false split errors
2023-09-22 11:21:17 +01:00
Value Raider
d3dfb4c6a8 Fix merging events with intraday prices
If Yahoo returns intraday price data with dividend or stock-split event in future, then this broke the merge.
Fix is to discard out-of-range events.
Assumes that if user requesting intraday then they aren't interested in events.
2023-09-19 19:35:03 +01:00
ValueRaider
279726afe4 Merge pull request #1687 from arduinocc04/arduinocc04-patch-2
Fix error when calling enable_debug_mode twice
2023-09-19 17:41:28 +01:00
조다니엘(Daniel Cho)
937386f3ef Fix error when calling enable_debug_mode twice 2023-09-19 10:02:28 +09:00
ValueRaider
32e569f652 Merge pull request #1675 from ranaroussi/hotfix/database-error
Replace sqlite3 with peewee for 100% thread-safety
2023-09-17 21:47:57 +01:00
ValueRaider
de59f0b2c6 Bug template - add section to describe bug 2023-09-09 18:32:32 +01:00
Value Raider
7d6d8562e8 Replace sqlite3 with peewee for 100% thread-safety 2023-09-03 16:47:36 +01:00
ValueRaider
6cae6d45b1 Merge pull request #1672 from difelice/fix-fix_yahoo_returning_live_separate-warnings
Fix pandas warning when retrieving quotes.
2023-09-01 22:07:18 +01:00
Alessandro Di Felice
ec3de0710d Fix pandas warning when retrieving quotes 2023-09-01 14:07:53 -05:00
Value Raider
0713d93867 Bump version to 0.2.28 2023-08-13 13:05:02 +01:00
Value Raider
67e81a8f9a Fix TypeError: 'FastInfo' object is not callable #1636 2023-08-13 13:01:53 +01:00
ValueRaider
b6372c0945 Merge pull request #1661 from ranaroussi/dev
sync dev -> main
2023-08-13 12:44:05 +01:00
ValueRaider
c9dd582dd8 Merge branch 'main' into dev 2023-08-13 12:40:11 +01:00
ValueRaider
677f3d5702 Merge pull request #1660 from ranaroussi/fix/price-repair-100x-and-calibration
Fix price repair: 100x & calibration
2023-08-13 12:21:55 +01:00
Value Raider
4f9b05a546 Fix price repair: 100x & calibration
Price repair fixes and improvement

Fixes:
- fix reconstruction mis-calibration with tiny DataFrames
- fix detecting last-active-trading-interval when NaNs in DataFrame
- redesign mapping 100x signals to ranges:
  - no change for signals before last-active-trading-interval
  - but for signals after last-active-trading-interval, process in reverse order

Improvements:
- increase max reconstruction depth from 1 to 2. E.g. now 1wk can be repaired with 1h (1wk->1d->1h)
2023-08-13 10:54:57 +01:00
ValueRaider
e1f94ed337 Merge pull request #1654 from ranaroussi/fix/circular-import
Fix circular import in utils.py
2023-08-05 12:56:15 +01:00
Value Raider
93a7ee6161 Fix circular import in utils.py
Commit a4d7d6 introduced a circular import into utils.py
2023-08-05 12:54:12 +01:00
Value Raider
5b0cb60cf5 Bump version to 0.2.27 2023-08-03 21:24:07 +01:00
ValueRaider
1a97c22874 Merge pull request #1635 from ranaroussi/hotfix/prices-events-merge
Fix merging 1d-prices with out-of-range divs/splits
2023-08-03 21:20:29 +01:00
ValueRaider
b0de31da63 Merge pull request #1648 from ranaroussi/hotfix/tkr-tz-already-in-cache
Fix multithread error 'tz already in cache'
2023-08-03 18:02:51 +01:00
Value Raider
cc87608824 Fix multithread error 'tz already in cache' 2023-08-02 19:29:06 +01:00
ValueRaider
6c1e26093c Merge pull request #1633 from ranaroussi/feature/price-repair-improvements
Improve price repair
2023-08-01 20:03:29 +01:00
ValueRaider
e8fdd12cb1 Merge branch 'dev' into feature/price-repair-improvements 2023-07-31 18:30:00 +01:00
Value Raider
93b6e024da Improve bad-split-repair on multiday intervals
Improve bad-split-repair on multiday intervals
Switch some repair log msgs from warning -> info
2023-07-31 18:19:42 +01:00
ValueRaider
d5282967ce Merge pull request #1606 from DanielGoldfarb/main
option_chain() return underlying data that comes with the options data
2023-07-27 15:10:13 +01:00
ValueRaider
9908c1ff48 Merge pull request #1638 from ricardoprins/dev
PEP 8 changes + minor performance improvements
2023-07-26 17:49:25 +01:00
Ricardo Prins
a4d7d6c577 PEP 8 changes + minor performance improvements 2023-07-25 21:01:46 -06:00
ValueRaider
f9080c22a5 Merge pull request #1630 from ricardoprins/dev
Adjust PEP 8 + minor improvements + f-strings in base.py
2023-07-25 16:50:01 +01:00
Ricardo Prins
32e1d479b1 Remove last _pd 2023-07-23 18:37:09 -06:00
Ricardo Prins
5729ce3cb6 Remove .formats and adjust imports 2023-07-23 18:28:30 -06:00
ValueRaider
d0b2070036 Fix merging 1d-prices with out-of-range divs/splits 2023-07-23 15:20:57 +01:00
ValueRaider
688120cab7 Merge pull request #1632 from ranaroussi/fix/history-30m-typo
Fix typo in Ticker.history(30m)
2023-07-23 13:18:35 +01:00
ValueRaider
4a1e1c4447 Merge branch 'dev' into feature/price-repair-improvements 2023-07-22 20:34:56 +01:00
ValueRaider
f99677ed1e Fix typo in Ticker.history(30m) 2023-07-22 16:52:50 +01:00
ValueRaider
6a613eb114 Improve price repair
Several improvements to price repair

Repair 100x and split errors:
- Handle stocks that recently suspended - use latest ACTIVE trading as baseline
- Improve error identification:
  - Restrict repair to no older than 1 year before oldest split
  - To reduce false positives when checking for multiday split errors,
    only analyse 'Open' and 'Close' and use average change instead of nearest-to-1
  - For weekly intervals reduce threshold to 3x standard deviation (5x was too high),
    and for monthly increase to 6x
  - For multiday intervas, if errors only detected in 1 column then assume false positive => ignore

Repair missing div-adjust:
- Fix repair of multiday intervals containing dividend

Price reconstruction:
- Move to after repairing 100x and split errors, so calibration works properly
- Fix maximum depth and reduce to 1
- Restrict calibration to 'Open' and 'Close', because 'Low' and 'High' can differ significantly between e.g. 1d and day-of-1h

Miscellaneous:
- Deprecate repair='silent', the logging module handles this
- Improve tests for 100x and split errors
- New test for 'repair missing div adjust'
2023-07-22 15:09:38 +01:00
Ricardo Prins
0503240973 Adjust PEP 8 + minor improvements + f-strings 2023-07-21 20:33:47 -06:00
ValueRaider
ae6c05fa74 Merge pull request #1628 from ricardoprins/dev
Adjust PEP 8 + minor improvement
2023-07-21 22:35:21 +01:00
Ricardo Prins
aa9a0286a1 Add missing comment to test_dailyWithEvents 2023-07-21 14:25:46 -06:00
ValueRaider
ddf0cf19cd Bump version to 0.2.26 2023-07-21 12:56:10 +01:00
Ricardo Prins
a2bde88c36 Adjust PEP 8 + minor improvement 2023-07-20 22:44:36 -06:00
ValueRaider
1bd819ac4d Merge pull request #1371 from ranaroussi/hotfix/proxy
Fix proxy arg passthrough
2023-07-21 01:01:14 +01:00
ValueRaider
1b9fc5f12f Merge pull request #1625 from ricardoprins/main
Bump requests to 2.31 and removes cryptography.
2023-07-21 00:59:46 +01:00
Ricardo Prins
274f309052 Bump requests to 2.31 and removes cryptography. 2023-07-20 17:17:44 -06:00
ValueRaider
edac283a60 Merge pull request #1623 from ranaroussi/bug-report-yaml
Fix yaml issue rendering
2023-07-19 18:21:52 +01:00
ValueRaider
781fad501f Merge branch 'main' into bug-report-yaml 2023-07-19 18:21:44 +01:00
ValueRaider
39527d24d4 Fix yaml issue template rendering 2023-07-19 18:21:04 +01:00
ValueRaider
45f1c88460 yaml issue template - escape some backticks 2023-07-19 18:09:20 +01:00
ValueRaider
7d638e1040 Merge pull request #1613 from ranaroussi/bug-report-yaml
Convert issue template to yaml
2023-07-19 18:05:40 +01:00
ValueRaider
97b13dfa8c Convert issue template to yaml + improve 2023-07-19 18:01:47 +01:00
ValueRaider
693565a85b Bump version to 0.2.25 2023-07-18 13:45:55 +01:00
ValueRaider
957051e0e8 Merge pull request #1605 from ranaroussi/dev
sync dev -> main
2023-07-18 12:02:19 +01:00
ValueRaider
bd81ebb4e9 Merge pull request #1611 from ricardoprins/main
[BUG] Fix failure when using single ISIN as a ticker (#1525)
2023-07-18 10:55:18 +01:00
ValueRaider
46f53f9957 Port proxy fix to relocated 'FastInfo' 2023-07-17 18:34:00 +01:00
ValueRaider
056b84d8fe Merge branch 'main' into hotfix/proxy 2023-07-17 18:29:04 +01:00
Ricardo Prins
835dbd9629 Fix failure when using single ISIN as a ticker 2023-07-17 08:49:39 -06:00
ValueRaider
07a4594455 Dev version 0.2.25b1 2023-07-14 21:55:29 +01:00
Daniel Goldfarb
736c03ac5b options_chain() return underlying data that comes with the options data 2023-07-14 15:17:17 -04:00
ValueRaider
adfa2e9beb Merge pull request #1604 from ranaroussi/main
sync main -> dev
2023-07-14 20:11:45 +01:00
ValueRaider
b286797e8c Bump version to 0.2.24 2023-07-14 15:52:33 +01:00
ValueRaider
b306bef350 Merge pull request #1603 from ranaroussi/hotfix/info-missing-values
Fix info[] missing values
2023-07-14 15:51:23 +01:00
ValueRaider
61c89660df Optimise info fetch, improve test 2023-07-14 15:29:55 +01:00
Value Raider
31af2ab1d5 Fix recently-fixed info[] missing data 2023-07-13 22:20:42 +01:00
Value Raider
21c380fa61 Bump version to 0.2.23 2023-07-13 20:54:56 +01:00
ValueRaider
e0000cd787 Merge pull request #1595 from signifer-geo/bug20230714
Update quote.py
2023-07-13 20:51:33 +01:00
signifer-geo
11d43eb1a1 Update quote.py
dead code deleted
2023-07-14 04:29:59 +09:00
signifer-geo
509a109f29 Update quote.py
It fixes the error: unauthorized, invalid crumb
2023-07-14 03:11:24 +09:00
ValueRaider
b0639409a3 Merge pull request #1586 from ranaroussi/improve-readme
Emphasise API on Wiki
2023-07-10 15:26:31 +01:00
ValueRaider
ed10feee9a Merge pull request #1584 from lucas03/lukas/start-date-docs
update start parameter docstring
2023-07-06 21:20:17 +01:00
ValueRaider
aba81eedc2 Emphasise API on Wiki
More emphasis that user should review the Wiki for the full API for download() and Ticker.history()
2023-07-06 21:15:41 +01:00
Lukas Vojt
d424d027ac update docstrings for start parameter
requested here
https://github.com/ranaroussi/yfinance/pull/1576#issuecomment-1616599633
2023-07-06 08:17:07 +00:00
ValueRaider
9268fcfa76 Merge pull request #1545 from SnoozeFreddo/main
fix: Readme cache-ratelimit. Limiter parenthesis was never closed
2023-06-27 13:54:08 +01:00
ValueRaider
711e1138d3 Merge pull request #1576 from lucas03/lukas/start-date
fix start date on history
2023-06-27 12:32:17 +01:00
Lukas Vojt
0789b690a4 fix: start year on history
timestamp of 1900 is older than 100 years,
so yahoo responds with error:

GDEVW: 1d data not available for startTime=-2208994789 and
endTime=1687780922. Only 100 years worth of day granularity data are
allowed to be fetched per request.

this should fix it,
something similar was proposed here:
https://github.com/ranaroussi/yfinance/pull/648

 # Please enter the commit message for
your changes. Lines starting
2023-06-26 18:43:35 +02:00
ValueRaider
6055566de8 Bump version to 0.2.22 2023-06-24 19:42:18 +01:00
ValueRaider
398a19a855 Merge pull request #1574 from ranaroussi/hotfix/sql-db-error
Fix unhandled 'sqlite3.DatabaseError'
2023-06-24 19:40:51 +01:00
ValueRaider
e771cfabb6 Fix unhandled 'sqlite3.DatabaseError'
... also move '_TzCacheException' logging from level ERROR to INFO, because users don't need to know
2023-06-24 16:57:06 +01:00
ValueRaider
5b676f803b Bump version to 0.2.21 2023-06-21 23:15:37 +01:00
ValueRaider
eb5c50d5c7 Merge pull request #1569 from ranaroussi/dev
sync dev -> main
2023-06-21 23:13:49 +01:00
ValueRaider
1cb0b215c4 Merge branch 'main' into dev 2023-06-21 23:13:12 +01:00
ValueRaider
50dcb2ce5a Merge pull request #1568 from ranaroussi/fix/financials
Fix financials tables
2023-06-21 23:07:50 +01:00
ValueRaider
1ce9ce2784 Fix financials ; Remove broken decryption & scraping 2023-06-21 14:49:16 +01:00
ValueRaider
cd4816e289 Post-merge tidy price-repair logging 2023-06-20 17:46:06 +01:00
ValueRaider
27e9ce7542 Merge pull request #1543 from ranaroussi/feature/fix-Yahoo-bad-div-split-adjustments
Price repair update: fix Yahoo messing up dividend and split adjustments
2023-06-20 17:41:16 +01:00
ValueRaider
02c1c60f3b Merge branch 'dev' into feature/fix-Yahoo-bad-div-split-adjustments 2023-06-20 17:39:19 +01:00
ValueRaider
27ea9472c1 Price repair improvements
Improve split-repair of multi-day intervals. Because split error can occur within a multi-day interval, e.g. mid-way through week, need to repair each OHLC column separately

Increase robustness of repair 'Adj Close'

Limit price-repair recursion depth to 2
2023-06-20 17:37:19 +01:00
ValueRaider
801f58790a Merge pull request #1562 from ranaroussi/fix/logging-behaviour
Fix logging behaviour
2023-06-19 23:26:14 +01:00
ValueRaider
080834e3ce Update README#logging ; remove 'info fixed' message 2023-06-19 23:25:36 +01:00
ValueRaider
4e7b2094d0 Logging: improve appearance, fix propagation
Various important changes to yfinance logging:

Remove handler from YF logger as breaks standard logging practice.

Improve 'download' log message grouping

Move custom DEBUG log formatting into 'yf.enable_debug_mode()', which if called adds the handler. The custom DEBUG log formatting is:
- 'MultiLineFormatter' improves appearance of multi-line messages in any logging mode. Adds leading indent to all lines below first, to align with the first line which is indented by %levelname%.
- Whitespace padding is added to end of %levelname% string up to 8 characters. This resolves different level strings e.g. INFO & DEBUG creating different indents. But this only automatically applies to first line of message - for multi-line messages, 'MultiLineFormatter' extracts amount of padding and applies to all other lines.
- Add leading indent proportional to function depth, because DEBUG generates a lot of messages particularly when repairing price data - same function can be called recursively. Implemented in 'IndentLoggerAdapter', a simple wrapper around the logger object.
- 'log_indent_decorator' inserts 'Entering/Exiting %function%' debug messages, helps organise.
2023-06-19 19:42:02 +01:00
ValueRaider
c72e04bf55 Merge pull request #1567 from ranaroussi/fix/future-event-merge
Fix merge future div/split into prices
2023-06-19 11:56:48 +01:00
ValueRaider
abbe4c3a2f Fix merge future div/split into prices 2023-06-19 11:41:53 +01:00
ValueRaider
9e21b85043 Merge branch 'dev' into feature/fix-Yahoo-bad-div-split-adjustments 2023-06-17 12:49:01 +01:00
ValueRaider
b44917b7f9 Improve price-repair of 1d 'Adj Close'
Main change is fixing price-repair of 1d 'Adj Close'. 1d repair uses 1h data, but 1h is never div-adjusted. For correct 1d 'Adj Close', extract div-adjustment from the good 1d data, and calculate it for any bad 1d data. A new unit test ensures correctness.

Other changes:
- bug fix in split-repair logic to handle price=0
- improve unit test coverage on price dividend
- add 1wk interval to split-repair unit test
2023-06-16 14:06:25 +01:00
ValueRaider
6f78dd6e6b Fix dumb bug 2023-06-12 17:05:37 +01:00
ValueRaider
593dc8fcee Use new split-repair logic to also fix 100x error
Stumbled upon another type of 100x price error - Yahoo may switch a symbol from e.g. cents -> $ on some recent date, so recent prices are 100x different. The new split-repair is perfect for this - set change to 100 and ignore 'Volume'.
2023-06-12 14:46:58 +01:00
ValueRaider
b94baa4cc5 Merge pull request #1552 from adityanparikh/fix/timedelta
Fix timedelta bug
2023-06-08 21:26:31 +01:00
ValueRaider
1a054135fb Merge pull request #1553 from ranaroussi/fix/events-merging
Fix prices-events merge
2023-06-08 21:18:14 +01:00
ValueRaider
4e2253a406 Fix prices-events merge
An out-of-range dividend was breaking merge with 1mo-prices, so fixed that. Also replaced the mega-loop with Numpy, much clearer now. Improved its tests.
2023-06-08 21:16:05 +01:00
Aditya Parikh
9af7ec0a4e Fix timedelta bug
Fix for exception using _pd.Timedelta function with unit='d' parameter for  Pandas v1.4.4
2023-06-08 16:15:03 -04:00
Value Raider
8624216e21 Bump version to 0.2.20 2023-06-07 16:51:17 +01:00
ValueRaider
954e71d19c Update action versions in python-publish.yml
Recent release action generated deprecated error: "Node.js 12 actions are deprecated. Please update the following actions to use Node.js 16: actions/checkout@v2, actions/setup-python@v2."

So simply increasing versions to match latest GitHub usage docs, hopefully works.
2023-06-07 16:48:11 +01:00
ValueRaider
5124059422 Bump version to 0.2.19 2023-06-07 13:28:32 +01:00
ValueRaider
d18cd6f42f Merge pull request #1549 from ranaroussi/dev
dev -> main
2023-06-07 13:23:39 +01:00
ValueRaider
c20211a06c Merge pull request #1547 from bveber/dev 2023-06-06 23:05:40 +01:00
bveber
cdfe7d0d2d add session to download 2023-06-06 01:06:18 -05:00
ValueRaider
e57647c1d7 Stock split repair: bug fixes & more testing 2023-06-03 20:49:35 +01:00
Konstantinos Ftikas
762abd8bba fix: Readme cache-ratelimit. Limiter parenthesis was never closed
The example in the docs will not work out of the box due to a syntax error.
2023-06-03 14:19:31 +02:00
ValueRaider
d1ea402792 Price repair improvement: fix stupid bug 2023-06-01 15:56:54 +01:00
ValueRaider
65f65b1776 Price repair improvement: fix price Low=High errors on stock split day
Yahoo often messes up price data on stock split day - all equal or simply missing.
Impossible that price didn't move/trade on stock split day.
2023-05-31 21:51:04 +01:00
ValueRaider
9388c29207 Price repair improvement: fix stock split adjustment missing from pre-split data 2023-05-31 21:41:05 +01:00
ValueRaider
9f91f4b180 Price repair improvement: fix missing dividend adjustment 2023-05-31 21:40:16 +01:00
ValueRaider
cac616a24c Dev version 0.2.19b4 2023-05-25 11:09:31 +01:00
ValueRaider
72a9e45e56 Merge pull request #1541 from ranaroussi/fix/download-logging
Bugfix in `download` logging tracebacks & boost tests
2023-05-25 10:58:52 +01:00
ValueRaider
4802199ae7 Bugfix in download logging tracebacks & boost tests
New logging in `download` stores the tracebacks, but the logic was faulty, this fixes that.
Also improves error handling in `download`.
Unit tests should have detected this so improved them:
- add/improve `download` tests
- disable tests that require Yahoo decryption (because is broken)
- fix logging-related errors
- improve session use
2023-05-24 13:19:39 +01:00
ValueRaider
d9bfd29113 Delete 'Feature request' issue template - can't have nice things 2023-05-23 17:11:31 +01:00
ValueRaider
4711aab7b3 Merge pull request #1536 from ranaroussi/hotfix/tz-cache-migrate-error-again
Fix corrupt tkr-tz-csv halting code (again)
2023-05-23 16:44:35 +01:00
ValueRaider
30d20c1206 Fix corrupt tkr-tz-csv halting code (again) 2023-05-23 16:34:50 +01:00
ValueRaider
5c565c8934 bug_report.md: add instruction to post debug log
bug_report.md: add instruction to post debug log. Plus some minor edits.
2023-05-17 18:44:52 +01:00
ValueRaider
2fff97290b Merge pull request #1528 from ranaroussi/fix/tz-cache-migrate-error
Fix corrupt tkr-tz-csv halting code
2023-05-17 16:59:15 +01:00
ValueRaider
62ca5ab6be Fix corrupt tkr-tz-csv halting code 2023-05-17 15:05:38 +01:00
ValueRaider
83b177b7fb README.md - note on installing betas 2023-05-12 12:11:14 +01:00
ValueRaider
e8b99cb4e6 Dev version 0.2.19b3 2023-05-11 14:04:04 +01:00
ValueRaider
503d234020 Dev version 0.2.19b2 - add missing file 2023-05-11 14:03:38 +01:00
ValueRaider
144efd3b08 Dev version 0.2.19b2 2023-05-11 13:52:41 +01:00
ValueRaider
80fc91ffa9 Merge pull request #1523 from ranaroussi/fix/price-fixes
Price fixes
2023-05-11 13:51:03 +01:00
ValueRaider
9821197fd1 Merge pull request #1522 from ranaroussi/fix/logging-messages
Improve logging messages
2023-05-11 13:50:45 +01:00
ValueRaider
45b5cac33b Improve logging messages
Improve logging messages related to price data fetches:
- fix 'debug is deprecated' msg
- append user args to 'may be delisted' msg - interval & dates/period
- improve formatting of 'cannot reconstruct' msg
- hide errors in 'history()' while accessing 'fast_info[]'
2023-05-10 14:47:58 +01:00
ValueRaider
d755b8c7ff Fix 'history()' edge cases
Fix merging prices & events if prices empty.
If user requested price repair, ensure 'Repaired?' column always present.
2023-05-10 14:44:50 +01:00
ValueRaider
ab1042b4c9 Dev version 0.2.19b1 2023-05-04 22:14:34 +01:00
ValueRaider
8172fc02d2 Merge pull request #1514 from ranaroussi/feature/optimise-history
Optimise Ticker.history() - up to 2x faster
2023-05-04 22:08:40 +01:00
ValueRaider
836082280b Merge branch 'dev' into feature/optimise-history 2023-05-04 22:08:28 +01:00
ValueRaider
6a98c2eda6 Merge pull request #1493 from ranaroussi/feature/error-reporting
Deprecate 'debug' arg, improve 'logging' use
2023-05-04 22:06:54 +01:00
ValueRaider
46f55c8983 Add debug logging to 'history()' ; Improve logger fmt 2023-05-04 22:04:39 +01:00
ValueRaider
b025fef22c Optimise Ticker.history() - up to 2x faster
format_history_metadata() is expensive. Improvements:
- only perform full formatting if user requests metadata
- when pruning prepost data, only format 'tradingPeriods' entry of metadata

Other small optimisations to several internal prices processing methods.

Speedups:
dat.history(period='1wk', interval='1h', prepost=True)  # 2x
dat.history(period='1mo', interval='1h', prepost=True)  # 1.46x
dat.history(period='1wk', interval='1h')  # 1.15x
dat.history(period='1mo', interval='1h')  # 1.13x
dat.history(period='1y', interval='1d')  # 1.36x
dat.history(period='5y', interval='1d')  # 1.13x
2023-04-30 00:35:08 +01:00
ValueRaider
b96319dd64 Merge pull request #1504 from ranaroussi/hotfix/sql-exception
Fix timezone cache error: IntegrityError('NOT NULL constraint failed: kv.key')
2023-04-26 21:29:33 +01:00
ValueRaider
74b88dc62c Fix IntegrityError in timezone cache 2023-04-26 21:27:31 +01:00
ValueRaider
e3778465d8 Merge branch 'dev' into feature/error-reporting 2023-04-22 16:02:56 +01:00
ValueRaider
f82177ea2e Improve download() logging - group errors & tracebacks for cleaner STDOUT 2023-04-16 21:57:04 +01:00
ValueRaider
d30a2a0915 README.md: update 'News' 2023-04-16 21:29:57 +01:00
ValueRaider
142b1f3eb4 Merge pull request #1499 from ranaroussi/main
sync main -> dev
2023-04-16 19:08:50 +01:00
ValueRaider
afad7fcf0b Bump version to 0.2.18 2023-04-16 19:03:08 +01:00
ValueRaider
0baedbe4f5 Merge pull request #1498 from ranaroussi/hotfix/tz-cache-migrate-error
Fix handling Pandas parsing error during TZ-csv-cache migrate
2023-04-16 19:00:50 +01:00
ValueRaider
2c3c3dc8a9 Merge pull request #1496 from ranaroussi/hotfix/fast-info-np-not-found
Fix '_np not found', tweak 'info[] fixed' message
2023-04-16 18:59:38 +01:00
ValueRaider
8585dda77a Fix handling Pandas parsing error during TZ-csv-cache migrate 2023-04-16 15:09:28 +01:00
ValueRaider
3eb60fbd4a Fix '_np not found', tweak 'info[] fixed' message 2023-04-16 10:37:25 +01:00
ValueRaider
d3e2e71a6e Improve logging behaviour, particulary download()
- Use same logger across all files
- download():
  - write tracebacks to DEBUG
  - deprecate 'show_errors' argument
2023-04-15 17:29:07 +01:00
ValueRaider
4937c933a2 Deprecate 'debug' arg, improve 'logging' use 2023-04-15 16:47:39 +01:00
ValueRaider
045cd45893 Bump version to 0.2.17 2023-04-10 21:55:21 +01:00
ValueRaider
6d52cb6e3a Merge pull request #1488 from steven9909/fix_localize
Fix tzinfo missing attribute
2023-04-10 21:51:54 +01:00
steven9909
a24c0e1391 fix tzinfo missing attribute
tzinfo does not have a localize attribute so it is replaced with timestamp in UTC
2023-04-10 16:04:58 -04:00
ValueRaider
1e941fc86a Merge branch 'main' into dev 2023-04-09 23:45:37 +01:00
ValueRaider
0b52e8f118 Bump version to 0.2.16 2023-04-09 23:42:50 +01:00
ValueRaider
d45bed3d53 Fix 'fast_info deprecated' msg appearing at Ticker() init 2023-04-09 23:41:44 +01:00
ValueRaider
4152f7c897 Bump version to 0.2.15 2023-04-09 21:07:16 +01:00
ValueRaider
e7a3848f69 Merge pull request #1477 from ranaroussi/feature/price-repair-tweaks
Price repair: add 'Repaired?' column, and a bugfix
2023-04-09 21:01:49 +01:00
ValueRaider
fc4350e463 Merge pull request #1480 from kennykos/get_full_info
'info' fetch now gets same data as scrape
2023-04-09 21:01:34 +01:00
ValueRaider
13556afd90 README.md: reorganise & link to 'How to contribute' 2023-04-07 12:21:01 +01:00
ValueRaider
3d29ced428 Merge pull request #1474 from garrettladley/leverage-dict-and-list-comps
Leverage dict & list comprehensions in yfinance/tickers.py
2023-04-06 13:26:08 +01:00
Value Raider
6a63ce9e15 Demote 'fast_info'
Demote 'fast_info':
- inform user can revert to 'info'
- remove from README
- relocate class from base.py -> quote.py
2023-04-06 12:21:57 +01:00
garrettladley
2fe5a0a361 leveraged dict & list comps in yfinance/tickers.py 2023-04-05 18:55:47 -04:00
kennykos
63699a6aad 'info' fetch now gets same data as scrape
* Changed base url to "https://query2.finance.yahoo.com/v10/finance/quoteSummary"
* instead of just getting the quote, we now get
	* ```
	   items = ['summaryProfile', 'financialData', 'quoteType',
                    'defaultKeyStatistics', 'assetProfile', 'summaryDetail']
          ```
	which is the same as in the scrape function
2023-04-05 18:23:36 +01:00
Value Raider
a649b40dc9 Price repair: add 'Repaired?' column, and a bugfix
Price repair changes:
- if user requests price repair, add 'Repaired?' bool column showing what rows were repaired.
- fix price repair requesting <1d data beyond Yahoo's limit.
- fix logger messages
2023-04-03 21:27:04 +01:00
ValueRaider
a01edee4fa Merge pull request #1476 from ranaroussi/main
main -> dev
2023-04-03 21:20:50 +01:00
Value Raider
5367f62bd7 Bump version to 0.2.14 2023-03-25 11:39:21 +00:00
ValueRaider
27cb90c596 Merge pull request #1461 from qianyun210603/main
Add failback for decryption error in info interface
2023-03-25 11:33:27 +00:00
BookSword
6c2682654a Fetch 'info' dict via API 2023-03-24 18:04:07 +00:00
Value Raider
e89e190d11 Merge branch 'main' into dev 2023-03-21 19:05:56 +00:00
ValueRaider
a236270389 Merge pull request #1457 from ranaroussi/fix/price-fixes-various
Various fixes to price data processing
2023-03-21 18:59:13 +00:00
Value Raider
ef1205388c Bump version to 0.2.13 2023-03-21 18:56:32 +00:00
Value Raider
bb477989d4 Fix price-events merge when occurred pre-market 2023-03-21 18:52:35 +00:00
ValueRaider
478dc0a350 Merge pull request #1452 from ranaroussi/hotfix/prices-merge-events
Fix filtering events older than prices for merging
2023-03-21 18:16:29 +00:00
Value Raider
b5dca4941a Order history_metadata['tradingPeriods'] DF sensibly 2023-03-20 21:18:53 +00:00
Value Raider
6b71ba977c Various fixes to price data processing
- move drop-duplicates to before repair
- fix 'format_history_metadata()' processing 'regular' column
- fix Pandas & Numpy warnings
2023-03-20 21:10:45 +00:00
ValueRaider
195a7aa304 Merge pull request #1455 from mppics/fix/aggregate_capital_gains
Adding fix and test for aggregating Capital Gains
2023-03-18 17:24:53 +00:00
Matt Piccoli
a58d7456fe Adding fix and test for aggregating Capital Gains 2023-03-18 12:57:26 -04:00
ValueRaider
1edeaf07dc Merge pull request #1448 from ivan23kor/feature/clarify-end-argument
Clarify that interval is [start; end) in docstrings
2023-03-09 22:04:58 +00:00
Ivan Korostelev
7f04a9dcb6 Clarify that interval is [start; end) in docstrings 2023-03-09 14:27:21 -07:00
ValueRaider
7b95f554bd README: fix rate-limiting example 2023-02-21 12:24:35 +00:00
ValueRaider
6c70b866c7 Merge pull request #1423 from flaviovs/no-print
No print
2023-02-20 20:07:23 +00:00
Value Raider
bd696fb4db Beta version 0.2.13b1 2023-02-17 17:04:39 +00:00
Value Raider
d13aafa633 Replace more prints with logging, mostly in 'price repair' 2023-02-17 12:01:11 +00:00
Flávio Veloso Soares
00823f6fa6 Remove redundant logging text 2023-02-16 16:53:33 -08:00
Flávio Veloso Soares
21fdba9021 Replace warnings print() with warnings.warn(...) calls 2023-02-16 16:53:33 -08:00
Flávio Veloso Soares
972547ca8c Replace prints with logging module 2023-02-16 16:53:33 -08:00
ValueRaider
23b400f0fb Merge pull request #1421 from ranaroussi/fix/missing-price-history-errors
Improve handling missing price history
2023-02-16 14:22:10 +00:00
Value Raider
ca8c1c8cb4 Bump version to 0.2.12 2023-02-16 12:01:25 +00:00
ValueRaider
6b8b0d5c86 Merge pull request #1422 from ranaroussi/hotfix/disable-decrypt-fail-msg
Disable annoying 'backup decrypt' msg
2023-02-16 12:00:16 +00:00
Value Raider
952a04338f Disable annoying 'backup decrypt' msg 2023-02-15 16:46:55 +00:00
Value Raider
a1a385196b Improve handling missing price history
Fix fast_info[] dying if metadata incomplete/missing ; Price repair fix when no fine data available ; Fix _fix_unit_mixups() report
2023-02-14 17:31:14 +00:00
ValueRaider
62a442bd15 Update yahoo-keys.txt 2023-02-14 00:06:06 +00:00
ValueRaider
a0046439d1 Merge pull request #1400 from ranaroussi/feature/improve-performance
Optimise recent new features in `history`
2023-02-12 14:58:36 +00:00
ValueRaider
63a8476575 Merge pull request #1417 from ranaroussi/main
main -> dev
2023-02-12 14:56:19 +00:00
ValueRaider
e96f4f3cc0 Update yahoo-keys.txt 2023-02-12 09:57:25 +00:00
ValueRaider
cd5d0dfc3b Bump version to 0.2.11 2023-02-10 16:59:20 +00:00
ValueRaider
ece41cdb06 Merge pull request #1411 from sdeibel/main
Fix format_history_metadata for some symbols
2023-02-10 16:30:03 +00:00
ValueRaider
c362d54b1a Fix other metadata accesses + tests 2023-02-09 19:41:50 +00:00
Stephan Deibel
543e4fe582 Fix format_history_metadata for some symbols
Fix format_history_metadata when firstTradeDate is None, as is the case for QCSTIX and probably others.
2023-02-09 13:46:52 -05:00
ValueRaider
f8aab533ba Merge branch 'main' into hotfix/proxy 2023-02-08 13:52:34 +00:00
ValueRaider
53fca7016e Bump version to 0.2.10 2023-02-07 22:05:17 +00:00
ValueRaider
4b6529c3a5 Merge pull request #1406 from ranaroussi/dev
dev -> main
2023-02-07 22:03:20 +00:00
ValueRaider
8957147926 Merge branch 'main' into dev 2023-02-07 22:02:46 +00:00
ValueRaider
4c7392ed17 Merge pull request #1403 from ranaroussi/fix/decrypt-keys
Fix decrypt keys
2023-02-07 21:55:33 +00:00
ValueRaider
0efda4f5af Fix filtering events older than prices for merging 2023-02-07 21:45:35 +00:00
ValueRaider
508de4aefb Dev version 0.2.10b3 2023-02-07 14:09:08 +00:00
ValueRaider
3d39992280 Add resilience to price repair
When calibrating price repair, use weighted average to estimate stock split ratio, is more resilient
2023-02-07 14:07:08 +00:00
ValueRaider
b462836540 Merge pull request #1385 from ranaroussi/fix/download-tz-behaviour
Restore original download() timezone handling
2023-02-07 13:16:03 +00:00
ValueRaider
2795660c28 Add a 5th backup key 2023-02-07 13:10:03 +00:00
ValueRaider
3dc87753ea Fix _get_decryption_keys_from_yahoo_js() returning '' 2023-02-07 13:09:49 +00:00
ValueRaider
645cc19037 Merge pull request #1379 from ranaroussi/feature/improve-decrypt
Add another backup decrypt option
2023-02-06 22:24:22 +00:00
ValueRaider
86d6acccf7 Fix dumb bugs in price repair - 1 more 2023-02-05 18:17:47 +00:00
ValueRaider
0f5db35b6e Optimise Ticker._reconstruct_intervals_batch() (slightly) 2023-02-05 18:16:08 +00:00
ValueRaider
7c6742a60a Optimise Ticker._fix_unit_mixups() 2023-02-05 15:15:56 +00:00
ValueRaider
4fa32a98ed Merge pull request #1397 from Matt-Seath/dev
Catch TypeError Exception
2023-02-05 13:49:48 +00:00
ValueRaider
36ace8017d Optimise Ticker._fix_zeroes() 2023-02-05 13:46:57 +00:00
ValueRaider
5cdc78f479 Merge pull request #1398 from vidalmarco/patch-1
get_shares_full does not work with proxy
2023-02-05 10:59:33 +00:00
Marco Vidal
ba634fad0e get_shares_full does not work with proxy
Error: "Yahoo web request for share count failed" 
updated cache_get call by adding proxy parameter and by calling it by keyword
2023-02-05 09:17:22 +01:00
Matt Seath
35f4071c0b Catch TypeError Exception
Addresses recent issue where calling Ticker.info would occasionally result in a TypeError Exception at line 287.
2023-02-05 11:49:40 +10:00
ValueRaider
8a5ca71f52 Fix holders.py proxy pass-through 2023-02-05 00:06:49 +00:00
ValueRaider
ead0bce96e Optimise format_history_metadata() 2023-02-04 22:56:49 +00:00
ValueRaider
86b00091a9 Fix dumb bugs in price repair 2023-02-02 21:57:55 +00:00
ValueRaider
141ce7e471 Fix proxy + cache_get. Improve error propagation 2023-02-01 21:19:54 +00:00
ValueRaider
4eae728a06 Potential fix for proxy - enable #2 2023-02-01 19:17:18 +00:00
ValueRaider
2d6b6b26ed Potential fix for proxy - enable 2023-02-01 19:04:47 +00:00
ValueRaider
ec3dfaf305 Potential fix for proxy - revert 2023-02-01 18:10:45 +00:00
ValueRaider
e89d390824 Potential fix for proxy 2023-02-01 18:09:51 +00:00
ValueRaider
563a1a3448 Add Ticker test for proxy 2023-02-01 17:28:57 +00:00
ValueRaider
2e6d3d0e60 Fix proxy in 'history()' 2023-02-01 17:06:23 +00:00
ValueRaider
2a2928b4a0 Fix 'tradingPeriods' parsing when empty - 0.2.10b2 2023-02-01 13:31:54 +00:00
ValueRaider
d47133e5bf Dev version 0.2.10b1 2023-01-31 22:12:11 +00:00
ValueRaider
8f0c58dafa Dev version 0.2.10b0 2023-01-31 22:02:41 +00:00
ValueRaider
27a721c7dd Merge pull request #1380 from ranaroussi/fix/old-sqlite-error
Allow using sqlite3 < 3.8.2
2023-01-31 19:52:22 +00:00
ValueRaider
3e964d5319 Merge pull request #1383 from ranaroussi/fix/fast-info-prepost
Fix fast_info["previousClose"]
2023-01-31 19:51:46 +00:00
ValueRaider
84a31ae0b4 Merge pull request #1311 from ranaroussi/feature/prices-metadata-prune-prepost
Drop intraday intervals if in post-market but prepost=False
2023-01-31 19:50:00 +00:00
ValueRaider
891b533ec2 Drop intraday intervals if in prepost but prepost=False 2023-01-31 19:48:47 +00:00
ValueRaider
b9fb3e4979 Restore original download() tz handling: day/week/etc = ignore 2023-01-31 00:00:45 +00:00
ValueRaider
09342982a4 Add 'quoteType'. Improve handling tickers without trading 2023-01-30 23:53:06 +00:00
ValueRaider
da8c49011e fast_info: Fix previousClose & yearChange 2023-01-30 16:06:55 +00:00
ValueRaider
b805f0a010 Add another backup decrypt option 2023-01-29 23:09:45 +00:00
ValueRaider
5b0feb3d20 Fix tests 2023-01-29 16:53:26 +00:00
ValueRaider
ecbfc2957d bug_report: tighten language (again) 2023-01-29 13:58:02 +00:00
ValueRaider
e96248dec7 README: fix narrative ordering 2023-01-29 13:52:13 +00:00
ValueRaider
7d0045f03c README: simplify API overview with link to Wiki 2023-01-29 13:49:01 +00:00
ValueRaider
c3d7449844 Merge pull request #1289 from ranaroussi/fix/price-repair
Fix & improve price repair
2023-01-29 13:02:48 +00:00
ValueRaider
a4f11b0243 Fix price repair tests, remove unrelated changes 2023-01-29 13:01:54 +00:00
ValueRaider
1702fd0797 bug_report: tighten language 2023-01-29 00:54:27 +00:00
ValueRaider
464b3333d7 Allow using sqlite3 < 3.8.2 2023-01-29 00:34:46 +00:00
ValueRaider
685f2ec351 Merge branch 'dev' into fix/price-repair 2023-01-28 23:26:56 +00:00
ValueRaider
aad46baf28 price repair: Fix 'min_dt', add 'silent' mode 2023-01-28 23:14:28 +00:00
ValueRaider
a97db0aac6 README: add how-to for requests rate-limiting 2023-01-28 23:10:38 +00:00
ValueRaider
553bc5965a Fix proxy arg passthrough 2023-01-28 23:07:19 +00:00
ValueRaider
af5f96f97e Merge pull request #1368 from ranaroussi/fix/fast-info-camel-case
`fast_info` usability improvements
2023-01-28 22:28:42 +00:00
ValueRaider
a4bdaea888 fast_info: add camelCase, items() & values() 2023-01-28 22:27:51 +00:00
ValueRaider
ac5a9d2793 Merge pull request #1367 from ranaroussi/main
main -> dev
2023-01-27 22:09:59 +00:00
ValueRaider
b17ad32a47 Merge pull request #1366 from ranaroussi/doc/readme-explain-instability
README: comment on instability, tidy Ticker 'Quick start'
2023-01-27 18:31:32 +00:00
ValueRaider
af39855e28 README: comment on instability, tidy Ticker 'Quick start' 2023-01-27 17:36:25 +00:00
ValueRaider
ac6e047f0d Bump version to 0.2.9 2023-01-26 22:21:46 +00:00
ValueRaider
1e24337f29 Bump version to 0.2.8 2023-01-26 22:20:11 +00:00
ValueRaider
2cc82ae12f Merge pull request #1362 from ranaroussi/hotfix/fast-info-bugs
Ticker.fast_info: fix teething bugs
2023-01-26 22:03:06 +00:00
ValueRaider
d11f385049 Make fast_info JSON-serializable via toJSON() 2023-01-26 21:45:53 +00:00
ValueRaider
7377611e1f Add 'get(key, default)' to fast_info 2023-01-26 21:23:31 +00:00
ValueRaider
f3b5fb85c9 Remove exception raise from 'get_shares_full()' 2023-01-26 21:14:48 +00:00
ValueRaider
a4faef83ac 'fast_info' fixes: unusual symbols ; improve migration message ; 'regular_market_previous_close' 2023-01-26 21:02:18 +00:00
ValueRaider
e1184f745b Update yahoo-keys.txt 2023-01-26 17:06:03 +00:00
ValueRaider
fe630008e9 Bump version to 0.2.7 2023-01-26 17:03:00 +00:00
ValueRaider
b43072cf0a Merge pull request #1354 from ranaroussi/hotfix/rename-basic-info
Rename 'basic_info' -> 'fast_info'
2023-01-26 17:00:54 +00:00
ValueRaider
ad3f4cabc9 Improve 'get_shares_full()' error handling 2023-01-26 16:58:26 +00:00
ValueRaider
f70567872c Merge pull request #1353 from ranaroussi/hotfix/smart-decryption
Add decrypt key extraction from JS + GitHub backup
2023-01-26 16:44:23 +00:00
ValueRaider
a8ade72113 Rename 'basic_info' -> 'fast_info' ; Fix info tests 2023-01-26 16:36:25 +00:00
ValueRaider
1dcc8c9c8b Remove dead debug code 2023-01-26 14:57:15 +00:00
ValueRaider
dd5462b307 Add decrypt key extraction from JS + GitHub backup 2023-01-26 14:52:18 +00:00
ValueRaider
e39c03e8e3 Hardcode decrypt keys in GitHub for fix w/o PIP
`yfinance` will query this file via web request as a last resort. Avoids having to release a new PIP version just for a key update.
2023-01-26 14:20:03 +00:00
ValueRaider
9297504b84 Merge pull request #1346 from ranaroussi/main
main -> dev sync
2023-01-25 22:16:22 +00:00
ValueRaider
3971115ab9 Bump version to 0.2.6 2023-01-25 19:10:31 +00:00
ValueRaider
b5badbbc61 Merge pull request #1342 from ranaroussi/hotfix/basic_info
Fix 'Ticker.basic_info' lazy-loading
2023-01-25 19:09:37 +00:00
ValueRaider
ba8621f5be Fix Ticker.basic_info.keys() calling each method 2023-01-25 18:35:54 +00:00
ValueRaider
8e5c94a4eb Bump version to 0.2.5 2023-01-25 16:45:30 +00:00
ValueRaider
66a1c1a174 Merge pull request #1337 from ranaroussi/dev
dev -> main
2023-01-25 16:40:56 +00:00
ValueRaider
ab6214df79 Merge pull request #1336 from ranaroussi/hotfix/decryption
Hardcode decryption keys
2023-01-25 16:40:38 +00:00
ValueRaider
dc5d42c8e2 Add another key 2023-01-25 15:46:07 +00:00
ValueRaider
ab75495cd3 Hardcode decryption keys 2023-01-25 14:45:04 +00:00
ValueRaider
39c1ecc7a2 Improve price repair - reduce spam, improve data reliability
Extend 'reconstruct groups' to reduce Yahoo spam ; Extend fetch range to avoid first/last day irregularities ; Improve handling of 'max fetch days' Yahoo limit
2023-01-25 14:37:43 +00:00
ValueRaider
af7720668c Merge pull request #1328 from CollieIsCute/main
use dict comprehension to improve speed
2023-01-25 13:42:44 +00:00
Collie Tsai
9051fba601 use dict comprehension to improve speed 2023-01-25 21:15:54 +08:00
ValueRaider
03ea6acec0 Merge pull request #1317 from ranaroussi/feature/prune-info
`Ticker.basic_info` - fast but minimal alternative to `info[]`
2023-01-25 11:28:22 +00:00
ValueRaider
ddc93033d7 Reorder contents of bug_report.md 2023-01-23 11:53:00 +00:00
ValueRaider
eb6d830e2a Fix repair volume=0 ; Tidy code 2023-01-21 23:00:30 +00:00
ValueRaider
2b0ae5a6c1 Remove 'repair_intervals' 2023-01-21 16:58:45 +00:00
ValueRaider
1636839b67 Handle request to reconstruct 1m 2023-01-20 00:13:28 +00:00
ValueRaider
65b97d024b Improve reporting 2023-01-20 00:13:02 +00:00
ValueRaider
fb77d35863 Update README 2023-01-19 22:33:54 +00:00
ValueRaider
197d2968e3 Add 'repair_intervals', rename 'repair'->'repair_prices' 2023-01-19 22:19:16 +00:00
ValueRaider
7460dbea17 If reconstructing 1d interval with 1h, always request prepost 2023-01-19 22:18:46 +00:00
ValueRaider
b49fd797fc Fix & improve price repair
Fix repair calibration & volume=0 repair ; Extend repair to sub-hour ; Avoid attempting repair of mostly-NaN days
2023-01-19 22:18:46 +00:00
ValueRaider
6bd8fb2290 Improve test ; Add more keys to basic_info 2023-01-19 14:57:34 +00:00
ValueRaider
cd1e16ad9e Add test ; Fix 1y price stats 2023-01-19 00:37:17 +00:00
ValueRaider
3fd9ea2204 Remove more info[] keys - #2 2023-01-18 16:55:31 +00:00
ValueRaider
d5a1266cbe Remove more info[] keys 2023-01-17 20:13:32 +00:00
ValueRaider
89bbe8ad4c Override Ticker.basic_info __str__() 2023-01-17 19:49:42 +00:00
ValueRaider
e44c6f8b0e Add 'Ticker.basic_info' 2023-01-17 14:10:28 +00:00
ValueRaider
0ba810fda5 Improve 'history_metadata' formatting 2023-01-16 18:30:28 +00:00
ValueRaider
677bbfed8b Add Ticker.market_cap helper ; Tidy info[] blacklist 2023-01-16 11:23:35 +00:00
ValueRaider
97671b78dd Move info migrate msgs from 'is in' to '[]' 2023-01-14 23:11:02 +00:00
ValueRaider
2865c0df9f Prune info[] with migration instructions
Remove redundant keys from info[] that are better found elsewhere ; Print instructions if old keys accessed via InfoDictWrapper
2023-01-14 23:07:04 +00:00
ValueRaider
0c037ddd12 Bump version to 0.2.4 2023-01-14 22:58:53 +00:00
ValueRaider
3ee4674098 Merge pull request #1302 from ranaroussi/dev
dev -> main
2023-01-14 22:58:33 +00:00
ValueRaider
5d9a91da4a Improve 'get_shares_full()' error handling ; Minor fixes 2023-01-14 22:44:54 +00:00
ValueRaider
47c579ff22 Merge pull request #1297 from alexa-infra/fix-stores-decryption
Fix stores decrypt
2023-01-14 20:06:52 +00:00
ValueRaider
caf5cba801 Merge pull request #1301 from ranaroussi/feature/share-count
Feature/share count
2023-01-14 19:53:45 +00:00
ValueRaider
486c7894ce get_shares_full(): convert to pd.Series, add test 2023-01-14 17:32:54 +00:00
ValueRaider
db8a00edae get_shares_full(): remove caching, tidy API 2023-01-14 17:11:57 +00:00
ValueRaider
805523b924 Fix 'get_shares_full()' post-rebase 2023-01-14 16:58:58 +00:00
ValueRaider
32ab2e648d get_shares_full() set default range 1yr 2023-01-14 16:35:54 +00:00
ValueRaider
4d91ae740a Add date args to 'shares_full()' and caching 2023-01-14 16:35:54 +00:00
ValueRaider
05ec4b4312 Add full share count history via 'shares_full' 2023-01-14 16:35:51 +00:00
ValueRaider
cd2c1ada14 Improve decrypt key deduction 2023-01-14 15:41:33 +00:00
ValueRaider
4ca9642403 Ensure 'requests_cache' responses processed ; Improve naming 2023-01-14 14:20:40 +00:00
Alexey Vasilyev
b438f29a71 Fix decryption 2023-01-14 08:06:35 +01:00
ValueRaider
4db178b8d6 Merge pull request #1284 from ranaroussi/fix/financials-caching
Improve caching of financials data
2023-01-12 11:47:04 +00:00
ValueRaider
38637a9821 Merge pull request #1283 from DE0CH/ignore-tz-false
Change default value to ignore_tz to False
2023-01-08 12:45:00 +00:00
Deyao Chen
de8c0bdcdd Change default value to ignore_tz to False
Bring the behavior of download() to be the same as 0.1.77.
2023-01-08 11:47:13 +08:00
ValueRaider
fd35975cf9 Improve caching of financials data 2023-01-07 18:02:16 +00:00
ValueRaider
1495834a09 Merge pull request #1276 from gogog22510/main
Fix the database lock error in multithread download
2023-01-04 23:10:22 +00:00
ValueRaider
2a7588dead Tidy DB lock fix 2023-01-04 21:32:54 +00:00
gogog22510
051de748b9 Fix the database lock error in multithread download 2023-01-04 12:37:59 -05:00
ValueRaider
97adb30d41 Merge pull request #1262 from ranaroussi/main
Sync `main` -> `dev`
2022-12-20 20:42:10 +00:00
ValueRaider
eacfbc45c0 Bump version to 0.2.3 2022-12-20 11:57:04 +00:00
ValueRaider
8deddd7ee9 Make financials API '_' use consistent 2022-12-20 11:56:57 +00:00
ValueRaider
beb494b67e README: add small section on version 0.2 2022-12-20 11:37:16 +00:00
ValueRaider
e2948a8b48 Bump version to 0.2.2 2022-12-20 11:33:04 +00:00
ValueRaider
ff3d3f2f78 Restore 'financials' attribute (map to 'income_stmt') 2022-12-20 11:32:19 +00:00
ValueRaider
85783da515 README: update 'repair' doc 2022-12-19 23:30:29 +00:00
ValueRaider
9dbfad4294 Bump version to 0.2.1 2022-12-19 23:19:42 +00:00
ValueRaider
5e54b92efd Fix _reconstruct_intervals_batch() calibration bug 2022-12-19 18:09:06 +00:00
ValueRaider
cffdbd47b5 Merge pull request #1253 from Rogach/pr/decode-stores
decode encrypted root.App.main.context.dispatcher.stores
2022-12-19 12:29:57 +00:00
ValueRaider
f398f46509 Switch 'pycryptodome' -> 'cryptography' 2022-12-19 12:28:51 +00:00
ValueRaider
097c76aa46 Add 'pycryptodome' requirement 2022-12-18 13:26:12 +00:00
ValueRaider
a9da16e048 Fix get_json_data_stores() behaviour 2022-12-18 13:19:11 +00:00
Platon Pronko
8e5f0984af decode encrypted root.App.main.context.dispatcher.stores 2022-12-18 11:40:26 +04:00
ValueRaider
38b738e766 Bump version to 0.2.0rc5 2022-12-16 16:27:46 +00:00
ValueRaider
55772d30a4 Merge pull request #1245 from ranaroussi/dev
Merge dev -> main for release 0.2.0rc5
2022-12-16 16:25:36 +00:00
ValueRaider
382285cfd9 Remove hardcoded paths 2022-12-16 16:24:16 +00:00
ValueRaider
d2e5ce284e Merge pull request #1243 from ranaroussi/fix/financials-error-handling
Improve financials error handling
2022-12-16 16:20:25 +00:00
ValueRaider
88d21d742d Merge pull request #1244 from ranaroussi/fix/repair-100x
Fix '100x price' repair
2022-12-16 16:20:17 +00:00
ValueRaider
7a0356d47b Document financials get() methods 2022-12-16 16:19:37 +00:00
ValueRaider
a13bf0cd6c Hide divide-by-0 warnings 2022-12-16 15:05:38 +00:00
ValueRaider
7cacf233ce Improve financials error handling
Nicely intercept parse errors in get_json_data_stores() & _create_financials_table_old() ; Improve exception messages ; Fix typo 'YFiance'
2022-12-16 13:22:17 +00:00
ValueRaider
b48212e420 Repair-100x now tolerates zeroes 2022-12-14 21:16:16 +00:00
ValueRaider
f10f9970b2 Bump version to 0.2.0rc4 2022-12-13 22:12:23 +00:00
ValueRaider
96ff214107 Fix tests 2022-12-13 21:45:28 +00:00
ValueRaider
e7bf3607e8 Fix tests 2022-12-13 21:41:46 +00:00
ValueRaider
2883362a0e Merge pull request #1238 from ranaroussi/dev
Merge dev -> main for release 0.2.0rc3 (or official?)
2022-12-13 21:22:43 +00:00
ValueRaider
df7af507f0 Merge pull request #1233 from ranaroussi/revise-reqs
Raise reqs min versions (lxml, pandas)
2022-12-13 18:12:48 +00:00
ValueRaider
46dbed3e7e Merge pull request #1235 from ymyke/feature/add-history-metadata
Add `history_metadata` property
2022-12-13 18:09:14 +00:00
ValueRaider
46d5579caa Merge pull request #1236 from ranaroussi/feature/improve-reconstruction
Improve price repair
2022-12-13 17:28:21 +00:00
ValueRaider
11a3a9d457 Raise min lxml & pandas, sync all reqs lists 2022-12-13 15:25:34 +00:00
ValueRaider
6dca1eea96 Don't repair prices if can't calibrate 2022-12-13 14:47:27 +00:00
ymyke
85ef53c6bb Store _history_metadata earlier and use that attribute for further metadata access in the same function 2022-12-13 08:27:12 +01:00
ValueRaider
4c41ba0a50 Improve price repair
Minimise _reconstruct_intervals() #requests ; Refine when to repair NaNs
2022-12-12 16:43:24 +00:00
ymyke
6f60a78262 Add history_metadata property
Including test and README mention.

See also https://github.com/ranaroussi/yfinance/issues/1195.
2022-12-12 17:16:05 +01:00
ValueRaider
8f083818c3 Merge pull request #1232 from ranaroussi/fix/no-history-caching
If fetching price history ending in future, don't use cache
2022-12-10 21:13:39 +00:00
ValueRaider
791c845d23 Merge pull request #1194 from ranaroussi/feature/old-financials-backup
Serve old financials when new financials are missing
2022-12-10 21:13:09 +00:00
ValueRaider
aeea23229f Merge branch 'dev' into feature/old-financials-backup 2022-12-10 21:12:06 +00:00
ValueRaider
e91ffe4844 Replace 'fallback' with 'legacy' arg 2022-12-10 21:05:42 +00:00
ValueRaider
df9d456cf6 Merge pull request #1221 from ranaroussi/feature/financials-format-default
Default enable 'pretty' financials, explain in README
2022-12-10 19:44:13 +00:00
ValueRaider
4c89e8aefa Account for data delay ; Remove debug code ; Fix session test 2022-12-10 18:27:23 +00:00
ValueRaider
7ddce7f80b Update issue template - add note on Yahoo spam 2022-12-08 13:57:21 +00:00
ValueRaider
b3dbbc46e2 If fetching price history ending in future, don't use cache 2022-12-06 18:04:30 +00:00
ValueRaider
762d446661 Default enable 'pretty' financials, explain in README 2022-12-01 18:49:43 +00:00
ValueRaider
1aa3c3d9a8 Merge pull request #1220 from ranaroussi/feature/improve-repair-zero
Improve handling dividends without matching price interval
2022-12-01 17:14:59 +00:00
ValueRaider
0f6ad3290d Merge pull request #1217 from ranaroussi/fix/Yahoo-duplication-fix
Extend Yahoo duplication fix to intra-day
2022-12-01 17:14:41 +00:00
ValueRaider
e26a4c5a1c Improve handling dividends without matching price interval
Tolerate merging daily dividend event without matching prices interval (just append).
Move price-repair to after merge, to fix these missing prices intervals.
Improve bad-price detection & repair.
2022-12-01 17:11:05 +00:00
ValueRaider
d963e3fe1c Fix dev merge ; Fix financials fallback fetch 2022-12-01 15:47:37 +00:00
ValueRaider
0cd54486d0 Merge pull request #1216 from ymyke/fix/readme-several
Fix a couple of minor issues in README
2022-11-30 22:35:47 +00:00
ValueRaider
f93c3d76ce Extend Yahoo duplication fix to intra-day 2022-11-30 17:05:22 +00:00
ValueRaider
8bf7576b33 Merge pull request #1215 from fredrik-corneliusson/dev_verify_ticker_history_call
Test to verify ticker history request.
2022-11-29 23:11:46 +00:00
ymyke
2eae33bd33 Fix a couple of minor issues in README
- Typos in variable name
- `Ticker` doesn't support several tickers
- `Tickers` doesn't return named tuple
- "1m" in `download` would produce an error for longer timeframes, so
  changing the example to "5d"
2022-11-29 23:28:16 +01:00
Fredrik Corneliusson
5e333f53ee #1213 Added test asserting no harmful requests are added to history call. 2022-11-29 01:18:59 +01:00
ValueRaider
9c249a100f Merge pull request #1203 from ranaroussi/fix/capital-gains-perf-regression
Get quote type from metadata instead info[] -> faster
2022-11-28 18:13:29 +00:00
ValueRaider
0ee3d6d72d Merge pull request #1208 from fredrik-corneliusson/mydev
#1207 Fixed regression issue with Python < 3.9
2022-11-27 19:23:33 +00:00
ValueRaider
3c218b81a3 Merge pull request #1210 from fredrik-corneliusson/mydev_1209
#1209 Fixed pretty format alters cached dataframe
2022-11-27 19:22:06 +00:00
ValueRaider
80dc0e8488 Merge branch 'dev' into feature/old-financials-backup 2022-11-27 19:19:03 +00:00
ValueRaider
4064ec53c3 Move financials fallback logic into Ticker 2022-11-27 19:15:35 +00:00
Fredrik Corneliusson
37ac9bd1d5 #1209 Fixed pretty format alters cached dataframe 2022-11-27 19:25:08 +01:00
Fredrik Corneliusson
e234b8c5ab #1207 Fixed regression issue with Python < 3.9 2022-11-27 19:00:45 +01:00
ValueRaider
efc56c43c2 Improve bug issue template - request version info 2022-11-27 12:50:56 +00:00
ValueRaider
50de008820 Merge pull request #1193 from ranaroussi/fix/financials-formatting
Fix financials formatting
2022-11-26 21:40:30 +00:00
ValueRaider
d7baa0713e Get quote type from metadata instead info[] -> faster 2022-11-25 22:18:09 +00:00
ValueRaider
3b19ef12bc camel2title(): restrict acceptable inputs 2022-11-24 20:36:00 +00:00
ValueRaider
dfb15e6778 Unit tests for financials formatting 2022-11-23 18:16:51 +00:00
ValueRaider
379b87d925 Moved financials formatting up into get()
Moved financials formatting up into get(), controlled by new 'pretty' argument. Extend camel2title() to accept different separator char and to preserve acronyms case e.g. 'EBIT'
2022-11-23 17:45:45 +00:00
ValueRaider
b856041b53 Merge pull request #1177 from ranaroussi/fix/dst-nonexistent
Fix localizing midnight when non-existent (DST) #1174
2022-11-22 22:19:40 +00:00
ValueRaider
b3b36c5cc9 Restore old financials as backup if new missing 2022-11-22 22:17:07 +00:00
ValueRaider
ab1476c0d1 Restore financials nesting code (commented) 2022-11-22 21:46:26 +00:00
ValueRaider
566a38b432 Fix financials index formatting 2022-11-22 21:46:04 +00:00
ValueRaider
96e4532a9d Merge pull request #1183 from fredrik-corneliusson/dev
Made fetching earnings_dates faster
2022-11-21 17:11:33 +00:00
ValueRaider
bd3569367e Bugfix for PR #1166 2022-11-21 17:04:15 +00:00
Fredrik Corneliusson
20680b0e38 Lowered get earnings_dates limit and removed earnings_history API.
earnings_history/get_earnings_history was redundant as it was an incomplete implementation of get_earnings_dates().
2022-11-21 17:48:20 +01:00
ValueRaider
44e8d2b46b Merge pull request #1166 from thirumalairajr/feature/add_capital_gains
Add support for capital_gains data
2022-11-21 13:41:20 +00:00
Thirumalai Raj R
80c659be71 Addressing PR comments 2022-11-21 17:12:15 +05:30
Fredrik Corneliusson
06640102f8 Made fetching earnings_dates faster
Avoid unnecessary request when fetching earnings_date.
Added support to limit argument to only fetch as many as needed.
2022-11-20 02:19:16 +01:00
ValueRaider
a0c47c9944 Merge pull request #1179 from fredrik-corneliusson/dev
Add glob try/except in threaded implementation.
2022-11-19 17:47:46 +00:00
ValueRaider
744e70ffff Add issue template for 'feature request' 2022-11-19 13:46:06 +00:00
Fredrik Corneliusson
e6211896f7 Add glob try/except in threaded implementation.
Needed as current thead implementation breaks if exception is raised.
2022-11-19 12:42:49 +01:00
Thirumalai Raj R
ca27d070f0 Migrating to get_info function 2022-11-17 19:39:57 +05:30
Thirumalai Raj R
82b99b5c9e Merge branch 'feature/add_capital_gains' of github.com:thirumalairajr/yfinance into feature/add_capital_gains 2022-11-17 19:28:40 +05:30
Thirumalai Raj R
c5c1567321 Handle non existant columns while downloading 2022-11-17 19:28:13 +05:30
Thirumalai Raj R
1adc908788 Merge branch 'dev' into feature/add_capital_gains 2022-11-16 18:36:22 +05:30
ValueRaider
2970d9460f Fix localizing midnight when non-existent (DST) #1174 2022-11-16 12:34:36 +00:00
ValueRaider
f0b5db234a Merge pull request #1154 from fredrik-corneliusson/refactor_base_py
Major refactoring
2022-11-15 21:58:06 +00:00
Fredrik Corneliusson
c6f760e61c Fixed #1172 - exception if tz cache file was empty 2022-11-15 22:43:58 +01:00
Thirumalai Raj R
6067d2a590 Addressing PR review comments 2022-11-15 14:23:31 +05:30
Fredrik Corneliusson
c56e3496db Align requirements.txt file with setup.py package dependencies. 2022-11-14 22:03:36 +01:00
ValueRaider
55fd565ef0 Update bug_report.md - ask 'Does Yahoo have data?' 2022-11-14 20:45:30 +00:00
Thirumalai Raj R
231d985c82 Merge branch 'feature/add_capital_gains' of github.com:thirumalairajr/yfinance into feature/add_capital_gains 2022-11-14 15:01:42 +05:30
Thirumalai Raj R
0f433d7e5d Add capital gains data only for MutualFund and ETF 2022-11-14 15:01:27 +05:30
Thirumalai Raj R
e188c7e41f Merge branch 'dev' into feature/add_capital_gains 2022-11-14 14:08:08 +05:30
Fredrik Corneliusson
fa7d743826 Do persist requests_cache in tests. 2022-11-13 21:26:34 +01:00
Fredrik Corneliusson
f4b3348c8e Continued refactoring
Fix for #1171
Change default start to 1900-01-01
Refactored financials to remove unnecessary requests
Dividends not working on windows (DEV)
Add typehints to API
2022-11-13 20:27:16 +01:00
Fredrik Corneliusson
724118a671 Major refactoring
Made fundamentals, quote, analysis and holders into lazy scraped modules in order to improve performance and code maintainability.
2022-11-13 17:47:16 +01:00
ValueRaider
ea95d718ee Merge pull request #1169 from ppeloton/fix-issue-980
Fixing issue 980 by changing default timestamp for start parameter in…
2022-11-13 11:37:42 +00:00
ppeloton
9ba3d5a1ea Fixing issue 980 by changing default timestamp for start parameter in base.py 2022-11-13 08:44:43 +02:00
ValueRaider
b67372e4eb Version 0.2.0rc2 2022-11-12 21:28:22 +00:00
ValueRaider
77107c6ea0 Merge pull request #1168 from ranaroussi/dev
Merge dev -> main for release 0.2.0rc2
2022-11-12 21:20:34 +00:00
Thirumalai Raj R
1ed4b4b65d For ETFs & Mutual Funds, add capitalGains 2022-11-11 20:57:39 +05:30
ValueRaider
2a0e14962e Merge pull request #1157 from fredrik-corneliusson/fix-fundamentals-regression-bug
Fix fundamentals regression bug
2022-11-11 11:51:50 +00:00
ValueRaider
43aae83a1b Merge pull request #1161 from ranaroussi/fix/events-merge
Fix merging events with day/wk/mth prices
2022-11-10 21:50:56 +00:00
Fredrik Corneliusson
fff8e9145d Fixed #1160 2022-11-10 19:17:18 +01:00
ValueRaider
4f1e7a49c4 Fix merging events with day/wk/mth prices 2022-11-10 14:15:18 +00:00
Fredrik Corneliusson
357da735ea Fix fundamentals regression bug
The wrong data was returned for balance_sheet and cashflow
2022-11-10 01:51:15 +01:00
ValueRaider
b7b3b4975d Merge pull request #1148 from ranaroussi/feature/improve-repair-zero
Repair: add zero-price repair + refactor
2022-11-08 15:13:28 +00:00
ValueRaider
7d5fdb6f83 Merge branch 'dev' into feature/improve-repair-zero 2022-11-08 15:10:41 +00:00
ValueRaider
1c2ed86313 Repair: implement _fix_zero_prices(), refactor _fix_unit_mixups(), improve ratio calc 2022-11-08 15:04:59 +00:00
ValueRaider
23e8423b8b Merge pull request #1147 from fredrik-corneliusson/request_optimization
Request optimization
2022-11-08 14:44:55 +00:00
Fredrik Corneliusson
c7cf4378f6 Lowered lru_cache size and made cache_info and cache_clear work on lru_cached methods. 2022-11-08 01:36:28 +01:00
Fredrik Corneliusson
5bfbec5df0 Decreased default cache_maxsize for lru_cache after some investigation of memory usage. Also fixed warning about wrong type used for dataframe index. 2022-11-07 10:29:42 +01:00
Fredrik Corneliusson
a775669ac5 Tried to clean up the temp folder creation in test. 2022-11-07 00:00:55 +01:00
Fredrik Corneliusson
f96dfc25c2 Merge branch 'dev' into request_optimization
# Conflicts:
#	tests/ticker.py
#	yfinance/base.py
2022-11-06 23:31:14 +01:00
fredrik-corneliusson
f6c311815d Merge branch 'ranaroussi:main' into request_optimization 2022-11-06 22:47:57 +01:00
Fredrik Corneliusson
112fd5cf64 Added more tests for Ticker and missing dependencies. 2022-11-06 20:49:36 +01:00
Fredrik Corneliusson
2be718700f Fixed regression bug with balance_sheet and added test for it. 2022-11-06 20:16:10 +01:00
ValueRaider
080d33f597 Fix typo in #1140 2022-11-06 19:00:28 +00:00
ValueRaider
c248b422da Merge pull request #1140 from ranaroussi/fix/bad-ticker-handling
Improve bad ticker handling ; Remove redundant get_earnings_history()
2022-11-06 18:47:11 +00:00
ValueRaider
b050692ee4 Improve bad ticker handling ; Remove redundant get_earnings_history() 2022-11-06 18:30:05 +00:00
Fredrik Corneliusson
2fed55a0d1 Improved TestTickerHolders test. 2022-11-06 19:14:51 +01:00
Fredrik Corneliusson
438f512f47 Cleaned up .gitignore 2022-11-06 17:01:09 +01:00
Fredrik Corneliusson
157b45269d Fixed regression in PR and cleaned up .gitignore 2022-11-06 16:59:06 +01:00
ValueRaider
9b169e60fb Merge pull request #1143 from ranaroussi/fix/dst-bugfix
Fix the fixes for Yahoo data issues (DST, weekly-2-rows) + tests
2022-11-06 13:48:53 +00:00
ValueRaider
1b439c4af6 Fix the fixes for Yahoo data issues (DST, weekly-2-rows) + tests 2022-11-06 13:47:34 +00:00
Fredrik Corneliusson
2cc3cbb1e8 Removed extra requests logging used for debugging. 2022-11-06 14:06:39 +01:00
Fredrik Corneliusson
743f3acb87 Removed unused get_html method. 2022-11-06 13:55:44 +01:00
Fredrik Corneliusson
9f9f7b00d8 Revert to require a pandas version that supports 3.6.1 2022-11-06 13:50:21 +01:00
Fredrik Corneliusson
07e19f187a Dropped Python versions before 3.6 from package support metadata 2022-11-06 13:34:58 +01:00
ValueRaider
45169d9ff4 Merge pull request #1144 from fredrik-corneliusson/dev
Fixed some of the formatting errors reported by PyCharm as well as simplified some code constructs.
2022-11-06 12:27:10 +00:00
Fredrik Corneliusson
05520ee108 Have one place to retrieve data in order to ease caching and speed up operations and reduce code duplication. Needs Python 3.6 2022-11-06 13:26:52 +01:00
Fredrik Corneliusson
e1dec42950 Fix regression in PR #1144 2022-11-06 13:23:44 +01:00
Fredrik Corneliusson
369cbc41e5 Merge remote-tracking branch 'origin/dev' into dev
# Conflicts:
#	yfinance/base.py
2022-11-05 13:46:41 +01:00
ValueRaider
4d4c5c1819 Merge pull request #1138 from ranaroussi/patch/peg-ratio-trailing
Move get 'trailingPegRatio' into _get_info(), simplify & optimise
2022-11-02 15:19:43 +00:00
ValueRaider
028334de92 Merge pull request #1058 from PlanetNamekTech/patch-1
Update README.md with new notation
2022-11-02 15:16:55 +00:00
ValueRaider
2b1d5c848c Move get 'trailingPegRatio' into _get_info(), simplify & optimise 2022-10-31 23:51:40 +00:00
Fredrik Corneliusson
fe5a9d70e5 Removed unnecessary escaping in regexp. Formatted code and updated if statements to make sure variables used always is defined. 2022-10-29 16:43:45 +02:00
Fredrik Corneliusson
e89fe6357b Simplified the code and changed **kwargs to normal keyword arguments. 2022-10-29 13:32:32 +02:00
ValueRaider
bcd6e5b11d Merge pull request #1128 from ranaroussi/fix/financials-data
Fix financials tables
2022-10-28 14:30:41 +01:00
ValueRaider
e83cc74800 Merge branch 'dev' into fix/financials-data 2022-10-28 14:26:07 +01:00
ValueRaider
9e529f3c8f Revert version bump 2022-10-28 14:18:13 +01:00
ValueRaider
e29df56253 Financials - reorder rows to match website, disable MultiIndex 2022-10-28 14:16:54 +01:00
Fredrik Corneliusson
f6a0979916 Simplified the code and changed **kwargs to normal keyword arguments. 2022-10-28 02:19:59 +02:00
ValueRaider
e3d2c5d6d7 Merge pull request #1064 from Jossan84/main
Bugfix: Get logo url when no website exists
2022-10-27 22:29:12 +01:00
Fredrik Corneliusson
a836f24144 Fixed some of the formatting errors reported by PyCharm IDE 2022-10-27 00:32:58 +02:00
ValueRaider
fb5c67b3bd Bump version to 0.2.0rc1 - big update 2022-10-26 22:39:41 +01:00
ValueRaider
3f33aa0377 Merge pull request #1119 from ranaroussi/dev
Improve error handling
2022-10-26 16:23:59 +01:00
ValueRaider
ecdc36ab8e Merge pull request #1118 from fredrik-corneliusson/dev
Better handling of error from yahoo API, added missing pytz dependency and fixed if statement syntax warnings
2022-10-25 21:47:43 +01:00
Fredrik Corneliusson
fbc5de153a Handle error from yahoo api 2022-10-25 21:52:09 +02:00
Fredrik Corneliusson
e4a228b830 Some fixes and better debug if failing to fetch timezone from ticker. 2022-10-25 21:36:42 +02:00
Fredrik Corneliusson
3cee66dea7 Some fixes and better debug if failing to fetch timezone from ticker. 2022-10-25 21:22:45 +02:00
ValueRaider
bec5b38189 Merge pull request #1117 from ranaroussi/dev
Merge all dev updates into main
2022-10-25 18:13:13 +01:00
ValueRaider
f5973b2c89 Merge branch 'main' into dev 2022-10-25 17:49:02 +01:00
ValueRaider
edb911b913 Pre-emptive ambiguous DST fix 2022-10-25 17:42:44 +01:00
ValueRaider
6117b0a042 Fix syntax error 2022-10-25 16:56:32 +01:00
ValueRaider
5cb5484a9a Fix tests.ticker to use new cache API 2022-10-25 14:16:14 +01:00
ValueRaider
4e33ddf615 Merge pull request #1113 from fredrik-corneliusson/dev
Fix cache error on read only system #1108
2022-10-25 14:14:08 +01:00
ValueRaider
6d87f3d689 Fix PR merge 2022-10-25 14:10:23 +01:00
ValueRaider
b30b97fa36 Merge pull request #1116 from ranaroussi/fix/outlier-repair-bugfixes
Fix price repair ; Improve repair test
2022-10-25 14:05:20 +01:00
ValueRaider
6253e1d8a0 Merge pull request #1112 from ranaroussi/fix/get-tz-performance
Improve performance of fetching Ticker timezone
2022-10-25 14:03:04 +01:00
ValueRaider
2dce6a705c Remove debug code 2022-10-25 14:01:44 +01:00
ValueRaider
df11fcdb37 Improve Ticker._fetch_ticker_tz() ; Change timeout default to 10 2022-10-25 13:59:51 +01:00
fredrik-corneliusson
567e2cf0d3 Merge branch 'ranaroussi:dev' into dev 2022-10-25 01:00:47 +02:00
Fredrik Corneliusson
3d6e88857b Merge remote-tracking branch 'origin/dev' into dev 2022-10-25 01:00:13 +02:00
Fredrik Corneliusson
59af19d84c Fix cache error on read only system #1108 2022-10-25 00:59:05 +02:00
ValueRaider
e07191b627 Fix price repair ; Improve repair test 2022-10-24 23:55:16 +01:00
ValueRaider
2623ba967d Simplify Ticker._fetch_ticker_tz() - 2 2022-10-24 13:46:39 +01:00
ValueRaider
fe1c705e24 Simplify Ticker._fetch_ticker_tz() 2022-10-24 13:45:25 +01:00
ValueRaider
9315f7b61d Add Ticker._fetch_ticker_tz() for faster tz fetch 2022-10-24 13:34:57 +01:00
Ran Aroussi
c49cf626bb Update bug_report.md 2022-10-24 11:37:15 +01:00
Ran Aroussi
fa6f3fc537 Update bug_report.md 2022-10-24 11:37:03 +01:00
ValueRaider
f76c788881 Remove debug print 2022-10-24 11:21:56 +01:00
ValueRaider
561f56c9f9 Merge pull request #1110 from ranaroussi/feature/outlier-repair
Feature - repair 100x price errors
2022-10-24 00:16:25 +01:00
ValueRaider
cf795ea0c7 Merge pull request #1109 from fredrik-corneliusson/dev
Fix for #1076
2022-10-24 00:03:40 +01:00
ValueRaider
643536b53b Fix '_fix_unit_mixups()' when data missing split-adjustment 2022-10-23 23:46:33 +01:00
fredrik-corneliusson
ae8a5ff996 Merge branch 'ranaroussi:dev' into dev 2022-10-23 23:12:21 +02:00
Fredrik Corneliusson
d01d378c8d Small cleanup to ease finding bug #1076. Begun by getting rid of multiple calls to self.info (get_info). 2022-10-23 22:37:07 +02:00
ValueRaider
34dfe944d9 Bump version to 0.1.81 2022-10-23 19:54:28 +01:00
ValueRaider
9619839bf5 Merge pull request #1108 from ranaroussi/hotfix/cache-on-read-only-system
Fix cache error on read only system
2022-10-23 19:52:41 +01:00
ValueRaider
90e00a71ca Fix missing 'return' 2022-10-23 19:51:09 +01:00
ValueRaider
f525ee2f5e Add README section on tz-cache ; Add set_tz_cache_location() 2022-10-23 19:47:22 +01:00
ValueRaider
ef12c8b600 Catch read-only exceptions during cache write 2022-10-23 19:29:54 +01:00
ValueRaider
9e0152aae4 Merge pull request #1105 from fredrik-corneliusson/dev
Fix and improve timezone cache concurrency
2022-10-23 16:43:53 +01:00
Fredrik Corneliusson
6c21c1994e Fix bug, create cache directory if it does not exists. 2022-10-23 15:27:41 +02:00
Fredrik Corneliusson
d24a25f579 Add missing typehint 2022-10-23 13:59:48 +02:00
Fredrik Corneliusson
422a50672d Lazy init of cache db and added migration of data from old CSV cache. 2022-10-23 13:43:40 +02:00
ValueRaider
6e09410c7d Improve repair feedback msg 2022-10-23 00:03:23 +01:00
ValueRaider
3c51687351 Add arg history(repair=False) to fix $/cents £/p mixups 2022-10-22 23:58:20 +01:00
Fredrik Corneliusson
783df54978 Bugfix, do not set tz in cache if it is None, just delete it. 2022-10-22 23:56:50 +02:00
Fredrik Corneliusson
c76bf0128f Improve timezone cache to make it more reliable when using threads by using SQLLite. 2022-10-22 23:30:48 +02:00
ValueRaider
33f57ac002 Merge pull request #1104 from ranaroussi/feature/improve-err-msgs
Improve error message handling
2022-10-22 16:30:47 +01:00
ValueRaider
42e6d0894e Bump version to 0.1.80 2022-10-22 13:25:59 +01:00
ValueRaider
de1c3c091b Merge pull request #1103 from ranaroussi/hotfix/download-timezones-patch
Fix download(ignore_tz=True) for single ticker
2022-10-22 13:15:52 +01:00
ValueRaider
c6c0fa3347 Fix download(ignore_tz=True) for single ticker 2022-10-22 13:14:35 +01:00
ValueRaider
c0e1536179 Improve error message handling
Add error check for 'period' ; simplify err-msg handling ; new arg 'raise_errors' to control print-vs-Exception
2022-10-21 23:36:37 +01:00
ValueRaider
303e0ea655 Merge pull request #1102 from ranaroussi/fix/price-tz-and-events
Various fixes to price data
2022-10-21 22:19:11 +01:00
ValueRaider
40424b71a6 Fix test 'test_intraDayWithEvents' 2022-10-21 17:26:15 +01:00
ValueRaider
b018f917a9 Port in: 'Fix when Yahoo returns price=NaNs on dividend day' 2022-10-21 17:21:19 +01:00
ValueRaider
28e50946ca Fix Ticker.dividends property 2022-10-21 15:44:36 +01:00
ValueRaider
841b485b1d Drop out-of-date-range events 2022-10-21 15:37:51 +01:00
ValueRaider
75c823a72c Merge pull request #1101 from ranaroussi/hotfix/tz-dst-ambiguous
Fix tz-localize when DST-ambiguous
2022-10-21 15:29:52 +01:00
ValueRaider
e842a9d657 Event-merge fixes: intra-day, weely, lost tz, 'test_intraDayWithEvents' 2022-10-21 15:26:59 +01:00
ValueRaider
0f14728591 Add test 'test_tz_dst_ambiguous' 2022-10-21 15:26:45 +01:00
ValueRaider
69dfe325ae Add tz to daily price data 2022-10-21 12:54:48 +01:00
ValueRaider
f1ad8f0061 Fix tz-localize when DST-ambiguous 2022-10-21 12:43:50 +01:00
ValueRaider
f20aa9a875 Merge pull request #1099 from ranaroussi/feature/improve-tz-cache
Improve timezone cache
2022-10-21 10:31:01 +01:00
ValueRaider
5707c1aa65 Merge branch 'fix/download-timezones' into dev 2022-10-21 10:16:27 +01:00
ValueRaider
053e0b9abb Port in @git-shogg fix, & fix typos 2022-10-20 22:24:24 +01:00
ValueRaider
730afda4a7 Fix financials placeholders 2022-10-20 22:19:08 +01:00
ValueRaider
1e7f4a9a91 Strengthen tz-cache against bad/corrupt values - more 2022-10-20 22:09:37 +01:00
ValueRaider
37c36549e4 Add mutex to tz-cache update 2022-10-20 22:01:08 +01:00
ValueRaider
bda339b170 Strengthen tz-cache against bad/corrupt values 2022-10-20 21:59:20 +01:00
ValueRaider
f5995161ed Optimise TZ cache indexing 2022-10-20 21:54:58 +01:00
ValueRaider
b27cc0cf40 Update to 0.1.79 2022-10-18 20:07:40 +01:00
ValueRaider
1d7f8139d6 Fix when Yahoo returns price=NaNs on dividend day 2022-10-18 20:04:08 +01:00
ValueRaider
01ef1bb813 Update to 0.1.78 2022-10-18 12:53:22 +01:00
ValueRaider
1db6be75b8 Merge pull request #1093 from ranaroussi/fix/download-timezones
Add 'ignore_tz' arg to download()
2022-10-18 12:36:00 +01:00
ValueRaider
7902ec8667 Fix empty-df detection and date ordering 2022-10-18 12:31:51 +01:00
ValueRaider
ff42a3ac87 Add 'ignore_tz' arg to download() 2022-10-18 12:22:43 +01:00
ValueRaider
6e96a1a8e6 Refactor properly ; Rename some new properties 2022-10-17 16:40:12 +01:00
ValueRaider
68b8671cea Merge pull request #776 from git-shogg/main
Enhanced the detail of the annual financial statements and added ability to check the "Analysis" url.
2022-10-17 12:59:51 +01:00
Stephen Hogg
3b8114c135 Functions to minimize get_fundamentals. _DEV tests removed. 2022-10-17 21:02:58 +10:00
Stephen Hogg
d65391b798 Merged (refactored). Quarterlies updates. Multi-Index Inlcluded. 2022-10-16 17:34:23 +10:00
Stephen Hogg
6c4da51519 Remediated missing annual table line items flagged by @ValueRaider. 2022-10-15 11:22:39 +10:00
ValueRaider
4734e92090 Merge pull request #1070 from ranaroussi/fix/weekly-prices
Fix weekly/monthly prices across 2 rows
2022-10-14 23:18:59 +01:00
ValueRaider
5fdf2463e9 Merge branch 'dev' into fix/weekly-prices 2022-10-14 23:18:15 +01:00
ValueRaider
c679551faa Add unittest for duplication fix 2022-10-14 23:15:13 +01:00
ValueRaider
fdf52ac360 Merge pull request #1086 from ranaroussi/fix/events-merge
Fix merging pre-market events with min/hour prices
2022-10-14 14:08:35 +01:00
ValueRaider
94ad0bd955 Fix merging pre-market events with min/hour prices 2022-10-12 22:41:10 +01:00
ValueRaider
51c0ea0050 Enhance recent unittest 2022-10-10 15:37:55 +01:00
ValueRaider
3401d4dbe7 Merge pull request #1069 from ranaroussi/fix/events-merge
Fix merging of dividends/splits with prices
2022-10-10 14:01:31 +01:00
ValueRaider
a724585552 Tidy syntax 2022-10-10 14:00:10 +01:00
ValueRaider
1c85433cc0 Add unittest for div/splits merging 2022-10-10 13:58:17 +01:00
ValueRaider
34e1b2f157 Add new time-series functions and compare against new scraping 2022-10-09 17:20:07 +01:00
Value Raider
c80bfc0417 Manually merge pull request #776 - Fix & enhance annual financials 2022-10-08 20:31:42 +01:00
ValueRaider
51f2c7301d Bump version again to 0.1.77 to skip bad tag 2022-10-07 22:04:16 +01:00
ValueRaider
632a16670a Bump version to 0.1.76 2022-10-07 21:55:15 +01:00
ValueRaider
fea0dca6f4 Merge pull request #1078 from ranaroussi/fix/info-access-when-unlisted
Fix/info access when unlisted
2022-10-07 21:44:44 +01:00
ValueRaider
c7e95152a0 Tidy code 2022-10-07 17:23:59 +01:00
ValueRaider
a52e972d04 Pretty error check for timezone retrieval 2022-10-07 17:20:58 +01:00
Ran Aroussi
a197d9f78e updated changelog 2022-10-04 12:09:19 +01:00
Ran Aroussi
dbb9bbfbf3 Updated to 0.1.75 2022-10-04 12:01:30 +01:00
ValueRaider
5c0b2bbaa3 Fix weekly/monthly prices across 2 rows 2022-10-02 18:26:05 +01:00
ValueRaider
7d45a6709a Fix merging of dividends/splits with prices 2022-10-02 18:20:11 +01:00
ValueRaider
a7b053addd Merge pull request #1067 from ranaroussi/fix/deps
Add new dep 'appdirs' for recent tz-fixes PR
2022-10-01 13:52:10 +01:00
ValueRaider
e8ca256c10 Add new dep 'appdirs' for recent tz-fixes PR 2022-10-01 13:49:02 +01:00
ValueRaider
f651dd1e93 Merge pull request #1048 from yfinance-fork-team/fix/timezone
Fix timezone & datetime handling
2022-09-21 16:53:29 +01:00
ValueRaider
f40cf0aae1 Merge branch 'main' into fix/timezone 2022-09-20 23:28:17 +01:00
ValueRaider
200f57c458 Merge pull request #1033 from yfinance-fork-team/fix/yahoo-appending-latest-price
Bugfix: Relocate out-of-range check to before 15m->30m conversion
2022-09-20 20:24:13 +01:00
ValueRaider
e5d45eaa85 Merge pull request #1032 from yfinance-fork-team/feature/keep-na
Add 'keepna' argument
2022-09-20 14:17:34 +01:00
ValueRaider
42b77a9b54 Merge pull request #1042 from yfinance-fork-team/feature/init-perf-boost
Ticker.init() perf boost
2022-09-20 14:15:50 +01:00
Jose Manuel
42e5751705 Bugfix: Get logo url when no website exists 2022-09-19 13:54:56 +02:00
PlanetNamekTech
2ff2c57dcf Update README.md with new notation
Multiple ticker objects section doesn't seem to work with dot notation when accessing ticker.
2022-09-09 18:38:24 -07:00
ValueRaider
bca005a2c0 Move user dt parsing to utils.py 2022-09-04 17:45:37 +01:00
ValueRaider
ca891bb187 Restore index to DatetimeIndex ; remove tz arg ; refactor for clean merge 2022-09-04 16:09:55 +01:00
Value Raider
0939ff3c78 Support user providing epoch ints 2022-08-15 16:04:46 +01:00
Value Raider
6f5c5635be Preemptive bugfix 2022-07-28 12:30:13 +01:00
Value Raider
809622e426 Ticker init does unnecessary work - move it out 2022-07-28 12:25:43 +01:00
Value Raider
eec1f3dbad Fix when Yahoo messes up DST 2022-07-27 21:54:12 +01:00
Value Raider
1de789ad72 Fix timestamp->dt 2022-07-15 00:00:08 +01:00
Value Raider
cd68ff68c6 Adjust prices-after-end-dt fix from > to >= 2022-07-14 23:45:18 +01:00
Value Raider
9673970f45 Relocate out-of-range check to before 15m->30m interpolation 2022-07-14 23:04:41 +01:00
Value Raider
6ea69a70ac Add 'keepna' argument 2022-07-14 14:41:24 +01:00
Value Raider
c723a5ab44 Preemptive perf. boost 2022-07-14 01:03:24 +01:00
Value Raider
50741d1409 Add tz to daily/weekly - bugfix 2022-07-12 23:04:04 +01:00
Value Raider
69d0dcd62b Add tz to daily/weekly 2022-07-12 22:54:01 +01:00
Value Raider
5c9348f255 end time should default=00:00 not end-of-day - fix comment 2022-07-12 21:30:29 +01:00
Value Raider
a472546e7b end time should default=00:00 not end-of-day 2022-07-12 21:30:29 +01:00
Value Raider
c914f1f183 Fix user-supplied TZ ; reduce Git diff 2022-07-12 21:30:29 +01:00
Value Raider
92c82342fe Fix PYTZ misuse 2022-07-12 21:30:29 +01:00
Value Raider
7ae08b04f3 Fix setting end dt to midnight 2022-07-12 21:30:29 +01:00
Value Raider
4b50f1e81c Perf boost: store ticker timezone in user file cache 2022-07-12 21:30:29 +01:00
Value Raider
1ed58be749 Perf boost: separate info fetch from financials, to get tz fast 2022-07-12 21:30:28 +01:00
Value Raider
375b4f9376 Fix error when adding Dividends/Splits to df 2022-07-12 21:27:58 +01:00
Value Raider
b6b4426ca9 User-provided 'tz' should 'convert' not 'replace' UTC 2022-07-12 21:27:58 +01:00
Value Raider
149ebe46db Remove debugging print stmt 2022-07-12 21:27:58 +01:00
Value Raider
d80b27cfde Fix Yahoo returning tz in data 2022-07-12 21:27:58 +01:00
Value Raider
36e277317b Fix date->datetime conversion 2022-07-12 21:27:58 +01:00
Value Raider
0e1ea4d2c6 Replace zoneinfo with pytz (installed by pandas) 2022-07-12 21:27:58 +01:00
Value Raider
2d96c383ef Set start/end timezone to exchange if None 2022-07-12 21:27:57 +01:00
Ran Aroussi
ec6279736b Fixed bug introduced in 0.1.73 2022-07-11 23:20:47 +01:00
Ran Aroussi
5d942d9668 Update CHANGELOG.rst 2022-07-11 12:16:00 +01:00
Ran Aroussi
5782cb59fd Update version.py 2022-07-11 12:15:28 +01:00
Ran Aroussi
4c4861a8f1 Merge pull request #1000 from giorgossideris/shares_outstanding_none_values_bug_fix
Handle case that the API returns no data for shares of a specific year (#999)
2022-07-11 12:14:51 +01:00
Ran Aroussi
4d221ca70e Merge pull request #1009 from AndKraev/fix_724
rename incorrect yahoo key treasuryStock
2022-07-11 12:14:31 +01:00
Ran Aroussi
1a8d045baf Merge pull request #1023 from Ckend/main
bugfix: remove useless arg, otherwise affect the proxy arg.
2022-07-11 12:13:44 +01:00
Ran Aroussi
67a55c35ce Merge pull request #1024 from devpg/patch-1
Update multi.py
2022-07-11 12:13:21 +01:00
Ran Aroussi
e547fe4e41 Merge pull request #1026 from ValueRaider/fix/yahoo-appending-latest-price
Bug fix - Yahoo API appends latest price regardless of end date, remove it
2022-07-11 12:13:04 +01:00
Value Raider
9d5366d707 Bug fix - Yahoo API appends latest price regardless of end date, remove it 2022-07-09 18:35:12 +01:00
André Neubauer
4b07d1dceb Update multi.py
Documentation is wrong here. 'show_errors' does print errors if True, and doesn't print errors if False
2022-07-09 12:01:53 +02:00
ckend
9440c1e1c1 bugfix: remove useless arg, otherwise affect the proxy arg. 2022-07-08 17:53:54 +08:00
Ran Aroussi
773d003a67 Update CHANGELOG.rst 2022-06-16 16:32:33 +01:00
Ran Aroussi
a2905a0f8d Update version.py 2022-06-16 16:32:12 +01:00
Ran Aroussi
1810455e15 bugfix 2022-06-16 16:31:56 +01:00
Ran Aroussi
9770f286b4 v# + clog 2022-06-16 16:24:41 +01:00
Ran Aroussi
80eb0ddafb Merge branch 'main' of github.com:ranaroussi/yfinance 2022-06-16 16:17:16 +01:00
Ran Aroussi
a9e9e8dcb3 added Tickers(…).news() 2022-06-16 16:17:12 +01:00
Ran Aroussi
69c0673345 Merge pull request #959 from Kartheyan/patch-1
Fixed max period when interval is 1 minute
2022-06-16 16:16:53 +01:00
Ran Aroussi
8077cabf44 Merge branch 'main' of github.com:ranaroussi/yfinance 2022-06-16 16:04:32 +01:00
Ran Aroussi
e35b98ef1d pep stuff 2022-06-16 16:04:28 +01:00
Ran Aroussi
dc40c6d093 Merge pull request #955 from alker0/issue-677
Support cache in `Tickers()`
2022-06-16 16:04:20 +01:00
Ran Aroussi
8572628ba6 Merge pull request #1017 from ValueRaider/feature/earnings-dates
Feature - fetch full earnings dates history
2022-06-16 16:00:41 +01:00
Ran Aroussi
f878ce5ea5 Merge branch 'main' into feature/earnings-dates 2022-06-16 16:00:32 +01:00
Ran Aroussi
bbf68daf3f Merge pull request #1014 from rickturner2001/feature-earnings-history
Added get_earnings_history to fetch earnings data
2022-06-16 15:51:54 +01:00
Value Raider
afbb5d81a4 Tidy utils change 2022-06-16 12:12:04 +01:00
Value Raider
670ec8e766 Return empty DF if YF missing earnings dates 2022-06-16 12:08:16 +01:00
Value Raider
8fa9438072 Fix EPS % to 0->1 2022-06-16 12:07:15 +01:00
Value Raider
8c56a0c3df Fix timezone handling 2022-06-15 21:17:33 +01:00
Value Raider
6e90fc17cb Fix handling of missing data 2022-06-15 19:57:24 +01:00
Value Raider
0849f68dd8 Clean&format earnings_dates table 2022-06-15 19:36:54 +01:00
Value Raider
77f3810cdd Add feature get_earnings_dates() 2022-06-15 17:42:22 +01:00
rickturner01
f3583b00e3 Added function to retreive earnings calendar 2022-06-11 22:23:15 -04:00
rickturner01
d0606cdb03 Added get_earnings_history to fetch earnings data 2022-06-11 02:50:42 -04:00
andKraev
76a9b09e8e rename incorrect yahoo key treasuryStock 2022-05-27 16:53:17 +03:00
giorgossideris
d757b8f25f Handle case that the API returns no data for shares of a specific year 2022-05-09 15:24:10 +03:00
Kartheyan
ab50edf24c Fixed max period when interval is 1 minute
When attempting to retrieve the maximum period of time (period="max") at 1 minute intervals, the previous default start period of 1900-01-01 (631159200) would result in an error from the API with description "1m data not available for startTime=1497744000 and endTime=*NOW*. Only 7 days worth of 1m granularity data are allowed to be fetched per request." . By setting the start time to subtracting end time minus 604800 (86400*7), it now returns 1 week of 1 minute interval data which is the maximum period for which the API supports at 1 minute intervals.
2022-02-15 15:27:37 +00:00
alker0
9b4bce7d06 Support cache in Tickers() 2022-02-09 14:51:11 +09:00
Stephen Hogg
3f23c067f9 Updated to ensure .info is brought in correctly. 2021-08-08 13:46:53 +10:00
Stephen Hogg
7a395c37e9 Updated base with some exceptions and utils. 2021-07-18 20:51:33 +10:00
Stephen Hogg
e7c55bbdec Updated to resolve Travis CI Build Fail. 2021-07-18 12:37:15 +10:00
Stephen Hogg
87dc9fb345 Potential issues flagged by CodeFactor updated. Believe that the warnings with regards to "statement seems to have no effect" is because the import on this python file is yfinance (master version 1.63). 2021-07-18 12:16:42 +10:00
Stephen Hogg
81a0a4e665 Updated to align with the yfinance upstream main. 2021-07-18 11:02:41 +10:00
Stephen Hogg
4774485477 Merge https://github.com/ranaroussi/yfinance into main 2021-07-18 10:56:45 +10:00
Stephen Hogg
c3da55f2e4 Finished updating all of the required updates. 2021-07-12 19:34:18 +10:00
Stephen Hogg
a1769e4fe1 Added self._income_statement, once happy this new dataframe should replace self._financials. Further work required to understand if there is the opportunity to also do this for balance sheet and cf statement. 2021-07-10 10:48:15 +10:00
Stephen Hogg
cb31036153 Updated to include analyst price target forecasts. 2021-07-08 17:11:10 +10:00
Stephen Hogg
da2672f338 Updated README to include additional functions. 2021-07-08 16:47:47 +10:00
Stephen Hogg
91f4891475 Added some functions to enable us to grab key details from the analysis section of yahoo finance: current_recommendations, revenue_forecasts and earnings_forecasts. 2021-07-07 20:33:35 +10:00
Stephen Hogg
883b7f0775 Updated the utils get_json function to standardize the return. This will enable us to see other store types from the base.py file. 2021-07-07 18:50:10 +10:00
58 changed files with 7522 additions and 863 deletions

View File

@@ -1,17 +0,0 @@
---
name: Bug report
about: Create a report to help us improve
title: ''
labels: ''
assignees: ''
---
*** READ BEFORE POSTING ***
Before posting an issue - please upgrade to the latest version and confirm the issue/bug is still there.
Upgrade using:
`$ pip install yfinance --upgrade --no-cache-dir`
Bug still there? Delete this content and submit your bug report here...

95
.github/ISSUE_TEMPLATE/bug_report.yaml vendored Normal file
View File

@@ -0,0 +1,95 @@
name: Bug report
description: Report a bug in our project
labels: ["bug"]
body:
- type: markdown
attributes:
value: |
# IMPORTANT - Read and follow these instructions carefully. Help us help you.
### Does issue already exist?
Use the search tool. Don't annoy everyone by duplicating existing Issues.
### Are you up-to-date?
Upgrade to the latest version and confirm the issue/bug is still there.
`$ pip install yfinance --upgrade --no-cache-dir`
Confirm by running:
`import yfinance as yf ; print(yf.__version__)`
and comparing against [PIP](https://pypi.org/project/yfinance/#history).
### Does Yahoo actually have the data?
Are you spelling symbol *exactly* same as Yahoo?
Then visit `finance.yahoo.com` and confirm they have the data you want. Maybe your symbol was delisted, or your expectations of `yfinance` are wrong.
### Are you spamming Yahoo?
Yahoo Finance free service has rate-limiting https://github.com/ranaroussi/yfinance/discussions/1513. Once limit hit, Yahoo can delay, block, or return bad data -> not a `yfinance` bug.
- type: markdown
attributes:
value: |
---
## Still think it's a bug?
Provide the following as best you can:
- type: textarea
id: summary
attributes:
label: "Describe bug"
validations:
required: true
- type: textarea
id: code
attributes:
label: "Simple code that reproduces your problem"
description: "Provide a snippet of code that we can copy-paste-run. Wrap code in Python Markdown code blocks for proper formatting (```` ```python ... ``` ````)."
validations:
required: true
- type: textarea
id: debug-log
attributes:
label: "Debug log"
description: "Run code with debug logging enabled and post the full output. Instructions: https://github.com/ranaroussi/yfinance/tree/main#logging"
validations:
required: true
- type: textarea
id: bad-data-proof
attributes:
label: "Bad data proof"
description: "If you think `yfinance` returning bad data, provide your proof here."
validations:
required: false
- type: input
id: version-yfinance
attributes:
label: "`yfinance` version"
validations:
required: true
- type: input
id: version-python
attributes:
label: "Python version"
validations:
required: false
- type: input
id: os
attributes:
label: "Operating system"
validations:
required: false

View File

@@ -13,9 +13,9 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v3
- name: Set up Python
uses: actions/setup-python@v2
uses: actions/setup-python@v4
with:
python-version: '3.x'
- name: Install dependencies

8
.gitignore vendored
View File

@@ -4,8 +4,16 @@ dist
yfinance.egg-info
*.pyc
.coverage
.idea/
.vscode/
build/
*.html
*.css
*.png
# Environments
.env
.venv
env/
venv/
ENV/

View File

@@ -1,6 +1,248 @@
Change Log
===========
0.2.31
------
- Fix TZ cache exception blocking import #1705 #1709
- Fix merging pre-market events with intraday prices #1703
0.2.30
------
- Fix OperationalError #1698
0.2.29
------
- Fix pandas warning when retrieving quotes. #1672
- Replace sqlite3 with peewee for 100% thread-safety #1675
- Fix merging events with intraday prices #1684
- Fix error when calling enable_debug_mode twice #1687
- Price repair fixes #1688
0.2.28
------
- Fix TypeError: 'FastInfo' object is not callable #1636
- Improve & fix price repair #1633 #1660
- option_chain() also return underlying data #1606
0.2.27
------
Bug fixes:
- fix merging 1d-prices with out-of-range divs/splits #1635
- fix multithread error 'tz already in cache' #1648
0.2.26
------
Proxy improvements
- bug fixes #1371
- security fix #1625
0.2.25
------
Fix single ISIN as ticker #1611
Fix 'Only 100 years allowed' error #1576
0.2.24
------
Fix info[] missing values #1603
0.2.23
------
Fix 'Unauthorized' error #1595
0.2.22
------
Fix unhandled 'sqlite3.DatabaseError' #1574
0.2.21
------
Fix financials tables #1568
Price repair update: fix Yahoo messing up dividend and split adjustments #1543
Fix logging behaviour #1562
Fix merge future div/split into prices #1567
0.2.20
------
Switch to `logging` module #1493 #1522 #1541
Price history:
- optimise #1514
- fixes #1523
- fix TZ-cache corruption #1528
0.2.18
------
Fix 'fast_info' error '_np not found' #1496
Fix bug in timezone cache #1498
0.2.17
------
Fix prices error with Pandas 2.0 #1488
0.2.16
------
Fix 'fast_info deprecated' msg appearing at Ticker() init
0.2.15
------
Restore missing Ticker.info keys #1480
0.2.14
------
Fix Ticker.info dict by fetching from API #1461
0.2.13
------
Price bug fixes:
- fetch big-interval with Capital Gains #1455
- merging dividends & splits with prices #1452
0.2.12
------
Disable annoying 'backup decrypt' msg
0.2.11
------
Fix history_metadata accesses for unusual symbols #1411
0.2.10
------
General
- allow using sqlite3 < 3.8.2 #1380
- add another backup decrypt option #1379
Prices
- restore original download() timezone handling #1385
- fix & improve price repair #1289 2a2928b 86d6acc
- drop intraday intervals if in post-market but prepost=False #1311
Info
- fast_info improvements:
- add camelCase keys, add dict functions values() & items() #1368
- fix fast_info["previousClose"] #1383
- catch TypeError Exception #1397
0.2.9
-----
- Fix fast_info bugs #1362
0.2.7
-----
- Fix Yahoo decryption, smarter this time #1353
- Rename basic_info -> fast_info #1354
0.2.6
-----
- Fix Ticker.basic_info lazy-loading #1342
0.2.5
-----
- Fix Yahoo data decryption again #1336
- New: Ticker.basic_info - faster Ticker.info #1317
0.2.4
-----
- Fix Yahoo data decryption #1297
- New feature: 'Ticker.get_shares_full()' #1301
- Improve caching of financials data #1284
- Restore download() original alignment behaviour #1283
- Fix the database lock error in multithread download #1276
0.2.3
-----
- Make financials API '_' use consistent
0.2.2
-----
- Restore 'financials' attribute (map to 'income_stmt')
0.2.1
-----
Release!
0.2.0rc5
--------
- Improve financials error handling #1243
- Fix '100x price' repair #1244
0.2.0rc4
--------
- Access to old financials tables via `get_income_stmt(legacy=True)`
- Optimise scraping financials & fundamentals, 2x faster
- Add 'capital gains' alongside dividends & splits for ETFs, and metadata available via `history_metadata`, plus a bunch of price fixes
For full list of changes see #1238
0.2.0rc2
--------
Financials
- fix financials tables to match website #1128 #1157
- lru_cache to optimise web requests #1147
Prices
- improve price repair #1148
- fix merging dividends/splits with day/week/monthly prices #1161
- fix the Yahoo DST fixes #1143
- improve bad/delisted ticker handling #1140
Misc
- fix 'trailingPegRatio' #1138
- improve error handling #1118
0.2.0rc1
--------
Jumping to 0.2 for this big update. 0.1.* will continue to receive bug-fixes
- timezone cache performance massively improved. Thanks @fredrik-corneliusson #1113 #1112 #1109 #1105 #1099
- price repair feature #1110
- fix merging of dividends/splits with prices #1069 #1086 #1102
- fix Yahoo returning latest price interval across 2 rows #1070
- optional: raise errors as exceptions: raise_errors=True #1104
- add proper unit tests #1069
0.1.81
------
- Fix unhandled tz-cache exception #1107
0.1.80
------
- Fix `download(ignore_tz=True)` for single ticker #1097
- Fix rare case of error "Cannot infer DST time" #1100
0.1.79
------
- Fix when Yahoo returns price=NaNs on dividend day
0.1.78
------
- Fix download() when different timezones #1085
0.1.77
------
- Fix user experience bug #1078
0.1.75
------
- Fixed datetime-related issues: #1048
- Add 'keepna' argument #1032
- Speedup Ticker() creation #1042
- Improve a bugfix #1033
0.1.74
------
- Fixed bug introduced in 0.1.73 (sorry :/)
0.1.73
------
- Merged several PR that fixed misc issues
0.1.72
------
- Misc bugfixs
0.1.71
------
- Added Tickers(…).news()
- Return empty DF if YF missing earnings dates
- Fix EPS % to 0->1
- Fix timezone handling
- Fix handling of missing data
- Clean&format earnings_dates table
- Add ``.get_earnings_dates()`` to retreive earnings calendar
- Added ``.get_earnings_history()`` to fetch earnings data
0.1.70
------
- Bug fixed - Closes #937

198
README.md
View File

@@ -48,58 +48,49 @@ Yahoo! finance API is intended for personal use only.**
The `Ticker` module, which allows you to access ticker data in a more Pythonic way:
Note: yahoo finance datetimes are received as UTC.
```python
import yfinance as yf
msft = yf.Ticker("MSFT")
# get stock info
# get all stock info
msft.info
# get historical market data
hist = msft.history(period="max")
hist = msft.history(period="1mo")
# show actions (dividends, splits)
# show meta information about the history (requires history() to be called first)
msft.history_metadata
# show actions (dividends, splits, capital gains)
msft.actions
# show dividends
msft.dividends
# show splits
msft.splits
msft.capital_gains # only for mutual funds & etfs
# show financials
msft.financials
msft.quarterly_financials
# show share count
msft.get_shares_full(start="2022-01-01", end=None)
# show major holders
msft.major_holders
# show institutional holders
msft.institutional_holders
# show balance sheet
# show financials:
# - income statement
msft.income_stmt
msft.quarterly_income_stmt
# - balance sheet
msft.balance_sheet
msft.quarterly_balance_sheet
# show cashflow
# - cash flow statement
msft.cashflow
msft.quarterly_cashflow
# see `Ticker.get_income_stmt()` for more options
# show earnings
msft.earnings
msft.quarterly_earnings
# show holders
msft.major_holders
msft.institutional_holders
msft.mutualfund_holders
# show sustainability
msft.sustainability
# show analysts recommendations
msft.recommendations
# show next event (earnings, etc)
msft.calendar
# Show future and historic earnings dates, returns at most next 4 quarters and last 8 quarters by default.
# Note: If more are needed use msft.get_earnings_dates(limit=XX) with increased limit argument.
msft.earnings_dates
# show ISIN code - *experimental*
# ISIN = International Securities Identification Number
@@ -127,12 +118,43 @@ msft.history(..., proxy="PROXY_SERVER")
msft.get_actions(proxy="PROXY_SERVER")
msft.get_dividends(proxy="PROXY_SERVER")
msft.get_splits(proxy="PROXY_SERVER")
msft.get_capital_gains(proxy="PROXY_SERVER")
msft.get_balance_sheet(proxy="PROXY_SERVER")
msft.get_cashflow(proxy="PROXY_SERVER")
msft.option_chain(..., proxy="PROXY_SERVER")
...
```
### Multiple tickers
To initialize multiple `Ticker` objects, use
```python
import yfinance as yf
tickers = yf.Tickers('msft aapl goog')
# access each ticker using (example)
tickers.tickers['MSFT'].info
tickers.tickers['AAPL'].history(period="1mo")
tickers.tickers['GOOG'].actions
```
To download price history into one table:
```python
import yfinance as yf
data = yf.download("SPY AAPL", period="1mo")
```
#### `yf.download()` and `Ticker.history()` have many options for configuring fetching and processing. [Review the Wiki](https://github.com/ranaroussi/yfinance/wiki) for more options and detail.
### Logging
`yfinance` now uses the `logging` module to handle messages, default behaviour is only print errors. If debugging, use `yf.enable_debug_mode()` to switch logging to debug with custom formatting.
### Smarter scraping
To use a custom `requests` session (for example to cache calls to the
API or customize the `User-agent` header), pass a `session=` argument to
the Ticker constructor.
@@ -141,69 +163,25 @@ the Ticker constructor.
import requests_cache
session = requests_cache.CachedSession('yfinance.cache')
session.headers['User-agent'] = 'my-program/1.0'
ticker = yf.Ticker('msft aapl goog', session=session)
ticker = yf.Ticker('msft', session=session)
# The scraped response will be stored in the cache
ticker.actions
```
To initialize multiple `Ticker` objects, use
Combine a `requests_cache` with rate-limiting to avoid triggering Yahoo's rate-limiter/blocker that can corrupt data.
```python
import yfinance as yf
from requests import Session
from requests_cache import CacheMixin, SQLiteCache
from requests_ratelimiter import LimiterMixin, MemoryQueueBucket
from pyrate_limiter import Duration, RequestRate, Limiter
class CachedLimiterSession(CacheMixin, LimiterMixin, Session):
pass
tickers = yf.Tickers('msft aapl goog')
# ^ returns a named tuple of Ticker objects
# access each ticker using (example)
tickers.tickers.MSFT.info
tickers.tickers.AAPL.history(period="1mo")
tickers.tickers.GOOG.actions
```
### Fetching data for multiple tickers
```python
import yfinance as yf
data = yf.download("SPY AAPL", start="2017-01-01", end="2017-04-30")
```
I've also added some options to make life easier :)
```python
data = yf.download( # or pdr.get_data_yahoo(...
# tickers list or string as well
tickers = "SPY AAPL MSFT",
# use "period" instead of start/end
# valid periods: 1d,5d,1mo,3mo,6mo,1y,2y,5y,10y,ytd,max
# (optional, default is '1mo')
period = "ytd",
# fetch data by interval (including intraday if period < 60 days)
# valid intervals: 1m,2m,5m,15m,30m,60m,90m,1h,1d,5d,1wk,1mo,3mo
# (optional, default is '1d')
interval = "1m",
# group by ticker (to access via data['SPY'])
# (optional, default is 'column')
group_by = 'ticker',
# adjust all OHLC automatically
# (optional, default is False)
auto_adjust = True,
# download pre/post regular market hours data
# (optional, default is False)
prepost = True,
# use threads for mass downloading? (True/False/Integer)
# (optional, default is True)
threads = True,
# proxy URL scheme use use when downloading?
# (optional, default is None)
proxy = None
)
session = CachedLimiterSession(
limiter=Limiter(RequestRate(2, Duration.SECOND*5)), # max 2 requests per 5 seconds
bucket_class=MemoryQueueBucket,
backend=SQLiteCache("yfinance.cache"),
)
```
### Managing Multi-Level Columns
@@ -221,9 +199,7 @@ yfinance?](https://stackoverflow.com/questions/63107801)
- How to download single or multiple tickers into a single
dataframe with single level column names and a ticker column
---
## `pandas_datareader` override
### `pandas_datareader` override
If your code uses `pandas_datareader` and you want to download data
faster, you can "hijack" `pandas_datareader.data.get_data_yahoo()`
@@ -240,6 +216,18 @@ yf.pdr_override() # <== that's all it takes :-)
data = pdr.get_data_yahoo("SPY", start="2017-01-01", end="2017-04-30")
```
### Timezone cache store
When fetching price data, all dates are localized to stock exchange timezone.
But timezone retrieval is relatively slow, so yfinance attemps to cache them
in your users cache folder.
You can direct cache to use a different location with `set_tz_cache_location()`:
```python
import yfinance as yf
yf.set_tz_cache_location("custom/cache/location")
...
```
---
## Installation
@@ -250,23 +238,37 @@ Install `yfinance` using `pip`:
$ pip install yfinance --upgrade --no-cache-dir
```
Test new features by installing betas, provide feedback in [corresponding Discussion](https://github.com/ranaroussi/yfinance/discussions):
``` {.sourceCode .bash}
$ pip install yfinance --upgrade --no-cache-dir --pre
```
To install `yfinance` using `conda`, see
[this](https://anaconda.org/ranaroussi/yfinance).
### Requirements
- [Python](https://www.python.org) \>= 2.7, 3.4+
- [Pandas](https://github.com/pydata/pandas) (tested to work with
\>=0.23.1)
- [Numpy](http://www.numpy.org) \>= 1.11.1
- [requests](http://docs.python-requests.org/en/master/) \>= 2.14.2
- [lxml](https://pypi.org/project/lxml/) \>= 4.5.1
- [Pandas](https://github.com/pydata/pandas) \>= 1.3.0
- [Numpy](http://www.numpy.org) \>= 1.16.5
- [requests](http://docs.python-requests.org/en/master) \>= 2.31
- [lxml](https://pypi.org/project/lxml) \>= 4.9.1
- [appdirs](https://pypi.org/project/appdirs) \>= 1.4.4
- [pytz](https://pypi.org/project/pytz) \>=2022.5
- [frozendict](https://pypi.org/project/frozendict) \>= 2.3.4
- [beautifulsoup4](https://pypi.org/project/beautifulsoup4) \>= 4.11.1
- [html5lib](https://pypi.org/project/html5lib) \>= 1.1
- [peewee](https://pypi.org/project/peewee) \>= 3.16.2
### Optional (if you want to use `pandas_datareader`)
#### Optional (if you want to use `pandas_datareader`)
- [pandas\_datareader](https://github.com/pydata/pandas-datareader)
\>= 0.4.0
## Developers: want to contribute?
`yfinance` relies on community to investigate bugs and contribute code. Developer guide: https://github.com/ranaroussi/yfinance/discussions/1084
---
### Legal Stuff

View File

@@ -1,5 +1,5 @@
{% set name = "yfinance" %}
{% set version = "0.1.58" %}
{% set version = "0.2.31" %}
package:
name: "{{ name|lower }}"
@@ -16,20 +16,34 @@ build:
requirements:
host:
- pandas >=0.24.0
- pandas >=1.3.0
- numpy >=1.16.5
- requests >=2.21
- requests >=2.31
- multitasking >=0.0.7
- lxml >=4.5.1
- lxml >=4.9.1
- appdirs >=1.4.4
- pytz >=2022.5
- frozendict >=2.3.4
- beautifulsoup4 >=4.11.1
- html5lib >=1.1
- peewee >=3.16.2
# - pycryptodome >=3.6.6
- pip
- python
run:
- pandas >=0.24.0
- pandas >=1.3.0
- numpy >=1.16.5
- requests >=2.21
- requests >=2.31
- multitasking >=0.0.7
- lxml >=4.5.1
- lxml >=4.9.1
- appdirs >=1.4.4
- pytz >=2022.5
- frozendict >=2.3.4
- beautifulsoup4 >=4.11.1
- html5lib >=1.1
- peewee >=3.16.2
# - pycryptodome >=3.6.6
- python
test:

View File

@@ -1,5 +1,11 @@
pandas>=0.24.0
pandas>=1.3.0
numpy>=1.16.5
requests>=2.26
requests>=2.31
multitasking>=0.0.7
lxml>=4.5.1
lxml>=4.9.1
appdirs>=1.4.4
pytz>=2022.5
frozendict>=2.3.4
beautifulsoup4>=4.11.1
html5lib>=1.1
peewee>=3.16.2

View File

@@ -38,8 +38,8 @@ setup(
classifiers=[
'License :: OSI Approved :: Apache Software License',
# 'Development Status :: 3 - Alpha',
# 'Development Status :: 4 - Beta',
'Development Status :: 5 - Production/Stable',
'Development Status :: 4 - Beta',
# 'Development Status :: 5 - Production/Stable',
'Operating System :: OS Independent',
@@ -50,20 +50,21 @@ setup(
'Topic :: Software Development :: Libraries',
'Topic :: Software Development :: Libraries :: Python Modules',
'Programming Language :: Python :: 2.7',
'Programming Language :: Python :: 3.4',
'Programming Language :: Python :: 3.5',
# 'Programming Language :: Python :: 3.6',
'Programming Language :: Python :: 3.6',
'Programming Language :: Python :: 3.7',
'Programming Language :: Python :: 3.8',
'Programming Language :: Python :: 3.9',
'Programming Language :: Python :: 3.10',
],
platforms=['any'],
keywords='pandas, yahoo finance, pandas datareader',
packages=find_packages(exclude=['contrib', 'docs', 'tests', 'examples']),
install_requires=['pandas>=0.24.0', 'numpy>=1.15',
'requests>=2.26', 'multitasking>=0.0.7',
'lxml>=4.5.1'],
install_requires=['pandas>=1.3.0', 'numpy>=1.16.5',
'requests>=2.31', 'multitasking>=0.0.7',
'lxml>=4.9.1', 'appdirs>=1.4.4', 'pytz>=2022.5',
'frozendict>=2.3.4', 'peewee>=3.16.2',
'beautifulsoup4>=4.11.1', 'html5lib>=1.1'],
# Note: Pandas.read_html() needs html5lib & beautifulsoup4
entry_points={
'console_scripts': [
'sample=sample:main',

View File

@@ -1,64 +0,0 @@
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
#
# yfinance - market data downloader
# https://github.com/ranaroussi/yfinance
"""
Sanity check for most common library uses all working
- Stock: Microsoft
- ETF: Russell 2000 Growth
- Mutual fund: Vanguard 500 Index fund
- Index: S&P500
- Currency BTC-USD
"""
import yfinance as yf
import unittest
symbols = ['MSFT', 'IWO', 'VFINX', '^GSPC', 'BTC-USD']
tickers = [yf.Ticker(symbol) for symbol in symbols]
class TestTicker(unittest.TestCase):
def test_info_history(self):
for ticker in tickers:
# always should have info and history for valid symbols
assert(ticker.info is not None and ticker.info != {})
history = ticker.history(period="max")
assert(history.empty is False and history is not None)
def test_attributes(self):
for ticker in tickers:
ticker.isin
ticker.major_holders
ticker.institutional_holders
ticker.mutualfund_holders
ticker.dividends
ticker.splits
ticker.actions
ticker.info
ticker.calendar
ticker.recommendations
ticker.earnings
ticker.quarterly_earnings
ticker.financials
ticker.quarterly_financials
ticker.balance_sheet
ticker.quarterly_balance_sheet
ticker.cashflow
ticker.quarterly_cashflow
ticker.sustainability
ticker.options
ticker.news
ticker.shares
def test_holders(self):
for ticker in tickers:
assert(ticker.info is not None and ticker.info != {})
assert(ticker.major_holders is not None)
assert(ticker.institutional_holders is not None)
if __name__ == '__main__':
unittest.main()

1
tests/__init__.py Normal file
View File

@@ -0,0 +1 @@
#!/usr/bin/env python

47
tests/context.py Normal file
View File

@@ -0,0 +1,47 @@
# -*- coding: utf-8 -*-
import appdirs as _ad
import datetime as _dt
import sys
import os
_parent_dp = os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))
_src_dp = _parent_dp
sys.path.insert(0, _src_dp)
import yfinance
# Optional: see the exact requests that are made during tests:
# import logging
# logging.basicConfig(level=logging.DEBUG)
# Use adjacent cache folder for testing, delete if already exists and older than today
testing_cache_dirpath = os.path.join(_ad.user_cache_dir(), "py-yfinance-testing")
yfinance.set_tz_cache_location(testing_cache_dirpath)
if os.path.isdir(testing_cache_dirpath):
mtime = _dt.datetime.fromtimestamp(os.path.getmtime(testing_cache_dirpath))
if mtime.date() < _dt.date.today():
import shutil
shutil.rmtree(testing_cache_dirpath)
# Setup a session to rate-limit and cache persistently:
from requests import Session
from requests_cache import CacheMixin, SQLiteCache
from requests_ratelimiter import LimiterMixin, MemoryQueueBucket
class CachedLimiterSession(CacheMixin, LimiterMixin, Session):
pass
from pyrate_limiter import Duration, RequestRate, Limiter
history_rate = RequestRate(1, Duration.SECOND*2)
limiter = Limiter(history_rate)
cache_fp = os.path.join(testing_cache_dirpath, "unittests-cache")
session_gbl = CachedLimiterSession(
limiter=limiter,
bucket_class=MemoryQueueBucket,
backend=SQLiteCache(cache_fp, expire_after=_dt.timedelta(hours=1)),
)
# Use this instead if only want rate-limiting:
# from requests_ratelimiter import LimiterSession
# session_gbl = LimiterSession(limiter=limiter)

View File

@@ -0,0 +1,23 @@
Date,Open,High,Low,Close,Adj Close,Volume,Dividends,Stock Splits
2023-04-14 00:00:00+09:00,4126,4130,4055,4129,4129,7459400,0,0
2023-04-13 00:00:00+09:00,4064,4099,4026,4081,4081,5160200,0,0
2023-04-12 00:00:00+09:00,3968,4084,3966,4064,4064,6372000,0,0
2023-04-11 00:00:00+09:00,3990,4019,3954,3960,3960,6476500,0,0
2023-04-10 00:00:00+09:00,3996,4009,3949,3964,3964,3485200,0,0
2023-04-07 00:00:00+09:00,3897,3975,3892,3953,3953,4554700,0,0
2023-04-06 00:00:00+09:00,4002,4004,3920,3942,3942,8615200,0,0
2023-04-05 00:00:00+09:00,4150,4150,4080,4088,4088,6063700,0,0
2023-04-04 00:00:00+09:00,4245,4245,4144,4155,4155,6780600,0,0
2023-04-03 00:00:00+09:00,4250,4259,4162,4182,4182,7076800,0,0
2023-03-31 00:00:00+09:00,4229,4299,4209,4275,4275,9608400,0,0
2023-03-30 00:00:00+09:00,4257,4268,4119,4161,4161,5535200,55,5
2023-03-29 00:00:00+09:00,4146,4211,4146,4206,4151,6514500,0,0
2023-03-28 00:00:00+09:00,4200,4207,4124,4142,4087.837109375,4505500,0,0
2023-03-27 00:00:00+09:00,4196,4204,4151,4192,4137.183203125,5959500,0,0
2023-03-24 00:00:00+09:00,4130,4187,4123,4177,4122.379296875,8961500,0,0
2023-03-23 00:00:00+09:00,4056,4106,4039,4086,4032.569140625,5480000,0,0
2023-03-22 00:00:00+09:00,4066,4128,4057,4122,4068.0984375,8741500,0,0
2023-03-20 00:00:00+09:00,4000,4027,3980,3980,3927.95546875,7006500,0,0
2023-03-17 00:00:00+09:00,4018,4055,4016,4031,3978.28828125,6961500,0,0
2023-03-16 00:00:00+09:00,3976,4045,3972,4035,3982.236328125,5019000,0,0
2023-03-15 00:00:00+09:00,4034,4050,4003,4041,3988.1578125,6122000,0,0
1 Date Open High Low Close Adj Close Volume Dividends Stock Splits
2 2023-04-14 00:00:00+09:00 4126 4130 4055 4129 4129 7459400 0 0
3 2023-04-13 00:00:00+09:00 4064 4099 4026 4081 4081 5160200 0 0
4 2023-04-12 00:00:00+09:00 3968 4084 3966 4064 4064 6372000 0 0
5 2023-04-11 00:00:00+09:00 3990 4019 3954 3960 3960 6476500 0 0
6 2023-04-10 00:00:00+09:00 3996 4009 3949 3964 3964 3485200 0 0
7 2023-04-07 00:00:00+09:00 3897 3975 3892 3953 3953 4554700 0 0
8 2023-04-06 00:00:00+09:00 4002 4004 3920 3942 3942 8615200 0 0
9 2023-04-05 00:00:00+09:00 4150 4150 4080 4088 4088 6063700 0 0
10 2023-04-04 00:00:00+09:00 4245 4245 4144 4155 4155 6780600 0 0
11 2023-04-03 00:00:00+09:00 4250 4259 4162 4182 4182 7076800 0 0
12 2023-03-31 00:00:00+09:00 4229 4299 4209 4275 4275 9608400 0 0
13 2023-03-30 00:00:00+09:00 4257 4268 4119 4161 4161 5535200 55 5
14 2023-03-29 00:00:00+09:00 4146 4211 4146 4206 4151 6514500 0 0
15 2023-03-28 00:00:00+09:00 4200 4207 4124 4142 4087.837109375 4505500 0 0
16 2023-03-27 00:00:00+09:00 4196 4204 4151 4192 4137.183203125 5959500 0 0
17 2023-03-24 00:00:00+09:00 4130 4187 4123 4177 4122.379296875 8961500 0 0
18 2023-03-23 00:00:00+09:00 4056 4106 4039 4086 4032.569140625 5480000 0 0
19 2023-03-22 00:00:00+09:00 4066 4128 4057 4122 4068.0984375 8741500 0 0
20 2023-03-20 00:00:00+09:00 4000 4027 3980 3980 3927.95546875 7006500 0 0
21 2023-03-17 00:00:00+09:00 4018 4055 4016 4031 3978.28828125 6961500 0 0
22 2023-03-16 00:00:00+09:00 3976 4045 3972 4035 3982.236328125 5019000 0 0
23 2023-03-15 00:00:00+09:00 4034 4050 4003 4041 3988.1578125 6122000 0 0

View File

@@ -0,0 +1,23 @@
Date,Open,High,Low,Close,Adj Close,Volume,Dividends,Stock Splits
2023-04-14 00:00:00+09:00,4126,4130,4055,4129,4129,7459400,0,0
2023-04-13 00:00:00+09:00,4064,4099,4026,4081,4081,5160200,0,0
2023-04-12 00:00:00+09:00,3968,4084,3966,4064,4064,6372000,0,0
2023-04-11 00:00:00+09:00,3990,4019,3954,3960,3960,6476500,0,0
2023-04-10 00:00:00+09:00,3996,4009,3949,3964,3964,3485200,0,0
2023-04-07 00:00:00+09:00,3897,3975,3892,3953,3953,4554700,0,0
2023-04-06 00:00:00+09:00,4002,4004,3920,3942,3942,8615200,0,0
2023-04-05 00:00:00+09:00,4150,4150,4080,4088,4088,6063700,0,0
2023-04-04 00:00:00+09:00,4245,4245,4144,4155,4155,6780600,0,0
2023-04-03 00:00:00+09:00,4250,4259,4162,4182,4182,7076800,0,0
2023-03-31 00:00:00+09:00,4229,4299,4209,4275,4275,9608400,0,0
2023-03-30 00:00:00+09:00,4257,4268,4119,4161,4161,5535200,55,5
2023-03-29 00:00:00+09:00,4146,4211,4146,4206,4151,6514500,0,0
2023-03-28 00:00:00+09:00,21000,21035,20620,20710,20439.185546875,901100,0,0
2023-03-27 00:00:00+09:00,20980,21020,20755,20960,20685.916015625,1191900,0,0
2023-03-24 00:00:00+09:00,20650,20935,20615,20885,20611.896484375,1792300,0,0
2023-03-23 00:00:00+09:00,20280,20530,20195,20430,20162.845703125,1096000,0,0
2023-03-22 00:00:00+09:00,20330,20640,20285,20610,20340.4921875,1748300,0,0
2023-03-20 00:00:00+09:00,20000,20135,19900,19900,19639.77734375,1401300,0,0
2023-03-17 00:00:00+09:00,20090,20275,20080,20155,19891.44140625,1392300,0,0
2023-03-16 00:00:00+09:00,19880,20225,19860,20175,19911.181640625,1003800,0,0
2023-03-15 00:00:00+09:00,20170,20250,20015,20205,19940.7890625,1224400,0,0
1 Date Open High Low Close Adj Close Volume Dividends Stock Splits
2 2023-04-14 00:00:00+09:00 4126 4130 4055 4129 4129 7459400 0 0
3 2023-04-13 00:00:00+09:00 4064 4099 4026 4081 4081 5160200 0 0
4 2023-04-12 00:00:00+09:00 3968 4084 3966 4064 4064 6372000 0 0
5 2023-04-11 00:00:00+09:00 3990 4019 3954 3960 3960 6476500 0 0
6 2023-04-10 00:00:00+09:00 3996 4009 3949 3964 3964 3485200 0 0
7 2023-04-07 00:00:00+09:00 3897 3975 3892 3953 3953 4554700 0 0
8 2023-04-06 00:00:00+09:00 4002 4004 3920 3942 3942 8615200 0 0
9 2023-04-05 00:00:00+09:00 4150 4150 4080 4088 4088 6063700 0 0
10 2023-04-04 00:00:00+09:00 4245 4245 4144 4155 4155 6780600 0 0
11 2023-04-03 00:00:00+09:00 4250 4259 4162 4182 4182 7076800 0 0
12 2023-03-31 00:00:00+09:00 4229 4299 4209 4275 4275 9608400 0 0
13 2023-03-30 00:00:00+09:00 4257 4268 4119 4161 4161 5535200 55 5
14 2023-03-29 00:00:00+09:00 4146 4211 4146 4206 4151 6514500 0 0
15 2023-03-28 00:00:00+09:00 21000 21035 20620 20710 20439.185546875 901100 0 0
16 2023-03-27 00:00:00+09:00 20980 21020 20755 20960 20685.916015625 1191900 0 0
17 2023-03-24 00:00:00+09:00 20650 20935 20615 20885 20611.896484375 1792300 0 0
18 2023-03-23 00:00:00+09:00 20280 20530 20195 20430 20162.845703125 1096000 0 0
19 2023-03-22 00:00:00+09:00 20330 20640 20285 20610 20340.4921875 1748300 0 0
20 2023-03-20 00:00:00+09:00 20000 20135 19900 19900 19639.77734375 1401300 0 0
21 2023-03-17 00:00:00+09:00 20090 20275 20080 20155 19891.44140625 1392300 0 0
22 2023-03-16 00:00:00+09:00 19880 20225 19860 20175 19911.181640625 1003800 0 0
23 2023-03-15 00:00:00+09:00 20170 20250 20015 20205 19940.7890625 1224400 0 0

View File

@@ -0,0 +1,6 @@
Date,Open,High,Low,Close,Adj Close,Volume,Dividends,Stock Splits
2023-05-30 00:00:00+02:00,19.5900001525879,19.7999992370605,19.2700004577637,19.3500003814697,18.6291382416581,196309,0,0
2023-05-31 00:00:00+02:00,19.1200008392334,19.1399993896484,18.7000007629395,18.7900009155273,18.0900009155273,156652,0,0
2023-06-02 00:00:00+02:00,18.5499992370605,19,18.5100002288818,18.8999996185303,18.8999996185303,83439,0.7,0
2023-06-05 00:00:00+02:00,18.9300003051758,19.0900001525879,18.8400001525879,19,19,153167,0,0
2023-06-06 00:00:00+02:00,18.9099998474121,18.9500007629395,18.5100002288818,18.6599998474121,18.6599998474121,104352,0,0
1 Date Open High Low Close Adj Close Volume Dividends Stock Splits
2 2023-05-30 00:00:00+02:00 19.5900001525879 19.7999992370605 19.2700004577637 19.3500003814697 18.6291382416581 196309 0 0
3 2023-05-31 00:00:00+02:00 19.1200008392334 19.1399993896484 18.7000007629395 18.7900009155273 18.0900009155273 156652 0 0
4 2023-06-02 00:00:00+02:00 18.5499992370605 19 18.5100002288818 18.8999996185303 18.8999996185303 83439 0.7 0
5 2023-06-05 00:00:00+02:00 18.9300003051758 19.0900001525879 18.8400001525879 19 19 153167 0 0
6 2023-06-06 00:00:00+02:00 18.9099998474121 18.9500007629395 18.5100002288818 18.6599998474121 18.6599998474121 104352 0 0

View File

@@ -0,0 +1,6 @@
Date,Open,High,Low,Close,Adj Close,Volume,Dividends,Stock Splits
2023-05-30 00:00:00+02:00,19.59000015258789,19.799999237060547,19.270000457763672,19.350000381469727,19.350000381469727,196309,0.0,0.0
2023-05-31 00:00:00+02:00,19.1200008392334,19.139999389648438,18.700000762939453,18.790000915527344,18.790000915527344,156652,0.0,0.0
2023-06-02 00:00:00+02:00,18.549999237060547,19.0,18.510000228881836,18.899999618530273,18.899999618530273,83439,0.7,0.0
2023-06-05 00:00:00+02:00,18.93000030517578,19.09000015258789,18.84000015258789,19.0,19.0,153167,0.0,0.0
2023-06-06 00:00:00+02:00,18.90999984741211,18.950000762939453,18.510000228881836,18.65999984741211,18.65999984741211,104352,0.0,0.0
1 Date Open High Low Close Adj Close Volume Dividends Stock Splits
2 2023-05-30 00:00:00+02:00 19.59000015258789 19.799999237060547 19.270000457763672 19.350000381469727 19.350000381469727 196309 0.0 0.0
3 2023-05-31 00:00:00+02:00 19.1200008392334 19.139999389648438 18.700000762939453 18.790000915527344 18.790000915527344 156652 0.0 0.0
4 2023-06-02 00:00:00+02:00 18.549999237060547 19.0 18.510000228881836 18.899999618530273 18.899999618530273 83439 0.7 0.0
5 2023-06-05 00:00:00+02:00 18.93000030517578 19.09000015258789 18.84000015258789 19.0 19.0 153167 0.0 0.0
6 2023-06-06 00:00:00+02:00 18.90999984741211 18.950000762939453 18.510000228881836 18.65999984741211 18.65999984741211 104352 0.0 0.0

View File

@@ -0,0 +1,24 @@
Date,Open,High,Low,Close,Adj Close,Volume,Dividends,Stock Splits
2022-06-06 00:00:00+01:00,0.145500004291534,0.145500004291534,0.145500004291534,0.145500004291534,0.145500004291534,0,0,0
2022-06-01 00:00:00+01:00,0.145500004291534,0.145500004291534,0.145500004291534,0.145500004291534,0.145500004291534,0,0,0
2022-05-31 00:00:00+01:00,0.145500004291534,0.145500004291534,0.145500004291534,0.145500004291534,0.145500004291534,0,0,0
2022-05-30 00:00:00+01:00,0.145500004291534,0.145500004291534,0.145500004291534,0.145500004291534,0.145500004291534,0,0,0
2022-05-27 00:00:00+01:00,0.145500004291534,0.145500004291534,0.145500004291534,0.145500004291534,0.145500004291534,0,0,0
2022-05-26 00:00:00+01:00,0.145500004291534,0.145500004291534,0.145500004291534,0.145500004291534,0.145500004291534,0,0,0
2022-05-25 00:00:00+01:00,0.145500004291534,0.145500004291534,0.145500004291534,0.145500004291534,0.145500004291534,0,0,0
2022-05-24 00:00:00+01:00,0.145500004291534,0.145500004291534,0.145500004291534,0.145500004291534,0.145500004291534,0,0,0
2022-05-23 00:00:00+01:00,0.145500004291534,0.145500004291534,0.145500004291534,0.145500004291534,0.145500004291534,0,0,0
2022-05-20 00:00:00+01:00,0.145500004291534,0.145500004291534,0.145500004291534,0.145500004291534,0.145500004291534,0,0,0
2022-05-19 00:00:00+01:00,0.1455,0.1455,0.1455,0.1455,0.1455,0,0,0
2022-05-18 00:00:00+01:00,0.1455,0.1455,0.1455,0.1455,0.1455,532454,0,0
2022-05-17 00:00:00+01:00,0.1455,0.1455,0.1455,0.1455,0.1455,0,0,0
2022-05-16 00:00:00+01:00,0.1455,0.1455,0.1455,0.1455,0.1455,0,0,0
2022-05-13 00:00:00+01:00,0.1455,0.1455,0.1455,0.1455,0.1455,0,0,0
2022-05-12 00:00:00+01:00,0.1455,0.1455,0.1455,0.1455,0.1455,0,0,0
2022-05-11 00:00:00+01:00,0.1455,0.1455,0.1455,0.1455,0.1455,0,0,0
2022-05-10 00:00:00+01:00,0.1455,0.1455,0.1455,0.1455,0.1455,0,0,0
2022-05-09 00:00:00+01:00,0.1455,0.1455,0.1455,0.1455,0.1455,0,0,0
2022-05-06 00:00:00+01:00,0.145500004291534,0.145500004291534,0.145500004291534,0.145500004291534,0.145500004291534,0,0,0
2022-05-05 00:00:00+01:00,0.145500004291534,0.145500004291534,0.145500004291534,0.145500004291534,0.145500004291534,0,0,0
2022-05-04 00:00:00+01:00,0.145500004291534,0.145500004291534,0.145500004291534,0.145500004291534,0.145500004291534,0,0,0
2022-05-03 00:00:00+01:00,0.145500004291534,0.145500004291534,0.145500004291534,0.145500004291534,0.145500004291534,0,0,0
1 Date Open High Low Close Adj Close Volume Dividends Stock Splits
2 2022-06-06 00:00:00+01:00 0.145500004291534 0.145500004291534 0.145500004291534 0.145500004291534 0.145500004291534 0 0 0
3 2022-06-01 00:00:00+01:00 0.145500004291534 0.145500004291534 0.145500004291534 0.145500004291534 0.145500004291534 0 0 0
4 2022-05-31 00:00:00+01:00 0.145500004291534 0.145500004291534 0.145500004291534 0.145500004291534 0.145500004291534 0 0 0
5 2022-05-30 00:00:00+01:00 0.145500004291534 0.145500004291534 0.145500004291534 0.145500004291534 0.145500004291534 0 0 0
6 2022-05-27 00:00:00+01:00 0.145500004291534 0.145500004291534 0.145500004291534 0.145500004291534 0.145500004291534 0 0 0
7 2022-05-26 00:00:00+01:00 0.145500004291534 0.145500004291534 0.145500004291534 0.145500004291534 0.145500004291534 0 0 0
8 2022-05-25 00:00:00+01:00 0.145500004291534 0.145500004291534 0.145500004291534 0.145500004291534 0.145500004291534 0 0 0
9 2022-05-24 00:00:00+01:00 0.145500004291534 0.145500004291534 0.145500004291534 0.145500004291534 0.145500004291534 0 0 0
10 2022-05-23 00:00:00+01:00 0.145500004291534 0.145500004291534 0.145500004291534 0.145500004291534 0.145500004291534 0 0 0
11 2022-05-20 00:00:00+01:00 0.145500004291534 0.145500004291534 0.145500004291534 0.145500004291534 0.145500004291534 0 0 0
12 2022-05-19 00:00:00+01:00 0.1455 0.1455 0.1455 0.1455 0.1455 0 0 0
13 2022-05-18 00:00:00+01:00 0.1455 0.1455 0.1455 0.1455 0.1455 532454 0 0
14 2022-05-17 00:00:00+01:00 0.1455 0.1455 0.1455 0.1455 0.1455 0 0 0
15 2022-05-16 00:00:00+01:00 0.1455 0.1455 0.1455 0.1455 0.1455 0 0 0
16 2022-05-13 00:00:00+01:00 0.1455 0.1455 0.1455 0.1455 0.1455 0 0 0
17 2022-05-12 00:00:00+01:00 0.1455 0.1455 0.1455 0.1455 0.1455 0 0 0
18 2022-05-11 00:00:00+01:00 0.1455 0.1455 0.1455 0.1455 0.1455 0 0 0
19 2022-05-10 00:00:00+01:00 0.1455 0.1455 0.1455 0.1455 0.1455 0 0 0
20 2022-05-09 00:00:00+01:00 0.1455 0.1455 0.1455 0.1455 0.1455 0 0 0
21 2022-05-06 00:00:00+01:00 0.145500004291534 0.145500004291534 0.145500004291534 0.145500004291534 0.145500004291534 0 0 0
22 2022-05-05 00:00:00+01:00 0.145500004291534 0.145500004291534 0.145500004291534 0.145500004291534 0.145500004291534 0 0 0
23 2022-05-04 00:00:00+01:00 0.145500004291534 0.145500004291534 0.145500004291534 0.145500004291534 0.145500004291534 0 0 0
24 2022-05-03 00:00:00+01:00 0.145500004291534 0.145500004291534 0.145500004291534 0.145500004291534 0.145500004291534 0 0 0

View File

@@ -0,0 +1,24 @@
Date,Open,High,Low,Close,Adj Close,Volume,Dividends,Stock Splits
2022-06-06 00:00:00+01:00,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0,0.0,0.0
2022-06-01 00:00:00+01:00,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0,0.0,0.0
2022-05-31 00:00:00+01:00,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0,0.0,0.0
2022-05-30 00:00:00+01:00,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0,0.0,0.0
2022-05-27 00:00:00+01:00,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0,0.0,0.0
2022-05-26 00:00:00+01:00,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0,0.0,0.0
2022-05-25 00:00:00+01:00,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0,0.0,0.0
2022-05-24 00:00:00+01:00,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0,0.0,0.0
2022-05-23 00:00:00+01:00,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0,0.0,0.0
2022-05-20 00:00:00+01:00,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0,0.0,0.0
2022-05-19 00:00:00+01:00,14.550000190734863,14.550000190734863,14.550000190734863,14.550000190734863,14.550000190734863,0,0.0,0.0
2022-05-18 00:00:00+01:00,14.550000190734863,14.550000190734863,14.550000190734863,14.550000190734863,14.550000190734863,532454,0.0,0.0
2022-05-17 00:00:00+01:00,14.550000190734863,14.550000190734863,14.550000190734863,14.550000190734863,14.550000190734863,0,0.0,0.0
2022-05-16 00:00:00+01:00,14.550000190734863,14.550000190734863,14.550000190734863,14.550000190734863,14.550000190734863,0,0.0,0.0
2022-05-13 00:00:00+01:00,14.550000190734863,14.550000190734863,14.550000190734863,14.550000190734863,14.550000190734863,0,0.0,0.0
2022-05-12 00:00:00+01:00,14.550000190734863,14.550000190734863,14.550000190734863,14.550000190734863,14.550000190734863,0,0.0,0.0
2022-05-11 00:00:00+01:00,14.550000190734863,14.550000190734863,14.550000190734863,14.550000190734863,14.550000190734863,0,0.0,0.0
2022-05-10 00:00:00+01:00,14.550000190734863,14.550000190734863,14.550000190734863,14.550000190734863,14.550000190734863,0,0.0,0.0
2022-05-09 00:00:00+01:00,14.550000190734863,14.550000190734863,14.550000190734863,14.550000190734863,14.550000190734863,0,0.0,0.0
2022-05-06 00:00:00+01:00,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0,0.0,0.0
2022-05-05 00:00:00+01:00,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0,0.0,0.0
2022-05-04 00:00:00+01:00,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0,0.0,0.0
2022-05-03 00:00:00+01:00,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0,0.0,0.0
1 Date Open High Low Close Adj Close Volume Dividends Stock Splits
2 2022-06-06 00:00:00+01:00 0.14550000429153442 0.14550000429153442 0.14550000429153442 0.14550000429153442 0.14550000429153442 0 0.0 0.0
3 2022-06-01 00:00:00+01:00 0.14550000429153442 0.14550000429153442 0.14550000429153442 0.14550000429153442 0.14550000429153442 0 0.0 0.0
4 2022-05-31 00:00:00+01:00 0.14550000429153442 0.14550000429153442 0.14550000429153442 0.14550000429153442 0.14550000429153442 0 0.0 0.0
5 2022-05-30 00:00:00+01:00 0.14550000429153442 0.14550000429153442 0.14550000429153442 0.14550000429153442 0.14550000429153442 0 0.0 0.0
6 2022-05-27 00:00:00+01:00 0.14550000429153442 0.14550000429153442 0.14550000429153442 0.14550000429153442 0.14550000429153442 0 0.0 0.0
7 2022-05-26 00:00:00+01:00 0.14550000429153442 0.14550000429153442 0.14550000429153442 0.14550000429153442 0.14550000429153442 0 0.0 0.0
8 2022-05-25 00:00:00+01:00 0.14550000429153442 0.14550000429153442 0.14550000429153442 0.14550000429153442 0.14550000429153442 0 0.0 0.0
9 2022-05-24 00:00:00+01:00 0.14550000429153442 0.14550000429153442 0.14550000429153442 0.14550000429153442 0.14550000429153442 0 0.0 0.0
10 2022-05-23 00:00:00+01:00 0.14550000429153442 0.14550000429153442 0.14550000429153442 0.14550000429153442 0.14550000429153442 0 0.0 0.0
11 2022-05-20 00:00:00+01:00 0.14550000429153442 0.14550000429153442 0.14550000429153442 0.14550000429153442 0.14550000429153442 0 0.0 0.0
12 2022-05-19 00:00:00+01:00 14.550000190734863 14.550000190734863 14.550000190734863 14.550000190734863 14.550000190734863 0 0.0 0.0
13 2022-05-18 00:00:00+01:00 14.550000190734863 14.550000190734863 14.550000190734863 14.550000190734863 14.550000190734863 532454 0.0 0.0
14 2022-05-17 00:00:00+01:00 14.550000190734863 14.550000190734863 14.550000190734863 14.550000190734863 14.550000190734863 0 0.0 0.0
15 2022-05-16 00:00:00+01:00 14.550000190734863 14.550000190734863 14.550000190734863 14.550000190734863 14.550000190734863 0 0.0 0.0
16 2022-05-13 00:00:00+01:00 14.550000190734863 14.550000190734863 14.550000190734863 14.550000190734863 14.550000190734863 0 0.0 0.0
17 2022-05-12 00:00:00+01:00 14.550000190734863 14.550000190734863 14.550000190734863 14.550000190734863 14.550000190734863 0 0.0 0.0
18 2022-05-11 00:00:00+01:00 14.550000190734863 14.550000190734863 14.550000190734863 14.550000190734863 14.550000190734863 0 0.0 0.0
19 2022-05-10 00:00:00+01:00 14.550000190734863 14.550000190734863 14.550000190734863 14.550000190734863 14.550000190734863 0 0.0 0.0
20 2022-05-09 00:00:00+01:00 14.550000190734863 14.550000190734863 14.550000190734863 14.550000190734863 14.550000190734863 0 0.0 0.0
21 2022-05-06 00:00:00+01:00 0.14550000429153442 0.14550000429153442 0.14550000429153442 0.14550000429153442 0.14550000429153442 0 0.0 0.0
22 2022-05-05 00:00:00+01:00 0.14550000429153442 0.14550000429153442 0.14550000429153442 0.14550000429153442 0.14550000429153442 0 0.0 0.0
23 2022-05-04 00:00:00+01:00 0.14550000429153442 0.14550000429153442 0.14550000429153442 0.14550000429153442 0.14550000429153442 0 0.0 0.0
24 2022-05-03 00:00:00+01:00 0.14550000429153442 0.14550000429153442 0.14550000429153442 0.14550000429153442 0.14550000429153442 0 0.0 0.0

View File

@@ -0,0 +1,37 @@
Date,Open,High,Low,Close,Adj Close,Volume,Dividends,Stock Splits
2022-05-30 00:00:00+01:00,14.5500,14.5500,14.5500,14.5500,14.5500,0,0,0
2022-05-23 00:00:00+01:00,14.5500,14.5500,14.5500,14.5500,14.5500,0,0,0
2022-05-16 00:00:00+01:00,14.5500,14.5500,14.5500,14.5500,14.5500,532454,0,0
2022-05-09 00:00:00+01:00,14.5500,14.5500,14.5500,14.5500,14.5500,0,0,0
2022-05-02 00:00:00+01:00,14.5500,14.5500,14.5500,14.5500,14.5500,0,0,0
2022-04-25 00:00:00+01:00,14.5500,14.5500,14.5500,14.5500,14.5500,0,0,0
2022-04-18 00:00:00+01:00,14.5500,14.5500,14.5500,14.5500,14.5500,0,0,0
2022-04-11 00:00:00+01:00,14.5500,14.5500,14.5500,14.5500,14.5500,0,0,0
2022-04-04 00:00:00+01:00,14.5500,14.5500,14.5500,14.5500,14.5500,0,0,0
2022-03-28 00:00:00+01:00,14.5500,14.5500,14.5500,14.5500,14.5500,0,0,0
2022-03-21 00:00:00+00:00,14.5500,14.5500,14.5500,14.5500,14.5500,0,0,0
2022-03-14 00:00:00+00:00,14.5500,14.5500,14.5500,14.5500,14.5500,0,0,0
2022-03-07 00:00:00+00:00,14.5500,14.5500,14.5500,14.5500,14.5500,0,0,0
2022-02-28 00:00:00+00:00,14.5500,14.5500,14.5500,14.5500,14.5500,0,0,0
2022-02-21 00:00:00+00:00,14.5500,14.5500,14.5500,14.5500,14.5500,0,0,0
2022-02-14 00:00:00+00:00,14.5500,14.5500,14.5500,14.5500,14.5500,0,0,0
2022-02-07 00:00:00+00:00,14.5500,14.5500,14.5500,14.5500,14.5500,0,0,0
2022-01-31 00:00:00+00:00,14.5500,14.5500,14.5500,14.5500,14.5500,0,0,0
2022-01-24 00:00:00+00:00,14.5500,14.5500,14.5500,14.5500,14.5500,0,0,0
2022-01-17 00:00:00+00:00,14.5500,14.5500,14.5500,14.5500,14.5500,0,0,0
2022-01-10 00:00:00+00:00,14.5500,14.5500,14.5500,14.5500,14.5500,0,0,0
2022-01-03 00:00:00+00:00,14.5500,14.5500,14.5500,14.5500,14.5500,0,0,0
2021-12-27 00:00:00+00:00,14.5500,14.5500,14.5500,14.5500,14.5500,0,0,0
2021-12-20 00:00:00+00:00,14.5500,14.5500,14.5500,14.5500,14.5500,0,0,0
2021-12-13 00:00:00+00:00,14.5500,14.5500,14.5500,14.5500,14.5500,0,0,0
2021-12-06 00:00:00+00:00,14.5500,14.5500,14.5500,14.5500,14.5500,0,0,0
2021-11-29 00:00:00+00:00,14.5500,14.5500,14.5500,14.5500,14.5500,0,0,0
2021-11-22 00:00:00+00:00,14.5500,14.5500,14.5500,14.5500,14.5500,0,0,0
2021-11-15 00:00:00+00:00,14.5500,14.5500,14.5500,14.5500,14.5500,0,0,0
2021-11-08 00:00:00+00:00,14.5500,14.5500,14.5500,14.5500,14.5500,0,0,0
2021-11-01 00:00:00+00:00,14.5500,14.5500,14.5500,14.5500,14.5500,0,0,0
2021-10-25 00:00:00+01:00,14.5500,14.5500,14.5500,14.5500,14.5500,0,0,0
2021-10-18 00:00:00+01:00,14.5500,14.5500,14.5500,14.5500,14.5500,0,0,0
2021-10-11 00:00:00+01:00,14.5500,14.5500,14.5500,14.5500,14.5500,0,0,0
2021-10-04 00:00:00+01:00,14.8000,15.3400,14.4000,14.5500,14.5500,2171373,0,0
2021-09-27 00:00:00+01:00,15.6000,16.0000,14.9000,15.0500,15.0500,3860549,0,0
1 Date Open High Low Close Adj Close Volume Dividends Stock Splits
2 2022-05-30 00:00:00+01:00 14.5500 14.5500 14.5500 14.5500 14.5500 0 0 0
3 2022-05-23 00:00:00+01:00 14.5500 14.5500 14.5500 14.5500 14.5500 0 0 0
4 2022-05-16 00:00:00+01:00 14.5500 14.5500 14.5500 14.5500 14.5500 532454 0 0
5 2022-05-09 00:00:00+01:00 14.5500 14.5500 14.5500 14.5500 14.5500 0 0 0
6 2022-05-02 00:00:00+01:00 14.5500 14.5500 14.5500 14.5500 14.5500 0 0 0
7 2022-04-25 00:00:00+01:00 14.5500 14.5500 14.5500 14.5500 14.5500 0 0 0
8 2022-04-18 00:00:00+01:00 14.5500 14.5500 14.5500 14.5500 14.5500 0 0 0
9 2022-04-11 00:00:00+01:00 14.5500 14.5500 14.5500 14.5500 14.5500 0 0 0
10 2022-04-04 00:00:00+01:00 14.5500 14.5500 14.5500 14.5500 14.5500 0 0 0
11 2022-03-28 00:00:00+01:00 14.5500 14.5500 14.5500 14.5500 14.5500 0 0 0
12 2022-03-21 00:00:00+00:00 14.5500 14.5500 14.5500 14.5500 14.5500 0 0 0
13 2022-03-14 00:00:00+00:00 14.5500 14.5500 14.5500 14.5500 14.5500 0 0 0
14 2022-03-07 00:00:00+00:00 14.5500 14.5500 14.5500 14.5500 14.5500 0 0 0
15 2022-02-28 00:00:00+00:00 14.5500 14.5500 14.5500 14.5500 14.5500 0 0 0
16 2022-02-21 00:00:00+00:00 14.5500 14.5500 14.5500 14.5500 14.5500 0 0 0
17 2022-02-14 00:00:00+00:00 14.5500 14.5500 14.5500 14.5500 14.5500 0 0 0
18 2022-02-07 00:00:00+00:00 14.5500 14.5500 14.5500 14.5500 14.5500 0 0 0
19 2022-01-31 00:00:00+00:00 14.5500 14.5500 14.5500 14.5500 14.5500 0 0 0
20 2022-01-24 00:00:00+00:00 14.5500 14.5500 14.5500 14.5500 14.5500 0 0 0
21 2022-01-17 00:00:00+00:00 14.5500 14.5500 14.5500 14.5500 14.5500 0 0 0
22 2022-01-10 00:00:00+00:00 14.5500 14.5500 14.5500 14.5500 14.5500 0 0 0
23 2022-01-03 00:00:00+00:00 14.5500 14.5500 14.5500 14.5500 14.5500 0 0 0
24 2021-12-27 00:00:00+00:00 14.5500 14.5500 14.5500 14.5500 14.5500 0 0 0
25 2021-12-20 00:00:00+00:00 14.5500 14.5500 14.5500 14.5500 14.5500 0 0 0
26 2021-12-13 00:00:00+00:00 14.5500 14.5500 14.5500 14.5500 14.5500 0 0 0
27 2021-12-06 00:00:00+00:00 14.5500 14.5500 14.5500 14.5500 14.5500 0 0 0
28 2021-11-29 00:00:00+00:00 14.5500 14.5500 14.5500 14.5500 14.5500 0 0 0
29 2021-11-22 00:00:00+00:00 14.5500 14.5500 14.5500 14.5500 14.5500 0 0 0
30 2021-11-15 00:00:00+00:00 14.5500 14.5500 14.5500 14.5500 14.5500 0 0 0
31 2021-11-08 00:00:00+00:00 14.5500 14.5500 14.5500 14.5500 14.5500 0 0 0
32 2021-11-01 00:00:00+00:00 14.5500 14.5500 14.5500 14.5500 14.5500 0 0 0
33 2021-10-25 00:00:00+01:00 14.5500 14.5500 14.5500 14.5500 14.5500 0 0 0
34 2021-10-18 00:00:00+01:00 14.5500 14.5500 14.5500 14.5500 14.5500 0 0 0
35 2021-10-11 00:00:00+01:00 14.5500 14.5500 14.5500 14.5500 14.5500 0 0 0
36 2021-10-04 00:00:00+01:00 14.8000 15.3400 14.4000 14.5500 14.5500 2171373 0 0
37 2021-09-27 00:00:00+01:00 15.6000 16.0000 14.9000 15.0500 15.0500 3860549 0 0

View File

@@ -0,0 +1,25 @@
Date,Open,High,Low,Close,Adj Close,Volume,Dividends,Stock Splits
2022-08-15 00:00:00+01:00,27.6000,28.2000,26.2000,27.6000,27.6000,3535668,0,0
2022-08-12 00:00:00+01:00,27.3000,29.8000,26.4030,27.0000,27.0000,7223353,0,0
2022-08-11 00:00:00+01:00,26.0000,29.8000,24.2000,27.1000,27.1000,12887933,0,0
2022-08-10 00:00:00+01:00,25.0000,29.2000,22.5000,25.0000,25.0000,26572680,0,0
2022-08-09 00:00:00+01:00,14.5500,14.5500,14.5500,14.5500,14.5500,0,0,0
2022-08-08 00:00:00+01:00,14.5500,14.5500,14.5500,14.5500,14.5500,0,0,0
2022-08-05 00:00:00+01:00,14.5500,14.5500,14.5500,14.5500,14.5500,0,0,0
2022-08-04 00:00:00+01:00,14.5500,14.5500,14.5500,14.5500,14.5500,0,0,0
2022-08-03 00:00:00+01:00,14.5500,14.5500,14.5500,14.5500,14.5500,0,0,0
2022-08-02 00:00:00+01:00,14.5500,14.5500,14.5500,14.5500,14.5500,0,0,0
2022-08-01 00:00:00+01:00,14.5500,14.5500,14.5500,14.5500,14.5500,0,0,0
2022-07-29 00:00:00+01:00,14.5500,14.5500,14.5500,14.5500,14.5500,0,0,0
2022-07-28 00:00:00+01:00,14.5500,14.5500,14.5500,14.5500,14.5500,0,0,0
2022-07-27 00:00:00+01:00,14.5500,14.5500,14.5500,14.5500,14.5500,0,0,0
2022-07-26 00:00:00+01:00,14.5500,14.5500,14.5500,14.5500,14.5500,0,0,0
2022-07-25 00:00:00+01:00,14.5500,14.5500,14.5500,14.5500,14.5500,0,0,0
2022-07-22 00:00:00+01:00,14.5500,14.5500,14.5500,14.5500,14.5500,0,0,0
2022-07-21 00:00:00+01:00,14.5500,14.5500,14.5500,14.5500,14.5500,0,0,0
2022-07-20 00:00:00+01:00,14.5500,14.5500,14.5500,14.5500,14.5500,0,0,0
2022-07-19 00:00:00+01:00,14.5500,14.5500,14.5500,14.5500,14.5500,0,0,0
2022-07-18 00:00:00+01:00,14.5500,14.5500,14.5500,14.5500,14.5500,0,0,0
2022-07-15 00:00:00+01:00,14.5500,14.5500,14.5500,14.5500,14.5500,0,0,0
2022-07-14 00:00:00+01:00,14.5500,14.5500,14.5500,14.5500,14.5500,0,0,0
2022-07-13 00:00:00+01:00,14.5500,14.5500,14.5500,14.5500,14.5500,0,0,0

View File

@@ -0,0 +1,37 @@
Date,Open,High,Low,Close,Adj Close,Volume,Dividends,Stock Splits
2022-05-30 00:00:00+01:00,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0,0.0,0.0
2022-05-23 00:00:00+01:00,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0,0.0,0.0
2022-05-16 00:00:00+01:00,14.550000190734863,14.550000190734863,0.14550000429153442,0.14550000429153442,0.14550000429153442,532454,0.0,0.0
2022-05-09 00:00:00+01:00,14.550000190734863,14.550000190734863,14.550000190734863,14.550000190734863,14.550000190734863,0,0.0,0.0
2022-05-02 00:00:00+01:00,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0,0.0,0.0
2022-04-25 00:00:00+01:00,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0,0.0,0.0
2022-04-18 00:00:00+01:00,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0,0.0,0.0
2022-04-11 00:00:00+01:00,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0,0.0,0.0
2022-04-04 00:00:00+01:00,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0,0.0,0.0
2022-03-28 00:00:00+01:00,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0,0.0,0.0
2022-03-21 00:00:00+00:00,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0,0.0,0.0
2022-03-14 00:00:00+00:00,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0,0.0,0.0
2022-03-07 00:00:00+00:00,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0,0.0,0.0
2022-02-28 00:00:00+00:00,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0,0.0,0.0
2022-02-21 00:00:00+00:00,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0,0.0,0.0
2022-02-14 00:00:00+00:00,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0,0.0,0.0
2022-02-07 00:00:00+00:00,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0,0.0,0.0
2022-01-31 00:00:00+00:00,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0,0.0,0.0
2022-01-24 00:00:00+00:00,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0,0.0,0.0
2022-01-17 00:00:00+00:00,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0,0.0,0.0
2022-01-10 00:00:00+00:00,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0,0.0,0.0
2022-01-03 00:00:00+00:00,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0,0.0,0.0
2021-12-27 00:00:00+00:00,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0,0.0,0.0
2021-12-20 00:00:00+00:00,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0,0.0,0.0
2021-12-13 00:00:00+00:00,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0,0.0,0.0
2021-12-06 00:00:00+00:00,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0,0.0,0.0
2021-11-29 00:00:00+00:00,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0,0.0,0.0
2021-11-22 00:00:00+00:00,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0,0.0,0.0
2021-11-15 00:00:00+00:00,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0,0.0,0.0
2021-11-08 00:00:00+00:00,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0,0.0,0.0
2021-11-01 00:00:00+00:00,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0,0.0,0.0
2021-10-25 00:00:00+01:00,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0,0.0,0.0
2021-10-18 00:00:00+01:00,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0,0.0,0.0
2021-10-11 00:00:00+01:00,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0,0.0,0.0
2021-10-04 00:00:00+01:00,14.800000190734863,15.34000015258789,0.14399999380111694,0.14550000429153442,0.14550000429153442,2171373,0.0,0.0
2021-09-27 00:00:00+01:00,15.600000381469727,16.0,14.899999618530273,15.050000190734863,15.050000190734863,3860549,0.0,0.0
1 Date Open High Low Close Adj Close Volume Dividends Stock Splits
2 2022-05-30 00:00:00+01:00 0.14550000429153442 0.14550000429153442 0.14550000429153442 0.14550000429153442 0.14550000429153442 0 0.0 0.0
3 2022-05-23 00:00:00+01:00 0.14550000429153442 0.14550000429153442 0.14550000429153442 0.14550000429153442 0.14550000429153442 0 0.0 0.0
4 2022-05-16 00:00:00+01:00 14.550000190734863 14.550000190734863 0.14550000429153442 0.14550000429153442 0.14550000429153442 532454 0.0 0.0
5 2022-05-09 00:00:00+01:00 14.550000190734863 14.550000190734863 14.550000190734863 14.550000190734863 14.550000190734863 0 0.0 0.0
6 2022-05-02 00:00:00+01:00 0.14550000429153442 0.14550000429153442 0.14550000429153442 0.14550000429153442 0.14550000429153442 0 0.0 0.0
7 2022-04-25 00:00:00+01:00 0.14550000429153442 0.14550000429153442 0.14550000429153442 0.14550000429153442 0.14550000429153442 0 0.0 0.0
8 2022-04-18 00:00:00+01:00 0.14550000429153442 0.14550000429153442 0.14550000429153442 0.14550000429153442 0.14550000429153442 0 0.0 0.0
9 2022-04-11 00:00:00+01:00 0.14550000429153442 0.14550000429153442 0.14550000429153442 0.14550000429153442 0.14550000429153442 0 0.0 0.0
10 2022-04-04 00:00:00+01:00 0.14550000429153442 0.14550000429153442 0.14550000429153442 0.14550000429153442 0.14550000429153442 0 0.0 0.0
11 2022-03-28 00:00:00+01:00 0.14550000429153442 0.14550000429153442 0.14550000429153442 0.14550000429153442 0.14550000429153442 0 0.0 0.0
12 2022-03-21 00:00:00+00:00 0.14550000429153442 0.14550000429153442 0.14550000429153442 0.14550000429153442 0.14550000429153442 0 0.0 0.0
13 2022-03-14 00:00:00+00:00 0.14550000429153442 0.14550000429153442 0.14550000429153442 0.14550000429153442 0.14550000429153442 0 0.0 0.0
14 2022-03-07 00:00:00+00:00 0.14550000429153442 0.14550000429153442 0.14550000429153442 0.14550000429153442 0.14550000429153442 0 0.0 0.0
15 2022-02-28 00:00:00+00:00 0.14550000429153442 0.14550000429153442 0.14550000429153442 0.14550000429153442 0.14550000429153442 0 0.0 0.0
16 2022-02-21 00:00:00+00:00 0.14550000429153442 0.14550000429153442 0.14550000429153442 0.14550000429153442 0.14550000429153442 0 0.0 0.0
17 2022-02-14 00:00:00+00:00 0.14550000429153442 0.14550000429153442 0.14550000429153442 0.14550000429153442 0.14550000429153442 0 0.0 0.0
18 2022-02-07 00:00:00+00:00 0.14550000429153442 0.14550000429153442 0.14550000429153442 0.14550000429153442 0.14550000429153442 0 0.0 0.0
19 2022-01-31 00:00:00+00:00 0.14550000429153442 0.14550000429153442 0.14550000429153442 0.14550000429153442 0.14550000429153442 0 0.0 0.0
20 2022-01-24 00:00:00+00:00 0.14550000429153442 0.14550000429153442 0.14550000429153442 0.14550000429153442 0.14550000429153442 0 0.0 0.0
21 2022-01-17 00:00:00+00:00 0.14550000429153442 0.14550000429153442 0.14550000429153442 0.14550000429153442 0.14550000429153442 0 0.0 0.0
22 2022-01-10 00:00:00+00:00 0.14550000429153442 0.14550000429153442 0.14550000429153442 0.14550000429153442 0.14550000429153442 0 0.0 0.0
23 2022-01-03 00:00:00+00:00 0.14550000429153442 0.14550000429153442 0.14550000429153442 0.14550000429153442 0.14550000429153442 0 0.0 0.0
24 2021-12-27 00:00:00+00:00 0.14550000429153442 0.14550000429153442 0.14550000429153442 0.14550000429153442 0.14550000429153442 0 0.0 0.0
25 2021-12-20 00:00:00+00:00 0.14550000429153442 0.14550000429153442 0.14550000429153442 0.14550000429153442 0.14550000429153442 0 0.0 0.0
26 2021-12-13 00:00:00+00:00 0.14550000429153442 0.14550000429153442 0.14550000429153442 0.14550000429153442 0.14550000429153442 0 0.0 0.0
27 2021-12-06 00:00:00+00:00 0.14550000429153442 0.14550000429153442 0.14550000429153442 0.14550000429153442 0.14550000429153442 0 0.0 0.0
28 2021-11-29 00:00:00+00:00 0.14550000429153442 0.14550000429153442 0.14550000429153442 0.14550000429153442 0.14550000429153442 0 0.0 0.0
29 2021-11-22 00:00:00+00:00 0.14550000429153442 0.14550000429153442 0.14550000429153442 0.14550000429153442 0.14550000429153442 0 0.0 0.0
30 2021-11-15 00:00:00+00:00 0.14550000429153442 0.14550000429153442 0.14550000429153442 0.14550000429153442 0.14550000429153442 0 0.0 0.0
31 2021-11-08 00:00:00+00:00 0.14550000429153442 0.14550000429153442 0.14550000429153442 0.14550000429153442 0.14550000429153442 0 0.0 0.0
32 2021-11-01 00:00:00+00:00 0.14550000429153442 0.14550000429153442 0.14550000429153442 0.14550000429153442 0.14550000429153442 0 0.0 0.0
33 2021-10-25 00:00:00+01:00 0.14550000429153442 0.14550000429153442 0.14550000429153442 0.14550000429153442 0.14550000429153442 0 0.0 0.0
34 2021-10-18 00:00:00+01:00 0.14550000429153442 0.14550000429153442 0.14550000429153442 0.14550000429153442 0.14550000429153442 0 0.0 0.0
35 2021-10-11 00:00:00+01:00 0.14550000429153442 0.14550000429153442 0.14550000429153442 0.14550000429153442 0.14550000429153442 0 0.0 0.0
36 2021-10-04 00:00:00+01:00 14.800000190734863 15.34000015258789 0.14399999380111694 0.14550000429153442 0.14550000429153442 2171373 0.0 0.0
37 2021-09-27 00:00:00+01:00 15.600000381469727 16.0 14.899999618530273 15.050000190734863 15.050000190734863 3860549 0.0 0.0

View File

@@ -0,0 +1,25 @@
Date,Open,High,Low,Close,Adj Close,Volume,Dividends,Stock Splits
2022-08-15 00:00:00+01:00,27.600000381469727,28.200000762939453,26.200000762939453,27.600000381469727,27.600000381469727,3535668,0.0,0.0
2022-08-12 00:00:00+01:00,27.299999237060547,29.799999237060547,26.402999877929688,27.0,27.0,7223353,0.0,0.0
2022-08-11 00:00:00+01:00,26.0,29.799999237060547,24.200000762939453,27.100000381469727,27.100000381469727,12887933,0.0,0.0
2022-08-10 00:00:00+01:00,25.0,29.200000762939453,22.5,25.0,25.0,26572680,0.0,0.0
2022-08-09 00:00:00+01:00,14.550000190734863,14.550000190734863,14.550000190734863,14.550000190734863,14.550000190734863,0,0.0,0.0
2022-08-08 00:00:00+01:00,14.550000190734863,14.550000190734863,14.550000190734863,14.550000190734863,14.550000190734863,0,0.0,0.0
2022-08-05 00:00:00+01:00,14.550000190734863,14.550000190734863,14.550000190734863,14.550000190734863,14.550000190734863,0,0.0,0.0
2022-08-04 00:00:00+01:00,14.550000190734863,14.550000190734863,14.550000190734863,14.550000190734863,14.550000190734863,0,0.0,0.0
2022-08-03 00:00:00+01:00,14.550000190734863,14.550000190734863,14.550000190734863,14.550000190734863,14.550000190734863,0,0.0,0.0
2022-08-02 00:00:00+01:00,14.550000190734863,14.550000190734863,14.550000190734863,14.550000190734863,14.550000190734863,0,0.0,0.0
2022-08-01 00:00:00+01:00,14.550000190734863,14.550000190734863,14.550000190734863,14.550000190734863,14.550000190734863,0,0.0,0.0
2022-07-29 00:00:00+01:00,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0,0.0,0.0
2022-07-28 00:00:00+01:00,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0,0.0,0.0
2022-07-27 00:00:00+01:00,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0,0.0,0.0
2022-07-26 00:00:00+01:00,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0,0.0,0.0
2022-07-25 00:00:00+01:00,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0,0.0,0.0
2022-07-22 00:00:00+01:00,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0,0.0,0.0
2022-07-21 00:00:00+01:00,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0,0.0,0.0
2022-07-20 00:00:00+01:00,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0,0.0,0.0
2022-07-19 00:00:00+01:00,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0,0.0,0.0
2022-07-18 00:00:00+01:00,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0,0.0,0.0
2022-07-15 00:00:00+01:00,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0,0.0,0.0
2022-07-14 00:00:00+01:00,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0,0.0,0.0
2022-07-13 00:00:00+01:00,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0,0.0,0.0

View File

@@ -0,0 +1,30 @@
Date,Open,High,Low,Close,Adj Close,Volume,Dividends,Stock Splits
2023-04-20 00:00:00+02:00,3,3,2,3,3,2076,0,0
2023-04-21 00:00:00+02:00,3,3,2,3,3,2136,0,0
2023-04-24 00:00:00+02:00,3,3,1,1,1,77147,0,0
2023-04-25 00:00:00+02:00,1,2,1,2,2,9625,0,0
2023-04-26 00:00:00+02:00,2,2,1,2,2,5028,0,0
2023-04-27 00:00:00+02:00,2,2,1,1,1,3235,0,0
2023-04-28 00:00:00+02:00,2,2,1,2,2,10944,0,0
2023-05-02 00:00:00+02:00,2,2,2,2,2,12220,0,0
2023-05-03 00:00:00+02:00,2,2,2,2,2,4683,0,0
2023-05-04 00:00:00+02:00,2,2,1,2,2,3368,0,0
2023-05-05 00:00:00+02:00,2,2,1,2,2,26069,0,0
2023-05-08 00:00:00+02:00,1,2,1,1,1,70540,0,0
2023-05-09 00:00:00+02:00,1,2,1,1,1,14228,0,0
2023-05-10 00:00:00+02:00,1.08000004291534,1.39999997615814,0.879999995231628,1,1,81012,0,0.0001
2023-05-11 00:00:00+02:00,1.03999996185303,1.03999996185303,0.850000023841858,1,1,40254,0,0
2023-05-12 00:00:00+02:00,0.949999988079071,1.10000002384186,0.949999988079071,1.01999998092651,1.01999998092651,35026,0,0
2023-05-15 00:00:00+02:00,0.949999988079071,1.01999998092651,0.860000014305115,0.939999997615814,0.939999997615814,41486,0,0
2023-05-16 00:00:00+02:00,0.899999976158142,0.944000005722046,0.800000011920929,0.800000011920929,0.800000011920929,43583,0,0
2023-05-17 00:00:00+02:00,0.850000023841858,0.850000023841858,0.779999971389771,0.810000002384186,0.810000002384186,29984,0,0
2023-05-18 00:00:00+02:00,0.779999971389771,0.78600001335144,0.740000009536743,0.740000009536743,0.740000009536743,24679,0,0
2023-05-19 00:00:00+02:00,0.78600001335144,0.78600001335144,0.649999976158142,0.65200001001358,0.65200001001358,26732,0,0
2023-05-22 00:00:00+02:00,0.8299999833107,1.05999994277954,0.709999978542328,0.709999978542328,0.709999978542328,169538,0,0
2023-05-23 00:00:00+02:00,0.899999976158142,1.60800004005432,0.860000014305115,1.22000002861023,1.22000002861023,858471,0,0
2023-05-24 00:00:00+02:00,1.19400000572205,1.25999999046326,0.779999971389771,0.779999971389771,0.779999971389771,627823,0,0
2023-05-25 00:00:00+02:00,0.980000019073486,1.22000002861023,0.702000021934509,0.732999980449677,0.732999980449677,1068939,0,0
2023-05-26 00:00:00+02:00,0.660000026226044,0.72000002861023,0.602999985218048,0.611999988555908,0.611999988555908,631580,0,0
2023-05-29 00:00:00+02:00,0.620000004768372,0.75,0.578999996185303,0.600000023841858,0.600000023841858,586150,0,0
2023-05-30 00:00:00+02:00,0.610000014305115,0.634999990463257,0.497000008821487,0.497000008821487,0.497000008821487,552308,0,0
2023-05-31 00:00:00+02:00,0.458999991416931,0.469999998807907,0.374000012874603,0.379999995231628,0.379999995231628,899067,0,0
1 Date Open High Low Close Adj Close Volume Dividends Stock Splits
2 2023-04-20 00:00:00+02:00 3 3 2 3 3 2076 0 0
3 2023-04-21 00:00:00+02:00 3 3 2 3 3 2136 0 0
4 2023-04-24 00:00:00+02:00 3 3 1 1 1 77147 0 0
5 2023-04-25 00:00:00+02:00 1 2 1 2 2 9625 0 0
6 2023-04-26 00:00:00+02:00 2 2 1 2 2 5028 0 0
7 2023-04-27 00:00:00+02:00 2 2 1 1 1 3235 0 0
8 2023-04-28 00:00:00+02:00 2 2 1 2 2 10944 0 0
9 2023-05-02 00:00:00+02:00 2 2 2 2 2 12220 0 0
10 2023-05-03 00:00:00+02:00 2 2 2 2 2 4683 0 0
11 2023-05-04 00:00:00+02:00 2 2 1 2 2 3368 0 0
12 2023-05-05 00:00:00+02:00 2 2 1 2 2 26069 0 0
13 2023-05-08 00:00:00+02:00 1 2 1 1 1 70540 0 0
14 2023-05-09 00:00:00+02:00 1 2 1 1 1 14228 0 0
15 2023-05-10 00:00:00+02:00 1.08000004291534 1.39999997615814 0.879999995231628 1 1 81012 0 0.0001
16 2023-05-11 00:00:00+02:00 1.03999996185303 1.03999996185303 0.850000023841858 1 1 40254 0 0
17 2023-05-12 00:00:00+02:00 0.949999988079071 1.10000002384186 0.949999988079071 1.01999998092651 1.01999998092651 35026 0 0
18 2023-05-15 00:00:00+02:00 0.949999988079071 1.01999998092651 0.860000014305115 0.939999997615814 0.939999997615814 41486 0 0
19 2023-05-16 00:00:00+02:00 0.899999976158142 0.944000005722046 0.800000011920929 0.800000011920929 0.800000011920929 43583 0 0
20 2023-05-17 00:00:00+02:00 0.850000023841858 0.850000023841858 0.779999971389771 0.810000002384186 0.810000002384186 29984 0 0
21 2023-05-18 00:00:00+02:00 0.779999971389771 0.78600001335144 0.740000009536743 0.740000009536743 0.740000009536743 24679 0 0
22 2023-05-19 00:00:00+02:00 0.78600001335144 0.78600001335144 0.649999976158142 0.65200001001358 0.65200001001358 26732 0 0
23 2023-05-22 00:00:00+02:00 0.8299999833107 1.05999994277954 0.709999978542328 0.709999978542328 0.709999978542328 169538 0 0
24 2023-05-23 00:00:00+02:00 0.899999976158142 1.60800004005432 0.860000014305115 1.22000002861023 1.22000002861023 858471 0 0
25 2023-05-24 00:00:00+02:00 1.19400000572205 1.25999999046326 0.779999971389771 0.779999971389771 0.779999971389771 627823 0 0
26 2023-05-25 00:00:00+02:00 0.980000019073486 1.22000002861023 0.702000021934509 0.732999980449677 0.732999980449677 1068939 0 0
27 2023-05-26 00:00:00+02:00 0.660000026226044 0.72000002861023 0.602999985218048 0.611999988555908 0.611999988555908 631580 0 0
28 2023-05-29 00:00:00+02:00 0.620000004768372 0.75 0.578999996185303 0.600000023841858 0.600000023841858 586150 0 0
29 2023-05-30 00:00:00+02:00 0.610000014305115 0.634999990463257 0.497000008821487 0.497000008821487 0.497000008821487 552308 0 0
30 2023-05-31 00:00:00+02:00 0.458999991416931 0.469999998807907 0.374000012874603 0.379999995231628 0.379999995231628 899067 0 0

View File

@@ -0,0 +1,30 @@
Date,Open,High,Low,Close,Adj Close,Volume,Dividends,Stock Splits
2023-04-20 00:00:00+02:00,3.0,3.0,2.0,3.0,3.0,2076,0.0,0.0
2023-04-21 00:00:00+02:00,3.0,3.0,2.0,3.0,3.0,2136,0.0,0.0
2023-04-24 00:00:00+02:00,3.0,3.0,1.0,1.0,1.0,77147,0.0,0.0
2023-04-25 00:00:00+02:00,1.0,2.0,1.0,2.0,2.0,9625,0.0,0.0
2023-04-26 00:00:00+02:00,2.0,2.0,1.0,2.0,2.0,5028,0.0,0.0
2023-04-27 00:00:00+02:00,2.0,2.0,1.0,1.0,1.0,3235,0.0,0.0
2023-04-28 00:00:00+02:00,2.0,2.0,1.0,2.0,2.0,10944,0.0,0.0
2023-05-02 00:00:00+02:00,2.0,2.0,2.0,2.0,2.0,12220,0.0,0.0
2023-05-03 00:00:00+02:00,2.0,2.0,2.0,2.0,2.0,4683,0.0,0.0
2023-05-04 00:00:00+02:00,2.0,2.0,1.0,2.0,2.0,3368,0.0,0.0
2023-05-05 00:00:00+02:00,2.0,2.0,1.0,2.0,2.0,26069,0.0,0.0
2023-05-08 00:00:00+02:00,9.999999747378752e-05,0.00019999999494757503,9.999999747378752e-05,9.999999747378752e-05,9.999999747378752e-05,705399568,0.0,0.0
2023-05-09 00:00:00+02:00,1.0,2.0,1.0,1.0,1.0,14228,0.0,0.0
2023-05-10 00:00:00+02:00,1.0800000429153442,1.399999976158142,0.8799999952316284,1.0,1.0,81012,0.0,0.0001
2023-05-11 00:00:00+02:00,1.0399999618530273,1.0399999618530273,0.8500000238418579,1.0,1.0,40254,0.0,0.0
2023-05-12 00:00:00+02:00,0.949999988079071,1.100000023841858,0.949999988079071,1.0199999809265137,1.0199999809265137,35026,0.0,0.0
2023-05-15 00:00:00+02:00,0.949999988079071,1.0199999809265137,0.8600000143051147,0.9399999976158142,0.9399999976158142,41486,0.0,0.0
2023-05-16 00:00:00+02:00,0.8999999761581421,0.9440000057220459,0.800000011920929,0.800000011920929,0.800000011920929,43583,0.0,0.0
2023-05-17 00:00:00+02:00,0.8500000238418579,0.8500000238418579,0.7799999713897705,0.8100000023841858,0.8100000023841858,29984,0.0,0.0
2023-05-18 00:00:00+02:00,0.7799999713897705,0.7860000133514404,0.7400000095367432,0.7400000095367432,0.7400000095367432,24679,0.0,0.0
2023-05-19 00:00:00+02:00,0.7860000133514404,0.7860000133514404,0.6499999761581421,0.6520000100135803,0.6520000100135803,26732,0.0,0.0
2023-05-22 00:00:00+02:00,0.8299999833106995,1.059999942779541,0.7099999785423279,0.7099999785423279,0.7099999785423279,169538,0.0,0.0
2023-05-23 00:00:00+02:00,0.8999999761581421,1.6080000400543213,0.8600000143051147,1.2200000286102295,1.2200000286102295,858471,0.0,0.0
2023-05-24 00:00:00+02:00,1.194000005722046,1.2599999904632568,0.7799999713897705,0.7799999713897705,0.7799999713897705,627823,0.0,0.0
2023-05-25 00:00:00+02:00,0.9800000190734863,1.2200000286102295,0.7020000219345093,0.7329999804496765,0.7329999804496765,1068939,0.0,0.0
2023-05-26 00:00:00+02:00,0.6600000262260437,0.7200000286102295,0.6029999852180481,0.6119999885559082,0.6119999885559082,631580,0.0,0.0
2023-05-29 00:00:00+02:00,0.6200000047683716,0.75,0.5789999961853027,0.6000000238418579,0.6000000238418579,586150,0.0,0.0
2023-05-30 00:00:00+02:00,0.6100000143051147,0.6349999904632568,0.4970000088214874,0.4970000088214874,0.4970000088214874,552308,0.0,0.0
2023-05-31 00:00:00+02:00,0.45899999141693115,0.4699999988079071,0.37400001287460327,0.3799999952316284,0.3799999952316284,899067,0.0,0.0
1 Date Open High Low Close Adj Close Volume Dividends Stock Splits
2 2023-04-20 00:00:00+02:00 3.0 3.0 2.0 3.0 3.0 2076 0.0 0.0
3 2023-04-21 00:00:00+02:00 3.0 3.0 2.0 3.0 3.0 2136 0.0 0.0
4 2023-04-24 00:00:00+02:00 3.0 3.0 1.0 1.0 1.0 77147 0.0 0.0
5 2023-04-25 00:00:00+02:00 1.0 2.0 1.0 2.0 2.0 9625 0.0 0.0
6 2023-04-26 00:00:00+02:00 2.0 2.0 1.0 2.0 2.0 5028 0.0 0.0
7 2023-04-27 00:00:00+02:00 2.0 2.0 1.0 1.0 1.0 3235 0.0 0.0
8 2023-04-28 00:00:00+02:00 2.0 2.0 1.0 2.0 2.0 10944 0.0 0.0
9 2023-05-02 00:00:00+02:00 2.0 2.0 2.0 2.0 2.0 12220 0.0 0.0
10 2023-05-03 00:00:00+02:00 2.0 2.0 2.0 2.0 2.0 4683 0.0 0.0
11 2023-05-04 00:00:00+02:00 2.0 2.0 1.0 2.0 2.0 3368 0.0 0.0
12 2023-05-05 00:00:00+02:00 2.0 2.0 1.0 2.0 2.0 26069 0.0 0.0
13 2023-05-08 00:00:00+02:00 9.999999747378752e-05 0.00019999999494757503 9.999999747378752e-05 9.999999747378752e-05 9.999999747378752e-05 705399568 0.0 0.0
14 2023-05-09 00:00:00+02:00 1.0 2.0 1.0 1.0 1.0 14228 0.0 0.0
15 2023-05-10 00:00:00+02:00 1.0800000429153442 1.399999976158142 0.8799999952316284 1.0 1.0 81012 0.0 0.0001
16 2023-05-11 00:00:00+02:00 1.0399999618530273 1.0399999618530273 0.8500000238418579 1.0 1.0 40254 0.0 0.0
17 2023-05-12 00:00:00+02:00 0.949999988079071 1.100000023841858 0.949999988079071 1.0199999809265137 1.0199999809265137 35026 0.0 0.0
18 2023-05-15 00:00:00+02:00 0.949999988079071 1.0199999809265137 0.8600000143051147 0.9399999976158142 0.9399999976158142 41486 0.0 0.0
19 2023-05-16 00:00:00+02:00 0.8999999761581421 0.9440000057220459 0.800000011920929 0.800000011920929 0.800000011920929 43583 0.0 0.0
20 2023-05-17 00:00:00+02:00 0.8500000238418579 0.8500000238418579 0.7799999713897705 0.8100000023841858 0.8100000023841858 29984 0.0 0.0
21 2023-05-18 00:00:00+02:00 0.7799999713897705 0.7860000133514404 0.7400000095367432 0.7400000095367432 0.7400000095367432 24679 0.0 0.0
22 2023-05-19 00:00:00+02:00 0.7860000133514404 0.7860000133514404 0.6499999761581421 0.6520000100135803 0.6520000100135803 26732 0.0 0.0
23 2023-05-22 00:00:00+02:00 0.8299999833106995 1.059999942779541 0.7099999785423279 0.7099999785423279 0.7099999785423279 169538 0.0 0.0
24 2023-05-23 00:00:00+02:00 0.8999999761581421 1.6080000400543213 0.8600000143051147 1.2200000286102295 1.2200000286102295 858471 0.0 0.0
25 2023-05-24 00:00:00+02:00 1.194000005722046 1.2599999904632568 0.7799999713897705 0.7799999713897705 0.7799999713897705 627823 0.0 0.0
26 2023-05-25 00:00:00+02:00 0.9800000190734863 1.2200000286102295 0.7020000219345093 0.7329999804496765 0.7329999804496765 1068939 0.0 0.0
27 2023-05-26 00:00:00+02:00 0.6600000262260437 0.7200000286102295 0.6029999852180481 0.6119999885559082 0.6119999885559082 631580 0.0 0.0
28 2023-05-29 00:00:00+02:00 0.6200000047683716 0.75 0.5789999961853027 0.6000000238418579 0.6000000238418579 586150 0.0 0.0
29 2023-05-30 00:00:00+02:00 0.6100000143051147 0.6349999904632568 0.4970000088214874 0.4970000088214874 0.4970000088214874 552308 0.0 0.0
30 2023-05-31 00:00:00+02:00 0.45899999141693115 0.4699999988079071 0.37400001287460327 0.3799999952316284 0.3799999952316284 899067 0.0 0.0

View File

@@ -0,0 +1,85 @@
Date,Open,High,Low,Close,Adj Close,Volume,Dividends,Stock Splits
2021-12-13 00:00:00+00:00,393.999975585938,406.6,391.4,402.899916992188,291.232287597656,62714764.4736842,0,0
2021-12-20 00:00:00+00:00,393.999975585938,412.199990234375,392.502983398438,409.899997558594,296.292243652344,46596651.3157895,0,0
2021-12-27 00:00:00+00:00,409.899997558594,416.550971679688,408.387001953125,410.4,296.653642578125,10818482.8947368,0,0
2022-01-03 00:00:00+00:00,410.4,432.199995117188,410.4,432.099985351563,312.339265136719,44427327.6315789,0,0
2022-01-10 00:00:00+00:00,431.3,439.199982910156,429.099970703125,436.099912109375,315.230618896484,29091400,0,0
2022-01-17 00:00:00+00:00,437.999912109375,445.199965820313,426.999997558594,431.999975585938,312.267017822266,43787351.3157895,0,0
2022-01-24 00:00:00+00:00,430.099975585938,440.999973144531,420.999968261719,433.499982910156,313.351237792969,58487296.0526316,0,0
2022-01-31 00:00:00+00:00,436.199968261719,443.049987792969,432.099985351563,435.199916992188,314.580045166016,43335806.5789474,0,0
2022-02-07 00:00:00+00:00,437.899995117188,448.799992675781,436.051994628906,444.39998046875,321.230207519531,39644061.8421053,0,0
2022-02-14 00:00:00+00:00,437.699975585938,441.999978027344,426.699968261719,432.199995117188,312.411558837891,49972693.4210526,0,0
2022-02-21 00:00:00+00:00,435.499992675781,438.476999511719,408.29998046875,423.399970703125,306.050571289063,65719596.0526316,0,0
2022-02-28 00:00:00+00:00,415.099995117188,427.999909667969,386.199932861328,386.799945068359,279.594578857422,94057936.8421053,4.1875,0
2022-03-07 00:00:00+00:00,374.999952392578,417.299978027344,361.101981201172,409.599968261719,298.389248046875,71269101.3157895,0,0
2022-03-14 00:00:00+00:00,413.099985351563,426.699968261719,408.899992675781,422.399965820313,307.713929443359,55431927.6315789,0,0
2022-03-21 00:00:00+00:00,422.699995117188,442.7,422.399965820313,437.799985351563,318.932696533203,39896352.6315789,0,0
2022-03-28 00:00:00+01:00,442.49998046875,460.999978027344,440.097983398438,444.6,323.886403808594,56413515.7894737,0,0
2022-04-04 00:00:00+01:00,439.699985351563,445.399985351563,421.999973144531,425.799973144531,310.190817871094,49415836.8421053,19.342106,0
2022-04-11 00:00:00+01:00,425.39998046875,435.599909667969,420.799995117188,434.299968261719,327.211427001953,29875081.5789474,0,0
2022-04-18 00:00:00+01:00,434.299968261719,447.799987792969,433.599992675781,437.799985351563,329.848419189453,49288272.3684211,0,0
2022-04-25 00:00:00+01:00,430.699987792969,438.799990234375,423.999982910156,433.299916992188,326.457967529297,44656776.3157895,0,0
2022-05-02 00:00:00+01:00,433.299916992188,450.999975585938,414.499982910156,414.899975585938,312.595018310547,29538167.1052632,0,0
2022-05-09 00:00:00+01:00,413.199995117188,417.449992675781,368.282923583984,408.199970703125,307.547099609375,73989611.8421053,0,0
2022-05-16 00:00:00+01:00,384,423.600006103516,384,412.100006103516,310.485473632813,81938261,101.69,0.76
2022-05-23 00:00:00+01:00,416.100006103516,442.399993896484,341.915008544922,440.899993896484,409.764678955078,45432941,0,0
2022-05-30 00:00:00+01:00,442.700012207031,444.200012207031,426.600006103516,428.700012207031,398.426239013672,37906659,0,0
2022-06-06 00:00:00+01:00,425.299987792969,434.010009765625,405.200012207031,405.399993896484,376.771606445313,40648810,0,0
2022-06-13 00:00:00+01:00,402.5,420,399.799987792969,411.200012207031,382.162048339844,74196958,0,0
2022-06-20 00:00:00+01:00,412.5,421.899993896484,398.399993896484,411.5,382.440826416016,28679717,0,0
2022-06-27 00:00:00+01:00,413.100006103516,422.399993896484,397.399993896484,401.600006103516,373.239959716797,35468994,0,0
2022-07-04 00:00:00+01:00,405.399993896484,406.600006103516,382.299987792969,401.299987792969,372.961120605469,35304748,0,0
2022-07-11 00:00:00+01:00,394.799987792969,405.850006103516,383.399993896484,396.600006103516,368.593048095703,42308459,0,0
2022-07-18 00:00:00+01:00,392.5,399.700012207031,384.799987792969,391.700012207031,364.039093017578,36656839,0,0
2022-07-25 00:00:00+01:00,392.200012207031,400.799987792969,388.700012207031,396,368.035430908203,33124660,0,0
2022-08-01 00:00:00+01:00,396.399993896484,405.5,390.415008544922,402,373.611724853516,21753121,0,0
2022-08-08 00:00:00+01:00,406.600006103516,473.700012207031,403.299987792969,467.899993896484,434.858032226563,59155709,0,0
2022-08-15 00:00:00+01:00,468.100006103516,470.5,434,437,406.140106201172,36989620,10.3,0
2022-08-22 00:00:00+01:00,436.100006103516,436.869995117188,419.299987792969,420.5,399.780303955078,36492572,0,0
2022-08-29 00:00:00+01:00,420.5,426.600006103516,408.600006103516,426.600006103516,405.579742431641,29573657,0,0
2022-09-05 00:00:00+01:00,418.5,444.4169921875,416.100006103516,443.100006103516,421.266723632813,34375126,0,0
2022-09-12 00:00:00+01:00,444.649993896484,448.899993896484,435.200012207031,440.100006103516,418.414520263672,39085960,0,0
2022-09-19 00:00:00+01:00,440.100006103516,447.200012207031,419.299987792969,422.899993896484,402.062042236328,27982081,0,0
2022-09-26 00:00:00+01:00,421.200012207031,421.200012207031,373.31201171875,388.200012207031,369.071868896484,70408935,0,0
2022-10-03 00:00:00+01:00,382.899993896484,409.875,380.555999755859,400.700012207031,380.955932617188,37581751,0,0
2022-10-10 00:00:00+01:00,395.799987792969,404.470001220703,366.700012207031,394.299987792969,374.871276855469,52952323,0,0
2022-10-17 00:00:00+01:00,394.299987792969,414.799987792969,393,406.5,386.470123291016,26441475,0,0
2022-10-24 00:00:00+01:00,407.100006103516,418.227996826172,407.100006103516,413.299987792969,392.93505859375,26239756,0,0
2022-10-31 00:00:00+00:00,413.899993896484,430.200012207031,412,429.299987792969,408.146667480469,23168047,0,0
2022-11-07 00:00:00+00:00,427.299987792969,445.899993896484,420.652008056641,438.399993896484,416.798278808594,36709117,0,0
2022-11-14 00:00:00+00:00,438.299987792969,458.489990234375,435,455.100006103516,432.675415039063,29106506,0,0
2022-11-21 00:00:00+00:00,454.399993896484,461,450,456.600006103516,434.101501464844,21667730,0,0
2022-11-28 00:00:00+00:00,453.799987792969,456.899993896484,435.100006103516,444.799987792969,422.882934570313,33326204,0,0
2022-12-05 00:00:00+00:00,442.899993896484,450.25,441.299987792969,448,425.925262451172,29147089,0,0
2022-12-12 00:00:00+00:00,445.100006103516,451.299987792969,431.200012207031,436.100006103516,414.611633300781,46593233,0,0
2022-12-19 00:00:00+00:00,436,452.600006103516,433.600006103516,444,422.122344970703,20982140,0,0
2022-12-26 00:00:00+00:00,444,452.058013916016,442.399993896484,442.799987792969,420.981475830078,8249664,0,0
2023-01-02 00:00:00+00:00,445.899993896484,458.149993896484,443.299987792969,456,433.531066894531,28687622,0,0
2023-01-09 00:00:00+00:00,456,461.066009521484,435.799987792969,444.200012207031,422.3125,39237336,0,0
2023-01-16 00:00:00+00:00,444.299987792969,447.200012207031,434.399993896484,439,417.368713378906,35267336,0,0
2023-01-23 00:00:00+00:00,440,459.299987792969,439.5,457.399993896484,434.862091064453,37495012,0,0
2023-01-30 00:00:00+00:00,454.399993896484,459.399993896484,447.799987792969,450.299987792969,428.111907958984,48879358,0,0
2023-02-06 00:00:00+00:00,448,449.200012207031,436.299987792969,440,418.319458007813,38799772,0,0
2023-02-13 00:00:00+00:00,441.200012207031,450.299987792969,440,447.600006103516,425.544982910156,30251441,0,0
2023-02-20 00:00:00+00:00,448.5,450.799987792969,434.299987792969,440,418.319458007813,26764528,0,0
2023-02-27 00:00:00+00:00,442.899993896484,450.5,441.608001708984,447.200012207031,425.164703369141,29895454,0,0
2023-03-06 00:00:00+00:00,447.399993896484,467.299987792969,443.100006103516,449.700012207031,427.54150390625,82322819,0,0
2023-03-13 00:00:00+00:00,450,451.417999267578,400.68701171875,402.200012207031,382.382019042969,85158023,0,0
2023-03-20 00:00:00+00:00,396.200012207031,425.399993896484,383.496002197266,408.299987792969,388.181427001953,60152666,0,0
2023-03-27 00:00:00+01:00,416,422.049987792969,399.549987792969,404.200012207031,384.283477783203,81534829,20.7,0
2023-04-03 00:00:00+01:00,405,434.100006103516,404.399993896484,417.100006103516,417.100006103516,43217151,0,0
2023-04-10 00:00:00+01:00,419.100006103516,426.700012207031,419.100006103516,421.700012207031,421.700012207031,32435695,0,0
2023-04-17 00:00:00+01:00,423.700012207031,427.635009765625,415.399993896484,420.299987792969,420.299987792969,37715986,0,0
2023-04-24 00:00:00+01:00,418.100006103516,423,415.299987792969,423,423,34331974,0,0
2023-05-01 00:00:00+01:00,423.399993896484,426.100006103516,406.399993896484,414.600006103516,414.600006103516,40446519,0,0
2023-05-08 00:00:00+01:00,414.600006103516,419.100006103516,408,412.700012207031,412.700012207031,36950836,0,0
2023-05-15 00:00:00+01:00,414,418.399993896484,407.399993896484,413.5,413.5,53109487,0,0
2023-05-22 00:00:00+01:00,413.600006103516,424,394.700012207031,401.299987792969,401.299987792969,64363368,0,0
2023-05-29 00:00:00+01:00,401.299987792969,409.477996826172,392.700012207031,409.100006103516,409.100006103516,47587959,0,0
2023-06-05 00:00:00+01:00,406.299987792969,410.700012207031,400.100006103516,400.899993896484,400.899993896484,22494985,0,0
2023-06-12 00:00:00+01:00,404.100006103516,406,394.5,396,396,41531163,0,0
2023-06-19 00:00:00+01:00,394,399.899993896484,380.720001220703,386.200012207031,386.200012207031,40439880,0,0
2023-06-26 00:00:00+01:00,387.200012207031,397,382.899993896484,395.200012207031,395.200012207031,27701915,0,0
2023-07-03 00:00:00+01:00,396.5,399.799987792969,380.100006103516,381.799987792969,381.799987792969,26005305,0,0
2023-07-10 00:00:00+01:00,380,392.299987792969,379.403991699219,386,386,29789300,0,0
2023-07-17 00:00:00+01:00,385,389.5,384.251007080078,387.100006103516,387.100006103516,0,0,0
1 Date Open High Low Close Adj Close Volume Dividends Stock Splits
2 2021-12-13 00:00:00+00:00 393.999975585938 406.6 391.4 402.899916992188 291.232287597656 62714764.4736842 0 0
3 2021-12-20 00:00:00+00:00 393.999975585938 412.199990234375 392.502983398438 409.899997558594 296.292243652344 46596651.3157895 0 0
4 2021-12-27 00:00:00+00:00 409.899997558594 416.550971679688 408.387001953125 410.4 296.653642578125 10818482.8947368 0 0
5 2022-01-03 00:00:00+00:00 410.4 432.199995117188 410.4 432.099985351563 312.339265136719 44427327.6315789 0 0
6 2022-01-10 00:00:00+00:00 431.3 439.199982910156 429.099970703125 436.099912109375 315.230618896484 29091400 0 0
7 2022-01-17 00:00:00+00:00 437.999912109375 445.199965820313 426.999997558594 431.999975585938 312.267017822266 43787351.3157895 0 0
8 2022-01-24 00:00:00+00:00 430.099975585938 440.999973144531 420.999968261719 433.499982910156 313.351237792969 58487296.0526316 0 0
9 2022-01-31 00:00:00+00:00 436.199968261719 443.049987792969 432.099985351563 435.199916992188 314.580045166016 43335806.5789474 0 0
10 2022-02-07 00:00:00+00:00 437.899995117188 448.799992675781 436.051994628906 444.39998046875 321.230207519531 39644061.8421053 0 0
11 2022-02-14 00:00:00+00:00 437.699975585938 441.999978027344 426.699968261719 432.199995117188 312.411558837891 49972693.4210526 0 0
12 2022-02-21 00:00:00+00:00 435.499992675781 438.476999511719 408.29998046875 423.399970703125 306.050571289063 65719596.0526316 0 0
13 2022-02-28 00:00:00+00:00 415.099995117188 427.999909667969 386.199932861328 386.799945068359 279.594578857422 94057936.8421053 4.1875 0
14 2022-03-07 00:00:00+00:00 374.999952392578 417.299978027344 361.101981201172 409.599968261719 298.389248046875 71269101.3157895 0 0
15 2022-03-14 00:00:00+00:00 413.099985351563 426.699968261719 408.899992675781 422.399965820313 307.713929443359 55431927.6315789 0 0
16 2022-03-21 00:00:00+00:00 422.699995117188 442.7 422.399965820313 437.799985351563 318.932696533203 39896352.6315789 0 0
17 2022-03-28 00:00:00+01:00 442.49998046875 460.999978027344 440.097983398438 444.6 323.886403808594 56413515.7894737 0 0
18 2022-04-04 00:00:00+01:00 439.699985351563 445.399985351563 421.999973144531 425.799973144531 310.190817871094 49415836.8421053 19.342106 0
19 2022-04-11 00:00:00+01:00 425.39998046875 435.599909667969 420.799995117188 434.299968261719 327.211427001953 29875081.5789474 0 0
20 2022-04-18 00:00:00+01:00 434.299968261719 447.799987792969 433.599992675781 437.799985351563 329.848419189453 49288272.3684211 0 0
21 2022-04-25 00:00:00+01:00 430.699987792969 438.799990234375 423.999982910156 433.299916992188 326.457967529297 44656776.3157895 0 0
22 2022-05-02 00:00:00+01:00 433.299916992188 450.999975585938 414.499982910156 414.899975585938 312.595018310547 29538167.1052632 0 0
23 2022-05-09 00:00:00+01:00 413.199995117188 417.449992675781 368.282923583984 408.199970703125 307.547099609375 73989611.8421053 0 0
24 2022-05-16 00:00:00+01:00 384 423.600006103516 384 412.100006103516 310.485473632813 81938261 101.69 0.76
25 2022-05-23 00:00:00+01:00 416.100006103516 442.399993896484 341.915008544922 440.899993896484 409.764678955078 45432941 0 0
26 2022-05-30 00:00:00+01:00 442.700012207031 444.200012207031 426.600006103516 428.700012207031 398.426239013672 37906659 0 0
27 2022-06-06 00:00:00+01:00 425.299987792969 434.010009765625 405.200012207031 405.399993896484 376.771606445313 40648810 0 0
28 2022-06-13 00:00:00+01:00 402.5 420 399.799987792969 411.200012207031 382.162048339844 74196958 0 0
29 2022-06-20 00:00:00+01:00 412.5 421.899993896484 398.399993896484 411.5 382.440826416016 28679717 0 0
30 2022-06-27 00:00:00+01:00 413.100006103516 422.399993896484 397.399993896484 401.600006103516 373.239959716797 35468994 0 0
31 2022-07-04 00:00:00+01:00 405.399993896484 406.600006103516 382.299987792969 401.299987792969 372.961120605469 35304748 0 0
32 2022-07-11 00:00:00+01:00 394.799987792969 405.850006103516 383.399993896484 396.600006103516 368.593048095703 42308459 0 0
33 2022-07-18 00:00:00+01:00 392.5 399.700012207031 384.799987792969 391.700012207031 364.039093017578 36656839 0 0
34 2022-07-25 00:00:00+01:00 392.200012207031 400.799987792969 388.700012207031 396 368.035430908203 33124660 0 0
35 2022-08-01 00:00:00+01:00 396.399993896484 405.5 390.415008544922 402 373.611724853516 21753121 0 0
36 2022-08-08 00:00:00+01:00 406.600006103516 473.700012207031 403.299987792969 467.899993896484 434.858032226563 59155709 0 0
37 2022-08-15 00:00:00+01:00 468.100006103516 470.5 434 437 406.140106201172 36989620 10.3 0
38 2022-08-22 00:00:00+01:00 436.100006103516 436.869995117188 419.299987792969 420.5 399.780303955078 36492572 0 0
39 2022-08-29 00:00:00+01:00 420.5 426.600006103516 408.600006103516 426.600006103516 405.579742431641 29573657 0 0
40 2022-09-05 00:00:00+01:00 418.5 444.4169921875 416.100006103516 443.100006103516 421.266723632813 34375126 0 0
41 2022-09-12 00:00:00+01:00 444.649993896484 448.899993896484 435.200012207031 440.100006103516 418.414520263672 39085960 0 0
42 2022-09-19 00:00:00+01:00 440.100006103516 447.200012207031 419.299987792969 422.899993896484 402.062042236328 27982081 0 0
43 2022-09-26 00:00:00+01:00 421.200012207031 421.200012207031 373.31201171875 388.200012207031 369.071868896484 70408935 0 0
44 2022-10-03 00:00:00+01:00 382.899993896484 409.875 380.555999755859 400.700012207031 380.955932617188 37581751 0 0
45 2022-10-10 00:00:00+01:00 395.799987792969 404.470001220703 366.700012207031 394.299987792969 374.871276855469 52952323 0 0
46 2022-10-17 00:00:00+01:00 394.299987792969 414.799987792969 393 406.5 386.470123291016 26441475 0 0
47 2022-10-24 00:00:00+01:00 407.100006103516 418.227996826172 407.100006103516 413.299987792969 392.93505859375 26239756 0 0
48 2022-10-31 00:00:00+00:00 413.899993896484 430.200012207031 412 429.299987792969 408.146667480469 23168047 0 0
49 2022-11-07 00:00:00+00:00 427.299987792969 445.899993896484 420.652008056641 438.399993896484 416.798278808594 36709117 0 0
50 2022-11-14 00:00:00+00:00 438.299987792969 458.489990234375 435 455.100006103516 432.675415039063 29106506 0 0
51 2022-11-21 00:00:00+00:00 454.399993896484 461 450 456.600006103516 434.101501464844 21667730 0 0
52 2022-11-28 00:00:00+00:00 453.799987792969 456.899993896484 435.100006103516 444.799987792969 422.882934570313 33326204 0 0
53 2022-12-05 00:00:00+00:00 442.899993896484 450.25 441.299987792969 448 425.925262451172 29147089 0 0
54 2022-12-12 00:00:00+00:00 445.100006103516 451.299987792969 431.200012207031 436.100006103516 414.611633300781 46593233 0 0
55 2022-12-19 00:00:00+00:00 436 452.600006103516 433.600006103516 444 422.122344970703 20982140 0 0
56 2022-12-26 00:00:00+00:00 444 452.058013916016 442.399993896484 442.799987792969 420.981475830078 8249664 0 0
57 2023-01-02 00:00:00+00:00 445.899993896484 458.149993896484 443.299987792969 456 433.531066894531 28687622 0 0
58 2023-01-09 00:00:00+00:00 456 461.066009521484 435.799987792969 444.200012207031 422.3125 39237336 0 0
59 2023-01-16 00:00:00+00:00 444.299987792969 447.200012207031 434.399993896484 439 417.368713378906 35267336 0 0
60 2023-01-23 00:00:00+00:00 440 459.299987792969 439.5 457.399993896484 434.862091064453 37495012 0 0
61 2023-01-30 00:00:00+00:00 454.399993896484 459.399993896484 447.799987792969 450.299987792969 428.111907958984 48879358 0 0
62 2023-02-06 00:00:00+00:00 448 449.200012207031 436.299987792969 440 418.319458007813 38799772 0 0
63 2023-02-13 00:00:00+00:00 441.200012207031 450.299987792969 440 447.600006103516 425.544982910156 30251441 0 0
64 2023-02-20 00:00:00+00:00 448.5 450.799987792969 434.299987792969 440 418.319458007813 26764528 0 0
65 2023-02-27 00:00:00+00:00 442.899993896484 450.5 441.608001708984 447.200012207031 425.164703369141 29895454 0 0
66 2023-03-06 00:00:00+00:00 447.399993896484 467.299987792969 443.100006103516 449.700012207031 427.54150390625 82322819 0 0
67 2023-03-13 00:00:00+00:00 450 451.417999267578 400.68701171875 402.200012207031 382.382019042969 85158023 0 0
68 2023-03-20 00:00:00+00:00 396.200012207031 425.399993896484 383.496002197266 408.299987792969 388.181427001953 60152666 0 0
69 2023-03-27 00:00:00+01:00 416 422.049987792969 399.549987792969 404.200012207031 384.283477783203 81534829 20.7 0
70 2023-04-03 00:00:00+01:00 405 434.100006103516 404.399993896484 417.100006103516 417.100006103516 43217151 0 0
71 2023-04-10 00:00:00+01:00 419.100006103516 426.700012207031 419.100006103516 421.700012207031 421.700012207031 32435695 0 0
72 2023-04-17 00:00:00+01:00 423.700012207031 427.635009765625 415.399993896484 420.299987792969 420.299987792969 37715986 0 0
73 2023-04-24 00:00:00+01:00 418.100006103516 423 415.299987792969 423 423 34331974 0 0
74 2023-05-01 00:00:00+01:00 423.399993896484 426.100006103516 406.399993896484 414.600006103516 414.600006103516 40446519 0 0
75 2023-05-08 00:00:00+01:00 414.600006103516 419.100006103516 408 412.700012207031 412.700012207031 36950836 0 0
76 2023-05-15 00:00:00+01:00 414 418.399993896484 407.399993896484 413.5 413.5 53109487 0 0
77 2023-05-22 00:00:00+01:00 413.600006103516 424 394.700012207031 401.299987792969 401.299987792969 64363368 0 0
78 2023-05-29 00:00:00+01:00 401.299987792969 409.477996826172 392.700012207031 409.100006103516 409.100006103516 47587959 0 0
79 2023-06-05 00:00:00+01:00 406.299987792969 410.700012207031 400.100006103516 400.899993896484 400.899993896484 22494985 0 0
80 2023-06-12 00:00:00+01:00 404.100006103516 406 394.5 396 396 41531163 0 0
81 2023-06-19 00:00:00+01:00 394 399.899993896484 380.720001220703 386.200012207031 386.200012207031 40439880 0 0
82 2023-06-26 00:00:00+01:00 387.200012207031 397 382.899993896484 395.200012207031 395.200012207031 27701915 0 0
83 2023-07-03 00:00:00+01:00 396.5 399.799987792969 380.100006103516 381.799987792969 381.799987792969 26005305 0 0
84 2023-07-10 00:00:00+01:00 380 392.299987792969 379.403991699219 386 386 29789300 0 0
85 2023-07-17 00:00:00+01:00 385 389.5 384.251007080078 387.100006103516 387.100006103516 0 0 0

View File

@@ -0,0 +1,85 @@
Date,Open,High,Low,Close,Adj Close,Volume,Dividends,Stock Splits
2021-12-13 00:00:00+00:00,518.4210205078125,535.0,515.0,530.1314697265625,383.20037841796875,47663221,0.0,0.0
2021-12-20 00:00:00+00:00,518.4210205078125,542.368408203125,516.4512939453125,539.3421020507812,389.85821533203125,35413455,0.0,0.0
2021-12-27 00:00:00+00:00,539.3421020507812,548.0933837890625,537.351318359375,540.0,390.333740234375,8222047,0.0,0.0
2022-01-03 00:00:00+00:00,540.0,568.6842041015625,540.0,568.5526123046875,410.97271728515625,33764769,0.0,0.0
2022-01-10 00:00:00+00:00,567.5,577.8947143554688,564.605224609375,573.815673828125,414.7771301269531,22109464,0.0,0.0
2022-01-17 00:00:00+00:00,576.315673828125,585.7894287109375,561.8421020507812,568.4210205078125,410.8776550292969,33278387,0.0,0.0
2022-01-24 00:00:00+00:00,565.9210205078125,580.2631225585938,553.9473266601562,570.3947143554688,412.30426025390625,44450345,0.0,0.0
2022-01-31 00:00:00+00:00,573.9473266601562,582.9605102539062,568.5526123046875,572.6314697265625,413.9211120605469,32935213,0.0,0.0
2022-02-07 00:00:00+00:00,576.1842041015625,590.5263061523438,573.7526245117188,584.73681640625,422.67132568359375,30129487,0.0,0.0
2022-02-14 00:00:00+00:00,575.9210205078125,581.5789184570312,561.4473266601562,568.6842041015625,411.0678405761719,37979247,0.0,0.0
2022-02-21 00:00:00+00:00,573.0263061523438,576.9434204101562,537.23681640625,557.105224609375,402.6981201171875,49946893,0.0,0.0
2022-02-28 00:00:00+00:00,546.1842041015625,563.1577758789062,508.1578063964844,508.9472961425781,367.8876037597656,71484032,4.1875,0.0
2022-03-07 00:00:00+00:00,493.4209899902344,549.0789184570312,475.1341857910156,538.9473266601562,392.617431640625,54164517,0.0,0.0
2022-03-14 00:00:00+00:00,543.5526123046875,561.4473266601562,538.0263061523438,555.7894287109375,404.8867492675781,42128265,0.0,0.0
2022-03-21 00:00:00+00:00,556.1842041015625,582.5,555.7894287109375,576.0526123046875,419.6482849121094,30321228,0.0,0.0
2022-03-28 00:00:00+01:00,582.23681640625,606.5789184570312,579.0762939453125,585.0,426.16632080078125,42874272,0.0,0.0
2022-04-04 00:00:00+01:00,578.5526123046875,586.0526123046875,555.2631225585938,560.2631225585938,408.14581298828125,37556036,19.342106,0.0
2022-04-11 00:00:00+01:00,559.73681640625,573.1577758789062,553.6842041015625,571.4473266601562,430.5413513183594,22705062,0.0,0.0
2022-04-18 00:00:00+01:00,571.4473266601562,589.2105102539062,570.5263061523438,576.0526123046875,434.0110778808594,37459087,0.0,0.0
2022-04-25 00:00:00+01:00,566.7105102539062,577.368408203125,557.8947143554688,570.1314697265625,429.5499572753906,33939150,0.0,0.0
2022-05-02 00:00:00+01:00,570.1314697265625,593.4210205078125,545.3947143554688,545.9210205078125,411.3092346191406,22449007,0.0,0.0
2022-05-09 00:00:00+01:00,543.6842041015625,549.2763061523438,484.5827941894531,537.105224609375,404.667236328125,56232105,0.0,0.0
2022-05-16 00:00:00+01:00,384.0,423.6000061035156,384.0,412.1000061035156,310.4854736328125,81938261,101.69,0.76
2022-05-23 00:00:00+01:00,416.1000061035156,442.3999938964844,341.9150085449219,440.8999938964844,409.7646789550781,45432941,0.0,0.0
2022-05-30 00:00:00+01:00,442.70001220703125,444.20001220703125,426.6000061035156,428.70001220703125,398.4262390136719,37906659,0.0,0.0
2022-06-06 00:00:00+01:00,425.29998779296875,434.010009765625,405.20001220703125,405.3999938964844,376.7716064453125,40648810,0.0,0.0
2022-06-13 00:00:00+01:00,402.5,420.0,399.79998779296875,411.20001220703125,382.16204833984375,74196958,0.0,0.0
2022-06-20 00:00:00+01:00,412.5,421.8999938964844,398.3999938964844,411.5,382.4408264160156,28679717,0.0,0.0
2022-06-27 00:00:00+01:00,413.1000061035156,422.3999938964844,397.3999938964844,401.6000061035156,373.2399597167969,35468994,0.0,0.0
2022-07-04 00:00:00+01:00,405.3999938964844,406.6000061035156,382.29998779296875,401.29998779296875,372.96112060546875,35304748,0.0,0.0
2022-07-11 00:00:00+01:00,394.79998779296875,405.8500061035156,383.3999938964844,396.6000061035156,368.5930480957031,42308459,0.0,0.0
2022-07-18 00:00:00+01:00,392.5,399.70001220703125,384.79998779296875,391.70001220703125,364.0390930175781,36656839,0.0,0.0
2022-07-25 00:00:00+01:00,392.20001220703125,400.79998779296875,388.70001220703125,396.0,368.0354309082031,33124660,0.0,0.0
2022-08-01 00:00:00+01:00,396.3999938964844,405.5,390.4150085449219,402.0,373.6117248535156,21753121,0.0,0.0
2022-08-08 00:00:00+01:00,406.6000061035156,473.70001220703125,403.29998779296875,467.8999938964844,434.8580322265625,59155709,0.0,0.0
2022-08-15 00:00:00+01:00,468.1000061035156,470.5,434.0,437.0,406.1401062011719,36989620,10.3,0.0
2022-08-22 00:00:00+01:00,436.1000061035156,436.8699951171875,419.29998779296875,420.5,399.7803039550781,36492572,0.0,0.0
2022-08-29 00:00:00+01:00,420.5,426.6000061035156,408.6000061035156,426.6000061035156,405.5797424316406,29573657,0.0,0.0
2022-09-05 00:00:00+01:00,418.5,444.4169921875,416.1000061035156,443.1000061035156,421.2667236328125,34375126,0.0,0.0
2022-09-12 00:00:00+01:00,444.6499938964844,448.8999938964844,435.20001220703125,440.1000061035156,418.4145202636719,39085960,0.0,0.0
2022-09-19 00:00:00+01:00,440.1000061035156,447.20001220703125,419.29998779296875,422.8999938964844,402.0620422363281,27982081,0.0,0.0
2022-09-26 00:00:00+01:00,421.20001220703125,421.20001220703125,373.31201171875,388.20001220703125,369.0718688964844,70408935,0.0,0.0
2022-10-03 00:00:00+01:00,382.8999938964844,409.875,380.5559997558594,400.70001220703125,380.9559326171875,37581751,0.0,0.0
2022-10-10 00:00:00+01:00,395.79998779296875,404.4700012207031,366.70001220703125,394.29998779296875,374.87127685546875,52952323,0.0,0.0
2022-10-17 00:00:00+01:00,394.29998779296875,414.79998779296875,393.0,406.5,386.4701232910156,26441475,0.0,0.0
2022-10-24 00:00:00+01:00,407.1000061035156,418.2279968261719,407.1000061035156,413.29998779296875,392.93505859375,26239756,0.0,0.0
2022-10-31 00:00:00+00:00,413.8999938964844,430.20001220703125,412.0,429.29998779296875,408.14666748046875,23168047,0.0,0.0
2022-11-07 00:00:00+00:00,427.29998779296875,445.8999938964844,420.6520080566406,438.3999938964844,416.79827880859375,36709117,0.0,0.0
2022-11-14 00:00:00+00:00,438.29998779296875,458.489990234375,435.0,455.1000061035156,432.6754150390625,29106506,0.0,0.0
2022-11-21 00:00:00+00:00,454.3999938964844,461.0,450.0,456.6000061035156,434.10150146484375,21667730,0.0,0.0
2022-11-28 00:00:00+00:00,453.79998779296875,456.8999938964844,435.1000061035156,444.79998779296875,422.8829345703125,33326204,0.0,0.0
2022-12-05 00:00:00+00:00,442.8999938964844,450.25,441.29998779296875,448.0,425.9252624511719,29147089,0.0,0.0
2022-12-12 00:00:00+00:00,445.1000061035156,451.29998779296875,431.20001220703125,436.1000061035156,414.61163330078125,46593233,0.0,0.0
2022-12-19 00:00:00+00:00,436.0,452.6000061035156,433.6000061035156,444.0,422.1223449707031,20982140,0.0,0.0
2022-12-26 00:00:00+00:00,444.0,452.0580139160156,442.3999938964844,442.79998779296875,420.9814758300781,8249664,0.0,0.0
2023-01-02 00:00:00+00:00,445.8999938964844,458.1499938964844,443.29998779296875,456.0,433.53106689453125,28687622,0.0,0.0
2023-01-09 00:00:00+00:00,456.0,461.0660095214844,435.79998779296875,444.20001220703125,422.3125,39237336,0.0,0.0
2023-01-16 00:00:00+00:00,444.29998779296875,447.20001220703125,434.3999938964844,439.0,417.36871337890625,35267336,0.0,0.0
2023-01-23 00:00:00+00:00,440.0,459.29998779296875,439.5,457.3999938964844,434.8620910644531,37495012,0.0,0.0
2023-01-30 00:00:00+00:00,454.3999938964844,459.3999938964844,447.79998779296875,450.29998779296875,428.1119079589844,48879358,0.0,0.0
2023-02-06 00:00:00+00:00,448.0,449.20001220703125,436.29998779296875,440.0,418.3194580078125,38799772,0.0,0.0
2023-02-13 00:00:00+00:00,441.20001220703125,450.29998779296875,440.0,447.6000061035156,425.54498291015625,30251441,0.0,0.0
2023-02-20 00:00:00+00:00,448.5,450.79998779296875,434.29998779296875,440.0,418.3194580078125,26764528,0.0,0.0
2023-02-27 00:00:00+00:00,442.8999938964844,450.5,441.6080017089844,447.20001220703125,425.1647033691406,29895454,0.0,0.0
2023-03-06 00:00:00+00:00,447.3999938964844,467.29998779296875,443.1000061035156,449.70001220703125,427.54150390625,82322819,0.0,0.0
2023-03-13 00:00:00+00:00,450.0,451.4179992675781,400.68701171875,402.20001220703125,382.38201904296875,85158023,0.0,0.0
2023-03-20 00:00:00+00:00,396.20001220703125,425.3999938964844,383.4960021972656,408.29998779296875,388.1814270019531,60152666,0.0,0.0
2023-03-27 00:00:00+01:00,416.0,422.04998779296875,399.54998779296875,404.20001220703125,384.2834777832031,81534829,20.7,0.0
2023-04-03 00:00:00+01:00,405.0,434.1000061035156,404.3999938964844,417.1000061035156,417.1000061035156,43217151,0.0,0.0
2023-04-10 00:00:00+01:00,419.1000061035156,426.70001220703125,419.1000061035156,421.70001220703125,421.70001220703125,32435695,0.0,0.0
2023-04-17 00:00:00+01:00,423.70001220703125,427.635009765625,415.3999938964844,420.29998779296875,420.29998779296875,37715986,0.0,0.0
2023-04-24 00:00:00+01:00,418.1000061035156,423.0,415.29998779296875,423.0,423.0,34331974,0.0,0.0
2023-05-01 00:00:00+01:00,423.3999938964844,426.1000061035156,406.3999938964844,414.6000061035156,414.6000061035156,40446519,0.0,0.0
2023-05-08 00:00:00+01:00,414.6000061035156,419.1000061035156,408.0,412.70001220703125,412.70001220703125,36950836,0.0,0.0
2023-05-15 00:00:00+01:00,414.0,418.3999938964844,407.3999938964844,413.5,413.5,53109487,0.0,0.0
2023-05-22 00:00:00+01:00,413.6000061035156,424.0,394.70001220703125,401.29998779296875,401.29998779296875,64363368,0.0,0.0
2023-05-29 00:00:00+01:00,401.29998779296875,409.4779968261719,392.70001220703125,409.1000061035156,409.1000061035156,47587959,0.0,0.0
2023-06-05 00:00:00+01:00,406.29998779296875,410.70001220703125,400.1000061035156,400.8999938964844,400.8999938964844,22494985,0.0,0.0
2023-06-12 00:00:00+01:00,404.1000061035156,406.0,394.5,396.0,396.0,41531163,0.0,0.0
2023-06-19 00:00:00+01:00,394.0,399.8999938964844,380.7200012207031,386.20001220703125,386.20001220703125,40439880,0.0,0.0
2023-06-26 00:00:00+01:00,387.20001220703125,397.0,382.8999938964844,395.20001220703125,395.20001220703125,27701915,0.0,0.0
2023-07-03 00:00:00+01:00,396.5,399.79998779296875,380.1000061035156,381.79998779296875,381.79998779296875,26005305,0.0,0.0
2023-07-10 00:00:00+01:00,380.0,392.29998779296875,379.40399169921875,386.0,386.0,29789300,0.0,0.0
2023-07-17 00:00:00+01:00,385.0,389.5,384.2510070800781,387.1000061035156,387.1000061035156,0,0.0,0.0
1 Date Open High Low Close Adj Close Volume Dividends Stock Splits
2 2021-12-13 00:00:00+00:00 518.4210205078125 535.0 515.0 530.1314697265625 383.20037841796875 47663221 0.0 0.0
3 2021-12-20 00:00:00+00:00 518.4210205078125 542.368408203125 516.4512939453125 539.3421020507812 389.85821533203125 35413455 0.0 0.0
4 2021-12-27 00:00:00+00:00 539.3421020507812 548.0933837890625 537.351318359375 540.0 390.333740234375 8222047 0.0 0.0
5 2022-01-03 00:00:00+00:00 540.0 568.6842041015625 540.0 568.5526123046875 410.97271728515625 33764769 0.0 0.0
6 2022-01-10 00:00:00+00:00 567.5 577.8947143554688 564.605224609375 573.815673828125 414.7771301269531 22109464 0.0 0.0
7 2022-01-17 00:00:00+00:00 576.315673828125 585.7894287109375 561.8421020507812 568.4210205078125 410.8776550292969 33278387 0.0 0.0
8 2022-01-24 00:00:00+00:00 565.9210205078125 580.2631225585938 553.9473266601562 570.3947143554688 412.30426025390625 44450345 0.0 0.0
9 2022-01-31 00:00:00+00:00 573.9473266601562 582.9605102539062 568.5526123046875 572.6314697265625 413.9211120605469 32935213 0.0 0.0
10 2022-02-07 00:00:00+00:00 576.1842041015625 590.5263061523438 573.7526245117188 584.73681640625 422.67132568359375 30129487 0.0 0.0
11 2022-02-14 00:00:00+00:00 575.9210205078125 581.5789184570312 561.4473266601562 568.6842041015625 411.0678405761719 37979247 0.0 0.0
12 2022-02-21 00:00:00+00:00 573.0263061523438 576.9434204101562 537.23681640625 557.105224609375 402.6981201171875 49946893 0.0 0.0
13 2022-02-28 00:00:00+00:00 546.1842041015625 563.1577758789062 508.1578063964844 508.9472961425781 367.8876037597656 71484032 4.1875 0.0
14 2022-03-07 00:00:00+00:00 493.4209899902344 549.0789184570312 475.1341857910156 538.9473266601562 392.617431640625 54164517 0.0 0.0
15 2022-03-14 00:00:00+00:00 543.5526123046875 561.4473266601562 538.0263061523438 555.7894287109375 404.8867492675781 42128265 0.0 0.0
16 2022-03-21 00:00:00+00:00 556.1842041015625 582.5 555.7894287109375 576.0526123046875 419.6482849121094 30321228 0.0 0.0
17 2022-03-28 00:00:00+01:00 582.23681640625 606.5789184570312 579.0762939453125 585.0 426.16632080078125 42874272 0.0 0.0
18 2022-04-04 00:00:00+01:00 578.5526123046875 586.0526123046875 555.2631225585938 560.2631225585938 408.14581298828125 37556036 19.342106 0.0
19 2022-04-11 00:00:00+01:00 559.73681640625 573.1577758789062 553.6842041015625 571.4473266601562 430.5413513183594 22705062 0.0 0.0
20 2022-04-18 00:00:00+01:00 571.4473266601562 589.2105102539062 570.5263061523438 576.0526123046875 434.0110778808594 37459087 0.0 0.0
21 2022-04-25 00:00:00+01:00 566.7105102539062 577.368408203125 557.8947143554688 570.1314697265625 429.5499572753906 33939150 0.0 0.0
22 2022-05-02 00:00:00+01:00 570.1314697265625 593.4210205078125 545.3947143554688 545.9210205078125 411.3092346191406 22449007 0.0 0.0
23 2022-05-09 00:00:00+01:00 543.6842041015625 549.2763061523438 484.5827941894531 537.105224609375 404.667236328125 56232105 0.0 0.0
24 2022-05-16 00:00:00+01:00 384.0 423.6000061035156 384.0 412.1000061035156 310.4854736328125 81938261 101.69 0.76
25 2022-05-23 00:00:00+01:00 416.1000061035156 442.3999938964844 341.9150085449219 440.8999938964844 409.7646789550781 45432941 0.0 0.0
26 2022-05-30 00:00:00+01:00 442.70001220703125 444.20001220703125 426.6000061035156 428.70001220703125 398.4262390136719 37906659 0.0 0.0
27 2022-06-06 00:00:00+01:00 425.29998779296875 434.010009765625 405.20001220703125 405.3999938964844 376.7716064453125 40648810 0.0 0.0
28 2022-06-13 00:00:00+01:00 402.5 420.0 399.79998779296875 411.20001220703125 382.16204833984375 74196958 0.0 0.0
29 2022-06-20 00:00:00+01:00 412.5 421.8999938964844 398.3999938964844 411.5 382.4408264160156 28679717 0.0 0.0
30 2022-06-27 00:00:00+01:00 413.1000061035156 422.3999938964844 397.3999938964844 401.6000061035156 373.2399597167969 35468994 0.0 0.0
31 2022-07-04 00:00:00+01:00 405.3999938964844 406.6000061035156 382.29998779296875 401.29998779296875 372.96112060546875 35304748 0.0 0.0
32 2022-07-11 00:00:00+01:00 394.79998779296875 405.8500061035156 383.3999938964844 396.6000061035156 368.5930480957031 42308459 0.0 0.0
33 2022-07-18 00:00:00+01:00 392.5 399.70001220703125 384.79998779296875 391.70001220703125 364.0390930175781 36656839 0.0 0.0
34 2022-07-25 00:00:00+01:00 392.20001220703125 400.79998779296875 388.70001220703125 396.0 368.0354309082031 33124660 0.0 0.0
35 2022-08-01 00:00:00+01:00 396.3999938964844 405.5 390.4150085449219 402.0 373.6117248535156 21753121 0.0 0.0
36 2022-08-08 00:00:00+01:00 406.6000061035156 473.70001220703125 403.29998779296875 467.8999938964844 434.8580322265625 59155709 0.0 0.0
37 2022-08-15 00:00:00+01:00 468.1000061035156 470.5 434.0 437.0 406.1401062011719 36989620 10.3 0.0
38 2022-08-22 00:00:00+01:00 436.1000061035156 436.8699951171875 419.29998779296875 420.5 399.7803039550781 36492572 0.0 0.0
39 2022-08-29 00:00:00+01:00 420.5 426.6000061035156 408.6000061035156 426.6000061035156 405.5797424316406 29573657 0.0 0.0
40 2022-09-05 00:00:00+01:00 418.5 444.4169921875 416.1000061035156 443.1000061035156 421.2667236328125 34375126 0.0 0.0
41 2022-09-12 00:00:00+01:00 444.6499938964844 448.8999938964844 435.20001220703125 440.1000061035156 418.4145202636719 39085960 0.0 0.0
42 2022-09-19 00:00:00+01:00 440.1000061035156 447.20001220703125 419.29998779296875 422.8999938964844 402.0620422363281 27982081 0.0 0.0
43 2022-09-26 00:00:00+01:00 421.20001220703125 421.20001220703125 373.31201171875 388.20001220703125 369.0718688964844 70408935 0.0 0.0
44 2022-10-03 00:00:00+01:00 382.8999938964844 409.875 380.5559997558594 400.70001220703125 380.9559326171875 37581751 0.0 0.0
45 2022-10-10 00:00:00+01:00 395.79998779296875 404.4700012207031 366.70001220703125 394.29998779296875 374.87127685546875 52952323 0.0 0.0
46 2022-10-17 00:00:00+01:00 394.29998779296875 414.79998779296875 393.0 406.5 386.4701232910156 26441475 0.0 0.0
47 2022-10-24 00:00:00+01:00 407.1000061035156 418.2279968261719 407.1000061035156 413.29998779296875 392.93505859375 26239756 0.0 0.0
48 2022-10-31 00:00:00+00:00 413.8999938964844 430.20001220703125 412.0 429.29998779296875 408.14666748046875 23168047 0.0 0.0
49 2022-11-07 00:00:00+00:00 427.29998779296875 445.8999938964844 420.6520080566406 438.3999938964844 416.79827880859375 36709117 0.0 0.0
50 2022-11-14 00:00:00+00:00 438.29998779296875 458.489990234375 435.0 455.1000061035156 432.6754150390625 29106506 0.0 0.0
51 2022-11-21 00:00:00+00:00 454.3999938964844 461.0 450.0 456.6000061035156 434.10150146484375 21667730 0.0 0.0
52 2022-11-28 00:00:00+00:00 453.79998779296875 456.8999938964844 435.1000061035156 444.79998779296875 422.8829345703125 33326204 0.0 0.0
53 2022-12-05 00:00:00+00:00 442.8999938964844 450.25 441.29998779296875 448.0 425.9252624511719 29147089 0.0 0.0
54 2022-12-12 00:00:00+00:00 445.1000061035156 451.29998779296875 431.20001220703125 436.1000061035156 414.61163330078125 46593233 0.0 0.0
55 2022-12-19 00:00:00+00:00 436.0 452.6000061035156 433.6000061035156 444.0 422.1223449707031 20982140 0.0 0.0
56 2022-12-26 00:00:00+00:00 444.0 452.0580139160156 442.3999938964844 442.79998779296875 420.9814758300781 8249664 0.0 0.0
57 2023-01-02 00:00:00+00:00 445.8999938964844 458.1499938964844 443.29998779296875 456.0 433.53106689453125 28687622 0.0 0.0
58 2023-01-09 00:00:00+00:00 456.0 461.0660095214844 435.79998779296875 444.20001220703125 422.3125 39237336 0.0 0.0
59 2023-01-16 00:00:00+00:00 444.29998779296875 447.20001220703125 434.3999938964844 439.0 417.36871337890625 35267336 0.0 0.0
60 2023-01-23 00:00:00+00:00 440.0 459.29998779296875 439.5 457.3999938964844 434.8620910644531 37495012 0.0 0.0
61 2023-01-30 00:00:00+00:00 454.3999938964844 459.3999938964844 447.79998779296875 450.29998779296875 428.1119079589844 48879358 0.0 0.0
62 2023-02-06 00:00:00+00:00 448.0 449.20001220703125 436.29998779296875 440.0 418.3194580078125 38799772 0.0 0.0
63 2023-02-13 00:00:00+00:00 441.20001220703125 450.29998779296875 440.0 447.6000061035156 425.54498291015625 30251441 0.0 0.0
64 2023-02-20 00:00:00+00:00 448.5 450.79998779296875 434.29998779296875 440.0 418.3194580078125 26764528 0.0 0.0
65 2023-02-27 00:00:00+00:00 442.8999938964844 450.5 441.6080017089844 447.20001220703125 425.1647033691406 29895454 0.0 0.0
66 2023-03-06 00:00:00+00:00 447.3999938964844 467.29998779296875 443.1000061035156 449.70001220703125 427.54150390625 82322819 0.0 0.0
67 2023-03-13 00:00:00+00:00 450.0 451.4179992675781 400.68701171875 402.20001220703125 382.38201904296875 85158023 0.0 0.0
68 2023-03-20 00:00:00+00:00 396.20001220703125 425.3999938964844 383.4960021972656 408.29998779296875 388.1814270019531 60152666 0.0 0.0
69 2023-03-27 00:00:00+01:00 416.0 422.04998779296875 399.54998779296875 404.20001220703125 384.2834777832031 81534829 20.7 0.0
70 2023-04-03 00:00:00+01:00 405.0 434.1000061035156 404.3999938964844 417.1000061035156 417.1000061035156 43217151 0.0 0.0
71 2023-04-10 00:00:00+01:00 419.1000061035156 426.70001220703125 419.1000061035156 421.70001220703125 421.70001220703125 32435695 0.0 0.0
72 2023-04-17 00:00:00+01:00 423.70001220703125 427.635009765625 415.3999938964844 420.29998779296875 420.29998779296875 37715986 0.0 0.0
73 2023-04-24 00:00:00+01:00 418.1000061035156 423.0 415.29998779296875 423.0 423.0 34331974 0.0 0.0
74 2023-05-01 00:00:00+01:00 423.3999938964844 426.1000061035156 406.3999938964844 414.6000061035156 414.6000061035156 40446519 0.0 0.0
75 2023-05-08 00:00:00+01:00 414.6000061035156 419.1000061035156 408.0 412.70001220703125 412.70001220703125 36950836 0.0 0.0
76 2023-05-15 00:00:00+01:00 414.0 418.3999938964844 407.3999938964844 413.5 413.5 53109487 0.0 0.0
77 2023-05-22 00:00:00+01:00 413.6000061035156 424.0 394.70001220703125 401.29998779296875 401.29998779296875 64363368 0.0 0.0
78 2023-05-29 00:00:00+01:00 401.29998779296875 409.4779968261719 392.70001220703125 409.1000061035156 409.1000061035156 47587959 0.0 0.0
79 2023-06-05 00:00:00+01:00 406.29998779296875 410.70001220703125 400.1000061035156 400.8999938964844 400.8999938964844 22494985 0.0 0.0
80 2023-06-12 00:00:00+01:00 404.1000061035156 406.0 394.5 396.0 396.0 41531163 0.0 0.0
81 2023-06-19 00:00:00+01:00 394.0 399.8999938964844 380.7200012207031 386.20001220703125 386.20001220703125 40439880 0.0 0.0
82 2023-06-26 00:00:00+01:00 387.20001220703125 397.0 382.8999938964844 395.20001220703125 395.20001220703125 27701915 0.0 0.0
83 2023-07-03 00:00:00+01:00 396.5 399.79998779296875 380.1000061035156 381.79998779296875 381.79998779296875 26005305 0.0 0.0
84 2023-07-10 00:00:00+01:00 380.0 392.29998779296875 379.40399169921875 386.0 386.0 29789300 0.0 0.0
85 2023-07-17 00:00:00+01:00 385.0 389.5 384.2510070800781 387.1000061035156 387.1000061035156 0 0.0 0.0

View File

@@ -0,0 +1,11 @@
Date,Open,High,Low,Close,Adj Close,Volume,Dividends,Stock Splits
2023-05-18 00:00:00+01:00,193.220001220703,200.839996337891,193.220001220703,196.839996337891,196.839996337891,653125,0,0
2023-05-17 00:00:00+01:00,199.740005493164,207.738006591797,190.121994018555,197.860000610352,197.860000610352,822268,0,0
2023-05-16 00:00:00+01:00,215.600006103516,215.600006103516,201.149993896484,205.100006103516,205.100006103516,451009,243.93939,0.471428571428571
2023-05-15 00:00:00+01:00,215.399955531529,219.19995640346,210.599967302595,217.399987792969,102.39998147147,1761679.3939394,0,0
2023-05-12 00:00:00+01:00,214.599988664899,216.199965558733,209.599965558733,211.399977329799,99.573855808803,1522298.48484849,0,0
2023-05-11 00:00:00+01:00,219.999966430664,219.999966430664,212.199987357003,215.000000871931,101.269541277204,3568042.12121213,0,0
2023-05-10 00:00:00+01:00,218.199954659598,223.000000435965,212.59995640346,215.399955531529,101.457929992676,5599908.78787879,0,0
2023-05-09 00:00:00+01:00,224,227.688003540039,218.199996948242,218.399993896484,102.87100982666,1906090,0,0
2023-05-05 00:00:00+01:00,220.999968174526,225.19996686663,220.799976457868,224.4,105.697140066964,964523.636363637,0,0
2023-05-04 00:00:00+01:00,216.999989972796,222.799965558733,216.881988961356,221.399965994698,104.284055655343,880983.93939394,0,0
1 Date Open High Low Close Adj Close Volume Dividends Stock Splits
2 2023-05-18 00:00:00+01:00 193.220001220703 200.839996337891 193.220001220703 196.839996337891 196.839996337891 653125 0 0
3 2023-05-17 00:00:00+01:00 199.740005493164 207.738006591797 190.121994018555 197.860000610352 197.860000610352 822268 0 0
4 2023-05-16 00:00:00+01:00 215.600006103516 215.600006103516 201.149993896484 205.100006103516 205.100006103516 451009 243.93939 0.471428571428571
5 2023-05-15 00:00:00+01:00 215.399955531529 219.19995640346 210.599967302595 217.399987792969 102.39998147147 1761679.3939394 0 0
6 2023-05-12 00:00:00+01:00 214.599988664899 216.199965558733 209.599965558733 211.399977329799 99.573855808803 1522298.48484849 0 0
7 2023-05-11 00:00:00+01:00 219.999966430664 219.999966430664 212.199987357003 215.000000871931 101.269541277204 3568042.12121213 0 0
8 2023-05-10 00:00:00+01:00 218.199954659598 223.000000435965 212.59995640346 215.399955531529 101.457929992676 5599908.78787879 0 0
9 2023-05-09 00:00:00+01:00 224 227.688003540039 218.199996948242 218.399993896484 102.87100982666 1906090 0 0
10 2023-05-05 00:00:00+01:00 220.999968174526 225.19996686663 220.799976457868 224.4 105.697140066964 964523.636363637 0 0
11 2023-05-04 00:00:00+01:00 216.999989972796 222.799965558733 216.881988961356 221.399965994698 104.284055655343 880983.93939394 0 0

View File

@@ -0,0 +1,11 @@
Date,Open,High,Low,Close,Adj Close,Volume,Dividends,Stock Splits
2023-05-18 00:00:00+01:00,193.220001220703,200.839996337891,193.220001220703,196.839996337891,196.839996337891,653125,0,0
2023-05-17 00:00:00+01:00,199.740005493164,207.738006591797,190.121994018555,197.860000610352,197.860000610352,822268,0,0
2023-05-16 00:00:00+01:00,215.600006103516,215.600006103516,201.149993896484,205.100006103516,205.100006103516,451009,243.93939,0.471428571428571
2023-05-15 00:00:00+01:00,456.908996582031,464.969604492188,446.727203369141,461.151489257813,217.21208190918,830506,0,0
2023-05-12 00:00:00+01:00,455.212097167969,458.605987548828,444.605987548828,448.424194335938,211.217269897461,717655,0,0
2023-05-11 00:00:00+01:00,466.666595458984,466.666595458984,450.121185302734,456.060607910156,214.814178466797,1682077,0,0
2023-05-10 00:00:00+01:00,462.848388671875,473.030303955078,450.969604492188,456.908996582031,215.213790893555,2639957,0,0
2023-05-09 00:00:00+01:00,224,227.688003540039,218.199996948242,218.399993896484,102.87100982666,1906090,0,0
2023-05-05 00:00:00+01:00,468.787811279297,477.696899414063,468.363586425781,476,224.2060546875,454704,0,0
2023-05-04 00:00:00+01:00,460.303009033203,472.605987548828,460.052703857422,469.636291503906,221.208602905273,415321,0,0
1 Date Open High Low Close Adj Close Volume Dividends Stock Splits
2 2023-05-18 00:00:00+01:00 193.220001220703 200.839996337891 193.220001220703 196.839996337891 196.839996337891 653125 0 0
3 2023-05-17 00:00:00+01:00 199.740005493164 207.738006591797 190.121994018555 197.860000610352 197.860000610352 822268 0 0
4 2023-05-16 00:00:00+01:00 215.600006103516 215.600006103516 201.149993896484 205.100006103516 205.100006103516 451009 243.93939 0.471428571428571
5 2023-05-15 00:00:00+01:00 456.908996582031 464.969604492188 446.727203369141 461.151489257813 217.21208190918 830506 0 0
6 2023-05-12 00:00:00+01:00 455.212097167969 458.605987548828 444.605987548828 448.424194335938 211.217269897461 717655 0 0
7 2023-05-11 00:00:00+01:00 466.666595458984 466.666595458984 450.121185302734 456.060607910156 214.814178466797 1682077 0 0
8 2023-05-10 00:00:00+01:00 462.848388671875 473.030303955078 450.969604492188 456.908996582031 215.213790893555 2639957 0 0
9 2023-05-09 00:00:00+01:00 224 227.688003540039 218.199996948242 218.399993896484 102.87100982666 1906090 0 0
10 2023-05-05 00:00:00+01:00 468.787811279297 477.696899414063 468.363586425781 476 224.2060546875 454704 0 0
11 2023-05-04 00:00:00+01:00 460.303009033203 472.605987548828 460.052703857422 469.636291503906 221.208602905273 415321 0 0

View File

@@ -0,0 +1,24 @@
Date,Open,High,Low,Close,Adj Close,Volume,Dividends,Stock Splits
2023-05-31 00:00:00+10:00,0.120290003716946,0.120290003716946,0.120290003716946,0.120290003716946,0.120290003716946,0,0,0
2023-05-30 00:00:00+10:00,0.120290003716946,0.120290003716946,0.120290003716946,0.120290003716946,0.120290003716946,0,0,0.4406
2023-05-29 00:00:00+10:00,0.120290003716946,0.120290003716946,0.120290003716946,0.120290003716946,0.120290003716946,0,0,0
2023-05-26 00:00:00+10:00,0.120290003716946,0.120290003716946,0.120290003716946,0.120290003716946,0.120290003716946,0,0,0
2023-05-25 00:00:00+10:00,0.120290003716946,0.120290003716946,0.120290003716946,0.120290003716946,0.120290003716946,0,0,0
2023-05-24 00:00:00+10:00,0.120290003716946,0.120290003716946,0.120290003716946,0.120290003716946,0.120290003716946,0,0,0
2023-05-23 00:00:00+10:00,0.120290003716946,0.120290003716946,0.120290003716946,0.120290003716946,0.120290003716946,0,0,0
2023-05-22 00:00:00+10:00,0.120290003716946,0.120290003716946,0.120290003716946,0.120290003716946,0.120290003716946,0,0,0
2023-05-19 00:00:00+10:00,0.120290003716946,0.120290003716946,0.120290003716946,0.120290003716946,0.120290003716946,0,0,0
2023-05-18 00:00:00+10:00,0.120290003716946,0.120290003716946,0.120290003716946,0.120290003716946,0.120290003716946,0,0,0
2023-05-17 00:00:00+10:00,0.120290003716946,0.120290003716946,0.120290003716946,0.120290003716946,0.120290003716946,0,0,0
2023-05-16 00:00:00+10:00,0.120290003716946,0.120290003716946,0.120290003716946,0.120290003716946,0.120290003716946,0,0,0
2023-05-15 00:00:00+10:00,0.120290003716946,0.120290003716946,0.120290003716946,0.120290003716946,0.120290003716946,0,0,0
2023-05-12 00:00:00+10:00,0.120290003716946,0.120290003716946,0.120290003716946,0.120290003716946,0.120290003716946,0,0,0
2023-05-11 00:00:00+10:00,0.120290003716946,0.120290003716946,0.120290003716946,0.120290003716946,0.120290003716946,0,0,0
2023-05-10 00:00:00+10:00,0.120290003716946,0.120290003716946,0.120290003716946,0.120290003716946,0.120290003716946,0,0,0
2023-05-09 00:00:00+10:00,0.120290003716946,0.120290003716946,0.120290003716946,0.120290003716946,0.120290003716946,0,0,0
2023-05-08 00:00:00+10:00,0.120290003716946,0.120290003716946,0.120290003716946,0.120290003716946,0.120290003716946,0,0,0
2023-05-05 00:00:00+10:00,0.120290003716946,0.120290003716946,0.120290003716946,0.120290003716946,0.120290003716946,0,0,0
2023-05-04 00:00:00+10:00,0.120290003716946,0.120290003716946,0.120290003716946,0.120290003716946,0.120290003716946,0,0,0
2023-05-03 00:00:00+10:00,0.120290003716946,0.120290003716946,0.120290003716946,0.120290003716946,0.120290003716946,0,0,0
2023-05-02 00:00:00+10:00,0.120290003716946,0.120290003716946,0.120290003716946,0.120290003716946,0.120290003716946,0,0,0
2023-05-01 00:00:00+10:00,0.120290003716946,0.120290003716946,0.120290003716946,0.120290003716946,0.120290003716946,0,0,0
1 Date Open High Low Close Adj Close Volume Dividends Stock Splits
2 2023-05-31 00:00:00+10:00 0.120290003716946 0.120290003716946 0.120290003716946 0.120290003716946 0.120290003716946 0 0 0
3 2023-05-30 00:00:00+10:00 0.120290003716946 0.120290003716946 0.120290003716946 0.120290003716946 0.120290003716946 0 0 0.4406
4 2023-05-29 00:00:00+10:00 0.120290003716946 0.120290003716946 0.120290003716946 0.120290003716946 0.120290003716946 0 0 0
5 2023-05-26 00:00:00+10:00 0.120290003716946 0.120290003716946 0.120290003716946 0.120290003716946 0.120290003716946 0 0 0
6 2023-05-25 00:00:00+10:00 0.120290003716946 0.120290003716946 0.120290003716946 0.120290003716946 0.120290003716946 0 0 0
7 2023-05-24 00:00:00+10:00 0.120290003716946 0.120290003716946 0.120290003716946 0.120290003716946 0.120290003716946 0 0 0
8 2023-05-23 00:00:00+10:00 0.120290003716946 0.120290003716946 0.120290003716946 0.120290003716946 0.120290003716946 0 0 0
9 2023-05-22 00:00:00+10:00 0.120290003716946 0.120290003716946 0.120290003716946 0.120290003716946 0.120290003716946 0 0 0
10 2023-05-19 00:00:00+10:00 0.120290003716946 0.120290003716946 0.120290003716946 0.120290003716946 0.120290003716946 0 0 0
11 2023-05-18 00:00:00+10:00 0.120290003716946 0.120290003716946 0.120290003716946 0.120290003716946 0.120290003716946 0 0 0
12 2023-05-17 00:00:00+10:00 0.120290003716946 0.120290003716946 0.120290003716946 0.120290003716946 0.120290003716946 0 0 0
13 2023-05-16 00:00:00+10:00 0.120290003716946 0.120290003716946 0.120290003716946 0.120290003716946 0.120290003716946 0 0 0
14 2023-05-15 00:00:00+10:00 0.120290003716946 0.120290003716946 0.120290003716946 0.120290003716946 0.120290003716946 0 0 0
15 2023-05-12 00:00:00+10:00 0.120290003716946 0.120290003716946 0.120290003716946 0.120290003716946 0.120290003716946 0 0 0
16 2023-05-11 00:00:00+10:00 0.120290003716946 0.120290003716946 0.120290003716946 0.120290003716946 0.120290003716946 0 0 0
17 2023-05-10 00:00:00+10:00 0.120290003716946 0.120290003716946 0.120290003716946 0.120290003716946 0.120290003716946 0 0 0
18 2023-05-09 00:00:00+10:00 0.120290003716946 0.120290003716946 0.120290003716946 0.120290003716946 0.120290003716946 0 0 0
19 2023-05-08 00:00:00+10:00 0.120290003716946 0.120290003716946 0.120290003716946 0.120290003716946 0.120290003716946 0 0 0
20 2023-05-05 00:00:00+10:00 0.120290003716946 0.120290003716946 0.120290003716946 0.120290003716946 0.120290003716946 0 0 0
21 2023-05-04 00:00:00+10:00 0.120290003716946 0.120290003716946 0.120290003716946 0.120290003716946 0.120290003716946 0 0 0
22 2023-05-03 00:00:00+10:00 0.120290003716946 0.120290003716946 0.120290003716946 0.120290003716946 0.120290003716946 0 0 0
23 2023-05-02 00:00:00+10:00 0.120290003716946 0.120290003716946 0.120290003716946 0.120290003716946 0.120290003716946 0 0 0
24 2023-05-01 00:00:00+10:00 0.120290003716946 0.120290003716946 0.120290003716946 0.120290003716946 0.120290003716946 0 0 0

View File

@@ -0,0 +1,24 @@
Date,Open,High,Low,Close,Adj Close,Volume,Dividends,Stock Splits
2023-05-31 00:00:00+10:00,0.120290003716946,0.120290003716946,0.120290003716946,0.120290003716946,0.120290003716946,0,0,0
2023-05-30 00:00:00+10:00,0.120290003716946,0.120290003716946,0.120290003716946,0.120290003716946,0.120290003716946,0,0,0.4406
2023-05-29 00:00:00+10:00,0.120290003716946,0.120290003716946,0.120290003716946,0.120290003716946,0.120290003716946,0,0,0
2023-05-26 00:00:00+10:00,0.120290003716946,0.120290003716946,0.120290003716946,0.120290003716946,0.120290003716946,0,0,0
2023-05-25 00:00:00+10:00,0.120290003716946,0.120290003716946,0.120290003716946,0.120290003716946,0.120290003716946,0,0,0
2023-05-24 00:00:00+10:00,0.120290003716946,0.120290003716946,0.120290003716946,0.120290003716946,0.120290003716946,0,0,0
2023-05-23 00:00:00+10:00,0.120290003716946,0.120290003716946,0.120290003716946,0.120290003716946,0.120290003716946,0,0,0
2023-05-22 00:00:00+10:00,0.120290003716946,0.120290003716946,0.120290003716946,0.120290003716946,0.120290003716946,0,0,0
2023-05-19 00:00:00+10:00,0.0529999993741512,0.0529999993741512,0.0529999993741512,0.0529999993741512,0.0529999993741512,0,0,0
2023-05-18 00:00:00+10:00,0.0529999993741512,0.0529999993741512,0.0529999993741512,0.0529999993741512,0.0529999993741512,0,0,0
2023-05-17 00:00:00+10:00,0.0529999993741512,0.0529999993741512,0.0529999993741512,0.0529999993741512,0.0529999993741512,0,0,0
2023-05-16 00:00:00+10:00,0.0529999993741512,0.0529999993741512,0.0529999993741512,0.0529999993741512,0.0529999993741512,0,0,0
2023-05-15 00:00:00+10:00,0.0529999993741512,0.0529999993741512,0.0529999993741512,0.0529999993741512,0.0529999993741512,0,0,0
2023-05-12 00:00:00+10:00,0.0529999993741512,0.0529999993741512,0.0529999993741512,0.0529999993741512,0.0529999993741512,0,0,0
2023-05-11 00:00:00+10:00,0.0529999993741512,0.0529999993741512,0.0529999993741512,0.0529999993741512,0.0529999993741512,0,0,0
2023-05-10 00:00:00+10:00,0.0529999993741512,0.0529999993741512,0.0529999993741512,0.0529999993741512,0.0529999993741512,0,0,0
2023-05-09 00:00:00+10:00,0.0529999993741512,0.0529999993741512,0.0529999993741512,0.0529999993741512,0.0529999993741512,0,0,0
2023-05-08 00:00:00+10:00,0.0529999993741512,0.0529999993741512,0.0529999993741512,0.0529999993741512,0.0529999993741512,0,0,0
2023-05-05 00:00:00+10:00,0.0529999993741512,0.0529999993741512,0.0529999993741512,0.0529999993741512,0.0529999993741512,0,0,0
2023-05-04 00:00:00+10:00,0.0529999993741512,0.0529999993741512,0.0529999993741512,0.0529999993741512,0.0529999993741512,0,0,0
2023-05-03 00:00:00+10:00,0.0529999993741512,0.0529999993741512,0.0529999993741512,0.0529999993741512,0.0529999993741512,0,0,0
2023-05-02 00:00:00+10:00,0.0529999993741512,0.0529999993741512,0.0529999993741512,0.0529999993741512,0.0529999993741512,0,0,0
2023-05-01 00:00:00+10:00,0.0529999993741512,0.0529999993741512,0.0529999993741512,0.0529999993741512,0.0529999993741512,0,0,0
1 Date Open High Low Close Adj Close Volume Dividends Stock Splits
2 2023-05-31 00:00:00+10:00 0.120290003716946 0.120290003716946 0.120290003716946 0.120290003716946 0.120290003716946 0 0 0
3 2023-05-30 00:00:00+10:00 0.120290003716946 0.120290003716946 0.120290003716946 0.120290003716946 0.120290003716946 0 0 0.4406
4 2023-05-29 00:00:00+10:00 0.120290003716946 0.120290003716946 0.120290003716946 0.120290003716946 0.120290003716946 0 0 0
5 2023-05-26 00:00:00+10:00 0.120290003716946 0.120290003716946 0.120290003716946 0.120290003716946 0.120290003716946 0 0 0
6 2023-05-25 00:00:00+10:00 0.120290003716946 0.120290003716946 0.120290003716946 0.120290003716946 0.120290003716946 0 0 0
7 2023-05-24 00:00:00+10:00 0.120290003716946 0.120290003716946 0.120290003716946 0.120290003716946 0.120290003716946 0 0 0
8 2023-05-23 00:00:00+10:00 0.120290003716946 0.120290003716946 0.120290003716946 0.120290003716946 0.120290003716946 0 0 0
9 2023-05-22 00:00:00+10:00 0.120290003716946 0.120290003716946 0.120290003716946 0.120290003716946 0.120290003716946 0 0 0
10 2023-05-19 00:00:00+10:00 0.0529999993741512 0.0529999993741512 0.0529999993741512 0.0529999993741512 0.0529999993741512 0 0 0
11 2023-05-18 00:00:00+10:00 0.0529999993741512 0.0529999993741512 0.0529999993741512 0.0529999993741512 0.0529999993741512 0 0 0
12 2023-05-17 00:00:00+10:00 0.0529999993741512 0.0529999993741512 0.0529999993741512 0.0529999993741512 0.0529999993741512 0 0 0
13 2023-05-16 00:00:00+10:00 0.0529999993741512 0.0529999993741512 0.0529999993741512 0.0529999993741512 0.0529999993741512 0 0 0
14 2023-05-15 00:00:00+10:00 0.0529999993741512 0.0529999993741512 0.0529999993741512 0.0529999993741512 0.0529999993741512 0 0 0
15 2023-05-12 00:00:00+10:00 0.0529999993741512 0.0529999993741512 0.0529999993741512 0.0529999993741512 0.0529999993741512 0 0 0
16 2023-05-11 00:00:00+10:00 0.0529999993741512 0.0529999993741512 0.0529999993741512 0.0529999993741512 0.0529999993741512 0 0 0
17 2023-05-10 00:00:00+10:00 0.0529999993741512 0.0529999993741512 0.0529999993741512 0.0529999993741512 0.0529999993741512 0 0 0
18 2023-05-09 00:00:00+10:00 0.0529999993741512 0.0529999993741512 0.0529999993741512 0.0529999993741512 0.0529999993741512 0 0 0
19 2023-05-08 00:00:00+10:00 0.0529999993741512 0.0529999993741512 0.0529999993741512 0.0529999993741512 0.0529999993741512 0 0 0
20 2023-05-05 00:00:00+10:00 0.0529999993741512 0.0529999993741512 0.0529999993741512 0.0529999993741512 0.0529999993741512 0 0 0
21 2023-05-04 00:00:00+10:00 0.0529999993741512 0.0529999993741512 0.0529999993741512 0.0529999993741512 0.0529999993741512 0 0 0
22 2023-05-03 00:00:00+10:00 0.0529999993741512 0.0529999993741512 0.0529999993741512 0.0529999993741512 0.0529999993741512 0 0 0
23 2023-05-02 00:00:00+10:00 0.0529999993741512 0.0529999993741512 0.0529999993741512 0.0529999993741512 0.0529999993741512 0 0 0
24 2023-05-01 00:00:00+10:00 0.0529999993741512 0.0529999993741512 0.0529999993741512 0.0529999993741512 0.0529999993741512 0 0 0

View File

@@ -0,0 +1,42 @@
Date,Open,High,Low,Close,Adj Close,Volume,Dividends,Stock Splits
2020-09-30 00:00:00-04:00,4.40000009536743,4.44999980926514,4.01999998092651,4.44999980926514,4.44999980926514,22600,0,0
2020-09-29 00:00:00-04:00,4.3899998664856,4.40000009536743,4.13000011444092,4.30000019073486,4.30000019073486,10800,0,0
2020-09-28 00:00:00-04:00,4.09000015258789,4.25,4.09000015258789,4.25,4.25,8000,0,0
2020-09-25 00:00:00-04:00,3.95000004768372,4.09999990463257,3.95000004768372,4.05000019073486,4.05000019073486,13500,0,0
2020-09-24 00:00:00-04:00,3.84999990463257,4,3.84999990463257,4,4,8800,0,0
2020-09-23 00:00:00-04:00,3.99000000953674,4,3.99000000953674,4,4,5900,0,0
2020-09-22 00:00:00-04:00,3.90000009536743,4.09999990463257,3.84999990463257,4.09999990463257,4.09999990463257,3100,0,0
2020-09-21 00:00:00-04:00,4.09999990463257,4.09999990463257,4.09999990463257,4.09999990463257,4.09999990463257,1200,0,0
2020-09-18 00:00:00-04:00,3.92000007629395,4.09999990463257,3.92000007629395,4.09999990463257,4.09999990463257,27200,0,0
2020-09-17 00:00:00-04:00,3.90000009536743,3.99000000953674,3.8199999332428,3.99000000953674,3.99000000953674,3300,0,0
2020-09-16 00:00:00-04:00,3.79999995231628,4,3.79999995231628,4,4,3300,0,0
2020-09-15 00:00:00-04:00,3.95000004768372,4,3.95000004768372,4,4,2400,0,0
2020-09-14 00:00:00-04:00,3.96000003814697,4,3.96000003814697,4,4,800,0,0
2020-09-11 00:00:00-04:00,3.95000004768372,3.97000002861023,3.72000002861023,3.97000002861023,3.97000002861023,5700,0,0
2020-09-10 00:00:00-04:00,4,4.09999990463257,4,4.09999990463257,4.09999990463257,7100,0,0
2020-09-09 00:00:00-04:00,3.5699999332428,4,3.5699999332428,4,4,18100,0,0
2020-09-08 00:00:00-04:00,3.40000009536743,3.59999990463257,3.40000009536743,3.59999990463257,3.59999990463257,19500,0,0
2020-09-04 00:00:00-04:00,3.5,3.5,3.5,3.5,3.5,400,0,0
2020-09-03 00:00:00-04:00,3.58999991416931,3.58999991416931,3.58999991416931,3.58999991416931,3.58999991416931,0,0,0
2020-09-02 00:00:00-04:00,3.5,3.58999991416931,3.5,3.58999991416931,3.58999991416931,2000,0,0
2020-09-01 00:00:00-04:00,3.5,3.59999990463257,3.5,3.59999990463257,3.59999990463257,1200,0,0
2020-08-31 00:00:00-04:00,3.15000009536743,3.70000004768372,3.15000009536743,3.70000004768372,3.70000004768372,26500,0,0
2020-08-28 00:00:00-04:00,3.76999998092651,3.76999998092651,3.70000004768372,3.70000004768372,3.70000004768372,1600,0,0
2020-08-27 00:00:00-04:00,3.65000009536743,3.65000009536743,3.65000009536743,3.65000009536743,3.65000009536743,0,0,0
2020-08-26 00:00:00-04:00,3.70000004768372,3.70000004768372,3.70000004768372,3.70000004768372,3.70000004768372,0,0,0.1
2020-08-25 00:00:00-04:00,3.40000009536743,3.70000004768372,3.40000009536743,3.70000004768372,3.70000004768372,2900,0,0
2020-08-24 00:00:00-04:00,3.29999995231628,3.5,3.29999995231628,3.5,3.5,10000,0,0
2020-08-21 00:00:00-04:00,3.5,3.5,3.5,3.5,3.5,150,0,0
2020-08-20 00:00:00-04:00,3.5,3.5,3.5,3.5,3.5,0,0,0
2020-08-19 00:00:00-04:00,3.40000009536743,3.5,3.40000009536743,3.5,3.5,9050,0,0
2020-08-18 00:00:00-04:00,3.5,3.79999995231628,3.5,3.5,3.5,2250,0,0
2020-08-17 00:00:00-04:00,2.79999995231628,3.70000004768372,2.79999995231628,3.70000004768372,3.70000004768372,5050,0,0
2020-08-14 00:00:00-04:00,3.5,3.5,3.5,3.5,3.5,0,0,0
2020-08-13 00:00:00-04:00,3.5,3.5,3.5,3.5,3.5,0,0,0
2020-08-12 00:00:00-04:00,3.5,3.5,3.5,3.5,3.5,0,0,0
2020-08-11 00:00:00-04:00,3.5,3.5,3.5,3.5,3.5,0,0,0
2020-08-10 00:00:00-04:00,3.5,3.70000004768372,3.5,3.5,3.5,3300,0,0
2020-08-07 00:00:00-04:00,3.5,3.79999995231628,3.5,3.79999995231628,3.79999995231628,2500,0,0
2020-08-06 00:00:00-04:00,3.5,3.70000004768372,3.40000009536743,3.70000004768372,3.70000004768372,3000,0,0
2020-08-05 00:00:00-04:00,3.70000004768372,3.70000004768372,3.70000004768372,3.70000004768372,3.70000004768372,0,0,0
2020-08-04 00:00:00-04:00,3.70000004768372,3.70000004768372,3.70000004768372,3.70000004768372,3.70000004768372,0,0,0
1 Date Open High Low Close Adj Close Volume Dividends Stock Splits
2 2020-09-30 00:00:00-04:00 4.40000009536743 4.44999980926514 4.01999998092651 4.44999980926514 4.44999980926514 22600 0 0
3 2020-09-29 00:00:00-04:00 4.3899998664856 4.40000009536743 4.13000011444092 4.30000019073486 4.30000019073486 10800 0 0
4 2020-09-28 00:00:00-04:00 4.09000015258789 4.25 4.09000015258789 4.25 4.25 8000 0 0
5 2020-09-25 00:00:00-04:00 3.95000004768372 4.09999990463257 3.95000004768372 4.05000019073486 4.05000019073486 13500 0 0
6 2020-09-24 00:00:00-04:00 3.84999990463257 4 3.84999990463257 4 4 8800 0 0
7 2020-09-23 00:00:00-04:00 3.99000000953674 4 3.99000000953674 4 4 5900 0 0
8 2020-09-22 00:00:00-04:00 3.90000009536743 4.09999990463257 3.84999990463257 4.09999990463257 4.09999990463257 3100 0 0
9 2020-09-21 00:00:00-04:00 4.09999990463257 4.09999990463257 4.09999990463257 4.09999990463257 4.09999990463257 1200 0 0
10 2020-09-18 00:00:00-04:00 3.92000007629395 4.09999990463257 3.92000007629395 4.09999990463257 4.09999990463257 27200 0 0
11 2020-09-17 00:00:00-04:00 3.90000009536743 3.99000000953674 3.8199999332428 3.99000000953674 3.99000000953674 3300 0 0
12 2020-09-16 00:00:00-04:00 3.79999995231628 4 3.79999995231628 4 4 3300 0 0
13 2020-09-15 00:00:00-04:00 3.95000004768372 4 3.95000004768372 4 4 2400 0 0
14 2020-09-14 00:00:00-04:00 3.96000003814697 4 3.96000003814697 4 4 800 0 0
15 2020-09-11 00:00:00-04:00 3.95000004768372 3.97000002861023 3.72000002861023 3.97000002861023 3.97000002861023 5700 0 0
16 2020-09-10 00:00:00-04:00 4 4.09999990463257 4 4.09999990463257 4.09999990463257 7100 0 0
17 2020-09-09 00:00:00-04:00 3.5699999332428 4 3.5699999332428 4 4 18100 0 0
18 2020-09-08 00:00:00-04:00 3.40000009536743 3.59999990463257 3.40000009536743 3.59999990463257 3.59999990463257 19500 0 0
19 2020-09-04 00:00:00-04:00 3.5 3.5 3.5 3.5 3.5 400 0 0
20 2020-09-03 00:00:00-04:00 3.58999991416931 3.58999991416931 3.58999991416931 3.58999991416931 3.58999991416931 0 0 0
21 2020-09-02 00:00:00-04:00 3.5 3.58999991416931 3.5 3.58999991416931 3.58999991416931 2000 0 0
22 2020-09-01 00:00:00-04:00 3.5 3.59999990463257 3.5 3.59999990463257 3.59999990463257 1200 0 0
23 2020-08-31 00:00:00-04:00 3.15000009536743 3.70000004768372 3.15000009536743 3.70000004768372 3.70000004768372 26500 0 0
24 2020-08-28 00:00:00-04:00 3.76999998092651 3.76999998092651 3.70000004768372 3.70000004768372 3.70000004768372 1600 0 0
25 2020-08-27 00:00:00-04:00 3.65000009536743 3.65000009536743 3.65000009536743 3.65000009536743 3.65000009536743 0 0 0
26 2020-08-26 00:00:00-04:00 3.70000004768372 3.70000004768372 3.70000004768372 3.70000004768372 3.70000004768372 0 0 0.1
27 2020-08-25 00:00:00-04:00 3.40000009536743 3.70000004768372 3.40000009536743 3.70000004768372 3.70000004768372 2900 0 0
28 2020-08-24 00:00:00-04:00 3.29999995231628 3.5 3.29999995231628 3.5 3.5 10000 0 0
29 2020-08-21 00:00:00-04:00 3.5 3.5 3.5 3.5 3.5 150 0 0
30 2020-08-20 00:00:00-04:00 3.5 3.5 3.5 3.5 3.5 0 0 0
31 2020-08-19 00:00:00-04:00 3.40000009536743 3.5 3.40000009536743 3.5 3.5 9050 0 0
32 2020-08-18 00:00:00-04:00 3.5 3.79999995231628 3.5 3.5 3.5 2250 0 0
33 2020-08-17 00:00:00-04:00 2.79999995231628 3.70000004768372 2.79999995231628 3.70000004768372 3.70000004768372 5050 0 0
34 2020-08-14 00:00:00-04:00 3.5 3.5 3.5 3.5 3.5 0 0 0
35 2020-08-13 00:00:00-04:00 3.5 3.5 3.5 3.5 3.5 0 0 0
36 2020-08-12 00:00:00-04:00 3.5 3.5 3.5 3.5 3.5 0 0 0
37 2020-08-11 00:00:00-04:00 3.5 3.5 3.5 3.5 3.5 0 0 0
38 2020-08-10 00:00:00-04:00 3.5 3.70000004768372 3.5 3.5 3.5 3300 0 0
39 2020-08-07 00:00:00-04:00 3.5 3.79999995231628 3.5 3.79999995231628 3.79999995231628 2500 0 0
40 2020-08-06 00:00:00-04:00 3.5 3.70000004768372 3.40000009536743 3.70000004768372 3.70000004768372 3000 0 0
41 2020-08-05 00:00:00-04:00 3.70000004768372 3.70000004768372 3.70000004768372 3.70000004768372 3.70000004768372 0 0 0
42 2020-08-04 00:00:00-04:00 3.70000004768372 3.70000004768372 3.70000004768372 3.70000004768372 3.70000004768372 0 0 0

View File

@@ -0,0 +1,42 @@
Date,Open,High,Low,Close,Adj Close,Volume,Dividends,Stock Splits
2020-09-30 00:00:00-04:00,4.40000009536743,4.44999980926514,4.01999998092651,4.44999980926514,4.44999980926514,22600,0,0
2020-09-29 00:00:00-04:00,4.3899998664856,4.40000009536743,4.13000011444092,4.30000019073486,4.30000019073486,10800,0,0
2020-09-28 00:00:00-04:00,4.09000015258789,4.25,4.09000015258789,4.25,4.25,8000,0,0
2020-09-25 00:00:00-04:00,3.95000004768372,4.09999990463257,3.95000004768372,4.05000019073486,4.05000019073486,13500,0,0
2020-09-24 00:00:00-04:00,3.84999990463257,4,3.84999990463257,4,4,8800,0,0
2020-09-23 00:00:00-04:00,3.99000000953674,4,3.99000000953674,4,4,5900,0,0
2020-09-22 00:00:00-04:00,3.90000009536743,4.09999990463257,3.84999990463257,4.09999990463257,4.09999990463257,3100,0,0
2020-09-21 00:00:00-04:00,4.09999990463257,4.09999990463257,4.09999990463257,4.09999990463257,4.09999990463257,1200,0,0
2020-09-18 00:00:00-04:00,3.92000007629395,4.09999990463257,3.92000007629395,4.09999990463257,4.09999990463257,27200,0,0
2020-09-17 00:00:00-04:00,3.90000009536743,3.99000000953674,3.8199999332428,3.99000000953674,3.99000000953674,3300,0,0
2020-09-16 00:00:00-04:00,3.79999995231628,4,3.79999995231628,4,4,3300,0,0
2020-09-15 00:00:00-04:00,3.95000004768372,4,3.95000004768372,4,4,2400,0,0
2020-09-14 00:00:00-04:00,3.96000003814697,4,3.96000003814697,4,4,800,0,0
2020-09-11 00:00:00-04:00,3.95000004768372,3.97000002861023,3.72000002861023,3.97000002861023,3.97000002861023,5700,0,0
2020-09-10 00:00:00-04:00,4,4.09999990463257,4,4.09999990463257,4.09999990463257,7100,0,0
2020-09-09 00:00:00-04:00,3.5699999332428,4,3.5699999332428,4,4,18100,0,0
2020-09-08 00:00:00-04:00,3.40000009536743,3.59999990463257,3.40000009536743,3.59999990463257,3.59999990463257,19500,0,0
2020-09-04 00:00:00-04:00,3.5,3.5,3.5,3.5,3.5,400,0,0
2020-09-03 00:00:00-04:00,3.58999991416931,3.58999991416931,3.58999991416931,3.58999991416931,3.58999991416931,0,0,0
2020-09-02 00:00:00-04:00,3.5,3.58999991416931,3.5,3.58999991416931,3.58999991416931,2000,0,0
2020-09-01 00:00:00-04:00,3.5,3.59999990463257,3.5,3.59999990463257,3.59999990463257,1200,0,0
2020-08-31 00:00:00-04:00,3.15000009536743,3.70000004768372,3.15000009536743,3.70000004768372,3.70000004768372,26500,0,0
2020-08-28 00:00:00-04:00,3.76999998092651,3.76999998092651,3.70000004768372,3.70000004768372,3.70000004768372,1600,0,0
2020-08-27 00:00:00-04:00,3.65000009536743,3.65000009536743,3.65000009536743,3.65000009536743,3.65000009536743,0,0,0
2020-08-26 00:00:00-04:00,0.370000004768372,0.370000004768372,0.370000004768372,0.370000004768372,0.370000004768372,0,0,0.1
2020-08-25 00:00:00-04:00,3.40000009536743,3.70000004768372,3.40000009536743,3.70000004768372,3.70000004768372,2900,0,0
2020-08-24 00:00:00-04:00,3.29999995231628,3.5,3.29999995231628,3.5,3.5,10000,0,0
2020-08-21 00:00:00-04:00,3.5,3.5,3.5,3.5,3.5,150,0,0
2020-08-20 00:00:00-04:00,3.5,3.5,3.5,3.5,3.5,0,0,0
2020-08-19 00:00:00-04:00,3.40000009536743,3.5,3.40000009536743,3.5,3.5,9050,0,0
2020-08-18 00:00:00-04:00,3.5,3.79999995231628,3.5,3.5,3.5,2250,0,0
2020-08-17 00:00:00-04:00,2.79999995231628,3.70000004768372,2.79999995231628,3.70000004768372,3.70000004768372,5050,0,0
2020-08-14 00:00:00-04:00,3.5,3.5,3.5,3.5,3.5,0,0,0
2020-08-13 00:00:00-04:00,3.5,3.5,3.5,3.5,3.5,0,0,0
2020-08-12 00:00:00-04:00,3.5,3.5,3.5,3.5,3.5,0,0,0
2020-08-11 00:00:00-04:00,3.5,3.5,3.5,3.5,3.5,0,0,0
2020-08-10 00:00:00-04:00,3.5,3.70000004768372,3.5,3.5,3.5,3300,0,0
2020-08-07 00:00:00-04:00,3.5,3.79999995231628,3.5,3.79999995231628,3.79999995231628,2500,0,0
2020-08-06 00:00:00-04:00,3.5,3.70000004768372,3.40000009536743,3.70000004768372,3.70000004768372,3000,0,0
2020-08-05 00:00:00-04:00,3.70000004768372,3.70000004768372,3.70000004768372,3.70000004768372,3.70000004768372,0,0,0
2020-08-04 00:00:00-04:00,3.70000004768372,3.70000004768372,3.70000004768372,3.70000004768372,3.70000004768372,0,0,0
1 Date Open High Low Close Adj Close Volume Dividends Stock Splits
2 2020-09-30 00:00:00-04:00 4.40000009536743 4.44999980926514 4.01999998092651 4.44999980926514 4.44999980926514 22600 0 0
3 2020-09-29 00:00:00-04:00 4.3899998664856 4.40000009536743 4.13000011444092 4.30000019073486 4.30000019073486 10800 0 0
4 2020-09-28 00:00:00-04:00 4.09000015258789 4.25 4.09000015258789 4.25 4.25 8000 0 0
5 2020-09-25 00:00:00-04:00 3.95000004768372 4.09999990463257 3.95000004768372 4.05000019073486 4.05000019073486 13500 0 0
6 2020-09-24 00:00:00-04:00 3.84999990463257 4 3.84999990463257 4 4 8800 0 0
7 2020-09-23 00:00:00-04:00 3.99000000953674 4 3.99000000953674 4 4 5900 0 0
8 2020-09-22 00:00:00-04:00 3.90000009536743 4.09999990463257 3.84999990463257 4.09999990463257 4.09999990463257 3100 0 0
9 2020-09-21 00:00:00-04:00 4.09999990463257 4.09999990463257 4.09999990463257 4.09999990463257 4.09999990463257 1200 0 0
10 2020-09-18 00:00:00-04:00 3.92000007629395 4.09999990463257 3.92000007629395 4.09999990463257 4.09999990463257 27200 0 0
11 2020-09-17 00:00:00-04:00 3.90000009536743 3.99000000953674 3.8199999332428 3.99000000953674 3.99000000953674 3300 0 0
12 2020-09-16 00:00:00-04:00 3.79999995231628 4 3.79999995231628 4 4 3300 0 0
13 2020-09-15 00:00:00-04:00 3.95000004768372 4 3.95000004768372 4 4 2400 0 0
14 2020-09-14 00:00:00-04:00 3.96000003814697 4 3.96000003814697 4 4 800 0 0
15 2020-09-11 00:00:00-04:00 3.95000004768372 3.97000002861023 3.72000002861023 3.97000002861023 3.97000002861023 5700 0 0
16 2020-09-10 00:00:00-04:00 4 4.09999990463257 4 4.09999990463257 4.09999990463257 7100 0 0
17 2020-09-09 00:00:00-04:00 3.5699999332428 4 3.5699999332428 4 4 18100 0 0
18 2020-09-08 00:00:00-04:00 3.40000009536743 3.59999990463257 3.40000009536743 3.59999990463257 3.59999990463257 19500 0 0
19 2020-09-04 00:00:00-04:00 3.5 3.5 3.5 3.5 3.5 400 0 0
20 2020-09-03 00:00:00-04:00 3.58999991416931 3.58999991416931 3.58999991416931 3.58999991416931 3.58999991416931 0 0 0
21 2020-09-02 00:00:00-04:00 3.5 3.58999991416931 3.5 3.58999991416931 3.58999991416931 2000 0 0
22 2020-09-01 00:00:00-04:00 3.5 3.59999990463257 3.5 3.59999990463257 3.59999990463257 1200 0 0
23 2020-08-31 00:00:00-04:00 3.15000009536743 3.70000004768372 3.15000009536743 3.70000004768372 3.70000004768372 26500 0 0
24 2020-08-28 00:00:00-04:00 3.76999998092651 3.76999998092651 3.70000004768372 3.70000004768372 3.70000004768372 1600 0 0
25 2020-08-27 00:00:00-04:00 3.65000009536743 3.65000009536743 3.65000009536743 3.65000009536743 3.65000009536743 0 0 0
26 2020-08-26 00:00:00-04:00 0.370000004768372 0.370000004768372 0.370000004768372 0.370000004768372 0.370000004768372 0 0 0.1
27 2020-08-25 00:00:00-04:00 3.40000009536743 3.70000004768372 3.40000009536743 3.70000004768372 3.70000004768372 2900 0 0
28 2020-08-24 00:00:00-04:00 3.29999995231628 3.5 3.29999995231628 3.5 3.5 10000 0 0
29 2020-08-21 00:00:00-04:00 3.5 3.5 3.5 3.5 3.5 150 0 0
30 2020-08-20 00:00:00-04:00 3.5 3.5 3.5 3.5 3.5 0 0 0
31 2020-08-19 00:00:00-04:00 3.40000009536743 3.5 3.40000009536743 3.5 3.5 9050 0 0
32 2020-08-18 00:00:00-04:00 3.5 3.79999995231628 3.5 3.5 3.5 2250 0 0
33 2020-08-17 00:00:00-04:00 2.79999995231628 3.70000004768372 2.79999995231628 3.70000004768372 3.70000004768372 5050 0 0
34 2020-08-14 00:00:00-04:00 3.5 3.5 3.5 3.5 3.5 0 0 0
35 2020-08-13 00:00:00-04:00 3.5 3.5 3.5 3.5 3.5 0 0 0
36 2020-08-12 00:00:00-04:00 3.5 3.5 3.5 3.5 3.5 0 0 0
37 2020-08-11 00:00:00-04:00 3.5 3.5 3.5 3.5 3.5 0 0 0
38 2020-08-10 00:00:00-04:00 3.5 3.70000004768372 3.5 3.5 3.5 3300 0 0
39 2020-08-07 00:00:00-04:00 3.5 3.79999995231628 3.5 3.79999995231628 3.79999995231628 2500 0 0
40 2020-08-06 00:00:00-04:00 3.5 3.70000004768372 3.40000009536743 3.70000004768372 3.70000004768372 3000 0 0
41 2020-08-05 00:00:00-04:00 3.70000004768372 3.70000004768372 3.70000004768372 3.70000004768372 3.70000004768372 0 0 0
42 2020-08-04 00:00:00-04:00 3.70000004768372 3.70000004768372 3.70000004768372 3.70000004768372 3.70000004768372 0 0 0

View File

@@ -0,0 +1,17 @@
Date,Open,High,Low,Close,Adj Close,Volume,Dividends,Stock Splits
2023-05-08 00:00:00+02:00,24.8999996185303,24.9500007629395,24.1000003814697,24.75,24.75,7187,0,0
2023-05-09 00:00:00+02:00,25,25.5,23.1499996185303,24.1499996185303,24.1499996185303,22753,0,0
2023-05-10 00:00:00+02:00,24.1499996185303,24.1499996185303,22,22.9500007629395,22.9500007629395,62727,0,0
2023-05-11 00:00:00+02:00,22.9500007629395,25,22.9500007629395,23.3500003814697,23.3500003814697,19550,0,0
2023-05-12 00:00:00+02:00,23.3500003814697,24,22.1000003814697,23.8500003814697,23.8500003814697,17143,0,0
2023-05-15 00:00:00+02:00,23,25.7999992370605,22.5,23,23,43709,0,0
2023-05-16 00:00:00+02:00,22.75,24.0499992370605,22.5,22.75,22.75,16068,0,0
2023-05-17 00:00:00+02:00,23,23.8500003814697,22.1000003814697,23.6499996185303,23.6499996185303,19926,0,0
2023-05-19 00:00:00+02:00,23.6499996185303,23.8500003814697,22.1000003814697,22.2999992370605,22.2999992370605,41050,0,0
2023-05-22 00:00:00+02:00,22.0000004768372,24.1499996185303,21.5499997138977,22.7500009536743,22.7500009536743,34022,0,0
2023-05-23 00:00:00+02:00,22.75,22.8999996185303,21.75,22.5,22.5,13992,0,0
2023-05-24 00:00:00+02:00,21,24,21,22.0100002288818,22.0100002288818,18306,0,0.1
2023-05-25 00:00:00+02:00,21.5699996948242,22.8899993896484,20,21.1599998474121,21.1599998474121,35398,0,0
2023-05-26 00:00:00+02:00,21.1599998474121,22.4950008392334,20.5,21.0949993133545,21.0949993133545,8039,0,0
2023-05-29 00:00:00+02:00,22.1000003814697,22.1000003814697,20.25,20.75,20.75,17786,0,0
2023-05-30 00:00:00+02:00,20.75,21.6499996185303,20.1499996185303,20.4500007629395,20.4500007629395,10709,0,0
1 Date Open High Low Close Adj Close Volume Dividends Stock Splits
2 2023-05-08 00:00:00+02:00 24.8999996185303 24.9500007629395 24.1000003814697 24.75 24.75 7187 0 0
3 2023-05-09 00:00:00+02:00 25 25.5 23.1499996185303 24.1499996185303 24.1499996185303 22753 0 0
4 2023-05-10 00:00:00+02:00 24.1499996185303 24.1499996185303 22 22.9500007629395 22.9500007629395 62727 0 0
5 2023-05-11 00:00:00+02:00 22.9500007629395 25 22.9500007629395 23.3500003814697 23.3500003814697 19550 0 0
6 2023-05-12 00:00:00+02:00 23.3500003814697 24 22.1000003814697 23.8500003814697 23.8500003814697 17143 0 0
7 2023-05-15 00:00:00+02:00 23 25.7999992370605 22.5 23 23 43709 0 0
8 2023-05-16 00:00:00+02:00 22.75 24.0499992370605 22.5 22.75 22.75 16068 0 0
9 2023-05-17 00:00:00+02:00 23 23.8500003814697 22.1000003814697 23.6499996185303 23.6499996185303 19926 0 0
10 2023-05-19 00:00:00+02:00 23.6499996185303 23.8500003814697 22.1000003814697 22.2999992370605 22.2999992370605 41050 0 0
11 2023-05-22 00:00:00+02:00 22.0000004768372 24.1499996185303 21.5499997138977 22.7500009536743 22.7500009536743 34022 0 0
12 2023-05-23 00:00:00+02:00 22.75 22.8999996185303 21.75 22.5 22.5 13992 0 0
13 2023-05-24 00:00:00+02:00 21 24 21 22.0100002288818 22.0100002288818 18306 0 0.1
14 2023-05-25 00:00:00+02:00 21.5699996948242 22.8899993896484 20 21.1599998474121 21.1599998474121 35398 0 0
15 2023-05-26 00:00:00+02:00 21.1599998474121 22.4950008392334 20.5 21.0949993133545 21.0949993133545 8039 0 0
16 2023-05-29 00:00:00+02:00 22.1000003814697 22.1000003814697 20.25 20.75 20.75 17786 0 0
17 2023-05-30 00:00:00+02:00 20.75 21.6499996185303 20.1499996185303 20.4500007629395 20.4500007629395 10709 0 0

View File

@@ -0,0 +1,17 @@
Date,Open,High,Low,Close,Adj Close,Volume,Dividends,Stock Splits
2023-05-08 00:00:00+02:00,24.899999618530273,24.950000762939453,24.100000381469727,24.75,24.75,7187,0.0,0.0
2023-05-09 00:00:00+02:00,25.0,25.5,23.149999618530273,24.149999618530273,24.149999618530273,22753,0.0,0.0
2023-05-10 00:00:00+02:00,24.149999618530273,24.149999618530273,22.0,22.950000762939453,22.950000762939453,62727,0.0,0.0
2023-05-11 00:00:00+02:00,22.950000762939453,25.0,22.950000762939453,23.350000381469727,23.350000381469727,19550,0.0,0.0
2023-05-12 00:00:00+02:00,23.350000381469727,24.0,22.100000381469727,23.850000381469727,23.850000381469727,17143,0.0,0.0
2023-05-15 00:00:00+02:00,23.0,25.799999237060547,22.5,23.0,23.0,43709,0.0,0.0
2023-05-16 00:00:00+02:00,22.75,24.049999237060547,22.5,22.75,22.75,16068,0.0,0.0
2023-05-17 00:00:00+02:00,23.0,23.850000381469727,22.100000381469727,23.649999618530273,23.649999618530273,19926,0.0,0.0
2023-05-19 00:00:00+02:00,23.649999618530273,23.850000381469727,22.100000381469727,22.299999237060547,22.299999237060547,41050,0.0,0.0
2023-05-22 00:00:00+02:00,2.200000047683716,2.4149999618530273,2.1549999713897705,2.2750000953674316,2.2750000953674316,340215,0.0,0.0
2023-05-23 00:00:00+02:00,22.75,22.899999618530273,21.75,22.5,22.5,13992,0.0,0.0
2023-05-24 00:00:00+02:00,21.0,24.0,21.0,22.010000228881836,22.010000228881836,18306,0.0,0.1
2023-05-25 00:00:00+02:00,21.56999969482422,22.889999389648438,20.0,21.15999984741211,21.15999984741211,35398,0.0,0.0
2023-05-26 00:00:00+02:00,21.15999984741211,22.4950008392334,20.5,21.094999313354492,21.094999313354492,8039,0.0,0.0
2023-05-29 00:00:00+02:00,22.100000381469727,22.100000381469727,20.25,20.75,20.75,17786,0.0,0.0
2023-05-30 00:00:00+02:00,20.75,21.649999618530273,20.149999618530273,20.450000762939453,20.450000762939453,10709,0.0,0.0
1 Date Open High Low Close Adj Close Volume Dividends Stock Splits
2 2023-05-08 00:00:00+02:00 24.899999618530273 24.950000762939453 24.100000381469727 24.75 24.75 7187 0.0 0.0
3 2023-05-09 00:00:00+02:00 25.0 25.5 23.149999618530273 24.149999618530273 24.149999618530273 22753 0.0 0.0
4 2023-05-10 00:00:00+02:00 24.149999618530273 24.149999618530273 22.0 22.950000762939453 22.950000762939453 62727 0.0 0.0
5 2023-05-11 00:00:00+02:00 22.950000762939453 25.0 22.950000762939453 23.350000381469727 23.350000381469727 19550 0.0 0.0
6 2023-05-12 00:00:00+02:00 23.350000381469727 24.0 22.100000381469727 23.850000381469727 23.850000381469727 17143 0.0 0.0
7 2023-05-15 00:00:00+02:00 23.0 25.799999237060547 22.5 23.0 23.0 43709 0.0 0.0
8 2023-05-16 00:00:00+02:00 22.75 24.049999237060547 22.5 22.75 22.75 16068 0.0 0.0
9 2023-05-17 00:00:00+02:00 23.0 23.850000381469727 22.100000381469727 23.649999618530273 23.649999618530273 19926 0.0 0.0
10 2023-05-19 00:00:00+02:00 23.649999618530273 23.850000381469727 22.100000381469727 22.299999237060547 22.299999237060547 41050 0.0 0.0
11 2023-05-22 00:00:00+02:00 2.200000047683716 2.4149999618530273 2.1549999713897705 2.2750000953674316 2.2750000953674316 340215 0.0 0.0
12 2023-05-23 00:00:00+02:00 22.75 22.899999618530273 21.75 22.5 22.5 13992 0.0 0.0
13 2023-05-24 00:00:00+02:00 21.0 24.0 21.0 22.010000228881836 22.010000228881836 18306 0.0 0.1
14 2023-05-25 00:00:00+02:00 21.56999969482422 22.889999389648438 20.0 21.15999984741211 21.15999984741211 35398 0.0 0.0
15 2023-05-26 00:00:00+02:00 21.15999984741211 22.4950008392334 20.5 21.094999313354492 21.094999313354492 8039 0.0 0.0
16 2023-05-29 00:00:00+02:00 22.100000381469727 22.100000381469727 20.25 20.75 20.75 17786 0.0 0.0
17 2023-05-30 00:00:00+02:00 20.75 21.649999618530273 20.149999618530273 20.450000762939453 20.450000762939453 10709 0.0 0.0

View File

@@ -0,0 +1,23 @@
Date,Open,High,Low,Close,Adj Close,Volume,Dividends,Stock Splits
2022-06-01 00:00:00+02:00,5.72999992370606,5.78199996948242,5.3939998626709,5.3939998626709,5.3939998626709,3095860,0,0
2022-06-02 00:00:00+02:00,5.38600006103516,5.38600006103516,5.26800003051758,5.2939998626709,5.2939998626709,1662880,0,0
2022-06-03 00:00:00+02:00,5.34599990844727,5.34599990844727,5.15800018310547,5.16800003051758,5.16800003051758,1698900,0,0
2022-06-06 00:00:00+02:00,5.16800003051758,5.25200004577637,5.13800010681152,5.18800010681152,5.18800010681152,1074910,0,0
2022-06-07 00:00:00+02:00,5.21800003051758,5.22200012207031,5.07400016784668,5.1560001373291,5.1560001373291,1850680,0,0
2022-06-08 00:00:00+02:00,5.1560001373291,5.17599983215332,5.07200012207031,5.10200004577637,5.10200004577637,1140360,0,0
2022-06-09 00:00:00+02:00,5.09799995422363,5.09799995422363,4.87599983215332,4.8939998626709,4.8939998626709,2025480,0,0
2022-06-10 00:00:00+02:00,4.87999992370606,4.87999992370606,4.50400009155274,4.50400009155274,4.50400009155274,2982730,0,0
2022-06-13 00:00:00+02:00,4.3,4.37599983215332,3.83600006103516,3.83600006103516,3.83600006103516,4568210,0,0.1
2022-06-14 00:00:00+02:00,3.87750015258789,4.15999984741211,3.85200004577637,3.9439998626709,3.9439998626709,5354500,0,0
2022-06-15 00:00:00+02:00,4.03400001525879,4.16450004577637,3.73050003051758,3.73050003051758,3.73050003051758,6662610,0,0
2022-06-16 00:00:00+02:00,3.73050003051758,3.98499984741211,3.72400016784668,3.82550010681152,3.82550010681152,13379960,0,0
2022-06-17 00:00:00+02:00,3.8,4.29949989318848,3.75,4.29949989318848,4.29949989318848,12844160,0,0
2022-06-20 00:00:00+02:00,2.19422197341919,2.2295401096344,2.13992595672607,2.2295401096344,2.2295401096344,12364104,0,0
2022-06-21 00:00:00+02:00,2.24719905853272,2.28515291213989,2.19712090492249,2.21557092666626,2.21557092666626,8434013,0,0
2022-06-22 00:00:00+02:00,1.98679196834564,2.00365996360779,1.73798203468323,1.73798203468323,1.73798203468323,26496542,0,0
2022-06-23 00:00:00+02:00,1.62411904335022,1.68526804447174,1.37320005893707,1.59776198863983,1.59776198863983,48720201,0,0
2022-06-24 00:00:00+02:00,1.47599303722382,1.54610300064087,1.1739410161972,1.24932205677032,1.24932205677032,56877192,0,0
2022-06-27 00:00:00+02:00,1.49899995326996,1.79849994182587,1.49899995326996,1.79849994182587,1.79849994182587,460673,0,0
2022-06-28 00:00:00+02:00,2.15799999237061,3.05100011825562,2.12599992752075,3.05100011825562,3.05100011825562,3058635,0,0
2022-06-29 00:00:00+02:00,2.90000009536743,3.73799991607666,2.85899996757507,3.26399993896484,3.26399993896484,6516761,0,0
2022-06-30 00:00:00+02:00,3.24900007247925,3.28099989891052,2.5,2.5550000667572,2.5550000667572,4805984,0,0
1 Date Open High Low Close Adj Close Volume Dividends Stock Splits
2 2022-06-01 00:00:00+02:00 5.72999992370606 5.78199996948242 5.3939998626709 5.3939998626709 5.3939998626709 3095860 0 0
3 2022-06-02 00:00:00+02:00 5.38600006103516 5.38600006103516 5.26800003051758 5.2939998626709 5.2939998626709 1662880 0 0
4 2022-06-03 00:00:00+02:00 5.34599990844727 5.34599990844727 5.15800018310547 5.16800003051758 5.16800003051758 1698900 0 0
5 2022-06-06 00:00:00+02:00 5.16800003051758 5.25200004577637 5.13800010681152 5.18800010681152 5.18800010681152 1074910 0 0
6 2022-06-07 00:00:00+02:00 5.21800003051758 5.22200012207031 5.07400016784668 5.1560001373291 5.1560001373291 1850680 0 0
7 2022-06-08 00:00:00+02:00 5.1560001373291 5.17599983215332 5.07200012207031 5.10200004577637 5.10200004577637 1140360 0 0
8 2022-06-09 00:00:00+02:00 5.09799995422363 5.09799995422363 4.87599983215332 4.8939998626709 4.8939998626709 2025480 0 0
9 2022-06-10 00:00:00+02:00 4.87999992370606 4.87999992370606 4.50400009155274 4.50400009155274 4.50400009155274 2982730 0 0
10 2022-06-13 00:00:00+02:00 4.3 4.37599983215332 3.83600006103516 3.83600006103516 3.83600006103516 4568210 0 0.1
11 2022-06-14 00:00:00+02:00 3.87750015258789 4.15999984741211 3.85200004577637 3.9439998626709 3.9439998626709 5354500 0 0
12 2022-06-15 00:00:00+02:00 4.03400001525879 4.16450004577637 3.73050003051758 3.73050003051758 3.73050003051758 6662610 0 0
13 2022-06-16 00:00:00+02:00 3.73050003051758 3.98499984741211 3.72400016784668 3.82550010681152 3.82550010681152 13379960 0 0
14 2022-06-17 00:00:00+02:00 3.8 4.29949989318848 3.75 4.29949989318848 4.29949989318848 12844160 0 0
15 2022-06-20 00:00:00+02:00 2.19422197341919 2.2295401096344 2.13992595672607 2.2295401096344 2.2295401096344 12364104 0 0
16 2022-06-21 00:00:00+02:00 2.24719905853272 2.28515291213989 2.19712090492249 2.21557092666626 2.21557092666626 8434013 0 0
17 2022-06-22 00:00:00+02:00 1.98679196834564 2.00365996360779 1.73798203468323 1.73798203468323 1.73798203468323 26496542 0 0
18 2022-06-23 00:00:00+02:00 1.62411904335022 1.68526804447174 1.37320005893707 1.59776198863983 1.59776198863983 48720201 0 0
19 2022-06-24 00:00:00+02:00 1.47599303722382 1.54610300064087 1.1739410161972 1.24932205677032 1.24932205677032 56877192 0 0
20 2022-06-27 00:00:00+02:00 1.49899995326996 1.79849994182587 1.49899995326996 1.79849994182587 1.79849994182587 460673 0 0
21 2022-06-28 00:00:00+02:00 2.15799999237061 3.05100011825562 2.12599992752075 3.05100011825562 3.05100011825562 3058635 0 0
22 2022-06-29 00:00:00+02:00 2.90000009536743 3.73799991607666 2.85899996757507 3.26399993896484 3.26399993896484 6516761 0 0
23 2022-06-30 00:00:00+02:00 3.24900007247925 3.28099989891052 2.5 2.5550000667572 2.5550000667572 4805984 0 0

View File

@@ -0,0 +1,23 @@
Date,Open,High,Low,Close,Adj Close,Volume,Dividends,Stock Splits
2022-06-01 00:00:00+02:00,57.29999923706055,57.81999969482422,53.939998626708984,53.939998626708984,53.939998626708984,309586,0.0,0.0
2022-06-02 00:00:00+02:00,53.86000061035156,53.86000061035156,52.68000030517578,52.939998626708984,52.939998626708984,166288,0.0,0.0
2022-06-03 00:00:00+02:00,53.459999084472656,53.459999084472656,51.58000183105469,51.68000030517578,51.68000030517578,169890,0.0,0.0
2022-06-06 00:00:00+02:00,51.68000030517578,52.52000045776367,51.380001068115234,51.880001068115234,51.880001068115234,107491,0.0,0.0
2022-06-07 00:00:00+02:00,52.18000030517578,52.220001220703125,50.7400016784668,51.560001373291016,51.560001373291016,185068,0.0,0.0
2022-06-08 00:00:00+02:00,51.560001373291016,51.7599983215332,50.720001220703125,51.02000045776367,51.02000045776367,114036,0.0,0.0
2022-06-09 00:00:00+02:00,50.97999954223633,50.97999954223633,48.7599983215332,48.939998626708984,48.939998626708984,202548,0.0,0.0
2022-06-10 00:00:00+02:00,48.79999923706055,48.79999923706055,45.040000915527344,45.040000915527344,45.040000915527344,298273,0.0,0.0
2022-06-13 00:00:00+02:00,43.0,43.7599983215332,38.36000061035156,38.36000061035156,38.36000061035156,456821,0.0,0.1
2022-06-14 00:00:00+02:00,38.775001525878906,41.599998474121094,38.52000045776367,39.439998626708984,39.439998626708984,535450,0.0,0.0
2022-06-15 00:00:00+02:00,40.34000015258789,41.64500045776367,37.30500030517578,37.30500030517578,37.30500030517578,666261,0.0,0.0
2022-06-16 00:00:00+02:00,37.30500030517578,39.849998474121094,37.2400016784668,38.255001068115234,38.255001068115234,1337996,0.0,0.0
2022-06-17 00:00:00+02:00,38.0,42.994998931884766,37.5,42.994998931884766,42.994998931884766,1284416,0.0,0.0
2022-06-20 00:00:00+02:00,2.1942219734191895,2.2295401096343994,2.139925956726074,2.2295401096343994,2.2295401096343994,12364104,0.0,0.0
2022-06-21 00:00:00+02:00,2.247199058532715,2.2851529121398926,2.1971209049224854,2.2155709266662598,2.2155709266662598,8434013,0.0,0.0
2022-06-22 00:00:00+02:00,1.986791968345642,2.003659963607788,1.7379820346832275,1.7379820346832275,1.7379820346832275,26496542,0.0,0.0
2022-06-23 00:00:00+02:00,1.6241190433502197,1.6852680444717407,1.3732000589370728,1.5977619886398315,1.5977619886398315,48720201,0.0,0.0
2022-06-24 00:00:00+02:00,1.475993037223816,1.5461030006408691,1.1739410161972046,1.2493220567703247,1.2493220567703247,56877192,0.0,0.0
2022-06-27 00:00:00+02:00,1.4989999532699585,1.7984999418258667,1.4989999532699585,1.7984999418258667,1.7984999418258667,460673,0.0,0.0
2022-06-28 00:00:00+02:00,2.1579999923706055,3.0510001182556152,2.125999927520752,3.0510001182556152,3.0510001182556152,3058635,0.0,0.0
2022-06-29 00:00:00+02:00,2.9000000953674316,3.73799991607666,2.8589999675750732,3.2639999389648438,3.2639999389648438,6516761,0.0,0.0
2022-06-30 00:00:00+02:00,3.249000072479248,3.2809998989105225,2.5,2.555000066757202,2.555000066757202,4805984,0.0,0.0
1 Date Open High Low Close Adj Close Volume Dividends Stock Splits
2 2022-06-01 00:00:00+02:00 57.29999923706055 57.81999969482422 53.939998626708984 53.939998626708984 53.939998626708984 309586 0.0 0.0
3 2022-06-02 00:00:00+02:00 53.86000061035156 53.86000061035156 52.68000030517578 52.939998626708984 52.939998626708984 166288 0.0 0.0
4 2022-06-03 00:00:00+02:00 53.459999084472656 53.459999084472656 51.58000183105469 51.68000030517578 51.68000030517578 169890 0.0 0.0
5 2022-06-06 00:00:00+02:00 51.68000030517578 52.52000045776367 51.380001068115234 51.880001068115234 51.880001068115234 107491 0.0 0.0
6 2022-06-07 00:00:00+02:00 52.18000030517578 52.220001220703125 50.7400016784668 51.560001373291016 51.560001373291016 185068 0.0 0.0
7 2022-06-08 00:00:00+02:00 51.560001373291016 51.7599983215332 50.720001220703125 51.02000045776367 51.02000045776367 114036 0.0 0.0
8 2022-06-09 00:00:00+02:00 50.97999954223633 50.97999954223633 48.7599983215332 48.939998626708984 48.939998626708984 202548 0.0 0.0
9 2022-06-10 00:00:00+02:00 48.79999923706055 48.79999923706055 45.040000915527344 45.040000915527344 45.040000915527344 298273 0.0 0.0
10 2022-06-13 00:00:00+02:00 43.0 43.7599983215332 38.36000061035156 38.36000061035156 38.36000061035156 456821 0.0 0.1
11 2022-06-14 00:00:00+02:00 38.775001525878906 41.599998474121094 38.52000045776367 39.439998626708984 39.439998626708984 535450 0.0 0.0
12 2022-06-15 00:00:00+02:00 40.34000015258789 41.64500045776367 37.30500030517578 37.30500030517578 37.30500030517578 666261 0.0 0.0
13 2022-06-16 00:00:00+02:00 37.30500030517578 39.849998474121094 37.2400016784668 38.255001068115234 38.255001068115234 1337996 0.0 0.0
14 2022-06-17 00:00:00+02:00 38.0 42.994998931884766 37.5 42.994998931884766 42.994998931884766 1284416 0.0 0.0
15 2022-06-20 00:00:00+02:00 2.1942219734191895 2.2295401096343994 2.139925956726074 2.2295401096343994 2.2295401096343994 12364104 0.0 0.0
16 2022-06-21 00:00:00+02:00 2.247199058532715 2.2851529121398926 2.1971209049224854 2.2155709266662598 2.2155709266662598 8434013 0.0 0.0
17 2022-06-22 00:00:00+02:00 1.986791968345642 2.003659963607788 1.7379820346832275 1.7379820346832275 1.7379820346832275 26496542 0.0 0.0
18 2022-06-23 00:00:00+02:00 1.6241190433502197 1.6852680444717407 1.3732000589370728 1.5977619886398315 1.5977619886398315 48720201 0.0 0.0
19 2022-06-24 00:00:00+02:00 1.475993037223816 1.5461030006408691 1.1739410161972046 1.2493220567703247 1.2493220567703247 56877192 0.0 0.0
20 2022-06-27 00:00:00+02:00 1.4989999532699585 1.7984999418258667 1.4989999532699585 1.7984999418258667 1.7984999418258667 460673 0.0 0.0
21 2022-06-28 00:00:00+02:00 2.1579999923706055 3.0510001182556152 2.125999927520752 3.0510001182556152 3.0510001182556152 3058635 0.0 0.0
22 2022-06-29 00:00:00+02:00 2.9000000953674316 3.73799991607666 2.8589999675750732 3.2639999389648438 3.2639999389648438 6516761 0.0 0.0
23 2022-06-30 00:00:00+02:00 3.249000072479248 3.2809998989105225 2.5 2.555000066757202 2.555000066757202 4805984 0.0 0.0

View File

@@ -0,0 +1,30 @@
Date,Open,High,Low,Close,Adj Close,Volume,Dividends,Stock Splits
2023-06-09 00:00:00+02:00,34.7000,34.7100,33.2400,33.6200,33.6200,7148409,0,0
2023-06-08 00:00:00+02:00,34.9000,34.9900,34.0400,34.3600,34.3600,10406999,0,0
2023-06-07 00:00:00+02:00,34.5500,35.6400,34.3200,35.0900,35.0900,10118918,0,0
2023-06-06 00:00:00+02:00,34.5000,34.8200,34.0500,34.4600,34.4600,9109709,0,0
2023-06-05 00:00:00+02:00,35.0000,35.3000,34.2000,34.7000,34.7000,8791993,0,0
2023-06-02 00:00:00+02:00,35.6900,36.1800,34.6000,34.9700,34.9700,8844549,0,0
2023-06-01 00:00:00+02:00,35.2300,35.3800,34.2400,35.3500,35.3500,6721030,0,0
2023-05-31 00:00:00+02:00,34.8,35.48,34.26,35.01,35.01,32605833,0,0
2023-05-30 00:00:00+02:00,34.39,35.37,33.85,34.23,34.23,8970804,0,0
2023-05-29 00:00:00+02:00,34.66,35.06,34.02,34.32,34.32,3912803,0,0
2023-05-26 00:00:00+02:00,34.75,35.99,34.33,34.53,34.53,6744718,0,0
2023-05-25 00:00:00+02:00,35.4,36.09,34.63,35.07,35.07,16900221,0,0
2023-05-24 00:00:00+02:00,36.2,36.5,35.26,35.4,35.4,9049505,0,0
2023-05-23 00:00:00+02:00,36.9,36.67,35.56,36.1,36.1,10797373,0,0
2023-05-22 00:00:00+02:00,37.05,37.36,36.09,36.61,36.61,7132641,0,0
2023-05-19 00:00:00+02:00,36.2,37.15,36.25,36.9,36.9,12648518,0,0
2023-05-18 00:00:00+02:00,36.57,36.99,35.84,36.46,36.46,10674542,0,0
2023-05-17 00:00:00+02:00,36.87,37.31,36.56,36.71,36.71,9892791,0,0
2023-05-16 00:00:00+02:00,37.15,37.73,36.96,37.03,37.03,4706789,0,0
2023-05-15 00:00:00+02:00,37.74,38.05,36.96,37.27,37.27,7890969,0,0
2023-05-12 00:00:00+02:00,37.5,38.44,36.71,37.74,37.74,8724303,0,0
2023-05-11 00:00:00+02:00,38.8,38.88,37.01,37.32,37.32,14371855,0,0
2023-05-10 00:00:00+02:00,38.93,38.8,36.42,38.1,38.1,30393389,0,0
2023-05-09 00:00:00+02:00,44.41,44.41,39.39,39.66,39.66,19833428,0,0
2023-05-08 00:00:00+02:00,44.63,45.78,44.56,44.71,44.71,11092519,0,0
2023-05-05 00:00:00+02:00,42.99,44.9,42.87,44.58,44.58,28539048,0,0
2023-05-04 00:00:00+02:00,41.49,43.3,41.23,42.83,42.83,15506868,0,0
2023-05-03 00:00:00+02:00,39.75,40.98,39.68,40.95,40.95,14657028,0,0
2023-05-02 00:00:00+02:00,40.37,40.32,39.17,39.65,39.65,11818133,0,0
1 Date Open High Low Close Adj Close Volume Dividends Stock Splits
2 2023-06-09 00:00:00+02:00 34.7000 34.7100 33.2400 33.6200 33.6200 7148409 0 0
3 2023-06-08 00:00:00+02:00 34.9000 34.9900 34.0400 34.3600 34.3600 10406999 0 0
4 2023-06-07 00:00:00+02:00 34.5500 35.6400 34.3200 35.0900 35.0900 10118918 0 0
5 2023-06-06 00:00:00+02:00 34.5000 34.8200 34.0500 34.4600 34.4600 9109709 0 0
6 2023-06-05 00:00:00+02:00 35.0000 35.3000 34.2000 34.7000 34.7000 8791993 0 0
7 2023-06-02 00:00:00+02:00 35.6900 36.1800 34.6000 34.9700 34.9700 8844549 0 0
8 2023-06-01 00:00:00+02:00 35.2300 35.3800 34.2400 35.3500 35.3500 6721030 0 0
9 2023-05-31 00:00:00+02:00 34.8 35.48 34.26 35.01 35.01 32605833 0 0
10 2023-05-30 00:00:00+02:00 34.39 35.37 33.85 34.23 34.23 8970804 0 0
11 2023-05-29 00:00:00+02:00 34.66 35.06 34.02 34.32 34.32 3912803 0 0
12 2023-05-26 00:00:00+02:00 34.75 35.99 34.33 34.53 34.53 6744718 0 0
13 2023-05-25 00:00:00+02:00 35.4 36.09 34.63 35.07 35.07 16900221 0 0
14 2023-05-24 00:00:00+02:00 36.2 36.5 35.26 35.4 35.4 9049505 0 0
15 2023-05-23 00:00:00+02:00 36.9 36.67 35.56 36.1 36.1 10797373 0 0
16 2023-05-22 00:00:00+02:00 37.05 37.36 36.09 36.61 36.61 7132641 0 0
17 2023-05-19 00:00:00+02:00 36.2 37.15 36.25 36.9 36.9 12648518 0 0
18 2023-05-18 00:00:00+02:00 36.57 36.99 35.84 36.46 36.46 10674542 0 0
19 2023-05-17 00:00:00+02:00 36.87 37.31 36.56 36.71 36.71 9892791 0 0
20 2023-05-16 00:00:00+02:00 37.15 37.73 36.96 37.03 37.03 4706789 0 0
21 2023-05-15 00:00:00+02:00 37.74 38.05 36.96 37.27 37.27 7890969 0 0
22 2023-05-12 00:00:00+02:00 37.5 38.44 36.71 37.74 37.74 8724303 0 0
23 2023-05-11 00:00:00+02:00 38.8 38.88 37.01 37.32 37.32 14371855 0 0
24 2023-05-10 00:00:00+02:00 38.93 38.8 36.42 38.1 38.1 30393389 0 0
25 2023-05-09 00:00:00+02:00 44.41 44.41 39.39 39.66 39.66 19833428 0 0
26 2023-05-08 00:00:00+02:00 44.63 45.78 44.56 44.71 44.71 11092519 0 0
27 2023-05-05 00:00:00+02:00 42.99 44.9 42.87 44.58 44.58 28539048 0 0
28 2023-05-04 00:00:00+02:00 41.49 43.3 41.23 42.83 42.83 15506868 0 0
29 2023-05-03 00:00:00+02:00 39.75 40.98 39.68 40.95 40.95 14657028 0 0
30 2023-05-02 00:00:00+02:00 40.37 40.32 39.17 39.65 39.65 11818133 0 0

View File

@@ -0,0 +1,30 @@
Date,Open,High,Low,Close,Adj Close,Volume,Dividends,Stock Splits
2023-06-09 00:00:00+02:00,34.700001,34.709999,33.240002,33.619999,33.619999,7148409,0,0
2023-06-08 00:00:00+02:00,34.900002,34.990002,34.040001,34.360001,34.360001,10406999,0,0
2023-06-07 00:00:00+02:00,34.549999,35.639999,34.320000,35.090000,35.090000,10118918,0,0
2023-06-06 00:00:00+02:00,34.500000,34.820000,34.049999,34.459999,34.459999,9109709,0,0
2023-06-05 00:00:00+02:00,35.000000,35.299999,34.200001,34.700001,34.700001,8791993,0,0
2023-06-02 00:00:00+02:00,35.689999,36.180000,34.599998,34.970001,34.970001,8844549,0,0
2023-06-01 00:00:00+02:00,35.230000,35.380001,34.240002,35.349998,35.349998,6721030,0,0
2023-05-31 00:00:00+02:00,3480,3548,3426,3501,3501,32605833,0,0
2023-05-30 00:00:00+02:00,3439,3537,3385,3423,3423,8970804,0,0
2023-05-29 00:00:00+02:00,3466,3506,3402,3432,3432,3912803,0,0
2023-05-26 00:00:00+02:00,3475,3599,3433,3453,3453,6744718,0,0
2023-05-25 00:00:00+02:00,3540,3609,3463,3507,3507,16900221,0,0
2023-05-24 00:00:00+02:00,3620,3650,3526,3540,3540,9049505,0,0
2023-05-23 00:00:00+02:00,3690,3667,3556,3610,3610,10797373,0,0
2023-05-22 00:00:00+02:00,3705,3736,3609,3661,3661,7132641,0,0
2023-05-19 00:00:00+02:00,3620,3715,3625,3690,3690,12648518,0,0
2023-05-18 00:00:00+02:00,3657,3699,3584,3646,3646,10674542,0,0
2023-05-17 00:00:00+02:00,3687,3731,3656,3671,3671,9892791,0,0
2023-05-16 00:00:00+02:00,3715,3773,3696,3703,3703,4706789,0,0
2023-05-15 00:00:00+02:00,3774,3805,3696,3727,3727,7890969,0,0
2023-05-12 00:00:00+02:00,3750,3844,3671,3774,3774,8724303,0,0
2023-05-11 00:00:00+02:00,3880,3888,3701,3732,3732,14371855,0,0
2023-05-10 00:00:00+02:00,3893,3880,3642,3810,3810,30393389,0,0
2023-05-09 00:00:00+02:00,4441,4441,3939,3966,3966,19833428,0,0
2023-05-08 00:00:00+02:00,4463,4578,4456,4471,4471,11092519,0,0
2023-05-05 00:00:00+02:00,4299,4490,4287,4458,4458,28539048,0,0
2023-05-04 00:00:00+02:00,4149,4330,4123,4283,4283,15506868,0,0
2023-05-03 00:00:00+02:00,3975,4098,3968,4095,4095,14657028,0,0
2023-05-02 00:00:00+02:00,4037,4032,3917,3965,3965,11818133,0,0
1 Date Open High Low Close Adj Close Volume Dividends Stock Splits
2 2023-06-09 00:00:00+02:00 34.700001 34.709999 33.240002 33.619999 33.619999 7148409 0 0
3 2023-06-08 00:00:00+02:00 34.900002 34.990002 34.040001 34.360001 34.360001 10406999 0 0
4 2023-06-07 00:00:00+02:00 34.549999 35.639999 34.320000 35.090000 35.090000 10118918 0 0
5 2023-06-06 00:00:00+02:00 34.500000 34.820000 34.049999 34.459999 34.459999 9109709 0 0
6 2023-06-05 00:00:00+02:00 35.000000 35.299999 34.200001 34.700001 34.700001 8791993 0 0
7 2023-06-02 00:00:00+02:00 35.689999 36.180000 34.599998 34.970001 34.970001 8844549 0 0
8 2023-06-01 00:00:00+02:00 35.230000 35.380001 34.240002 35.349998 35.349998 6721030 0 0
9 2023-05-31 00:00:00+02:00 3480 3548 3426 3501 3501 32605833 0 0
10 2023-05-30 00:00:00+02:00 3439 3537 3385 3423 3423 8970804 0 0
11 2023-05-29 00:00:00+02:00 3466 3506 3402 3432 3432 3912803 0 0
12 2023-05-26 00:00:00+02:00 3475 3599 3433 3453 3453 6744718 0 0
13 2023-05-25 00:00:00+02:00 3540 3609 3463 3507 3507 16900221 0 0
14 2023-05-24 00:00:00+02:00 3620 3650 3526 3540 3540 9049505 0 0
15 2023-05-23 00:00:00+02:00 3690 3667 3556 3610 3610 10797373 0 0
16 2023-05-22 00:00:00+02:00 3705 3736 3609 3661 3661 7132641 0 0
17 2023-05-19 00:00:00+02:00 3620 3715 3625 3690 3690 12648518 0 0
18 2023-05-18 00:00:00+02:00 3657 3699 3584 3646 3646 10674542 0 0
19 2023-05-17 00:00:00+02:00 3687 3731 3656 3671 3671 9892791 0 0
20 2023-05-16 00:00:00+02:00 3715 3773 3696 3703 3703 4706789 0 0
21 2023-05-15 00:00:00+02:00 3774 3805 3696 3727 3727 7890969 0 0
22 2023-05-12 00:00:00+02:00 3750 3844 3671 3774 3774 8724303 0 0
23 2023-05-11 00:00:00+02:00 3880 3888 3701 3732 3732 14371855 0 0
24 2023-05-10 00:00:00+02:00 3893 3880 3642 3810 3810 30393389 0 0
25 2023-05-09 00:00:00+02:00 4441 4441 3939 3966 3966 19833428 0 0
26 2023-05-08 00:00:00+02:00 4463 4578 4456 4471 4471 11092519 0 0
27 2023-05-05 00:00:00+02:00 4299 4490 4287 4458 4458 28539048 0 0
28 2023-05-04 00:00:00+02:00 4149 4330 4123 4283 4283 15506868 0 0
29 2023-05-03 00:00:00+02:00 3975 4098 3968 4095 4095 14657028 0 0
30 2023-05-02 00:00:00+02:00 4037 4032 3917 3965 3965 11818133 0 0

1042
tests/prices.py Normal file

File diff suppressed because it is too large Load Diff

924
tests/ticker.py Normal file
View File

@@ -0,0 +1,924 @@
"""
Tests for Ticker
To run all tests in suite from commandline:
python -m unittest tests.ticker
Specific test class:
python -m unittest tests.ticker.TestTicker
"""
import pandas as pd
from .context import yfinance as yf
from .context import session_gbl
from yfinance.exceptions import YFNotImplementedError
import unittest
import requests_cache
from typing import Union, Any
ticker_attributes = (
("major_holders", pd.DataFrame),
("institutional_holders", pd.DataFrame),
("mutualfund_holders", pd.DataFrame),
("splits", pd.Series),
("actions", pd.DataFrame),
("shares", pd.DataFrame),
("info", dict),
("calendar", pd.DataFrame),
("recommendations", Union[pd.DataFrame, dict]),
("earnings", pd.DataFrame),
("quarterly_earnings", pd.DataFrame),
("recommendations_summary", Union[pd.DataFrame, dict]),
("quarterly_cashflow", pd.DataFrame),
("cashflow", pd.DataFrame),
("quarterly_balance_sheet", pd.DataFrame),
("balance_sheet", pd.DataFrame),
("quarterly_income_stmt", pd.DataFrame),
("income_stmt", pd.DataFrame),
("analyst_price_target", pd.DataFrame),
("revenue_forecasts", pd.DataFrame),
("sustainability", pd.DataFrame),
("options", tuple),
("news", Any),
("earnings_trend", pd.DataFrame),
("earnings_dates", pd.DataFrame),
("earnings_forecasts", pd.DataFrame),
)
def assert_attribute_type(testClass: unittest.TestCase, instance, attribute_name, expected_type):
try:
attribute = getattr(instance, attribute_name)
if attribute is not None and expected_type is not Any:
testClass.assertEqual(type(attribute), expected_type)
except Exception:
testClass.assertRaises(
YFNotImplementedError, lambda: getattr(instance, attribute_name)
)
class TestTicker(unittest.TestCase):
session = None
@classmethod
def setUpClass(cls):
cls.session = session_gbl
cls.proxy = None
@classmethod
def tearDownClass(cls):
if cls.session is not None:
cls.session.close()
def test_getTz(self):
tkrs = ["IMP.JO", "BHG.JO", "SSW.JO", "BP.L", "INTC"]
for tkr in tkrs:
# First step: remove ticker from tz-cache
yf.utils.get_tz_cache().store(tkr, None)
# Test:
dat = yf.Ticker(tkr, session=self.session)
tz = dat._get_ticker_tz(proxy=None, timeout=None)
self.assertIsNotNone(tz)
def test_badTicker(self):
# Check yfinance doesn't die when ticker delisted
tkr = "DJI" # typo of "^DJI"
dat = yf.Ticker(tkr, session=self.session)
dat.history(period="1wk")
dat.history(start="2022-01-01")
dat.history(start="2022-01-01", end="2022-03-01")
yf.download([tkr], period="1wk", threads=False, ignore_tz=False)
yf.download([tkr], period="1wk", threads=True, ignore_tz=False)
yf.download([tkr], period="1wk", threads=False, ignore_tz=True)
yf.download([tkr], period="1wk", threads=True, ignore_tz=True)
for k in dat.fast_info:
dat.fast_info[k]
for attribute_name, attribute_type in ticker_attributes:
assert_attribute_type(self, dat, attribute_name, attribute_type)
def test_goodTicker(self):
# that yfinance works when full api is called on same instance of ticker
tkrs = ["IBM"]
tkrs.append("QCSTIX") # weird ticker, no price history but has previous close
for tkr in tkrs:
dat = yf.Ticker(tkr, session=self.session)
dat.history(period="1wk")
dat.history(start="2022-01-01")
dat.history(start="2022-01-01", end="2022-03-01")
yf.download([tkr], period="1wk", threads=False, ignore_tz=False)
yf.download([tkr], period="1wk", threads=True, ignore_tz=False)
yf.download([tkr], period="1wk", threads=False, ignore_tz=True)
yf.download([tkr], period="1wk", threads=True, ignore_tz=True)
for k in dat.fast_info:
dat.fast_info[k]
for attribute_name, attribute_type in ticker_attributes:
assert_attribute_type(self, dat, attribute_name, attribute_type)
#TODO:: Refactor with `assert_attribute` once proxy is accepted as a parameter of `Ticker`
def test_goodTicker_withProxy(self):
# that yfinance works when full api is called on same instance of ticker
tkr = "IBM"
dat = yf.Ticker(tkr, session=self.session)
dat._fetch_ticker_tz(proxy=self.proxy, timeout=5)
dat._get_ticker_tz(proxy=self.proxy, timeout=5)
dat.history(period="1wk", proxy=self.proxy)
v = dat.get_major_holders(proxy=self.proxy)
self.assertIsNotNone(v)
self.assertFalse(v.empty)
v = dat.get_institutional_holders(proxy=self.proxy)
self.assertIsNotNone(v)
self.assertFalse(v.empty)
v = dat.get_mutualfund_holders(proxy=self.proxy)
self.assertIsNotNone(v)
self.assertFalse(v.empty)
v = dat.get_info(proxy=self.proxy)
self.assertIsNotNone(v)
self.assertTrue(len(v) > 0)
v = dat.get_income_stmt(proxy=self.proxy)
self.assertIsNotNone(v)
self.assertFalse(v.empty)
v = dat.get_incomestmt(proxy=self.proxy)
self.assertIsNotNone(v)
self.assertFalse(v.empty)
v = dat.get_financials(proxy=self.proxy)
self.assertIsNotNone(v)
self.assertFalse(v.empty)
v = dat.get_balance_sheet(proxy=self.proxy)
self.assertIsNotNone(v)
self.assertFalse(v.empty)
v = dat.get_balancesheet(proxy=self.proxy)
self.assertIsNotNone(v)
self.assertFalse(v.empty)
v = dat.get_cash_flow(proxy=self.proxy)
self.assertIsNotNone(v)
self.assertFalse(v.empty)
v = dat.get_cashflow(proxy=self.proxy)
self.assertIsNotNone(v)
self.assertFalse(v.empty)
v = dat.get_shares_full(proxy=self.proxy)
self.assertIsNotNone(v)
self.assertFalse(v.empty)
v = dat.get_isin(proxy=self.proxy)
self.assertIsNotNone(v)
self.assertTrue(v != "")
v = dat.get_news(proxy=self.proxy)
self.assertIsNotNone(v)
self.assertTrue(len(v) > 0)
v = dat.get_earnings_dates(proxy=self.proxy)
self.assertIsNotNone(v)
self.assertFalse(v.empty)
dat.get_history_metadata(proxy=self.proxy)
self.assertIsNotNone(v)
self.assertTrue(len(v) > 0)
# Below will fail because not ported to Yahoo API
# v = dat.stats(proxy=self.proxy)
# self.assertIsNotNone(v)
# self.assertTrue(len(v) > 0)
# v = dat.get_recommendations(proxy=self.proxy)
# self.assertIsNotNone(v)
# self.assertFalse(v.empty)
# v = dat.get_calendar(proxy=self.proxy)
# self.assertIsNotNone(v)
# self.assertFalse(v.empty)
# v = dat.get_sustainability(proxy=self.proxy)
# self.assertIsNotNone(v)
# self.assertFalse(v.empty)
# v = dat.get_recommendations_summary(proxy=self.proxy)
# self.assertIsNotNone(v)
# self.assertFalse(v.empty)
# v = dat.get_analyst_price_target(proxy=self.proxy)
# self.assertIsNotNone(v)
# self.assertFalse(v.empty)
# v = dat.get_rev_forecast(proxy=self.proxy)
# self.assertIsNotNone(v)
# self.assertFalse(v.empty)
# v = dat.get_earnings_forecast(proxy=self.proxy)
# self.assertIsNotNone(v)
# self.assertFalse(v.empty)
# v = dat.get_trend_details(proxy=self.proxy)
# self.assertIsNotNone(v)
# self.assertFalse(v.empty)
# v = dat.get_earnings_trend(proxy=self.proxy)
# self.assertIsNotNone(v)
# self.assertFalse(v.empty)
# v = dat.get_earnings(proxy=self.proxy)
# self.assertIsNotNone(v)
# self.assertFalse(v.empty)
# v = dat.get_shares(proxy=self.proxy)
# self.assertIsNotNone(v)
# self.assertFalse(v.empty)
class TestTickerHistory(unittest.TestCase):
session = None
@classmethod
def setUpClass(cls):
cls.session = session_gbl
@classmethod
def tearDownClass(cls):
if cls.session is not None:
cls.session.close()
def setUp(self):
# use a ticker that has dividends
self.symbol = "IBM"
self.ticker = yf.Ticker(self.symbol, session=self.session)
self.symbols = ["AMZN", "MSFT", "NVDA"]
def tearDown(self):
self.ticker = None
def test_history(self):
md = self.ticker.history_metadata
self.assertIn("IBM", md.values(), "metadata missing")
data = self.ticker.history("1y")
self.assertIsInstance(data, pd.DataFrame, "data has wrong type")
self.assertFalse(data.empty, "data is empty")
def test_download(self):
for t in [False, True]:
for i in [False, True]:
data = yf.download(self.symbols, threads=t, ignore_tz=i)
self.assertIsInstance(data, pd.DataFrame, "data has wrong type")
self.assertFalse(data.empty, "data is empty")
def test_no_expensive_calls_introduced(self):
"""
Make sure calling history to get price data has not introduced more calls to yahoo than absolutely necessary.
As doing other type of scraping calls than "query2.finance.yahoo.com/v8/finance/chart" to yahoo website
will quickly trigger spam-block when doing bulk download of history data.
"""
symbol = "GOOGL"
range = "1y"
with requests_cache.CachedSession(backend="memory") as session:
ticker = yf.Ticker(symbol, session=session)
ticker.history(range)
actual_urls_called = tuple([r.url for r in session.cache.filter()])
expected_urls = (
f"https://query2.finance.yahoo.com/v8/finance/chart/{symbol}?events=div%2Csplits%2CcapitalGains&includePrePost=False&interval=1d&range={range}",
)
self.assertEqual(
expected_urls,
actual_urls_called,
"Different than expected url used to fetch history."
)
def test_dividends(self):
data = self.ticker.dividends
self.assertIsInstance(data, pd.Series, "data has wrong type")
self.assertFalse(data.empty, "data is empty")
def test_splits(self):
data = self.ticker.splits
self.assertIsInstance(data, pd.Series, "data has wrong type")
# self.assertFalse(data.empty, "data is empty")
def test_actions(self):
data = self.ticker.actions
self.assertIsInstance(data, pd.DataFrame, "data has wrong type")
self.assertFalse(data.empty, "data is empty")
# Below will fail because not ported to Yahoo API
# class TestTickerEarnings(unittest.TestCase):
# session = None
# @classmethod
# def setUpClass(cls):
# cls.session = session_gbl
# @classmethod
# def tearDownClass(cls):
# if cls.session is not None:
# cls.session.close()
# def setUp(self):
# self.ticker = yf.Ticker("GOOGL", session=self.session)
# def tearDown(self):
# self.ticker = None
# def test_earnings(self):
# data = self.ticker.earnings
# self.assertIsInstance(data, pd.DataFrame, "data has wrong type")
# self.assertFalse(data.empty, "data is empty")
# data_cached = self.ticker.earnings
# self.assertIs(data, data_cached, "data not cached")
# def test_quarterly_earnings(self):
# data = self.ticker.quarterly_earnings
# self.assertIsInstance(data, pd.DataFrame, "data has wrong type")
# self.assertFalse(data.empty, "data is empty")
# data_cached = self.ticker.quarterly_earnings
# self.assertIs(data, data_cached, "data not cached")
# def test_earnings_forecasts(self):
# data = self.ticker.earnings_forecasts
# self.assertIsInstance(data, pd.DataFrame, "data has wrong type")
# self.assertFalse(data.empty, "data is empty")
# data_cached = self.ticker.earnings_forecasts
# self.assertIs(data, data_cached, "data not cached")
# def test_earnings_dates(self):
# data = self.ticker.earnings_dates
# self.assertIsInstance(data, pd.DataFrame, "data has wrong type")
# self.assertFalse(data.empty, "data is empty")
# data_cached = self.ticker.earnings_dates
# self.assertIs(data, data_cached, "data not cached")
# def test_earnings_trend(self):
# data = self.ticker.earnings_trend
# self.assertIsInstance(data, pd.DataFrame, "data has wrong type")
# self.assertFalse(data.empty, "data is empty")
# data_cached = self.ticker.earnings_trend
# self.assertIs(data, data_cached, "data not cached")
# def test_earnings_dates_with_limit(self):
# # use ticker with lots of historic earnings
# ticker = yf.Ticker("IBM")
# limit = 110
# data = ticker.get_earnings_dates(limit=limit)
# self.assertIsInstance(data, pd.DataFrame, "data has wrong type")
# self.assertFalse(data.empty, "data is empty")
# self.assertEqual(len(data), limit, "Wrong number or rows")
# data_cached = ticker.get_earnings_dates(limit=limit)
# self.assertIs(data, data_cached, "data not cached")
class TestTickerHolders(unittest.TestCase):
session = None
@classmethod
def setUpClass(cls):
cls.session = session_gbl
@classmethod
def tearDownClass(cls):
if cls.session is not None:
cls.session.close()
def setUp(self):
self.ticker = yf.Ticker("GOOGL", session=self.session)
def tearDown(self):
self.ticker = None
def test_major_holders(self):
data = self.ticker.major_holders
self.assertIsInstance(data, pd.DataFrame, "data has wrong type")
self.assertFalse(data.empty, "data is empty")
data_cached = self.ticker.major_holders
self.assertIs(data, data_cached, "data not cached")
def test_institutional_holders(self):
data = self.ticker.institutional_holders
self.assertIsInstance(data, pd.DataFrame, "data has wrong type")
self.assertFalse(data.empty, "data is empty")
data_cached = self.ticker.institutional_holders
self.assertIs(data, data_cached, "data not cached")
def test_mutualfund_holders(self):
data = self.ticker.mutualfund_holders
self.assertIsInstance(data, pd.DataFrame, "data has wrong type")
self.assertFalse(data.empty, "data is empty")
data_cached = self.ticker.mutualfund_holders
self.assertIs(data, data_cached, "data not cached")
class TestTickerMiscFinancials(unittest.TestCase):
session = None
@classmethod
def setUpClass(cls):
cls.session = session_gbl
@classmethod
def tearDownClass(cls):
if cls.session is not None:
cls.session.close()
def setUp(self):
self.ticker = yf.Ticker("GOOGL", session=self.session)
# For ticker 'BSE.AX' (and others), Yahoo not returning
# full quarterly financials (usually cash-flow) with all entries,
# instead returns a smaller version in different data store.
self.ticker_old_fmt = yf.Ticker("BSE.AX", session=self.session)
def tearDown(self):
self.ticker = None
def test_isin(self):
data = self.ticker.isin
self.assertIsInstance(data, str, "data has wrong type")
self.assertEqual("ARDEUT116159", data, "data is empty")
data_cached = self.ticker.isin
self.assertIs(data, data_cached, "data not cached")
def test_options(self):
data = self.ticker.options
self.assertIsInstance(data, tuple, "data has wrong type")
self.assertTrue(len(data) > 1, "data is empty")
def test_shares_full(self):
data = self.ticker.get_shares_full()
self.assertIsInstance(data, pd.Series, "data has wrong type")
self.assertFalse(data.empty, "data is empty")
def test_income_statement(self):
expected_keys = ["Total Revenue", "Basic EPS"]
expected_periods_days = 365
# Test contents of table
data = self.ticker.get_income_stmt(pretty=True)
self.assertIsInstance(data, pd.DataFrame, "data has wrong type")
self.assertFalse(data.empty, "data is empty")
for k in expected_keys:
self.assertIn(k, data.index, "Did not find expected row in index")
period = abs((data.columns[0]-data.columns[1]).days)
self.assertLess(abs(period-expected_periods_days), 20, "Not returning annual financials")
# Test property defaults
data2 = self.ticker.income_stmt
self.assertTrue(data.equals(data2), "property not defaulting to 'pretty=True'")
# Test pretty=False
expected_keys = [k.replace(' ', '') for k in expected_keys]
data = self.ticker.get_income_stmt(pretty=False)
self.assertIsInstance(data, pd.DataFrame, "data has wrong type")
self.assertFalse(data.empty, "data is empty")
for k in expected_keys:
self.assertIn(k, data.index, "Did not find expected row in index")
# Test to_dict
data = self.ticker.get_income_stmt(as_dict=True)
self.assertIsInstance(data, dict, "data has wrong type")
def test_quarterly_income_statement(self):
expected_keys = ["Total Revenue", "Basic EPS"]
expected_periods_days = 365//4
# Test contents of table
data = self.ticker.get_income_stmt(pretty=True, freq="quarterly")
self.assertIsInstance(data, pd.DataFrame, "data has wrong type")
self.assertFalse(data.empty, "data is empty")
for k in expected_keys:
self.assertIn(k, data.index, "Did not find expected row in index")
period = abs((data.columns[0]-data.columns[1]).days)
self.assertLess(abs(period-expected_periods_days), 20, "Not returning quarterly financials")
# Test property defaults
data2 = self.ticker.quarterly_income_stmt
self.assertTrue(data.equals(data2), "property not defaulting to 'pretty=True'")
# Test pretty=False
expected_keys = [k.replace(' ', '') for k in expected_keys]
data = self.ticker.get_income_stmt(pretty=False, freq="quarterly")
self.assertIsInstance(data, pd.DataFrame, "data has wrong type")
self.assertFalse(data.empty, "data is empty")
for k in expected_keys:
self.assertIn(k, data.index, "Did not find expected row in index")
# Test to_dict
data = self.ticker.get_income_stmt(as_dict=True)
self.assertIsInstance(data, dict, "data has wrong type")
def test_balance_sheet(self):
expected_keys = ["Total Assets", "Net PPE"]
expected_periods_days = 365
# Test contents of table
data = self.ticker.get_balance_sheet(pretty=True)
self.assertIsInstance(data, pd.DataFrame, "data has wrong type")
self.assertFalse(data.empty, "data is empty")
for k in expected_keys:
self.assertIn(k, data.index, "Did not find expected row in index")
period = abs((data.columns[0]-data.columns[1]).days)
self.assertLess(abs(period-expected_periods_days), 20, "Not returning annual financials")
# Test property defaults
data2 = self.ticker.balance_sheet
self.assertTrue(data.equals(data2), "property not defaulting to 'pretty=True'")
# Test pretty=False
expected_keys = [k.replace(' ', '') for k in expected_keys]
data = self.ticker.get_balance_sheet(pretty=False)
self.assertIsInstance(data, pd.DataFrame, "data has wrong type")
self.assertFalse(data.empty, "data is empty")
for k in expected_keys:
self.assertIn(k, data.index, "Did not find expected row in index")
# Test to_dict
data = self.ticker.get_balance_sheet(as_dict=True)
self.assertIsInstance(data, dict, "data has wrong type")
def test_quarterly_balance_sheet(self):
expected_keys = ["Total Assets", "Net PPE"]
expected_periods_days = 365//4
# Test contents of table
data = self.ticker.get_balance_sheet(pretty=True, freq="quarterly")
self.assertIsInstance(data, pd.DataFrame, "data has wrong type")
self.assertFalse(data.empty, "data is empty")
for k in expected_keys:
self.assertIn(k, data.index, "Did not find expected row in index")
period = abs((data.columns[0]-data.columns[1]).days)
self.assertLess(abs(period-expected_periods_days), 20, "Not returning quarterly financials")
# Test property defaults
data2 = self.ticker.quarterly_balance_sheet
self.assertTrue(data.equals(data2), "property not defaulting to 'pretty=True'")
# Test pretty=False
expected_keys = [k.replace(' ', '') for k in expected_keys]
data = self.ticker.get_balance_sheet(pretty=False, freq="quarterly")
self.assertIsInstance(data, pd.DataFrame, "data has wrong type")
self.assertFalse(data.empty, "data is empty")
for k in expected_keys:
self.assertIn(k, data.index, "Did not find expected row in index")
# Test to_dict
data = self.ticker.get_balance_sheet(as_dict=True, freq="quarterly")
self.assertIsInstance(data, dict, "data has wrong type")
def test_cash_flow(self):
expected_keys = ["Operating Cash Flow", "Net PPE Purchase And Sale"]
expected_periods_days = 365
# Test contents of table
data = self.ticker.get_cashflow(pretty=True)
self.assertIsInstance(data, pd.DataFrame, "data has wrong type")
self.assertFalse(data.empty, "data is empty")
for k in expected_keys:
self.assertIn(k, data.index, "Did not find expected row in index")
period = abs((data.columns[0]-data.columns[1]).days)
self.assertLess(abs(period-expected_periods_days), 20, "Not returning annual financials")
# Test property defaults
data2 = self.ticker.cashflow
self.assertTrue(data.equals(data2), "property not defaulting to 'pretty=True'")
# Test pretty=False
expected_keys = [k.replace(' ', '') for k in expected_keys]
data = self.ticker.get_cashflow(pretty=False)
self.assertIsInstance(data, pd.DataFrame, "data has wrong type")
self.assertFalse(data.empty, "data is empty")
for k in expected_keys:
self.assertIn(k, data.index, "Did not find expected row in index")
# Test to_dict
data = self.ticker.get_cashflow(as_dict=True)
self.assertIsInstance(data, dict, "data has wrong type")
def test_quarterly_cash_flow(self):
expected_keys = ["Operating Cash Flow", "Net PPE Purchase And Sale"]
expected_periods_days = 365//4
# Test contents of table
data = self.ticker.get_cashflow(pretty=True, freq="quarterly")
self.assertIsInstance(data, pd.DataFrame, "data has wrong type")
self.assertFalse(data.empty, "data is empty")
for k in expected_keys:
self.assertIn(k, data.index, "Did not find expected row in index")
period = abs((data.columns[0]-data.columns[1]).days)
self.assertLess(abs(period-expected_periods_days), 20, "Not returning quarterly financials")
# Test property defaults
data2 = self.ticker.quarterly_cashflow
self.assertTrue(data.equals(data2), "property not defaulting to 'pretty=True'")
# Test pretty=False
expected_keys = [k.replace(' ', '') for k in expected_keys]
data = self.ticker.get_cashflow(pretty=False, freq="quarterly")
self.assertIsInstance(data, pd.DataFrame, "data has wrong type")
self.assertFalse(data.empty, "data is empty")
for k in expected_keys:
self.assertIn(k, data.index, "Did not find expected row in index")
# Test to_dict
data = self.ticker.get_cashflow(as_dict=True)
self.assertIsInstance(data, dict, "data has wrong type")
def test_income_alt_names(self):
i1 = self.ticker.income_stmt
i2 = self.ticker.incomestmt
self.assertTrue(i1.equals(i2))
i3 = self.ticker.financials
self.assertTrue(i1.equals(i3))
i1 = self.ticker.get_income_stmt()
i2 = self.ticker.get_incomestmt()
self.assertTrue(i1.equals(i2))
i3 = self.ticker.get_financials()
self.assertTrue(i1.equals(i3))
i1 = self.ticker.quarterly_income_stmt
i2 = self.ticker.quarterly_incomestmt
self.assertTrue(i1.equals(i2))
i3 = self.ticker.quarterly_financials
self.assertTrue(i1.equals(i3))
i1 = self.ticker.get_income_stmt(freq="quarterly")
i2 = self.ticker.get_incomestmt(freq="quarterly")
self.assertTrue(i1.equals(i2))
i3 = self.ticker.get_financials(freq="quarterly")
self.assertTrue(i1.equals(i3))
def test_balance_sheet_alt_names(self):
i1 = self.ticker.balance_sheet
i2 = self.ticker.balancesheet
self.assertTrue(i1.equals(i2))
i1 = self.ticker.get_balance_sheet()
i2 = self.ticker.get_balancesheet()
self.assertTrue(i1.equals(i2))
i1 = self.ticker.quarterly_balance_sheet
i2 = self.ticker.quarterly_balancesheet
self.assertTrue(i1.equals(i2))
i1 = self.ticker.get_balance_sheet(freq="quarterly")
i2 = self.ticker.get_balancesheet(freq="quarterly")
self.assertTrue(i1.equals(i2))
def test_cash_flow_alt_names(self):
i1 = self.ticker.cash_flow
i2 = self.ticker.cashflow
self.assertTrue(i1.equals(i2))
i1 = self.ticker.get_cash_flow()
i2 = self.ticker.get_cashflow()
self.assertTrue(i1.equals(i2))
i1 = self.ticker.quarterly_cash_flow
i2 = self.ticker.quarterly_cashflow
self.assertTrue(i1.equals(i2))
i1 = self.ticker.get_cash_flow(freq="quarterly")
i2 = self.ticker.get_cashflow(freq="quarterly")
self.assertTrue(i1.equals(i2))
def test_bad_freq_value_raises_exception(self):
self.assertRaises(ValueError, lambda: self.ticker.get_cashflow(freq="badarg"))
# Below will fail because not ported to Yahoo API
# def test_sustainability(self):
# data = self.ticker.sustainability
# self.assertIsInstance(data, pd.DataFrame, "data has wrong type")
# self.assertFalse(data.empty, "data is empty")
# data_cached = self.ticker.sustainability
# self.assertIs(data, data_cached, "data not cached")
# def test_recommendations(self):
# data = self.ticker.recommendations
# self.assertIsInstance(data, pd.DataFrame, "data has wrong type")
# self.assertFalse(data.empty, "data is empty")
# data_cached = self.ticker.recommendations
# self.assertIs(data, data_cached, "data not cached")
# def test_recommendations_summary(self):
# data = self.ticker.recommendations_summary
# self.assertIsInstance(data, pd.DataFrame, "data has wrong type")
# self.assertFalse(data.empty, "data is empty")
# data_cached = self.ticker.recommendations_summary
# self.assertIs(data, data_cached, "data not cached")
# def test_analyst_price_target(self):
# data = self.ticker.analyst_price_target
# self.assertIsInstance(data, pd.DataFrame, "data has wrong type")
# self.assertFalse(data.empty, "data is empty")
# data_cached = self.ticker.analyst_price_target
# self.assertIs(data, data_cached, "data not cached")
# def test_revenue_forecasts(self):
# data = self.ticker.revenue_forecasts
# self.assertIsInstance(data, pd.DataFrame, "data has wrong type")
# self.assertFalse(data.empty, "data is empty")
# data_cached = self.ticker.revenue_forecasts
# self.assertIs(data, data_cached, "data not cached")
# def test_calendar(self):
# data = self.ticker.calendar
# self.assertIsInstance(data, pd.DataFrame, "data has wrong type")
# self.assertFalse(data.empty, "data is empty")
# data_cached = self.ticker.calendar
# self.assertIs(data, data_cached, "data not cached")
# def test_shares(self):
# data = self.ticker.shares
# self.assertIsInstance(data, pd.DataFrame, "data has wrong type")
# self.assertFalse(data.empty, "data is empty")
class TestTickerInfo(unittest.TestCase):
session = None
@classmethod
def setUpClass(cls):
cls.session = session_gbl
@classmethod
def tearDownClass(cls):
if cls.session is not None:
cls.session.close()
def setUp(self):
self.symbols = []
self.symbols += ["ESLT.TA", "BP.L", "GOOGL"]
self.symbols.append("QCSTIX") # good for testing, doesn't trade
self.symbols += ["BTC-USD", "IWO", "VFINX", "^GSPC"]
self.symbols += ["SOKE.IS", "ADS.DE"] # detected bugs
self.tickers = [yf.Ticker(s, session=self.session) for s in self.symbols]
def tearDown(self):
self.ticker = None
def test_fast_info(self):
f = yf.Ticker("AAPL", session=self.session).fast_info
for k in f:
self.assertIsNotNone(f[k])
def test_info(self):
data = self.tickers[0].info
self.assertIsInstance(data, dict, "data has wrong type")
expected_keys = ['industry', 'currentPrice', 'exchange', 'floatShares', 'companyOfficers', 'bid']
for k in expected_keys:
print(k)
self.assertIn("symbol", data.keys(), f"Did not find expected key '{k}' in info dict")
self.assertEqual(self.symbols[0], data["symbol"], "Wrong symbol value in info dict")
# def test_fast_info_matches_info(self):
# fast_info_keys = set()
# for ticker in self.tickers:
# fast_info_keys.update(set(ticker.fast_info.keys()))
# fast_info_keys = sorted(list(fast_info_keys))
# key_rename_map = {}
# key_rename_map["currency"] = "currency"
# key_rename_map["quote_type"] = "quoteType"
# key_rename_map["timezone"] = "exchangeTimezoneName"
# key_rename_map["last_price"] = ["currentPrice", "regularMarketPrice"]
# key_rename_map["open"] = ["open", "regularMarketOpen"]
# key_rename_map["day_high"] = ["dayHigh", "regularMarketDayHigh"]
# key_rename_map["day_low"] = ["dayLow", "regularMarketDayLow"]
# key_rename_map["previous_close"] = ["previousClose"]
# key_rename_map["regular_market_previous_close"] = ["regularMarketPreviousClose"]
# key_rename_map["fifty_day_average"] = "fiftyDayAverage"
# key_rename_map["two_hundred_day_average"] = "twoHundredDayAverage"
# key_rename_map["year_change"] = ["52WeekChange", "fiftyTwoWeekChange"]
# key_rename_map["year_high"] = "fiftyTwoWeekHigh"
# key_rename_map["year_low"] = "fiftyTwoWeekLow"
# key_rename_map["last_volume"] = ["volume", "regularMarketVolume"]
# key_rename_map["ten_day_average_volume"] = ["averageVolume10days", "averageDailyVolume10Day"]
# key_rename_map["three_month_average_volume"] = "averageVolume"
# key_rename_map["market_cap"] = "marketCap"
# key_rename_map["shares"] = "sharesOutstanding"
# for k in list(key_rename_map.keys()):
# if '_' in k:
# key_rename_map[yf.utils.snake_case_2_camelCase(k)] = key_rename_map[k]
# # Note: share count items in info[] are bad. Sometimes the float > outstanding!
# # So often fast_info["shares"] does not match.
# # Why isn't fast_info["shares"] wrong? Because using it to calculate market cap always correct.
# bad_keys = {"shares"}
# # Loose tolerance for averages, no idea why don't match info[]. Is info wrong?
# custom_tolerances = {}
# custom_tolerances["year_change"] = 1.0
# # custom_tolerances["ten_day_average_volume"] = 1e-3
# custom_tolerances["ten_day_average_volume"] = 1e-1
# # custom_tolerances["three_month_average_volume"] = 1e-2
# custom_tolerances["three_month_average_volume"] = 5e-1
# custom_tolerances["fifty_day_average"] = 1e-2
# custom_tolerances["two_hundred_day_average"] = 1e-2
# for k in list(custom_tolerances.keys()):
# if '_' in k:
# custom_tolerances[yf.utils.snake_case_2_camelCase(k)] = custom_tolerances[k]
# for k in fast_info_keys:
# if k in key_rename_map:
# k2 = key_rename_map[k]
# else:
# k2 = k
# if not isinstance(k2, list):
# k2 = [k2]
# for m in k2:
# for ticker in self.tickers:
# if not m in ticker.info:
# # print(f"symbol={ticker.ticker}: fast_info key '{k}' mapped to info key '{m}' but not present in info")
# continue
# if k in bad_keys:
# continue
# if k in custom_tolerances:
# rtol = custom_tolerances[k]
# else:
# rtol = 5e-3
# # rtol = 1e-4
# correct = ticker.info[m]
# test = ticker.fast_info[k]
# # print(f"Testing: symbol={ticker.ticker} m={m} k={k}: test={test} vs correct={correct}")
# if k in ["market_cap","marketCap"] and ticker.fast_info["currency"] in ["GBp", "ILA"]:
# # Adjust for currency to match Yahoo:
# test *= 0.01
# try:
# if correct is None:
# self.assertTrue(test is None or (not np.isnan(test)), f"{k}: {test} must be None or real value because correct={correct}")
# elif isinstance(test, float) or isinstance(correct, int):
# self.assertTrue(np.isclose(test, correct, rtol=rtol), f"{ticker.ticker} {k}: {test} != {correct}")
# else:
# self.assertEqual(test, correct, f"{k}: {test} != {correct}")
# except:
# if k in ["regularMarketPreviousClose"] and ticker.ticker in ["ADS.DE"]:
# # Yahoo is wrong, is returning post-market close not regular
# continue
# else:
# raise
def suite():
suite = unittest.TestSuite()
suite.addTest(TestTicker('Test ticker'))
suite.addTest(TestTickerEarnings('Test earnings'))
suite.addTest(TestTickerHolders('Test holders'))
suite.addTest(TestTickerHistory('Test Ticker history'))
suite.addTest(TestTickerMiscFinancials('Test misc financials'))
suite.addTest(TestTickerInfo('Test info & fast_info'))
return suite
if __name__ == '__main__':
unittest.main()

91
tests/utils.py Normal file
View File

@@ -0,0 +1,91 @@
"""
Tests for utils
To run all tests in suite from commandline:
python -m unittest tests.utils
Specific test class:
python -m unittest tests.utils.TestTicker
"""
# import pandas as pd
# import numpy as np
from .context import yfinance as yf
from .context import session_gbl
import unittest
# import requests_cache
import tempfile
import os
class TestCache(unittest.TestCase):
@classmethod
def setUpClass(cls):
cls.tempCacheDir = tempfile.TemporaryDirectory()
yf.set_tz_cache_location(cls.tempCacheDir.name)
@classmethod
def tearDownClass(cls):
cls.tempCacheDir.cleanup()
def test_storeTzNoRaise(self):
# storing TZ to cache should never raise exception
tkr = 'AMZN'
tz1 = "America/New_York"
tz2 = "London/Europe"
cache = yf.utils.get_tz_cache()
cache.store(tkr, tz1)
cache.store(tkr, tz2)
def test_setTzCacheLocation(self):
self.assertEqual(yf.utils._DBManager.get_location(), self.tempCacheDir.name)
tkr = 'AMZN'
tz1 = "America/New_York"
cache = yf.utils.get_tz_cache()
cache.store(tkr, tz1)
self.assertTrue(os.path.exists(os.path.join(self.tempCacheDir.name, "tkr-tz.db")))
class TestCacheNoPermission(unittest.TestCase):
@classmethod
def setUpClass(cls):
yf.set_tz_cache_location("/root/yf-cache")
def test_tzCacheRootStore(self):
# Test that if cache path in read-only filesystem, no exception.
tkr = 'AMZN'
tz1 = "America/New_York"
# During attempt to store, will discover cannot write
yf.utils.get_tz_cache().store(tkr, tz1)
# Handling the store failure replaces cache with a dummy
cache = yf.utils.get_tz_cache()
self.assertTrue(cache.dummy)
cache.store(tkr, tz1)
def test_tzCacheRootLookup(self):
# Test that if cache path in read-only filesystem, no exception.
tkr = 'AMZN'
# During attempt to lookup, will discover cannot write
yf.utils.get_tz_cache().lookup(tkr)
# Handling the lookup failure replaces cache with a dummy
cache = yf.utils.get_tz_cache()
self.assertTrue(cache.dummy)
cache.lookup(tkr)
def suite():
suite = unittest.TestSuite()
suite.addTest(TestCache('Test cache'))
suite.addTest(TestCacheNoPermission('Test cache no permission'))
return suite
if __name__ == '__main__':
unittest.main()

View File

@@ -23,6 +23,7 @@ from . import version
from .ticker import Ticker
from .tickers import Tickers
from .multi import download
from .utils import set_tz_cache_location, enable_debug_mode
__version__ = version.version
__author__ = "Ran Aroussi"
@@ -42,4 +43,4 @@ def pdr_override():
pass
__all__ = ['download', 'Ticker', 'Tickers', 'pdr_override']
__all__ = ['download', 'Ticker', 'Tickers', 'pdr_override', 'enable_debug_mode', 'set_tz_cache_location']

File diff suppressed because it is too large Load Diff

118
yfinance/const.py Normal file
View File

@@ -0,0 +1,118 @@
_BASE_URL_ = 'https://query2.finance.yahoo.com'
_ROOT_URL_ = 'https://finance.yahoo.com'
fundamentals_keys = {
'financials': ["TaxEffectOfUnusualItems", "TaxRateForCalcs", "NormalizedEBITDA", "NormalizedDilutedEPS",
"NormalizedBasicEPS", "TotalUnusualItems", "TotalUnusualItemsExcludingGoodwill",
"NetIncomeFromContinuingOperationNetMinorityInterest", "ReconciledDepreciation",
"ReconciledCostOfRevenue", "EBITDA", "EBIT", "NetInterestIncome", "InterestExpense",
"InterestIncome", "ContinuingAndDiscontinuedDilutedEPS", "ContinuingAndDiscontinuedBasicEPS",
"NormalizedIncome", "NetIncomeFromContinuingAndDiscontinuedOperation", "TotalExpenses",
"RentExpenseSupplemental", "ReportedNormalizedDilutedEPS", "ReportedNormalizedBasicEPS",
"TotalOperatingIncomeAsReported", "DividendPerShare", "DilutedAverageShares", "BasicAverageShares",
"DilutedEPS", "DilutedEPSOtherGainsLosses", "TaxLossCarryforwardDilutedEPS",
"DilutedAccountingChange", "DilutedExtraordinary", "DilutedDiscontinuousOperations",
"DilutedContinuousOperations", "BasicEPS", "BasicEPSOtherGainsLosses", "TaxLossCarryforwardBasicEPS",
"BasicAccountingChange", "BasicExtraordinary", "BasicDiscontinuousOperations",
"BasicContinuousOperations", "DilutedNIAvailtoComStockholders", "AverageDilutionEarnings",
"NetIncomeCommonStockholders", "OtherunderPreferredStockDividend", "PreferredStockDividends",
"NetIncome", "MinorityInterests", "NetIncomeIncludingNoncontrollingInterests",
"NetIncomeFromTaxLossCarryforward", "NetIncomeExtraordinary", "NetIncomeDiscontinuousOperations",
"NetIncomeContinuousOperations", "EarningsFromEquityInterestNetOfTax", "TaxProvision",
"PretaxIncome", "OtherIncomeExpense", "OtherNonOperatingIncomeExpenses", "SpecialIncomeCharges",
"GainOnSaleOfPPE", "GainOnSaleOfBusiness", "OtherSpecialCharges", "WriteOff",
"ImpairmentOfCapitalAssets", "RestructuringAndMergernAcquisition", "SecuritiesAmortization",
"EarningsFromEquityInterest", "GainOnSaleOfSecurity", "NetNonOperatingInterestIncomeExpense",
"TotalOtherFinanceCost", "InterestExpenseNonOperating", "InterestIncomeNonOperating",
"OperatingIncome", "OperatingExpense", "OtherOperatingExpenses", "OtherTaxes",
"ProvisionForDoubtfulAccounts", "DepreciationAmortizationDepletionIncomeStatement",
"DepletionIncomeStatement", "DepreciationAndAmortizationInIncomeStatement", "Amortization",
"AmortizationOfIntangiblesIncomeStatement", "DepreciationIncomeStatement", "ResearchAndDevelopment",
"SellingGeneralAndAdministration", "SellingAndMarketingExpense", "GeneralAndAdministrativeExpense",
"OtherGandA", "InsuranceAndClaims", "RentAndLandingFees", "SalariesAndWages", "GrossProfit",
"CostOfRevenue", "TotalRevenue", "ExciseTaxes", "OperatingRevenue"],
'balance-sheet': ["TreasurySharesNumber", "PreferredSharesNumber", "OrdinarySharesNumber", "ShareIssued", "NetDebt",
"TotalDebt", "TangibleBookValue", "InvestedCapital", "WorkingCapital", "NetTangibleAssets",
"CapitalLeaseObligations", "CommonStockEquity", "PreferredStockEquity", "TotalCapitalization",
"TotalEquityGrossMinorityInterest", "MinorityInterest", "StockholdersEquity",
"OtherEquityInterest", "GainsLossesNotAffectingRetainedEarnings", "OtherEquityAdjustments",
"FixedAssetsRevaluationReserve", "ForeignCurrencyTranslationAdjustments",
"MinimumPensionLiabilities", "UnrealizedGainLoss", "TreasuryStock", "RetainedEarnings",
"AdditionalPaidInCapital", "CapitalStock", "OtherCapitalStock", "CommonStock", "PreferredStock",
"TotalPartnershipCapital", "GeneralPartnershipCapital", "LimitedPartnershipCapital",
"TotalLiabilitiesNetMinorityInterest", "TotalNonCurrentLiabilitiesNetMinorityInterest",
"OtherNonCurrentLiabilities", "LiabilitiesHeldforSaleNonCurrent", "RestrictedCommonStock",
"PreferredSecuritiesOutsideStockEquity", "DerivativeProductLiabilities", "EmployeeBenefits",
"NonCurrentPensionAndOtherPostretirementBenefitPlans", "NonCurrentAccruedExpenses",
"DuetoRelatedPartiesNonCurrent", "TradeandOtherPayablesNonCurrent",
"NonCurrentDeferredLiabilities", "NonCurrentDeferredRevenue",
"NonCurrentDeferredTaxesLiabilities", "LongTermDebtAndCapitalLeaseObligation",
"LongTermCapitalLeaseObligation", "LongTermDebt", "LongTermProvisions", "CurrentLiabilities",
"OtherCurrentLiabilities", "CurrentDeferredLiabilities", "CurrentDeferredRevenue",
"CurrentDeferredTaxesLiabilities", "CurrentDebtAndCapitalLeaseObligation",
"CurrentCapitalLeaseObligation", "CurrentDebt", "OtherCurrentBorrowings", "LineOfCredit",
"CommercialPaper", "CurrentNotesPayable", "PensionandOtherPostRetirementBenefitPlansCurrent",
"CurrentProvisions", "PayablesAndAccruedExpenses", "CurrentAccruedExpenses", "InterestPayable",
"Payables", "OtherPayable", "DuetoRelatedPartiesCurrent", "DividendsPayable", "TotalTaxPayable",
"IncomeTaxPayable", "AccountsPayable", "TotalAssets", "TotalNonCurrentAssets",
"OtherNonCurrentAssets", "DefinedPensionBenefit", "NonCurrentPrepaidAssets",
"NonCurrentDeferredAssets", "NonCurrentDeferredTaxesAssets", "DuefromRelatedPartiesNonCurrent",
"NonCurrentNoteReceivables", "NonCurrentAccountsReceivable", "FinancialAssets",
"InvestmentsAndAdvances", "OtherInvestments", "InvestmentinFinancialAssets",
"HeldToMaturitySecurities", "AvailableForSaleSecurities",
"FinancialAssetsDesignatedasFairValueThroughProfitorLossTotal", "TradingSecurities",
"LongTermEquityInvestment", "InvestmentsinJointVenturesatCost",
"InvestmentsInOtherVenturesUnderEquityMethod", "InvestmentsinAssociatesatCost",
"InvestmentsinSubsidiariesatCost", "InvestmentProperties", "GoodwillAndOtherIntangibleAssets",
"OtherIntangibleAssets", "Goodwill", "NetPPE", "AccumulatedDepreciation", "GrossPPE", "Leases",
"ConstructionInProgress", "OtherProperties", "MachineryFurnitureEquipment",
"BuildingsAndImprovements", "LandAndImprovements", "Properties", "CurrentAssets",
"OtherCurrentAssets", "HedgingAssetsCurrent", "AssetsHeldForSaleCurrent", "CurrentDeferredAssets",
"CurrentDeferredTaxesAssets", "RestrictedCash", "PrepaidAssets", "Inventory",
"InventoriesAdjustmentsAllowances", "OtherInventories", "FinishedGoods", "WorkInProcess",
"RawMaterials", "Receivables", "ReceivablesAdjustmentsAllowances", "OtherReceivables",
"DuefromRelatedPartiesCurrent", "TaxesReceivable", "AccruedInterestReceivable", "NotesReceivable",
"LoansReceivable", "AccountsReceivable", "AllowanceForDoubtfulAccountsReceivable",
"GrossAccountsReceivable", "CashCashEquivalentsAndShortTermInvestments",
"OtherShortTermInvestments", "CashAndCashEquivalents", "CashEquivalents", "CashFinancial"],
'cash-flow': ["ForeignSales", "DomesticSales", "AdjustedGeographySegmentData", "FreeCashFlow",
"RepurchaseOfCapitalStock", "RepaymentOfDebt", "IssuanceOfDebt", "IssuanceOfCapitalStock",
"CapitalExpenditure", "InterestPaidSupplementalData", "IncomeTaxPaidSupplementalData",
"EndCashPosition", "OtherCashAdjustmentOutsideChangeinCash", "BeginningCashPosition",
"EffectOfExchangeRateChanges", "ChangesInCash", "OtherCashAdjustmentInsideChangeinCash",
"CashFlowFromDiscontinuedOperation", "FinancingCashFlow", "CashFromDiscontinuedFinancingActivities",
"CashFlowFromContinuingFinancingActivities", "NetOtherFinancingCharges", "InterestPaidCFF",
"ProceedsFromStockOptionExercised", "CashDividendsPaid", "PreferredStockDividendPaid",
"CommonStockDividendPaid", "NetPreferredStockIssuance", "PreferredStockPayments",
"PreferredStockIssuance", "NetCommonStockIssuance", "CommonStockPayments", "CommonStockIssuance",
"NetIssuancePaymentsOfDebt", "NetShortTermDebtIssuance", "ShortTermDebtPayments",
"ShortTermDebtIssuance", "NetLongTermDebtIssuance", "LongTermDebtPayments", "LongTermDebtIssuance",
"InvestingCashFlow", "CashFromDiscontinuedInvestingActivities",
"CashFlowFromContinuingInvestingActivities", "NetOtherInvestingChanges", "InterestReceivedCFI",
"DividendsReceivedCFI", "NetInvestmentPurchaseAndSale", "SaleOfInvestment", "PurchaseOfInvestment",
"NetInvestmentPropertiesPurchaseAndSale", "SaleOfInvestmentProperties",
"PurchaseOfInvestmentProperties", "NetBusinessPurchaseAndSale", "SaleOfBusiness",
"PurchaseOfBusiness", "NetIntangiblesPurchaseAndSale", "SaleOfIntangibles", "PurchaseOfIntangibles",
"NetPPEPurchaseAndSale", "SaleOfPPE", "PurchaseOfPPE", "CapitalExpenditureReported",
"OperatingCashFlow", "CashFromDiscontinuedOperatingActivities",
"CashFlowFromContinuingOperatingActivities", "TaxesRefundPaid", "InterestReceivedCFO",
"InterestPaidCFO", "DividendReceivedCFO", "DividendPaidCFO", "ChangeInWorkingCapital",
"ChangeInOtherWorkingCapital", "ChangeInOtherCurrentLiabilities", "ChangeInOtherCurrentAssets",
"ChangeInPayablesAndAccruedExpense", "ChangeInAccruedExpense", "ChangeInInterestPayable",
"ChangeInPayable", "ChangeInDividendPayable", "ChangeInAccountPayable", "ChangeInTaxPayable",
"ChangeInIncomeTaxPayable", "ChangeInPrepaidAssets", "ChangeInInventory", "ChangeInReceivables",
"ChangesInAccountReceivables", "OtherNonCashItems", "ExcessTaxBenefitFromStockBasedCompensation",
"StockBasedCompensation", "UnrealizedGainLossOnInvestmentSecurities", "ProvisionandWriteOffofAssets",
"AssetImpairmentCharge", "AmortizationOfSecurities", "DeferredTax", "DeferredIncomeTax",
"DepreciationAmortizationDepletion", "Depletion", "DepreciationAndAmortization",
"AmortizationCashFlow", "AmortizationOfIntangibles", "Depreciation", "OperatingGainsLosses",
"PensionAndEmployeeBenefitExpense", "EarningsLossesFromEquityInvestments",
"GainLossOnInvestmentSecurities", "NetForeignCurrencyExchangeGainLoss", "GainLossOnSaleOfPPE",
"GainLossOnSaleOfBusiness", "NetIncomeFromContinuingOperations",
"CashFlowsfromusedinOperatingActivitiesDirect", "TaxesRefundPaidDirect", "InterestReceivedDirect",
"InterestPaidDirect", "DividendsReceivedDirect", "DividendsPaidDirect", "ClassesofCashPayments",
"OtherCashPaymentsfromOperatingActivities", "PaymentsonBehalfofEmployees",
"PaymentstoSuppliersforGoodsandServices", "ClassesofCashReceiptsfromOperatingActivities",
"OtherCashReceiptsfromOperatingActivities", "ReceiptsfromGovernmentGrants", "ReceiptsfromCustomers"]}
price_colnames = ['Open', 'High', 'Low', 'Close', 'Adj Close']

76
yfinance/data.py Normal file
View File

@@ -0,0 +1,76 @@
import functools
from functools import lru_cache
import logging
import requests as requests
import re
import random
import time
from frozendict import frozendict
from . import utils
cache_maxsize = 64
def lru_cache_freezeargs(func):
"""
Decorator transforms mutable dictionary and list arguments into immutable types
Needed so lru_cache can cache method calls what has dict or list arguments.
"""
@functools.wraps(func)
def wrapped(*args, **kwargs):
args = tuple([frozendict(arg) if isinstance(arg, dict) else arg for arg in args])
kwargs = {k: frozendict(v) if isinstance(v, dict) else v for k, v in kwargs.items()}
args = tuple([tuple(arg) if isinstance(arg, list) else arg for arg in args])
kwargs = {k: tuple(v) if isinstance(v, list) else v for k, v in kwargs.items()}
return func(*args, **kwargs)
# copy over the lru_cache extra methods to this wrapper to be able to access them
# after this decorator has been applied
wrapped.cache_info = func.cache_info
wrapped.cache_clear = func.cache_clear
return wrapped
class TickerData:
"""
Have one place to retrieve data from Yahoo API in order to ease caching and speed up operations
"""
user_agent_headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36'}
def __init__(self, ticker: str, session=None):
self.ticker = ticker
self._session = session or requests
def get(self, url, user_agent_headers=None, params=None, proxy=None, timeout=30):
proxy = self._get_proxy(proxy)
response = self._session.get(
url=url,
params=params,
proxies=proxy,
timeout=timeout,
headers=user_agent_headers or self.user_agent_headers)
return response
@lru_cache_freezeargs
@lru_cache(maxsize=cache_maxsize)
def cache_get(self, url, user_agent_headers=None, params=None, proxy=None, timeout=30):
return self.get(url, user_agent_headers, params, proxy, timeout)
def _get_proxy(self, proxy):
# setup proxy in requests format
if proxy is not None:
if isinstance(proxy, (dict, frozendict)) and "https" in proxy:
proxy = proxy["https"]
proxy = {"https": proxy}
return proxy
def get_raw_json(self, url, user_agent_headers=None, params=None, proxy=None, timeout=30):
response = self.get(url, user_agent_headers=user_agent_headers, params=params, proxy=proxy, timeout=timeout)
response.raise_for_status()
return response.json()

12
yfinance/exceptions.py Normal file
View File

@@ -0,0 +1,12 @@
class YFinanceException(Exception):
pass
class YFinanceDataException(YFinanceException):
pass
class YFNotImplementedError(NotImplementedError):
def __init__(self, method_name):
super().__init__(f"Have not implemented fetching '{method_name}' from Yahoo API")

View File

@@ -21,7 +21,10 @@
from __future__ import print_function
import logging
import time as _time
import traceback
import multitasking as _multitasking
import pandas as _pd
@@ -29,10 +32,11 @@ from . import Ticker, utils
from . import shared
def download(tickers, start=None, end=None, actions=False, threads=True,
group_by='column', auto_adjust=False, back_adjust=False,
progress=True, period="max", show_errors=True, interval="1d", prepost=False,
proxy=None, rounding=False, timeout=None, **kwargs):
@utils.log_indent_decorator
def download(tickers, start=None, end=None, actions=False, threads=True, ignore_tz=None,
group_by='column', auto_adjust=False, back_adjust=False, repair=False, keepna=False,
progress=True, period="max", show_errors=None, interval="1d", prepost=False,
proxy=None, rounding=False, timeout=10, session=None):
"""Download yahoo tickers
:Parameters:
tickers : str, list
@@ -44,11 +48,13 @@ def download(tickers, start=None, end=None, actions=False, threads=True,
Valid intervals: 1m,2m,5m,15m,30m,60m,90m,1h,1d,5d,1wk,1mo,3mo
Intraday data cannot extend last 60 days
start: str
Download start date string (YYYY-MM-DD) or _datetime.
Default is 1900-01-01
Download start date string (YYYY-MM-DD) or _datetime, inclusive.
Default is 99 years ago
E.g. for start="2020-01-01", the first data point will be on "2020-01-01"
end: str
Download end date string (YYYY-MM-DD) or _datetime.
Download end date string (YYYY-MM-DD) or _datetime, exclusive.
Default is now
E.g. for end="2023-01-01", the last data point will be on "2022-12-31"
group_by : str
Group by 'ticker' or 'column' (default)
prepost : bool
@@ -56,20 +62,60 @@ def download(tickers, start=None, end=None, actions=False, threads=True,
Default is False
auto_adjust: bool
Adjust all OHLC automatically? Default is False
repair: bool
Detect currency unit 100x mixups and attempt repair
Default is False
keepna: bool
Keep NaN rows returned by Yahoo?
Default is False
actions: bool
Download dividend + stock splits data. Default is False
threads: bool / int
How many threads to use for mass downloading. Default is True
ignore_tz: bool
When combining from different timezones, ignore that part of datetime.
Default depends on interval. Intraday = False. Day+ = True.
proxy: str
Optional. Proxy server URL scheme. Default is None
rounding: bool
Optional. Round values to 2 decimal places?
show_errors: bool
Optional. Doesn't print errors if True
Optional. Doesn't print errors if False
DEPRECATED, will be removed in future version
timeout: None or float
If not None stops waiting for a response after given number of
seconds. (Can also be a fraction of a second e.g. 0.01)
session: None or Session
Optional. Pass your own session object to be used for all requests
"""
logger = utils.get_yf_logger()
if show_errors is not None:
if show_errors:
utils.print_once(f"yfinance: download(show_errors={show_errors}) argument is deprecated and will be removed in future version. Do this instead: logging.getLogger('yfinance').setLevel(logging.ERROR)")
logger.setLevel(logging.ERROR)
else:
utils.print_once(f"yfinance: download(show_errors={show_errors}) argument is deprecated and will be removed in future version. Do this instead to suppress error messages: logging.getLogger('yfinance').setLevel(logging.CRITICAL)")
logger.setLevel(logging.CRITICAL)
if logger.isEnabledFor(logging.DEBUG):
if threads:
# With DEBUG, each thread generates a lot of log messages.
# And with multi-threading, these messages will be interleaved, bad!
# So disable multi-threading to make log readable.
logger.debug('Disabling multithreading because DEBUG logging enabled')
threads = False
if progress:
# Disable progress bar, interferes with display of log messages
progress = False
if ignore_tz is None:
# Set default value depending on interval
if interval[1:] in ['m', 'h']:
# Intraday
ignore_tz = False
else:
ignore_tz = True
# create ticker list
tickers = tickers if isinstance(
@@ -81,7 +127,7 @@ def download(tickers, start=None, end=None, actions=False, threads=True,
for ticker in tickers:
if utils.is_isin(ticker):
isin = ticker
ticker = utils.get_ticker_by_isin(ticker, proxy)
ticker = utils.get_ticker_by_isin(ticker, proxy, session=session)
shared._ISINS[ticker] = isin
_tickers_.append(ticker)
@@ -95,6 +141,7 @@ def download(tickers, start=None, end=None, actions=False, threads=True,
# reset shared._DFS
shared._DFS = {}
shared._ERRORS = {}
shared._TRACEBACKS = {}
# download using threads
if threads:
@@ -105,44 +152,71 @@ def download(tickers, start=None, end=None, actions=False, threads=True,
_download_one_threaded(ticker, period=period, interval=interval,
start=start, end=end, prepost=prepost,
actions=actions, auto_adjust=auto_adjust,
back_adjust=back_adjust,
back_adjust=back_adjust, repair=repair, keepna=keepna,
progress=(progress and i > 0), proxy=proxy,
rounding=rounding, timeout=timeout)
rounding=rounding, timeout=timeout, session=session)
while len(shared._DFS) < len(tickers):
_time.sleep(0.01)
# download synchronously
else:
for i, ticker in enumerate(tickers):
data = _download_one(ticker, period=period, interval=interval,
start=start, end=end, prepost=prepost,
actions=actions, auto_adjust=auto_adjust,
back_adjust=back_adjust, proxy=proxy,
rounding=rounding, timeout=timeout)
shared._DFS[ticker.upper()] = data
back_adjust=back_adjust, repair=repair, keepna=keepna,
proxy=proxy,
rounding=rounding, timeout=timeout, session=session)
if progress:
shared._PROGRESS_BAR.animate()
if progress:
shared._PROGRESS_BAR.completed()
if shared._ERRORS and show_errors:
print('\n%.f Failed download%s:' % (
if shared._ERRORS:
# Send errors to logging module
logger = utils.get_yf_logger()
logger.error('\n%.f Failed download%s:' % (
len(shared._ERRORS), 's' if len(shared._ERRORS) > 1 else ''))
# print(shared._ERRORS)
print("\n".join(['- %s: %s' %
v for v in list(shared._ERRORS.items())]))
# Log each distinct error once, with list of symbols affected
errors = {}
for ticker in shared._ERRORS:
err = shared._ERRORS[ticker]
err = err.replace(f'{ticker}', '%ticker%')
if err not in errors:
errors[err] = [ticker]
else:
errors[err].append(ticker)
for err in errors.keys():
logger.error(f'{errors[err]}: ' + err)
# Log each distinct traceback once, with list of symbols affected
tbs = {}
for ticker in shared._TRACEBACKS:
tb = shared._TRACEBACKS[ticker]
tb = tb.replace(f'{ticker}', '%ticker%')
if tb not in tbs:
tbs[tb] = [ticker]
else:
tbs[tb].append(ticker)
for tb in tbs.keys():
logger.debug(f'{tbs[tb]}: ' + tb)
if ignore_tz:
for tkr in shared._DFS.keys():
if (shared._DFS[tkr] is not None) and (shared._DFS[tkr].shape[0] > 0):
shared._DFS[tkr].index = shared._DFS[tkr].index.tz_localize(None)
if len(tickers) == 1:
ticker = tickers[0]
return shared._DFS[shared._ISINS.get(ticker, ticker)]
return shared._DFS[ticker]
try:
data = _pd.concat(shared._DFS.values(), axis=1,
data = _pd.concat(shared._DFS.values(), axis=1, sort=True,
keys=shared._DFS.keys())
except Exception:
_realign_dfs()
data = _pd.concat(shared._DFS.values(), axis=1,
data = _pd.concat(shared._DFS.values(), axis=1, sort=True,
keys=shared._DFS.keys())
# switch names back to isins if applicable
@@ -180,28 +254,38 @@ def _realign_dfs():
@_multitasking.task
def _download_one_threaded(ticker, start=None, end=None,
auto_adjust=False, back_adjust=False,
auto_adjust=False, back_adjust=False, repair=False,
actions=False, progress=True, period="max",
interval="1d", prepost=False, proxy=None,
rounding=False, timeout=None):
data = _download_one(ticker, start, end, auto_adjust, back_adjust,
keepna=False, rounding=False, timeout=10, session=None):
data = _download_one(ticker, start, end, auto_adjust, back_adjust, repair,
actions, period, interval, prepost, proxy, rounding,
timeout)
shared._DFS[ticker.upper()] = data
keepna, timeout, session)
if progress:
shared._PROGRESS_BAR.animate()
def _download_one(ticker, start=None, end=None,
auto_adjust=False, back_adjust=False,
auto_adjust=False, back_adjust=False, repair=False,
actions=False, period="max", interval="1d",
prepost=False, proxy=None, rounding=False,
timeout=None):
keepna=False, timeout=10, session=None):
data = None
try:
data = Ticker(ticker, session=session).history(
period=period, interval=interval,
start=start, end=end, prepost=prepost,
actions=actions, auto_adjust=auto_adjust,
back_adjust=back_adjust, repair=repair, proxy=proxy,
rounding=rounding, keepna=keepna, timeout=timeout,
raise_errors=True
)
except Exception as e:
# glob try/except needed as current thead implementation breaks if exception is raised.
shared._DFS[ticker.upper()] = utils.empty_df()
shared._ERRORS[ticker.upper()] = repr(e)
shared._TRACEBACKS[ticker.upper()] = traceback.format_exc()
else:
shared._DFS[ticker.upper()] = data
return Ticker(ticker).history(period=period, interval=interval,
start=start, end=end, prepost=prepost,
actions=actions, auto_adjust=auto_adjust,
back_adjust=back_adjust, proxy=proxy,
rounding=rounding, many=True,
timeout=timeout)
return data

View File

View File

@@ -0,0 +1,49 @@
import pandas as pd
from yfinance import utils
from yfinance.data import TickerData
from yfinance.exceptions import YFNotImplementedError
class Analysis:
def __init__(self, data: TickerData, proxy=None):
self._data = data
self.proxy = proxy
self._earnings_trend = None
self._analyst_trend_details = None
self._analyst_price_target = None
self._rev_est = None
self._eps_est = None
self._already_scraped = False
@property
def earnings_trend(self) -> pd.DataFrame:
if self._earnings_trend is None:
raise YFNotImplementedError('earnings_trend')
return self._earnings_trend
@property
def analyst_trend_details(self) -> pd.DataFrame:
if self._analyst_trend_details is None:
raise YFNotImplementedError('analyst_trend_details')
return self._analyst_trend_details
@property
def analyst_price_target(self) -> pd.DataFrame:
if self._analyst_price_target is None:
raise YFNotImplementedError('analyst_price_target')
return self._analyst_price_target
@property
def rev_est(self) -> pd.DataFrame:
if self._rev_est is None:
raise YFNotImplementedError('rev_est')
return self._rev_est
@property
def eps_est(self) -> pd.DataFrame:
if self._eps_est is None:
raise YFNotImplementedError('eps_est')
return self._eps_est

View File

@@ -0,0 +1,147 @@
import datetime
import json
import pandas as pd
from yfinance import utils, const
from yfinance.data import TickerData
from yfinance.exceptions import YFinanceException, YFNotImplementedError
class Fundamentals:
def __init__(self, data: TickerData, proxy=None):
self._data = data
self.proxy = proxy
self._earnings = None
self._financials = None
self._shares = None
self._financials_data = None
self._fin_data_quote = None
self._basics_already_scraped = False
self._financials = Financials(data)
@property
def financials(self) -> "Financials":
return self._financials
@property
def earnings(self) -> dict:
if self._earnings is None:
raise YFNotImplementedError('earnings')
return self._earnings
@property
def shares(self) -> pd.DataFrame:
if self._shares is None:
raise YFNotImplementedError('shares')
return self._shares
class Financials:
def __init__(self, data: TickerData):
self._data = data
self._income_time_series = {}
self._balance_sheet_time_series = {}
self._cash_flow_time_series = {}
def get_income_time_series(self, freq="yearly", proxy=None) -> pd.DataFrame:
res = self._income_time_series
if freq not in res:
res[freq] = self._fetch_time_series("income", freq, proxy)
return res[freq]
def get_balance_sheet_time_series(self, freq="yearly", proxy=None) -> pd.DataFrame:
res = self._balance_sheet_time_series
if freq not in res:
res[freq] = self._fetch_time_series("balance-sheet", freq, proxy)
return res[freq]
def get_cash_flow_time_series(self, freq="yearly", proxy=None) -> pd.DataFrame:
res = self._cash_flow_time_series
if freq not in res:
res[freq] = self._fetch_time_series("cash-flow", freq, proxy)
return res[freq]
@utils.log_indent_decorator
def _fetch_time_series(self, name, timescale, proxy=None):
# Fetching time series preferred over scraping 'QuoteSummaryStore',
# because it matches what Yahoo shows. But for some tickers returns nothing,
# despite 'QuoteSummaryStore' containing valid data.
allowed_names = ["income", "balance-sheet", "cash-flow"]
allowed_timescales = ["yearly", "quarterly"]
if name not in allowed_names:
raise ValueError(f"Illegal argument: name must be one of: {allowed_names}")
if timescale not in allowed_timescales:
raise ValueError(f"Illegal argument: timescale must be one of: {allowed_names}")
try:
statement = self._create_financials_table(name, timescale, proxy)
if statement is not None:
return statement
except YFinanceException as e:
utils.get_yf_logger().error(f"{self._data.ticker}: Failed to create {name} financials table for reason: {e}")
return pd.DataFrame()
def _create_financials_table(self, name, timescale, proxy):
if name == "income":
# Yahoo stores the 'income' table internally under 'financials' key
name = "financials"
keys = const.fundamentals_keys[name]
try:
return self.get_financials_time_series(timescale, keys, proxy)
except Exception as e:
pass
def get_financials_time_series(self, timescale, keys: list, proxy=None) -> pd.DataFrame:
timescale_translation = {"yearly": "annual", "quarterly": "quarterly"}
timescale = timescale_translation[timescale]
# Step 2: construct url:
ts_url_base = f"https://query2.finance.yahoo.com/ws/fundamentals-timeseries/v1/finance/timeseries/{self._data.ticker}?symbol={self._data.ticker}"
url = ts_url_base + "&type=" + ",".join([timescale + k for k in keys])
# Yahoo returns maximum 4 years or 5 quarters, regardless of start_dt:
start_dt = datetime.datetime(2016, 12, 31)
end = pd.Timestamp.utcnow().ceil("D")
url += f"&period1={int(start_dt.timestamp())}&period2={int(end.timestamp())}"
# Step 3: fetch and reshape data
json_str = self._data.cache_get(url=url, proxy=proxy).text
json_data = json.loads(json_str)
data_raw = json_data["timeseries"]["result"]
# data_raw = [v for v in data_raw if len(v) > 1] # Discard keys with no data
for d in data_raw:
del d["meta"]
# Now reshape data into a table:
# Step 1: get columns and index:
timestamps = set()
data_unpacked = {}
for x in data_raw:
for k in x.keys():
if k == "timestamp":
timestamps.update(x[k])
else:
data_unpacked[k] = x[k]
timestamps = sorted(list(timestamps))
dates = pd.to_datetime(timestamps, unit="s")
df = pd.DataFrame(columns=dates, index=list(data_unpacked.keys()))
for k, v in data_unpacked.items():
if df is None:
df = pd.DataFrame(columns=dates, index=[k])
df.loc[k] = {pd.Timestamp(x["asOfDate"]): x["reportedValue"]["raw"] for x in v}
df.index = df.index.str.replace("^" + timescale, "", regex=True)
# Reorder table to match order on Yahoo website
df = df.reindex([k for k in keys if k in df.index])
df = df[sorted(df.columns, reverse=True)]
return df

View File

@@ -0,0 +1,67 @@
import pandas as pd
from yfinance.data import TickerData
class Holders:
_SCRAPE_URL_ = 'https://finance.yahoo.com/quote'
def __init__(self, data: TickerData, proxy=None):
self._data = data
self.proxy = proxy
self._major = None
self._institutional = None
self._mutualfund = None
@property
def major(self) -> pd.DataFrame:
if self._major is None:
self._scrape(self.proxy)
return self._major
@property
def institutional(self) -> pd.DataFrame:
if self._institutional is None:
self._scrape(self.proxy)
return self._institutional
@property
def mutualfund(self) -> pd.DataFrame:
if self._mutualfund is None:
self._scrape(self.proxy)
return self._mutualfund
def _scrape(self, proxy):
ticker_url = f"{self._SCRAPE_URL_}/{self._data.ticker}"
try:
resp = self._data.cache_get(ticker_url + '/holders', proxy=proxy)
holders = pd.read_html(resp.text)
except Exception:
holders = []
if len(holders) >= 3:
self._major = holders[0]
self._institutional = holders[1]
self._mutualfund = holders[2]
elif len(holders) >= 2:
self._major = holders[0]
self._institutional = holders[1]
elif len(holders) >= 1:
self._major = holders[0]
if self._institutional is not None:
if 'Date Reported' in self._institutional:
self._institutional['Date Reported'] = pd.to_datetime(
self._institutional['Date Reported'])
if '% Out' in self._institutional:
self._institutional['% Out'] = self._institutional[
'% Out'].str.replace('%', '').astype(float) / 100
if self._mutualfund is not None:
if 'Date Reported' in self._mutualfund:
self._mutualfund['Date Reported'] = pd.to_datetime(
self._mutualfund['Date Reported'])
if '% Out' in self._mutualfund:
self._mutualfund['% Out'] = self._mutualfund[
'% Out'].str.replace('%', '').astype(float) / 100

695
yfinance/scrapers/quote.py Normal file
View File

@@ -0,0 +1,695 @@
import datetime
import json
import logging
import warnings
from collections.abc import MutableMapping
import numpy as _np
import pandas as pd
from yfinance import utils
from yfinance.data import TickerData
from yfinance.exceptions import YFNotImplementedError
info_retired_keys_price = {"currentPrice", "dayHigh", "dayLow", "open", "previousClose", "volume", "volume24Hr"}
info_retired_keys_price.update({"regularMarket"+s for s in ["DayHigh", "DayLow", "Open", "PreviousClose", "Price", "Volume"]})
info_retired_keys_price.update({"fiftyTwoWeekLow", "fiftyTwoWeekHigh", "fiftyTwoWeekChange", "52WeekChange", "fiftyDayAverage", "twoHundredDayAverage"})
info_retired_keys_price.update({"averageDailyVolume10Day", "averageVolume10days", "averageVolume"})
info_retired_keys_exchange = {"currency", "exchange", "exchangeTimezoneName", "exchangeTimezoneShortName", "quoteType"}
info_retired_keys_marketCap = {"marketCap"}
info_retired_keys_symbol = {"symbol"}
info_retired_keys = info_retired_keys_price | info_retired_keys_exchange | info_retired_keys_marketCap | info_retired_keys_symbol
_BASIC_URL_ = "https://query2.finance.yahoo.com/v6/finance/quoteSummary"
class InfoDictWrapper(MutableMapping):
""" Simple wrapper around info dict, intercepting 'gets' to
print how-to-migrate messages for specific keys. Requires
override dict API"""
def __init__(self, info):
self.info = info
def keys(self):
return self.info.keys()
def __str__(self):
return self.info.__str__()
def __repr__(self):
return self.info.__repr__()
def __contains__(self, k):
return k in self.info.keys()
def __getitem__(self, k):
if k in info_retired_keys_price:
warnings.warn(f"Price data removed from info (key='{k}'). Use Ticker.fast_info or history() instead", DeprecationWarning)
return None
elif k in info_retired_keys_exchange:
warnings.warn(f"Exchange data removed from info (key='{k}'). Use Ticker.fast_info or Ticker.get_history_metadata() instead", DeprecationWarning)
return None
elif k in info_retired_keys_marketCap:
warnings.warn(f"Market cap removed from info (key='{k}'). Use Ticker.fast_info instead", DeprecationWarning)
return None
elif k in info_retired_keys_symbol:
warnings.warn(f"Symbol removed from info (key='{k}'). You know this already", DeprecationWarning)
return None
return self.info[self._keytransform(k)]
def __setitem__(self, k, value):
self.info[self._keytransform(k)] = value
def __delitem__(self, k):
del self.info[self._keytransform(k)]
def __iter__(self):
return iter(self.info)
def __len__(self):
return len(self.info)
def _keytransform(self, k):
return k
class FastInfo:
# Contain small subset of info[] items that can be fetched faster elsewhere.
# Imitates a dict.
def __init__(self, tickerBaseObject, proxy=None):
self._tkr = tickerBaseObject
self.proxy = proxy
self._prices_1y = None
self._prices_1wk_1h_prepost = None
self._prices_1wk_1h_reg = None
self._md = None
self._currency = None
self._quote_type = None
self._exchange = None
self._timezone = None
self._shares = None
self._mcap = None
self._open = None
self._day_high = None
self._day_low = None
self._last_price = None
self._last_volume = None
self._prev_close = None
self._reg_prev_close = None
self._50d_day_average = None
self._200d_day_average = None
self._year_high = None
self._year_low = None
self._year_change = None
self._10d_avg_vol = None
self._3mo_avg_vol = None
# attrs = utils.attributes(self)
# self.keys = attrs.keys()
# utils.attributes is calling each method, bad! Have to hardcode
_properties = ["currency", "quote_type", "exchange", "timezone"]
_properties += ["shares", "market_cap"]
_properties += ["last_price", "previous_close", "open", "day_high", "day_low"]
_properties += ["regular_market_previous_close"]
_properties += ["last_volume"]
_properties += ["fifty_day_average", "two_hundred_day_average", "ten_day_average_volume", "three_month_average_volume"]
_properties += ["year_high", "year_low", "year_change"]
# Because released before fixing key case, need to officially support
# camel-case but also secretly support snake-case
base_keys = [k for k in _properties if '_' not in k]
sc_keys = [k for k in _properties if '_' in k]
self._sc_to_cc_key = {k: utils.snake_case_2_camelCase(k) for k in sc_keys}
self._cc_to_sc_key = {v: k for k, v in self._sc_to_cc_key.items()}
self._public_keys = sorted(base_keys + list(self._sc_to_cc_key.values()))
self._keys = sorted(self._public_keys + sc_keys)
# dict imitation:
def keys(self):
return self._public_keys
def items(self):
return [(k, self[k]) for k in self._public_keys]
def values(self):
return [self[k] for k in self._public_keys]
def get(self, key, default=None):
if key in self.keys():
if key in self._cc_to_sc_key:
key = self._cc_to_sc_key[key]
return self[key]
return default
def __getitem__(self, k):
if not isinstance(k, str):
raise KeyError(f"key must be a string")
if k not in self._keys:
raise KeyError(f"'{k}' not valid key. Examine 'FastInfo.keys()'")
if k in self._cc_to_sc_key:
k = self._cc_to_sc_key[k]
return getattr(self, k)
def __contains__(self, k):
return k in self.keys()
def __iter__(self):
return iter(self.keys())
def __str__(self):
return "lazy-loading dict with keys = " + str(self.keys())
def __repr__(self):
return self.__str__()
def toJSON(self, indent=4):
d = {k: self[k] for k in self.keys()}
return json.dumps({k: self[k] for k in self.keys()}, indent=indent)
def _get_1y_prices(self, fullDaysOnly=False):
if self._prices_1y is None:
# Temporarily disable error printing
logging.disable(logging.CRITICAL)
self._prices_1y = self._tkr.history(period="380d", auto_adjust=False, keepna=True, proxy=self.proxy)
logging.disable(logging.NOTSET)
self._md = self._tkr.get_history_metadata(proxy=self.proxy)
try:
ctp = self._md["currentTradingPeriod"]
self._today_open = pd.to_datetime(ctp["regular"]["start"], unit='s', utc=True).tz_convert(self.timezone)
self._today_close = pd.to_datetime(ctp["regular"]["end"], unit='s', utc=True).tz_convert(self.timezone)
self._today_midnight = self._today_close.ceil("D")
except Exception:
self._today_open = None
self._today_close = None
self._today_midnight = None
raise
if self._prices_1y.empty:
return self._prices_1y
dnow = pd.Timestamp.utcnow().tz_convert(self.timezone).date()
d1 = dnow
d0 = (d1 + datetime.timedelta(days=1)) - utils._interval_to_timedelta("1y")
if fullDaysOnly and self._exchange_open_now():
# Exclude today
d1 -= utils._interval_to_timedelta("1d")
return self._prices_1y.loc[str(d0):str(d1)]
def _get_1wk_1h_prepost_prices(self):
if self._prices_1wk_1h_prepost is None:
# Temporarily disable error printing
logging.disable(logging.CRITICAL)
self._prices_1wk_1h_prepost = self._tkr.history(period="1wk", interval="1h", auto_adjust=False, prepost=True, proxy=self.proxy)
logging.disable(logging.NOTSET)
return self._prices_1wk_1h_prepost
def _get_1wk_1h_reg_prices(self):
if self._prices_1wk_1h_reg is None:
# Temporarily disable error printing
logging.disable(logging.CRITICAL)
self._prices_1wk_1h_reg = self._tkr.history(period="1wk", interval="1h", auto_adjust=False, prepost=False, proxy=self.proxy)
logging.disable(logging.NOTSET)
return self._prices_1wk_1h_reg
def _get_exchange_metadata(self):
if self._md is not None:
return self._md
self._get_1y_prices()
self._md = self._tkr.get_history_metadata(proxy=self.proxy)
return self._md
def _exchange_open_now(self):
t = pd.Timestamp.utcnow()
self._get_exchange_metadata()
# if self._today_open is None and self._today_close is None:
# r = False
# else:
# r = self._today_open <= t and t < self._today_close
# if self._today_midnight is None:
# r = False
# elif self._today_midnight.date() > t.tz_convert(self.timezone).date():
# r = False
# else:
# r = t < self._today_midnight
last_day_cutoff = self._get_1y_prices().index[-1] + datetime.timedelta(days=1)
last_day_cutoff += datetime.timedelta(minutes=20)
r = t < last_day_cutoff
# print("_exchange_open_now() returning", r)
return r
@property
def currency(self):
if self._currency is not None:
return self._currency
if self._tkr._history_metadata is None:
self._get_1y_prices()
md = self._tkr.get_history_metadata(proxy=self.proxy)
self._currency = md["currency"]
return self._currency
@property
def quote_type(self):
if self._quote_type is not None:
return self._quote_type
if self._tkr._history_metadata is None:
self._get_1y_prices()
md = self._tkr.get_history_metadata(proxy=self.proxy)
self._quote_type = md["instrumentType"]
return self._quote_type
@property
def exchange(self):
if self._exchange is not None:
return self._exchange
self._exchange = self._get_exchange_metadata()["exchangeName"]
return self._exchange
@property
def timezone(self):
if self._timezone is not None:
return self._timezone
self._timezone = self._get_exchange_metadata()["exchangeTimezoneName"]
return self._timezone
@property
def shares(self):
if self._shares is not None:
return self._shares
shares = self._tkr.get_shares_full(start=pd.Timestamp.utcnow().date()-pd.Timedelta(days=548), proxy=self.proxy)
# if shares is None:
# # Requesting 18 months failed, so fallback to shares which should include last year
# shares = self._tkr.get_shares()
if shares is not None:
if isinstance(shares, pd.DataFrame):
shares = shares[shares.columns[0]]
self._shares = int(shares.iloc[-1])
return self._shares
@property
def last_price(self):
if self._last_price is not None:
return self._last_price
prices = self._get_1y_prices()
if prices.empty:
md = self._get_exchange_metadata()
if "regularMarketPrice" in md:
self._last_price = md["regularMarketPrice"]
else:
self._last_price = float(prices["Close"].iloc[-1])
if _np.isnan(self._last_price):
md = self._get_exchange_metadata()
if "regularMarketPrice" in md:
self._last_price = md["regularMarketPrice"]
return self._last_price
@property
def previous_close(self):
if self._prev_close is not None:
return self._prev_close
prices = self._get_1wk_1h_prepost_prices()
fail = False
if prices.empty:
fail = True
else:
prices = prices[["Close"]].groupby(prices.index.date).last()
if prices.shape[0] < 2:
# Very few symbols have previousClose despite no
# no trading data e.g. 'QCSTIX'.
fail = True
else:
self._prev_close = float(prices["Close"].iloc[-2])
if fail:
# Fallback to original info[] if available.
self._tkr.info # trigger fetch
k = "previousClose"
if self._tkr._quote._retired_info is not None and k in self._tkr._quote._retired_info:
self._prev_close = self._tkr._quote._retired_info[k]
return self._prev_close
@property
def regular_market_previous_close(self):
if self._reg_prev_close is not None:
return self._reg_prev_close
prices = self._get_1y_prices()
if prices.shape[0] == 1:
# Tiny % of tickers don't return daily history before last trading day,
# so backup option is hourly history:
prices = self._get_1wk_1h_reg_prices()
prices = prices[["Close"]].groupby(prices.index.date).last()
if prices.shape[0] < 2:
# Very few symbols have regularMarketPreviousClose despite no
# no trading data. E.g. 'QCSTIX'.
# So fallback to original info[] if available.
self._tkr.info # trigger fetch
k = "regularMarketPreviousClose"
if self._tkr._quote._retired_info is not None and k in self._tkr._quote._retired_info:
self._reg_prev_close = self._tkr._quote._retired_info[k]
else:
self._reg_prev_close = float(prices["Close"].iloc[-2])
return self._reg_prev_close
@property
def open(self):
if self._open is not None:
return self._open
prices = self._get_1y_prices()
if prices.empty:
self._open = None
else:
self._open = float(prices["Open"].iloc[-1])
if _np.isnan(self._open):
self._open = None
return self._open
@property
def day_high(self):
if self._day_high is not None:
return self._day_high
prices = self._get_1y_prices()
if prices.empty:
self._day_high = None
else:
self._day_high = float(prices["High"].iloc[-1])
if _np.isnan(self._day_high):
self._day_high = None
return self._day_high
@property
def day_low(self):
if self._day_low is not None:
return self._day_low
prices = self._get_1y_prices()
if prices.empty:
self._day_low = None
else:
self._day_low = float(prices["Low"].iloc[-1])
if _np.isnan(self._day_low):
self._day_low = None
return self._day_low
@property
def last_volume(self):
if self._last_volume is not None:
return self._last_volume
prices = self._get_1y_prices()
self._last_volume = None if prices.empty else int(prices["Volume"].iloc[-1])
return self._last_volume
@property
def fifty_day_average(self):
if self._50d_day_average is not None:
return self._50d_day_average
prices = self._get_1y_prices(fullDaysOnly=True)
if prices.empty:
self._50d_day_average = None
else:
n = prices.shape[0]
a = n-50
b = n
if a < 0:
a = 0
self._50d_day_average = float(prices["Close"].iloc[a:b].mean())
return self._50d_day_average
@property
def two_hundred_day_average(self):
if self._200d_day_average is not None:
return self._200d_day_average
prices = self._get_1y_prices(fullDaysOnly=True)
if prices.empty:
self._200d_day_average = None
else:
n = prices.shape[0]
a = n-200
b = n
if a < 0:
a = 0
self._200d_day_average = float(prices["Close"].iloc[a:b].mean())
return self._200d_day_average
@property
def ten_day_average_volume(self):
if self._10d_avg_vol is not None:
return self._10d_avg_vol
prices = self._get_1y_prices(fullDaysOnly=True)
if prices.empty:
self._10d_avg_vol = None
else:
n = prices.shape[0]
a = n-10
b = n
if a < 0:
a = 0
self._10d_avg_vol = int(prices["Volume"].iloc[a:b].mean())
return self._10d_avg_vol
@property
def three_month_average_volume(self):
if self._3mo_avg_vol is not None:
return self._3mo_avg_vol
prices = self._get_1y_prices(fullDaysOnly=True)
if prices.empty:
self._3mo_avg_vol = None
else:
dt1 = prices.index[-1]
dt0 = dt1 - utils._interval_to_timedelta("3mo") + utils._interval_to_timedelta("1d")
self._3mo_avg_vol = int(prices.loc[dt0:dt1, "Volume"].mean())
return self._3mo_avg_vol
@property
def year_high(self):
if self._year_high is not None:
return self._year_high
prices = self._get_1y_prices(fullDaysOnly=True)
if prices.empty:
prices = self._get_1y_prices(fullDaysOnly=False)
self._year_high = float(prices["High"].max())
return self._year_high
@property
def year_low(self):
if self._year_low is not None:
return self._year_low
prices = self._get_1y_prices(fullDaysOnly=True)
if prices.empty:
prices = self._get_1y_prices(fullDaysOnly=False)
self._year_low = float(prices["Low"].min())
return self._year_low
@property
def year_change(self):
if self._year_change is not None:
return self._year_change
prices = self._get_1y_prices(fullDaysOnly=True)
if prices.shape[0] >= 2:
self._year_change = (prices["Close"].iloc[-1] - prices["Close"].iloc[0]) / prices["Close"].iloc[0]
self._year_change = float(self._year_change)
return self._year_change
@property
def market_cap(self):
if self._mcap is not None:
return self._mcap
try:
shares = self.shares
except Exception as e:
if "Cannot retrieve share count" in str(e):
shares = None
elif "failed to decrypt Yahoo" in str(e):
shares = None
else:
raise
if shares is None:
# Very few symbols have marketCap despite no share count.
# E.g. 'BTC-USD'
# So fallback to original info[] if available.
self._tkr.info
k = "marketCap"
if self._tkr._quote._retired_info is not None and k in self._tkr._quote._retired_info:
self._mcap = self._tkr._quote._retired_info[k]
else:
self._mcap = float(shares * self.last_price)
return self._mcap
class Quote:
def __init__(self, data: TickerData, proxy=None):
self._data = data
self.proxy = proxy
self._info = None
self._retired_info = None
self._sustainability = None
self._recommendations = None
self._calendar = None
self._already_scraped = False
self._already_fetched = False
self._already_fetched_complementary = False
@property
def info(self) -> dict:
if self._info is None:
self._fetch(self.proxy)
self._fetch_complementary(self.proxy)
return self._info
@property
def sustainability(self) -> pd.DataFrame:
if self._sustainability is None:
raise YFNotImplementedError('sustainability')
return self._sustainability
@property
def recommendations(self) -> pd.DataFrame:
if self._recommendations is None:
raise YFNotImplementedError('recommendations')
return self._recommendations
@property
def calendar(self) -> pd.DataFrame:
if self._calendar is None:
raise YFNotImplementedError('calendar')
return self._calendar
def _fetch(self, proxy):
if self._already_fetched:
return
self._already_fetched = True
modules = ['financialData', 'quoteType', 'defaultKeyStatistics', 'assetProfile', 'summaryDetail']
params_dict = {"modules": modules, "ssl": "true"}
result = self._data.get_raw_json(
_BASIC_URL_ + f"/{self._data.ticker}", params=params_dict, proxy=proxy
)
result["quoteSummary"]["result"][0]["symbol"] = self._data.ticker
query1_info = next(
(info for info in result.get("quoteSummary", {}).get("result", []) if info["symbol"] == self._data.ticker),
None,
)
# Most keys that appear in multiple dicts have same value. Except 'maxAge' because
# Yahoo not consistent with days vs seconds. Fix it here:
for k in query1_info:
if "maxAge" in query1_info[k] and query1_info[k]["maxAge"] == 1:
query1_info[k]["maxAge"] = 86400
query1_info = {
k1: v1
for k, v in query1_info.items()
if isinstance(v, dict)
for k1, v1 in v.items()
if v1
}
# recursively format but only because of 'companyOfficers'
def _format(k, v):
if isinstance(v, dict) and "raw" in v and "fmt" in v:
v2 = v["fmt"] if k in {"regularMarketTime", "postMarketTime"} else v["raw"]
elif isinstance(v, list):
v2 = [_format(None, x) for x in v]
elif isinstance(v, dict):
v2 = {k: _format(k, x) for k, x in v.items()}
elif isinstance(v, str):
v2 = v.replace("\xa0", " ")
else:
v2 = v
return v2
for k, v in query1_info.items():
query1_info[k] = _format(k, v)
self._info = query1_info
def _fetch_complementary(self, proxy):
if self._already_fetched_complementary:
return
self._already_fetched_complementary = True
# self._scrape(proxy) # decrypt broken
self._fetch(proxy)
if self._info is None:
return
# Complementary key-statistics. For now just want 'trailing PEG ratio'
keys = {"trailingPegRatio"}
if keys:
# Simplified the original scrape code for key-statistics. Very expensive for fetching
# just one value, best if scraping most/all:
#
# p = _re.compile(r'root\.App\.main = (.*);')
# url = 'https://finance.yahoo.com/quote/{}/key-statistics?p={}'.format(self._ticker.ticker, self._ticker.ticker)
# try:
# r = session.get(url, headers=utils.user_agent_headers)
# data = _json.loads(p.findall(r.text)[0])
# key_stats = data['context']['dispatcher']['stores']['QuoteTimeSeriesStore']["timeSeries"]
# for k in keys:
# if k not in key_stats or len(key_stats[k])==0:
# # Yahoo website prints N/A, indicates Yahoo lacks necessary data to calculate
# v = None
# else:
# # Select most recent (last) raw value in list:
# v = key_stats[k][-1]["reportedValue"]["raw"]
# self._info[k] = v
# except Exception:
# raise
# pass
#
# For just one/few variable is faster to query directly:
url = f"https://query1.finance.yahoo.com/ws/fundamentals-timeseries/v1/finance/timeseries/{self._data.ticker}?symbol={self._data.ticker}"
for k in keys:
url += "&type=" + k
# Request 6 months of data
start = pd.Timestamp.utcnow().floor("D") - datetime.timedelta(days=365 // 2)
start = int(start.timestamp())
end = pd.Timestamp.utcnow().ceil("D")
end = int(end.timestamp())
url += f"&period1={start}&period2={end}"
json_str = self._data.cache_get(url=url, proxy=proxy).text
json_data = json.loads(json_str)
try:
key_stats = json_data["timeseries"]["result"][0]
if k not in key_stats:
# Yahoo website prints N/A, indicates Yahoo lacks necessary data to calculate
v = None
else:
# Select most recent (last) raw value in list:
v = key_stats[k][-1]["reportedValue"]["raw"]
except Exception:
v = None
self._info[k] = v

View File

@@ -0,0 +1,8 @@
daf93e37cbf219cd4c1f3f74ec4551265ec5565b99e8c9322dccd6872941cf13c818cbb88cba6f530e643b4e2329b17ec7161f4502ce6a02bb0dbbe5fc0d0474
ad4d90b3c9f2e1d156ef98eadfa0ff93e4042f6960e54aa2a13f06f528e6b50ba4265a26a1fd5b9cd3db0d268a9c34e1d080592424309429a58bce4adc893c87
e9a8ab8e5620b712ebc2fb4f33d5c8b9c80c0d07e8c371911c785cf674789f1747d76a909510158a7b7419e86857f2d7abbd777813ff64840e4cbc514d12bcae
6ae2523aeafa283dad746556540145bf603f44edbf37ad404d3766a8420bb5eb1d3738f52a227b88283cca9cae44060d5f0bba84b6a495082589f5fe7acbdc9e
3365117c2a368ffa5df7313a4a84988f73926a86358e8eea9497c5ff799ce27d104b68e5f2fbffa6f8f92c1fef41765a7066fa6bcf050810a9c4c7872fd3ebf0
15d8f57919857d5a5358d2082c7ef0f1129cfacd2a6480333dcfb954b7bb67d820abefebfdb0eaa6ef18a1c57f617b67d7e7b0ec040403b889630ae5db5a4dbb
db9630d707a7d0953ac795cd8db1ca9ca6c9d8239197cdfda24b4e0ec9c37eaec4db82dab68b8f606ab7b5b4af3e65dab50606f8cf508269ec927e6ee605fb78
3c895fb5ddcc37d20d3073ed74ee3efad59bcb147c8e80fd279f83701b74b092d503dcd399604c6d8be8f3013429d3c2c76ed5b31b80c9df92d5eab6d3339fce

View File

@@ -22,4 +22,5 @@
_DFS = {}
_PROGRESS_BAR = None
_ERRORS = {}
_TRACEBACKS = {}
_ISINS = {}

View File

@@ -21,50 +21,41 @@
from __future__ import print_function
# import time as _time
import datetime as _datetime
import requests as _requests
import pandas as _pd
# import numpy as _np
# import json as _json
# import re as _re
from collections import namedtuple as _namedtuple
from . import utils
import pandas as _pd
from .base import TickerBase
class Ticker(TickerBase):
def __init__(self, ticker, session=None):
super(Ticker, self).__init__(ticker, session=session)
self._expirations = {}
self._underlying = {}
def __repr__(self):
return 'yfinance.Ticker object <%s>' % self.ticker
return f'yfinance.Ticker object <{self.ticker}>'
def _download_options(self, date=None, proxy=None):
if date is None:
url = "{}/v7/finance/options/{}".format(
self._base_url, self.ticker)
url = f"{self._base_url}/v7/finance/options/{self.ticker}"
else:
url = "{}/v7/finance/options/{}?date={}".format(
self._base_url, self.ticker, date)
url = f"{self._base_url}/v7/finance/options/{self.ticker}?date={date}"
# setup proxy in requests format
if proxy is not None:
if isinstance(proxy, dict) and "https" in proxy:
proxy = proxy["https"]
proxy = {"https": proxy}
r = _requests.get(
url=url,
proxies=proxy,
headers=utils.user_agent_headers
).json()
r = self._data.get(url=url, proxy=proxy).json()
if len(r.get('optionChain', {}).get('result', [])) > 0:
for exp in r['optionChain']['result'][0]['expirationDates']:
self._expirations[_datetime.datetime.utcfromtimestamp(
exp).strftime('%Y-%m-%d')] = exp
self._underlying = r['optionChain']['result'][0].get('quote', {})
opt = r['optionChain']['result'][0].get('options', [])
return opt[0] if len(opt) > 0 else []
return dict(**opt[0],underlying=self._underlying) if len(opt) > 0 else {}
return {}
def _options2df(self, opt, tz=None):
data = _pd.DataFrame(opt).reindex(columns=[
@@ -97,15 +88,15 @@ class Ticker(TickerBase):
self._download_options()
if date not in self._expirations:
raise ValueError(
"Expiration `%s` cannot be found. "
"Available expiration are: [%s]" % (
date, ', '.join(self._expirations)))
f"Expiration `{date}` cannot be found. "
f"Available expirations are: [{', '.join(self._expirations)}]")
date = self._expirations[date]
options = self._download_options(date, proxy=proxy)
return _namedtuple('Options', ['calls', 'puts'])(**{
return _namedtuple('Options', ['calls', 'puts', 'underlying'])(**{
"calls": self._options2df(options['calls'], tz=tz),
"puts": self._options2df(options['puts'], tz=tz)
"puts": self._options2df(options['puts'], tz=tz),
"underlying": options['underlying']
})
# ------------------------
@@ -115,39 +106,47 @@ class Ticker(TickerBase):
return self.get_isin()
@property
def major_holders(self):
def major_holders(self) -> _pd.DataFrame:
return self.get_major_holders()
@property
def institutional_holders(self):
def institutional_holders(self) -> _pd.DataFrame:
return self.get_institutional_holders()
@property
def mutualfund_holders(self):
def mutualfund_holders(self) -> _pd.DataFrame:
return self.get_mutualfund_holders()
@property
def dividends(self):
def dividends(self) -> _pd.Series:
return self.get_dividends()
@property
def splits(self):
def capital_gains(self):
return self.get_capital_gains()
@property
def splits(self) -> _pd.Series:
return self.get_splits()
@property
def actions(self):
def actions(self) -> _pd.DataFrame:
return self.get_actions()
@property
def shares(self):
def shares(self) -> _pd.DataFrame :
return self.get_shares()
@property
def info(self):
def info(self) -> dict:
return self.get_info()
@property
def calendar(self):
def fast_info(self):
return self.get_fast_info()
@property
def calendar(self) -> _pd.DataFrame:
return self.get_calendar()
@property
@@ -155,51 +154,87 @@ class Ticker(TickerBase):
return self.get_recommendations()
@property
def earnings(self):
def earnings(self) -> _pd.DataFrame:
return self.get_earnings()
@property
def quarterly_earnings(self):
def quarterly_earnings(self) -> _pd.DataFrame:
return self.get_earnings(freq='quarterly')
@property
def financials(self):
return self.get_financials()
def income_stmt(self) -> _pd.DataFrame:
return self.get_income_stmt(pretty=True)
@property
def quarterly_financials(self):
return self.get_financials(freq='quarterly')
def quarterly_income_stmt(self) -> _pd.DataFrame:
return self.get_income_stmt(pretty=True, freq='quarterly')
@property
def balance_sheet(self):
return self.get_balancesheet()
def incomestmt(self) -> _pd.DataFrame:
return self.income_stmt
@property
def quarterly_balance_sheet(self):
return self.get_balancesheet(freq='quarterly')
def quarterly_incomestmt(self) -> _pd.DataFrame:
return self.quarterly_income_stmt
@property
def balancesheet(self):
return self.get_balancesheet()
def financials(self) -> _pd.DataFrame:
return self.income_stmt
@property
def quarterly_balancesheet(self):
return self.get_balancesheet(freq='quarterly')
def quarterly_financials(self) -> _pd.DataFrame:
return self.quarterly_income_stmt
@property
def cashflow(self):
return self.get_cashflow()
def balance_sheet(self) -> _pd.DataFrame:
return self.get_balance_sheet(pretty=True)
@property
def quarterly_cashflow(self):
return self.get_cashflow(freq='quarterly')
def quarterly_balance_sheet(self) -> _pd.DataFrame:
return self.get_balance_sheet(pretty=True, freq='quarterly')
@property
def sustainability(self):
def balancesheet(self) -> _pd.DataFrame:
return self.balance_sheet
@property
def quarterly_balancesheet(self) -> _pd.DataFrame:
return self.quarterly_balance_sheet
@property
def cash_flow(self) -> _pd.DataFrame:
return self.get_cash_flow(pretty=True, freq="yearly")
@property
def quarterly_cash_flow(self) -> _pd.DataFrame:
return self.get_cash_flow(pretty=True, freq='quarterly')
@property
def cashflow(self) -> _pd.DataFrame:
return self.cash_flow
@property
def quarterly_cashflow(self) -> _pd.DataFrame:
return self.quarterly_cash_flow
@property
def recommendations_summary(self):
return self.get_recommendations_summary()
@property
def analyst_price_target(self) -> _pd.DataFrame:
return self.get_analyst_price_target()
@property
def revenue_forecasts(self) -> _pd.DataFrame:
return self.get_rev_forecast()
@property
def sustainability(self) -> _pd.DataFrame:
return self.get_sustainability()
@property
def options(self):
def options(self) -> tuple:
if not self._expirations:
self._download_options()
return tuple(self._expirations.keys())
@@ -209,5 +244,21 @@ class Ticker(TickerBase):
return self.get_news()
@property
def analysis(self):
return self.get_analysis()
def trend_details(self) -> _pd.DataFrame:
return self.get_trend_details()
@property
def earnings_trend(self) -> _pd.DataFrame:
return self.get_earnings_trend()
@property
def earnings_dates(self) -> _pd.DataFrame:
return self.get_earnings_dates()
@property
def earnings_forecasts(self) -> _pd.DataFrame:
return self.get_earnings_forecast()
@property
def history_metadata(self) -> dict:
return self.get_history_metadata()

View File

@@ -22,51 +22,53 @@
from __future__ import print_function
from . import Ticker, multi
# from collections import namedtuple as _namedtuple
class Tickers():
class Tickers:
def __repr__(self):
return 'yfinance.Tickers object <%s>' % ",".join(self.symbols)
return f"yfinance.Tickers object <{','.join(self.symbols)}>"
def __init__(self, tickers):
def __init__(self, tickers, session=None):
tickers = tickers if isinstance(
tickers, list) else tickers.replace(',', ' ').split()
self.symbols = [ticker.upper() for ticker in tickers]
ticker_objects = {}
self.tickers = {ticker: Ticker(ticker, session=session) for ticker in self.symbols}
for ticker in self.symbols:
ticker_objects[ticker] = Ticker(ticker)
self.tickers = ticker_objects
# self.tickers = _namedtuple(
# "Tickers", ticker_objects.keys(), rename=True
# )(*ticker_objects.values())
def history(self, period="1mo", interval="1d",
start=None, end=None, prepost=False,
actions=True, auto_adjust=True, proxy=None,
actions=True, auto_adjust=True, repair=False,
proxy=None,
threads=True, group_by='column', progress=True,
timeout=None, **kwargs):
timeout=10, **kwargs):
return self.download(
period, interval,
start, end, prepost,
actions, auto_adjust, proxy,
threads, group_by, progress,
timeout, **kwargs)
period, interval,
start, end, prepost,
actions, auto_adjust, repair,
proxy,
threads, group_by, progress,
timeout, **kwargs)
def download(self, period="1mo", interval="1d",
start=None, end=None, prepost=False,
actions=True, auto_adjust=True, proxy=None,
actions=True, auto_adjust=True, repair=False,
proxy=None,
threads=True, group_by='column', progress=True,
timeout=None, **kwargs):
timeout=10, **kwargs):
data = multi.download(self.symbols,
start=start, end=end,
actions=actions,
auto_adjust=auto_adjust,
repair=repair,
period=period,
interval=interval,
prepost=prepost,
@@ -85,3 +87,6 @@ class Tickers():
data.sort_index(level=0, axis=1, inplace=True)
return data
def news(self):
return {ticker: [item for item in Ticker(ticker).news] for ticker in self.symbols}

File diff suppressed because it is too large Load Diff

View File

@@ -1 +1 @@
version = "0.1.70"
version = "0.2.31"