Ultimate Oscillator

ICE Data Services -


UltimateOscillator.efs  EFSLibrary - Discussion Board
  

File Name: UltimateOscillator.efs


Description:
Ultimate Oscillator


Formula Parameters:
Short Period : 7
Med Period : 14
Long Period : 28

Notes:
Oscillators typically compare a security's smoothed price with its
price x-periods ago. Larry Williams noted that the value of this type
of oscillator can vary greatly depending on the number of time periods
used during the calculation. Thus, he developed the Ultimate Oscillator
that uses weighted sums of three oscillators, each of which uses a different
time period.
The three oscillators are based on Williams' definitions of buying and
selling "pressure".

Download File:
UltimateOscillator.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:            Ultimate Oscillator    Version:            1.0  05/08/2009    Formula Parameters:                     Default:    Short Period                        7    Med Period                          14    Long Period                         28Notes:    Oscillators typically compare a security's smoothed price with its     price x-periods ago. Larry Williams noted that the value of this type     of oscillator can vary greatly depending on the number of time periods     used during the calculation. Thus, he developed the Ultimate Oscillator     that uses weighted sums of three oscillators, each of which uses a different     time period.    The three oscillators are based on Williams' definitions of buying and     selling "pressure." **********************************/var fpArray = new Array();var bInit = false;function preMain() {    setStudyTitle("Ultimate Oscillator");    setCursorLabelName("UO");    addBand(70, PS_SOLID, 1, Color.red);    addBand(50, PS_SOLID, 1, Color.yellow);    addBand(30, PS_SOLID, 1, Color.green);        setStudyMax(80);    setStudyMin(20);    var x = 0;    fpArray[x] = new FunctionParameter("Period_short", FunctionParameter.NUMBER);    with(fpArray[x++]) {        setName("Short Period");        setLowerLimit(1);        setDefault(7);    }        fpArray[x] = new FunctionParameter("Period_med", FunctionParameter.NUMBER);    with(fpArray[x++]) {        setName("Med. Period");        setLowerLimit(1);        setDefault(14);    }        fpArray[x] = new FunctionParameter("Period_long", FunctionParameter.NUMBER);    with(fpArray[x++]) {        setName("Long Period");        setLowerLimit(1);        setDefault(28);    }        }var xUO = null;function main(Period_short, Period_med, Period_long){var nBarState = getBarState();    if (nBarState == BARSTATE_ALLBARS) {        if (Period_short == null) Period_short = 7;        if (Period_med == null) Period_med = 14;        if (Period_long == null) Period_long = 28;    }    if (bInit == false) {        xUO = efsInternal("Calc_UO", Period_short, Period_med, Period_long);        bInit =  true;    }    nUO = xUO.getValue(0);    if (nUO == null) return;    return nUO;}var xMA1TL = null;var xMA2TL = null;var xMA3TL = null;var xMA1TR = null;var xMA2TR = null;var xMA3TR = null;var xTL = null;var xTR = null;var bSecondInit = false;function Calc_UO(Period_short, Period_med, Period_long) {var nMA1TL = 0;var nMA2TL = 0;var nMA3TL = 0;var nMA1TR = 0;var nMA2TR = 0;var nMA3TR = 0;var nRes = 0;    if (bSecondInit == false) {        xTL = efsInternal("Calc_TrueLow");        xMA1TL = sma(Period_short, xTL);        xMA2TL = sma(Period_med, xTL);        xMA3TL = sma(Period_long, xTL);        xTR = atr(1);        xMA1TR = sma(Period_short, xTR);        xMA2TR = sma(Period_med, xTR);        xMA3TR = sma(Period_long, xTR);        bSecondInit = true;    }    nMA1TL = xMA1TL.getValue(0);        nMA2TL = xMA2TL.getValue(0);    nMA3TL = xMA3TL.getValue(0);    nMA1TR = xMA1TR.getValue(0);        nMA2TR = xMA2TR.getValue(0);    nMA3TR = xMA3TR.getValue(0);    if (nMA1TL == null || nMA2TL == null || nMA3TL == null) return;    nRes = (4 * nMA1TL / nMA1TR + 2 * nMA2TL / nMA2TR + nMA2TL / nMA2TR) / 7;    return nRes * 100;}function Calc_TrueLow() {var nRes = 0;var nClose1 = close(-1);    if (nClose1 == null) return;    nRes = Math.min(low(0), nClose1);    nRes = close(0) - nRes;    return nRes;}