DEMA Double Exponential Moving Average Strategy@Moneros 2017
Based on The DEMA is a fast-acting moving average that is more responsive to market changes than a traditional moving average
en.wikipedia.org
!!!! IN ORDER TO AVOID REPAITING ISSUES !!!!
!!!! DO NOT VIEW IN LOWER RESOLUTIONS THAN res/2 PARAMETER !!!!
for example res = 120 view >= 60m res = 60 view >= 30m
the length of the DEMA sampling shouldn't be longer than a candle
Best profits tested on BTCUSD
res = 105 slowPeriod = 2 fastPeriod = 32
res = 125 slowPeriod = 3 fastPeriod = 21
res = 120 slowPeriod = 2 fastPeriod = 32
res = 130 slowPeriod = 1 fastPeriod = 24
res = 40 slowPeriod = 4 fastPeriod = 93
res = 60 slowPeriod = 1 fastPeriod = 67
BTCUSD
Komut dosyalarını "市值60亿的股票" için ara
RSI in Bull and Bear Market V2.0RSI oversold at 60/40 in bullish market
And Overbought at 40/60 in Bearish market
for more info of this Strategy
WaveTrend [MastroFran]Great indicator to show short term price movements. 5 day moving average oscillator. When green crosses red and under the 60 mark, buy with caution. when over the 60 mark and red crosses green sell immediately for highest profits.
Hersheys CoCo VolumeCoCo Volume shows you volume movement of your symbol after subtracting the movement from another symbol, preferrably the sector or market the stock belongs to.
My latest update to my CoCoVolume Indicator. It calculates today's volume percent over the 60 period average for both your symbol and index, and displays that difference. If the percent is over the max it highlights the color, showing BIG action for that stock.
The last version was calculating the percent volume difference from yesterday to today for the stock and index and displaying the difference. The prior method had large swings on low volume stocks... this one shows the independent volume action much better. The default values will suit most stocks.
You can set three variables...
- the index symbol, default is SPY
- the period for averaging, default is 60
- the max volume percent, default is 500
Good trading!
Brian Hershey
close-hl2 Price actionStill not tested, but looks very good ; it is the difference between EMA median price and EMA close in different time frame, I used 240, 60, and the current Time frame ,plus one more customed period ; can forcast the price movement , but it s not in scale, so it can not show how much higher or lower the price can goes but just the next direction. I think intraday on 5 ,15 ,60 better then high frame.If you need to try on Daily frame have to change the period to higher then Daily
Everyday 0002 _ MAC 1st Trading Hour WalkoverThis is the second strategy for my Everyday project.
Like I wrote the last time - my goal is to create a new strategy everyday
for the rest of 2016 and post it here on TradingView.
I'm a complete beginner so this is my way of learning about coding strategies.
I'll give myself between 15 minutes and 2 hours to complete each creation.
This is basically a repetition of the first strategy I wrote - a Moving Average Crossover,
but I added a tiny thing.
I read that "Statistics have proven that the daily high or low is established within the first hour of trading on more than 70% of the time."
(source: )
My first Moving Average Crossover strategy, tested on VOLVB daily, got stoped out by the volatility
and because of this missed one nice bull run and a very nice bear run.
So I added this single line: if time("60", "1000-1600") regarding when to take exits:
if time("60", "1000-1600")
strategy.exit("Close Long", "Long", profit=2000, loss=500)
strategy.exit("Close Short", "Short", profit=2000, loss=500)
Sweden is UTC+2 so I guess UTC 1000 equals 12.00 in Stockholm. Not sure if this is correct, actually.
Anyway, I hope this means the strategy will only take exits based on price action which occur in the afternoon, when there is a higher probability of a lower volatility.
When I ran the new modified strategy on the same VOLVB daily it didn't get stoped out so easily.
On the other hand I'll have to test this on various stocks .
Reading and learning about how to properly test strategies is on my todo list - all tips on youtube videos or blogs
to read on this topic is very welcome!
Like I said the last time, I'm posting these strategies hoping to learn from the community - so any feedback, advice, or corrections is very much welcome and appreciated!
/pbergden
VWMA + ML RSI StrategyVWMA + ML RSI Strategy
This strategy combines the power of Volume-Weighted Moving Average (VWMA) with a Machine Learning-enhanced RSI to generate high-probability long entries.
✅ Buy Logic:
A buy signal is triggered when:
The candle closes above the VWMA
The ML RSI (smoothed using advanced moving averages) is above 60
If only one of the above conditions is met, the strategy waits for the second to confirm before entering.
❌ Sell Logic:
The position is closed when:
The candle closes below the VWMA, and
The ML RSI falls below 40
🎯 Risk Management:
Take Profit: 1.5% above entry
Stop Loss: 1.5% below entry
🤖 ML RSI Explanation:
The ML RSI is a refined version of the traditional RSI using smoothing techniques (like ALMA, EMA, etc.) to reduce noise and enhance responsiveness to price action. It helps filter out weak signals and improves trend confirmation.
🔧 Customization:
Adjustable VWMA length
Configurable ML RSI smoothing method, length, and ALMA sigma
Thresholds for entry/exit RSI levels
3.RSI LIJO 45*55//@version=6
indicator(title="3.RSI LIJO 45*55", shorttitle="RSI-LIJO-45-55", format=format.price, precision=2, timeframe="", timeframe_gaps=true)
rsiLengthInput = input.int(9, minval=1, title="RSI Length", group="RSI Settings")
rsiSourceInput = input.source(close, "Source", group="RSI Settings")
calculateDivergence = input.bool(false, title="Calculate Divergence", group="RSI Settings", display=display.data_window, tooltip="Calculating divergences is needed in order for divergence alerts to fire.")
change = ta.change(rsiSourceInput)
up = ta.rma(math.max(change, 0), rsiLengthInput)
down = ta.rma(-math.min(change, 0), rsiLengthInput)
rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down))
// Change RSI line color based on bands
rsiColor = rsi > 50 ? color.green : rsi < 50 ? color.red : color.white
rsiPlot = plot(rsi, "RSI", color=rsiColor)
rsiUpperBand = hline(55, "RSI Upper Band", color=color.rgb(5, 247, 22))
midline = hline(50, "RSI Middle Band", color=color.new(#787B86, 50))
rsiLowerBand = hline(45, "RSI Lower Band", color=color.rgb(225, 18, 14))
fill(rsiUpperBand, rsiLowerBand, color=color.rgb(126, 87, 194, 90), title="RSI Background Fill")
midLinePlot = plot(50, color=na, editable=false, display=display.none)
fill(rsiPlot, midLinePlot, 100, 55, top_color=color.new(color.green, 0), bottom_color=color.new(color.green, 100), title="Overbought Gradient Fill")
fill(rsiPlot, midLinePlot, 45, 0, top_color=color.new(color.red, 100), bottom_color=color.new(color.red, 0), title="Oversold Gradient Fill")
// Smoothing MA inputs
GRP = "Smoothing"
TT_BB = "Only applies when 'SMA + Bollinger Bands' is selected. Determines the distance between the SMA and the bands."
maTypeInput = input.string("SMA", "Type", options= , group=GRP, display=display.data_window)
maLengthInput = input.int(31, "Length", group=GRP, display=display.data_window)
bbMultInput = input.float(2.0, "BB StdDev", minval=0.001, maxval=50, step=0.5, tooltip=TT_BB, group=GRP, display=display.data_window)
var enableMA = maTypeInput != "None"
var isBB = maTypeInput == "SMA + Bollinger Bands"
// Smoothing MA Calculation
ma(source, length, MAtype) =>
switch MAtype
"SMA" => ta.sma(source, length)
"SMA + Bollinger Bands" => 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)
// Smoothing MA plots
smoothingMA = enableMA ? ma(rsi, maLengthInput, maTypeInput) : na
smoothingStDev = isBB ? ta.stdev(rsi, maLengthInput) * bbMultInput : na
plot(smoothingMA, "RSI-based MA", color=color.yellow, display=enableMA ? display.all : display.none, editable=enableMA)
bbUpperBand = plot(smoothingMA + smoothingStDev, title="Upper Bollinger Band", color=color.green, display=isBB ? display.all : display.none, editable=isBB)
bbLowerBand = plot(smoothingMA - smoothingStDev, title="Lower Bollinger Band", color=color.green, display=isBB ? display.all : display.none, editable=isBB)
fill(bbUpperBand, bbLowerBand, color=isBB ? color.new(color.green, 90) : na, title="Bollinger Bands Background Fill", display=isBB ? display.all : display.none, editable=isBB)
// Divergence
lookbackRight = 5
lookbackLeft = 5
rangeUpper = 60
rangeLower = 5
bearColor = color.red
bullColor = color.green
textColor = color.white
noneColor = color.new(color.white, 100)
_inRange(bool cond) =>
bars = ta.barssince(cond)
rangeLower <= bars and bars <= rangeUpper
plFound = false
phFound = false
bullCond = false
bearCond = false
rsiLBR = rsi
if calculateDivergence
//------------------------------------------------------------------------------
// Regular Bullish
// rsi: Higher Low
plFound := not na(ta.pivotlow(rsi, lookbackLeft, lookbackRight))
rsiHL = rsiLBR > ta.valuewhen(plFound, rsiLBR, 1) and _inRange(plFound )
// Price: Lower Low
lowLBR = low
priceLL = lowLBR < ta.valuewhen(plFound, lowLBR, 1)
bullCond := priceLL and rsiHL and plFound
//------------------------------------------------------------------------------
// Regular Bearish
// rsi: Lower High
phFound := not na(ta.pivothigh(rsi, lookbackLeft, lookbackRight))
rsiLH = rsiLBR < ta.valuewhen(phFound, rsiLBR, 1) and _inRange(phFound )
// Price: Higher High
highLBR = high
priceHH = highLBR > ta.valuewhen(phFound, highLBR, 1)
bearCond := priceHH and rsiLH and phFound
plot(
plFound ? rsiLBR : na,
offset = -lookbackRight,
title = "Regular Bullish",
linewidth = 2,
color = (bullCond ? bullColor : noneColor),
display = display.pane,
editable = calculateDivergence)
plotshape(
bullCond ? rsiLBR : na,
offset = -lookbackRight,
title = "Regular Bullish Label",
text = " Bull ",
style = shape.labelup,
location = location.absolute,
color = bullColor,
textcolor = textColor,
display = display.pane,
editable = calculateDivergence)
plot(
phFound ? rsiLBR : na,
offset = -lookbackRight,
title = "Regular Bearish",
linewidth = 2,
color = (bearCond ? bearColor : noneColor),
display = display.pane,
editable = calculateDivergence)
plotshape(
bearCond ? rsiLBR : na,
offset = -lookbackRight,
title = "Regular Bearish Label",
text = " Bear ",
style = shape.labeldown,
location = location.absolute,
color = bearColor,
textcolor = textColor,
display = display.pane,
editable = calculateDivergence)
alertcondition(bullCond, title='Regular Bullish Divergence', message="Found a new Regular Bullish Divergence, Pivot Lookback Right number of bars to the left of the current bar.")
alertcondition(bearCond, title='Regular Bearish Divergence', message='Found a new Regular Bearish Divergence, Pivot Lookback Right number of bars to the left of the current bar.')
CipherMatrix Dashboard (MarketCipher B)Pre-compute MarketCipher-B values for each fixed timeframe (5 m, 15 m, 30 m, 60 m, 4 H, Daily).
Pass those values into plotRow() instead of calling request.security() inside the helper—removes the style warning.
Added explicit range parameters to table.clear(dash, 0, 0, 2, 6) to satisfy v6’s argument requirement.
This version should compile without the previous warnings/errors. Swap in your real MarketCipher-B histogram when you’re ready, and the dashboard is good to go!
Zonas de Soporte EURUSD Multi-Timeframe//@version=5
indicator("Zonas de Soporte EURUSD Multi-Timeframe", overlay=true)
// Configuraciones
lookback = input.int(200, "Velas a analizar", minval=50)
tolerance = input.float(0.5, "Tolerancia %", minval=0.1)
touchesMin = input.int(3, "Toques mínimos para validar soporte", minval=2)
// Función para encontrar zonas de soporte
f_findSupportZones(_low, _label) =>
var float zones = na
var int found = 0
for i = 0 to lookback - 1
float base = _low
int touches = 0
for j = i + 1 to lookback - 1
if math.abs(_low - base) <= base * (tolerance / 100)
touches := touches + 1
if touches >= touchesMin
label.new(bar_index , base, text="Zona " + _label + " " + str.tostring(base, format.mintick),
style=label.style_label_up, color=color.green, textcolor=color.white, size=size.small)
found := found + 1
found
// Múltiples temporalidades
low_h1 = request.security("EURUSD", "60", low)
low_h4 = request.security("EURUSD", "240", low)
low_d1 = request.security("EURUSD", "D", low)
low_w1 = request.security("EURUSD", "W", low)
low_mn1 = request.security("EURUSD", "M", low)
// Llamadas a la función
zonesH1 = f_findSupportZones(low_h1, "H1")
zonesH4 = f_findSupportZones(low_h4, "H4")
zonesD1 = f_findSupportZones(low_d1, "D1")
zonesW1 = f_findSupportZones(low_w1, "W1")
zonesMN1 = f_findSupportZones(low_mn1, "MN1")
// Reporte
if bar_index % 50 == 0
label.new(bar_index, high, text="Reporte Zonas Soporte\nH1: "+str.tostring(zonesH1)+"\nH4: "+str.tostring(zonesH4)+"\nD1: "+str.tostring(zonesD1)+"\nW1: "+str.tostring(zonesW1)+"\nMN1: "+str.tostring(zonesMN1),
style=label.style_label_down, yloc=yloc.abovebar, size=size.normal,
textcolor=color.black, color=color.new(color.white, 80))
MA5 — 四點高低 + H1/L1 水平線 + 突破/回買 + 月季線交叉//@version=5
indicator("MA5 — 四點高低 + H1/L1 水平線 + 突破/回買 + 月季線交叉", overlay=true)
// 1. 均線設定
ma5 = ta.sma(close, 5)
ma10 = ta.sma(close, 10)
ma20 = ta.sma(close, 20)
ma60 = ta.sma(close, 60) // ← 加上這一行
// 畫出均線
plot(ma5, title="MA5", color=color.red)
plot(ma10, title="MA10", color=color.orange)
plot(ma20, title="MA20", color=color.yellow)
plot(ma60, title="MA60", color=color.green)
// 2. 全域變數:方向、區段極值
var int direction = na
var float segHigh = na
var int segHighBar = na
var float segLow = na
var int segLowBar = na
// 3. 全域變數:儲存兩組高低
var float high1 = na
var int high1Bar = na
var float high2 = na
var int high2Bar = na
var float low1 = na
var int low1Bar = na
var float low2 = na
var int low2Bar = na
// 4. 全域變數:標籤與線段句柄
var label highLbl1 = na
var label highLbl2 = na
var label lowLbl1 = na
var label lowLbl2 = na
var line highLine = na
var line lowLine = na
var line h1Line = na
var line l1Line = na
// 5. 全域變數:回買訊號控制
var bool buyBackShown = false
// 6. 判斷當前段方向
currDir = close > ma5 ? 1 : close < ma5 ? -1 : direction
// 7. 首次初始化
if na(direction)
direction := currDir
segHigh := high
segHighBar := bar_index
segLow := low
segLowBar := bar_index
// 8. 同段內更新極值
if currDir == 1 and high > segHigh
segHigh := high
segHighBar := bar_index
if currDir == -1 and low < segLow
segLow := low
segLowBar := bar_index
// 9. 段落切換:推舊值→更新 H1/L1→刪舊標籤/線→畫新標籤/線→重置 seg*
if currDir != direction
high2 := high1
high2Bar := high1Bar
low2 := low1
low2Bar := low1Bar
if direction == 1
high1 := segHigh
high1Bar := segHighBar
else
low1 := segLow
low1Bar := segLowBar
buyBackShown := false
if not na(highLbl1)
label.delete(highLbl1)
if not na(highLbl2)
label.delete(highLbl2)
if not na(lowLbl1)
label.delete(lowLbl1)
if not na(lowLbl2)
label.delete(lowLbl2)
if not na(high2)
highLbl2 := label.new(high2Bar, high2, "H2", style=label.style_label_down, color=color.blue, textcolor=color.white)
if not na(high1)
highLbl1 := label.new(high1Bar, high1, "H1", style=label.style_label_down, color=color.blue, textcolor=color.white)
if not na(low2)
lowLbl2 := label.new(low2Bar, low2, "L2", style=label.style_label_up, color=color.purple, textcolor=color.white)
if not na(low1)
lowLbl1 := label.new(low1Bar, low1, "L1", style=label.style_label_up, color=color.purple, textcolor=color.white)
if not na(highLine)
line.delete(highLine)
if not na(high1) and not na(high2)
highLine := line.new(high2Bar, high2, high1Bar, high1, color=color.blue, width=2)
if not na(lowLine)
line.delete(lowLine)
if not na(low1) and not na(low2)
lowLine := line.new(low2Bar, low2, low1Bar, low1, color=color.purple, width=2)
if not na(h1Line)
line.delete(h1Line)
if not na(high1)
h1Line := line.new(high1Bar, high1, bar_index, high1, xloc=xloc.bar_index, extend=extend.right, color=color.green, style=line.style_dashed)
if not na(l1Line)
line.delete(l1Line)
if not na(low1)
l1Line := line.new(low1Bar, low1, bar_index, low1, xloc=xloc.bar_index, extend=extend.right, color=color.red, style=line.style_dashed)
segHigh := high
segHighBar := bar_index
segLow := low
segLowBar := bar_index
// 10. 更新方向
direction := currDir
// 11. 突破訊號:收盤首次突破 H1 且 ma5>ma10>ma20
buySignal = not na(high1) and ta.crossover(close, high1) and ma5 > ma10 and ma10 > ma20
if buySignal
label.new(bar_index, low, "突破", style=label.style_label_up, color=color.green, textcolor=color.white)
// 12. 回買訊號:L1 之後任一 K 棒,首次收盤突破 MA5,且高於 L1、漲幅>2%、ma5>ma10>ma20、且收盤>ma20
buyBackSignal = not na(low1) and bar_index > low1Bar and ta.crossover(close, ma5) and high > low1 and (close - open) / open > 0.02 and ma5 > ma10 and ma10 > ma20 and close > ma20 and not buyBackShown
if buyBackSignal
label.new(bar_index, low, "回買", style=label.style_label_up, color=color.green, textcolor=color.white)
buyBackShown := true
// 13. 月季線交叉且四線多頭排列時,在 K 棒正下方標示放大三角形
if ta.cross(ma20, ma60) and ma5 > ma10 and ma10 > ma20 and ma20 > ma60
label.new(bar_index, low, "▲", xloc=xloc.bar_index, yloc=yloc.belowbar, style=label.style_label_center, color=color.new(color.white, 100), textcolor=color.white, size=size.large)
MA5 — 四點高低 + H1/L1 水平線 + 突破/回買 + 月季線交叉//@version=5
indicator("MA5 — 四點高低 + H1/L1 水平線 + 突破/回買 + 月季線交叉", overlay=true)
// 1. 均線設定
ma5 = ta.sma(close, 5)
ma10 = ta.sma(close, 10)
ma20 = ta.sma(close, 20)
ma60 = ta.sma(close, 60)
plot(ma5, title="MA5", color=color.orange)
plot(ma10, title="MA10", color=color.blue)
plot(ma20, title="MA20", color=color.red)
plot(ma60, title="MA60", color=color.gray)
// 2. 全域變數:方向、區段極值
var int direction = na
var float segHigh = na
var int segHighBar = na
var float segLow = na
var int segLowBar = na
// 3. 全域變數:保存兩組高低
var float high1 = na
var int high1Bar = na
var float high2 = na
var int high2Bar = na
var float low1 = na
var int low1Bar = na
var float low2 = na
var int low2Bar = na
// 4. 全域變數:標籤與線段句柄
var label highLbl1 = na
var label highLbl2 = na
var label lowLbl1 = na
var label lowLbl2 = na
var line highLine = na
var line lowLine = na
var line h1Line = na
var line l1Line = na
// 5. 全域變數:回買訊號控制
var bool buyBackShown = false
// 6. 判斷當前段方向
currDir = close > ma5 ? 1 : close < ma5 ? -1 : direction
// 7. 首次初始化
if na(direction)
direction := currDir
segHigh := high
segHighBar := bar_index
segLow := low
segLowBar := bar_index
// 8. 同段內更新極值
if currDir == 1 and high > segHigh
segHigh := high
segHighBar := bar_index
if currDir == -1 and low < segLow
segLow := low
segLowBar := bar_index
// 9. 段落切換:推舊值→存 H1/L1→刪舊標籤/線→畫新標籤/線→重置 seg*
if currDir != direction
// 推舊值
high2 := high1
high2Bar := high1Bar
low2 := low1
low2Bar := low1Bar
// 存 H1 或 L1,並重置回買旗標(遇到低段)
if direction == 1
high1 := segHigh
high1Bar := segHighBar
else
low1 := segLow
low1Bar := segLowBar
buyBackShown := false
// 刪除舊標籤
if not na(highLbl1)
label.delete(highLbl1)
if not na(highLbl2)
label.delete(highLbl2)
if not na(lowLbl1)
label.delete(lowLbl1)
if not na(lowLbl2)
label.delete(lowLbl2)
// 畫 H2/H1 標籤
if not na(high2)
highLbl2 := label.new(high2Bar, high2, "H2", style=label.style_label_down, color=color.blue, textcolor=color.white)
if not na(high1)
highLbl1 := label.new(high1Bar, high1, "H1", style=label.style_label_down, color=color.blue, textcolor=color.white)
// 畫 L2/L1 標籤
if not na(low2)
lowLbl2 := label.new(low2Bar, low2, "L2", style=label.style_label_up, color=color.purple, textcolor=color.white)
if not na(low1)
lowLbl1 := label.new(low1Bar, low1, "L1", style=label.style_label_up, color=color.purple, textcolor=color.white)
// 刪舊並畫高低連線
if not na(highLine)
line.delete(highLine)
if not na(high1) and not na(high2)
highLine := line.new(high2Bar, high2, high1Bar, high1, color=color.blue, width=2)
if not na(lowLine)
line.delete(lowLine)
if not na(low1) and not na(low2)
lowLine := line.new(low2Bar, low2, low1Bar, low1, color=color.purple, width=2)
// 刪舊並畫 H1 水平線
if not na(h1Line)
line.delete(h1Line)
if not na(high1)
h1Line := line.new(high1Bar, high1, bar_index, high1, xloc=xloc.bar_index, extend=extend.right, color=color.green, style=line.style_dashed)
// 刪舊並畫 L1 水平線
if not na(l1Line)
line.delete(l1Line)
if not na(low1)
l1Line := line.new(low1Bar, low1, bar_index, low1, xloc=xloc.bar_index, extend=extend.right, color=color.red, style=line.style_dashed)
// 重置 seg*
segHigh := high
segHighBar := bar_index
segLow := low
segLowBar := bar_index
// 10. 更新方向
direction := currDir
// 11. 突破訊號:首次收盤突破 H1 且 ma5>ma10>ma20
buySignal = not na(high1) and ta.crossover(close, high1) and ma5 > ma10 and ma10 > ma20
if buySignal
label.new(bar_index, low, "突破", style=label.style_label_up, color=color.green, textcolor=color.white)
// 12. 回買訊號:L1 之後任一棒,首次收盤突破 MA5,且高於 L1、漲幅>2%、ma5>ma10>ma20、且收盤>ma20
buyBackSignal = not na(low1) and bar_index > low1Bar and ta.crossover(close, ma5) and high > low1 and (close - open) / open > 0.02 and ma5 > ma10 and ma10 > ma20 and close > ma20 and not buyBackShown
if buyBackSignal
label.new(bar_index, low, "回買", style=label.style_label_up, color=color.blue, textcolor=color.white)
buyBackShown := true
// 13. 月季線交叉且四線多頭排列時,在 K 棒正下方標示放大三角形
if ta.cross(ma20, ma60) and ma5 > ma10 and ma10 > ma20 and ma20 > ma60
label.new(bar_index, low, "▲", xloc=xloc.bar_index, yloc=yloc.belowbar, style=label.style_label_center, color=color.new(color.white,100), textcolor=color.white, size=size.large)
Micropulse Crypto Reversal – 1 Minute📛 Micropulse Crypto Reversal – 1 Minute
📘 Strategy Description:
Micropulse Reversal is a specialized scalping strategy designed for 1-minute cryptocurrency charts such as BTC/USDT and ETH/USDT. It captures fast reversal opportunities with a scientifically guided combination of price action, volume dynamics, and volatility filtering.
🎯 Core Features:
Hybrid use of RSI, Bollinger Bands, Hull Moving Average, and OBV
Scoring system ensures only strong, high-confidence signals trigger trades
ATR filter blocks signals in low-volatility (choppy) conditions
Supports both long and short entries, with automatic position reversal logic
Optimized parameters are fixed and not user-editable (fully locked)
⚙️ Hardcoded Parameters:
RSI Length: 9, Oversold: 40, Overbought: 60
Bollinger Bands: 20 / 2.0
Hull MA: 13, OBV short/long: 3 / 8
ATR Filter: > 0.1% of price
Take Profit: +0.8%, Stop Loss: -0.6%
Minimum Signal Score to Enter: 4 / 5
📈 Ideal Use:
BTC, ETH, and other major crypto pairs with high volume
Timeframe: 1-minute
Fast-entry, fast-exit trades
Works well for bot integration, signal alerts, or manual scalping
⚠️ Risk Disclaimer:
This strategy is optimized for past data and short-term momentum conditions. Past performance does not guarantee future results.
Always validate on forward data and use proper risk management before live deployment.
Tsallis Entropy Market RiskTsallis Entropy Market Risk Indicator
What Is It?
The Tsallis Entropy Market Risk Indicator is a market analysis tool that measures the degree of randomness or disorder in price movements. Unlike traditional technical indicators that focus on price patterns or momentum, this indicator takes a statistical physics approach to market analysis.
Scientific Foundation
The indicator is based on Tsallis entropy, a generalization of traditional Shannon entropy developed by physicist Constantino Tsallis. The Tsallis entropy is particularly effective at analyzing complex systems with long-range correlations and memory effects—precisely the characteristics found in crypto and stock markets.
The indicator also borrows from Log-Periodic Power Law (LPPL).
Core Concepts
1. Entropy Deficit
The primary measurement is the "entropy deficit," which represents how far the market is from a state of maximum randomness:
Low Entropy Deficit (0-0.3): The market exhibits random, uncorrelated price movements typical of efficient markets
Medium Entropy Deficit (0.3-0.5): Some patterns emerging, moderate deviation from randomness
High Entropy Deficit (0.5-0.7): Strong correlation patterns, potentially indicating herding behavior
Extreme Entropy Deficit (0.7-1.0): Highly ordered price movements, often seen before significant market events
2. Multi-Scale Analysis
The indicator calculates entropy across different timeframes:
Short-term Entropy (blue line): Captures recent market behavior (20-day window)
Long-term Entropy (green line): Captures structural market behavior (120-day window)
Main Entropy (purple line): Primary measurement (60-day window)
3. Scale Ratio
This measures the relationship between long-term and short-term entropy. A healthy market typically has a scale ratio above 0.85. When this ratio drops below 0.85, it suggests abnormal relationships between timeframes that often precede market dislocations.
How It Works
Data Collection: The indicator samples price returns over specific lookback periods
Probability Distribution Estimation: It creates a histogram of these returns to estimate their probability distribution
Entropy Calculation: Using the Tsallis q-parameter (typically 1.5), it calculates how far this distribution is from maximum entropy
Normalization: Results are normalized against theoretical maximum entropy to create the entropy deficit measure
Risk Assessment: Multiple factors are combined to generate a composite risk score and classification
Market Interpretation
Low Risk Environments (Risk Score < 25)
Market is functioning efficiently with reasonable randomness
Price discovery is likely effective
Normal trading and investment approaches appropriate
Medium Risk Environments (Risk Score 25-50)
Increasing correlation in price movements
Beginning of trend formation or momentum
Time to monitor positions more closely
High Risk Environments (Risk Score 50-75)
Strong herding behavior present
Market potentially becoming one-sided
Consider reducing position sizes or implementing hedges
Extreme Risk Environments (Risk Score > 75)
Highly ordered market behavior
Significant imbalance between buyers and sellers
Heightened probability of sharp reversals or corrections
Practical Application Examples
Market Tops: Often characterized by gradually increasing entropy deficit as momentum builds, followed by extreme readings near the actual top
Market Bottoms: Can show high entropy deficit during capitulation, followed by normalization
Range-Bound Markets: Typically display low and stable entropy deficit measurements
Trending Markets: Often show moderate entropy deficit that remains relatively consistent
Advantages Over Traditional Indicators
Forward-Looking: Identifies changing market structure before price action confirms it
Statistical Foundation: Based on robust mathematical principles rather than empirical patterns
Adaptability: Functions across different market regimes and asset classes
Noise Filtering: Focuses on meaningful structural changes rather than price fluctuations
Limitations
Not a Timing Tool: Signals market risk conditions, not precise entry/exit points
Parameter Sensitivity: Results can vary based on the chosen parameters
Historical Context: Requires some historical perspective to interpret effectively
Complementary Tool: Works best alongside other analysis methods
Enjoy :)
EMA Cross PThis is 20 , 50 , 200 ema line , display, you can also edit to any ema of your choice, you can also mark their crossover and highlight them at any time. so this is not for just the 20 50 or 200 , it can be 10 20 30 40 50 60 80 90 100 150 200 any ema of your choice, you can plot upto 3 ema with a single indicator. Thanks for your support.
Buy Opportunity Score Table (21 Points)## 📊 Script Title:
**Buy Opportunity Score Table (21 Points)**
---
## 📝 Script Description:
This TradingView script is a **custom multi-indicator scoring system** designed to identify **buying opportunities** in stocks, indices, or ETFs by evaluating momentum, volume strength, and overall market sentiment. It gives a score out of **21 points** using 6 key indicators, and highlights **potential buy signals** when the score crosses **8 points or more**.
---
## ✅ Key Features:
### 📌 1. **Indicators Used (21 Points Max)**
Each of the following indicators contributes up to 4 points (except Nifty trend, which adds 1 point):
| Indicator | Max Points | Logic |
| ----------- | ---------- | ---------------------------------- |
| Volume | 4 | Volume > 20-day average and rising |
| OBV | 4 | OBV rising for 3+ days |
| MFI | 4 | MFI > 60 and increasing |
| RSI | 4 | RSI > 50 and increasing |
| ROC | 4 | Rate of change positive and rising |
| Nifty Trend | 1 | Nifty > yesterday and above 20 EMA |
---
### 📌 2. **Scoring Output**
* The **total score** is plotted on the chart and capped at 21.
* Score of **8 or higher** is treated as a **buy trigger**.
* Permanent horizontal lines are plotted at **8**, **13**, and **17** to show key levels:
* **8** → Entry zone
* **13** → Accumulation/Build zone
* **17** → Strong bullish momentum
---
### 📌 3. **Table Panel (Top Right Corner)**
A table shows:
* Current and previous day’s score for each indicator
* Total score and change from previous day
---
### 📌 4. **Visual Aids**
* Background turns **green** when score is **≥ 8**
* Permanent **horizontal lines** at score levels **8, 13, and 17** for easy reference
---
### 📌 5. **Alerts**
* An `alertcondition` is triggered **when score crosses 8 from below**
* You can use this for mobile/email alerts or automated strategies
---
## ⚙️ Inputs:
You can customize:
* Length of **ROC**, **MFI**, **RSI**, and **Volume SMA**
Default values are:
* ROC: 10
* MFI: 14
* RSI: 14
* Volume MA: 20
---
## 🎯 Use Case:
This tool is ideal for:
* **Swing traders** looking for early signals of accumulation
* **Investors** filtering stocks with rising internal strength
* **Algo traders** building signal-based strategies based on multi-factor models
RFM Strategy - High QualityI trade high-probability resistance fades using a systematic 4-pillar approach that has delivered a proven 60%+ win rate with 2.5+ profit factor."
📊 Core Strategy Elements:
1. VRF Resistance Identification:
Multiple resistance level confluence (minimum 2 levels)
Dynamic resistance zones using 20-period high/low ranges
Only trade when price approaches clustered resistance
2. Volume Weakness Confirmation:
Volume ROC must be ≤ -30% (weak buying pressure)
Identifies exhaustion rallies with poor participation
Confirms institutional selling vs retail buying
3. Momentum Divergence:
SMI ≥ 60 (extreme overbought) OR 25-point momentum collapse
Multi-timeframe confirmation for higher reliability
Catches momentum exhaustion at key levels
4. Price Rejection Patterns:
Long upper wicks (2x body size) at resistance
Doji formations showing indecision
Failed breakout patterns with immediate rejection
⚡ Execution:
Entry: Only when ALL 4 conditions align simultaneously
Risk Management: 6-point stops, 12-point targets (2:1 R/R minimum)
Timeframe: 5-minute charts for precise entries
Selectivity: Quality over quantity - average 5 trades per period
🏆 Performance:
60% win rate (matches manual trading performance)
2.59 Profit Factor (highly profitable)
Systematic approach eliminates emotional decisions
"This strategy automates the discretionary resistance fade setups that institutional traders use, with strict filters ensuring only the highest-probability opportunities."
✅ 200 EMA + RSI Pullback + Volume Surge (Full Strategy)200 EMA Trend + RSI Pullback + Volume Surge Strategy (Advanced)
📖 Strategy Description:
This strategy is designed to identify high-probability entries in trending markets using a combination of trend-following and momentum re-entry principles. It works effectively for intraday and swing trading on equities, indices, and crypto.
🔍 Entry Logic:
✅ Long Entry Conditions:
Trend Confirmation:
Price must be above the 200 EMA, indicating a bullish trend.
RSI Pullback:
RSI must drop below a defined level (default 40), indicating a healthy pullback in an uptrend.
Volume Surge:
Current volume must be above 1.5× the 20-period average, confirming strong buying activity.
Entry Triggered on Candle Close:
Ensures reliable confirmation instead of premature entries.
Short Entry Conditions (reverse logic):
Price below the 200 EMA
RSI above threshold (default 60)
Volume surge
Entry only after candle close
Exit Conditions:
Take Profit (TP):
Book profits at 2% move (configurable).
Stop Loss (SL):
Protect capital at 1% loss (configurable).
Trailing Stop Loss (TSL):
Follows the price with a 1.5% trail to lock in profits.
Time-Based Exit:
Closes position automatically after a fixed number of candles (default: 5 bars).
Alerts:
Built-in alerts notify when a Long or Short setup is triggered, allowing traders to act or automate execution.
Best Used On:
Timeframes: 15-minute, 1-hour, or Daily
Markets: NIFTY, BANKNIFTY, RELIANCE, INFY, BTC/USD, ETH/USD
Styles: Intraday, Swing, Trend-followinG
Ideal For:
Traders who follow pullback entries in strong trends
Users looking for automated alerts and exits
Strategies requiring volume confirmation + trend bias
Boomerang Trading Indicator# Boomerang News Trading Indicator
## Overview
The Boomerang Trading Indicator is designed to identify potential reversal opportunities following major economic news releases. This indicator analyzes the initial market reaction to news events and provides visual cues for potential counter-trend trading opportunities based on Fibonacci retracement levels.
## How It Works
### News Event Detection
- Automatically detects major news release times (NFP, CPI, FOMC, etc.)
- Analyzes the first significant price movement following news releases
- Requires minimum candle size threshold to filter out weak reactions
### First Move Analysis
The indicator employs multiple analytical methods to determine the initial market direction:
**Simple Analysis (High Confidence):**
- When the news candle has ≥70% body-to-total ratio, uses straightforward bullish/bearish classification
**Advanced Analysis (Complex Cases):**
- Volume-weighted direction analysis
- Momentum and wick pattern analysis
- Market structure and gap analysis
- Weighted voting system combining all methods
### Entry Signal Generation
Based on the "boomerang" concept where markets often reverse after initial news reactions:
**For Bullish First Moves (Price Up Initially):**
- Generates SHORT entry signals when price retraces to 1.25-1.5 Fibonacci levels
- Visual: Red triangles above price bars
**For Bearish First Moves (Price Down Initially):**
- Generates LONG entry signals when price retraces to -0.25 to -0.5 Fibonacci levels
- Visual: Green triangles below price bars
## Key Features
### Visual Elements
- **Fibonacci Levels**: Displays key retracement levels based on the initial reaction range
- **Entry Zones**: Clear visual marking of optimal entry areas
- **Direction Arrows**: Shows the initial market reaction direction
- **Target Levels**: Displays profit target zones at 50% and 100% retracement levels
### Information Panel
Real-time display showing:
- Current setup status
- First move direction and body percentage
- Recommended trade direction
- Key price levels (reaction high/low)
- Profit targets with historical success rates
### Alert System
- Pre-news warnings (customizable timing)
- News event notifications
- Setup activation alerts
- Entry signal notifications
### Success Tracking
- Visual "BOOM!" animations when targets are hit
- Target 1 (50% level): ~95% historical success rate
- Target 2 (Main target): ~80% historical success rate
## Configuration Options
### Time Settings
- News release hour and minute (customizable for different events)
- Pre-news alert timing
- Setup duration (default 60 bars after news)
### Fibonacci Levels
- Adjustable retracement percentages
- Customizable target levels
- Mid-level importance weighting
### Risk Management
- Minimum reaction candle size filter
- Maximum risk point setting
- Visual risk/reward display
### Display Options
- Toggle Fibonacci level visibility
- Toggle target level display
- Toggle animation effects
- Customizable alert preferences
## Applicable News Events
This indicator is designed for high-impact economic releases:
- Non-Farm Payrolls (NFP) - First Friday, 8:30 AM ET
- Consumer Price Index (CPI) - Monthly, 8:30 AM ET
- Producer Price Index (PPI) - Monthly, 8:30 AM ET
- Gross Domestic Product (GDP) - Quarterly, 8:30 AM ET
- FOMC Interest Rate Decisions - 8 times yearly, 2:00 PM ET
## Trading Strategy Framework
### Core Principle
Markets often overreact to news initially, then reverse toward more rational price levels. This "boomerang effect" creates short-term trading opportunities.
### Entry Strategy
1. Wait for significant initial reaction (>10 points minimum)
2. Identify the initial direction using multi-factor analysis
3. Trade opposite to the initial reaction when price reaches sweet spot zones
4. Use Fibonacci retracement levels as entry triggers
### Risk Management
- Always use appropriate position sizing
- Set stop losses beyond recent swing levels
- Consider market volatility and news importance
- Monitor for setup invalidation signals
## Important Notes
### Educational Purpose
This indicator is for educational and analytical purposes. Users should:
- Thoroughly test strategies in demo environments
- Understand the risks involved in news trading
- Consider market conditions and volatility
- Use proper risk management techniques
### Market Considerations
- High volatility during news events increases both opportunity and risk
- Spreads may widen significantly during news releases
- Different brokers may have varying execution conditions
- Economic calendar timing may vary between sources
### Limitations
- Past performance does not guarantee future results
- Market conditions can change, affecting strategy effectiveness
- News events may have unexpected outcomes affecting normal patterns
- Technical analysis should be combined with fundamental analysis
## Version Information
- Compatible with TradingView Pine Script v5
- Designed for 1-minute timeframe optimal performance
- Works on major forex pairs, indices, and commodities
- Regular updates based on market condition changes
---
**Disclaimer:** This indicator is provided for educational purposes only. Trading involves substantial risk and is not suitable for all investors. Past performance is not indicative of future results. Users should conduct their own research and consider their financial situation before making trading decisions.
Zero Lag Trend Signals (MTF) [AlgoAlpha]// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at mozilla.org
// © AlgoAlpha
//@version=5
indicator("Zero Lag Trend Signals (MTF) ", shorttitle="AlgoAlpha - 0️⃣Zero Lag Signals", overlay=true)
length = input.int(70, "Length", tooltip = "The Look-Back window for the Zero-Lag EMA calculations", group = "Main Calculations")
mult = input.float(1.2, "Band Multiplier", tooltip = "This value controls the thickness of the bands, a larger value makes the indicato less noisy", group = "Main Calculations")
t1 = input.timeframe("5", "Time frame 1", group = "Extra Timeframes")
t2 = input.timeframe("15", "Time frame 2", group = "Extra Timeframes")
t3 = input.timeframe("60", "Time frame 3", group = "Extra Timeframes")
t4 = input.timeframe("240", "Time frame 4", group = "Extra Timeframes")
t5 = input.timeframe("1D", "Time frame 5", group = "Extra Timeframes")
green = input.color(#00ffbb, "Bullish Color", group = "Appearance")
red = input.color(#ff1100, "Bearish Color", group = "Appearance")
src = close
lag = math.floor((length - 1) / 2)
zlema = ta.ema(src + (src - src ), length)
volatility = ta.highest(ta.atr(length), length*3) * mult
var trend = 0
if ta.crossover(close, zlema+volatility)
trend := 1
if ta.crossunder(close, zlema-volatility)
trend := -1
zlemaColor = trend == 1 ? color.new(green, 70) : color.new(red, 70)
m = plot(zlema, title="Zero Lag Basis", linewidth=2, color=zlemaColor)
upper = plot(trend == -1 ? zlema+volatility : na, style = plot.style_linebr, color = color.new(red, 90), title = "Upper Deviation Band")
lower = plot(trend == 1 ? zlema-volatility : na, style = plot.style_linebr, color = color.new(green, 90), title = "Lower Deviation Band")
fill(m, upper, (open + close) / 2, zlema+volatility, color.new(red, 90), color.new(red, 70))
fill(m, lower, (open + close) / 2, zlema-volatility, color.new(green, 90), color.new(green, 70))
plotshape(ta.crossunder(trend, 0) ? zlema+volatility : na, "Bearish Trend", shape.labeldown, location.absolute, red, text = "▼", textcolor = chart.fg_color, size = size.small)
plotshape(ta.crossover(trend, 0) ? zlema-volatility : na, "Bullish Trend", shape.labelup, location.absolute, green, text = "▲", textcolor = chart.fg_color, size = size.small)
plotchar(ta.crossover(close, zlema) and trend == 1 and trend == 1 ? zlema-volatility*1.5 : na, "Bullish Entry", "▲", location.absolute, green, size = size.tiny)
plotchar(ta.crossunder(close, zlema) and trend == -1 and trend == -1 ? zlema+volatility*1.5 : na, "Bearish Entry", "▼", location.absolute, red, size = size.tiny)
s1 = request.security(syminfo.tickerid, t1, trend)
s2 = request.security(syminfo.tickerid, t2, trend)
s3 = request.security(syminfo.tickerid, t3, trend)
s4 = request.security(syminfo.tickerid, t4, trend)
s5 = request.security(syminfo.tickerid, t5, trend)
s1a = s1 == 1 ? "Bullish" : "Bearish"
s2a = s2 == 1 ? "Bullish" : "Bearish"
s3a = s3 == 1 ? "Bullish" : "Bearish"
s4a = s4 == 1 ? "Bullish" : "Bearish"
s5a = s5 == 1 ? "Bullish" : "Bearish"
if barstate.islast
var data_table = table.new(position=position.top_right, columns=2, rows=6, bgcolor=chart.bg_color, border_width=1, border_color=chart.fg_color, frame_color=chart.fg_color, frame_width=1)
table.cell(data_table, text_halign=text.align_center, column=0, row=0, text="Time Frame", text_color=chart.fg_color)
table.cell(data_table, text_halign=text.align_center, column=1, row=0, text="Signal", text_color=chart.fg_color)
table.cell(data_table, text_halign=text.align_center, column=0, row=1, text=t1, text_color=chart.fg_color)
table.cell(data_table, text_halign=text.align_center, column=1, row=1, text=s1a, text_color=chart.fg_color, bgcolor=s1a == "Bullish" ? color.new(green, 70) : color.new(red, 70))
table.cell(data_table, text_halign=text.align_center, column=0, row=2, text=t2, text_color=chart.fg_color)
table.cell(data_table, text_halign=text.align_center, column=1, row=2, text=s2a, text_color=chart.fg_color, bgcolor=s2a == "Bullish" ? color.new(green, 70) : color.new(red, 70))
table.cell(data_table, text_halign=text.align_center, column=0, row=3, text=t3, text_color=chart.fg_color)
table.cell(data_table, text_halign=text.align_center, column=1, row=3, text=s3a, text_color=chart.fg_color, bgcolor=s3a == "Bullish" ? color.new(green, 70) : color.new(red, 70))
table.cell(data_table, text_halign=text.align_center, column=0, row=4, text=t4, text_color=chart.fg_color)
table.cell(data_table, text_halign=text.align_center, column=1, row=4, text=s4a, text_color=chart.fg_color, bgcolor=s4a == "Bullish" ? color.new(green, 70) : color.new(red, 70))
table.cell(data_table, text_halign=text.align_center, column=0, row=5, text=t5, text_color=chart.fg_color)
table.cell(data_table, text_halign=text.align_center, column=1, row=5, text=s5a, text_color=chart.fg_color, bgcolor=s5a == "Bullish" ? color.new(green, 70) : color.new(red, 70))
/////////////////////////////////////////ALERTS FOR SMALL ARROWS (ENTRY SIGNALS)
alertcondition(ta.crossover(close, zlema) and trend == 1 and trend == 1, "Bullish Entry Signal",
message="Bullish Entry Signal detected. Consider entering a long position.")
alertcondition(ta.crossunder(close, zlema) and trend == -1 and trend == -1, "Bearish Entry Signal",
message="Bearish Entry Signal detected. Consider entering a short position.")
/////////////////////////////////////////ALERTS FOR TREND CONDITIONS
alertcondition(ta.crossover(trend, 0), "Bullish Trend")
alertcondition(ta.crossunder(trend, 0), "Bearish Trend")
alertcondition(ta.cross(trend, 0), "(Bullish or Bearish) Trend")
alertcondition(ta.crossover(s1, 0), "Bullish Trend Time Frame 1")
alertcondition(ta.crossunder(s1, 0), "Bearish Trend Time Frame 1")
alertcondition(ta.cross(s1, 0), "(Bullish or Bearish) Trend Time Frame 1")
alertcondition(ta.crossover(s2, 0), "Bullish Trend Time Frame 2")
alertcondition(ta.crossunder(s2, 0), "Bearish Trend Time Frame 2")
alertcondition(ta.cross(s2, 0), "(Bullish or Bearish) Trend Time Frame 2")
alertcondition(ta.crossover(s3, 0), "Bullish Trend Time Frame 3")
alertcondition(ta.crossunder(s3, 0), "Bearish Trend Time Frame 3")
alertcondition(ta.cross(s3, 0), "(Bullish or Bearish) Trend Time Frame 3")
alertcondition(ta.crossover(s4, 0), "Bullish Trend Time Frame 4")
alertcondition(ta.crossunder(s4, 0), "Bearish Trend Time Frame 4")
alertcondition(ta.cross(s4, 0), "(Bullish or Bearish) Trend Time Frame 4")
alertcondition(ta.crossover(s5, 0), "Bullish Trend Time Frame 5")
alertcondition(ta.crossunder(s5, 0), "Bearish Trend Time Frame 5")
alertcondition(ta.cross(s5, 0), "(Bullish or Bearish) Trend Time Frame 5")
alertcondition(ta.crossover(close, zlema) and trend == 1 and trend == 1, "Bullish Entry")
alertcondition(ta.crossunder(close, zlema) and trend == -1 and trend == -1, "Bearish Entry")
bullishAgreement = s1 == 1 and s2 == 1 and s3 == 1 and s4 == 1 and s5 == 1
bearishAgreement = s1 == -1 and s2 == -1 and s3 == -1 and s4 == -1 and s5 == -1
alertcondition(bullishAgreement, "Full Bullish Agreement", message="All timeframes agree on bullish trend.")
alertcondition(bearishAgreement, "Full Bearish Agreement", message="All timeframes agree on bearish trend.")
Multi-Timeframe EMA Overlay [Smoothed Approximation]in.tradingview.com This indicator displays Exponential Moving Averages (EMAs) from multiple timeframes (5m, 15m, 1H, 4H, 1D) on a single chart, regardless of your current timeframe.
HOW IT WORKS
You choose a base EMA length (e.g., 20).
The script calculates equivalent lengths for other timeframes (e.g., for a 1H EMA while on a 1-minute chart: 20 × 60 = 1200 length).
These adjusted EMAs are then computed and plotted — giving a continuous, smooth curve rather than a stepped line.
KEY FEATURES
🟪 5m, 🟦 15m, 🟩 1H, 🟧 4H, 🟥 1D EMAs.
🧠 Smooth approximation — good for visual trend tracking without step lag.
🎛️ Toggle visibility for each timeframe EMA independently.
📈 Uses
Trend Confirmation:
Aligning short-term trades with higher timeframe trends (e.g., go long only when 15m & 1H EMAs are trending up).
Confluence Zones:
Price action near multiple EMA levels from different timeframes can indicate strong support/resistance zones.
Entry Filters:
Avoid trades against dominant higher timeframe trends.
Example: On a 5m chart, only go long if price > 1H EMA.
Reversal Watch:
EMA convergence or crossovers across timeframes can signal potential trend shifts.
Volatility Index Percentile Risk STOCK StrategyVolatility-Index Percentile Risk STOCK Strategy
──────────────────────────────────────────────
PURPOSE
• Go long equities only when implied volatility (from any VIX-style index) is in its quietest percentile band.
• Scale stop-loss distance automatically with live volatility so risk stays proportional across timeframes and market regimes.
HOW IT WORKS
1. Pull the closing price of a user-selected volatility index (default: CBOE VIX, Nasdaq VXN, etc.).
2. Compute its 1-year (252-bar) percentile.
– If percentile < “Enter” threshold → open / maintain long.
– If percentile > “Exit” threshold → flatten.
3. Set the stop-loss every bar at:
SL % = (current VIX value) ÷ Risk Divisor
(e.g., VIX = 20 and divisor = 57 → 0.35 % SL below entry).
This keeps risk tighter when volatility is high and looser when it’s calm.
USER INPUTS
• VIX-style Index — symbol of any volatility index
• Look-back — length for percentile (default 252)
• Enter Long < Percentile — calm-market trigger (default 15 %)
• Exit Long > Percentile — fear trigger (default 60 %)
• Risk Divisor (SL) — higher number = tighter stop; start with 57 on 30-min charts
• Show Debug Plots — optional visibility of percentile & SL%
RECOMMENDED BACK-TEST SETTINGS
• Timeframe: 30 min – Daily on liquid stocks/ETFs highly correlated to the chosen VIX.
• Initial capital: 100 000 | Order size: 10 % of equity
• Commission: 0.03 % | Slippage: 5 ticks
• Enable *Bar Magnifier* and *Fill on bar close* for realistic execution.
ADDITIONAL INFORMATION
• **Self-calibrating risk** – no static ATR or fixed %, adapts instantly to changing volatility.
• **Percentile filter** – regime-aware entry logic that avoids false calm periods signalled by raw VIX levels.
• **Timeframe-agnostic** – works from intraday to weekly; √T-style divisor lets you fine-tune stops quickly ,together with the percentiles and days length.
• Zero look-ahead.
CAVEATS
• Long-only; no built-in profit target. Add one if your plan requires fixed R:R exits.
• Works best on indices/stocks that move with the selected vol index.
• Back-test results are educational; past performance never guarantees future returns.
LICENSE & CREDITS
Released under the Mozilla Public License 2.0.
Inspired by academic research on volatility risk premia and mean-reversion.
DISCLAIMER
This script is for informational and educational purposes only. It is **not** financial advice. Use at your own risk.
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.