Pon "Me gusta" y sigue las noticias
Deje un enlace a él, ¡qué los demás también lo valoren!
Evalúe su trabajo en el terminal MetaTrader 5
Init_Sync - librería para MetaTrader 5
- Visualizaciones:
- 764
- Ranking:
- Publicado:
- 2017.05.11 16:25
- ¿Necesita un robot o indicador basado en este código? Solicítelo en la bolsa freelance Pasar a la bolsa
Si en MT cambiamos el marco temporal o el nombre de un símbolo del gráfico, todos los indicadores en el gráfico se descargarán desde el gráfico y volverán a cargarse en el mismo de nuevo. Además, a diferencia de MT4, en MT5 la secuencia de descarga/carga no está determinada por las peculiaridades de la arquitectura interna.
Esta circunstancia a veces provoca problemas no del todo obvios, reclacionados con el hecho de que el OnInit de la nueva copia del indicador cargada puede ejecutarse antes que el OnDeinit de la copia descargada.
Las situaciones en las que este problema se manifiesta se relacionan habitualmente con el deseo de transmitir (explícitamente/implícitamente) una cierta información desde el OnInit de la copia antigua a el OnDeinit de la nueva copia. En otras palabras, será necesario que la nueva copia del indicador sepa de la existencia de la copia antigua y que así no se cargue hasta que la antigua se haya descargado.
Esta biblioteca permite a cualquier indicador implementar semejante sincronización.
Como ejemplo, tomaremos un indicador sencillo
#property indicator_chart_window #property indicator_buffers 1 #property indicator_plots 1 #property indicator_color1 clrRed #property indicator_type1 DRAW_LINE input int Input = 0; double Buffer[]; int OnInit() { SetIndexBuffer(0, Buffer); Print("Init"); return(INIT_SUCCEEDED); } void OnDeinit( const int Reason ) { Print("DeInit"); } void OnChartEvent( const int id, const long& lparam, const double& dparam, const string& sparam ) { } void OnTimer() { } 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[] ) { ArrayCopy(Buffer, open, prev_calculated, prev_calculated); return(rates_total); }
Si iniciamos este indicador y comenzamos a conmutar los marcos temporales o los símbolos de su gráfico, en el diario de registro veremos interrupciones en la alternacia de las líneas "Init" y "Deinit".
Sin embargo, si añadimos al inicio del código del indicador la línea de código siguiente
#include <Init_Sync.mqh> // Sincroniza Init/Deinit de los indicadores
entonces se respetará la alternancia correspondiente.
Para que esta propiedad funcione para cualquier indicador, hay que añadir al inicio del código de este indicador la línea anteriormente mostrada.
Observaciones:
// La biblioteca sincroniza Init/Deinit de los indicadores. // En el indicador deberá existir necesariamente int OnInit(), OnDeinit, OnTimer y OnChartEvent. // Aquellos que no se usen, se escribirán vacíos. #include <TypeToBytes.mqh> // https://www.mql5.com/es/code/16280 #include <crc64.mqh> // https://www.mql5.com/en/blogs/post/683577
Los archivos mqh anexos se encuentran en los enlaces indicados en el código fuente.
Traducción del ruso realizada por MetaQuotes Ltd
Artículo original: https://www.mql5.com/ru/code/18138
El indicador muestra el spread actual con una línea de color.
Exp_XFatlXSatlCloudEl sistema comercial Exp_XFatlXSatlCloud está construido sobre la base del cambio de dirección de la tendencia, representado por el indicador XFatlXSatlCloud.
Dos rectángulos coloreados y construidos entre los valores de dos canales de Bollinger en una barra.
XMA_Keltner_PivotDos rectángulos coloreados y construidos entre los valores de dos canales de Keltner en una barra.