Erros, bugs, perguntas - página 591

 
alexvd:

Vamos ao servicedesk.

Por favor, esclareça como foram exactamente desconectados os serviços? Suprimiu (congelou) os serviços? Por favor, anexar os registos dos agentes problemáticos.

As definições de proxy nos seus registos são um pouco estranhas. Escreveu as definições de proxy nas suas configurações de agente? Anexe por favor o common.ini do seu gestor.

Acontece que olhei para os registos de ontem.

Tudo está bem.

 
TheXpert:

Próximo código:

Saídas:

2011.12.05 22:01:28 RectLabel (EURUSD,H1) pos = {12, 176314750}
2011.12.05 22:01:28 RectLabel (EURUSD,H1) outro = {123, 456}

Portanto, a lista de inicialização não funcionou, há lixo na estrutura. Isto é ou não um insecto?

É um bug do compilador - não gerou um erro afirmando que a estrutura não pode ser inicializada dessa forma (sem o construtor de cópias). Fixo. Obrigado pelo correio.
 
Não consigo compreender a desinicialização. Porquê a mensagem "Expert Advisor descarregado do par ..." ocorre duas vezes?
//+------------------------------------------------------------------+
//|                                                   testDeinit.mq5 |
//|                        Copyright 2011, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2011, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"



//+------------------------------------------------------------------+
class CTest_Expert
  {

public:
                     CTest_Expert();
                    ~CTest_Expert() { Deinit(); }
                   
   void              Processing();
   void              Deinit();
   bool              StartTimer(int nCounSeconds);
   void              StopTimer();
   string   Exp_Symbol;
  };

   CTest_Expert arSymbols[];

//+------------------------------------------------------------------+
//| Конструктор                                                      |
//+------------------------------------------------------------------+
CTest_Expert::CTest_Expert()
  {

  }
//+------------------------------------------------------------------+
//| Функция удаления динамических объектов                           |
//+------------------------------------------------------------------+
void CTest_Expert::Deinit()
  {
  
   Print("Эксперт выгружен с пары "+Exp_Symbol);
   Comment("");

  }
//+------------------------------------------------------------------+
//|Инициализация таймера                                             |
//+------------------------------------------------------------------+
bool CTest_Expert::StartTimer(int nCountSeconds)
  {
   return(EventSetTimer(nCountSeconds));
  }
//+------------------------------------------------------------------+
//|Уничтожение таймера                                               |
//+------------------------------------------------------------------+

void CTest_Expert::StopTimer()
  {
      EventKillTimer();
  }

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   ArrayResize(arSymbols, 5);
   arSymbols[0].Exp_Symbol="0";
   arSymbols[1].Exp_Symbol="1";
   arSymbols[2].Exp_Symbol="2";
   arSymbols[3].Exp_Symbol="3";
   arSymbols[4].Exp_Symbol="4";
  
   return(0);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
      int nSize=ArraySize(arSymbols);
      Print("nSize = " + IntegerToString(nSize));
      for(int i=0;i<nSize;i++)
        {
         Print("-------"+IntegerToString(i)+"--------");
         arSymbols[i].Deinit();
         Print("---------------");
        }
  
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
  
  }
//+------------------------------------------------------------------+

Resultado

2011.12.06 16:59:52 testDeinit (EURUSD,M5) 14:00:00
2011.12.06 16:59:52 testDeinit (EURUSD,M5) 14:02:00 PM testDeinit (EURUSD,M5) E.T.A. foi descarregado do par 3
2011.12.06 16:59:52 testDeinit (EURUSD,M5) Transferido do par 2
2011.12.06 16:59:52 testDeinit (EURUSD,M5) Transferido do par 1
2011.12.06 16:59:52 testDeinit (EURUSD,M5) Ekspert descarregado do par 0
2011.12.06 16:59:52 testDeinit (EURUSD,M5) ---------------
2011.12.06 16:59:52 testDeinit (EURUSD,M5) 14
2011.12.06 16:59:52 testDeinit (EURUSD,M5) ------- 4--------
2011.12.06 16:59:52 testDeinit (EURUSD,M5) ---------------
2011.12.06 16:59:51 testDeinit (EURUSD,M5) O perito é descarregado do par 3
2011.12.06 16:59:51 testDeinit (EURUSD,M5) ------- 3--------
2011.12.06 16:59:51 testDeinit (EURUSD,M5) ---------------
2011.12.06 16:59:51 testDeinit (EURUSD,M5) O perito foi descarregado do par 2
2011.12.06 16:59:51 testDeinit (EURUSD,M5) ------- 2--------
2011.12.06 16:59:51 testDeinit (EURUSD,M5) ---------------
2011.12.06 16:59:51 testDeinit (EURUSD,M5) O perito é descarregado do par 1
2011.12.06 16:59:51 testDeinit (EURUSD,M5) ------- 1--------
2011.12.06 16:59:51 testDeinit (EURUSD,M5) ---------------
2011.12.06 16:59:51 testDeinit (EURUSD,M5) O perito é descarregado do par 0
2011.12.06 16:59:51 testDeinit (EURUSD,M5) ------- 0--------
2011.12.06 16:59:51 testDeinit (EURUSD,M5) nSize = 5

 
Konstantin83:
Não consigo compreender a desinicialização. Porque é que a mensagem "Perito descarregado do par ..." acontece duas vezes?
                    ~CTest_Expert() { Deinit(); }

   CTest_Expert arSymbols[];

//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
      int nSize=ArraySize(arSymbols);
      Print("nSize = " + IntegerToString(nSize));
      for(int i=0;i<nSize;i++)
        {
         Print("-------"+IntegerToString(i)+"--------");
         arSymbols[i].Deinit();
         Print("---------------");
        }
  
  }

Primeira chamada da OnDeinit. Segunda chamada do destruidor
 
mql5:
Isto é um bug no compilador - não gerou um erro dizendo que uma estrutura não pode ser inicializada desta forma (sem o construtor de cópias). Fixo. Obrigado pelo correio.

Uh, não. Mais detalhes vieram aqui acima.

Em Help diz que estruturas simples podem ser copiadas como variáveis de tipos simples:

{
   Pos pos = {100, 100};
   Pos pos1 = pos; // копи конструктор
   pos = pos1; // копи оператор
}

Então porque não pode ser feito na lista de inicialização? Não quero definir explicitamente os construtores, de modo a não perder o método de inicialização utilizado acima.

Não crítico em princípio, só quero ouvir o comentário final.

Документация по MQL5: Основы языка / Типы данных / Структуры и классы
Документация по MQL5: Основы языка / Типы данных / Структуры и классы
  • www.mql5.com
Основы языка / Типы данных / Структуры и классы - Документация по MQL5
 

Corro o terminal com 12 janelas abertas, ele come 325 MB de RAM.

Executando o Expert Advisor multi-currency, o terminal come 990 Mb de memória. O Expert Advisor vê barras de 5 minutos durante as últimas 48 horas + utiliza o indicador "fractal". Se eu correr apenas para negociar com um símbolo, são necessários 400 Mb. Este consumo de memória é normal quando se trabalha com 12 símbolos?

 
Konstantin83:
Estou a gerir um Expert Advisor multi-currency, o terminal come 990 Mb de RAM. O perito olha através de barras de 5 minutos durante as últimas 48 horas + utiliza o indicador "fractal". Se eu correr apenas para negociar com um símbolo, são necessários 400 Mb. Este consumo de memória é normal quando se trabalha com 12 símbolos?
Veja o artigo Princípios de Recálculo Económico de Indicadores
 
Esqueci-me de assinalar que o fractal é um indicador padrão + todos os cálculos têm lugar de cinco em cinco minutos
 
Konstantin83:
Esqueci-me de mencionar que o fractal é um indicador padrão + todos os cálculos têm lugar de cinco em cinco minutos

Como é que os criadores sabem o que estão a fazer e como o estão a fazer?
Tente formular e explicar claramente a raiz do problema no seu código.
Descrever o problema de uma forma técnica.

 
sergeev:

Como podem os criadores saber o que estão a fazer e como o estão a fazer?
Tente formular claramente e destacar a essência do problema no seu código. em que condições o consumo começa a crescer, fazer e mostrar a impressão do registo.
Descrever o problema de uma forma técnica.

Nunca tinha prestado atenção ao tamanho da memória porque não deve ter sido muito. Ontem e hoje notei que o sistema está atrasado, o gestor de tarefas aberto e lá o terminal comeu 900MB. Começou a procurar. Ao iniciar 12 janelas abertas - 325 MB, coloquei-a na janela do Expert Advisor - 990 MB, por isso pensei que estava a comer o Expert Advisor up. Defini "Gráficos - barras máximas por janela" para ilimitado. Depois de o ter mudado para 50 000 , lancei o terminal e ele pesa 110, depois mudei-o novamente para ilimitado. Agora o meu Expert Advisor é 208 MB, ou seja, está OK.
Razão: