RicardoSantos

[RS]Fractal Pattern Recognition (3 Triangles) V0

EXPERIMENTAL:
Test bed for more advanced pattern recognition.
Remove from Favorite Scripts Add to Favorite Scripts
study(title="[RS]Fractal Pattern Recognition (3 Triangles) V0", overlay=false)
//  ||---   Fractal Recognition:
filterBW = input(true, title="filter Bill Williams Fractals:")
filterFractals = input(false, title="Filter fractals using extreme method:")
length = input(24, title="Extreme Window:")

regulartopfractal = high[4] < high[3] and high[3] < high[2] and high[2] > high[1] and high[1] > high[0]
regularbotfractal = low[4] > low[3] and low[3] > low[2] and low[2] < low[1] and low[1] < low[0]

billwtopfractal = filterBW ? false : (high[4] < high[2] and high[3] < high[2] and high[2] > high[1] and high[2] > high[0] ? true : false)
billwbotfractal = filterBW ? false : (low[4] > low[2] and low[3] > low[2] and low[2] < low[1] and low[2] < low[0] ? true : false)

ftop = filterBW ? regulartopfractal : regulartopfractal or billwtopfractal
fbot = filterBW ? regularbotfractal : regularbotfractal or billwbotfractal

topf = ftop ? high[2] >= highest(high, length) ? true : false : false
botf = fbot ? low[2] <= lowest(low, length) ? true : false : false

filteredtopf = filterFractals ? topf : ftop
filteredbotf = filterFractals ? botf : fbot
//  ||------------------------------------------------------------------------------------------------------

//plotshape(filteredtopf, style=shape.triangledown, location=location.abovebar, color=red, text="•", offset=-2)
//plotshape(filteredbotf, style=shape.triangleup, location=location.belowbar, color=lime, text="•", offset=-2)
//  ||---   V1 : Added Swing High/Low Option
//ShowSwingsHL = input(true)
//highswings = filteredtopf == false ? na : valuewhen(filteredtopf == true, high[2], 2) < valuewhen(filteredtopf == true, high[2], 1) and valuewhen(filteredtopf == true, high[2], 1) > valuewhen(filteredtopf == true, high[2], 0)
//lowswings = filteredbotf == false ? na : valuewhen(filteredbotf == true, low[2], 2) > valuewhen(filteredbotf == true, low[2], 1) and valuewhen(filteredbotf == true, low[2], 1) < valuewhen(filteredbotf == true, low[2], 0)
//---------------------------------------------------------------------------------------------------------
//  ||---   Offset calculation:
//  ||--- unable to use, plots cant use series for offset value...
//hsoffset = n-valuewhen(ftop == true, n[2], 1)
//lsoffset = n-valuewhen(fbot == true, n[2], 1)
//---------------------------------------------------------------------------------------------------------
//plotshape(ShowSwingsHL ? highswings : na, style=shape.triangledown, location=location.abovebar, color=maroon, text="H", offset=-2)
//plotshape(ShowSwingsHL ? lowswings : na, style=shape.triangleup, location=location.belowbar, color=green, text="L", offset=-2)
//  ||---   V2 : Plot Lines based on the fractals.
//showchannel = input(true)
//plot(showchannel ? (filteredtopf ? high[2] : na) : na, color=black, offset=-2)
//plot(showchannel ? (filteredbotf ? low[2] : na) : na, color=black, offset=-2)
//---------------------------------------------------------------------------------------------------------
//  ||---   HLswings channel: unable to offset values
//plot(showchannel ? (highswings ? high[2] : na) : na, color=black, offset=-2)
//plot(showchannel ? (lowswings ? low[2] : na) : na, color=black, offset=-2)
//----------------------------------------------------------------------------------------------------------
//  ||---   ZigZag:
//showZigZag = input(true)


istop = filteredtopf ? true : false
isbot = filteredbotf ? true : false
topcount = barssince(istop)
botcount = barssince(isbot)

zigzag = (
        istop and topcount[1] > botcount[1] ? high[2] :
        isbot and topcount[1] < botcount[1] ? low[2] :
        na )
//zigzag = not showZigZag ? na : ( filteredtopf == true ? high[2] : filteredbotf == true ? low[2] : na )
//plot(zigzag, color=black, offset=-2)

//  ||---   Pattern Recognition:


//istop() => zigzag == filteredtopf
//isbot() => zigzag == filteredbotf

z = valuewhen(zigzag, zigzag, 6) 
y = valuewhen(zigzag, zigzag, 5) 
x = valuewhen(zigzag, zigzag, 4) 
a = valuewhen(zigzag, zigzag, 3) 
b = valuewhen(zigzag, zigzag, 2)
c = valuewhen(zigzag, zigzag, 1)
d = valuewhen(zigzag, zigzag, 0)

zyx = (abs(x-y)/abs(z-y))
zyb = (abs(b-y)/abs(z-y))
zyd = (abs(d-y)/abs(z-y))
zab = (abs(b-a)/abs(z-a))
zad = (abs(d-a)/abs(z-a))

yxa = (abs(a-x)/abs(y-x))
yxc = (abs(c-x)/abs(y-x))
ybc = (abs(a-c)/abs(y-c))

xab = (abs(b-a)/abs(x-a))
xad = (abs(a-d)/abs(x-a))
abc = (abs(b-c)/abs(a-b))
bcd = (abs(c-d)/abs(b-c))

plot(title='', series=zyx, color=change(zyx) != 0 ? na : gray, offset=-2)
plot(title='', series=zyb, color=change(zyb) != 0 ? na : gray, offset=-2)
plot(title='', series=zyd, color=change(zyd) != 0 ? na : gray, offset=-2)
plot(title='', series=zab, color=change(zab) != 0 ? na : gray, offset=-2)
plot(title='', series=zad, color=change(zad) != 0 ? na : gray, offset=-2)

plot(title='', series=yxa, color=change(yxa) != 0 ? na : gray, offset=-2)
plot(title='', series=yxc, color=change(yxc) != 0 ? na : gray, offset=-2)
plot(title='', series=ybc, color=change(ybc) != 0 ? na : gray, offset=-2)

plot(title='', series=xab, color=change(xab) != 0 ? na : gray, offset=-2)
plot(title='', series=xad, color=change(xad) != 0 ? na : black, offset=-2)
plot(title='', series=abc, color=change(abc) != 0 ? na : teal, offset=-2)
plot(title='', series=bcd, color=change(bcd) != 0 ? na : olive, offset=-2)

plotshape(change(zyx) != 0 ? zyx : na, text="ZYX", color=navy, transp=0, location=location.absolute, offset=-2)
plotshape(change(zyb) != 0 ? zyb : na, text="ZYB", color=navy, transp=15, location=location.absolute, offset=-2)
plotshape(change(zyd) != 0 ? zyd : na, text="ZYD", color=navy, transp=30, location=location.absolute, offset=-2)
plotshape(change(zab) != 0 ? zab : na, text="ZAB", color=navy, transp=45, location=location.absolute, offset=-2)
plotshape(change(zad) != 0 ? zad : na, text="ZAD", color=navy, transp=60, location=location.absolute, offset=-2)

plotshape(change(yxa) != 0 ? yxa : na, text="YXA", color=fuchsia, transp=0, location=location.absolute, offset=-2)
plotshape(change(yxc) != 0 ? yxc : na, text="YXC", color=fuchsia, transp=25, location=location.absolute, offset=-2)
plotshape(change(ybc) != 0 ? ybc : na, text="YBC", color=fuchsia, transp=50, location=location.absolute, offset=-2)

plotshape(change(xab) != 0 ? xab : na, text="XAB", color=black, transp=0, location=location.absolute, offset=-2)
plotshape(change(xad) != 0 ? xad : na, text="XAD", color=black, transp=15, location=location.absolute, offset=-2)
plotshape(change(abc) != 0 ? abc : na, text="ABC", color=black, transp=30, location=location.absolute, offset=-2)
plotshape(change(bcd) != 0 ? bcd : na, text="BCD", color=black, transp=45, location=location.absolute, offset=-2)

//bgcolor(xd <= 0.8 and xd >= 0.6 ? black : na, transp=25)
//plot(topcounter, color=green, offset=-2)
//plot(botcounter, color=red, offset=-2)
Thanks for sharing, however, very complex to understand.
Reply
RicardoSantos PRO sudhir.mehta
not at all, look at the geometric shape in the chart for reference.
on a side note i forgot a triangulation rate, so ill have to repost later :p
Reply
United States
United Kingdom
India
Deutschland
France
España
Italia
Polska
Türkiye
Россия
Brasil
Indonesia
Malaysia
ประเทศไทย
Việt Nam
日本
한국
简体
繁體
Home Stock Screener Forex Signal Finder Cryptocurrency Signal Finder Economic Calendar How It Works Chart Features House Rules Moderators Website & Broker Solutions Widgets Stock Charting Library Feature Request Blog & News FAQ Help & Wiki Twitter
Profile Profile Settings Account and Billing My Support Tickets Contact Support Ideas Published Followers Following Private Messages Chat Sign Out