Não cria linha vertical

AnarcoPhysic  

Estou tentando aprender a manipular melhor os recursos gráficos do MetaT5. Já fiz outros indicadores com linhas horizontais, mas esse daqui... não sai nem a pau! O que estou fazendo de errado?

Resumo:

_Classe contendo dados para criação de objetos

_Métodos para criar linha horizontal

_Script no qual se traçaria uma linha no meio do gráfico (tomando os preços de MAX e MIM como referência)

//+------------------------------------------------------------------+
//|                                                    Objetando.mq5 |
//|                                                                  |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright ""
#property version   "1.00"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+

input long chartID_ini =0x0000000;// ID Gráfico (0 para o gráfico presente)

class Objectiva
{
   private:
   //Genéricos
   long               m_IDgrafico;
   color              m_cor;
   int                m_subJanela;  
   //Específicos
   const ENUM_OBJECT  m_linhaVertical;
   const string       m_linhaVnome;
   const ENUM_OBJECT  m_linhaHorizontal;
   const string       m_linhaHnome;
   const ENUM_OBJECT  m_botao;
   const string       m_botaoNome;
   
   
   public:
   //Construtor
   Objectiva(long ID=0, int subJan =0): m_linhaVertical(OBJ_VLINE), m_linhaVnome("Linha Vertical"),
                                        m_linhaHorizontal (OBJ_HLINE), m_linhaHnome("Linha Horizontal"),
                                        m_botao(OBJ_HLINE), m_botaoNome("Botão"),
                                        m_cor((color)MathRand())
   {
      m_IDgrafico = ID;
      m_subJanela = subJan;
   }
   //Desconstrutor
   ~Objectiva(){};
   
   //funções
   void Cria_L_V(color, datetime);
   
   //linhas verticais
   void Cria_L_H(double);
   void Move_L_H(double);
   
   //Botões
   void Cria_Botao(color, uint X, uint Y);
   //Função Retorna Estado
   long ID()
          {return this.m_IDgrafico;};
   int SubJanela()
          {return this.m_subJanela;};
   void DestruirLinhaH()
   {
      ObjectDelete(m_IDgrafico,m_linhaHnome);
   };       
};

void Objectiva::Cria_L_H(double price)
{
      if(ObjectCreate(m_IDgrafico,m_linhaHnome,m_linhaVertical,m_subJanela,0,price))
      {
           ObjectSetInteger(m_IDgrafico,m_linhaHnome,OBJPROP_COLOR, m_cor);
           ObjectSetInteger(m_IDgrafico,m_linhaHnome,OBJPROP_STYLE,STYLE_DASH); 
           ObjectSetInteger(m_IDgrafico,m_linhaHnome,OBJPROP_WIDTH,3);
           ObjectSetInteger(m_IDgrafico,m_linhaHnome,OBJPROP_ZORDER,1);
           ObjectSetInteger(m_IDgrafico,m_linhaHnome,OBJPROP_BACK,true); 
           ObjectSetInteger(m_IDgrafico,m_linhaHnome,OBJPROP_HIDDEN,0);
           return;
      }
      else
      {
           printf("Falha em criar %s",m_linhaHnome);
           return;
      }   
};

void Objectiva::Move_L_H(double novapos)
{
   ObjectMove(m_IDgrafico,m_linhaHnome,0,0,novapos);
}

//variáveis globais (de controle)
Objectiva Objetora(chartID_ini);
Objectiva *_Objetora;


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

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

//+------------------------------------------------------------------+
int OnInit()
{
   ChartSetInteger(Objetora.ID(),CHART_EVENT_MOUSE_MOVE,true);
   ChartSetInteger(Objetora.ID(),CHART_EVENT_MOUSE_WHEEL,true);
   _Objetora = GetPointer(Objetora);
   
   Objetora.Cria_L_H(0);
   double medidor = (  ChartGetDouble(Objetora.ID(),CHART_PRICE_MAX,0)
                       +
                       ChartGetDouble(Objetora.ID(),CHART_PRICE_MIN,0)  
                    )/2;
   _Objetora.Move_L_H(medidor);      
   return(INIT_SUCCEEDED);
}

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

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

//+------------------------------------------------------------------+
void OnChartEvent(const int id,const long& lparam,const double& dparam,const string& sparam)
{ 
   if(
            id == ChartGetInteger(_Objetora.ID(),CHART_EVENT_MOUSE_WHEEL,_Objetora.SubJanela()) 
                                                || 
            id == ChartGetInteger(_Objetora.ID(),CHART_KEYBOARD_CONTROL,_Objetora.SubJanela())
                                                ||
            id == ChartGetInteger(_Objetora.ID(),CHART_AUTOSCROLL,_Objetora.SubJanela())
           )
   {    

      double medidor = (
                        ChartGetDouble(Objetora.ID(),CHART_PRICE_MAX,0)
                        +
                        ChartGetDouble(Objetora.ID(),CHART_PRICE_MIN,0)  
                       )/2;
                
      _Objetora.Move_L_H(medidor);
   }
  
}
//+------------------------------------------------------------------+
   
   void OnDeinit(const int reason)
{
   Objetora.DestruirLinhaH();
}
Razão: