ChartNavigate durante la inicialización - página 5

 
Ihor Herasko:

No, no lo estoy. Porque esa es exactamente la cuestión. Permítanme explicarles un poco más de qué se trata. El operador utiliza el gráfico como si fuera un probador. El indicador oculta una parte del gráfico real a la derecha de la hora supuestamente actual (de hecho, esta hora está en algún lugar del historial). Al pulsar F12 se muestra la siguiente vela en el gráfico en línea, etc. Por lo tanto, al reiniciar el terminal con el indicador adjunto, éste no devuelve la posición del gráfico al lugar donde el operador terminó sus estudios. Como resultado, recibe un gráfico vacío porque el terminal restablece el gráfico a la última vela real. Y esto a pesar de que el terminal se descargó en un lugar completamente diferente.

Una observación interesante. Lo he comprobado yo mismo, pero no ha cambiado nada. Sigo teniendo los precios más frescos en la recarga.

Sugiero que "sincronicemos nuestros relojes". Estoy probando todo esto en la build 1861. ¿Cuál es su constitución?

Tal vez debería añadir estas líneas delante

   ChartSetInteger(0, CHART_AUTOSCROLL, false);
   ChartSetInteger(0, CHART_SHIFT, false);
   ChartNavigate(0, CHART_END, 0);

¿y luego cambiarlo?

O simplemente no lo desplaces a ningún sitio. También funciona sin problemas.

ChartNavigate(0, CHART_CURRENT_POS, 0)

En qué barra cerré el terminal, y en cuál se abrió.

Sin embargo, esta variante mantiene el gráfico en la ventana inactiva también. Ay. El gráfico se mantiene en su sitio incluso sin este código.

 
Alexey Viktorov:

Tal vez añadir líneas como esta en la parte delantera

¿y luego lo cambias por otro?

Sí, la versión completa lo tiene todo. Si funciona sin reiniciar el terminal, todo está bien. Pero el reinicio conduce a estos problemas. E incluso la solución de muletas no siempre ayuda. Lo investigaré más a fondo.

 
Ihor Herasko:

Sí, la versión completa lo tiene todo. Si funciona sin reiniciar el terminal, todo está bien. Pero el reinicio conduce a problemas como éste. E incluso la solución de muletas no siempre ayuda. Lo investigaré más a fondo.

Pero también he hecho experimentos con el reinicio del terminal. ¿Cuál puede ser el problema? Tengo la actualización descargada, pero he cancelado la actualización por ahora. ¿Tal vez debería actualizar también?
 
Alexey Viktorov:
Pero también he experimentado con el reinicio del terminal. ¿Cuál puede ser el problema? Tengo la actualización descargada, pero hasta ahora he cancelado la actualización. ¿Tal vez debería actualizar también?

Actualizado a 1865 construir. El problema sigue siendo.

Además, resulta que incluso después de la carga completa de los datos en el gráfico y utilizando ChartNavigate() el gráfico se muestra donde se requiere durante un tiempo, pero con un nuevo tick sigue volviendo a la última barra. El botón de autodesplazamiento está desactivado y no se utilizan otros indicadores.

Si se mueve el gráfico manualmente, no ocurre nada de esto. Por ahora estoy perdido. Lo investigaré mañana cuando tenga los ojos frescos para ver si he metido la pata en algún sitio.

 
MetaTrader 5 x64 build 1870 started (MetaQuotes Software Corp.)
Windows 10 (build 17134) x64, IE 11, UAC, Intel Core i3-3120 M  @ 2.50 GHz, Memory: 4720 / 8077 Mb, Disk: 301 / 464 Gb, GMT+2
C:\Users\barab\AppData\Roaming\MetaQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075

Guión. Sólo conCHART_CURRENT_POS es estable. Con CHART_BEGIN y "Shift" positivo, así como con CHART_END y "Shift" negativo, el gráfico no se mueve o salta (se desplaza por sí mismo) a los últimos precios: sintiendo que el botón de autodesplazamiento está activado.

//+------------------------------------------------------------------+
//|                                                       Test_1.mq5 |
//|                              Copyright © 2018, Vladimir Karputov |
//|                                           http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2018, Vladimir Karputov"
#property link      "http://wmua.ru/slesar/"
#property version   "1.000"
#property script_show_inputs
//--- input parameters
input ENUM_CHART_POSITION  InpPosition = CHART_CURRENT_POS;    // Chart Position  
input int                  InpShift    = -1;                   // Shift
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   ResetLastError();
//--- получим номер самого первого видимого на графике бара (нумерация как в таймсерии) 
   int chart_first_visible_bar=ChartFirstVisibleBar();
   if(chart_first_visible_bar==-1)
      return;
//--- 
   string comm="До: Первый бар на графике имеет номер "+IntegerToString(chart_first_visible_bar);
//--- выведем комментарий 
   Print(comm);
   if(ChartNavigate(ChartID(),InpPosition,InpShift))
      Print("ChartNavigate ",EnumToString(InpPosition),",",InpShift," успешно");
   else
      Print("Ошибка №",GetLastError(),", ",EnumToString(InpPosition));
//--- получим номер самого первого видимого на графике бара (нумерация как в таймсерии) 
   chart_first_visible_bar=ChartFirstVisibleBar();
   if(chart_first_visible_bar==-1)
      return;
//--- 
   comm="После: Первый бар на графике имеет номер "+IntegerToString(chart_first_visible_bar);
//--- выведем комментарий 
   Print(comm);
  }
//+------------------------------------------------------------------------------+ 
//| Gets the index of the first visible bar on chart.                            | 
//| Indexing is performed like in timeseries: latest bars have smallest indices. | 
//+------------------------------------------------------------------------------+ 
int ChartFirstVisibleBar(const long chart_ID=0)
  {
//--- prepare the variable to get the property value 
   long result=-1;
//--- reset the error value 
   ResetLastError();
//--- receive the property value 
   if(!ChartGetInteger(chart_ID,CHART_FIRST_VISIBLE_BAR,0,result))
     {
      //--- display the error message in Experts journal 
      Print(__FUNCTION__+", Error Code = ",GetLastError());
     }
//--- return the value of the chart property 
   return((int)result);
  }
//+------------------------------------------------------------------+

1

Archivos adjuntos:
 
Ihor Herasko:

Actualizado a 1865 construir. El problema sigue siendo.

Además, resulta que incluso después de la carga completa de los datos en el gráfico y utilizando ChartNavigate() el gráfico se muestra donde se requiere durante un tiempo, pero con un nuevo tick sigue volviendo a la última barra. El botón de autodesplazamiento está desactivado y no se utilizan otros indicadores.

Si se mueve el gráfico manualmente, no ocurre nada de esto. Por ahora estoy perdido. Mañana lo investigaré de nuevo con la cabeza despejada, quizás he metido la pata en algún sitio.

Sugerí que se actualizara no con la esperanza de que todo se pusiera en su sitio, sino para tener las mismas construcciones.

Igor, ¿haces los experimentos con la versión completa del indicador o con la experimental?

Acabo de recargar el terminal con la build 1865 y todo estaba bien. Estoy escribiendo este mensaje, periódicamente miro el gráfico, cambio las ventanas del gráfico... Sin embargo, el gráfico desplazado permanece inamovible a pesar de los ticks y cambios entrantes.

Este es el código completo

#property indicator_chart_window
#property indicator_plots 0
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   ChartSetInteger(0, CHART_AUTOSCROLL, false);
   ChartSetInteger(0, CHART_SHIFT, false);
   ChartNavigate(0, CHART_END, 0);
   if(ChartNavigate(0, CHART_END, -100))
      Comment("Успешно");
   else
      Comment("Ошибка №", GetLastError());   
  //ChartRedraw(ChartID());
//---
   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[])
  {
//---
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+

void OnDeinit(const int reason)
{
 Comment("");
}/********************************************************************/
Por alguna razón, no creo que un terminal funcione así y otro así.
 
Alexey Viktorov:

Sugerí que se actualizara no con la esperanza de que todo encajara, sino para que las construcciones fueran las mismas.

Igor, ¿haces los experimentos con la versión completa del indicador o con una experimental?

Acabo de recargar el terminal con la build 1865 y todo estaba bien. Estoy escribiendo este mensaje, periódicamente miro el gráfico, cambio las ventanas del gráfico... Sin embargo, el gráfico desplazado permanece inamovible a pesar de los ticks y cambios entrantes.

Este es el código completo

De alguna manera no creo que un terminal funcione así y el otro no.

Intenta mirar un símbolo que no tiene ninguna historia

 
Artyom Trishkin:

Intenta buscar un símbolo que no tenga ninguna historia

¿Cómo hacerlo?

Según la descripción en el primer post del hilo, es un indicador, se cuelga en un gráfico abierto - significa que el historial ya está cargado. ¿Verdad? Cuelgue el indicador, cierre el terminal, inicie el terminal, --- ¿dónde puede ir la historia? Si ya estaba allí...

En segundo lugar, abrí el símbolo EURMXN. Sin mirar en el terminal, ¿se puede saber qué es? )))

 
Alexey Viktorov:

¿Cómo hacerlo?

Según la descripción en el primer post del hilo, es un indicador, se cuelga en un gráfico abierto - significa que el historial ya está cargado. ¿Verdad? Cuelgue el indicador, cierre el terminal, inicie el terminal, --- ¿dónde puede ir la historia? Si ya estaba allí...

La segunda fue abrir el símbolo EURMXN. ¿Sin mirar en el terminal se puede saber qué es? )))

No, no puedo...

Lo que quería decir es que probablemente la carga de datos históricos hace que el gráfico se desplace hacia su final.

Pruebe esto: ponga el indicador en un marco temporal de minutos, cierre el terminal y ábralo después de una hora - el terminal empieza a cargar los minutos que faltan - ¿qué pasará con el gráfico? ¿Cambiará?

 

¡¡¡Qué noticia!!!

Tenía abiertos los gráficos del periodo H1, H4 y los usé para comprobarlo. Ahora he empezado a experimentar con M1, M5, M30... ¡¡¡no funciona!!!

Cambiando a H1 o H4 no hay problema aunque haya una nueva hora. Esto fue probado ayer o hoy temprano o ambos ayer y hoy... no es la cuestión, pero me he dejado llevar por el cambio de hora.