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

 
Nikolay Ivanov #:

Il tuo codice stampa 0, non -1...

Forse -1 è stampato da qualche altra parte, più probabilmente l'intero codice è nelle stampanti...

Sì, hai ragione, ogni passo è prestampato per vedere dove si è "bloccato".

L'esempio non è corretto, scusa, il codice stesso è grande.

Ma, la soluzione di Konstantin ha risolto il problema! Ho davvero scambiato i-- e il controllo dello zero ovunque, e ora la logica funziona come dovrebbe, invece di -1 emette 0 o 1. (prima di 0 o -1, con quest'ultimo un errore immediato).

 
Nikolay Ivanov #:

Il tuo codice stampa 0, non -1...

È possibile che -1 sia stampato da qualche altra parte, molto probabilmente l'intero codice è nelle stampanti...

Prima di cercare di risolvere il problema, è necessario identificarlo... Assicurati che ci sia e localizzalo prima di risolverlo...

Prendi una penna e un pezzo di carta. E scrivi come conta il ciclo. In questo codice.

void OnStart()
  {
int i=10;
for (i; i>0; i--)
{
i--;
if (i==0) break;
}

Print(i);
  }

controllare

if (i==0) break;

non funzionerà mai in questo codice. A meno che non si imposti inizialmente

int i=11;

un valore dispari. Se è pari, allora questo codice

int i=10;
for (i; i>0; i--)
{
i--;
if (i==0) break;
}

a

if (i==0) break;

avrà un valore dispari.

 
Nikolay Ivanov #:

Prima di cercare di risolvere un problema, bisogna identificarlo... Assicurati che ci sia e localizzalo, e poi risolvilo...

Capisco cosa intendi.

 
Konstantin Nikitin #:

Prendi una penna e un pezzo di carta. E scrivi come si conta il ciclo. In questo codice.

Perché dovrei prendere carta e penna se la condizione dice stampa =-1, ma in realtà (ho controllato) stampa come 0, cioè l'esempio è dato in modo errato. Ed è impossibile dare una risposta corretta ad un esempio errato...

 
Nikolay Ivanov #:

Perché dovrei prendere carta e penna se la condizione dice stampa =-1, ma in realtà (ho controllato) stampa come 0, quindi l'esempio non è corretto. Ed è impossibile dare una risposta corretta ad un esempio errato...

Lo zero viene stampato da questa linea

for (i; i>0; i--)

e non dall'uscita di controllo e rottura.

In generale, è più corretto scrivere

for (i; i>= 0; i--)

perché gli array iniziano con un indice zero

 
Konstantin Nikitin #:

Lo zero viene stampato da questa linea

non dal controllo delle pause e dall'uscita.

0 viene stampato da questa linea, per quel codice che è stato dato...

Print(i);

La domanda non era perché break non funziona, la domanda era perché la stampante ha stampato -1... tutto qui. E non importa se l'inizio i è pari o dispari, non stampa mai -1...

 
Potete per favore dirmi come contare i tick o le candele su un lungo periodo di tempo? (Un anno, per esempio).

Prova Close[], ma l'indice non dà più di 5000.
 
Ivan Butko #:
Potete dirmi per favore come calcolare i tick o le candele su un lungo periodo di tempo? (Un anno, per esempio).

Ho provato Close[], ma l'indice non dà più di 5000.

Le zecche o le candele fanno una così grande differenza, è spaventoso a dir poco...

 
Alexey Viktorov #:

C'è così tanta differenza tra le zecche e le candele che è spaventoso da dire...

Per esempio, un EA, se si specifica un qualsiasi periodo per esso, nel tester andrà per ticks o per barre M1, tutti ne terranno conto.

Ma se si prende un EA che va alla storia lunga in tempo reale e prende i dati da lì, non capisco come organizzarlo. Il terminale non dà più di 5000 candele.


UPD
Proverò a usare questa cosa, il codice è in rete

MqlRates rates[];

   int copied=CopyRates(NULL,0,0,100,rates);

   if(copied<=0)

      Print("Ошибка копирования ценовых данных ",GetLastError());

   else Print("Скопировано ",ArraySize(rates)," баров");


UPD
Strange. Tutto d'un tratto funziona. Anche la milionesima barra è controllata. Non ha fatto nulla, ha letto la documentazione e ha bevuto il tè. L'ho appena eseguito di nuovo e ha funzionato. Ha avuto un errore per tutto il giorno, anche se avevo scaricato la cronologia e cambiato le impostazioni ieri.
Quindi, non c'era nemmeno bisogno di controllare il codice aggiuntivo (sopra).
MT4 è un po' capriccioso. O forse forex chif ha una tale funzione. Dovrò mettere quello standard invece di quello del broker.

 
Ivan Butko #:

Per esempio, un Expert Advisor, se gli si specifica un periodo qualsiasi, passerà attraverso il tester per ticks o per barre M1, tutti ne terranno conto.

Ma se si prende un Expert Advisor, che in modalità tempo reale va alla storia lunga e prende i dati da lì, non capisco come organizzarlo. Il terminale non dà più di 5000 candele.


UPD
Proverò a usare questa cosa, il codice è in rete

MqlRates rates[];

   int copied=CopyRates(NULL,0,0,100,rates);

   if(copied<=0)

      Print("Ошибка копирования ценовых данных ",GetLastError());

   else Print("Скопировано ",ArraySize(rates)," баров");


UPD
Strange. Tutto d'un tratto funziona. Anche la milionesima barra è controllata. Non ha fatto nulla, ha letto la documentazione e ha bevuto il tè. L'ho appena eseguito di nuovo e ha funzionato. Ho avuto errori per tutto il giorno, anche se avevo scaricato la cronologia e cambiato le impostazioni ieri.
Quindi, non c'era nemmeno bisogno di controllare il codice aggiuntivo (sopra).
MT4 è un po' capriccioso. O forse forex chif ha una tale funzione. Dovrò mettere quello standard, non quello di intermediazione.

La prima chiamata a CopyRates() ha avviato il pompaggio dei dati storici (non eseguitelo per una settimana e otterrete di nuovo la stessa cosa, beh, forse non una settimana, ma qualche tempo).
Devi solo controllare quanti dati ci sono sul server e confrontare la quantità disponibile per l'Expert Advisor. Se è meno di quello che è richiesto - lascia l'EA fino alla prossima spunta. Alla prossima spunta, controlla di nuovo. Se per un certo numero di tentativi non si ottiene la storia richiesta - allora questo errore dovrebbe essere trattato come richiesto.