Errori, bug, domande - pagina 310

 

In cosa è diverso?

CHART_WIDTH_IN_BARS Ширина графика в барах
от
CHART_VISIBLE_BARS Количество баров на графике, доступных для отображения
 
Urain:

In cosa è diverso?

Ci può essere un campo vuoto a destra, se è impostato un rientro. In questo caso CHART_VISIBLE_BARS mostrerà un valore più piccolo di CHART_WIDTH_IN_BARS
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы графиков / Свойства графиков
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы графиков / Свойства графиков
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы графиков / Свойства графиков - Документация по MQL5
 
Urain:

In cosa è diverso?

Letteralmente diverso.


 
Rosh:
Qual è la domanda?

1. prendere lo script attorcigliato al post ed eseguirlo sul grafico. Lo script dovrebbe copiare un certo numero di barre ed eseguire lo unwinding delle 20 più vecchie.

Si usa questo modo (capisco che non ci sono controlli e ogni sorta di trappole per gli errori, ma comunque)

int  CopyRates(
   string           symbol_name,       // имя символа
   ENUM_TIMEFRAMES  timeframe,         // период
   int              start_pos,         // откуда начнем 
   int              count,             // сколько копируем
   MqlRates         rates_array[]      // массив, куда будут скопированы данные
   ); 

Quindi con i parametri che ho specificato (numero di barre e M1) lo script funziona ma a volte si rifiuta di funzionare NORMALMENTE. Succede ad un certo numero di barre (ho più di 368700).

A 368800 restituisce molte meno barre (ma sempre un numero diverso - 368732 / 368735 / 368736 o qualcosa del genere).

Ma non funziona sempre correttamente anche a 360000, ci sono stati casi in cui ha copiato solo 10000 barre.

2. La variante in cui vengono specificate due date mi ha davvero scioccato: non solo non accetta 0 come prima data (il che ha senso secondo me), ma copia anche fino a 10000.

Anche se con 0 int come start_time è comprensibile (ho esperienza), si tratta di sovraccarico di funzioni e il compilatore "non capisce" certe cose. Ma è per questo che 10000 barre è una domanda separata che si chiama "in un milione".

Le barre da 10.000 minuti come le intendiamo noi non andranno oltre il 2011, se ho capito bene, non andranno oltre febbraio (e come diventa chiaro da tutto quanto sopra almeno 360000 è caricato di sicuro).

int  CopyRates(
   string           symbol_name,       // имя символа
   ENUM_TIMEFRAMES  timeframe,         // период
   datetime         start_time,        // с какой даты
   datetime         stop_time,         // по какую дату
   MqlRates         rates_array[]      // массив, куда будут скопированы данные
   ); 

PS

Allo stesso tempo, la velocità del normale e del "buggy" (quando lo script copia solo 10000 barre) differisce molte volte.

PPS

Assicuratevi di portare certe sezioni dell'aiuto (o meglio i loro esempi) alla loro conclusione logica, per evitare ambiguità e altre situazioni "sciocche".

Gli assegni devono essere messi in aggiunta, ecc. Inoltre, in questo caso non ci sono riferimenti incrociati nelle descrizioni dei parametri (almeno in timeframe) e non è chiaro che tipo abbiano start_time e start_pos. Immagino che datetime (altrimenti perché il compilatore giurerebbe su 0 come start_time).

//Код по третьему варианту, может я что-то упустил?
//Так ругается - 'CopyRates' - ambiguous call to overloaded function
Copied = CopyRates(Symbol(),PERIOD_M1,0,TimeCurrent(),Rates);
//Так нет, но копирует только 10000 баров
Copied = CopyRates(Symbol(),PERIOD_M1,(datetime)0,TimeCurrent(),Rates);
 

È un bug o la mia mancanza di abilità?

void OnStart()
  {
//---
   long chart_id=ChartID();
   ChartSetInteger(chart_id,CHART_AUTOSCROLL,false);   // отключаем автоскролл
   while(!IsStopped())
     {
      //------------------      
      ChartNavigate(chart_id,CHART_END,-2410); // делаем навигацию, поставим константу
      //------------------
      Sleep(500);
      ChartSetString(chart_id,CHART_COMMENT,ChartGetInteger(chart_id,CHART_FIRST_VISIBLE_BAR));
      ChartRedraw(chart_id);// отображаем первый бар чарта после навигации
      Sleep(500);
     }        
  }


Il grafico va a scatti quando si naviga dalla barra zero. Ho volutamente inserito degli slittamenti tra la navigazione e l'aggiornamento per evidenziare il problema. Ma il bug esiste anche senza slittamenti. Si scopre che ChartNavigate() prima sposta il grafico a zero e poi lo sposta indietro. Inoltre, non lo fa ogni volta.

Almeno, il fatto che il bug non esiste ogni volta che chiamate ChartNavigate(), appare quando lo eseguite senza slittamenti.

Документация по MQL5: Операции с графиками / ChartNavigate
Документация по MQL5: Операции с графиками / ChartNavigate
  • www.mql5.com
Операции с графиками / ChartNavigate - Документация по MQL5
 
Urain:

È un bug o la mia mancanza di abilità?


Il grafico va a scatti quando si naviga dalla barra zero. Ho volutamente inserito degli slittamenti tra la navigazione e l'aggiornamento per evidenziare il problema. Ma il bug esiste anche senza slittamenti. Si scopre che ChartNavigate() prima sposta il grafico a zero e poi lo sposta indietro. Inoltre, non lo fa ogni volta.

Almeno, il fatto che il bug non esiste ogni volta che chiamate ChartNavigate(), appare quando lo eseguite senza slittamenti.


Prova l'esempio di La funzione ChartNavigate non funziona, per favore aiuta
 

Quindi, cosa c'è in questo esempio che è così fondamentalmente diverso dal mio codice?

È solo che nel tuo codice la navigazione è chiamata una volta sola, mentre io ho bisogno di tenere il grafico sulla barra desiderata per tutto il tempo (indipendentemente dalle azioni dell'utente).

Ho provato il tuo esempio e ho eseguito il mio codice senza aggiornamento del grafico (anche se è importante per me perché il programma usa molte trasformazioni grafiche), ma non ha funzionato nemmeno questo. L'idiota rimane. Navigo ancora fino allo stesso punto, e poi navigo fino alla barra zero.

Trovo anche inaccettabile l'uso della navigazione dalla barra corrente, perché l'utente può inavvertitamente spostare il grafico mentre il programma è in esecuzione.

 
Se non è immediatamente chiaro, lasciatemi spiegare: il codice di cui sopra è un tentativo di emulare uno scorrimento automatico su una data barra.
 
Interesting:
La storia è tutta nascosta?
Certo che c'è una storia, ma non tutti i vermi hanno una storia di diffusione!
 
Urain:

Quindi, cosa c'è in questo esempio che è così fondamentalmente diverso dal mio codice?

È solo che nel tuo codice la navigazione è chiamata una volta sola, mentre io ho bisogno di mantenere il grafico sulla barra desiderata per tutto il tempo (indipendentemente dalle azioni dell'utente).

Dopo aver rivisto il tuo esempio, ho eseguito il mio codice senza aggiornamento del grafico (anche se è importante per me, dato che il programma usa anche un sacco di conversioni grafiche), ma non ha aiutato nemmeno questo. L'idiota rimane. Navigo ancora fino allo stesso punto, e poi navigo fino alla barra dello zero.

Trovo anche inaccettabile l'uso della navigazione dalla barra corrente, perché l'utente può inavvertitamente spostare il grafico mentre il programma è in esecuzione.

Ho lo stesso problema con il mio indicatore, solo che viene ridisegnato non appena arriva il tick e non è chiaro come risolverlo?