//@Name:Zero Lag Study //@Description:Based on the article in Stocks & Commodities Magazine, Nov 2010. var period = 32; var gainLimit = 22; var thresh = 1; function init(status) { if (status == Loading || status == Editing) { period = storage.getAt(0); gainLimit = storage.getAt(1); thresh = storage.getAt(2); } if (status == Adding || status == Editing) { dlg = new Dialog("Settings...", 145, 55); dlg.addOkButton(); dlg.addCancelButton(); dlg.addIntEdit("INT1",8,-1,-1,-1,"","Length",period,2,1000); dlg.addIntEdit("INT2",8,-1,-1,-1,"","Gain Limit",gainLimit,2,1000); dlg.addNumEdit("NUM1",8,-1,-1,-1,"","Threshold",thresh,0,100); if (dlg.show()==Dialog.Cancel) return false; period = dlg.getValue("INT1"); gainLimit = dlg.getValue("INT2"); thresh = dlg.getValue("NUM1"); storage.setAt(0, period); storage.setAt(1, gainLimit); storage.setAt(2, thresh); } setInfoText("Length=" + period + "\nGainLimit=" + gainLimit + "\nThresh=" + thresh); } function onNewChart() { } function onNewChart() { var ma1 = new MA(period,MA.Exponential) var EMA = []; var EC = []; var alpha = 2 / (period + 1); // Calculate the best gain for (var i=0;i EMA[i] && EC[i-1] < EMA[i-1] && 100 * leastError / bars[i].close > thresh) { // buy setBrushColour(Colour.Green); drawSymbol(i, EMA[i], Symbol.TriangleUp, "", BoxAlign.Centre|BoxAlign.Below); } else if (EC[i] < EMA[i] && EC[i-1] > EMA[i-1] && 100 * leastError / bars[i].close > thresh) { // sell setBrushColour(Colour.Red); drawSymbol(i, EMA[i], Symbol.TriangleDown, "", BoxAlign.Centre|BoxAlign.Above); } } }