Attachments forums

List of attachments posted on this forum.


All files on forums: 153613

Re: Already Converted TradingView Indicators to MT4 Indicators

gigamer2, Sat Aug 17, 2024 7:06 pm

Hi everyone ๐Ÿ’•
Is it possible to make an MT4 version of this indicator:
https://www.tradingview.com/v/Uz2AJ0i4/

I think for reversal trading's it filters a lot of bad trades.
It is called support and resistance high volume boxes.

Pine script code:

Code: Select all

// This Pine Scriptโ„ข code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// ยฉ ChartPrime

//@version=5
indicator("Support and Resistance (High Volume Boxes) [ChartPrime]", shorttitle = "SR Breaks and Retests [ChartPrime]", overlay=true, max_boxes_count = 50)


// ---------------------------------------------------------------------------------------------------------------------}
// ๐™๐™Ž๐™€๐™ ๐™„๐™‰๐™‹๐™๐™๐™Ž
// ---------------------------------------------------------------------------------------------------------------------{
int   lookbackPeriod = input.int(20, "Lookback Period", minval=1, group = "Settings")
int   vol_len        = input.int(2, "Delta Volume Filter Length", tooltip = "Higher input, will filter low volume boxes"
                                                                                                   , group = "Settings")
float box_withd      = input.float(1, "Adjust Box Width", maxval = 1000, minval = 0, step = 0.1)


// ---------------------------------------------------------------------------------------------------------------------}
// ๐™„๐™‰๐˜ฟ๐™„๐˜พ๐˜ผ๐™๐™Š๐™ ๐˜พ๐˜ผ๐™‡๐˜พ๐™๐™‡๐˜ผ๐™๐™„๐™Š๐™‰๐™Ž
// ---------------------------------------------------------------------------------------------------------------------{
// Delta Volume Function
upAndDownVolume() =>
    posVol = 0.0
    negVol = 0.0
    
    var isBuyVolume = true    

    switch
        close > open   => isBuyVolume := true
        close < open   => isBuyVolume := false

    if isBuyVolume
        posVol += volume
    else
        negVol -= volume

    posVol + negVol


// Function to identify support and resistance boxes
calcSupportResistance(src, lookbackPeriod) =>
    // Volume
    Vol    = upAndDownVolume()
    vol_hi = ta.highest(Vol/2.5, vol_len)
    vol_lo = ta.lowest(Vol/2.5, vol_len)

    var float supportLevel      = na
    var float supportLevel_1    = na    
    var float resistanceLevel   = na
    var float resistanceLevel_1 = na    
    var box   sup               = na
    var box   res               = na
    var color res_color         = na
    var color sup_color         = na    
    var float multi             = na

    var bool  brekout_res       = na
    var bool  brekout_sup       = na
    var bool  res_holds         = na
    var bool  sup_holds         = na

    // Find pivot points
    pivotHigh = ta.pivothigh(src, lookbackPeriod, lookbackPeriod)
    pivotLow  = ta.pivotlow (src, lookbackPeriod, lookbackPeriod)
    // Box width
    atr       = ta.atr(200)
    withd     = atr * box_withd

    // Find support levels with Positive Volume
    if (not na(pivotLow)) and Vol > vol_hi 

        supportLevel   := pivotLow
        supportLevel_1 := supportLevel-withd       

        topLeft         = chart.point.from_index(bar_index-lookbackPeriod, supportLevel)
        bottomRight     = chart.point.from_index(bar_index, supportLevel_1)

        sup_color      := color.from_gradient(Vol, 0, ta.highest(Vol, 25), color(na), color.new(color.green, 30))

        sup := box.new(
                       top_left     = topLeft, 
                       bottom_right = bottomRight, 
                       border_color = color.green, 
                       border_width = 1, 
                       bgcolor      = sup_color, 
                       text         = "Vol: "+str.tostring(math.round(Vol,2)), 
                       text_color   = chart.fg_color, 
                       text_size    = size.small
                       ) 


    // Find resistance levels with Negative Volume
    if (not na(pivotHigh)) and Vol < vol_lo
   
        resistanceLevel   := pivotHigh
        resistanceLevel_1 := resistanceLevel+withd

        topLeft            = chart.point.from_index(bar_index-lookbackPeriod, resistanceLevel)
        bottomRight        = chart.point.from_index(bar_index, resistanceLevel_1)

        res_color         := color.from_gradient(Vol, ta.lowest(Vol, 25), 0, color.new(color.red, 30), color(na))

        res := box.new(
                       top_left     = topLeft, 
                       bottom_right = bottomRight, 
                       border_color = color.red, 
                       border_width = 1, 
                       bgcolor      = res_color, 
                       text         = "Vol: "+str.tostring(math.round(Vol,2)), 
                       text_color   = chart.fg_color, 
                       text_size    = size.small
                       ) 

    // Adaptive Box Len
    sup.set_right(bar_index+1)
    res.set_right(bar_index+1)

    // Break of support or resistance conditions
    brekout_res := ta.crossover(low, resistanceLevel_1)
    res_holds   := ta.crossunder(high, resistanceLevel)

    sup_holds   := ta.crossover(low, supportLevel)
    brekout_sup := ta.crossunder(high, supportLevel_1)

    // Change Color of Support to red if it was break, change color of resistance to green if it was break
    if brekout_sup
        sup.set_bgcolor(color.new(color.red, 80))
        sup.set_border_color(color.red)
        sup.set_border_style(line.style_dashed)

    if sup_holds
        sup.set_bgcolor(sup_color)
        sup.set_border_color(color.green)
        sup.set_border_style(line.style_solid)

    if brekout_res
        res.set_bgcolor(color.new(color.green, 80))
        res.set_border_color(color.new(color.green, 0))
        res.set_border_style(line.style_dashed)

    if res_holds
        res.set_bgcolor(res_color)
        res.set_border_color(color.new(color.red, 0))
        res.set_border_style(line.style_solid)

    [supportLevel, resistanceLevel, brekout_res, res_holds, sup_holds, brekout_sup]


// Calculate support and resistance levels and their breakouts
[supportLevel,
         resistanceLevel, 
             brekout_res, 
                 res_holds, 
                     sup_holds, 
                         brekout_sup] = calcSupportResistance(close, lookbackPeriod)


// Check if Resistance become Support or Support Become Resistance
var bool res_is_sup = na
var bool sup_is_res = na

switch
    brekout_res => res_is_sup := true
    res_holds   => res_is_sup := false

switch
    brekout_sup => sup_is_res := true
    sup_holds   => sup_is_res := false


// ---------------------------------------------------------------------------------------------------------------------}
// ๐™‘๐™„๐™Ž๐™๐˜ผ๐™‡๐™„๐™•๐˜ผ๐™๐™„๐™Š๐™‰
// ---------------------------------------------------------------------------------------------------------------------{
// Plot Res and Sup breakouts and holds 
plotchar(res_holds, "Resistance Holds", "โ—†", 
             color = #e92929,   size = size.tiny, location = location.abovebar, offset = -1)
plotchar(sup_holds, "Support Holds",    "โ—†", 
             color = #20ca26, size = size.tiny, location = location.belowbar, offset = -1)

plotchar(brekout_res and res_is_sup[1], "Resistance as Support Holds", "โ—†", 
             color = #20ca26, size = size.tiny, location = location.belowbar, offset = -1)
plotchar(brekout_sup and sup_is_res[1], "Support as Resistance Holds", "โ—†", 
             color = #e92929,   size = size.tiny, location = location.abovebar, offset = -1)

// Break Out Labels
if brekout_sup and not sup_is_res[1]
    label.new(
              bar_index[1], supportLevel[1], 
              text       = "Break Sup", 
              style      = label.style_label_down, 
              color      = #7e1e1e, 
              textcolor  = chart.fg_color, 
              size       = size.small
              )

if brekout_res and not res_is_sup[1]
    label.new(
              bar_index[1], resistanceLevel[1], 
              text       = "Break Res", 
              style      = label.style_label_up, 
              color      = #2b6d2d, 
              textcolor  = chart.fg_color, 
              size       = size.small
              )


// โ—†
// ---------------------------------------------------------------------------------------------------------------------}
All files in topic