Errori, bug, domande - pagina 3078

 
fxsaber #:

Il visualizzatore non è sempre sincronizzato con l'ambiente di trading. Cioè, può mostrare informazioni vecchie. Quello aggiornato è sempre nell'EA.

Questo è un problema molto comune, quando l'EA dice una cosa, ma il Visualizer mostra qualcos'altro.

Ho una buona idea. Ho capito, grazie. Fondamentalmente, l'EA continua a lavorare logicamente e l'ordine viene realmente eseguito, ma visivamente è visibile solo dopo.

 
Igor Petrov #:

Ok. Capito grazie. Fondamentalmente l'EA lavora ulteriormente in modo logico, e l'ordine viene realmente eseguito solo visivamente e può essere visto in seguito.

Per vedere la situazione sincronizzata al momento giusto, bisogna aspettare il prossimo tick dopo aver fermato il tester.

Per esempio, potete mandare avanti veloce di cinque secondi PRIMA del momento interessante, poi premere pausa e F12 per provare ogni tick successivo. Tutte queste zecche saranno rese correttamente.


È possibile identificare il ritardo nel commento del tempo di tick corrente (con la precisione di millisecondi) e confrontandolo con ciò che viene mostrato nella finestra Market Watch del visualizzatore. Se c'è una discrepanza, si tratta di una desincronizzazione.


Se c'è una discrepanza, è una dissincronizzazione del visualizzatore quando il debugger si ferma (o quando si preme pausa), naturalmente, dovrebbe essere stato fatto molto tempo fa.

 
Igor Makanu #:

BarsCalculated()https://www.mql5.com/ru/docs/series/barscalculated

cosa restituisce? - è solo un numero che l'indicatore ha restituito a return(rates_total) dopo il calcolo in OnCalculate()?

controlla - sì, BarsCalculated() è return(rates_total)

ind A:

int OnCalculate...
{
   static int cnt = 0;
   cnt++;
   Print("cnt = ", cnt);
   return(cnt);
}

ind B:

int OnInit()
{
   handle = iCustom(NULL, PERIOD_M1, "tst_code\\A");
   return(INIT_SUCCEEDED);
}
int OnCalculate...
{
   double tmp[];
   int bc = BarsCalculated(handle);
   if(bc == -1) return(rates_total);
   int copy = CopyBuffer(handle, 0, 0, 1, tmp);
   Print("BarsCalculated = ", bc);
   return(rates_total);
}

ha funzionato su H1 indicatore B, log:

2021.09.02 16:11:44.872 A (EURUSD,M1) cnt = 1

2021.09.02 16:11:44.873 A (EURUSD,M1) cnt = 2

2021.09.02 16:11:44.998 A (EURUSD,M1) cnt = 3

2021.09.02 16:11:44.998 B (EURUSD,H1) BarsCalculated = 3

2021.09.02 16:11:46.617 A (EURUSD,M1) cnt = 4

2021.09.02 16:11:46.617 B (EURUSD,H1) BarsCalculated = 4

2021.09.02 16:11:46.663 A (EURUSD,M1) cnt = 5

2021.09.02 16:11:46.663 B (EURUSD,H1) BarsCalculated = 5

2021.09.02 16:11:46.671 A (EURUSD,M1) cnt = 6

2021.09.02 16:11:46.671 B (EURUSD,H1) BarsCalculated = 6

2021.09.02 16:11:46.684 A (EURUSD,M1) cnt = 7

2021.09.02 16:11:46.685 B (EURUSD,H1) BarsCalculated = 7

2021.09.02 16:11:46.697 A (EURUSD,M1) cnt = 8

2021.09.02 16:11:46.697 B (EURUSD,H1) BarsCalculated = 8

2021.09.02 16:11:47.008 A (EURUSD,M1) cnt = 9

2021.09.02 16:11:47.008 B (EURUSD,H1) BarsCalculated = 9

2021.09.02 16:11:47.029 A (EURUSD,M1) cnt = 10

2021.09.02 16:11:47.029 B (EURUSD,H1) BarsCalculated = 10

2021.09.02 16:11:47.502 A (EURUSD,M1) cnt = 11

2021.09.02 16:11:47.502 B (EURUSD,H1) BarsCalculated = 11

2021.09.02 16:11:47.614 A (EURUSD,M1) cnt = 12

2021.09.02 16:11:47.614 B (EURUSD,H1) BarsCalculated = 12

2021.09.02 16:11:47.620 A (EURUSD,M1) cnt = 13

2021.09.02 16:11:47.620 B (EURUSD,H1) BarsCalculated = 13

2021.09.02 16:11:47.667 A (EURUSD,M1) cnt = 14

2021.09.02 16:11:47.667 B (EURUSD,H1) BarsCalculated = 14

2021.09.02 16:11:47.713 A (EURUSD,M1) cnt = 15

2021.09.02 16:11:47.713 B (EURUSD,H1) BarsCalculated = 15

2021.09.02 16:11:47.726 A (EURUSD,M1) cnt = 16

2021.09.02 16:11:47.726 B (EURUSD,H1) BarsCalculated = 16

 

Buon pomeriggio, non riesco a risolvere il problema.

Ho bisogno di elaborare tutte le barre alla prima esecuzione, dopo aver elaborato solo l'ultima barra.

Prima stampa 0, poi su ogni nuova barra solo l'ultima, non stampa le barre intermedie.

Qual è il problema?

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[])
  {

      for(int i = prev_calculated; i <= prev_calculated && i < rates_total && !IsStopped(); i++)
        {
         Print(i);
        };
   return(rates_total);
  }
 
SEM #:

Buon pomeriggio, non riesco a risolvere il problema.

Ho bisogno di elaborare tutte le barre alla prima esecuzione, dopo aver elaborato solo l'ultima barra.

All'inizio stampa 0, poi su ogni nuova barra solo l'ultima, non stampa le barre intermedie.

Qual è l'errore?

O i-- o i è uguale a zero nell'espressione del ciclo 1) tutto viene stampato correttamente)
Questo è per la prima corsa. E poi il classico nuovo bar che cattura.
 
SEM #:

Buon pomeriggio, non riesco a risolvere il problema.

Ho bisogno di elaborare tutte le barre alla prima esecuzione, dopo aver elaborato solo l'ultima barra.

Prima stampa 0, poi su ogni nuova barra solo l'ultima, non stampa le barre intermedie.

Qual è l'errore?


Per cominciare cercherei di correggerlo in questo modo:

      for(int i = prev_calculated; i >= prev_calculated && i < rates_total && !IsStopped(); i++)
        {
         Print(i);
        };
 

Buona giornata a tutti voi. C'è qualcuno là fuori che ha incontrato questo problema? Tutto andava bene in mt5 fino alle 10msk di oggi. Ho aperto gli ordini e impostato stop e profitto.

Quando apro un ordine, piazzando uno stop o un profitto dopo 10msk, il mio ordine è in attesa in fila e dopo 10 minuti o più viene piazzato. E questo è ancora il caso.

 
Михаил Савченко #:

Buona giornata a tutti voi. C'è qualcuno là fuori che ha incontrato questo problema? Tutto andava bene in mt5 fino alle 10msk di oggi. Ho aperto gli ordini e impostato stop e profitto.

Dopo le 22, quando ho aperto un ordine e piazzato uno stop o un profitto, il mio ordine era in attesa in fila e dopo 10 minuti o più è stato aperto. E questo è ancora il caso.

Trading manuale? Quale broker?
 
mktr8591 #:
Commercio manuale? Quale broker?
Sì, entro dal mercato, manualmente. Finam.
 
mktr8591 #:

Per cominciare, cercherei di correggerlo in questo modo:

Grazie! Mi ha aiutato.