ProjectionOsc.efs
File Name: ProjectionOsc.efs
Description:
Projection Oscillator
Formula Parameters:
- Length : 14
- Smoothing : 3
Notes:
Projection bands, a new method using trading bands, projects market data forward along the data trend with the maxima and minima of the projections defining the band. The method provides another means of signaling potential changes for market direction relative to the trend.
This is the second component of this method, the Projection Oscillator indicator.
In fact, the projection oscillator might be thought of as being analogous to the stochastics indicator with a trend correction.
This indicator is calculated according to the next formula:
POC = 100 x (C - PLC) / (PUC - PLC)
Actually this indicator plots 2 indicators: Projection Oscillator itself and smoothed Projection Oscillator, which is simply the n day exponential moving average (EMA) of Projection oscillator
Download File:
ProjectionOsc.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: Projection Oscillator Version: 1.0 04/27/2009 Formula Parameters: Default: Length 14 Smoothing 3 Notes: Projection bands, a new method using trading bands, projects market data forward along the data trend with the maxima and minima of the projections defining the band. The method provides another means of signaling potential changes for market direction relative to the trend. This is the second component of this method, the Projection Oscillator indicator. In fact, the projection oscillator might be thought of as being analogous to the stochastics indicator with a trend correction. This indicator is calculated according to the next formula: POC = 100 x (C - PLC) / (PUC - PLC) Actually this indicator plots 2 indicators: Projection Oscillator itself and smoothed Projection Oscillator, which is simply the n day exponential moving average (EMA) of Projection oscillator **********************************/ var fpArray = new Array(); var bInit = false; function preMain() { setStudyTitle("Projection Oscillator"); setCursorLabelName("PO", 0); setCursorLabelName("SlowPO", 1); setDefaultBarFgColor(Color.red, 0); setDefaultBarFgColor(Color.aqua, 1); var x = 0; fpArray[x] = new FunctionParameter("Length", FunctionParameter.NUMBER); with(fpArray[x++]) { setLowerLimit(1); setDefault(14); } fpArray[x] = new FunctionParameter("Smoothing", FunctionParameter.NUMBER); with(fpArray[x++]) { setLowerLimit(1); setDefault(3); } } var xPOC = null; var xSlowPO = null; function main(Length, Smoothing) { var nBarState = getBarState(); if (nBarState == BARSTATE_ALLBARS) { if (Length == null) Length = 14; if (Smoothing == null) Smoothing = 3; } if (bInit == false) { xPOC = efsInternal("Calc_Value", Length); xSlowPO = ema(Smoothing, xPOC); bInit = true; } var PO = xPOC.getValue(0); var SlowPO = xSlowPO.getValue(0); if (SlowPO == null) return; return new Array(PO, SlowPO); } var bSecondInit = false; var xHigh = null; var xLow = null; function Calc_Value(Length) { var SL = 0; var SH = 0; var Sum1_1 = 0; var Sum1_2 = 0; var SumY1 = 0; var SumY2 = 0; var i = 0; var Value2 = 0; var Value3 = 0; var PL = 0; var PU = 0; var SlowPO = 0; if (bSecondInit == false) { xHigh = high(); xLow = low(); bSecondInit = true; } if (xHigh.getValue(-Length) == null) return; var SumBars = Length * (Length - 1) * .5; var SumSqrBars = (Length - 1) * Length * (2 * Length - 1) / 6; for (i = 0; i < Length; i++) { Sum1_1 += i * xLow.getValue( - i); Sum1_2 += i * xHigh.getValue( - i); SumY1 += xLow.getValue( - i); SumY2 += xHigh.getValue( - i); } var Sum2_1 = SumBars * SumY1; var Sum2_2 = SumBars * SumY2; var Num1_1 = Length * Sum1_1 - Sum2_1; var Num1_2 = Length * Sum1_2 - Sum2_2; var Num2 = SumBars * SumBars - Length * SumSqrBars; SL = Num1_1 / Num2; SH = Num1_2 / Num2; for (i = 1; i <= Length; i++) { Value2 = xLow.getValue( - (i - 1)) + (SL * i - 1); Value3 = xHigh.getValue( - (i - 1)) + (SH * i - 1); if (i == 1) { PL = Value2; PU = Value3; } if (Value2 < PL) PL = Value2; if (Value3 > PU) PU = Value3; } var PO = 100 * (close(0) - PL) / (PU - PL); return PO; }