Skip to content
Back to skills

Stocksight Sentiment

ASecurity

StockSight — open-source stock sentiment analysis using Twitter + news headlines. Elasticsearch storage, Kibana dashboards, NLTK/TextBlob/VADER NLP. Correlates social/news sentiment with price movements. Docker or local install. Asset-agnostic: works

  • 14 stars
  • 0 votes
  • 0 copies
  • 3 views
  • Added June 3, 2026
ai-agentspythongobashdockergitapiperformance

Works with

  • api

Security analysis

A96/100
  • mediumInstalls packages at runtime which could introduce malicious dependencies

Pro shows the line behind each finding and how to fix it

Scanned June 3, 2026

npx -y skills add mahmoud20138/Tradecraft --skill stocksight-sentiment --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Stocksight Sentiment?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Stocksight Sentiment
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/mahmoud20138-stocksight-sentiment/badge)](https://www.skillsdirectory.com/skills/mahmoud20138-stocksight-sentiment)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: stocksight-sentiment
description: StockSight — open-source stock sentiment analysis using Twitter + news headlines. Elasticsearch storage, Kibana dashboards, NLTK/TextBlob/VADER NLP. Correlates social/news sentiment with price movements. Docker or local install. Asset-agnostic: works
kind: reference
category: trading/data
status: active
tags: [data, news, sentiment, stocksight, trading]
related_skills: [economic-calendar, market-data-ingestion, alternative-data-integrator, economic-indicator-tracker, market-intelligence]
---

# stocksight-sentiment

USE FOR:
  - "Twitter sentiment analysis for stocks"
  - "news headline sentiment pipeline"
  - "Elasticsearch + Kibana sentiment dashboard"
  - "VADER / TextBlob sentiment scoring for trading"
  - "social media signal for trading"
  - "correlate sentiment with price"
tags: [sentiment, Twitter, news, NLP, Elasticsearch, Kibana, VADER, TextBlob, NLTK, social-media, stocks]
kind: tool
category: market-intelligence

---

## What Is StockSight?

Open-source sentiment analysis platform correlating Twitter + news sentiment with stock price.
- Repo: https://github.com/shirosaidev/stocksight
- Stack: Python 3 + Elasticsearch 5 + Kibana 5
- NLP: NLTK, TextBlob, VADER
- Asset-agnostic: designed for stocks, works for crypto too

---

## Architecture

```
Twitter API       →  tweepy collector  ─┐
Financial News    →  newspaper3k/BS4  ──┤→ Sentiment Scoring → Elasticsearch → Kibana
Web pages (links) →  optional deep     ─┘   (NLTK/TextBlob/VADER)             Dashboards
                                                   ↕
                                           stockprice.py
                                        (price correlation)
```

---

## Installation

### Docker (Recommended)
```bash
git clone https://github.com/shirosaidev/stocksight
cd stocksight
docker-compose up -d    # Spins up ES + Kibana + stocksight
```

### Local
```bash
pip install tweepy beautifulsoup4 newspaper3k nltk textblob elasticsearch
# Also requires: Elasticsearch 5.x + Kibana 5.x running locally
```

---

## Configuration

```yaml
# config/stocksight.cfg
[twitter]
keywords = TSLA, Tesla, Elon Musk
whitelist = buy, bullish, moon, long
blacklist = spam, follow, RT

[stocks]
symbol = TSLA
```

---

## Usage

```bash
# Collect Twitter sentiment for TSLA
python stocksight.py -s TSLA -t "Tesla, TSLA" -l

# Track a specific Twitter user's feed
python stocksight.py -s TSLA -u elonmusk

# Collect with deep web page analysis
python stocksight.py -s TSLA -t "Tesla" --web

# Add price data
python stockprice.py -s TSLA
```

---

## NLP Sentiment Pipeline

```python
from textblob import TextBlob
from nltk.sentiment.vader import SentimentIntensityAnalyzer

# TextBlob polarity
blob = TextBlob(tweet_text)
polarity = blob.sentiment.polarity  # -1.0 to +1.0

# VADER compound score (better for social media)
vader = SentimentIntensityAnalyzer()
scores = vader.polarity_scores(tweet_text)
compound = scores["compound"]  # -1.0 to +1.0

# Classification
if compound >= 0.05:
    sentiment = "POSITIVE"
elif compound <= -0.05:
    sentiment = "NEGATIVE"
else:
    sentiment = "NEUTRAL"
```

---

## Kibana Dashboard

After data collection, Kibana (localhost:5601) shows:
- Sentiment trend over time (line chart)
- Tweet volume by sentiment class
- Sentiment vs. price overlay
- Top keywords driving positive/negative sentiment
- Hourly/daily sentiment distribution

---

## Extending to Crypto / Other Assets

```python
# Works for any keyword-based asset
python stocksight.py -s BTC -t "Bitcoin, BTC, crypto" -l
python stocksight.py -s ETH -t "Ethereum, ETH, DeFi" -l
```

---

## Sentiment → Trading Signal Pattern

```
Compound Score  │  Signal
────────────────┼──────────────
> +0.3          │  Strong BUY signal
+0.05 to +0.3   │  Weak BUY
-0.05 to +0.05  │  NEUTRAL / hold
-0.05 to -0.3   │  Weak SELL
< -0.3          │  Strong SELL signal

Volume spike + strong sentiment → high-conviction signal
```


---
# ── KNOWLEDGE INJECTION: Stock Prediction (alisonmitchell) ──
# Source: https://github.com/alisonmitchell/Stock-Prediction
# Routed to: trading.md → ml-trading / statistics-timeseries
# Date: 2026-03-17

# ── KNOWLEDGE INJECTION: ML Stock Prediction Reference ──

## ML Model Reference for Stock Price Prediction

Research project on FTSE 100 top-6 stocks combining:
- Time series forecasting
- Deep learning sequence models
- Classical ML classifiers
- NLP sentiment features

### Model Taxonomy

#### Time Series / Statistical
| Model | Use Case | Notes |
|-------|----------|-------|
| ARIMA | Short-horizon price forecast | Needs stationarity (differencing) |
| SARIMA | ARIMA + seasonal component | Good for weekly/monthly patterns |
| Facebook Prophet | Trend + seasonality decomposition | Handles holidays, robust to missing data |
| Moving Averages | Baseline trend | SMA, EMA — simple but interpretable |

#### Deep Learning Sequence Models
| Model | Use Case | Notes |
|-------|----------|-------|
| LSTM | Long-term temporal dependencies | Standard for price sequences |
| GRU | LSTM-lite, faster training | Similar performance, fewer params |
| Simple RNN | Baseline seq model | Vanishing gradient limits depth |

#### Classical ML (Classification / Regression)
| Model | Use Case | Notes |
|-------|----------|-------|
| Gradient Boosting | Direction prediction | XGBoost/LightGBM variants preferred |
| Gaussian Naive Bayes | Fast baseline classifier | Good with sentiment features |

#### NLP Sentiment Tools
| Tool | Approach | Best For |
|------|----------|----------|
| VADER | Rule-based lexicon | Social media, short texts |
| TextBlob | Pattern-based | Quick polarity scoring |
| BERT | Contextual embeddings | Financial news (FinBERT variant) |
| SpaCy | NER + entity linking | Extract company/ticker mentions |
| Gensim | Topic modeling (LDA) | News theme extraction |

### Feature Engineering Reference

```python
import pandas as pd
import talib  # or pandas-ta

# Core price features
df["returns"] = df["Adj Close"].pct_change()
df["log_returns"] = np.log(df["Adj Close"] / df["Adj Close"].shift(1))

# Technical indicators
df["MACD"], df["MACD_signal"], _ = talib.MACD(df["Adj Close"])
df["RSI"] = talib.RSI(df["Adj Close"], timeperiod=14)
df["BB_upper"], df["BB_mid"], df["BB_lower"] = talib.BBANDS(df["Adj Close"])
df["STOCH_k"], df["STOCH_d"] = talib.STOCH(df["High"], df["Low"], df["Close"])
df["MFI"] = talib.MFI(df["High"], df["Low"], df["Close"], df["Volume"])
df["ROC"] = talib.ROC(df["Adj Close"], timeperiod=10)
df["OBV"] = talib.OBV(df["Close"], df["Volume"])
```

### Critical ML Anti-Pattern: Data Leakage

```python
# WRONG — random split causes look-ahead bias
from sklearn.model_selection import train_test_split
X_train, X_test = train_test_split(X, test_size=0.2, random_state=42)  # ❌

# CORRECT — time-based split
from sklearn.model_selection import TimeSeriesSplit
tscv = TimeSeriesSplit(n_splits=5)
for train_idx, test_idx in tscv.split(X):
    X_train, X_test = X[train_idx], X[test_idx]  # ✓

# BEST — walk-forward validation
# Each fold: train on past, predict next N days, advance window
```

### Framing: Regression vs Classification

```python
# Regression: predict price or return magnitude
y = df["Adj Close"].shift(-1)               # Next day price
y = df["returns"].shift(-1)                  # Next day return

# Classification: predict direction
y = (df["returns"].shift(-1) > 0).astype(int)  # 1=up, 0=down
# or 3-class: 1=up, 0=flat, -1=down
y = np.where(df["returns"].shift(-1) > threshold, 1,
    np.where(df["returns"].shift(-1) < -threshold, -1, 0))
```


---

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.