Technical Indicators¶
Although you can import technical indicator libraries and use them in your strategies, QTPyLib does come 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¶
QTPyLib also offers full integration with TA-Lib.
All the TA-Lib methods are available via the talib_indicators modules and automatically extracts and prepare the relevant data your strategy’s bars or ticks.
To use the TA-Lib integration, 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.