PHP Code:
// This work is licensed under a Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0) https://creativecommons.org/licenses/by-nc-sa/4.0/
// © LuxAlgo
//@version=5
indicator("Predictive Ranges [LuxAlgo]", "*", overlay = true,max_boxes_count = 500, max_lines_count = 500, max_bars_back = 500)
//------------------------------------------------------------------------------
//Settings
//-----------------------------------------------------------------------------{
length = input.int(200, 'Length', minval = 2)
mult55 = input.float(6., 'Factor', minval = 0, step = .5)
tf = input.timeframe('', 'Timeframe')
src = input(close, 'Source')
//-----------------------------------------------------------------------------}
//Function
//-----------------------------------------------------------------------------{
pred_ranges(length, mult55)=>
var avg = src
var hold_atr = 0.
atr = nz(ta.atr(length)) * mult55
avg := src - avg > atr ? avg + atr :
avg - src > atr ? avg - atr :
avg
hold_atr := avg != avg[1] ? atr / 2 : hold_atr
[avg + hold_atr * 2, avg + hold_atr, avg, avg - hold_atr, avg - hold_atr * 2]
//-----------------------------------------------------------------------------}
//Calculation
//-----------------------------------------------------------------------------{
[prR2
, prR1
, avg
, prS1
, prS2] = request.security(syminfo.tickerid, tf, pred_ranges(length, mult55))
//-----------------------------------------------------------------------------}
//Plots
//-----------------------------------------------------------------------------{
plot_pru2 = plot(prR2, 'Direnç2', avg != avg[1] ? na : #f2364600)
plot_pru1 = plot(prR1, 'Direnç1', avg != avg[1] ? na : #f2364600)
plot_pravg = plot(avg , 'Ortalama', avg != avg[1] ? na : #f1ce0b)
plot_prl1 = plot(prS1, 'Destek1', avg != avg[1] ? na : #08998100)
plot_prl2 = plot(prS2, 'Destek2', avg != avg[1] ? na : #08998100)
//Fills
fill(plot_pru2, plot_pru1, avg != avg[1] ? na : color.new(#f23645, 65))
fill(plot_prl1, plot_prl2, avg != avg[1] ? na : color.new(#089981, 65))
//-----------------------------------------------------------------------------}
//------------------------------------------------------------------------------
//Settings
//-----------------------------------------------------------------------------{
length11 = input(20)
src11 = input(close)
//------------------------------------------------------------------------------
//Signal moving average
//-----------------------------------------------------------------------------{
var ma = 0.
var os = 0.
target = ta.sma(src11, length11)
abs_diff = math.abs(target - target[1])
r2 = math.pow(ta.correlation(close, bar_index, length11), 2)
os := r2 > 0.5 ? math.sign(src11[1] - target[1]) : os
ma := r2 > 0.5 ? r2 * target + (1 - r2) * nz(ma[1], target)
: ma[1] - abs_diff * os
//-----------------------------------------------------------------------------}
//Plots
//-----------------------------------------------------------------------------{
plot0 = plot(src11, display = display.none, editable = false)
css = os == 1 ? #0cb51a : #ff1100
plot1 = plot(ma, 'Signal MA'
, css)
fill_css = src > ma ? color.new(#0cb51a, 80) : color.new(#ff1100, 80)
//fill(plot0, plot1, fill_css, 'Fill')
//-----------------------------------------------------------------------------}
//Settings
//-----------------------------------------------------------------------------{
per = input.float(10., 'Threshold %', minval = 0, maxval = 100)
div = input.int(50, 'Resolution' , minval = 2, maxval = 500)
//tf = input.timeframe('', 'Intrabar TF')
//Colors
showSupply = input(true ,'Supply********', inline = 'supply', group = 'Style')
supplyCss = input(#2157f3, '' , inline = 'supply', group = 'Style')
supplyArea = input(false ,'Area' , inline = 'supply', group = 'Style')
supplyAvg = input(false ,'Average' , inline = 'supply', group = 'Style')
supplyWavg = input(true ,'Weighted' , inline = 'supply', group = 'Style')
showEqui = input(true ,'Equilibrium' , inline = 'equi' , group = 'Style')
equiCss = input(color.gray, '' , inline = 'equi' , group = 'Style')
equiAvg = input(false ,'Average' , inline = 'equi' , group = 'Style')
equiWavg = input(true ,'Weighted' , inline = 'equi' , group = 'Style')
showDemand = input(true ,'Demand****' , inline = 'demand', group = 'Style')
demandCss = input(#ff5d00, '' , inline = 'demand', group = 'Style')
demandArea = input(false ,'Area' , inline = 'demand', group = 'Style')
demandAvg = input(false ,'Average' , inline = 'demand', group = 'Style')
demandWavg = input(false ,'Weighted' , inline = 'demand', group = 'Style')
//-----------------------------------------------------------------------------}
//UDT's
//-----------------------------------------------------------------------------{
type bin
float lvl
float prev
float sum
float prev_sum
float csum
float avg
bool isreached
type area
box bx
line avg
line wavg
//-----------------------------------------------------------------------------}
//Functions
//-----------------------------------------------------------------------------{
n = bar_index
get_hlv()=> [high, low, volume]
method set_area(area id, x1, top, btm, avg, wavg, showArea, showAvg, showWavg)=>
if showArea
id.bx.set_lefttop(x1, top)
id.bx.set_rightbottom(n, btm)
if showAvg
id.avg.set_xy1(x1, avg)
id.avg.set_xy2(n, avg)
if showWavg
id.wavg.set_xy1(x1, wavg)
id.wavg.set_xy2(n, wavg)
//-----------------------------------------------------------------------------}
//Main variables
//-----------------------------------------------------------------------------{
var max = 0.
var min = 0.
var x1 = 0
var csum = 0.
var area supply_area = na
var area demand_area = na
//Intrabar data
[h, l, v] = request.security_lower_tf(syminfo.tickerid, tf, get_hlv())
//Accumulate
max := math.max(high[1], max)
min := math.min(low[1], min)
csum += volume[1]
//-----------------------------------------------------------------------------}
//Set zones
//-----------------------------------------------------------------------------{
var float supply_wavg = na
var float demand_wavg = na
if dayofmonth != dayofmonth[1]
r = (max - min) / div
supply = bin.new(max, max, 0, 0, 0, 0, false)
demand = bin.new(min, min, 0, 0, 0, 0, false)
//Loop trough intervals
for i = 0 to div-1
supply.lvl -= r
demand.lvl += r
//Loop trough bars
for j = 1 to (n - x1)-1
//Loop trough intrabars
for k = 0 to (v[j]).size()-1
//Accumulate if within upper internal
supply.sum += (h[j]).get(k) > supply.lvl and (h[j]).get(k) < supply.prev ? (v[j]).get(k) : 0
supply.avg += supply.lvl * (supply.sum - supply.prev_sum)
supply.csum += supply.sum - supply.prev_sum
supply.prev_sum := supply.sum
//Accumulate if within lower interval
demand.sum += (l[j]).get(k) < demand.lvl and (l[j]).get(k) > demand.prev ? (v[j]).get(k) : 0
demand.avg += demand.lvl * (demand.sum - demand.prev_sum)
demand.csum += demand.sum - demand.prev_sum
demand.prev_sum := demand.sum
//Test if supply accumulated volume exceed threshold and set box
if supply.sum / csum * 100 > per and not supply.isreached
avg = math.avg(max, supply.lvl)
supply_wavg := supply.avg / supply.csum
//Set Box/Level coordinates
if showSupply
supply_area := area.new(
box.new(na, na, na, na, na, bgcolor = color.new(supplyCss, 80))
, line.new(na, na, na, na, color = supplyCss)
, line.new(na, na, na, na, color = supplyCss, style = line.style_dashed))
supply_area.set_area(x1, max, supply.lvl, avg, supply_wavg, supplyArea, supplyAvg, supplyWavg)
supply.isreached := true
//Test if demand accumulated volume exceed threshold and set box
if demand.sum / csum * 100 > per and not demand.isreached and showDemand
avg = math.avg(min, demand.lvl)
demand_wavg := demand.avg / demand.csum
//Set Box/Level coordinates
if showDemand
demand_area := area.new(
box.new(na, na, na, na, na, bgcolor = color.new(demandCss, 80))
, line.new(na, na, na, na, color = demandCss)
, line.new(na, na, na, na, color = demandCss, style = line.style_dashed))
demand_area.set_area(x1, demand.lvl, min, avg, demand_wavg, demandArea, demandAvg, demandWavg)
demand.isreached := true
if supply.isreached and demand.isreached
break
supply.prev := supply.lvl
demand.prev := demand.lvl
max := high
min := low
csum := volume
x1 := n
if barstate.islast
if showSupply
supply_area.bx.set_right(n)
supply_area.avg.set_x2(n)
supply_area.wavg.set_x2(n)
if showDemand
demand_area.bx.set_right(n)
demand_area.avg.set_x2(n)
demand_area.wavg.set_x2(n)
//-----------------------------------------------------------------------------}
//Settings
//-----------------------------------------------------------------------------{
length22 = input(100)
incr = input(10, "Increment")
fast = input(10)
src22 = input(close)
//-----------------------------------------------------------------------------}
//Calculations
//-----------------------------------------------------------------------------{
var ma22 = 0.
var fma = 0.
var alpha = 0.
var k = 1 / incr
upper = ta.highest(length22)
lower = ta.lowest(length22)
init_ma = ta.sma(src22, length22)
cross = ta.cross(src22,ma22)
alpha := cross ? 2 / (length + 1)
: src22 > ma22 and upper > upper[1] ? alpha + k
: src22 < ma22 and lower < lower[1] ? alpha + k
: alpha
ma22 := nz(ma22[1] + alpha[1] * (src22 - ma22[1]), init_ma)
fma := nz(cross ? math.avg(src22, fma[1])
: src22 > ma22 ? math.max(src22, fma[1]) + (src22 - fma[1]) / fast
: math.min(src22, fma[1]) + (src22 - fma[1]) / fast,src22)
//-----------------------------------------------------------------------------}
//Plots
//-----------------------------------------------------------------------------{
css22 = fma > ma22 ? color.rgb(46, 245, 6) : color.red
plot122 = plot(ma22, "Converging MA"
, color = css22)
//-----------------------------------------------------------------------------}
//Settings
//-----------------------------------------------------------------------------{
length33 = input.int(70
, minval = 0)
extrapolate = input.int(10
, minval = 0)
degree = input.int(3, 'Polynomial Degree'
, minval = 0
, maxval = 8)
src33 = input(close)
lock = input(false, 'Lock Forecast')
//Style
up_css = input.color(#0cb51a, 'Upward Color'
, group = 'Style')
dn_css = input.color(#ff1100, 'Downward Color'
, group = 'Style')
ex_css = input.color(#ea00ff, 'Extrapolation Color'
, group = 'Style')
width = input(3, 'Width'
, group = 'Style')
//-----------------------------------------------------------------------------}
//Fill lines array
//-----------------------------------------------------------------------------{
var lines = array.new_line(0)
if barstate.isfirst
for i = -extrapolate to length33-1
array.push(lines, line.new(na, na, na, na))
//-----------------------------------------------------------------------------}
//Get design matrix & partially solve system
//-----------------------------------------------------------------------------{
n33 = bar_index
var design = matrix.new<float>(0, 0)
var response = matrix.new<float>(0, 0)
if barstate.isfirst
for i = 0 to degree
column = array.new_float(0)
for j = 0 to length33-1
array.push(column, math.pow(j,i))
matrix.add_col(design, i, column)
var a = matrix.inv(matrix.mult(matrix.transpose(design), design))
var b = matrix.mult(a, matrix.transpose(design))
//-----------------------------------------------------------------------------}
//Get response matrix and compute roling polynomial regression
//-----------------------------------------------------------------------------{
var pass = 1
var matrix<float> coefficients = na
var x = -extrapolate
var float forecast = na
if barstate.islast
if pass
prices = array.new_float(0)
for i = 0 to length33-1
array.push(prices, src33[i])
matrix.add_col(response, 0, prices)
coefficients := matrix.mult(b, response)
float y1 = na
idx = 0
for i = -extrapolate to length33-1
y2 = 0.
for j = 0 to degree
y2 += math.pow(i, j)*matrix.get(coefficients, j, 0)
if idx == 0
forecast := y2
//------------------------------------------------------------------
//Set lines
//------------------------------------------------------------------
css33 = y2 < y1 ? up_css : dn_css
get_line = array.get(lines, idx)
line.set_xy1(get_line, n - i + 1, y1)
line.set_xy2(get_line, n - i, y2)
line.set_color(get_line, i <= 0 ? ex_css : css33)
line.set_width(get_line, width)
y1 := y2
idx += 1
if lock
pass := 0
else
y2 = 0.
x -= 1
for j = 0 to degree
y2 += math.pow(x, j)*matrix.get(coefficients, j, 0)
forecast := y2
plot(pass == 0 ? forecast : na, 'Extrapolation'
, color = ex_css
, offset = extrapolate
, linewidth = width)
//-----------------------------------------------------------------------------}
length55 = input.int(50, minval=2)
mult556 = input.float(2., minval=1)
show = input(false, 'As Smoothed Candles')
show_ext = input(true, 'Show Alternating Extremities')
alpha55 = input.float(1., 'Lag', minval=0, step=.1, tooltip='Control the lag of the moving average (higher = more lag)', group='Kernel Parameters')
beta55 = input.float(.5, 'Overshoot', minval=0, step=.1, tooltip='Control the overshoot amplitude of the moving average (higher = overshoots with an higher amplitude)', group='Kernel Parameters')
//----
src55 = close
var os55 = 0
var b55 = array.new_float(0)
var css55 = array.new_color(na)
if barstate.isfirst
for i = 0 to length55 - 1 by 1
x = i / (length55 - 1)
w = math.sin(2 * 3.14159 * math.pow(x, alpha55)) * (1 - math.pow(x, beta55))
array.push(b55, w)
array.push(css55, #FF1100)
array.push(css55, #FF1200)
array.push(css55, #FF1400)
array.push(css55, #FF1500)
array.push(css55, #FF1700)
array.push(css55, #FF1800)
array.push(css55, #FF1A00)
array.push(css55, #FF1B00)
array.push(css55, #FF1D00)
array.push(css55, #FF1F00)
array.push(css55, #FF2000)
array.push(css55, #FF2200)
array.push(css55, #FF2300)
array.push(css55, #FF2500)
array.push(css55, #FF2600)
array.push(css55, #FF2800)
array.push(css55, #FF2900)
array.push(css55, #FF2B00)
array.push(css55, #FF2D00)
array.push(css55, #FF2E00)
array.push(css55, #FF3000)
array.push(css55, #FF3100)
array.push(css55, #FF3300)
array.push(css55, #FF3400)
array.push(css55, #FF3600)
array.push(css55, #FF3700)
array.push(css55, #FF3900)
array.push(css55, #FF3B00)
array.push(css55, #FF3C00)
array.push(css55, #FF3E00)
array.push(css55, #FF3F00)
array.push(css55, #FF4100)
array.push(css55, #FF4200)
array.push(css55, #FF4400)
array.push(css55, #FF4500)
array.push(css55, #FF4700)
array.push(css55, #FF4900)
array.push(css55, #FF4A00)
array.push(css55, #FF4C00)
array.push(css55, #FF4D00)
array.push(css55, #FF4F00)
array.push(css55, #FF5000)
array.push(css55, #FF5200)
array.push(css55, #FF5300)
array.push(css55, #FF5500)
array.push(css55, #FF5700)
array.push(css55, #FF5800)
array.push(css55, #FF5A00)
array.push(css55, #FF5B00)
array.push(css55, #FF5D00)
array.push(css55, #FF5E00)
array.push(css55, #FF6000)
array.push(css55, #FF6200)
array.push(css55, #FF6300)
array.push(css55, #FF6500)
array.push(css55, #FF6600)
array.push(css55, #FF6800)
array.push(css55, #FF6900)
array.push(css55, #FF6B00)
array.push(css55, #FF6C00)
array.push(css55, #FF6E00)
array.push(css55, #FF7000)
array.push(css55, #FF7100)
array.push(css55, #FF7300)
array.push(css55, #FF7400)
array.push(css55, #FF7600)
array.push(css55, #FF7700)
array.push(css55, #FF7900)
array.push(css55, #FF7A00)
array.push(css55, #FF7C00)
array.push(css55, #FF7E00)
array.push(css55, #FF7F00)
array.push(css55, #FF8100)
array.push(css55, #FF8200)
array.push(css55, #FF8400)
array.push(css55, #FF8500)
array.push(css55, #FF8700)
array.push(css55, #FF8800)
array.push(css55, #FF8A00)
array.push(css55, #FF8C00)
array.push(css55, #FF8D00)
array.push(css55, #FF8F00)
array.push(css55, #FF9000)
array.push(css55, #FF9200)
array.push(css55, #FF9300)
array.push(css55, #FF9500)
array.push(css55, #FF9600)
array.push(css55, #FF9800)
array.push(css55, #FF9A00)
array.push(css55, #FF9B00)
array.push(css55, #FF9D00)
array.push(css55, #FF9E00)
array.push(css55, #FFA000)
array.push(css55, #FFA100)
array.push(css55, #FFA300)
array.push(css55, #FFA400)
array.push(css55, #FFA600)
array.push(css55, #FFA800)
array.push(css55, #FFA900)
array.push(css55, #FFAB00)
array.push(css55, #FDAC00)
array.push(css55, #FBAD02)
array.push(css55, #F9AE03)
array.push(css55, #F7AE04)
array.push(css55, #F5AF06)
array.push(css55, #F3B007)
array.push(css55, #F1B108)
array.push(css55, #EFB20A)
array.push(css55, #EDB30B)
array.push(css55, #EBB30C)
array.push(css55, #E9B40E)
array.push(css55, #E7B50F)
array.push(css55, #E4B610)
array.push(css55, #E2B712)
array.push(css55, #E0B813)
array.push(css55, #DEB814)
array.push(css55, #DCB916)
array.push(css55, #DABA17)
array.push(css55, #D8BB18)
array.push(css55, #D6BC1A)
array.push(css55, #D4BD1B)
array.push(css55, #D2BD1C)
array.push(css55, #D0BE1E)
array.push(css55, #CEBF1F)
array.push(css55, #CCC020)
array.push(css55, #C9C122)
array.push(css55, #C7C223)
array.push(css55, #C5C224)
array.push(css55, #C3C326)
array.push(css55, #C1C427)
array.push(css55, #BFC528)
array.push(css55, #BDC62A)
array.push(css55, #BBC72B)
array.push(css55, #B9C72C)
array.push(css55, #B7C82E)
array.push(css55, #B5C92F)
array.push(css55, #B3CA30)
array.push(css55, #B0CB32)
array.push(css55, #AECC33)
array.push(css55, #ACCC34)
array.push(css55, #AACD36)
array.push(css55, #A8CE37)
array.push(css55, #A6CF38)
array.push(css55, #A4D03A)
array.push(css55, #A2D13B)
array.push(css55, #A0D13C)
array.push(css55, #9ED23E)
array.push(css55, #9CD33F)
array.push(css55, #9AD440)
array.push(css55, #98D542)
array.push(css55, #95D643)
array.push(css55, #93D644)
array.push(css55, #91D746)
array.push(css55, #8FD847)
array.push(css55, #8DD948)
array.push(css55, #8BDA4A)
array.push(css55, #89DB4B)
array.push(css55, #87DB4C)
array.push(css55, #85DC4E)
array.push(css55, #83DD4F)
array.push(css55, #81DE50)
array.push(css55, #7FDF52)
array.push(css55, #7CE053)
array.push(css55, #7AE054)
array.push(css55, #78E156)
array.push(css55, #76E257)
array.push(css55, #74E358)
array.push(css55, #72E45A)
array.push(css55, #70E55B)
array.push(css55, #6EE55C)
array.push(css55, #6CE65E)
array.push(css55, #6AE75F)
array.push(css55, #68E860)
array.push(css55, #66E962)
array.push(css55, #64EA63)
array.push(css55, #61EA64)
array.push(css55, #5FEB66)
array.push(css55, #5DEC67)
array.push(css55, #5BED68)
array.push(css55, #59EE6A)
array.push(css55, #57EF6B)
array.push(css55, #55EF6C)
array.push(css55, #53F06E)
array.push(css55, #51F16F)
array.push(css55, #4FF270)
array.push(css55, #4DF372)
array.push(css55, #4BF473)
array.push(css55, #48F474)
array.push(css55, #46F576)
array.push(css55, #44F677)
array.push(css55, #42F778)
array.push(css55, #40F87A)
array.push(css55, #3EF97B)
array.push(css55, #3CF97C)
array.push(css55, #3AFA7E)
array.push(css55, #38FB7F)
array.push(css55, #36FC80)
array.push(css55, #34FD82)
array.push(css55, #32FE83)
array.push(css55, #30FF85)
//----
filt(x) =>
sum = 0.
for i = 0 to length55 - 1 by 1
sum += x[i] * array.get(b55, i)
sum
sum / array.sum(b55)
//----
src55_filt = filt(src55)
dev = ta.sma(math.abs(src55 - src55_filt), length55) * mult556
upper55 = src55_filt + dev
lower55 = src55_filt - dev
//----
crosshigh = ta.cross(high, upper55)
crosslow = ta.cross(low, lower55)
os55 := crosshigh ? 1 : crosslow ? 0 : os55[1]
ext = os55 * upper55 + (1 - os55) * lower55
//----
os_css55 = ta.rsi(src55_filt, length55) / 100
ext_css55 = os55 == 1 ? #30FF85 : #ff1100
plot(src55_filt, 'MA', show ? na : array.get(css55, math.round(os_css55 * 199)), 2, editable=false)
plot(show_ext ? ext : na, 'Extremities', ta.change(os55) ? na : ext_css55, 2, editable=false)
//----
var float h55 = na
var float l55 = na
var float c55 = na
if show
h55 := filt(high)
l55 := filt(low)
c55 := filt(src55)
c55
ohlc_os = ta.rsi(c55, length55) / 100
ohlc_css55 = array.get(css55, math.round(ohlc_os * 199))
plotcandle(math.avg(c55[1], c55[2]), h55, l55, c55, 'Smooth Candles', show ? ohlc_css55 : na, show ? #434651 : na, bordercolor=na, editable=false)
stilden istediğinizi gizleyin...
Yer İmleri