// Downloaded From https://www.WiseStockTrader.com //Visual BackTest for Amibroker //Made by Sethmo (Ipeleng Molete) //Date Made: 8 November 2013 //Feel free to use as you wish, please acknowledge the author SetBarsRequired(-2,0); 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 ) ) )); EMA1 = EMA(C, 5); EMA2 = EMA(C, 10); WMA1 = WMA(C, 5); WMA2 = WMA(C, 10); Color = colorBlack; //----------------------------------------------------------// // TRADE CONDITIONS //----------------------------------------------------------// LongEntry1 = Cross(EMA1,EMA2); ShortEntry1 = Cross(WMA2,WMA1); LongExit1 = Cross(EMA2,EMA1); ShortExit1 = Cross(WMA1,WMA2); LongEntry = LongEntry1; ShortEntry = ShortEntry1; LongExit = LongExit1; ShortExit = ShortExit1; LongEntryDate = ValueWhen(LongEntry1, DateTime()); ShortEntryDate = ValueWhen(ShortEntry1, DateTime()); LongExitDate = ValueWhen(LongExit1, DateTime()); ShortExitDate = ValueWhen(ShortExit1, DateTime()); Longtrue = Flip(Longentry, LongExit); Shorttrue = Flip(Shortentry, Shortexit); systemState = IIf(Shorttrue AND !Longtrue, 0, //in short trade IIf(Longtrue AND !Shorttrue, 1, //in long trade IIf(!Longtrue AND !Shorttrue, 2, 3)));//ready LongEntry = LongEntry AND systemstate == 1; ShortEntry = ShortEntry AND systemstate == 0; //----------------------------------------------------------// // TRADE MANAGEMENT //----------------------------------------------------------// Buy = LongEntry AND systemstate == 1; Sell = LongExit; Short = ShortEntry AND systemstate == 0; Cover = ShortExit; inlong = Flip(Buy, Sell); inshort = Flip(Short, Cover); realBuy = inlong AND !Ref(inlong, -1); realSell = !inlong AND Ref(inlong, -1); realShort = inshort AND !Ref(inshort,-1); realCover = !inshort AND Ref(inshort,-1); LongEntryPrice = ValueWhen(realBuy,O); LongExitPrice = ValueWhen(realSell,O); ShortEntryPrice = ValueWhen(realShort,O); ShortExitPrice = ValueWhen(realCover,O); BuyPrice = LongEntryPrice; SellPrice = LongExitPrice; ShortPrice = ShortEntryPrice; CoverPrice = ShortExitPrice; //----------------------------------------------------------// // PLOTTING //----------------------------------------------------------// LongProfit = IIf(realSell,ValueWhen(realSell,LongExitPrice - LongEntryPrice),0); ShortProfit = IIf(realCover,ValueWhen(realCover, ShortEntryPrice - ShortExitPrice),0); Profit = IIf(realSell, LongProfit, IIf(realCover, ShortProfit, 0)); TotalLP = Sum(LongProfit, Cum(1)); TotalSP = Sum(ShortProfit, Cum(1)); Total = TotalLP + TotalSP; LongProfitColour = colorGreen; ShortProfitColour = colorRed; TotalColour = colorTurquoise; LongTrades = 0; ShortTrades = 0; LongWinners = 0; ShortWinners = 0; for (i = 0; i < BarCount - 1; i++) { if(realSell[i]) { LongTrades++; } if(realCover[i]) { ShortTrades++; } if(LongProfit[i] > 0) { LongWinners++; } if(ShortProfit[i] > 0) { ShortWinners++; } } LongWinPerc = (LongWinners/LongTrades)*100; ShortWinPerc = (ShortWinners/ShortTrades)*100; TotalTrades = LongTrades + ShortTrades; TotalWinners = LongWinners + ShortWinners; TotalWinPerc = (TotalWinners/TotalTrades) * 100; printf("\nLong Trades: \t" + WriteVal(LongTrades, 1.0)); printf("\nShort Trades: \t" + WriteVal(ShortTrades, 1.0)); printf("\nLong Winners: \t" + WriteVal(LongWinners, 1.0)); printf("\nShort Winners: \t" + WriteVal(ShortWinners, 1.0)); printf("\nLong Win %%: \t" + WriteVal(LongWinPerc, 1.0) + "%%"); printf("\nShort Win %%: \t" + WriteVal(ShortWinPerc, 1.0) + "%%"); printf("\nTotal Trades: \t" + WriteVal(TotalTrades, 1.0)); printf("\nTotal Winners: \t" + WriteVal(TotalWinners, 1.0)); printf("\nTotal Win %%: \t" + WriteVal(TotalWinPerc, 1.0) + "%%"); if (ParamToggle("Show TRADE PROFITS?", "No|Yes", 0)) { Plot(Profit, "\nTrade Profit", IIf(LongProfit, LongProfitColour, IIf(ShortProfit, ShortProfitColour, colorBlue)), styleThick | styleHistogram | styleLeftAxisScale); Plot(0, "\n0", colorYellow, styleThick | styleLeftAxisScale); } if (ParamToggle("Show TOTALS?", "No | Yes", 0)) { Plot(totalLP, "\nTotalLP", LongProfitColour, styleLine | styleOwnScale); Plot(totalSP, "\nTotalSP", ShortProfitColour, styleLine | styleOwnScale); Plot(total, "\nTotal", TotalColour, styleThick | styleLine | styleOwnScale); } Plot( C, "Close", color, styleNoTitle | styleCandle ); if (ParamToggle("Show REAL TRADES?", "No|Yes", 0)) { PlotShapes( realBuy * shapeUpArrow, colorDarkGreen, 0, L, -50); PlotShapes( realSell * shapeHollowDownArrow, colorDarkGreen, 0, H, -50); PlotShapes( realShort * shapeDownArrow, colorDarkRed, 0, H, -50); PlotShapes( realCover * shapeHollowUpArrow, colorDarkRed, 0, L, -50); }