@dznye
◈ SAVED
LOADING
--:--:-- UTC
$1,000
BALANCE
0%
WIN RATE
🎵
FLAT LINE BEFORE THE PUMP
Cinematic build — pre-breakout tension
LIMITLESS
🔈 🔊 30%
TRACK LIST
Next auto track: LVL 5 LVL 1/10000
COMPOUNDSTEADY GROWTH
SCALPFAST & TIGHT
ALL-INMAX CONVICTION
SETUP ENTRY CONFIGHIGH IMPACT
TICKER / PAIR
PRIMARY TIMEFRAME AUTO-ADAPTS

Checklist sections adapt based on your chosen timeframe relevance

⚡ 1M
🔪 5M
🎯 15M
📈 1H
🌊 4H
📅 1D
🏔 1W
OVERALL TREND HIGH IMPACT
TREND DIRECTION MACRO STRUCTURE
CHART PATTERNS VISUAL SELECT
MOMENTUM STRENGTH — CANDLE COUNT — How many consecutive candles going UP (+) or DOWN (-) right now? Left=bearish momentum · Right=bullish momentum RESET
CANDLE RUN
CONSISTENCY
DURATION
◀ BEAR NEUTRAL BULL ▶
TRENDLINE INTERACTION PRICE ACTION AT TL
TRENDLINE CONTEXT HTF KEY
EMA POSITION SWINGHIGH IMPACT

Choose which EMA scenario matches your chart. Price relative to EMA lines shown visually.

EMA LOOKBACK: 20–50 candles back
VWAP INTRADAY KEYMED IMPACT
VOLUME PROFILE CONFIRMATIONHIGH IMPACT

Volume relative to recent average. Higher volume on breakouts = stronger signal.

CANDLE PATTERN VISUAL SELECTMED IMPACT

Select the most prominent pattern on your current candle/last 3 candles

RSI / MOMENTUM MED IMPACT
RSI VALUE (0–100)
50
OVERSOLD <30 NEUTRAL 30-70 OVERBOUGHT >70
RSI CONDITION
MARKET STRUCTURE SMCHIGH IMPACT
KEY PRICE LEVELS HIGH IMPACT

Where is price NOW relative to key S/R levels? Select your trading timeframe context from monthly → to your entry TF. Entry, SL & TP are entered when you LOG TRADE.

WHERE IS PRICE NOW? — from HTF to your trade TF: where is current price relative to key highs/lows/levels?
SUPPORT & RESISTANCE CONTEXT
CONTEXT MODULES UNIQUE DATA ONLYMED IMPACT

Session is auto-detected from clock · MTF/TA-Core covered by HTF Context · Only enable what adds truly new info

LIQUIDITY & CORRELATION
HTF CONTEXT MTF + MOMENTUMHIGH IMPACT

One look at your chart — what do the higher timeframes tell you? This replaces the old MTF alignment module. Keep it simple: aligned, partial, or counter-trend.

OVERALL HTF BIAS (4H/D/W — one read)
LIQUIDITY CONTEXT
◈ PRECISION FILTERS

Three quick reads from your chart — these 3 inputs have some of the highest score impact in the whole system.

1 · KEY LEVEL QUALITY — How strong is the S/R level you're trading off?
STRONG HISTORIC
Tested 3+ times
TESTED ONCE
First bounce
UNTESTED
No prior touches
2 · CANDLE CLOSE QUALITY — How did the last candle close?
STRONG CLOSE
Closed at top/bottom
MID CLOSE
Closed mid-body
WEAK / WICK
Long wick rejection
3 · ENTRY TIMING — Where exactly are you entering relative to the level?
PRECISE
Right at the level
OK
Near the level
CHASED
Far from level
◈ PIVOT POINTS volatility calc · click to expand
◈ ADVANCED PATTERNS +EDGE
◈ FLOW ANALYSIS
FLOW & DIVERGENCE
STRUCTURAL ANALYSIS
TECHNICAL SIGNALS INDICATORSHIGH IMPACT
▲▲ POS & RISING
▲ POSITIVE
▼▼ NEG & FALLING
▼ NEGATIVE
↑ CROSS UP
↓ CROSS DOWN
▲ RISING
▼ FALLING
— FLAT
◈ DIV BULL
◈ DIV BEAR
BOLLINGER BANDS
SQUEEZE BREAK UP
SQUEEZE BREAK DOWN
AT LOWER BAND (MEAN REVERT)
AT UPPER BAND (MEAN REVERT)
MID BAND
ICHIMOKU
ABOVE CLOUD
BELOW CLOUD
TK CROSS UP
TK CROSS DOWN
IN CLOUD
OPEN INTEREST / PARTICIPATION
OI UP + PRICE UP
OI UP + PRICE DOWN
OI FLAT
OI DROP — LONGS EXIT
OI DROP — SHORTS COVER
FUNDING / SENTIMENT
NEUTRAL
FUNDING RESET ↑
CROWDED SHORT ↑
CROWDED LONG ↓
WICK DOMINANCE — what do the wicks on recent candles tell you?
REJECT LOW
LOWER WICKS
Buyers reject lows
↑ BULL
REJECT HIGH
UPPER WICKS
Sellers reject highs
↓ BEAR
BOTH WAYS
BOTH SIDES
Indecision / volatile
~ NEU
CLEAN BODIES
Strong conviction candles
↑↑ STRONG
DOJI / SPINNING
No conviction — wait
⚠ AVOID
?
NO CLEAR READ
Mixed candle pattern
— SKIP
◈ INDICATOR INPUTS — enter values from your chart
🌲 Maps 1-to-1 with TRADZY PineScript. Use TV Import at the top of the tab to auto-fill all fields.
RSI 14-period
ADX >25 trending
STOCH RSI K value
MFI <20 oversold >80 OB
CCI <-100 OS >100 OB
WILLIAMS %R -100 to 0
VOL vs 20-BAR AVG %
ATR % OF PRICE
BB WIDTH % squeeze <2%
MACD HIST VALUE raw number
MACD HIST PREV 1 bar ago
OBV VALUE raw
OBV PREV 1 bar ago
TRIX VALUE + bull / - bear
ROC % rate of change
SUPERTREND 1=bull -1=bear
PSAR VALUE vs current price
BB UPPER BAND raw price
BB LOWER BAND raw price
BB MID BAND 20 SMA
FUNDING RATE % + longs pay shorts
OI VALUE NOW open interest
OI VALUE PREV 1 bar ago
EMA S/R ENGINE
EMA 9 fast trend
EMA 21 dynamic S/R
EMA 50 medium-term S/R
EMA 100 mid macro level
EMA 200 institutional S/R
CURRENT PRICE for EMA S/R calc
PRICE 3 DAYS AGO ↑ drop filter
ICHIMOKU CLOUD
TENKAN-SEN conversion line
KIJUN-SEN base line
SENKOU SPAN A cloud top/bottom
SENKOU SPAN B cloud top/bottom
CHIKOU SPAN lagging span
WILLIAMS ALLIGATOR
JAW 13-period SMMA
TEETH 8-period SMMA
LIPS 5-period SMMA
VOLUME PROFILE / VWAP
VWAP VALUE session VWAP
POC PRICE point of control
VALUE AREA HIGH VAH
VALUE AREA LOW VAL
VWAP +1σ BAND upper 1 std dev
VWAP −1σ BAND lower 1 std dev
VWAP +2σ BAND upper 2 std dev
VWAP −2σ BAND lower 2 std dev
MOMENTUM OSCILLATORS
AWESOME OSC AO value
AO PREV BAR 1 bar ago
ELDER RAY BULL PWR High − EMA
ELDER RAY BEAR PWR Low − EMA
DPO VALUE detrended
CHANDE MO OSC −100 to +100
VOLATILITY / BANDS
BB %B 0=lower 0.5=mid 1=upper
KELTNER UPPER band value
KELTNER LOWER band value
HIST VOLATILITY % 20-bar HV annualized
ACCUMULATION / DISTRIBUTION
A/D LINE VALUE current
A/D LINE PREV 1 bar ago
CMF VALUE Chaikin MF −1 to +1
MARKET FACILITATION MFI BW value
MFI BW PREV 1 bar ago
TREND STRENGTH — DI CROSSOVER
+DI VALUE directional index
−DI VALUE directional index
ADVANCED SIGNALS — SQZ · VOL Δ · VWAP BANDS
STOCH %D signal line
STOCH RSI K RSI of RSI
LR SLOPE % + bull / − bear
SQUEEZE ON 1=active 0=off
SQUEEZE HIST current bar
SQZ HIST PREV 1 bar ago
VOL DELTA EMA + buyers dominate
VOL DELTA PREV 1 bar ago
PIVOT POINTS
PIVOT PP (H+L+C)/3
RESISTANCE R1 2×PP − Low
SUPPORT S1 2×PP − High
RESISTANCE R2 PP + (H−L)
SUPPORT S2 PP − (H−L)
AROON INDICATOR
AROON UP 0–100 · >70 bullish
AROON DOWN 0–100 · >70 bearish
HULL MA · VWMA · CHOPPINESS
HULL MA current value
HULL MA PREV 1 bar ago
VWMA volume-weighted MA
CHOPPINESS INDEX 38.2–61.8 trending
RVOL RATIO >1.5 = active
WMA 20 weighted MA
RSI DIVERGENCE · ATR RAW · TRUE RANGE
RSI PREV BAR 1 bar ago
ATR RAW VALUE absolute ATR
TRUE RANGE current bar TR
DONCHIAN · STC · DEMA · TEMA
DONCHIAN UPPER 20-bar highest high
DONCHIAN LOWER 20-bar lowest low
DONCHIAN MID optional
STC VALUE Schaff 0–100
STC PREV BAR 1 bar ago
DEMA 21 double EMA
TEMA 21 triple EMA
GROUP 14 · MTF RSI + BENCHMARK CORRELATION
1H RSI 1-hour timeframe
4H RSI 4-hour timeframe
DAILY RSI daily timeframe
PRICE vs EMA 21 above/below key MA
BENCHMARK CORR % BTC/SPY/DXY vs asset
BENCHMARK MOVE % today's % change
🌲 PINESCRIPT v7 — TA FILL SHEET
//@version=6
// ════════════════════════════════════════════════════════════════════
//  TRADZY TA FILL SHEET v7 — MODULAR INDEPENDENT TABLES
//  ────────────────────────────────────────────────────────────────
//  Every category (Momentum, Trend, MACD/Volume, Volatility,
//  Ichimoku/VWAP, MTF/Misc) is now its OWN table with its OWN
//  Show / Position / Text-Size controls — toggle any one on/off
//  independently, park it wherever you want, size it however you
//  want. Each row holds 5 label=value pairs (10 columns) instead
//  of the old 3, so far fewer rows are needed and less cuts off.
//
//  PAYLOAD is its own table too. Pick how many rows to split the
//  paste-ready string into (1–10) — if it's still cutting off,
//  just bump the row count up and copy each line.
// ════════════════════════════════════════════════════════════════════
indicator("TRADZY TA FILL SHEET v7", overlay=true, max_labels_count=1)

// ──────────────────────────────────────────────────────────────────
//  ① TA INPUT FIELD CONTROLS
// ──────────────────────────────────────────────────────────────────
g_mom  = "① Momentum Lengths"
rsiLen        = input.int(14, "RSI Length", group=g_mom)
stochLen      = input.int(14, "Stoch %K Length", group=g_mom)
stochDLen     = input.int(3,  "Stoch %D Smoothing", group=g_mom)
stochRsiLen   = input.int(14, "Stoch RSI Length (RSI-of-RSI)", group=g_mom)
adxDiLen      = input.int(14, "ADX / DI Length", group=g_mom)
adxLen        = input.int(14, "ADX Smoothing", group=g_mom)
cciLen        = input.int(20, "CCI Length", group=g_mom)
williamsLen   = input.int(14, "Williams %R Length", group=g_mom)
mfiLen        = input.int(14, "MFI Length", group=g_mom)
rocLen        = input.int(9,  "ROC Length", group=g_mom)
cmoLen        = input.int(14, "CMO Length", group=g_mom)

g_trend = "② Trend / MA Lengths"
ema9Len           = input.int(9,   "EMA 9 Length", group=g_trend)
ema21Len          = input.int(21,  "EMA 21 Length", group=g_trend)
ema50Len          = input.int(50,  "EMA 50 Length", group=g_trend)
ema100Len         = input.int(100, "EMA 100 Length", group=g_trend)
ema200Len         = input.int(200, "EMA 200 Length", group=g_trend)
wmaLen            = input.int(20,  "WMA Length", group=g_trend)
hmaLen            = input.int(9,   "HMA Length", group=g_trend)
vwmaLen           = input.int(20,  "VWMA Length", group=g_trend)
demaLen           = input.int(21,  "DEMA Length", group=g_trend)
temaLen           = input.int(21,  "TEMA Length", group=g_trend)
lrLen             = input.int(20,  "Linear Regression Slope Length", group=g_trend)
supertrendFactor  = input.float(3.0, "Supertrend Factor", group=g_trend)
supertrendAtrLen  = input.int(10,  "Supertrend ATR Length", group=g_trend)
sarStart          = input.float(0.02, "Parabolic SAR Start", step=0.01, group=g_trend)
sarInc            = input.float(0.02, "Parabolic SAR Increment", step=0.01, group=g_trend)
sarMax            = input.float(0.2,  "Parabolic SAR Max", step=0.01, group=g_trend)

g_macdvol = "③ MACD / Volume Lengths"
macdFast      = input.int(12, "MACD Fast Length", group=g_macdvol)
macdSlow      = input.int(26, "MACD Slow Length", group=g_macdvol)
macdSignal    = input.int(9,  "MACD Signal Length", group=g_macdvol)
volSmaLen     = input.int(20, "Volume SMA Length (for Vol %)", group=g_macdvol)
rvolLen       = input.int(20, "RVOL Avg Length", group=g_macdvol)
cmfLen        = input.int(20, "CMF Length", group=g_macdvol)
volDeltaLen   = input.int(14, "Volume Delta EMA Length", group=g_macdvol)

g_vol1 = "④ Volatility Lengths — ATR / BB"
atrLen   = input.int(14, "ATR Length", group=g_vol1)
bbLen    = input.int(20, "Bollinger Band Length", group=g_vol1)
bbMult   = input.float(2.0, "Bollinger Band Mult", step=0.1, group=g_vol1)
hvLen    = input.int(20, "Historical Volatility Length", group=g_vol1)
chopLen  = input.int(14, "Choppiness Index Length", group=g_vol1)

g_vol2 = "⑤ Volatility Lengths — KC / DC / Squeeze / STC"
kcLen        = input.int(20, "Keltner EMA Length", group=g_vol2)
kcAtrLen     = input.int(10, "Keltner ATR Length", group=g_vol2)
kcMult       = input.float(2.0, "Keltner Mult", step=0.1, group=g_vol2)
dcLen        = input.int(20, "Donchian Length", group=g_vol2)
squeezeLen   = input.int(20, "Squeeze Linreg Length", group=g_vol2)
stcFast      = input.int(23, "STC Fast", group=g_vol2)
stcSlow      = input.int(50, "STC Slow", group=g_vol2)
stcCycle     = input.int(10, "STC Cycle", group=g_vol2)

g_ichi = "⑥ Ichimoku / Alligator Lengths"
ichiConv      = input.int(9,  "Ichimoku Conversion (Tenkan)", group=g_ichi)
ichiBase      = input.int(26, "Ichimoku Base (Kijun)", group=g_ichi)
ichiSpanB     = input.int(52, "Ichimoku Span B", group=g_ichi)
alliJawLen    = input.int(13, "Alligator Jaw Length", group=g_ichi)
alliJawShift  = input.int(8,  "Alligator Jaw Shift", group=g_ichi)
alliTeethLen  = input.int(8,  "Alligator Teeth Length", group=g_ichi)
alliTeethShift= input.int(5,  "Alligator Teeth Shift", group=g_ichi)
alliLipsLen   = input.int(5,  "Alligator Lips Length", group=g_ichi)
alliLipsShift = input.int(3,  "Alligator Lips Shift", group=g_ichi)

g_misc = "⑦ Aroon / AO / Elder Ray / DPO"
aroonLen    = input.int(14, "Aroon Length", group=g_misc)
aoFastLen   = input.int(5,  "Awesome Oscillator Fast", group=g_misc)
aoSlowLen   = input.int(34, "Awesome Oscillator Slow", group=g_misc)
elderEmaLen = input.int(13, "Elder Ray EMA Length", group=g_misc)
dpoLen      = input.int(14, "DPO Length", group=g_misc)

g_prec = "⑧ Display Precision"
priceDec = input.int(2, "Price-Value Decimal Places (EMA/WMA/VWAP/BB/KC/DC/Pivots)", minval=0, maxval=6, group=g_prec)
oscDec   = input.int(1, "Oscillator Decimal Places (RSI/ADX/CCI/etc)", minval=0, maxval=4, group=g_prec)

// ──────────────────────────────────────────────────────────────────
//  ② PER-TABLE DISPLAY CONTROLS — every category fully independent
// ──────────────────────────────────────────────────────────────────
f_pos(p) =>
    switch p
        "Top Left"      => position.top_left
        "Top Right"     => position.top_right
        "Top Center"    => position.top_center
        "Middle Left"   => position.middle_left
        "Middle Right"  => position.middle_right
        "Middle Center" => position.middle_center
        "Bottom Left"   => position.bottom_left
        "Bottom Center" => position.bottom_center
        => position.bottom_right

f_size(s) =>
    switch s
        "Tiny"   => size.tiny
        "Small"  => size.small
        "Large"  => size.large
        => size.normal

g_combo = "📊 Combined TA Table (everything except payload)"
comboPos = f_pos(input.string("Middle Center", "Position", options=["Top Left", "Top Right", "Top Center", "Middle Left", "Middle Right", "Middle Center", "Bottom Left", "Bottom Right", "Bottom Center"], group=g_combo))
comboSz  = f_size(input.string("Small", "Text Size", options=["Tiny", "Small", "Normal", "Large"], group=g_combo))
showMom   = input.bool(true, "Show Momentum Section", group=g_combo)
showTrend = input.bool(true, "Show Trend / MA Section", group=g_combo)
showMacd  = input.bool(true, "Show MACD / Volume Section", group=g_combo)
showVol   = input.bool(true, "Show Volatility Section", group=g_combo)
showIchi  = input.bool(true, "Show Ichimoku / VWAP / Pivots Section", group=g_combo)
showMisc  = input.bool(true, "Show MTF RSI / Misc Section", group=g_combo)

g_pay = "📋 Table: Raw Paste Payload"
showPay   = input.bool(true, "Show Payload Table", group=g_pay)
posPay    = f_pos(input.string("Bottom Left", "Position", options=["Top Left", "Top Right", "Middle Left", "Middle Right", "Bottom Left", "Bottom Right"], group=g_pay))
szPay     = f_size(input.string("Tiny", "Text Size", options=["Tiny", "Small", "Normal", "Large"], group=g_pay))
payRows   = input.int(8, "Split Payload Into N Rows (raise if it still cuts off)", minval=1, maxval=12, group=g_pay)

// ──────────────────────────────────────────────────────────────────
//  ③ CALCULATIONS (unchanged formulas — verified against Tradzy QSM)
// ──────────────────────────────────────────────────────────────────
f_donchianMid(len) => math.avg(ta.highest(high, len), ta.lowest(low, len))
tenkan_val = f_donchianMid(ichiConv)
kijun_val  = f_donchianMid(ichiBase)
spanA_val  = math.avg(tenkan_val, kijun_val)
spanB_val  = f_donchianMid(ichiSpanB)
chikou_val = close

jaw_val   = ta.wma(hl2, alliJawLen)[alliJawShift]
teeth_val = ta.wma(hl2, alliTeethLen)[alliTeethShift]
lips_val  = ta.wma(hl2, alliLipsLen)[alliLipsShift]

vwap_val   = ta.vwap(hlc3)
vwap_std   = ta.stdev(close, 20)
vwap_u1    = vwap_val + 1 * vwap_std
vwap_l1    = vwap_val - 1 * vwap_std
vwap_u2    = vwap_val + 2 * vwap_std
vwap_l2    = vwap_val - 2 * vwap_std
vwap_pos_str = close > vwap_val ? "above" : "below"

ao_val      = ta.sma(hl2, aoFastLen) - ta.sma(hl2, aoSlowLen)
ao_prev_val = ao_val[1]

elderEma   = ta.ema(close, elderEmaLen)
bull_power = high - elderEma
bear_power = low - elderEma

dpo_val = close - ta.sma(close, dpoLen)[math.floor(dpoLen / 2) + 1]

cmo_val = ta.cmo(close, cmoLen)

[bb_mid, bb_upper, bb_lower] = ta.bb(close, bbLen, bbMult)
bb_width_val   = (bb_upper - bb_lower) / bb_mid * 100
bb_pctb_val    = (close - bb_lower) / (bb_upper - bb_lower)
bb_upper_price = ta.sma(close, bbLen) + bbMult * ta.stdev(close, bbLen)
bb_lower_price = ta.sma(close, bbLen) - bbMult * ta.stdev(close, bbLen)
bb_mid_price   = ta.sma(close, bbLen)

kc_mid   = ta.ema(close, kcLen)
kc_atr   = ta.atr(kcAtrLen)
kc_upper = kc_mid + kcMult * kc_atr
kc_lower = kc_mid - kcMult * kc_atr

log_ret = math.log(close / close[1])
hv_val  = ta.stdev(log_ret, hvLen) * math.sqrt(252) * 100

clv     = ((close - low) - (high - close)) / (high - low)
ad_val  = ta.cum(nz(clv * volume))
ad_prev = ad_val[1]

cmf_mfv = high != low ? ((close - low) - (high - close)) / (high - low) * volume : 0.0
cmf_val = math.sum(cmf_mfv, cmfLen) / math.sum(volume, cmfLen)

mfi_dx_val  = (high - low) / volume
mfi_dx_prev = mfi_dx_val[1]

[plus_di, minus_di, adx_val] = ta.dmi(adxDiLen, adxLen)

mfi_val        = ta.mfi(hlc3, mfiLen)
cci_val        = ta.cci(hlc3, cciLen)
williams_val   = ta.wpr(williamsLen)
[macd_line, macd_signal_line, macd_hist] = ta.macd(close, macdFast, macdSlow, macdSignal)
macd_val_now   = macd_line
macd_val_prev  = macd_line[1]
obv_val        = ta.cum(volume * math.sign(ta.change(close)))
obv_val_prev   = obv_val[1]
trix_e1        = ta.ema(close, 18)
trix_e2        = ta.ema(trix_e1, 18)
trix_e3        = ta.ema(trix_e2, 18)
trix_val       = 100 * (trix_e3 - trix_e3[1]) / trix_e3[1]
roc_val        = ta.roc(close, rocLen)
[supertrend_line, _stDir] = ta.supertrend(supertrendFactor, supertrendAtrLen)
supertrend_sig = close > supertrend_line ? 1 : -1
sar_val        = ta.sar(sarStart, sarInc, sarMax)

ema9_val   = ta.ema(close, ema9Len)
ema21_val  = ta.ema(close, ema21Len)
ema50_val  = ta.ema(close, ema50Len)
ema100_val = ta.ema(close, ema100Len)
ema200_val = ta.ema(close, ema200Len)
ema21_pos  = close > ema21_val ? 1 : 0

vol_pct  = volume / ta.sma(volume, volSmaLen) * 100
rvol_avg = ta.sma(volume, rvolLen)
rvol_val = rvol_avg > 0 ? volume / rvol_avg : 1.0

atr_pct  = ta.atr(atrLen) / close * 100
atr_raw  = ta.atr(atrLen)
tr_val   = ta.tr(true)

rsi_val     = ta.rsi(close, rsiLen)
rsi_prev    = rsi_val[1]
stoch_k     = ta.stoch(close, high, low, stochLen)
stoch_d     = ta.sma(stoch_k, stochDLen)
stoch_rsi_k = ta.rsi(rsi_val, stochRsiLen)

rsi_htf1h = request.security(syminfo.tickerid, "60",  ta.rsi(close, rsiLen), lookahead=barmerge.lookahead_off)
rsi_htf4h = request.security(syminfo.tickerid, "240", ta.rsi(close, rsiLen), lookahead=barmerge.lookahead_off)
rsi_htf1d = request.security(syminfo.tickerid, "1D",  ta.rsi(close, rsiLen), lookahead=barmerge.lookahead_off)

wma20_val = ta.wma(close, wmaLen)
hma_val   = ta.wma(2 * ta.wma(close, math.floor(hmaLen / 2)) - ta.wma(close, hmaLen), math.round(math.sqrt(hmaLen)))
hma_prev  = hma_val[1]
vwma_val  = ta.vwma(close, vwmaLen)
dema_e1   = ta.ema(close, demaLen)
dema_val  = 2 * dema_e1 - ta.ema(dema_e1, demaLen)
tema_e1   = ta.ema(close, temaLen)
tema_e2   = ta.ema(tema_e1, temaLen)
tema_e3   = ta.ema(tema_e2, temaLen)
tema_val  = 3 * tema_e1 - 3 * tema_e2 + tema_e3

lr_val   = ta.linreg(close, lrLen, 0)
lr_prev  = ta.linreg(close, lrLen, 1)
lr_slope = (lr_val - lr_prev) / close * 100

sqz_on   = bb_lower > kc_lower and bb_upper < kc_upper
sqz_val  = ta.linreg(close - math.avg(math.avg(ta.highest(high, squeezeLen), ta.lowest(low, squeezeLen)), ta.sma(close, squeezeLen)), squeezeLen, 0)
sqz_prev = ta.linreg(close - math.avg(math.avg(ta.highest(high, squeezeLen), ta.lowest(low, squeezeLen)), ta.sma(close, squeezeLen)), squeezeLen, 1)

chop_atr = math.sum(ta.atr(1), chopLen)
chop_hl  = ta.highest(high, chopLen) - ta.lowest(low, chopLen)
chop_val = 100 * math.log10(chop_atr / chop_hl) / math.log10(chopLen)

dc_upper = ta.highest(high, dcLen)
dc_lower = ta.lowest(low, dcLen)
dc_mid   = (dc_upper + dc_lower) / 2

stc_macd = ta.ema(close, stcFast) - ta.ema(close, stcSlow)
stc_d1_h = ta.highest(stc_macd, stcCycle)
stc_d1_l = ta.lowest(stc_macd, stcCycle)
var float stc_f1 = na
stc_f1  := stc_d1_h != stc_d1_l ? (stc_macd - stc_d1_l) / (stc_d1_h - stc_d1_l) * 100 : nz(stc_f1[1])
stc_pf1  = ta.ema(stc_f1, 2)
stc_d2_h = ta.highest(stc_pf1, stcCycle)
stc_d2_l = ta.lowest(stc_pf1, stcCycle)
var float stc_f2 = na
stc_f2  := stc_d2_h != stc_d2_l ? (stc_pf1 - stc_d2_l) / (stc_d2_h - stc_d2_l) * 100 : nz(stc_f2[1])
stc_val  = ta.ema(stc_f2, 2)
stc_prev = stc_val[1]

vol_up    = volume * (close > open ? 1 : 0)
vol_dn    = volume * (close < open ? 1 : 0)
vol_delta = ta.ema(vol_up - vol_dn, volDeltaLen)
vol_d_prev= vol_delta[1]

pp_val = (high[1] + low[1] + close[1]) / 3
r1_val = 2 * pp_val - low[1]
s1_val = 2 * pp_val - high[1]
r2_val = pp_val + (high[1] - low[1])
s2_val = pp_val - (high[1] - low[1])

aroon_up = (ta.highestbars(high, aroonLen + 1) + aroonLen) / aroonLen * 100
aroon_dn = (ta.lowestbars(low,  aroonLen + 1) + aroonLen) / aroonLen * 100

// ──────────────────────────────────────────────────────────────────
//  ④ "key=value" STRINGS — single source of truth
//     priceDec controls price-like values, oscDec controls oscillators
// ──────────────────────────────────────────────────────────────────
kv_rsi          = "rsi=" + str.tostring(math.round(rsi_val, oscDec))
kv_rsiPrev      = "rsiPrev=" + str.tostring(math.round(rsi_prev, oscDec))
kv_stoch        = "stoch=" + str.tostring(math.round(stoch_k, oscDec))
kv_stochD       = "stochD=" + str.tostring(math.round(stoch_d, oscDec))
kv_stochRsiK    = "stochRsiK=" + str.tostring(math.round(stoch_rsi_k, oscDec))
kv_adx          = "adx=" + str.tostring(math.round(adx_val, oscDec))
kv_plusDI       = "plusDI=" + str.tostring(math.round(plus_di, oscDec))
kv_minusDI      = "minusDI=" + str.tostring(math.round(minus_di, oscDec))
kv_cci          = "cci=" + str.tostring(math.round(cci_val, oscDec))
kv_williams     = "williams=" + str.tostring(math.round(williams_val, oscDec))
kv_mfi          = "mfi=" + str.tostring(math.round(mfi_val, oscDec))
kv_rocVal       = "rocVal=" + str.tostring(math.round(roc_val, oscDec))
kv_cmo          = "cmo=" + str.tostring(math.round(cmo_val, oscDec))

kv_ema9         = "ema9=" + str.tostring(math.round(ema9_val, priceDec))
kv_ema21        = "ema21=" + str.tostring(math.round(ema21_val, priceDec))
kv_ema21pos     = "ema21pos=" + str.tostring(ema21_pos)
kv_ema50        = "ema50=" + str.tostring(math.round(ema50_val, priceDec))
kv_ema100       = "ema100=" + str.tostring(math.round(ema100_val, priceDec))
kv_ema200       = "ema200=" + str.tostring(math.round(ema200_val, priceDec))
kv_wma20        = "wma20=" + str.tostring(math.round(wma20_val, priceDec))
kv_hmaVal       = "hmaVal=" + str.tostring(math.round(hma_val, priceDec))
kv_hmaPrev      = "hmaPrev=" + str.tostring(math.round(hma_prev, priceDec))

kv_vwmaVal      = "vwmaVal=" + str.tostring(math.round(vwma_val, priceDec))
kv_demaVal      = "demaVal=" + str.tostring(math.round(dema_val, priceDec))
kv_temaVal      = "temaVal=" + str.tostring(math.round(tema_val, priceDec))
kv_supertrend   = "supertrend=" + str.tostring(supertrend_sig)
kv_sarVal       = "sarVal=" + str.tostring(math.round(sar_val, priceDec))
kv_lrSlope      = "lrSlope=" + str.tostring(math.round(lr_slope, priceDec))

kv_macdVal      = "macdVal=" + str.tostring(math.round(macd_val_now, priceDec + 2))
kv_macdPrev     = "macdPrev=" + str.tostring(math.round(macd_val_prev, priceDec + 2))
kv_obvVal       = "obvVal=" + str.tostring(math.round(obv_val, 0))
kv_obvPrev      = "obvPrev=" + str.tostring(math.round(obv_val_prev, 0))
kv_adVal        = "adVal=" + str.tostring(math.round(ad_val, 0))
kv_adPrev       = "adPrev=" + str.tostring(math.round(ad_prev, 0))
kv_cmf          = "cmf=" + str.tostring(math.round(cmf_val, 3))
kv_volPct       = "volPct=" + str.tostring(math.round(vol_pct, oscDec))
kv_rvolVal      = "rvolVal=" + str.tostring(math.round(rvol_val, 3))
kv_volDelta     = "volDelta=" + str.tostring(math.round(vol_delta, 0))
kv_volDeltaPrev = "volDeltaPrev=" + str.tostring(math.round(vol_d_prev, 0))
kv_mfiDx        = "mfiDx=" + str.tostring(math.round(mfi_dx_val, 6))
kv_mfiDxPrev    = "mfiDxPrev=" + str.tostring(math.round(mfi_dx_prev, 6))

kv_atrPct       = "atrPct=" + str.tostring(math.round(atr_pct, oscDec))
kv_atrRaw       = "atrRaw=" + str.tostring(math.round(atr_raw, priceDec))
kv_trVal        = "trVal=" + str.tostring(math.round(tr_val, priceDec))
kv_bbWidth      = "bbWidth=" + str.tostring(math.round(bb_width_val, oscDec))
kv_bbPctB       = "bbPctB=" + str.tostring(math.round(bb_pctb_val, 3))
kv_bbUpperPrice = "bbUpperPrice=" + str.tostring(math.round(bb_upper_price, priceDec))
kv_bbLowerPrice = "bbLowerPrice=" + str.tostring(math.round(bb_lower_price, priceDec))
kv_bbMidPrice   = "bbMidPrice=" + str.tostring(math.round(bb_mid_price, priceDec))
kv_hv           = "hv=" + str.tostring(math.round(hv_val, oscDec))
kv_chopVal      = "chopVal=" + str.tostring(math.round(chop_val, oscDec))

kv_kcUpper      = "kcUpper=" + str.tostring(math.round(kc_upper, priceDec))
kv_kcLower      = "kcLower=" + str.tostring(math.round(kc_lower, priceDec))
kv_dcUpper      = "dcUpper=" + str.tostring(math.round(dc_upper, priceDec))
kv_dcLower      = "dcLower=" + str.tostring(math.round(dc_lower, priceDec))
kv_dcMid        = "dcMid=" + str.tostring(math.round(dc_mid, priceDec))
kv_sqzOn        = "sqzOn=" + str.tostring(sqz_on ? 1 : 0)
kv_sqzVal       = "sqzVal=" + str.tostring(math.round(sqz_val, priceDec))
kv_sqzPrev      = "sqzPrev=" + str.tostring(math.round(sqz_prev, priceDec))
kv_stcVal       = "stcVal=" + str.tostring(math.round(stc_val, oscDec))
kv_stcPrev      = "stcPrev=" + str.tostring(math.round(stc_prev, oscDec))

kv_tenkan       = "tenkan=" + str.tostring(math.round(tenkan_val, priceDec))
kv_kijun        = "kijun=" + str.tostring(math.round(kijun_val, priceDec))
kv_spanA        = "spanA=" + str.tostring(math.round(spanA_val, priceDec))
kv_spanB        = "spanB=" + str.tostring(math.round(spanB_val, priceDec))
kv_chikou       = "chikou=" + str.tostring(math.round(chikou_val, priceDec))
kv_jaw          = "jaw=" + str.tostring(math.round(jaw_val, priceDec))
kv_teeth        = "teeth=" + str.tostring(math.round(teeth_val, priceDec))
kv_lips         = "lips=" + str.tostring(math.round(lips_val, priceDec))

kv_vwapVal      = "vwapVal=" + str.tostring(math.round(vwap_val, priceDec))
kv_vwapPos      = "vwapPos=" + vwap_pos_str
kv_vwapU1       = "vwapU1=" + str.tostring(math.round(vwap_u1, priceDec))
kv_vwapL1       = "vwapL1=" + str.tostring(math.round(vwap_l1, priceDec))
kv_vwapU2       = "vwapU2=" + str.tostring(math.round(vwap_u2, priceDec))
kv_vwapL2       = "vwapL2=" + str.tostring(math.round(vwap_l2, priceDec))
kv_pp           = "pp=" + str.tostring(math.round(pp_val, priceDec))
kv_r1           = "r1=" + str.tostring(math.round(r1_val, priceDec))
kv_s1           = "s1=" + str.tostring(math.round(s1_val, priceDec))
kv_r2           = "r2=" + str.tostring(math.round(r2_val, priceDec))
kv_s2           = "s2=" + str.tostring(math.round(s2_val, priceDec))

kv_rsi1h        = "rsi1h=" + str.tostring(math.round(rsi_htf1h, oscDec))
kv_rsi4h        = "rsi4h=" + str.tostring(math.round(rsi_htf4h, oscDec))
kv_rsi1d        = "rsi1d=" + str.tostring(math.round(rsi_htf1d, oscDec))
kv_aroonUp      = "aroonUp=" + str.tostring(math.round(aroon_up, oscDec))
kv_aroonDn      = "aroonDn=" + str.tostring(math.round(aroon_dn, oscDec))
kv_ao           = "ao=" + str.tostring(math.round(ao_val, priceDec))
kv_aoPrev       = "aoPrev=" + str.tostring(math.round(ao_prev_val, priceDec))
kv_bullPower    = "bullPower=" + str.tostring(math.round(bull_power, priceDec))
kv_bearPower    = "bearPower=" + str.tostring(math.round(bear_power, priceDec))
kv_dpo          = "dpo=" + str.tostring(math.round(dpo_val, priceDec))
kv_trixVal      = "trixVal=" + str.tostring(math.round(trix_val, priceDec))

// ── DERIVED / ALIAS FIELDS — fills every slot the app reads automatically ──
//
// Aliases (app accepts both key names; send both so either parser path works)
kv_diPlus       = "diPlus=" + str.tostring(math.round(plus_di, oscDec))
kv_diMinus      = "diMinus=" + str.tostring(math.round(minus_di, oscDec))
kv_priceAlias   = "price=" + str.tostring(math.round(close, priceDec))
kv_rsiVal       = "rsiVal=" + str.tostring(math.round(rsi_val, oscDec))

// Previous session OHLC (high[1]/low[1]/close[1])
kv_prevH        = "prevH=" + str.tostring(math.round(high[1], priceDec))
kv_prevL        = "prevL=" + str.tostring(math.round(low[1], priceDec))
kv_prevC        = "prevC=" + str.tostring(math.round(close[1], priceDec))

// ── ASSET MOVE % (feeds Position Calculator's volatility finder: move-1d/1w/1m/1y) ──
// Pulls prior close from each higher timeframe via request.security, then computes
// the % move from that close to current price. lookahead_off avoids future-leak.
_move1dRef = request.security(syminfo.tickerid, "D",  close[1], lookahead=barmerge.lookahead_off)
_move1wRef = request.security(syminfo.tickerid, "W",  close[1], lookahead=barmerge.lookahead_off)
_move1mRef = request.security(syminfo.tickerid, "M",  close[1], lookahead=barmerge.lookahead_off)
_move1yRef = request.security(syminfo.tickerid, "12M", close[1], lookahead=barmerge.lookahead_off)
_move1d    = _move1dRef > 0 ? (close - _move1dRef) / _move1dRef * 100 : na
_move1w    = _move1wRef > 0 ? (close - _move1wRef) / _move1wRef * 100 : na
_move1m    = _move1mRef > 0 ? (close - _move1mRef) / _move1mRef * 100 : na
_move1y    = _move1yRef > 0 ? (close - _move1yRef) / _move1yRef * 100 : na
kv_move1d  = "move1d=" + (na(_move1d) ? "0" : str.tostring(math.round(math.abs(_move1d), 2)))
kv_move1w  = "move1w=" + (na(_move1w) ? "0" : str.tostring(math.round(math.abs(_move1w), 2)))
kv_move1m  = "move1m=" + (na(_move1m) ? "0" : str.tostring(math.round(math.abs(_move1m), 2)))
kv_move1y  = "move1y=" + (na(_move1y) ? "0" : str.tostring(math.round(math.abs(_move1y), 2)))

// ── PRICE 3 DAYS AGO (feeds QSM drop-filter: qsm-price-3d) ──
// Daily close from 3 trading days back. Validated rule: RSI<30 + drop>5% over
// 3 days = 75% accuracy (vs 59% baseline) — see app tooltip on qsm-price-3d.
_price3dRef = request.security(syminfo.tickerid, "D", close[3], lookahead=barmerge.lookahead_off)
kv_price3d  = "price3d=" + (na(_price3dRef) ? "0" : str.tostring(math.round(_price3dRef, priceDec)))

// RSI condition: rising / falling / flat (threshold ±1 point to avoid noise)
_rsiDelta       = rsi_val - rsi_prev
kv_rsiCond      = "rsiCond=" + (_rsiDelta > 1.0 ? "rising" : _rsiDelta < -1.0 ? "falling" : "flat")

// EMA position: how many EMAs price is above (9/21/50/100/200)
_emaCnt         = (close > ema9_val ? 1 : 0) + (close > ema21_val ? 1 : 0) + (close > ema50_val ? 1 : 0) + (close > ema100_val ? 1 : 0) + (close > ema200_val ? 1 : 0)
kv_emaPos       = "emaPos=" + (_emaCnt >= 4 ? "above-all" : _emaCnt >= 2 ? "mixed-above" : _emaCnt >= 1 ? "mixed-below" : "below-all")

// Volume regime: derived from volPct thresholds
kv_volRegime    = "volRegime=" + (vol_pct > 200 ? "extreme" : vol_pct > 120 ? "high" : vol_pct > 80 ? "normal" : "low")

// BB chip: overbought/squeeze/oversold from bbPctB
kv_bb           = "bb=" + (bb_pctb_val > 0.8 ? "overbought" : bb_pctb_val < 0.2 ? "oversold" : "squeeze")

// Ichimoku chip: bullish / bearish / neutral — price above/below the cloud (spanA & spanB)
_ichiCloudTop   = math.max(spanA_val, spanB_val)
_ichiCloudBot   = math.min(spanA_val, spanB_val)
kv_ichi         = "ichi=" + (close > _ichiCloudTop ? "bullish" : close < _ichiCloudBot ? "bearish" : "neutral")

// Pivot position chip: above-pivot / below-pivot from classical daily pivot
kv_pivotPos     = "pivotPos=" + (close > pp_val ? "above-pivot" : "below-pivot")

// MTF bias chip: bull / bear / mixed from 1h, 4h, 1d RSI vs 50 midline
_mtfBull        = (rsi_htf1h > 50 ? 1 : 0) + (rsi_htf4h > 50 ? 1 : 0) + (rsi_htf1d > 50 ? 1 : 0)
kv_mtfBias      = "mtfBias=" + (_mtfBull >= 3 ? "full-bull" : _mtfBull >= 2 ? "mixed-bull" : _mtfBull >= 1 ? "mixed-bear" : "full-bear")

// HTF alignment chip: full-align / partial / against-htf (vs current TF RSI direction)
_curRsiDir      = rsi_val > 50
_htfAlignCnt    = (_curRsiDir == (rsi_htf1h > 50) ? 1 : 0) + (_curRsiDir == (rsi_htf4h > 50) ? 1 : 0) + (_curRsiDir == (rsi_htf1d > 50) ? 1 : 0)
kv_htfAlign     = "htfAlign=" + (_htfAlignCnt >= 3 ? "full-align" : _htfAlignCnt >= 2 ? "partial" : "against-htf")

// timeframe.period returns raw TV values ("1","5","15","60","240","1D","1W"...)
// but the Tradzy app's TF_CONFIG / timeframe pills key off short labels
// ("1m","5m","15m","1h","4h","1d","1w"). Convert so TV Import sets the
// correct timeframe pill + adaptive config instead of silently failing
// to match (e.g. raw "240" never matches the "4h" pill).
f_tfLabel() =>
    switch timeframe.period
        "1"   => "1m"
        "3"   => "3m"
        "5"   => "5m"
        "15"  => "15m"
        "30"  => "30m"
        "45"  => "45m"
        "60"  => "1h"
        "120" => "2h"
        "180" => "3h"
        "240" => "4h"
        "1D"  => "1d"
        "1W"  => "1w"
        "1M"  => "1mo"
        => timeframe.period

kv_ticker       = "ticker=" + syminfo.ticker
kv_tf           = "tf=" + f_tfLabel()
kv_price        = "qsmPrice=" + str.tostring(math.round(close, priceDec))

// ──────────────────────────────────────────────────────────────────
//  ⑤ TABLE-DRAWING ENGINE
//     Each category builds an array of "label","value" strings.
//     All sections get written into ONE combined table object
//     (no overlap), stacked top-to-bottom, 5 pairs per row.
// ──────────────────────────────────────────────────────────────────
clrBgA   = color.new(#0a0a0a, 0)
clrBgB   = color.new(#141414, 0)
clrLbl   = color.rgb(138, 160, 184)
clrVal   = color.rgb(184, 245, 0)
clrLime  = color.rgb(184, 245, 0)
clrLime2 = color.rgb(140, 200, 0)
clrBlack = color.new(#000000, 0)

PAIRS_PER_ROW = 5
COLS = PAIRS_PER_ROW * 2

f_pushKV(arr, lbl, val) =>
    array.push(arr, lbl)
    array.push(arr, val)

f_dataRows(kvArr) =>
    n = array.size(kvArr) / 2
    int(math.ceil(n / float(PAIRS_PER_ROW)))

// Draws one section (title row + its grid rows) starting at row `startRow`
// inside an already-created table. Returns the next free row index.
f_drawSection(tbl, startRow, titleTxt, kvArr, sz) =>
    n = array.size(kvArr) / 2
    dataRows = f_dataRows(kvArr)
    table.cell(tbl, 0, startRow, titleTxt, text_color=clrBlack, text_size=sz, bgcolor=clrLime, text_halign=text.align_left)
    table.merge_cells(tbl, 0, startRow, COLS - 1, startRow)
    idx = 0
    for r = 0 to dataRows - 1
        rowNum = startRow + 1 + r
        bg = r % 2 == 0 ? clrBgA : clrBgB
        for c = 0 to PAIRS_PER_ROW - 1
            lblCol = c * 2
            valCol = c * 2 + 1
            if idx < n
                lbl = array.get(kvArr, idx * 2)
                val = array.get(kvArr, idx * 2 + 1)
                table.cell(tbl, lblCol, rowNum, lbl, text_color=clrLbl, text_size=sz, bgcolor=bg, text_halign=text.align_left)
                table.cell(tbl, valCol, rowNum, val, text_color=clrVal, text_size=sz, bgcolor=bg, text_halign=text.align_left)
            else
                table.cell(tbl, lblCol, rowNum, "", text_color=clrLbl, text_size=sz, bgcolor=bg)
                table.cell(tbl, valCol, rowNum, "", text_color=clrVal, text_size=sz, bgcolor=bg)
            idx += 1
    startRow + 1 + dataRows

// ──────────────────────────────────────────────────────────────────
//  ⑥ PAYLOAD SPLITTER — breaks the big "|" joined string into N
//     rows, only cutting at "|" boundaries, so nothing is sliced
//     mid-field. Raise "Split Payload Into N Rows" if a line is
//     still too long to read/copy on your screen.
// ──────────────────────────────────────────────────────────────────
f_drawPayload(pos, sz, rows, payloadStr) =>
    tokens = str.split(payloadStr, "|")
    ntok = array.size(tokens)
    totalLen = str.length(payloadStr)
    targetLen = totalLen / rows
    lines = array.new<string>()
    curLine = ""
    for i = 0 to ntok - 1
        tok = array.get(tokens, i)
        candidate = curLine == "" ? tok : curLine + "|" + tok
        if str.length(candidate) > targetLen and curLine != "" and array.size(lines) < rows - 1
            array.push(lines, curLine)
            curLine := tok
        else
            curLine := candidate
    array.push(lines, curLine)
    nLines = array.size(lines)
    tbl = table.new(pos, 1, nLines + 1, border_width=1, border_color=color.new(#1a1a1a, 0), frame_color=color.new(#1a1a1a, 0), frame_width=1)
    table.cell(tbl, 0, 0, "◈ RAW PASTE PAYLOAD — copy each line into Tradzy TV Import", text_color=clrBlack, text_size=sz, bgcolor=clrLime, text_halign=text.align_left)
    for i = 0 to nLines - 1
        bg = i % 2 == 0 ? clrBgA : clrBgB
        table.cell(tbl, 0, i + 1, array.get(lines, i), text_color=clrLime, text_size=sz, bgcolor=bg, text_halign=text.align_left)

// ──────────────────────────────────────────────────────────────────
//  ⑦ BUILD + DRAW (only on the last bar)
// ──────────────────────────────────────────────────────────────────
if barstate.islast
    momArr = array.new<string>()
    f_pushKV(momArr, "Symbol", kv_ticker)
    f_pushKV(momArr, "Timeframe", kv_tf)
    f_pushKV(momArr, "Price", kv_price)
    f_pushKV(momArr, "RSI", kv_rsi)
    f_pushKV(momArr, "RSI Prev", kv_rsiPrev)
    f_pushKV(momArr, "Stoch%K", kv_stoch)
    f_pushKV(momArr, "Stoch%D", kv_stochD)
    f_pushKV(momArr, "StochRSI%K", kv_stochRsiK)
    f_pushKV(momArr, "ADX", kv_adx)
    f_pushKV(momArr, "+DI", kv_plusDI)
    f_pushKV(momArr, "-DI", kv_minusDI)
    f_pushKV(momArr, "CCI", kv_cci)
    f_pushKV(momArr, "Williams%R", kv_williams)
    f_pushKV(momArr, "MFI", kv_mfi)
    f_pushKV(momArr, "ROC", kv_rocVal)
    f_pushKV(momArr, "CMO", kv_cmo)

    trendArr = array.new<string>()
    f_pushKV(trendArr, "EMA9", kv_ema9)
    f_pushKV(trendArr, "EMA21", kv_ema21)
    f_pushKV(trendArr, "EMA21pos", kv_ema21pos)
    f_pushKV(trendArr, "EMA50", kv_ema50)
    f_pushKV(trendArr, "EMA100", kv_ema100)
    f_pushKV(trendArr, "EMA200", kv_ema200)
    f_pushKV(trendArr, "WMA", kv_wma20)
    f_pushKV(trendArr, "Hull", kv_hmaVal)
    f_pushKV(trendArr, "Hull Prev", kv_hmaPrev)
    f_pushKV(trendArr, "VWMA", kv_vwmaVal)
    f_pushKV(trendArr, "DEMA", kv_demaVal)
    f_pushKV(trendArr, "TEMA", kv_temaVal)
    f_pushKV(trendArr, "Supertrend", kv_supertrend)
    f_pushKV(trendArr, "SAR", kv_sarVal)
    f_pushKV(trendArr, "LR Slope%", kv_lrSlope)

    macdArr = array.new<string>()
    f_pushKV(macdArr, "MACD", kv_macdVal)
    f_pushKV(macdArr, "MACD Prev", kv_macdPrev)
    f_pushKV(macdArr, "OBV", kv_obvVal)
    f_pushKV(macdArr, "OBV Prev", kv_obvPrev)
    f_pushKV(macdArr, "A/D", kv_adVal)
    f_pushKV(macdArr, "A/D Prev", kv_adPrev)
    f_pushKV(macdArr, "CMF", kv_cmf)
    f_pushKV(macdArr, "Vol%", kv_volPct)
    f_pushKV(macdArr, "RVOL", kv_rvolVal)
    f_pushKV(macdArr, "VolDelta", kv_volDelta)
    f_pushKV(macdArr, "VolDeltaPrev", kv_volDeltaPrev)
    f_pushKV(macdArr, "MFI-DX", kv_mfiDx)
    f_pushKV(macdArr, "MFI-DX Prev", kv_mfiDxPrev)

    volArr = array.new<string>()
    f_pushKV(volArr, "ATR%", kv_atrPct)
    f_pushKV(volArr, "ATR raw", kv_atrRaw)
    f_pushKV(volArr, "TrueRange", kv_trVal)
    f_pushKV(volArr, "BBWidth", kv_bbWidth)
    f_pushKV(volArr, "BB%B", kv_bbPctB)
    f_pushKV(volArr, "BB Upper", kv_bbUpperPrice)
    f_pushKV(volArr, "BB Lower", kv_bbLowerPrice)
    f_pushKV(volArr, "BB Mid", kv_bbMidPrice)
    f_pushKV(volArr, "HV", kv_hv)
    f_pushKV(volArr, "Choppiness", kv_chopVal)
    f_pushKV(volArr, "KC Upper", kv_kcUpper)
    f_pushKV(volArr, "KC Lower", kv_kcLower)
    f_pushKV(volArr, "DC Upper", kv_dcUpper)
    f_pushKV(volArr, "DC Lower", kv_dcLower)
    f_pushKV(volArr, "DC Mid", kv_dcMid)
    f_pushKV(volArr, "SqzOn", kv_sqzOn)
    f_pushKV(volArr, "Sqz Val", kv_sqzVal)
    f_pushKV(volArr, "Sqz Prev", kv_sqzPrev)
    f_pushKV(volArr, "STC", kv_stcVal)
    f_pushKV(volArr, "STC Prev", kv_stcPrev)

    ichiArr = array.new<string>()
    f_pushKV(ichiArr, "Tenkan", kv_tenkan)
    f_pushKV(ichiArr, "Kijun", kv_kijun)
    f_pushKV(ichiArr, "Span A", kv_spanA)
    f_pushKV(ichiArr, "Span B", kv_spanB)
    f_pushKV(ichiArr, "Chikou", kv_chikou)
    f_pushKV(ichiArr, "Jaw", kv_jaw)
    f_pushKV(ichiArr, "Teeth", kv_teeth)
    f_pushKV(ichiArr, "Lips", kv_lips)
    f_pushKV(ichiArr, "VWAP", kv_vwapVal)
    f_pushKV(ichiArr, "VWAP Pos", kv_vwapPos)
    f_pushKV(ichiArr, "VWAP+1σ", kv_vwapU1)
    f_pushKV(ichiArr, "VWAP-1σ", kv_vwapL1)
    f_pushKV(ichiArr, "VWAP+2σ", kv_vwapU2)
    f_pushKV(ichiArr, "VWAP-2σ", kv_vwapL2)
    f_pushKV(ichiArr, "Pivot", kv_pp)
    f_pushKV(ichiArr, "R1", kv_r1)
    f_pushKV(ichiArr, "S1", kv_s1)
    f_pushKV(ichiArr, "R2", kv_r2)
    f_pushKV(ichiArr, "S2", kv_s2)

    miscArr = array.new<string>()
    f_pushKV(miscArr, "1H RSI", kv_rsi1h)
    f_pushKV(miscArr, "4H RSI", kv_rsi4h)
    f_pushKV(miscArr, "1D RSI", kv_rsi1d)
    f_pushKV(miscArr, "Aroon Up", kv_aroonUp)
    f_pushKV(miscArr, "Aroon Dn", kv_aroonDn)
    f_pushKV(miscArr, "AO", kv_ao)
    f_pushKV(miscArr, "AO Prev", kv_aoPrev)
    f_pushKV(miscArr, "Bull Pwr", kv_bullPower)
    f_pushKV(miscArr, "Bear Pwr", kv_bearPower)
    f_pushKV(miscArr, "DPO", kv_dpo)
    f_pushKV(miscArr, "TRIX", kv_trixVal)
    f_pushKV(miscArr, "Move 1D%", kv_move1d)
    f_pushKV(miscArr, "Move 1W%", kv_move1w)
    f_pushKV(miscArr, "Move 1M%", kv_move1m)
    f_pushKV(miscArr, "Move 1Y%", kv_move1y)
    f_pushKV(miscArr, "Price 3D Ago", kv_price3d)

    // ── compute total rows needed for the combined table ──
    totalRows = 0
    totalRows += showMom   ? 1 + f_dataRows(momArr)   : 0
    totalRows += showTrend ? 1 + f_dataRows(trendArr) : 0
    totalRows += showMacd  ? 1 + f_dataRows(macdArr)  : 0
    totalRows += showVol   ? 1 + f_dataRows(volArr)   : 0
    totalRows += showIchi  ? 1 + f_dataRows(ichiArr)  : 0
    totalRows += showMisc  ? 1 + f_dataRows(miscArr)  : 0

    if totalRows > 0
        comboTbl = table.new(comboPos, COLS, totalRows, border_width=1, border_color=color.new(#1a1a1a, 0), frame_color=color.new(#1a1a1a, 0), frame_width=1)
        rowPtr = 0
        if showMom
            rowPtr := f_drawSection(comboTbl, rowPtr, "◈ MOMENTUM", momArr, comboSz)
        if showTrend
            rowPtr := f_drawSection(comboTbl, rowPtr, "◈ TREND / MOVING AVERAGES", trendArr, comboSz)
        if showMacd
            rowPtr := f_drawSection(comboTbl, rowPtr, "◈ MACD / VOLUME", macdArr, comboSz)
        if showVol
            rowPtr := f_drawSection(comboTbl, rowPtr, "◈ VOLATILITY", volArr, comboSz)
        if showIchi
            rowPtr := f_drawSection(comboTbl, rowPtr, "◈ ICHIMOKU / VWAP / PIVOTS", ichiArr, comboSz)
        if showMisc
            rowPtr := f_drawSection(comboTbl, rowPtr, "◈ MTF RSI / MISC", miscArr, comboSz)

    // ── PAYLOAD (own separate table, splits into payRows lines) ──
    if showPay
        // ── BLOCK 1: Identity + Momentum ──
        p1 = kv_ticker + "|" + kv_tf + "|" + kv_price + "|" + kv_priceAlias + "|" + kv_rsiVal + "|" + kv_rsi + "|" + kv_rsiPrev + "|" + kv_rsiCond + "|" + kv_stoch + "|" + kv_stochD + "|" + kv_stochRsiK + "|" + kv_adx + "|" + kv_plusDI + "|" + kv_minusDI + "|" + kv_diPlus + "|" + kv_diMinus + "|" + kv_cci + "|" + kv_williams + "|" + kv_mfi + "|" + kv_rocVal + "|" + kv_cmo
        // ── BLOCK 2: Trend / MAs ──
        p2 = kv_ema9 + "|" + kv_ema21 + "|" + kv_ema21pos + "|" + kv_ema50 + "|" + kv_ema100 + "|" + kv_ema200 + "|" + kv_emaPos + "|" + kv_wma20 + "|" + kv_hmaVal + "|" + kv_hmaPrev + "|" + kv_vwmaVal + "|" + kv_demaVal + "|" + kv_temaVal + "|" + kv_supertrend + "|" + kv_sarVal + "|" + kv_lrSlope
        // ── BLOCK 3: MACD / Volume ──
        p3 = kv_macdVal + "|" + kv_macdPrev + "|" + kv_obvVal + "|" + kv_obvPrev + "|" + kv_adVal + "|" + kv_adPrev + "|" + kv_cmf + "|" + kv_volPct + "|" + kv_rvolVal + "|" + kv_volDelta + "|" + kv_volDeltaPrev + "|" + kv_mfiDx + "|" + kv_mfiDxPrev + "|" + kv_volRegime
        // ── BLOCK 4: Volatility ──
        p4 = kv_atrPct + "|" + kv_atrRaw + "|" + kv_trVal + "|" + kv_bbWidth + "|" + kv_bbPctB + "|" + kv_bbUpperPrice + "|" + kv_bbLowerPrice + "|" + kv_bbMidPrice + "|" + kv_bb + "|" + kv_hv + "|" + kv_chopVal + "|" + kv_kcUpper + "|" + kv_kcLower + "|" + kv_dcUpper + "|" + kv_dcLower + "|" + kv_dcMid + "|" + kv_sqzOn + "|" + kv_sqzVal + "|" + kv_sqzPrev + "|" + kv_stcVal + "|" + kv_stcPrev
        // ── BLOCK 5: Ichimoku / VWAP / Pivots ──
        p5 = kv_tenkan + "|" + kv_kijun + "|" + kv_spanA + "|" + kv_spanB + "|" + kv_chikou + "|" + kv_ichi + "|" + kv_jaw + "|" + kv_teeth + "|" + kv_lips + "|" + kv_vwapVal + "|" + kv_vwapPos + "|" + kv_vwapU1 + "|" + kv_vwapL1 + "|" + kv_vwapU2 + "|" + kv_vwapL2 + "|" + kv_pp + "|" + kv_r1 + "|" + kv_s1 + "|" + kv_r2 + "|" + kv_s2 + "|" + kv_pivotPos
        // ── BLOCK 6: MTF / Misc / Derived ──
        p6 = kv_rsi1h + "|" + kv_rsi4h + "|" + kv_rsi1d + "|" + kv_mtfBias + "|" + kv_htfAlign + "|" + kv_aroonUp + "|" + kv_aroonDn + "|" + kv_ao + "|" + kv_aoPrev + "|" + kv_bullPower + "|" + kv_bearPower + "|" + kv_dpo + "|" + kv_trixVal
        // ── BLOCK 7: Previous session + price aliases ──
        p7 = kv_prevH + "|" + kv_prevL + "|" + kv_prevC
        // ── BLOCK 8: Asset Move % (volatility finder) ──
        p8 = kv_move1d + "|" + kv_move1w + "|" + kv_move1m + "|" + kv_move1y + "|" + kv_price3d
        fullPayload = p1 + "|" + p2 + "|" + p3 + "|" + p4 + "|" + p5 + "|" + p6 + "|" + p7 + "|" + p8
        f_drawPayload(posPay, szPay, payRows, fullPayload)
TRADER · VOID SIGNAL LVL 1
🔥 0
👆 0.0 XP
🎵 0.0 XP
0 / 100 XP
0% TO NEXT RANK
TRADZY 2.0 — SELF-SHARPENING WIN RATE: BUILDING STREAK: 0 BEST PATTERN: — BALANCE: $1000 BEST TF: — TOTAL TRADES: 0 EDGE LEVEL: BUILDING
⚡ VOID ENGINE
PATTERN
0 data pts
TIMEFRAME
0 data pts
DIRECTION
0 data pts
SESSION
0 data pts
CONFIGURE YOUR TRADE ON THE LEFT
◈ VOID ENGINE · SETUP SCORER & EDGE JOURNAL
◈ SESSION PULSE
Loading session…
—%
YOUR WR HERE
◈ VOID INSIGHT
◈ EQUITY CURVE
BALANCE
TOTAL P&L
PEAK BAL
MAX DRAWDOWN
SHARPE RATIO
◈ DRAWDOWN %
P&L FLOW
WIN/LOSS STREAK
ROLLING WIN RATE
SCORE DIST
R:R PROFILE
OUTCOME SPLIT
MONTHLY P&L
◈ ROLLING WINDOW — LAST 5 / 10 / 20 TRADES
5T WIN%
10T WIN%
20T WIN%
5T P&L
10T P&L
20T P&L
◈ QUANT METRICS
PROFIT FACTOR
EXPECTANCY
CALMAR
SORTINO
ULCER IDX
KELLY %
RIVAL:
GOAL:
REGIME:
DLL:
REAL TRADES:
◈ WIN RATE BY TIMEFRAME — OVER TIME ▸ SHOW
Log trades with timeframes to unlock temporal win rate view.
◈ MAE VS STOP PLACEMENT — STOP SIZE DIAGNOSTIC ▸ SHOW
Log trades with MAE to unlock stop placement analysis.
◈ EXIT QUALITY OVER TIME — CAPTURE RATE TREND ▸ SHOW
Log exit prices on trades to unlock capture rate trend.
◈ SESSION P&L ANALYSIS — IDENTIFY PROBLEM WINDOWS ▸ SHOW
Log trades with session data to unlock session P&L breakdown.
TRADE LOG
0TRADES
WIN RATE
TOTAL P&L
CUR STREAK
AVG R:R
PROFIT FACTOR
ALL
WINS
LOSSES
BREAKEVEN
LONG
SHORT
A+ ONLY
ANALYZE A TRADE FIRST
THEN LOG YOUR RESULTS
0
TRADES
0%
WIN RATE
AVG SCORE
PROFIT FACTOR
EXPECTANCY $
SHARPE-LIKE
MAX DD%
BEST WIN
■ WINS■ BE■ LOSS
OUTCOME DISTRIBUTION
PATTERN PERFORMANCE
BEST CONDITIONS
SCORE vs OUTCOME
⚠ TOP MISTAKES
TIMEFRAME BREAKDOWN
CONSECUTIVE RUNS
TRADE DURATION STATS
EXIT QUALITY & CAPTURE ANALYSIS planned R vs actual R — requires exit price logged
MAE / MFE EXCURSIONS
EDGE SCORE BUCKETS
◈ VOID ORACLE — WHAT'S WORKING
◈ MONTHLY AUTO-REPORT
Loading…
◈ PAIR CORRELATION MATRIX
Run an analysis first — your current pair will be highlighted in the matrix.
2025
BEST DAY
WORST DAY
WIN DAYS
0
of 0 trading days
BEST STREAK
0
WIN DAYS IN A ROW
AVG WINS/WEEK
TRADES PER WEEK
BEST WEEKDAY
P&L BY WEEKDAY
No trade
Small win
Big win
Small loss
Big loss
Mixed day
⚠ DAILY LOSS LIMIT BREACH TRACKER
Set your own limit. No restrictions — just awareness of your pattern.
--:-- UTC
CALCULATING…
24H SESSION MAP (UTC)
SESSION PERFORMANCE P&L BY SESSION

Tag sessions when logging trades to build this analysis.

DAILY LOSS LIMIT RISK GUARD
0% used
SESSION PLAYBOOK
🌏 ASIAN
00:00–08:00 UTC
Range-bound. Mark H/L for London breakout. Low volume = fakeout risk. Best: Sydney pairs (AUD, NZD).
🇬🇧 LONDON
07:00–16:00 UTC
Highest volatility. Break of Asian range. EUR/GBP pairs peak. Best momentum setups 07:00–10:00 UTC.
🇺🇸 NEW YORK
12:00–21:00 UTC
News events (US data 13:30 UTC). Overlap 12–16 UTC most liquid. Reversals common 14–16 UTC NY.
⚡ OVERLAP
12:00–16:00 UTC
Highest liquidity window. Tight spreads. Best for breakouts & trend continuations. Watch for stop hunts.
SETUP LEADERBOARD YOUR BEST SETUPS
◈ VOID LOG
LEARNS FROM YOUR LOGGED TRADES

Every logged trade feeds this heatmap. Discover which patterns, conditions, and behaviors actually make you money.

MIN TRADES TO SHOW:
1+
3+
5+
10+
CANDLE PATTERNS
SMC / MARKET STRUCTURE
CHART PATTERNS
TRADE BEHAVIOR OUTCOMES
TIMEFRAME WIN RATES
TRADE DIRECTION
SESSION WIN RATES
≥65% WR
50–65% WR
40–50% WR
<40% WR
<min trades
◈ PERFORMANCE SCANNER
YOUR EDGE · PERSONAL WIN RATES · BEST CONDITIONS FROM YOUR LOG
TODAY'S XP
0 XP
Log a trade to earn XP
0🔥
DAY STREAK · 🛡️3/WK
VOID LEVEL
1 VOID SIGNAL
NEXT MILESTONE
Aura Pulse
— levels away
BLOCK LVL 1–5
1 0 XP 5 → UNLOCK
0:00 PLAYED · 0.0 XP
DAILY MISSIONS RESET AT MIDNIGHT UTC

Complete missions to earn bonus XP and build consistent habits. Missions reset daily.

WEEKLY CHALLENGES BONUS XP
WEEKLY MARKET BIAS BOARD MANUAL · REVIEW SUNDAY

Set your weekly directional bias for major assets. Refreshes your market context before every trading session.

DXY IMPACT REMINDER
📈 DXY BULL → Risk-off: BTC/ETH/Gold typically under pressure
📉 DXY BEAR → Risk-on: BTC/ETH/Gold typically benefit
⚡ DXY RANGING → Pair-specific analysis required
WYCKOFF PHASES
ACCUM → Institutions quietly buying at lows — wait for markup confirmation
MARKUP → Price trending up — ride with trend, buy dips to OB/FVG
DISTRIB → Smart money selling to retail — reduce longs, watch for CHoCH
MARKDOWN → Downtrend — short bounces, ride to next support
◈ ACADEMY
TRADING EDUCATION · FORMULAS · RISK RULES · BEGINNER TO PRO
0
CONCEPTS
12
FORMULAS
0/0
READ
0
LEARN XP
◈ HOW TO USE TRADZY
YOUR COMPLETE QUICK-START GUIDE
1
CHECK THE SESSION CLOCK
Look at the clock at the top. It shows which market is live — Asian, London, or New York. For best conditions trade during London or NY overlap. Asian session = quieter, more false moves.
2
FILL IN THE ANALYSIS TAB
Go to ANALYSIS. Fill in your trend, EMA position, RSI value, market structure, and key levels (entry, SL, TP). The more signals you fill in, the more accurate the score and Hold Plan become.
3
SET YOUR RISK
In the RISK MANAGEMENT section inside Analysis, enter your account size and use the Position Size Calculator. Only risk 1–2% per trade. Never skip this — it's what keeps you in the game long-term.
4
CLICK ◈ ANALYZE
Press the ANALYZE TRADE button (or hit Enter). TRADZY scores your setup out of 100, runs quant math, and shows a LONG / SHORT / WAIT verdict with confidence %. Score ≥ 78 = execute. Below 65 = wait.
5
READ THE ALPHA MATRIX
Below your score you'll find the Alpha Matrix — it shows the Hold & Exit Plan, Bayesian edge, regime, and signal correlation. Tap the ? icons next to each section to learn what each metric means.
6
LOG YOUR TRADE RESULT
After the trade closes, go to TRADE LOG and record the outcome. Over time, TRADZY learns your personal edge. The VOID LOG tab shows your best and worst setups so you can improve systematically.
⌨ HOTKEYS — Enter: Analyze · M: Toggle music · Number keys: Switch tabs
⚡ BEGINNER MODE — Toggle in Analysis to hide advanced fields and see a simple 3-line verdict
📊 QUICK-FILL TEMPLATES — 5 buttons above Analyze for instant setup pre-population
THE ALPHA MATRIX — EXPLAINED
◈ HOLD & EXIT PLAN — Tells you how long to hold, how to trail your stop, and when to take partial profits based on your TF and regime. Appears right after your score verdict.
BAYESIAN POSTERIOR — Your personalized win probability updated from your trade history. Starts at your base rate and adjusts up/down based on current conditions.
STAT REGIME — Market condition: TRENDING (best for breakouts), DEVELOPING (early trend), RANGING (fades), CHOPPY (reduce size or skip). Score adjusts automatically.
SIGNAL CORRELATION — Warns when your indicators are measuring the same thing (e.g. RSI + Stoch = both measure momentum). Look for signals from 4 different clusters for real confluence.
VMI (Volatility Momentum Index) — Composite metric combining ATR volatility with momentum. Positive = conditions favor entry. Negative = vol is against you.
◈ HOW TO USE TRADZY

Follow these steps every time you want to analyze a trade. Each step builds on the last.

1
CHECK THE SESSION CLOCK
Look at the clock at the top of the screen. It shows which market session is live — Asian, London, or New York. Trade during London or NY for best conditions. Asian session = quieter, more fake moves.
2
FILL IN THE ANALYSIS SECTION
Go to the ANALYSIS tab. Fill in what you see on your chart: the trend, EMA position, RSI value, market structure, and the key price levels (entry, stop loss, take profit). The more you fill in, the better the score.
3
SET YOUR RISK
In the RISK MANAGEMENT section inside Analysis, enter your account size and use the Position Size Calculator. Only risk 1–2% per trade. Never skip this step — it's what keeps you in the game long-term.
4
CLICK ANALYZE
Press the big ◈ ANALYZE TRADE button (or press ENTER). TRADZY calculates a score out of 100. It also runs quant math automatically — showing you a LONG/SHORT/WAIT verdict with confidence %. Higher score = stronger edge.
5
LOG YOUR TRADE RESULT
After the trade closes, go to TRADE LOG and record the result. Over time, TRADZY learns what setups work for you. The VOID LOG tab shows your best and worst patterns so you can improve systematically.
WHAT IS TECHNICAL ANALYSIS?
Technical analysis (TA) is reading price charts to predict where price will go next. Instead of guessing based on news or feelings, you look for patterns and signals that have worked in the past.

TREND — Is price going up, down, or sideways? Always trade with the trend, not against it.
SUPPORT / RESISTANCE — Price zones where buyers or sellers are likely to show up. Entry near support, target near resistance.
RSI — Measures momentum. Above 70 = overbought (potential reversal down). Below 30 = oversold (potential bounce up).
EMA — Exponential Moving Average. If price is above the EMA, trend is up. Below = trend is down.
RISK/REWARD — The ratio of potential profit vs potential loss. Always aim for at least 2:1.
KEY TERMS GLOSSARY
STOP LOSS (SL)
The price where you automatically exit if the trade goes wrong. Always set before entering.
TAKE PROFIT (TP)
The price target where you close the trade in profit. Set TP before you enter.
LONG / SHORT
Long = buy, expecting price to go up. Short = sell, expecting price to go down.
LEVERAGE
Borrowing money to trade a bigger position. Amplifies both gains AND losses. Use carefully.
DRAWDOWN
The % your account drops from peak to trough. Keep this under 10% with good risk rules.
CONFLUENCE
Multiple signals agreeing at the same time. More confluence = higher probability trade.
STRATEGY MODELS ◈ EDGE STATS
R:R QUICK CALC
CANDLESTICK QUICK REF
INDICATOR GUIDE
TRADING GLOSSARY
PSYCHOLOGY CHEAT SHEET
❌ AVOID
Revenge trading after losses
FOMO entries on spikes
Moving SL further away
Averaging down on losers
Overtrading low-quality setups
✅ BUILD
Wait for A+ setups only
Pre-defined R:R before entry
Journal every trade
Step away after 2 losses
Review weekly — not hourly
📖 GOLDEN RISK RULES
1Never risk more than 1–2% of your total account on a single trade
2Total open risk across all trades (portfolio heat) must stay under 5–8%
3Stop trading after 3 consecutive losses. Take a break, review, come back fresh
4Set a daily loss limit. If you hit it, close the platform and come back tomorrow
5Only take trades with a minimum R:R of 1.5:1. Ideally 2:1 or better
6Reduce position size during losing streaks. Scale back up only after 3+ wins
7Never move your stop loss further away — only tighten it in your favor
8If your account drops 10%, do a full strategy review before trading again
📋 YOUR RISK STATS (FROM TRADE LOG)
Log trades to see your risk statistics here.
⚠ DRAWDOWN RECOVERY TABLE

Shows how much you need to gain to recover from a drawdown. This is why protecting capital is everything.

FORMULAS & CALCULATORS

The math behind every trading decision. Understand these and you think like a quant.

📐
KELLY CRITERION
Optimal % of capital to risk per trade
f* = (bp − q) / b
f* = Kelly fraction · b = avg win/loss ratio · p = win rate · q = 1−p
WIN RATE %
AVG WIN $
AVG LOSS $
Enter values above ↑
📊
SHARPE RATIO
Return per unit of risk — higher = better edge
SR = (Rp − Rf) / σp
Rp = portfolio return · Rf = risk-free rate · σp = std deviation of returns
AVG RETURN %
STD DEV %
RISK FREE %
Enter values above ↑
EXPECTED VALUE
Is your edge real? Positive EV = profitable system
EV = (WR × Avg Win) − (LR × Avg Loss)
Positive EV = you have edge · Negative EV = avoid this setup
WIN RATE %
AVG WIN $
AVG LOSS $
Enter values above ↑
🏆
PROFIT FACTOR
Above 1.5 = profitable. Above 2 = excellent
PF = Total Gross Wins / Total Gross Losses
PF > 1 = profitable · Target PF > 1.5 for consistency
TOTAL WINS $
TOTAL LOSSES $
Enter values above ↑
◈ MONTE CARLO SIMULATOR

Simulates thousands of possible trade sequences using your stats. Shows best, worst, and average outcomes.

WIN RATE %
AVG R:R
TRADES
RISK %/TRADE
SIMULATIONS
Run simulation to see results
◈ MORE CALCULATORS
🎯
SORTINO RATIO
Like Sharpe but penalizes downside only — elite Void benchmark
Sortino = (Rp − Rf) / σd
σd = downside deviation only (better for asymmetric strategies)
RETURN %
DOWNSIDE σ%
TARGET %
Enter values above ↑
📉
Z-SCORE DETECTOR
Statistical extremes as mean-reversion entry signals
Z = (X − μ) / σ
|Z| > 2 = significant deviation · > 3 = extreme (high-probability mean reversion zone)
CURRENT VALUE
MEAN (μ)
STD DEV (σ)
Enter values above ↑
🧮
ANTI-MARTINGALE SIZE SCALER
Scale UP after wins, DOWN after losses — the opposite of revenge trading
Size(n) = Base × Growth^streak (capped at MaxSize)
After wins: increase size gradually · After losses: reduce to base · Never chase losses
BASE SIZE %
GROWTH FACTOR
WIN STREAK
MAX SIZE %
Enter values above ↑
📡 SIGNAL GUIDE
WHAT EVERY INDICATOR MEANS · WHEN TO USE IT · HOW IT AFFECTS YOUR EDGE
These are the exact signals used in the Signal Tester tab. Select them there to filter your trade history and find which combinations give you real edge.
📋 MY PLAYBOOK
YOUR PERSONAL TRADING RULES — CHECKED AGAINST EVERY ANALYSIS
◈ Add 3–10 rules you commit to. TRADZY will check your logged setups against these each time you analyze. Example rules: "Never trade below score 70", "No trades during Dead Zone session", "Always take partials at 1R".
🧮 FORMULA PLAYGROUND
LIVE CALCULATORS — EV, KELLY, SHARPE, POSITION SIZE
◈ EXPECTED VALUE (EV)
WIN RATE %
RISK:REWARD RATIO
EV = +0.10 per $1 risked — POSITIVE EDGE
EV = (WR × Avg_Win) − (LR × Avg_Loss) where Avg_Win = RR × $1, Avg_Loss = $1
◈ KELLY CRITERION & POSITION SIZE
WIN RATE %
RR RATIO
ACCOUNT $
Full Kelly: 20.0% · Half Kelly (recommended): 10.0% · Quarter Kelly: 5.0%
f* = (b×p − q)/b where b=RR, p=WR, q=1−WR. Always use Half or Quarter Kelly.
◈ CALMAR-LIKE RATIO (RETURN / MAX DRAWDOWN)
MONTHLY RETURN %
MAX DRAWDOWN %
Calmar-like (Return/MaxDD): 1.60 — Good risk-adjusted performance
Return / MaxDD (Calmar-like). Higher = better drawdown efficiency. Elite funds aim for 3+.
◈ SHARPE RATIO (ANNUALIZED — STANDARD)
AVG MONTHLY RETURN %
MONTHLY STD DEV %
RISK-FREE RATE % /mo
Sharpe Ratio: 4.33 — Excellent — top-tier performance
(Mean-Rf)/sigma x sqrt(12) — true annualized Sharpe. Industry standard: >=1 good, >=2 excellent.
◈ DRAWDOWN RECOVERY MATH
DRAWDOWN %
20% loss → need 25.0% gain to recover. Be careful — losses compound asymmetrically.
🗺 LEARNING PATH
STRUCTURED PROGRESSION — BEGINNER → INTERMEDIATE → ADVANCED
🎮
SIMULATION MODE This challenge uses a separate virtual balance — your real account & trade log are never touched.
◈ TRADZY CHALLENGE
SIMULATED · CAN YOU PASS THE EVALUATION?
TIER:
NO CHALLENGE ACTIVE
Pick a tier above to start a simulated evaluation.
No real money involved — it's a skill test.
🧠 MENTAL CHECK
BEFORE YOU ANALYZE — 3 QUESTIONS. 10 SECONDS. HONESTY ONLY.
1. EMOTIONAL STATE RIGHT NOW?
😤 CALM
😤 SLIGHTLY STRESSED
🤬 ANGRY / REVENGE
🌀 FOMO / EUPHORIC
2. WHY ARE YOU ENTERING THIS TRADE?
✅ MY SYSTEM SIGNALS IT
🌐 SAW IT FROM COMMUNITY / NEWS FLOW
💔 RECOVERING LAST LOSS
🎲 IT FEELS RIGHT
3. HOW RESTED ARE YOU?
⚡ SHARP & FOCUSED
😴 SLIGHTLY TIRED
💀 EXHAUSTED
🏆
WIN
📊 MARKET
Log every trade — the journal IS the edge.
VOID SIGNAL
🌑 VOID COLLECTION
VOID PATH · Trader Ranks · Skins · Story · Level 1–10,000
1
VOID SIGNAL
0 XP TOTAL · THE VOID GOD REGENESIS
VOID GOD RECOVERY PROGRESS 0%
☬ CURRENT TRADER RANK
VOID SIGNAL
Signal starts in silence.
0 XP
NEXT VOID EVOLUTION
— levels away
🌑 VOID GOD — THE RISING · LIGHT NOVEL · 7 CHAPTERS · FULL STORY
◈ TRADZY UNIVERSE · LIGHT NOVEL
VOID GOD
The Liquidation & The Rising
01
OF 07 CHAPTERS
Chapter 01
— — —
01 / 07
🌑 VOID PATH — ALL RANKS, SKINS & MILESTONES
VOID GOD PIXEL MEMORY
Loading void relic...
TRADZY
◈ VOID ENGINE · STAT ORACLE
SESSION INITIATED.
Show some love to the creator — @dznye on IG 💛
◈ CONFIGURE CHALLENGE
CHALLENGE LABEL (optional nickname)
ACCOUNT SIZE ($)
CHALLENGE PHASE
PROFIT TARGET (%)
MAX DAILY LOSS (%)
MAX TOTAL DRAWDOWN (%)
DRAWDOWN TYPE
EVALUATION DAYS (max)
MIN TRADING DAYS REQUIRED
MAX SINGLE TRADE RISK (% of profit target)
SCORE GATE BOOST (+pts)
CHALLENGE START DATE
◈ VOID ENGINE · ANALYSIS RUNTIME
LIVE
/100
INITIALIZING...
MARKET STRUCTURE
0%
MOMENTUM ENGINE
0%
VOLATILITY REGIME
0%
QUANT VALIDATOR
0%
SIGNAL COURT
0%
NATURE LAWS · PHYSICS
0%
COMPUTING EDGE SCORE...
0.0s
◈ WELCOME TO TRADZY
STEP 1 / 4
CORE WORKFLOW — HOW TO ANALYZE A TRADE
1
MARKET SESSION CLOCK (top bar)
The live session clock shows which market is open — Asian, London, or New York. Trade during London (8am–5pm UTC) or New York (1pm–10pm UTC) for the highest volatility and clearest moves. Asian session is quieter — ideal for range trades.
2
FILL THE ANALYSIS TAB → GET YOUR SCORE
This is the heart of TRADZY. Fill in your market conditions — Trend, EMA position, VWAP, Volume, RSI, Market Structure (SMC), candle patterns, and optional modules like Fibonacci, Wyckoff, or Pivot Points. The more you fill in, the more accurate your score. Press ◈ ANALYZE (or hit Enter) to run the Void Engine. You get a score out of 100, a LONG / SHORT / WAIT verdict, and an Alpha Matrix breakdown.
3
READING YOUR SCORE
75–100 = Strong edge, take the trade with full size. 60–74 = Moderate edge, use reduced size. 45–59 = Marginal, skip or watch. Below 45 = No edge — do not trade. The Alpha Matrix shows exactly which factors raised or lowered your score.
4
POSITION SIZING (Risk Management section)
Enter your account size, entry, stop loss, and TP levels. TRADZY auto-calculates your position size using the Quarter-Kelly formula adjusted for volatility and your score. Never risk more than 1–2% per trade. Works for forex, crypto, stocks, and indices.
Skip · Full guide available in Academy → HOW TO USE
NOISE FLOOR
0 ONLINE
NOISE FLOOR
◈ CONNECTING TO VOID ROOM…
SEASON 1
◈ LOADING RANKINGS…
📝 Notes
0/20