shashankvemuri/Finance

Python toolkit for quantitative finance: stock analysis, technical indicators, strategy backtesting, portfolio optimization, and financial modeling.

Python

4,318

1,279 commits

updated Sep 12, 2026

See the code

README

Finance

Finance is a Python toolkit for market data, technical indicators, financial analysis, stock screening, strategy research, backtesting, portfolios and statistical models. Calculations use explicit inputs, a small dependency set and tested execution conventions. Models and trading rules are research tools; runnable examples are the starting point.

Install

Python 3.12 or newer:

git clone https://github.com/shashankvemuri/Finance.git
cd Finance
python -m venv .venv
source .venv/bin/activate  # Windows: .venv\Scripts\activate
python -m pip install -e .

Core dependencies are NumPy and pandas. Add only the features you need:

python -m pip install -e '.[data]'             # Public data, Finviz and financial statements
python -m pip install -e '.[portfolio,models]' # Optimization and statistical/ML experiments
python -m pip install -e '.[plot,sentiment]'   # Charts and VADER text scoring
python -m pip install -e '.[apps,reports]'     # Interactive app and Excel exports

Use

Download normalized, consistently adjusted OHLCV with the data extra:

from finance.data import YahooFinance

prices = YahooFinance().history('AAPL', '2023-01-01', '2025-01-01')

Calculate indicators without any network access:

from finance.indicators import bollinger_bands, rsi

strength = rsi(prices['close'], window=14)
bands = bollinger_bands(prices['close'], window=20)

Generate close-time signals and execute them at the next open:

from finance.backtesting import backtest
from finance.strategies import moving_average

targets = moving_average(prices['close'], fast=20, slow=50)
result = backtest(prices['open'], prices['close'], targets, commission=0.001)
print(result.metrics)

Returns and rates are fractions; RSI is 0–100. Warm-up values remain missing. The modest backtester tracks cash, fractional shares, long/short fills, commission, slippage and borrow costs. Read the calculation and execution conventions before interpreting results.

Explore

AreaCapabilities
dataOHLCV/intraday, Finviz discovery, statements, calendars, analysts, news, transcripts, insiders and universes
indicatorsMoving averages, momentum, volatility/channels, volume, rolling statistics, pivots and breadth
analyticsReturns, CAPM/OLS, risk, statement ratios, company/index valuation, seasonal studies and sentiment
screeningRelative strength, Minervini, Green Line, RSI/trend, growth/ownership and dividend screens
strategiesCrossovers, MACD, Keltner, Ichimoku, oscillator reversion, pairs and chronological strategy selection
backtestingNext-open execution, long/short protective orders, FIFO trade reports, cash accounting and benchmarks
portfolioAllocation, constrained optimization/frontier, correlated simulation and lump sum versus DCA
modelsForecasts/baselines, ARIMA diagnostics, PCA/factors, regimes, clustering, networks and optional neural/Prophet experiments
reportsCandlesticks, heatmaps, equity charts, CSV/Excel, HTML reports and graph exports
integrationsExplicit notification transports, order previews and an optional Alpaca client

Examples use synthetic inputs by default. Add --live for public data; download_market_data.py always uses the network.

python examples/calculate_indicators.py
python examples/backtest_moving_average.py --live
python examples/optimize_portfolio.py
python examples/research_watchlist.py --live
python examples/research_models.py
streamlit run apps/research.py

Current constituents and fundamentals are snapshots, not historical point-in-time inputs. Public providers can throttle or change schemas; see provider contracts. Forecast experiments report held-out errors against simple baselines and make no claim of predictive advantage. Heavy models and apps are optional; brokerage and delivery require separate credentials. See research workflows for full examples, optional installs and provider limitations.

Contributing

Created by Shashank Vemuri. MIT License. Technical-indicator references include Stock_Analysis_For_Quant by LastAncientOne.

Disclaimer

The material in this repository is for educational purposes only and should not be considered professional investment advice.

algorithmic-trading
data-science
finance
machine-learning
pandas
python
quantitative-finance
stock
stock-market
stocks
technical-indicators
trading-strategies

shashankvemuri/Finance

Python toolkit for quantitative finance: stock analysis, technical indicators, strategy backtesting, portfolio optimization, and financial modeling.

Python

4,318

1,279 commits

updated Sep 12, 2026

See the code

README

Finance

Finance is a Python toolkit for market data, technical indicators, financial analysis, stock screening, strategy research, backtesting, portfolios and statistical models. Calculations use explicit inputs, a small dependency set and tested execution conventions. Models and trading rules are research tools; runnable examples are the starting point.

Install

Python 3.12 or newer:

git clone https://github.com/shashankvemuri/Finance.git
cd Finance
python -m venv .venv
source .venv/bin/activate  # Windows: .venv\Scripts\activate
python -m pip install -e .

Core dependencies are NumPy and pandas. Add only the features you need:

python -m pip install -e '.[data]'             # Public data, Finviz and financial statements
python -m pip install -e '.[portfolio,models]' # Optimization and statistical/ML experiments
python -m pip install -e '.[plot,sentiment]'   # Charts and VADER text scoring
python -m pip install -e '.[apps,reports]'     # Interactive app and Excel exports

Use

Download normalized, consistently adjusted OHLCV with the data extra:

from finance.data import YahooFinance

prices = YahooFinance().history('AAPL', '2023-01-01', '2025-01-01')

Calculate indicators without any network access:

from finance.indicators import bollinger_bands, rsi

strength = rsi(prices['close'], window=14)
bands = bollinger_bands(prices['close'], window=20)

Generate close-time signals and execute them at the next open:

from finance.backtesting import backtest
from finance.strategies import moving_average

targets = moving_average(prices['close'], fast=20, slow=50)
result = backtest(prices['open'], prices['close'], targets, commission=0.001)
print(result.metrics)

Returns and rates are fractions; RSI is 0–100. Warm-up values remain missing. The modest backtester tracks cash, fractional shares, long/short fills, commission, slippage and borrow costs. Read the calculation and execution conventions before interpreting results.

Explore

AreaCapabilities
dataOHLCV/intraday, Finviz discovery, statements, calendars, analysts, news, transcripts, insiders and universes
indicatorsMoving averages, momentum, volatility/channels, volume, rolling statistics, pivots and breadth
analyticsReturns, CAPM/OLS, risk, statement ratios, company/index valuation, seasonal studies and sentiment
screeningRelative strength, Minervini, Green Line, RSI/trend, growth/ownership and dividend screens
strategiesCrossovers, MACD, Keltner, Ichimoku, oscillator reversion, pairs and chronological strategy selection
backtestingNext-open execution, long/short protective orders, FIFO trade reports, cash accounting and benchmarks
portfolioAllocation, constrained optimization/frontier, correlated simulation and lump sum versus DCA
modelsForecasts/baselines, ARIMA diagnostics, PCA/factors, regimes, clustering, networks and optional neural/Prophet experiments
reportsCandlesticks, heatmaps, equity charts, CSV/Excel, HTML reports and graph exports
integrationsExplicit notification transports, order previews and an optional Alpaca client

Examples use synthetic inputs by default. Add --live for public data; download_market_data.py always uses the network.

python examples/calculate_indicators.py
python examples/backtest_moving_average.py --live
python examples/optimize_portfolio.py
python examples/research_watchlist.py --live
python examples/research_models.py
streamlit run apps/research.py

Current constituents and fundamentals are snapshots, not historical point-in-time inputs. Public providers can throttle or change schemas; see provider contracts. Forecast experiments report held-out errors against simple baselines and make no claim of predictive advantage. Heavy models and apps are optional; brokerage and delivery require separate credentials. See research workflows for full examples, optional installs and provider limitations.

Contributing

Created by Shashank Vemuri. MIT License. Technical-indicator references include Stock_Analysis_For_Quant by LastAncientOne.

Disclaimer

The material in this repository is for educational purposes only and should not be considered professional investment advice.

algorithmic-trading
data-science
finance
machine-learning
pandas
python
quantitative-finance
stock
stock-market
stocks
technical-indicators
trading-strategies

Significant stargazers

Rokas Kupstys

371 followers · starred Nov 2023

Senthil Kumaran

316 followers · starred Jan 2025

Atakan Tekparmak

58 followers · starred Aug 2020

Erick Guan

119 followers · starred Oct 2025