//@Name:RMO //@Description: Rahul Mohindar Oscillator - based on code readily available on the internet for programs like Amibroker and Metastock // 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. // Coded by: Phil Tolhurst, ShareScope Support var colour1 = Colour.LightGreen var colour2 = Colour.LightRed var colour3 = Colour.Blue var colour4 = Colour.Red var colour5 = Colour.Blue var colour6 = Colour.Red function init(status) { if (status == Loading || status == Editing) { colour1 = storage.getAt(0); colour2 = storage.getAt(1); colour3 = storage.getAt(2); colour4 = storage.getAt(3); colour5 = storage.getAt(4); colour6 = storage.getAt(5); } if (status == Adding || status == Editing) { var dlg = new Dialog("Moving Average Convergence Divergence (MACD)", 270, 100); dlg.addOkButton(); dlg.addCancelButton(); dlg.addGroupBox(5,5,200,30,"Ribbon Properties"); dlg.addColPicker("VAL1",70,18,-1,-1,"Bull Trend","",colour1); dlg.addColPicker("VAL2",165,18,-1,-1,"Bear Trend","",colour2); dlg.addGroupBox(5,35,200,30,"Arrow Properties"); dlg.addColPicker("VAL3",70,48,-1,-1,"Up Arrow (Buy)","",colour3); dlg.addColPicker("VAL4",165,48,-1,-1,"Down Arrow (Sell)","",colour4); dlg.addGroupBox(5,65,200,30,"Bar Properties"); dlg.addColPicker("VAL5",70,78,-1,-1,"","",colour5); dlg.addColPicker("VAL6",165,78,-1,-1,"","",colour6); if (dlg.show() == Dialog.Cancel) return false; colour1 = dlg.getValue("VAL1"); colour2 = dlg.getValue("VAL2"); colour3 = dlg.getValue("VAL3"); colour4 = dlg.getValue("VAL4"); colour5 = dlg.getValue("VAL5"); colour6 = dlg.getValue("VAL6"); storage.setAt(0, colour1); storage.setAt(1, colour2); storage.setAt(2, colour3); storage.setAt(3, colour4); storage.setAt(4, colour5); storage.setAt(5, colour6); } } function onNewChart() { clearDisplay(); draw(); } //Updates the graph if the data is updated, so when a new bar is added. function onNewBarUpdate() { clearDisplay(); draw(); } function draw() { var maCalc1 = new MA(2,MA.Simple); var maCalc2 = new MA(2,MA.Simple); var maCalc3 = new MA(2,MA.Simple); var maCalc4 = new MA(2,MA.Simple); var maCalc5 = new MA(2,MA.Simple); var maCalc6 = new MA(2,MA.Simple); var maCalc7 = new MA(2,MA.Simple); var maCalc8 = new MA(2,MA.Simple); var maCalc9 = new MA(2,MA.Simple); var maCalc10 = new MA(2,MA.Simple); var maRes1 = 0; var maRes2 = 0; var maRes3 = 0; var maRes4 = 0; var maRes5 = 0; var maRes6 = 0; var maRes7 = 0; var maRes8 = 0; var maRes9 = 0; var maRes10 = 0; var maAvg = 0; var emaCalc1 = new MA(30,MA.Exponential); var emaCalc2 = new MA(30,MA.Exponential); var emaCalc3 = new MA(81,MA.Exponential); var minMaxCalc = new MinMax(10); var HHV = 0; var LLV = 0; var HLdiff = 0; var swingTrd1 = new Array; var swingTrd2 = new Array; var swingTrd3 = new Array; var RMO = new Array; var Bull_Trend=0; var Bear_Trend=0; var Impulse_UP=0; var Impulse_Down=0; var Buy; var Sell; for (var i=0;i0) { setBrushColour(colour1); setFillMode(FillMode.Transparent) beginPath(); moveTo(i-0.5,0); lineTo(i-0.5,5); lineTo(i+0.5,5); lineTo(i+0.5,0); lineTo(i-0.5,0); endPath(); fillPath(); } else if (RMO[i]<0) { setBrushColour(colour2); setFillMode(FillMode.Transparent) beginPath(); moveTo(i-0.5,0); lineTo(i-0.5,5); lineTo(i+0.5,5); lineTo(i+0.5,0); lineTo(i-0.5,0); endPath(); fillPath(); } } useAltRange(false); //Colour bars for (var i=1;i0; Bear_Trend=RMO[i]<0; Impulse_UP = swingTrd2[i] > 0; Impulse_Down = Bear_Trend; if (Impulse_UP) bars[i].colour = colour5 else if (Impulse_Down) bars[i].colour = colour6 else if (Bull_Trend) bars[i].colour = colour6 else bars[i].colour = colour5 } //Draw Buy/Sell Arrows for (var i=1;iswingTrd3[i]) {Buy = true; Sell = false} else if (swingTrd3[i-1]swingTrd2[i]) {Buy = false; Sell =true} else {Buy = false;Sell = false} setPenColour(Colour.Black); if (Buy) {// buy setBrushColour(colour3); drawSymbol(i, bars[i].low*0.99, Symbol.TriangleUp, "", BoxAlign.Centre|BoxAlign.Below); } else if (Sell) {// sell setBrushColour(colour4); drawSymbol(i, bars[i].high*1.01, Symbol.TriangleDown, "", BoxAlign.Centre|BoxAlign.Above); } } }