Sunday, Aug 16th  2026 @ 12:08:36 Daylight Savings Time 
 
 
  
www . shrum.net /updates
All scripting, coding, html, layout, design, .... basically everything here done by yours truly. - S

     

  
 
 
 
filter
 clear search
 
 
$domain$ :: $subdomain$

Site Modifications + Code Changelogs

If you frequent my site, you'll notice that I update it and the projects I create quite a bit.  Due to size and scope, updates are scattered all around.  This listing serves as a quick reference for those who only want to look at the newest changes.  By default, the latest 15 updates are listed below (with links to the changed or added content). If you are looking for a specific area of the site, use the search field above or use the site nav links in the top right and bottom right of the page. Area specific links are typically on the left side
 
$domain$ :: $subdomain$ :: $title$
# of Columns
PAGINATION NAVIGATION
RECORDS PER PAGE
 

1 2 3 4 5 6 7

     Page 1 of 2     

210 315 420 - All

 

Displaying 45 [  1 - 45  ] of 90 matching entries (out of 90) in descending order

 
 

 
  2026.08.11 @ 21.39.50

 

  [ finance.shrum.net ] :: I'm seeing ticker prices that haven't been updated on yFinance when pulled at the 1:15pm PDT cronjob meaning I need to move the actual update launch time to 1:30pm PDT to make sure I give yFinance enough time to finalize colsing prices.  [ edit ]
    
 
 

 
  2026.08.09 @ 18.18.19

 

  [ finance.shrum.net ] :: Numerous additions. Daily Brief now has catagorized rows: US Markets, Intl Markets, US Reports, US Bonds, Metals, Currency, and Energy (with timeframe and row hiding options). Added a new section called Sector Price History which charts all the sectors on one chart (with timeframe and sector hiding options). Section notes are now in a collapsible [+] Notes area and can be expanded at the bottom of each section if applicable.  [ edit ]
    
 
 

 
  2026.08.08 @ 02.26.03

 

  [ finance.shrum.net ] :: Main dashboard now has a Daily Brief section with 30 day charts of the Dow, Nasdaq, S&P, Russell, VIX, CPI, Unemployment, Jobs, Gold/oz, USD Index, WTI, and Fed rate.  [ edit ]
    
 
 

 
  2026.08.06 @ 23.30.40

 

  [ finance.shrum.net ] :: Main dashboard now allows for MA200d$, Donchian channels, CBOE VIX, and USD Index (via FRED) overlays in the Ticker Price History section. VIX and USD Index share the right hand side scale and will adjust accordingly when these two overlays are used separately.  [ edit ]
    
 
 

 
  2026.08.06 @ 21.57.11

 

  [ finance.shrum.net ] :: Main dashboard now has a Sector Exposure section that is visible when stored portfolio data is detected (does not show on portfolio argument with only tickers listed).  [ edit ]
    
 
 

 
  2026.08.06 @ 20.03.54

 

  [ finance.shrum.net?section=tickers ] :: Main dashboard Tickers Table now has multiple pre-defined table layouts: Default, Analyst, Fundamentals, Growth, MA200D, Movers, Portfolio, Risk, Screener, Volume, and YOY.  [ edit ]
    
 
 

 
  2026.08.06 @ 18.08.32

 

  [ finance.shrum.net ] :: Heatmap dashboard will default to ticker map only and Main dashboard Tickers Table will default to 'Portfolio' col layout if portfolio data is present (either stored locally or in the URL). Main Tickers Table now allows for stored user definable Col layouts.  [ edit ]
    
 
 

 
  2026.08.05 @ 23.50.04

 

  [ finance.shrum.net ] :: Splits are now represented as "S" on the Main dashboard Ticker Price Chart as well as earnings and dividend dates.  [ edit ]
    
 
 

 
  2026.08.05 @ 15.26.17

 

  [ finance.shrum.net ] :: Data updates handed off to a Raspberry PI. CRON set to fire every weekday at 1:05PM PDT (after market close). System is now fully automated.  [ edit ]
    
 
 

 
  2026.08.05 @ 12.23.42

 

  [ finance.shrum.net ] :: V3 is online. New 'finance' subdomain added. Faster page loads (down from over 300M to 200k), new API data retrieval design, zero page maintenance, data downloads and API usage fully documented. Portfolio manager for inputting and saving (locally) multiple accounts and their trades. Import feature is still a little new so if you run into trouble, let me know. All prior links to the old /sean/financial area and its subdirs will auto redirect to the new subdomain.  [ edit ]
    
 
 

 
  2026.08.02 @ 18.35.25

 

  [ /sean/financial/dash ] :: (heatmap.html heatmap.industry.html heatmap.ticker.html main.html main.365.html) Depreciating table and ticker dashboards for consolidation reasons. Financial dashboards are now focused to TWO dashboard files: Heatmap and main. Heatmap dashboards will call main.365.html with appropriate parameters of TICKER + DISPLAY=profile,price,volume (if a ticker is selected), otherwise SECTOR + INDUSTRY + DISPLAY=price,table. Main dashboard now houses 4 selectable sections via DISPLAY parameter. The sections are: profile, price, volume, and table. Profile contains the ticker profile info, price contains the price history line chart, volume contains the volume bar chart, and table is the tickers table. Omitting this parameter will display all sections.  [ edit ]
    
 
 

 
  2026.07.31 @ 17.20.27

 

  [ /sean/financial/dash ] :: (main.html main.365.html dash.main.py) Script now outputs 2 main dashboards. main.html (10y of data, +130M) and main.365.html (365 trade days of data, +20M). Same data sources, just less for faster loading. Will reuse saved cookies on both files for customized table col settings.  [ edit ]
    
 
 

 
  2026.07.30 @ 01.51.31

 

  [ /sean/financial/dash ] :: (ma200.html) No need to have a separate script to generate a dedicated MA200 dashboard. ma200.html now is a redirect to main.html with parameters that define the appropriate table cols for a MA200 chart. Default sorting is on Avg200d%  [ edit ]
    
 
 

 
  2026.07.30 @ 01.34.04

 

  [ /sean/financial/dash ] :: (main.html) ~20 new fields added to main.html col registry.  [ edit ]
    
 
 

 
  2026.07.30 @ 01.32.39

 

  [ /sean/financial/dash ] :: (volume.html) No need to have a separate script to generate a dedicated Volume dashboard. volume.html now is a redirect to main.html with parameters that define the appropriate table cols for a Volume chart. Default sorting is on VSpike%  [ edit ]
    
 
 

 
  2026.07.30 @ 00.30.35

 

  [ /sean/financial/dash ] :: (yoy.html) No need to have a separate script to generate a dedicated YoY dashboard. YoY.html now is a redirect to main.html with parameters that define the appropriate table cols for a YoY chart. Default sorting is on YTD (current year)  [ edit ]
    
 
 

 
  2026.07.29 @ 16.35.13

 

  [ /sean/financial/data ] :: (dividends.csv dividends.next.csv earnings.csv earnings.next.csv prices.365.csv, prices.csv profile.csv splits.csv tickers.csv volume.365.csv yoy.csv) These files have all been relocated to the new folder listed above. No more '*.csv.txt' files will be created.  [ edit ]
    
 
 

 
  2026.07.29 @ 16.25.13

 

  [ /sean/financial ] :: V.2 of my financial reporting system is coming online. All V.1 data files stored under /sean/datasets have been moved to /sean/financial/data. Navigating to /sean/datasets will redirect to /sean/financial/data. All V.1 dashboards have been moved to /sean/financial/dash. Please update any stored links to reflect the new location. These will most likely stay this way permanently as it's now a dedicated subsite for financial analysis.  [ edit ]
    
 
 

 
  2026.07.25 @ 02.11.54

 

  [ /sean/datasets ] :: (pricehistory.csv prices.csv) These files are now limited to the past 10 years allowing for the file size to drop from 107m to 38m. This change alone make my main dashboard file size drop for 333m to 130m.  [ edit ]
    
 
 

 
  2026.07.24 @ 23.06.37

 

  [ /sean/datasets ] :: (earnings.csv earnings.next.csv update_earnings.py dividends.csv dividends.next.csv update_dividends.py) Earnings.csv and dividends.csv now retains 5y+ past (as well as future projected) dates to act as a historical records to be used in "E" and "D" tagging on historical price charting. Earnings.next.csv and dividend.next.csv will hold ONLY current or latest weekday and the next 20 future trade dates and the tickers having earnings reports or dividend distributions.  [ edit ]
    
 
 

 
  2026.07.23 @ 18.45.35

 

  [ /sean/datasets ] :: (volume.html, ma200.html, yoy.html) Ramping up v.2 of the datasets and dashboards. Check dashboard title to see if you are seeing "v.2" as these are not yet in the main daily pipeline and you may still be seeing v.1 files. V.2 of volume dashboard uses splits.csv and normalizes them automatically.  [ edit ]
    
 
 

 
  2026.07.18 @ 16.46.21

 

  [ /sean/datasets ] :: (volume.html, ma200.html) Second shift-click for multisorting was causing primary sort to be lost. This is now fixed.  [ edit ]
    
 
 

 
  2026.07.15 @ 00.50.24

 

  [ /sean/datasets ] :: (tickers.csv, volume.html, ma200.html) Tickers.csv file now includes a company NAME col (entries dbl-quote wrapped if it contains commas). The company name is now part of the row hover popups. Be aware that some company names use accented characters in their names when parsing this file. Updated MA200 and Volume dashboard tables to display a 'ER' (Earnings Report) col (for sorting purposes) which acts as a countdown to the day.  [ edit ]
    
 
 

 
  2026.07.10 @ 02.51.53

 

  [ /sean/datasets/volume.html ] :: (volumehistory.py, volume.py) Created a new dataset to store trade volumes for the last 365 days in volumehistory_365.txt. This data is used along with pricehistory_365.txt and ticker.csv in compiling my new Volume Spike Dashboard. This page will display tickers along with its last 3 trading day volumes as well as its 20d trade volume average. More useful in spotting tickers that are seeing sudden upwards moves but also down. Will update post pricehistory_365.txt and volumehistory_365.txt update every weekday.  [ edit ]
    
 
 

 
  2026.07.08 @ 17.50.35

 

  [ /sean/code/cats ] :: (cats.php) v4.17-claude. Ran cats.php thru Claude Code and it addressed a number of issues that are outlined in the script itself. New file is posted in here or by clicking on the source icon in the Cats area.  [ edit ]
    
 
 

 
  2026.07.08 @ 13.38.17

 

  [ /sean/datasets ] :: (tickers.py, pricehistory.py, ma200.py, trends.py, YoY_pct.py) Moved weekday run times to start at 1:10 pm PDT (10 minutes after market close) for pricehistory dataset updates followed by a 30 minute window for all cronjobs that require that data.  [ edit ]
    
 
 

 
  2026.07.07 @ 23.15.38

 

  [ /sean/datasets/ma200.html ] :: (ma200.py) Added 200d+ which totals the number of positive return days a ticker has had in the past 200 trade days. Also added icons to the right of each ticker that links out to Yahoo Finance and MarketWatch for the ticker it is next to.  [ edit ]
    
 
 

 
  2026.07.07 @ 17.50.35

 

  [ /sean/code/cats ] :: (cats.php) Multiple search terms were being treated as AND conditions without '+' operator. Non-operator prefaced term searches are now OR based. 'foo bar' (foo OR bar) vs 'foo +bar (foo AND bar)  [ edit ]
    
 
 

 
  2026.07.07 @ 17.02.14

 

  [ /sean/datasets ] :: (tickers.py) Replaced all periods '.' in ticker names to dashes '-' as yFinance does not support periods in tickers. Example: BRK.A -> BRK-A. Beefed up detect_split() to trigger price history refresh if a split is detected mathematically via ratios and corporate announcement via yf.Ticker(ticker).splits. Script will refresh full histories on some tickers with large (+/-33%) 1 day moves. Example: CRNX had a 98% price jump (no split) on July 7, 2026. Script detects and logs it as such:

[SPLIT] Price jump detected for CRNX: 1:2 reverse split (estimated) on 2026-07-07
[SPLIT] CRNX — 1:2 reverse split (estimated) on 2026-07-07
[SPLIT] Refreshing full history for CRNX

In the event of a corporate announcement:

[SPLIT] Corporate action detected for CRWD: 4:1 forward split on 2026-07-02
[SPLIT] CRWD - 4:1 forward split on 2026-07-02
[SPLIT] Refreshing full history for CRWD

I'm using a 7 day window as yFinance doesn't update prices the day of or the day after a split thereby massive moving tickers will age out of the validation window in that timeframe.  [ edit ]

    
 
 

 
  2026.07.01 @ 21.33.41

 

  [ /sean/datasets ] :: (ma200.py, YoY_pct.py) Added a 'sector-> subsector' popup that displays next to the mouse pointer when hovering over a ticker row. Search field now allows for ticker, sector, and subsector searching.  [ edit ]
    
 
 

 
  2026.07.01 @ 20.44.33

 

  [ /sean/datasets ] :: (tickers.py, pricehistory.py, ma200.py, trends.py, YoY_pct.py) Moved update run time to 3 pm PDT for all cron jobs. If I find that yFinance is posting a complete set of price data sooner after market close, I'll move the update time closer to 1 pm PDT.  [ edit ]
    
 
 

 
  2026.07.01 @ 20.41.52

 

  [ /sean/datasets/YoY_pct.html ] :: (YoY_pct.py) Script no longer generates .txt or .csv files natively. I've switched to a html dashboard layout with on-page column sorting, my portfolio filtering, and the ability to export to csv. This page gets updated every weekday at 5pm PDT.  [ edit ]
    
 
 

 
  2026.06.30 @ 23.46.45

 

  [ /sean/datasets/ma200.html ] :: (ma200.py) Script no longer generates .txt or .csv files natively. I've switched to a html dashboard layout with on-page column sorting, my portfolio filtering, and the ability to export to csv. Added a ranking column goes off highest MA200% and a 1w% column that can be sorted to reorder those tickers that are experiencing a growth spurt. This page gets updated every weekday at 5pm PDT.  [ edit ]
    
 
 

 
  2026.06.29 @ 21.53.08

 

  [ /sean/datasets/trends.html ] :: (trends.py) Clicking on sectors and subsectors titles will list all the tickers in that group. Data links are included at the top of the report.  [ edit ]
    
 
 

 
  2026.06.28 @ 23.13.01

 

  [ /sean/code/cats ] :: (update.php, files.php, caption.php) These plugins have been updated. Use the Source link in the navbar to download the new plugins. No site modifications are needed, simply replace your existing plugins with these.  [ edit ]
    
 
 

 
  2026.06.28 @ 21.35.05

 

  [ /sean/code/cats ] :: (cats.php) Rewrite of search_and_sort() function to be more robust and handle multiple fields (primary, secondary, ...) when defining [order].  [ edit ]
    
 
 

 
  2026.06.28 @ 21.31.26

 

  [ /sean/datasets/trends.html ] :: (trends.py) Created a sector and subsector trends dashboard that updates daily at 5pm PDT. Includes top sector and subsector movers for the day, the week, and the month. Subsector tables breakout even more: 1d%, 2d%, 3d%, 4d%, 5d%, 1m%, 2m%, 3m%, 6m%, 200d%. It is generated off 2 files I create and maintain in /sean/datasets:
  • tickers.csv - master ticker,sector,subsector file
  • pricehistory_365.txt - ticker historical prices for the past 365 days

The dashboard data is updated every weekday at 5pm PDT (as I don't have paid access to live data).  [ edit ]

    
 
 

 
  2026.06.28 @ 20.42.26

 

  [ /sean/code/cats/files/plugins ] :: (csv.php) Created a CSV file importer. Plugin can be viewed in the plugins folder link. Here is a raw output sample page pulling in the latest '/sean/datasets/YoY_pct_10y.csv' file (~3000 records). Here is a link to the same file showing only those tickers with a positive gains Streak >=5 years sorted by Streak,AVG% (overall 10y) in desc order (~100 records).  [ edit ]
    
 
 

 
  2026.06.25 @ 23.40.59

 

  [ /sean/datasets ] :: (tickers.csv) Removed CWAN as it went private.  [ edit ]
    
 
 

 
  2026.06.23 @ 18.23.32

 

  [ /sean/code/cats/files/plugins ] :: (update.php) Saw a strange reaction where the first record in the data array was omitting the 'value-added' cols on the first record causing the returned array to be missing its complete header row. This resulted in search-and-replace functions skipping those added values during token replacement. I've modified it so all array rows are built at array construction time versus being appended later. This solved the issue on my end. Simply replace your update.php with the newer file. No other changes are needed.  [ edit ]
    
 
 

 
  2026.06.22 @ 18.17.09

 

  [ /sean/datasets ] :: (pricehistory.py) Script was creating weekday date cols and left price values blank (as yFinance returns none) on market observed holidays. Updated script to purge HOLIDAY cols that return no data due to market observance (such as Juneteenth, June 19, 2026). Pricehistory_*.txt files are updated.  [ edit ]
    
 
 

 
  2026.06.21 @ 16.44.52

 

  [ /sean/datasets ] :: (tickers.csv) I've removed BVC and MGRT tickers from the master list as their market cap no longer meets my threshold ($1B) but more so their reverse splits were reeking havoc in my reports and I'm too lazy to build an exclusions file.  [ edit ]
    
 
 

 
  2026.06.19 @ 19.12.11

 

  [ /sean/datasets ] :: (YoY_pct.py) YoY % analysis; calendar-year end-to-end YoY percent report spanning 10y.

This report analyzes year-over-year (YoY) percentage changes using raw, unadjusted calendar-year price data. For each ticker, the script identifies the earliest valid price within each calendar year and compares it to the most recent price in that same year. The resulting YoY percentage reflects the end-to-end performance for that year, without smoothing, normalization, or averaging. TXT and CSV formats.

The '+Streak' column highlights long-term postive year over year consistency. This provides a quick visual / sorting indicator of sustained multi-year strength, helping highlight companies that have demonstrated durable, repeated positive performance over extended periods.

Word of caution: Beware of stock price consolidation (reverse stock splits) results. I have no way of reliably detecting these. As always, if a value seems suspect, trust your gut and verify it with your own trusted source.  [ edit ]

    
 
 

 
  2026.06.18 @ 18.41.06

 

  [ /sean/datasets ] :: (pricehistory.py) Yfinance has finally updated the price on KLAC post split to reflect the new stock price. Split detection pulled a full history for the updated ticker price as designed.  [ edit ]
    
 
 

 
  2026.06.15 @ 17.26.10

 

  [ /sean/datasets ] :: (pricehistory.py) Revision to stock price storage. Old prices on a ticker that has a stock split needs to be updated otherwise reports using the data will generate incorrect output. Modified script to do split checking when yfinance updates single stock pricing to force a full price history refresh. (KLAC is reporting a MA200 of $1394.39 when the ATH price today was $256.43 post 20-1 split).

What I've found: Yfinance has not yet updated their historical price data and as such the values coming from there are PRE-SPLIT values. This will mess with any reports doing historical price analysis against current market values until things are updated on the yfinance side. Just be aware of this if you start seeing tickers with unexplainable massive % gain or declines as this is the culprit. You've been informed.  [ edit ]

    
 
 

Displaying 45 [  1 - 45  ] of 90 matching entries (out of 90) in descending order

 

1 2 3 4 5 6 7

     Page 1 of 2     

210 315 420 - All

 
# of Columns
PAGINATION NAVIGATION
RECORDS PER PAGE
 
 
top

Page generation time = 0.0169/s
Page size (minus graphic elements) = 191kb

bookmark

feedback print

back

Since 1992 - shrum.net

Copyright 2026 Sean Shrum

 
 
CATS.PHP [C]ontent [A]cquisition and [T]emplating [S]cript v.4.17-claude [ 2026.07.08 ] by Sean Shrum