A deep learning model that predicts meme stock surges (≥2% price increase within 5 sessions) using social signals from Stocktwits. The model uses LSTM/Transformer encoders with attention mechanisms to learn patterns from social volume, sentiment, and velocity. Read Dual-Stream_Social-Market_Attention_Networks.pdf for a formal write-up of results.
# Clone the repository
git clone <repository-url>
cd meme-stock-DL
# Install dependencies
pip install -r requirements.txt# Run complete pipeline (data collection, training, backtesting)
python main.py --mode full
# Or run individual steps
python main.py --mode collect # Collect Stocktwits data
python main.py --mode train # Train model
python main.py --mode backtest # Run backtestingmeme-stock-DL/
├── main.py # Main entry point (redirects to src.main)
├── requirements.txt # Python dependencies
├── README.md # This file
│
├── src/ # Source code
│ ├── __init__.py
│ ├── main.py # Main CLI entry point
│ ├── config.py # Configuration parameters
│ │
│ ├── models/ # Model architecture
│ │ ├── __init__.py
│ │ └── stream_b.py # Stream B model
│ │
│ ├── data/ # Data collection & processing
│ │ ├── __init__.py
│ │ ├── data_collector.py
│ │ ├── data_collector_enhanced.py
│ │ ├── data_processor.py
│ │ ├── historical_data_loader.py
│ │ └── scrapers/
│ │ ├── selenium_scraper.py
│ │ └── stocktwits_scraper.py
│ │
│ ├── training/ # Training modules
│ │ ├── __init__.py
│ │ ├── prepare_and_train.py
│ │ ├── train_stream_b.py
│ │ └── losses.py
│ │
│ ├── backtest/ # Backtesting
│ │ ├── __init__.py
│ │ └── backtest.py
│ │
│ └── utils/ # Utilities
│ ├── __init__.py
│ └── sentiment_analyzer.py
│
├── scripts/ # Utility scripts
│ ├── collect_real_data.py
│ ├── quick_setup.py
│ └── verify_format.py
│
├── tests/ # Test files
│ └── test_backtest.py
│
├── docs/ # Documentation
│ ├── DEPLOYMENT.md
│ ├── QUICKSTART.md
│ └── SYSTEM_CONTEXT.md
│
├── data/ # Data files
│ ├── raw/ # Raw CSV files
│ └── samples/ # Sample data
│
└── examples/ # Example code
├── model.py
└── stock_data_scraper.py
- Social Encoder: LSTM/GRU/Transformer encoder for Stocktwits signals
- Multi-source Data Collection: API, web scraping, and historical data support
- NLP Sentiment Analysis: VADER and FinBERT integration
- Weight Optimization: Automated hyperparameter tuning for class imbalance
- Backtesting: Full trading simulation with transaction costs
- Comprehensive Metrics: PR-AUC, Precision@K, CAGR, Sharpe Ratio, Max Drawdown
Stream B consists of:
- Social Encoder: Processes sequences of [volume, sentiment, velocity] with shape [N, 60, 3]
- Attention Pooling: Self-attention mechanism for sequence aggregation
- Classifier: Multi-layer MLP for binary surge prediction
Input: S_t ∈ R^(60 x 3) = [volume, sentiment, velocity]
↓
LSTM Encoder → [B, 60, H]
↓
Attention Pooling → [B, H]
↓
MLP Classifier → [B] logits
Edit config.py to adjust:
SEQUENCE_LENGTH: Time window size (default: 60)HIDDEN_DIM: Model hidden dimension (default: 64)SURGE_THRESHOLD_PCT: Price increase threshold (default: 2%)SURGE_FORWARD_WINDOW: Prediction horizon (default: 5 sessions)TOP_K_PREDICTIONS: Number of stocks to trade (default: 10)
The system supports multiple data collection methods:
- Stocktwits API (requires authentication)
- Web Scraping (Selenium-based)
- Historical Data (CSV files)
Data is automatically aggregated into daily features:
- Volume: Message count per day
- Sentiment: Average sentiment score (-1 to 1)
- Velocity: Rate of change in message volume
The training pipeline includes:
- Class Imbalance Handling: Weighted BCE loss with optimized weights
- Early Stopping: Prevents overfitting
- Gradient Clipping: Stabilizes training
- Metrics: PR-AUC (primary), Precision@K
python prepare_and_train.pyThis will:
- Collect/load Stocktwits data
- Process and align with market data
- Optimize class weights via grid search
- Train the final model with optimal weights
- Run backtesting
The backtesting framework simulates trading:
- Strategy: Top-K stocks by prediction probability
- Position Management: Equal-weighted, hold for forward_window days
- Transaction Costs: 0.1% per trade
- Metrics: CAGR, Sharpe Ratio, Max Drawdown, Win Rate
python main.py --mode backtestResults are saved to results/:
backtest_results.json: Performance metricsbacktest_trades.csv: Individual trade logbacktest_plots.png: Visualization
python main.py --mode collect --symbols GME TSLA AMCimport torch
from models.stream_b import StreamBClassifier
from config import Config
checkpoint = torch.load('models/stream_b_best.pth')
model = StreamBClassifier(
input_dim=Config.SOCIAL_FEATURE_DIM,
hidden_dim=checkpoint['config']['hidden_dim'],
num_layers=checkpoint['config']['num_layers'],
dropout=checkpoint['config']['dropout']
)
model.load_state_dict(checkpoint['model_state_dict'])
model.eval()The enhanced collector tries multiple methods in order:
- Stocktwits API (if authenticated)
- Selenium scraper
- Historical data loader
- Raises error (synthetic data disabled)
- Academic Use Only: This is for research/backtesting purposes
- API Limitations: Stocktwits API has rate limits and may require authentication
- Data Quality: Ensure sufficient data points per ticker (min: 30 days)
- Stocktwits Blocking: Stocktwits actively blocks automated access; use historical data or manual collection
If you encounter 403 errors:
- Stocktwits has paused new API registrations
- Use historical data files in
data/historical/ - Try Selenium scraper (may be blocked)
- Consider alternative data sources (Reddit, Twitter)
If Selenium fails:
- Ensure Chrome browser is installed
- Install:
pip install selenium webdriver-manager - Try non-headless mode: Set
headless=Falseinselenium_scraper.py
If no data is found:
- Check
data/raw/directory for CSV files - Ensure CSV format:
date,volume,sentiment,velocity - Use
collect_real_data.pyto test data collection
See requirements.txt for full list. Key dependencies:
torch>=2.0.0: Deep learning frameworkpandas>=2.0.0: Data manipulationyfinance>=0.2.28: Market dataselenium>=4.15.0: Web scrapingvaderSentiment>=3.3.2: Sentiment analysis
Contributions welcome! Please ensure:
- Code follows PEP 8 style guide
- Add tests for new features
- Update documentation
This project is for educational/research purposes only.
- Stocktwits for social data
- Yahoo Finance for market data
- VADER Sentiment for NLP analysis