Announcement

Collapse
No announcement yet.

Getting lines to appear under auto scaling

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • Getting lines to appear under auto scaling

    Can someone point me in the right direction with a query I have?

    I want to modify the code below so that the lines drawn always appear with auto scaling selected. Currently if the lines are not within the price range shown, autoscaling does not include them.



    PHP Code:
    /*****************************************************
    Provided By : eSignal. (c) Copyright 2003
    Study:        Lines and Labels
    Version:      2.0

    2.0 Updates - 12/18/2003
    *Added FunctionParameter class for user inputs.
    *Changed naming convention for the global variables
     associated with vEditing to be symbol specific.  This allows
     the formula to be used with multiple sets of charts using
     different symbols.  Only charts with the same symbol will
     share the same price levels for the lines.
    *Added setShowTitleParameters(false) to hide formula parameters
     from the study title.
    *Added function parameter, Display Labels, to toggle the display 
     of the labels to ON/OFF.
    *Added function parameter, Label Position, to set labels to appear
     on the left side of the chart or to the right.  If set to right, 
     the labels will appear on bar index 2 just right of the current bar.
    *Added sharing of the main chart's formatting options for, Thickness,
     Color, Display and Position.

    Notes:
    *Formula requires version 7.5.
    *Draws up to 30 Horizontal Lines with optional labels.
    *vEditing option allows the main chart where the price levels 
     for the lines are set to be shared with additional charts
     using the same symbol.  The additional charts only need to
     have this formula running.  The price levels only need to be set
     once from the main chart.  To enable this feature, set vEditing
     to true in the main chart.  After making subsequent changes in the
     main chart, the other charts' LinesLabel
    *****************************************************/


    function preMain() {
        
    setPriceStudy(true);
        
    setStudyTitle("Line and Labels ");
        
    setShowCursorLabel(false);
        
    setShowTitleParameters(false);
        
        var 
    fpA1 = new FunctionParameter("vEditing"FunctionParameter.STRING);
        
    fpA1.setName("vEditing (share lines w/ other charts)");
        
    fpA1.addOption("true");
        
    fpA1.addOption("false");
        
    fpA1.setDefault("false");
        
        var 
    fpA2 = new FunctionParameter("nThickness"FunctionParameter.NUMBER);
        
    fpA2.setName("Line Thickness");
        
    fpA2.setLowerLimit(1);
        
    fpA2.setDefault(1);

        var 
    fpA3 = new FunctionParameter("nColor"FunctionParameter.COLOR);
        
    fpA3.setName("Line COLOR");
        
    fpA3.setDefault(Color.navy);
        
        var 
    fpA4 = new FunctionParameter("bLDisplay"FunctionParameter.STRING);
        
    fpA4.setName("Display Labels");
        
    fpA4.addOption("ON");
        
    fpA4.addOption("OFF");
        
    fpA4.setDefault("ON");

        var 
    fpA5 = new FunctionParameter("sLabelPos"FunctionParameter.STRING);
        
    fpA5.setName("Label Position");
        
    fpA5.addOption("Left");
        
    fpA5.addOption("Right");
        
    fpA5.setDefault("Left");

        var 
    afp1 = new Array(31);
        
    afp1[0] = "";
        var 
    afp2 = new Array(31);
        
    afp2[0] = "";
        var 
    1;
        for (
    131; ++i) {
            var 
    "L"+i;
            
    afp1[i] = new FunctionParameter(LFunctionParameter.NUMBER);
            
    afp1[i].setName("Line " i);
            var 
    Ll "L"+i+"label";
            
    afp2[i] = new FunctionParameter(LlFunctionParameter.STRING);
            
    afp2[i].setName("Line " " Label");
            
    afp2[i].setDefault(" ");
        }
    }

    var 
    vLoaded false;
    var 
    vEdit null;
    var 
    vSym null;
    var 
    bGlobals false;
    var 
    vThi null;
    var 
    vCol null;
    var 
    vDis null;
    var 
    vPos null;

    function 
    main(vEditingnThicknessnColorbLDisplaysLabelPosL1L1labelL2L2label
                  
    L3L3labelL4L4labelL5L5labelL6L6labelL7L7labelL8L8label
                  
    L9L9labelL10L10labelL11L11labelL12L12labelL13L13label
                  
    L14L14labelL15L15labelL16L16labelL17L17labelL18L18label
                  
    L19L19labelL20L20labelL21L21labelL22L22labelL23L23label
                  
    L24L24labelL25L25labelL26L26labelL27L27labelL28L28label
                  
    L29L29labelL30L30label) {
        
        var 
    sTextFlags null;
        var 
    nTextX 0;
        
        if (
    vSym == nullvSym getSymbol();
        
        if (
    vLoaded == false) {
            if (
    vEditing == "true") {
                
    vEdit true;
            } else if (
    vEditing == "false") {
                
    vEdit false;
            } else {
                
    vEdit false;
            }
            if (
    vEdit == true) { // share formatting options
                
    setGlobalValue(vSym "gThickness"nThickness);
                
    setGlobalValue(vSym "gColor"nColor);
                
    setGlobalValue(vSym "gLDisplay"bLDisplay);
                
    setGlobalValue(vSym "gLabelPos"sLabelPos);
            }
            for (
    1<= 30; ++i) {
                var 
    vData "L" i;
                var 
    vDataLabel "L" "label";
                var 
    gData getGlobalValue(vSym "g" vData);
                var 
    gDataLabel getGlobalValue(vSym "g" vDataLabel);
                if (eval(
    vData) != null) {
                    if (
    vEdit == true) { // Current Chart is sharing inputs.
                        
    setGlobalValue(vSym "gL"+i, eval(vData));
                        if (eval(
    vDataLabel) == null) {
                            
    setGlobalValue(vSym "gL"+i+"label""null");
                        } else {
                            
    setGlobalValue(vSym "gL"+i+"label", eval(vDataLabel));
                        }
                    }
                    
    addBand(eval(vData), PS_SOLIDnThicknessnColorvDataLabel);
                    if (
    bLDisplay == "ON") {
                        if (
    sLabelPos == "Right") {
                            
    sTextFlags "Text.LEFT|Text.ONTOP|Text.VCENTER|Text.Bold|Text.FRAME";
                            
    nTextX 2;
                        } else {
                            
    sTextFlags "Text.RELATIVETOLEFT|Text.ONTOP|Text.VCENTER|Text.Bold|Text.FRAME";
                            
    nTextX 0;
                        }
                        
    drawTextAbsolute(nTextX, eval(vData), " " + eval(vDataLabel) + " "
                            
    Color.whitenColor, eval(sTextFlags), null10vDataLabel);
                    }
                } else if (
    vEdit == true) {
                    
    removeText(vDataLabel);
                    
    removeBand(vDataLabel);
                    
    removeGlobalValue(vSym "gL"+i);
                    
    removeGlobalValue(vSym "gL"+i+"label");
                }
                
    // Current chart is not sharing but another chart is.
                
    if (vEdit == false && eval(vData) == null && getGlobalValue(vSym "gL"+i) != null) {
                    if (
    bGlobals == false) {
                        
    vThi getGlobalValue(vSym "gThickness");
                        if (
    vThi == nullvThi nThickness;
                        
    vCol getGlobalValue(vSym "gColor");
                        if (
    vCol == nullvCol nColor;
                        
    vDis getGlobalValue(vSym "gLDisplay");
                        if (
    vDis == nullvDis bLDisplay;
                        
    vPos getGlobalValue(vSym "gLabelPos");
                        if (
    vPos == nullvPos sLabelPos;                    
                        
    bGlobals true;
                    }
                    
    addBand(gDataPS_SOLIDvThivColgDataLabel);
                    if (
    vDis == "ON") {
                        if (
    vPos == "Right") {
                            
    sTextFlags "Text.LEFT|Text.ONTOP|Text.VCENTER|Text.Bold|Text.FRAME";
                            
    nTextX 2;
                        } else {
                            
    sTextFlags "Text.RELATIVETOLEFT|Text.ONTOP|Text.VCENTER|Text.Bold|Text.FRAME";
                            
    nTextX 0;
                        }
                        
    drawTextAbsolute(nTextXgData" " gDataLabel " "Color.white
                            
    vCol, eval(sTextFlags), null10vDataLabel);
                    }
                }
            }
            
    vLoaded true;
        }
        return;


  • #2
    Re: Getting lines to appear under auto scaling

    Wat Tyler
    The reason why auto scaling does not include those lines is that they are drawn and not plotted [ie returned] as values on the chart.
    One simple solution is to [also] return the values of those lines. To do this you would modify the return statement to return an array of L1 through to L30
    Another solution [which IMO is preferable as it is less intrusive] is illustrated in the enclosed image. You would insert that code logic at the beginning of the main function
    Alex




    Originally posted by Wat Tyler
    Can someone point me in the right direction with a query I have?

    I want to modify the code below so that the lines drawn always appear with auto scaling selected. Currently if the lines are not within the price range shown, autoscaling does not include them.



    PHP Code:
    /*****************************************************
    Provided By : eSignal. (c) Copyright 2003
    Study:        Lines and Labels
    Version:      2.0

    2.0 Updates - 12/18/2003
    *Added FunctionParameter class for user inputs.
    *Changed naming convention for the global variables
     associated with vEditing to be symbol specific.  This allows
     the formula to be used with multiple sets of charts using
     different symbols.  Only charts with the same symbol will
     share the same price levels for the lines.
    *Added setShowTitleParameters(false) to hide formula parameters
     from the study title.
    *Added function parameter, Display Labels, to toggle the display 
     of the labels to ON/OFF.
    *Added function parameter, Label Position, to set labels to appear
     on the left side of the chart or to the right.  If set to right, 
     the labels will appear on bar index 2 just right of the current bar.
    *Added sharing of the main chart's formatting options for, Thickness,
     Color, Display and Position.

    Notes:
    *Formula requires version 7.5.
    *Draws up to 30 Horizontal Lines with optional labels.
    *vEditing option allows the main chart where the price levels 
     for the lines are set to be shared with additional charts
     using the same symbol.  The additional charts only need to
     have this formula running.  The price levels only need to be set
     once from the main chart.  To enable this feature, set vEditing
     to true in the main chart.  After making subsequent changes in the
     main chart, the other charts' LinesLabel
    *****************************************************/


    function preMain() {
        
    setPriceStudy(true);
        
    setStudyTitle("Line and Labels ");
        
    setShowCursorLabel(false);
        
    setShowTitleParameters(false);
        
        var 
    fpA1 = new FunctionParameter("vEditing"FunctionParameter.STRING);
        
    fpA1.setName("vEditing (share lines w/ other charts)");
        
    fpA1.addOption("true");
        
    fpA1.addOption("false");
        
    fpA1.setDefault("false");
        
        var 
    fpA2 = new FunctionParameter("nThickness"FunctionParameter.NUMBER);
        
    fpA2.setName("Line Thickness");
        
    fpA2.setLowerLimit(1);
        
    fpA2.setDefault(1);

        var 
    fpA3 = new FunctionParameter("nColor"FunctionParameter.COLOR);
        
    fpA3.setName("Line COLOR");
        
    fpA3.setDefault(Color.navy);
        
        var 
    fpA4 = new FunctionParameter("bLDisplay"FunctionParameter.STRING);
        
    fpA4.setName("Display Labels");
        
    fpA4.addOption("ON");
        
    fpA4.addOption("OFF");
        
    fpA4.setDefault("ON");

        var 
    fpA5 = new FunctionParameter("sLabelPos"FunctionParameter.STRING);
        
    fpA5.setName("Label Position");
        
    fpA5.addOption("Left");
        
    fpA5.addOption("Right");
        
    fpA5.setDefault("Left");

        var 
    afp1 = new Array(31);
        
    afp1[0] = "";
        var 
    afp2 = new Array(31);
        
    afp2[0] = "";
        var 
    1;
        for (
    131; ++i) {
            var 
    "L"+i;
            
    afp1[i] = new FunctionParameter(LFunctionParameter.NUMBER);
            
    afp1[i].setName("Line " i);
            var 
    Ll "L"+i+"label";
            
    afp2[i] = new FunctionParameter(LlFunctionParameter.STRING);
            
    afp2[i].setName("Line " " Label");
            
    afp2[i].setDefault(" ");
        }
    }

    var 
    vLoaded false;
    var 
    vEdit null;
    var 
    vSym null;
    var 
    bGlobals false;
    var 
    vThi null;
    var 
    vCol null;
    var 
    vDis null;
    var 
    vPos null;

    function 
    main(vEditingnThicknessnColorbLDisplaysLabelPosL1L1labelL2L2label
                  
    L3L3labelL4L4labelL5L5labelL6L6labelL7L7labelL8L8label
                  
    L9L9labelL10L10labelL11L11labelL12L12labelL13L13label
                  
    L14L14labelL15L15labelL16L16labelL17L17labelL18L18label
                  
    L19L19labelL20L20labelL21L21labelL22L22labelL23L23label
                  
    L24L24labelL25L25labelL26L26labelL27L27labelL28L28label
                  
    L29L29labelL30L30label) {
        
        var 
    sTextFlags null;
        var 
    nTextX 0;
        
        if (
    vSym == nullvSym getSymbol();
        
        if (
    vLoaded == false) {
            if (
    vEditing == "true") {
                
    vEdit true;
            } else if (
    vEditing == "false") {
                
    vEdit false;
            } else {
                
    vEdit false;
            }
            if (
    vEdit == true) { // share formatting options
                
    setGlobalValue(vSym "gThickness"nThickness);
                
    setGlobalValue(vSym "gColor"nColor);
                
    setGlobalValue(vSym "gLDisplay"bLDisplay);
                
    setGlobalValue(vSym "gLabelPos"sLabelPos);
            }
            for (
    1<= 30; ++i) {
                var 
    vData "L" i;
                var 
    vDataLabel "L" "label";
                var 
    gData getGlobalValue(vSym "g" vData);
                var 
    gDataLabel getGlobalValue(vSym "g" vDataLabel);
                if (eval(
    vData) != null) {
                    if (
    vEdit == true) { // Current Chart is sharing inputs.
                        
    setGlobalValue(vSym "gL"+i, eval(vData));
                        if (eval(
    vDataLabel) == null) {
                            
    setGlobalValue(vSym "gL"+i+"label""null");
                        } else {
                            
    setGlobalValue(vSym "gL"+i+"label", eval(vDataLabel));
                        }
                    }
                    
    addBand(eval(vData), PS_SOLIDnThicknessnColorvDataLabel);
                    if (
    bLDisplay == "ON") {
                        if (
    sLabelPos == "Right") {
                            
    sTextFlags "Text.LEFT|Text.ONTOP|Text.VCENTER|Text.Bold|Text.FRAME";
                            
    nTextX 2;
                        } else {
                            
    sTextFlags "Text.RELATIVETOLEFT|Text.ONTOP|Text.VCENTER|Text.Bold|Text.FRAME";
                            
    nTextX 0;
                        }
                        
    drawTextAbsolute(nTextX, eval(vData), " " + eval(vDataLabel) + " "
                            
    Color.whitenColor, eval(sTextFlags), null10vDataLabel);
                    }
                } else if (
    vEdit == true) {
                    
    removeText(vDataLabel);
                    
    removeBand(vDataLabel);
                    
    removeGlobalValue(vSym "gL"+i);
                    
    removeGlobalValue(vSym "gL"+i+"label");
                }
                
    // Current chart is not sharing but another chart is.
                
    if (vEdit == false && eval(vData) == null && getGlobalValue(vSym "gL"+i) != null) {
                    if (
    bGlobals == false) {
                        
    vThi getGlobalValue(vSym "gThickness");
                        if (
    vThi == nullvThi nThickness;
                        
    vCol getGlobalValue(vSym "gColor");
                        if (
    vCol == nullvCol nColor;
                        
    vDis getGlobalValue(vSym "gLDisplay");
                        if (
    vDis == nullvDis bLDisplay;
                        
    vPos getGlobalValue(vSym "gLabelPos");
                        if (
    vPos == nullvPos sLabelPos;                    
                        
    bGlobals true;
                    }
                    
    addBand(gDataPS_SOLIDvThivColgDataLabel);
                    if (
    vDis == "ON") {
                        if (
    vPos == "Right") {
                            
    sTextFlags "Text.LEFT|Text.ONTOP|Text.VCENTER|Text.Bold|Text.FRAME";
                            
    nTextX 2;
                        } else {
                            
    sTextFlags "Text.RELATIVETOLEFT|Text.ONTOP|Text.VCENTER|Text.Bold|Text.FRAME";
                            
    nTextX 0;
                        }
                        
    drawTextAbsolute(nTextXgData" " gDataLabel " "Color.white
                            
    vCol, eval(sTextFlags), null10vDataLabel);
                    }
                }
            }
            
    vLoaded true;
        }
        return;

    Comment

    Working...
    X