File Name: J_TPO_Velocity.efs
Description:
J TPO Velocity
Formula Parameters:
Length : 14
Point : 0.01
Notes:
J_TPO is in its original form, an oscillator between -1 and +1,
a nonparametric statistic quantifying how well the prices are ordered
in consecutive ups (+1) or downs (-1) or intermediate cases in between.
Download File:
J_TPO_Velocity.efs
EFS Code:
Description:
J TPO Velocity
Formula Parameters:
Length : 14
Point : 0.01
Notes:
J_TPO is in its original form, an oscillator between -1 and +1,
a nonparametric statistic quantifying how well the prices are ordered
in consecutive ups (+1) or downs (-1) or intermediate cases in between.
Download File:
J_TPO_Velocity.efs
EFS Code:
PHP 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:
J TPO Velocity
Version: 1.0 10/29/2009
Formula Parameters: Default:
Length 14
Point 0.01
Notes:
J_TPO is in its original form, an oscillator between -1 and +1,
a nonparametric statistic quantifying how well the prices are ordered
in consecutive ups (+1) or downs (-1) or intermediate cases in between.
**********************************/
var fpArray = new Array();
var bInit = false;
function preMain(){
setPriceStudy(false);
setShowCursorLabel(true);
setShowTitleParameters(false);
setStudyTitle("J TPO Velocity");
setCursorLabelName("JTPOVelocity", 0);
setPlotType(PLOTTYPE_LINE, 0);
setDefaultBarFgColor(Color.blue, 0);
var x = 0;
fpArray[x] = new FunctionParameter("Length", FunctionParameter.NUMBER);
with(fpArray[x++]) {
setLowerLimit(1);
setDefault(14);
}
fpArray[x] = new FunctionParameter("Point", FunctionParameter.NUMBER);
with(fpArray[x++]) {
setLowerLimit(0);
setDefault(0.01);
}
}
var xJTPOV = null;
function main(Length, Point) {
var nBarState = getBarState();
var nJTPOV = 0;
if (nBarState == BARSTATE_ALLBARS) {
if(Length == null) Length = 14;
if(Point == null) Point = 0.01;
}
if (bInit == false) {
addBand(0, PS_SOLID, 1, Color.black, "Zero");
xJTPOV = efsInternal("Calc_xJTPOV", Length, Point);
bInit = true;
}
nJTPOV = xJTPOV.getValue(0);
if (nJTPOV == null) return;
return nJTPOV;
}
var bSecondInit = false;
var xRange = null;
var xTPO = null;
function Calc_xJTPOV(Length, Point) {
var nRes = 0;
var nRange = 0;
var nTPO = 0;
if (bSecondInit == false) {
xRange = efsInternal("Calc_Range", Length, Point);
xTPO = efsInternal("Calc_TPO", Length);
bSecondInit = true;
}
nRange = xRange.getValue(0);
nTPO = xTPO.getValue(0);
if (nRange == null || nTPO == null) return;
nRes = nTPO * nRange / Length;
return nRes;
}
var bThirdInit = false;
var xHighest = null;
var xLowest = null;
function Calc_Range(Length, Point) {
var nRes = 0;
var nHighest = 0;
var nLowest = 0;
if (bThirdInit == false) {
xHighest = upperDonchian(Length, high());
xLowest = lowerDonchian(Length, low());
bThirdInit = true;
}
nHighest = xHighest.getValue(0);
nLowest = xLowest.getValue(0);
if (nHighest == null || nLowest == null) return;
nRes = (nHighest - nLowest) / Point;
return nRes;
}
var bFourInit = false;
var xClose = null;
function Calc_TPO(Length) {
var nRes = 0;
var normalization = 0;
var Lenp1half = 0;
var accum = 0;
var tmp = 0;
var maxval = 0;
var j = 0;
var maxloc = 0;
var m = 0;
var n = 0;
var arr1 = new Array();
var arr2 = new Array();
var arr3 = new Array();
var flag = false;
if (bFourInit == false) {
xClose = close();
bFourInit = true;
}
if (xClose.getValue(-Length) == null) return;
accum = 0;
for(m = 1; m <= Length; m++) {
arr2[m]=m;
arr3[m]=m;
arr1[m]= xClose.getValue(-(Length - m));
}
for(m = 1; m <= (Length - 1); m++) {
maxval = arr1[m];
maxloc = m;
for(j = m+1; j <= Length; j++) {
if (arr1[j] < maxval) {
maxval=arr1[j];
maxloc=j;
}
}
tmp = arr1[m];
arr1[m] = arr1[maxloc];
arr1[maxloc] = tmp;
tmp = arr2[m];
arr2[m] = arr2[maxloc];
arr2[maxloc] = tmp;
}
m=1;
while(m < Length) {
j = m + 1;
flag = true;
accum = arr3[m];
while(flag) {
if (arr1[m] != arr1[j]) {
if ((j - m) > 1) {
accum = accum / (j - m);
for(n = m; n <= (j-1); n++) {
arr3[n] = accum;
}
}
flag = false;
} else {
accum += arr3[j];
j++;
}
}
m=j;
}
normalization = 12.0 / (Length * (Length - 1) * (Length + 1));
Lenp1half = (Length + 1) * 0.5;
for(accum = 0, m = 1; m <= Length; m++) {
accum += (arr3[m] - Lenp1half) * (arr2[m] - Lenp1half);
}
nRes = normalization * accum;
return nRes;
}