Master Pattern Indicator conversion
Forums › ProRealTime English forum › ProBuilder support › Master Pattern Indicator conversion
- This topic has 9 replies, 4 voices, and was last updated 1 month ago by
yas.
-
-
10/23/2025 at 7:27 AM #252962
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 = 1if(indi_type==2)
Depth := 2var 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 : 0var 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
resgetLowOffset(Time)=>
x = 1, lo = low, res = 0
while(time[x]>=Time)
if(low[x]<lo)
lo := low[x]
res := x
x += 1
rescheckCross(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
resultoperateMinorBox(price,hi_price,lo_price,Time)=>
var lastMinorExp = 0
confirm = falseif(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
confirmoperateLiquidity(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)
resultmajor_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.”)10/23/2025 at 12:10 PM #252974Please do NOT append different requests to existing topics, start a new one, instead.
Thanks 🙂
I just created it.
10/31/2025 at 8:50 AM #25315111/03/2025 at 10:08 AM #25321311/03/2025 at 12:02 PM #253220Translated with IA
I have not tried to read/understand the code at all : so try it and tell me if it’s behave the same for you…
Master Pattern PRT123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220// === Master Pattern (ProBuilder) — transparence via COLOURED(...,alpha) / BORDERCOLOR(...,alpha) ===DEFPARAM DrawOnLastBarOnly = False// ----- Paramètres -----MaxBars = 500Depth = 3Deviation = 1Backstep = 1ShowMinorBoxes = 1ShowMinorExpansion = 1// Couleurs (RGB)MajBoxR = 81MajBoxG = 55MajBoxB = 226MinBoxR = 163MinBoxG = 160MinBoxB = 160ExpR = 238ExpG = 238ExpB = 238SellR = 255SellG = 0SellB = 0BuyR = 0BuyG = 170BuyB = 0// Transparence (0 = opaque, valeur plus grande = plus transparent)MinBoxAlpha = 100MajBoxAlpha = 60// ----- Init (une seule fois) -----once zz1 = 0.0once yy1 = 0once zz2 = 0.0once yy2 = 0once zz3 = 0.0once yy3 = 0once zz4 = 0.0once yy4 = 0once lastHighPrice = 0.0once lastHighIndex = 0once lastLowPrice = 0.0once lastLowIndex = 0once boxActive = 0once boxTop = 0.0once boxBot = 0.0once boxLeft = 0once boxRight = 0once crossHigh = 0once crossLow = 0once expActive = 0once expStart = 0once expPrice = 0.0once liqActive = 0once liqType = 0once liqPrice = 0.0once liqLeft = 0once LiqSide = 0// ----- Sorties (barre à barre) -----MajorConfirm = 0MajorCross = 0LiqTouch = 0// ----- Fractal centré (pivot confirmé) -----Per = 2*Depth + 1condPH = 0condPL = 0if barindex > Per thenif high[Depth] = highest[Per](high)[Depth] thencondPH = 1endifif low[Depth] = lowest[Per](low)[Depth] thencondPL = 1endifif condPH = 1 thenswingPrice = high[Depth]swingIndex = barindex - DepthlastHighPrice = swingPricelastHighIndex = swingIndexzz4 = zz3yy4 = yy3zz3 = zz2yy3 = yy2zz2 = zz1yy2 = yy1zz1 = swingPriceyy1 = swingIndexendifif condPL = 1 thenswingPrice = low[Depth]swingIndex = barindex - DepthlastLowPrice = swingPricelastLowIndex = swingIndexzz4 = zz3yy4 = yy3zz3 = zz2yy3 = yy2zz2 = zz1yy2 = yy1zz1 = swingPriceyy1 = swingIndexendifendif// ----- Déclencheur motif (4 swings) -----res = 0val1 = zz1val2 = zz2val3 = zz3val4 = zz4pos2 = yy2if val4 <> 0 and pos2 > 0 thenif val1 < val2 and val1 > val3 and val4 > val2 thenres = 1endifif val1 > val2 and val1 < val3 and val4 < val2 thenres = 1endifendif// ----- Boîte : création/MAJ (DRAWRECTANGLE) -----if res = 1 and barindex - pos2 <= MaxBars thenboxTop = max(val1,val2)boxBot = min(val1,val2)boxLeft = pos2boxRight = barindexboxActive = 1crossHigh = 0crossLow = 0MajorConfirm = 0endifif boxActive = 1 thenboxRight = barindexif ShowMinorBoxes = 1 thenDRAWRECTANGLE(boxLeft, boxTop, boxRight, boxBot) COLOURED(MinBoxR,MinBoxG,MinBoxB,MinBoxAlpha) BORDERCOLOR(MinBoxR,MinBoxG,MinBoxB,MinBoxAlpha) STYLE(DOTTEDLINE,1)endifif high > boxTop thencrossHigh = 1endifif low < boxBot thencrossLow = 1endifendif// ----- Confirmation majeure : deux bords touchés -----if boxActive = 1 and crossHigh = 1 and crossLow = 1 thenmid = (boxTop + boxBot) / 2expPrice = midexpStart = boxRightexpActive = 1MajorConfirm = 1DRAWRECTANGLE(boxLeft, boxTop, boxRight, boxBot) COLOURED(MajBoxR,MajBoxG,MajBoxB,MajBoxAlpha) BORDERCOLOR(MajBoxR,MajBoxG,MajBoxB,MajBoxAlpha) STYLE(LINE,2)initSell = 0if crossHigh = 0 theninitSell = 1endifif initSell = 1 thenliqType = 1liqPrice = lastHighPriceliqLeft = lastHighIndexLiqSide = 1elseliqType = 0liqPrice = lastLowPriceliqLeft = lastLowIndexLiqSide = -1endifliqActive = 1boxActive = 0endif// ----- Ligne d’expansion (milieu) -----if expActive = 1 thenif ShowMinorExpansion = 1 thenDRAWSEGMENT(expStart, expPrice, barindex, expPrice) COLOURED(ExpR,ExpG,ExpB) STYLE(LINE,2)endifif close > expPrice and close[1] <= expPrice thenMajorCross = 1endifif close < expPrice and close[1] >= expPrice thenMajorCross = 1endifendif// ----- Lignes de liquidité (toggle au toucher) -----if liqActive = 1 thenif liqType = 1 thenDRAWSEGMENT(liqLeft, liqPrice, barindex, liqPrice) COLOURED(SellR,SellG,SellB) STYLE(DOTTEDLINE,1)endifif liqType = 0 thenDRAWSEGMENT(liqLeft, liqPrice, barindex, liqPrice) COLOURED(BuyR,BuyG,BuyB) STYLE(DOTTEDLINE,1)endifif liqType = 1 and high >= liqPrice thenLiqTouch = 1endifif liqType = 0 and low <= liqPrice thenLiqTouch = 1endifif LiqTouch = 1 thenif liqType = 1 thenliqType = 0liqPrice = lastLowPriceliqLeft = lastLowIndexLiqSide = -1elseliqType = 1liqPrice = lastHighPriceliqLeft = lastHighIndexLiqSide = 1endifendifendif// ----- RETURN (obligatoire) -----RETURN MajorConfirm COLOURED(MajBoxR,MajBoxG,MajBoxB) STYLE(HISTOGRAM,2) AS "MajorConfirm", MajorCross COLOURED(ExpR,ExpG,ExpB) STYLE(POINT,2) AS "MajorCross", LiqTouch COLOURED(255,0,0) STYLE(HISTOGRAM,2) AS "LiqTouch", LiqSide STYLE(LINE,1) AS "LiqSide"2 users thanked author for this post.
11/04/2025 at 8:02 PM #25329511/04/2025 at 8:04 PM #25329611/10/2025 at 4:16 PM #25349311/10/2025 at 4:50 PM #253494Hi. This is what I have:
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234// MASTER PATTERN INDICATOR//--- Configuración de Entradas ---indiType = 1 // 1 o 2Depth = 3Deviation = 1Backstep = 1//--- ColoresMajorBoxColorR = 81MajorBoxColorG = 55MajorBoxColorB = 226MinorBoxColorR = 163MinorBoxColorG = 160MinorBoxColorB = 160MajorExpansionLineColorR = 238MajorExpansionLineColorG = 238MajorExpansionLineColorB = 238// (Nuevas entradas)SellLineColorR = 255SellLineColorG = 0SellLineColorB = 0BuyLineColorR = 0BuyLineColorG = 255BuyLineColorB = 0IF indiType = 2 THENDepth = 2ENDIF//--- Lógica del Detector de Pivotes (ZigZag) ---ONCE hg = 1ONCE lw = 1ONCE llCounter = 0ONCE lhCounter = 0ONCE downCounter = 0ONCE p = 0ONCE b = 0ONCE l = 0IF barindex > Depth + 1 THENpLw = lowestbars[Depth]pHg = highestbars[Depth]lowing = (lw[1] = pLw) OR (low - low[pLw] > Deviation * TickSize)highing = (hg[1] = pHg) OR (high[pHg] - high > Deviation * TickSize)IF NOT lowing[1] THENllCounter = 0ELSEllCounter = llCounter + 1ENDIFll = llCounterIF NOT highing[1] THENlhCounter = 0ELSElhCounter = lhCounter + 1ENDIFlh = lhCounterIF NOT (lh > ll) THENdownCounter = 0ELSEdownCounter = downCounter + 1ENDIFdown = (downCounter >= Backstep)lower = (low[lw[1]] > low[pLw])higher = (high[hg[1]] < high[pHg])myLw = lw[1]myHg = hg[1]IF myLw <> pLw AND (NOT down[1] OR lower) THENIF pLw > myHg THENmyLw = pLwELSEmyLw = 0ENDIFENDIFIF myHg <> pHg AND (down[1] OR higher) THENIF pHg > myLw THENmyHg = pHgELSEmyHg = 0ENDIFENDIFlw = myLwhg = myHgx1 = 0y1 = 0IF down THENx1 = lwy1 = low[x1]ELSEx1 = hgy1 = high[x1]ENDIF//--- PASO 1 y 2: Almacenamiento de Pivotes y Cajas ---IF down <> down[1] THEN$pivotPrice[p] = y1[1]$pivotIndex[p] = barindex[1] - x1[1]IF down[1] THEN$pivotType[p] = -1ELSE$pivotType[p] = 1ENDIFp = p + 1IF p >= 4 THENi = p - 1value1 = $pivotPrice[i]value2 = $pivotPrice[i-1]value3 = $pivotPrice[i-2]value4 = $pivotPrice[i-3]pos = $pivotIndex[i-1]cond1 = (value1 < value2 AND value1 > value3 AND value4 > value2)cond2 = (value1 > value2 AND value1 < value3 AND value4 < value2)IF (cond1 OR cond2) THEN$boxTop[b] = max(value1, value2)$boxBottom[b] = min(value1, value2)$boxLeftIndex[b] = pos$boxRightIndex[b] = $pivotIndex[i]$boxCrossedHigh[b] = 0$boxCrossedLow[b] = 0$boxIsConfirmed[b] = 0$boxFixedRightIndex[b] = $pivotIndex[i]$boxConfirmIndex[b] = $pivotIndex[i]$boxExpandidx[b] = $pivotIndex[i]$CrossNumber[b]= 0b = b + 1ENDIFENDIFENDIFENDIF//--- Lógica de Dibujo y ESTADO (Sólo en la última barra) ---IF islastbarupdate THEN// 1. Dibujar PivotesIF p > 0 THENlastIdx = $pivotIndex[p-1]lastPrice = $pivotPrice[p-1]DRAWSEGMENT(lastIdx, lastPrice, barindex - x1, y1) COLOURED(200, 200, 200) STYLE(dottedline)FOR i = 0 TO p - 1 DOIF $pivotType[i] = 1 THENDRAWPOINT($pivotIndex[i], $pivotPrice[i], 1) COLOURED(0, 255, 0)ELSEDRAWPOINT($pivotIndex[i], $pivotPrice[i], 1) COLOURED(255, 0, 0)ENDIFNEXTENDIF// 2. Dibujar y Gestionar CajasIF b > 0 THENFOR i = 0 TO b - 1 DOIF $boxCrossedHigh[i] = 0 AND $boxCrossedLow[i] = 0 THENdistancia = barindex - $boxRightIndex[i]FOR j = distancia DOWNTO 0 DOcurrentBarIndex = barindex - jIF high[j] > $boxTop[i] THEN$boxCrossedHigh[i] = 1$boxFixedRightIndex[i] = currentBarIndex$CrossNumber[i]=1BREAKELSIF low[j] < $boxBottom[i] THEN$boxCrossedLow[i] = 1$boxFixedRightIndex[i] = currentBarIndex$CrossNumber[i]=1BREAKENDIFNEXTendifIF $CrossNumber[i]=1 and $boxCrossedHigh[i] = 1 AND $boxCrossedLow[i] = 0 THENdistancia = barindex - $boxFixedRightIndex[i]FOR j = distancia DOWNTO 0 DOcurrentBarIndex = barindex - jIF low[j] < $boxBottom[i] THEN$boxCrossedLow[i] = 1$boxConfirmIndex[i] = currentBarIndex$boxIsConfirmed[i] = 1$CrossNumber[i]=2$boxExpandidx[i] = currentBarIndex+1BREAKENDIFNEXTendifIF $CrossNumber[i]=1 and $boxCrossedLow[i] = 1 AND $boxCrossedHigh[i] = 0 THENdistancia = barindex - $boxFixedRightIndex[i]FOR j = distancia DOWNTO 0 DOcurrentBarIndex = barindex - jIF high[j] > $boxTop[i] THEN$boxCrossedHigh[i] = 1$boxConfirmIndex[i] = currentBarIndex$boxIsConfirmed[i] = 1$CrossNumber[i]=2$boxExpandidx[i] = currentBarIndexBREAKENDIFNEXTENDIFif $CrossNumber[i]=1 thenDRAWRECTANGLE($boxLeftIndex[i], $boxBottom[i], $boxFixedRightIndex[i], $boxTop[i]) COLOURED("blue")style(line,2)fillcolor("blue",35)DRAWRECTANGLE($boxFixedRightIndex[i], $boxBottom[i], barindex, $boxTop[i]) COLOURED("fuchsia",45)style(dottedline,2)elsif $CrossNumber[i]=2 thenDRAWRECTANGLE($boxLeftIndex[i], $boxBottom[i], $boxFixedRightIndex[i], $boxTop[i]) COLOURED("blue")style(line,2)fillcolor("blue",35)DRAWRECTANGLE($boxFixedRightIndex[i], $boxBottom[i], $boxConfirmIndex[i], $boxTop[i]) COLOURED("fuchsia",45)style(dottedline,2)endifNEXTENDIFENDIFRETURN11/10/2025 at 5:03 PM #253497 -
AuthorPosts
Find exclusive trading pro-tools on 