Errori, bug, domande - pagina 3031

 
Igor Makanu:

il mio codice "martellerà su ogni tick" solo il tuo indicatore #1, dove hai scritto :

consentirà al terminale di costruire in modo indipendente il "tempo superiore".

Per me - è più "economico" che eseguire un ricalcolo completo dell'indicatore 1, che avviene nel vostro codice quando si sincronizza la storia sul "superiore TF

Sì, ma perché l'azzeramento di prefault è sul TF inferiore?

 
Andrey Dik:

Sì, ma perché il prev kalk è azzerato sul TF inferiore?

perché restituire 0;
 
Andrey Dik:

Sì, ma perché il prev kalk è azzerato sul TF basso?

ci sono molte varianti, non conosciamo l'implementazione


C'è stata una discussione simile su MT4 l'anno scorso, uno degli sviluppatori (credo Slava) ha detto, che ogni accesso al "vecchio TF" avvia la sincronizzazione dei dati, se è richiesto....

Penso che in MT5 il terminale costruisca anche TF da solo, se necessario, ma se ci sono stati ritardi di rete o ..... implementazione è sconosciuto... allora il terminale, prima di dare i dati all'indicatore su un TF senior, sincronizza i dati storici con il server, quando ciò avviene istantaneamente, e quando, forse, ci vuole molto tempo, è allora che probabilmente sarà pre_calculato = 0

 
Igor Makanu:

ci sono un sacco di opzioni, non sappiamo l'attuazione

Se il download modifica i dati storici del TF basso, il contatore del TF basso sarà forzato a zero dal terminale, non fare problemi di punto in bianco

 
Andrey Dik:

Stai dimostrando il mio punto di vista, compagno.

Non sono un... compagno del codificatore. Non è una conferma, è un suggerimento, non restituire 0. Questi sono tutti i vostri problemi. Tu stesso stai causando un ricalcolo completo dell'indicatore.

 

Forum sul trading, sistemi di trading automatico e test di strategie di trading

Bug, bug, domande

Andrey Dik, 2021.05.28 17:26

Pre_calcolato non aumenta di 1 nella barra successiva.


prev_calculated in realtà non aumenta; sarà sempre lo stesso della fine del calcolo

return(rates_total);


cioè, ciò che otteniamo all'uscita di OnCalculated() sarà restituito al prossimo tick in prev_calculated (tranne prev_calculated == 0, il terminale lo fa quando lancia l'indicatore o sincronizza TF......)


Andrei Trukhanovich:

se lo scaricamento cambia i dati storici del TF basso basso, il contatore del TF basso sarà forzatamente azzerato dal terminale, non fare problemi di punto in bianco

Gli ho scritto per il secondo giorno - prendi gli indicatori di Mladen e studiali - funzionano, e senza alcuna complicata sincronizzazione tra i TF, e qui ... stiamo risparmiando risorse e non lasciamo che il terminale formi le TF chiamate

 
Andrei Trukhanovich:

sostituire

a

e testarlo.

Non sollecitare... Tanto non ci crederà.

 
Alexey Viktorov:

Io ... non sono amico del codificatore. Questa non è una conferma ma un suggerimento, non restituire 0. Questo è ciò che causa tutti i tuoi problemi. Tu stesso stai causando un ricalcolo completo dell'indicatore.

Si può essere idioti a dare un suggerimento, ma non tutti possono aiutare a capire e spiegare.

 
Andrei Trukhanovich:

sostituire

a

e testarlo.

Grazie, Andrei. Lei è l'unico che si è addentrato completamente nella questione.

2021.05.28 21:22:54.394 LitTF (EURUSD,M2) L'indicatore per il periodo 3 non è ancora calcolato

2021.05.28 21:22:54.396 LitTF (EURUSD,M2) L'indicatore sul periodo 3 non è ancora stato calcolato

2021.05.28 21:22:54.397 OldTF (EURUSD,M3) 0.000262 sec, 50046 barre calcolate, totale 50046 barre

2021.05.28 21:22:55.796 LitTF (EURUSD,M2) 0.007693 sec, 50000 barre calcolate, 50000 barre totali

2021.05.28 21:24:02.286 LitTF (EURUSD,M2) Indicatore sul periodo 3 non ancora calcolato

2021.05.28 21:24:02.286 OldTF (EURUSD,M3) 0.000000 sec, 1 barra calcolata, 50047 barre totali

2021.05.28 21:24:03.017 LitTF (EURUSD,M2) 0.000015 sec, calcolato 1 barre, totale barre 50001

2021.05.28 21:26:03.898 LitTF (EURUSD,M2) 0.000007 sec, calcolato 1 barre, totale barre 50002

ora tutto funziona come previsto, gli indicatori sono stati calcolati completamente solo una volta alla prima esecuzione e inoltre solo una volta per ogni nuova barra.


Il codice finale del secondo indicatore, spero che sia utile a qualcuno:

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[])
{
   ulong t = GetMicrosecondCount ();
   if (rates_total == prev_calculated) return rates_total;

   
   if (SeriesInfoInteger (Symbol (), OldTF, SERIES_SYNCHRONIZED))
   {
      if (iBars (Symbol (), OldTF) != BarsCalculated (Handle))
      {
        Print ("Индикатор на периоде ", OldTF, " ещё не рассчитан");
        return prev_calculated;
      }
   }
   else 
   {
     Print ("Период ", OldTF, " не синхронизирован.");
     return prev_calculated;
   }

   ArraySetAsSeries (high, true);
   ArraySetAsSeries (time, true);

   int limit = rates_total - prev_calculated - 1;

   double buff [];
   int ind = 0;
   for (int i = limit; i >= 0; i--)
   {
      ind = iBarShift (Symbol (), OldTF, time [i], false);
      if (CopyBuffer (Handle, 0, ind, 1, buff) != -1)
      {
        IBuffer [i] = buff [0];
      }
      else
      {
        Print ("Ошибка копирования буфера ", GetLastError ());
        return 0;
      }
   }

   //----------------------------------------------------------------
   double e = (GetMicrosecondCount () - t) / 1000000.0;
   Print (DoubleToString (e, 6), " sec, расcчитано ", rates_total - prev_calculated, " баров, всего баров ", rates_total);
   return(rates_total);
}
 
Andrey Dik:

Qualsiasi pazzo può darvi un suggerimento, ma non tutti possono aiutarvi a capire e aiutarvi nei dettagli.

Conta quanti sciocchi ti stanno consigliando... Solo un ragazzo intelligente non sente nessuno e si ostina...............

Hai creato il tuo problema e stai cercando di presentare il tuo ...codice come un bug di mql.

Motivazione: