Skip to content

Technical Indicators

FinanceLib provides 11 technical analysis indicators, all implemented as pure functions operating on pandas Series.

Trend Indicators

Simple Moving Average (SMA)

from financelib.trading.algo_trade import sma
result = sma(close_prices, period=20)

Exponential Moving Average (EMA)

from financelib.trading.algo_trade import ema
result = ema(close_prices, period=20)

MACD

from financelib.trading.algo_trade import macd
macd_line, signal_line = macd(close_prices, fast_period=12, slow_period=26, signal_period=9)
histogram = macd_line - signal_line

Average Directional Index (ADX)

from financelib.trading.algo_trade import adx
result = adx(high, low, close, period=14)
# Values > 25 indicate strong trend

Aroon

from financelib.trading.algo_trade import aroon
aroon_up, aroon_down = aroon(high, low, period=25)

Momentum Indicators

Relative Strength Index (RSI)

from financelib.trading.algo_trade import rsi
result = rsi(close_prices, period=14)
# > 70: overbought, < 30: oversold

Stochastic Oscillator

from financelib.trading.algo_trade import stochastic
k_line, d_line = stochastic(high, low, close, k_period=14, d_period=3)

Williams %R

from financelib.trading.algo_trade import williams_r
result = williams_r(high, low, close, period=14)
# Above -20: overbought, Below -80: oversold

Commodity Channel Index (CCI)

from financelib.trading.algo_trade import cci
result = cci(high, low, close, period=20)

Volatility Indicators

Bollinger Bands

from financelib.trading.algo_trade import bollinger_bands
upper, middle, lower = bollinger_bands(close_prices, period=20, std_dev=2)

Average True Range (ATR)

from financelib.trading.algo_trade import atr
result = atr(high, low, close, period=14)

Full Example

from financelib import Stock
from financelib.trading.algo_trade import rsi, macd, bollinger_bands, sma

stock = Stock("THYAO.IS")
df = stock.get_historical_data(period="6mo")

close = df["Close"]
high = df["High"]
low = df["Low"]

# Calculate multiple indicators
rsi_val = rsi(close).iloc[-1]
macd_line, signal = macd(close)
upper, middle, lower = bollinger_bands(close)
ma50 = sma(close, period=50)

print(f"RSI: {rsi_val:.1f}")
print(f"MACD: {macd_line.iloc[-1]:.4f}")
print(f"Price vs BB: {close.iloc[-1]:.2f} (Upper: {upper.iloc[-1]:.2f}, Lower: {lower.iloc[-1]:.2f})")
print(f"SMA50: {ma50.iloc[-1]:.2f}")