// Downloaded From https://www.WiseStockTrader.com
/*********************************************************
By Alexis C. Montenegro © September 2006                  
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() {
    setPriceStudy(true);
    setStudyTitle("WEVOMO");
    setCursorLabelName("WEVOMO",0);
    setDefaultBarFgColor(Color.blue,0);
    setPlotType(PLOTTYPE_LINE,0);
    setDefaultBarThickness(1,0);
    var x=0;
    fpArray[x] = new FunctionParameter("Type", FunctionParameter.STRING);
    with(fpArray[x++]){
        addOption("MOMA");
        addOption("VOMA");
        addOption("VOMOMA");
        addOption("WEVOMO");
        setDefault("WEVOMO");
	}
    fpArray[x] = new FunctionParameter("Length", FunctionParameter.NUMBER);
	with(fpArray[x++]){
        setLowerLimit(1);		
        setDefault(10);
    }
	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 xWEVOMO   = null;

function main(Type,Length,Source,Symbol,Interval,Params){
    if(bInit == false){
        if(Symbol == null) Symbol = getSymbol();
        if(Interval == null) Interval = getInterval();
        var vSymbol = Symbol+","+Interval;
        xWEVOMO = getSeries(efsInternal("calcAvg",Type,Length,eval(Source)(sym(vSymbol))));
        setShowTitleParameters(eval(Params));
        bInit = true;
    }
    return xWEVOMO;
}

var xVol = null;
var xAvg = null;

function calcAvg(type,length,source){
    if(getCurrentBarCount()<=length+1) return;
    if(xVol==null) xVol = volume();
    if(xAvg==null) xAvg = wma(length,source);
    var SumVol = 0;
    var Value1 = 0;
    var MOMA = 0;
    var VOMA = 0;
    for (var i=0; i<length; i++){
        SumVol += xVol.getValue(-i);
        Value1 += Math.abs(source.getValue(-i)-source.getValue(-(i+1)));
    }
    if(SumVol<=0 || Value1<=0) return;
    for (var i=0; i<length; i++){
        MOMA += source.getValue(-i)*(Math.abs(source.getValue(-i)-source.getValue(-(i+1)))/Value1);
        VOMA += source.getValue(-i)*(xVol.getValue(-i)/SumVol);
    }
    var WEMA = xAvg.getValue(0);
    if(MOMA==null||VOMA==null||WEMA==null) return;
    if(type=="WEVOMO"){
        var ret = (WEMA+VOMA+MOMA)/3;
    }else if(type=="VOMOMA"){
        var ret = (VOMA+MOMA)/2;
    }else if(type=="VOMA"){
        var ret = VOMA;
    }else if(type=="MOMA"){
        var ret = MOMA;
    }
    return ret;
}