本页源码来自 TradingView 公开发布的开源脚本,版权归原作者所有, 请遵循其原始许可(Pine 脚本常见 CC BY-NC-SA / MPL-2.0 / MIT)。 本项目仅用于研究检索与许可范围内的移植。
// TradingView Pine Script V5 Indicator to mark the latest important levels
// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © tc3oliver
//@version=5
indicator("Session Highs and Lows Indicator", overlay=true)
showLondon = input.bool(true, "Show London High/Low")
showNewYork = input.bool(true, "Show New York High/Low")
showAsia = input.bool(true, "Show Asia High/Low")
showNewYorkClose = input.bool(true, "Show New York Close High/Low")
// 定義交易時段(台灣時區)
inLondonSession = not na(time("", "1500-1700", "GMT+8"))
inNewYorkSession = not na(time("", "2000-2200", "GMT+8"))
inAsiaSession = not na(time("", "0700-0900", "GMT+8"))
inNewYorkCloseSession = not na(time("", "0300-0500", "GMT+8"))
// 定義各交易時段的起始與結束
isLondonSessionStart = inLondonSession and not inLondonSession[1]
isLondonSessionEnd = not inLondonSession and inLondonSession[1]
isNewYorkSessionStart = inNewYorkSession and not inNewYorkSession[1]
isNewYorkSessionEnd = not inNewYorkSession and inNewYorkSession[1]
isAsiaSessionStart = inAsiaSession and not inAsiaSession[1]
isAsiaSessionEnd = not inAsiaSession and inAsiaSession[1]
isNewYorkCloseSessionStart = inNewYorkCloseSession and not inNewYorkCloseSession[1]
isNewYorkCloseSessionEnd = not inNewYorkCloseSession and inNewYorkCloseSession[1]
// 初始化高低點變數(倫敦)
var float londonHigh = na
var float londonLow = na
var int londonHighBar = na
var int londonLowBar = na
var int londonHighStartBar = na
var int londonLowStartBar = na
// 初始化高低點變數(紐約)
var float newYorkHigh = na
var float newYorkLow = na
var int newYorkHighBar = na
var int newYorkLowBar = na
var int newYorkHighStartBar = na
var int newYorkLowStartBar = na
// 初始化高低點變數(亞洲)
var float asiaHigh = na
var float asiaLow = na
var int asiaHighBar = na
var int asiaLowBar = na
var int asiaHighStartBar = na
var int asiaLowStartBar = na
// 初始化高低點變數(紐約收盤)
var float newYorkCloseHigh = na
var float newYorkCloseLow = na
var int newYorkCloseHighBar = na
var int newYorkCloseLowBar = na
var int newYorkCloseHighStartBar = na
var int newYorkCloseLowStartBar = na
// 初始化標籤與線條
var label londonHighLabel = na
var label londonLowLabel = na
var line londonHighLine = na
var line londonLowLine = na
var label newYorkHighLabel = na
var label newYorkLowLabel = na
var line newYorkHighLine = na
var line newYorkLowLine = na
var label asiaHighLabel = na
var label asiaLowLabel = na
var line asiaHighLine = na
var line asiaLowLine = na
var label newYorkCloseHighLabel = na
var label newYorkCloseLowLabel = na
var line newYorkCloseHighLine = na
var line newYorkCloseLowLine = na
// 更新倫敦交易時段高低點
if isLondonSessionStart
londonHigh := high
londonLow := low
londonHighStartBar := bar_index
londonLowStartBar := bar_index
londonHighBar := bar_index
londonLowBar := bar_index
else if inLondonSession
if high > londonHigh
londonHigh := high
londonHighBar := bar_index
if low < londonLow
londonLow := low
londonLowBar := bar_index
else if isLondonSessionEnd and showLondon
if high > londonHigh
londonHigh := high
londonHighBar := bar_index
if low < londonLow
londonLow := low
londonLowBar := bar_index
label.delete(londonHighLabel)
label.delete(londonLowLabel)
line.delete(londonHighLine)
line.delete(londonLowLine)
londonHighLabel := label.new(londonHighBar, londonHigh, "London High", yloc=yloc.abovebar, color=#47abfd49, textcolor=color.white, style=label.style_label_down, size=size.small)
londonLowLabel := label.new(londonLowBar, londonLow, "London Low", yloc=yloc.belowbar, color=#47abfd49, textcolor=color.white, style=label.style_label_up, size=size.small)
londonHighLine := line.new(x1=londonHighStartBar, y1=londonHigh, x2=bar_index, y2=londonHigh, xloc=xloc.bar_index, extend=extend.right, color=#47abfd49, width=1, style=line.style_dashed)
londonLowLine := line.new(x1=londonLowStartBar, y1=londonLow, x2=bar_index, y2=londonLow, xloc=xloc.bar_index, extend=extend.right, color=#47abfd49, width=1, style=line.style_dashed)
// 更新紐約交易時段高低點
if isNewYorkSessionStart
newYorkHigh := high
newYorkLow := low
newYorkHighStartBar := bar_index
newYorkLowStartBar := bar_index
newYorkHighBar := bar_index
newYorkLowBar := bar_index
else if inNewYorkSession
if high > newYorkHigh
newYorkHigh := high
newYorkHighBar := bar_index
if low < newYorkLow
newYorkLow := low
newYorkLowBar := bar_index
else if isNewYorkSessionEnd and showNewYork
if high > newYorkHigh
newYorkHigh := high
newYorkHighBar := bar_index
if low < newYorkLow
newYorkLow := low
newYorkLowBar := bar_index
label.delete(newYorkHighLabel)
label.delete(newYorkLowLabel)
line.delete(newYorkHighLine)
line.delete(newYorkLowLine)
newYorkHighLabel := label.new(newYorkHighBar, newYorkHigh, "New York High", yloc=yloc.abovebar, color=#ff65654b, textcolor=color.white, style=label.style_label_down, size=size.small)
newYorkLowLabel := label.new(newYorkLowBar, newYorkLow, "New York Low", yloc=yloc.belowbar, color=#ff65654b, textcolor=color.white, style=label.style_label_up, size=size.small)
newYorkHighLine := line.new(x1=newYorkHighStartBar, y1=newYorkHigh, x2=bar_index, y2=newYorkHigh, xloc=xloc.bar_index, extend=extend.right, color=#ff65654b, width=1, style=line.style_dashed)
newYorkLowLine := line.new(x1=newYorkLowStartBar, y1=newYorkLow, x2=bar_index, y2=newYorkLow, xloc=xloc.bar_index, extend=extend.right, color=#ff65654b, width=1, style=line.style_dashed)
// 更新亞洲交易時段高低點
if isAsiaSessionStart
asiaHigh := high
asiaLow := low
asiaHighStartBar := bar_index
asiaLowStartBar := bar_index
asiaHighBar := bar_index
asiaLowBar := bar_index
else if inAsiaSession
if high > asiaHigh
asiaHigh := high
asiaHighBar := bar_index
if low < asiaLow
asiaLow := low
asiaLowBar := bar_index
else if isAsiaSessionEnd and showAsia
if high > asiaHigh
asiaHigh := high
asiaHighBar := bar_index
if low < asiaLow
asiaLow := low
asiaLowBar := bar_index
label.delete(asiaHighLabel)
label.delete(asiaLowLabel)
line.delete(asiaHighLine)
line.delete(asiaLowLine)
asiaHighLabel := label.new(asiaHighBar, asiaHigh, "Asia High", yloc=yloc.abovebar, color=#75ff7963, textcolor=color.white, style=label.style_label_down, size=size.small)
asiaLowLabel := label.new(asiaLowBar, asiaLow, "Asia Low", yloc=yloc.belowbar, color=#75ff7963, textcolor=color.white, style=label.style_label_up, size=size.small)
asiaHighLine := line.new(x1=asiaHighStartBar, y1=asiaHigh, x2=bar_index, y2=asiaHigh, xloc=xloc.bar_index, extend=extend.right, color=#75ff7963, width=1, style=line.style_dashed)
asiaLowLine := line.new(x1=asiaLowStartBar, y1=asiaLow, x2=bar_index, y2=asiaLow, xloc=xloc.bar_index, extend=extend.right, color=#75ff7963, width=1, style=line.style_dashed)
// 更新紐約收盤時段高低點
if isNewYorkCloseSessionStart
newYorkCloseHigh := high
newYorkCloseLow := low
newYorkCloseHighStartBar := bar_index
newYorkCloseLowStartBar := bar_index
newYorkCloseHighBar := bar_index
newYorkCloseLowBar := bar_index
else if inNewYorkCloseSession
if high > newYorkCloseHigh
newYorkCloseHigh := high
newYorkCloseHighBar := bar_index
if low < newYorkCloseLow
newYorkCloseLow := low
newYorkCloseLowBar := bar_index
else if isNewYorkCloseSessionEnd and showNewYorkClose
if high > newYorkCloseHigh
newYorkCloseHigh := high
newYorkCloseHighBar := bar_index
if low < newYorkCloseLow
newYorkCloseLow := low
newYorkCloseLowBar := bar_index
label.delete(newYorkCloseHighLabel)
label.delete(newYorkCloseLowLabel)
line.delete(newYorkCloseHighLine)
line.delete(newYorkCloseLowLine)
newYorkCloseHighLabel := label.new(newYorkCloseHighBar, newYorkCloseHigh, "NY Close High", yloc=yloc.abovebar, color=#ff9f43, textcolor=color.white, style=label.style_label_down, size=size.small)
newYorkCloseLowLabel := label.new(newYorkCloseLowBar, newYorkCloseLow, "NY Close Low", yloc=yloc.belowbar, color=#ff9f43, textcolor=color.white, style=label.style_label_up, size=size.small)
newYorkCloseHighLine := line.new(x1=newYorkCloseHighStartBar, y1=newYorkCloseHigh, x2=bar_index, y2=newYorkCloseHigh, xloc=xloc.bar_index, extend=extend.right, color=#ff9f43, width=1, style=line.style_dashed)
newYorkCloseLowLine := line.new(x1=newYorkCloseLowStartBar, y1=newYorkCloseLow, x2=bar_index, y2=newYorkCloseLow, xloc=xloc.bar_index, extend=extend.right, color=#ff9f43, width=1, style=line.style_dashed)