Inicio Indicador técnico Publicación

Escáner de Condiciones: Mejora tu Trading en MetaTrader 4

Archivos adjuntos
11135.zip (178.96 KB, Descargar 0 veces)

Escáner de Condiciones (cs)

La idea detrás del código que te presento es bastante simple:

Imagina que tienes una serie de condiciones que deseas monitorear. Escribes un código para verificar estas condiciones y lo integras en los fragmentos de código que te proporciono. Solo necesitas hacer unas modificaciones sencillas.

Al final, obtendrás un par de indicadores. Uno señalará en el gráfico actual dónde se han cumplido tus condiciones en el pasado. El otro mostrará en un panel si, para todos los instrumentos y marcos temporales que te interesan, las condiciones se han cumplido recientemente. Esto te ahorra tener que escanear manualmente pares y marcos temporales buscando tus criterios.

Instrucciones de instalación:

Copiar el contenido de las cuatro carpetas (Indicadores, Incluir, Plantillas, Perfiles) en las carpetas equivalentes de tu instalación. No hay nada peligroso ahí, solo indicadores y demás.
Sal y vuelve a entrar en el programa de MetaQuotes.

Para demostrar lo que puede hacer el escáner:

Este ejemplo se basa en Power Pro (identificador de configuración = "PP"), que fue promovido por Russ Horn. Es una estrategia de ruptura de bandas donde el límite superior es una EMA de máximos y el límite inferior es una EMA de mínimos. No respaldo estas estrategias, esto es solo un ejemplo de lo que puedes desarrollar.

Cambia a tu sistema al perfil cspp. Esto puede tardar unos segundos en mostrarse por primera vez, pero no consume muchos recursos de la computadora después de eso.

Deberías ver una pantalla similar a esta:



El ejemplo anterior consta de:
un indicador en el gráfico con 4 trazados,
un indicador en ventana separada que muestra la EMA del RSI,
un indicador en ventana separada que muestra dónde se han cumplido históricamente las condiciones que sugieren operaciones largas o cortas,
y un indicador en panel que muestra dónde se han cumplido recientemente o están ocurriendo actualmente las mismas condiciones en una variedad de pares y marcos temporales.

Código común a todos los escáneres:

Utils.mqh contiene algunas funciones de utilidad que pueden ser utilizadas en cualquier indicador, sistema de trading, etc.
cs_Chart.mqh contiene casi todo el código que se utiliza en el indicador del gráfico actual.
cs_Panel.mqh contiene casi todo el código que se utiliza en el indicador de visualización del panel.

Código específico de la estrategia PP (Power Pro):

csPP_0.mq4 muestra los indicadores relevantes del "window-chart".
csPP_1.mq4 muestra los indicadores relevantes de "separate-window".
csPP_Chart.mq4 es el indicador que muestra lo que ha sucedido históricamente en el gráfico actual.
csPP_Panel.mq4 es el indicador que muestra la situación actual en todos los pares y marcos temporales que te interesan.
csPP_GetBarFlag.mqh es el código "incluido" en ambos indicadores, Chart y Panel. Es la parte que decide si hay una condición de interés en una barra en particular.


He incluido otro ejemplo menos complejo (identificador=MAX).

Código específico de la estrategia MAX (cruce de medias móviles):

csMAX_0.mq4 es un indicador personalizado que muestra dos medias móviles. Es completamente autónomo.
No hay un csMAX_1 equivalente porque, a diferencia de PP, no necesita una visualización en ventana separada.
csMAX_Chart.mq4, csMAX_Panel.mq4 y csMAX_GetBarFlag.mqh realizan la misma función que los de la estrategia PP mencionada anteriormente.

Código cuyos identificadores comienzan con csXXXX:

Estos son plantillas que pueden ser utilizadas al desarrollar escáneres adicionales.

¿Cómo desarrollo un nuevo código para una condición?

Decido sobre un identificador de estrategia (por ejemplo, PB para pinbars).

Configuro mi ventana como se mencionó anteriormente en "Para demostrar lo que puede hacer el escáner", eliminando indicadores existentes.

Si mi nuevo escáner depende de indicadores en el gráfico, los construyo usando csXXXX_0.mq4 como patrón. Recuerda guardar como csPB_0.mq4. Aplico mi indicador personalizado al gráfico de la izquierda.

Si necesito un indicador en ventana separada, lo construyo también. Recuerda guardar como csPB_1.mq4. Lo aplico al gráfico de la izquierda.

Construyo indicadores personalizados en lugar de usar indicadores estándar para poder referirme a ellos en otras partes utilizando la función iCustom. De esta forma, si cambio de opinión sobre los parámetros básicos de mi estrategia (por ejemplo, el método de la media móvil), solo tengo que cambiar mis indicadores personalizados. Si usara indicadores estándar, tendría que modificarlos y luego buscar en el código para acomodar ese cambio de mentalidad.

Tomaré csXXXX_Chart.mq4, reemplazaré todas las instancias de 'XXXX' por mi identificador de estrategia 'PB', y guardaré el código como csPB_Chart.mq4. No compilará aún porque todavía hay algo de código "include" que debe escribirse.

Ahora, para proporcionar el código "include".

Si las condiciones que quiero probar son muy sencillas, solo utilizo el archivo "include" csXXXX_GetBarFlag.mqh, programo lo que necesito y guardo como csPB_GetBarFlag.mqh. Pero si la codificación es complicada, regreso al csPB_Chart.mq4 que creé anteriormente, comento la línea de código que ahora dice "#include <csPB_GetBarFlag.mqh>" y construyo el código que necesito directamente dentro del archivo csPB_Chart.mq4. Cuando esté limpio, muevo/pego el código que encuentra las condiciones dentro del archivo "include" 'csPB_GetBarFlag.mqh' y descomento la declaración #include en el archivo 'csPB_Chart.mq4'.

Ahora el archivo 'csPB_Chart.mq4' puede compilarse y aplicarse al gráfico de la izquierda.

En este punto, guardo la plantilla para el gráfico de la izquierda como csPB-CHART.tpl. Incorpora cualquier indicador personalizado en el gráfico, indicadores personalizados en ventana separada y el trazado de resultados según se aplique al gráfico actual.

Cargo el archivo 'csXXXX_Panel.mq4', reemplazo todas las instancias de "XXXX" por "PB", luego guardo como "csPB_Panel.mq4". Este último archivo es compilado y aplicado al gráfico de la derecha. Puede ser un poco lento al ejecutarse la primera vez, pero no consume muchos recursos al correr.

Almaceno csPB_panel.tpl como una plantilla para el gráfico de la derecha.

Generalmente, almaceno csPB como un perfil.

NOTA: Al crear indicadores personalizados y luego referirme a ellos con la función iCustom, me aseguro de que los nombres sean exactamente correctos. No recibirás advertencias si iCustom se refiere a un indicador que no existe.

NOTA: Puede haber un error en el que cuando el indicador del panel se carga por primera vez, produce resultados que no son consistentes con los del gráfico específico que se muestra. Descubrí que si cambio la escala de tiempo en la ventana del panel (forzando así un recálculo), todo se muestra correctamente. Agradecería cualquier ayuda con este problema.

NOTA: En el código ...GetBarFlag.mqh que desarrolles tú mismo, puedes devolver cualquier entero al programa que lo llama para ser mostrado. Como está el código, cero significa 'sin resultado' y causa la exhibición de un símbolo gris indicando qué barra fue probada. Devolver un entero negativo resultará en una exhibición roja, mientras que un entero positivo resultará en una exhibición verde.

Algunos aspectos del software:

El código fue escrito como indicadores para que, cuando un panel esté en visualización y quieras mirar un par y marco temporal en particular, solo selecciones el par de la ventana de Observación del Mercado, lo arrastrarás y soltarás sobre el espacio del gráfico actual y cambiarás el marco temporal según lo que necesites. La plantilla se encarga del resto.

Con el fin de reducir la sobrecarga de la computadora, hice dos cosas.

Primero, al tratar con arreglos de series temporales, generalmente solo retrocedo 200 barras.

Segundo, el software de visualización del panel no prueba las condiciones del usuario en cada tick. Utiliza un mecanismo de temporizador tal que la prueba se aplica a bar[0] solo si bar[0] está formado al 90%, de lo contrario se aplica a bar[1]. Si bar[1] tiene el enfoque (es decir, bar[0] es menos del 90% formado), se prueba una vez y se calcula un cambio a la hora de bar[0]. Para cada tick posterior que llegue hasta que se alcance la hora del cambio, no pasa nada. No estoy 100% seguro de que esto esté codificado correctamente, pero parece funcionar bastante bien.

Además, la línea superior del panel muestra la fecha y hora en que ocurrió el evento más reciente de prueba de condiciones. También, en los ejemplos aquí suministrados, los símbolos neutrales mostrarán un cero si bar[0] está en foco y un '1' si bar[1] está en foco.

Publicaciones relacionadas

Comentarios (0)