inizializzazione globale fallita!!!!!!!

 

Se qualcuno potesse aiutarmi...Ho un expert advisor per 4 coppie di grafici, e per l'esecuzione del 5°, dopo aver caricato con successo, ho un'inizializzazione globale fallita, e poi rimossa...

Apprezzerei almeno una guida su cosa cercare...

Grazie...

 
HELLAS:

Se qualcuno potesse aiutarmi...Ho un expert advisor per 4 coppie di grafici, e per l'esecuzione del 5°, dopo aver caricato con successo, ho un'inizializzazione globale fallita, e poi rimossa...

Apprezzerei almeno una guida su cosa cercare...

Grazie...

Sembra che tu abbia un problema durante l'inizializzazione. Controlla il tuo codice. Puoi postare il codice rilevante se hai bisogno di aiuto.
 
angevoyageur:
Sembra che tu abbia un problema durante l'inizializzazione. Controlla il tuo codice. Puoi postare il codice rilevante se hai bisogno di aiuto.


Grazie per avermi risposto.

Il fatto è che il mio codice funziona bene per 4 grafici (coppie), ma quando cerco di eseguirlo per un altro succede questo.

E il codice è un po' enorme, quindi non so se ti aiuterà...

 
Potrebbe non essere il codice. Il mio terminale si è bloccato mentre trascinavo le finestre del terminale, si è parzialmente ripreso ma ha detto che l'inizializzazione globale non è riuscita. Ho dovuto riavviare il terminale. Non ho mai visto questo errore prima della build 625 e c'è stato più di un rapporto di questo durante quest'ultima settimana o giù di lì.
 
SDC:
Potrebbe non essere il codice. Il mio terminale si è bloccato mentre trascinavo le finestre del terminale, si è parzialmente ripreso ma ha detto che l'inizializzazione globale non è riuscita. Ho dovuto riavviare il terminale. Non ho mai visto questo errore prima della build 625 e c'è stato più di un rapporto di questo durante quest'ultima settimana o giù di lì.
Quando hai riavviato il terminale tutto era a posto? Perché ho riavviato alcune volte, ma ho avuto gli stessi risultati. Il fatto è che non riesco a trovare alcuna documentazione specifica che dia qualche aiuto sull'argomento...
 
Sì, era tutto a posto quando l'ho riavviato.
 

Gente, so che questo thread ha circa un mese, ma penso che questo sia un problema di MetaTrader piuttosto che un problema di codice. Mi è successo in modo casuale su un indicatore su cui sto lavorando. A volte succede se guardo o cambio le proprietà dell'indicatore, a volte succede se chiudo e riavvio il terminale e a volte succede spontaneamente. Si tratta sicuramente di una sorta di problema di inizializzazione. Il motivo per cui sono sicuro di questo è che ho una serie di pulsanti che creo per la visualizzazione delle MA su time frame diversi da quello su cui sei attualmente. In tutti i casi, quando fallisce i pulsanti TF sono ancora sul grafico ma l'indicatore è stato rimosso. Naturalmente, i pulsanti non fanno più nulla. Per rimettere le cose a posto devo cancellare manualmente i pulsanti e rimettere l'indicatore sul grafico. Funziona bene per un po' e poi BOOM! È di nuovo morto. Non c'è un motivo o una ragione del perché. Non credo che il problema sia il nostro codice. Penso che sia qualcosa di incasinato con MT4. A proposito, sto eseguendo la v625. Se mi viene in mente qualcosa per aggirare questo problema, lo posterò.

Prof

 
Mostraci il codice. Solo per essere sicuri che il tuo codice non sia il colpevole. Altrimenti MetaQuotes riderà di te.
 

Ho avuto anche questa "inizializzazione globale fallita".

È successo quando ho cambiato il time-frame del grafico

Non riesco a vedere alcuna ragione per questo e non sono stato in grado di replicarlo.

La cosa strana è che gli ultimi 2 blocchi di codice in init creano oggetti e questi sono stati creati sul grafico.

Poiché non è stato chiamato deinit, non sono stati cancellati.

int OnInit()
  {
//--- indicator buffers mapping
      IndicatorBuffers(4);

      //---- drawing settings
      SetIndexArrow(0,250);
      SetIndexArrow(1,250);

      SetIndexStyle(0,DRAW_NONE);
      SetIndexDrawBegin(0,i-1);
      SetIndexBuffer(0,CTFresistancetBuffer);
      SetIndexLabel(0,"Resistance");

      SetIndexStyle(1,DRAW_NONE);
      SetIndexDrawBegin(1,i-1);
      SetIndexBuffer(1,CTFsupportBuffer);
      SetIndexLabel(1,"Support");

      SetIndexBuffer(2,HTFresistancetBuffer,INDICATOR_CALCULATIONS);
      SetIndexBuffer(3,HTFsupportBuffer,INDICATOR_CALCULATIONS);

      switch(S_R_TimeFrame)
        {
         case M5:
            SRPeriod=PERIOD_M5;
            break;
         case M15:
            SRPeriod=PERIOD_M15;
            break;
         case M30:
            SRPeriod=PERIOD_M30;
            break;
         case H1:
            SRPeriod=PERIOD_H1;
            break;
         case H4:
            SRPeriod=PERIOD_H4;
            break;
         case Daily:
            SRPeriod=PERIOD_D1;
            break;
         case Weekly:
            SRPeriod=PERIOD_W1;
            break;
         case Monthly:
            SRPeriod=PERIOD_MN1;
            break;
         case Current_Chart:
            SRPeriod=PERIOD_CURRENT;
            break;
        }
        
      if(Digits==3 || Digits==5)
         NewPip=Point*10;
      else
         NewPip=Point;
      
      string obj_name = "TDR_ARROW" ;
      ObjectCreate(obj_name, OBJ_LABEL, 0, 0, 0);
      ObjectSet(obj_name, OBJPROP_CORNER, 1);
      ObjectSet(obj_name, OBJPROP_XDISTANCE,  30);
      ObjectSet(obj_name, OBJPROP_YDISTANCE,  30);
      ObjectSetText(obj_name, CharToStr(243), 30, "Wingdings", clrBlue);
      
      obj_name = "TDR_LINE" ;
      ObjectCreate(obj_name, OBJ_TREND, 0, 0, 0);
      ObjectSetInteger(0,obj_name,OBJPROP_WIDTH,LineWidth+1);
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                         |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {

   for(i=ObjectsTotal()-1;i>=0;i--)
     {
      string ObName=ObjectName(i);
      if(StringFind(ObName,"TDR",0)!=-1)
         ObjectDelete(ObName);
     }

   return;
  }
//+------------------------------------------------------------------+
 

Il mio problema sembra essere stato usare init() e deinit() invece dei nuovi OnInit() e OnDeinit(). Le cose sembrano funzionare dopo che sono passato alle nuove chiamate. È meglio che MetaQuotes non stia ridendo di me. Mi sembra di aver letto da qualche parte nella voluminosa lista dei cambiamenti che le vecchie chiamate erano ancora compatibili con MQL4. In effetti, ho un altro indicatore che le usa ancora e crea un certo numero di oggetti etichetta senza intoppi. Probabilmente lo cambierò solo per andare sul sicuro, dato che ho intenzione di mettere in vendita entrambi gli indicatori quando sarò pronto.

Comunque, il problema sembra essere che deinit() non veniva chiamato quando l'indicatore si deinizializzava, quindi gli oggetti non venivano cancellati come avrebbero dovuto. L'inizializzazione è fallita perché gli oggetti esistevano ancora. Stavo facendo il controllo degli errori su tutto, ma il fallimento della creazione dell'oggetto non veniva segnalato. Apparentemente, è saltato e mi ha dato l'errore di MQL prima di colpire il mio codice di gestione degli errori.

GumRai, potresti provare a usare SubStr invece di StringFind. Non dovrebbe avere importanza, ma ho scoperto che MQL può essere strano a volte. Sei sicuro che OnDeinit() non sia stato chiamato? La cosa che mi ha fatto capire il mio problema è stato mettere una dichiarazione Alert nel mio metodo deinit() e notare che non è mai stato chiamato. Potresti anche provare ad avvolgere il tuo codice di cancellazione con codice di gestione degli errori per vedere cosa potrebbe fare.

Prof

 
ProfessorMetal:

Il mio problema sembra essere stato usare init() e deinit() invece dei nuovi OnInit() e OnDeinit(). Le cose sembrano funzionare dopo che sono passato alle nuove chiamate. È meglio che MetaQuotes non stia ridendo di me. Mi sembra di aver letto da qualche parte nella voluminosa lista dei cambiamenti che le vecchie chiamate erano ancora compatibili con MQL4. In effetti, ho un altro indicatore che le usa ancora e crea un certo numero di oggetti etichetta senza intoppi. Probabilmente lo cambierò solo per andare sul sicuro, dato che ho intenzione di mettere in vendita entrambi gli indicatori quando sarò pronto.

Comunque, il problema sembra essere stato che deinit() non veniva chiamato quando l'indicatore si deinizializzava, quindi gli oggetti non venivano cancellati come avrebbero dovuto. L'inizializzazione è fallita perché gli oggetti esistevano ancora. Stavo facendo il controllo degli errori su tutto, ma il fallimento della creazione dell'oggetto non veniva segnalato. Apparentemente, è saltato e mi ha dato l'errore di MQL prima di colpire il mio codice di gestione degli errori.

GumRai, potresti provare a usare SubStr invece di StringFind. Non dovrebbe avere importanza, ma ho scoperto che MQL può essere strano a volte. Sei sicuro che OnDeinit() non sia stato chiamato? La cosa che mi ha fatto capire il mio problema è stato mettere una dichiarazione Alert nel mio metodo deinit() e notare che non è mai stato chiamato. Potresti anche provare ad avvolgere il tuo codice di cancellazione con codice di gestione degli errori per vedere cosa potrebbe fare.

Prof

Puoi postare un codice di esempio per riprodurre il tuo problema?
Motivazione: