Erros, bugs, perguntas - página 2488

 

Posso estar errado, claro, mas parece que há 2 meses o meu modelo estava a funcionar, e agora quando chamo o destruidor do CList, os objectos não destruídos permanecem na memória, código:

#property strict
#include <Arrays\List.mqh>
//+------------------------------------------------------------------+
class CData : public CObject
  {
public:
   int               x;
   double            y;
                     CData(){};
                     CData(int ival,double dval){x=ival;y=dval;}
  };
//+------------------------------------------------------------------+
template<typename T>class CDataBase
  {
private:
   CList            *mlist;
   T                *Tptr;
public:
   void CDataBase()           { mlist=new CList;                                    }
   void ~CDataBase(void)      { delete mlist;                                       }
   int ArraySize(void)        { return(mlist.Total());                              }
   T *operator[](int index)   { return(mlist.GetNodeAtIndex(index));                }
   void  AddValue (T &value)  { Tptr = new T; Tptr  = value; mlist.Add(Tptr);       }
   string TypeName()          { return(typename(T));                                }
  };
//+------------------------------------------------------------------+
void OnStart()
  {
   CDataBase<CData>*data=new CDataBase<CData>;
   int i;
   for(i=0; i<5; i++)
     {
      data.AddValue(new CData(i,i*2.0));
     }

   for(i=0; i<data.ArraySize(); i++)
     {
      Print(i," : ",data[i].x," , ",data[i].y);
     }
   Print(data.TypeName());
   delete data;
  }
//+------------------------------------------------------------------+

2019.06.21 07:19:45.926 tstlist (EURUSD,H1) 0 : 0 , 0.0

2019.06.21 07:19:45.926 tstlist (EURUSD,H1) 1 : 1 , 2.0

2019.06.21 07:19:45.926 tstlist (EURUSD,H1) 2 : 2 , 4.0

2019.06.21 07:19:45.926 tstlist (EURUSD,H1) 3 : 3 , 6.0

2019.06.21 07:19:45.926 tstlist (EURUSD,H1) 4 : 4 , 8.0

2019.06.21 07:19:45.926 tstlist (EURUSD,H1) CData

2019.06.21 07:19:45.926 tstlist (EURUSD,H1) 5 objectos não eliminados

2019.06.21 07:19:45.926 tstlist (EURUSD,H1) 5 objectos do tipo CData à esquerda

2019.06.21 07:19:45.926 tstlist (EURUSD,H1) 280 bytes de memória vazada

MT5 construir 2085
 
Igor Makanu:

Posso estar errado, claro, mas parece que há 2 meses atrás o meu modelo estava a funcionar, mas agora quando chamo o destruidor do CList, os objectos que não foram destruídos permanecem na memória, o código:

#property strict
#include <Arrays\List.mqh>
//+------------------------------------------------------------------+
class CData : public CObject
  {
public:
   int               x;
   double            y;
                     CData(){};
                     CData(int ival,double dval){x=ival;y=dval;}
  };
//+------------------------------------------------------------------+
template<typename T>class CDataBase
  {
private:
   CList            *mlist;
   T                Tptr;
public:
   void CDataBase()           { mlist=new CList;                                    }
   void ~CDataBase(void)      { delete mlist;                                       }
   int ArraySize(void)        { return(mlist.Total());                              }
   T operator[](int index)   { return(mlist.GetNodeAtIndex(index));                }
   void  AddValue (T &value)  { Tptr  = value; mlist.Add(Tptr);      }
   string TypeName()          { return(typename(T));                                }
  };
//+------------------------------------------------------------------+
void OnStart()
  {
   CDataBase<CData*>* data=new CDataBase<CData*>;
   int i;
   for(i=0; i<5; i++)
     {
      CData* Tmp = new CData(i,i*2.0);
      data.AddValue(Tmp);
     }

   for(i=0; i<data.ArraySize(); i++)
     {
      Print(i," : ",data[i].x," , ",data[i].y);
     }
   Print(data.TypeName());
   delete data;
  }
//+------------------------------------------------------------------+
 
fxsaber:

Sim, provavelmente tem razão, o seu exemplo funciona correctamente, algures misturei os exemplos de teste nas minhas fontes

Obrigado!

 
Вероника Сорокина:
Boa tarde. Aqui está a situação. O meu mql4 Expert Advisor/Script/indicator/o que quer que tenha escrito não está anexado a uma janela de gráficos, quero que fique anexado a um programa... tipo, vou escrever uma coisa útil e não quero que fique anexado a novos gráficos abertos a toda a hora. Algo como um serviço (do MT5), mas precisa dele no MT4.

Serviços de utilização

 

É possível adicionar o código actual de ME aos Favoritos do Terminal?



Na verdade, gostaria de ter um separador separado "Debugging" onde eu poderia adicionar código que está actualmente a ser escrito e testado.

Agora acontece que para um trabalho conveniente é necessário ter um Terminal separado, onde tudo o que não diz respeito aos projectos actuais está ausente.

Então a depuração é muito mais rápida, porque não há confusão com o resto do código no próprio Terminal.

 

Caros programadores. Por favor, esclareça, a repartição automática dos amortecedores indicadores é normal? Por re-partição quero dizer o seguinte: barras máximas na janela, por exemplo 5000. Tamanho do amortecedor + taxas_total são redefinidos para 5000 quando atingem 6439. O mesmo acontece quando o máximo de barras na janela = 10000. A reinicialização ocorre em 11439.

Devido a isso, os indicadores podem falhar e mostrar dados incorrectos.

Construir 2085. Tenho notado tal comportamento desde cerca de 2000.

 
Alexey Kozitsyn:

Caros programadores. Por favor, esclareça, a repartição automática dos amortecedores indicadores é normal? Por re-partição quero dizer o seguinte: barras máximas na janela, por exemplo 5000. Tamanho do amortecedor + taxas_total são redefinidos para 5000 quando atingem 6439. O mesmo acontece quando o máximo de barras na janela = 10000. A reinicialização ocorre em 11439.

Devido a isso, os indicadores podem falhar e mostrar dados incorrectos.

Construir 2085. Tenho notado este comportamento desde cerca de 2000.

Este comportamento era originalmente em cinco.

Dar um exemplo de uma falha de indicador devido à redistribuição de buffer

 
Slava:

Este foi o comportamento em Cinco desde o início.

Dê um exemplo de falha do indicador por causa da redistribuição dos amortecedores

Então está a confirmar que quando há uma acumulação de 1439 barras acima da norma, o terminal DEVE repor o tamanho do buffer para o valor das barras máximas na janela? Em caso afirmativo, isto deve ser mencionado na documentação. Uma vez que se trata de um comportamento imprevisto.

Em relação ao exemplo. Refiro-me a desenvolvimentos personalizados que funcionam com números de barras. Isto é, memorizei a barra número 6438 e após 2 minutos (M1 TF) os amortecedores foram redistribuídos e saí da matriz. Agora é claro que este é um comportamento "padrão". É favor actualizar a documentação.

 

Erro durante a execução:

class A { public:
        virtual void f( int = 0 ) { Print( 1 ); }
};
class B : public A { public:
        virtual void f( int     ) { Print( 2 ); }
};
void OnStart()
{
        B b;
        b.f();
}

Resultado : 1

Esperado: 2 ou (como em C++) - erro de compilação

 
Alexey Kozitsyn:

É favor actualizar a documentação.

Onde é que a documentação precisa de ser actualizada?

O identificador inequívoco de uma barra tem sido sempre o tempo da barra, não o número da barra.

Se alguém chamasse ChartSetSymbolPeriod ao seu gráfico, apanharia facilmente uma mudança no número de barras. Surpreender?

A propósito, há taxas de parâmetros_total no OnCalculate