# PriceAndStoch.efs

ICE Data Services -

PriceAndStoch.efs

File Name: PriceAndStoch.efs

Description:

This formula converts the Stochastic outputs to the price scale of the chart to create an overlay of the Stochastic where the study shares the same y-axis as price. This creates a fixed, or scaled, relationship between the price and the Stochastic study.

Formula Parameters:

• %K Length: 14
• %K Smoothing: 1
• %D Length: 3
• Length for Scaling: 50

Notes:
The "Length for Scaling" parameter determines the conversion factor for the Stochastic outputs. The basic rule of thumb here is to enter a number equal to the number of visible bars in your chart.

PriceAndStoch.efs

EFS Code:

```/*****************************************************************
Provided By : eSignal. (c) Copyright 2003
*****************************************************************/

function preMain() {
setPriceStudy(true);
setStudyTitle("Price And Stochastics ");
setCursorLabelName("%K", 0);
setCursorLabelName("%D", 1);

setDefaultBarThickness(1, 0);
setDefaultBarThickness(1, 1);

setDefaultBarFgColor(Color.blue, 0);
setDefaultBarFgColor(Color.red, 1);

var fp1 = new FunctionParameter("nKlength", FunctionParameter.NUMBER);
fp1.setName("%K Length");
fp1.setLowerLimit(1);
fp1.setDefault(14);

var fp2 = new FunctionParameter("nKsmooth", FunctionParameter.NUMBER);
fp2.setName("%K Smoothing");
fp2.setLowerLimit(1);
fp2.setDefault(1);

var fp3 = new FunctionParameter("nDlength", FunctionParameter.NUMBER);
fp3.setName("%D Length");
fp3.setLowerLimit(1);
fp3.setDefault(3);

var fp4 = new FunctionParameter("nScaleLength", FunctionParameter.NUMBER);
fp4.setName("Length for Scaling");
fp4.setLowerLimit(1);
fp4.setDefault(50);
}

var aHighs = null;
var aLows = null;

var study = null;
var vHH = null;
var vLL = null;

function main(nKlength, nKsmooth, nDlength, nScaleLength) {
var nState = getBarState();
var vK = null;
var vD = null;

if (study == null) {
study = new StochStudy(nKlength, nKsmooth, nDlength);
aHighs = new Array(nScaleLength);
aLows = new Array(nScaleLength);
}

if (nState == BARSTATE_NEWBAR) {
aHighs.pop();
aLows.pop();
aHighs.unshift(high());
aLows.unshift(low());
} else {
aHighs[0] = high();
aLows[0] = low();
}

if (aHighs[nScaleLength-1] == null) return; // arrays are not filled yet

vK = study.getValue(StochStudy.FAST);
vD = study.getValue(StochStudy.SLOW);
if (vK == null || vD == null) return;

//define price scale from Highest High and Lowest Low from the last nScaleLength bars.
vHH = high();
vLL = low();
for (i = 0; i < nScaleLength; ++i) {
vHH = Math.max(vHH, aHighs[i]);
vLL = Math.min(vLL, aLows[i]);
}

/*** convert stochastics to price scale (rsy equation:
old stock value * ((price scale max - price scale min) / 100) + price scale min
************/
vK = ( vK * (( vHH - vLL )/100) ) + vLL;
vD = ( vD * (( vHH - vLL )/100) ) + vLL;

return new Array(vK, vD);
}```