AFL CODE
MaPeriod = 20;MyTypicalPrice = (High + Low + 2 * Close) / 4;MyMa = MA(MyTypicalPrice, MaPeriod);Plot(MyMa, "MyMa", colorBlack, styleThick);MyFastEma = EMA(Close, 5);Plot(MyFastEma, "Ema5", IIf(MyMa < MyFastEma, colorDarkGreen, colorBrown), styleLine);PlotOHLC(Open, High, Low, Close, "Close", colorBlack, styleCandle);Buy = Cover = Cross(MyFastEma, MyMa);Short = Sell = Cross(MyMa, MyFastEma);BuyPrice = ShortPrice = Open;SellPrice = CoverPrice = Close;PlotShapes(IIf(Buy, shapeUpArrow, shapeNone), colorGreen, 0, BuyPrice);PlotShapes(IIf(Sell, shapeDownArrow, shapeNone), colorRed, 0, SellPrice);PlotShapes(IIf(Short, shapeHollowDownArrow, shapeNone), colorRed, 0, ShortPrice);PlotShapes(IIf(Cover, shapeHollowUpArrow, shapeNone), colorGreen, 0, CoverPrice);SlippageLong =Param("Slippage (Long)", 1, 0, 10, 1);SlippageShort =Param("Slippage (Short)", 3, 0, 10, 1);SlippageTickSize =Param("Slippage Tick Size)", 0.01, 0, 10, 0.0001);SetOption("UseCustomBacktestProc", True );SetOption("PriceBoundChecking", False);BasicSampleCS8();
.NET CODE
[ABMethod]public void BasicSampleCS8(){ try { float slippageLong = ATAfl.ReadFrom("SlippageLong").GetFloat(); float slippageShort = ATAfl.ReadFrom("SlippageShort").GetFloat(); float tickSize = ATAfl.ReadFrom("SlippageTickSize").GetFloat(); if (AFMisc.StatusAction() == Action.Portfolio) { Backtester bo = AFTools.GetBacktesterObject(); bo.PreProcess(); for (int bar = 0; bar < BarCount; bar++) { for (Signal sig = bo.GetFirstSignal(bar); sig != null; sig = bo.GetNextSignal(bar)) { if (!sig.IsEntry()) // if exit signal { if (sig.IsLong()) sig.Price = sig.Price - slippageLong * tickSize; else sig.Price = sig.Price + slippageShort * tickSize; } } bo.ProcessTradeSignals(bar); } bo.PostProcess(); } else if (tickSize == ATFloat.Null || tickSize == 0.0f) throw new Exception("TickSize must be set for the ticker!"); } catch (Exception e) { // present error message on indicator panel and the Log-Trace window YException.Show("Error while executing indicator.", e); } }