/*********************************Provided By: eSignal (Copyright c eSignal), a division of Interactive Data Corporation. 2008. All rights reserved. This sample eSignal Formula Script (EFS) is for educational purposes only and may be modified and saved under a new file name. eSignal is not responsible for the functionality once modified. eSignal reserves the right to modify and overwrite this EFS file with each new release. Description: Moving Average RibbonVersion: 1.0.0 22/09/2008Formula Parameters: Default: * Base Length 10 * Arithmetic Or Geometric 1 Or 2 1 * Increment Or Multiplier 10 * Line Thickness 2 * Display Title Value False Notes: Plots a "Moving Average Ribbon" using the gradient color system V it is created using a series of exponential moving averages of various lengths. The lengths of the averages are calculated based on the length of the first moving average line which is set by the input BaseLength. Each subsequent length is calculated based on the ArithOrGeom_1or2 input.**********************************/var fpArray = new Array();var bInit = false;function preMain() { setPriceStudy(true); setShowCursorLabel(false); setShowTitleParameters( false ); setStudyTitle("Moving Average Ribbon"); setCursorLabelName("XMA1", 0); setCursorLabelName("XMA2", 1); setCursorLabelName("XMA3", 2); setCursorLabelName("XMA4", 3); setCursorLabelName("XMA5", 4); setCursorLabelName("XMA6", 5); setCursorLabelName("XMA7", 6); setCursorLabelName("XMA8", 7); setDefaultBarFgColor(Color.RGB(255,255,0), 7); setDefaultBarFgColor(Color.RGB(255,200,0), 6); setDefaultBarFgColor(Color.RGB(255,150,0), 5); setDefaultBarFgColor(Color.RGB(255,150,0), 4); setDefaultBarFgColor(Color.RGB(255,100,0), 3); setDefaultBarFgColor(Color.RGB(255,50,0), 2); setDefaultBarFgColor(Color.RGB(255,0,0), 1); setDefaultBarFgColor(Color.RGB(255,0,0), 0); setPlotType(PLOTTYPE_LINE, 0); setPlotType(PLOTTYPE_LINE, 1); setPlotType(PLOTTYPE_LINE, 2); setPlotType(PLOTTYPE_LINE, 3); setPlotType(PLOTTYPE_LINE, 4); setPlotType(PLOTTYPE_LINE, 5); setPlotType(PLOTTYPE_LINE, 6); setPlotType(PLOTTYPE_LINE, 7); setDefaultBarThickness(2, 0); setDefaultBarThickness(2, 1); setDefaultBarThickness(2, 2); setDefaultBarThickness(2, 3); setDefaultBarThickness(2, 4); setDefaultBarThickness(2, 5); setDefaultBarThickness(2, 6); setDefaultBarThickness(2, 7); askForInput(); var x=0; fpArray[x] = new FunctionParameter("ViewValue", FunctionParameter.BOOLEAN); with(fpArray[x++]){ setName("Display Cursor Labels"); setDefault(false); } fpArray[x] = new FunctionParameter("BaseLength", FunctionParameter.NUMBER); with(fpArray[x++]){ setName("Base Length"); setLowerLimit(1); setDefault(10); } fpArray[x] = new FunctionParameter("ArithOrGeom_1or2", FunctionParameter.NUMBER); with(fpArray[x++]){ setName("Arithmetic Or Geometric (1 Or 2)"); setLowerLimit(1); setDefault(1); } fpArray[x] = new FunctionParameter("IncrementOrMultiplier", FunctionParameter.NUMBER); with(fpArray[x++]){ setName("Increment Or Multiplier"); setLowerLimit(1); setDefault(10); } fpArray[x] = new FunctionParameter("Thickness", FunctionParameter.NUMBER); with(fpArray[x++]){ setName("Line Thickness"); setLowerLimit(1); setDefault(2); }}var aLength = new Array(8);var aSmoothingFactor = new Array(8);var aXMA = new Array(8);var aXMA_Ref = new Array(8);var aColor = new Array(8);function main(BaseLength, ArithOrGeom_1or2, IncrementOrMultiplier, Thickness, ViewValue) {var nCounter = 0;var nState = getBarState(); if ( bInit == false ) { setDefaultBarThickness(Thickness, 0); setDefaultBarThickness(Thickness, 1); setDefaultBarThickness(Thickness, 2); setDefaultBarThickness(Thickness, 3); setDefaultBarThickness(Thickness, 4); setDefaultBarThickness(Thickness, 5); setDefaultBarThickness(Thickness, 6); setDefaultBarThickness(Thickness, 7); setShowCursorLabel(ViewValue); ClearArrays(); bInit = true; } if (nState == BARSTATE_NEWBAR) { for (var i = 1; i <= 8; i++) { aXMA_Ref[i] = aXMA[i]; } } if (getCurrentBarCount() == 1 ) { aLength[1] = BaseLength ; aSmoothingFactor[1] = 2 / ( aLength[1] + 1 ); aXMA[1] = close(0); for (nCounter = 1; nCounter <= 7; nCounter++) { if (ArithOrGeom_1or2 == 1) aLength[nCounter + 1] = aLength[nCounter] + IncrementOrMultiplier; else aLength[nCounter + 1] = aLength[nCounter] * IncrementOrMultiplier; aSmoothingFactor[nCounter + 1] = 2 / (aLength[nCounter + 1] + 1); aXMA[nCounter + 1] = close(0); } } else { for (nCounter = 1; nCounter <= 8; nCounter++) { aXMA[nCounter] = aXMA_Ref[nCounter] + aSmoothingFactor[nCounter] * (close(0) - aXMA_Ref[nCounter]); } } return new Array(aXMA[8], aXMA[7], aXMA[6], aXMA[5], aXMA[4], aXMA[3], aXMA[2], aXMA[1]); }function ClearArrays(){ for (var i = 1; i <= 8; i++) { aLength[i] = 0; aSmoothingFactor[i] = 0; aXMA[i] = 0; aXMA_Ref[i] = 1; aColor[i] = 0; }} |