Trading Sessions [BigBeluga]

BigBeluga · study · 166 行 · 点赞 3,325 · TradingView 原页

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

Pine Script

// This work is licensed under Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International  
// https://creativecommons.org/licenses/by-nc-sa/4.0/
// © BigBeluga
 
//@version=6
indicator("Trading Sessions [BigBeluga]", overlay=true, max_labels_count=500, max_boxes_count = 500, max_lines_count = 500)
 
groupd_     = "Sessions" + "  UTC+0"
tk          = "Tokyoㅤㅤ  " + "  Time:"
lo          = "Londonㅤ   " + "  Time:"
ny          = "New York    " + "  Time:"
si          = "Sidney         " + "  Time:"
 
// INPUTS ――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――{
display_mid_range = input.bool(true, "Middle Range", group = "Range")
extend            = input.bool(false, "Future Range", group = "Range")
 
show_tokyo          = input.bool(true, tk, inline = "Tokyo", group = groupd_)
tk_ss               = input.session("0000-0900", "", inline = "Tokyo", group = groupd_)
tokyo_color         = input.color(color.rgb(0, 137, 123), "", inline = "Tokyo", group = groupd_)
 
show_london         = input.bool(false, lo, inline = "London", group = groupd_)
lo_ss               = input.session("0700-1600", "", inline = "London", group = groupd_)
london_color        = input.color(#ff9900, "", inline = "London", group = groupd_)
 
show_ny             = input.bool(true, ny, inline = "NY", group = groupd_)
ny_ss               = input.session("1300-2200", "", inline = "NY", group = groupd_)
ny_color            = input.color(#ff5252, "", inline = "NY", group = groupd_)
 
show_si             = input.bool(false, si, inline = "Sidney", group = groupd_)
si_ss               = input.session("2100-0600", "", inline = "Sidney", group = groupd_)
si_color            = input.color(#bd52ff, "", inline = "Sidney", group = groupd_)
// }
 
 
// CALCULATIONS――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――{
 
// Function to format session string from "HHMM-HHMM" to "HH:MM-HH:MM"
formatSessionString(sessionStr) =>
    // Extract start and end times
    startStr = str.substring(sessionStr, 0, 4)
    endStr   = str.substring(sessionStr, 5, 9)
    // Insert colons
    formattedStart = str.format("{0}:{1}", str.substring(startStr, 0, 2), str.substring(startStr, 2, 4))
    formattedEnd   = str.format("{0}:{1}", str.substring(endStr, 0, 2), str.substring(endStr, 2, 4))
    // Combine into final formatted string
    str.format("{0}-{1}", formattedStart, formattedEnd)
 
 
in_session(i_sess) =>
    t = time(timeframe.period, i_sess + ":23456", "UTC")
    time == t
 
session_dash(dash, row, session, range_)=>
    dash.cell(0,row, session, text_halign = text.align_left, text_color = chart.fg_color)
    dash.cell(1,row, formatSessionString(range_), text_color = chart.fg_color)
    dash.cell(2,row, in_session(range_) ? "✔" : "✖", text_color = in_session(range_) ? color.lime : color.red)
 
 
box_session(session, sessionss, display, color)=>
    sessions   = in_session(sessionss)
    var boxx = box(na)
    var mid = line(na)
 
    // New: extended midline across session gap
    var line ext_mid = na
    var line ext_h = na
    var line ext_l = na
 
    var labl = label(na)
 
    var highh = array.new<float>()
    var loww = array.new<float>()
    var vol = array.new<float>()
    var delta = array.new<float>()
 
 
    // When session changes (start of new session)
    if sessions and not sessions[1]
 
        // Clear arrays for new session
        highh.clear()
        loww.clear()
        vol.clear()
        delta.clear()
 
        // New box and midline
        boxx := box.new(bar_index, na, na, na
                         , bgcolor = color.new(color, 90)
                         , border_color = color.new(color, 50)
                         )
 
        if display_mid_range
            mid := line.new(bar_index, na, na, na, color = color.new(color, 30))
        
        labl := label.new(bar_index, na
                         , style = label.style_label_upper_left
                         , color = color(na)
                         , textcolor = chart.fg_color
                         , size = size.small
                         , textalign = text.align_left
                         )
 
 
    // During session, update everything
    if display and sessions  
   
        highh.push(high)
        loww.push(low)
        vol.push(volume)
        delta.push(close > open ? volume : -volume)
 
        h = array.max(highh)
        l = array.min(loww)
 
        boxx.set_right(bar_index+1)
        boxx.set_top(h)
        boxx.set_bottom(l)
 
        mid_y = (h + l) / 2
        data = session + ": " + formatSessionString(sessionss) + "\n\n" + "Volume:  " + str.tostring(array.sum(vol), format.volume) + "\n" + "Delta:     " + str.tostring(array.sum(delta), format.volume)
 
        if display_mid_range
            mid.set_x2(bar_index+1)
            mid.set_y1(mid_y)
            mid.set_y2(mid_y)
 
        labl.set_y(l)
        labl.set_text(data)
 
 
    if extend  
        if not sessions and sessions[1] 
            h = array.max(highh)
            l = array.min(loww)
 
            mid_y = (h + l) / 2
            ext_mid := line.new(bar_index, mid_y, bar_index, mid_y, style=line.style_dashed, color=color.new(color, 30))
            ext_h := line.new(bar_index, h, bar_index, h, style=line.style_dashed, color=color.new(color, 30))
            ext_l := line.new(bar_index, l, bar_index, l, style=line.style_dashed, color=color.new(color, 30))
 
        if not sessions
            ext_mid.set_x2(bar_index)
            ext_h.set_x2(bar_index)
            ext_l.set_x2(bar_index)
// }
 
 
// PLOT ――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――{
box_session("Tokyo", tk_ss, show_tokyo, tokyo_color)
box_session("London", lo_ss, show_london, london_color)
box_session("New York", ny_ss, show_ny, ny_color)
box_session("Sidney", si_ss, show_si, si_color)
 
if barstate.islast
    dash = table.new(position.top_right, 10, 10, bgcolor = color.new(chart.fg_color, 90), border_color = chart.bg_color, border_width = 3)
 
    dash.cell(0, 0, "Session", text_halign = text.align_left, text_color = chart.fg_color)
    dash.cell(1, 0, "Time", text_color = chart.fg_color)
    dash.cell(2, 0, "Now", text_color = chart.fg_color)
       
    session_dash(dash, 1, "Tokyo", tk_ss)
    session_dash(dash, 2, "London", lo_ss)
    session_dash(dash, 3, "New York", ny_ss)
    session_dash(dash, 4, "Sidney", si_ss)
// }

← 返回列表