//@Name:Money Flow Index //@Description:Money Flow Index indicator with editable support and resistance levels. //Author: ShareScript Support //Modified: Paul Hall, ShareScript Support. // 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. var var1 = 20; var var2 = 80; var var3 = 20; var var4 = 50; var col1 = Colour.Red; var col2 = Colour.LightRed; var sigPeriod = 10; var sigType = 0; var sigList = ["Simple","Exponential","Weighted","Triangular","VariableVHF","VariableCMO","VIDYA"]; var sigCol = Colour.Grey; var sigPen = 1; var sigWidth = 0; var useSig = 1; var store; var store2; function init(status) { if (status == Loading || status == Editing) { store = storage.getAt(0); col1 = storage.getAt(1); col2 = storage.getAt(2); var1 = storage.getAt(3); store2 = storage.getAt(4); sigCol = storage.getAt(5); sigPen = storage.getAt(6); sigWidth = storage.getAt(7); store2 = store2.toString(); sigType = parseInt(store2.substr(0,1),10)-1; useSig = parseInt(store2.substr(1,1),10); sigPeriod = parseInt(store2.substr(2,4),10); var2 = Math.floor(store/10201); var3 = Math.floor(store%10201/101); var4 = store%101; } if (status == Adding || status == Editing) { dlg = new Dialog("Indicator Settings...", 185, 170); dlg.addOkButton(); dlg.addCancelButton(); dlg.addIntEdit("INT1",8,-1,-1,-1,"","period",var1,2,1000); dlg.addColPicker("COL1",8,-1,-1,-1,"","indicator colour",col1); dlg.addIntEdit("INT2",8,-1,-1,-1,"","resistance",var2,0,100); dlg.addIntEdit("INT3",8,-1,-1,-1,"","support",var3,0,100); dlg.addColPicker("COL2",8,-1,-1,-1,"","background colour",col2); dlg.addIntEdit("INT4",8,-1,-1,-1,"","trigger for background colour (0=not used)",var4,0,100); dlg.addTickBox("VAL3",8,-1,100,-1,"plot signal line",useSig); dlg.addIntEdit("INT5",8,-1,-1,-1,"","signal period",sigPeriod,2,1000); dlg.addDropList("VAL1",8,-1,-1,-1, sigList, "","signal type",sigType); dlg.addColLinePicker("VAL2",8,-1,-1,-1,"","signal line",sigCol,sigPen,sigWidth); if (dlg.show()==Dialog.Cancel) return false; var1 = dlg.getValue("INT1"); col1 = dlg.getValue("COL1"); var2 = dlg.getValue("INT2"); var3 = dlg.getValue("INT3"); col2 = dlg.getValue("COL2"); var4 = dlg.getValue("INT4"); sigPeriod = dlg.getValue("INT5"); sigType = dlg.getValue("VAL1"); sigCol = dlg.getValue("VAL2").colour; sigPen = dlg.getValue("VAL2").pen; sigWidth = dlg.getValue("VAL2").width; useSig = dlg.getValue("VAL3"); store = var4 + var3 * 101 + var2 *10201; store2 = (sigType+1)*100000+useSig*10000+sigPeriod; storage.setAt(0, store); storage.setAt(1, col1); storage.setAt(2, col2); storage.setAt(3, var1); storage.setAt(4, store2); storage.setAt(5, sigCol); storage.setAt(6, sigPen); storage.setAt(7, sigWidth); } setHorizontalLine(var2); setHorizontalLine(var3); setHorizontalLine(50); setSeriesLineStyle(0,0,1); setSeriesChartType(2,ChartType.Block) setSeriesColour(0, col1); setSeriesColour(2, col2); setSeriesColour(1, sigCol); setSeriesLineStyle(1,sigPen,sigWidth); setTitle(var1+" MFI ("+sigPeriod+" signal)"); } function getGraph(share, data) { var typ = []; var mf = []; var mfi = []; var background = []; var sigRes = []; var sigCalc = new MA(sigPeriod,sigType); if (data.length == undefined) { return mfi; } for (var i=0;i=var1) { var pmf = 0; var nmf = 0; for (var j=0;jvar1;j++) { if (typ[i-j]>typ[i-j-1]) pmf += mf[i-j]; else if (typ[i-j]