PCRI_Fast.efs, PCRI_Slow.efs, PCRI_Slow_IFT.efs
File Name: PCRI_Fast.efs, PCRI_Slow.efs, PCRI_Slow_IFT.efs
Description:
Constructing The Put/Call Ratio Indicator by Sylvain Vervoort
Formula Parameters:
PCRI_Fast.efs
- TEMA period: 5
- PC ratio RSI period: 5
- PCRI Indicator Period: 5
- PC ratio rainbow average period: 2
- Base Period: 200
- Offset Period: 200
PCRI_Slow.efs
- PC ratio rainbow average period: 5
- PCRI period: 1
PCRI_Slow_IFT.efs
- PC ratio rainbow average period: 4
- PCRI period: 2
- RSI period: 8
Notes:
The related article is copyrighted material. If you are not a subscriber of Stocks & Commodities, please visit www.traders.com.
Download File:
PCRI_Fast.efs
PCRI_Slow.efs
PCRI_Slow_IFT.efs
PCRI_Fast.efs, PCRI_Slow.efs
PCRI_Slow.efs, PCRI_Slow_IFT.efs
EFS Code:
PCRI_Fast.efs
/********************************* Provided By: Interactive Data Corporation (Copyright © 2010) All rights reserved. This sample eSignal Formula Script (EFS) is for educational purposes only. Interactive Data Corporation reserves the right to modify and overwrite this EFS file with each new release. Description: Fast Put/Call Ratio Indicator Version: 1.00 15/09/2011 Formula Parameters: Default: TEMA period 5 PC ratio RSI period 5 PCRI Indicator Period 5 PC ratio rainbow average period 2 Base Period 200 Offset Period 200 Notes: The related article is copyrighted material. If you are not a subscriber of Stocks & Commodities, please visit www.traders.com. **********************************/ // predefined constants var PCRATIO_LOW = 0.45; var PCRATIO_HIGH = 0.9; var fpArray = new Array(); function preMain() { setPriceStudy(false); setCursorLabelName("PCRI_Fast", 0); setCursorLabelName("high", 1); setCursorLabelName("low", 2); setCursorLabelName("base", 3); setDefaultBarFgColor(Color.green, 1); setDefaultBarFgColor(Color.green, 2); setDefaultBarFgColor(Color.grey, 3); setDefaultBarThickness(0, 1); setDefaultBarThickness(0, 2); setDefaultBarThickness(1, 3); var x=0; fpArray[x] = new FunctionParameter("temaPeriod", FunctionParameter.NUMBER); with(fpArray[x++]) { setName("TEMA Period"); setLowerLimit(1); setUpperLimit(100); setDefault(5); } fpArray[x] = new FunctionParameter("rsiPeriod", FunctionParameter.NUMBER); with(fpArray[x++]) { setName("PC Ratio RSI Period"); setLowerLimit(2); setUpperLimit(100); setDefault(5); } fpArray[x] = new FunctionParameter("pcriPeriod", FunctionParameter.NUMBER); with(fpArray[x++]) { setName("PCRI Indicator Period"); setLowerLimit(1); setUpperLimit(100); setDefault(5); } fpArray[x] = new FunctionParameter("rainbPeriod", FunctionParameter.NUMBER); with(fpArray[x++]) { setName("PC ratio rainbow average period"); setLowerLimit(1); setUpperLimit(10); setDefault(2); } fpArray[x] = new FunctionParameter("basePeriod", FunctionParameter.NUMBER); with(fpArray[x++]) { setName("Base Period"); setLowerLimit(1); setUpperLimit(500); setDefault(200); } fpArray[x] = new FunctionParameter("offsetPeriod", FunctionParameter.NUMBER); with(fpArray[x++]) { setName("Offset Period"); setLowerLimit(1); setUpperLimit(500); setDefault(200); } } var bInit = false; var bVersion = null; var xPCratio = null; var xPC = null; var xPCtema = null; var xRainb = null; var xPCRI = null; var xBase = null; var xOffset = null; function main(temaPeriod, rsiPeriod, pcriPeriod, rainbPeriod, basePeriod, offsetPeriod) { if (bVersion == null) bVersion = verify(); if (bVersion == false) return; if (!bInit) { xPCratio = close(sym("$PCCE-ST")); xPC = efsInternal("LimitPC", PCRATIO_LOW, PCRATIO_HIGH, xPCratio); xPCtema = efsInternal("TEMA", temaPeriod, xPC); xRainb = efsInternal("RainbowAverage", rainbPeriod, xPCtema); xPCRI = wma(pcriPeriod, rsi(rsiPeriod, xRainb)); xBase = sma(basePeriod, xPCRI); xOffset = efsInternal("MSTD", offsetPeriod, xPCRI); bInit = true; } var vBase = xBase.getValue(0); var vOffset = xOffset.getValue(0); var lowLine = null; var highLine = null; if (vBase != null && vOffset != null) { lowLine = vBase - 1.3 * vOffset; highLine = vBase + 1.3 * vOffset; } var baseLine = 50; var vPCRI = xPCRI.getValue(0); if (vPCRI == null) return null; return new Array(vPCRI, highLine, lowLine, baseLine); } /************************************************* SUPPORT FUNCTIONS **************************************************/ var bInitRainbow = false; var xWMA1 = null; var xWMA2 = null; var xWMA3 = null; var xWMA4 = null; var xWMA5 = null; var xWMA6 = null; var xWMA7 = null; var xWMA8 = null; var xWMA9 = null; var xWMA10 = null; // rainbow averaging technique function RainbowAverage(period, series) { if (!bInitRainbow) { xWMA1 = wma(period, series); xWMA2 = wma(period, xWMA1); xWMA3 = wma(period, xWMA2); xWMA4 = wma(period, xWMA3); xWMA5 = wma(period, xWMA4); xWMA6 = wma(period, xWMA5); xWMA7 = wma(period, xWMA6); xWMA8 = wma(period, xWMA7); xWMA9 = wma(period, xWMA8); xWMA10 = wma(period, xWMA9); bInitRainbow = true; } var vWMA1 = xWMA1.getValue(0); var vWMA2 = xWMA2.getValue(0); var vWMA3 = xWMA3.getValue(0); var vWMA4 = xWMA4.getValue(0); var vWMA5 = xWMA5.getValue(0); var vWMA6 = xWMA6.getValue(0); var vWMA7 = xWMA7.getValue(0); var vWMA8 = xWMA8.getValue(0); var vWMA9 = xWMA9.getValue(0); var vWMA10 = xWMA10.getValue(0); if (vWMA10 == null) return null; var nRes = (vWMA1 + vWMA2 + vWMA3 + vWMA4 + vWMA5 + vWMA6 + vWMA7 + vWMA8 + vWMA9 + vWMA10)/10; return nRes; } // Limited Put/Call ratio function LimitPC(lowLevel, highLevel, PCratio) { var PCLim = PCratio.getValue(0); if (PCLim == null) return null; if(PCLim > highLevel) PCLim = highLevel; else if (PCLim < lowLevel) PCLim = lowLevel; return PCLim; } var bInitTEMA = false; var xEma1 = null; var xEma2 = null; var xEma3 = null; // Triple Exponential Moving Average function TEMA(period, series) { if(!bInitTEMA) { xEma1 = ema(period, series); xEma2 = ema(period, xEma1); xEma3 = ema(period, xEma2); bInitTEMA = true; } var vEma1 = xEma1.getValue(0); var vEma2 = xEma2.getValue(0); var vEma3 = xEma3.getValue(0); if (vEma3 == null) return null; return 3 * vEma1 - 3 * vEma2 + vEma3; } // Moving Standard Deviation (MSTD) var aPr = new Array(); var sPr = 0; var sPr2 = 0; function MSTD(period, series) { var vPr0 = series.getValue(0); if ( getBarState() == BARSTATE_ALLBARS ) { aPr.length = 0; sPr = 0; sPr2 = 0; } if ( getBarState() == BARSTATE_NEWBAR ) { if (aPr.length >= period ) { sPr-=aPr[0]; sPr2-=aPr[0]*aPr[0]; aPr.shift(); } sPr+=vPr0; sPr2+=vPr0*vPr0; aPr.push(vPr0); } if ( getBarState() == BARSTATE_CURRENTBAR ) { sPr-=aPr[aPr.length-1]; sPr2-=aPr[aPr.length-1]*aPr[aPr.length-1]; sPr+=vPr0; sPr2+=vPr0*vPr0; aPr[aPr.length-1] = vPr0; } var stdDev = null; if (aPr.length == period ) { stdDev = Math.sqrt( ( period*sPr2 - sPr*sPr )/( period*( period-1 )) ); } return stdDev; } // verify version function verify() { var b = false; if (getBuildNumber() < 779) { drawTextAbsolute(5, 35, "This study requires version 8.0 or later.", Color.white, Color.blue, Text.RELATIVETOBOTTOM|Text.RELATIVETOLEFT|Text.BOLD|Text.LEFT, null, 13, "error"); drawTextAbsolute(5, 20, "Click HERE to upgrade.@URL=http://www.esignal.com/download/default.asp", Color.white, Color.blue, Text.RELATIVETOBOTTOM|Text.RELATIVETOLEFT|Text.BOLD|Text.LEFT, null, 13, "upgrade"); return b; } else { b = true; } return b; }
PCRI_Slow.efs
/********************************* Provided By: Interactive Data Corporation (Copyright © 2010) All rights reserved. This sample eSignal Formula Script (EFS) is for educational purposes only. Interactive Data Corporation reserves the right to modify and overwrite this EFS file with each new release. Description: Slow Put/Call Ratio Indicator Version: 1.00 15/09/2011 Formula Parameters: Default: PC ratio rainbow average period 5 PCRI period 1 Notes: The related article is copyrighted material. If you are not a subscriber of Stocks & Commodities, please visit www.traders.com. **********************************/ // predefined constants var PCRATIO_LOW = 0.45; var PCRATIO_HIGH = 0.9; var fpArray = new Array(); function preMain() { setPriceStudy(false); setCursorLabelName("PCRI_Slow", 0); var x=0; fpArray[x] = new FunctionParameter("rainbPeriod", FunctionParameter.NUMBER); with(fpArray[x++]) { setName("PC ratio rainbow average period"); setLowerLimit(1); setUpperLimit(10); setDefault(5); } fpArray[x] = new FunctionParameter("pcriPeriod", FunctionParameter.NUMBER); with(fpArray[x++]) { setName("PCRI period"); setLowerLimit(1); setUpperLimit(100); setDefault(1); } } var bInit = false; var bVersion = null; var xPCratio = null; var xPC = null; var xRainb = null; var xPCRI = null; function main(rainbPeriod, pcriPeriod) { if (bVersion == null) bVersion = verify(); if (bVersion == false) return; if (!bInit) { xPCratio = close(sym("$PCCE-ST")); xPC = efsInternal("LimitPC", PCRATIO_LOW, PCRATIO_HIGH, xPCratio); xRainb = efsInternal("RainbowAverage", rainbPeriod, xPC); xPCRI = wma(pcriPeriod, xRainb); bInit = true; } var vPCRI = xPCRI.getValue(0); if (vPCRI == null ) return null; return vPCRI; } /************************************************* SUPPORT FUNCTIONS **************************************************/ var bInitRainbow = false; var xWMA1 = null; var xWMA2 = null; var xWMA3 = null; var xWMA4 = null; var xWMA5 = null; var xWMA6 = null; var xWMA7 = null; var xWMA8 = null; var xWMA9 = null; var xWMA10 = null; // rainbow averaging technique function RainbowAverage(period, series) { if (!bInitRainbow) { xWMA1 = wma(period, series); xWMA2 = wma(period, xWMA1); xWMA3 = wma(period, xWMA2); xWMA4 = wma(period, xWMA3); xWMA5 = wma(period, xWMA4); xWMA6 = wma(period, xWMA5); xWMA7 = wma(period, xWMA6); xWMA8 = wma(period, xWMA7); xWMA9 = wma(period, xWMA8); xWMA10 = wma(period, xWMA9); bInitRainbow = true; } var nRes = 0; var vWMA1 = xWMA1.getValue(0); var vWMA2 = xWMA2.getValue(0); var vWMA3 = xWMA3.getValue(0); var vWMA4 = xWMA4.getValue(0); var vWMA5 = xWMA5.getValue(0); var vWMA6 = xWMA6.getValue(0); var vWMA7 = xWMA7.getValue(0); var vWMA8 = xWMA8.getValue(0); var vWMA9 = xWMA9.getValue(0); var vWMA10 = xWMA10.getValue(0); if (vWMA10 == null) return null; nRes = (vWMA1 + vWMA2 + vWMA3 + vWMA4 + vWMA5 + vWMA6 + vWMA7 + vWMA8 + vWMA9 + vWMA10)/10; return nRes; } // Limited Put/Call ratio function LimitPC(lowLevel, highLevel, PCratio) { var PCLim = PCratio.getValue(0); if (PCLim == null) return null; if(PCLim > highLevel) PCLim = highLevel; else if (PCLim < lowLevel) PCLim = lowLevel; return PCLim; } // verify version function verify() { var b = false; if (getBuildNumber() < 779) { drawTextAbsolute(5, 35, "This study requires version 8.0 or later.", Color.white, Color.blue, Text.RELATIVETOBOTTOM|Text.RELATIVETOLEFT|Text.BOLD|Text.LEFT, null, 13, "error"); drawTextAbsolute(5, 20, "Click HERE to upgrade.@URL=http://www.esignal.com/download/default.asp", Color.white, Color.blue, Text.RELATIVETOBOTTOM|Text.RELATIVETOLEFT|Text.BOLD|Text.LEFT, null, 13, "upgrade"); return b; } else { b = true; } return b; }
PCRI_Slow_IFT.efs
/********************************* Provided By: Interactive Data Corporation (Copyright © 2010) All rights reserved. This sample eSignal Formula Script (EFS) is for educational purposes only. Interactive Data Corporation reserves the right to modify and overwrite this EFS file with each new release. Description: PCRI Slow Inverse Fisher Transform Indicator Version: 1.00 15/09/2011 Formula Parameters: Default: PC ratio rainbow average period 4 PCRI period 2 RSI period 8 Notes: The related article is copyrighted material. If you are not a subscriber of Stocks & Commodities, please visit www.traders.com. **********************************/ // predefined constants var PCRATIO_LOW = 0.45; var PCRATIO_HIGH = 0.9; var fpArray = new Array(); function preMain() { setPriceStudy(false); setCursorLabelName("PCRI_Slow_IFT", 0); var x=0; fpArray[x] = new FunctionParameter("rainbPeriod", FunctionParameter.NUMBER); with(fpArray[x++]) { setName("PC ratio rainbow average period"); setLowerLimit(1); setUpperLimit(10); setDefault(4); } fpArray[x] = new FunctionParameter("pcriPeriod", FunctionParameter.NUMBER); with(fpArray[x++]) { setName("PCRI period"); setLowerLimit(1); setUpperLimit(100); setDefault(2); } fpArray[x] = new FunctionParameter("rsiPeriod", FunctionParameter.NUMBER); with(fpArray[x++]) { setName("RSI period"); setLowerLimit(1); setUpperLimit(100); setDefault(8); } } var bInit = false; var bVersion = null; var xPCratio = null; var xPC = null; var xRainb = null; var xPcri = null; var xPcriRsi = null; function main(rainbPeriod, pcriPeriod, rsiPeriod) { if (bVersion == null) bVersion = verify(); if (bVersion == false) return; if (!bInit) { xPCratio = close(sym("$PCCE-ST")); xPC = efsInternal("LimitPC", PCRATIO_LOW, PCRATIO_HIGH, xPCratio); xRainb = efsInternal("RainbowAverage", rainbPeriod, xPC); xPcri = wma(pcriPeriod, xRainb); xPcriRsi = rsi(rsiPeriod, xPcri); bInit = true; } var vPcriRsi = xPcriRsi.getValue(0); if(vPcriRsi == null) return null; var x = 0.1 * (vPcriRsi - 50); var invfish = ((Math.exp(2*x)-1)/(Math.exp(2*x)+1)+1)*50; return invfish; } /************************************************* SUPPORT FUNCTIONS **************************************************/ var bInitRainbow = false; var xWMA1 = null; var xWMA2 = null; var xWMA3 = null; var xWMA4 = null; var xWMA5 = null; var xWMA6 = null; var xWMA7 = null; var xWMA8 = null; var xWMA9 = null; var xWMA10 = null; // rainbow averaging technique function RainbowAverage(period, series) { if (!bInitRainbow) { xWMA1 = wma(period, series); xWMA2 = wma(period, xWMA1); xWMA3 = wma(period, xWMA2); xWMA4 = wma(period, xWMA3); xWMA5 = wma(period, xWMA4); xWMA6 = wma(period, xWMA5); xWMA7 = wma(period, xWMA6); xWMA8 = wma(period, xWMA7); xWMA9 = wma(period, xWMA8); xWMA10 = wma(period, xWMA9); bInitRainbow = true; } var vWMA1 = xWMA1.getValue(0); var vWMA2 = xWMA2.getValue(0); var vWMA3 = xWMA3.getValue(0); var vWMA4 = xWMA4.getValue(0); var vWMA5 = xWMA5.getValue(0); var vWMA6 = xWMA6.getValue(0); var vWMA7 = xWMA7.getValue(0); var vWMA8 = xWMA8.getValue(0); var vWMA9 = xWMA9.getValue(0); var vWMA10 = xWMA10.getValue(0); if (vWMA10 == null) return null; var nRes = (vWMA1 + vWMA2 + vWMA3 + vWMA4 + vWMA5 + vWMA6 + vWMA7 + vWMA8 + vWMA9 + vWMA10)/10; return nRes; } // Limited Put/Call ratio function LimitPC(lowLevel, highLevel, PCratio) { var PCLim = PCratio.getValue(0); if (PCLim == null) return null; if(PCLim > highLevel) PCLim = highLevel; else if (PCLim < lowLevel) PCLim = lowLevel; return PCLim; } // verify version function verify() { var b = false; if (getBuildNumber() < 779) { drawTextAbsolute(5, 35, "This study requires version 8.0 or later.", Color.white, Color.blue, Text.RELATIVETOBOTTOM|Text.RELATIVETOLEFT|Text.BOLD|Text.LEFT, null, 13, "error"); drawTextAbsolute(5, 20, "Click HERE to upgrade.@URL=http://www.esignal.com/download/default.asp", Color.white, Color.blue, Text.RELATIVETOBOTTOM|Text.RELATIVETOLEFT|Text.BOLD|Text.LEFT, null, 13, "upgrade"); return b; } else { b = true; } return b; }