Perguntas de Iniciantes MQL4 MT4 MetaTrader 4 - página 172

 

Olá.

Por favor, informe como fazer isso corretamente.

Existe uma coleção global de objetos:

CArrayObj array;

Há uma classe adicional onde são feitos muitos cálculos e isto inclui a criação de objetos e a adição dos mesmos à coleção:

class CCheck : public CArrayObj
  {
  }
bool CCheck::SomeMethod(void)
  {
   CSample *sample_object=new CSample();
   array.Add(sample_object);
  }

Este objeto adicional da classe CCheck que eu crio regularmente em loop. Mas não posso destruí-lo, porque preciso de objetos CSample na coleção de array. Se eu destruir o CCheck, eu também perco os objetos_de_amostra na matriz.

Agora eu empurro esses objetos de CCheck para outro conjunto de objetos de lixo, que eu limpo quando não preciso mais dos objetos correspondentes no conjunto. Mas eu saio do erro de memória porque tenho que manter muitos objetos pesados de CCheck na matriz. Mas eu não preciso de objetos inteiros, só preciso criar nele objetos de amostra CSample. Você poderia me dizer como fazer isso corretamente, para que eu possa salvar apenas um objeto CSample e excluir um CCheck. Eu não consigo entender.

O código é assim:

CArrayObj array;
CArrayObj gargage_array;

void OnTick()
  {
   for(int i=0;i<total;i++)
     {
      CCheck *check_obj=new CCheck();
      check_obj.Check();
      garbage_array.Add(check_obj);
     }
   if(..)
     {
      array.Clear();
      garbage_array.Clear();
     }
  }

class CCheck : public CArrayObj
  {
   public:
   void         Check(void);
   protected:
   bool         SomeMethod(void);
  };
void CCheck::Check(void)
  {
   ...
   SomeMethod();
  }
bool CCheck::SomeMethod(void)
  {
   CSample *sample_object=new CSample();
   array.Add(sample_object);
  }

class CSample : public CObject
  {
  };
 

A solução tem estado em algum lugar em um fórum, mas não consigo encontrar a resposta.

Quem encontrou um "antídoto" contra isto:

Painel padrão

O código é padrão:

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {   
//--- create application dialog
      if(!ExtDialog.Create(0,"For Example ",0,40,40,760,400))
      //return(INIT_FAILED);
      return(false);            // исключительно для того, чтобы продемонстрировать наложение "панелей"
//---
//--- run application
   ExtDialog.Run();
//--- succeed
//-----
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- destroy dialog
   ExtDialog.Destroy(reason);
//---
  }
//+------------------------------------------------------------------+
//| Expert chart event function                                      |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,         // event ID  
                  const long& lparam,   // event parameter of the long type
                  const double& dparam, // event parameter of the double type
                  const string& sparam) // event parameter of the string type
  {
   ExtDialog.ChartEvent(id,lparam,dparam,sparam);
   ChartRedraw();
  }

A essência: O Expert Advisor trava ao mudar de um período de tempo para outro. No mt5 não existe tal problema.

Existe uma solução? Ou é melhor esquecer os Painéis em mt4 :)

 
Vjacheslav Lapaev:

A solução já estava em algum lugar no fórum, mas não consigo encontrar a resposta.

Quem encontrou "antídoto" contra isto:


O código é padrão:

A essência: O Expert Advisor cai quando eu mudo de um tempo para outro. No mt5 não há tal problema.

Existe uma solução? Ou é melhor esquecer os Painéis em mt4 :)

Talvez alguém possa usá-lo. Resumindo, havia um Especialista, salvo como um Indicador, tudo funciona. Refiro-me ao código para o Painel.

 

Boa tarde!

Pensei que era possível apenas imprimir uma matriz, mas não consigo lembrar e não consigo encontrar como fazer isso. Como?

 
Nauris Zukas:

Boa tarde!

Pensei que era possível apenas imprimir uma matriz, mas não consigo lembrar e não consigo encontrar como fazer isso. Como?

ArrayPrint
 
Vladislav Andruschenko:
ArrayPrint

Ah, foi na MQL5, obrigado claramente!

 

Eu não entendo o que você precisa fazer para consertá-lo:

4030 é "gráfico não responde".

Ontem funcionou :( A única diferença é que o MT5 está sendo otimizado em paralelo (também usa temporizador), mas há recursos gratuitos. A tabela com este consultor especializado é "limpa", nada está anexado a ela.

 
Igor Zakharov:

A única diferença é que o MT5 é otimizado em paralelo (ele também usa temporizador), mas há recursos livres. A tabela com este consultor especializado é "limpa", nada está anexado a ela.

Eu parei de otimizar em 5 e funciona. Não deveria haver nenhuma conexão?

 
Aqui estava minha pergunta sobre o Unicode. Por que foi apagado?
 
secret:
Minha pergunta sobre o Unicode estava aqui. Por que foi excluído?

Deixe-me dar-lhe um pequeno histórico:

Um pouco menos de expressão nas perguntas e elas não serão apagadas. É simples: fazer uma pergunta não se trata de descarregar sua negatividade nos outros. Você está em uma comunidade.
Respeite o lugar onde você faz suas perguntas e espere obter uma resposta, não uma reação do moderador.