Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 1007

 
Alexey Viktorov:

Tempo meno tempo diviso per PeriodSeconds()

quindi potrebbe essere la lunghezza sbagliata nella transizione venerdì-lunedì (o se ci sono barre mancanti nella storia)

è meglio leggere il tempo del punto e poi definire le barre

datetime time1=(datetime)ObjectGetInteger(ExtChartID,name,OBJPROP_TIME,0);
datetime time2=(datetime)ObjectGetInteger(ExtChartID,name,OBJPROP_TIME,1);

int bar1=iBarShift(_Symbol,_Period,time1);
int bar2=iBarShift(_Symbol,_Period,time2);
 
Taras Slobodyanik:

quindi potrebbe essere la lunghezza sbagliata nella transizione venerdì-lunedì (o se ci sono barre mancanti nella storia)

è meglio leggere il tempo dei punti e poi identificare le barre

D'accordo. Non ha dato fastidio né a me né al mio cervello. Allora è meglio prendere il numero di barre tra le date.

int  Bars( 
   string           symbol_name,     // имя символа 
   ENUM_TIMEFRAMES  timeframe,       // период 
   datetime         start_time,      // с какой даты 
   datetime         stop_time        // по какую дату 
   );
 
int start()
{
  if(Check()==false)
      return;  
      
  int TotalOrders;
  double NewPrice, NewLots, NewTP, NewSL;
  /*****************************************************************************/
  /* Здесь часть кода, которая работает при каждом новом тике                  */ 
  /*****************************************************************************/
  TotalOrders = CountOfOrders(); 
     double sprd = Ask-Bid;
     int tot = CountOfOrders2();
     double spred = spred/Point*(tot-1);

  if(tot > 1)PercCloseDown();


Questa parte dice errore



Puoi dirmi come avviare il robot?


 
Ivan Butko:

Questa parte scrive un errore

Come faccio a far partire il robot?

Qui si dichiara la variabile e la si divide immediatamente:

double spred = spred/Point*(tot-1); 

L'errore mostra che il compilatore tratta questa variabile (spred) come non dichiarata. Anche questo non va bene, perché (la variabile) non è inizializzata - poiché non èuna variabile globale, potrebbe avere un valore non definito...

Provate a dichiararlo prima e ad assegnargli un valore
 
Yevhenii Levchenko:

Qui viene dichiarata una variabile e immediatamente viene condivisa:

L'errore mostra che il compilatore tratta questa variabile (spred) come non dichiarata. Questo è anche almeno non buono, perché essa (la variabile) non è inizializzata - poiché non è una variabile globale, ci può essere un valore non definito...

Prova a dichiararlo prima e ad assegnargli un valore

Eugene, dal profondo del mio cuore!
E' acceso, grazie.

 

Cosa fare se in MQL5 ...

if(BarsCalculated(handle) == -1)

... è passato circa un minuto e il problema è lo stesso. Perché così tanto tempo?


Errore 4806 - Dati richiesti non trovati ... - ...come faccio a farlo trovare al mio EA?

 
Ivan Butko:
int start()
{
  if(Check()==false)
      return;  
      
  int TotalOrders;
  double NewPrice, NewLots, NewTP, NewSL;
  /*****************************************************************************/
  /* Здесь часть кода, которая работает при каждом новом тике                  */ 
  /*****************************************************************************/
  TotalOrders = CountOfOrders(); 
     double sprd = Ask-Bid;
     int tot = CountOfOrders2();
     double spred = spred/Point*(tot-1);

  if(tot > 1)PercCloseDown();


Questa parte dice errore



Puoi dirmi come avviare il robot?


Linea 61, che linea è?
 

Come posso catturare l'errore "out of memory"?


Cosa potrebbe causare questo messaggio in primo luogo?


Ho scritto un programma di circa 20 mila linee. Ho un sacco di classi, array e strutture diverse.

Circa una volta ogni due o tre giorni appare il messaggio di "memoria esaurita".

Non so come rintracciare quale funzione è responsabile della perdita di memoria.

 
Sergey Likho:

Come posso catturare un errore di memoria esaurita?


Cosa potrebbe causare questo messaggio in primo luogo?


Ho scritto un programma di circa 20 mila linee. Ho un sacco di classi, array e strutture diverse.

Circa una volta ogni due o tre giorni appare il messaggio di "memoria esaurita".

Non so come prenderlo, quale funzione è responsabile della perdita di memoria.

Assicuratevi che ogni nuovo abbia la sua cancellazione

Cioè solo attraverso un'attenta lettura del vostro codice. Per rendere la lettura più facile e divertente, puoi commentare :-)

È anche una buona idea scrivere script di test-case per ogni classe e controllare le perdite all'interno delle classi in questo modo.

 
Maxim Kuznetsov:

assicurarsi che ogni nuovo abbia la propria cancellazione

Cioè solo leggendo attentamente il codice. Per rendere la lettura più facile e divertente, puoi anche commentare :-)

È anche una buona idea scrivere script di test-case per ogni classe e controllare le perdite all'interno delle classi in questo modo.

Nuovo, cancellare non sono utilizzati. Gli elementi della classe sono definiti all'inizio e non li ricreo.

Per lo più lavoro con gli array.


Cosa sono gliscript dei test-case?