Scripts: sChartsSynchroScroll

 

sChartsSynchroScroll:

El script proporciona un desplazamiento síncrono para todos los gráficos abiertos en el terminal del cliente.

Autor: Dmitry Fedoseev

[Eliminado]  

¿Entiendo correctamente que este script funciona simultáneamente con gráficos de diferentes marcos temporales (como se hace aquí)?

El estilo del código recuerda a MQL4. Y esto no es una mala cosa. Gracias.

[Eliminado]  

Existe un problema de desincronización de los gráficos a izquierda y derecha de la línea de tiempo total. Me gustaría que las barras estuvieran sincronizadas por tiempo en toda la anchura del gráfico.

Sugiero a los desarrolladores que piensen de nuevo (quizás, que lo pongan a debate) en la posibilidad de visualizar el gráfico con y sin "agujeros"-barras. En este caso, sería solo visualización, es decir, las barras "agujeros" no estarían disponibles en MQL5.

 

Dmitry, probablemente sería más fácil hacerlo a través de CHARTEVENT_CLICK en lugar de hacer un bucle...

aquí un ejemplo de sincronización de gráficos de una divisa

//------------------------------------------------------------------ OnChartEvent
void OnChartEvent(const int id, const long& lparam, const double& dparam, const string& sparam)
{
 if (id==CHARTEVENT_CLICK)
 {
   long cid=ChartFirst();
   long fbar=ChartGetInteger(ChartID(), CHART_FIRST_VISIBLE_BAR);
   datetime tm[], tm1[];
   int rez=CopyTime(Symbol(), Period(), 0, fbar, tm); if (rez<fbar) return;
   while (cid!=-1)
   {
    ChartSetInteger(cid, CHART_AUTOSCROLL, false); ChartSetInteger(cid, CHART_SHIFT, false);
    if (cid!=ChartID() && ChartSymbol(cid)==Symbol()) 
    {
     rez=CopyTime(ChartSymbol(cid), ChartPeriod(cid), TimeCurrent(), tm[0], tm1); if (rez<0) break;
     ChartNavigate(cid, CHART_END, rez-ChartGetInteger(cid, CHART_WIDTH_IN_BARS)+2);
     ChartRedraw(cid);
    }
    cid=ChartNext(cid);
   }
 }
}

¡y ya está!

 
getch:

¿Entiendo correctamente que este script funciona simultáneamente con gráficos de diferentes marcos temporales (como se hace aquí)?

El estilo del código recuerda a MQL4. Y esto no es una mala cosa. Gracias.


Funcionará con diferentes marcos temporales.
 
sergeev:

Dimitri, probablemente sería más fácil de hacer a través de CHARTEVENT_CLICK en lugar de bucle...

aquí un ejemplo de sincronización de gráficos de una divisa

¡y ya está!

No todo es tan sencillo. Su función sincroniza las barras en el borde izquierdo del gráfico, lo que no es muy conveniente para el estudio visual de la historia. También deberías desactivar el desplazamiento del gráfico, que tampoco es muy conveniente (aunque, es cuestión de gustos). Los desarrolladores podrían añadir la posibilidad de obtener y establecer la sangría desde el borde derecho o la navegación por el tiempo en general, muchas funciones se hacen en un estilo tan universal que se puede pasar el número de barra o el tiempo. Además, el evento se procesa sólo para el gráfico en el que trabaja el script.

----------------------------------------------------------------------------------------------------------------

OnChartEvent

OnChartEvent() es un manejador del grupo de eventos ChartEvent:

...

...

La función puede ser llamada sólo en EAs y debe tener tipo void y 4 parámetros:

----------------------------------------------------------------------------------------------------------------

Elmanejo de eventos sólo funciona en Asesores Expertos. Sólo puede haber un Asesor Experto en un gráfico, no se debe ocupar el lugar de un Asesor Experto con otros auxiliares y prácticamente inútiles. Esta es mi convicción de que las herramientas auxiliares que no están directamente relacionadas con la ejecución de operaciones no deben hacerse en forma de Asesores Expertos, con algunas excepciones de extrema necesidad.

 
Integer:

OnChartEvent

OnChartEvent() es un manejador del grupo de eventos ChartEvent:

...

...

Lafunción puede ser llamada sólo en Asesores Expertos y debe tener tipo void y 4 parámetros:

----------------------------------------------------------------------------------------------------------------

El procesamiento de eventos sólo funciona en los Asesores Expertos. Sólo puede haber un Asesor Experto en un gráfico, no se debe ocupar el lugar de un Asesor Experto con otros auxiliares y prácticamente inútiles. Esta es mi convicción de que las herramientas auxiliares no directamente relacionadas con la ejecución de operaciones no deben hacerse en forma de Asesores Expertos, con algunas excepciones de extrema necesidad.

Esto ya no es así, estén atentos a los anuncios - https://www.mql5.com/ru/forum/23/page4:

Terminal Cliente MetaTrader 5 build 245

  1. Terminal: Corregido el error de contabilización de los fondos de margen libre en los activos (en la pestaña Exposición).
  2. Terminal: Corregido el funcionamiento de la propiedad del gráfico "Gráfico en primer plano".
  3. Terminal: Corregida y rediseñada la ventana de previsualización del gráfico.
  4. Terminal: Corregido un error en el trabajo con variables globales temporales.
  5. Terminal: Combinadas las barras de herramientas "Estándar" y "Gráficos".
  6. MQL5: Correcciones en los fallos y mensajes del foro.
  7. MQL5: Cambiado el principio de funcionamiento de las funciones Copy* para los Asesores Expertos y scripts - ahora las funciones esperarán a descargar y construir los datos solicitados. El tiempo de espera de los datos solicitados no superará los 30 segundos. Una descripción más detallada estará disponible en la Ayuda de MQL5 en un futuro próximo.
  8. MQL5: Añadida la posibilidad de procesamiento de eventos por indicadores personalizados, similar a los Asesores Expertos. Una descripción más detallada estará disponible en la Ayuda MQL5 en un futuro próximo.

.

 
Integer писал(а) :

No es tan sencillo. Su función sincroniza las barras en el borde izquierdo del gráfico, lo que no es muy conveniente para el estudio visual de la historia.

Pero es posible sincronizar las barras por cualquier borde. y proporcionar al operador botones para elegir - por el centro, por la derecha, por la izquierda....

También habría que desactivar el desplazamiento del gráfico, que tampoco es muy conveniente (aunque es cuestión de gustos).

Los desarrolladores podrían añadir la posibilidad de obtener y establecer la sangría desde el borde derecho o la navegación por el tiempo en general, muchas funciones se hacen en un estilo tan universal que se puede pasar el número de barra o el tiempo.

esta función está disponible por cierto. CHART_SHIFT_SIZE

ver el ejemplo ObjChartSample.mq5

 

Algo parece estar mal con CHART_FIRST_VISIBLE_BAR.

Si se hace ChartNavigate() a un número obviamente mayor que el número en el que se puede ver el gráfico, entonces

ChartGetInteger(ChartID(),CHART_FIRST_VISIBLE_BAR) se hace mayor que Bars(ChartSymbol(ChartID()),ChartPeriod(ChartID())).

Ejemplo en el script 2.mq5. Ejecuta el script, espera un poco.

Archivos adjuntos:
2.mq5  2 kb
 

algo me dice que el terminal no está al día.

porque si vuelves a ejecutar el script inmediatamente, funciona a la primera.

Tal vez necesitamos controlar el tiempo

¿Quizás SeriesInfoInteger ayude?

[Eliminado]  
Integer, sergeev, según vuestros posts, tengo la desagradable impresión de que MQL5 y MT5 son bastante brutos.