Sunday, 1 December 2013

Trend finder afl for Amibroker



Today I am posting an afl which will help to identify the current trend in a market. This afl uses 35 long period SMA, 8 short period SMA and 5 period for signal. This setup gives us the strength of current market movement. I have also attached chart with price with bollinger band. One can note that the trend reversal actually matches with the price band chart. This can help the traders to find the right time to enter the market and also find the exit levels, Although the chart is for the EOD, I have observed that this indicator works well in weekly charts.

Finding the trend in any market is a challenging task. Once a trader finds the correct trend, very profitable trades can be achieved. I would suggest that this indicator be applied to the weekly charts in order to get the correct picture of the market.

The code is very simple as it involves just three parameters. But it carries some value for the traders.
////////// the code of the afl begins here////////

_SECTION_BEGIN("PPO ");

m=Param("long period",35,1,500,1);

n=Param("short period",8,1,100,1);

s=Param("signal",5,1,100,1);

mac3=( (WMA(C,(n) )) -WMA(C ,(m)) ) /WMA(C ,(m))*100 ;

signa=WMA(MAC3,s);

diff=(MAC3-signa)*2 ;


Plot(mac3, "PPO line", colorBlack, styleDots);
Plot(signa, "PPO signal", colorBlue, styleDots);


Color=IIf(diff>=0 , colorGreen,colorRed);

Plot(diff, "", color, styleNoTitle| styleHistogram | styleNoLabel |styleThick, maskHistogram);
Plot(diff, "", color, styleNoTitle| styleLine | styleNoLabel, maskHistogram);

Plot(0, "", colorDarkGrey, styleLine);

Title="Strenght Index " + WriteIf(diff>0 AND MAC3>0 , "   UP Trend    ", WriteIf(diff<0 AND MAC3>0 , " Down trend ", WriteIf(diff<0 AND MAC3<0 , "DOWN Trend", "Up trend"))+WriteIf( (diff>Ref(diff,-1) AND diff>0 ) OR (diff<Ref(diff,-1) AND diff<0 ) , " formation", " weakening"));
_SECTION_END();

///////////////////////// end of code///////////////
Best of luck

Sunday, 24 November 2013

Amibroker AFL for Fibonacci Retracement Levels


Fibonacci Retracement is an indicator that was developed by Leonardo Fibonacci an Italian mathematician who lived from 1170 - 1250. He made some interesting discoveries during his time. He found out the belly button is a retracement of 61.8% from the measurement head and feet. The elbow is a retracement of 61% of total measurement of arm. The Fibonacci numbers or Fibonacci sequence are widely observed in nature line number of branches and leaves in a tree, distribution of petals in flowers and seeds. 

The Fibonacci sequence is a set of numbers that starts with a one or a zero. The proceeding number is equal to the sum of the preceding two numbers.

Example : 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89…

In share markets, the term Fibonacci retracement is widely used when it comes to charting. It has been observed  that the  movement of price has some resemblance with Fibonacci sequence. In share market charts, whenever there is a correction or pull back the retracement levels of 38.2%, 61.8%, 78.6%  are seen as possible levels. The 50% retracement level also has some special relevance.  For example if the trend is up the price may correct to find the 38.2% or 50% levels and then revert back to the original uptrend. The same can be said in a downtrend market too. Therefore trading opportunities can be found if these levels are properly utilized. 

Today I am posting an AFL indicator that will react anywhere it is clicked. It can show the Fibonacci levels at any given point. This is particularly useful for students of technical analysis study purpose. This is not very complicated. The chart displayed is the Nifty’s course last week.

/////////////////////////////////////The Code is posted below///////////////////////////////////
_SECTION_BEGIN("Background");
    SetChartOptions(0,chartShowArrows|chartShowDates);
    SetChartBkColor(ParamColor("Outer panel",colorBlack)); // color of outer border
    SetChartBkGradientFill( ParamColor("Inner panel
upper",colorBlack),ParamColor("Inner panel lower",colorBlack));
    tchoice=Param("Title Selection ",2,1,2,1);

Plot(C, "", IIf(O>=C, colorOrange, colorGreen), ParamStyle("Price
Style",styleBar,maskPrice));

_SECTION_BEGIN("Fib Retracements");
    fibs = ParamToggle("Plot Fibs","Off|On",1);
    pctH = Param ("Pivot Hi %", 0.325,0.001,2.0,0.002);
    HiLB = Param ("Hi LookBack",1,1,BarCount-1,1);
    pctL = Param ("Pivot Lo %", 0.325,0.001,2.0,0.002);
    LoLB = Param ("Lo LookBack",1,1,BarCount-1,1);
    Back = Param ("Extend Left = 2",1,1,500,1);
    Fwd  = Param("Plot Forward", 0, 0, 500, 1);
    text = ParamToggle("Plot Text","Off|On",1);
    hts  = Param ("Text Shift", -33.5,-50,50,0.10);
    style =ParamStyle("Line Style",styleLine,styleNoLabel);
x = BarIndex();
pRp  = PeakBars( H, pctH, 1) == 0;
yRp0 = SelectedValue(ValueWhen( pRp, H, HiLB));
xRp0 = SelectedValue(ValueWhen( pRp, x, HiLB));
pSp  = TroughBars( L, pctL, 1) == 0;
ySp0 = SelectedValue(ValueWhen( pSp, L, LoLB));
xSp0 = SelectedValue(ValueWhen( pSp, x, LoLB));
Delta = yRp0 - ySp0;

function fib(ret)
{
retval = (Delta * ret);
Fibval = IIf(ret < 1.0
AND xSp0 < xRp0, yRp0 - retval, IIf(ret < 1.0
AND xSp0 > xRp0, ySp0 + retval,IIf(ret > 1.0
AND xSp0 < xRp0, yRp0 - retval, IIf(ret > 1.0
AND xSp0 > xRp0, ySp0 + retval, Null))));
return FibVal;
}

x0 = Min(xSp0,xRp0)-Back;
x1 = (BarCount -1);

r236 = fib(0.236);        r236I = LastValue (r236,1);
r382 = fib(0.382);        r382I = LastValue (r382,1);
r050 = fib(0.50);        r050I = LastValue (r050,1);
r618 = fib(0.618);        r618I = LastValue (r618,1);
r786 = fib(0.786);        r786I = LastValue (r786,1);
e127 = fib(1.27);        e127I = LastValue (e127,1);
e162 = fib(1.62);        e162I = LastValue (e162,1);
e200 = fib(2.00);        e200I = LastValue (e200,1);
e262 = fib(2.62);        e262I = LastValue (e262,1);
e424 = fib(4.24);        e424I = LastValue (e424,1);

p00 = IIf(xSp0 > xRp0,ySp0,yRp0);     p00I = LastValue (p00,1);
p100 = IIf(xSp0 < xRp0,ySp0,yRp0);     p100I = LastValue (p100,1);
color00 =IIf(xSp0 > xRp0,colorLime,colorRed);
color100 =IIf(xSp0 < xRp0,colorLime,colorRed);

numbars = LastValue(Cum(Status("barvisible")));
fraction= IIf(StrRight(Name(),3) == "", 3.2, 3.2);

if(fibs==1)
{
Plot(LineArray(xRp0-Fwd,yRp0,x1,yRp0,Back),"PR",32,8|styleNoRescale,Null,Null,Fwd);
Plot(LineArray(xSp0-Fwd,ySp0,x1,ySp0,Back),"PS",27,8|styleNoRescale,Null,Null,Fwd);
Plot(LineArray(x0-Fwd,r236,x1,r236,Back),"",45,style|styleNoRescale,Null,Null,Fwd);
Plot(LineArray(x0-Fwd,r382,x1,r382,Back),"",44,style|styleNoRescale,Null,Null,Fwd);
Plot(LineArray(x0-Fwd,r050,x1,r050,Back),"",41,style|styleNoRescale,Null,Null,Fwd);
Plot(LineArray(x0-Fwd,r618,x1,r618,Back),"",43,style|styleNoRescale,Null,Null,Fwd);
Plot(LineArray(x0-Fwd,r786,x1,r786,Back),"",42,style|styleNoRescale,Null,Null,Fwd);
Plot(LineArray(x0-Fwd,e127,x1,e127,Back),"e127",47,style|styleNoRescale,Null,Null,Fwd);
Plot(LineArray(x0-Fwd,e162,x1,e162,Back),"e162",47,style|styleNoRescale,Null,Null,Fwd);
Plot(LineArray(x0-Fwd,e200,x1,e200,Back),"p200",47,style|styleNoRescale,Null,Null,Fwd);
Plot(LineArray(x0-Fwd,e262,x1,e262,Back),"p262",47,style|styleNoRescale,Null,Null,Fwd);
Plot(LineArray(x0-Fwd,e424,x1,e424,Back),"p424",25,style|styleNoRescale,Null,Null,Fwd);
}
if(text==1)
{
PlotText(" 0% = " + WriteVal(p00,fraction),
    LastValue(BarIndex())-(numbars/hts), p00I  + 0.05, color00);
PlotText("23% = " + WriteVal(r236,fraction),
LastValue(BarIndex())-(numbars/hts), r236I + 0.05, 45);
PlotText("38% = " + WriteVal(r382,fraction),
LastValue(BarIndex())-(numbars/hts), r382I + 0.05, 44);
PlotText("50% = " + WriteVal(r050,fraction),
LastValue(BarIndex())-(numbars/hts), r050I + 0.05, 41);
PlotText("62% = " + WriteVal(r618,fraction),
LastValue(BarIndex())-(numbars/hts), r618I + 0.05, 43);
PlotText("78% = " + WriteVal(r786,fraction),
LastValue(BarIndex())-(numbars/hts), r786I + 0.05, 42);
PlotText("100% = " + WriteVal(p100,fraction),
LastValue(BarIndex())-(numbars/hts),p100I + 0.05, color100);
PlotText("127% = " + WriteVal(e127,fraction),
LastValue(BarIndex())-(numbars/hts),e127I + 0.05, 47);
PlotText("162% = " + WriteVal(e162,fraction),
LastValue(BarIndex())-(numbars/hts),e162I + 0.05, 47);
PlotText("200% = " + WriteVal(e200,fraction),
LastValue(BarIndex())-(numbars/hts),e200I + 0.05, 47);
PlotText("262% = " + WriteVal(e262,fraction),
LastValue(BarIndex())-(numbars/hts),e262I + 0.05, 47);
PlotText("424% = " + WriteVal(e424,fraction),
LastValue(BarIndex())-(numbars/hts),e424I + 0.05, 25);
}
_SECTION_END();

if (tchoice==1 )
{
_N(Title = EncodeColor(colorWhite)+StrFormat(" {{NAME}} -   {{INTERVAL}}   
{{Date}}    Open:  %g,    High:  %g,     Low:  %g,     Close:  %g  
{{VALUES}}",O, H, L, C, SelectedValue( ROC( C, 1   ) ) ));
}

if (tchoice==2 )
{
Title = EncodeColor(colorWhite)+  Date() + "   Tick = " + EncodeColor(5) +Interval()+
EncodeColor(colorWhite) + "     Open = " + EncodeColor(colorWhite) + O +
EncodeColor(colorWhite) + "     High = " + EncodeColor(5) + H +
EncodeColor(colorWhite) + "      Low = " + EncodeColor(colorRed) + L +
EncodeColor(colorWhite) + "     Close = " + EncodeColor(colorWhite) + C + "\n"+
EncodeColor( colorWhite) +"_______________"+"\n"+
EncodeColor( colorWhite)  + "424%   =  "    +     EncodeColor(25)+ e424 + " " +"\n"+
EncodeColor( colorWhite)  + "262%   =  "    +     EncodeColor(47)+ e262 + " " +"\n"+
EncodeColor( colorWhite)  + "200%   =  "    +     EncodeColor(47)+ e200 + " " +"\n"+
EncodeColor( colorWhite)  + "162%   =  "    +     EncodeColor(47)+ e162 + " " +"\n"+
EncodeColor( colorWhite)  + "127%   =  "    +     EncodeColor(47)+ e127 + " " +"\n"+
EncodeColor( colorYellow) + "  Res    =  "    +     EncodeColor(32)+ p100 + " "+"\n"+
EncodeColor( colorWhite)  + "  78%   =  "    +    EncodeColor(42)+ r786 + " " +"\n"+
EncodeColor( colorWhite)  + "  62%   =  "    +     EncodeColor(43)+ r618 + " "+"\n"+
EncodeColor( colorWhite)  + "  50%   =  "    +     EncodeColor(41)+ r050 + " "+"\n"+
EncodeColor( colorWhite)  + "  38%   =  "    +     EncodeColor(44)+ r382 + " "+"\n"+
EncodeColor( colorWhite)  + "  23%   =  "    +     EncodeColor(45)+ r236+ " " +"\n"+
EncodeColor( colorYellow) + "  Sup   =   "    +     EncodeColor(34)+ p00 + " " ;}
GraphXSpace=5;

///////////////////////////////// End of code/////////////////
Best of luck