VolatilityVolumeBarFormula.efs EFSLibrary - Discussion Board
File Name: VolatilityVolumeBarFormula.efs
Description:
FVE Volatility color-coded Volume bar
Formula Parameters:
Samples : 22
AvgLength : 50
AlertPct : 70
Cintra : 0.1
Cinter : 0.1
Notes:
The FVE is a pure volume indicator. Unlike most of the other indicators
(except OBV), price change doesn?t come into the equation for the FVE
(price is not multiplied by volume), but is only used to determine whether
money is flowing in or out of the stock. This is contrary to the current trend
in the design of modern money flow indicators. The author decided against a
price-volume indicator for the following reasons:
- A pure volume indicator has more power to contradict.
- The number of buyers or sellers (which is assessed by volume) will be the same,
regardless of the price fluctuation.
- Price-volume indicators tend to spike excessively at breakouts or breakdowns.
This study is an addition to FVE indicator. Indicator plots different-coloured volume
bars depending on volatility.
Download File:
VolatilityVolumeBarFormula.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: FVE Volatility color-coded Volume bar Version: 1.0 05/26/2009 Formula Parameters: Default: Samples 22 AvgLength 50 AlertPct 70 Cintra 0.1 Cinter 0.1 Notes: The FVE is a pure volume indicator. Unlike most of the other indicators (except OBV), price change doesn?t come into the equation for the FVE (price is not multiplied by volume), but is only used to determine whether money is flowing in or out of the stock. This is contrary to the current trend in the design of modern money flow indicators. The author decided against a price-volume indicator for the following reasons: - A pure volume indicator has more power to contradict. - The number of buyers or sellers (which is assessed by volume) will be the same, regardless of the price fluctuation. - Price-volume indicators tend to spike excessively at breakouts or breakdowns. This study is an addition to FVE indicator. Indicator plots different-coloured volume bars depending on volatility. **********************************/ var fpArray = new Array(); var bInit = false; function preMain(){ setStudyTitle("Volatility color-coded Volume Bar Formula"); setCursorLabelName("VBF",0); setDefaultBarFgColor(Color.green,0); setCursorLabelName("VBF EMA",1); setDefaultBarFgColor(Color.blue,1); setDefaultBarThickness(2); var x = 0; fpArray[x] = new FunctionParameter("Samples", FunctionParameter.NUMBER); with(fpArray[x++]) { setLowerLimit(1); setDefault(22); } fpArray[x] = new FunctionParameter("AvgLength", FunctionParameter.NUMBER); with(fpArray[x++]) { setLowerLimit(1); setDefault(50); } fpArray[x] = new FunctionParameter("AlertPct", FunctionParameter.NUMBER); with(fpArray[x++]) { setLowerLimit(1); setDefault(70); } fpArray[x] = new FunctionParameter("Cintra", FunctionParameter.NUMBER); with(fpArray[x++]) { setLowerLimit(0.001); setDefault(0.1); } fpArray[x] = new FunctionParameter("Cinter", FunctionParameter.NUMBER); with(fpArray[x++]) { setLowerLimit(0.001); setDefault(0.1); } } var xClose = null; var xhlc3 = null; var xhl2 = null; var xIntra = null; var xInter = null; var xStDevIntra = null; var xStDevInter = null; var xVolume = null; var xMA = null; function main(AvgLength, AlertPct, Cintra, Cinter, Samples){ var nBarState = getBarState(); var TP = 0; var TP1 = 0; var Intra = 0; var Vintra = 0; var Inter = 0; var Vinter = 0; var CutOff = 0; var MF = 0; var nClose = 0; if (nBarState == BARSTATE_ALLBARS) { if(AvgLength == null) AvgLength = 50; if(AlertPct == null) AlertPct = 70; if(Cintra == null) Cintra = 0.1; if(Cinter == null) Cinter = 0.1; if(Samples== null) Samples= 22; } if (bInit == false) { xVolume = volume(); xClose = close(); xhlc3 = hlc3(); xhl2 = hl2(); xMA = sma(AvgLength, xVolume); xIntra = efsInternal("Calc_Intra", xhlc3); xInter = getSeries(xIntra, 1); xStDevIntra = efsInternal("Calc_StdDev", Samples, sma(Samples, xIntra), xIntra); xStDevInter = efsInternal("Calc_StdDev", Samples, sma(Samples, xInter), xInter); bInit = true; } TP = xhlc3.getValue(0); TP1 = xhlc3.getValue(-1); Intra = xIntra.getValue(0); Vintra = xStDevIntra.getValue(0); Inter = xInter.getValue(0); Vinter = xStDevInter.getValue(0); nClose = xClose.getValue(0); CutOff = Cintra * Vintra + Cinter * Vinter; MF = nClose - xhl2.getValue(0) + TP - TP1; if (Vinter == null) return; if(MF > CutOff * nClose) setBarFgColor(Color.green); else if(MF < -1 * CutOff * nClose) setBarFgColor(Color.red); else setBarFgColor(Color.blue); return new Array(xVolume.getValue(0), xMA.getValue(0)); } function Calc_Intra(xhlc3) { var nResIntra = 0; var nResInter = 0; if (xhlc3.getValue(-1) == null) return; nResIntra = Math.log(high(0)) - Math.log(low(0)); nResInter = Math.log(xhlc3.getValue(0)) - Math.log(xhlc3.getValue(-1)); return new Array(nResIntra, nResInter); } function Calc_StdDev(nPeriod, xMA, xSeries) { var StdDev = 0; var SumSqr = 0; var counter = 0; if(xMA.getValue(0) == null) return; for(counter = 0; counter < nPeriod; counter++) SumSqr += Math.pow((xSeries.getValue(-counter) - xMA.getValue(0)), 2); StdDev = Math.sqrt(SumSqr / nPeriod); return StdDev; }