Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 1242

 
Sayberix:

Lo sto leggendo. Solo che non ci sono ancora arrivati, credo. Non credo che sia facile superare un riferimento in pdf di 28 MB. O per dirla in un altro modo - non tutti i parrocchiani conoscono tutta la Bibbia, anche se sono credenti devoti.

Ho un'altra domanda, per favore consigliatemi - se non è difficile:

quando si esegue il codice nel visualizzatore di strategie:

1. il programma va in un ciclo infinito;

2. i risultati dell'esecuzione sono diversi:

senza punti di rottura:

Con breakpoint su Print:


Tutto fatto su dati storici di debugging.

State costantemente aumentando la variabile. Cosa ne pensi: quando la dimensione della variabile supererà i suoi limiti?

 
Vladimir Karputov:

State costantemente aumentando la dimensione della variabile. Cosa ne pensi: quando la dimensione della variabile supererà i suoi limiti?

Penso che 10 iterazioni dell'ulong avrebbero dovuto essere sufficienti. La domanda allora è:

1. perché il ciclo non si rompe? e

2. perché non vengono visualizzati i risultati del contatore del tempo di iterazione?


È perché il debug è stato fatto su dati storici?

 
Sayberix:

Penso che per 10 iterazioni l'ulong avrebbe dovuto essere sufficiente. La domanda allora è:

1. perché il ciclo non si rompe? e

2. perché non vengono visualizzati i risultati del contatore del tempo di iterazione?


È a causa del debug sui dati storici?

Avete una variabile dichiarata a livello globale del programma - la state costantemente aumentando.

 
Oh, capisco... L'iterazione dura meno di un millisecondo...
 
Vladimir Karputov:

Avete una variabile dichiarata a livello globale del programma - la state costantemente aumentando.

Ancora non capisco cosa c'entri la variabile globale. Il programma stesso è limitato a un ciclo: "for(int i=1; i<=10; i++)" ?

O forse non capisco qualcosa, per favore spiegatemi.

 
Sayberix:

Ancora non capisco cosa c'entri la variabile globale. Il programma stesso è limitato a un ciclo: "for(int i=1; i<=10; i++)" ?

O forse non capisco qualcosa, per favore spiegatemi.

Rimuovere le variabili

ulong count, raschet = 1;

fuori dalla portata globale.


Ad ogni tick, si incrementa ripetutamente la variabile raschet. E al prossimo segno di spunta, CONTINUATE a incrementarlo più volte. Qualche tic e la variabileraschet è fuori portata. Alla fine si stampano i valori della variabile, ma non si guarda la stampa per qualche motivo.

 
Vladimir Karputov:

Rimuovere le variabili

dall'ambito globale.


Ad ogni tick, si incrementa ripetutamente la variabile raschet. E al prossimo tick, CONTINUATE ad incrementarlo ripetutamente. Qualche tic e la variabileraschet è fuori portata. Alla fine si stampano i valori delle variabili, ma non si guarda la stampa per qualche motivo.

Grazie, ho capito. Mi sono solo confuso, pensando che return fermi del tutto il programma, mentre interrompe solo la sua esecuzione sul tick corrente. Invece di "return;" ho messo"ExpertRemove();".

 

Potete dirmi in questo codice:

//+------------------------------------------------------------------+
//|                                                          env.mq5 |
//|                        Copyright 2020, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, MetaQuotes Software Corp."
#property indicator_buffers 2

int envHandle;
double upperEnv[], lowerEnv[];

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit()
  {
   envHandle = iCustom(_Symbol,_Period,"Examples\\Envelopes",3,0,MODE_LWMA,PRICE_OPEN,0.03);
   if(envHandle<0)
     {
      Alert("Ошибка при создании индикаторов - номер ошибки: ",GetLastError(),"!!");
      return(INIT_FAILED);
     }
   SetIndexBuffer(0,upperEnv,INDICATOR_DATA);
   SetIndexBuffer(1,lowerEnv,INDICATOR_DATA);

   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Deinitialization function of the expert                          |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   IndicatorRelease(envHandle);
  }
//+------------------------------------------------------------------+
//| "Tick" event handler function                                    |
//+------------------------------------------------------------------+
void OnTick()
  {

   ArraySetAsSeries(upperEnv, true);
   ArraySetAsSeries(lowerEnv, true);

   if((CopyBuffer(envHandle,0,0,3,upperEnv)<0) || CopyBuffer(envHandle,1,0,3,lowerEnv)<0)
      Alert("Ошибка копирования буферов индикатора Envelopes - номер ошибки:",GetLastError(),"!!");

   double   upEnv = upperEnv[0];
   double   lowEnv = lowerEnv[0];
  }
//+------------------------------------------------------------------+

Come posso ottenere valori di prezzo costantemente aggiornati delle linee Envelopes nelle variabili upEnv e lowEnv? Disegna l'indicatore, ma i valori dell'indicatore nelle variabili vengono aggiornati 2 volte e questo è tutto.

 
Sayberix:

Potete dirmi in questo codice:

Come posso ottenere valori di prezzo costantemente aggiornati delle linee Envelopes nelle variabili upEnv e lowEnv? Disegna l'indicatore, ma i valori dell'indicatore nelle variabili vengono aggiornati 2 volte e questo è tutto.

Prima di tutto, decidete: volete scrivere un Expert Advisor o un indicatore? (Ora hai un codice misto - indicatore ed Expert Advisor sono mescolati insieme) - cioè il codice non funzionerà.

Suggerimento: usare MQL Wizard per creare un modello.

 
Vladimir Karputov:

Prima decidete: volete scrivere un EA o un indicatore? (In questo momento il tuo codice è un casino - sia l'indicatore che l'Expert Advisor sono mescolati insieme) - cioè il codice è impraticabile.

Suggerimento: usare MQL Wizard per creare un modello.

L'ho già provato. Ma genera classi in Wizard. Vorrei almeno capire il codice in modo semplice - il codice lo capisco almeno un po'. Potreste consigliarmi come correggere il codice per ottenere i valori dell'indicatore nell'EA?