Errori, bug, domande - pagina 1234

 
Tapochun:
Poi questa domanda. Se l'indicatore funziona su M15. Si forma una nuova candela. Quando si richiedono i dati per M15 e M30, devono essere disponibili allo stesso tempo?

Sì.

Dopo aver creato un indicatore(includendolo nel normale ciclo di elaborazione) ed essere entrati nel normale ciclo di elaborazione dei tick (ontik), i dati saranno disponibili con un'alta probabilità. Ma non dimenticate che non c'è alcuna garanzia a causa della possibile storia di download per altri simboli.

Cioè, controllare sempre i risultati delle richieste di dati degli indicatori. Se richiedete i dati nell'ontika e non sono disponibili, allora uscite immediatamente per controllare la prossima spunta.

Non fare il tipico errore "tutto è sempre pronto, non penso ai processi tecnici di consegna e calcolo dei dati, non mi deve interessare, sono sempre fortunato". Implementare sempre una logica di inizializzazione pigra e il controllo dei dati.

Assicuratevi di testare i vostri programmi su una base grafica vuota. Di solito è sufficiente riavviare il terminale con un database storico cancellato manualmente per ottenere una serie di errori di accesso sull'indice sbagliato o sulla divisione per zero.

Se hai una barra m15 su un simbolo, allora c'è sicuramente una barra m30 sullo stesso simbolo.

 
Renat:

Sì.

Un'altra domanda. La funzione BarsCalculated() si comporta allo stesso modo quando viene chiamata da un EA e da un indicatore?
 
Tapochun:
Un'altra domanda. La funzione BarsCalculated() si comporta allo stesso modo quando viene chiamata da un EA e da un indicatore?
Cosa c'è che non va?
 
Renat:
Cosa c'è che non va?

È solo che ho sperimentato diverse informazioni. Per come la vedo io, dovrebbero funzionare allo stesso modo. Ma non lo fanno. Dato che è domenica, non c'è modo di controllare l'ora corrente. Ma funzionano diversamente anche nel tester. Ecco due esempi di codice. Il succo è il seguente. Stiamo cercando di ottenere dati da sette TF. Lo facciamo partire (sia il consulente che l'indicatore) non dal TF più significativo. Per esempio, da М15. Se il tick corrente ha sincronizzato la formazione di una nuova candela e l'ottenimento di dati su questa candela tramite BarsCalculated() - allora registriamo il numero di barre calcolate usando BarsCalculated() e il tempo della candela corrente. Vedere i dettagli nel codice.

L'indicatore.

Prima spunta.

Per ogni TF, si forma una nuova candela. Ma su TF M1, M5, M15, BarsCalculated() restituisce 0. Ma su TF M30, H1, H4, D1 restituisce -1. Qui abbiamo una domanda: perché la funzione funziona in modo diverso? Di conseguenza, se lo eseguiamo sul TF M30, per i TF M1, M5, M15, M30,BarsCalculated() restituisce 0. E, rispettivamente, per i TF H1, H4, D1, restituisce -1. Da questo possiamo concludere che per la TF superiore i dati non sono inizialmente disponibili.

La seconda spunta.

Secondo la logica del codice, la sincronizzazione, cioè la scrittura dei parametri (tutto secondo i registri dei campioni);

Il terzo e il prossimo tick.

Otteniamo una nuova barra per indicatore per TF M30, H1, H4, D1. Anche se i dati sembrano essere già stati ottenuti. E si scopre che il numero su TF, maggiore di quello attuale, è maggiore di 1. Un comportamento molto strano. In futuro (utilizzando l'esempio attuale) non saremo in grado di ottenere la sincronizzazione.

Consulente esperto.

La prima spunta.

La sincronizzazione viene attuata immediatamente. Il nuovo valore di BarsCalculated() viene ricevuto sincronicamente alla formazione di una nuova candela.

La seconda e le successive zecche.

Comportamento logico della funzione. Tutto è sincronizzato.

Eseguite entrambi gli esempi a zecche nel tester, lo vedrete voi stessi. Il comportamento attuale della funzione è diverso per Expert Advisors e indicatori. Anche i dati provenienti dagli indicatori sono ritardati per i timeframe più alti. Così, penso chequando si richiedono i dati per M15 e M30 non saranno disponibili allo stesso tempo.I dati reali non lo sono affatto!

Se mi sbaglio, mi consigliate come ottenere correttamente i dati dell'indicatore dal vecchio TF? Grazie.

 
//+------------------------------------------------------------------+
//| Search position of an element in a sorted list                   |
//+------------------------------------------------------------------+
CObject *CList::QuickSearch(CObject *element)
  {
   int      i,j,m;
   CObject *t_node=NULL;
//--- check
   if(m_data_total==0)
      return(NULL);
//--- check the pointer is not needed
   i=0;
   j=m_data_total;
   while(j>=i)
     {
      //--- ">>1" is quick division by 2
      m=(j+i)>>1;
      if(m<0 || m>=m_data_total)
         break;
      t_node=GetNodeAtIndex(m);
      if(t_node.Compare(element,m_sort_mode)==0)
         break;
      if(t_node.Compare(element,m_sort_mode)>0)
         j=m-1;
      else
         i=m+1;
      t_node=NULL;
     }
//--- result
   return(t_node);
  }
Libreria CListstandard
Perché chiamareCompare due volte? Può essere un'operazione costosa (se dobbiamo controllare l'uguaglianza di grandi oggetti, non l'equivalenza di alcuni campi).
Si può semplicemente salvare il risultato dopo la prima chiamata diCompare.
 
Renat:
Devo aspettare qui la sua risposta? O devo portarlo al servizio di assistenza?
 

Da dove vengono queste icone nella parte inferiore del grafico?

Non c'è nessun indicatore sul grafico, ma le icone appaiono ogni volta. Sono stufo di cancellarle. Come faccio a disattivare questa merda? Non riesco a trovare nulla nelle impostazioni del terminale a riguardo.

 
meat:

Da dove vengono queste icone nella parte inferiore del grafico?

Non c'è nessun indicatore sul grafico, ma le icone appaiono ogni volta. Sono stufo di cancellarle. Come posso disattivare questa merda? Non riesco a trovare nulla di relativo nelle impostazioni del terminale.

Questi sono eventi della scheda "Calendario". Per cancellare: clicca con il tasto destro del mouse all'interno della scheda "Calendario" -> "Mostra sui grafici" -> "Cancella tutti gli eventi".

P. S. E deseleziona l'opzione "Aggiornamento automatico". Ora i nuovi eventi del Calendario non saranno mostrati sul grafico.

 
crOss:
Prendi un qualsiasi Expert Advisor (dagli esempi di MetaQuotes), eseguilo sotto la build 975 su un certo periodo e con gli stessi parametri,
Ottenere i risultati, cioè il grafico della curva dei rendimenti e la tabella delle offerte.


Ora esegui lo stesso EA sotto la build 1010 sullo stesso periodo e con gli stessi parametri, ottieni risultati completamente diversi...

P.S. Metatester è a 32 bit

Quale dei risultati è corretto? Nella build 975 o nella build 1010?
 

Ciao a tutti) Per favore aiutatemi ad avviare il timer:

int OnInit()

{

bool setTimer=EventSetTimer(60);

Stampa("setTimer");

}

void OnTimer()

{

Stampa("Passando il tempo");

}

Domanda: perché non funziona? Mi ha fatto saltare la testa...((((.