Master Pattern Indicator conversion

Forums ProRealTime English forum ProBuilder support Master Pattern Indicator conversion

Viewing 2 posts - 1 through 2 (of 2 total)
  • #252962
    yas

    Hi ivan

    is it possible if you can convert this code into PRT for me please i think this will be a good and complete edition of Master Pattern i think everyone will benefit if you can help Please

    here is the code

    //@version=5

    indicator(“Master Pattern Indicator”,overlay = true,max_boxes_count = 500, max_lines_count = 500, max_bars_back = 5000)

    Major_Box_Color = input.color(color.rgb(81, 55, 226),”Major Box Color”)
    show_minor_boxes = input.bool(false,”Show Minor Boxes”)
    Minor_Box_Color = input.color(color.rgb(163, 160, 160),”Minor Box Color”)
    Major_Expansion_Line_Color = input.color(color.rgb(238, 238, 238),”Major Expansion Line Color”)
    Major_Expansion_Line_Style = input.string(“Solid”,”Major Expansion Line Style”,[“Solid”,”Dotted”,”Dashed”])
    Major_Expansion_Line_Thickness = input.int(2,”Major Expansion Line Thickness”)
    show_minor_expansion = input.bool(true,”Show Minor Expansion Lines”)
    Minor_Expansion_Line_Color = input.color(color.rgb(241, 238, 239),”Minor Expansion Line Color”)
    Minor_Expansion_Line_Style = input.string(“Dashed”,”Minor Expansion Line Style”,[“Solid”,”Dotted”,”Dashed”])
    Minor_Expansion_Line_Thickness = input.int(1,”Minor Expansion Line Thickness”)
    Sell_Line_Color = input.color(color.red,”Sell Side Liquidity Line Color”)
    Sell_Line_Style = input.string(“Dotted”,”Sell Side Liquidity Line Style”,[“Solid”,”Dotted”,”Dashed”])
    Sell_Line_Thickness = input.int(1,”Sell Side Liquidity Line Thickness”)
    Buy_Line_Color = input.color(color.green,”Buy Side Liquidity Line Color”)
    Buy_Line_Style = input.string(“Dotted”,”Buy Side Liquidity Line Style”,[“Solid”,”Dotted”,”Dashed”])
    Buy_Line_Thickness = input.int(1,”Buy Side Liquidity Line Thickness”)
    max_bars = input.int(500,”Max Bars Back”)
    indi_type = input.int(1,”Type”)
    alert_major_line_confirm = input.bool(true,”Major Line Confirmation”,group = “Alerts”)
    alert_major_line_cross = input.bool(true,”Major Line Crossing”,group = “Alerts”)
    alert_liquidity_line_touch = input.bool(true,”Liquidity Line Touching”,group = “Alerts”)
    //n = input.int(title=”Fractals Periods”, defval=2, minval=2)
    repaint = true

    // // UpFractal
    // bool upflagDownFrontier = true
    // bool upflagUpFrontier0 = true
    // bool upflagUpFrontier1 = true
    // bool upflagUpFrontier2 = true
    // bool upflagUpFrontier3 = true
    // bool upflagUpFrontier4 = true

    // for i = 1 to n
    // upflagDownFrontier := upflagDownFrontier and (high[n-i] < high[n])
    // upflagUpFrontier0 := upflagUpFrontier0 and (high[n+i] < high[n])
    // upflagUpFrontier1 := upflagUpFrontier1 and (high[n+1] <= high[n] and high[n+i + 1] < high[n])
    // upflagUpFrontier2 := upflagUpFrontier2 and (high[n+1] <= high[n] and high[n+2] <= high[n] and high[n+i + 2] < high[n])
    // upflagUpFrontier3 := upflagUpFrontier3 and (high[n+1] <= high[n] and high[n+2] <= high[n] and high[n+3] <= high[n] and high[n+i + 3] < high[n])
    // upflagUpFrontier4 := upflagUpFrontier4 and (high[n+1] <= high[n] and high[n+2] <= high[n] and high[n+3] <= high[n] and high[n+4] <= high[n] and high[n+i + 4] < high[n])
    // flagUpFrontier = upflagUpFrontier0 or upflagUpFrontier1 or upflagUpFrontier2 or upflagUpFrontier3 or upflagUpFrontier4

    // upFractal = (upflagDownFrontier and flagUpFrontier)

    // // downFractal
    // bool downflagDownFrontier = true
    // bool downflagUpFrontier0 = true
    // bool downflagUpFrontier1 = true
    // bool downflagUpFrontier2 = true
    // bool downflagUpFrontier3 = true
    // bool downflagUpFrontier4 = true

    // for i = 1 to n
    // downflagDownFrontier := downflagDownFrontier and (low[n-i] > low[n])
    // downflagUpFrontier0 := downflagUpFrontier0 and (low[n+i] > low[n])
    // downflagUpFrontier1 := downflagUpFrontier1 and (low[n+1] >= low[n] and low[n+i + 1] > low[n])
    // downflagUpFrontier2 := downflagUpFrontier2 and (low[n+1] >= low[n] and low[n+2] >= low[n] and low[n+i + 2] > low[n])
    // downflagUpFrontier3 := downflagUpFrontier3 and (low[n+1] >= low[n] and low[n+2] >= low[n] and low[n+3] >= low[n] and low[n+i + 3] > low[n])
    // downflagUpFrontier4 := downflagUpFrontier4 and (low[n+1] >= low[n] and low[n+2] >= low[n] and low[n+3] >= low[n] and low[n+4] >= low[n] and low[n+i + 4] > low[n])
    // flagDownFrontier = downflagUpFrontier0 or downflagUpFrontier1 or downflagUpFrontier2 or downflagUpFrontier3 or downflagUpFrontier4

    // downFractal = (downflagDownFrontier and flagDownFrontier)

    // var zz = array.new_float()
    // var yy = array.new_int()

    // if upFractal
    // array.push(zz, high)
    // array.push(yy,bar_index)

    // if downFractal
    // array.push(zz, low)
    // array.push(yy,bar_index)

    var Depth = 3
    var Deviation = 1
    var Backstep = 1

    if(indi_type==2)
    Depth := 2

    var last_h = 1, last_h := last_h + 1
    var last_l = 1, last_l := last_l + 1
    var lw = 1, var hg = 1
    lw := lw + 1, hg := hg + 1
    p_lw = -ta.lowestbars(Depth), p_hg = -ta.highestbars(Depth)
    lowing = lw == p_lw or low – low[p_lw] > Deviation*syminfo.mintick
    highing = hg == p_hg or high[p_hg] – high > Deviation*syminfo.mintick
    lh = ta.barssince(not highing[1]), ll = ta.barssince(not lowing[1])
    down = ta.barssince(not (lh > ll)) >= Backstep, lower = low[lw] > low[p_lw], higher = high[hg] < high[p_hg]
    if lw != p_lw and (not down[1] or lower)
    lw := p_lw < hg ? p_lw : 0
    if hg != p_hg and (down[1] or higher)
    hg := p_hg < lw ? p_hg : 0

    var zz = array.new_float()
    var yy = array.new_int()
    x1 = down ? lw : hg
    y1 = down ? low[lw] : high[hg]

    if down == down[1]
    if repaint
    if(array.size(zz)>0)
    array.pop(zz)
    array.pop(yy)
    down
    if down != down[1]
    if down
    last_h := hg
    else
    last_l := lw
    if not repaint
    nx = down?last_h:last_l
    array.push(zz, (down ? low[last_l] : high[last_h]))
    array.push(yy,bar_index-(down?last_l:last_h))
    down
    if repaint
    array.push(zz, y1)
    array.push(yy,bar_index-x1)

    allowPlot()=>
    (last_bar_index-bar_index<=max_bars)

    checkTrigger()=>
    value1 = 0.0, value2 = 0.0, value3 = 0.0, value4 = 0.0, counter = 0, res = false, pos = 0
    if(array.size(zz)>=4 and array.size(yy)>=4)
    for x = array.size(zz)-1 to 0
    if(x<array.size(zz))
    price = array.get(zz,x)
    counter += 1
    if(counter == 1)
    value1 := price
    if(counter == 2)
    value2 := price
    pos := array.get(yy,x)
    if(counter == 3)
    value3 := price
    if(counter == 4)
    value4 := price
    break
    if((value1<value2 and value1>value3 and value4>value2) or
    (value1>value2 and value1<value3 and value4<value2))
    res := true
    [res, math.max(value1,value2), math.min(value1,value2), pos]

    var minorBoxes = array.new_box()
    var minorBoxNames = array.new_string()
    var minorCrossedHigh = array.new_bool()
    var minorCrossedLow = array.new_bool()
    var expansionLines = array.new_line()
    var minorExpansionLines = array.new_line()
    [RES,Val1,Val2,POS] = checkTrigger()
    if(RES and allowPlot())
    array.push(minorBoxes, box.new(time[bar_index-POS],Val1,time,Val2,xloc=xloc.bar_time,border_color=(show_minor_boxes?Minor_Box_Color:na),bgcolor=(show_minor_boxes?Minor_Box_Color:na)))
    array.push(minorBoxNames, “Active Box”)
    array.push(minorCrossedHigh, false), array.push(minorCrossedLow, false)

    updateExpansionLines(Time,Line,clear,checktimes)=>
    if(array.size(Line)>0)
    for x = 0 to array.size(Line)-1
    if(x < array.size(checktimes) and x < array.size(Line))
    if(Time>array.get(checktimes,x))
    line.set_x2(array.get(Line,x),Time)
    if(clear)
    array.remove(Line,x)

    var check = array.new_int()
    var checkMinor = array.new_int()

    updateExpansionLines(time,expansionLines,false,check)
    updateExpansionLines(time,minorExpansionLines,false,checkMinor)

    var majorBoxLines = array.new_line()
    var majorBoxLineType = array.new_int()
    var majorBoxLineRef = array.new_int()
    var Crossed = array.new_bool()

    getHighOffset(Time)=>
    x = 1, hi = high, res = 0
    while(time[x]>=Time)
    if(high[x]>hi)
    hi := high[x]
    res := x
    x += 1
    res

    getLowOffset(Time)=>
    x = 1, lo = low, res = 0
    while(time[x]>=Time)
    if(low[x]<lo)
    lo := low[x]
    res := x
    x += 1
    res

    checkCross(line_array, price)=>
    result = false
    Prices = price
    if array.size(line_array) > 0
    for x = 0 to array.size(line_array)-1
    Price = line.get_y1(array.get(line_array,x))
    if (Prices > Price and Prices[1] <= Price) or (Prices < Price and Prices[1] >= Price)
    result := true
    result

    operateMinorBox(price,hi_price,lo_price,Time)=>
    var lastMinorExp = 0
    confirm = false

    if(array.size(minorBoxes)>0 and array.size(minorCrossedHigh)>0 and array.size(minorCrossedLow)>0 and array.size(minorBoxNames)>0)
    x = array.size(minorBoxes)-1
    if array.get(minorBoxNames,x)!=”NULL”
    top = box.get_top(array.get(minorBoxes,x)), bottom = box.get_bottom(array.get(minorBoxes,x))
    time1 = box.get_left(array.get(minorBoxes,x))
    time2 = box.get_right(array.get(minorBoxes,x)), ppp = bottom+(top-bottom)/2
    origCrossedHigh = array.get(minorCrossedHigh,x)
    origCrossedLow = array.get(minorCrossedLow,x)
    if(not array.get(minorCrossedHigh,x) and not array.get(minorCrossedLow,x))
    if(not barstate.islast or barstate.isconfirmed)
    if(price>top)
    array.set(minorCrossedHigh,x,true)
    if(price<bottom)
    array.set(minorCrossedLow,x,true)
    else
    if(hi_price>top)
    array.set(minorCrossedHigh,x,true)
    if(lo_price<bottom)
    array.set(minorCrossedLow,x,true)
    if(array.get(minorCrossedHigh,x) and array.get(minorCrossedLow,x))
    box.set_bgcolor(array.get(minorBoxes,x),Major_Box_Color)
    array.set(minorBoxNames,x,”NULL”)
    updateExpansionLines(time2,expansionLines,true,check)
    confirm := true
    if(show_minor_expansion)
    updateExpansionLines(time2,minorExpansionLines,true,checkMinor)
    array.push(expansionLines,line.new(time2,ppp,time,ppp,xloc.bar_time,extend.none,Major_Expansion_Line_Color,
    (Major_Expansion_Line_Style==”Solid”?line.style_solid:Major_Expansion_Line_Style==”Dotted”?line.style_dotted:
    line.style_dashed),Major_Expansion_Line_Thickness))
    array.push(check,time2)
    hi_pos = getHighOffset(time2)
    lo_pos = getLowOffset(time2)
    if(not origCrossedHigh)
    rrr = low[lo_pos]
    array.push(majorBoxLines, line.new(time[lo_pos],rrr,Time,rrr,xloc.bar_time,extend.none,Buy_Line_Color,
    (Buy_Line_Style==”Solid”?line.style_solid:Buy_Line_Style==”Dotted”?line.style_dotted:line.style_dashed),
    Buy_Line_Thickness))
    array.push(majorBoxLineType,0)
    else if(not origCrossedLow)
    rrr = high[hi_pos]
    array.push(majorBoxLines, line.new(time[hi_pos],rrr,Time,rrr,xloc.bar_time,extend.none,Sell_Line_Color,
    (Sell_Line_Style==”Solid”?line.style_solid:Sell_Line_Style==”Dotted”?line.style_dotted:line.style_dashed),
    Sell_Line_Thickness))
    array.push(majorBoxLineType,1)
    array.push(majorBoxLineRef,time2)
    array.push(Crossed,false)
    true
    else if(not array.get(minorCrossedHigh,x) and not array.get(minorCrossedLow,x))
    box.set_right(array.get(minorBoxes,x),Time)
    true
    else if(show_minor_expansion and time1!=lastMinorExp)
    updateExpansionLines(time2,minorExpansionLines,true,checkMinor)
    array.push(minorExpansionLines, line.new(time2,ppp,time,ppp,xloc.bar_time,extend.none,Minor_Expansion_Line_Color,
    (Minor_Expansion_Line_Style==”Solid”?line.style_solid:Minor_Expansion_Line_Style==”Dotted”?line.style_dotted:
    line.style_dashed),Minor_Expansion_Line_Thickness))
    array.push(checkMinor,time2)
    lastMinorExp := time1
    true
    confirm

    operateLiquidity(hi_price,lo_price,Time)=>
    result = false
    if(array.size(majorBoxLines)>0 and array.size(majorBoxLineRef)>0 and array.size(Crossed)>0)
    z = array.size(majorBoxLines)-1
    for x = 0 to z
    line_price = line.get_y2(array.get(majorBoxLines,x))
    hi_pos = getHighOffset(array.get(majorBoxLineRef,x))
    lo_pos = getLowOffset(array.get(majorBoxLineRef,x))
    qq = 0.0
    if(array.get(majorBoxLineType,x)==0 and lo_price <= line_price)
    if not array.get(Crossed,x)
    result := true
    qq := high[hi_pos]
    if x == z
    array.set(majorBoxLines,x,line.new(time[hi_pos],qq,Time,qq,xloc.bar_time,extend.none,Sell_Line_Color,(Sell_Line_Style==”Solid”?line.style_solid:
    Sell_Line_Style==”Dotted”?line.style_dotted:line.style_dashed),Sell_Line_Thickness))
    array.set(majorBoxLineType,x,1)
    else
    array.set(Crossed,x,true)
    else if(array.get(majorBoxLineType,x)==1 and hi_price >= line_price)
    if not array.get(Crossed,x)
    result := true
    qq := low[lo_pos]
    if x == z
    array.set(majorBoxLines,x,line.new(time[lo_pos],qq,Time,qq,xloc.bar_time,extend.none,Buy_Line_Color,(Buy_Line_Style==”Solid”?line.style_solid:
    Buy_Line_Style==”Dotted”?line.style_dotted:line.style_dashed),Buy_Line_Thickness))
    array.set(majorBoxLineType,x,0)
    else
    array.set(Crossed,x,true)
    if not array.get(Crossed,x)
    line.set_x2(array.get(majorBoxLines,x),Time)
    result

    major_line_confirm = operateMinorBox(close,high,low,time)
    major_line_cross = checkCross(expansionLines,close)
    liquidity_line_touch = operateLiquidity(high,low,time)

    if alert_major_line_confirm and major_line_confirm
    alert(“Major Line Confirmed.”)
    if alert_major_line_cross and major_line_cross
    alert(“Major Line Crossed.”)
    if alert_liquidity_line_touch and liquidity_line_touch
    alert(“Liquidity Line Touched.”)

    #252974

    Please do NOT append different requests to existing topics, start a new one, instead.

    Thanks 🙂

    I just created it.

     

Viewing 2 posts - 1 through 2 (of 2 total)

Create your free account now and post your request to benefit from the help of the community
Register or Login