Errori, bug, domande - pagina 591

 
alexvd:

Andiamo da Servicedesk.

Per favore, chiarisci come esattamente sono stati scollegati i servizi? Avete cancellato (congelato) i servizi? Si prega di allegare i log degli agenti problematici.

Le impostazioni proxy nei tuoi log sono un po' strane. Hai scritto le impostazioni del proxy nelle configurazioni del tuo agente? Allega il common.ini del tuo gestore.

A quanto pare ho guardato i registri di ieri...

Tutto è a posto.

 
TheXpert:

Prossimo codice:

Uscite:

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

Quindi, la lista di inizializzazione non ha funzionato, c'è della spazzatura nella struttura. È un bug o no?

È un bug del compilatore - non ha generato un errore che dice che la struttura non può essere inizializzata in quel modo (senza costruttore di copia). Fisso. Grazie per il post.
 
Non riesco a capire la deinizializzazione. Perché il messaggio "Expert Advisor scaricato dalla coppia ..." si verifica due volte?
//+------------------------------------------------------------------+
//|                                                   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()
  {
//---
  
  }
//+------------------------------------------------------------------+

Risultato

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. è stato scaricato dalla coppia 3
2011.12.06 16:59:52 testDeinit (EURUSD,M5) Scaricato dalla coppia 2
2011.12.06 16:59:52 testDeinit (EURUSD,M5) Scaricato dalla coppia 1
2011.12.06 16:59:52 testDeinit (EURUSD,M5) Ekspert scaricato dalla coppia 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) L'esperto viene scaricato dalla coppia 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) L'esperto è stato scaricato dalla coppia 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) L'esperto viene scaricato dalla coppia 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) L'esperto viene scaricato dalla coppia 0
2011.12.06 16:59:51 testDeinit (EURUSD,M5) -------0--------
2011.12.06 16:59:51 testDeinit (EURUSD,M5) nSize = 5

 
Konstantin83:
Non riesco a capire la deinizializzazione. Perché il messaggio "Esperto scaricato dalla coppia ..." accade due volte?
                    ~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("---------------");
        }
  
  }

Prima chiamata da OnDeinit. Seconda chiamata dal distruttore
 
mql5:
Questo è un bug del compilatore - non ha generato un errore che dice che una struttura non può essere inizializzata in questo modo (senza costruttore di copia). Fisso. Grazie per il post.

No. Altri dettagli sono venuti fuori qui.

In Help dice che le strutture semplici possono essere copiate come variabili di tipi semplici:

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

Allora perché non può essere fatto nella lista di inizializzazione? Non voglio definire esplicitamente i costruttori, per non perdere il metodo di inizializzazione usato sopra.

Non critico in linea di principio, voglio solo sentire il commento finale.

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

Eseguo il terminale con 12 finestre aperte, mangia 325 MB di RAM.

Eseguendo il multi-currency Expert Advisor, il terminale mangia 990 Mb di memoria. L'Expert Advisor visualizza le barre a 5 minuti per le ultime 48 ore + utilizza l'indicatore "fractal". Se corro solo per fare trading su un simbolo, ci vogliono 400 Mb. Questo consumo di memoria è normale quando si lavora con 12 simboli?

 
Konstantin83:
Sto eseguendo un Expert Advisor multivaluta, il terminale mangia 990 Mb di RAM. L'esperto guarda attraverso le barre a 5 minuti per le ultime 48 ore + usa l'indicatore "fractal". Se corro solo per fare trading su un simbolo, ci vogliono 400 Mb. Questo consumo di memoria è normale quando si lavora con 12 simboli?
Guarda l'articolo Principi di ricalcolo economico degli indicatori
 
Ho dimenticato di sottolineare che il frattale è un indicatore standard + tutti i calcoli avvengono ogni cinque minuti
 
Konstantin83:
Ho dimenticato di dire che il frattale è un indicatore standard + tutti i calcoli avvengono ogni cinque minuti

Come fanno gli sviluppatori a sapere cosa state facendo e come lo state facendo?
Cercate di formulare e spiegare chiaramente la radice del problema nel vostro codice.
Descrivere il problema in modo tecnico.

 
sergeev:

Come possono gli sviluppatori sapere cosa state facendo e come lo state facendo?
Cercate di formulare chiaramente ed evidenziare l'essenza del problema nel vostro codice. a quali condizioni il consumo comincia a crescere, fate e mostrate la stampa del log.
Descrivere il problema in modo tecnico.

Non ho prestato attenzione alla dimensione della memoria prima, perché non deve essere stata molta. Ieri e oggi ho notato che il sistema è in ritardo, ho aperto il task manager e lì il terminale si è mangiato 900MB. Ha iniziato a cercare. All'avvio 12 finestre aperte - 325 MB, l'ho messo sulla finestra di Expert Advisor - 990 MB, così ho pensato che stesse mangiando Expert Advisor. Ho impostato "Charts - max bars per window" su unlimited. Dopo averlo cambiato a 50 000 , ho lanciato il terminale e pesa 110, poi l'ho cambiato di nuovo a illimitato. Ora il mio Expert Advisor è di 208 MB, cioè è OK.
Motivazione: