File Name: EMAof(StochOfRSI).efs
Description:
Plots the Exponential Moving Average of the %K output from a Stochastic of RSI study.
Formula Parameters:
RSI Price Source - Close - [Open, High, Low, Close, HL/2, HLC/3, OHLC/4]
RSI Length - 13
%K Length - 8
%K Smoothing - 8
%D Length - 5
Smooth %K - true - [true, false]
EMA Length - 3
Notes:
NA
Download File:
EMAof(StochOfRSI).efs
EFS Code:
Description:
Plots the Exponential Moving Average of the %K output from a Stochastic of RSI study.
Formula Parameters:
RSI Price Source - Close - [Open, High, Low, Close, HL/2, HLC/3, OHLC/4]
RSI Length - 13
%K Length - 8
%K Smoothing - 8
%D Length - 5
Smooth %K - true - [true, false]
EMA Length - 3
Notes:
NA
Download File:
EMAof(StochOfRSI).efs
EFS Code:
PHP Code:
/**************
Provided By : eSignal. (c) Copyright 2004
*************/
addBand(90, PS_SOLID, 2, Color.yellow, "Upper");
addBand(10, PS_SOLID, 2, Color.yellow, "Lower");
function preMain() {
setStudyTitle("Stochastic of RSI ");
setCursorLabelName("\%K of RSI", 0);
setCursorLabelName("\%D of RSI", 1);
setCursorLabelName("EMA of \%K ", 2);
setDefaultBarFgColor(Color.blue, 0);
setDefaultBarFgColor(Color.red, 1);
setDefaultBarFgColor(Color.navy, 2);
setStudyMax(105);
setStudyMin(-5);
var fp1 = new FunctionParameter("PriceSource", FunctionParameter.STRING);
fp1.setName("RSI Price Source");
fp1.addOption("Open");
fp1.addOption("High");
fp1.addOption("Low");
fp1.addOption("Close");
fp1.addOption("HL/2");
fp1.addOption("HLC/3");
fp1.addOption("OHLC/4");
fp1.setDefault("Close");
var fp2 = new FunctionParameter("rsiLength", FunctionParameter.NUMBER);
fp2.setName("RSI Length");
fp2.setLowerLimit(1);
fp2.setDefault(13);
var fp3 = new FunctionParameter("Klength", FunctionParameter.NUMBER);
fp3.setName("\%K Length");
fp3.setLowerLimit(1);
fp3.setDefault(8);
var fp4 = new FunctionParameter("Ksmooth", FunctionParameter.NUMBER);
fp4.setName("\%K Smoothing");
fp4.setLowerLimit(1);
fp4.setDefault(8);
var fp5 = new FunctionParameter("Dlength", FunctionParameter.NUMBER);
fp5.setName("\%D Length");
fp5.setLowerLimit(1);
fp5.setDefault(5);
var fp6 = new FunctionParameter("SmoothKline", FunctionParameter.BOOLEAN);
fp6.setName("Smooth \%K");
fp6.setDefault(true);
var fp7 = new FunctionParameter("EMAlength", FunctionParameter.NUMBER);
fp7.setName("EMA Length");
fp7.setLowerLimit(1);
fp7.setDefault(3);
}
function HHrsi(nLength) {
var hh = null;
hh = aRSI[0];
for(i = 0; i < nLength; i++) {
hh = Math.max(hh, aRSI[i]);
}
return hh;
}
function LLrsi(nLength) {
var ll = null;
ll = aRSI[0];;
for(i = 0; i < nLength; i++) {
ll = Math.min(ll, aRSI[i]);
}
return ll;
}
var vStochRSI = null;
function StochK(inputrsiLength, nLength, nSmoothing) {
var nState = getBarState();
var percentK;
var vValue;
var ll, hh;
var sum = 0;
ll = LLrsi(inputrsiLength)
hh = HHrsi(inputrsiLength);
if (nState == BARSTATE_NEWBAR && vStochRSI != null) {
aStoch.pop();
aStoch.unshift(vStochRSI);
}
vStochRSI = ((vRSI - ll) / (hh - ll)) * 100; // no smoothing
aStoch[0] = vStochRSI;
if (vSmooth == "true" || vSmooth == true) {
for(i = 0; i < nSmoothing; i++) { // for smoothing
sum += aStoch[i];
}
sum /= nSmoothing;
return sum;
} else {
return vStochRSI;
}
}
function StochD(nSmoothing) {
var sum = 0;
for(i = 0; i < nSmoothing; i++) {
sum += aStochb[i];
}
sum = sum / nSmoothing;
return sum;
}
function EMA(nLength, nArray) {
var nBarState = getBarState();
var dSum = 0.0;
if(nBarState == BARSTATE_ALLBARS || bPrimed == false) {
dPercent = (2.0 / (nLength + 1.0));
bPrimed = false;
}
if (nBarState == BARSTATE_NEWBAR) {
vEMA1 = vEMA;
}
if(bPrimed == false) {
for(i = 0; i < nLength; i++) {
dSum += nArray[i];
}
bPrimed = true;
//debugPrintln(nArray);
return (dSum / nLength);
} else {
return (((vK - vEMA1) * dPercent) + vEMA1);
}
}
var RSIstudy = null;
var aRSI = null;
var vRSI = null;
var aStoch = null;
var aStochb = null;
var vSmooth = "true";
var bEdit = true;
var vK = null;
var vD = null;
// EMA variables
var vEMA = null;
var vEMA1 = null;
var dPercent = 0.0;
var bPrimed = false;
function main(PriceSource, rsiLength, Klength, Ksmooth, Dlength, SmoothKline, EMAlength) {
var nState = getBarState();
if (bEdit == true || RSIstudy == null || aRSI == null || aStoch == null) {
RSIstudy = new RSIStudy(rsiLength, PriceSource);
aStoch = new Array(Math.max(Ksmooth, Klength));
aStochb = new Array(Math.max(Dlength, EMAlength));
aRSI = new Array(Math.max(Klength, Ksmooth));
if (SmoothKline != null) vSmooth = SmoothKline;
bEdit = false;
}
if (nState == BARSTATE_NEWBAR && vRSI != null) {
aRSI.pop();
aRSI.unshift(vRSI);
aStochb.pop();
aStochb.unshift(vK);
}
vRSI = RSIstudy.getValue(RSIStudy.RSI);
if (vRSI == null) return;
aRSI[0] = vRSI;
vK = null;
vD = null;
var vLen = Math.max(Klength, Ksmooth);
if (aRSI[vLen-1] != null) {
vK = StochK(Klength, Klength, Ksmooth);
aStochb[0] = vK;
vD = StochD(Dlength);
} else {
return;
}
if (aStochb[EMAlength-1] != null && !isNaN(aStochb[EMAlength-1])) {
vEMA = EMA(EMAlength, aStochb);
}
return new Array(vK, vD, vEMA);
}