// Downloaded From https://www.WiseStockTrader.com // Trade simulation. Helps you to record your real trades and test new trading approaches without any programming skills. // Copyright Abnash Singh 20th February 2012 // Modified April 29,2013 - for allowing last bar trades and for excluding ATR stop optionally, when own stop loss system is used. // 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. SetBarsRequired(1000, 0 ); 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" ); showcandlechart=ParamList("Show Candle chart","YES|NO"); useATRstop=ParamToggle("ATR stop to be used ?","No|Yes",1); 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); tp1=Param("Trade 1 price ",0,0,20000); ep1=Param("Exit 1 price ",0,0,20000); tp2=Param("Trade 2 price ",0,0,20000); ep2=Param("Exit 2 price ",0,0,20000); tp3=Param("Trade 3 price ",0,0,20000); ep3=Param("Exit 3 price ",0,0,20000); tp4=Param("Trade 4 price ",0,0,20000); ep4=Param("Exit 4 price ",0,0,20000); tp5=Param("Trade 5 price ",0,0,20000); ep5=Param("Exit 5 price ",0,0,20000); tp6=Param("Trade 6 price ",0,0,20000); ep6=Param("Exit 6 price ",0,0,20000); tp7=Param("Trade 7 price ",0,0,20000); ep7=Param("Exit 7 price ",0,0,20000); tp8=Param("Trade 8 price ",0,0,20000); ep8=Param("Exit 8 price ",0,0,20000); tp9=Param("Trade 9 price ",0,0,20000); ep9=Param("Exit 9 price ",0,0,20000); bi = BarIndex(); qty = LastValue( bi ); y = Year(); m = Month(); d = Day(); r = Hour(); e = Minute(); sby = SelectedValue( y ); sbm = SelectedValue( m ); sbd = SelectedValue( d ); sbr = SelectedValue( r ); sbe = SelectedValue( e ); qty = LastValue( bi ); Varname = Name()+ sby + sbm + sbd + sbr + sbe; 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()+y[i] + m[i] + d[i] + r[i] + e[i]); } 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;i0)priceatbuy=tradeline[i]=xp; else priceatbuy=tradeline[i]=avp[i];//defaulting price to average price. if (Lastsig==-1) { profit=priceatshort-priceatbuy; sessprofit=sessprofit+profit; PlotText(WriteVal(profit,1.0),i,H[i]+10,colorYellow); } Lastsig=1; } if (Short[i]) { // we just triggered a short trade. Set up starting values stopArray[i] = Low[i] + ( Multiple * atrArray[i] ); LLArray[i] = Low[i]; // initialize the lowest low array trendDirection = 0 - 1; // going short. Base bar. // PlotText("1",i,H[i]+10,colorWhite); if (xp>0)priceatshort=tradeline[i]=xp; else priceatshort=tradeline[i]=avp[i];//defaulting price to average price. if (Lastsig==1) { profit=priceatshort-priceatbuy; sessprofit=sessprofit+profit; PlotText(WriteVal(profit,1.0),i,H[i]+2*dmy[i],colorYellow); } Lastsig=-1; } if (Lastsig==0)tradeline[i]=Null; if (exit[i]) { if (ep>0)priceatexit=ep; else priceatexit=avp[i]; if (Lastsig==1) { profit= priceatexit-priceatbuy; Sell[i]=1; } else if (Lastsig==-1) { profit= priceatshort-priceatexit; Cover[i]=1; } sessprofit=sessprofit+profit; PlotText(WriteVal(profit,1.0),i,H[i]+2*dmy[i],colorYellow); Lastsig=profit=0; } if (Lastsig==1)Cp[i]=avp[i]-priceatbuy; else if (Lastsig==-1)Cp[i]=priceatshort-avp[i]; exitArray[i] = 0; if ( trendDirection > 0 AND useatrstop) { // 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[i] < stopArray[i-1] OR exit[i]) { //stop got hit. Reset the trade. trendDirection = 0; // OK. wait until we trigger another trade. exitArray[i] = 1; if (Lastsig==1) { if (ep>0)pricetouse=ep; else pricetouse=avp[i]; profit=pricetouse-priceatbuy; sessprofit=sessprofit+profit; PlotText(WriteVal(profit,1.0),i,H[i]+2*dmy[i],colorYellow); } Lastsig=0; } else { // keep track of the HHV since trade was entered. if ( High[i] > HHArray[i-1] ) HHArray[i] = High[i]; else HHArray[i] = HHArray[i-1]; // Compute the stop based on the HHV. stopArray[i] = HHArray[i] - ( Multiple * atrArray[i] ); } } trendDirection = trendDirection + 1; } if ( trendDirection < 0 AND useatrstop) { // 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[i] > stopArray[i-1] OR exit[i] ) { // our stop got hit. Reset the trade. trendDirection = 0; exitArray[i] = 0 - 1; if (Lastsig==-1) { if (ep>0)pricetouse=ep; else pricetouse=avp[i]; profit=priceatshort-pricetouse; sessprofit=sessprofit+profit; PlotText(WriteVal(profit,1.0),i,H[i]+2*dmy[i],colorYellow); } Lastsig=0; } else { // keep track of the LLV since trade was entered. if ( Low[i] < LLArray[i-1] ) LLArray[i] = Low[i]; else LLArray[i] = LLArray[i-1]; // Compute the stop based on the LLV. stopArray[i] = LLArray[i] + ( Multiple * atrArray[i] ); } } trendDirection = trendDirection - 1; } if ( trendDirection == 0 ) { stopArray[i] = 0; LLArray[i] = 0; HHArray[i] = 0; } if(Buy[i] OR Short[i])Maxprofit=lastmax=0; if (Cp[i]>Maxprofit)Maxprofit=Cp[i]; //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[i]==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[i]+2*ATRarray[i],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[BarCount-1]+2*dmy[BarCount-1],colorYellow); if (useATRstop) { Plot( IIf(stopArray!=0,stoparray,Null), "StopLine", ParamColor( "Stopline Color:", colorYellow ), ParamStyle( "Stop Style", styleDashed ) ); PlotShapes( abs( exitArray )*shapeHollowCircle, colorYellow, 0, ValueWhen( stopArray, stopArray, 1 ), 0 ); } 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);