Bug MQL5 quando si lavora con accesso alle serie temporali iClose/iOpen, ecc. - pagina 3

 
Per esempio, dato che gli sviluppatori sono chiaramente dei professionisti, esperti in architettura e ottimizzazione della velocità, non dovrebbe essere difficile per loro scrivere una tale funzione nel modo più appropriato e includerla nella libreria standard, cosa di cui gli utenti riconoscenti saranno estremamente grati.
 
Renat Fatkhullin:

Pensate a dove saranno disponibili i dati (tanto più garantiti), quando i vostri indicatori saranno tremendamente lenti nel ricevere/posare i tick, spendendo centinaia di millisecondi o addirittura secondi per un tick. Di conseguenza, nessuna CPU è sufficiente in tempo per elaborare i tick, il che si traduce in un deficit che si accumula e un corrispondente stallo nella storia del grafico.

Quando si chiede di "dare garantito", è molto probabilmente una richiesta di "non voglio sapere nulla, voglio continuare a scrivere come voglio, non voglio pensare a prestazioni e serrature, basta dare"?


Quando hai a disposizione milioni di barre, pensa al rendimento dei tuoi indicatori e di quelli degli altri. Un indicatore mal scritto e costoso può facilmente bloccare gli aggiornamenti del grafico del suo simbolo.

Iniziate a misurare il tempo di risposta di OnCalculate in microsecondi. Poi dividete 1 secondo per il tempo medio di risposta dei tick per ottenere il massimo flusso di tick dell'indicatore in tick al secondo.

Questo fa immediatamente riflettere.

Lasciamo solo un tick (una nuova barra) per il nuovo tipo di elaborazione dei dati da parte dell'indicatore nella versione proposta. Chi ama i ricalcoli multipli delle barre zero e il grail nella barra zero dovrebbe godersi la versione esistente. Aggiungere una nuova funzione a OnInit - iOnCalculate - un handle a una delle funzioni TF / OnCalculate nell'indicatore, come iCustom, ma è un po' più vicino, i buffer dell'indicatore su OnCalculate dovrebbero essere legati all'handle iOnCalculate. Nelle funzioni dell'indicatore come OnCalculate, invia solo una nuova barra di tick. Per il terminale, non cambierà nulla, la logica di base di OnCalculate sarà la stessa, sarà aggiunto il corpo principale dell'indicatore, per esempio OnMain (ora tutto è fatto dall'indicatore o dagli indicatori, attaccati all'indicatore principale come risorsa e chiamati da esso su una nuova barra).

 
transcendreamer:


Non hai sempre bisogno di super velocità, anche l'usabilità è molto importante, al giorno d'oggi scrivere indicatori multivaluta è un "tramonto a mano", anche in Mt4 era più facile, perché lì si poteva sempre ottenere attraverso le i-funzioni, anche lentamente, ma si poteva ottenere, ma in Mt5 puoi ottenere alcuni dati e poi no, e devi ancora fare un codice speciale da solo.

Saltiamo le teorie.

Basta presentare un esempio da riprodurre e vedremo quale orrore c'è intorno al tuo caso. Finora sembra un totale disinteresse per le prestazioni, nascondendo indicatori di ritardo assassino e cercando di gettare un'ombra.

 
Renat Fatkhullin:

Saltiamo le teorie.

Basta fornire un esempio da riprodurre e vedremo quale orrore circonda il tuo caso. Finora sembra un totale disinteresse per le prestazioni, nascondendo gli indicatori di ritardo assassino e cercando di mettere un'ombra su di esso.


L'esempio in allegato, non è il codice finito, è incompleto in alcuni punti, ma è possibile eseguirlo, allego anche un modello per comodità,

Ve lo dico subito, non sono un programmatore, sicuramente il codice non è ottimale, sono un economista umanitario, ho davvero sofferto in MT5, ho sofferto meno in MT4,

Voglio davvero una funzione semplice e affidabile che costruisca un array sincronizzato come descritto sopra https://www.mql5.com/ru/forum/289897/page2#comment_9363454.

Non mi sto lamentando, non sto chiedendo di scrivere il mio indicatore, voglio solo (non solo io tra l'altro) una bella funzione standard.


EDIT: corretto gli allegati

Баг MQL5 при работе c доступом к таймсериям iClose/iOpen и т.д.
Баг MQL5 при работе c доступом к таймсериям iClose/iOpen и т.д.
  • 2018.11.14
  • www.mql5.com
Общее обсуждение: Баг MQL5 при работе c доступом к таймсериям iClose/iOpen и т.д.
File:
 
Renat Fatkhullin:

Fate come vi ho consigliato, per favore.

Altrimenti avete bisogno di materiali completi per una riproduzione al 100%.

Il vostro atteggiamento nei confronti delle segnalazioni di bug è strano. Non è che io sia pagato per dimostrare qualcosa. Ho descritto la situazione come meglio potevo.

Non sono l'unico ad avere questo problema. Questo problema si è verificato dopo il vostro 30° aggiornamento, ma ancora insinuate che sono un idiota e che la colpa è di alcuni indicatori lenti.

Non sono stati lenti per un anno prima?

Ecco un esempio di codice che si blocca dopo 25 minuti su M30:

//+------------------------------------------------------------------+
//|                                                      Feezzzz.mq5 |
//|                                   Copyright 2018, Dray Stanislav |
//|                               https://www.mql5.com/ru/users/fan9 |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018, Dray Stanislav"
#property link      "https://www.mql5.com/ru/users/fan9"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
    datetime CM1_T[1];
    if(CopyTime(_Symbol,PERIOD_M1,0,1,CM1_T)==-1){
      Comment("\n\n CopyTime return -1");
      return;
    }
    Comment("\n\n CopyTime : "+TimeToString(CM1_T[0],TIME_DATE | TIME_SECONDS));   
  }
//+------------------------------------------------------------------+
//| Trade function                                                   |
//+------------------------------------------------------------------+
void OnTrade()
  {
//---
   
  }
//+------------------------------------------------------------------+

Ed ecco il risultato:

1

 
transcendreamer:


L'esempio in allegato, non è ancora codice completo, in alcuni punti non scritto, ma è possibile eseguire, allego anche un modello per comodità,

Posso promettere che non sono un programmatore, sicuramente il codice non è ottimale, sono un economista umanitario, soffro molto in MT5, ho sofferto meno in MT4,

Voglio davvero una funzione semplice e affidabile che costruisca un array sincronizzato come descritto sopra https://www.mql5.com/ru/forum/289897/page2#comment_9363454.

Non mi sto lamentando, non sto cercando guai,

Non mi sto lamentando, non sto chiedendo di scrivere il mio indicatore per me, voglio solo (non solo io tra l'altro) una bella funzione standard.


EDIT: corretto gli allegati

Grazie, controlleremo ora.
 
Stanislav Dray:

Il vostro atteggiamento nei confronti delle segnalazioni di bug è strano. Non è che io sia pagato per dimostrare qualcosa. Ho descritto la situazione come meglio potevo.

Quello che ho scritto prima in questo thread non si qualifica in alcun modo come una segnalazione di bug.

Tutto è andato sul modello delle denunce senza alcun dettaglio tecnico. È stato solo dopo le mie indagini che i dettagli hanno cominciato ad emergere.

 
Stanislav Dray:

Il vostro atteggiamento nei confronti delle segnalazioni di bug è strano. Non è che io sia pagato per dimostrare qualcosa. Ho descritto la situazione come meglio potevo.

Il problema non sono solo io, il problema è apparso dopo il tuo 30° aggiornamento, ma ancora insinui che sono un pazzo e dai la colpa a qualche indicatore ritardato.

Non sono stati lenti per un anno prima?

Ecco un esempio di codice che si blocca dopo 25 minuti su M30:

Ed ecco il risultato:


Caricato

2018.11.14 17:33:32.570 Experts expert Feezzzz (USDCHF,M30) loaded successfully

Ora è la 18.10 Tutto funziona.


 
transcendreamer:


L'esempio allegato non è il codice finito, è sottoscritto in alcuni punti, ma funziona ancora, e sto anche allegando un modello per comodità,

Vi mostrerò subito il codice e il lavoro:

  1. Le funzioni CopyXXX negli indicatori non aspettano il download completo dei dati sincronizzati, ma danno quello che è disponibile. Altrimenti gli indicatori avrebbero completamente congelato tutto.

  2. Apparentemente c'è un problema con il follow-up, se tutti i dati non sono stati sincronizzati la prima volta.
    È necessario passare a una modalità delicata "aspetterò attentamente che il download abbia successo". Per esempio, OnCalculate non viene chiamato.

  3. La cosa negativa è che un'inizializzazione globale con il massimo carico è posta in OnInit dove l'indicatore conta e aspetta per un tempo molto lungo.
    In questo caso l'aggiornamento dei grafici di questo simbolo è bloccato e molti altri partecipanti devono aspettare e non ricevere dati freschi. L'indicatore non dovrebbe prendere risorse per molto tempo. È meglio allungare la lunga inizializzazione passo dopo passo/inizializzazione del simbolo in OnCalculate, contando passo dopo passo.

  4. Ho fatto pompare a questo indicatore circa 800 MB di dati storici sulla rete per la sincronizzazione

  5. L'indicatore ha 512 linee di disegno per le quali viene assegnata esplicitamente della memoria. Questo è estremamente costoso. Si usano solo 100 linee.

  6. Il codice è poco leggibile


 
Stanislav Dray:

Il vostro atteggiamento nei confronti delle segnalazioni di bug è strano. Non è che io sia pagato per dimostrare qualcosa. Ho descritto la situazione come meglio potevo.

Il problema non sono solo io, il problema è apparso dopo il tuo 30° aggiornamento, ma ancora insinui che sono un pazzo e dai la colpa a qualche indicatore ritardato.

Non sono stati lenti per un anno prima?

Ecco un esempio di codice che si blocca dopo 25 minuti su M30:

Ed ecco il risultato:

Ho messo il codice al lavoro. Finora tutto bene.

Un file senza corpo, comunque.

Motivazione: