making Girdlines in array format

Back to topics list To post a new topic, please log in or register
avatar
6
grace27 2015.09.28 11:52
 

Please guys can you help me out on this code. I'm try to build a grid lines indicator but the lines are no drawing, here are the codes :

#define  RS_LINES

//--- input parameters
input double     GridMax=2.0;
input double     GridMin=1.0;
input double     GridStep=10.0;
input color      GridColor=clrWhite;
input int     GridBackground=clrBlack;
input int        GridStyle =2;




double TickSize;
double pips;
double GridArray[];

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   TickSize = MarketInfo(Symbol(),MODE_TICKSIZE);
     if(TickSize ==0.00001 || Point == 0.001)
      pips= TickSize * 10;
      else pips= TickSize;
//---
   return(INIT_SUCCEEDED);
  }

//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int deinit()
{
double RS_MAX  = MathRound(GridMax / Point);
double RS_STEP = MathRound(GridStep/ Point);
double RS_MIN  = MathRound(GridMin / Point);
 

double STEP_RANGE = (RS_STEP * pips);
int index= MathFloor(RS_MAX / RS_STEP);

      for( int i= 1; i< index; i++)
      {
 
   GridArray[i] = RS_MIN + (i * STEP_RANGE ) ;
       
     
     string     RS_HGLineName  =  RS_LINES + DoubleToStr    ( GridArray[i] , Digits        ) ;
 
 
  ObjectDelete( RS_HGLineName  =  RS_LINES  + DoubleToStr    (  GridArray[i] , Digits        ));
   
    
    }

 return(0);
  }
int start()
  {
 int    counted_bars=IndicatorCounted();
 
double RS_MAX  = MathRound(GridMax / Point);
double RS_STEP = MathRound(GridStep/ Point);
double RS_MIN  = MathRound(GridMin / Point);
 

double STEP_RANGE = (RS_STEP * pips);
int index= MathFloor(RS_MAX / RS_STEP);

      for( int i= 1; i< index; i++)
      {
 
   GridArray[i] = RS_MIN + ( i * STEP_RANGE ) ;
     string       RS_HGLineName  = RS_LINES  + DoubleToStr    (GridArray[i] , Digits        ) ; //<  46>
       ObjectCreate  ( RS_HGLineName  , OBJ_HLINE     , 0 , 0          , GridArray[i]               ) ; //<  47>
       ObjectSet     ( RS_HGLineName  , OBJPROP_COLOR                  , GridColor                    ) ; //<  48>
       ObjectSet     ( RS_HGLineName  , OBJPROP_STYLE                  ,  GridStyle                     ) ; //<  49>
       ObjectSet     ( RS_HGLineName  , OBJPROP_BACK                   , GridBackground               ) ; //<  50>
           
         
    } 
   
//--- return value of prev_calculated for next call
   return(0);
  }

//+------------------------------------------------------------------+

I will really appreciate it if the code is corrected......

when i did it as a  single variable it worked properly but when i then converted it to arrays,its stoped drawing horizontal lines, here is the Gridlines that worked  as single variable :

#property strict
#property indicator_chart_window
#define  RS_LINES
//--- input parameters
input double   RSG_HGmax=2.0;
input double   RSG_HGstep=50;
input double   RSG_HGmin=1.0;
input color    RSGI_HGcolor= 0;
input int      RSGI_HGstyle=2;
input int      RSGI_HGbackground=0;

double TickSize;
double pips;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
     TickSize = MarketInfo(Symbol(),MODE_TICKSIZE);
     if(TickSize ==0.00001 || Point == 0.001)
      pips= TickSize * 10;
      else pips= TickSize;

   return(0);
  }
 
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int deinit()
  {
double RS_MAX  = MathRound(RSG_HGmax / Point);
double RS_STEP = MathRound(RSG_HGstep/ Point);
double RS_MIN  = MathRound(RSG_HGmin / Point);

double RS_PRICE ;
double I;
double STEP_RANGE = (RS_STEP *pips);
 for( I=RS_MIN; I<RS_MAX; I+=STEP_RANGE)
 {
 RS_PRICE  = I * Point;
 
  string     RS_HGLineName  = RS_LINES  + DoubleToStr    ( RS_PRICE , Digits        ) ;
 
 
  ObjectDelete( RS_HGLineName  = RS_LINES  + DoubleToStr    ( RS_PRICE , Digits        )); 
   
     } // for                                                                                             
 
  
//---
   return(0);
  }
int start()
  {
//---
int    counted_bars=IndicatorCounted();
double RS_MAX  = MathRound(RSG_HGmax / Point) ;
double RS_STEP = MathRound(RSG_HGstep/ Point);
double  RS_MIN  = MathRound(RSG_HGmin / Point);
double RS_PRICE ;
double J;
double STEP_RANGE = (RS_STEP *pips);
 for(J=RS_MIN; J<RS_MAX; J+=STEP_RANGE)
 {
 RS_PRICE  = J * Point;
   string       RS_HGLineName  = RS_LINES  + DoubleToStr    ( RS_PRICE , Digits        ) ; //<  46>
       ObjectCreate  ( RS_HGLineName  , OBJ_HLINE     , 0 , 0          , RS_PRICE                ) ; //<  47>
       ObjectSet     ( RS_HGLineName  , OBJPROP_COLOR                  , RSGI_HGcolor                     ) ; //<  48>
       ObjectSet     ( RS_HGLineName  , OBJPROP_STYLE                  , RSGI_HGstyle                     ) ; //<  49>
       ObjectSet     ( RS_HGLineName  , OBJPROP_BACK                   ,RSGI_HGbackground               ) ; //<  50>
      
     }
   return(0);
 
  }

//+------------------------------------------------------------------+

Waiting for your reply .....



avatar
108
eddie 2015.09.29 11:40 #
 

Hi !

You are using the same Object-Name for all your Lines. Therefore you get only one Line.


avatar
12998
WHRoeder 2015.09.30 02:29 #
 
grace27: Please guys can you help me out on this code. I'm try to build a gridlines indicator but the lines are no drawing, here are the codes :
  1. Don't paste code
    Play video
    Please edit your post.
    For large amounts of code, attach it.

  2. double GridArray[];
    :
    for( int i= 1; i< index; i++){
       GridArray[i] = RS_MIN + ( i * STEP_RANGE ) ;
    Your array has no size to nothing can be assigned. If you had use property strict, you would have known the problem.
avatar
12998
WHRoeder 2015.09.30 02:31 #
 
eddie: You are using the same Object-Name for all your Lines. Therefore you get only one Line.
Wrong, definitely generating a unique name per line:
for(J=RS_MIN; J<RS_MAX; J+=STEP_RANGE){
   RS_PRICE  = J * Point;
   string       RS_HGLineName  = RS_LINES  + DoubleToStr    ( RS_PRICE , Digits        ) ; //<  46>
   ObjectCreate  ( RS_HGLineName
avatar
5
ReactoFX 2016.01.17 14:30 #
 

Hi Grace,

 

Were you successfull in making this indicator to work properly? 

Back to topics list  

To add comments, please log in or register