Indicador técnico

Colección de Datos Horarios en MetaTrader 5: Buffers Binarios para Traders
MetaTrader5
Colección de Datos Horarios en MetaTrader 5: Buffers Binarios para Traders

Propósito Si eres trader, probablemente ya sepas lo importante que es tener datos precisos para tus análisis. Este indicador simple que te presento permite recolectar datos en un formato fácil de utilizar, donde cada hora se almacena como un vector de buffers binarios. Además, se incluye un último buffer que almacena la hora en sí. Cuando recolectes datos de otros indicadores, por ejemplo, a un archivo CSV utilizando funciones como CopyBuffer, este indicador te permite añadir columnas auxiliares para la hora que estás recolectando. ¡Así puedes tener todo más organizado! Este código es ideal para quienes buscan recopilar datos, ya sea para modelar o para fines de aprendizaje automático, ya que tendrás variables dummy listas (buffers de 0 a 23) y una variable de hora (buffer 24) que puedes usar en tus modelos. Análisis del Código Se comienza declarando el número de buffers y de gráficos a 25: #property indicator_chart_window #property indicator_buffers 25 #property indicator_plots 25 Etiquetado de Buffers Se delinearon las etiquetas de los buffers para la ventana de datos: #property indicator_label1 "Hora 00" #property indicator_label2 "Hora 01" #property indicator_label3 "Hora 02" #property indicator_label4 "Hora 03" #property indicator_label5 "Hora 04" #property indicator_label6 "Hora 05" #property indicator_label7 "Hora 06" #property indicator_label8 "Hora 07" #property indicator_label9 "Hora 08" #property indicator_label10 "Hora 09" #property indicator_label11 "Hora 10" #property indicator_label12 "Hora 11" #property indicator_label13 "Hora 12" #property indicator_label14 "Hora 13" #property indicator_label15 "Hora 14" #property indicator_label16 "Hora 15" #property indicator_label17 "Hora 16" #property indicator_label18 "Hora 17" #property indicator_label19 "Hora 18" #property indicator_label20 "Hora 19" #property indicator_label21 "Hora 20" #property indicator_label22 "Hora 21" #property indicator_label23 "Hora 22" #property indicator_label24 "Hora 23" #property indicator_label25 "Hora" Declaraciones de Buffers A continuación, se declaran los buffers y una variable entera para la hora del día que se calculará más adelante. double hourBuffer0[]; double hourBuffer1[]; double hourBuffer2[]; double hourBuffer3[]; double hourBuffer4[]; double hourBuffer5[]; double hourBuffer6[]; double hourBuffer7[]; double hourBuffer8[]; double hourBuffer9[]; double hourBuffer10[]; double hourBuffer11[]; double hourBuffer12[]; double hourBuffer13[]; double hourBuffer14[]; double hourBuffer15[]; double hourBuffer16[]; double hourBuffer17[]; double hourBuffer18[]; double hourBuffer19[]; double hourBuffer20[]; double hourBuffer21[]; double hourBuffer22[]; double hourBuffer23[]; double hourBuffer[]; int bar_hour; Indexación y Dibujo de Gráficos Se configura el índice para todos los buffers como datos y se desactiva el dibujo en el gráfico mediante un bucle. Al intentar hacer la indexación con un bucle, se presentó un error al pasar, por ejemplo, hourBuffer[q] a SetIndexBuffer, por lo que se hizo uno por uno; pero el bucle funciona bien para PlotIndexSetInteger, que es útil. // Asignar buffers a índice, ocultar del gráfico, mostrar en la ventana de datos SetIndexBuffer(0, hourBuffer0, INDICATOR_DATA); SetIndexBuffer(1, hourBuffer1, INDICATOR_DATA); SetIndexBuffer(2, hourBuffer2, INDICATOR_DATA); SetIndexBuffer(3, hourBuffer3, INDICATOR_DATA); SetIndexBuffer(4, hourBuffer4, INDICATOR_DATA); SetIndexBuffer(5, hourBuffer5, INDICATOR_DATA); SetIndexBuffer(6, hourBuffer6, INDICATOR_DATA); SetIndexBuffer(7, hourBuffer7, INDICATOR_DATA); SetIndexBuffer(8, hourBuffer8, INDICATOR_DATA); SetIndexBuffer(9, hourBuffer9, INDICATOR_DATA); SetIndexBuffer(10, hourBuffer10, INDICATOR_DATA); SetIndexBuffer(11, hourBuffer11, INDICATOR_DATA); SetIndexBuffer(12, hourBuffer12, INDICATOR_DATA); SetIndexBuffer(13, hourBuffer13, INDICATOR_DATA); SetIndexBuffer(14, hourBuffer14, INDICATOR_DATA); SetIndexBuffer(15, hourBuffer15, INDICATOR_DATA); SetIndexBuffer(16, hourBuffer16, INDICATOR_DATA); SetIndexBuffer(17, hourBuffer17, INDICATOR_DATA); SetIndexBuffer(18, hourBuffer18, INDICATOR_DATA); SetIndexBuffer(19, hourBuffer19, INDICATOR_DATA); SetIndexBuffer(20, hourBuffer20, INDICATOR_DATA); SetIndexBuffer(21, hourBuffer21, INDICATOR_DATA); SetIndexBuffer(22, hourBuffer22, INDICATOR_DATA); SetIndexBuffer(23, hourBuffer23, INDICATOR_DATA); SetIndexBuffer(24, hourBuffer, INDICATOR_DATA); for(int i = 0; i < 24; i++) { PlotIndexSetInteger(i, PLOT_DRAW_TYPE, DRAW_NONE); PlotIndexSetInteger(i, PLOT_SHOW_DATA, true); } return(INIT_SUCCEEDED); Función OnCalculate y Bucle del Programa Ahora pasamos a la función OnCalculate: Aquí se reinician todos los buffers a cero y se cambia solo el correspondiente a la hora actual a uno. Posiblemente haya una ganancia de eficiencia a obtener aquí, pero eso será para más adelante. if (rates_total 0 ? prev_calculated - 1 : 0); for (int i = start; i &lt; rates_total; i++) { // Calcular hora (0..23) para la barra i bar_hour = (int)((time[i] % 86400) / 3600); // 1) Establecer TODOS los 24 buffers para la barra i a 0 hourBuffer0[i] = 0.0; hourBuffer1[i] = 0.0; hourBuffer2[i] = 0.0; hourBuffer3[i] = 0.0; hourBuffer4[i] = 0.0; hourBuffer5[i] = 0.0; hourBuffer6[i] = 0.0; hourBuffer7[i] = 0.0; hourBuffer8[i] = 0.0; hourBuffer9[i] = 0.0; hourBuffer10[i] = 0.0; hourBuffer11[i] = 0.0; hourBuffer12[i] = 0.0; hourBuffer13[i] = 0.0; hourBuffer14[i] = 0.0; hourBuffer15[i] = 0.0; hourBuffer16[i] = 0.0; hourBuffer17[i] = 0.0; hourBuffer18[i] = 0.0; hourBuffer19[i] = 0.0; hourBuffer20[i] = 0.0; hourBuffer21[i] = 0.0; hourBuffer22[i] = 0.0; hourBuffer23[i] = 0.0; hourBuffer[i] = EMPTY_VALUE; // 2) Ahora establecer SOLO el buffer coincidente a 1 switch (bar_hour) { case 0: hourBuffer0[i] = 1.0; hourBuffer[i] = bar_hour; break; case 1: hourBuffer1[i] = 1.0; hourBuffer[i] = bar_hour; break; case 2: hourBuffer2[i] = 1.0; hourBuffer[i] = bar_hour; break; case 3: hourBuffer3[i] = 1.0; hourBuffer[i] = bar_hour; break; case 4: hourBuffer4[i] = 1.0; hourBuffer[i] = bar_hour; break; case 5: hourBuffer5[i] = 1.0; hourBuffer[i] = bar_hour; break; case 6: hourBuffer6[i] = 1.0; hourBuffer[i] = bar_hour; break; case 7: hourBuffer7[i] = 1.0; hourBuffer[i] = bar_hour; break; case 8: hourBuffer8[i] = 1.0; hourBuffer[i] = bar_hour; break; case 9: hourBuffer9[i] = 1.0; hourBuffer[i] = bar_hour; break; case 10: hourBuffer10[i] = 1.0; hourBuffer[i] = bar_hour; break; case 11: hourBuffer11[i] = 1.0; hourBuffer[i] = bar_hour; break; case 12: hourBuffer12[i] = 1.0; hourBuffer[i] = bar_hour; break; case 13: hourBuffer13[i] = 1.0; hourBuffer[i] = bar_hour; break; case 14: hourBuffer14[i] = 1.0; hourBuffer[i] = bar_hour; break; case 15: hourBuffer15[i] = 1.0; hourBuffer[i] = bar_hour; break; case 16: hourBuffer16[i] = 1.0; hourBuffer[i] = bar_hour; break; case 17: hourBuffer17[i] = 1.0; hourBuffer[i] = bar_hour; break; case 18: hourBuffer18[i] = 1.0; hourBuffer[i] = bar_hour; break; case 19: hourBuffer19[i] = 1.0; hourBuffer[i] = bar_hour; break; case 20: hourBuffer20[i] = 1.0; hourBuffer[i] = bar_hour; break; case 21: hourBuffer21[i] = 1.0; hourBuffer[i] = bar_hour; break; case 22: hourBuffer22[i] = 1.0; hourBuffer[i] = bar_hour; break; case 23: hourBuffer23[i] = 1.0; hourBuffer[i] = bar_hour; break; } string localHourText = HourToText(bar_hour); Comment("La hora es: ", localHourText); } // Retornar número de barras procesadas return (rates_total); Función para Añadir Estilo al Comentario Por último, una función para generar un comentario: Esto es, en efecto, un chequeo de depuración, pero he decidido dejarlo. string HourToText(int bh) { string TextHour; switch (bh) { case 0: TextHour = "12 am"; break; case 1: TextHour = "1 am"; break; case 2: TextHour = "2 am"; break; case 3: TextHour = "3 am"; break; case 4: TextHour = "4 am"; break; case 5: TextHour = "5 am"; break; case 6: TextHour = "6 am"; break; case 7: TextHour = "7 am"; break; case 8: TextHour = "8 am"; break; case 9: TextHour = "9 am"; break; case 10: TextHour = "10 am"; break; case 11: TextHour = "11 am"; break; case 12: TextHour = "12 pm"; break; case 13: TextHour = "1 pm"; break; case 14: TextHour = "2 pm"; break; case 15: TextHour = "3 pm"; break; case 16: TextHour = "4 pm"; break; case 17: TextHour = "5 pm"; break; case 18: TextHour = "6 pm"; break; case 19: TextHour = "7 pm"; break; case 20: TextHour = "8 pm"; break; case 21: TextHour = "9 pm"; break; case 22: TextHour = "10 pm"; break; case 23: TextHour = "11 pm"; break; default: TextHour = "Desconocido"; break; } return TextHour; } Ten en cuenta que esto solo se muestra a través de la ventana de datos por el momento. ¡Feliz Navidad y próspero Año Nuevo 2025 a todos!

2024.12.25
Bandas de Bollinger de Fibonacci: Un Indicador Potente para MetaTrader 5
MetaTrader5
Bandas de Bollinger de Fibonacci: Un Indicador Potente para MetaTrader 5

¡Hola traders! Hoy quiero compartir con ustedes un indicador que se ha convertido en una herramienta esencial para muchos de nosotros: las Bandas de Bollinger de Fibonacci. Este indicador es una conversión del Pine Script de Rashad al lenguaje MQL5, y combina la potencia de las Bandas de Bollinger con los niveles de Fibonacci, permitiéndonos identificar de manera efectiva zonas de soporte y resistencia dinámicas. Características: Calcula automáticamente los niveles de Fibonacci en las Bandas de Bollinger. Ofrece una perspectiva única para operaciones de ruptura y reversión. Totalmente compatible con MetaTrader 5. Es perfecto para aquellos que buscan mejorar su análisis técnico. ¡Descárgalo y pruébalo hoy mismo! Aquí tienes el código de Pine Script: study(shorttitle="FBB", title="Bandas de Bollinger de Fibonacci", overlay=true) length = input(200, minval=1) src = input(hlc3, title="Fuente") mult = input(3.0, minval=0.001, maxval=50) basis = vwma(src, length) dev = mult * stdev(src, length) upper_1= basis + (0.236*dev) upper_2= basis + (0.382*dev) upper_3= basis + (0.5*dev) upper_4= basis + (0.618*dev) upper_5= basis + (0.764*dev) upper_6= basis + (1*dev) lower_1= basis - (0.236*dev) lower_2= basis - (0.382*dev) lower_3= basis - (0.5*dev) lower_4= basis - (0.618*dev) lower_5= basis - (0.764*dev) lower_6= basis - (1*dev) plot(basis, color=fuchsia, linewidth=2) p1 = plot(upper_1, color=white, linewidth=1, title="0.236") p2 = plot(upper_2, color=white, linewidth=1, title="0.382") p3 = plot(upper_3, color=white, linewidth=1, title="0.5") p4 = plot(upper_4, color=white, linewidth=1, title="0.618") p5 = plot(upper_5, color=white, linewidth=1, title="0.764") p6 = plot(upper_6, color=red, linewidth=2, title="1") p13 = plot(lower_1, color=white, linewidth=1, title="0.236") p14 = plot(lower_2, color=white, linewidth=1, title="0.382") p15 = plot(lower_3, color=white, linewidth=1, title="0.5") p16 = plot(lower_4, color=white, linewidth=1, title="0.618") p17 = plot(lower_5, color=white, linewidth=1, title="0.764") p18 = plot(lower_6, color=green, linewidth=2, title="1") Ejemplo en MQL5:

2024.12.04
Calendario Económico: Monitoreo y Almacenamiento para Backtesting en MetaTrader 5
MetaTrader5
Calendario Económico: Monitoreo y Almacenamiento para Backtesting en MetaTrader 5

Para resumirlo de manera sencilla: el calendario económico integrado en MetaTrader 5 no está (completamente) sincronizado con las cotizaciones históricas.Las cotizaciones están marcadas con marcas de tiempo de acuerdo con las zonas horarias que estaban en efecto en el servidor en el momento de la formación de cada barra correspondiente.Una vez que se forman las barras, permanecen inalteradas, incluyendo sus marcas de tiempo. Por otro lado, el calendario económico proporciona información sobre eventos (pasados, presentes y futuros) vinculados a la zona horaria actual del servidor. Dado que muchos brokers siguen un horario de zona horaria específico, que incluye la activación y desactivación del horario de verano, las marcas de tiempo de los eventos históricos pueden estar desplazadas por 1 hora respecto a las barras asociadas, durante aproximadamente la mitad de cada año.Aparte de eso, los brokers a veces cambian las zonas horarias de manera más radical que simplemente cambiar el horario de verano. Las cotizaciones históricas pueden aparecer desplazadas varias horas a la izquierda o a la derecha en relación con el momento de los eventos económicos que originalmente ocurrieron, pero que ahora se reportan en el calendario con la zona horaria actualizada del servidor.Dado que las noticias provienen de diferentes países con sus propios horarios de verano y tu servidor puede estar ubicado en una región con otro horario, el tiempo de las publicaciones de noticias puede "saltar" visualmente hacia adelante y hacia atrás en los gráficos incluso de manera más peculiar (por ejemplo, durante varias semanas en primavera y otoño).Todo esto no parece tan importante en línea, pero ¿qué pasa si queremos probar una estrategia basada en noticias?Podrías decir que el calendario no es compatible de forma nativa en el tester de MetaTrader, pero muchos traders disfrutan operar con noticias y todos los demás que no lo hacen deberían seguir las noticias para simplemente apartarse del mercado antes de que se vuelva loco durante las publicaciones. Así que el backtesting con el calendario es importante. Es por eso que es muy lógico exportar el calendario a un almacenamiento externo (archivo, base de datos) y luego importarlo al tester. Una de estas herramientas de archivo para la experiencia de calendario en el tester se presentó en el libro de algotrading.Y aquí nos encontramos con el problema de la desincronización de las cotizaciones históricas con los eventos históricos. Por simplicidad, este problema se ha dejado sin resolver en el libro.Ahora está solucionado gracias a la versión extendida de CalendarCache.mqh y el indicador de demostración CalendarMonitorCachedTZ.mq5. Esta es solo una versión ligeramente modificada de CalendarMonitorCached.mq5 del libro.El indicador monitorea eventos de noticias y actualiza dinámicamente una tabla en el gráfico con varios eventos pasados y futuros.Todo el trabajo relacionado con la corrección de tiempo se realiza en segundo plano - en la otra biblioteca pública TimeServerDST.mqh. Para entender mejor cómo funciona la corrección de tiempo, se puede utilizar el script &nbsp;CalendarCSVForDates.mq5&nbsp; y comparar archivos CSV con y sin corrección lado a lado.Y aquí se muestra cómo la biblioteca se incorpora en el código fuente de ambos programas - el script y este indicador.#include &lt;TimeServerDST.mqh&gt; // incluyendo antes de Calendar cache habilita el soporte de corrección de zona horaria #include &lt;MQL5Book/CalendarFilterCached.mqh&gt; #include &lt;MQL5Book/CalendarCache.mqh&gt; Como en el indicador original, hay una entrada de cadena CalendarCacheFile, donde puedes proporcionar un nombre de archivo para escribir o leer.Cuando el indicador se adjunta a un gráfico en línea con un CalendarCacheFile vacío, funciona con el calendario integrado en tiempo real.Cuando el indicador se ejecuta con un nombre específico en CalendarCacheFile y el archivo no existe, el indicador exporta los registros del calendario en el archivo de caché (crea el archivo) y finaliza. Esta es la etapa en la que las marcas de tiempo deben/pueden ser corregidas (ver FixCachedTimesBySymbolHistory a continuación).Cuando el indicador se ejecuta con un nombre de archivo de caché existente en CalendarCacheFile, carga la caché y trabaja con esta copia de la misma manera que con el calendario integrado. Esto es especialmente útil para el tester.Por favor, no olvides que el tester requiere especificar archivos adicionales, en nuestro caso - el archivo de calendario en línea preparado, en la directiva #property tester_file O deberías colocar el archivo en la carpeta común C:/Users/&lt;Usuario&gt;/AppData/Roaming/MetaQuotes/Terminal/Common/.Por supuesto, la caché también puede ser cargada en un EA durante pruebas de retroceso y optimizaciones.La cadena de entrada FixCachedTimesBySymbolHistory se procesa de la siguiente manera.Si está vacía, el indicador guarda la caché sin correcciones de tiempo.Para habilitar correcciones de tiempo durante la exportación, deberías especificar un símbolo, que se usará para la detección empírica de las zonas horarias históricas del servidor. Funciona basado en el historial de cotizaciones H1, preferiblemente "XAUUSD" o "EURUSD".Con la ayuda de esta entrada, solo se agregan un par de líneas en la nueva versión del indicador:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(StringLen(FixCachedTimesBySymbolHistory)) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cache[].adjustTZonHistory(FixCachedTimesBySymbolHistory, true); El método adjustTZonHistory fue introducido específicamente en la clase CalendarCache para ajustes de marcas de tiempo y su implementación utiliza los internos de TimeServerDST.mqh.El método debe ser llamado en línea únicamente (no en el tester).Normalmente, el método debe ser llamado sobre objetos de caché llenados desde el calendario integrado, justo después de la carga. De lo contrario, si la caché se carga desde un archivo de calendario, o si el método ya ha sido llamado antes, el contenido de la caché podría ya estar ajustado. Entonces aplicarás un arreglo sobre otro arreglo y obtendrás marcas de tiempo incorrectas.El segundo parámetro (true) instruye al método para escribir los límites de los cambios aplicados en el registro. Algo así como esto:La corrección de tiempo comenzó en 2021.07.19 00:30:00 2021.07.19 00:30:00: 148786 -10800 diff=-3600 2021.11.08 01:50:00: 135918 -7200 OK 2022.03.14 04:30:00: 161085 -10800 diff=-3600 2022.11.07 04:00:00: 165962 -7200 OK 2023.03.13 01:50:00: 168500 -10800 diff=-3600 2023.11.06 01:50:00: 169270 -7200 OK 2024.03.11 01:50:00: 181258 -10800 diff=-3600 2024.11.04 02:30:00: 208469 -7200 OK Cada línea contiene un tiempo y ID de un evento donde se detectó una nueva discrepancia, el desfase horario del servidor en el evento y qué diferencia debe aplicarse a todas las marcas de tiempo posteriores para eliminar el sesgo en el tiempo del servidor en el momento del almacenamiento en caché del calendario.Los archivos mqh adjuntos (CalendarFilter.mqh, CalendarCache.mqh, QuickSortStructT(Ref).mqh) contienen correcciones de errores y mejoras en comparación con sus versiones originales del libro.Actualizaciones11.11.2024 - corrección de errores menores y actualizaciones en CalendarFilter.mqh, CalendarCache.mqh;22.11.2024 - correcciones menores y mejoras en CalendarCache.mqh.

2024.11.11
Indicador de Martillo: Descubre su Potencial en MetaTrader 5
MetaTrader5
Indicador de Martillo: Descubre su Potencial en MetaTrader 5

El Indicador de Martillo es una herramienta clave para identificar formaciones de velas en los gráficos de MetaTrader 5. Este indicador se centra en los martillos verdes y rojos, así como en los martillos invertidos, ayudando a señalar posibles puntos de reversión en el precio al analizar la estructura de cada barra de vela. Un martillo se caracteriza por tener un cuerpo pequeño y una larga mecha inferior, lo que indica una posible presión de compra tras una tendencia bajista. Por otro lado, el martillo invertido presenta una larga mecha superior y puede sugerir una reversión potencial después de una tendencia alcista. Este indicador calcula el tamaño y la proporción de las mechas y cuerpos de las velas para detectar estos patrones, utilizando tres parámetros personalizables principales: MaxRatioShortWick: Define la proporción máxima para la mecha corta en relación con la vela completa, filtrando los patrones con mechas superiores mínimas. MinRatioLongWick: Establece la proporción mínima para la mecha larga, asegurando que los patrones detectados tengan longitudes de mecha significativas en comparación con el cuerpo de la vela. MinCandleSize: Especifica el tamaño mínimo de la vela requerido para calificar como un patrón de martillo o martillo invertido. Una vez que se identifica un patrón, el indicador mostrará una flecha de un color específico (verde o rojo) en el gráfico, colocada cerca del precio más alto o más bajo de la vela, dependiendo de la dirección del patrón. Las funciones dentro del código manejan la creación y posicionamiento de estos objetos gráficos, así como la limpieza de los mismos cuando el indicador se retira del gráfico. Este indicador es ideal para traders que buscan detectar posibles reversales, y sus parámetros pueden ajustarse para adaptarse a diferentes marcos temporales y condiciones del mercado. Es una herramienta versátil que puede complementar diversas estrategias de trading al proporcionar señales visuales tempranas para posibles cambios de precio.

2024.10.31
Indicador de Días de la Semana y Semanas del Año para MetaTrader 5
MetaTrader5
Indicador de Días de la Semana y Semanas del Año para MetaTrader 5

El indicador WeekDays muestra el Día de la Semana, Semana del Año, Día del Año o el Índice de Barra en la Ventana de Datos y, opcionalmente, en etiquetas en el gráfico.Como es habitual, la información en la Ventana de Datos se actualiza dinámicamente con los movimientos del ratón: el nombre del día se actualiza al instante en la columna izquierda, mientras que el contenido de la columna derecha se define según la configuración, específicamente las opciones WholePart y FractionalPart. Cada una permite al usuario seleccionar qué entidad mostrar: Día de la Semana, Semana del Año, Día del Año, Índice de Barra o Ninguno.WholePart - selector para el número antes del punto decimal;FractionalPart - selector para el número después del punto decimal;Las dos propiedades seleccionadas (números enteros) se combinan en un único valor decimal para cada barra y se almacenan en el buffer del indicador. Por supuesto, el buffer se hace invisible en el gráfico debido al estilo DRAW_NONE, ya que sus valores son sintéticos.Por ejemplo, en la captura de pantalla de abajo, el nombre del día es Martes, y el buffer que contiene Week.DoY (índice del Día del Año) muestra el valor 44.302, lo que corresponde a la semana 44 y el día 302 del año, respectivamente.Otras opciones permiten al usuario especificar si desea ShowLabels en el gráfico, qué FontName, FontSize, FontColor utilizar, así como el Padding desde los bordes superior/inferior, cómo Align las etiquetas (superior/media/inferior), y un RotationAngle opcional para la alineación media.El valor predeterminado clrNONE para FontColor significa que el color se invertirá según el fondo actual del gráfico.

2024.10.29
Indicador AutoFibo: Niveles de Fibonacci Automáticos para MetaTrader 5
MetaTrader5
Indicador AutoFibo: Niveles de Fibonacci Automáticos para MetaTrader 5

Características: Niveles de Fibonacci Automáticos: Este indicador traza dinámicamente las líneas de retroceso de Fibonacci basándose en los últimos máximos y mínimos del ZigZag, proporcionando una visión clara de los posibles puntos de reversión. Opciones de Fibonacci Dinámicas y Estáticas: Los usuarios pueden elegir entre niveles de retroceso de Fibonacci dinámicos, que se actualizan continuamente según los últimos puntos del ZigZag, o niveles estáticos, que permanecen fijos en el último máximo o mínimo significativo. Apariencia Personalizable: Puedes ajustar el color, estilo y grosor de las líneas de Fibonacci tanto para los niveles dinámicos como para los estáticos, permitiendo una visualización adaptada a diferentes estilos y fondos de gráficos. Optimizado para MetaTrader 5: Este indicador aprovecha al máximo el manejo de objetos gráficos de MT5, ofreciendo una experiencia de charting eficiente y fluida. Parámetros: Configuraciones del ZigZag (ExtDepth, ExtDeviation, ExtBackstep): Ajusta la sensibilidad del patrón ZigZag para captar más o menos oscilaciones de precios. Configuraciones de Fibonacci Dinámicas: Personaliza el color, estilo de línea y grosor de las líneas de retroceso de Fibonacci dinámicas. Configuraciones de Fibonacci Estáticas: Personaliza la apariencia de las líneas de Fibonacci estáticas según el segundo máximo/mínimo más reciente del ZigZag. Cómo Usarlo: El indicador AutoFibo es ideal para estrategias de trading de seguimiento de tendencias y de reversión. Al superponer los niveles de Fibonacci sobre el patrón ZigZag, permite a los traders evaluar visualmente los niveles de retroceso y los posibles puntos de entrada/salida. Este indicador se puede utilizar en diferentes marcos temporales, lo que lo hace versátil tanto para el trading intradía como para el de largo plazo.

2024.10.25
PTB: El Indicador Esencial para MetaTrader 5
MetaTrader5
PTB: El Indicador Esencial para MetaTrader 5

Descripción del Indicador: PTB.mq5 Resumen: El indicador PTB.mq5 está pensado para la plataforma de trading MetaTrader 5. Este potente herramienta calcula y muestra los niveles máximos y mínimos a corto y largo plazo, así como los niveles de retroceso de Fibonacci basados en estos extremos. Características: - Máximos y Mínimos a Corto Plazo: Este indicador calcula los precios más altos y bajos en un periodo corto definido por el usuario, lo que ayuda a los traders a identificar niveles inmediatos de soporte y resistencia. - Máximos y Mínimos a Largo Plazo: También calcula los precios más altos y bajos en un periodo más largo, ofreciendo una visión más amplia de las tendencias del mercado. - Niveles de Fibonacci: El indicador traza niveles importantes de retroceso de Fibonacci (23.6%, 38.2%, 50%, 61.8%, y 78.6%) basados en los máximos y mínimos a largo plazo, que son ampliamente utilizados por los traders para identificar posibles puntos de reversión en el mercado. Parámetros de Entrada: - shortLength: El número de velas a considerar para calcular los máximos y mínimos a corto plazo. - longLength: El número de velas a considerar para calcular los máximos y mínimos a largo plazo. Representación Visual: - El indicador utiliza colores y grosores distintos para las diferentes líneas trazadas: &nbsp; - Máximo Corto: Rojo (grosor: 3) &nbsp; - Mínimo Corto: Azul (grosor: 3) &nbsp; - Máximo Largo: Verde (grosor: 3) &nbsp; - Mínimo Largo: Naranja (grosor: 3) &nbsp; - Niveles de Fibonacci:&nbsp; &nbsp; &nbsp; &nbsp; - 78.6%: Morado (grosor: 1) &nbsp; &nbsp; - 23.6%: Aqua (grosor: 1) &nbsp; &nbsp; - 38.2%: Amarillo (grosor: 1) &nbsp; &nbsp; - 61.8%: Marrón (grosor: 1) &nbsp; &nbsp; - 50%: Blanco (grosor: 3) Logística de Cálculo: - El indicador recorre los datos de precios para calcular los valores más altos y bajos tanto a corto como a largo plazo. - Luego, calcula los niveles de Fibonacci basándose en la diferencia entre el máximo y mínimo a largo plazo.

2024.09.22
ChartObjectsCopyPaste: Copia y Pega Gráficos en MetaTrader 5
MetaTrader5
ChartObjectsCopyPaste: Copia y Pega Gráficos en MetaTrader 5

¿Alguna vez has necesitado copiar y pegar objetos gráficos entre gráficos abiertos? Seguro que sí. Sorprendentemente, MetaTrader no ofrece una función de "Copiar y Pegar" para objetos. Lo único que puedes utilizar para lograr un efecto similar son las plantillas (archivos tpl). Pero las plantillas almacenan todo el estado del gráfico, incluidos indicadores, configuraciones y otros elementos auxiliares que pueden ser irrelevantes y innecesarios para el procedimiento de replicación que necesitas. Por eso desarrollé este indicador ChartObjectsCopyPaste.mq5. Te permite copiar objetos seleccionados al portapapeles, desde donde puedes pegarlos en otros gráficos. ¡Sin complicaciones! Cómo Funciona el Indicador Este indicador se basa en otro indicador publicado en el libro de algotrading - ObjectGroupEdit.mq5. Si deseas más información sobre las clases subyacentes (ObjectMonitor, MapArray y otras), sigue el enlace. Este indicador no tiene búferes. Debe ser adjuntado a al menos 2 gráficos: el gráfico fuente del que deseas copiar objetos y el gráfico objetivo donde planeas pegarlos. Mientras se está ejecutando en un gráfico, el indicador rastrea los objetos gráficos existentes y toma nota de cuáles están seleccionados. Comandos de "Copiar y Pegar" Como de costumbre, los comandos "Copiar y Pegar" funcionan en pareja: Presiona la tecla Ctrl+Q para copiar todos los objetos seleccionados en el portapapeles de Windows como texto (puedes guardarlo y verlo en cualquier editor de texto, aquí tienes un ejemplo más abajo). En el gráfico objetivo, presiona Ctrl+J para pegar todos los objetos desde el portapapeles. ¿Por qué Ctrl+Q/Ctrl+J? Estas son solo 2 combinaciones de teclas vacías elegidas voluntariamente entre muy pocas opciones. Esto se debe a que MetaTrader intercepta y no propaga muchas combinaciones de teclas a los programas MQL. Particularmente, esto sucede con los comandos estándar Ctrl+C/Ctrl+V/Ctrl+Ins/Shift+Ins, que no funcionan en este contexto. Como el código fuente está disponible, puedes cambiar las combinaciones de teclas a otras que prefieras. Como el indicador utiliza DLL del sistema para acceder al portapapeles de Windows, debes permitir las importaciones de DLL en el diálogo de Propiedades, en la pestaña Dependencias. Dado que la Codebase no permite importaciones de DLL, el código relacionado con el portapapeles está envuelto en la directiva de preprocesador condicional #ifdef&nbsp;DLL_LINK, así que por favor descomenta la línea #define DLL_LINK antes de compilar. De lo contrario, verás cómo las funciones de portapapeles mostrarán alertas en respuesta a la presión de las teclas, ¡y no se realizarán acciones reales! Entradas del Indicador MakeAllSelectable - bandera para hacer todos los objetos seleccionables (lo cual normalmente es falso para aquellos objetos creados programáticamente); LogDetails - bandera para registrar todas las propiedades de los objetos transferidos en el log; El indicador no verifica si los objetos pegados coinciden con el gráfico objetivo real, como símbolo, rango de precios, número de ventanas secundarias, etc. - ¡tú debes hacerlo! Ejemplo de Texto del Portapapeles Aquí tienes un ejemplo de texto del portapapeles con 2 objetos: OBJ_VLINE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; H1 Línea Vertical 5578&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0 enum ENUM_OBJECT_PROPERTY_INTEGER 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OBJPROP_COLOR&nbsp;&nbsp; 55295 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OBJPROP_STYLE&nbsp;&nbsp; 2 2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OBJPROP_WIDTH&nbsp;&nbsp; 1 3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OBJPROP_BACK&nbsp;&nbsp;&nbsp;&nbsp;0 4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OBJPROP_SELECTED&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1 7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OBJPROP_TYPE&nbsp;&nbsp;&nbsp;&nbsp;0 8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OBJPROP_TIME&nbsp;&nbsp;&nbsp;&nbsp;1726739940 10&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OBJPROP_SELECTABLE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1 11&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OBJPROP_CREATETIME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1726847009 12&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OBJPROP_TIMEFRAMES&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2097151 200&nbsp;&nbsp;&nbsp;&nbsp; OBJPROP_LEVELS&nbsp;&nbsp;0 207&nbsp;&nbsp;&nbsp;&nbsp; OBJPROP_ZORDER&nbsp;&nbsp;0 208&nbsp;&nbsp;&nbsp;&nbsp; OBJPROP_HIDDEN&nbsp;&nbsp;0 1032&nbsp;&nbsp;&nbsp;&nbsp;OBJPROP_RAY&nbsp;&nbsp;&nbsp;&nbsp; 1 enum ENUM_OBJECT_PROPERTY_DOUBLE 9&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OBJPROP_PRICE&nbsp;&nbsp; 1.11449 enum ENUM_OBJECT_PROPERTY_STRING 5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OBJPROP_NAME&nbsp;&nbsp;&nbsp;&nbsp;H1 Línea Vertical 5578 6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OBJPROP_TEXT&nbsp;&nbsp;&nbsp;&nbsp; 206&nbsp;&nbsp;&nbsp;&nbsp; OBJPROP_TOOLTIP OBJ_CHANNEL&nbsp;&nbsp;&nbsp;&nbsp; H1 Canal Equidistante 40885&nbsp;&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1 enum ENUM_OBJECT_PROPERTY_INTEGER 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OBJPROP_COLOR&nbsp;&nbsp; 255 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OBJPROP_STYLE&nbsp;&nbsp; 0 2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OBJPROP_WIDTH&nbsp;&nbsp; 1 3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OBJPROP_BACK&nbsp;&nbsp;&nbsp;&nbsp;0 4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OBJPROP_SELECTED&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1 7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OBJPROP_TYPE&nbsp;&nbsp;&nbsp;&nbsp;5 8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OBJPROP_TIME&nbsp;&nbsp;&nbsp;&nbsp;1726758000 8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OBJPROP_TIME.1&nbsp;&nbsp;1726797600 8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OBJPROP_TIME.2&nbsp;&nbsp;1726758000 10&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OBJPROP_SELECTABLE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1 11&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OBJPROP_CREATETIME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1726847883 12&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OBJPROP_TIMEFRAMES&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2097151 200&nbsp;&nbsp;&nbsp;&nbsp; OBJPROP_LEVELS&nbsp;&nbsp;0 207&nbsp;&nbsp;&nbsp;&nbsp; OBJPROP_ZORDER&nbsp;&nbsp;0 208&nbsp;&nbsp;&nbsp;&nbsp; OBJPROP_HIDDEN&nbsp;&nbsp;0 1003&nbsp;&nbsp;&nbsp;&nbsp;OBJPROP_RAY_LEFT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0 1004&nbsp;&nbsp;&nbsp;&nbsp;OBJPROP_RAY_RIGHT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0 1031&nbsp;&nbsp;&nbsp;&nbsp;OBJPROP_FILL&nbsp;&nbsp;&nbsp;&nbsp;0 enum ENUM_OBJECT_PROPERTY_DOUBLE 9&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OBJPROP_PRICE&nbsp;&nbsp; -28.113879003558715 9&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OBJPROP_PRICE.1 -21.708185053380777 9&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OBJPROP_PRICE.2 -48.04270462633452 enum ENUM_OBJECT_PROPERTY_STRING 5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OBJPROP_NAME&nbsp;&nbsp;&nbsp;&nbsp;H1 Canal Equidistante 40885 6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OBJPROP_TEXT&nbsp;&nbsp;&nbsp;&nbsp; 206&nbsp;&nbsp;&nbsp;&nbsp; OBJPROP_TOOLTIP Y aquí están esos objetos pegados en el gráfico:

2024.09.21
Rsi Ema Engulfing Bar V3: Potencia tu Trading en MetaTrader 5
MetaTrader5
Rsi Ema Engulfing Bar V3: Potencia tu Trading en MetaTrader 5

En este artículo, vamos a explorar un alertador de MT5 diseñado para identificar oportunidades de compra utilizando varios indicadores técnicos y patrones de acción del precio. ¡Vamos a ello! Condiciones de Compra 1. Condición del RSI: El Índice de Fuerza Relativa (RSI) para el periodo actual está por debajo de un umbral bajo específico (RsiLow). Esto indica que el mercado está en condiciones de sobreventa. 2. Patrón de Velas: Se verifica un patrón de velas específico a través de tres velas consecutivas: La vela actual (1) cierra por encima de su apertura (alcista). La vela anterior (2) cierra por debajo de su apertura (bajista). El cierre de la vela actual está por encima de la apertura de la vela anterior. El cierre de la vela actual está por debajo del máximo de la vela anterior. 3. Condiciones de Medias Móviles: El cierre de la vela actual está por debajo de la EMA (Media Móvil Exponencial). Una EMA de mayor plazo (Shiftpast) está por debajo de una EMA de menor plazo (Shiftnow), lo que indica una posible tendencia alcista. Capacidad para cambiar el desplazamiento anterior de la media móvil en función de la subida y bajada, con números de 5-6 para comprar (5 está por encima de 6), lo que significa que hace 5 barras la EMA ID5 estaba por encima de ID6. Puedes cambiar a 3-4, 7-9 o 10-13 según necesites. 4. Señal de Compra: Si se cumplen todas las condiciones, el alertador generará una señal de "Compra" con una flecha hacia arriba en el mínimo de la vela actual. Este alertador está diseñado para identificar posibles configuraciones de reversión alcista/bajista. Busca condiciones de sobreventa (RSI bajo) combinadas con un patrón de velas específico que sugiere que la presión de compra está comenzando a superar a la presión de venta. Las condiciones de la media móvil ayudan a confirmar la dirección de la tendencia general.

2024.09.13
Primero Anterior 4 5 6 7 8 9 10 11 12 13 14 Siguiente Último