Thanks for you hope
I have facing some problem in this afl please modify and send me Sir
1. in this area selling arrow not displayed
2. my taget condition is
tgt1=breakoutprice+(breakoutprice*0.618%)
tgt2=breakoutprice+(breakoutprice*1%)
But here tgt1=openprice+(openprice*0.618%)
same as tgt2=openprice+(openprice*1%)
3. if possible stoploss value starts buy or sell arrow
like following afl or Atr or Parabolic sar stoploss
4.End of day should close our position new day again new signal only
_SECTION_BEGIN("buy_sell_display_engine_with_atr_stop");
// Trade simulation. Helps you to record your real trades and test new trading approaches without any programming skills.
// Copyright Abnash Singh 20th February 2012
// You can download and use this AFL, but do not make any changes in the copyright information, even if you make changes in the code
// Upto 9 trades can be plotted in any time frame.
// Once installed on Amibroker insert the vertical Study lines with labels b1, b2 etc for Buy signals AND s1, s2 etc for Short signals AND
// e1, e2 etc for the exit signals. The AFL automatically recognises the context of the exit for a Buy OR Sell Signal.
// Remember that the Buy AND Sell signals are generated one bar after the vertical position of the Study line.
// This has no practical impact on entering your trade signals.
// Next you can modify the trade entry AND exit values, if required in the parameter windows AND you have your trade journal ready!
// To re-use the AFL for another trading session, please remember to delete all the existing studies,
// by right clicking in the display area AND selecting delete al studies AND resetting the parameter window.
//Original work created by Abnash Singh
[email protected]
SetBarsRequired(1000, 0 );
Choosesystem=ParamList("Signal from which System?","X|Y");
setbuy = ParamTrigger("Buy", "Buy" );
setsell = ParamTrigger("Sell", "Sell" );
setshort = ParamTrigger("Short", "Short" );
setcover = ParamTrigger("Cover", "Cover" );
clear = ParamTrigger("Clear", "Clear" );
clearall = ParamTrigger("Clear All", "Clear All" );
Yearabove=Param("From Year",2012,2000,2020,1);
Monthabove=Param("From Month",0,0,12,1);
Dateabove=Param("From Date",0,0,31,1);
showcandlechart=ParamList("Show Candle chart","YES|NO");
stylecndl=ParamList("Bar/Candle chart","BAR|CANDLE");
BarLum1 = Param("Bar Color Intensity", 8, 0, 10,01);
LineColor = ColorBlend(ColorRGB(50,60,60), ColorRGB(50,60,60), BarLum1);
UpBarColor = ColorBlend(ColorRGB(5,36,5), ColorRGB(10,75,10), BarLum1);
DnBarColor = ColorBlend(ColorRGB(36,5,5), ColorRGB(75,10,10), BarLum1);
bi = BarIndex();
qty = LastValue( bi );
y = Year();
m = Month();
d = Day();
r = Hour();
e = Minute();
dnum=(m+10)*100+d;
tnum=TimeNum()+100000;
sby = SelectedValue( y );
sbm = SelectedValue( m );
sbd = SelectedValue( d );
sbr = SelectedValue( r );
sbe = SelectedValue( e );
sdnum = SelectedValue( dnum );
stnum = SelectedValue( tnum );
qty = LastValue( bi );
Varname = Name()+Choosesystem+sby+sdnum+stnum;
if( setbuy )
{
StaticVarSet( Varname, 1 );
}
if( setsell )
{
StaticVarSet( Varname, -1 );
}
if( setshort )
{
StaticVarSet( Varname, -2 );
}
if( setcover )
{
StaticVarSet( Varname, 2 );
}
if( clear )
{
StaticVarRemove( Varname );
}
if( clearall )
{
for( i = 0; i < qty; i++ )
{
StaticVarRemove( Name()+Choosesystem+y
+dnum+tnum);
}
}
Buy = Sell = Short = Cover = exit =0;
profit=sessprofit=priceatbuy=priceatshort=priceatexit=tradecount=lastsig=pricetouse=maxprofit=lastmax=0;
shape=xp=ep=cp=0;
tradeline=Null;
BarColor = IIf(Close > Open, UpBarColor, DnBarColor);
SetBarFillColor(BarColor);
avp=(O+C)/2;//you can choose to have avp=c instead of average
if (stylecndl=="BAR")stylec=styleBar;
else stylec=styleCandle;
if (showcandlechart=="YES")
{
Plot(C, "Close", colorWhite, styleNoTitle | stylec);
}
avp=(O+C)/2;
//ATR Stop begin
Multiple = Param( "Multiple", 3, 0.5, 10, 0.1 ); // How many ATR's to be allowed below the highest high since latest "buy" bar
ATRPeriods = Param( "ATR Periods", 20, 1, 50, 1 ); // How many periods to use for the ATR
Showtarget = ParamList ("Show Target Milestones ","Yes|No");
Step = Param( "Step for target milestones", 20, 0,50, 10 );// Step for profit progress, default is 20 points.
stopArray = Null;
atrArray = ATR( ATRPeriods );
HHArray = Null;
LLArray = Null;
exitArray = Null;
trendDirection = 0;
//ATr Stop end
dmy=ATR(10);
for (i=1;i<BarCount-1;i++)
{
if (y>=Yearabove AND (Monthabove==0 OR m>=Monthabove) AND (Dateabove==0 OR d>=Dateabove))
{
sig = StaticVarGet( Name()+Choosesystem+y+dnum+tnum);
if( sig == 1 ) Buy[ i ] = True;
if( sig == -2 ) Short[ i ] = True;
if (sig==-1 OR sig==2)exit=True;
}
if (Lastsig!=0 AND !Buy AND !Short)tradeline=tradeline[i-1];
if (Buy)
{
// we just triggered a long trade. Set up starting values
stopArray = High - ( Multiple * atrArray );
HHArray = High; // initialize the highest high array
trendDirection = 1; // going long. Base bar flag is now set.
if (xp>0)priceatbuy=tradeline=xp;
else priceatbuy=tradeline=avp;//defaulting price to average price.
if (Lastsig==-1)
{
profit=priceatshort-priceatbuy;
sessprofit=sessprofit+profit;
PlotText(WriteVal(profit,1.0),i,H+10,colorYellow);
}
Lastsig=1;
}
if (Short)
{
// we just triggered a short trade. Set up starting values
stopArray = Low + ( Multiple * atrArray );
LLArray = Low; // initialize the lowest low array
trendDirection = 0 - 1; // going short. Base bar.
// PlotText("1",i,H+10,colorWhite);
if (xp>0)priceatshort=tradeline=xp;
else priceatshort=tradeline=avp;//defaulting price to average price.
if (Lastsig==1)
{
profit=priceatshort-priceatbuy;
sessprofit=sessprofit+profit;
PlotText(WriteVal(profit,1.0),i,H+2*dmy,colorYellow);
}
Lastsig=-1;
}
if (Lastsig==0)tradeline=Null;
if (exit)
{
if (ep>0)priceatexit=ep;
else priceatexit=avp;
if (Lastsig==1)
{
profit= priceatexit-priceatbuy;
Sell=1;
}
else if (Lastsig==-1)
{
profit= priceatshort-priceatexit;
Cover=1;
}
sessprofit=sessprofit+profit;
PlotText(WriteVal(profit,1.0),i,H+2*dmy,colorYellow);
Lastsig=profit=0;
}
if (Lastsig==1)Cp=avp-priceatbuy;
else if (Lastsig==-1)Cp=priceatshort-avp;
exitArray = 0;
if ( trendDirection > 0 )
{
// keep track of the highest high, highest close, highest low, etc..
if ( trendDirection > 1 )
{
// We are in the trade (2nd day or later)
if ( Low < stopArray[i-1] OR exit)
{
//stop got hit. Reset the trade.
trendDirection = 0; // OK. wait until we trigger another trade.
exitArray = 1;
if (Lastsig==1)
{
if (ep>0)pricetouse=ep;
else pricetouse=avp;
profit=pricetouse-priceatbuy;
sessprofit=sessprofit+profit;
PlotText(WriteVal(profit,1.0),i,H+2*dmy,colorYellow);
}
Lastsig=0;
}
else
{
// keep track of the HHV since trade was entered.
if ( High > HHArray[i-1] )
HHArray = High;
else
HHArray = HHArray[i-1];
// Compute the stop based on the HHV.
stopArray = HHArray - ( Multiple * atrArray );
}
}
trendDirection = trendDirection + 1;
}
if ( trendDirection < 0 )
{
// keep track of the lowest low, lowest close, lowest high, etc..
if ( trendDirection < 0 - 1 )
{
// We are in the trade (2nd day or later)
if ( High > stopArray[i-1] OR exit )
{
// our stop got hit. Reset the trade.
trendDirection = 0;
exitArray = 0 - 1;
if (Lastsig==-1)
{
if (ep>0)pricetouse=ep;
else pricetouse=avp;
profit=priceatshort-pricetouse;
sessprofit=sessprofit+profit;
PlotText(WriteVal(profit,1.0),i,H+2*dmy,colorYellow);
}
Lastsig=0;
}
else
{
// keep track of the LLV since trade was entered.
if ( Low < LLArray[i-1] )
LLArray = Low;
else
LLArray = LLArray[i-1];
// Compute the stop based on the LLV.
stopArray = LLArray + ( Multiple * atrArray );
}
}
trendDirection = trendDirection - 1;
}
if ( trendDirection == 0 )
{
stopArray = 0;
LLArray = 0;
HHArray = 0;
}
if(Buy OR Short)Maxprofit=lastmax=0;
if (Cp>Maxprofit)Maxprofit=Cp;
//Profit milestones in steps of 20. Can be modified to be in steps of ATR's by replacing 20 with a variable ATR value
//Profits 2 contains the running profits. This can be used to devise a peak profit based exit.
if (exitarray==0 AND int(Maxprofit/step)*step>Lastmax AND Maxprofit>=step AND showtarget=="Yes")
{
Lastmax=int(Maxprofit/step)*step;
PlotText(WriteVal(int(Maxprofit/step)*step,1.0),i,H+2*ATRarray,colorYellow);
}
}
if (Lastsig!=0)sessprofit=sessprofit+Cp[i-1];
Plot(avp, "Mid", ColorRGB(120,120,120), styleNoTitle );
Plot(Tradeline, "Trade price", colorBlue );
shapebuy = IIf(Buy,shapeUpArrow,Null);
Shapesell= IIf(Sell,shapeHollowDownArrow,Null);
shapeshort = IIf(Short,shapeDownArrow,Null);
Shapecover= IIf(Cover,shapeHollowUpArrow,Null);
shape2= IIf(exit,shapeDownArrow,Null);
PlotShapes( shapeshort, colorRed, 0, High);
PlotShapes( shapebuy, colorGreen, 0, Low);
PlotShapes( shapesell, colorBlue, 0, High);
PlotShapes( shapecover, colorBlue, 0, Low);
PlotText(WriteVal(sessprofit,1.0)+"\n"+WriteVal(tradecount,1.0),i,H+2*dmy[BarCount-1],colorYellow);
PlotShapes( abs( exitArray )*shapeHollowCircle, colorYellow, 0, ValueWhen( stopArray, stopArray, 1 ), 0 );
Plot( IIf(stopArray!=0,stoparray,Null), "StopLine", ParamColor( "Stopline Color:", colorYellow ), ParamStyle( "Stop Style", styleDashed ) );
Title = Date()+" Trade Plotter "+ Interval(format=2)+" "+Name()+" O "+WriteVal(O,1.2)+" H "+WriteVal(H,1.2)+" L "+WriteVal(L,1.2)+" C "+WriteVal(C,1.2)+" Mid price " +WriteVal(avp,1.2)+EncodeColor(colorYellow)+" Trade Price " +WriteVal(tradeline,1.2);
_SECTION_END();