ICS.efs
EFSLibrary - Discussion Board
File Name: ICS.efs
Description:
Index of Chart Sentiment (ICS)
Formula Parameters:
- BBlength : 55
- Deviations : 0.5
Notes:
The main problem of technical indicators is the identifying a trend in its early stages.
To effectively do this, Mr. Likhovidov created an indicator called the Index of Chart Sentiment (ICS). The ICS could reach very high levels and this corresponds to an overbought market; very low values of the index correspond to an oversold market.
When the index moves from lower to higher levels (period of bullish sentiment of the market) the dominant movement of the chart should be to the upside.
The algorithm for calculating the CandleCode involves a long-period analysis of the chart. But this analysis does not consist of the usual smoothing and therefore does not result in any lag.
To fing more information please refer Index Of Chart Sentiment article by Viktor Likhovidov in recent S&C issue.
Download File:
ICS.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: Index of Chart Sentiment (ICS) Version: 1.0 05/13/2009 Formula Parameters: Default: BBlength 55 Deviations 0.5 Notes: The main problem of technical indicators is the identifying a trend in its early stages. To effectively do this, Mr. Likhovidov created an indicator called the Index of Chart Sentiment (ICS). The ICS could reach very high levels and this corresponds to an overbought market; very low values of the index correspond to an oversold market. When the index moves from lower to higher levels (period of bullish sentiment of the market) the dominant movement of the chart should be to the upside. The algorithm for calculating the CandleCode involves a long-period analysis of the chart. But this analysis does not consist of the usual smoothing and therefore does not result in any lag. To fing more information please refer Index Of Chart Sentiment article by Viktor Likhovidov in recent S&C issue. **********************************/ var fpArray = new Array(); var bInit = false; function preMain() { setPriceStudy(false); setShowTitleParameters( false ); setStudyTitle("Index of Chart Sentiment"); setCursorLabelName("ICS",0); setDefaultBarFgColor(Color.blue,0); var x = 0; fpArray[x] = new FunctionParameter("BBlength", FunctionParameter.NUMBER); with(fpArray[x++]) { setLowerLimit(1); setDefault(55); } fpArray[x] = new FunctionParameter("Deviations", FunctionParameter.NUMBER); with(fpArray[x++]) { setLowerLimit(0.001); setDefault(0.5); } } var xICS = null; function main(BBlength, Deviations) { var nBarState = getBarState(); var nICS = 0; if (nBarState == BARSTATE_ALLBARS) { if(BBlength == null) BBlength = 55 if(Deviations == null) Deviations = 0.5 } if (bInit == false) { xICS = ema(24, ema(24, efsInternal("Calc_ICS", BBlength, Deviations))); bInit = true; } nICS = xICS.getValue(0); if (nICS == null) return; return nICS; } var xOpen = null; var xClose = null; var xBody = null; var xUpperShadow = null; var xLowerShadow = null; var xThTop_Body = null; var xThBot_Body = null; var xThTop_Ushd = null; var xThBot_Ushd = null; var xThTop_Lshd = null; var xThBot_Lshd = null; var bSecondInit = false; function Calc_ICS(BBlength, Deviations) { var Body = 0; var UpperShadow = 0; var LowerShadow = 0; var ThBot_Body = 0; var ThTop_Body = 0; var ThBot_Ushd = 0; var ThTop_Ushd = 0; var ThBot_Lshd = 0; var ThTop_Lshd = 0; var ColorCode = 0; var BodyCode = 0; var UshdCode = 0; var LshdCode = 0; var nRes = 0; if (bSecondInit == false) { xOpen = open(); xClose = close(); xBody = efsInternal("GetCandleValue", xOpen, xClose); xUpperShadow = getSeries(xBody, 1); xLowerShadow = getSeries(xBody, 2); xThTop_Body = upperBB(BBlength, Deviations, xBody); xThBot_Body = lowerBB(BBlength, Deviations, xBody); xThTop_Ushd = upperBB(BBlength, Deviations, xUpperShadow); xThBot_Ushd = lowerBB(BBlength, Deviations, xUpperShadow); xThTop_Lshd = upperBB(BBlength, Deviations, xLowerShadow); xThBot_Lshd = lowerBB(BBlength, Deviations, xLowerShadow); bSecondInit = true; } Body = xBody.getValue(0); UpperShadow = xUpperShadow.getValue(0); LowerShadow = xLowerShadow.getValue(0); ThTop_Body = xThTop_Body.getValue(0); ThBot_Body = xThBot_Body.getValue(0); ThTop_Ushd = xThTop_Ushd.getValue(0); ThBot_Ushd = xThBot_Ushd.getValue(0); ThTop_Lshd = xThTop_Lshd.getValue(0); ThBot_Lshd = xThBot_Lshd.getValue(0); if (ThBot_Lshd == null) return; if(xClose.getValue(0) >= xOpen.getValue(0)){ ColorCode = 64; if(xOpen.getValue(0) == xClose.getValue(0)) BodyCode = 0; else if(Body < ThBot_Body) BodyCode = 16; else if(Body < ThTop_Body) BodyCode = 32; else BodyCode = 48; } else{ ColorCode = 0; if(Body < ThBot_Body) BodyCode = 32; else if(Body < ThTop_Body) BodyCode = 16; else BodyCode = 0; } if(UpperShadow == 0) UshdCode = 0; else if(UpperShadow < ThBot_Ushd) UshdCode = 4; else if(UpperShadow < ThTop_Ushd) UshdCode = 8; else UshdCode = 12; if(LowerShadow == 0) LshdCode = 3; else if(LowerShadow < ThBot_Lshd) LshdCode = 2; else if(LowerShadow < ThTop_Lshd) LshdCode = 1; else LshdCode = 0; nRes = ColorCode + BodyCode + UshdCode + LshdCode; return nRes; } function GetCandleValue(xOpen, xClose) { var Body = Math.abs(xOpen.getValue(0) - xClose.getValue(0)); var UpperShadow = high(0) - Math.max(xOpen.getValue(0),xClose.getValue(0)); var LowerShadow = Math.min(xOpen.getValue(0),xClose.getValue(0)) - low(0); return new Array(Body, UpperShadow, LowerShadow) }