Discusión sobre el artículo "Recetas MQL5 - Desarrollo de un indicador multidivisa para el análisis de la divergencia de precios"
¿Es sólo un error tipográfico o debería serlo?
No importa cuántas veces lo he intentado, todas las funciones del "Escuadrón de copia" nunca devuelven cero, sólo -1 o >0.
//+------------------------------------------------------------------+ //| Comprueba el número de datos disponibles para todos los caracteres ||| //+------------------------------------------------------------------+ bool CheckAvailableData() { int attempts=100; //--- for(int s=0; s<SYMBOLS_COUNT; s++) { //--- Si existe tal carácter if(symbol_names[s]!=empty_symbol) { datetime time[]; // Array para comprobar el número de barras int total_period_bars =0; // Número de barras del periodo actual datetime terminal_first_date =NULL; // Primera fecha de datos disponibles del periodo actual en el terminal //--- Obtener la primera fecha de los datos del periodo actual en el terminal terminal_first_date=(datetime)SeriesInfoInteger(symbol_names[s],Period(),SERIES_TERMINAL_FIRSTDATE); //--- Obtener el número de barras disponibles a partir de la fecha especificada total_period_bars=Bars(symbol_names[s],Period(),terminal_first_date,TimeCurrent()); //--- Compruebe la disposición de estas barras for(int i=0; i<attempts; i++) { //--- Copiar la cantidad especificada de datos if(CopyTime(symbol_names[s],Period(),0,total_period_bars,time)) { //--- Si se copia la cantidad requerida, detener el bucle if(ArraySize(time)>=total_period_bars) break; } } //--- Si se copian menos datos, hay que hacer otro intento. if(ArraySize(time)==0 || ArraySize(time)<total_period_bars) { msg_last=msg_prepare_data; ShowCanvasMessage(msg_prepare_data); OC_prev_calculated=0; return(false); } } } //--- Si en el modo de línea vertical para el punto de partida de la diferencia de precios, salir if(StartPriceDivergence==VERTICAL_LINE) return(true); else { datetime time[]; // Array para comprobar el número de barras int total_period_bars =0; // Número de barras del periodo actual datetime terminal_first_date =NULL; // Primera fecha de datos disponibles del periodo actual en el terminal //--- Obtener la primera fecha de los datos del periodo actual en el terminal for(int i=0; i<attempts; i++) if((terminal_first_date=(datetime)SeriesInfoInteger(Symbol(),Period(),SERIES_FIRSTDATE))>0) break; //--- Obtener el número de barras disponibles a partir de la fecha especificada for(int i=0; i<attempts; i++) if((total_period_bars=(int)SeriesInfoInteger(Symbol(),timeframe_start_point,SERIES_BARS_COUNT))>0) break; //--- Compruebe la disposición de estas barras for(int i=0; i<attempts; i++) //--- Copiar la cantidad especificada de datos if(CopyTime(Symbol(),timeframe_start_point, terminal_first_date+PeriodSeconds(timeframe_start_point),TimeCurrent(),time)>0) break; //--- Si se copian menos datos, debe hacerse otro intento. if(ArraySize(time)<=0 || total_period_bars<=0) { msg_last=msg_prepare_data; ShowCanvasMessage(msg_prepare_data); OC_prev_calculated=0; return(false); } } //--- return(true); }
¿Es sólo un error tipográfico o debería serlo?
No importa cuántas veces lo haya intentado, todas las funciones de la "brigada de copia" nunca devuelven cero, sólo -1 o >0.
Usted podría quitar el si en absoluto. En este caso no es crítico.
En general, la carga de datos históricos en un símbolo no se produce de la forma en que está escrito en la ayuda.
De hecho, resulta así
si desde el programa mql5 se solicitan datos de alguna serie temporal utilizando, por ejemplo, la función CopyTime
y estos datos no están en el terminal (no se han cargado todavía), el terminal descargará estos datos del servidor no en la cantidad solicitada (en el ejemplo de la ayuda son 100 barras),
sino tantas barras de la serie temporal solicitada como el parámetro "Máx barras en gráfico" permita "colocar" en la RAM.
Basta con solicitar una sola barra de un periodo superior, digamos PERIOD_W1, ya que todo el histórico se descargará del servidor.
En general, la carga de datos históricos en un símbolo no se produce de la forma en que está escrito en la ayuda.
De hecho, resulta así
si desde el programa mql5 se solicitan datos de alguna serie temporal utilizando, por ejemplo, la función CopyTime
y estos datos no están en el terminal (no se han cargado todavía), el terminal descargará estos datos del servidor no en la cantidad solicitada (en el ejemplo de la ayuda son 100 barras),
sino tantas barras de la serie temporal solicitada como el parámetro "Máx barras en gráfico" permita "colocar" en la RAM.
Basta con solicitar una sola barra de un periodo superior, digamos PERIOD_W1, ya que se descargará todo el histórico del servidor.
La ayuda puede decir lo que quieras. Eres libre de hacer lo que creas conveniente. ;)
El ejemplo de la ayuda fue comentado en otro artículo: Cómo preparar cotizaciones de MetaTrader 5 para otros programas >>>.
El certificado puede decir lo que tú quieras que diga. Eres libre de hacer lo que creas conveniente. ;)
El ejemplo de la ayuda lo comenté en otro artículo: Cómo preparar cotizaciones de MetaTrader 5 para otros programas >>>.
Eso es lo que hice yo. Acabo de ver el cálculo de las "barras descargadas" restantes del servidor en tu código.
Y pensé - al terminal le da igual, bombea todo lo que necesita para formarse.
Al final de tu artículo escribes:"Este indicador puede desarrollarse ilimitadamente para mejor".
En mi opinión, la contemplación de la divergencia de precios es poco útil para el ojo humano. ¡Un humano no es un robot!
Pero es un tema interesante para un robot.
Usted ha sugerido varias opciones de representación:
1. Desde la línea.
2. "día".
Actualmente estoy trabajando en algo similar, sólo que en modo "semana".
Al final de tu artículo escribes:"Este indicador puede desarrollarse ilimitadamente para mejor".
En mi opinión, la contemplación de la divergencia de precios es poco útil para el ojo humano. ¡Un humano no es un robot!
Pero es un tema interesante para un robot.
Usted ha sugerido varias opciones de representación:
1. Desde la línea.
2. "día".
Actualmente estoy trabajando en algo similar, sólo que en modo "semana".
No estoy seguro de si podré escribir algo más pronto, ya que estoy lidiando con otros asuntos. Pero según este artículo se supone que el desarrollo estaba todavía en los cálculos multidivisa y la visualización de estos cálculos en el lienzo.
Sí, el hombre no es un robot, pero a veces hay que ver el tema de estudio de otra manera para hacerse una idea. ;)
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Usted acepta la política del sitio web y las condiciones de uso
Artículo publicado Recetas MQL5 - Desarrollo de un indicador multidivisa para el análisis de la divergencia de precios:
En este artículo veremos el desarrollo de un indicador multidivisa para el análisis de la divergencia de precios en un periodo de tiempo determinado. Ya hemos visto muchos momentos importantes en el anterior artículo sobre la programación de indicadores multidivisa: "Desarrollo de un indicador multidivisa de volatilidad en MQL5". Por eso, esta vez sólo nos detendremos en las funciones nuevas, o bien en aquellas funciones que hayan sufrido cambios significativos. Si es la primera vez que se encuentra con el tema de los indicadores multidivisa, entonces le recomendamos que lea en primer lugar el artículo anterior.
Autor: Anatoli Kazharski