Multi momentum indicatorScript contains couple momentum oscillators all in one pane
List of indicators:
RSI
Stochastic RSI
MACD
CCI
WaveTrend by LazyBear
MFI
Default active indicators are RSI and Stochastic RSI
Other indicators are disabled by default
RSI, StochRSI and MFI are modified to be bounded to range from 100 to -100. That's why overbought is 40 and 60 instead 70 and 80 while oversold -40 and -60 instead 30 and 20.
MACD and CCI as they are not bounded to 100 or 200 range, they are limited to 100 - -100 by default when activated (extras are simply hidden) but there is an option to show full indicator.
In settings there are couple more options like show crosses or show only histogram.
Default source for all indicators is close (except WaveTrend and MFI which use hlc3) and it could be changed but for all indicators.
There is an option for 2nd RSI which can be set for any timeframe and background calculated by Fibonacci levels.
Cari dalam skrip untuk "想象图:箱线图+折线组合,横轴为国家,纵轴为响应指数(0-100),箱线显示均值±标准差,叠加红色虚线标注各国确诊高峰时间点"
Open Interest Rank-BuschiEnglish:
One part of the "Commitment of Traders-Report" is the Open Interest which is shown in this indicator (source: Quandl database).
Unlike my also published indicator "Open Interest-Buschi", the values here are not absolute but in a ranking system from 0 to 100 with individual time frames-
The following futures are included:
30-year Bonds (ZB)
10-year Notes ( ZN )
Soybeans (ZS)
Soybean Meal (ZM)
Soybean Oil (ZL)
Corn ( ZC )
Soft Red Winter Wheat (ZW)
Hard Red Winter Wheat (KE)
Lean Hogs (HE)
Live Cattle ( LE )
Gold ( GC )
Silver (SI)
Copper (HG)
Crude Oil ( CL )
Heating Oil (HO)
RBOB Gasoline ( RB )
Natural Gas ( NG )
Australian Dollar (A6)
British Pound (B6)
Canadian Dollar (D6)
Euro (E6)
Japanese Yen (J6)
Swiss Franc (S6)
Sugar ( SB )
Coffee (KC)
Cocoa ( CC )
Cotton ( CT )
S&P 500 E-Mini (ES)
Russell 2000 E-Mini (RTY)
Dow Jones Industrial Mini (YM)
Nasdaq 100 E-Mini (NQ)
Platin (PL)
Palladium (PA)
Aluminium (AUP)
Steel ( HRC )
Ethanol (AEZ)
Brent Crude Oil (J26)
Rice (ZR)
Oat (ZO)
Milk (DL)
Orange Juice (JO)
Lumber (LS)
Feeder Cattle (GF)
S&P 500 ( SP )
Dow Jones Industrial Average Index (DJIA)
New Zealand Dollar (N6)
Deutsch:
Ein Bestandteil des "Commitment of Traders-Report" ist das Open Interest, das in diesem Indikator dargestellt wird (Quelle: Quandl Datenbank).
Anders als in meinem ebenfalls veröffentlichten Indikator "Open Interest-Buschi" werden hier nicht die absoluten Werte dargestellt, sondern in einem Ranking-System von 0 bis 100 mit individuellen Zeitrahmen.
Folgende Futures sind enthalten:
30-jährige US-Staatsanleihen (ZB)
10-jährige US-Staatsanleihen ( ZN )
Sojabohnen(ZS)
Sojabohnen-Mehl (ZM)
Sojabohnen-Öl (ZL)
Mais( ZC )
Soft Red Winter-Weizen (ZW)
Hard Red Winter-Weizen (KE)
Magerschweine (HE)
Lebendrinder ( LE )
Gold ( GC )
Silber (SI)
Kupfer(HG)
Rohöl ( CL )
Heizöl (HO)
Benzin ( RB )
Erdgas ( NG )
Australischer Dollar (A6)
Britisches Pfund (B6)
Kanadischer Dollar (D6)
Euro (E6)
Japanischer Yen (J6)
Schweizer Franken (S6)
Zucker ( SB )
Kaffee (KC)
Kakao ( CC )
Baumwolle ( CT )
S&P 500 E-Mini (ES)
Russell 2000 E-Mini (RTY)
Dow Jones Industrial Mini (YM)
Nasdaq 100 E-Mini (NQ)
Platin (PL)
Palladium (PA)
Aluminium (AUP)
Stahl ( HRC )
Ethanol (AEZ)
Brent Rohöl (J26)
Reis (ZR)
Hafer (ZO)
Milch (DL)
Orangensaft (JO)
Holz (LS)
Mastrinder (GF)
S&P 500 ( SP )
Dow Jones Industrial Average Index (DJIA)
Neuseeland Dollar (N6)
Well Rounded Moving AverageIntroduction
There are tons of filters, way to many, and some of them are redundant in the sense they produce the same results as others. The task to find an optimal filter is still a big challenge among technical analysis and engineering, a good filter is the Kalman filter who is one of the more precise filters out there. The optimal filter theorem state that : The optimal estimator has the form of a linear observer , this in short mean that an optimal filter must use measurements of the inputs and outputs, and this is what does the Kalman filter. I have tried myself to Kalman filters with more or less success as well as understanding optimality by studying Linear–quadratic–Gaussian control, i failed to get a complete understanding of those subjects but today i present a moving average filter (WRMA) constructed with all the knowledge i have in control theory and who aim to provide a very well response to market price, this mean low lag for fast decision timing and low overshoots for better precision.
Construction
An good filter must use information about its output, this is what exponential smoothing is about, simple exponential smoothing (EMA) is close to a simple moving average and can be defined as :
output = output(1) + α(input - output(1))
where α (alpha) is a smoothing constant, typically equal to 2/(Period+1) for the EMA.
This approach can be further developed by introducing more smoothing constants and output control (See double/triple exponential smoothing - alpha-beta filter) .
The moving average i propose will use only one smoothing constant, and is described as follow :
a = nz(a ) + alpha*nz(A )
b = nz(b ) + alpha*nz(B )
y = ema(a + b,p1)
A = src - y
B = src - ema(y,p2)
The filter is divided into two components a and b (more terms can add more control/effects if chosen well) , a adjust itself to the output error and is responsive while b is independent of the output and is mainly smoother, adding those components together create an output y , A is the output error and B is the error of an exponential moving average.
Comparison
There are a lot of low-lag filters out there, but the overshoots they induce in order to reduce lag is not a great effect. The first comparison is with a least square moving average, a moving average who fit a line in a price window of period length .
Lsma in blue and WRMA in red with both length = 100 . The lsma is a bit smoother but induce terrible overshoots
ZLMA in blue and WRMA in red with both length = 100 . The lag difference between each moving average is really low while VWRMA is way more precise.
Hull MA in blue and WRMA in red with both length = 100 . The Hull MA have similar overshoots than the LSMA.
Reduced overshoots moving average (ROMA) in blue and WRMA in red with both length = 100 . ROMA is an indicator i have made to reduce the overshoots of a LSMA, but at the end WRMA still reduce way more the overshoots while being smoother and having similar lag.
I have added a smoother version, just activate the extra smooth option in the indicator settings window. Here the result with length = 200 :
This result is a little bit similar to a 2 order Butterworth filter. Our filter have more overshoots which in this case could be useful to reduce the error with edges since other low pass filters tend to smooth their amplitude thus reducing edge estimation precision.
Conclusions
I have presented a well rounded filter in term of smoothness/stability and reactivity. Try to add more terms to have different results, you could maybe end up with interesting results, if its the case share them with the community :)
As for control theory i have seen neural networks integrated to Kalman flters which leaded to great accuracy, AI is everywhere and promise to be a game a changer in real time data smoothing. So i asked myself if it was possible for a neural networks to develop pinescript indicators, if yes then i could be replaced by AI ? Brrr how frightening.
Thanks for reading :)
Quadruple Kaufman Adaptive Moving AverageFour Kaufman Adaptive Moving Averages in one script. Useful for identifying trends and setting points to add to positions / exit trades. KAMA's are great for keeping you in trending markets and avoiding sideways chops and ranges. Try them out by tweaking the fast/slow ma's and lengths to get the right set for your charts that removes the thinking about whether to be long or short and when to add to positions.
A suggested trading strategy is to tweak the ma's (often you'll want larger values) until they span the price action well on past trends. Then each time price action closes and crosses one of your KAMA lines is an opportunity to add to your position. Once all lines are cleared and you've loaded up your position, hopefully your average price of entry falls short of the highest KAMA line's value. Once this happens you don't need to get out the trade until such time as a price close crosses again that largest KAMA line. For eager profit takers, close positions once any KAMA line is crossed once you're successfully loaded up on a direction.
I use this script with a renko chart and values -> 26 length 6 fast ma 100 slow ma, 26 8 100, 26 10 100, 26 12 100 and it's good to see these moving averages, unlike regular moving averages, bend around choppy action that come when trends pause, keeping me successfully in winning trades. Give it a try.
cci based potential buy/sell signal
Commodity Channel Index Potential Buy Signal
Commodity Channel Index (CCI) is below oversold line (-200).
CCI then crosses above -100 line
Commodity Channel Index Potential Sell Signal
Commodity Channel Index (CCI) is above overbought line (+200).
CCI then crosses below +100 line.
Türkçe Açıklama;
CCI Potansiyel Al Sinyali
CCI indikatörünün -200 altında bulunduğu bölgeler aşırı satış bölgeleri,
Sonrasında aşağıdan gelerek -100 çizgisinin üzerine çıktığı yada çıkmak üzere olduğu noktalar al sinyali
CCI Potansiyel Satl Sinyali
CCI indikatörünün +200 üzerinde bulunduğu bölgeler aşırı alım bölgeleri,
Sonrasında yukarıdan inerek +100 çizgisinin altına indiği yada inmek üzere olduğu noktalar sat sinyali
Not: Tek başına kullanılması son derece hatalı sonuçlar verebilir. Sadece olabilirlik potansiyeli taşımaktadır.
Aroon Single Line This indicator converts double lined Aroon indicator into a single line oscillator.
It is simply obtained by subtracting Aroon down from Aroon Up.
*If Oscillator points 100 value, it means there is a Strong Uptrend.
*If Oscillator points values between 100 and 40, it means there is an uptrend.
*If Oscillator points values between 20 and -20, it means no trend, it is sideways.But, when it is sideways; generally, oscillator makes FLAT LINES
between 20 and -20 values. 0 value is pointed out when the trend is downward as well, which means aroon up=aroon down.
*If Oscillator points values between -40 and -100, it means there is a downtrend.
*If Oscillator points -100 value, it means there is a Strong downtrend.
(20, 40) and (-20, -40) intervals are not mentioned, because; generally these are transition values and hard to comment, it will be more certain to
wait till values are between or at the reference values given.
CCI 0Trend Strategy (by Marcoweb) v1.0Hi guys,
I am trying to create a strategy that consists in the crossover/under of the 0 line of the Commodity Channel Index . Every time the price crosses over the 0 line in the CCI the strategy has to long getting short on the cross under and viceversa.
I have published here another script strategy (consists in a crossover/under of the Overbought/Oversold levels of the CCI) that works so I could have the opportunity to share with you the main idea that as per now is mistaken:
//@version=2
strategy(title="CCI 0Trend Strategy (by Marcoweb) v1.0", shorttitle="CCI_0T_Stra_v1.0", overlay=true)
///////////// CCI
length = input(20, minval=1)
src = input(close, title="Source")
ma = sma(src, length)
cci = (src - ma) / (0.015 * dev(src, length))
plot(cci, color=black)
band1 = hline(100, color=blue, linestyle=solid)
band0 = hline(-100, color=red, linestyle=solid)
bandl = hline(0, color=orange, linestyle=solid)
fill(band1, band0, color=olive)
p1 = plot(band0, color=red,title="-100")
p2 = plot(band1, color=blue,title="100")
p3 = plot(bandl, color=orange,title="0")
///////////// CCI 0Trend Strategy (by Marcoweb) v1.0 Strategy
if (not na(cci))
if (crossover(cci, bandl)
strategy.entry("CCI_L", strategy.long, stop=bandl, oca_type=strategy.oca.cancel, comment="CCI_L")
else
strategy.cancel(id="CCI_L")
if (crossunder(cci, bandl)
strategy.entry("CCI_S", strategy.short, stop=bandl, oca_type=strategy.oca.cancel, comment="CCI_S")
else
strategy.cancel(id="CCI_S")
//plot(strategy.equity, title="equity", color=red, linewidth=2, style=areabr)
With this coding I get the error : line 24 (if (crossover(cci, bandl): mismatched input '|E|' expecting RPAR
Hope you like the idea ;)
How to automate this strategy for free using a chrome extension.Hey everyone,
Recently we developed a chrome extension for automating TradingView strategies using the alerts they provide. Initially we were charging a monthly fee for the extension, but we have now decided to make it FREE for everyone. So to display the power of automating strategies via TradingView, we figured we would also provide a profitable strategy along with the custom alert script and commands for the alerts so you can easily cut and paste to begin trading for profit while you sleep.
Step 1:
You are going to need to download the Chrome Extension called AutoView. You can get the extension for free by following this link: bit.ly ( I had to shorten the link as it contains Google and TV automatically converts it to a symbol)
Step 2: Go to your chrome extension page, and under the new extension you'll see a "settings" button. In the setting you will have to connect and give permission to the exchange 1broker allowing the extension to place your orders automatically when triggered by an alert.
Step 3: Setup the strategy and custom script for the alerts in TradingView. The attached script is the strategy, you can play with the settings yourself to try and get better numbers/performance if you please.
This following script is for the custom alerts:
//@version=2
study("4All-Alert", shorttitle="Alerts")
src = close
len = input(4, minval=1, title="Length")
up = rma(max(change(src), 0), len)
down = rma(-min(change(src), 0), len)
rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down))
rsin = input(5)
sn = 100 - rsin
ln = 0 + rsin
short = crossover(rsi, sn) ? 1 : 0
long = crossunder(rsi, ln) ? 1 : 0
plot(long, "Long", color=green)
plot(short, "Short", color=red)
Now that you have the extension installed, the custom strategy and alert scripts in place, you simply need to create the alerts.
To get the alerts to communicate with the extension properly, there is a specific syntax that you will need to put in the message of the alert. You can find more details about the syntax here : gist.github.com
For this specific strategy, I use the Alerts script, long/short greater than 0.9 on close.
In the message for a long place this as your message:
Long
c=order b=short
c=position b=short l=200 t=market
b=long q=0.01 l=200 t=market tp=13 sl=25
and for the short...
Short
c=order b=long
c=position b=long l=200 t=market
b=short q=0.01 l=200 t=market tp=13 sl=25
If you'll notice in my above messages, compared to the strategy my tp and sl (take profit and stop loss) vary by a few pips. This is to cover the market opens and spread on 1broker. You can change the tp and sl in the strategy to the above and see that the overall profit will not vary much at all.
I hope this all makes sense and it is enough to not only make some people money, but to show the power of coming up with your own strategy and automating it using TradingView alerts and the free Chrome Extension AutoView.
ps. I highly recommend upgrading your TradingView account so you have access to back testing and multiple alerts.
There is really no reason you won't cover the cost and then some on a monthly basis using the tools provided.
Best of luck and happy trading.
Note: The extension currently allows for automation on 2 exchanges; 1broker and Okcoin. If you do not have accounts there, we'd appreciate you signing up using our referral links.
www.okcoin.com
1broker.com
Indicator: Trend Trigger FactorIntroduced by M.H.Pee, Trend Trigger Factor is designed to keep the trader trading with the trend.
System rules according to the developer:
* If the 15-day TTF is above 100 (indicating an uptrend), you will want to be in long positions.
* If the 15-day TTF is below -100, you will want to be short.
* If it is between -100 and 100, you should remain with the current position.
More info:
Original Article by Mr.Pee: drive.google.com
Stochastic Ribbon & EMAsHere's a comprehensive description for publishing your indicator:
---
# **Stochastic Ribbon & EMAs**
A clean and powerful trading indicator that combines **Stochastic Support/Resistance levels** with **Essential Moving Averages** for comprehensive market analysis.
## **📊 What It Does**
This indicator provides **7 key reference lines** on your chart:
- **3 Stochastic levels** (20%, 50%, 80%) - Dynamic support/resistance zones
- **4 Essential EMAs** (20, 50, 100, 200) - Trend direction and momentum
## **🎯 Key Features**
### **Stochastic Ribbon (3 Yellow Lines)**
- **80% Line**: Dynamic resistance level - potential selling zone
- **50% Line**: Market equilibrium - trend direction reference
- **20% Line**: Dynamic support level - potential buying zone
- **Default 50-period lookback** for stable, reliable levels
- **All lines in yellow** for clean, consistent visualization
### **Essential EMAs (4 Colored Lines)**
- **20 EMA** (Purple): Short-term trend and entry timing
- **50 EMA** (Dark Cyan): Medium-term trend direction
- **100 EMA** (Rosy Brown): Long-term trend confirmation
- **200 EMA** (Brown): Major trend and institutional levels
## **📈 How to Use**
### **For Support & Resistance:**
- **Above 80% line**: Look for selling opportunities (overbought zone)
- **Between 50-80%**: Bullish bias, pullbacks to 50% line for entries
- **Around 50% line**: Key equilibrium - watch for direction
- **Between 20-50%**: Bearish bias, bounces to 50% line for exits
- **Below 20% line**: Look for buying opportunities (oversold zone)
### **For Trend Analysis:**
- **EMA Stack Order**: Higher timeframe EMAs above lower = uptrend
- **Price above all EMAs**: Strong bullish momentum
- **Price below all EMAs**: Strong bearish momentum
- **EMA as dynamic support/resistance**: Bounces and rejections
### **For Entry Signals:**
- **Confluence zones**: Where Stochastic levels meet EMA levels
- **Breakouts**: Price breaking through multiple levels simultaneously
- **Reversals**: Price rejection at extreme Stochastic levels with EMA confirmation
## **⚙️ Settings**
### **Stochastic Ribbon**
- **Show/Hide**: Toggle the 3 Stochastic lines
- **Length**: Period for high/low calculation (default: 50)
- **Start**: Multiplier for calculation (default: 1)
### **EMAs**
- **Individual toggles**: Show/hide each EMA separately
- **Custom periods**: Adjust each EMA length (defaults: 20, 50, 100, 200)
- **Custom colors**: Personalize each EMA color
## **🚀 Why This Indicator?**
✅ **Clean & Simple**: No cluttered charts - just essential levels
✅ **Multi-Timeframe**: Works on all timeframes from 1m to 1W
✅ **Versatile**: Suitable for scalping, day trading, and swing trading
✅ **Low Lag**: Dynamic levels that adapt to current market conditions
✅ **Proven Components**: Combines two well-established technical concepts
✅ **Customizable**: Adjust all parameters to fit your trading style
## **💡 Pro Tips**
- **Use multiple timeframes**: Check higher timeframe alignment for stronger signals
- **Combine with volume**: Look for volume confirmation at key levels
- **Watch for confluences**: Best signals occur where multiple levels align
- **Respect the 50% line**: Often acts as the most important level for trend direction
## **📋 Technical Details**
- **Version**: Pine Script v5
- **Overlay**: Yes (displays on main price chart)
- **Plots**: 7 total (well within Pine Script limits)
- **Performance**: Optimized for fast loading and smooth operation
---
**Perfect for traders who want clear, actionable levels without chart clutter. Whether you're a beginner learning support/resistance or an experienced trader looking for clean reference points, this indicator delivers exactly what you need.**
Trigonometric StochasticTrigonometric Stochastic - Mathematical Smoothing Oscillator
Overview
A revolutionary approach to stochastic oscillation using sine wave mathematical smoothing. This indicator transforms traditional stochastic calculations through trigonometric functions, creating an ultra-smooth oscillator that reduces noise while maintaining sensitivity to price changes.
Mathematical Foundation
Unlike standard stochastic oscillators, this version applies sine wave smoothing:
• Raw Stochastic: (close - lowest_low) / (highest_high - lowest_low) × 100
• Trigonometric Smoothing: 50 + 50 × sin(2π × raw_stochastic / 100)
• Result: Naturally smooth oscillator with mathematical precision
Key Features
Advanced Smoothing Technology
• Sine Wave Filter: Eliminates choppy movements while preserving signal integrity
• Natural Boundaries: Mathematically constrained between 0-100
• Reduced False Signals: Trigonometric smoothing filters market noise effectively
Traditional Stochastic Levels
• Overbought Zone: 80 level (dashed line)
• Oversold Zone: 20 level (dashed line)
• Midline: 50 level (dotted line) - equilibrium point
• Visual Clarity: Clean oscillator panel with clear level markings
Smart Signal Generation
• Anti-Repaint Logic: Uses confirmed previous bar values
• Buy Signals: Generated when crossing above 30 from oversold territory
• Sell Signals: Generated when crossing below 70 from overbought territory
• Crossover Detection: Precise entry/exit timing
Professional Presentation
• Separate Panel: Dedicated oscillator window (overlay=false)
• Price Format: Formatted as price indicator with 2-decimal precision
• Theme Adaptive: Automatically matches your chart color scheme
Parameters
• Cycle Length (5-200): Period for highest/lowest calculations
- Shorter periods = more sensitive, more signals
- Longer periods = smoother, fewer but stronger signals
Trading Applications
Momentum Analysis
• Overbought/Oversold: Clear visual identification of extreme levels
• Momentum Shifts: Early detection of momentum changes
• Trend Strength: Monitor oscillator position relative to midline
Signal Trading
• Long Entries: Buy when crossing above 30 (oversold bounce)
• Short Entries: Sell when crossing below 70 (overbought rejection)
• Confirmation Tool: Use with trend indicators for higher probability trades
Divergence Detection
• Bullish Divergence: Price makes lower lows, oscillator makes higher lows
• Bearish Divergence: Price makes higher highs, oscillator makes lower highs
• Early Warning: Spot potential trend reversals before they occur
Trading Strategies
Scalping (5-15min timeframes)
• Use cycle length 10-14 for quick signals
• Focus on 20/80 level bounces
• Combine with price action confirmation
Swing Trading (1H-4H timeframes)
• Use cycle length 20-30 for reliable signals
• Wait for clear crossovers with momentum
• Monitor divergences for reversal setups
Position Trading (Daily+ timeframes)
• Use cycle length 50+ for major signals
• Focus on extreme readings (below 10, above 90)
• Combine with fundamental analysis
Advantages Over Standard Stochastic
1. Smoother Action: Sine wave smoothing reduces whipsaws
2. Mathematical Precision: Trigonometric functions provide consistent behavior
3. Maintained Sensitivity: Smoothing doesn't compromise signal quality
4. Reduced Noise: Cleaner signals in volatile markets
5. Visual Appeal: More aesthetically pleasing oscillator movement
Best Practices
• Market Context: Consider overall trend direction
• Multiple Timeframe: Confirm signals on higher timeframes
• Risk Management: Always use proper position sizing
• Backtesting: Test parameters on your preferred instruments
• Combination: Works excellently with trend-following indicators
Built-in Alerts
• Buy Alert: Trigonometric stochastic oversold crossover
• Sell Alert: Trigonometric stochastic overbought crossunder
Technical Specifications
• Pine Script Version: v6
• Panel: Separate oscillator window
• Format: Price indicator with 2-decimal precision
• Performance: Optimized for all timeframes
• Compatibility: Works with all instruments
Free and open-source indicator. Modify, improve, and share with the community!
Educational Value: Perfect for traders wanting to understand how mathematical smoothing improves oscillators and trigonometric applications in technical analysis.
DTA Seven-Candle Trend IndicatorSeven candles Trend Identifier
📊 Output:
* Trend shown in table: "Uptrend", "Downtrend", or "Sideways"
* Strength level:
* "Strong" = 10+ confirmations (HH/HL or LL/LH)
* "Moderate" = 6–9 confirmations
* "Weak" = anything else (Sideways)
* All colors sync with background and label styles
The yellow background color in the script indicates a sideways trend — meaning:
🟨 Yellow Background = Sideways Market
This occurs when:
* The last 7 candles do not form a clear uptrend (higher highs & higher lows)
* And also do not form a clear downtrend (lower highs & lower lows)
🔍 Why It Happens:
* Mixed candle structure
* Price is oscillating in a range
* No dominant directional momentum
* Often seen before breakouts or during consolidation
✅ Example:
Imagine the last 7 candles had highs and lows like this:
Bar High Low
1 100 95
2 98 94
3 101 96
4 100 95
5 99 93
6 102 97
7 100 95
In this case:
* Not consistently making higher highs/lows (so not uptrend)
* Not consistently making lower highs/lows (so not downtrend)
➡️ Therefore, the script marks it as sideways, and the background turns yellow.
Fibonacci Sequence Moving Average [BackQuant]Fibonacci Sequence Moving Average with Adaptive Oscillator
1. Overview
The Fibonacci Sequence Moving Average indicator is a two‑part trading framework that combines a custom moving average built from the famous Fibonacci number set with a fully featured oscillator, normalisation engine and divergence suite. The moving average half delivers an adaptive trend line that respects natural market rhythms, while the oscillator half translates that trend information into a bounded momentum stream that is easy to read, easy to compare across assets and rich in confluence signals. Everything from weighting logic to colour palettes can be customised, so the tool comfortably fits scalpers zooming into one‑minute candles as well as position traders running multi‑month trend following campaigns.
2. Core Calculation
Fibonacci periods – The default length array is 5, 8, 13, 21, 34. A single multiplier input lets you scale the whole family up or down without breaking the golden‑ratio spacing. For example a multiplier of 3 yields 15, 24, 39, 63, 102.
Component averages – Each period is passed through Simple Moving Average logic to produce five baseline curves (ma1 through ma5).
Weighting methods – You decide how those five values are blended:
• Equal weighting treats every curve the same.
• Linear weighting applies factors 1‑to‑5 so the slowest curve counts five times as much as the fastest.
• Exponential weighting doubles each step for a fast‑reacting yet still smooth line.
• Fibonacci weighting multiplies each curve by its own period value, honouring the spirit of ratio mathematics.
Smoothing engine – The blended average is then smoothed a second time with your choice of SMA, EMA, DEMA, TEMA, RMA, WMA or HMA. A short smoothing length keeps the result lively, while longer lengths create institution‑grade glide paths that act like dynamic support and resistance.
3. Oscillator Construction
Once the smoothed Fib MA is in place, the script generates a raw oscillator value in one of three flavours:
• Distance – Percentage distance between price and the average. Great for mean‑reversion.
• Momentum – Percentage change of the average itself. Ideal for trend acceleration studies.
• Relative – Distance divided by Average True Range for volatility‑aware scaling.
That raw series is pushed through a look‑back normaliser that rescales every reading into a fixed −100 to +100 window. The normalisation window defaults to 100 bars but can be tightened for fast markets or expanded to capture long regimes.
4. Visual Layer
The oscillator line is gradient‑coloured from deep red through sky blue into bright green, so you can spot subtle momentum shifts with peripheral vision alone. There are four horizontal guide lines: Extreme Bear at −50, Bear Threshold at −20, Bull Threshold at +20 and Extreme Bull at +50. Soft fills above and below the thresholds reinforce the zones without cluttering the chart.
The smoothed Fib MA can be plotted directly on price for immediate trend context, and each of the five component averages can be revealed for educational or research purposes. Optional bar‑painting mirrors oscillator polarity, tinting candles green when momentum is bullish and red when momentum is bearish.
5. Divergence Detection
The script automatically looks for four classes of divergences between price pivots and oscillator pivots:
Regular Bullish, signalling a possible bottom when price prints a lower low but the oscillator prints a higher low.
Hidden Bullish, often a trend‑continuation cue when price makes a higher low while the oscillator slips to a lower low.
Regular Bearish, marking potential tops when price carves a higher high yet the oscillator steps down.
Hidden Bearish, hinting at ongoing downside when price posts a lower high while the oscillator pushes to a higher high.
Each event is tagged with an ℝ or ℍ label at the oscillator pivot, colour‑coded for clarity. Look‑back distances for left and right pivots are fully adjustable so you can fine‑tune sensitivity.
6. Alerts
Five ready‑to‑use alert conditions are included:
• Bullish when the oscillator crosses above +20.
• Bearish when it crosses below −20.
• Extreme Bullish when it pops above +50.
• Extreme Bearish when it dives below −50.
• Zero Cross for momentum inflection.
Attach any of these to TradingView notifications and stay updated without staring at charts.
7. Practical Applications
Swing trading trend filter – Plot the smoothed Fib MA on daily candles and only trade in its direction. Enter on oscillator retracements to the 0 line.
Intraday reversal scouting – On short‑term charts let Distance mode highlight overshoots beyond ±40, then fade those moves back to mean.
Volatility breakout timing – Use Relative mode during earnings season or crypto news cycles to spot momentum surges that adjust for changing ATR.
Divergence confirmation – Layer the oscillator beneath price structure to validate double bottoms, double tops and head‑and‑shoulders patterns.
8. Input Summary
• Source, Fibonacci multiplier, weighting method, smoothing length and type
• Oscillator calculation mode and normalisation look‑back
• Divergence look‑back settings and signal length
• Show or hide options for every visual element
• Full colour and line width customisation
9. Best Practices
Avoid using tiny multipliers on illiquid assets where the shortest Fibonacci window may drop under three bars. In strong trends reduce divergence sensitivity or you may see false counter‑trend flags. For portfolio scanning set oscillator to Momentum mode, hide thresholds and colour bars only, which turns the indicator into a heat‑map that quickly highlights leaders and laggards.
10. Final Notes
The Fibonacci Sequence Moving Average indicator seeks to fuse the mathematical elegance of the golden ratio with modern signal‑processing techniques. It is not a standalone trading system, rather a multi‑purpose information layer that shines when combined with market structure, volume analysis and disciplined risk management. Always test parameters on historical data, be mindful of slippage and remember that past performance is never a guarantee of future results. Trade wisely and enjoy the harmony of Fibonacci mathematics in your technical toolkit.
Ultra BUY SELL//@version=5
indicator("Ultra BUY SELL", overlay = false)
// Inputs
src = input(close, "Source", group = "Main settings")
p = input.int(180, "Trend period", group = "Main settings", tooltip = "Changes STRONG signals' sensitivity.", minval = 1)
atr_p = input.int(155, "ATR Period", group = "Main settings", minval = 1)
mult = input.float(2.1, "ATR Multiplier", step = 0.1, group = "Main settings", tooltip = "Changes sensitivity: higher period = higher sensitivty.")
mode = input.string("Type A", "Signal mode", options = , group = "Mode")
use_ema_smoother = input.string("No", "Smooth source with EMA?", options = , group = "Source")
src_ema_period = input(3, "EMA Smoother period", group = "Source")
color_bars = input(true, "Color bars?", group = "Addons")
signals_view = input.string("All", "Signals to show", options = , group = "Signal's Addon")
signals_shape = input.string("Labels", "Signal's shape", options = , group = "Signal's Addon")
buy_col = input(color.rgb(0, 255, 8), "Buy colour", group = "Signal's Addon", inline = "BS")
sell_col = input(color.rgb(255, 0, 0), "Sell colour", group = "Signal's Addon", inline = "BS")
// Calculations
src := use_ema_smoother == "Yes" ? ta.ema(src, src_ema_period) : src
// Source;
h = ta.highest(src, p)
// Highest of src p-bars back;
l = ta.lowest(src, p)
// Lowest of src p-bars back.
d = h - l
ls = ""
// Tracker of last signal
m = (h + l) / 2
// Initial trend line;
m := bar_index > p ? m : m
atr = ta.atr(atr_p)
// ATR;
epsilon = mult * atr
// Epsilon is a mathematical variable used in many different theorems in order to simplify work with mathematical object. Here it used as sensitivity measure.
change_up = (mode == "Type B" ? ta.cross(src, m + epsilon) : ta.crossover(src, m + epsilon)) or src > m + epsilon
// If price breaks trend line + epsilon (so called higher band), then it is time to update the value of a trend line;
change_down = (mode == "Type B" ? ta.cross(src, m - epsilon) : ta.crossunder(src, m - epsilon)) or src < m - epsilon
// If price breaks trend line - epsilon (so called higher band), then it is time to update the value of a trend line.
sb = open < l + d / 8 and open >= l
ss = open > h - d / 8 and open <= h
strong_buy = sb or sb or sb or sb or sb
strong_sell = ss or ss or ss or ss or ss
m := (change_up or change_down) and m != m ? m : change_up ? m + epsilon : change_down ? m - epsilon : nz(m , m)
// Updating the trend line.
ls := change_up ? "B" : change_down ? "S" : ls
// Last signal. Helps avoid multiple labels in a row with the same signal;
colour = ls == "B" ? buy_col : sell_col
// Colour of the trend line.
buy_shape = signals_shape == "Labels" ? shape.labelup : shape.triangleup
sell_shape = signals_shape == "Labels" ? shape.labeldown : shape.triangledown
// Plottings
// Signals with label shape
plotshape(signals_shape == "Labels" and (signals_view == "All" or signals_view == "Buy/Sell") and change_up and ls != "B" and not strong_buy, "Buy signal" , color = colour, style = buy_shape , location = location.belowbar, size = size.normal, text = "BUY", textcolor = color.white, force_overlay=true)
// Plotting the BUY signal;
plotshape(signals_shape == "Labels" and (signals_view == "All" or signals_view == "Buy/Sell") and change_down and ls != "S" and not strong_sell, "Sell signal" , color = colour, style = sell_shape, size = size.normal, text = "SELL", textcolor = color.white, force_overlay=true)
// Plotting the SELL signal.
plotshape(signals_shape == "Labels" and (signals_view == "All" or signals_view == "Strong") and change_up and ls != "B" and strong_buy, "Strong Buy signal" , color = colour, style = buy_shape , location = location.belowbar, size = size.normal, text = "STRONG", textcolor = color.white, force_overlay=true)
// Plotting the STRONG BUY signal;
plotshape(signals_shape == "Labels" and (signals_view == "All" or signals_view == "Strong") and change_down and ls != "S" and strong_sell, "Strong Sell signal" , color = colour, style = sell_shape, size = size.normal, text = "STRONG", textcolor = color.white, force_overlay=true)
// Plotting the STRONG SELL signal.
// Signal with arrow shape
plotshape(signals_shape == "Arrows" and (signals_view == "All" or signals_view == "Buy/Sell") and change_up and ls != "B" and not strong_buy, "Buy signal" , color = colour, style = buy_shape , location = location.belowbar, size = size.tiny, force_overlay=true)
// Plotting the BUY signal;
plotshape(signals_shape == "Arrows" and (signals_view == "All" or signals_view == "Buy/Sell") and change_down and ls != "S" and not strong_sell, "Sell signal" , color = colour, style = sell_shape, size = size.tiny, force_overlay=true)
// Plotting the SELL signal.
plotshape(signals_shape == "Arrows" and (signals_view == "All" or signals_view == "Strong") and change_up and ls != "B" and strong_buy, "Strong Buy signal" , color = colour, style = buy_shape , location = location.belowbar, size = size.tiny, force_overlay=true)
// Plotting the STRONG BUY signal;
plotshape(signals_shape == "Arrows" and (signals_view == "All" or signals_view == "Strong") and change_down and ls != "S" and strong_sell, "Strong Sell signal" , color = colour, style = sell_shape, size = size.tiny, force_overlay=true)
// Plotting the STRONG SELL signal.
barcolor(color_bars ? colour : na)
// Bar coloring
// Alerts
matype = input.string(title='MA Type', defval='EMA', options= )
ma_len1 = input(title='Short EMA1 Length', defval=5)
ma_len2 = input(title='Long EMA1 Length', defval=7)
ma_len3 = input(title='Short EMA2 Length', defval=5)
ma_len4 = input(title='Long EMA2 Length', defval=34)
ma_len5 = input(title='Short EMA3 Length', defval=98)
ma_len6 = input(title='Long EMA3 Length', defval=45)
ma_len7 = input(title='Short EMA4 Length', defval=7)
ma_len8 = input(title='Long EMA4 Length', defval=11)
ma_len9 = input(title='Short EMA5 Length', defval=11)
ma_len10 = input(title='Long EMA5 Length', defval=15)
ma_offset = input(title='Offset', defval=0)
//res = input(title="Resolution", type=resolution, defval="240")
f_ma(malen) =>
float result = 0
if matype == 'EMA'
result := ta.ema(src, malen)
result
if matype == 'SMA'
result := ta.sma(src, malen)
result
result
htf_ma1 = f_ma(ma_len1)
htf_ma2 = f_ma(ma_len2)
htf_ma3 = f_ma(ma_len3)
htf_ma4 = f_ma(ma_len4)
htf_ma5 = f_ma(ma_len5)
htf_ma6 = f_ma(ma_len6)
htf_ma7 = f_ma(ma_len7)
htf_ma8 = f_ma(ma_len8)
htf_ma9 = f_ma(ma_len9)
htf_ma10 = f_ma(ma_len10)
//plot(out1, color=green, offset=ma_offset)
//plot(out2, color=red, offset=ma_offset)
//lengthshort = input(8, minval = 1, title = "Short EMA Length")
//lengthlong = input(200, minval = 2, title = "Long EMA Length")
//emacloudleading = input(50, minval = 0, title = "Leading Period For EMA Cloud")
//src = input(hl2, title = "Source")
showlong = input(false, title='Show Long Alerts')
showshort = input(false, title='Show Short Alerts')
showLine = input(false, title='Display EMA Line')
ema1 = input(true, title='Show EMA Cloud-1')
ema2 = input(true, title='Show EMA Cloud-2')
ema3 = input(true, title='Show EMA Cloud-3')
ema4 = input(true, title='Show EMA Cloud-4')
ema5 = input(true, title='Show EMA Cloud-5')
emacloudleading = input.int(0, minval=0, title='Leading Period For EMA Cloud')
mashort1 = htf_ma1
malong1 = htf_ma2
mashort2 = htf_ma3
malong2 = htf_ma4
mashort3 = htf_ma5
malong3 = htf_ma6
mashort4 = htf_ma7
malong4 = htf_ma8
mashort5 = htf_ma9
malong5 = htf_ma10
cloudcolour1 = mashort1 >= malong1 ? color.rgb(0, 255, 0) : color.rgb(255, 0, 0)
cloudcolour2 = mashort2 >= malong2 ? #4caf4f47 : #ff110047
cloudcolour4 = mashort4 >= malong4 ? #4caf4f52 : #f2364652
cloudcolour5 = mashort5 >= malong5 ? #33ff0026 : #ff000026
//03abc1
mashortcolor1 = mashort1 >= mashort1 ? color.olive : color.maroon
mashortcolor2 = mashort2 >= mashort2 ? color.olive : color.maroon
mashortcolor3 = mashort3 >= mashort3 ? color.olive : color.maroon
mashortcolor4 = mashort4 >= mashort4 ? color.olive : color.maroon
mashortcolor5 = mashort5 >= mashort5 ? color.olive : color.maroon
mashortline1 = plot(ema1 ? mashort1 : na, color=showLine ? mashortcolor1 : na, linewidth=1, offset=emacloudleading, title='Short Leading EMA1', force_overlay=true)
mashortline2 = plot(ema2 ? mashort2 : na, color=showLine ? mashortcolor2 : na, linewidth=1, offset=emacloudleading, title='Short Leading EMA2', force_overlay=true)
mashortline3 = plot(ema3 ? mashort3 : na, color=showLine ? mashortcolor3 : na, linewidth=1, offset=emacloudleading, title='Short Leading EMA3', force_overlay=true)
mashortline4 = plot(ema4 ? mashort4 : na, color=showLine ? mashortcolor4 : na, linewidth=1, offset=emacloudleading, title='Short Leading EMA4', force_overlay=true)
mashortline5 = plot(ema5 ? mashort5 : na, color=showLine ? mashortcolor5 : na, linewidth=1, offset=emacloudleading, title='Short Leading EMA5', force_overlay=true)
malongcolor1 = malong1 >= malong1 ? color.green : color.red
malongcolor2 = malong2 >= malong2 ? color.green : color.red
malongcolor3 = malong3 >= malong3 ? color.green : color.red
malongcolor4 = malong4 >= malong4 ? color.green : color.red
malongcolor5 = malong5 >= malong5 ? color.green : color.red
malongline1 = plot(ema1 ? malong1 : na, color=showLine ? malongcolor1 : na, linewidth=3, offset=emacloudleading, title='Long Leading EMA1', force_overlay=true)
malongline2 = plot(ema2 ? malong2 : na, color=showLine ? malongcolor2 : na, linewidth=3, offset=emacloudleading, title='Long Leading EMA2', force_overlay=true)
malongline3 = plot(ema3 ? malong3 : na, color=showLine ? malongcolor3 : na, linewidth=3, offset=emacloudleading, title='Long Leading EMA3', force_overlay=true)
malongline4 = plot(ema4 ? malong4 : na, color=showLine ? malongcolor4 : na, linewidth=3, offset=emacloudleading, title='Long Leading EMA4', force_overlay=true)
malongline5 = plot(ema5 ? malong5 : na, color=showLine ? malongcolor5 : na, linewidth=3, offset=emacloudleading, title='Long Leading EMA5', force_overlay=true)
fill(mashortline1, malongline1, color=cloudcolour1, title='MA Cloud1', transp=45)
fill(mashortline2, malongline2, color=cloudcolour2, title='MA Cloud2', transp=65)
fill(mashortline4, malongline4, color=cloudcolour4, title='MA Cloud4', transp=65)
fill(mashortline5, malongline5, color=cloudcolour5, title='MA Cloud5', transp=65)
leftBars = input(15, title='Left Bars ')
rightBars = input(15, title='Right Bars')
volumeThresh = input(20, title='Volume Threshold')
//
highUsePivot = fixnan(ta.pivothigh(leftBars, rightBars) )
lowUsePivot = fixnan(ta.pivotlow(leftBars, rightBars) )
r1 = plot(highUsePivot, color=ta.change(highUsePivot) ? na : #FF0000, linewidth=3, offset=-(rightBars + 1), title='Resistance', force_overlay=true)
s1 = plot(lowUsePivot, color=ta.change(lowUsePivot) ? na : #00ff0d, linewidth=3, offset=-(rightBars + 1), title='Support', force_overlay=true)
//Volume %
short = ta.ema(volume, 5)
long = ta.ema(volume, 10)
osc = 100 * (short - long) / long
//For bull / bear wicks
// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at mozilla.org
// © divudivu600
// Developer By ALCON ALGO
//telegram : @harmonicryptosignals
//@version = 5
//indicator(shorttitle='Oscillator Vision', title='Alcon Oscillator Vision', overlay=false)
n1 = input(10, 'Channel length')
n2 = input(21, 'Average length')
reaction_wt = input.int(defval=1, title='Reaction in change of direction', minval=1)
nsc = input.float(53, 'Levels About Buys', minval=0.0)
nsv = input.float(-53, 'Levels About Sells', maxval=-0.0)
Buy_sales = input(true, title='Only Smart Buy Reversal')
Sell_sales = input(true, title='Only Smart Sell Reversal')
Histogram = input(true, title='Show Histogarm')
//Trendx = input(false, title='Show Trendx')
barras = input(true, title='Divergence on chart(Bars)')
divregbull = input(true, title='Regular Divergence Bullish')
divregbear = input(true, title='Regular Divergence Bearish')
divhidbull = input(true, title='Show Divergence Hidden Bullish')
divhidbear = input(true, title='Show Divergence Hidden Bearish')
Tags = input(true, title='Show Divergence Lable')
amme = input(false, title='Activar media movil Extra para WT')
White = #FDFEFE
Black = #000000
Bearish = #e91e62
Bullish = #18e0ff
Strong_Bullish = #2962ff
Bullish2 = #00bedc
Blue1 = #00D4FF
Blue2 = #009BBA
orange = #FF8B00
yellow = #FFFB00
LEZ = #0066FF
purp = #FF33CC
// Colouring
tf(_res, _exp, gaps_on) =>
gaps_on == 0 ? request.security(syminfo.tickerid, _res, _exp) : gaps_on == true ? request.security(syminfo.tickerid, _res, _exp, barmerge.gaps_on, barmerge.lookahead_off) : request.security(syminfo.tickerid, _res, _exp, barmerge.gaps_off, barmerge.lookahead_off)
ha_htf = ''
show_ha = input.bool(true, "Show HA Plot/ Market Bias", group="HA Market Bias")
ha_len = input(7, 'Period', group="HA Market Bias")
ha_len2 = input(10, 'Smoothing', group="HA Market Bias")
// Calculations {
o = ta.ema(open, ha_len)
c = ta.ema(close, ha_len)
h1 = ta.ema(high, ha_len)
l1 = ta.ema(low, ha_len)
haclose = tf(ha_htf, (o + h1 + l1 + c) / 4, 0)
xhaopen = tf(ha_htf, (o + c) / 2, 0)
haopen = na(xhaopen ) ? (o + c) / 2 : (xhaopen + haclose ) / 2
hahigh = math.max(h1, math.max(haopen, haclose))
halow = math.min(l1, math.min(haopen, haclose))
o2 = tf(ha_htf, ta.ema(haopen, ha_len2), 0)
c2 = tf(ha_htf, ta.ema(haclose, ha_len2), 0)
h2 = tf(ha_htf, ta.ema(hahigh, ha_len2), 0)
l2 = tf(ha_htf, ta.ema(halow, ha_len2), 0)
ha_avg = (h2 + l2) / 2
// }
osc_len = 8
osc_bias = 100 *(c2 - o2)
osc_smooth = ta.ema(osc_bias, osc_len)
sigcolor =
(osc_bias > 0) and (osc_bias >= osc_smooth) ? color.new(Bullish, 35) :
(osc_bias > 0) and (osc_bias < osc_smooth) ? color.new(Bullish2, 75) :
(osc_bias < 0) and (osc_bias <= osc_smooth) ? color.new(Bearish, 35) :
(osc_bias < 0) and (osc_bias > osc_smooth) ? color.new(Bearish, 75) :
na
// }
nsc1 = nsc
nsc2 = nsc + 5
nsc3 = nsc + 10
nsc4 = nsc + 15
nsc5 = nsc + 20
nsc6 = nsc + 25
nsc7 = nsc + 30
nsc8 = nsc + 35
nsv1 = nsv - 5
nsv2 = nsv - 10
nsv3 = nsv - 15
nsv4 = nsv - 20
nsv5 = nsv - 25
nsv6 = nsv - 30
nsv7 = nsv - 35
nsv8 = nsv - 40
ap = hlc3
esa = ta.ema(ap, n1)
di = ta.ema(math.abs(ap - esa), n1)
ci = (ap - esa) / (0.015 * di)
tci = ta.ema(ci, n2)
wt1 = tci
wt2 = ta.sma(wt1, 4)
direction = 0
direction := ta.rising(wt1, reaction_wt) ? 1 : ta.falling(wt1, reaction_wt) ? -1 : nz(direction )
Change_of_direction = ta.change(direction, 1)
pcol = direction > 0 ? Strong_Bullish : direction < 0 ? Bearish : na
obLevel1 = input(60, 'Over Bought Level 1')
obLevel2 = input(53, 'Over Bought Level 2')
osLevel1 = input(-60, 'Over Sold Level 1')
osLevel2 = input(-53, 'Over Sold Level 2')
rsi = ta.rsi(close,14)
color greengrad = color.from_gradient(rsi, 10, 90, #00ddff, #007d91)
color redgrad = color.from_gradient(rsi, 10, 90, #8b002e, #e91e62)
ob1 = plot(obLevel1, color=#e91e6301)
os1 = plot(osLevel1, color=#00dbff01)
ob2 = plot(obLevel2, color=#e91e6301)
os2 = plot(osLevel2, color=#00dbff01)
p1 = plot(wt1, color=#00dbff01)
p2 = plot(wt2, color=#e91e6301)
plot(wt1 - wt2, color=wt2 - wt1 > 0 ? redgrad : greengrad, style=plot.style_columns)
// fill(p1,p2,color = wt2 - wt1 > 0 ? redgrad: greengrad) // old
fill(p1,p2,color = sigcolor)
// new
fill(ob1,ob2,color = #e91e6350)
fill(os1,os2,color = #00dbff50)
midpoint = (nsc + nsv) / 2
ploff = (nsc - midpoint) / 8
BullSale = ta.crossunder(wt1, wt2) and wt1 >= nsc and Buy_sales == true
BearSale = ta.crossunder(wt1, wt2) and Buy_sales == false
Bullishh = ta.crossover(wt1, wt2) and wt1 <= nsv and Sell_sales == true
Bearishh = ta.crossover(wt1, wt2) and Sell_sales == false
plot(BullSale ? wt2 + ploff : na, style=plot.style_circles, color=color.new(Bearish, 0), linewidth=6, title='BuysG')
plot(BearSale ? wt2 + ploff : na, style=plot.style_circles, color=color.new(Bearish, 0), linewidth=6, title='SellsG')
plot(Bullishh ? wt2 - ploff : na, style=plot.style_circles, color=color.new(Strong_Bullish, 0), linewidth=6, title='Buys On Sale')
plot(Bearishh ? wt2 - ploff : na, style=plot.style_circles, color=color.new(Strong_Bullish, 0), linewidth=6, title='Sells on Sale')
//plot(Histogram ? wt1 - wt2 : na, style=plot.style_area, color=color.new(Blue2, 80), linewidth=1, title='Histograma')
//barcolor(barras == true and Bullishh == true or barras == true and Bearishh == true ? Bullish2 : na)
//barcolor(barras == true and BullSale == true or barras == true and BearSale == true ? Bearish : na)
/////// Divergence ///////
f_top_fractal(_src) =>
_src < _src and _src < _src and _src > _src and _src > _src
f_bot_fractal(_src) =>
_src > _src and _src > _src and _src < _src and _src < _src
f_fractalize(_src) =>
f_top_fractal(_src) ? 1 : f_bot_fractal(_src) ? -1 : 0
fractal_top1 = f_fractalize(wt1) > 0 ? wt1 : na
fractal_bot1 = f_fractalize(wt1) < 0 ? wt1 : na
high_prev1 = ta.valuewhen(fractal_top1, wt1 , 0)
high_price1 = ta.valuewhen(fractal_top1, high , 0)
low_prev1 = ta.valuewhen(fractal_bot1, wt1 , 0)
low_price1 = ta.valuewhen(fractal_bot1, low , 0)
regular_bearish_div1 = fractal_top1 and high > high_price1 and wt1 < high_prev1 and divregbear == true
hidden_bearish_div1 = fractal_top1 and high < high_price1 and wt1 > high_prev1 and divhidbear == true
regular_bullish_div1 = fractal_bot1 and low < low_price1 and wt1 > low_prev1 and divregbull == true
hidden_bullish_div1 = fractal_bot1 and low > low_price1 and wt1 < low_prev1 and divhidbull == true
col1 = regular_bearish_div1 ? Bearish : hidden_bearish_div1 ? Bearish : na
col2 = regular_bullish_div1 ? Strong_Bullish : hidden_bullish_div1 ? Strong_Bullish : na
//plot(title='Divergence Bearish', series=fractal_top1 ? wt1 : na, color=col1, linewidth=2, transp=0)
//plot(title='Divergence Bullish', series=fractal_bot1 ? wt1 : na, color=col2, linewidth=2, transp=0)
plotshape(regular_bearish_div1 and divregbear and Tags ? wt1 + ploff * 1 : na, title='Divergence Regular Bearish', text='Bear', location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.new(Bearish, 0), textcolor=color.new(White, 0))
plotshape(hidden_bearish_div1 and divhidbear and Tags ? wt1 + ploff * 1 : na, title='Divergence Hidden Bearish', text='H Bear', location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.new(Bearish, 0), textcolor=color.new(White, 0))
plotshape(regular_bullish_div1 and divregbull and Tags ? wt1 - ploff * 1 : na, title='Divergence Regular Bullish', text='Bull', location=location.absolute, style=shape.labelup, size=size.tiny, color=color.new(Strong_Bullish, 0), textcolor=color.new(White, 0))
plotshape(hidden_bullish_div1 and divhidbull and Tags ? wt1 - ploff * 1 : na, title='Divergence Hidden Bullish', text='H Bull', location=location.absolute, style=shape.labelup, size=size.tiny, color=color.new(Strong_Bullish, 0), textcolor=color.new(White, 0))
/////// Unfazed Alerts //////
////////////////////////////////////////////////-MISTERMOTA MOMENTUM-/////////////////////////////////////
source = input(close)
responsiveness = math.max(0.00001, input.float(0.9, minval=0.0, maxval=1.0))
periodd = input(50)
sd = ta.stdev(source, 50) * responsiveness
var worm = source
diff = source - worm
delta = math.abs(diff) > sd ? math.sign(diff) * sd : diff
worm += delta
ma = ta.sma(source, periodd)
raw_momentum = (worm - ma) / worm
current_med = raw_momentum
min_med = ta.lowest(current_med, periodd)
max_med = ta.highest(current_med, periodd)
temp = (current_med - min_med) / (max_med - min_med)
value = 0.5 * 2
value *= (temp - .5 + .5 * nz(value ))
value := value > .9999 ? .9999 : value
value := value < -0.9999 ? -0.9999 : value
temp2 = (1 + value) / (1 - value)
momentum = .25 * math.log(temp2)
momentum += .5 * nz(momentum )
//momentum := raw_momentum
signal = nz(momentum )
trend = math.abs(momentum) <= math.abs(momentum )
////////////////////////////////////////////////-GROWING/FAILING-//////////////////////////////////////////
length = input.int(title="MOM Period", minval=1, defval=14, group="MOM Settings")
srcc = input(title="MOM Source", defval=hlc3, group="MOM Settings")
txtcol_grow_above = input(#1a7b24, "Above Grow", group="MOM Settings", inline="Above")
txtcol_fall_above = input(#672ec5, "Fall", group="MOM Settings", inline="Above")
txtcol_grow_below = input(#F37121, "Below Grow", group="MOM Settings", inline="Below")
txtcol_fall_below = input(#be0606, "Fall", group="MOM Settings", inline="Below")
ma(source, length, type) =>
switch type
"SMA" => ta.sma(source, length)
"EMA" => ta.ema(source, length)
"SMMA (RMA)" => ta.rma(source, length)
"WMA" => ta.wma(source, length)
"VWMA" => ta.vwma(source, length)
typeMA = input.string(title = "Method", defval = "SMA", options= , group="MA Settings")
smoothingLength = input.int(title = "Length", defval = 5, minval = 1, maxval = 100, group="MA Settings")
smoothingLine = ma(delta, smoothingLength, typeMA)
deltaText=(delta > 0 ? (delta > delta ? " MOM > 0 and ▲ Growing, MOM = " + str.tostring(delta , "#.##") :" MOM > 0 and ▼ Falling, MOM = " + str.tostring(delta , "#.##") ) : (delta > delta ? "MOM < 0 and ▲ Growing, MOM = " + str.tostring(delta , "#.##"): " MOM < 0 and ▼ Falling, MOM = " + str.tostring(delta , "#.##")))
oneDay = 24 * 60 * 60 * 1000
barsAhead = 3
tmf = if timeframe.ismonthly
barsAhead * oneDay * 30
else if timeframe.isweekly
barsAhead * oneDay * 7
else if timeframe.isdaily
barsAhead * oneDay
else if timeframe.isminutes
barsAhead * oneDay * timeframe.multiplier / 1440
else if timeframe.isseconds
barsAhead * oneDay * timeframe.multiplier / 86400
else
0
angle(_src) =>
rad2degree = 180 / 3.14159265359
//pi
ang = rad2degree * math.atan((_src - _src ) / ta.atr(14))
ang
emae = angle(smoothingLine)
emaanglestat = emae > emae ? "▲ Growing": "▼ Falling"
deltaTextxxx = "MOM MA/ATR angle value is " + str.tostring(emae, "#.##") + "° and is " + emaanglestat
deltacolorxxx = emae >0 and emae >=emae ? txtcol_grow_above : txtcol_fall_below
// Label
label lpt1 = label.new(time, -30, text=deltaTextxxx , color=deltacolorxxx, xloc=xloc.bar_time, style=label.style_label_left, textcolor=color.white, textalign=text.align_left, size=size.normal)
label.set_x(lpt1, label.get_x(lpt1) + tmf)
label.delete(lpt1 )
txtdeltaColors = (delta > 50 ? (delta < delta ? txtcol_grow_above : txtcol_fall_above) : (delta < delta ? txtcol_grow_below : txtcol_fall_below))
label ldelta1 = label.new(time, 30, text=deltaText , color=txtdeltaColors, xloc=xloc.bar_time, style=label.style_label_left, textcolor=color.white, textalign=text.align_left, size=size.normal)
label.set_x(ldelta1, label.get_x(ldelta1) + tmf)
label.delete(ldelta1 )
Horizontal Lines [Vynkron]📄 Script Description – "Horizontal Lines "
This Pine Script v6 indicator draws up to 11 customizable horizontal lines on your chart, ideal for marking round levels, support/resistance zones, or psychological price points (e.g. every 100 points on the NQ).
🔧 Features:
11 price inputs (default: 22000 to 23000, step 100)
Single color, width, and style configuration for all lines
Uses hline() so lines are fixed across the full chart
Easy to adjust or toggle lines individually
💡 Use Cases:
Highlighting round-number levels on instruments like Nasdaq 100 Futures
Visualizing major price zones
Manual technical analysis without scripting loops
Let me know if you want to make it dynamic, add labels, or only draw lines within the visible chart range.
Custom Multiple SMAsThe Custom Breakout Indicator provides visual guidance for identifying entry and exit signals within the BreakoutCatcher strategy. It consists of a fan of multiple Simple Moving Averages (SMAs) that make current market conditions visually accessible:
Flat, tightly clustered fan → Market is consolidating
First candle closing outside the fan → Potential entry signal (breakout)
Wide, rapidly expanding fan → Market is overheated, avoid entries
Additionally, the indicator displays a yellow trendline (EMA 100) as an overarching trend filter:
Price above EMA 100 → Consider only long signals
Price below EMA 100 → Consider only short signals
🔗 Part of the BreakoutCatcher strategy – available at: www.twn-trading.com
✔️ Fully functional on all timeframes
Multi SMA AnalyzerMulti SMA Analyzer with Custom SMA Table & Advanced Session Logic
A feature-rich SMA analysis suite for traders, offering up to 7 configurable SMAs, in-depth trend detection, real-time table, and true session-aware calculations.
Ideal for those who want to combine intraday, swing, and higher-timeframe trend analysis with maximum chart flexibility.
Key Features
📊 Multi-SMA Overlay
- 7 SMAs (default: 5, 20, 50, 100, 200, 21, 34)—individually configurable (period, source, color, line style)
- Show/hide each SMA, custom line style (solid, stepline, circles), and color logic
- Dynamic color: full opacity above SMA, reduced when below
⏰ Session-Aware SMAs
- Each SMA can be calculated using only user-defined session hours/days/timezone
- “Ignore extended hours” option for accurate intraday trend
📋 Smart Data Table
- Live SMA values, % distance from price, and directional arrows (↑/↓/→)
- Bull/Bear/Sideways trend classification
- Custom table position, size, colors, transparency
- Table can run on chart or custom (higher) timeframe for multi-TF analysis
🎯 Golden/Death Cross Detection
- Flexible crossover engine: select any two from (5, 10, 20, 50, 100, 200) for fast/slow SMA cross signals
- Plots icons (★ Golden, 💀 Death), optional crossover labels with custom size/colors
🏷️ SMA Labels
- Optional on-chart SMA period labels
- Custom placement (above/below/on line), size, color, offset
🚨 Signal & Trend Engine
- Bull/Bear/Sideways logic: price vs. multiple SMAs (not just one pair)
- Volume spike detection (2x 20-period SMA)
- Bullish engulfing candlestick detection
- All signals can use chart or custom table timeframe
🎨 Visual Customization
- Dynamic background color (Bull: green, Bear: red, Neutral: gray)
- Every visual aspect is customizable: label/table colors, transparency, size, position
🔔 Built-in Alerts
- Crossovers (SMA20/50, Golden/Death)
- Bull trend, volume spikes, engulfing pattern—all alert-ready
How It Works
- Session Filtering:
- SMAs can be set to count only bars from your chosen market session, for true intraday/trading-hour signals
Dynamic Table & Signals:
- Table and all signal logic run on your selected chart or custom timeframe
Flexible Crossover:
- Choose any pair (5, 10, 20, 50, 100, 200) for cross detection—SMA 10 is available for crossover even if not shown as an SMA line
Everything is modular:
- Toggle features, set visuals, and alerts to your workflow
🚨 How to Use Alerts
- All key signals (crossovers, trend shifts, volume spikes, engulfing patterns) are available as alert conditions.
To enable:
- Click the “Alerts” (clock) icon at the top of TradingView.
- Select your desired signal (e.g., “Golden Cross”) from the condition dropdown.
- Set your alert preferences and create the alert.
- Now, you’ll get notified automatically whenever a signal occurs!
Perfect For
- Multi-timeframe and swing traders seeking higher timeframe SMA confirmation
- Intraday traders who want to ignore pre/post-market data
- Anyone wanting a modern, powerful, fully customizable multi-SMA overlay
// P.S: Experiment with Golden Cross where Fast SMA is 5 and Slow SMA is 20.
// Set custom timeframe for 4 hr while monitoring your chart on 15 min time frame.
// Enable Background Color and Use Table Timeframe for Background.
// Uncheck Pine labels in Style tab.
Clean, open-source, and loaded with pro features—enjoy!
Like, share, and let me know if you'd like any new features added.
Fibonacci Extension Distance Table## 🧾 **Script Name**: Fibonacci Extension Distance Table
### 🎯 Purpose:
This script helps traders visually track **key Fibonacci extension levels** on any chart and immediately see:
* The **price target** at each extension
* The **distance in percentage** from the current market price
It is especially helpful for:
* **Profit targets in trending trades**
* Monitoring **potential resistance zones** in uptrends
* Planning **entry/exit timing**
---
## 🧮 **How It Works**
1. **Swing Logic (A → B → C)**
* It automatically finds:
* `A`: the **lowest low** in the last `swingLen` bars
* `B`: the **highest high** in that same lookback
* `C`: current bar’s low is used as the **retracement point** (simplified)
2. **Extension Formula**
Using the Fibonacci formula:
```text
Extension Price = C + (B - A) × Fibonacci Ratio
```
The script calculates projected target prices at:
* **100%**
* **127.2%**
* **161.8%** (Golden Ratio)
* **200%**
* **261.8%**
3. **Distance Calculation**
For each level, it calculates:
* The **absolute difference** between current price and the extension level
* The **percentage difference**, which helps quickly assess how close or far the market is from that target
---
## 📋 **Table Output in Top Right**
| Level | Target ₹ | Dist % from current price |
| ------ | ---------- | ------------------------- |
| 100% | Calculated | % Above/Below |
| 127.2% | Calculated | % Above/Below |
| 161.8% | Calculated | % Above/Below |
| 200% | Calculated | % Above/Below |
| 261.8% | Calculated | % Above/Below |
* The table updates **live on each bar**
* It **highlights levels** where price is nearing
* Useful in **any time frame** and **any market** (stocks, crypto, forex)
---
## 🔔 Example Use Case
You bought a stock at ₹100, and recent swing shows:
* A = ₹80
* B = ₹110
* C = ₹100
The 161.8% extension = 100 + (110 − 80) × 1.618 = ₹148.54
If the current price is ₹144, the table will show:
* Golden Ratio Target: ₹148.54
* Distance: −4.54
* Distance %: −3.05%
You now know your **target is near** and can plan your **exit or trailing stop**.
---
## 🧠 Benefits
* No need to draw extensions manually
* Automatically adapts to new swing structures
* Supports **scalping**, **swing**, and **positional** strategies
ATRWhat the Indicator Shows:
A compact table with four cells is displayed in the bottom-left corner of the chart:
| ATR | % | Level | Lvl+ATR |
Explanation of the Columns:
ATR — The averaged daily range (volatility) calculated with filtering of abnormal bars (extremely large or small daily candles are ignored).
% — The percentage of the daily ATR that the price has already covered today (the difference between the daily Open and Close relative to ATR).
Level — A custom user-defined level set through the indicator settings.
Lvl+ATR — The sum of the daily ATR and the user-defined level. This can be used, for example, as a target or stop-loss reference.
Color Highlighting of the "%" Cell:
The background color of the "%" ATR cell changes depending on the value:
✅ If the value is less than 10% — the cell is green (market is calm, small movement).
➖ If the value is between 10% and 50% — no highlighting (average movement, no signal).
🟡 If the value is between 50% and 70% — the cell is yellow (movement is increasing, be alert).
🔴 If the value is above 70% — the cell is red (the market is actively moving, high volatility).
Key Features:
✔ All ATR calculations and percentage progress are performed strictly based on daily data, regardless of the chart's current timeframe.
✔ The indicator is ideal for intraday traders who want to monitor daily volatility levels.
✔ The table always displays up-to-date information for quick decision-making.
✔ Filtering of abnormal bars makes ATR more stable and objective.
What is Adaptive ATR in this Indicator:
Instead of the classic ATR, which simply averages the true range, this indicator uses a custom algorithm:
✅ It analyzes daily bars over the past 100 days.
✅ Calculates the range High - Low for each bar.
✅ If the bar's range deviates too much from the average (more than 1.8 times higher or lower), the bar is considered abnormal and ignored.
✅ Only "normal" bars are included in the calculation.
✅ The average range of these normal bars is the adaptive ATR.
Detailed Algorithm of the getAdaptiveATR() Function:
The function takes the number of bars to include in the calculation (for example, 5):
The average of the last 5 normal bars is calculated.
pinescript
Копировать
Редактировать
adaptiveATR = getAdaptiveATR(5)
Step-by-Step Process:
An empty array ranges is created to store the ranges.
Daily bars with indices from 1 to 100 are iterated over.
For each bar:
🔹 The daily High and Low with the required offset are loaded via request.security().
🔹 The range High - Low is calculated.
🔹 The temporary average range of the current array is calculated.
🔹 The bar is checked for abnormality (too large or too small).
🔹 If the bar is normal or it's the first bar — its range is added to the array.
Once the array accumulates the required number of bars (count), their average is calculated — this is the adaptive ATR.
If it's not possible to accumulate the required number of bars — na is returned.
Что показывает индикатор:
На графике внизу слева отображается компактная таблица из четырех ячеек:
ATR % Уровень Ур+ATR
Пояснения к столбцам:
ATR — усреднённый дневной диапазон (волатильность), рассчитанный с фильтрацией аномальных баров (слишком большие или маленькие дневные свечи игнорируются).
% — процент дневного ATR, который уже "прошла" цена на текущий день (разница между открытием и закрытием относительно ATR).
Уровень — пользовательский уровень, который задаётся вручную через настройки индикатора.
Ур+ATR — сумма уровня и дневного ATR. Может использоваться, например, как ориентир для целей или стопов.
Цветовая подсветка ячейки "%":
Цвет фона ячейки с процентом ATR меняется в зависимости от значения:
✅ Если значение меньше 10% — ячейка зелёная (рынок пока спокоен, маленькое движение).
➖ Если значение от 10% до 50% — фон не подсвечивается (среднее движение, нет сигнала).
🟡 Если значение от 50% до 70% — ячейка жёлтая (движение усиливается, повышенное внимание).
🔴 Если значение выше 70% — ячейка красная (рынок активно движется, высокая волатильность).
Особенности работы:
✔ Все расчёты ATR и процентного прохождения производятся исключительно по дневным данным, независимо от текущего таймфрейма графика.
✔ Индикатор подходит для трейдеров, которые торгуют внутри дня, но хотят ориентироваться на дневные уровни волатильности.
✔ В таблице всегда отображается актуальная информация для принятия быстрых торговых решений.
✔ Фильтрация аномальных баров делает ATR более устойчивым и объективным.
Что такое адаптивный ATR в этом индикаторе
Вместо классического ATR, который просто усредняет истинный диапазон, здесь используется собственный алгоритм:
✅ Он берет дневные бары за последние 100 дней.
✅ Для каждого из них рассчитывает диапазон High - Low.
✅ Если диапазон бара слишком сильно отличается от среднего (более чем в 1.8 раза больше или меньше), бар считается аномальным и игнорируется.
✅ Только нормальные бары попадают в расчёт.
✅ В итоге считается среднее из диапазонов этих нормальных баров — это и есть адаптивный ATR.
Подробный алгоритм функции getAdaptiveATR()
Функция принимает количество баров для расчёта (например, 5):
Считается 5 последних нормальных баров
pinescript
Копировать
Редактировать
adaptiveATR = getAdaptiveATR(5)
Пошагово:
Создаётся пустой массив ranges для хранения диапазонов.
Перебираются дневные бары с индексами от 1 до 100.
Для каждого бара:
🔹 Через request.security() подгружаются дневные High и Low с нужным смещением.
🔹 Считается диапазон High - Low.
🔹 Считается временное среднее диапазона по текущему массиву.
🔹 Проверяется, не является ли бар аномальным (слишком большой или маленький).
🔹 Если бар нормальный или это самый первый бар — его диапазон добавляется в массив.
Как только массив набирает заданное количество баров (count), берётся их среднее значение — это и есть адаптивный ATR.
Если не удалось набрать нужное количество баров — возвращается na.
Relative Measured Volatility (RMV)RMV • Volume-Sensitive Consolidation Indicator
A lightweight Pine Script that highlights true low-volatility, low-volume bars in a single squeeze measure.
What it does
Calculates each bar’s raw High-Low range.
Down-weights bars where volume is below its 30-day average, emphasizing genuine quiet periods.
Normalizes the result over the prior 15 bars (excluding the current bar), scaling from 0 (tightest) to 100 (most volatile).
Draws the series as a step plot, shades true “tight” bars below the user threshold, and marks sustained squeezes with a small arrow.
Key inputs
Lookback (bars): Number of bars to use for normalization (default 15).
Tight Threshold: RMV value under which a bar is considered squeezed (default 15).
Volume SMA Period: Period for the volume moving average benchmark (default 30).
How it works
Raw range: barRange = high - low
Volume ratio: volRatio = min(volume / sma(volume,30), 1)
Weighted range: vwRange = barRange * volRatio
Rolling min/max (prior 15 bars): exclude today so a new low immediately registers a 0.
Normalize: rmv = clamp(100 * (vwRange - min) / (max - min), 0, 100)
Visualization & signals
Step line for exact bar-by-bar values.
Shaded background when RMV < threshold.
Consecutive-bar filter ensures arrows only appear when tightness lasts at least two bars, cutting noise.
Why use it
Quickly spot consolidation zones that combine narrow price action with genuine dry volume—ideal for swing entries ahead of breakouts.
Contrarian RSIContrarian RSI Indicator
Pairs nicely with Contrarian 100 MA (optional hide/unhide buy/sell signals)
Description
The Contrarian RSI is a momentum-based technical indicator designed to identify potential reversal points in price action by combining a unique RSI calculation with a predictive range model inspired by the "Contrarian 5 Levels" logic. Unlike traditional RSI, which measures price momentum based solely on price changes, this indicator integrates a smoothed, weighted momentum calculation and predictive price ranges to generate contrarian signals. It is particularly suited for traders looking to capture reversals in trending or range-bound markets.
This indicator is versatile and can be used across various timeframes, though it performs best on higher timeframes (e.g., 1H, 4H, or Daily) due to reduced noise and more reliable signals. Lower timeframes may require additional testing and careful parameter tuning to optimize performance.
How It Works
The Contrarian RSI combines two primary components:
Predictive Ranges (5 Levels Logic): This calculates a smoothed price average that adapts to market volatility using an ATR-based mechanism. It helps identify significant price levels that act as potential support or resistance zones.
Contrarian RSI Calculation: A modified RSI calculation that uses weighted momentum from the predictive ranges to measure buying and selling pressure. The result is smoothed and paired with a user-defined moving average to generate clear signals.
The indicator generates buy (long) and sell (exit) signals based on crossovers and crossunders of user-defined overbought and oversold levels, making it ideal for contrarian trading strategies.
Calculation Overview
Predictive Ranges (5 Levels Logic):
Uses a custom function (pred_ranges) to calculate a dynamic price average (avg) based on the ATR (Average True Range) multiplied by a user-defined factor (mult).
The average adjusts only when the price moves beyond the ATR threshold, ensuring responsiveness to significant price changes while filtering out noise.
This calculation is performed on a user-specified timeframe (tf5Levels) for multi-timeframe analysis.
Contrarian RSI:
Compares consecutive predictive range values to calculate gains (g) and losses (l) over a user-defined period (crsiLength).
Applies a Gaussian weighting function (weight = math.exp(-math.pow(i / crsiLength, 2))) to prioritize recent price movements.
Computes a "wave ratio" (net_momentum / total_energy) to normalize momentum, which is then scaled to a 0–100 range (qrsi = 50 + 50 * wave_ratio).
Smooths the result with a 2-period EMA (qrsi_smoothed) for stability.
Moving Average:
Applies a user-selected moving average (SMA, EMA, WMA, SMMA, or VWMA) with a customizable length (maLength) to the smoothed RSI (qrsi_smoothed) to generate the final indicator value (qrsi_ma).
Signal Generation:
Long Entry: Triggered when qrsi_ma crosses above the oversold level (oversoldLevel, default: 1).
Long Exit: Triggered when qrsi_ma crosses below the overbought level (overboughtLevel, default: 99).
Entry and Exit Rules
Long Entry: Enter a long position when the Contrarian RSI (qrsi_ma) crosses above the oversold level (default: 1). This suggests the asset is potentially oversold and due for a reversal.
Long Exit: Exit the long position when the Contrarian RSI (qrsi_ma) crosses below the overbought level (default: 99), indicating a potential overbought condition and a reversal to the downside.
Customization: Adjust overboughtLevel and oversoldLevel to fine-tune sensitivity. Lower timeframes may benefit from tighter levels (e.g., 20 for oversold, 80 for overbought), while higher timeframes can use extreme levels (e.g., 1 and 99) for stronger reversals.
Timeframe Considerations
Higher Timeframes (Recommended): The indicator is optimized for higher timeframes (e.g., 1H, 4H, Daily) due to its reliance on predictive ranges and smoothed momentum, which perform best with less market noise. These timeframes typically yield more reliable reversal signals.
Lower Timeframes: The indicator can be used on lower timeframes (e.g., 5M, 15M), but signals may be noisier and require additional confirmation (e.g., from price action or other indicators). Extensive backtesting and parameter optimization (e.g., adjusting crsiLength, maLength, or mult) are recommended for lower timeframes.
Inputs
Contrarian RSI Length (crsiLength): Length for RSI momentum calculation (default: 5).
RSI MA Length (maLength): Length of the moving average applied to the RSI (default: 1, effectively no MA).
MA Type (maType): Choose from SMA, EMA, WMA, SMMA, or VWMA (default: SMA).
Overbought Level (overboughtLevel): Upper threshold for exit signals (default: 99).
Oversold Level (oversoldLevel): Lower threshold for entry signals (default: 1).
Plot Signals on Main Chart (plotOnChart): Toggle to display signals on the price chart or the indicator panel (default: false).
Plotted on Lower:
Plotted on Chart:
5 Levels Length (length5Levels): Length for predictive range calculation (default: 200).
Factor (mult): ATR multiplier for predictive ranges (default: 6.0).
5 Levels Timeframe (tf5Levels): Timeframe for predictive range calculation (default: chart timeframe).
Visuals
Contrarian RSI MA: Plotted as a yellow line, representing the smoothed Contrarian RSI with the applied moving average.
Overbought/Oversold Lines: Red line for overbought (default: 99) and green line for oversold (default: 1).
Signals: Blue circles for long entries, white circles for long exits. Signals can be plotted on the main chart (plotOnChart = true) or the indicator panel (plotOnChart = false).
Usage Notes
Use the indicator in conjunction with other tools (e.g., support/resistance, trendlines, or volume) to confirm signals.
Test extensively on your chosen timeframe and asset to optimize parameters like crsiLength, maLength, and mult.
Be cautious with lower timeframes, as false signals may occur due to market noise.
The indicator is designed for contrarian strategies, so it works best in markets with clear reversal patterns.
Disclaimer
This indicator is provided for educational and informational purposes only. Always conduct thorough backtesting and risk management before using any indicator in live trading. The author is not responsible for any financial losses incurred.
Normalized Open InterestNormalized Open Interest (nOI) — Indicator Overview
What it does
Normalized Open Interest (nOI) transforms raw futures open-interest data into a 0-to-100 oscillator, so you can see at a glance whether participation is unusually high or low—similar in spirit to an RSI but applied to open interest. The script positions today’s OI inside a rolling high–low range and paints it with contextual colours.
Core logic
Data source – Loads the built-in “_OI” symbol that TradingView provides for the current market.
Rolling range – Looks back a user-defined number of bars (default 500) to find the highest and lowest OI in that window.
Normalization – Calculates
nOI = (OI – lowest) / (highest – lowest) × 100
so 0 equals the minimum of the window and 100 equals the maximum.
Visual cues – Plots the oscillator plus fixed horizontal levels at 70 % and 30 % (or your own numbers). The line turns teal above the upper level, red below the lower, and neutral grey in between.
User inputs
Window Length (bars) – How many candles the indicator scans for the high–low range; larger numbers smooth the curve, smaller numbers make it more reactive.
Upper Threshold (%) – Default 70. Anything above this marks potentially crowded or overheated interest.
Lower Threshold (%) – Default 30. Anything below this marks low or capitulating interest.
Practical uses
Spot extremes – Values above the upper line can warn that the long side is crowded; values below the lower line suggest disinterest or short-side crowding.
Confirm breakouts – A price breakout backed by a sharp rise in nOI signals genuine engagement.
Look for divergences – If price makes a new high but nOI does not, participation might be fading.
Combine with volume or RSI – Layer nOI with other studies to filter false signals.
Tips
On intraday charts for non-crypto symbols the script automatically fetches daily OI data to avoid gaps.
Adjust the thresholds to 80/20 or 60/40 to fit your market and risk preferences.
Alerts, shading, or additional signal logic can be added easily because the oscillator is already normalised.