Errori, bug, domande - pagina 3137

 
Ciao!
Quando si testa l'EA sulla cronologia per tutti gli strumenti selezionati, il tester dà risultati solo per le coppie di valute, ma per le criptovalute dà "oninit restituisce il codice non zero 1". Cosa posso fare? Chi l'ha sperimentato?
 
lapundra1 #:
Ciao!
Quando si testa l'EA sulla cronologia per tutti gli strumenti selezionati, il tester dà risultati solo per le coppie di valute, ma per le criptovalute dà "oninit restituisce il codice non zero 1". Cosa posso fare? Chi l'aveva?

Commentate la linea 123 e l'errore sparirà. Te lo dico da telepatico :) - perché non c'è codice, quindi solo telepatia, nessun altro modo :)

 

Saluti.

Quando si esegue MT5 nel terminale si verifica un errore:

2022.01.03 15:33:30.108 Virtual Hosting non è riuscito a ottenere la lista degli host virtuali [1001] (tls - create certificate chain engine failed)

2022.01.03 15:34:30.945 Segnale '56334871': impossibile ottenere l'elenco dei segnali


E poi, quando si cerca di connettersi a un repository in MetaEditor:

2022.01.03 15:34:39.668 Storage richiesta elenco progetti fallita con errore 1001

2022.01.03 15:34:46.561 Storage attivazione di MQL5 Storage fallita [1001]


Allo stesso tempo, la connessione ad un altro computer ha funzionato bene, e tutte le modifiche sono state inviate allo Storage.

Nessun problema di rete è stato rilevato sul computer, tutto funziona bene. Nessuna attività "rischiosa" è stata eseguita sul computer negli ultimi mesi, e tutto funziona bene. La costruzione è 3140.

In che direzione devo scavare?


 

Non mi addentrerò nemmeno nei "Segreti di Madrid" e Dio non voglia che mi chieda perché le maniglie degli indicatori iniziano a indicizzare da 10 e non da 0 o da 1. Non mi interessa, posso vivere con questo.

Perché dovrei chiedere, se ci sono due tipi di maniglie indipendenti dello stesso indicatore e cancello la seconda, non solo la seconda MA, ma anche la prima scompare? Cioè, rimuovere una delle maniglie uccide anche l'altra. Ecco il codiceiMA altamente semplificato e raddoppiato dalla Guida:

#property indicator_chart_window
#property indicator_buffers 2
#property indicator_plots   2

#property indicator_label1  "iMA1"
#property indicator_type1   DRAW_LINE
#property indicator_color1  clrRed
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1

#property indicator_label2  "iMA2"
#property indicator_type2   DRAW_LINE
#property indicator_color2  clrBlue
#property indicator_style2  STYLE_SOLID
#property indicator_width2  1

double iMABuffer1[], iMABuffer2[];
int    handle1, handle2;
int    bars_calculated=0;

int OnInit()
  {
   SetIndexBuffer(0,iMABuffer1,INDICATOR_DATA);
   SetIndexBuffer(1,iMABuffer2,INDICATOR_DATA);

   PlotIndexSetInteger(0,PLOT_SHIFT,0);
   PlotIndexSetInteger(1,PLOT_SHIFT,0);

   handle1=iMA(_Symbol,PERIOD_CURRENT,10,0,MODE_SMA,PRICE_CLOSE);
   handle2=iMA(_Symbol,PERIOD_CURRENT,20,0,MODE_SMA,PRICE_CLOSE);

   return(INIT_SUCCEEDED);
  }

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
   int values_to_copy;

   int calculated=BarsCalculated(handle1);
   if(calculated<=0) return(0);

   if(prev_calculated==0 || calculated!=bars_calculated || rates_total>prev_calculated+1)
      if(calculated>rates_total) values_to_copy=rates_total;
      else                       values_to_copy=calculated;
   else
      values_to_copy=(rates_total-prev_calculated)+1;

   if(!FillArrayFromBuffer(iMABuffer1,0,handle1,values_to_copy)) return(0);
   if(!FillArrayFromBuffer(iMABuffer2,0,handle2,values_to_copy)) return(0);

   //if(handle2!=INVALID_HANDLE)
   //   Print(IndicatorRelease(handle2));

   bars_calculated=calculated;

   return(rates_total);
  }

bool FillArrayFromBuffer(double &values[],
                         int shift,
                         int ind_handle,
                         int amount
                         )
  {
   if(CopyBuffer(ind_handle,0,-shift,amount,values)<0)
      return(false);

   return(true);
  }

void OnDeinit(const int reason)
  {
   if(handle1!=INVALID_HANDLE)
      IndicatorRelease(handle1);
   if(handle2!=INVALID_HANDLE)
      IndicatorRelease(handle2);
  }

Se si decommentano le due linee, il risultato è che non viene reso nulla. Previsto: la prima MA (rossa) rimane.

...E tutto quello che volevo fare era pulire la memoria.

 
x572intraday #:

Non mi addentrerò nemmeno nei "Segreti di Madrid" e Dio non voglia che mi chieda perché le maniglie degli indicatori iniziano a indicizzare da 10 e non da 0 o da 1. Non mi interessa, posso vivere con questo.

Perché dovrei chiedere, se ci sono due tipi di maniglie indipendenti dello stesso indicatore e cancello la seconda, non solo la seconda MA, ma anche la prima scompare? Cioè, rimuovere una delle maniglie uccide anche l'altra. Ecco il codiceiMA altamente semplificato e raddoppiato dalla Guida:

Se si decommentano le due linee, il risultato è che non viene reso nulla. Previsto: la prima MA (rossa) rimane.

...E tutto quello che volevo fare era pulire la memoria.

Almeno:

if(handle2!=INVALID_HANDLE && !FillArrayFromBuffer(iMABuffer2,0,handle2,values_to_copy)) return(0);
 
JRandomTrader #:

Come minimo:

Avete controllato? Non ha funzionato per me. E basta cancellarne uno (con la liberazione della memoria) e lasciare visivamente l'altro. E dalla tua logica segue: se il secondo handle esiste e il secondo buffer non è stato riempito, allora esci, e non arriva nemmeno alla mia linea con IndicatorRelease(handle2) (se ho inserito il codice nel posto giusto).

 
   int dim=5;
   int Arr1[5];// OK
   int Arr2[dim];// '[' - invalid index value

O sono completamente fottuto o, se non è un insetto, punzecchiate Aiuto.

 
x572intraday #:

O sono completamente fottuto, o, se non è un bug, mi punzecchiate nell'Aiuto.

La dimensione di un array statico è una costante, non un int.

 
Valeriy Yastremskiy #:

La dimensionalità di un array statico è una costante, non un int.

È possibile definire un vettore in questo modo, ma sono solo doppi.

int n = 5;
vector v(n);
v[0] = 1.2;
 
Aleksey Nikolayev #:

Si può definire un vettore in questo modo, ma si dilettano soltanto.

Ok. Allora è meglio che lo ridimensioni.