PINE LIBRARY

SimTradeIndicators

562
Library "SimTradeIndicators"
SimTrade indicator library — exact parity with Python pipeline (TA-Lib + pandas_ta).
Each function replicates the formula used in base.py / signals.py so that
TradingView charts match the GPU hunt / validator / live engine outputs.

Formula sources:
TA-Lib → RSI, ATR, EMA, MACD, CCI, Stoch, WILLR, MFI, ADX, PSAR, OBV, BBANDS, AROON, PPO, AD
pandas_ta → SuperTrend, Vortex, Ichimoku, Donchian, HMA, TSI, CMF, EFI, CHOP, Heikin-Ashi
Manual → Keltner (EMA+ATR Wilder), TTM Squeeze, Chandelier Exit, VWAP reset, Pivot Points

Known intentional deviations (documented):
- Stoch trigger 11 uses Full %D (double-smoothed), not single %K
- OBV filter 206 uses windowed 800-bar OBV (GPU-aligned, not cumulative)
- Pivot Points use rolling window, not session-based (see pivot_pp notes)
- EMA has longer warmup in TA-Lib (~50 bars unstable period) vs TW (from bar 1); steady-state identical

smma(src, length)
  SMMA / Wilder RMA. alpha = 1/length. Matches talib "RMA" used for ATR/RSI internally.
  Parameters:
    src (float): Source series
    length (simple int): Period
  Returns: RMA value

hma(src, length)
  HMA (Hull Moving Average). HMA = WMA(2·WMA(N/2) − WMA(N), √N). Matches pandas_ta.hma.
  Parameters:
    src (float): Source series
    length (simple int): Period
  Returns: HMA value

dema(src, length)
  DEMA (Double EMA) = 2·EMA − EMA(EMA). Matches talib.DEMA.
  Parameters:
    src (float): Source series
    length (simple int): Period
  Returns: DEMA value

tema(src, length)
  TEMA (Triple EMA) = 3·EMA − 3·EMA² + EMA³. Matches talib.TEMA.
  Parameters:
    src (float): Source series
    length (simple int): Period
  Returns: TEMA value

atr_wilder(length)
  ATR using Wilder RMA. Identical to talib.ATR and TW ta.atr.
  Parameters:
    length (simple int): Period (default 14)
  Returns: ATR value

atr_percentile_pct(length, lookback)
  ATR percentile rank over a rolling window. Matches Python vol_filter 201.
Logic: for each bar count how many ATR values in [i-lookback+1 .. i] are <= current ATR,
return that fraction as 0..100. Warmup bars (< lookback + length) return 50.0.
  Parameters:
    length (simple int): ATR period / Wilder RMA (default 14). Matches params[0].
    lookback (simple int): Rolling window for percentile rank (default 30). Matches params[1].
  Returns: Percentile rank 0..100 (pass filter when >= pct_min / params[2])

bbands(src, length, mult)
  Bollinger Bands. Returns [upper, mid, lower].
mid = SMA. Matches talib.BBANDS (matype=0 = SMA).
  Parameters:
    src (float): Source series (typically close)
    length (simple int): Period (default 20)
    mult (float): Standard deviation multiplier (default 2.0)
  Returns: [upper, mid, lower]

bb_pctb(src, length, mult)
  Bollinger Bands %B = (close − lower) / (upper − lower).
Returns 0.5 during warmup (matches Python _nan50 fallback in base.bb_pctb).
  Parameters:
    src (float): Source series
    length (simple int): Period (default 20)
    mult (float): Multiplier (default 2.0)
  Returns: %B value

bb_width_x1000(src, length, mult)
  BB bandwidth × 1000 / mid. Used by vol filter 202 (bb_width).
  Parameters:
    src (float): Source series
    length (simple int): Period (default 20)
    mult (float): Multiplier (default 2.0)
  Returns: (upper − lower) / |mid| × 1000

keltner(ema_period, atr_period, mult)
  Keltner Channel. mid = EMA(close, ema_period), band = ATR(atr_period) Wilder RMA.
IMPORTANT: this is the TW-standard formula. NOT pandas_ta kc(mamode="ema") which uses EMA(TR).
That version produces ~40% narrower bands than TW. This library uses the correct RMA(ATR) band.
  Parameters:
    ema_period (simple int): EMA period for midline (default 20)
    atr_period (simple int): ATR period for band width (default 10)
    mult (float): ATR multiplier (default 1.5)
  Returns: [upper, mid, lower]

keltner_width_x1000(period, mult)
  Keltner Channel bandwidth × 1000 / mid. Used by vol filter 204 (keltner_width).
  Parameters:
    period (simple int): Period for both EMA and ATR (default 20)
    mult (float): ATR multiplier (default 1.5)
  Returns: (upper − lower) / |mid| × 1000

choppiness(length)
  Choppiness Index. CHOP = 100·log10(Σ ATR1 / (HH − LL)) / log10(N).
Matches pandas_ta.chop and TW built-in CHOP. Returns 50.0 during warmup.
  Parameters:
    length (simple int): Period (default 14)
  Returns: CHOP value

rsi_val(src, length)
  RSI using Wilder RMA. Identical to talib.RSI and TW ta.rsi.
Returns 50.0 during warmup (matches Python _nan50 fallback).
  Parameters:
    src (float): Source series (typically close)
    length (simple int): Period (default 14)
  Returns: RSI value

cci_val(length)
  CCI = (typical − SMA(typical)) / (0.015 · mean_deviation). Matches talib.CCI.
Returns 0.0 during warmup (matches Python _nan0 fallback).
  Parameters:
    length (simple int): Period (default 20)
  Returns: CCI value

stoch_raw_k(k_period)
  Stochastic raw %K (no smoothing). Matches base.stoch_k (talib slowk_period=1).
NOTE: TW ta.stoch default smooths %K with SMA(3). This is the unsmoothed fast %K.
Used by filter 103 (stoch_k_below).
  Parameters:
    k_period (simple int): Lookback period (default 14)
  Returns: Raw %K (50.0 during warmup)

stoch_full_d(k_period, d_period)
  Full Stochastic %D = SMA(SMA(raw%K, d_period), d_period). Matches talib.STOCH output.
Used by trigger 11 (stoch_cross). NOT single-smoothed %K — lag is +2-3 bars vs TW default.
  Parameters:
    k_period (simple int): Raw %K lookback (default 14)
    d_period (simple int): Smoothing applied twice (default 3)
  Returns: Full Stochastic %D (50.0 during warmup)

williams_r(length)
  Williams %R = −100 · (HH − close) / (HH − LL). Matches talib.WILLR.
Range: −100 to 0. Returns −50.0 during warmup.
  Parameters:
    length (simple int): Period (default 14)
  Returns: Williams %R value

mfi_val(length)
  MFI (Money Flow Index). Matches talib.MFI.
Returns 50.0 during warmup.
  Parameters:
    length (simple int): Period (default 14)
  Returns: MFI value

macd_val(src, fast, slow, signal_period)
  MACD. Returns [macd_line, signal_line, histogram]. Identical to talib.MACD.
All NaN values replaced with 0.0 (matches Python _nan0).
  Parameters:
    src (float): Source series
    fast (simple int): Fast EMA period (default 12)
    slow (simple int): Slow EMA period (default 26)
    signal_period (simple int): Signal EMA period (default 9)
  Returns: [macd_line, signal_line, histogram]

ppo_val(src, fast, slow)
  PPO = (EMA(fast) − EMA(slow)) / EMA(slow) × 100. Matches talib.PPO.
Returns 0.0 during warmup.
  Parameters:
    src (float): Source series
    fast (simple int): Fast period (default 12)
    slow (simple int): Slow period (default 26)
  Returns: PPO value

tsi_val(src, long_period, short_period)
  TSI (True Strength Index). Matches pandas_ta.tsi parameter order.
TSI = 100 · EMA(EMA(Δclose, slow), fast) / EMA(EMA(|Δclose|, slow), fast)
slow is the OUTER (first) smoothing, fast is the INNER (second). Same as TW.
  Parameters:
    src (float): Source series
    long_period (simple int): Outer (slow) EMA period (default 25)
    short_period (simple int): Inner (fast) EMA period (default 13)
  Returns: TSI value (0.0 during warmup)

adx_di(length)
  ADX + DI lines. Returns [adx, plus_di, minus_di]. Matches talib.ADX/PLUS_DI/MINUS_DI.
Uses Wilder RMA (identical to TW ta.dmi / ta.adx).
  Parameters:
    length (simple int): Period (default 14)
  Returns: [adx, plus_di, minus_di] — 0.0 during warmup

supertrend_val(length, mult)
  SuperTrend direction and value. Matches pandas_ta.supertrend (RMA ATR).
Returns [direction, supertrend_value]: direction = 1 (bull) or −1 (bear).
  Parameters:
    length (simple int): ATR period (default 10)
    mult (float): ATR multiplier (default 3.0)
  Returns: [direction, supertrend_value]

psar_val(start, inc, max_af)
  Parabolic SAR. Returns [direction, sar_value]. Matches talib.SAR.
direction = 1 if close > SAR (bull), −1 bear.
  Parameters:
    start (simple float): Initial AF / step (default 0.02)
    inc (simple float): AF increment per bar (default 0.02)
    max_af (simple float): Maximum AF cap (default 0.2)
  Returns: [direction, sar_value]

aroon_val(length)
  Aroon Up and Down. Returns [up, down]. Matches talib.AROON.
ta.aroon does not exist in Pine v6 — computed manually:
Aroon Up = (length − bars since highest high over length+1 bars) / length × 100
Aroon Down = (length − bars since lowest low over length+1 bars) / length × 100
This is identical to talib.AROON and TradingView's built-in Aroon indicator.
Returns 50.0 during warmup (matches Python _nan50).
  Parameters:
    length (simple int): Period (default 25)
  Returns: [aroon_up, aroon_down]

vortex_diff(length)
  Vortex Indicator difference (VI+ − VI−). Matches base.vortex.
Positive = bullish regime, negative = bearish. Returns 0.0 during warmup.
  Parameters:
    length (simple int): Period (default 14)
  Returns: VI+ minus VI−

linreg_slope(src, length)
  Linear Regression Slope. Matches talib.LINEARREG_SLOPE exactly.
Computes OLS slope for x = 0..N-1 (oldest=0, newest=N-1).
Positive = uptrend, negative = downtrend. Returns 0.0 during warmup.
  Parameters:
    src (float): Source series
    length (simple int): Period (default 20)
  Returns: Slope value

obv_val()
  OBV (On-Balance Volume). Cumulative. Matches talib.OBV.
  Returns: Cumulative OBV

vwap_reset(reset_bars)
  VWAP with periodic session reset. Matches base.vwap(reset_bars).
reset_bars=24 on H1 ≈ daily VWAP (crypto 24/7). reset_bars=6 on H4 ≈ daily.
reset_bars=0 uses TW built-in ta.vwap (session anchor).
  Parameters:
    reset_bars (simple int): Bars per session (0 = TW session anchor, 24 = H1 daily, 6 = H4 daily)
  Returns: VWAP value

cmf_val(length)
  CMF (Chaikin Money Flow) = Σ(CLV·vol) / Σvol. Matches pandas_ta.cmf.
CLV = ((close − low) − (high − close)) / (high − low). Returns 0.0 during warmup.
  Parameters:
    length (simple int): Period (default 20)
  Returns: CMF value (−1 to 1)

ad_val()
  Accumulation/Distribution Line. Matches talib.AD.
  Returns: Cumulative A/D value

efi_val(length)
  EFI (Elder Force Index). EFI = EMA((close − close[1]) · volume, length).
Matches pandas_ta.efi. Returns 0.0 during warmup.
  Parameters:
    length (simple int): EMA period (default 13)
  Returns: EFI value

ichimoku_val(tenkan_period, kijun_period, senkou_b_period)
  Ichimoku lines. Returns [tenkan, kijun, senkou_a, senkou_b, chikou].
Matches pandas_ta.ichimoku with CORRECTED column mapping (ISA, ISB, ITS, IKS, ICS).
senkou_a/b are plotted 26 bars AHEAD in TW — values here are for current bar alignment.
  Parameters:
    tenkan_period (simple int): Tenkan-sen period (default 9)
    kijun_period (simple int): Kijun-sen period (default 26)
    senkou_b_period (simple int): Senkou B period (default 52)
  Returns: [tenkan, kijun, senkou_a, senkou_b, chikou]

donchian_val(length)
  Donchian Channel. Returns [upper, mid, lower].
upper = highest(high, N), lower = lowest(low, N). Matches pandas_ta.donchian.
NOTE: lookback may differ ±1 bar from TA-Lib; consistent across all pipeline stages.
Trigger 37 (donchian_break) compares close > upper[i-1] — use upper[1] in Pine.
  Parameters:
    length (simple int): Period (default 20)
  Returns: [upper, mid, lower]

ttm_squeeze_val(bb_period, bb_mult, kc_period, kc_mult)
  TTM Squeeze. Returns [squeeze_on, momentum].
squeeze_on: BB inside KC (volatility compression).
momentum: ta.linreg(close − (donchian_mid + SMA) / 2, bb_period)
EXACT match with John Carter formula and base.ttm_squeeze after fix.
  Parameters:
    bb_period (simple int): BB period (default 20)
    bb_mult (float): BB multiplier (default 2.0)
    kc_period (simple int): KC period — same for EMA midline and ATR band (default 20)
    kc_mult (float): KC ATR multiplier (default 1.5)
  Returns: [squeeze_on (bool), momentum (float)]

chandelier_val(period, mult)
  Chandelier Exit. Returns [long_exit, short_exit].
long_exit = highest(high, period) − mult · ATR(period)
short_exit = lowest(low, period) + mult · ATR(period)
Exact match with base.chandelier_exit. Both include current bar in rolling max/min.
Trigger 45 fires when close crosses long_exit or short_exit (up = bull, down = bear).
  Parameters:
    period (simple int): Lookback and ATR period (default 22)
    mult (float): ATR multiplier (default 3.0)
  Returns: [long_exit, short_exit]

ha_close()
  Heikin Ashi close. HA_close = (open + high + low + close) / 4. Matches pandas_ta.ha.
  Returns: HA close value

ha_open()
  Heikin Ashi open. HA_open = (HA_open[i-1] + HA_close[i-1]) / 2.
Trigger 48 fires on HA candle color flip: HA_close vs HA_open.
  Returns: HA open value

pivot_pp(period)
  Rolling Pivot Point (floor method). Matches base.pivot_points.
pp = (max(high, period bars ago) + min(low, period bars ago) + close[1]) / 3
NOTE: Rolling window, NOT session-based. H1 default period=24 ≈ 1 day (crypto 24/7).
For H4 set period=6 (6 × 4h = 1 day). TW Pivot Points use session H/L/C — differs.
  Parameters:
    period (simple int): Rolling lookback (default 24)
  Returns: Pivot point value

pivot_r1_s1(period)
  Rolling R1 and S1 levels. Matches base.pivot_points r1/s1.
r1 = 2·pp − lowest_low, s1 = 2·pp − highest_high
  Parameters:
    period (simple int): Rolling lookback (default 24)
  Returns: [r1, s1]

Clause de non-responsabilité

Les informations et publications ne sont pas destinées à être, et ne constituent pas, des conseils ou recommandations financiers, d'investissement, de trading ou autres fournis ou approuvés par TradingView. Pour en savoir plus, consultez les Conditions d'utilisation.