MobOsc.efs
EFSLibrary - Discussion Board
File Name: MobOsc.efs
Description:
Mobility Oscillator
Formula Parameters:
- M : 10
- LookBack : 14
Notes:
The price distribution function, which analyzes the distribution of prices over a lookback period, is useful for predicting price mobility.
Here's a new method called the mobility oscillator that will allow you to do so.
Price mobility, the ease with which prices move, can be assessed by constructing price distribution functions and determining congestion and the location of the current price compared with the congestion. That is not to say that moves will happen, since other external factors not in the market influence moves, but that it is easier. When congestion develops and the current price is in a congested region, an abrupt move often follows.
Download File:
MobOsc.efs
EFS Code:
/********************************* Provided By: eSignal (Copyright c eSignal), a division of Interactive Data Corporation. 2009. All rights reserved. This sample eSignal Formula Script (EFS) is for educational purposes only and may be modified and saved under a new file name. eSignal is not responsible for the functionality once modified. eSignal reserves the right to modify and overwrite this EFS file with each new release. Description: Mobility Oscillator Version: 1.0 04/21/2009 Formula Parameters: Default: M 10 LookBack 14 Notes: The price distribution function, which analyzes the distribution of prices over a lookback period, is useful for predicting price mobility. Here's a new method called the mobility oscillator that will allow you to do so. Price mobility, the ease with which prices move, can be assessed by constructing price distribution functions and determining congestion and the location of the current price compared with the congestion. That is not to say that moves will happen, since other external factors not in the market influence moves, but that it is easier. When congestion develops and the current price is in a congested region, an abrupt move often follows. **********************************/ var fpArray = new Array(); var bInit = false; function preMain() { setStudyTitle("Mobility Oscillator"); setCursorLabelName("MobilityOsc"); var x = 0; fpArray[x] = new FunctionParameter("M", FunctionParameter.NUMBER); with(fpArray[x++]) { setLowerLimit(1); setDefault(10); } fpArray[x] = new FunctionParameter("LookBack", FunctionParameter.NUMBER); with(fpArray[x++]) { setLowerLimit(1); setDefault(14); } } var xMobOsc = null; function main(M, LookBack) { var nBarState = getBarState(); var nMobOsc = 0; if (nBarState == BARSTATE_ALLBARS) { if (M == null) M = 10; if (LookBack == null) LookBack = 14; } if (bInit == false) { xMobOsc = efsInternal("Calc_MobOsc", M, LookBack); bInit = true; } nMobOsc = xMobOsc.getValue(0); if (nMobOsc == null) return; return nMobOsc; } var bSecondInit = false; var xHH = null; var xLL = null; var xHigh = null; var xLow = null; var xClose = null; function Calc_MobOsc(M, LookBack) { var i = 0; var j = 0; var n = 0; var RX = 0; var IMX = 1; var BU = 0; var BL = 0; var BUpdf = 0; var BLpdf = 0; var Value99 = 0; var PDFVar = 0; var PDF = 0; var PDFMX = 0; var PDFC = 0; if (getCurrentBarCount() <= LookBack * 2 + 2) return; if (bSecondInit == false) { xHigh = high(); xLow = low(); xClose = close(); xHH = upperDonchian(LookBack, xHigh); xLL = lowerDonchian(LookBack, xLow); bSecondInit = true; } HMax = xHH.getValue(0); LMin = xLL.getValue(0); RX = (HMax - LMin) / M; for (i = 1; i <= M; i++) { BU = LMin + i * RX; BL = BU - RX; BLpdf = LMin + (i - 1) * RX; BUpdf = LMin + i * RX; PDFVar = 0; for (j = 0; j < LookBack; j++) { n = i + j; if (xHigh.getValue( - n) <= BUpdf) PDFVar++; if ((xHigh.getValue( - n) <= BUpdf) || (xLow.getValue( - n) >= BUpdf)) Value99 = 1; else PDFVar = PDFVar + (BUpdf - xLow.getValue( - n)) / (xHigh.getValue( - n) - xLow.getValue( - n)); if (xHigh.getValue( - n) <= BLpdf) PDFVar--; if ((xHigh.getValue( - n) <= BLpdf) || (xLow.getValue( - n) >= BLpdf)) Value99 = 1; else PDFVar = PDFVar - (BLpdf - xLow.getValue( - n)) / (xHigh.getValue( - n) - xLow.getValue( - n)); } PDF = PDFVar / LookBack; if (i == 1) PDFMX = PDF; if (PDF > PDFMX) { IMX = i; PDFMX = PDF; } if (i == 1) PDFC = PDF; if ((xClose.getValue( - (LookBack - 1)) > BL) && (xClose.getValue( - (LookBack - 1)) <= BU)) PDFC = PDF; } var PMO = LMin + (IMX - 0.5) * RX; var MO = 100 * (1 - PDFC / PDFMX); if (xClose.getValue( - (LookBack - 1)) < PMO) MO = -MO; return - MO; }