// Downloaded From https://www.WiseStockTrader.com
/*********************************************************
Alexis C. Montenegro © December 2005                      
Use and/or modify this code freely. If you redistribute it
please include this and/or any other comment blocks and a 
description of any changes you make.                      
**********************************************************/

var fpArray = new Array();

function preMain() {
    setStudyTitle("Tick Line Momentum Osc.");
    setCursorLabelName("TLMO", 0);
    setDefaultBarFgColor(Color.blue, 0);
    setPlotType(PLOTTYPE_LINE,0);
    setDefaultBarThickness(1,0);
    var x=0;
    fpArray[x] = new FunctionParameter("Length", FunctionParameter.NUMBER);
	with(fpArray[x++]){
        setLowerLimit(1);		
        setDefault(10);
    }
    fpArray[x] = new FunctionParameter("Momentum", FunctionParameter.NUMBER);
	with(fpArray[x++]){
        setLowerLimit(1);		
        setDefault(5);
    }
    fpArray[x] = new FunctionParameter("Smooth", FunctionParameter.NUMBER);
	with(fpArray[x++]){
        setLowerLimit(1);		
        setDefault(5);
    }
    fpArray[x] = new FunctionParameter("Source", FunctionParameter.STRING);
	with(fpArray[x++]){
        addOption("open"); 
        addOption("high");
        addOption("low");
        addOption("close");
        addOption("hl2");
        addOption("hlc3");
        addOption("ohlc4"); 
        setDefault("close"); 
    }
    fpArray[x] = new FunctionParameter("Symbol", FunctionParameter.STRING);
    with(fpArray[x++]){
        setDefault();
	}
	fpArray[x] = new FunctionParameter("Interval", FunctionParameter.STRING);
	with(fpArray[x++]){
        setDefault();
    }
    fpArray[x] = new FunctionParameter("Params", FunctionParameter.BOOLEAN);
	with(fpArray[x++]){
        setName("Show Parameters");
        setDefault(false);
    }
}

var bInit = false;
var xTLMO = null;

function main(Length,Momentum,Smooth,Source,Symbol,Interval,Params){
    if(bInit==false){
        if(Symbol == null) Symbol = getSymbol();
        if(Interval == null) Interval = getInterval();
        var vSymbol = Symbol+","+Interval;
        xTLMO = getSeries(ema(Smooth,mom(Momentum,efsInternal("calc",Length,eval(Source)(sym(vSymbol))))));
        addBand(0,PS_SOLID,1,Color.black,"Centerline");   
        setShowTitleParameters(eval(Params));
        bInit=true;
    }
    return xTLMO;
}

var xInit = false;
var xMA = null;
var xClose = null;
var Cum = 0;
var Cum1 = 0;

function calc(length,source){
    var nVal = 0;
    if(xInit==false){
        xMA = ema(length,source);
        xClose = source;
        xInit=true;
    }
    if(getBarState()==BARSTATE_NEWBAR){
        Cum1 = Cum;
    }
    var nClose = xClose.getValue(0);
    var nMA = xMA.getValue(-1);
    if(nClose==null || nMA==null) return;
    if(nClose>nMA) nVal = 1;
    else if(nClose<nMA) nVal = -1;
    else nVal = 0;
    Cum = Cum1+nVal;
    return Cum;
}