File Name: SentimentZoneOsc.efs

Description:
Sentiment Zone Oscillator by Walid Khalil, MFTA, CFTe

Formula Parameters:

SentimentZoneOsc.efs
Period: 14
Use Dynamic Levels: true
Dynamic Levels Period: 30
Dynamic Levels % Range: 95

Notes:
The related article is copyrighted material. If you are not a subscriber
of Stocks & Commodities, please visit www.traders.com.

Download File:
SentimentZoneOsc.efs

SentimentZoneOsc.efs


EFS Code:
PHP Code:
/*********************************
Provided By:  
    Interactive Data Corporation (Copyright  2012) 
    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:        
    Sentiment Zone Oscillator
 
Version:            1.0  14/03/2012

Formula Parameters:                     Default:
    Period                              14
    Use Dynamic Levels                  true
    Dynamic Levels Period               30
    Dynamic Levels % Range              95
    
Notes:
    The related article is copyrighted material. If you are not
    a subscriber of Stocks & Commodities, please visit [url]www.traders.com.[/url]

**********************************/
var OB_LEVEL 7;
var 
OS_LEVEL = -7;

var 
fpArray = new Array();

function 
preMain()
{
    
setCursorLabelName("Sentiment Zone Osc"0);
    
setCursorLabelName("OverBought Level"1);
    
setCursorLabelName("OverSold Level"2);
    
    
setDefaultBarFgColor(Color.aqua0);
    
setDefaultBarFgColor(Color.red1);
    
setDefaultBarFgColor(Color.green2);
    
    
setDefaultBarThickness(20);
    
setDefaultBarThickness(21);
    
setDefaultBarThickness(22);
    
    var 
x=0;
    
fpArray[x] = new FunctionParameter("gPeriod"FunctionParameter.NUMBER);
    
with(fpArray[x++])
    {
    
setName("Period");
    
setLowerLimit(2);
        
setUpperLimit(200);
        
setDefault(14);
    }

    
fpArray[x] = new FunctionParameter("gIsDynamicLevels"FunctionParameter.BOOLEAN);
    
with(fpArray[x++])
    {
    
setName("Use Dynamic Levels");
        
setDefault(true);
    }
    
    
fpArray[x] = new FunctionParameter("gExtremesPeriod"FunctionParameter.NUMBER);
    
with(fpArray[x++])
    {
    
setName("Dynamic Levels Period");
    
setLowerLimit(2);
        
setUpperLimit(200);
        
setDefault(30);
    }
    
    
fpArray[x] = new FunctionParameter("gPercentageRange"FunctionParameter.NUMBER);
    
with(fpArray[x++])
    {
    
setName("Dynamic Levels % Range");
    
setLowerLimit(1);
        
setUpperLimit(100);
        
setDefault(95);
    }
}

var 
bInit false;
var 
bVersion null;
var 
xSZO null;
var 
xHLP null;
var 
xLLP null;

function 
main(gPeriodgIsDynamicLevelsgExtremesPeriodgPercentageRange)
{
    if (
bVersion == nullbVersion verify();
    if (
bVersion == false) return;     
        
    if (!
bInit)
    {
        
xSZO efsInternal("calc_SZO"gPeriod);       
        if (
gIsDynamicLevels)
        {
            
xHLP hhv(gExtremesPeriodxSZO);
            
xLLP llv(gExtremesPeriodxSZO);
        }        
        
bInit true;
    }
    var 
nOB null;
    var 
nOS null;
    
    if (
gIsDynamicLevels)
    {
        var 
vHLP xHLP.getValue(0);
        var 
vLLP xLLP.getValue(0);        
        if (
vHLP == null || vLLP == null)
            return;       
        var 
nRange vHLP vLLP;
        var 
nPRange nRange * (gPercentageRange 100);      
        
nOB vLLP nPRange;
        
nOS vHLP nPRange;       
        
addBand(OB_LEVELPS_DASH1Color.maroon"obLevel");
        
addBand(OS_LEVELPS_DASH1Color.darkgreen"osLevel")
    }
    else
    {
        
nOB OB_LEVEL;
        
nOS OS_LEVEL;
    }       
    var 
vSZO xSZO.getValue(0);      
    if (
vSZO == null)
        return;  
    return new Array(
vSZOnOBnOS);
}

var 
bInitSZO false;

var 
xR null;
var 
xSP null;

// Sentiment Zone Oscillator
function calc_SZO(period)
{
    if (!
bInitSZO)
    {
        
xR efsInternal("calc_Range");
        
xSP efsInternal("TEMA"periodxR);       
        
bInitSZO true;
    }    
    var 
vSP xSP.getValue(0);
    if (
vSP == null)
        return;   
    return 
100 * (vSP period);          
}


// to include both time and sentiment
function calc_Range()
{
    var 
vC close(0);
    var 
vvC close(-1);
    if (
vvC == null)
        return;   
    if (
vC vvC)
        return 
1;
    else 
        return -
1;
}


var 
bInitTEMA false;
var 
xEma1 null;
var 
xEma2 null;
var 
xEma3 null;

// Triple Exponential Moving Average
function TEMA(periodseries)
{   
    if(!
bInitTEMA)
    {
        
xEma1 ema(periodseries);
        
xEma2 ema(periodxEma1);
        
xEma3 ema(periodxEma2);
        
bInitTEMA true;    
    }   
    var 
vEma1 xEma1.getValue(0);
    var 
vEma2 xEma2.getValue(0);
    var 
vEma3 xEma3.getValue(0);
    if (
vEma3 == null
        return 
null;
    return 
vEma1 vEma2 vEma3;
}

// verify version
function verify() {
    var 
false;
    if (
getBuildNumber() < 779) {
        
drawTextAbsolute(535"This study requires version 8.0 or later."
            
Color.whiteColor.blueText.RELATIVETOBOTTOM|Text.RELATIVETOLEFT|Text.BOLD|Text.LEFT,
            
null13"error");
        
drawTextAbsolute(520"Click HERE to upgrade.@URL=http://www.esignal.com/download/default.asp"
            
Color.whiteColor.blueText.RELATIVETOBOTTOM|Text.RELATIVETOLEFT|Text.BOLD|Text.LEFT,
            
null13"upgrade");
        return 
b;
    } else {
        
true;
    }
    return 
b;