Convert Simple Thinkscript Support/Resistance Lines into AFL

#1
Using this on the Daily chart in ThinkorSwim. Would like to convert below Thinkscript to Amibroker (AFL) to match exactly as shown on the attached chart of Apple (AAPL) from closing date of 01/14/22.

input Lookback = 10;

def LowMove = Lowest(Low, Lookback);
def HighMove = Highest(High, Lookback);

def SpanLow = if LowMove < LowMove[-Lookback] then LowMove else LowMove[-Lookback];
def PointLow = Low == SpanLow;

def lastPointLow = CompoundValue(1, if IsNaN(PointLow) then lastPointLow[1] else if PointLow then Low else lastPointLow[1], Low);

def SpanHigh = if HighMove > HighMove[-Lookback] then HighMove else HighMove[-Lookback];
def PointHigh = High == SpanHigh;

def lastPointHigh = CompoundValue(1, if IsNaN(PointHigh) then lastPointHigh[1] else if PointHigh then High else lastPointHigh[1], High);

plot Resistance = lastPointHigh;
plot Support = lastPointLow;

Resistance.SetPaintingStrategy(PaintingStrategy.HORIZONTAL);
Resistance.SetDefaultColor(Color.GREEN);

Support.SetPaintingStrategy(PaintingStrategy.HORIZONTAL);
Support.SetDefaultColor(Color.RED);


Resistance Support Example.png
 
Last edited:
#2
I've started this but below is where I'm getting an Error message. Any ideas on how to fix?

Lookback = 10;
LowMove = ( LLV( Low, Lookback));
HighMove = ( HHV( High, Lookback));

SpanLow = IIF(LowMove < LowMove-lookback, LowMove, LowMove-lookback);
SpanHigh = IIF(HighMove < HighMove-lookback, HighMove, HighMove-lookback);

PointLow = Low == SpanLow;
PointHigh = High == SpanHigh;

lastPointLow = (Cum(1, (IIf( IsNaN(PointLow) , lastPointLow[1] , -1) IIf (PointLow, (Low), IIf (lastPointLow[1], -1, Low);
Error 30. Syntax error, unexpected FUN
 
#3
Thinkscript code I'm having most trouble with converting to AFL.
def lastPointLow = CompoundValue(1, if IsNaN(PointLow) then lastPointLow[1] else if PointLow then Low else lastPointLow[1], Low);

Correction, I've removed the [1] from the AFL Code below and only using -1.

lastPointLow = (Cum(1, (IIf( IsNaN(PointLow) , lastPointLow[1] , -1) IIf (PointLow, (Low), IIf (lastPointLow[1], -1, Low);

So now looks like this but still getting Error message

lastPointLow = (Cum(1, (IIf( IsNaN(PointLow) , lastPointLow , -1) IIf (PointLow, (Low), IIf (lastPointLow, -1, Low);

Error 30. Syntax error, unexpected FUN

I've tried various parenthesis ( ) , If statements, WriteIf statements, BarCount statements, etc but I'm stuck. Hoping this is something simple you can help me with. Thank you in advance!
 
#4
Code:
_SECTION_BEGIN("  ");

Plot( C, "", colorWhite, styleCandle  );


xx=BarIndex();x=xx;Lx=LastValue(x);

nbar=Param("N Pivot Bars",3,2,50,1);

npiv=Param("N Pivots lookback period",1,1,50,1);

PivotSymmetry=ParamToggle("Use Symmetric Pivots","Off|On",0);

CleanPivots=ParamToggle("Use Clean Pivots","Off|On",0);

//srStyle=ParamToggle("S/R Style","Off|On",1);



if (PivotSymmetry)

{

   fc=1;
    pk=H>Ref(HHV(H,nbar*fc),-1) AND Ref(HHV(H,nbar),nbar)<=H;
    pk=pk AND Lx-ValueWhen(pk,x)>nbar*fc;
    tr=L<Ref(LLV(L,nbar*fc),-1) AND Ref(LLV(L,nbar),nbar)>=L;
    tr=tr AND Lx-ValueWhen(tr,x)>nbar*fc;
}
else
{
    fc=2;
    pk=H>Ref(HHV(H,nbar*fc),-1) AND Ref(HHV(H,nbar),nbar)<=H;
    pk=pk AND Lx-ValueWhen(pk,x)>nbar*fc;
    tr=L<Ref(LLV(L,nbar*fc),-1) AND Ref(LLV(L,nbar),nbar)>=L;
    tr=tr AND Lx-ValueWhen(tr,x)>nbar*fc;   

}

px0=ValueWhen(pk,x,0); tx0=ValueWhen(tr,x,0);

px1=ValueWhen(pk,x,1); tx1=ValueWhen(tr,x,1);

px2=ValueWhen(pk,x,2); tx2=ValueWhen(tr,x,2);

px3=ValueWhen(pk,x,3); tx3=ValueWhen(tr,x,3);

ph0=ValueWhen(pk,H,0); tl0=ValueWhen(tr,L,0);

ph1=ValueWhen(pk,H,1); tl1=ValueWhen(tr,L,1);

ph2=ValueWhen(pk,H,2); tl2=ValueWhen(tr,L,2);

ph3=ValueWhen(pk,H,3); tl3=ValueWhen(tr,L,3);

if (CleanPivots)

{

   pk=IIf(pk AND px0<tx0 AND ph0>ph1,False,pk);

   tr=IIf(tr AND px0>tx0 AND tl0<tl1,False,tr);

   pk=IIf(pk AND px2>tx1 AND ph1<=ph2,False,pk);

   tr=IIf(tr AND tx2>px1 AND tl1>=tl2,False,tr);

 px0=ValueWhen(pk,x,0); tx0=ValueWhen(tr,x,0);
    px1=ValueWhen(pk,x,1); tx1=ValueWhen(tr,x,1);
    px2=ValueWhen(pk,x,2); tx2=ValueWhen(tr,x,2);
    px3=ValueWhen(pk,x,3); tx3=ValueWhen(tr,x,3);
    ph0=ValueWhen(pk,H,0); tl0=ValueWhen(tr,L,0);
    ph1=ValueWhen(pk,H,1); tl1=ValueWhen(tr,L,1);
    ph2=ValueWhen(pk,H,2); tl2=ValueWhen(tr,L,2);
    ph3=ValueWhen(pk,H,3); tl3=ValueWhen(tr,L,3);     
}
 

miny=Status("axisminy");

maxy=Status("axismaxy");

for (i=1;i<=npiv;i++)



    rr=Ref(ValueWhen(pk,H,i),-nbar);

    rr=IIf(rr>maxy OR rr<miny,Null,rr);

    ss=Ref(ValueWhen(tr,L,i),-nbar);

    ss=IIf(ss>maxy OR ss<miny,Null,ss);

    Plot(rr,"",colorLime,styleNoLine|styleDots,0,0,0);   

    Plot(ss,"",colorRed,styleNoLine|styleDots,0,0,0);
 
#5
Code:
_SECTION_BEGIN("  ");

Plot( C, "", colorWhite, styleCandle  );


xx=BarIndex();x=xx;Lx=LastValue(x);

nbar=Param("N Pivot Bars",3,2,50,1);

npiv=Param("N Pivots lookback period",1,1,50,1);

PivotSymmetry=ParamToggle("Use Symmetric Pivots","Off|On",0);

CleanPivots=ParamToggle("Use Clean Pivots","Off|On",0);

//srStyle=ParamToggle("S/R Style","Off|On",1);



if (PivotSymmetry)

{

   fc=1;
    pk=H>Ref(HHV(H,nbar*fc),-1) AND Ref(HHV(H,nbar),nbar)<=H;
    pk=pk AND Lx-ValueWhen(pk,x)>nbar*fc;
    tr=L<Ref(LLV(L,nbar*fc),-1) AND Ref(LLV(L,nbar),nbar)>=L;
    tr=tr AND Lx-ValueWhen(tr,x)>nbar*fc;
}
else
{
    fc=2;
    pk=H>Ref(HHV(H,nbar*fc),-1) AND Ref(HHV(H,nbar),nbar)<=H;
    pk=pk AND Lx-ValueWhen(pk,x)>nbar*fc;
    tr=L<Ref(LLV(L,nbar*fc),-1) AND Ref(LLV(L,nbar),nbar)>=L;
    tr=tr AND Lx-ValueWhen(tr,x)>nbar*fc;  

}

px0=ValueWhen(pk,x,0); tx0=ValueWhen(tr,x,0);

px1=ValueWhen(pk,x,1); tx1=ValueWhen(tr,x,1);

px2=ValueWhen(pk,x,2); tx2=ValueWhen(tr,x,2);

px3=ValueWhen(pk,x,3); tx3=ValueWhen(tr,x,3);

ph0=ValueWhen(pk,H,0); tl0=ValueWhen(tr,L,0);

ph1=ValueWhen(pk,H,1); tl1=ValueWhen(tr,L,1);

ph2=ValueWhen(pk,H,2); tl2=ValueWhen(tr,L,2);

ph3=ValueWhen(pk,H,3); tl3=ValueWhen(tr,L,3);

if (CleanPivots)

{

   pk=IIf(pk AND px0<tx0 AND ph0>ph1,False,pk);

   tr=IIf(tr AND px0>tx0 AND tl0<tl1,False,tr);

   pk=IIf(pk AND px2>tx1 AND ph1<=ph2,False,pk);

   tr=IIf(tr AND tx2>px1 AND tl1>=tl2,False,tr);

px0=ValueWhen(pk,x,0); tx0=ValueWhen(tr,x,0);
    px1=ValueWhen(pk,x,1); tx1=ValueWhen(tr,x,1);
    px2=ValueWhen(pk,x,2); tx2=ValueWhen(tr,x,2);
    px3=ValueWhen(pk,x,3); tx3=ValueWhen(tr,x,3);
    ph0=ValueWhen(pk,H,0); tl0=ValueWhen(tr,L,0);
    ph1=ValueWhen(pk,H,1); tl1=ValueWhen(tr,L,1);
    ph2=ValueWhen(pk,H,2); tl2=ValueWhen(tr,L,2);
    ph3=ValueWhen(pk,H,3); tl3=ValueWhen(tr,L,3);    
}


miny=Status("axisminy");

maxy=Status("axismaxy");

for (i=1;i<=npiv;i++)



    rr=Ref(ValueWhen(pk,H,i),-nbar);

    rr=IIf(rr>maxy OR rr<miny,Null,rr);

    ss=Ref(ValueWhen(tr,L,i),-nbar);

    ss=IIf(ss>maxy OR ss<miny,Null,ss);

    Plot(rr,"",colorLime,styleNoLine|styleDots,0,0,0);  

    Plot(ss,"",colorRed,styleNoLine|styleDots,0,0,0);
Thank you hrishi9000! That looks great! Much appreciated!
 

Similar threads