//@LibraryID:843,3 //@LibraryID:843,2 //@LibraryID:843,1 //@LibraryID:843,0 //@Name:DPO //@Description:Detrended Price Oscillator. var var1 = 20; var col1 = Colour.Green; var col2 = Colour.Red; var shadeChart = true; var drawSignal = false; var signalPeriod = 5; var signalType = 0; var maList = ["Simple","Exponential","Weighted","Triangular","VariableVHF","VariableCMO","VIDYA","TEMA","VWAP"]; var doDisplacement = true; function init(status) { if (status == Loading || status == Editing) { var1 = storage.getAt(0); col1 = storage.getAt(1); col2 = storage.getAt(2); shadeChart = storage.getAt(3); drawSignal = storage.getAt(4); signalPeriod = storage.getAt(5); signalType = storage.getAt(6); doDisplacement = storage.getAt(7); } if (status == Adding || status == Editing) { dlg = new Dialog("DPO settings...", 180, 90); dlg.addOkButton(); dlg.addCancelButton(); dlg.addIntEdit("INT1",8,-1,-1,-1,"","period",var1,2,1000); dlg.addColPicker("COL1",8,23,-1,-1,"","",col1); dlg.addColPicker("COL2",45,23,-1,-1,"","",col2); dlg.addTickBox("VAL",8,46,-1,-1,"Shade chart",shadeChart); dlg.addTickBox("VAL2",8,62,30,-1,"Signal",drawSignal); dlg.addIntEdit("INT2",40,60,-1,-1,"","periods",signalPeriod,2,1000); dlg.addDropList("DL1",100,60,60,-1,maList,"","",signalType); dlg.addTickBox("VAL3",8,76,100,-1,"Include displacement",doDisplacement); if (dlg.show()==Dialog.Cancel) return false; var1 = dlg.getValue("INT1"); col1 = dlg.getValue("COL1"); col2 = dlg.getValue("COL2"); shadeChart = dlg.getValue("VAL"); drawSignal = dlg.getValue("VAL2"); signalPeriod = dlg.getValue("INT2"); signalType = dlg.getValue("DL1"); doDisplacement = dlg.getValue("VAL3"); storage.setAt(0, var1); storage.setAt(1, col1); storage.setAt(2, col2); storage.setAt(3, shadeChart); storage.setAt(4, drawSignal); storage.setAt(5, signalPeriod); storage.setAt(6, signalType); storage.setAt(7, doDisplacement); } setHorizontalLine(0); if(shadeChart) setSeriesChartType(0, ChartType.Clouds); else setSeriesChartType(0, ChartType.Line); setSeriesColourMode(0, ColourMode.PosNeg) setSeriesColour(0, col1, col2); if (drawSignal) { setSeriesColour(1, Colour.Black); setSeriesLineStyle(1,0,0); } setTitle(var1+" DPO"); } function getGraph(share, data) { var output = []; output.length=data.length; var signal = []; signal.length=data.length; var x = []; x.length=data.length; var ma1 = new MA(var1); var ma2 = new MA(signalPeriod, signalType); var displ = Math.floor(var1/2)+1; for (var i=displ;i