Klasyczny RSI to straszna tępota – bierze pod uwagę tylko stosunek średnich cen zamknięcia w górę i w dół z $N$ okresów. Zupełnie nie widzi tego, co najważniejsze: wolumenu likwidacji, imbalance'u w orderbooku (Order Book Imbalance) czy dynamiki zleceń wpadających na taśmę (Time & Sales).
Żeby wskaźnik momentum realnie pokazywał mechanikę rynku, musimy połączyć samą prędkość ceny z dynamicznym filtrem zmienności ($ATR$) oraz wolumenem. Do tego idealnie sprawdzi się zmodyfikowany Z-Score Momentum wrzucony razem z Chande Momentum Oscillator (CMO), dostosowanym typowo pod krypto (czyli z uwzględnieniem przemielonego wolumenu).

Gdzie S_u to suma wzrostów cen zamknięcia z danego okresu zważona wolumenem, a S_d to zważona wolumenem suma absolutnych strat. Takie podejście chroni oscylator przed permanentnym wiszeniem w strefie wykupienia, kiedy mocny ruch idzie na zamierającym wolumenie (czyli przy klasycznej dywergencji).
Dobór metryk: Szybkie porównanie oscylatorów momentum
| Wskaźnik / Metryka | Co tak naprawdę mierzy | Główny ból dupy na krypto | Modyfikacja pod Pro-trading |
|---|---|---|---|
| Klasyczny RSI | Relatywną siłę zamykania świeczek. | Całkowite zawieszanie się na poziomach 70+ / 30- podczas short squeeze'ów. | Wymiana zwykłej średniej na VWMA (Volume Weighted). |
| Rate of Change (ROC) | Czystą prędkość zmiany ceny (P_t - P_{t-n}). | Strasznie szarpie; zbiera każdy losowy szum rynkowy i gapy. | Wygładzenie tematu przez EMA. |
| Z-Score Momentum | Odchylenie obecnego impulsu od średniej oczekiwanej. | Wymaga ciągłego ruszania okna lookbacku. | Dynamiczne okno podpięte bezpośrednio pod cykl zmienności. |
Implementacja strategii: Pine Script v5
Ten skrypt wypluwa wolumenowo ważony impuls (Volume-Weighted Momentum Score). Polujemy na momenty wyczerpania trendu poprzez wyłapywanie ekstremalnych odczytów Z-Score i przecięcia linii sygnałowych. Optymalny interwał: 15m – 1h (pod typowy intraday scalping na perpach BTC/USDT lub ETH/USDT).
Pine Script
//@version=5
strategy("Volume-Weighted Momentum Z-Score Strategy", overlay=false, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=100)
// Parametry wejściowe
len = input.int(14, title="Momentum Period")
smooth = input.int(5, title="Signal Smoothing")
z_len = input.int(20, title="Z-Score Lookback")
upper_band = input.float(2.0, title="Overbought (Z-Score)")
lower_band = input.float(-2.0, title="Oversold (Z-Score)")
// Impuls ważony wolumenem
price_change = ta.change(close)
vol_momentum = price_change * volume
// Wygładzenie impulsu
smoothed_mom = ta.ema(vol_momentum, len)
// Z-Score dla wygładzonego momentum
mean_mom = ta.sma(smoothed_mom, z_len)
std_mom = ta.stdev(smoothed_mom, z_len)
z_score = std_mom != 0 ? (smoothed_mom - mean_mom) / std_mom : 0.0
// Linia sygnałowa
signal_line = ta.ema(z_score, smooth)
// Wykresy
plot(z_score, color=color.white, title="Z-Score Momentum", linewidth=2)
plot(signal_line, color=color.yellow, title="Signal Line")
hline(upper_band, "Upper Bound", color=color.red, linestyle=hline.style_dashed)
hline(lower_band, "Lower Bound", color=color.green, linestyle=hline.style_dashed)
hline(0, "Zero Line", color=color.gray)
// Triggery pod mean reversion na wyczerpaniu ruchu
long_condition = ta.crossover(z_score, lower_band) or (z_score < lower_band and ta.crossover(z_score, signal_line))
short_condition = ta.crossunder(z_score, upper_band) or (z_score > upper_band and ta.crossunder(z_score, signal_line))
if (long_condition)
strategy.entry("Long", strategy.long)
if (short_condition)
strategy.entry("Short", strategy.short)Zarządzanie ryzykiem przy graniu pod momentum
Wchodzenie w pozycję z łapy (marketem) od razu po przecięciu linii sygnałowej to finansowe samobójstwo. Impuls może dostać drugie życie na kaskadzie likwidacji i po prostu cię rozjechać.
Rozstawiamy sztywne ramy pod zarządzanie kapitałem:
- Punkt wejścia (Trigger): Odpalamy pozycję dopiero po zamknięciu świecy, która potwierdzi, że Z-Score wrócił do wnętrza konsoli [-2.0; 2.0]. To daje pewność, że najgorszy squeeze wyhamował.
- Stop Loss (SL): Wiążemy go twardo z lokalnym ekstremum (high/low świecy, która zrobiła ten cały srogie przecięcie) plus zapas rzędu 0.5 x ATR (14). Jeśli stop wychodzi za szeroki, po prostu zmniejszamy size pozycji, zamiast podciągać stopa bliżej ceny.
- Take Profit (TP): Ściągamy zyski partiami. Połowę (50% pozycji) zamykamy na linii zero (średnia matematyczna całego impulsu). Reszta leci na break-even (BE) i próbujemy dociągnąć ruch do przeciwnej bandy.
- Stosunek Ryzyka do Zysku (R:R): Minimalny akceptowalny setup to 1:2.5. Wszystko poniżej w długim terminie matematycznie nie obroni winrate'u strategii grających pod odwrócenie trendu (mean-reversion).
Żaden oscylator nie wywróży przyszłości, jeśli ignoruje wolumeny ludzi, którym właśnie giełda zamyka pozycje na Margin Callu. Traktuj Z-Score momentum jako filtr kontekstu rynkowego: jeśli wskaźnik wypierdala poza krytyczne poziomy, jest już za późno na fomo i pakowanie się z trendem – czas szykować pozycje pod kontrę albo po prostu inkasować profit.