21 August 2011

Afl links

http://www.wisestocktrader.com/indicators/2023-auto-target

Z SCORE INDICATOR COLOR CODED TO IDENTIFY EASILY OVER BOUGHT AND OVER SOLD..


_SECTION_BEGIN("ZSCORE");
periods = 20;
ZScore = ( Close - MA( Close, periods ) ) / StDev( Close, periods );
color = IIf( ZSCORE >=3.0, ColorRGB(255,0,0),IIf( ZSCORE >=2.75, ColorRGB(0,255,0),IIf( ZSCORE >=2.5, ColorRGB(0,0,255),
IIf( ZSCORE >=2.25, ColorRGB(240,200,13),IIf( ZSCORE >=2,ColorRGB(255,22,160),IIf( ZSCORE >=0,ColorRGB(126,126,184),

IIf( ZSCORE <=-3.0, ColorRGB(255,0,0),IIf( ZSCORE <=-2.75, ColorRGB(0,255,0),IIf( ZSCORE <=-2.5, ColorRGB(0,0,255), IIf( ZSCORE <=-2.25, ColorRGB(240,200,13),IIf( ZSCORE <=-2,ColorRGB(255,22,160),ColorRGB(126,126,184)))))))))))); Plot( ZScore, "ZScore",color, ParamStyle("Style",styleHistogram |styleThick|styleNoTitle ,maskAll) ); Plot(2, "2", colorBlueGrey,4096); Plot(0, "0", colorBlueGrey,4096 ); Plot(-2, "-2", colorBlueGrey,4096); _SECTION_END(); Auto Target for Amibroker (AFL) I like to plot auto-target and see how far a price possibly up or down. You can set your own target. Pick the lowest and the highest of a trend, and this indicator will autocalculate the target. Enjoy. _SECTION_BEGIN("Auto Target Levels"); GraphXSpace=1; Plot(C,"", colorWhite,styleCandle); // Get values for target levels StartBar=SelectedValue(BarIndex()); FinishBar = EndValue( BarIndex() ); i = startbar; period = FinishBar - StartBar; Lo =LLV(L,period); Hi = HHV(H,period); Line0 = 0; Line1 = 0; //Target resisten 1 Line2 = 0; //Target resisten 2 Line3 = 0; //Target resisten 3 Line4 = 0; //Target support 1 Line5 = 0; //Target support 2 Line6 = 0; // Target support 3 Line100 = 0; for( i = startbar; i < finishbar; i++ ) { if(EndValue(C) Ref(C, -1);
DnTick = C < Ref(C, -1); SelBI = SelectedValue(BarIndex()) ; TotUpTick = 0; for(i = SelBI; i < BarCount; i++) { TotUpTick = TotUpTick + UpTick[i]; } ConsecCZ10UP = BarsSince(C <= Ref(C,-1)); ConsecCZ10Dn = BarsSince(C >= Ref(C,-1));
updncz10=(Conseccz10up-Conseccz10dn);
Plot(1,"",colorBlueGrey,styleLine|styleNoLabel|styleNoTitle);
Plot(0,"",ColorRGB(150,150,150),styleDashed|styleLine|styleNoLabel|styleNoTitle);
Plot(-1,"",colorBlueGrey,styleLine|styleNoLabel|styleNoTitle);

Plot(updncz10,"UptickDntick",IIf(updncz10>0,colorBlue,colorRed),styleHistogram|styleThick);
PlotOHLC(1,1,-1,-1,"",ColorRGB(20,20,25),styleCloud|styleNoLabel|styleNoTitle,Null,Null,0,-5);


Price Sup Res



_SECTION_BEGIN("Resistance");

HaClose =EMA((O+H+L+C)/4,3);
HaOpen = AMA( Ref( HaClose, -1 ), 0.5 );
HaHigh = Max( H, Max( HaClose, HaOpen ) );
HaLow = Min( L, Min( HaClose, HaOpen ) );
Temp = Max(High, HaOpen);
Temp = Min(Low,HaOpen);

supres=ParamToggle("Sup_Res","No|Yes",1);
if(supres)
{


Prd1=Param("Res_Period1",2,0,200,1);

test = TEMA ( High , Prd1 ) ;

PK = test > Ref(test,-1) AND Ref(test,1) < High;//Peak PKV0 = ValueWhen(PK,haHigh,0);//PeakValue0 PKV1 = ValueWhen(PK,haHigh,1);//PeakValue1 PKV2 = ValueWhen(PK,haHigh,2);//PeakValue2 MPK = PKV2 < PKV1 AND PKV1 > PKV0 ;//MajorPeak

MPKV = ValueWhen(Ref(MPK,-1) == 0 AND MPK == 1, PKV1,1); //MajorPeakValue
MPKD = ValueWhen(Ref(MPK,-1) == 0 AND MPK == 1, DateNum(),1); //MajorPeakDate
SD = IIf(DateNum() < LastValue(MPKD,lastmode = True ), Null, LastValue(MPKV,Lastmode = True));//SelectedDate Plot(SD, "Resist1", colorGreen,ParamStyle("ResStyle1",styleLine|styleNoTitle,maskAll)); MPKV2 = ValueWhen(Ref(MPK,-1) == 0 AND MPK == 1, PKV1,2); //MajorPeakValue MPKD2 = ValueWhen(Ref(MPK,-1) == 0 AND MPK == 1, DateNum(),2); //MajorPeakDate SD2 = IIf(DateNum() < LastValue(MPKD2,lastmode = True ), Null, LastValue(MPKV2,Lastmode = True));//SelectedDate Plot(SD2, "Resist2", colorGreen,ParamStyle("ResStyle2",styleLine|styleNoTitle,maskAll)); MPKV3 = ValueWhen(Ref(MPK,-1) == 0 AND MPK == 1, PKV1,3); //MajorPeakValue MPKD3 = ValueWhen(Ref(MPK,-1) == 0 AND MPK == 1, DateNum(),3); //MajorPeakDate SD3 = IIf(DateNum() < LastValue(MPKD3,lastmode = True ), Null, LastValue(MPKV3,Lastmode = True));//SelectedDate Plot(SD3, "Resist3", colorGreen,ParamStyle("ResStyle3",styleLine|styleNoTitle,maskAll)); MPKV4 = ValueWhen(Ref(MPK,-1) == 0 AND MPK == 1, PKV1,4); //MajorPeakValue MPKD4 = ValueWhen(Ref(MPK,-1) == 0 AND MPK == 1, DateNum(),4); //MajorPeakDate SD4 = IIf(DateNum() < LastValue(MPKD4,lastmode = True ), Null, LastValue(MPKV4,Lastmode = True));//SelectedDate Plot(SD4, "Resist4", colorGreen,ParamStyle("ResStyle4",styleLine|styleNoTitle,maskAll)); MPKV5 = ValueWhen(Ref(MPK,-1) == 0 AND MPK == 1, PKV1,5); //MajorPeakValue MPKD5 = ValueWhen(Ref(MPK,-1) == 0 AND MPK == 1, DateNum(),5); //MajorPeakDate SD5 = IIf(DateNum() < LastValue(MPKD5,lastmode = True ), Null, LastValue(MPKV5,Lastmode = True));//SelectedDate Plot(SD5, "Resist5", colorGreen,ParamStyle("ResStyle5",styleLine|styleNoTitle,maskAll)); MPKV6 = ValueWhen(Ref(MPK,-1) == 0 AND MPK == 1, PKV1,6); //MajorPeakValue MPKD6 = ValueWhen(Ref(MPK,-1) == 0 AND MPK == 1, DateNum(),6); //MajorPeakDate SD6 = IIf(DateNum() < LastValue(MPKD6,lastmode = True ), Null, LastValue(MPKV6,Lastmode = True));//SelectedDate Plot(SD6, "Resist6", colorGreen ,ParamStyle("ResStyle6",styleLine|styleNoTitle,maskAll)); _SECTION_END(); HaClose =EMA((O+H+L+C)/4,3); HaOpen = AMA( Ref( HaClose, -1 ), 0.5 ); HaHigh = Max( H, Max( HaClose, HaOpen ) ); HaLow = Min( L, Min( HaClose, HaOpen ) ); Temp = Max(High, HaOpen); Temp = Min(Low,HaOpen); _SECTION_BEGIN("Support"); //SP=L > Ref(L,-1) AND Ref(L,1) < L;//Peak Prd2=Param("Sup_Period1",2,0,200,1); test2 = TEMA ( Low , Prd2 ) ; SP = Ref(test2,1) > Low AND test2 < Ref(test2,-1);//Peak SPV0 = ValueWhen(SP,haLow,0);//PeakValue0 SPV1 = ValueWhen(SP,haLow,1);//PeakValue1 SPV2 = ValueWhen(SP,haLow,2);//PeakValue2 //PKV5 = ValueWhen(PK,haHigh,5);//PeakValue5 //PKV6 = ValueWhen(PK,haHigh,6);//PeakValue6 MSP = SPV2 > SPV1 AND SPV1 < SPV0 ;//MajorPeak MSPV = ValueWhen(Ref(MSP,-1) == 0 AND MSP == 1, SPV1,1); MSPD = ValueWhen(Ref(MSP,-1) == 0 AND MSP == 1, DateNum(),1); SD = IIf(DateNum() < LastValue(MSPD,lastmode = True ), Null, LastValue(MSPV,Lastmode = True)); Plot(SD,"Support1", colorBrown,ParamStyle("SupportLine1",styleLine|styleNoTitle,maskAll)); MSPV2 = ValueWhen(Ref(MSP,-1) == 0 AND MSP == 1, SPV1,2); MSPD2 = ValueWhen(Ref(MSP,-1) == 0 AND MSP == 1, DateNum(),2); SD2 = IIf(DateNum() < LastValue(MSPD2,lastmode = True ), Null, LastValue(MSPV2,Lastmode = True)); Plot(SD2,"Support2", colorBrown,ParamStyle("SupportLine2",styleLine|styleNoTitle,maskAll)); MSPV3 = ValueWhen(Ref(MSP,-1) == 0 AND MSP == 1, SPV1,3); MSPD3 = ValueWhen(Ref(MSP,-1) == 0 AND MSP == 1, DateNum(),3); SD3 = IIf(DateNum() < LastValue(MSPD3,lastmode = True ), Null, LastValue(MSPV3,Lastmode = True)); Plot(SD3,"Support3", colorBrown,ParamStyle("SupportLine3",styleLine|styleNoTitle,maskAll)); MSPV4 = ValueWhen(Ref(MSP,-1) == 0 AND MSP == 1, SPV1,4); MSPD4 = ValueWhen(Ref(MSP,-1) == 0 AND MSP == 1, DateNum(),4); SD4 = IIf(DateNum() < LastValue(MSPD4,lastmode = True ), Null, LastValue(MSPV4,Lastmode = True)); Plot(SD4,"Support4", colorBrown,ParamStyle("SupportLine4",styleLine|styleNoTitle,maskAll)); MSPV5 = ValueWhen(Ref(MSP,-1) == 0 AND MSP == 1, SPV1,5); MSPD5 = ValueWhen(Ref(MSP,-1) == 0 AND MSP == 1, DateNum(),5); SD5 = IIf(DateNum() < LastValue(MSPD5,lastmode = True ), Null, LastValue(MSPV5,Lastmode = True)); Plot(SD5,"Support5", colorBrown,ParamStyle("SupportLine5",styleLine|styleNoTitle,maskAll)); MSPV6 = ValueWhen(Ref(MSP,-1) == 0 AND MSP == 1, SPV1,6); MSPD6 = ValueWhen(Ref(MSP,-1) == 0 AND MSP == 1, DateNum(),6); SD6 = IIf(DateNum() < LastValue(MSPD6,lastmode = True ), Null, LastValue(MSPV6,Lastmode = True)); Plot(SD6,"Support6", colorBrown,ParamStyle("SupportLine6",styleLine|stylehidden|styleNoTitle,maskAll)); } _SECTION_BEGIN("Price"); SetChartOptions(0,chartShowArrows|chartShowDates); _N(Title = StrFormat("{{NAME}} - {{INTERVAL}} {{DATE}} Open %g, Hi %g, Lo %g, Close %g (%.1f%%) {{VALUES}}", O, H, L, C, SelectedValue( ROC( C, 1 ) ) )); Plot( C, "Close", ParamColor("Color", colorBlack ), styleNoTitle | ParamStyle("Style") | GetPriceStyle() ); 10 % return by 15 day uptrend exploration for Amibroker (AFL) This is very simple formula for finding up trending stocks. Here one can take entry in a stock when It crosses 15 day sma and trades above it for at least 13 days. After taking entry on 13 days hold it for 1 to 1.5 week and will get 10% return here use upper bollinger band as exit and 15 day sma as stoploss. _SECTION_BEGIN("seasionality"); // Define label bar (x) position location #pragma nocache blankRightBars = 5; //insert actual blank right bars specified in Preferences barsInView = Status("lastvisiblebarindex") - Status("firstvisiblebarindex") - blankRightBars; Offset = Param("Offset Bar", 0.95, 0, 1, 0.01); textOffset = BarCount - (Offset * barsInView); TimeFrameSet( inDaily) ; HaClose =EMA((O+H+L+C)/4,3); HaOpen = AMA( Ref( HaClose, -1 ), 0.5 ); HaHigh = Max( H, Max( HaClose, HaOpen ) ); HaLow = Min( L, Min( HaClose, HaOpen ) ); X=Haopen Haclose, colorRed, IIf( X,7,14));
Plot(20,"", Color,styleHistogram|styleOwnScale|styleNoLabel, 0, 100 );
Plot( 21,"",colorBlack,styleOwnScale|styleArea|styleNoLabel,0, 100 );
PlotText("DAILY TREND", textoffset, 81.05, colorWhite);
CondB=Haopen > Haclose;CONDS=Haopen < Haclose; event1=condS; PlotShapes( IIf(event1 ,shapeDigit1,0) ,5, 0,81.0); event2=CondB; PlotShapes( IIf(event2 ,shapeDigit1,0) , 4, 0,81.0); TimeFrameRestore(); TimeFrameSet( inWeekly) ; HaClose =EMA((O+H+L+C)/4,3); HaOpen = AMA( Ref( HaClose, -1 ), 0.5 ); HaHigh = Max( H, Max( HaClose, HaOpen ) ); HaLow = Min( L, Min( HaClose, HaOpen ) ); X=HaOpen Haclose, colorRed, IIf( X,7,14));
Plot(40,"", Color, styleHistogram|styleOwnScale|styleNoLabel, 0, 100 );
Plot( 41,"",colorBlack,styleOwnScale|styleArea|styleNoLabel,0, 100 );
PlotText(" WEEKLY TREND", textoffset, 81.20, colorWhite);
CondB1=Haopen > Haclose;CONDS1=Haopen < Haclose; event3=condS1; PlotShapes( IIf(event3 ,shapeDigit2,0) ,5, 0,81.20); event4=CondB1; PlotShapes( IIf(event4 ,shapeDigit2,0) , 4, 0,81.2); TimeFrameRestore(); TimeFrameSet( 10*inDaily) ; HaClose =EMA((O+H+L+C)/4,3); HaOpen = AMA( Ref( HaClose, -1 ), 0.5 ); HaHigh = Max( H, Max( HaClose, HaOpen ) ); HaLow = Min( L, Min( HaClose, HaOpen ) ); X=Haopen Haclose, colorRed, IIf( X,7,14));
Plot(60,"", Color2, styleHistogram|styleOwnScale|styleNoLabel, 0, 100 );
Plot( 61,"",colorBlack,styleOwnScale|styleArea|styleNoLabel,0, 100 );
PlotText("2 WEEK TREND", textoffset, 81.40, colorWhite);
CondB2=Haopen > Haclose;CONDS2=Haopen < Haclose; event4=condS2; PlotShapes( IIf(event4 ,shapeDigit3,0) ,5, 0,81.40); event5=CondB2; PlotShapes( IIf(event5 ,shapeDigit3,0) , 4, 0,81.4); TimeFrameRestore(); TimeFrameSet(20*inDaily) ; HaClose =EMA((O+H+L+C)/4,3); HaOpen = AMA( Ref( HaClose, -1 ), 0.5 ); HaHigh = Max( H, Max( HaClose, HaOpen ) ); HaLow = Min( L, Min( HaClose, HaOpen ) ); X=Haopen Haclose, colorRed, IIf( X,7,14));
Plot(80,"", Color4, styleHistogram|styleOwnScale|styleNoLabel, 0, 100 );
Plot( 81,"",colorBlack,styleOwnScale|styleArea|styleNoLabel,0, 100 );
PlotText("MONTHLY TREND", textoffset, 81.55, colorWhite);
CondB3=Haopen > Haclose;CONDS3=Haopen < Haclose; event6=condS3; PlotShapes( IIf(event6 ,shapeDigit4,0) ,5, 0,81.65); event7=CondB3; PlotShapes( IIf(event7 ,shapeDigit4,0) , 4, 0,81.65); TimeFrameRestore(); Sell=CondB AND CondB1 AND CondB2 OR Condb3; Buy= CondS AND CondS1 AND CondS2 OR Conds3; //Cover= Cond1 AND Cond2 OR Cond2 AND Cond3 OR Cond1 AND Cond3 ; //Sell= Cond4 AND Cond5 OR Cond5 AND Cond6 OR Cond4 AND Cond6; Buy=ExRem (Buy,Sell);Sell=ExRem(Sell,Buy); PlotShapes(shapeCircle*Buy, colorGreen,0,81.85); PlotShapes(shapeCircle*Sell, colorRed,0,81.85); GraphXSpace = 15; //...................................... _SECTION_END(); _SECTION_END(); If stocks continue to trade above 15 day sma ones you get 10% return then second entry possible on 21 day. Seasionality for Amibroker (AFL) I have collect it from my friend. It can identify monthly, weekly and daily trend. _SECTION_BEGIN("seasionality"); // Define label bar (x) position location #pragma nocache blankRightBars = 5; //insert actual blank right bars specified in Preferences barsInView = Status("lastvisiblebarindex") - Status("firstvisiblebarindex") - blankRightBars; Offset = Param("Offset Bar", 0.95, 0, 1, 0.01); textOffset = BarCount - (Offset * barsInView); TimeFrameSet( inDaily) ; HaClose =EMA((O+H+L+C)/4,3); HaOpen = AMA( Ref( HaClose, -1 ), 0.5 ); HaHigh = Max( H, Max( HaClose, HaOpen ) ); HaLow = Min( L, Min( HaClose, HaOpen ) ); X=Haopen Haclose, colorRed, IIf( X,7,14));
Plot(20,"", Color,styleHistogram|styleOwnScale|styleNoLabel, 0, 100 );
Plot( 21,"",colorBlack,styleOwnScale|styleArea|styleNoLabel,0, 100 );
PlotText("DAILY TREND", textoffset, 81.05, colorWhite);
CondB=Haopen > Haclose;CONDS=Haopen < Haclose; event1=condS; PlotShapes( IIf(event1 ,shapeDigit1,0) ,5, 0,81.0); event2=CondB; PlotShapes( IIf(event2 ,shapeDigit1,0) , 4, 0,81.0); TimeFrameRestore(); TimeFrameSet( inWeekly) ; HaClose =EMA((O+H+L+C)/4,3); HaOpen = AMA( Ref( HaClose, -1 ), 0.5 ); HaHigh = Max( H, Max( HaClose, HaOpen ) ); HaLow = Min( L, Min( HaClose, HaOpen ) ); X=HaOpen Haclose, colorRed, IIf( X,7,14));
Plot(40,"", Color, styleHistogram|styleOwnScale|styleNoLabel, 0, 100 );
Plot( 41,"",colorBlack,styleOwnScale|styleArea|styleNoLabel,0, 100 );
PlotText(" WEEKLY TREND", textoffset, 81.20, colorWhite);
CondB1=Haopen > Haclose;CONDS1=Haopen < Haclose; event3=condS1; PlotShapes( IIf(event3 ,shapeDigit2,0) ,5, 0,81.20); event4=CondB1; PlotShapes( IIf(event4 ,shapeDigit2,0) , 4, 0,81.2); TimeFrameRestore(); TimeFrameSet( 10*inDaily) ; HaClose =EMA((O+H+L+C)/4,3); HaOpen = AMA( Ref( HaClose, -1 ), 0.5 ); HaHigh = Max( H, Max( HaClose, HaOpen ) ); HaLow = Min( L, Min( HaClose, HaOpen ) ); X=Haopen Haclose, colorRed, IIf( X,7,14));
Plot(60,"", Color2, styleHistogram|styleOwnScale|styleNoLabel, 0, 100 );
Plot( 61,"",colorBlack,styleOwnScale|styleArea|styleNoLabel,0, 100 );
PlotText("2 WEEK TREND", textoffset, 81.40, colorWhite);
CondB2=Haopen > Haclose;CONDS2=Haopen < Haclose; event4=condS2; PlotShapes( IIf(event4 ,shapeDigit3,0) ,5, 0,81.40); event5=CondB2; PlotShapes( IIf(event5 ,shapeDigit3,0) , 4, 0,81.4); TimeFrameRestore(); TimeFrameSet(20*inDaily) ; HaClose =EMA((O+H+L+C)/4,3); HaOpen = AMA( Ref( HaClose, -1 ), 0.5 ); HaHigh = Max( H, Max( HaClose, HaOpen ) ); HaLow = Min( L, Min( HaClose, HaOpen ) ); X=Haopen Haclose, colorRed, IIf( X,7,14));
Plot(80,"", Color4, styleHistogram|styleOwnScale|styleNoLabel, 0, 100 );
Plot( 81,"",colorBlack,styleOwnScale|styleArea|styleNoLabel,0, 100 );
PlotText("MONTHLY TREND", textoffset, 81.55, colorWhite);
CondB3=Haopen > Haclose;CONDS3=Haopen < Haclose; event6=condS3; PlotShapes( IIf(event6 ,shapeDigit4,0) ,5, 0,81.65); event7=CondB3; PlotShapes( IIf(event7 ,shapeDigit4,0) , 4, 0,81.65); TimeFrameRestore(); Sell=CondB AND CondB1 AND CondB2 OR Condb3; Buy= CondS AND CondS1 AND CondS2 OR Conds3; //Cover= Cond1 AND Cond2 OR Cond2 AND Cond3 OR Cond1 AND Cond3 ; //Sell= Cond4 AND Cond5 OR Cond5 AND Cond6 OR Cond4 AND Cond6; Buy=ExRem (Buy,Sell);Sell=ExRem(Sell,Buy); PlotShapes(shapeCircle*Buy, colorGreen,0,81.85); PlotShapes(shapeCircle*Sell, colorRed,0,81.85); GraphXSpace = 15; //...................................... _SECTION_END(); _SECTION_END(); OBV in isolation may not make much sense intraday, All this simple but effective indicator does is to create the shadows of the OBV in the form of 9 WMA and 21 WMA and the crossover of the OBV and shadows tells you to go long or short.As they say “Coming events cast their shadows before” _SECTION_BEGIN("OBV"); Plot( OBV(), _DEFAULT_NAME(), IIf( C > O, ParamColor("Up Color", colorGreen ), ParamColor("Down Color", colorRed ) ), ParamStyle( "Style") );
SetChartBkGradientFill( ParamColor("BgTop",colorBlack),ParamColor("BgBottom",colorBlack),ParamColor("Titleblock",colorLightGrey));

_SECTION_END();

_SECTION_BEGIN("WMA");
P = ParamField("Price field",-1);
Periods = Param("Periods", 15, 2, 300, 1, 10 );
Plot( WMA( P, Periods ), _DEFAULT_NAME(), ParamColor( "Color", colorCycle ), ParamStyle("Style") );
_SECTION_END();

_SECTION_BEGIN("OBV1");
Plot( OBV(), _DEFAULT_NAME(), IIf( C > O, ParamColor("Up Color", colorGreen ), ParamColor("Down Color", colorBlue ) ), ParamStyle( "Style") );
_SECTION_END();

Buy = Cross(OBV(),WMA(OBV(),9));
Sell = Cross(WMA(OBV(),9),OBV());

Short = Sell;
Cover = Buy;
PlotShapes(shapeUpArrow*Buy,colorGreen);

PlotShapes(shapeDownArrow*Sell,colorRed);


_SECTION_BEGIN("WMA1");
P = ParamField("Price field",-1);
Periods = Param("Periods", 15, 2, 300, 1, 10 );
Plot( WMA( P, Periods ), _DEFAULT_NAME(), ParamColor( "Color", colorCycle ), ParamStyle("Style") );
_SECTION_END();




Trade Entry with Bollinger Bands in down-market for Amibroker (AFL)


Bollinger bands are really fantastic in providing with a limiting value or a standard deviation of the price-hikes. It is also found that if two Bollinger Bands of different parameters are overlapped over one another than it gives a finer edge for the trade entry.

There are actually two Bollingers used in the formula, but only the bottom part is drawn as this formula depicts the entries in the down trend of the market only. It possibly can well be extended for the upmarket. If anyone can do that addition it’ll be appreciated to have it here too :)

I have tried to mimic that in the formula below. Please do feel free to change the formula or comment your findings and pitfalls or benefits of this indicator in your trade.

Enjoy the indicator.

Disclaimer: The author and the site do not guarantee any accuracy of this indicator as well as any loss or profit incurring from using it. Please use only for study and entertainment purpose.


SetFormulaName( "NMN Bollinger Entry" );
SetChartOptions( 1, chartShowDates | chartWrapTitle );

_SECTION_BEGIN( "Bollinger Parameters" );
P = ParamField( "Bollinger Band on", 3 );
Pd1 = Param( "BB 1 Period", 10, 3, 100, 1 );
W1 = Param( "BB 1 Width", 1.35, 0, 50, 0.01 );
Pd2 = Param( "BB 2 Period", 15, 3, 100, 1 );
W2 = Param( "BB 2 Width", 2, 0, 50, 0.01 );

Plot( P, "Price Chart", IIf( O < C, colorBrightGreen, colorRed ), styleCandle ); Plot( bb1 = BBandBot( P, Pd1, W1 ), "Inner/Top Bollinger", colorLightOrange, styleLine ); Plot( bb2 = BBandBot( P, Pd2, W2 ), "Outer/Btm Bollinger", colorLightGrey, styleLine ); _SECTION_END(); _SECTION_BEGIN( "Candle-Bollinger positions" ); DCT = Param( "Down Candle triggger", 1.5, 0.01, 10, 0.01 ); UCT = Param( "Up Candle triggger", 1.5, 0.01, 10, 0.01 ); DnCandle = ( O >= C );
UpCandle = NOT DnCandle; // ( O < C ) // Signals OpenAboveBB1 = O > bb1;
OpenBelowBB1 = O < bb1; CloseAboveBB1 = C > bb1;
CloseBelowBB1 = C < bb1; CloseBelowBB2 = C < bb2; CloseAboveBB2 = C > bb2;

OpenBelowBB2 = O < bb2; OpenAboveBB2 = O > bb2;

OpenBetweenBB = ( bb1 > O ) AND ( bb2 < O ); CloseBetweenBB = ( bb1 > C ) AND ( bb2 < C ); CandleBetweenBB = OpenBetweenBB AND CloseBetweenBB ; DnCandleAcrossBB = ( O > bb1 ) AND ( bb2 > C ) ;
UpCandleAcrossBB = ( C > bb1 ) AND ( bb2 > O ) ;

CandleBelowBB2 = OpenBelowBB2 AND CloseBelowBB2 ;

TotallyBelowBB1 = ( H < bb1 ) AND ( H > bb2 ) ; // without the 2nd condn. its same as 'TotallyBelowBB2'
TotallyBelowBB2 = ( H < bb2 ); TotallyBetweenBB = ( H < bb1 ) AND ( L > bb2 );

CandleBody = IIf( DnCandle, ( O - C ), ( C - O ) ); //CandleBody = IIf(CandleBody==0,0.000001,CandleBody);
FullCandle = ( H - L );
CandleWick = FullCandle - CandleBody;
TopWick = H - IIf( DnCandle, O, C ) ;
BtmWick = IIf( DnCandle, C, O ) - L ;

LastIsDnCandle = Ref( DnCandle, -1 );
LastIsUpCandle = Ref( UpCandle, -1 );

BBGap = ( bb1 - bb2 ); // Gap between the overlapping bollinger-bands

BB_Candle_ratio = BBGap / CandleBody ;
Candle_BB_ratio = CandleBody / BBGap ;
WickCandleRatio = CandleWick / CandleBody ;
CandleWickRatio = CandleBody / CandleWick ;
WickTopBtmRatio = TopWick / BtmWick ;

bb1topcut = IIf( DnCandle, ( O - bb1 ), ( C - bb1 ) );
bb2topcut = IIf( DnCandle, ( O - bb2 ), ( C - bb2 ) );

bb1cut = bb1topcut / CandleBody ;
CandleCutByBB1 = IIf( DnCandle, ( bb1 > C ) AND ( bb1 < O ), ( bb1 > O ) AND ( bb1 < C ) ) ; bb1cutHi = ( abs( bb1cut ) <= ( Param( "High cut by BB1 (in %)", 30, 1, 100, 1 ) / 100 ) ) AND CandleCutByBB1 ; bb1cutLo = ( abs( bb1cut ) >= ( Param( "Low cut by BB1 (in %)", 50, 1, 100, 1 ) / 100 ) ) AND CandleCutByBB1 ;

bb2cut = bb2topcut / CandleBody ;
CandleCutByBB2 = IIf( DnCandle, ( bb2 > C ) AND ( bb2 < O ), ( bb2 > O ) AND ( bb2 < C ) ); bb2cutHi = abs( bb2cut ) <= ( Param( "High cut by BB2 (in %)", 50, 1, 100, 1 ) / 100 ) AND CandleCutByBB2 ; bb2cutLo = abs( bb2cut ) >= ( Param( "Low cut by BB2 (in %)", 60, 1, 100, 1 ) / 100 ) AND CandleCutByBB2 ;

// Down candle 'buy' logic-parts
DnCandle_below_both_BB = DnCandle AND OpenBelowBB2 AND CloseBelowBB2 ;
DnCandle_above_both_BB = DnCandle AND CloseAboveBB1 AND OpenAboveBB1 ;
DnCandle_between_BB = DnCandle AND CandleBetweenBB ;
DnCandle_Across_BB = DnCandleAcrossBB AND ( CandleBody > ( BBGap * DCT ) ) ;
//DnCandleSpansBB = ( O > bb1 ) AND ( C < bb2 ) ; // Up Candle 'buy' logic-parts UpCandleBelowBothBB = UpCandle AND OpenBelowBB2 ; UpCandleAboveBothBB = UpCandle AND OpenAboveBB1 ; UpCandle_between_BB = UpCandle AND ( ( bb1 > C ) AND ( bb2 < C ) ) AND ( ( bb1 > O ) AND ( bb2 < O ) ); UpCandleBetweenBB = UpCandle AND ( bb1 > O ) AND ( bb2 < O ) AND ( bb2 > C );
UpCandle_Across_BB = UpCandleAcrossBB AND ( CandleBody > ( BBGap * UCT ) ) ;

/*--------------------------------------------
TRADE LOGICS
---------------------------------------------*/

Buy0 = ( DnCandle AND bb1cut < 0.7 AND bb1cut > 0.0 AND WickCandleRatio > 0.75 AND WickCandleRatio < 1.0 ) OR ( ( CandleBetweenBB OR CandleBelowBB2 ) AND ( CandleBody > 1 ) AND ( BBGap < 100 ) AND ( IIf( DnCandle, TopWick CandleBody * 2, TopWick > BtmWick AND TopWick > CandleBody * 2 ) ) ) OR
( UpCandle AND ( TopWick > BtmWick ) AND ( TopWick > CandleBody * 2 ) AND ( ( CandleCutByBB1 AND C > bb2 ) OR CandleBetweenBB OR CandleBelowBB2 ) ) OR
( UpCandle AND bb1cutHi AND bb2cutHi );

Buy1 = DnCandle AND bb1cutHi AND BBGap <= CandleBody ; Buy2 = OpenBelowBB1 AND DnCandle_Across_BB ; Buy3 = DnCandle_Across_BB AND ( ( bb1cut < .5 ) AND ( bb2cut > .5 ) ) ;
Buy4 = DnCandle AND bb2cutHi ;

Buy5 = TotallyBelowBB2 AND ( BBGap >= 30 ) AND GapDown();
Buy6 = ( TotallyBelowBB2 OR ( UpCandle AND CloseBelowBB2 ) ) AND ( BBGap <= CandleBody ); Buy7 = ( bb1cut < 0 AND bb2cut > 0 AND bb2cut <= 1.0 ) OR ( UpCandle_Across_BB AND bb2cut > 0.6 ) ;
Buy8 = DnCandle_below_both_BB AND ( ( BBGap <= CandleBody ) OR ( CandleBody == 0 ) ); Buy = Buy0 OR Buy1 OR Buy2 OR Buy3 OR Buy4 OR Buy5 OR Buy6 OR Buy7 OR Buy8; Sell = IIf( GroupID( 1 ) == "Z", Ref( Buy, -10 ), Ref( Buy, -3 ) );//( Ref( Buy, -10 ) AND (GroupID(1)== "Z") ) OR Ref( Buy, -3 ); // back log : 4 day maturity profit/loss : it is a requirement in BD-DSE market Clog = ( 100 * ( C - Ref( C, -3 ) ) / Ref( C, -3 ) ); MaturedSince = IIf( GroupID( 1 ) == "Z", Ref( C, -10 ), Ref( C, -3 ) ); sYield = IIf( Buy, C - HHV( O, 15 ), C - MaturedSince ); Ypercent = ( sYield / MaturedSince ) * 100 ; YpcStr = NumToStr( Ypercent, 12.2 ) + " %"; Yrate = Ypercent / IIf( GroupID( 1 ) == "Z", 11, 4 ); YrateStr = NumToStr( Yrate, 12.2 ) + " %" ; Strength = Buy0 + Buy1 + Buy2 + Buy3 + Buy4 + Buy5 + Buy6 + Buy7 + Buy8; // - Sell; Trade = WriteIf( Buy == True, "Buy", WriteIf( Sell == True, "Sell", "N" ) ); // [Indicator] shape0 = Buy0 * shapeUpTriangle ; shape1 = Buy1 * shapeSmallUpTriangle ; shape2 = Buy2 * shapeSmallUpTriangle ; shape3 = Buy3 * shapeSmallUpTriangle ; shape4 = Buy4 * shapeSmallUpTriangle ; shape5 = Buy5 * shapeSmallUpTriangle ; shape6 = Buy6 * shapeSmallUpTriangle ; shape7 = Buy7 * shapeSmallUpTriangle ; shape8 = Buy8 * shapeSmallUpTriangle ; sellshape = Sell * shapeDownArrow ; shape0color = colorViolet; shape1color = colorBrightGreen; shape2color = colorViolet; shape3color = colorGreen; shape4color = colorRed; shape5color = colorPink; shape6color = colorLavender; shape7color = colorAqua; shape8color = colorDarkRed; sellshapecolor = colorRose; BuySellLetter = IIf( Buy, colorDarkGreen, IIf( Sell, colorRed, colorDefault ) ); BuySellBG = IIf( Buy, colorPaleGreen, IIf( Sell, colorDarkRed, colorDefault ) ); /*------------------------------------------ Automatic Analysis -------------------------------------------*/ TransmitOrder = False; // Set to True to really trade! bi = BarIndex(); cid = ( SelectedValue( bi ) - bi[ 0 ] ); // candle identification Filter = ( Buy OR Sell ) ;//AND Status( "lastbarinrange" ) ; // chooses only the last bar i.e., day or period AASettings = Status( "action" ); if ( AASettings == actionIndicator ) { // [Indicator] PlotShapes( shape0, shape0color, 0, L, -42 ); PlotShapes( shape1, shape1color, 0, L, -12 ); PlotShapes( shape2, shape2color, 0, L, -16 ); PlotShapes( shape3, shape3color, 0, L, -20 ); PlotShapes( shape4, shape4color, 0, L, -24 ); PlotShapes( shape5, shape5color, 0, L, -28 ); PlotShapes( shape6, shape6color, 0, L, -32 ); PlotShapes( shape7, shape7color, 0, L, -34 ); PlotShapes( shape8, shape8color, 0, L, -38 ); PlotShapes( sellshape, sellshapecolor, 0, H, -24 ); } else if ( AASettings == actionCommentary ) { // [Commentary] printf( "Study of parameters.\n---------------------------\n" ); printf( "High @ = %g\n", H ) ; if ( DnCandle[cid] ) { printf( "Open @ = %g\n", O ) ; printf( "Close @ = %g (4dM %g)\n", C, sYield ) ; } else { printf( "Close @ = %g (4dM %g)\n", C, sYield ) ; printf( "Open @ = %g\n", O ) ; } printf( "Low @ = %g\n\n", L ) ; printf( "Volume = %g\n\n", V ) ; printf( "Body of the candle = %g\n", CandleBody ); printf( "Top Wick Size = %g\n", TopWick ); printf( "Bottom Wick Size = %g\n", BtmWick ); printf( "Wick Size = %g\n", CandleWick ); printf( "Full-candle Size = %g\n\n", FullCandle ); printf( "..........................\nCandle type = " + WriteIf( DnCandle, "Down / Red / Black\n\n", "Up / Green / White\n\n" ) ); printf( "Candle:wick ratio = 1 : %g\n", CandleWickRatio ); printf( "Wick:candle ratio = 1 : %g\n\n", WickCandleRatio ); printf( "TopWick:BtmWick ratio = 1 : %g\n\n", WickTopBtmRatio ); printf( "Gap between Bollingers = %g\n\n", BBGap ); printf( "Candle:BBGap ratio = 1 : %g\n", round( Candle_BB_ratio * 100 ) / 100 ); printf( "BBGap:Candle ratio = 1 : %g\n\n", round( BB_Candle_ratio * 100 ) / 100 ) ; printf( WriteIf( Candle_BB_ratio > 1.0, "The 'candle is larger' than the bollinger gap.\n", "" ) +
WriteIf( BB_Candle_ratio < 0, "Candle is away from the Bollinger-gap\n", "" ) + WriteIf( BB_Candle_ratio > 1.00, "The Bollinger gap is wide enough to hold the candle in.\n", "" ) +
WriteIf( CandleBetweenBB, "Candle is inside the bollinger band.\n", "" ) +
WriteIf( ( DnCandle AND OpenBelowBB2 ) OR ( UpCandle AND CloseBelowBB2 ), "The 'candle is outside' and 'below' the bollinger gap.\n", "" ) +
WriteIf( ( DnCandle AND CloseAboveBB1 ) OR ( UpCandle AND OpenAboveBB1 ), "The 'candle is outside' and 'above' the bollinger gap.\n", "" ) +
"..........................\n"
);

if ( DnCandle[cid] )
{
Commentary = "\nBlack / Red / Down Candle :\n~~~~~~~~~~~~~~~~~~" ;

if ( CloseAboveBB1[cid] )
Commentary += "\nCandle closed above Top bollinger." ;
else
if ( OpenBelowBB2[cid] )
Commentary += "\nCandle opens below Bottom Bollinger,\nthus a 'below bollinger candle'.";
else
if ( CloseBetweenBB[cid] AND OpenAboveBB1[cid] )
Commentary += "\nCandle is cut by the top bollinger\nand resides above bottom bollinger.";
else
if ( OpenBetweenBB[cid] AND CloseBelowBB2[cid] )
Commentary += "\nCandle is cut by the bottom bollinger\nand resides below top bollinger.";
else
if ( OpenAboveBB1[cid] AND CloseBelowBB2[cid] )
Commentary += "\nCandle cut by both bollingers.";
else
Commentary += "\nCandle is lying between the bollingers.";
}
else
{
Commentary = "\nWhite / Green / Up Candle :\n~~~~~~~~~~~~~~~~~~" ;

if ( OpenAboveBB1[cid] )
Commentary += "\nCandle started above Top bollinger." ;
else
if ( CloseBelowBB2[cid] )
Commentary += "\nCandle closed below Bottom Bollinger.";
else
if ( OpenBetweenBB[cid] AND CloseAboveBB1[cid] )
Commentary += "\nCandle is cut by the top bollinger\nand starts above bottom bollinger.";
else
if ( CloseBetweenBB[cid] AND OpenBelowBB2[cid] )
Commentary += "\nCandle is cut by the bottom bollinger\nand ends below top bollinger.";
else
if ( CloseAboveBB1[cid] AND OpenBelowBB2[cid] )
Commentary += "\nCandle cut by both bollingers.";
else
Commentary += "\nCandle is lying between the bollingers.";
}

if ( DnCandle_between_BB[cid] )
Commentary += "\nCandle enclosed inside the Bollingers!";
else
if ( DnCandleAcrossBB[cid] OR UpCandleAcrossBB[cid] )
Commentary += "\nCandle spans across the Bollingers.";

printf( "\nbb1cut = %g%% (O - bb1) = %g", /**/bb1cut , bb1topcut );/** /round( bb1cut*10000 ) / 100, bb1topcut );/**/

printf( "\nbb2cut = %g%% (O - bb2) = %g\n", /**/bb2cut, bb2topcut );/** /round( bb2cut*10000 ) / 100, bb2topcut );/**/

printf( Commentary + "\n\n" );
}
else
if ( AASettings == actionScan )
{
// Scan
}
else
if ( AASettings == actionExplore )
{
// Exploration
AddTextColumn( GroupID( 1 ), "Cat", formatChar, IIf( GroupID( 1 ) == "Z", colorWhite, colorDefault ), IIf( GroupID( 1 ) == "Z", colorRed, colorDefault ), 30 );

AddColumn( IIf( GroupID( 1 ) == "Z", Ref( C, -10 ), Ref( C, -3 ) ), "Start Price", 3.2, colorBlue, colorDefault, -1 );
AddColumn( C, "Close", 3.2, colorBlue, colorDefault, -1 );

AddColumn( V, "Total Vol.", 8 ) ;

AddColumn( Strength, "Strength", 1, colorRed, colorDefault, 40 );
// AddTextColumn( Trade, "Trade", 1, BuySellLetter, BuySellBG, -1 );
AddTextColumn( WriteIf( Buy, "Buy", "" ), "Buy", 1, BuySellLetter, IIf( Buy, colorPaleGreen, colorDefault ), -1 );
AddTextColumn( WriteIf( Sell, "Sell", "" ), "Sell", 1, BuySellLetter, IIf( Sell, colorDarkRed, colorDefault ), -1 );

AddColumn( sYield, "Avg.Yield", 1.2, IIf( Buy, colorLightGrey, IIf( sYield < 0, colorRed, colorGreen ) ), colorDefault, -1 );
AddTextColumn( YpcStr, "Yield %", 1, IIf( Buy, colorLightGrey, IIf( Ypercent < 0, colorRed, colorGreen ) ), colorDefault, -1 );
AddTextColumn( YrateStr, "Yield rate", 1, IIf( Buy, colorLightGrey, IIf( Yrate < 0, colorRed, colorGreen ) ), colorDefault, -1 );

AddColumn( round( ROC( Close, 4 )*100 ) / 100, "ROC(4)", 1.2, colorDefault, colorDefault, -1 );

}
else
if ( AASettings == actionBacktest )
{
// Backtest
}

_SECTION_END();

Title = "{{NAME}} - {{INTERVAL}} - {{DATE}} - {{VALUES}}" + "\n";

No comments:

My Blog List

Total Pageviews

Search This Blog

Followers