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)
סקריפט קוד פתוח
ברוח TradingView אמיתית, היוצר של הסקריפט הזה הפך אותו לקוד פתוח, כך שסוחרים יכולים לבדוק ולאמת את הפונקציונליות שלו. כל הכבוד למחבר! למרות שאתה יכול להשתמש בו בחינם, זכור שפרסום מחדש של הקוד כפוף לכללי הבית שלנו.
כתב ויתור
המידע והפרסומים אינם אמורים להיות, ואינם מהווים, עצות פיננסיות, השקעות, מסחר או סוגים אחרים של עצות או המלצות שסופקו או מאושרים על ידי TradingView. קרא עוד בתנאים וההגבלות.
סקריפט קוד פתוח
ברוח TradingView אמיתית, היוצר של הסקריפט הזה הפך אותו לקוד פתוח, כך שסוחרים יכולים לבדוק ולאמת את הפונקציונליות שלו. כל הכבוד למחבר! למרות שאתה יכול להשתמש בו בחינם, זכור שפרסום מחדש של הקוד כפוף לכללי הבית שלנו.
כתב ויתור
המידע והפרסומים אינם אמורים להיות, ואינם מהווים, עצות פיננסיות, השקעות, מסחר או סוגים אחרים של עצות או המלצות שסופקו או מאושרים על ידי TradingView. קרא עוד בתנאים וההגבלות.