// Downloaded From https://www.WiseStockTrader.com // e-Ratio implementation by Eldar Agalarov if (Status("action") == actionPortfolio) { bo = GetBacktesterObject(); bo.Backtest(True); stAll = bo.GetPerformanceStats(0); stLong = bo.GetPerformanceStats(1); stShort = bo.GetPerformanceStats(2); qtyProfitAll = stAll.GetValue("AllQty"); qtyProfitLong = stLong.GetValue("AllQty"); qtyProfitShort = stShort.GetValue("AllQty"); // e-Ratio avgMAEAll = avgMAELong = avgMAEShort = 0; avgMFEAll = avgMFELong = avgMFEShort = 0; barIndices = BarIndex(); dateTimes = DateTime(); for (trade = bo.GetFirstTrade(); !IsNull(trade); trade = bo.GetNextTrade()) { arrATR = Foreign("~ATR_" + trade.Symbol, "Close"); tradeBarIndex = LastValue(ValueWhen(trade.EntryDateTime == dateTimes, barIndices)); absMAE = trade.EntryPrice * trade.GetMAE() * 0.01; absMFE = trade.EntryPrice * trade.GetMFE() * 0.01; entryATR = arrATR[tradeBarIndex]; normMAE = absMAE / entryATR; normMFE = absMFE / entryATR; avgMAEAll += normMAE; avgMFEAll += normMFE; if (trade.IsLong()) { avgMAELong += normMAE; avgMFELong += normMFE; } else { avgMAEShort += normMAE; avgMFEShort += normMFE; } trade.AddCustomMetric("MAE ($)", absMAE, 2); trade.AddCustomMetric("MFE ($)", absMFE, 2); trade.AddCustomMetric("Entry ATR", entryATR, 2); } avgMAEAll /= qtyProfitAll; avgMAELong /= qtyProfitLong; avgMAEShort /= qtyProfitShort; avgMFEAll /= qtyProfitAll; avgMFELong /= qtyProfitLong; avgMFEShort /= qtyProfitShort; eRatioAll = avgMFEAll / abs(avgMAEAll); eRatioLong = avgMFELong / abs(avgMAELong); eRatioShort = avgMFEShort / abs(avgMAEShort); bo.AddCustomMetric("e-Ratio", eRatioAll, eRatioLong, eRatioShort, 2); bo.ListTrades(); }