//@Name:SE Channel Triple //@Description:3 SE Channels lengths between lb1 and lb2 with greatest and least slopes and slope nearest zero. This version for log scale chart. From Stocks & Commodities, May 2014. Coded by Roger Harmer. //this code by Roger Harmer var barsago = 0; var mult = 2.0; var lb1 = 80; var lb2 = 5; function init(status) { if (status == Loading || status == Editing) { barsago = storage.getAt(0); } if (status == Adding || status == Editing) { var dlg = new Dialog("Settings.....", 200, 75); dlg.addOkButton(); dlg.addCancelButton(); dlg.addNumEdit("VAL1",-1,-1,-1,-1,"Bars ago","",barsago,0,100); dlg.addText(8,20,130,32,"The slopes are calculated between 5 and 80 periods starting from the latest bar. The Bars Ago option shifts the start point by a given number of bars.") if (dlg.show() == Dialog.Cancel) return false; barsago = dlg.getValue("VAL1"); } storage.setAt(0, barsago); } function onNewChart() { clearDisplay(); draw() } function onNewBarUpdate() { clearDisplay(); draw() } function draw() { var ttest = new Array();// for finding the 3 lengths var g1 = new Array();//slope for finding the 3 lengths var testse = new Array(); var smax, smin, smid;//store standard deviations selected var pmax, pmin, pmid;//store trend lengths selected var vmax, vmin, vmid;//store last values of trend lines var midval = new Array(); var last, first; var grad = new Array(); var stdv = new Array(); var testmid = new Array(); var max, min, mid;//store slopes var mid2;//to hold actual value of the slope rather than the value used for determination var vmax, vmin, vmid;//store end points of trends var tlmax = new Array(); var tlmin = new Array(); var tlmid = new Array(); var tmaxhi = new Array(); var tmaxlo = new Array(); var tminhi = new Array(); var tminlo = new Array(); var tmidhi = new Array(); var tmidlo = new Array(); var trmaxhi = new Array(); var trmaxlo = new Array(); var trminhi = new Array(); var trminlo = new Array(); var trmidhi = new Array(); var trmidlo = new Array(); var tlinemax = new Array(); var tlinemin = new Array(); var tlinemid = new Array(); var tlexpmax = new Array(); var tlexpmin = new Array(); var tlexpmid = new Array(); var trmaxhiexp = new Array(); var trmaxloexp = new Array(); var trminhiexp = new Array(); var trminloexp = new Array(); var trmidhiexp = new Array(); var trmidloexp = new Array(); var startmax, startmin, startmid;//starting values of the trend for each line var check, flag;//to check not all values are the same var noresult = new Array(); first = 0; last = bars.length - barsago; if (bars.length > lb1 + barsago) first = last - lb1 - 1; noresult.length = bars.length; if ((bars.length < lb1 + barsago) || (bars[bars.length-1].close == undefined)) return noresult; check = bars[bars.length-1].close; flag = 0; for (var i=bars.length-lb1-barsago; i max) { max = g1[i]; pmax = i; vmax = midval[i]; smax = stdv[i]; } if (g1[i] < min) { min = g1[i]; pmin = i; vmin = midval[i]; smin = stdv[i]; } if (Math.abs(g1[i]) < mid) { mid = Math.abs(g1[i]); mid2 = g1[i]; pmid = i; vmid = midval[i]; smid = stdv[i]; } } // Calculate the standard error channels and extend to end of chart //For maximum slope startmax = vmax - max * pmax; for (var i=last-1-pmax; i