/$$$$$$ /$$ /$$
/$$__ $$|__/ | $$
| $$ \__/ /$$ /$$$$$$$ /$$$$$$ /$$$$$$ /$$$$$$ /$$$$$$/$$$$
| $$$$ | $$| $$__ $$|_ $$_/ /$$__ $$ /$$__ $$| $$_ $$_ $$
| $$_/ | $$| $$ \ $$ | $$ | $$$$$$$$| $$ \__/| $$ \ $$ \ $$
| $$ | $$| $$ | $$ | $$ /$$| $$_____/| $$ | $$ | $$ | $$
| $$ | $$| $$ | $$ | $$$$/| $$$$$$$| $$ | $$ | $$ | $$
|__/ |__/|__/ |__/ \___/ \_______/|__/ |__/ |__/ |__/
A modern, Professional TUI (Terminal User Interface) for financial market analysis. Built with Python and Textual, FinTerm provides real-time market data, charts, news, and sentiment analysis right in your terminal.
- π Interactive Charts: Candlestick and line charts with multiple timeframes (1d, 5d, 1mo, 3mo, 6mo, 1y)
- π Market Movers: Real-time top gainers and losers from your watchlist
- π° Financial News: Latest market news and ticker-specific headlines
- π― Market Sentiment: AI-powered sentiment analysis based on price action
- πΌ Ticker Details: Comprehensive company information, financials, and key metrics
- β‘ Keyboard Shortcuts: Lightning-fast navigation with intuitive hotkeys
- π¨ Modern UI: Clean, professional interface inspired by Bloomberg Terminal
- π§ Modular Architecture: Extensible widget system for custom dashboards
- π± Responsive: Adapts to terminal window size automatically
-
Clone the repository:
git clone https://github.com/sahmadzai/finterm.git cd finterm -
Install dependencies:
pip install -r requirements.txt
-
Optional - Set up News API (for real news):
# Get a free API key from https://newsapi.org export NEWS_API_KEY="your_api_key_here"
-
Run FinTerm:
python -m src.app
pip install finterm
finterm| Key | Action |
|---|---|
q |
Quit application |
r |
Refresh all widgets |
h |
Toggle help screen |
1 |
Show SPY ticker |
2 |
Show QQQ ticker |
3 |
Show AAPL ticker |
4 |
Show TSLA ticker |
ESC |
Close help/dialog |
Create a .env file in the project root:
# News API Key (get from https://newsapi.org)
NEWS_API_KEY=your_api_key_here
# Default tickers to track (comma-separated)
DEFAULT_TICKERS=SPY,QQQ,AAPL,MSFT,GOOGL,TSLA,NVDA,AMD
# Refresh interval in seconds
REFRESH_INTERVAL=60FinTerm will support custom dashboard configurations via JSON files:
{
"name": "My Custom Dashboard",
"widgets": [
{
"widget_type": "chart",
"ticker": "AAPL",
"period": "1mo",
"interval": "1d"
},
{
"widget_type": "news",
"limit": 5
}
]
}finterm/
βββ src/
β βββ app.py # Main application and screens
β βββ widgets/ # Modular widget components
β β βββ base.py # Base widget class
β β βββ chart.py # Chart widget
β β βββ news.py # News widget
β β βββ market_movers.py
β β βββ ticker_info.py
β β βββ sentiment.py
β βββ data/ # Data fetching modules
β β βββ stocks.py # Stock data via yfinance
β β βββ news.py # News via NewsAPI
β β βββ sentiment.py # Sentiment analysis
β βββ utils/ # Utilities
β βββ config.py # Configuration management
βββ requirements.txt
βββ setup.py
βββ README.md
- Textual: Modern TUI framework
- Rich: Beautiful terminal formatting
- yfinance: Yahoo Finance data
- plotext: Terminal plotting
- NewsAPI: Financial news aggregation
- Pydantic: Data validation
- Stock Data: Yahoo Finance (via yfinance) - Free, no API key required
- News: NewsAPI - Free tier available (100 requests/day)
- Sentiment: Proprietary algorithm based on price action and volume
# Clone the repository
git clone https://github.com/sahmadzai/finterm.git
cd finterm
# Install development dependencies
pip install -r requirements.txt
pip install -e ".[dev]"
# Run tests (coming soon)
pytest
# Format code
black src/
# Lint code
flake8 src/Extend the BaseWidget class to create your own widgets:
from src.widgets.base import BaseWidget
from rich.text import Text
class MyCustomWidget(BaseWidget):
async def fetch_data(self):
# Fetch your data here
self.my_data = await get_data()
def render_content(self):
# Render your widget
return Text("My custom content")- Custom dashboard layouts via JSON config
- More chart types (volume, indicators)
- Technical indicators (RSI, MACD, Moving Averages)
- Watchlist management
- Options chain viewer
- Crypto support
- Economic calendar
- Earnings calendar
- Alert system
- Multi-page dashboards
- Plugin system for custom widgets
- Historical data export
- Backtesting framework
- Real-time WebSocket feeds
Contributions are welcome! Please feel free to submit a Pull Request. For major changes, please open an issue first to discuss what you would like to change.
- Fork the repository
- Create your feature branch (
git checkout -b feature/AmazingFeature) - Commit your changes (
git commit -m 'Add some AmazingFeature') - Push to the branch (
git push origin feature/AmazingFeature) - Open a Pull Request
- Follow PEP 8 style guidelines
- Add docstrings to all functions and classes
- Write unit tests for new features
- Update README for significant changes
This project is licensed under the MIT License - see the LICENSE file for details.
- Built for professional traders and investors
- Built with Textual by Will McGugan
- Financial data provided by Yahoo Finance
- News data from NewsAPI
This software is for informational purposes only. It is not financial advice and should not be used as the sole basis for investment decisions. Always do your own research and consult with a qualified financial advisor.
- Issues: GitHub Issues
- Discussions: GitHub Discussions
If you find FinTerm useful, please consider giving it a star on GitHub!

