Créer un vwap débutant en ouverture de session

Viewing 3 posts - 1 through 3 (of 3 total)
  • Author
    Posts
  • #256756 quote
    Sofitech
    Participant
    Master

    Bonjour,

    j’aimerais savoir s’il est possible de créer un vwap débutant à l’ouverture du marché de Londres et à l’ouverture du marché US.


    Je copie le code de l’indicateur “Sessions” de Luxalgo. Dans celui-ci on peut modifier les heures des différentes sessions et faire appaître un vwap propre à chaque session.

    C’est ce VWAP que je chercher à réproduire sur mon graphique.



    Ci-dessous l’indiquer Sessions :


    // This work is licensed under a Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0) https://creativecommons.org/licenses/by-nc-sa/4.0/

    // © LuxAlgo


    //@version=5

    indicator(“Sessions [LuxAlgo]”, “LuxAlgo – Sessions”, overlay = true, max_bars_back = 500, max_lines_count = 500, max_boxes_count = 500, max_labels_count = 500)

    //——————————————————————————

    //Settings

    //—————————————————————————–{

    //Session A

    show_sesa = input(true, , inline = ‘sesa’, group = ‘Session A’)

    sesa_txt = input(‘New York’, , inline = ‘sesa’, group = ‘Session A’)

    sesa_ses = input.session(‘1300-2200’, , inline = ‘sesa’, group = ‘Session A’)

    sesa_css = input.color(#ff5d00, , inline = ‘sesa’, group = ‘Session A’)


    sesa_range = input(true, ‘Range’, inline = ‘sesa_overlays’, group = ‘Session A’)

    sesa_tl = input(false, ‘Trendline’, inline = ‘sesa_overlays’, group = ‘Session A’)

    sesa_avg = input(false, ‘Mean’, inline = ‘sesa_overlays’, group = ‘Session A’)

    sesa_vwap = input(false, ‘VWAP’, inline = ‘sesa_overlays’, group = ‘Session A’)

    sesa_maxmin = input(false, ‘Max/Min’, inline = ‘sesa_overlays’, group = ‘Session A’)


    //Session B

    show_sesb = input(true, , inline = ‘sesb’, group = ‘Session B’)

    sesb_txt = input(‘London’, , inline = ‘sesb’, group = ‘Session B’)

    sesb_ses = input.session(‘0700-1600’, , inline = ‘sesb’, group = ‘Session B’)

    sesb_css = input.color(#2157f3, , inline = ‘sesb’, group = ‘Session B’)


    sesb_range = input(true, ‘Range’, inline = ‘sesb_overlays’, group = ‘Session B’)

    sesb_tl = input(false, ‘Trendline’, inline = ‘sesb_overlays’, group = ‘Session B’)

    sesb_avg = input(false, ‘Mean’, inline = ‘sesb_overlays’, group = ‘Session B’)

    sesb_vwap = input(false, ‘VWAP’, inline = ‘sesb_overlays’, group = ‘Session B’)

    sesb_maxmin = input(false, ‘Max/Min’, inline = ‘sesb_overlays’, group = ‘Session B’)


    //Session C

    show_sesc = input(true, , inline = ‘sesc’, group = ‘Session C’)

    sesc_txt = input(‘Tokyo’, , inline = ‘sesc’, group = ‘Session C’)

    sesc_ses = input.session(‘0000-0900’, , inline = ‘sesc’, group = ‘Session C’)

    sesc_css = input.color(#e91e63, , inline = ‘sesc’, group = ‘Session C’)


    sesc_range = input(true, ‘Range’, inline = ‘sesc_overlays’, group = ‘Session C’)

    sesc_tl = input(false, ‘Trendline’, inline = ‘sesc_overlays’, group = ‘Session C’)

    sesc_avg = input(false, ‘Mean’, inline = ‘sesc_overlays’, group = ‘Session C’)

    sesc_vwap = input(false, ‘VWAP’, inline = ‘sesc_overlays’, group = ‘Session C’)

    sesc_maxmin = input(false, ‘Max/Min’, inline = ‘sesc_overlays’, group = ‘Session C’)


    //Session D

    show_sesd = input(true, , inline = ‘sesd’, group = ‘Session D’)

    sesd_txt = input(‘Sydney’, , inline = ‘sesd’, group = ‘Session D’)

    sesd_ses = input.session(‘2100-0600’, , inline = ‘sesd’, group = ‘Session D’)

    sesd_css = input.color(#ffeb3b, , inline = ‘sesd’, group = ‘Session D’)


    sesd_range = input(true, ‘Range’, inline = ‘sesd_overlays’, group = ‘Session D’)

    sesd_tl = input(false, ‘Trendline’, inline = ‘sesd_overlays’, group = ‘Session D’)

    sesd_avg = input(false, ‘Mean’, inline = ‘sesd_overlays’, group = ‘Session D’)

    sesd_vwap = input(false, ‘VWAP’, inline = ‘sesd_overlays’, group = ‘Session D’)

    sesd_maxmin = input(false, ‘Max/Min’, inline = ‘sesd_overlays’, group = ‘Session D’)


    //Timezones

    tz_incr = input.int(0, ‘UTC (+/-)’, group = ‘Timezone’)

    use_exchange = input(false, ‘Use Exchange Timezone’, group = ‘Timezone’)


    //Ranges Options

    bg_transp = input.float(90, ‘Range Area Transparency’, group = ‘Ranges Settings’)

    show_outline = input(true, ‘Range Outline’, group = ‘Ranges Settings’)

    show_txt = input(true, ‘Range Label’, group = ‘Ranges Settings’)


    //Dashboard

    show_dash = input(false, ‘Show Dashboard’, group   = ‘Dashboard’)

    advanced_dash = input(false, ‘Advanced Dashboard’, group = ‘Dashboard’)

    dash_loc = input.string(‘Top Right’, ‘Dashboard Location’, options = [‘Top Right’, ‘Bottom Right’, ‘Bottom Left’], group   = ‘Dashboard’)

    text_size = input.string(‘Small’, ‘Dashboard Size’, options = [‘Tiny’, ‘Small’, ‘Normal’], group   = ‘Dashboard’)


    //Divider

    show_ses_div = input(false, ‘Show Sessions Divider’, group = ‘Dividers’)

    show_day_div = input(true, ‘Show Daily Divider’, group = ‘Dividers’)


    //—————————————————————————–}

    //Functions

    //—————————————————————————–{

    n = bar_index


    //Get session average

    get_avg(session)=>

        var len = 1

        var float csma = na

        var float sma = na


        if session > session[1]

            len := 1

            csma := close

       

        if session and session == session[1]

            len += 1    

            csma += close

            sma := csma / len

       

        sma


    //Get trendline coordinates

    get_linreg(session)=>

        var len = 1

        var float cwma  = na

        var float csma  = na

        var float csma2 = na


        var float y1 = na

        var float y2 = na

        var float stdev = na

        var float r2    = na


        if session > session[1]

            len   := 1

            cwma  := close

            csma  := close

            csma2 := close * close

       

        if session and session == session[1]

            len   += 1    

            csma  += close

            csma2 += close * close

            cwma  += close * len


            sma = csma / len

            wma = cwma / (len * (len + 1) / 2)


            cov   = (wma sma) * (len+1)/2

            stdev := math.sqrt(csma2 / len sma * sma)

            r2    := cov / (stdev * (math.sqrt(len*len 1) / (2 * math.sqrt(3))))


            y1 := 4 * sma 3 * wma

            y2 := 3 * wma 2 * sma


        [y1 , y2, stdev, r2]


    //Session Vwap

    get_vwap(session) =>

        var float num = na

        var float den = na


        if session > session[1]

            num := close * volume

            den := volume

       

        else if session and session == session[1]

            num += close * volume

            den += volume

        else

            num := na


        [num, den]


    //Set line

    set_line(session, y1, y2, session_css)=>

        var line tl = na


        if session > session[1]

            tl := line.new(n, close, n, close, color = session_css)


        if session and session == session[1]

            line.set_y1(tl, y1)

            line.set_xy2(tl, n, y2)


    //Set session range

    get_range(session, session_name, session_css)=>

        var t = 0

        var max = high

        var min = low

        var box bx = na

        var label lbl = na

       

        if session > session[1]

            t := time

            max := high

            min := low


            bx := box.new(n, max, n, min

              , bgcolor = color.new(session_css, bg_transp)

              , border_color = show_outline ? session_css : na

              , border_style = line.style_dotted)


            if show_txt

                lbl := label.new(t, max, session_name

                  , xloc = xloc.bar_time

                  , textcolor = session_css

                  , style = label.style_label_down

                  , color = color.new(color.white, 100)

                  , size = size.tiny)


        if session and session == session[1]

            max := math.max(high, max)

            min := math.min(low, min)


            box.set_top(bx, max)

            box.set_rightbottom(bx, n, min)


            if show_txt

                label.set_xy(lbl, int(math.avg(t, time)), max)

       

        [session ? na : max, session ? na : min]


    //—————————————————————————–}

    //Sessions

    //—————————————————————————–{

    tf = timeframe.period


    var tz = use_exchange ? syminfo.timezone :

      str.format(‘UTC{0}{1}’, tz_incr >= 0 ? ‘+’ : ‘-‘, math.abs(tz_incr))


    is_sesa = math.sign(nz(time(tf, sesa_ses, tz)))

    is_sesb = math.sign(nz(time(tf, sesb_ses, tz)))

    is_sesc = math.sign(nz(time(tf, sesc_ses, tz)))

    is_sesd = math.sign(nz(time(tf, sesd_ses, tz)))


    //—————————————————————————–}

    //Dashboard

    //—————————————————————————–{

    var table_position = dash_loc == ‘Bottom Left’ ? position.bottom_left

      : dash_loc == ‘Top Right’ ? position.top_right

      : position.bottom_right


    var table_size = text_size == ‘Tiny’ ? size.tiny

      : text_size == ‘Small’ ? size.small

      : size.normal


    var tb = table.new(table_position, 5, 6

      , bgcolor = #1e222d

      , border_color = #373a46

      , border_width = 1

      , frame_color = #373a46

      , frame_width = 1)


    if barstate.isfirst and show_dash

        table.cell(tb, 0, 0, ‘LuxAlgo’, text_color = color.white, text_size = table_size)

        table.merge_cells(tb, 0, 0, 4, 0)


        table.cell(tb, 0, 2, sesa_txt, text_color = sesa_css, text_size = table_size)

        table.cell(tb, 0, 3, sesb_txt, text_color = sesb_css, text_size = table_size)

        table.cell(tb, 0, 4, sesc_txt, text_color = sesc_css, text_size = table_size)

        table.cell(tb, 0, 5, sesd_txt, text_color = sesd_css, text_size = table_size)


        if advanced_dash

            table.cell(tb, 0, 1, ‘Session’, text_color = color.white

              , text_size = table_size)

           

            table.cell(tb, 1, 1, ‘Status’, text_color = color.white

              , text_size = table_size)

           

            table.cell(tb, 2, 1, ‘Trend’, text_color = color.white

              , text_size = table_size)

           

            table.cell(tb, 3, 1, ‘Volume’, text_color = color.white

              , text_size = table_size)

           

            table.cell(tb, 4, 1, ‘σ’, text_color = color.white

              , text_size = table_size)


    if barstate.islast and show_dash

        table.cell(tb, 1, 2, is_sesa ? ‘Active’ : ‘Innactive’

          , bgcolor = is_sesa ? #089981 : #f23645

          , text_color = color.white

          , text_size = table_size)

       

        table.cell(tb, 1, 3, is_sesb ? ‘Active’ : ‘Innactive’

          , bgcolor = is_sesb ? #089981 : #f23645

          , text_color = color.white

          , text_size = table_size)

       

        table.cell(tb, 1, 4, is_sesc ? ‘Active’ : ‘Innactive’

          , bgcolor = is_sesc ? #089981 : #f23645

          , text_color = color.white

          , text_size = table_size)

       

        table.cell(tb, 1, 5, is_sesd ? ‘Active’ : ‘Innactive’

          , bgcolor = is_sesd ? #089981 : #f23645

          , text_color = color.white

          , text_size = table_size)


    //—————————————————————————–}

    //Overlays

    //—————————————————————————–{

    var float max_sesa = na

    var float min_sesa = na

    var float max_sesb = na

    var float min_sesb = na

    var float max_sesc = na

    var float min_sesc = na

    var float max_sesd = na

    var float min_sesd = na


    //Ranges

    if show_sesa and sesa_range

        [max, min] = get_range(is_sesa, sesa_txt, sesa_css)

        max_sesa := max

        min_sesa := min


    if show_sesb and sesb_range

        [max, min] = get_range(is_sesb, sesb_txt, sesb_css)

        max_sesb := max

        min_sesb := min


    if show_sesc and sesc_range

        [max, min] = get_range(is_sesc, sesc_txt, sesc_css)

        max_sesc := max

        min_sesc := min


    if show_sesd and sesd_range

        [max, min] = get_range(is_sesd, sesd_txt, sesd_css)

        max_sesd := max

        min_sesd := min


    //Trendlines

    if show_sesa and (sesa_tl or advanced_dash)

        [y1, y2, stdev, r2] = get_linreg(is_sesa)


        if advanced_dash

            table.cell(tb, 2, 2, str.tostring(r2, ‘#.##’)

              , bgcolor = r2 > 0 ? #089981 : #f23645

              , text_color = color.white

              , text_size = table_size)

           

            table.cell(tb, 4, 2, str.tostring(stdev, ‘#.####’)

              , text_color = color.white

              , text_size = table_size)

           

        if sesa_tl

            set_line(is_sesa, y1, y2, sesa_css)


    if show_sesb and (sesb_tl or advanced_dash)

        [y1, y2, stdev, r2] = get_linreg(is_sesb)

       

        if advanced_dash

            table.cell(tb, 2, 3, str.tostring(r2, ‘#.##’)

              , bgcolor = r2 > 0 ? #089981 : #f23645

              , text_color = color.white

              , text_size = table_size)


            table.cell(tb, 4, 3, str.tostring(stdev, ‘#.####’)

              , text_color = color.white

              , text_size = table_size)

           

        if sesb_tl

            set_line(is_sesb, y1, y2, sesb_css)


    if show_sesc and (sesc_tl or advanced_dash)

        [y1, y2, stdev, r2] = get_linreg(is_sesc)

       

        if advanced_dash

            table.cell(tb, 2, 4, str.tostring(r2, ‘#.##’)

              , bgcolor = r2 > 0 ? #089981 : #f23645

              , text_color = color.white

              , text_size = table_size)


            table.cell(tb, 4, 4, str.tostring(stdev, ‘#.####’)

              , text_color = color.white

              , text_size = table_size)

           

        if sesc_tl

            set_line(is_sesc, y1, y2, sesc_css)


    if show_sesd and (sesd_tl or advanced_dash)

        [y1, y2, stdev, r2] = get_linreg(is_sesd)

       

        if advanced_dash

            table.cell(tb, 2, 5, str.tostring(r2, ‘#.##’)

              , bgcolor = r2 > 0 ? #089981 : #f23645

              , text_color = color.white

              , text_size = table_size)

           

            table.cell(tb, 4, 5, str.tostring(stdev, ‘#.####’)

              , text_color = color.white

              , text_size = table_size)

           

        if sesd_tl

            set_line(is_sesd, y1, y2, sesd_css)


    //Mean

    if show_sesa and sesa_avg

        avg = get_avg(is_sesa)

        set_line(is_sesa, avg, avg, sesa_css)


    if show_sesb and sesb_avg

        avg = get_avg(is_sesb)

        set_line(is_sesb, avg, avg, sesb_css)


    if show_sesc and sesc_avg

        avg = get_avg(is_sesc)

        set_line(is_sesc, avg, avg, sesc_css)


    if show_sesd and sesd_avg

        avg = get_avg(is_sesd)

        set_line(is_sesd, avg, avg, sesd_css)


    //VWAP

    var float vwap_a = na

    var float vwap_b = na

    var float vwap_c = na

    var float vwap_d = na


    if show_sesa and (sesa_vwap or advanced_dash)

        [num, den] = get_vwap(is_sesa)


        if sesa_vwap

            vwap_a := num / den


        if advanced_dash

            table.cell(tb, 3, 2, str.tostring(den, format.volume)

              , text_color = color.white

              , text_size = table_size)


    if show_sesb and (sesb_vwap or advanced_dash)

        [num, den] = get_vwap(is_sesb)


        if sesb_vwap

            vwap_b := num / den


        if advanced_dash

            table.cell(tb, 3, 3, str.tostring(den, format.volume)

              , text_color = color.white

              , text_size = table_size)


    if show_sesc and (sesc_vwap or advanced_dash)

        [num, den] = get_vwap(is_sesc)


        if sesc_vwap

            vwap_c := num / den


        if advanced_dash

            table.cell(tb, 3, 4, str.tostring(den, format.volume)

              , text_color = color.white

              , text_size = table_size)


    if show_sesd and (sesd_vwap or advanced_dash)

        [num, den] = get_vwap(is_sesd)


        if sesd_vwap

            vwap_d := num / den


        if advanced_dash

            table.cell(tb, 3, 5, str.tostring(den, format.volume)

              , text_color = color.white

              , text_size = table_size)


    //—————————————————————————–}

    //Plots

    //—————————————————————————–{

    //Plot max/min

    plot(sesa_maxmin ? max_sesa : na, ‘Session A Maximum’, sesa_css, 1, plot.style_linebr)

    plot(sesa_maxmin ? min_sesa : na, ‘Session A Minimum’, sesa_css, 1, plot.style_linebr)


    plot(sesb_maxmin ? max_sesb : na, ‘Session B Maximum’, sesb_css, 1, plot.style_linebr)

    plot(sesb_maxmin ? min_sesb : na, ‘Session B Minimum’, sesb_css, 1, plot.style_linebr)


    plot(sesc_maxmin ? max_sesc : na, ‘Session C Maximum’, sesc_css, 1, plot.style_linebr)

    plot(sesc_maxmin ? min_sesc : na, ‘Session C Minimum’, sesc_css, 1, plot.style_linebr)


    plot(sesd_maxmin ? max_sesd : na, ‘Session D Maximum’, sesd_css, 1, plot.style_linebr)

    plot(sesd_maxmin ? min_sesd : na, ‘Session D Minimum’, sesd_css, 1, plot.style_linebr)


    //Plot vwaps

    plot(vwap_a, ‘Session A VWAP’, sesa_css, 1, plot.style_linebr)

    plot(vwap_b, ‘Session B VWAP’, sesb_css, 1, plot.style_linebr)

    plot(vwap_c, ‘Session C VWAP’, sesc_css, 1, plot.style_linebr)

    plot(vwap_d, ‘Session D VWAP’, sesd_css, 1, plot.style_linebr)


    //Plot Divider A

    plotshape(is_sesa and show_ses_div and show_sesa, “·”

      , shape.square

      , location.bottom

      , na

      , text = “.”

      , textcolor = sesa_css

      , size = size.tiny

      , display = display.all display.status_line

      , editable = false)


    plotshape(is_sesa != is_sesa[1] and show_ses_div and show_sesa, “NYE”

      , shape.labelup

      , location.bottom

      , na

      , text = “❚”

      , textcolor = sesa_css

      , size = size.tiny

      , display = display.all display.status_line

      , editable = false)


    //Plot Divider B

    plotshape(is_sesb and show_ses_div and show_sesb, “·”

      , shape.labelup

      , location.bottom

      , na

      , text = “.”

      , textcolor = sesb_css

      , size = size.tiny

      , display = display.all display.status_line

      , editable = false)


    plotshape(is_sesb != is_sesb[1] and show_ses_div and show_sesb, “LDN”

      , shape.labelup

      , location.bottom

      , na

      , text = “❚”

      , textcolor = sesb_css

      , size = size.tiny

      , display = display.all display.status_line

      , editable = false)


    //Plot Divider C

    plotshape(is_sesc and show_ses_div and show_sesc, “·”

      , shape.square

      , location.bottom

      , na

      , text = “.”

      , textcolor = sesc_css

      , size = size.tiny

      , display = display.all display.status_line

      , editable = false)


    plotshape(is_sesc != is_sesc[1] and show_ses_div and show_sesc, “TYO”

      , shape.labelup

      , location.bottom

      , na

      , text = “❚”

      , textcolor = sesc_css

      , size = size.tiny

      , display = display.all display.status_line

      , editable = false)


    //Plot Divider D

    plotshape(is_sesd and show_ses_div and show_sesd, “·”

      , shape.labelup

      , location.bottom

      , na

      , text = “.”

      , textcolor = sesd_css

      , size = size.tiny

      , display = display.all display.status_line

      , editable = false)


    plotshape(is_sesd != is_sesd[1] and show_ses_div and show_sesd, “SYD”

      , shape.labelup

      , location.bottom

      , na

      , text = “❚”

      , textcolor = sesd_css

      , size = size.tiny

      , display = display.all display.status_line

      , editable = false)


    //—————————————————————————–}

    //Plots daily dividers

    //—————————————————————————–{

    day = dayofweek


    if day != day[1] and show_day_div

        line.new(n, close + syminfo.mintick, n, close syminfo.mintick

          , color  = color.gray

          , extend = extend.both

          , style  = line.style_dashed)


    plotshape(day != day[1] and day == 1 and show_day_div, “Sunday”

      , shape.labeldown

      , location.top

      , na

      , text = “Sunday”

      , textcolor = color.gray

      , size = size.tiny

      , display = display.all display.status_line

      , editable = false)


    plotshape(day != day[1] and day == 2 and show_day_div, “Monday”

      , shape.labeldown

      , location.top

      , na

      , text = “Monday”

      , textcolor = color.gray

      , size = size.tiny

      , display = display.all display.status_line

      , editable = false)


    plotshape(day != day[1] and day == 3 and show_day_div, “Tuesday”

      , shape.labeldown

      , location.top

      , na

      , text = “Tuesday”

      , textcolor = color.gray

      , size = size.tiny

      , display = display.all display.status_line

      , editable = false)


    plotshape(day != day[1] and day == 4 and show_day_div, “Wednesay”

      , shape.labeldown

      , location.top

      , na

      , text = “Wednesday”

      , textcolor = color.gray

      , size = size.tiny

      , display = display.all display.status_line

      , editable = false)


    plotshape(day != day[1] and day == 5 and show_day_div, “Thursday”

      , shape.labeldown

      , location.top

      , na

      , text = “Thursday”

      , textcolor = color.gray

      , size = size.tiny

      , display = display.all display.status_line

      , editable = false)


    plotshape(day != day[1] and day == 6 and show_day_div, “Friday”

      , shape.labeldown

      , location.top

      , na

      , text = “Friday”

      , textcolor = color.gray

      , size = size.tiny

      , display = display.all display.status_line

      , editable = false)


    plotshape(day != day[1] and day == 7 and show_day_div, “Saturday”

      , shape.labeldown

      , location.top

      , na

      , text = “Saturday”

      , textcolor = color.gray

      , size = size.tiny

      , display = display.all display.status_line

      , editable = false)


    //—————————————————————————–}

    #256757 quote
    JC_Bywan
    Moderator
    Master

    Oui, c’est possible dans ProRealTime : il suffit de recalculer un VWAP “intraday” en réinitialisant les cumuls (prix*volume et volume) au début de chaque session (Londres et US), puis de tracer num/den.

    • Principe (pourquoi ça marche) : un VWAP = somme(PrixTypique * Volume) / somme(Volume). En remettant ces sommes à zéro au changement de session, on obtient un VWAP propre à la session.
    • Important : ProRealTime ne gère pas les timezones comme PineScript (pas de “time(session, timezone)” identique). On se base donc sur TIME du graphique (heure serveur/bourse selon votre flux). Adaptez les horaires si besoin.

    VWAP Session Londres + VWAP Session US (ProBuilder)

    DEFPARAM CalculateOnLastBars = 5000
    
    // --- Réglages horaires (format HHMMSS)
    LondonStart = 070000
    LondonEnd   = 160000
    
    USStart     = 133000
    USEnd       = 220000
    
    // --- Détection "dans la session" (session simple, ne traverse pas minuit)
    isLondon = (time >= LondonStart AND time <= LondonEnd)
    isUS     = (time >= USStart     AND time <= USEnd)
    
    // --- Détection de début de session (front montant)
    startLondon = isLondon AND NOT isLondon[1]
    startUS     = isUS     AND NOT isUS[1]
    
    // --- Prix utilisé pour le VWAP (typique)
    tp = (high + low + close) / 3
    
    // --- Cumuls Londres
    IF startLondon THEN
     numL = tp * volume
     denL = volume
    ELSIF isLondon THEN
     numL = numL[1] + tp * volume
     denL = denL[1] + volume
    ELSE
     numL = 0
     denL = 0
    ENDIF
    
    IF denL > 0 THEN
     vwapLondon = numL / denL
    ELSE
     vwapLondon = undefined
    ENDIF
    
    // --- Cumuls US
    IF startUS THEN
     numU = tp * volume
     denU = volume
    ELSIF isUS THEN
     numU = numU[1] + tp * volume
     denU = denU[1] + volume
    ELSE
     numU = 0
     denU = 0
    ENDIF
    
    IF denU > 0 THEN
     vwapUS = numU / denU
    ELSE
     vwapUS = undefined
    ENDIF
    
    // --- Tracés (style "line break" via undefined hors session)
    RETURN vwapLondon AS "VWAP London", vwapUS AS "VWAP US"
    
    • À modifier : LondonStart/LondonEnd et USStart/USEnd selon l’heure de votre graphique (serveur) et l’actif (CFD/Forex/Indices).
    • Affichage propre par session : le fait de renvoyer undefined hors session “coupe” la ligne, comme dans l’indicateur LuxAlgo.
    • Limitations : si vous définissez une session qui traverse minuit (ex: 2100–0600), il faut une condition différente (OR) et une détection de début adaptée.

    Note modération : test de réponse, contenu et format, via prompt IA

    robertogozzi thanked this post
    #256758 quote
    Sofitech
    Participant
    Master

    @JC_Bywan

    Merci beaucoup !

    Je souhaite utiliser cet indicateur pour regarder le Dax avec une ouverture à 9h00 heure de Paris, et le Dow à 15h30.

    Je ne garde une session active que 3 heures et je coupe.

    

Viewing 3 posts - 1 through 3 (of 3 total)
  • You must be logged in to reply to this topic.

Créer un vwap débutant en ouverture de session


ProBuilder : Indicateurs & Outils Personnalisés

New Reply
Author
author-avatar
Sofitech @sofitech Participant
Summary

This topic contains 2 replies,
has 2 voices, and was last updated by Sofitech
1 week, 4 days ago.

Topic Details
Forum: ProBuilder : Indicateurs & Outils Personnalisés
Language: French
Started: 01/23/2026
Status: Active
Attachments: No files
Logo Logo
Loading...