Download MetaTrader 5

ObjectDelete não está excluindo objetos

Para adicionar comentários, por favor Conecte-se ou registrar
Pedro Quina
301
Pedro Quina  

Bom dia


      Fiz um indicador para sinalizar com uma linha vertical um determinado horário. Ao finalizar o indicador gostaria de excluir as linhas verticais, mas o comando ObjectDelete não está excluindo as linhas :


/+------------------------------------------------------------------+
//|                                         IndicadorAberturaDia.mq5 |
//|                        Copyright 2016, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property indicator_chart_window
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+

#include <Arrays/ArrayString.mqh>

input int   INPHORAINICIAL    = 9;

int contaLinhaV = 0;

CArrayString aLinhas;

int OnInit()
  {
   return(INIT_SUCCEEDED);
  }
  

  
void OnDeinit(const int reason){

   for( int i=0; i < aLinhas.Total() ; i++ ) {
      ObjectDelete( ChartID(), aLinhas.At( i ));
      Print ( aLinhas.At( i ) );
   
   }

}
  
  
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---
      MqlDateTime data; 

      if ( prev_calculated==0 ) {
         Print( prev_calculated ) ;
         for(int i=0; i < rates_total-1; i++ ){
            TimeToStruct(time[i],data);
            if ( (data.hour == INPHORAINICIAL && data.min==0 && data.sec ==0 )&&  ( data.day_of_week != 0 && data.day_of_week != 6 ) ) {
               string name = "linha" + IntegerToString(contaLinhaV++);
               aLinhas.Add( name );
               ObjectCreate(ChartID(),name,OBJ_VLINE,0, time[i] ,0);
               ObjectSetInteger(ChartID(),name,OBJPROP_COLOR,clrWhite);
               ObjectSetInteger(ChartID(),name,OBJPROP_WIDTH,2);
            }
         }
      }
   
   
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
Rodrigo Malacarne
Moderador
10779
Rodrigo Malacarne  
Pedro Quina:

Bom dia

      Fiz um indicador para sinalizar com uma linha vertical um determinado horário. Ao finalizar o indicador gostaria de excluir as linhas verticais, mas o comando ObjectDelete não está excluindo as linhas :

Olá Pedro Quina,

Para apagar objetos no gráfico, experimente utilizar o seu contador de forma decrescente.

Ou seja, ao invés de 

for(i=0;i<limit;i++)
  {
   // código
  }

tente utilizar

for(i=limit;i>=0;i--)
  {
   // código
  }

Além disso, experimente utilizar a função ChartRedraw após o ObjectDelete.

Abraços,
Malacarne

Pedro Quina
301
Pedro Quina  
Pedro Quina:

Bom dia


      Fiz um indicador para sinalizar com uma linha vertical um determinado horário. Ao finalizar o indicador gostaria de excluir as linhas verticais, mas o comando ObjectDelete não está excluindo as linhas :



Bom dia


Bastou incluir ChartRedraw() ao final do  OnDeInit().


Obrigado

Japa Trader Br
172
Japa Trader Br  
Pedro Quina:


Bom dia


Bastou incluir ChartRedraw() ao final do  OnDeInit().


Obrigado

Olá Pedro, 
Qual seria a finalidade, uso desse recurso? 

Exemplo: avisar que está próximo de um certo horário? 

Abs.
Rodrigo Malacarne
Moderador
10779
Rodrigo Malacarne  
Japa Trader Br:
Olá Pedro, 
Qual seria a finalidade, uso desse recurso? 

Exemplo: avisar que está próximo de um certo horário? 

Abs.

Olá Japa Trader Br,

A função ChartRedraw() apenas re-imprime a tela, para que todos os objetos gráficos na mesma sejam atualizados.

Referência: https://www.mql5.com/pt/docs/chart_operations/chartredraw

Abraços,
Malacarne

Documentação sobre MQL5: Operações de Gráficos / ChartRedraw
Documentação sobre MQL5: Operações de Gráficos / ChartRedraw
  • www.mql5.com
Operações de Gráficos / ChartRedraw - Referência sobre algorítimo/automatização de negociação na linguagem para MetaTrader 5
Para adicionar comentários, por favor Conecte-se ou registrar