Score market news with a plain finance word list and see whether the news agrees with what your stock screens picked.
Open-source tools · How-to · News sentiment
How to use the news tracker: score headlines and check them against stock picks
Revised
· v1.0.0 · what changed
Code: github.com/herrrickshaw/global-market-data
Watch the walkthrough
Watch on YouTube: youtu.be/_WvtZtpm1zw
What it is for
There is no single repo called 'global news tracker'. The demo treats it as a set of files: pipeline_news.py in global-market-data (live news sentiment), news_sentiment.py in global-market-scanners (a finance word-list scorer), and several news_*.py scripts in the market-pipeline code.
The problem it addresses: general news feeds only match a ticker by name, so a quiet stock gets zero articles, and having no coverage looks the same as neutral sentiment. The tracker scores headlines and article bodies, then labels each screen pick as CONVERGENT (news agrees), DIVERGENT, NEUTRAL or NO_NEWS.
The pipeline has four stages: market mood, per-ticker scoring, a forward log of sentiment over time, and a join to realised price moves. Free sources are RSS feeds from Moneycontrol, Economic Times, BusinessLine and LiveMint.
Who it is for
- People who want a transparent, keyless sentiment score to sit next to a stock screen
- Engineers building a news-versus-price dataset over time
- Researchers who want to see how coverage differs across screening strategies
- Predicting prices. The demo measures news attention, not returns
- Anyone expecting a polished single product: this is a set of scripts across repos
- Investment decisions. Not investment advice
What you need
| Requirement | Why | How to get it |
|---|---|---|
| Python 3 and pip | runs the scorer and tests | python.org (the demo used Python 3.14.7 with pytest 9.1.1) |
| Packages from requirements.txt | pandas, numpy, yfinance, requests and others in each repo | pip install -r requirements.txt in each repo |
| Network access | live RSS feeds and yfinance headlines. The saved reports and tests work offline | none needed for the tests |
| News API keys (optional) | Marketaux, Alpha Vantage, Finnhub and NewsData.io add more sources | set the keys as environment variables. The free RSS sources need no key |
| Not needed | no GPU, no database, no language model | the scorer is a word list, not an LLM |
Get the code and an AI assistant
You do not have to be a programmer. Get the repository, give it to an AI assistant, and ask in plain language. Any of these routes works:
| Tool | What you need | Best for |
|---|---|---|
| GitHub | Free account to fork or star; git to clone, or the green Code button, then Download ZIP, or open in Codespaces | Getting the code and keeping up with updates |
| Claude Code | Claude subscription or API key; run claude inside the cloned folder | Letting the AI read and run the whole repo |
| Gemini CLI | Google account; run gemini inside the cloned folder | The same hands-on workflow with Gemini |
| Claude.ai, Gemini or ChatGPT in the browser | A chat account; upload README.md and the files you care about (or paste the output of git ls-files) | Understanding the project and asking questions without installing anything |
| Other tools (Copilot Chat, Cursor, Codex CLI) | Open the cloned folder in the tool and point it at README.md first | Editing and extending the code |
git clone https://github.com/herrrickshaw/global-market-data.git
cd global-market-data
claude # or: gemini
Install
- Clone the scanners repo, which holds the scorer and its test
git clone https://github.com/herrrickshaw/global-market-scanners.git cd global-market-scanners - Create a virtual environment and install requirements
python3 -m venv .venv && source .venv/bin/activate pip install -r requirements.txt pip install pytest - Optional: clone the repo with the live pipeline
git clone https://github.com/herrrickshaw/global-market-data.git
Quick start: commands and what you should see
Run the news scorer's unit test
pytest tests/test_core.py -k news -v
1 selected, 118 deselected, test_news_sentiment_lexicon_scoring PASSED in 1.92 seconds.
Look at the saved crawler sample, and the other saved reports in the market-pipeline reports folder
head news_crawl_sample.csv
10 saved rows: 7 scored from headlines and 3 from article bodies, for example RELIANCE and INFY, with scores between about -0.10 and +0.30. The same folder holds news_convergence.csv: of 30 filter passes, 7 CONVERGENT (for example ADANIPORTS, ADANIGREEN), 3 NEUTRAL, 20 NO_NEWS, no DIVERGENT. In strategy_news_validation_history.csv for India on 17 October 2026, Darvas picks were covered 7.7% of the time (26 of 339, lift 1.90) and Piotroski 1.2% (4 of 334, lift 0.30).
Ways to use it
| Method | How it works |
|---|---|
| Command line | news_sentiment.py (--tickers, --market, --top) and pipeline_news.py (--mood, --tickers, --monitor, --join, --watchlist) take these flags per their file headers. These live commands were not run in the demo. |
| Library import | news_sentiment.py exposes score_text and score_headlines, which are pure functions covered by a unit test. |
| Saved reports | Read the CSV outputs (convergence, strategy validation history, crawl sample) in any spreadsheet. |
| Via an AI assistant | Ask the assistant to read the news_*.py files and explain or run them for your tickers. |
Sample prompts for your AI assistant
Copy, paste and edit the parts in [brackets].
- Read news_sentiment.py and explain how the finance word list turns a headline into a score between -1 and +1.
- Run the news unit test in tests/test_core.py and tell me what it checks.
- Read pipeline_news.py and explain the four stages. Which ones need a network and which need API keys?
- Score these headlines with news_sentiment.py: [paste headlines]. Show the positive and negative hits for each.
- In the convergence report, why would 20 of 30 picks have no news, and why is that not a good sign?
- List the weak points in how tickers are matched to headlines. Two different tickers got the same Arvind Fashions headline.
Limits and honest caveats
- The identification of 'global news tracker' with these files was an assumption. No repo has that name.
- The news_pipeline_results folder was empty, so live runs were not performed in the demo. It used saved reports and offline tests.
- In the convergence file, 20 of 30 picks had no news. Absence of coverage is not good news.
- Some matches look loose: ARVINDFASN and AARNAV both received an Arvind Fashions headline.
- The word list is compact and gives 0 to any headline without finance words.
- Attention is not returns. The strategy validation report does not show whether any strategy is profitable.
- News sentiment is noisy and may lead or lag price. Not investment advice.
Sources: pipeline_news.py header in github.com/herrrickshaw/global-market-data; news_sentiment.py and tests in github.com/herrrickshaw/global-market-scanners; saved reports from the market-pipeline code; demo run on 18 October 2026.
- v1.0.0 — 18 October 2026 — first published.
About this article: Researched, written and edited by Umashankar Triplicane Dwarakanathan, with AI research assistance; every figure is meant to trace to the primary source cited. See the Editorial Policy for how sourcing, AI use and corrections work.