Session Highs and Lows Indicator (SMC Sessions, DST-safe)

tc3oliver · study · 217 行 · 点赞 3,231 · TradingView 原页

本页源码来自 TradingView 公开发布的开源脚本,版权归原作者所有, 请遵循其原始许可(Pine 脚本常见 CC BY-NC-SA / MPL-2.0 / MIT)。 本项目仅用于研究检索与许可范围内的移植。

Pine Script

// 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)

← 返回列表