OPEN-SOURCE SCRIPT
Midpoint Levels day/week/month/high/low /close

//version=5
indicator("Midpoint Levels + Previous Week Close", overlay=true)
// === Inputs for Day Midpoint ===
showDay = input.bool(true, "Show Day Midpoint")
dayColor = input.color(color.orange, "Day Midpoint Color")
dayWidth = input.int(1, "Day Line Thickness", minval=1, maxval=5)
dayStyleOpt = input.string("Solid", "Day Line Style", options=["Solid", "Dashed", "Dotted"])
dayStyle = dayStyleOpt == "Dashed" ? line.style_dashed : dayStyleOpt == "Dotted" ? line.style_dotted : line.style_solid
// === Inputs for Week Midpoint ===
showWeek = input.bool(true, "Show Week Midpoint")
weekColor = input.color(color.blue, "Week Midpoint Color")
weekWidth = input.int(1, "Week Line Thickness", minval=1, maxval=5)
weekStyleOpt = input.string("Solid", "Week Line Style", options=["Solid", "Dashed", "Dotted"])
weekStyle = weekStyleOpt == "Dashed" ? line.style_dashed : weekStyleOpt == "Dotted" ? line.style_dotted : line.style_solid
// === Inputs for Month Midpoint ===
showMonth = input.bool(true, "Show Month Midpoint")
monthColor = input.color(color.purple, "Month Midpoint Color")
monthWidth = input.int(1, "Month Line Thickness", minval=1, maxval=5)
monthStyleOpt = input.string("Solid", "Month Line Style", options=["Solid", "Dashed", "Dotted"])
monthStyle = monthStyleOpt == "Dashed" ? line.style_dashed : monthStyleOpt == "Dotted" ? line.style_dotted : line.style_solid
// === Inputs for Previous Week Close ===
showWeekClose = input.bool(true, "Show Previous Week Close")
prevWeekCloseColor = input.color(color.red, "Previous Week Close Color")
prevWeekCloseWidth = input.int(1, "Week Close Line Thickness", minval=1, maxval=5)
weekCloseStyleOpt = input.string("Solid", "Week Close Line Style", options=["Solid", "Dashed", "Dotted"])
weekCloseStyle = weekCloseStyleOpt == "Dashed" ? line.style_dashed : weekCloseStyleOpt == "Dotted" ? line.style_dotted : line.style_solid
// === Fetch Previous Highs, Lows, Closes
prevDayHigh = request.security(syminfo.tickerid, "D", high[1], lookahead=barmerge.lookahead_on)
prevDayLow = request.security(syminfo.tickerid, "D", low[1], lookahead=barmerge.lookahead_on)
prevWeekHigh = request.security(syminfo.tickerid, "W", high[1], lookahead=barmerge.lookahead_on)
prevWeekLow = request.security(syminfo.tickerid, "W", low[1], lookahead=barmerge.lookahead_on)
prevMonthHigh = request.security(syminfo.tickerid, "M", high[1], lookahead=barmerge.lookahead_on)
prevMonthLow = request.security(syminfo.tickerid, "M", low[1], lookahead=barmerge.lookahead_on)
prevWeekClose = request.security(syminfo.tickerid, "W", close[1], lookahead=barmerge.lookahead_on)
// === Calculate Midpoints
dayMid = (prevDayHigh + prevDayLow) / 2
weekMid = (prevWeekHigh + prevWeekLow) / 2
monthMid = (prevMonthHigh + prevMonthLow) / 2
// === Detect new time periods
newDay = ta.change(time("D"))
newWeek = ta.change(time("W"))
newMonth = ta.change(time("M"))
// === Line variables
var line dayLine = na
var line weekLine = na
var line monthLine = na
var line weekCloseLine = na
// === Create/Update Lines Conditionally
if newDay and showDay
if not na(dayLine)
line.delete(dayLine)
dayLine := line.new(bar_index, dayMid, bar_index + 1, dayMid,color=dayColor, width=dayWidth, style=dayStyle, extend=extend.right)
if newWeek
if not na(weekLine)
line.delete(weekLine)
if showWeek
weekLine := line.new(bar_index, weekMid, bar_index + 1, weekMid,color=weekColor, width=weekWidth, style=weekStyle, extend=extend.right)
if not na(weekCloseLine)
line.delete(weekCloseLine)
if showWeekClose
weekCloseLine := line.new(bar_index, prevWeekClose, bar_index + 1, prevWeekClose,color=prevWeekCloseColor, width=prevWeekCloseWidth, style=weekCloseStyle, extend=extend.right)
if newMonth and showMonth
if not na(monthLine)
line.delete(monthLine)
monthLine := line.new(bar_index, monthMid, bar_index + 1, monthMid,color=monthColor, width=monthWidth, style=monthStyle, extend=extend.right)
// okkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk
// === Inputs: Previous Day High/Low/Close
showPrevHigh = input.bool(true, "Show Previous Day High")
prevHighColor = input.color(color.green, "Prev Day High Color")
prevHighWidth = input.int(1, "Prev Day High Thickness", minval=1, maxval=5)
prevHighStyleOpt = input.string("Solid", "Prev Day High Style", options=["Solid", "Dashed", "Dotted"])
prevHighStyle = prevHighStyleOpt == "Dashed" ? line.style_dashed : prevHighStyleOpt == "Dotted" ? line.style_dotted : line.style_solid
showPrevLow = input.bool(true, "Show Previous Day Low")
prevLowColor = input.color(color.maroon, "Prev Day Low Color")
prevLowWidth = input.int(1, "Prev Day Low Thickness", minval=1, maxval=5)
prevLowStyleOpt = input.string("Solid", "Prev Day Low Style", options=["Solid", "Dashed", "Dotted"])
prevLowStyle = prevLowStyleOpt == "Dashed" ? line.style_dashed : prevLowStyleOpt == "Dotted" ? line.style_dotted : line.style_solid
showPrevClose = input.bool(true, "Show Previous Day Close")
prevCloseColor = input.color(color.navy, "Prev Day Close Color")
prevCloseWidth = input.int(1, "Prev Day Close Thickness", minval=1, maxval=5)
prevCloseStyleOpt = input.string("Solid", "Prev Day Close Style", options=["Solid", "Dashed", "Dotted"])
prevCloseStyle = prevCloseStyleOpt == "Dashed" ? line.style_dashed : prevCloseStyleOpt == "Dotted" ? line.style_dotted : line.style_solid
prevDayClose = request.security(syminfo.tickerid, "D", close[1], lookahead=barmerge.lookahead_on)
var line prevHighLine = na
var line prevLowLine = na
var line prevCloseLine = na
// === Previous Day High
if not na(prevHighLine)
line.delete(prevHighLine)
if showPrevHigh
prevHighLine := line.new(bar_index, prevDayHigh, bar_index + 1, prevDayHigh, color=prevHighColor, width=prevHighWidth, style=prevHighStyle, extend=extend.right)
// === Previous Day Low
if not na(prevLowLine)
line.delete(prevLowLine)
if showPrevLow
prevLowLine := line.new(bar_index, prevDayLow, bar_index + 1, prevDayLow,color=prevLowColor, width=prevLowWidth, style=prevLowStyle, extend=extend.right)
// === Previous Day Close
if not na(prevCloseLine)
line.delete(prevCloseLine)
if showPrevClose
prevCloseLine := line.new(bar_index, prevDayClose, bar_index + 1, prevDayClose, color=prevCloseColor, width=prevCloseWidth, style=prevCloseStyle, extend=extend.right)
indicator("Midpoint Levels + Previous Week Close", overlay=true)
// === Inputs for Day Midpoint ===
showDay = input.bool(true, "Show Day Midpoint")
dayColor = input.color(color.orange, "Day Midpoint Color")
dayWidth = input.int(1, "Day Line Thickness", minval=1, maxval=5)
dayStyleOpt = input.string("Solid", "Day Line Style", options=["Solid", "Dashed", "Dotted"])
dayStyle = dayStyleOpt == "Dashed" ? line.style_dashed : dayStyleOpt == "Dotted" ? line.style_dotted : line.style_solid
// === Inputs for Week Midpoint ===
showWeek = input.bool(true, "Show Week Midpoint")
weekColor = input.color(color.blue, "Week Midpoint Color")
weekWidth = input.int(1, "Week Line Thickness", minval=1, maxval=5)
weekStyleOpt = input.string("Solid", "Week Line Style", options=["Solid", "Dashed", "Dotted"])
weekStyle = weekStyleOpt == "Dashed" ? line.style_dashed : weekStyleOpt == "Dotted" ? line.style_dotted : line.style_solid
// === Inputs for Month Midpoint ===
showMonth = input.bool(true, "Show Month Midpoint")
monthColor = input.color(color.purple, "Month Midpoint Color")
monthWidth = input.int(1, "Month Line Thickness", minval=1, maxval=5)
monthStyleOpt = input.string("Solid", "Month Line Style", options=["Solid", "Dashed", "Dotted"])
monthStyle = monthStyleOpt == "Dashed" ? line.style_dashed : monthStyleOpt == "Dotted" ? line.style_dotted : line.style_solid
// === Inputs for Previous Week Close ===
showWeekClose = input.bool(true, "Show Previous Week Close")
prevWeekCloseColor = input.color(color.red, "Previous Week Close Color")
prevWeekCloseWidth = input.int(1, "Week Close Line Thickness", minval=1, maxval=5)
weekCloseStyleOpt = input.string("Solid", "Week Close Line Style", options=["Solid", "Dashed", "Dotted"])
weekCloseStyle = weekCloseStyleOpt == "Dashed" ? line.style_dashed : weekCloseStyleOpt == "Dotted" ? line.style_dotted : line.style_solid
// === Fetch Previous Highs, Lows, Closes
prevDayHigh = request.security(syminfo.tickerid, "D", high[1], lookahead=barmerge.lookahead_on)
prevDayLow = request.security(syminfo.tickerid, "D", low[1], lookahead=barmerge.lookahead_on)
prevWeekHigh = request.security(syminfo.tickerid, "W", high[1], lookahead=barmerge.lookahead_on)
prevWeekLow = request.security(syminfo.tickerid, "W", low[1], lookahead=barmerge.lookahead_on)
prevMonthHigh = request.security(syminfo.tickerid, "M", high[1], lookahead=barmerge.lookahead_on)
prevMonthLow = request.security(syminfo.tickerid, "M", low[1], lookahead=barmerge.lookahead_on)
prevWeekClose = request.security(syminfo.tickerid, "W", close[1], lookahead=barmerge.lookahead_on)
// === Calculate Midpoints
dayMid = (prevDayHigh + prevDayLow) / 2
weekMid = (prevWeekHigh + prevWeekLow) / 2
monthMid = (prevMonthHigh + prevMonthLow) / 2
// === Detect new time periods
newDay = ta.change(time("D"))
newWeek = ta.change(time("W"))
newMonth = ta.change(time("M"))
// === Line variables
var line dayLine = na
var line weekLine = na
var line monthLine = na
var line weekCloseLine = na
// === Create/Update Lines Conditionally
if newDay and showDay
if not na(dayLine)
line.delete(dayLine)
dayLine := line.new(bar_index, dayMid, bar_index + 1, dayMid,color=dayColor, width=dayWidth, style=dayStyle, extend=extend.right)
if newWeek
if not na(weekLine)
line.delete(weekLine)
if showWeek
weekLine := line.new(bar_index, weekMid, bar_index + 1, weekMid,color=weekColor, width=weekWidth, style=weekStyle, extend=extend.right)
if not na(weekCloseLine)
line.delete(weekCloseLine)
if showWeekClose
weekCloseLine := line.new(bar_index, prevWeekClose, bar_index + 1, prevWeekClose,color=prevWeekCloseColor, width=prevWeekCloseWidth, style=weekCloseStyle, extend=extend.right)
if newMonth and showMonth
if not na(monthLine)
line.delete(monthLine)
monthLine := line.new(bar_index, monthMid, bar_index + 1, monthMid,color=monthColor, width=monthWidth, style=monthStyle, extend=extend.right)
// okkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk
// === Inputs: Previous Day High/Low/Close
showPrevHigh = input.bool(true, "Show Previous Day High")
prevHighColor = input.color(color.green, "Prev Day High Color")
prevHighWidth = input.int(1, "Prev Day High Thickness", minval=1, maxval=5)
prevHighStyleOpt = input.string("Solid", "Prev Day High Style", options=["Solid", "Dashed", "Dotted"])
prevHighStyle = prevHighStyleOpt == "Dashed" ? line.style_dashed : prevHighStyleOpt == "Dotted" ? line.style_dotted : line.style_solid
showPrevLow = input.bool(true, "Show Previous Day Low")
prevLowColor = input.color(color.maroon, "Prev Day Low Color")
prevLowWidth = input.int(1, "Prev Day Low Thickness", minval=1, maxval=5)
prevLowStyleOpt = input.string("Solid", "Prev Day Low Style", options=["Solid", "Dashed", "Dotted"])
prevLowStyle = prevLowStyleOpt == "Dashed" ? line.style_dashed : prevLowStyleOpt == "Dotted" ? line.style_dotted : line.style_solid
showPrevClose = input.bool(true, "Show Previous Day Close")
prevCloseColor = input.color(color.navy, "Prev Day Close Color")
prevCloseWidth = input.int(1, "Prev Day Close Thickness", minval=1, maxval=5)
prevCloseStyleOpt = input.string("Solid", "Prev Day Close Style", options=["Solid", "Dashed", "Dotted"])
prevCloseStyle = prevCloseStyleOpt == "Dashed" ? line.style_dashed : prevCloseStyleOpt == "Dotted" ? line.style_dotted : line.style_solid
prevDayClose = request.security(syminfo.tickerid, "D", close[1], lookahead=barmerge.lookahead_on)
var line prevHighLine = na
var line prevLowLine = na
var line prevCloseLine = na
// === Previous Day High
if not na(prevHighLine)
line.delete(prevHighLine)
if showPrevHigh
prevHighLine := line.new(bar_index, prevDayHigh, bar_index + 1, prevDayHigh, color=prevHighColor, width=prevHighWidth, style=prevHighStyle, extend=extend.right)
// === Previous Day Low
if not na(prevLowLine)
line.delete(prevLowLine)
if showPrevLow
prevLowLine := line.new(bar_index, prevDayLow, bar_index + 1, prevDayLow,color=prevLowColor, width=prevLowWidth, style=prevLowStyle, extend=extend.right)
// === Previous Day Close
if not na(prevCloseLine)
line.delete(prevCloseLine)
if showPrevClose
prevCloseLine := line.new(bar_index, prevDayClose, bar_index + 1, prevDayClose, color=prevCloseColor, width=prevCloseWidth, style=prevCloseStyle, extend=extend.right)
Skrip open-source
Dengan semangat TradingView yang sesungguhnya, penulis skrip ini telah menjadikannya sumber terbuka, sehingga para trader dapat meninjau dan memverifikasi fungsinya. Hormat untuk penulisnya! Meskipun anda dapat menggunakannya secara gratis, ingatlah bahwa penerbitan ulang kode tersebut tunduk pada Tata Tertib kami.
Pernyataan Penyangkalan
Informasi dan publikasi tidak dimaksudkan untuk menjadi, dan bukan merupakan saran keuangan, investasi, perdagangan, atau rekomendasi lainnya yang diberikan atau didukung oleh TradingView. Baca selengkapnya di Persyaratan Penggunaan.
Skrip open-source
Dengan semangat TradingView yang sesungguhnya, penulis skrip ini telah menjadikannya sumber terbuka, sehingga para trader dapat meninjau dan memverifikasi fungsinya. Hormat untuk penulisnya! Meskipun anda dapat menggunakannya secara gratis, ingatlah bahwa penerbitan ulang kode tersebut tunduk pada Tata Tertib kami.
Pernyataan Penyangkalan
Informasi dan publikasi tidak dimaksudkan untuk menjadi, dan bukan merupakan saran keuangan, investasi, perdagangan, atau rekomendasi lainnya yang diberikan atau didukung oleh TradingView. Baca selengkapnya di Persyaratan Penggunaan.