OPEN-SOURCE SCRIPT
ATR + High/Lows

//version=6
indicator('ATR + Values', overlay = true)
// ========================
// === User Inputs ===
// ========================
showATR = input.bool(true, 'Show ATR/Move Table')
showHLR = input.bool(true, 'Show HL/R Table')
atrLength = input.int(14, 'ATR Period')
textColor = input.color(color.rgb(247, 242, 242), 'Default Text Color')
backgroundCol = input.color(color.rgb(0, 0, 0), 'Background Color')
rowOffset = input.int(0, 'Vertical Offset (rows)', minval = 0, maxval = 10)
colOffset = input.int(0, 'Horizontal Offset (columns)', minval = 0, maxval = 100)
var string tz = 'America/New_York'
// ========================
// === ATR / Move Logic ===
// ========================
dailyATRseries = request.security(syminfo.tickerid, 'D', ta.atr(atrLength), lookahead = barmerge.lookahead_off)
dailyATRprev = dailyATRseries[1]
newDayID = year(time, tz) * 10000 + month(time, tz) * 100 + dayofmonth(time, tz)
var int lastDayID = na
var float dayHigh = na
var float dayLow = na
var float fixedATR = na
isNewSession = na(lastDayID) or newDayID != lastDayID
after4am = hour(time, tz) >= 4
firstBarAfter4 = isNewSession and after4am and not(hour(time[1], tz) >= 4 and newDayID == year(time[1], tz) * 10000 + month(time[1], tz) * 100 + dayofmonth(time[1], tz))
if firstBarAfter4
dayHigh := high
dayLow := low
lastDayID := newDayID
fixedATR := dailyATRprev
else
dayHigh := math.max(dayHigh, high)
dayLow := math.min(dayLow, low)
intradayRange = dayHigh - dayLow
moveBg = intradayRange > fixedATR ? color.new(color.red, 77) : color.new(color.teal, 74)
// ========================
// === ATR + Move Table ===
// ========================
var table atrTable = table.new(position.top_right, 1, 2, border_width = 1, border_color = color.rgb(255, 255, 255))
if barstate.islast and showATR
table.clear(atrTable, 0, 0)
// Row 0: ATR Value
table.cell(atrTable, 0, 0, str.tostring(fixedATR, format.mintick),
bgcolor=color.rgb(0, 0, 0),
text_color=color.rgb(247, 242, 242),
text_halign=text.align_center)
// Row 1: Move Value (colored)
table.cell(atrTable, 0, 1, str.tostring(intradayRange, format.mintick),
bgcolor=moveBg,
text_color=color.rgb(247, 242, 242),
text_halign=text.align_center)
else
table.clear(atrTable, 0, 0)
// ========================
// === HL / Range Logic ===
// ========================
prevHigh = high[1]
prevLow = low[1]
currHigh = high
currLow = low
rangeHL = currHigh - currLow
rangeHL1 = prevHigh - prevLow
col1Text = str.tostring(rangeHL1, '0.00')
col2Text = str.tostring(prevHigh, '0.00') + '\n' + str.tostring(prevLow, '0.00')
col3Text = str.tostring(currHigh, '0.00') + '\n' + str.tostring(currLow, '0.00')
col4Text = str.tostring(rangeHL, '0.00')
prevColor = close[1] > open[1] ? color.rgb(64, 224, 208) : color.rgb(253, 143, 100)
currColor = close > open ? color.rgb(64, 224, 208) : color.rgb(253, 143, 100)
// ========================
// === HL / Range Table ===
// ========================
var table hlTable = table.new(position.top_center, 4 + colOffset, rowOffset + 1)
if barstate.islast and showHLR
for row = 0 to rowOffset by 1
for col = 0 to 3 + colOffset by 1
table.cell(hlTable, col, row, '', bgcolor = na)
row = rowOffset
colStart = colOffset
table.cell(hlTable, colStart + 0, row, col1Text, text_color = textColor, bgcolor = backgroundCol, text_halign = text.align_center, text_size = size.large)
table.cell(hlTable, colStart + 1, row, col2Text, text_color = prevColor, bgcolor = backgroundCol, text_halign = text.align_center, text_size = size.normal)
table.cell(hlTable, colStart + 2, row, col3Text, text_color = currColor, bgcolor = backgroundCol, text_halign = text.align_center, text_size = size.normal)
table.cell(hlTable, colStart + 3, row, col4Text, text_color = textColor, bgcolor = backgroundCol, text_halign = text.align_center, text_size = size.large)
else
table.clear(hlTable, 0, 0)
indicator('ATR + Values', overlay = true)
// ========================
// === User Inputs ===
// ========================
showATR = input.bool(true, 'Show ATR/Move Table')
showHLR = input.bool(true, 'Show HL/R Table')
atrLength = input.int(14, 'ATR Period')
textColor = input.color(color.rgb(247, 242, 242), 'Default Text Color')
backgroundCol = input.color(color.rgb(0, 0, 0), 'Background Color')
rowOffset = input.int(0, 'Vertical Offset (rows)', minval = 0, maxval = 10)
colOffset = input.int(0, 'Horizontal Offset (columns)', minval = 0, maxval = 100)
var string tz = 'America/New_York'
// ========================
// === ATR / Move Logic ===
// ========================
dailyATRseries = request.security(syminfo.tickerid, 'D', ta.atr(atrLength), lookahead = barmerge.lookahead_off)
dailyATRprev = dailyATRseries[1]
newDayID = year(time, tz) * 10000 + month(time, tz) * 100 + dayofmonth(time, tz)
var int lastDayID = na
var float dayHigh = na
var float dayLow = na
var float fixedATR = na
isNewSession = na(lastDayID) or newDayID != lastDayID
after4am = hour(time, tz) >= 4
firstBarAfter4 = isNewSession and after4am and not(hour(time[1], tz) >= 4 and newDayID == year(time[1], tz) * 10000 + month(time[1], tz) * 100 + dayofmonth(time[1], tz))
if firstBarAfter4
dayHigh := high
dayLow := low
lastDayID := newDayID
fixedATR := dailyATRprev
else
dayHigh := math.max(dayHigh, high)
dayLow := math.min(dayLow, low)
intradayRange = dayHigh - dayLow
moveBg = intradayRange > fixedATR ? color.new(color.red, 77) : color.new(color.teal, 74)
// ========================
// === ATR + Move Table ===
// ========================
var table atrTable = table.new(position.top_right, 1, 2, border_width = 1, border_color = color.rgb(255, 255, 255))
if barstate.islast and showATR
table.clear(atrTable, 0, 0)
// Row 0: ATR Value
table.cell(atrTable, 0, 0, str.tostring(fixedATR, format.mintick),
bgcolor=color.rgb(0, 0, 0),
text_color=color.rgb(247, 242, 242),
text_halign=text.align_center)
// Row 1: Move Value (colored)
table.cell(atrTable, 0, 1, str.tostring(intradayRange, format.mintick),
bgcolor=moveBg,
text_color=color.rgb(247, 242, 242),
text_halign=text.align_center)
else
table.clear(atrTable, 0, 0)
// ========================
// === HL / Range Logic ===
// ========================
prevHigh = high[1]
prevLow = low[1]
currHigh = high
currLow = low
rangeHL = currHigh - currLow
rangeHL1 = prevHigh - prevLow
col1Text = str.tostring(rangeHL1, '0.00')
col2Text = str.tostring(prevHigh, '0.00') + '\n' + str.tostring(prevLow, '0.00')
col3Text = str.tostring(currHigh, '0.00') + '\n' + str.tostring(currLow, '0.00')
col4Text = str.tostring(rangeHL, '0.00')
prevColor = close[1] > open[1] ? color.rgb(64, 224, 208) : color.rgb(253, 143, 100)
currColor = close > open ? color.rgb(64, 224, 208) : color.rgb(253, 143, 100)
// ========================
// === HL / Range Table ===
// ========================
var table hlTable = table.new(position.top_center, 4 + colOffset, rowOffset + 1)
if barstate.islast and showHLR
for row = 0 to rowOffset by 1
for col = 0 to 3 + colOffset by 1
table.cell(hlTable, col, row, '', bgcolor = na)
row = rowOffset
colStart = colOffset
table.cell(hlTable, colStart + 0, row, col1Text, text_color = textColor, bgcolor = backgroundCol, text_halign = text.align_center, text_size = size.large)
table.cell(hlTable, colStart + 1, row, col2Text, text_color = prevColor, bgcolor = backgroundCol, text_halign = text.align_center, text_size = size.normal)
table.cell(hlTable, colStart + 2, row, col3Text, text_color = currColor, bgcolor = backgroundCol, text_halign = text.align_center, text_size = size.normal)
table.cell(hlTable, colStart + 3, row, col4Text, text_color = textColor, bgcolor = backgroundCol, text_halign = text.align_center, text_size = size.large)
else
table.clear(hlTable, 0, 0)
Açık kaynak kodlu komut dosyası
Gerçek TradingView ruhuna uygun olarak, bu komut dosyasının oluşturucusu bunu açık kaynaklı hale getirmiştir, böylece yatırımcılar betiğin işlevselliğini inceleyip doğrulayabilir. Yazara saygı! Ücretsiz olarak kullanabilirsiniz, ancak kodu yeniden yayınlamanın Site Kurallarımıza tabi olduğunu unutmayın.
Feragatname
Bilgiler ve yayınlar, TradingView tarafından sağlanan veya onaylanan finansal, yatırım, işlem veya diğer türden tavsiye veya tavsiyeler anlamına gelmez ve teşkil etmez. Kullanım Şartları'nda daha fazlasını okuyun.
Açık kaynak kodlu komut dosyası
Gerçek TradingView ruhuna uygun olarak, bu komut dosyasının oluşturucusu bunu açık kaynaklı hale getirmiştir, böylece yatırımcılar betiğin işlevselliğini inceleyip doğrulayabilir. Yazara saygı! Ücretsiz olarak kullanabilirsiniz, ancak kodu yeniden yayınlamanın Site Kurallarımıza tabi olduğunu unutmayın.
Feragatname
Bilgiler ve yayınlar, TradingView tarafından sağlanan veya onaylanan finansal, yatırım, işlem veya diğer türden tavsiye veya tavsiyeler anlamına gelmez ve teşkil etmez. Kullanım Şartları'nda daha fazlasını okuyun.