Attachments forums

List of attachments posted on this forum.


All files on forums: 163045

Re: Already Converted TradingView Indicators to MT4 Indicators

kvak, Mon Jul 14, 2025 4:11 am

//Sup TV. This script is inspired by (and dedicated to) closure of sales (today, Oct 20 '21) of the famous Jurik Research.
...
Jurik Research, the real people who been doing real things by using the real instruments, while many others been reading books "How to become a billionaire in 2 days", watching 5687 hours videos of how to use RSI, and studying+applying machine learning to everything cuz suddenly it became trendy xD
...
This is my remake of the original Jurik Moving Average (JMA) based on all the info I managed to get my hands on, some stuff is dated back to 2008 or smth.
The whole point of this filter, the point missed by other attempts of its remakes even posted there on TV, is that it takes into account volatility and adjusts its speed based on it.
Think about it as an EMA, where the alpha parameter is dynamic.
Now, by all means I'm not claiming that's this is the perfect replica of the original algo. I've tested it a lot, looks like it's working legit...

Code: Select all

//@version=4
study('Jurik Moving Average', 'JMA', true, resolution='')

//pine_jma[
pine_jma(_src, _length, _phase) =>
    lower_band = _src
    upper_band = _src
    del2       = abs(_src - lower_band[1])
    del1       = abs(_src - upper_band[1])
    
    vola = del1 == del2 ? 0 : max(del1, del2)
    
    vola_sum  = 0.0
    vola_sum := nz(vola_sum[1]) + 0.1 * (vola - vola[10])
    
    avg_len    = 65
    // avg_len = _length * 10
    
    y = bar_index + 1
    
    avg_vola  = 0.0
    avg_vola := if y <= avg_len + 1
        nz(avg_vola[1]) + 2.0 * (vola_sum - nz(avg_vola[1]))/(avg_len + 1)
    else
        sma(vola_sum, avg_len)    
    
    len  = 0.5 * (_length - 1)
    len1 = max(log(sqrt(len)) / log(2) + 2, 0)
    pow1 = max(len1 - 2, 0.5)
    
    r_vola  = avg_vola > 0 ? vola / avg_vola : 0
    r_vola := if r_vola > pow(len1, 1 / pow1)
        pow(len1, 1 / pow1)
    else      if r_vola < 1
        1
    else
        r_vola
    
    pow2 = pow(r_vola, pow1)
    len2 = sqrt(len) * len1
    bet  = len2/(len2 + 1)
    kv   = pow(bet, sqrt(pow2))
    
    lower_band := y == 1 ? _src : del2 < 0 ? _src : _src - kv * del2
    upper_band := y == 1 ? _src : del1 < 0 ? _src : _src + kv * del1
    
    beta  = 0.45 * (len - 1) / (0.45 * (len - 1) + 2)
    pr    = _phase < -100 ? 0.5 : _phase > 100 ? 2.5 : _phase / 100 + 1.5
    alpha = pow(beta, pow2)
    
    ma1  = 0.0
    det0 = 0.0
    jma  = 0.0
    det1 = 0.0
    
    ma1  := (1 - alpha) * _src + alpha * nz(ma1[1])
    det0 := (_src - ma1) * (1 - beta) + beta * nz(det0[1])
    ma2   = ma1 + pr * det0
    det1 := (ma2 - nz(jma[1])) * pow((1 - alpha), 2) + pow(alpha, 2) * nz(det1[1])
    jma  := nz(jma[1]) + det1
//]

source = input(close, 'Source',        inline='1')
log    = input(false, 'Log transform', inline='1')
length = input(13,                     inline='2')
phase  = input(0,                      inline='2')
offset = input(0)

src       = log ? log(source)  : source
pre_jma   = pine_jma(src, length, phase)
jma       = log ? exp(pre_jma) : pre_jma
jma_color = jma > jma[1] ? color.blue : color.red

plot(jma, 'JMA', jma_color, 2, offset=offset)
All files in topic