-
PHP Code:
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © daytraderph
//@version=5
indicator('Dynamic Range', overlay=true)
res = input.timeframe(defval='D')
dayrange = high - low
r1 = request.security(syminfo.tickerid, res, dayrange[1])
r2 = request.security(syminfo.tickerid, res, dayrange[2])
r3 = request.security(syminfo.tickerid, res, dayrange[3])
r4 = request.security(syminfo.tickerid, res, dayrange[4])
r5 = request.security(syminfo.tickerid, res, dayrange[5])
r6 = request.security(syminfo.tickerid, res, dayrange[6])
r7 = request.security(syminfo.tickerid, res, dayrange[7])
r8 = request.security(syminfo.tickerid, res, dayrange[8])
r9 = request.security(syminfo.tickerid, res, dayrange[9])
r10 = request.security(syminfo.tickerid, res, dayrange[10])
r11 = request.security(syminfo.tickerid, res, dayrange[11])
r12 = request.security(syminfo.tickerid, res, dayrange[12])
oo = request.security(syminfo.tickerid, res, open, barmerge.gaps_off, barmerge.lookahead_on)
zone1 = oo + (r1 + r2 + r3 + r4 + r5) / 10
zone2 = oo + (r1 + r2 + r3 + r4 + r5 + r6 + r7 + r8 + r9 + r10) / 10 / 2
zone3 = oo - (r1 + r2 + r3 + r4 + r5) / 10
zone4 = oo - (r1 + r2 + r3 + r4 + r5 + r6 + r7 + r8 + r9 + r10) / 10 / 2
z1 = plot(zone1, title='D-Range', color=color.new(color.yellow, 0), linewidth=1, style=plot.style_cross)
//z2 = plot(zone2, title='Z2', color=color.new(color.green, 0), linewidth=1, style=plot.style_circles)
//z3 = plot(zone3, title='Z3', color=color.new(color.red, 0), linewidth=1, style=plot.style_circles)
z4 = plot(zone4, title='D-Range', color=color.new(color.aqua, 0), linewidth=1, style=plot.style_cross)
-
-
https://tr.tradingview.com/v/bUdYv5cD/
ohlc değerleri kullanarak range hesaplama...
2 farklı zaman dilimi kullanabilirsiniz....
-
https://tr.tradingview.com/v/oYw1zztt/
güzel range kodu...
alternatif time frame yi işaretleyin
-
PHP Code:
//@version=5
indicator(title='Range Adaptive Channel', shorttitle='RAC', overlay=true)
string reversal_type = input.string(defval='ATR', options=['ATR', 'Traditional'], title='Reversal Type:', inline='rt')
float reversal_modifier = input.float(defval=14, title='', inline='rt')
float reversal_multiplier = input.float(defval=3, title='', inline='rt', tooltip='-The type of range to use for the width of the channel. \n-Price modifier or atr length parameter depending on type. \n-Multiplier to apply to range.')
string ALT_TF = input.string(defval='D', title='Timeframe:', inline='itf')
bool USE_ALT_TF = input.bool(defval=true, title='Use Alternative Timeframe?', inline='itf')
float expansion_rate = input.float(defval=0.25, title='Expansion Rate:', inline='er')
bool expand_range = input.bool(defval=true, title='Expand Range', inline='er', tooltip='Expand Channel by rate when price touches extremes.')
float atr_1 = ta.atr(math.max(1, math.round(reversal_modifier)))
float reversal_block =
switch (reversal_type)
('ATR') => reversal_multiplier * atr_1
('Traditional') => reversal_multiplier * reversal_modifier
=> 0.0
bot_function() =>
float _bot_base = high - reversal_block
float _previous = nz(_bot_base[1], _bot_base)
if _previous + reversal_block < high
_bot_base := high - reversal_block
else if low < _previous
if expand_range
_bot_base := low - reversal_block * expansion_rate
else
_bot_base := low
else
_bot_base := _previous
top_function() =>
float _top_base = low + reversal_block
float _previous = nz(_top_base[1], _top_base)
if _previous - reversal_block > low
_top_base := low + reversal_block
else if high > _previous
if expand_range
_top_base := high + reversal_block * expansion_rate
else
_top_base := high
else
_top_base := _previous
bot_function_1 = bot_function()
security_1 = request.security(syminfo.tickerid, ALT_TF, bot_function_1)
bot_function_2 = bot_function()
bot = USE_ALT_TF ? security_1 : bot_function_2
top_function_1 = top_function()
security_2 = request.security(syminfo.tickerid, ALT_TF, top_function_1)
top_function_2 = top_function()
top = USE_ALT_TF ? security_2 : top_function_2
top_f = ta.change(bot) < 0 or ta.change(top) < 0 ? top : na
bot_f = ta.change(bot) < 0 or ta.change(top) < 0 ? bot : na
top_r = ta.change(bot) > 0 or ta.change(top) > 0 ? top : na
bot_r = ta.change(bot) > 0 or ta.change(top) > 0 ? bot : na
top_border = top - (top - bot) * 0.25
bot_border = bot + (top - bot) * 0.25
mid_border = bot + (top - bot) * 0.50
p_top_f = plot(series=top_f, title='0', color=color.new(color.lime, 0), style=plot.style_linebr)
//p_bot_f = plot(series=bot_f, title='tf', color=color.new(color.lime, 0), style=plot.style_linebr)
p_top_r = plot(series=top_r, title='1', color=color.new(color.red, 0), style=plot.style_linebr)
//p_bot_r = plot(series=bot_r, title='tr', color=color.new(color.red, 0), style=plot.style_linebr)
//fill(p_top_f, p_bot_f, color.new(color.lime, 90), title='direction fill')
//fill(p_top_r, p_bot_r, color.new(color.red, 90), title='direction fill')
plot(title='0', series=bot, color=color.new(color.lime, 0))
plot(title='1', series=top, color=color.new(color.red, 0))
plot(title='1', series=top_border, style=plot.style_circles, color=color.new(color.red, 0))
plot(title='0', series=bot_border, style=plot.style_circles, color=color.new(color.lime, 0))
plot(title='01', series=mid_border, style=plot.style_circles, color=color.new(#537cee, 0))
-
PHP Code:
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © arunbabumvk_23
//@version=5
indicator(title='Range Breakout', overlay=true)
range_length = input.int(5, minval=3, title='Range Length')
rangeHighest = ta.highest(high, range_length)
rangeBreakout = close > rangeHighest[1] ? 1 : 0
rangeSmallest = ta.lowest(low, range_length)
rangeBreakdown = close < rangeSmallest[1] ? 1 : 0
plotshape(rangeBreakout, style=shape.labelup, location=location.belowbar, color=color.rgb(87, 146, 100))
plotshape(rangeBreakdown, style=shape.labeldown, location=location.abovebar, color=color.rgb(193, 74, 80))
istediğiniz uzunluğa range kırılımları hesaplatabilirsiniz.....
-
https://tr.tradingview.com/v/O9eCvZR0/
5 dakkalık grafiklerde denenebilir...
-
etiket sinyalli ve bar renklendirmeli range kodu... v5 çevrildi....
PHP Code:
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © DonovanWall
//██████╗ ██╗ ██╗
//██╔══██╗██║ ██║
//██║ ██║██║ █╗ ██║
//██║ ██║██║███╗██║
//██████╔╝╚███╔███╔╝
//╚═════╝ ╚══╝╚══╝
//@version=5
indicator(title='Range Filter [DW] & Labels', shorttitle='RF [DW] & Labels', overlay=true)
//This is an experimental study designed to filter out minor price action for a clearer view of trends.
//Inspired by the QQE's volatility filter, this filter applies the process directly to price rather than to a smoothed RSI.
//First, a smooth average price range is calculated for the basis of the filter and multiplied by a specified amount.
//Next, the filter is calculated by gating price movements that do not exceed the specified range.
//Lastly the target ranges are plotted to display the prices that will trigger filter movement.
//Custom bar colors are included. The color scheme is based on the filtered price trend.
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------
//Updates:
// -> Migrated to v4.
// -> Range Filter and the bands are now calculated in a singular function.
// -> There are now two different calculation methods for the filter. Select the type you want to use via the "Filter Type" input. Type 1 is the original formula.
// -> Multiple range sizing methods are now available. You can choose from the following scales:
// - Points
// - Pips (Works best with forex pairs, obviously)
// - Ticks
// - % of Price
// - ATR
// - Average Change (Default. This is the original sizing method.)
// - Standard Deviation
// - Absolute (Absolute numerical value)
// -> Range smoothing is now optional, and you can specify your smoothing length. Smoothing only affects dynamic scales (ATR, Average Change, and Standard Deviation).
// -> Filter movement can now be determined using wicks or close. This can be specified via the "Movement Source" input.
// -> Stability Fix: Added correction for NaN values to stabilize initial states.
// -> Reorganized the script structure.
// -> Revamped the color scheme.
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------
//Updates:
// - The Range Filter functions have now been rebuilt using Pine's awesome new array functions.
// - Standard deviation calculation has been adjusted to calculate the same as TV's built in stdev() function.
// - Rewritten filter direction and bar color variables.
// - Included an external output variable for trend information that can easily be sent to other scripts without hardcoding.
// The output format is 1 for bullish, and -1 for bearish.
// To use this external variable with another script, simply select it from your other script's source dropdown tab.
// - Added the ability to average range filter values based on a user defined number of filter changes.
// This averaging method utilized the Conditional Sampling EMA function I introduced in my Resampling Filter Pack and only takes a new sample when the filter changes its value.
// This opens up a whole new world of possible filter outputs.
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------
//Functions
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------
//Conditional Sampling EMA Function
Cond_EMA(x, cond, n) =>
var val = array.new_float(0)
var ema_val = array.new_float(1)
if cond
array.push(val, x)
if array.size(val) > 1
array.remove(val, 0)
if na(array.get(ema_val, 0))
array.fill(ema_val, array.get(val, 0))
array.set(ema_val, 0, (array.get(val, 0) - array.get(ema_val, 0)) * (2 / (n + 1)) + array.get(ema_val, 0))
EMA = array.get(ema_val, 0)
EMA
//Conditional Sampling SMA Function
Cond_SMA(x, cond, n) =>
var vals = array.new_float(0)
if cond
array.push(vals, x)
if array.size(vals) > n
array.remove(vals, 0)
SMA = array.avg(vals)
SMA
//Standard Deviation Function
Stdev(x, n) =>
math.sqrt(Cond_SMA(math.pow(x, 2), 1, n) - math.pow(Cond_SMA(x, 1, n), 2))
//Range Size Function
rng_size(x, scale, qty, n) =>
ATR = Cond_EMA(ta.tr(true), 1, n)
AC = Cond_EMA(math.abs(x - x[1]), 1, n)
SD = Stdev(x, n)
rng_size = scale == 'Pips' ? qty * 0.0001 : scale == 'Points' ? qty * syminfo.pointvalue : scale == '% of Price' ? close * qty / 100 : scale == 'ATR' ? qty * ATR : scale == 'Average Change' ? qty * AC : scale == 'Standard Deviation' ? qty * SD : scale == 'Ticks' ? qty * syminfo.mintick : qty
rng_size
//Two Type Range Filter Function
rng_filt(h, l, rng_, n, type, smooth, sn, av_rf, av_n) =>
rng_smooth = Cond_EMA(rng_, 1, sn)
r = smooth ? rng_smooth : rng_
var rfilt = array.new_float(2, (h + l) / 2)
array.set(rfilt, 1, array.get(rfilt, 0))
if type == 'Type 1'
if h - r > array.get(rfilt, 1)
array.set(rfilt, 0, h - r)
if l + r < array.get(rfilt, 1)
array.set(rfilt, 0, l + r)
if type == 'Type 2'
if h >= array.get(rfilt, 1) + r
array.set(rfilt, 0, array.get(rfilt, 1) + math.floor(math.abs(h - array.get(rfilt, 1)) / r) * r)
if l <= array.get(rfilt, 1) - r
array.set(rfilt, 0, array.get(rfilt, 1) - math.floor(math.abs(l - array.get(rfilt, 1)) / r) * r)
rng_filt1 = array.get(rfilt, 0)
hi_band1 = rng_filt1 + r
lo_band1 = rng_filt1 - r
rng_filt2 = Cond_EMA(rng_filt1, rng_filt1 != rng_filt1[1], av_n)
hi_band2 = Cond_EMA(hi_band1, rng_filt1 != rng_filt1[1], av_n)
lo_band2 = Cond_EMA(lo_band1, rng_filt1 != rng_filt1[1], av_n)
rng_filt = av_rf ? rng_filt2 : rng_filt1
hi_band = av_rf ? hi_band2 : hi_band1
lo_band = av_rf ? lo_band2 : lo_band1
[hi_band, lo_band, rng_filt]
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------
//Inputs
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------
//Filter Type
f_type = input.string(defval='Type 1', options=['Type 1', 'Type 2'], title='Filter Type')
//Movement Source
mov_src = input.string(defval='Close', options=['Wicks', 'Close'], title='Movement Source')
//Range Size Inputs
rng_qty = input.float(defval=2.618, minval=0.0000001, title='Range Size')
rng_scale = input.string(defval='Average Change', options=['Points', 'Pips', 'Ticks', '% of Price', 'ATR', 'Average Change', 'Standard Deviation', 'Absolute'], title='Range Scale')
//Range Period
rng_per = input.int(defval=14, minval=1, title='Range Period (for ATR, Average Change, and Standard Deviation)')
//Range Smoothing Inputs
smooth_range = input(defval=true, title='Smooth Range')
smooth_per = input.int(defval=27, minval=1, title='Smoothing Period')
//Filter Value Averaging Inputs
av_vals = input(defval=true, title='Average Filter Changes')
av_samples = input.int(defval=2, minval=1, title='Number Of Changes To Average')
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------
//Definitions
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------
//High And Low Values
h_val = mov_src == 'Wicks' ? high : close
l_val = mov_src == 'Wicks' ? low : close
//Range Filter Values
[h_band, l_band, filt] = rng_filt(h_val, l_val, rng_size((h_val + l_val) / 2, rng_scale, rng_qty, rng_per), rng_per, f_type, smooth_range, smooth_per, av_vals, av_samples)
//Direction Conditions
var fdir = 0.0
fdir := filt > filt[1] ? 1 : filt < filt[1] ? -1 : fdir
upward = fdir == 1 ? 1 : 0
downward = fdir == -1 ? 1 : 0
//Colors
filt_color = upward ? #05ff9b : downward ? #ff0583 : #cccccc
bar_color = upward and close > filt ? close > close[1] ? #05ff9b : #00b36b : downward and close < filt ? close < close[1] ? #ff0583 : #b8005d : #cccccc
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------
//Outputs
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------
//Filter Plot
filt_plot = plot(filt, color=filt_color, linewidth=3, title='Filter', transp=0)
//Band Plots
h_band_plot = plot(h_band, color=color.new(#05ff9b, 100), title='High Band')
l_band_plot = plot(l_band, color=color.new(#ff0583, 100), title='Low Band')
//Band Fills
fill(h_band_plot, filt_plot, color=color.new(#00b36b, 85), title='High Band Fill')
fill(l_band_plot, filt_plot, color=color.new(#b8005d, 85), title='Low Band Fill')
//Bar Color
barcolor(bar_color)
//External Trend Output
plot(fdir, editable=false, display=display.none, title='External Output - Trend Signal', transp=100)
// Trading Conditions Logic
longCond = close > filt and close > close[1] and upward > 0 or close > filt and close < close[1] and upward > 0
shortCond = close < filt and close < close[1] and downward > 0 or close < filt and close > close[1] and downward > 0
CondIni = 0
CondIni := longCond ? 1 : shortCond ? -1 : CondIni[1]
longCondition = longCond and CondIni[1] == -1
shortCondition = shortCond and CondIni[1] == 1
// Plot Buy and Sell Labels
plotshape(longCondition, title='Buy Signal', text='BUY', textcolor=color.new(color.white, 0), style=shape.labelup, size=size.normal, location=location.belowbar, color=color.new(color.green, 0))
plotshape(shortCondition, title='Sell Signal', text='SELL', textcolor=color.new(color.white, 0), style=shape.labeldown, size=size.normal, location=location.abovebar, color=color.new(color.red, 0))
// Alerts
alertcondition(longCondition, title='Buy Alert', message='BUY')
alertcondition(shortCondition, title='Sell Alert', message='SELL')