Errori, bug, domande - pagina 2995

 
   datetime a = D'2021.04.08 10:00:00';
   int      handle;
   double   Buffer[];
   

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
{

   handle = iCustom(_Symbol, PERIOD_CURRENT, "Examples\\ATR.ex5", 14);
   ::Print(__FUNCTION__ + "| PERIOD_CURRENT = ", EnumToString(_Period));

   return(INIT_SUCCEEDED);
}

//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
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[])
{

   if(handle != INVALID_HANDLE)
   {
      ::CopyBuffer(handle, 0, a, 1, Buffer);
      
      double BS = ::NormalizeDouble(Buffer[0], _Digits);
      
      ::Print(__FUNCTION__ + "| a = ", a);
      ::Print(__FUNCTION__ + "| BS ", BS);
      
      handle = INVALID_HANDLE;
   }
   
   // return value of prev_calculated for next call
   return(rates_total);
}


Qualcuno può rispondere al perché questo codice funziona correttamente solo su minuti?

Questo è un indicatore.


P. S.

Sui timeframe diversi dai minuti, emette valori sbagliati.

 
Francuz:


Qualcuno può rispondere al perché questo codice funziona correttamente solo su minuti?

Questo è un indicatore.

P. S.

Su timeframes diversi dai minuti emette valori sbagliati.

Perché avete eseguito una sola iterazione solo alla prima visita di OnCalculate, quando prev_calculated = 0. A quel punto le barre potrebbero non essere ancora formate. E tutti i TF sono formati da 1M TF.
Inserire nell'assegno:

if(prev_calculated>0 && handle != INVALID_HANDLE)

E tutto funzionerà.

 

Ci sono due schede EA aperte in ME, entrambe hanno modifiche non salvate, premiamo il pulsante di compilazione su una di esse e vediamo che ME salva le modifiche in entrambi gli EA. Perché? Chi gli ha chiesto di farlo?

Se ME salvasse le modifiche nei file collegati prima della compilazione, sarebbe un comportamento logico, ma così.... Naturalmente, visto che è molto più facile, perché fare una cernita di quali file appartengono a chi? È molto più facile salvare tutti i file aperti e farla finita....

 
Andrey Dik:
In ME le schede di due EA sono aperte, entrambe hanno modifiche non salvate, premi il pulsante di compilazione di una di esse e vedi che ME salva le modifiche in entrambi gli EA. Perché? Chi gli ha chiesto di farlo?
Come potrebbe fare altrimenti?
Questo è l'unico modo.
In tutti gli IDE questo è il caso.
 
Nikolai Semko:
Come altro?
Questo è l'unico modo.
Tutti gli IDE sono così.

È sicuro in tutti gli IDE?

Ho appena provato VS, sì, il comportamento è lo stesso. Ma, il comportamento ritardato di un prodotto, anche il più famoso, dovrebbe essere considerato come un punto di riferimento? Copiamo tutti i bug e le incomprensioni di VS, perché?

))

 
Andrey Dik:

è accurato in tutti?

Ho appena provato VS, sì, il comportamento è lo stesso. ma, il comportamento ritardato di un prodotto, anche il più noto, dovrebbe essere considerato il punto di riferimento? copiamo allora tutti i bug e le incomprensioni di VS, perché.

))

Ho usato almeno 9 diversi IDE nell'ultimo anno. È così dappertutto.
Beh, pensa logicamente, quanti problemi ci possono essere se un file ha diversi master che non vedono le modifiche dell'altro. Se uno ha compilato con un codice, e un altro con un altro codice, devi già creare due file ex5 con lo stesso nome, ecc.
 

Perché non fare il Navigator come una tabella alla maniera della finestra di Market Watch? IlMarket Watch ha implementato l'ordinamento, complimenti! - Lo chiediamo da molto tempo.

Ora arriva l'era del nostro nuovo sogno di mega usabilità di visualizzare il contenuto del Navigatore e ordinare per colonne: Titolo, Autore, Data di compilazione, Data di ultima esecuzione, Disponibilità della fonte, Tipo di programma (e disabilitare l'ordinamento e tornare alla vista corrente)

 
Nikolai Semko:
Ho usato almeno 9 diversi IDE nell'ultimo anno. Ovunque è così.
Beh, pensa logicamente, quanti problemi ci possono essere se un file ha diversi host che non vedono le modifiche dell'altro. Se uno ha compilato con un codice e l'altro con un altro codice, devi già creare due file ex5 con lo stesso nome, ecc.

Se si aprono due diversi EA, quale può essere la connessione tra loro? Solo gli inludi che fanno parte dei gufi devono essere salvati, e non importa a chi altri appartengono.

Per esempio, se si apre un file *txt che non viene salvato, non ha niente a che fare con il file compilato e/o il progetto, quindi perché salvarlo?

 
Nikolai Semko:

perché si esegue solo una singola iterazione al primissimo ingresso OnCalculate, quando prev_calculated = 0. A questo punto le barre potrebbero non essere ancora formate. E tutti i TF sono formati da 1M TF.
Inserire nell'assegno:

e tutto funzionerà.

Non hai capito il punto. Il codice dovrebbe funzionare solo una volta. Il suo scopo è mostrare che l'indicatore chiamato non funziona. Il problema è che in qualsiasi variante dell'indicatore chiamato non funzionerà se esso (e il chiamante) ha un TimeFrame diverso da quello dei minuti. Ho scoperto che è un bugdi MetaTrader che può essere risolto solo con le stampelle. E questo problema è abbastanza vecchio. Puoi leggere i dettagli in "Non riesco a ottenere i dati dell'indicatore dal vecchio TF 123".

Вопросы от начинающих MQL5 MT5 MetaTrader 5
Вопросы от начинающих MQL5 MT5 MetaTrader 5
  • 2012.03.12
  • www.mql5.com
Подскажите пожалуйста, такой показатель тестера в жизни реален? И хороший это или плохой результат за год с депо 3000...
 
Francuz:

Non hai capito il punto. Il codice dovrebbe funzionare solo una volta. Il suo scopo è mostrare chiaramente che l'indicatore chiamato non funziona. Il problema è che l'indicatore chiamato non funziona se esso (e il chiamante) ha un TimeFrame diverso da quello dei minuti. Ho scoperto che è un bugdi MetaTrader che può essere risolto solo con le stampelle. E questo problema è abbastanza vecchio. Puoi leggere i dettagli in dettaglio in "Non riesco a ottenere i dati dell'indicatore dal principale TF 123".

È stato molto tempo fa. Il problema è stato risolto da tempo. È necessario almeno una volta ogni due minuti per accedere ai dati di un timeframe/simbolo non nativo. Nel ciclo principale, se non ci sono ancora dati dal timeframe richiesto, è necessario uscire dal ciclo - basta restituire zero per aspettare il prossimo tick, e l'indicatore sapeva che i dati storici non sono stati ancora calcolati.

Motivazione: