Zone Shift — Trend Zones and Retests

Zone Shift — Trend Zones and Retests

What is Zone Shift?

Zone Shift is a trend-and-channel indicator designed for clear, actionable context. It highlights when price escapes a dynamic envelope and then retests the breakout level. The tool works across timeframes:

  • Swing & positional: clean visual structure and reliable “zone memory.”

  • Intraday: responsive enough for trend days; still mindful of retests.

Use it to:

  • Confirm trend bias (green/red candles).

  • Track dynamic zones (top/bottom bands).

  • Spot retests of the trend-start level (diamond signals) that often precede continuation.

How it works

  1. Core averages

    • ema: an exponential-style average of close using length (user-driven).

    • hma: a faster, HMA-like average using max(20, length − 40) for the period.

    • Middle line (mid) = average of ema and hma.

  2. Dynamic distance

    • dist = simple average of the true bar range (high − low) over 200 bars.

    • Top (itop) = mid + dist; Bottom (ibot) = mid − dist.

  3. Trend flip logic

    • Bull flip: when the low closes above itop while the prior bar’s low was below the prior itop.
      trend = 1, trendStart = low, candles turn green.

    • Bear flip: when the high falls below ibot while the prior bar’s high was above the prior ibot.
      trend = 0, trendStart = high, candles turn red.

  4. Retest logic (⯁)

    • After a flip, the indicator tracks the trend-start level (trendStart).

    • Bull trend: prints a green ⯁ when price crosses back above trendStart.

    • Bear trend: prints a red ⯁ when price crosses back below trendStart.

    • Markers are spaced by ≥ 5 bars to avoid clutter, and positioned using ATR(14) x 0.2 for visibility.

Visual elements & interpretation

  • Three lines

    • Top (blue): upper zone boundary.

    • Middle (dotted): blended trend mean (EMA/HMA-style).

    • Bottom (blue): lower zone boundary.

  • Candle coloring

    • Green candles = active bull regime after a confirmed upside escape.

    • Red candles = active bear regime after a confirmed downside escape.

  • Retest diamonds (⯁)

    • Plot a green ⯁ below price in bull regimes (reclaiming trend-start).

    • Plot a red ⯁ above price in bear regimes (rejecting trend-start).

Inputs & settings

  • Length (per)

    • Default: 100

    • Range enforced: 60–200 (automatically clamped).

    • Effect: Governs the smoothness of the core averages. Larger = smoother bands; smaller = more responsive.

  • Candle coloring (colorCandles)

    • 1 = on (default), 0 = off. When on, the indicator draws candles with regime colors.

  • ATR(14) for marker offset

    • Used only to place ⯁ slightly away from bars (±0.2 × ATR) for readability.

Note: Internally, length feeds both the EMA-like and HMA-style calculations, with the HMA-style period set to max(20, length − 40) to maintain responsiveness.

Signals & trade ideas (not financial advice)

  • Breakout → Trend initiation
    When price escapes the Top/Bottom and candles flip color, consider the new regime as in force.

  • Retest continuation (⯁)
    The diamond marks when price re-tests the trend-start level and reaffirms the regime. Many traders look for follow-through candles after the ⯁.

  • Middle-line pullbacks
    In an established trend, pullbacks toward the Middle can act as dynamic mean reversion spots for continuation, especially when the regime color remains intact.

ProBuilder code

Share this

Risk disclosure:

No information on this site is investment advice or a solicitation to buy or sell any financial instrument. Past performance is not indicative of future results. Trading may expose you to risk of loss greater than your deposits and is only suitable for experienced investors who have sufficient financial means to bear such risk.

ProRealTime ITF files and other attachments : How to import ITF files into ProRealTime platform?

PRC is also on YouTube, subscribe to our channel for exclusive content and tutorials

  1. Ciccarelli Franco • 46 days ago #

    Non si carica

  2. yas • 46 days ago #

    getting showtrend error undefined variable

  3. MaoRai54 • 46 days ago #

    Anche a me non si carica e poi manca definizione di variabile SHOWTREND

  4. Iván • 46 days ago #

    Sorry.
    You should add new line after line 21.

    showtrend=1

    // ——————————————————
    //PRC_Zone Shift [ChartPrime]
    //version = 1
    //06.11.2025
    //Iván González @ http://www.prorealcode.com
    //Sharing ProRealTime knowledge
    // ——————————————————
    // inputs
    // ——————————————————
    per = 100 // Length 60-200 / minval = 60, maxval = 200
    if per >200 then
    length=200
    elsif per <60 then
    length=60
    else
    length=per
    endif
    colorCandles=1
    showsignals=1
    showcloud=1
    showlevel=1
    showtrend=1
    UPcolorR=100
    UPcolorG=200
    UPcolorB=200
    DNcolorR=200
    DNcolorG=200
    DNcolorB=100
    atr=averagetruerange[14](close)
    // ——————————————————
    // Indicator calculations
    // ——————————————————
    once trend = 0
    once trendStart = 0
    once lastRetest = 0

    ema= average[length,1](close)
    hma= average[max(20,length-40),8](close)
    dist=average[200](high-low)
    mid = (ema+hma)/2
    itop = mid+dist
    ibot = mid-dist

    if low > itop and low[1] < itop[1] and not trend then
    drawsegment(trendStartidx,trendStart,barindex,trendStart)style(dottedline)coloured(“grey”,255*showlevel)
    trend=1
    trendStart=low
    trendStartidx=barindex
    r=UPcolorR
    g=UPcolorG
    b=UPcolorB
    endif

    if high < ibot and high[1] > ibot[1] and trend then
    drawsegment(trendStartidx,trendStart,barindex,trendStart)style(dottedline)coloured(“grey”,255*showlevel)
    trend=0
    trendStart=high
    trendStartidx=barindex
    r=DNcolorR
    g=DNcolorG
    b=DNcolorB
    endif

    // Retest TrendStart Level

    if (close > trendStart and close[1] < trendStart or low > trendStart and low[1] <trendStart) and trend and barindex-lastRetest>5 then
    lastRetest=barindex
    drawtext(“⯁”,barindex,low-0.2*atr)coloured(r,g,b,255*showsignals)
    endif

    if (close[1]>trendStart and close<trendStart or high[1]>trendStart and high<trendStart) and not trend and barindex-lastRetest>5 then

    lastRetest=barindex
    drawtext(“⯁”,barindex,high+0.2*atr)coloured(r,g,b,255*showsignals)
    endif

    if islastbarupdate then
    drawsegment(trendStartidx,trendStart,barindex,trendStart)style(dottedline)coloured(“grey”,255*showlevel)
    endif
    // ——————————————————
    // PLOT
    // ——————————————————
    if showtrend then
    drawrectangle(barindex,5,barindex+1,15)anchor(bottom,index,yshift)coloured(r,g,b,0)fillcolor(r,g,b)
    endif
    colorbetween(itop,ibot,r,g,b,95*showcloud)
    // ——————————————————
    return mid as “Middle”style(dottedline), itop as “Top”, ibot as “Bottom”

  5. shephinc • 37 days ago #

    When i download it says the file is corrupt and when i try to paste the code something gets wrong. Can you please upload a new .itf file?

    • Iván • 37 days ago #

      if you open the file with V13 you will have no problems.
      You can copy/paste the original code and add new line below nr21 and write showtrend=1

    • shephinc • 36 days ago #

      Aha! Then I just need to figure out how to get v13. Is it released for IG customers?

avatar
Register or

Likes

avatar avatar
Related users ' posts
Krallenmann Hallo Nicolas, kannst du mir die Regeln für den Halftrend Indikator sagen? Aus dem Code kann...
davefransman Dear Nicolas, i want set a alert on the "HalfTrend "custom moving average" met Heikin Ashi w...
Nicolas Please post the question in a new forum topic, that would need custom coding I believe.
Lyam Pareil ne marche pas dommage
ahmedbouaziz89 Bonjour, quand j'ajoute le code ou le fichier dans l'outils screeners de Prorealtime je ne v...
tyvix Bonjour le code marche bien c est juste qu'il n y a pas d opportunité au moment ou vous le...
verdi55 Is there such a thing as a free lunch ?
maceng Thanks Nicolas for this great work! I would like to understand the math behind it in order t...
Nicolas Sorry I have no time to provide assistance for python programmers. Have a good day.
Maz Hi all, firstly happy to know that this is helping you. I look into updating it for PRT11 wh...
Nicolas just use 3 times a linear regression channel code you will find in the library.
leederbyshire Here's the link to alternative linear regression channel indicator Nicolas is referring to t...
Wing Yes, investigate as much as you want. For more insight, you can view the linet1, linet2 etc....
CKW Hi Wing, Thanks for your sharing. I am still trying to breakdown & understand your code...
Wing Hello CKW. No, the parameter, 7 in this case, is used when calling the RSI indicator to ide...
Nicolas Je vais faire l'indicateur et expliquer comment en même temps dans un sujet de forum. Plus s...
gregus merci nicolas toute ma gratitude est pour toi sa sera bien pratique car je pense ne pas etre...
Nicolas Ok merci donc d'ouvrir un sujet spécifique pour cette demande donc :) 
algotrader This indicator looks coolBut on attempt to use it for a strategy dev'I get an error.."The in...
dajvop @algotrader if you at the bottom of the code add: RETURN Buffer1 as "up", Buffer2 as "down",...
Bateson Si cela peut servir, l'indicateur Sadukey a été créé en utilisant un générateur de filtre ap...
Nicolas
9 years ago
ALMA MACD
ALMA MACD
7
Indicators
Arnaud HALVICK Great indicator, thank you!
JMat45 Hi Nicolas, just reviewing this indicator and noticed that you have double assigned the vari...
Nicolas That would not make any difference because the code is read from top to bottom.
MikeGC I don't know if you have used the variables a and b to optimise the parameters for the Super...
gianpiero75 I have not optimized, I multiplied the parameters for 6 (5,8), to use them on the 4  hoursTF...
bertrandpinoy bonjour Mike j utilise TrendChaser V2.0 et quand il prend position cela ne programme pas le ...
eisi If i switch between different Markets, the Backgroundcolour will appear where it should not...
datageek How can I get alerts on colour change?
NAMBO40 Hello, I would like to add a 25 period SMA moving average. It's possible?
Fabio Anthony Terrenzio this strategy works only in a well defined trend
brosly Good afternoon I am trying to get the complete code of lex strategy made by adolfo since I s...
dreif123 hi Adolfo, is Alex Auto Trading Botindex working on DAX as well ? if so , can you post the...
Doctrading I forgot to write at the beginning :  a = 50 b = 50 These are intermediate levels Sorry
DerPat Thank you. This one could be an aid in my current research on stochastics.
Pelayo it is possible that in line 12 we should put seuilinf=-b, thaks for all
Doctrading Hello, Someone asked me something (his results seemed to be different) on my email, but it ...
Glen Marquis Not your best..So what is your best strategy? :)
GraHal Hi Nicolas I like this and would like to understand it fully so please forgive the (maybe) d...
Nicolas Hi GraHal, the Factor parameter is only a multiplier of the ATR that is added or subtracted ...
GraHal Nicolas, thank you for your useful and informative response. Yes I optimise using ProBackte...
Nicolas
10 years ago
Denis Hello, Congratulations and thank you for this work. I do not understand one thing, however...
Nicolas
10 years ago
GraHal Hi Nicolas Britains .itf file didn't work for me ... I had to change h to hh at line 13 and...
Nicolas Thank you GraHal for pointing this error, i have corrected the code in the file. The code in...
Nicolas
10 years ago
Nicolas
10 years ago
U Trend Sensor
U Trend Sensor
4
Indicators
Nicolas Hi Stef, thanks again for contributing to my near perfect english :)
Salocin Hi Nicolas, seems to be a pretty cool one as an indicator. can you define "plotsingal". Syst...
Nicolas Download the itf file attached to the post, there's everything needed in it. Just import thi...
Nicolas
10 years ago
cosmicsurfer I actually live up the road from Daryl Guppy. On the first day of my training i walked aroun...
Pleidian Hi, I'm trying to add the guppy indicator to my charts but i keep getting a box that's says ...
Nicolas Wrong copy/paste? Always a better idea to download the ITF file and import it into the platf...

Top