Stock Portfolio Organizer
The ultimate porfolio management solution.
WiseTrader Toolbox
#1 Selling Amibroker Plugin featuring:
Weight + Volume + Move-Adjusted Moving Average for eSignal (EFS)
This is a moving average adjusted by both volume and size of a move. All credit to the original author.
You can read more about it here
Indicator / Formula
/*********************************************************
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;
}1 comments
Leave Comment
Please login here to leave a comment.
Back
Not working.