//@LibraryID:172,2 //@Name:ADX+Line //@Description: Draws the ADX of the instrument + 2 optional lines at user defined values. //@Returns:Number //@Width:100 //@Env:Production // Care has been taken in preparing this code but it is provided without guarantee. // You are welcome to modify and extend it. Please add your name as a modifier if you distribute it. // Author: Phil Tolhurst, ShareScope Support var period1 = 14; var period2 = 30; var period3 = 40; var colour1 = 0; var colour2 = 16711680; var colour3 = 255; var colour4 = 16711870; var colour5 = 16711870; var pen1 = 0; var pen2 = 2; var pen3 = 2; var pen4 = 0; var pen5 = 0; var width1 = 0; var width2 = 0; var width3 = 0; var width4 = 0; var width5 = 0; var option1=1; var option2=1; var option3=1; var option4=1; var optionStore = 0; var storage1 = 0; var storage2 = 0; var storage3 = 0; //Dialog for setting the value of ma1periods. //Note: If none of the options is ticked the script will default to drawing the ADX function init(status) { if (status == Loading || status == Editing) { storage1 = storage.getAt(0); storage2 = storage.getAt(1); storage3 = storage.getAt(2); colour1 = storage.getAt(3); colour2 = storage.getAt(4); colour3 = storage.getAt(5); colour4 = storage.getAt(6); colour5 = storage.getAt(7); storage1=storage1.toString(); width1=parseInt(storage1.substr(0,1),10)-1; width2=parseInt(storage1.substr(1,1),10)-1; width3=parseInt(storage1.substr(2,1),10)-1; width4=parseInt(storage1.substr(3,1),10)-1; period3=parseInt(storage1.substr(4,3),10); storage2=storage2.toString(); pen1=parseInt(storage2.substr(0,1),10)-1; pen2=parseInt(storage2.substr(1,1),10)-1; pen3=parseInt(storage2.substr(2,1),10)-1; pen4=parseInt(storage2.substr(3,1),10)-1; pen5=parseInt(storage2.substr(4,1),10)-1; optionStore=parseInt(storage2.substr(5,2),10); option1 = (optionStore&1)==1?1:0; option2 = (optionStore&2)==2?1:0; option3 = (optionStore&4)==4?1:0; option4 = (optionStore&8)==8?1:0; storage3=storage3.toString(); width5=parseInt(storage3.substr(0,1),10)-1; period =parseInt(storage3.substr(1,3),10); period2=parseInt(storage3.substr(4,3),10); } if (status == Adding || status == Editing) { var dlg = new Dialog("Average Directional Movement", 300, 130); dlg.addOkButton(); dlg.addCancelButton(); dlg.addGroupBox(5,5,220,60,"Indicator Properties"); dlg.addIntEdit("VAL1",8,15,-1,-1, "","",period1,1,999); dlg.addColLinePicker("VAL2",180,15,-1,-1,"+DI","",colour2,pen2,width2); dlg.addTickBox("VAL3",8,30,100,-1,"Directional Indicators",option2); dlg.addColLinePicker("VAL4",180,30,-1,-1,"-DI","",colour3,pen3,width3); dlg.addTickBox("VAL5",8,45,100,-1,"Average Directional Index",option1); dlg.addColLinePicker("VAL6",180,45,-1,-1,"ADX","",colour1,pen1,width1); dlg.addGroupBox(5,70,220,55,"Additional Line Properties"); dlg.addTickBox("VAL8",8,86,10,-1,"",option3); dlg.addIntEdit("VAL7",20,85,-1,-1, "","",period2,0,999); dlg.addColLinePicker("VAL9",180,85,-1,-1,"AL1","",colour4,pen4,width4); dlg.addTickBox("VAL11",8,103,10,-1,"",option4); dlg.addIntEdit("VAL10",20,102,-1,-1, "","",period3,0,999); dlg.addColLinePicker("VAL12",180,102,-1,-1,"AL2","",colour5,pen5,width5); if (dlg.show() == Dialog.Cancel) return false; period1 = dlg.getValue("VAL1"); colour2 = dlg.getValue("VAL2").colour; pen2 = dlg.getValue("VAL2").pen; width2 = dlg.getValue("VAL2").width; option2 = dlg.getValue("VAL3"); colour3 = dlg.getValue("VAL4").colour; pen3 = dlg.getValue("VAL4").pen; width3 = dlg.getValue("VAL4").width; option1 = dlg.getValue("VAL5"); colour1 = dlg.getValue("VAL6").colour; pen1 = dlg.getValue("VAL6").pen; width1 = dlg.getValue("VAL6").width; period2 = dlg.getValue("VAL7"); option3 = dlg.getValue("VAL8"); colour4 = dlg.getValue("VAL9").colour; pen4 = dlg.getValue("VAL9").pen; width4 = dlg.getValue("VAL9").width; period3 = dlg.getValue("VAL10"); option4 = dlg.getValue("VAL11"); colour5 = dlg.getValue("VAL12").colour; pen5 = dlg.getValue("VAL12").pen; width5 = dlg.getValue("VAL12").width; storage1=((width1+1)*1000000)+((width2+1)*100000)+((width3+1)*10000)+((width4+1)*1000)+period3; optionStore = (option1==1?1:0)+(option2==1?2:0)+(option3==1?4:0)+(option4==1?8:0); storage2=((pen1+1)*1000000)+((pen2+1)*100000)+((pen3+1)*10000)+((pen4+1)*1000)+((pen5+1)*100)+optionStore; storage3=((width5+1)*1000000)+period1*1000+period2; storage.setAt(0, storage1); storage.setAt(1, storage2); storage.setAt(2, storage3); storage.setAt(3, colour1); storage.setAt(4, colour2); storage.setAt(5, colour3); storage.setAt(6, colour4); storage.setAt(7, colour5); } var lineSettings = []; if(option1 == 1) {//ADX lineSettings[lineSettings.length] = {colour:colour1,width:width1,pen:pen1}; } if(option2 == 1) {//DI+ and DI- lineSettings[lineSettings.length] = {colour:colour2,width:width2,pen:pen2}; lineSettings[lineSettings.length] = {colour:colour3,width:width3,pen:pen3}; } if(option3 == 1) { lineSettings[lineSettings.length] = {colour:colour4,width:width4,pen:pen4}; } if(option4 == 1) { lineSettings[lineSettings.length] = {colour:colour5,width:width5,pen:pen5}; } for(var i = 0;i