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)
Script de código abierto
Siguiendo fielmente el espíritu de TradingView, el creador de este script lo ha publicado en código abierto, permitiendo que otros traders puedan revisar y verificar su funcionalidad. ¡Enhorabuena al autor! Puede utilizarlo de forma gratuita, pero tenga en cuenta que la publicación de este código está sujeta a nuestras Normas internas.
Exención de responsabilidad
La información y las publicaciones que ofrecemos, no implican ni constituyen un asesoramiento financiero, ni de inversión, trading o cualquier otro tipo de consejo o recomendación emitida o respaldada por TradingView. Puede obtener información adicional en las Condiciones de uso.
Script de código abierto
Siguiendo fielmente el espíritu de TradingView, el creador de este script lo ha publicado en código abierto, permitiendo que otros traders puedan revisar y verificar su funcionalidad. ¡Enhorabuena al autor! Puede utilizarlo de forma gratuita, pero tenga en cuenta que la publicación de este código está sujeta a nuestras Normas internas.
Exención de responsabilidad
La información y las publicaciones que ofrecemos, no implican ni constituyen un asesoramiento financiero, ni de inversión, trading o cualquier otro tipo de consejo o recomendación emitida o respaldada por TradingView. Puede obtener información adicional en las Condiciones de uso.