Announcement

Collapse
No announcement yet.

Time vertical lines

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

  • #16
    Deleted unused block of code.
    PHP Code:
    var arrLen null;
    function 
    preMain() {

        var 
    aFPArray = new Array();
        
    setPriceStudy(true);
        
    setStudyTitle("Vertical.q3 Time Plots");
        
    //defauls can be changed via the next 3 arrays (timeArr, lineClr, lineThick) but they must have 7 elements each. 
        //for timeArr use 24 hour format with no delimiters (i.e. ":" etc.). 
        //The lineClr array must contain correct esignal color names found in the EFS Glossary (do a search for "colors" in the knowledge base). 
        //The lineThick array must only contain numbers and nothing else with a minimum value of 1. 
        
    var timeArr = [800,930,935,940,1030,1115,1600];
        var 
    lineClr = [Color.grey,Color.white,Color.aqua,Color.aqua,Color.darkgrey,Color.darkgrey,Color.navy];
        var 
    lineThick = [1,1,1,1,1,1,1];
        
    arrLen timeArr.length;
        var 
    x=0y=0i=0j=0;
        
    aFPArray[x] = new FunctionParameter("NumberOfLinesToDraw"FunctionParameter.NUMBER);
        
    with(aFPArray[x++]){
            
    setName("Draw The 1st ? Lines");//i.e., if NumberOfLinesToDraw==1 one line is drawn every time the 1st "time0" bar time is reached, if it==2 then two lines are drawn for "time0" and "time1", etc.
            
    setLowerLimit(1);
            
    setUpperLimit(arrLen);
            for (
    0timeArr.lengthj++) {
                
    addOption(1);
            }
            
    setDefault(timeArr.length);
        }
        for(
    0timeArr.lengthi++){
            
    y="time"+i;
            
    aFPArray[x] = new FunctionParameter(yFunctionParameter.NUMBER);
            
    with(aFPArray[x++]){
                
    setLowerLimit(1);
                
    setDefault(timeArr[i]);
            }

            
    y="lineClr"+i;
            
    aFPArray[x] = new FunctionParameter(yFunctionParameter.COLOR);
            
    with(aFPArray[x++]){
                
    setDefault(lineClr[i]);
            }

            
    y="lineThick"+i;
            
    aFPArray[x] = new FunctionParameter(yFunctionParameter.NUMBER);
            
    with(aFPArray[x++]){
                
    setLowerLimit(1);
                for (
    0timeArr.lengthj++) {
                    
    addOption(j+1);
                }
                
    setDefault(lineThick[i]);
            }
        }
        
    aFPArray[x] = new FunctionParameter("displayParam"FunctionParameter.BOOLEAN);
        
    with(aFPArray[x++]){
            
    setDefault(false);
        }
    }

    var 
    bInit=false;
    var 
    paramArr=[];
    function 
    main(NumberOfLinesToDraw,
                  
    time0,time1,time2,time3,time4,time5,time6,
                  
    lineClr0,lineClr1,lineClr2,lineClr3,lineClr4,lineClr5,lineClr6,
                  
    lineThick0,lineThick1,lineThick2,lineThick3,lineThick4,lineThick5,lineThick6,
                  
    displayParam) {

        if(
    isDWM()) return;
        if(!
    bInit){
            
    setShowTitleParametersdisplayParam );
            var 
    args = Array.prototype.slice.call(arguments);
            var 
    0temp=null;
            for(
    03+= 1){
                
    paramArr.push([]);
            }
            for(
    0arrLen+= 1){
                if(
    args[i+1] != nullparamArr[0][i] = args[i+1];
                if(
    args[i+arrLen+1] != nullparamArr[1][i] = args[i+arrLen+1];
                if(
    args[i+2*arrLen+1] != nullparamArr[2][i] = args[i+2*arrLen+1];
            }
            
    bInit=true;
        }
        
        
    DrawTrigger(paramArrNumberOfLinesToDraw);
     
        return 
    null;

    }
    var 
    flag0 0flag1 0timeCtr=0;
    function 
    DrawTrigger(paramArrNumberOfLinesToDraw){

        var 
    0;
        var 
    barTm = (hour(0)*100)+minute(0);

        if(
    flag1 == && barTm paramArr[0][timeCtr+1]) flag1 0;

        if(
    flag0 == && barTm >= paramArr[0][paramArr[0].length -1]){
            if(
    NumberOfLinesToDraw == paramArr[0].length && getCurrentBarCount()>1onAction0(paramArr[1][paramArr[1].length-1],paramArr[2][paramArr[2].length-1]);
            
    flag1 0;
            
    flag0 1;
        }

        if(
    flag1 == 0){
            for(
    0paramArr[0].length+= 1){
                if((
    barTm >= paramArr[0][i] && barTm <paramArr[0][i+1])){
                    if(
    <= NumberOfLinesToDraw-1onAction0(paramArr[1][i],paramArr[2][i]);
                    
    flag0 0;
                    
    flag1 1;
                    
    timeCtr i;
                }
            }
        }
    }

    function 
    onAction0(clrthick) {
        
    drawLineRelative(000999999PS_SOLIDthickclr"line"+rawtime(0));

    Wayne

    Comment


    • #17
      While using the script I found that if the timeArr or selected time0,time1,etc menu options aren't in chronological order it will plot incorrectly so I added a sort function to automatically sort the array from lowest time value to highest keeping the corresponding colors and line thicknesses.
      PHP Code:
      var arrLen null;
      function 
      preMain() {

          var 
      aFPArray = new Array();
          
      setPriceStudy(true);
          
      setStudyTitle("Vertical.q3 Time Plots");
          var 
      timeArr = [800,930,935,940,1030,1115,1600];
          var 
      lineClr = [Color.grey,Color.white,Color.aqua,Color.aqua,Color.darkgrey,Color.darkgrey,Color.navy];
          var 
      lineThick = [1,1,1,1,1,1,1];
          
      arrLen timeArr.length;
          var 
      x=0y=0i=0j=0;
          
      aFPArray[x] = new FunctionParameter("NumberOfLinesToDraw"FunctionParameter.NUMBER);
          
      with(aFPArray[x++]){
              
      setName("Draw The 1st ? Lines");//i.e., if NumberOfLinesToDraw==1 one line is drawn every time the 1st "time0" bar time is reached, if it==2 then two lines are drawn for "time0" and "time1", etc., NOTE: times and corresponding color/thickness will be automatically sorted in chronological order
              
      setLowerLimit(1);
              
      setUpperLimit(arrLen);
              for (
      0timeArr.lengthj++) {
                  
      addOption(1);
              }
              
      setDefault(timeArr.length);
          }
          for(
      0timeArr.lengthi++){
              
      y="time"+i;
              
      aFPArray[x] = new FunctionParameter(yFunctionParameter.NUMBER);
              
      with(aFPArray[x++]){
                  
      setLowerLimit(1);
                  
      setDefault(timeArr[i]);
              }

              
      y="lineClr"+i;
              
      aFPArray[x] = new FunctionParameter(yFunctionParameter.COLOR);
              
      with(aFPArray[x++]){
                  
      setDefault(lineClr[i]);
              }

              
      y="lineThick"+i;
              
      aFPArray[x] = new FunctionParameter(yFunctionParameter.NUMBER);
              
      with(aFPArray[x++]){
                  
      setLowerLimit(1);
                  for (
      0timeArr.lengthj++) {
                      
      addOption(j+1);
                  }
                  
      setDefault(lineThick[i]);
              }
          }
          
      aFPArray[x] = new FunctionParameter("TodayOnly"FunctionParameter.BOOLEAN);
          
      with(aFPArray[x++]){
              
      setDefault(false);
          }
          
      aFPArray[x] = new FunctionParameter("enableSubStudy"FunctionParameter.BOOLEAN);
          
      with(aFPArray[x++]){
              
      setDefault(false);
          }
          
      aFPArray[x] = new FunctionParameter("displayParam"FunctionParameter.BOOLEAN);
          
      with(aFPArray[x++]){
              
      setDefault(false);
          }
      }

      var 
      bInit=false;
      var 
      paramArr=[];
      function 
      main(NumberOfLinesToDraw,
                    
      time0,time1,time2,time3,time4,time5,time6,
                    
      lineClr0,lineClr1,lineClr2,lineClr3,lineClr4,lineClr5,lineClr6,
                    
      lineThick0,lineThick1,lineThick2,lineThick3,lineThick4,lineThick5,lineThick6,
                    
      TodayOnly,enableSubStudy,displayParam) {

          if(
      isDWM()) return;
          var 
      drawIt true;
          if(
      TodayOnly && !is_Today()) drawIt false;

          if(!
      bInit){
              
      setShowTitleParametersdisplayParam );
              Array.
      prototype.min = function() {
                return 
      Math.min.apply(nullthis);
              };
              var 
      args = Array.prototype.slice.call(arguments);
              var 
      tempArr = [];
              var 
      0temp=null;
              for(
      03+= 1){
                  
      tempArr.push([]);
              }
              for(
      0arrLen+= 1){
                  if(
      args[i+1] != nulltempArr[0][i] = args[i+1];
                  if(
      args[i+arrLen+1] != nulltempArr[1][i] = args[i+arrLen+1];
                  if(
      args[i+2*arrLen+1] != nulltempArr[2][i] = args[i+2*arrLen+1];
              }
              
      paramArr=sort2D_Array(tempArr)[0];
              
      bInit=true;
          }
          
          if(
      drawItDrawTrigger(paramArrNumberOfLinesToDraw);
       
          return 
      null;

      }
      var 
      flag0 0flag1 0timeCtr=0;
      function 
      DrawTrigger(paramArrNumberOfLinesToDraw){

          var 
      0;
          var 
      barTm = (hour(0)*100)+minute(0);

          if(
      flag1 == && barTm paramArr[0][timeCtr+1]) flag1 0;

          if(
      flag0 == && barTm >= paramArr[0][paramArr[0].length -1]){
              if(
      NumberOfLinesToDraw == paramArr[0].length && getCurrentBarCount()>1onAction0(paramArr[1][paramArr[1].length-1],paramArr[2][paramArr[2].length-1]);
              
      flag0 1;
              
      flag1 0;
          }

          if(
      flag1 == 0){
              for(
      0paramArr[0].length+= 1){
                  if((
      barTm >= paramArr[0][i] && barTm <paramArr[0][i+1])){
                      if(
      <= NumberOfLinesToDraw-1onAction0(paramArr[1][i],paramArr[2][i]);
                      
      flag0 0;
                      
      flag1 1;
                      
      timeCtr i;
                  }
              }
          }
      }

      function 
      onAction0(clrthick) {
          
      drawLineRelative(0, -9999999990999999999PS_SOLIDthickclr"line"+rawtime(0));
      }
      function 
      is_Today(){//"bCurrentDay" only works while the chart receives ticks so it's always false when Mkt is closed
          
      var bCurrentDay false;
          var 
      xTime getValue("time"); 
          var 
      xDate = new Date();  
          var 
      sTime = (xTime.getMonth()+1+"/"+xTime.getDate()+"/"+xTime.getFullYear()); 
          var 
      sToday = (xDate.getMonth()+1+"/"+xDate.getDate()+"/"+xDate.getFullYear()); 
          if ( 
      sTime == sToday ) { 
              
      bCurrentDay true
          } 
          return 
      bCurrentDay;

      function 
      sort2D_Array(arr){
          var 
      arrT = [];
          for(
      03+= 1){
              
      arrT.push([]);
          }
          var 
      idxCtr=0;
          while (
      arr[0].length 0){
              var 
      arrLen=arr[0].length;
              var 
      index null;
              var 
      value arr[0].min();
              for (var 
      0arrLenj+=1) {
                if (
      arr[0][j] == value) {
                  if(
      arr[0][j]!=null){
                      
      arrT[0][idxCtr]=arr[0][j];
                      
      arrT[1][idxCtr]=arr[1][j];
                      
      arrT[2][idxCtr]=arr[2][j];
                      
      idxCtr+=1;
                  }
                  
      removeElement(arrj)
                }
              }
          }
          return [
      arrT,arr];
      }
      function 
      removeElement(array, index){    
          if (
      index > -1) {
              array[
      0].splice(index1);//removes the element at specified index
              
      array[1].splice(index1);//removes the element at specified index
              
      array[2].splice(index1);//removes the element at specified index
              
      return true;
          }
          return 
      false;

      Wayne

      Comment


      • #18
        Removed unused menu item
        PHP Code:
        var arrLen null;
        function 
        preMain() {

            var 
        aFPArray = new Array();
            
        setPriceStudy(true);
            
        setStudyTitle("Vertical.q3 Time Plots");
            var 
        timeArr = [800,930,935,940,1030,1115,1600];
            var 
        lineClr = [Color.grey,Color.white,Color.aqua,Color.aqua,Color.darkgrey,Color.darkgrey,Color.navy];
            var 
        lineThick = [1,1,1,1,1,1,1];
            
        arrLen timeArr.length;
            var 
        x=0y=0i=0j=0;
            
        aFPArray[x] = new FunctionParameter("NumberOfLinesToDraw"FunctionParameter.NUMBER);
            
        with(aFPArray[x++]){
                
        setName("Draw The 1st ? Lines");//i.e., if NumberOfLinesToDraw==1 one line is drawn every time the 1st "time0" bar time is reached, if it==2 then two lines are drawn for "time0" and "time1", etc., NOTE: times and corresponding color/thickness will be automatically sorted in chronological order
                
        setLowerLimit(1);
                
        setUpperLimit(arrLen);
                for (
        0timeArr.lengthj++) {
                    
        addOption(1);
                }
                
        setDefault(timeArr.length);
            }
            for(
        0timeArr.lengthi++){
                
        y="time"+i;
                
        aFPArray[x] = new FunctionParameter(yFunctionParameter.NUMBER);
                
        with(aFPArray[x++]){
                    
        setLowerLimit(1);
                    
        setDefault(timeArr[i]);
                }

                
        y="lineClr"+i;
                
        aFPArray[x] = new FunctionParameter(yFunctionParameter.COLOR);
                
        with(aFPArray[x++]){
                    
        setDefault(lineClr[i]);
                }

                
        y="lineThick"+i;
                
        aFPArray[x] = new FunctionParameter(yFunctionParameter.NUMBER);
                
        with(aFPArray[x++]){
                    
        setLowerLimit(1);
                    for (
        0timeArr.lengthj++) {
                        
        addOption(j+1);
                    }
                    
        setDefault(lineThick[i]);
                }
            }
            
        aFPArray[x] = new FunctionParameter("TodayOnly"FunctionParameter.BOOLEAN);
            
        with(aFPArray[x++]){
                
        setDefault(false);//set to true to only display lines for the current day but only if the current day is actively trading.  In other words if it is Saturday or Sunday the lines won't plot on Friday or at all if TodayOnly is set to true
            
        }
            
        aFPArray[x] = new FunctionParameter("displayParam"FunctionParameter.BOOLEAN);
            
        with(aFPArray[x++]){
                
        setDefault(false);
            }
        }

        var 
        bInit=false;
        var 
        paramArr=[];
        function 
        main(NumberOfLinesToDraw,
                      
        time0,time1,time2,time3,time4,time5,time6,
                      
        lineClr0,lineClr1,lineClr2,lineClr3,lineClr4,lineClr5,lineClr6,
                      
        lineThick0,lineThick1,lineThick2,lineThick3,lineThick4,lineThick5,lineThick6,
                      
        TodayOnly,displayParam) {

            if(
        isDWM()) return;
            var 
        drawIt true;
            if(
        TodayOnly && !is_Today()) drawIt false;

            if(!
        bInit){
                
        setShowTitleParametersdisplayParam );
                Array.
        prototype.min = function() {
                  return 
        Math.min.apply(nullthis);
                };
                var 
        args = Array.prototype.slice.call(arguments);
                var 
        tempArr = [];
                var 
        0temp=null;
                for(
        03+= 1){
                    
        tempArr.push([]);
                }
                for(
        0arrLen+= 1){
                    if(
        args[i+1] != nulltempArr[0][i] = args[i+1];
                    if(
        args[i+arrLen+1] != nulltempArr[1][i] = args[i+arrLen+1];
                    if(
        args[i+2*arrLen+1] != nulltempArr[2][i] = args[i+2*arrLen+1];
                }
                
        paramArr=sort2D_Array(tempArr)[0];
                
        bInit=true;
            }
            
            if(
        drawItDrawTrigger(paramArrNumberOfLinesToDraw);
         
            return 
        null;

        }
        var 
        flag0 0flag1 0timeCtr=0;
        function 
        DrawTrigger(paramArrNumberOfLinesToDraw){

            var 
        0;
            var 
        barTm = (hour(0)*100)+minute(0);

            if(
        flag1 == && barTm paramArr[0][timeCtr+1]) flag1 0;

            if(
        flag0 == && barTm >= paramArr[0][paramArr[0].length -1]){
                if(
        NumberOfLinesToDraw == paramArr[0].length && getCurrentBarCount()>1onAction0(paramArr[1][paramArr[1].length-1],paramArr[2][paramArr[2].length-1]);
                
        flag0 1;
                
        flag1 0;
            }

            if(
        flag1 == 0){
                for(
        0paramArr[0].length+= 1){
                    if((
        barTm >= paramArr[0][i] && barTm <paramArr[0][i+1])){
                        if(
        <= NumberOfLinesToDraw-1onAction0(paramArr[1][i],paramArr[2][i]);
                        
        flag0 0;
                        
        flag1 1;
                        
        timeCtr i;
                    }
                }
            }
        }

        function 
        onAction0(clrthick) {
            
        drawLineRelative(0, -9999999990999999999PS_SOLIDthickclr"line"+rawtime(0));
        }
        function 
        is_Today(){//"bCurrentDay" only works while the chart receives ticks so it's always false when Mkt is closed
            
        var bCurrentDay false;
            var 
        xTime getValue("time"); 
            var 
        xDate = new Date();  
            var 
        sTime = (xTime.getMonth()+1+"/"+xTime.getDate()+"/"+xTime.getFullYear()); 
            var 
        sToday = (xDate.getMonth()+1+"/"+xDate.getDate()+"/"+xDate.getFullYear()); 
            if ( 
        sTime == sToday ) { 
                
        bCurrentDay true
            } 
            return 
        bCurrentDay;

        function 
        sort2D_Array(arr){
            var 
        arrT = [];
            for(
        03+= 1){
                
        arrT.push([]);
            }
            var 
        idxCtr=0;
            while (
        arr[0].length 0){
                var 
        arrLen=arr[0].length;
                var 
        index null;
                var 
        value arr[0].min();
                for (var 
        0arrLenj+=1) {
                  if (
        arr[0][j] == value) {
                    if(
        arr[0][j]!=null){
                        
        arrT[0][idxCtr]=arr[0][j];
                        
        arrT[1][idxCtr]=arr[1][j];
                        
        arrT[2][idxCtr]=arr[2][j];
                        
        idxCtr+=1;
                    }
                    
        removeElement(arrj)
                  }
                }
            }
            return [
        arrT,arr];
        }
        function 
        removeElement(array, index){    
            if (
        index > -1) {
                array[
        0].splice(index1);//removes the element at specified index
                
        array[1].splice(index1);//removes the element at specified index
                
        array[2].splice(index1);//removes the element at specified index
                
        return true;
            }
            return 
        false;

        Wayne

        Comment


        • #19
          I added the option to draw all lines/background up to the selected line # in option "DrawLines" or to only draw the one line selected line # in option "DrawLines".
          PHP Code:
          //debugClear();
          var arrLen=9;
          function 
          ArrayDefaults(){
           var 
          timeArr=[ [130,200],[300,330],[400,430],[500,600],[700,800],[930,935],[940,1030],[1115,1300],[1400,1600]];
           
          arrLen=timeArr.length;
           var 
          clrBgArr=[true,true,true,true,true,true,true,true,true];
           var 
          bgClrArr=[Color.RGB(230,255,207),Color.RGB(195,255,255),Color.RGB(255,224,195),Color.RGB(210,193,255),Color.RGB(255,224,46),Color.RGB(154,252,55),Color.RGB(150,243,255),Color.RGB(190,190,190),Color.yellow];
           var 
          plotLinesArr=[true,true,true,true,true,true,true,true,true];
           var 
          lineClrArr=[[Color.green,Color.green],[Color.blue,Color.blue],[Color.aqua,Color.aqua],[Color.RGB(255,104,32),Color.RGB(255,104,32)],[Color.black,Color.black],[Color.RGB(170,2,40),Color.RGB(170,2,40)],[Color.navy,Color.navy],[Color.grey,Color.grey],[Color.red,Color.red]];

            return [
          timeArr,clrBgArr,bgClrArr,plotLinesArr,lineClrArr];
          }
          function 
          ParaDefinitions(getValues){
           var 
          timeArr=[];
           var 
          tempArr=[];
           var 
          i=0;
           for(
          i=0;i<arrLen;i+=1){
            
          tempArr[i]=[];
           }
           var 
          Symbol=getSymbol();
           
          //below are the same as in ArrayDefaults() because I still haven't defined the times for specific underlyings.
           
          if (Symbol.match(/^6E/gi) == "6E") {//Start_Time = 300;End_Time = 1130;
            
          timeArr=[ [130,200],[300,330],[400,430],[500,600],[700,800],[930,935],[940,1030],[1115,1300],[1400,1600]]
           } else if (
          Symbol.match(/^ES/gi) == "ES") {//Start_Time = 930;End_Time = 1630;
            
          timeArr=[ [130,200],[300,330],[400,430],[500,600],[700,800],[930,935],[940,1030],[1115,1300],[1400,1600]]
           } else if (
          Symbol.match(/^CL/gi) == "CL") {//Start_Time = 900;End_Time = 1430;
            
          timeArr=[ [130,200],[300,330],[400,430],[500,600],[700,800],[930,935],[940,1030],[1115,1300],[1400,1600]]
           } else if (
          Symbol.match(/^NQ/gi) == "NQ") {//Start_Time = 930;End_Time = 1630;
            
          timeArr=[ [130,200],[300,330],[400,430],[500,600],[700,800],[930,935],[940,1030],[1115,1300],[1400,1600]]
           }
           for(
          i=0;i<arrLen;i+=1){
            
          tempArr[i]=getValues[i];
            
          tempArr[i][0]=timeArr[i][0];
            
          tempArr[i][1]=timeArr[i][1];
           }

           if(
          arrLen!=tempArr.lengthdisplayError(2050"Error: Verify all 'arrLen' there is a missmatch");

           return 
          tempArr;//since tempArr is defined globally, if defined locally uncomment
          }
          function 
          preMain(){
          /////////////////////////////
           
          var getValues=ArrayDefaults();
           var 
          timeArr=getValues[0];
           var 
          clrBgArr=getValues[1];
           var 
          bgClrArr=getValues[2];
           var 
          plotLinesArr=getValues[3];
           var 
          lineClrArr=getValues[4];
           var 
          i=0;
           var 
          menuArr=[];
           for(
          i=0;i<arrLen;i+=1){
            
          menuArr[i]=[];//[tStartTime,tEndTime,bPlotLines,cStLnClr,cEndLnClr,bClrBg,cBgClr];
            
          menuArr[i][0]=timeArr[i][0];//menuArr[#][0]=startTime;
            
          menuArr[i][1]=timeArr[i][1];//menuArr[#][1]=endTime;
            
          menuArr[i][2]=clrBgArr[i];//menuArr[#][5]=bClrBg;
            
          menuArr[i][3]=bgClrArr[i];//menuArr[#][6]=cBgClr;
            
          menuArr[i][4]=plotLinesArr[i];//menuArr[#][2]=bPlotLines;
            
          menuArr[i][5]=lineClrArr[i][0];//menuArr[#][3]=cStLnClr;
            
          menuArr[i][6]=lineClrArr[i][1];//menuArr[#][4]=cEndLnClr;
           
          }
          /////////////////////////////
           
          setPriceStudy(true);
           var 
          aFPArray = new Array();         
              var 
          x=0,i=0,y=null;          
              
          aFPArray[x] = new FunctionParameter("Run_When"FunctionParameter.STRING);
           
          with(aFPArray[x++]){//<>leave alone
                  
          setName("When To Execute");
            
          addOption("RTM_Only");
            
          addOption("Today_Only");
            
          addOption("All");
                  
          setDefault("All");
              }
              
          aFPArray[x] = new FunctionParameter("auto_ES_6E_CL_NQ"FunctionParameter.BOOLEAN);
              
          with(aFPArray[x]) {//overrides other settings and uses RTH for futures: ES, 6E, CL, and NQ
                  
          setName("Use Auto Times for ES, 6E, & CL");
                  
          setDefault(true);
              }
           
          aFPArray[x] = new FunctionParameter("DrawHowManyLine"FunctionParameter.STRING);
           
          with(aFPArray[x++]){
            
          setName("Draw Which Lines");
            
          addOption("One Line");//will draw line # selected in "DrawLines" below
            
          addOption("All Lines Up To 'Draw Lines'");//i.e., if DrawLines==0 NO lines will be drawn, if DrawLines==1 one line is drawn every time the 1st "time0" bar time is reached, if DrawLines==2 then two lines are drawn for "time0" and "time1", etc.
            
          setDefault("All Lines Up To 'Draw Lines'");
           }
           
          aFPArray[x] = new FunctionParameter("DrawLines"FunctionParameter.NUMBER);
           
          with(aFPArray[x++]){
            
          setName("Draw Lines");
            
          setLowerLimit(1);
            
          setUpperLimit(arrLen);
            for (
          0timeArr.lengthj++) {
             
          addOption(1);
            }
            
          setDefault(timeArr.length);
           }
           
          aFPArray[x] = new FunctionParameter("removeAllBgColor"FunctionParameter.BOOLEAN);
           
          with(aFPArray[x++]){
            
          setName"Remove All Bg Color");
            
          setDefault(false);
           }
           
          aFPArray[x] = new FunctionParameter("removeAllLines"FunctionParameter.BOOLEAN);
           
          with(aFPArray[x++]){
            
          setName"Remove All Lines");
            
          setDefault(true);
           }
           for(
          0timeArr.lengthi++){
            
          y="StartTime"+i;
            
          aFPArray[x] = new FunctionParameter(yFunctionParameter.NUMBER);
            
          with(aFPArray[x++]){         
             
          setName((i+1)+"_Start Time (900, 0=midnight)" ); //military time
             
          setLowerLimit(0);          
             
          setUpperLimit(2400-(1/2400));          
             
          setDefault(menuArr[i][0]);          
            }          
            
          y="EndTime"+i;
            
          aFPArray[x] = new FunctionParameter(yFunctionParameter.NUMBER);    
            
          with(aFPArray[x++]){         
             
          setName((i+1)+"_End Time (1400, 0=2400)" );           
             
          setLowerLimit(0);          
             
          setUpperLimit(2400);          
             
          setDefault(menuArr[i][1]);          
            }
            
          y="ColorBg"+i;
            
          aFPArray[x] = new FunctionParameter(yFunctionParameter.BOOLEAN);
            
          with(aFPArray[x++]){
             
          setName((i+1)+"_Color Background");
             
          setDefault(menuArr[i][2]);
            }
            
          y="BgClr"+i;
            
          aFPArray[x] = new FunctionParameter(yFunctionParameter.COLOR);
            
          with(aFPArray[x++]){
             
          setName((i+1)+"_Background Color");
             
          setDefault(menuArr[i][3]);
            }
            
          y="plotLines"+i;
            
          aFPArray[x] = new FunctionParameter(yFunctionParameter.BOOLEAN);
            
          with(aFPArray[x++]){
             
          setName((i+1)+"_Draw Line at Start/End Times");
             
          setDefault(menuArr[i][4]);
            }
            
          y="stLnClr"+i;
            
          aFPArray[x] = new FunctionParameter(yFunctionParameter.COLOR);
            
          with(aFPArray[x++]){
             
          setName((i+1)+"_Start Line Color");
             
          setDefault(menuArr[i][5]);
            }
            
          y="endLnClr"+i;
            
          aFPArray[x] = new FunctionParameter(yFunctionParameter.COLOR);
            
          with(aFPArray[x++]){
             
          setName((i+1)+"_End Line Color");
             
          setDefault(menuArr[i][6]);
            }
           }
          }
          var 
          bInit=false;
          var 
          paramArr=[];
          function 
          main(Run_When,auto_ES_6E_CL_NQ,DrawHowManyLine,DrawLines,removeAllBgColor,removeAllLines,
               
          StartTime0,EndTime0,ColorBg0,BgClr0,plotLines0,stLnClr0,endLnClr0,
               
          StartTime1,EndTime1,ColorBg1,BgClr1,plotLines1,stLnClr1,endLnClr1,
               
          StartTime2,EndTime2,ColorBg2,BgClr2,plotLines2,stLnClr2,endLnClr2,
               
          StartTime3,EndTime3,ColorBg3,BgClr3,plotLines3,stLnClr3,endLnClr3,
               
          StartTime4,EndTime4,ColorBg4,BgClr4,plotLines4,stLnClr4,endLnClr4,
               
          StartTime5,EndTime5,ColorBg5,BgClr5,plotLines5,stLnClr5,endLnClr5,
               
          StartTime6,EndTime6,ColorBg6,BgClr6,plotLines6,stLnClr6,endLnClr6,    
               
          StartTime7,EndTime7,ColorBg7,BgClr7,plotLines7,stLnClr7,endLnClr7,    
               
          StartTime8,EndTime8,ColorBg8,BgClr8,plotLines8,stLnClr8,endLnClr8    
               
          ){
           if(
          removeAllBgColor && removeAllLines) return;
           var 
          drawLinesFlag=false;
           if(!
          bInit){
            var 
          tempArr = [];
            var 
          args = Array.prototype.slice.call(arguments);
            var 
          0temp=null,tmpCtr=0;
            for(
          0arrLen+= 1){
             
          tempArr.push([]);
            }
            for(
          6args.length+= 1){//IMPORTANT: IF MAIN PARAMETERS ARE MODIFIED ADJUST "i=6"
             
          if(args[i] != null && args[i+1]!=null){
              
          tempArr[tmpCtr][0] = args[i];//i=5
              
          tempArr[tmpCtr][1] = args[i+=1];//i=6
              
          tempArr[tmpCtr][2] = args[i+=1];//i=7
              
          tempArr[tmpCtr][3] = args[i+=1];//i=8
              
          tempArr[tmpCtr][4] = args[i+=1];//i=9
              
          tempArr[tmpCtr][5] = args[i+=1];//i=10
              
          tempArr[tmpCtr][6] = args[i+=1];//i=11
             
          }
             
          tmpCtr+=1;
            }
            if(
          auto_ES_6E_CL_NQparamArr=ParaDefinitions(tempArr);
            else 
          paramArr=tempArr;

            
          bInit=true;
           }
           for(
          i=0;i<=DrawLines;i+=1){
            
          //SessionCounter(Run_When,Start_Time,End_Time,ColorBg,BgClr,plotLines,stLnClr,endLnClr);
            
          if(DrawHowManyLine=="One Line"){
             if(
          i==DrawLines-1drawLinesFlag=true;
             else 
          drawLinesFlag=false;
            }else if(
          DrawHowManyLine=="All Lines Up To 'Draw Lines'"){
             if(
          i<=DrawLines-1drawLinesFlag=true;
             else 
          drawLinesFlag=false;
            }

            if(
          drawLinesFlag) {
             
          Trigger_Bar=SessionCounter(Run_When,paramArr[i][0],paramArr[i][1],paramArr[i][2],paramArr[i][3],paramArr[i][4],paramArr[i][5],paramArr[i][6],removeAllBgColor,removeAllLines);
            }

           }

           return ;
          }

          var 
          SessionCtr=0;
          var 
          In_Session=[];
          function 
          SessionCounter(Run_When,StartTime,EndTime,ColorBg,BgClr,plotLines,stLnClr,endLnClr,removeAllBgColor,removeAllLines){
           var 
          TriggerBar=0runIt=false;
           var 
          In_Session0=false,In_Session1=false;
           var 
          before_after_Session=0;

           if(
          Run_When=="All"){
            
          runIt=true;
           }else if(
          Run_When=="RTM_Only"){
            if(
          isLastBarOnChart()) runIt=true;
           }else if(
          Run_When=="Today_Only"){
            if(
          is_Today()) runIt=true;
           }

           
          In_Session=efsInternal("calcSession",StartTime,EndTime);

           if(
          runIt){
            
          In_Session0=In_Session.getValue(0);
            
          In_Session1=In_Session.getValue(-1);
            if(
          In_Session1==-&& In_Session0==1){
             
          TriggerBar=1;
            }
            if(
          In_Session1==&& In_Session0==-1){
             
          TriggerBar=-1;
            }
            if(!
          removeAllLines && plotLines && TriggerBar!=0){
             
          drawLineRelative(0,0,0,100000,PS_SOLID2, (TriggerBar==stLnClr endLnClr), gID());
            }
            if(!
          removeAllBgColor && ColorBg){
             if(
          In_Session0==1){
              
          setBarBgColor(BgClr,0);
             }
            }
            
          //you can set up conditionals about what to do when before_after_Session =-1 or -2 or -3 (see next block for explanation of values)
            
          var hms0=(getHour(0)*100)+getMinute(0);
            if(
          In_Session0==-1){
             if(
          EndTime>StartTime){
              if(
          StartTime>hms0before_after_Session=-1;//before StartTime and not inSession
              
          else if(hms0>=EndTimebefore_after_Session==-2;//after EndTime and not inSession
             
          }
             if(
          StartTime>EndTime){
              if(
          hms0>=EndTime before_after_Session=-3;//before EndTime and not inSession
              //if(StartTime>hms0) before_after_Session=-4;//since the nonSession period doesn't span over midnight
              //there is no difference between these two so there is no need for this second conditional
             
          }
            }

            
          //return [TriggerBar,In_Session0];//return 1 only if TriggerBar is at StartTime and -1 TriggerBar is at EndTime
           
          }
          }
          function 
          calcSession(StartTime,EndTime){
           var 
          inSession=-1;
           if(
          EndTime==|| EndTime==2400EndTime=2400-(1/2400);
           var 
          hms0=(getHour(0)*100)+getMinute(0);
           if(
          EndTime>StartTime){
            if(
          hms0>=StartTime && EndTime>hms0){
             
          inSession=1;//inSession
            
          }
           }else if(
          StartTime>EndTime){//1700 thru 900 //runs through midnight
            
          inSession=1;
            if(
          hms0>EndTime && StartTime>=hms0){
             
          inSession=-1;//NOT insession
            
          }
           }else if(
          StartTime==EndTime){
            
          inSession=1;//always in session
           
          }
           return 
          inSession;
          }

          function 
          is_Today(){//"bCurrentDay" only works while the chart receives ticks so it's always false when Mkt is closed
           
          var bCurrentDay false;
           var 
          xTime getValue("time");
           var 
          xDate = new Date(); 
           var 
          sTime = (xTime.getMonth()+1+"/"+xTime.getDate()+"/"+xTime.getFullYear());
           var 
          sToday = (xDate.getMonth()+1+"/"+xDate.getDate()+"/"+xDate.getFullYear());
           if ( 
          sTime == sToday ) {
            
          bCurrentDay true;
           }
           return 
          bCurrentDay;
          }

          var 
          grID=0;
          function 
          gID() {
              
          grID++;
              return (
          grID);
          }
          /*************************************************
                       SUPPORT FUNCTIONS                   
          **************************************************/   

          //== displayError function displays an error to the user
          function displayErrorabErrStr ) {
           
          //removeText("xError");  //not needed unless there are multiple label tags
              
          drawTextRelative(abErrStrColor.maroonColor.lightgrey,  Text.FRAME Text.ONTOP Text.RELATIVETOLEFT Text.RELATIVETOBOTTOMnull16"xError");   

          Comment


          • #20
            I added the option to draw all lines/background up to the selected line # in option "DrawLines" or to only draw the one line selected line # in option "DrawLines".
            PHP Code:
            //debugClear();
            var arrLen=9;
            function 
            ArrayDefaults(){
             var 
            timeArr=[ [130,200],[300,330],[400,430],[500,600],[700,800],[930,935],[940,1030],[1115,1300],[1400,1600]];
             
            arrLen=timeArr.length;
             var 
            clrBgArr=[true,true,true,true,true,true,true,true,true];
             var 
            bgClrArr=[Color.RGB(230,255,207),Color.RGB(195,255,255),Color.RGB(255,224,195),Color.RGB(210,193,255),Color.RGB(255,224,46),Color.RGB(154,252,55),Color.RGB(150,243,255),Color.RGB(190,190,190),Color.yellow];
             var 
            plotLinesArr=[true,true,true,true,true,true,true,true,true];
             var 
            lineClrArr=[[Color.green,Color.green],[Color.blue,Color.blue],[Color.aqua,Color.aqua],[Color.RGB(255,104,32),Color.RGB(255,104,32)],[Color.black,Color.black],[Color.RGB(170,2,40),Color.RGB(170,2,40)],[Color.navy,Color.navy],[Color.grey,Color.grey],[Color.red,Color.red]];

              return [
            timeArr,clrBgArr,bgClrArr,plotLinesArr,lineClrArr];
            }
            function 
            ParaDefinitions(getValues){
             var 
            timeArr=[];
             var 
            tempArr=[];
             var 
            i=0;
             for(
            i=0;i<arrLen;i+=1){
              
            tempArr[i]=[];
             }
             var 
            Symbol=getSymbol();
             
            //below are the same as in ArrayDefaults() because I still haven't defined the times for specific underlyings.
             
            if (Symbol.match(/^6E/gi) == "6E") {//Start_Time = 300;End_Time = 1130;
              
            timeArr=[ [130,200],[300,330],[400,430],[500,600],[700,800],[930,935],[940,1030],[1115,1300],[1400,1600]]
             } else if (
            Symbol.match(/^ES/gi) == "ES") {//Start_Time = 930;End_Time = 1630;
              
            timeArr=[ [130,200],[300,330],[400,430],[500,600],[700,800],[930,935],[940,1030],[1115,1300],[1400,1600]]
             } else if (
            Symbol.match(/^CL/gi) == "CL") {//Start_Time = 900;End_Time = 1430;
              
            timeArr=[ [130,200],[300,330],[400,430],[500,600],[700,800],[930,935],[940,1030],[1115,1300],[1400,1600]]
             } else if (
            Symbol.match(/^NQ/gi) == "NQ") {//Start_Time = 930;End_Time = 1630;
              
            timeArr=[ [130,200],[300,330],[400,430],[500,600],[700,800],[930,935],[940,1030],[1115,1300],[1400,1600]]
             }
             for(
            i=0;i<arrLen;i+=1){
              
            tempArr[i]=getValues[i];
              
            tempArr[i][0]=timeArr[i][0];
              
            tempArr[i][1]=timeArr[i][1];
             }

             if(
            arrLen!=tempArr.lengthdisplayError(2050"Error: Verify all 'arrLen' there is a missmatch");

             return 
            tempArr;//since tempArr is defined globally, if defined locally uncomment
            }
            function 
            preMain(){
            /////////////////////////////
             
            var getValues=ArrayDefaults();
             var 
            timeArr=getValues[0];
             var 
            clrBgArr=getValues[1];
             var 
            bgClrArr=getValues[2];
             var 
            plotLinesArr=getValues[3];
             var 
            lineClrArr=getValues[4];
             var 
            i=0;
             var 
            menuArr=[];
             for(
            i=0;i<arrLen;i+=1){
              
            menuArr[i]=[];//[tStartTime,tEndTime,bPlotLines,cStLnClr,cEndLnClr,bClrBg,cBgClr];
              
            menuArr[i][0]=timeArr[i][0];//menuArr[#][0]=startTime;
              
            menuArr[i][1]=timeArr[i][1];//menuArr[#][1]=endTime;
              
            menuArr[i][2]=clrBgArr[i];//menuArr[#][5]=bClrBg;
              
            menuArr[i][3]=bgClrArr[i];//menuArr[#][6]=cBgClr;
              
            menuArr[i][4]=plotLinesArr[i];//menuArr[#][2]=bPlotLines;
              
            menuArr[i][5]=lineClrArr[i][0];//menuArr[#][3]=cStLnClr;
              
            menuArr[i][6]=lineClrArr[i][1];//menuArr[#][4]=cEndLnClr;
             
            }
            /////////////////////////////
             
            setPriceStudy(true);
             var 
            aFPArray = new Array();         
                var 
            x=0,i=0,y=null;          
                
            aFPArray[x] = new FunctionParameter("Run_When"FunctionParameter.STRING);
             
            with(aFPArray[x++]){//<>leave alone
                    
            setName("When To Execute");
              
            addOption("RTM_Only");
              
            addOption("Today_Only");
              
            addOption("All");
                    
            setDefault("All");
                }
                
            aFPArray[x] = new FunctionParameter("auto_ES_6E_CL_NQ"FunctionParameter.BOOLEAN);
                
            with(aFPArray[x]) {//overrides other settings and uses RTH for futures: ES, 6E, CL, and NQ
                    
            setName("Use Auto Times for ES, 6E, & CL");
                    
            setDefault(true);
                }
             
            aFPArray[x] = new FunctionParameter("DrawHowManyLine"FunctionParameter.STRING);
             
            with(aFPArray[x++]){
              
            setName("Draw Which Lines");
              
            addOption("One Line");//will draw line # selected in "DrawLines" below
              
            addOption("All Lines Up To 'Draw Lines'");//i.e., if DrawLines==0 NO lines will be drawn, if DrawLines==1 one line is drawn every time the 1st "time0" bar time is reached, if DrawLines==2 then two lines are drawn for "time0" and "time1", etc.
              
            setDefault("All Lines Up To 'Draw Lines'");
             }
             
            aFPArray[x] = new FunctionParameter("DrawLines"FunctionParameter.NUMBER);
             
            with(aFPArray[x++]){
              
            setName("Draw Lines");
              
            setLowerLimit(1);
              
            setUpperLimit(arrLen);
              for (
            0timeArr.lengthj++) {
               
            addOption(1);
              }
              
            setDefault(timeArr.length);
             }
             
            aFPArray[x] = new FunctionParameter("removeAllBgColor"FunctionParameter.BOOLEAN);
             
            with(aFPArray[x++]){
              
            setName"Remove All Bg Color");
              
            setDefault(false);
             }
             
            aFPArray[x] = new FunctionParameter("removeAllLines"FunctionParameter.BOOLEAN);
             
            with(aFPArray[x++]){
              
            setName"Remove All Lines");
              
            setDefault(true);
             }
             for(
            0timeArr.lengthi++){
              
            y="StartTime"+i;
              
            aFPArray[x] = new FunctionParameter(yFunctionParameter.NUMBER);
              
            with(aFPArray[x++]){         
               
            setName((i+1)+"_Start Time (900, 0=midnight)" ); //military time
               
            setLowerLimit(0);          
               
            setUpperLimit(2400-(1/2400));          
               
            setDefault(menuArr[i][0]);          
              }          
              
            y="EndTime"+i;
              
            aFPArray[x] = new FunctionParameter(yFunctionParameter.NUMBER);    
              
            with(aFPArray[x++]){         
               
            setName((i+1)+"_End Time (1400, 0=2400)" );           
               
            setLowerLimit(0);          
               
            setUpperLimit(2400);          
               
            setDefault(menuArr[i][1]);          
              }
              
            y="ColorBg"+i;
              
            aFPArray[x] = new FunctionParameter(yFunctionParameter.BOOLEAN);
              
            with(aFPArray[x++]){
               
            setName((i+1)+"_Color Background");
               
            setDefault(menuArr[i][2]);
              }
              
            y="BgClr"+i;
              
            aFPArray[x] = new FunctionParameter(yFunctionParameter.COLOR);
              
            with(aFPArray[x++]){
               
            setName((i+1)+"_Background Color");
               
            setDefault(menuArr[i][3]);
              }
              
            y="plotLines"+i;
              
            aFPArray[x] = new FunctionParameter(yFunctionParameter.BOOLEAN);
              
            with(aFPArray[x++]){
               
            setName((i+1)+"_Draw Line at Start/End Times");
               
            setDefault(menuArr[i][4]);
              }
              
            y="stLnClr"+i;
              
            aFPArray[x] = new FunctionParameter(yFunctionParameter.COLOR);
              
            with(aFPArray[x++]){
               
            setName((i+1)+"_Start Line Color");
               
            setDefault(menuArr[i][5]);
              }
              
            y="endLnClr"+i;
              
            aFPArray[x] = new FunctionParameter(yFunctionParameter.COLOR);
              
            with(aFPArray[x++]){
               
            setName((i+1)+"_End Line Color");
               
            setDefault(menuArr[i][6]);
              }
             }
            }
            var 
            bInit=false;
            var 
            paramArr=[];
            function 
            main(Run_When,auto_ES_6E_CL_NQ,DrawHowManyLine,DrawLines,removeAllBgColor,removeAllLines,
                 
            StartTime0,EndTime0,ColorBg0,BgClr0,plotLines0,stLnClr0,endLnClr0,
                 
            StartTime1,EndTime1,ColorBg1,BgClr1,plotLines1,stLnClr1,endLnClr1,
                 
            StartTime2,EndTime2,ColorBg2,BgClr2,plotLines2,stLnClr2,endLnClr2,
                 
            StartTime3,EndTime3,ColorBg3,BgClr3,plotLines3,stLnClr3,endLnClr3,
                 
            StartTime4,EndTime4,ColorBg4,BgClr4,plotLines4,stLnClr4,endLnClr4,
                 
            StartTime5,EndTime5,ColorBg5,BgClr5,plotLines5,stLnClr5,endLnClr5,
                 
            StartTime6,EndTime6,ColorBg6,BgClr6,plotLines6,stLnClr6,endLnClr6,    
                 
            StartTime7,EndTime7,ColorBg7,BgClr7,plotLines7,stLnClr7,endLnClr7,    
                 
            StartTime8,EndTime8,ColorBg8,BgClr8,plotLines8,stLnClr8,endLnClr8    
                 
            ){
             if(
            removeAllBgColor && removeAllLines) return;
             var 
            drawLinesFlag=false;
             if(!
            bInit){
              var 
            tempArr = [];
              var 
            args = Array.prototype.slice.call(arguments);
              var 
            0temp=null,tmpCtr=0;
              for(
            0arrLen+= 1){
               
            tempArr.push([]);
              }
              for(
            6args.length+= 1){//IMPORTANT: IF MAIN PARAMETERS ARE MODIFIED ADJUST "i=6"
               
            if(args[i] != null && args[i+1]!=null){
                
            tempArr[tmpCtr][0] = args[i];//i=5
                
            tempArr[tmpCtr][1] = args[i+=1];//i=6
                
            tempArr[tmpCtr][2] = args[i+=1];//i=7
                
            tempArr[tmpCtr][3] = args[i+=1];//i=8
                
            tempArr[tmpCtr][4] = args[i+=1];//i=9
                
            tempArr[tmpCtr][5] = args[i+=1];//i=10
                
            tempArr[tmpCtr][6] = args[i+=1];//i=11
               
            }
               
            tmpCtr+=1;
              }
              if(
            auto_ES_6E_CL_NQparamArr=ParaDefinitions(tempArr);
              else 
            paramArr=tempArr;

              
            bInit=true;
             }
             for(
            i=0;i<=DrawLines;i+=1){
              
            //SessionCounter(Run_When,Start_Time,End_Time,ColorBg,BgClr,plotLines,stLnClr,endLnClr);
              
            if(DrawHowManyLine=="One Line"){
               if(
            i==DrawLines-1drawLinesFlag=true;
               else 
            drawLinesFlag=false;
              }else if(
            DrawHowManyLine=="All Lines Up To 'Draw Lines'"){
               if(
            i<=DrawLines-1drawLinesFlag=true;
               else 
            drawLinesFlag=false;
              }

              if(
            drawLinesFlag) {
               
            Trigger_Bar=SessionCounter(Run_When,paramArr[i][0],paramArr[i][1],paramArr[i][2],paramArr[i][3],paramArr[i][4],paramArr[i][5],paramArr[i][6],removeAllBgColor,removeAllLines);
              }

             }

             return ;
            }

            var 
            SessionCtr=0;
            var 
            In_Session=[];
            function 
            SessionCounter(Run_When,StartTime,EndTime,ColorBg,BgClr,plotLines,stLnClr,endLnClr,removeAllBgColor,removeAllLines){
             var 
            TriggerBar=0runIt=false;
             var 
            In_Session0=false,In_Session1=false;
             var 
            before_after_Session=0;

             if(
            Run_When=="All"){
              
            runIt=true;
             }else if(
            Run_When=="RTM_Only"){
              if(
            isLastBarOnChart()) runIt=true;
             }else if(
            Run_When=="Today_Only"){
              if(
            is_Today()) runIt=true;
             }

             
            In_Session=efsInternal("calcSession",StartTime,EndTime);

             if(
            runIt){
              
            In_Session0=In_Session.getValue(0);
              
            In_Session1=In_Session.getValue(-1);
              if(
            In_Session1==-&& In_Session0==1){
               
            TriggerBar=1;
              }
              if(
            In_Session1==&& In_Session0==-1){
               
            TriggerBar=-1;
              }
              if(!
            removeAllLines && plotLines && TriggerBar!=0){
               
            drawLineRelative(0,0,0,100000,PS_SOLID2, (TriggerBar==stLnClr endLnClr), gID());
              }
              if(!
            removeAllBgColor && ColorBg){
               if(
            In_Session0==1){
                
            setBarBgColor(BgClr,0);
               }
              }
              
            //you can set up conditionals about what to do when before_after_Session =-1 or -2 or -3 (see next block for explanation of values)
              
            var hms0=(getHour(0)*100)+getMinute(0);
              if(
            In_Session0==-1){
               if(
            EndTime>StartTime){
                if(
            StartTime>hms0before_after_Session=-1;//before StartTime and not inSession
                
            else if(hms0>=EndTimebefore_after_Session==-2;//after EndTime and not inSession
               
            }
               if(
            StartTime>EndTime){
                if(
            hms0>=EndTime before_after_Session=-3;//before EndTime and not inSession
                //if(StartTime>hms0) before_after_Session=-4;//since the nonSession period doesn't span over midnight
                //there is no difference between these two so there is no need for this second conditional
               
            }
              }

              
            //return [TriggerBar,In_Session0];//return 1 only if TriggerBar is at StartTime and -1 TriggerBar is at EndTime
             
            }
            }
            function 
            calcSession(StartTime,EndTime){
             var 
            inSession=-1;
             if(
            EndTime==|| EndTime==2400EndTime=2400-(1/2400);
             var 
            hms0=(getHour(0)*100)+getMinute(0);
             if(
            EndTime>StartTime){
              if(
            hms0>=StartTime && EndTime>hms0){
               
            inSession=1;//inSession
              
            }
             }else if(
            StartTime>EndTime){//1700 thru 900 //runs through midnight
              
            inSession=1;
              if(
            hms0>EndTime && StartTime>=hms0){
               
            inSession=-1;//NOT insession
              
            }
             }else if(
            StartTime==EndTime){
              
            inSession=1;//always in session
             
            }
             return 
            inSession;
            }

            function 
            is_Today(){//"bCurrentDay" only works while the chart receives ticks so it's always false when Mkt is closed
             
            var bCurrentDay false;
             var 
            xTime getValue("time");
             var 
            xDate = new Date(); 
             var 
            sTime = (xTime.getMonth()+1+"/"+xTime.getDate()+"/"+xTime.getFullYear());
             var 
            sToday = (xDate.getMonth()+1+"/"+xDate.getDate()+"/"+xDate.getFullYear());
             if ( 
            sTime == sToday ) {
              
            bCurrentDay true;
             }
             return 
            bCurrentDay;
            }

            var 
            grID=0;
            function 
            gID() {
                
            grID++;
                return (
            grID);
            }
            /*************************************************
                         SUPPORT FUNCTIONS                   
            **************************************************/   

            //== displayError function displays an error to the user
            function displayErrorabErrStr ) {
             
            //removeText("xError");  //not needed unless there are multiple label tags
                
            drawTextRelative(abErrStrColor.maroonColor.lightgrey,  Text.FRAME Text.ONTOP Text.RELATIVETOLEFT Text.RELATIVETOBOTTOMnull16"xError");   

            Wayne

            Comment


            • #21
              I added the option to draw all lines/background up to the selected line # in option "DrawLines" or to only draw the one line selected line # in option "DrawLines".

              Draw_MultiTimeframe_Lines_or_Bg.efs

              Wayne
              Last edited by waynecd; 10-26-2016, 12:16 PM.

              Comment


              • #22
                Been using this custom time line vertical plot study efs it works perfectly. but want to add the option just to have the current period show, ie; from 4am onward for current session. Is there a simplistic way to add the code to this existing formula? If can get any help would be greatly appreciated.



                //debugClear();

                function preMain() {

                var aFPArray = new Array();
                setPriceStudy(true);
                setStudyTitle("Time - Price Pivots");
                var timeArr = [800,930,940,950,1030,1100,1600];
                var lineClr = [Color.grey,Color.white,Color.aqua,Color.aqua,Color .darkgrey,Color.darkgrey,Color.navy];
                var lineThick = [1,1,1,1,1,1,1];
                var x=0, y=0, i=0, j=0;
                aFPArray[x] = new FunctionParameter("NumberOfLinesToDraw", FunctionParameter.NUMBER);
                with(aFPArray[x++]){
                setName("Draw The 1st ? Lines");//i.e., if NumberOfLinesToDraw==1 one line is drawn every time the 1st "time0" bar time is reached, if it==2 then two lines are drawn for "time0" and "time1", etc.
                setLowerLimit(1);
                setUpperLimit(7);
                for (j = 0; j < lineThick.length; j++) {
                addOption(j + 1);
                }
                setDefault(7);
                }
                for(i = 0; i < timeArr.length; i++){
                y="time"+i;
                aFPArray[x] = new FunctionParameter(y, FunctionParameter.NUMBER);
                with(aFPArray[x++]){
                setLowerLimit(1);
                setDefault(timeArr[i]);
                }

                y="lineClr"+i;
                aFPArray[x] = new FunctionParameter(y, FunctionParameter.COLOR);
                with(aFPArray[x++]){
                setDefault(lineClr[i]);
                }

                y="lineThick"+i;
                aFPArray[x] = new FunctionParameter(y, FunctionParameter.NUMBER);
                with(aFPArray[x++]){
                setLowerLimit(1);
                for (j = 0; j < lineThick.length; j++) {
                if (lineThick[j] != null) addOption(j+1);
                }
                setDefault(1);
                }
                }
                aFPArray[x] = new FunctionParameter("displayParam", FunctionParameter.BOOLEAN);
                with(aFPArray[x++]){
                setDefault(false);
                }
                }

                var bInit=false;
                var paramArr=[];
                function main(NumberOfLinesToDraw,
                time0,time1,time2,time3,time4,time5,time6,
                lineClr0,lineClr1,lineClr2,lineClr3,lineClr4,lineC lr5,lineClr6,
                lineThick0,lineThick1,lineThick2,lineThick3,lineTh ick4,lineThick5,lineThick6,
                displayParam) {

                if(isDWM()) return;
                if(!bInit){
                setShowTitleParameters( displayParam );
                var i = 0, temp=null;
                for(i = 0; i < 3; i += 1){
                paramArr.push([]);
                }
                for(i = 0; i < 7; i += 1){
                temp = eval("time" + i);
                if(temp != null) paramArr[0][i] = temp;
                temp = eval("lineClr" + i);
                if(temp != null) paramArr[1][i] = temp;
                temp = eval("lineThick" + i);
                if(temp != null) paramArr[2][i] = temp;
                }
                bInit=true;
                }

                DrawTrigger(paramArr, NumberOfLinesToDraw);

                return null;

                }

                var flag0 = 0, flag1 = 0, timeCtr=0;
                var DrawTriggerInit=false;
                function DrawTrigger(paramArr, NumberOfLinesToDraw){

                var i = 0;
                var barTm = (hour(0)*100)+minute(0);

                if(!DrawTriggerInit){
                for(i = 0; i < paramArr[0].length; i += 1){
                if(paramArr[1][i] != null) setDefaultBarFgColor(paramArr[1][i],i);
                if(paramArr[2][i] != null) setDefaultBarThickness(paramArr[2][i],i);
                }
                DrawTriggerInit=true;
                }

                if(flag1 == 1 && barTm > paramArr[0][timeCtr+1]) flag1 = 0;

                if(flag0 == 0 && barTm >= paramArr[0][paramArr[0].length -1]){
                if(NumberOfLinesToDraw == paramArr[0].length && getCurrentBarCount()>1) onAction0(paramArr[1][paramArr[1].length-1],paramArr[2][paramArr[2].length-1]);
                flag1 = 0;
                flag0 = 1;
                }

                if(flag1 == 0){
                for(i = 0; i < paramArr[0].length; i += 1){
                if((barTm >= paramArr[0][i] && barTm <paramArr[0][i+1])){
                if(i <= NumberOfLinesToDraw-1) onAction0(paramArr[1][i],paramArr[2][i]);
                flag0 = 0;
                flag1 = 1;
                timeCtr = i;
                }
                }
                }
                }

                function onAction0(clr, thick) {
                drawLineRelative(0, 0, 0, 999999,PS_SOLID, thick, clr, "line"+rawtime(0));
                }

                Comment


                • #23
                  Been using this custom time line vertical plot study efs it works perfectly. but want to add the option just to have the current period show, ie; from 4am onward for current session. Is there a simplistic way to add the code to this existing formula? If can get any help would be greatly appreciated.



                  //debugClear();

                  function preMain() {

                  var aFPArray = new Array();
                  setPriceStudy(true);
                  setStudyTitle("Time - Price Pivots");
                  var timeArr = [800,930,940,950,1030,1100,1600];
                  var lineClr = [Color.grey,Color.white,Color.aqua,Color.aqua,Color .darkgrey,Color.darkgrey,Color.navy];
                  var lineThick = [1,1,1,1,1,1,1];
                  var x=0, y=0, i=0, j=0;
                  aFPArray[x] = new FunctionParameter("NumberOfLinesToDraw", FunctionParameter.NUMBER);
                  with(aFPArray[x++]){
                  setName("Draw The 1st ? Lines");//i.e., if NumberOfLinesToDraw==1 one line is drawn every time the 1st "time0" bar time is reached, if it==2 then two lines are drawn for "time0" and "time1", etc.
                  setLowerLimit(1);
                  setUpperLimit(7);
                  for (j = 0; j < lineThick.length; j++) {
                  addOption(j + 1);
                  }
                  setDefault(7);
                  }
                  for(i = 0; i < timeArr.length; i++){
                  y="time"+i;
                  aFPArray[x] = new FunctionParameter(y, FunctionParameter.NUMBER);
                  with(aFPArray[x++]){
                  setLowerLimit(1);
                  setDefault(timeArr[i]);
                  }

                  y="lineClr"+i;
                  aFPArray[x] = new FunctionParameter(y, FunctionParameter.COLOR);
                  with(aFPArray[x++]){
                  setDefault(lineClr[i]);
                  }

                  y="lineThick"+i;
                  aFPArray[x] = new FunctionParameter(y, FunctionParameter.NUMBER);
                  with(aFPArray[x++]){
                  setLowerLimit(1);
                  for (j = 0; j < lineThick.length; j++) {
                  if (lineThick[j] != null) addOption(j+1);
                  }
                  setDefault(1);
                  }
                  }
                  aFPArray[x] = new FunctionParameter("displayParam", FunctionParameter.BOOLEAN);
                  with(aFPArray[x++]){
                  setDefault(false);
                  }
                  }

                  var bInit=false;
                  var paramArr=[];
                  function main(NumberOfLinesToDraw,
                  time0,time1,time2,time3,time4,time5,time6,
                  lineClr0,lineClr1,lineClr2,lineClr3,lineClr4,lineC lr5,lineClr6,
                  lineThick0,lineThick1,lineThick2,lineThick3,lineTh ick4,lineThick5,lineThick6,
                  displayParam) {

                  if(isDWM()) return;
                  if(!bInit){
                  setShowTitleParameters( displayParam );
                  var i = 0, temp=null;
                  for(i = 0; i < 3; i += 1){
                  paramArr.push([]);
                  }
                  for(i = 0; i < 7; i += 1){
                  temp = eval("time" + i);
                  if(temp != null) paramArr[0][i] = temp;
                  temp = eval("lineClr" + i);
                  if(temp != null) paramArr[1][i] = temp;
                  temp = eval("lineThick" + i);
                  if(temp != null) paramArr[2][i] = temp;
                  }
                  bInit=true;
                  }

                  DrawTrigger(paramArr, NumberOfLinesToDraw);

                  return null;

                  }

                  var flag0 = 0, flag1 = 0, timeCtr=0;
                  var DrawTriggerInit=false;
                  function DrawTrigger(paramArr, NumberOfLinesToDraw){

                  var i = 0;
                  var barTm = (hour(0)*100)+minute(0);

                  if(!DrawTriggerInit){
                  for(i = 0; i < paramArr[0].length; i += 1){
                  if(paramArr[1][i] != null) setDefaultBarFgColor(paramArr[1][i],i);
                  if(paramArr[2][i] != null) setDefaultBarThickness(paramArr[2][i],i);
                  }
                  DrawTriggerInit=true;
                  }

                  if(flag1 == 1 && barTm > paramArr[0][timeCtr+1]) flag1 = 0;

                  if(flag0 == 0 && barTm >= paramArr[0][paramArr[0].length -1]){
                  if(NumberOfLinesToDraw == paramArr[0].length && getCurrentBarCount()>1) onAction0(paramArr[1][paramArr[1].length-1],paramArr[2][paramArr[2].length-1]);
                  flag1 = 0;
                  flag0 = 1;
                  }

                  if(flag1 == 0){
                  for(i = 0; i < paramArr[0].length; i += 1){
                  if((barTm >= paramArr[0][i] && barTm <paramArr[0][i+1])){
                  if(i <= NumberOfLinesToDraw-1) onAction0(paramArr[1][i],paramArr[2][i]);
                  flag0 = 0;
                  flag1 = 1;
                  timeCtr = i;
                  }
                  }
                  }
                  }

                  function onAction0(clr, thick) {
                  drawLineRelative(0, 0, 0, 999999,PS_SOLID, thick, clr, "line"+rawtime(0));
                  }

                  Comment

                  Working...
                  X