Average(Close, N) | ta.sma(closes, length=N) | talib.SMA(closes, timeperiod=N) | Current value: .iloc[-1] / [-1] |
XAverage(Close, N) | ta.ema(closes, length=N) | talib.EMA(closes, timeperiod=N) | |
RSI(Close, N) | ta.rsi(closes, length=N) | talib.RSI(closes, timeperiod=N) | Returns 0–100 |
BollingerBand(Close, N, 2) | ta.bbands(closes, length=N, std=2) | talib.BBANDS(closes, timeperiod=N, nbdevup=2, nbdevdn=2) | Returns upper/mid/lower |
MACD(Close, 12, 26) | ta.macd(closes, fast=12, slow=26, signal=9) | talib.MACD(closes, fastperiod=12, slowperiod=26, signalperiod=9) | Returns MACD/signal/histogram |
Stochastic(...) | ta.stoch(highs, lows, closes, k=14, d=3) | talib.STOCH(highs, lows, closes, fastk_period=14, slowk_period=3, slowd_period=3) | Returns slowK/slowD |
ADX(N) | ta.adx(highs, lows, closes, length=N) | talib.ADX(highs, lows, closes, timeperiod=N) | |
CCI(N) | ta.cci(highs, lows, closes, length=N) | talib.CCI(highs, lows, closes, timeperiod=N) | |
AvgTrueRange(N) | ta.atr(highs, lows, closes, length=N, mamode='sma') or rolling mean of ta.true_range(...) | talib.SMA(talib.TRANGE(highs, lows, closes), timeperiod=N) | PL AvgTrueRange is a SIMPLE average of TrueRange; pandas-ta/TA-Lib ATR default to Wilder smoothing — the default Wilder ATR matches PL SmoothedAverage(TrueRange, Len) instead |
Momentum(Close, N) | ta.mom(closes, length=N) | talib.MOM(closes, timeperiod=N) | |
Highest(High, N) | highs.rolling(N).max() | talib.MAX(highs, timeperiod=N) | |
Lowest(Low, N) | lows.rolling(N).min() | talib.MIN(lows, timeperiod=N) | |
DMIPlus(N) / DMIMinus(N) | ta.dm(highs, lows, length=N) | talib.PLUS_DI(...) / talib.MINUS_DI(...) | |
KeltnerChannel(Close, N, mult) | ta.kc(highs, lows, closes, length=N, scalar=mult) | Manual: talib.EMA(closes, N) ± mult * talib.ATR(highs, lows, closes, N) | |
Parabolic(step) | ta.psar(highs, lows, af0=step, max_af=0.2) | talib.SAR(highs, lows, acceleration=step, maximum=0.2) | |
PercentR(N) | ta.willr(highs, lows, closes, length=N) + 100 | talib.WILLR(highs, lows, closes, timeperiod=N) + 100 | PL PercentR is POSITIVE 0..100 (= Williams %R + 100); library WILLR returns −100..0 — add 100, and thresholds become 80/20 on the positive scale |
RateOfChange(Close, N) | ta.roc(closes, length=N) | talib.ROC(closes, timeperiod=N) | |
Volatility(N) | ta.true_range(highs, lows, closes).ewm(span=N).mean() (or ta.atr(..., mamode='ema')) | talib.EMA(talib.TRANGE(highs, lows, closes), timeperiod=N) | PL Volatility is a smoothed average of TrueRange weighted toward the most recent bar — NOT a stdev-based measure (StandardDev is stdev of closes; VolatilityStdDev is annualized stdev of log returns) |
StandardDev(Close, N, 1) | ta.stdev(closes, length=N) | talib.STDDEV(closes, timeperiod=N, nbdev=1) | |
TrueRange | ta.true_range(highs, lows, closes) | talib.TRANGE(highs, lows, closes) | Per-bar, no period |
MoneyFlow(N) | ta.mfi(highs, lows, closes, volumes, length=N) | talib.MFI(highs, lows, closes, volumes, timeperiod=N) | Requires HLCV |
AccumDist | ta.ad(highs, lows, closes, volumes) | talib.AD(highs, lows, closes, volumes) | Cumulative, no period |
LinearRegValue(Close, N, 0) | ta.linreg(closes, length=N) | talib.LINEARREG(closes, timeperiod=N) | |
LinearRegSlope(Close, N) | ta.linreg(closes, length=N, slope=True) | talib.LINEARREG_SLOPE(closes, timeperiod=N) | |
Summation(Close, N) | closes.rolling(N).sum() | talib.SUM(closes, timeperiod=N) | |
Cum(Volume) | volumes.cumsum() | np.cumsum(volumes) | Running total |
WAverage(Close, N) | ta.wma(closes, length=N) | talib.WMA(closes, timeperiod=N) | |
MidPoint(Close, N) | ta.midpoint(closes, length=N) | talib.MIDPOINT(closes, timeperiod=N) | |
TSI(Close, LongLen, ShortLen) | ta.tsi(closes, fast=ShortLen, slow=LongLen) | Manual: double-EMA of momentum / double-EMA of abs(momentum) | pandas-ta fast=short, slow=long (reversed naming vs PL) |
SwingHigh(Occur, Price, Strength, Length) | Manual: scan for pivot high | Manual: scan for pivot high | Occurrence is the FIRST PL arg; returns −1 when no swing found; Length must exceed Strength |
SwingLow(Occur, Price, Strength, Length) | Manual: scan for pivot low | Manual: scan for pivot low | Same: Occurrence first, −1 when none found, Length > Strength |
HighestBar(High, N) | highs[-N:].idxmax() → compute bars ago | np.argmax(highs[-N:]) | Returns bars ago |
LowestBar(Low, N) | lows[-N:].idxmin() → compute bars ago | np.argmin(lows[-N:]) | Returns bars ago |
CountIF(cond, N) | cond_series.rolling(N).sum() | Manual: sum(1 for ...) | Count True values |
Crosses Over | prev_a <= prev_b and a > b | Same | No built-in; store previous values |
Crosses Under | prev_a >= prev_b and a < b | Same | Same |
AverageFC(Close, N) | ta.sma(closes, length=N) | talib.SMA(closes, timeperiod=N) | FC = "fast calculation": AverageFC = SummationFC/Len (running-sum SMA), numerically identical to Average — use SMA |
AdaptiveMovAvg(Close, N) | ta.kama(closes, length=N) | talib.KAMA(closes, timeperiod=N) | Kaufman Adaptive Moving Average |
UltimateOscillator(7,14,28) | ta.uo(highs, lows, closes, fast=7, medium=14, slow=28) | talib.ULTOSC(highs, lows, closes, timeperiod1=7, timeperiod2=14, timeperiod3=28) | Requires HLC |
ChaikinOsc(3, 10) | ta.adosc(highs, lows, closes, volumes, fast=3, slow=10) | talib.ADOSC(highs, lows, closes, volumes, fastperiod=3, slowperiod=10) | Requires HLCV |
PriceOscillator(Fast, Slow) | ta.apo(closes, fast=Fast, slow=Slow) | talib.APO(closes, fastperiod=Fast, slowperiod=Slow) | Absolute Price Oscillator |
DirMovement(N, ...) | ta.dm(highs, lows, length=N) + ta.adx(...) | talib.PLUS_DI(...) + talib.MINUS_DI(...) + talib.ADX(...) | Multi-output: +DI, −DI, ADX |
Extremes(High, Low, N, oHH, oLL, oHHBar, oLLBar) | Manual: rolling max/min + argmax/argmin | Manual: rolling max/min + argmax/argmin | Returns highest, lowest, and their bar offsets |
TrueHigh | np.maximum(highs, closes.shift(1)) | Same | max(High, Close[1]) |
TrueLow | np.minimum(lows, closes.shift(1)) | Same | min(Low, Close[1]) |
Range | highs - lows | Same | Per-bar range; no period |
NthHighest(N, Close, Len) | Manual: closes.rolling(Len).apply(lambda x: np.sort(x)[-N]) | Manual: sort rolling window | Nth largest value in window |
NthLowest(N, Close, Len) | Manual: closes.rolling(Len).apply(lambda x: np.sort(x)[N-1]) | Manual: sort rolling window | Nth smallest value in window |
NthHighestBar(N, Close, Len) | Manual: find bar offset of Nth highest | Manual: find bar offset of Nth highest | Returns bars ago of Nth highest |
NthLowestBar(N, Close, Len) | Manual: find bar offset of Nth lowest | Manual: find bar offset of Nth lowest | Returns bars ago of Nth lowest |
SwingHighBar(Occur, Price, Strength, Length) | Manual: pivot detection with bar offset | Manual: pivot detection with bar offset | Bars since Nth swing high; same arg order as SwingHigh |
SwingLowBar(Occur, Price, Strength, Length) | Manual: pivot detection with bar offset | Manual: pivot detection with bar offset | Bars since Nth swing low |
LinearRegAngle(Close, N) | np.degrees(np.arctan(ta.linreg(closes, length=N, slope=True))) | talib.LINEARREG_ANGLE(closes, timeperiod=N) | Slope converted to degrees |
Correlation(Close, Volume, N) | ta.correlation(closes, volumes, length=N) | talib.CORREL(closes, volumes, timeperiod=N) | Pearson correlation |
RSquared(Close, N) | ta.correlation(closes, ..., length=N) ** 2 | talib.CORREL(closes, ..., timeperiod=N) ** 2 | Square of correlation |
StdError(Close, N) | Manual: fit np.polyfit(np.arange(N), closes[-N:], 1), then np.sqrt(((y - yhat) ** 2).sum() / (N - 2)) | Manual: same residual computation on the window | Standard error of the linear-regression residuals — NOT stdev/sqrt(N) (that is SE of the mean) |
Median(Close, N) | ta.median(closes, length=N) | closes.rolling(N).median() | Rolling median |
ELDate(dt) | Manual: (y - 1900) * 10000 + m * 100 + d | Same | EasyLanguage YYYMMDD date format |
MinutesToTime(mins) | Manual: (mins // 60) * 100 + mins % 60 | Same | Minutes since midnight to HHMM |
TimeToMinutes(hhmm) | Manual: (hhmm // 100) * 60 + hhmm % 100 | Same | HHMM to minutes since midnight |
AvgPrice | (opens + highs + lows + closes) / 4 | talib.AVGPRICE(opens, highs, lows, closes) | Average of OHLC |
MedianPrice | (highs + lows) / 2 | talib.MEDPRICE(highs, lows) | Median of HL |
TypicalPrice | (highs + lows + closes) / 3 | talib.TYPPRICE(highs, lows, closes) | Typical price HLC |
WeightedClose | (highs + lows + 2 * closes) / 4 | talib.WCLPRICE(highs, lows, closes) | Weighted close HLCC |
MRO(cond, N, 1) | Manual: find Nth True in cond_series[-N:] | Manual: iterate lookback | Most Recent Occurrence; returns bars ago |
IFF(cond, trueVal, falseVal) | trueVal if cond else falseVal | Same | Python ternary; or np.where(cond, trueVal, falseVal) for Series |
TriAverage(Close, N) | ta.trima(closes, length=N) | talib.TRIMA(closes, timeperiod=N) | Triangular MA |
FastK(N) | ta.stoch(highs, lows, closes, k=N, d=1, smooth_k=1)['STOCHk_N_1_1'] | talib.STOCHF(highs, lows, closes, fastk_period=N) | Raw Fast %K |
FastD(N) | ta.stoch(highs, lows, closes, k=N, d=3, smooth_k=1)['STOCHd_N_3_1'] | talib.STOCHF(highs, lows, closes, fastk_period=N, fastd_period=3) | Smoothed Fast %D — set smooth_k=1 so %D is the SMA(3) of RAW %K, not of slowed %K |
SlowK(N) | ta.stoch(highs, lows, closes, k=N, d=3)['STOCHk_N_3_3'] | talib.STOCH(highs, lows, closes, fastk_period=N, slowk_period=3) | Slow %K |
SlowD(N) | ta.stoch(highs, lows, closes, k=N, d=3)['STOCHd_N_3_3'] | talib.STOCH(highs, lows, closes, fastk_period=N, slowk_period=3, slowd_period=3) | Slow %D |
FastKCustom(H, L, C, N) | ta.stoch(H, L, C, k=N, d=1, smooth_k=1)['STOCHk_...'] | talib.STOCHF(H, L, C, fastk_period=N) | Custom prices |
FastDCustom(H, L, C, N) | ta.stoch(H, L, C, k=N, d=3)['STOCHd_...'] | talib.STOCHF(H, L, C, fastk_period=N, fastd_period=3) | Custom prices |
SlowKCustom(H, L, C, N) | ta.stoch(H, L, C, k=N, d=3)['STOCHk_...'] | talib.STOCH(H, L, C, fastk_period=N, slowk_period=3) | Custom prices |
SlowDCustom(H, L, C, N) | ta.stoch(H, L, C, k=N, d=3)["STOCHd_N_3_3"] | talib.STOCH(H, L, C, fastk_period=N)[2] | Slow %D with custom prices |
StochasticExp(H, L, C, N, S1, S2, ...) | Manual: compute FastK then apply EMA smoothing | Manual: compute with talib.STOCHF then talib.EMA | Exponential smoothing variant |
ADXR(N) | ta.adx(highs, lows, closes, length=N) then (adx + adx.shift(N)) / 2 | talib.ADXR(highs, lows, closes, timeperiod=N) | TA-Lib has direct ADXR |
ADXCustom(H, L, C, N) | ta.adx(H, L, C, length=N) | talib.ADX(H, L, C, timeperiod=N) | Pass custom price Series |
DMI(N) | ta.adx(highs, lows, closes, length=N) | talib.ADX(highs, lows, closes, timeperiod=N) | Wrapper; same as ADX |
DMIPlusCustom(H, L, C, N) | ta.dm(H, L, length=N)['DMP_N'] | talib.PLUS_DI(H, L, C, timeperiod=N) | +DI with custom prices |
DMIMinusCustom(H, L, C, N) | ta.dm(H, L, length=N)['DMN_N'] | talib.MINUS_DI(H, L, C, timeperiod=N) | −DI with custom prices |
ParabolicCustom(step, limit) | ta.psar(highs, lows, af0=step, max_af=limit) | talib.SAR(highs, lows, acceleration=step, maximum=limit) | Parabolic SAR with custom limit |
TRIX(Close, N) | ta.trix(closes, length=N) | talib.TRIX(closes, timeperiod=N) | Triple EMA ROC |
MassIndex(SmoothLen, SumLen) | ta.massi(highs, lows, fast=SmoothLen, slow=SumLen) | Manual: EMA ratio sum | Mass Index |
EaseOfMovement | ta.eom(highs, lows, closes, volumes) | Manual: distance moved / box ratio | Requires HLCV |
SwingIndex | Manual: Wilder swing index formula | Manual: same | No library built-in |
AccumSwingIndex | Manual: cumulative sum of SwingIndex | Manual: same | No library built-in |
Detrend(Close, N) | Manual: closes - closes.rolling(N).mean().shift(N // 2 + 1) | Manual: offset SMA | Detrended price |
PercentChange(Close, N) | closes.pct_change(N) * 100 | talib.ROC(closes, timeperiod=N) | Percent change |
UlcerIndex(Close, N) | ta.ui(closes, length=N) | Manual: RMS of drawdown pct | Downside volatility |
ParabolicSAR(step, limit, ...) | ta.psar(highs, lows, af0=step, max_af=limit) | talib.SAR(highs, lows, acceleration=step, maximum=limit) | Multi-output; extract position from PSARl/PSARs columns |
LinearReg(Close, N, TgtBar, ...) | ta.linreg(closes, length=N) + manual slope/angle | talib.LINEARREG(closes, timeperiod=N) + talib.LINEARREG_SLOPE/ANGLE/INTERCEPT | Multi-output; combine four TA-Lib calls |
TrueRangeCustom(H, L, C) | ta.true_range(H, L, C) | talib.TRANGE(H, L, C) | Custom prices |
VolatilityStdDev(NumDays) | np.log(closes / closes.shift(1)).rolling(NumDays).std() * np.sqrt(252) | Manual: annualized stdev of log returns | Historical volatility |
StandardDevAnnual(Close, N, DataType) | ta.stdev(closes, length=N) * np.sqrt(252) | talib.STDDEV(closes, timeperiod=N) * np.sqrt(252) | Annualized stdev |
HighestFC(Close, N) | closes.rolling(N).max() | talib.MAX(closes, timeperiod=N) | Same as Highest |
LowestFC(Close, N) | closes.rolling(N).min() | talib.MIN(closes, timeperiod=N) | Same as Lowest |
PivotHighVS(Inst, Price, LStr, RStr, Len) | Manual: scan for pivot high with L/R strength | Manual: same | Asymmetric left/right strength |
PivotLowVS(Inst, Price, LStr, RStr, Len) | Manual: scan for pivot low with L/R strength | Manual: same | Same |
PivotHighVSBar(Inst, Price, LStr, RStr, Len) | Manual: bars ago of pivot high | Manual: same | Returns offset |
PivotLowVSBar(Inst, Price, LStr, RStr, Len) | Manual: bars ago of pivot low | Manual: same | Returns offset |
Divergence(P1, P2, Str, Len, HiLo) | Manual: compare pivot highs/lows of two series | Manual: same | No library built-in |
TimeSeriesForecast(Close, N) | ta.tsf(closes, length=N) | talib.TSF(closes, timeperiod=N) | Time Series Forecast |
SummationFC(Close, N) | closes.rolling(N).sum() | talib.SUM(closes, timeperiod=N) | Same as Summation |
OpenD(N) | df.resample('D').first()['open'].iloc[-1-N] | Manual: resample to daily | Daily open |
HighD(N) | df.resample('D').max()['high'].iloc[-1-N] | Manual: resample | Daily high |
LowD(N) | df.resample('D').min()['low'].iloc[-1-N] | Manual: resample | Daily low |
CloseD(N) | df.resample('D').last()['close'].iloc[-1-N] | Manual: resample | Daily close |
OpenW(N) | df.resample('W').first()['open'].iloc[-1-N] | Manual: resample | Weekly open |
HighW(N) | df.resample('W').max()['high'].iloc[-1-N] | Manual: resample | Weekly high |
LowW(N) | df.resample('W').min()['low'].iloc[-1-N] | Manual: resample | Weekly low |
CloseW(N) | df.resample('W').last()['close'].iloc[-1-N] | Manual: resample | Weekly close |
OpenM(N) | df.resample('ME').first()['open'].iloc[-1-N] | Manual: resample | Monthly open |
HighM(N) | df.resample('ME').max()['high'].iloc[-1-N] | Manual: resample | Monthly high |
LowM(N) | df.resample('ME').min()['low'].iloc[-1-N] | Manual: resample | Monthly low |
CloseM(N) | df.resample('ME').last()['close'].iloc[-1-N] | Manual: resample | Monthly close |
OpenY(N) | df.resample('YE').first()['open'].iloc[-1-N] | Manual: resample | Yearly open |
HighY(N) | df.resample('YE').max()['high'].iloc[-1-N] | Manual: resample | Yearly high |
LowY(N) | df.resample('YE').min()['low'].iloc[-1-N] | Manual: resample | Yearly low |
CloseY(N) | df.resample('YE').last()['close'].iloc[-1-N] | Manual: resample | Yearly close |
LRO(cond, N, Inst) | Manual: cond_series[-N:].iloc[::-1] find Nth True from end | Manual: same | Least Recent Occurrence |
SummationIf(cond, Price, N) | (Price * cond).rolling(N).sum() | Manual: multiply then sum | Conditional rolling sum |
IFFString(cond, trueStr, falseStr) | trueStr if cond else falseStr | Same | String ternary; or np.where |
OBV | ta.obv(closes, volumes) | talib.OBV(closes, volumes) | On Balance Volume |
VolumeROC(N) | ta.roc(volumes, length=N) | talib.ROC(volumes, timeperiod=N) | Volume rate of change |
VolumeOsc(ShortLen, LongLen) | ta.sma(volumes, length=ShortLen) - ta.sma(volumes, length=LongLen) | talib.SMA(volumes, ShortLen) - talib.SMA(volumes, LongLen) | Volume oscillator |
PriceVolTrend | ta.pvt(closes, volumes) | Manual: cumulative pct_change * volume | Price Volume Trend |
LWAccDis | Manual: ((closes - opens) / (highs - lows) * volumes).cumsum() | Manual: same | Larry Williams A/D |
Fisher(Price) | Manual: normalize, then 0.5 * np.log((1 + norm) / (1 - norm)) | Manual: same | Fisher transformation |
FisherINV(Price) | Manual: (np.exp(2 * Price) - 1) / (np.exp(2 * Price) + 1) | Manual: same | Inverse Fisher |
C_Doji(Pct) | Manual: abs(close - open) <= (high - low) * Pct / 100 | talib.CDLDOJI(opens, highs, lows, closes) | TA-Lib has CDL* family |
C_Hammer_HangingMan(Len, Factor, ...) | Manual: body/shadow ratios | talib.CDLHAMMER(...) / talib.CDLHANGINGMAN(...) | Separate TA-Lib functions |
C_BullEng_BearEng(Len, ...) | Manual: engulfing detection | talib.CDLENGULFING(opens, highs, lows, closes) | +100=bullish, -100=bearish |
C_BullHar_BearHar(Len, ...) | Manual: harami detection | talib.CDLHARAMI(opens, highs, lows, closes) | +100=bullish, -100=bearish |
C_MornDoji_EveDoji(Len, Pct, ...) | Manual: 3-bar doji star | talib.CDLMORNINGDOJISTAR(...) / talib.CDLEVENINGDOJISTAR(...) | Separate functions |
C_MornStar_EveStar(Len, ...) | Manual: 3-bar star | talib.CDLMORNINGSTAR(...) / talib.CDLEVENINGSTAR(...) | Separate functions |
C_PierceLine_DkCloud(Len, ...) | Manual: piercing/cloud | talib.CDLPIERCING(...) / talib.CDLDARKCLOUDCOVER(...) | Separate functions |
C_ShootingStar(Len, Factor) | Manual: shooting star | talib.CDLSHOOTINGSTAR(opens, highs, lows, closes) | TA-Lib direct |
C_3WhSolds_3BlkCrows(Len, Factor, ...) | Manual: 3-bar trend | talib.CDL3WHITESOLDIERS(...) / talib.CDL3BLACKCROWS(...) | Separate functions |
| Statistical extended | | | |
AvgDeviation(Close, N) | ta.mad(closes, length=N) | Manual: (closes - closes.rolling(N).mean()).abs().rolling(N).mean() | Mean absolute deviation |
Variance(Close, N) | ta.variance(closes, length=N) | talib.VAR(closes, timeperiod=N) | Population variance |
Kurtosis(Close, N) | closes.rolling(N).kurt() | Manual: 4th moment | Excess kurtosis |
Skew(Close, N) | closes.rolling(N).skew() | Manual: 3rd moment | Skewness |
PercentRank(ValToRank, Price, N) | closes.rolling(N).apply(lambda w: stats.percentileofscore(w, w.iloc[-1])) | Manual | Percent rank |
Covariance(P1, P2, N) | P1.rolling(N).cov(P2, ddof=0) | Manual | Covariance — pandas defaults to SAMPLE covariance (ddof=1); pass ddof=0 for the population form PL uses |
Quartile(Close, N, Q) | closes.rolling(N).quantile(Q*0.25) | Manual | Quartile value |
TrimMean(Close, N, Pct) | closes.rolling(N).apply(lambda w: stats.trim_mean(w, Pct/100)) | Manual | Trimmed mean |
Mode(Close, N, Type) | closes.rolling(N).apply(lambda w: w.mode().iloc[0]) | Manual | Modal value |
HarmonicMean(Close, N) | closes.rolling(N).apply(stats.hmean) | Manual | Harmonic mean |
| Moving averages extended | | | |
SmoothedAverage(Close, N) | ta.rma(closes, length=N) | Manual: Wilder smoothing | Wilder/RMA |
| Miscellaneous | | | |
BarAnnualization | Manual: compute from bar frequency | Manual | Bars-per-year factor |
LastBarOnChart | idx == len(df) - 1 | Manual | True on last bar |
| Custom functions | | | |
StochRSI(Close, N, M) | pandas_ta.stochrsi(df["close"], length=N, rsi_length=N, k=M) | pandas_ta.stochrsi() | Stochastic RSI |
supertrend(N, Mult) | pandas_ta.supertrend(df["high"], df["low"], df["close"], length=N, multiplier=Mult) | pandas_ta.supertrend() | Supertrend |
NVI(Start) | Manual: accumulate on volume-down bars | Manual | Negative Volume Index |
PVI(Start) | Manual: accumulate on volume-up bars | Manual | Positive Volume Index |
Coppo(N1, N2, N3) | pandas_ta.coppock(df["close"], length=N3, fast=N2, slow=N1) | pandas_ta.coppock() | Coppock Curve |
LWTI(Close, P, N) | Manual: (sma(close-close.shift(P), N) / sma(high-low, N)) * 50 + 50 | Manual | Larry Williams TI |
TVI(Close, Vol, Tick) | Manual: cumulative directional volume | Manual | Trade Volume Index |
SharpeRatio(Period, Rate, Calc, Cap) | Manual: (returns.mean() - rf) / returns.std() | Manual | Portfolio Sharpe |
WRSI(N, Close) | pandas_ta.rsi(df["close"], length=N) | pandas_ta.rsi() | Wilder RSI (default) |
NewMA(Close, N) | Manual: Heikin-Ashi + TEMA hybrid | Manual | Hybrid MA |