2005 Mar: The Secret Behind The Filter (MedianAdaptiveFilter.efs)

ICE Data Services -


MedianAdaptiveFilter.efs  EFSLibrary - Discussion Board
  

File Name: MedianAdaptiveFilter.efs


Description:
This formula is based on the March 2005 article, The Secret Behind The Filter - What's The Difference, by John F. Ehlers.


Formula Parameters:
Thickness: 2
Color: Red

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

Download File:
MedianAdaptiveFilter.efs




EFS Code:

/*******************************Provided By : eSignal (c) Copyright 2005Description:  Median-Average Adaptive Filter - by John F. EhlersVersion 1.0  1/7/2005Notes:March 2005 Issue - "The Secret Behind The Filter - What's The Difference?"Formula Parameters:                 Defaults:Thickness                           2Color                               Red*******************************/function preMain() {    setPriceStudy(true);    setStudyTitle("Median-Average Adaptive Filter ");    setCursorLabelName("MAAF", 0);        setShowTitleParameters(false);        // Study Parameters    var sp1 = new FunctionParameter("nThick", FunctionParameter.NUMBER);        sp1.setName("Thickness");        sp1.setDefault(2);    var sp2 = new FunctionParameter("cColor", FunctionParameter.COLOR);        sp2.setName("Color");        sp2.setDefault(Color.red);}var bEdit = true;var Price = new Array(4);var Smooth = new Array(39);var nFilter = null;var nFilter_1 = 0;var Value2 = 0;var Value2_1 = 0;var nThreshold = 0.002function main(nThick, cColor) {    if (bEdit == true) {        setDefaultBarThickness(nThick);        setDefaultBarFgColor(cColor);        bEdit = false;    }        var nState = getBarState();    if (nState == BARSTATE_NEWBAR) {        nFilter_1 = nFilter;        Value2_1 = Value2;        Price.pop()        Price.unshift((high(0)+low(0))/2)        Smooth.pop();        Smooth.unshift(0);    }    Price[0] = (high(0)+low(0))/2;    if (Price[3] == null) return;            Smooth[0] = (Price[0] + (2 * Price[1]) + (2 * Price[2]) + Price[3]) / 6;    if (Smooth[38] == null) return;        var Length = 39;    var Value3 = .2;    var alpha, Value1;    while (Value3 > nThreshold) {        alpha = 2 / (Length + 1);        Value1 = Median(Length);        Value2 = alpha*Smooth[0] + (1 - alpha)*Value2_1;        if (Value1 != 0) Value3 = Math.abs(Value1 - Value2) / Value1;        Length = Length - 2;        if (Length <= 0) break;    }    if (Length < 3) Length = 3;    alpha = 2 / (Length + 1);    nFilter = (alpha*Smooth[0] + (1 - alpha)*nFilter_1);        return nFilter;}function Median(Length) {    var aArray = new Array(Length);    var nMedian = null;        for (var i = 0; i < Length; i++) {        aArray[i] = Smooth[i];    }        aArray = aArray.sort(compareNumbers);        nMedian = aArray[Math.round((Length-1)/2)];    return nMedian;}function compareNumbers(a, b) {   return a - b}