Technical Indicators

Although you can import technical indicator libraries and use them in your strategies, QTPyLib does comes bundled with some common indicators that work as Pandas Objects.

Built-In Indicators

ATR

bars['atr'] = bars.atr(window=14 [, exp=False])
...

Awesome Oscillator

bars['ao'] = bars.awesome_oscillator(weighted=False, fast=5, slow=34])
...

Bollinger Bands

bb = bars.bollinger_bands(window=20, stds=2)

bars['bb_upper'] = bb['upper']
bars['bb_lower'] = bb['lower']
bars['bb_mid']   = bb['mid']
...

Weighted Bollinger Bands

wbb = bars.weighted_bollinger_bands(window=20, stds=2)

bars['wbb_upper'] = wbb['upper']
bars['wbb_lower'] = wbb['lower']
bars['wbb_mid']   = wbb['mid']
...

CCI

bars['cci'] = bars.cci(window=14)
...

Crossed Above/Below

bars['sma'] = bars['close'].rolling_mean(10)

if bars['close'].crossed_above(bars['sma']):
    # crossed above
    ...

if bars['rsi'].crossed_below(10):
    # crossed below
    ...

if bars['close'].crossed(bars['open']):
    # crossed either above or below
    ...

Heikin Ashi

# return heiken ashi ohlc based on bar's ohlc
heikinashi = bars.heikinashi()
heikinashi[['open', 'high', 'low', 'close']]
...

Hull Moving Average

bars['hma'] = bars.hull_moving_average(window=200 [, min_periods=None])

# also available via shorthand
# bars['hma'] = bars.hma(...)
...

IBS

bars['ibs'] = bars.ibs()
...

Implied Volatility

bars['iv'] = bars.implied_volatility(window=252)
...

Keltner Channel

kc = bars.keltner_channel(window=14, atrs=2)

bars['kc_upper'] = kc['upper']
bars['kc_lower'] = kc['lower']
bars['kc_mid']   = kc['mid']
...

MACD

macd = bars.macd(fast=3, slow=10, smooth=16)

bars['macd']        = macd['macd']
bars['macd_signal'] = macd['signal']
bars['macd_hist']   = macd['histogram']
...

Moving Average: Simple

Shorthand for bars.rolling_mean(...)

bars['sma'] = bars.sma(window=200 [, min_periods=None])
...

Moving Average: Weighted

Shorthand for bars.rolling_weighted_mean(...)

bars['wma'] = bars.wma(window=200 [, min_periods=None])
...

Moving Average: Hull

Shorthand for bars.hull_moving_average(...)

bars['hma'] = bars.hma(window=200 [, min_periods=None])
...

Median Price

# (High + Low) / 2
bars['mid'] = bars.mid_price()
...

Typical Price

# (High + Low + Close) / 3
bars['typical'] = bars.typical_price()
...

Traders Dynamic Index (TDI)

bars['typical'] = bars['close'].tdi([rsi_len=13, bollinger_len=34,
        rsi_smoothing=2, rsi_signal_len=7, bollinger_std=1.6185])
...

Price Volume Trend

bars['pvt'] = bars.pvt()
...

Rolling Minimum

bars['min'] = bars.rolling_min(window=14 [, min_periods=None])
...

Rolling Maximum

bars['max'] = bars.rolling_max(window=14 [, min_periods=None])
...

Rolling Mean

bars['sma'] = bars.rolling_mean(window=200 [, min_periods=None])

# also available via shorthand
# bars['sma'] = bars.sma(...)
...

Rolling Standard Deviation

bars['std'] = bars.rolling_std(window=200 [, min_periods=None])
...

Rolling VWAP

bars['rvwap'] = bars.rolling_vwap(window=200 [, min_periods=None])
...

Rolling Weighted Mean

bars['wma'] = bars.rolling_weighted_mean(window=200 [, min_periods=None])

# also available via shorthand
# bars['wma'] = bars.wma(...)
...

Rolling Returns

bars['returns'] = bars.returns()
...

Rolling Log Returns

bars['log_returns'] = bars.log_returns()
...

ROC

bars['roc'] = bars.roc(window=14)
...

RSI

bars['rsi'] = bars.rsi(window=14)
...

Session

This isn’t an indicator, but rather a utility that trims the bars to a specified “Session” (useful when wanting to work, for example, with the most recent PIT or GLOBEX session to calculate VWAP, etc.).

# make sure to specity timezone="US/Central" for your algo
# otherwise, the default timezone is UTC

# pit session
bars = bars.session(start='08:30', end='15:15')

# globex session
bars = bars.session(start='17:00', end='16:00')
...

Stochastics

bars['stoch'] = bars.stoch([window=14, d=3, k=3, fast=True])
...

True Range

bars['tr'] = bars.true_range()
...

VWAP

bars['vwap'] = bars.vwap(bars)
...

Z-Score

bars['zscore'] = bars.zscore(window=20, stds=1, col='close')
...

TA-Lib Integration

Starting with 1.3.91a, QTPyLib offers full integration with TA-Lib.

All the TA-Lib methods are available via the talib_indicators modules and automatically extracts and prepares the relevant data your strategy’s bars or ticks.

To use the TA-Lib integtation, you’ll need to have TA-Lib installed on your system, and import the talib_indicators module into your strategies:

# strategy.py

from qtpylib import talib_indicators as ta

...

def on_bar(self, instrument):
    # get OHLCV bars
    bars = instrument.get_bars()

    # add 14-period ATR column
    bars['atr'] = ta.ATR(bars, timeperiod=14)

    # same result using Vanilla TA-Lib:
    # bars['atr'] = talib.ATR(bars['high'].values, bars['low'].values, bars['close'].values, timeperiod=14)

...

For more information on all available TA-Lib methods/indicators, please visit TA-Lib’s website.