Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
¡Impresionante bot comercial de ruptura alta / baja en mql5! | Parte 1
¡Impresionante bot comercial de ruptura alta / baja en mql5! | Parte 1
Toby, en este video, quiero presentar un nuevo proyecto que implica el uso de altibajos para crear una estrategia de ruptura rentable. La idea principal es identificar los precios más altos y más bajos del símbolo actual y usar estos niveles para determinar posibles puntos de ruptura. Echemos un vistazo a la tabla para entender cómo funciona esto.
Para comenzar, observamos las últimas n barras e identificamos los precios más altos y más bajos. Si el precio supera el nivel alto, tomamos una posición de compra. Por el contrario, si el precio cae por debajo del nivel bajo, tomamos una posición de venta. Es un concepto simple, pero lo mejoraremos agregando niveles de stop loss y take profit en puntos. Además, implementaremos filtros para refinar la estrategia y evitar operar en todos los puntos altos y bajos.
Esperemos una oportunidad comercial para demostrar el concepto. Aquí, tenemos una posición de venta ya que el precio se rompió por debajo del nivel bajo y cerramos la operación con una ganancia. Esto sirve como base básica para nuestra estrategia, y podemos mejorarla aún más mediante la incorporación de componentes adicionales.
Ahora, cambiemos al Meta Editor y comencemos a codificar. Crearemos un nuevo archivo en la carpeta de YouTube y lo llamaremos "Toby's Breakout EA". En el archivo, definiremos las entradas necesarias para nuestro EA. Estos incluyen el número mágico, el tamaño del lote, el número de barras a considerar, el stop loss y el take profit. Estableceremos valores predeterminados apropiados y proporcionaremos comentarios para explicar cada entrada.
A continuación, pasaremos a la función onInit, donde verificaremos las entradas del usuario para asegurarnos de que sean válidas. Crearemos una función separada llamada checkInputs para manejar esta validación. Si alguna de las entradas es incorrecta, mostraremos un mensaje de error y evitaremos que se inicie el EA.
Dentro de la función onInit, también estableceremos el número mágico de nuestro objeto comercial utilizando la entrada provista. Esto nos permitirá filtrar y administrar las posiciones abiertas por nuestro EA más adelante.
Ahora, examinemos la función onTick. Comenzaremos guardando el tick actual y los valores de tick anteriores. Esto nos ayudará a rastrear los movimientos de precios y determinar si cruzamos algún nivel importante. Usaremos la función SymbolInfoTick para recuperar el tick actual y, si ocurre algún error, mostraremos un mensaje de error y detendremos el EA.
Luego, incluiremos tres funciones personalizadas: countOpenPositions, normalizePrice y closePositions. Estas funciones nos ayudarán a gestionar nuestras posiciones, contar el número de posiciones abiertas, normalizar precios y cerrar posiciones cuando sea necesario.
Volviendo a la función onTick, comenzaremos contando las posiciones abiertas tanto para comprar como para vender. Si ocurre un error durante este proceso, detendremos el EA sin mostrar un mensaje de error ya que ya se maneja en la función personalizada. Luego verificaremos si hay posiciones de compra abiertas y si el nivel alto no es cero. Esto asegura que hemos establecido el nivel alto y que no hay posiciones de compra existentes.
Desde aquí, podemos continuar codificando la lógica de la estrategia de ruptura. Implementaremos comprobaciones similares para las posiciones de venta y el nivel bajo. Estas declaraciones if nos ayudarán a determinar si tomar una posición de compra o venta en función de la ruptura de los niveles respectivos.
Una vez que tengamos una estructura básica, podemos mejorar aún más la estrategia agregando más componentes y filtros. Esto puede incluir parámetros y condiciones de entrada adicionales para refinar las señales comerciales y mejorar el rendimiento general.
Eso cubre el proceso de codificación inicial. Siguiendo estos pasos, podemos crear un EA de ruptura basado en altibajos, que puede servir como punto de partida para un mayor desarrollo y optimización.
El algoritmo:
El algoritmo verifica continuamente los posibles puntos de entrada y salida en función de los precios de oferta y demanda en relación con los niveles alto y bajo predefinidos. Abre posiciones cuando se cumplen las condiciones y cierra posiciones cuando los precios se mueven en la dirección opuesta.
Bot comercial de ruptura alta / baja mql5 | Parte 2
Bot comercial de ruptura alta / baja mql5 | Parte 2
En este video, seguimos trabajando en nuestro Audi negro con un revestimiento alto-bajo. Como continuación de nuestra sesión anterior, ahora incorporaremos la lógica comercial e introduciremos algunos componentes adicionales. Para comenzar, calcularemos el stop loss para nuestras posiciones. Si la entrada de stop loss es cero, ponemos a cero la variable "SL", indicando que no hay stop loss. De lo contrario, lo establecemos en el precio de oferta actual menos el stop loss de entrada multiplicado por el valor de los puntos.
A continuación, calculamos el Take Profit. Si la entrada de Take Profit es cero, establecemos la variable "TP" en cero. De lo contrario, lo establecemos en el precio de venta actual más el beneficio de entrada multiplicado por el valor de los puntos. Para garantizar valores de precios consistentes, normalizamos el stop loss y tomamos ganancias utilizando la función de "precio normalizado".
Con la lógica comercial establecida, usamos el objeto comercial, que se declaró previamente mediante la clase cTrade, para abrir posiciones. Para una posición de compra, usamos el símbolo actual, los lotes de entrada para el tamaño del lote, el precio de oferta actual para el precio, la variable de stop loss para el stop loss y la variable de toma de ganancias para la toma de ganancias. De manera similar, para una posición de venta, usamos el precio de venta actual para el precio. Para diferenciar esta posición de otras, añadimos un comentario que indica que pertenece a nuestro asesor experto "High-Low Record EA".
Después de compilar el código, cambiamos a MetaTrader para realizar pruebas. Configuramos una prueba visual, especificando el marco de tiempo y el período. Con las entradas predeterminadas, ejecutamos la prueba y observamos los valores altos y bajos. Al usar el modo "Solo precio abierto", podemos ver las posiciones que se abren cuando se cruza el nivel alto o bajo. En el siguiente paso, cambiamos el modo de marca del EA para que solo actúe en las marcas abiertas. Esto proporciona un entorno de prueba más fiable y rápido para crear sistemas estables.
En el futuro, implementamos un filtro de índice para evitar operar en puntos extremos al principio o al final del período retrospectivo. Introducimos una entrada llamada "Filtro de índice", que representa el porcentaje de barras dentro del período retrospectivo que se debe filtrar. Por ejemplo, si el período retrospectivo es de 50 barras y el filtro de índice se establece en 10, se filtrarán los puntos extremos dentro de las primeras cinco o últimas cinco barras. Para visualizar este rango, dibujamos un rectángulo en el gráfico. Agregamos las variables globales necesarias, establecemos sus valores iniciales y hacemos cambios en la función "OnTick" para calcular los índices alto y bajo usando las funciones "I Highest" y "I Lowest".
Además, actualizamos la función "CheckInputs" para incluir la entrada "Filtro de índice" y validar su valor. También creamos una nueva función llamada "CheckIndexFilter" que verifica si un punto extremo debe filtrarse en función del índice y la configuración del filtro. Para completar la implementación, compilamos el código y procedemos a una prueba visual. Verificamos si las posiciones se abren solo cuando los puntos extremos están dentro del rango definido, según el filtro de índice. En el siguiente segmento, planeamos modificar el modo de tic del EA para que se adapte mejor a nuestros requisitos. Cambiaremos al modo de tick abierto, lo que permitirá que el EA opere exclusivamente en ticks abiertos, mejorando la confiabilidad y eficiencia del sistema.
Después de modificar el modo tick para abrir el modo tick, procedemos con más mejoras a nuestro EA. Una de las mejoras que haremos es la adición de un filtro de tiempo. Para implementar el filtro de tiempo, presentamos dos entradas nuevas: "Hora de inicio" y "Hora de finalización". Estas entradas nos permiten especificar el rango de tiempo durante el cual se debe permitir el comercio. Por ejemplo, si establecemos la hora de inicio a las 8 y la hora de finalización a las 18, el EA solo abrirá posiciones entre las 8 a.m. y las 6 p.m. Para incorporar el filtro de tiempo, actualizamos la función "CheckInputs" para validar las nuevas entradas y asegurarnos de que la hora de inicio sea menor que la hora de finalización. También modificamos la función "OnTick" para comparar la hora actual con el rango especificado antes de abrir posiciones.
Con el filtro de tiempo en su lugar, compilamos el código y ejecutamos una prueba visual para verificar que las posiciones solo se abren dentro del rango de tiempo especificado. A continuación, pasamos a otra mejora: agregar un filtro de propagación. El filtro de spread nos permite definir un spread máximo permitido, más allá del cual el EA se abstendrá de abrir posiciones. Para implementar el filtro de dispersión, introducimos una nueva entrada llamada "Expansión máxima". En la función "OnTick", incluimos una verificación para asegurarnos de que el spread actual esté dentro del rango permitido antes de abrir posiciones.
También actualizamos la función "CheckInputs" para validar la entrada "Max Spread" y asegurarnos de que sea un valor positivo. Una vez que se implementa el filtro de spread, compilamos el código y realizamos una prueba visual para confirmar que las posiciones solo se abren cuando el spread está por debajo del máximo especificado. Por último, presentamos una función para rastrear y mostrar el número de posiciones abiertas en el gráfico. Creamos una nueva variable global llamada "Recuento de posiciones" y la inicializamos a cero. En la función "OnTick", incrementamos el conteo de posiciones cada vez que se abre una posición.
Para mostrar el recuento de posiciones en el gráfico, utilizamos la función "ObjectSetText" para crear un objeto de texto que muestre el recuento actual. Actualizamos el objeto de texto con el último valor de conteo en cada marca. Una vez que se compila el código, realizamos una prueba visual para observar el recuento de posiciones que se muestra en el gráfico y nos aseguramos de que refleje con precisión la cantidad de posiciones abiertas.
Con estas mejoras implementadas, hemos mejorado significativamente la funcionalidad y el rendimiento de nuestro EA. El filtro de tiempo, el filtro de diferencial y la pantalla de conteo de posiciones brindan un mayor control y visibilidad sobre el proceso de negociación.
En el próximo video, exploraremos optimizaciones adicionales y técnicas de ajuste fino para mejorar aún más el rendimiento de nuestro EA.
Sorprendente bot comercial de ruptura alta / baja mql5 | parte 3
Sorprendente bot comercial de ruptura alta / baja mql5 | parte 3
En el video de hoy, Toby continúa el desarrollo del EA de ruptura alto-bajo para MK5. Introduce dos nuevos componentes a la estrategia y también realiza múltiples backtests al final.
Toby comienza compilando el EA para asegurarse de que esté en condiciones de funcionamiento. Luego agrega una entrada para un stop loss dinámico para mejorar la efectividad de la estrategia como un sistema de ruptura y seguimiento de tendencias. La entrada es una variable booleana que se puede activar o desactivar. Toby también crea una función llamada "updateStopLoss" para calcular y actualizar los valores de stop loss para cada posición.
Para implementar el stop loss dinámico, Toby copia la función "updatePosition" de otro EA y la modifica en consecuencia. Añade un parámetro para la distancia de stop loss y ajusta el cálculo del nuevo valor de stop loss en función de esta entrada. También incorpora una función llamada "precio normalizado" para garantizar que el valor de stop loss se normalice. Después de realizar estos cambios, Toby vuelve a compilar el código para asegurarse de que no haya errores.
A continuación, Toby pasa a la función "OnTick", donde integra la función "updateStopLoss". Agrega una declaración if para verificar si el stop loss dinámico está activo y, de ser así, llama a la función "updateStopLoss" para rastrear los valores de stop loss. También se asegura de que la función se aplique tanto a las posiciones de compra como a las de venta.
Después de compilar el código, Toby procede a agregar el siguiente componente, un filtro de tamaño, a la estrategia. El filtro de tamaño permite filtrar los canales en los que los valores altos y bajos están demasiado separados, lo que indica un rango mayor. Toby agrega una entrada para el filtro de tamaño en puntos y ajusta el código en consecuencia para verificar si el tamaño del canal excede el límite especificado. También incorpora el filtro de tamaño en la visualización de las líneas altas y bajas.
Luego, Toby realiza una prueba visual con el Probador de estrategias para confirmar que tanto el trailing stop loss como el filtro de tamaño funcionan correctamente. Observa el comportamiento del stop loss y los cambios de color en las líneas según la condición del filtro de tamaño.
En la parte final del video, Toby realiza pruebas retrospectivas para evaluar el desempeño del EA durante los últimos 10 años. Establece los criterios de optimización como factor de recuperación y utiliza un símbolo y un marco de tiempo específicos. Toby planea usar los años restantes como una prueba fuera de la muestra.
Toby realiza varias mejoras en el EA de ruptura alto-bajo, incluida la adición de un stop loss dinámico y un filtro de tamaño. También demuestra cómo realizar pruebas retrospectivas para evaluar el rendimiento del EA.
¡Codifiquemos el último patrón de velas EA en mql5! | Parte 1
¡Codifiquemos el último patrón de velas EA en mql5! | Parte 1
Hola, soy Toby y, en este video, comienzo un nuevo proyecto de codificación de EA en mi canal. Nos centraremos en los patrones de velas japonesas y crearemos un EA que pueda intercambiar varios patrones, como Doji, Morning Star, Rising Star y muchos otros. El EA también tendrá un panel para mostrar diferentes condiciones. Ya realicé algunas pruebas preliminares con el EA y los resultados han sido bastante interesantes, especialmente en diferentes símbolos. Creo que este enfoque puede conducir a una estrategia altamente efectiva. ¡Vamos a sumergirnos!
Antes de comenzar a codificar el EA, analicemos la idea de la estrategia general. Es crucial comprender lo que pretendemos crear a medida que avanzamos. Para ilustrar el concepto, he creado un diagrama simple. Nuestro EA trabajará exclusivamente con el precio de apertura de cada barra. Por ejemplo, consideremos la barra actual (índice 0) y la barra anterior (índice 1). Queremos crear un EA que pueda intercambiar varios patrones de gráficos o patrones de velas japonesas, como Doji, Morning Star, Evening Star, Rising Star y muchos más.
Para lograr esto, definiremos diferentes condiciones. Por ejemplo, podemos establecer una condición en la que el precio máximo de la barra 2 sea superior al precio máximo de la barra 1. Otra condición podría ser que el precio de apertura de la barra 3 sea inferior al precio de cierre de la barra 3, lo que indica un vela alcista. Al combinar estas condiciones, podemos desencadenar una operación de compra en la apertura de la siguiente barra. Podemos aplicar condiciones similares a la inversa para las señales de venta.
Además, quiero considerar no solo los precios de apertura, máximo, mínimo y cierre de cada vela japonesa, sino también otros factores como el tamaño del rango o el tamaño del cuerpo. Por ejemplo, podemos calcular el tamaño del cuerpo dividiéndolo por el rango total de la vela japonesa. Este cálculo puede ayudarnos a identificar las barras Doji. Incluso podemos establecer valores específicos, como exigir un tamaño corporal superior a 50 puntos. Con estas opciones, podemos crear y probar varios patrones usando un solo EA. ¡Promete ser un viaje emocionante!
Ahora, pasemos al MetaEditor y comencemos a codificar. Pero antes de comenzar, me gustaría recibir sus comentarios. Si encuentra útiles estos videos y le gustaría dormir bien esta noche, deje un me gusta. Además, estoy considerando cambiar entre el modo oscuro y el fondo blanco predeterminado. Crearé una encuesta para que voten por su preferencia. Déjame saber en los comentarios si puedes leer todo correctamente en modo oscuro.
Muy bien, ¡vamos a codificar! En el MetaEditor, crearé un nuevo EA en mi carpeta de YouTube. Lo llamaré 'Patrón de velas EA'. Comenzaremos con una plantilla limpia, eliminando comentarios innecesarios y organizando la estructura del código. Después de compilar y asegurarnos de que no haya errores, procederemos con los siguientes pasos.
Definiremos algunos parámetros clave en la sección de entradas, como el número mágico, que debería ser un identificador único para este EA para evitar conflictos con otros EA que se ejecutan en la misma instancia de MetaTrader. Vamos a asignarle un número aleatorio.
Eso cubre la configuración inicial y los parámetros de entrada. Ahora estamos listos para pasar a la siguiente parte. ¡Manténganse al tanto!
¡Patrón de velas EA en mql5! | Parte 2
¡Patrón de velas EA en mql5! | Parte 2
En el video de hoy, soy Toby, y continuaremos codificando nuestro Asesor Experto (EA) de patrón de velas japonesas simple en MetaTrader 5. Ahora estamos en la segunda parte de esta serie de codificación, así que si te perdiste la primera parte donde explicó la idea de la estrategia con más detalle, puede encontrar el enlace a ese video aquí. Antes de comenzar a codificar, quiero compartir los resultados de una encuesta reciente que realicé en YouTube sobre el tema de color preferido para grabar videos. De 140 votos, la mayoría de las personas (90) prefirieron el fondo oscuro, mientras que 50 personas prefirieron el fondo blanco. Personalmente, encuentro que el fondo oscuro es más agradable a la vista y también lo uso para grabar mis propios EA.
Otra cosa que quería mencionar es que recientemente configuré Visual Studio Code para MQL5. Si está interesado en usar Visual Studio Code para sus proyectos de codificación, hágamelo saber en los comentarios y haré un video al respecto.
Ahora, volvamos a codificar nuestro EA. En el video anterior, nos quedamos en las entradas para la condición uno. Ahora crearemos otra condición y agregaremos una entrada para la condición dos. Copiaremos la sección para la condición uno y le cambiaremos el nombre a la condición dos, haciendo los cambios necesarios en las variables de entrada. Por ahora, lo mantendremos simple con solo dos condiciones, pero podemos agregar más en el futuro. Después de realizar estos cambios, compilaremos el código para garantizar que no haya errores ni advertencias.
Algunos espectadores solicitaron un aumento en el tamaño de la fuente para una mejor legibilidad. Si bien prefiero ver más código en la pantalla, entiendo la necesidad de tamaños de fuente más grandes. Sin embargo, por ahora, nos quedaremos con el tamaño de fuente actual. Si es necesario, puedo hacer ajustes en el futuro.
A continuación, vincularemos las entradas a nuestra matriz de condiciones, que creamos en la sección de variables globales. Crearemos una función personalizada llamada "setInputs" para lograr esto. Esta función se llamará antes de verificar las entradas. Después de escribir el código para la función setInputs, compilaremos el código nuevamente para verificar que sea correcto.
Continuando, verificaremos las entradas para asegurarnos de que cumplan con los criterios requeridos. Usaremos una instrucción if para cada entrada para realizar las comprobaciones necesarias. Si se determina que alguna entrada no es válida, mostraremos una alerta al usuario y devolveremos false desde la función checkInputs. Comenzaremos comprobando el número mágico, asegurándonos de que no sea inferior o igual a cero. Luego procederemos a verificar el tamaño del lote, detener la pérdida y obtener entradas de ganancias. Además, necesitaremos agregar una verificación para la matriz de condiciones, que abordaremos más adelante.
Para hacer que el código sea más modular, usaremos una función setInputs para establecer el número mágico para nuestro objeto comercial. Esto será beneficioso cuando busque posiciones o maneje operaciones relacionadas con el comercio. Después de realizar este cambio, compilaremos el código nuevamente para confirmar su precisión.
Ahora, pasemos a la función onTick, donde se llevan a cabo las principales operaciones del EA. En primer lugar, comprobaremos si el tick actual es un tick de barra abierta usando nuestra función isNewBar. Si devuelve falso, lo que indica que no es un tick de barra abierta, simplemente regresaremos y esperaremos al siguiente tick.
A continuación, obtendremos el tick del símbolo actual. Esto proporcionará acceso a la oferta, demanda y otra información relacionada con ticks. Usaremos la función SymbolInfoTick y almacenaremos el resultado en una variable. Si esta operación falla, mostraremos un mensaje que indica la falla y regresaremos desde la función onTick.
Después de eso, contaremos las posiciones abiertas usando nuestra función countOpenPositions. Esto nos dará el número de posiciones abiertas de compra y venta en el momento actual. Si esta operación falla, mostraremos un mensaje de error que indica la falla y regresaremos de la función onTick.
Después de obtener el conteo de posiciones abiertas, verificaremos si hay posiciones abiertas. Si las hay, mostraremos un mensaje indicando el número de posiciones abiertas. De lo contrario, procederemos al siguiente paso.
Ahora, recorreremos cada posición abierta usando un bucle for. Dentro del ciclo, recuperaremos la información de posición usando la función PositionGetTicket. Guardaremos el número de ticket en una variable y mostraremos un mensaje con el número de ticket para fines de depuración.
A continuación, comprobaremos el tipo de posición (compra o venta) mediante la función PositionGetInteger y la propiedad POSITION_TYPE. Si la posición es una posición de compra, ejecutaremos el código necesario para las posiciones de compra. De manera similar, si la posición es una posición de venta, ejecutaremos el código para posiciones de venta.
Para las posiciones de compra, comprobaremos si el precio de oferta actual es inferior al nivel de stop loss de la posición. Si es así, mostraremos un mensaje que indica que se ha alcanzado el nivel de stop loss y cerraremos la posición usando la función PositionClose.
Del mismo modo, para las posiciones de venta, comprobaremos si el precio de venta actual es superior al nivel de stop loss de la posición. Si es así, mostraremos un mensaje que indica que se ha alcanzado el nivel de stop loss y cerraremos la posición.
Después de cerrar las posiciones necesarias, pasaremos al siguiente paso, que es verificar nuestras condiciones para determinar si debemos abrir una nueva posición. Usaremos la función checkConditions para este propósito. Si la función checkConditions devuelve verdadero, indicando que se cumplen todas las condiciones, ejecutaremos el código necesario para abrir una nueva posición. De lo contrario, continuaremos con el siguiente tick.
En el código para abrir una nueva posición, estableceremos el volumen, el stop loss, el take profit y otros parámetros necesarios. Usaremos la función OrderSend para enviar la solicitud comercial y abrir la posición. Si la solicitud comercial es exitosa, mostraremos un mensaje que indica la apertura exitosa de la posición. De lo contrario, mostraremos un mensaje de error.
Finalmente, compilaremos el código para asegurarnos de que no haya errores ni advertencias, y si todo sale bien, estaremos listos para probar nuestro EA en una cuenta demo o real.
Eso concluye este video. En la siguiente parte, continuaremos construyendo nuestro EA agregando características adicionales y refinando nuestra estrategia. Si tiene alguna pregunta o sugerencia, déjela en los comentarios a continuación. ¡Gracias por mirar, y nos vemos en el próximo video!
¡Impresionante patrón de velas EA en mql5! | parte 3
¡Impresionante patrón de velas EA en mql5! | parte 3
En este video, Toby se presenta y anuncia que la atención se centrará en continuar desarrollando el Asesor Experto (EA) del patrón de velas japonesas en MetaTrader5. El objetivo es escribir la lógica básica necesaria para realizar el primer backtest y obtener un resultado. Toby anima a los espectadores a ver las partes anteriores de la serie si aún no lo han hecho.
Toby abre Meta Editor y comienza a codificar donde lo dejó en el video anterior. Explica que ya implementaron el código para abrir posiciones de compra y venta, pero ahora necesitan agregar los controles de condición. Para hacer esto, Toby planea crear una función personalizada a la que se pueda llamar para verificar las condiciones de las operaciones de compra y venta.
Antes de comenzar el proceso de codificación, Toby quiere asegurarse de que no haya errores en el código existente. Compila el código para comprobar si hay errores o advertencias.
A continuación, Toby procede a escribir la lógica de la función personalizada denominada "verificar condiciones". Esta función iterará a través de cada condición usando un bucle for. Dentro del ciclo, llamarán a otra función personalizada llamada "verificar una condición" para evaluar cada condición individual.
Toby crea la función "verificar una condición", que toma parámetros para la operación de compra/venta y el índice de la condición a verificar. Dentro de esta función, se realizan varias comprobaciones, como determinar si la condición está activa. Si una condición está inactiva, la función devolverá verdadero, lo que indica que no es relevante.
Para verificar las condiciones, Toby necesita obtener los datos de la barra. Declara una variable de tipo mql rates, que es una estructura predefinida que contiene los precios de apertura, máximo, mínimo y cierre. Establecen la matriz de tasas como una serie y usan la función de tasa de copia para recuperar los datos necesarios para las condiciones.
Después de obtener con éxito los datos de la barra, Toby procede a establecer los valores de las variables A y B, que se utilizarán para comparar y evaluar las condiciones. Los valores se determinan en función del modo de la condición, como apertura, alto, bajo, cierre, rango, cuerpo, relación o valor. Los valores se asignan en consecuencia, teniendo en cuenta si se trata de una operación de compra o venta.
Una vez que se establecen los valores, Toby compila el código para verificar si hay errores o errores.
Toby repite el proceso para las condiciones del modo B, haciendo los ajustes necesarios a las variables y casos.
Finalmente, Toby concluye el video asegurándose de que no haya errores en el código y enfatizando la importancia de comprender la lógica del código.
¡Resultados sorprendentes! ¡Patrón de velas EA en mql5! | parte 4
¡Resultados sorprendentes! ¡Patrón de velas EA en mql5! | parte 4
Hola, soy Toby. En el video de hoy, continuaremos codificando el asesor experto (EA) del patrón de velas japonesas. Tenemos algunos objetivos específicos para este video. Primero, agregaremos un panel al EA, que mostrará varias condiciones y sus correspondientes señales de compra/venta. También realizaremos comprobaciones de entrada adicionales para garantizar la funcionalidad del EA. Finalmente, realizaremos algunas pruebas retrospectivas y compartiremos algunos resultados interesantes con usted. Entonces empecemos.
Antes de continuar, si no ha visto las partes anteriores de esta serie de codificación de patrones de velas japonesas, le recomiendo que las revise primero. Puedes encontrar los enlaces en la descripción.
En este video, comenzaremos creando un panel gráfico para nuestro EA. El panel contendrá líneas que representan diferentes condiciones, con cruces que indican señales de compra y venta. Si se cumplen las condiciones, el EA realizará transacciones en la dirección especificada. Además, implementaremos controles de entrada para facilitar la optimización en el probador de estrategias.
Para comenzar a codificar el panel, abriremos el MetaEditor y navegaremos hasta la carpeta de inclusión. Dentro de la carpeta de inclusión, crearemos una nueva carpeta llamada YouTube. Dentro de la carpeta de YouTube, crearemos el archivo del panel gráfico. Borraremos el contenido predeterminado del archivo e incluiremos los archivos necesarios para nuestro panel.
A continuación, definiremos las etiquetas necesarias para nuestro panel. Cada etiqueta representará un elemento específico, como número, condición, compra, venta, etc. También crearemos matrices de etiquetas para mostrar varias líneas para cada condición.
Después de definir las etiquetas, procederemos a codificar la clase Panel. Esta clase heredará de la clase CAppDialog, otorgándonos acceso a sus miembros. Crearemos una sección privada para las etiquetas del panel y algunos métodos, incluidos un constructor, un destructor, onInit, update y bannerChartEvent.
El constructor inicializará el panel, mientras que el destructor se encargará de su limpieza. El método onInit se llamará desde la función onInit del EA y creará el panel. El método de actualización se invocará en cada marca para actualizar el contenido del panel. Finalmente, el método bannerChartEvent manejará los eventos relacionados con el panel.
Dentro del método createPanel, crearemos el panel real con los parámetros deseados, como la identificación del gráfico, el nombre, la subventana y las coordenadas. Nos aseguraremos de que el panel se cree correctamente y devuelva verdadero si lo es, o falso en caso contrario.
Una vez codificada la clase de panel, la incluiremos en nuestro archivo de asesor experto. Crearemos una instancia del objeto del panel y llamaremos a su método onInit después de configurar el número mágico. Si la creación del panel falla, devolveremos un mensaje de error apropiado.
Eso es todo por esta parte de nuestra serie de codificación de patrones de velas japonesas. En el próximo video, continuaremos agregando funcionalidad a nuestro EA y realizaremos más pruebas. Estén atentos para más resultados interesantes.
Codificar un criterio personalizado en mql5
Codificar un criterio personalizado en mql5
Hola, este es Toby. En este video, demostraré cómo codificar un criterio personalizado para la optimización de su asesor experto en MQL5. Usaremos el soporte Hilo EA como ejemplo. El objetivo es crear un criterio personalizado que tenga en cuenta tanto el factor de beneficio como el número de operaciones al clasificar los resultados de la optimización.
Para comenzar, abra su EA en el entorno de codificación (como Visual Studio Code) y guárdelo con un nuevo nombre. A continuación, agregue una función predefinida llamada "OnTester" a su EA. Esta función calculará los criterios personalizados y devolverá su valor. Puede utilizar la función "TestStatistics" para obtener el número de operaciones y el factor de beneficio. Multiplique estos dos valores para calcular los criterios personalizados.
Compile el código para asegurarse de que no haya errores. Ahora, cambie a MetaTrader y realice una optimización. Seleccione su EA y elija "Custom Max" como el criterio de búsqueda óptimo para usar sus criterios personalizados. Inicie la optimización y espere los resultados. Verá que los criterios personalizados se calculan en función del número de transacciones multiplicado por el factor de beneficio.
Si desea ajustar el peso del factor de beneficio, puede utilizar la función "MathPower" en su código. Por ejemplo, puede elevar el factor de beneficio a la potencia de 4 para darle más peso. Vuelva a compilar y ejecute la optimización nuevamente para ver la clasificación actualizada.
Además, puede agregar una declaración if al código para excluir combinaciones con menos de 100 intercambios. Si el número de operaciones es inferior a 100, puede devolver un valor de cero. Esto asegura que solo se consideren las combinaciones con un número suficiente de transacciones.
Siguiendo estos pasos, puede crear sus propios criterios personalizados para clasificar y seleccionar los mejores resultados de optimización para su Asesor Experto. Recuerde guardar su EA modificado con un nuevo nombre antes de realizar cualquier cambio. Si este video le resultó útil, deje un Me gusta y siéntase libre de compartir sus solicitudes o ideas para futuros videos en los comentarios. ¡Gracias y nos vemos en el próximo vídeo!
¡Bot comercial estocástico en mql5! | Parte 1
¡Bot comercial estocástico en mql5! | Parte 1
En este video, demostraré cómo codificar un EA estocástico simple en MetaTrader 5. Hacia el final del video, también realizaremos un backtesting para evaluar el desempeño de la estrategia en los últimos 10 años.
Comencemos por entender la idea de la estrategia general. Usaremos el indicador estocástico, que es ampliamente conocido. El EA ejecutará una operación de compra cuando el estocástico cruce el nivel inferior y una operación de venta cuando cruce el nivel superior. Al mirar el gráfico, es esencial recordar que nuestro cerebro tiende a centrarse en las operaciones rentables, por lo que es crucial codificar y probar la estrategia para evaluar su eficacia.
Ahora, cambiemos a Visual Studio Code para comenzar a codificar el EA. Crearemos un nuevo archivo en la carpeta de YouTube usando el MetaEditor predeterminado y lo llamaremos "Stochastic EA". Luego, abriremos el archivo en Visual Studio Code y haremos algunos ajustes de formato para mejorar la legibilidad.
Organizaremos el código en secciones y comenzaremos con las inclusiones. Solo necesitamos incluir un archivo, "trades.mqh", que contiene la clase CTrade. Después de eso, definiremos las entradas para nuestro EA. Tendremos una sección general para entradas como el número mágico y el tamaño del lote, seguida de una sección de operaciones para detener pérdidas, tomar ganancias y cerrar operaciones con una señal opuesta. Luego, tendremos una sección de entrada específica para el indicador estocástico, que incluye el período K y el nivel superior.
Una vez definidas las entradas, pasaremos a la sección de variables globales, donde declararemos las variables para el identificador del indicador estocástico, el búfer, el tick actual y el objeto comercial. Después de las variables globales, implementaremos la función onInit. Comenzaremos verificando las entradas del usuario usando la función checkInputs, que garantizará que los valores de entrada estén dentro del rango permitido. Si alguna entrada es incorrecta, devolveremos "Parámetros de inicio incorrectos".
A continuación, estableceremos el número mágico para el objeto comercial utilizando el valor de entrada proporcionado por el usuario. Luego, crearemos el identificador del indicador utilizando la función estocástica incorporada, especificando el símbolo, el período, el período K, el período D (establecido en 1 para que no haya línea de señal), el valor de desaceleración, el método MA (SMA) y el campo de precios. (bajo/alto). Verificaremos si la creación del identificador del indicador fue exitosa. Si devuelve un identificador no válido, mostraremos un mensaje de alerta y devolveremos "Error de inicialización". Finalmente, configuraremos el búfer usando la función arraySetAsSeries para indicar que es una serie de tiempo.
A continuación, definiremos la función checkInputs, que verificará la validez de cada entrada. Verificaremos si el número mágico y el tamaño del lote están dentro del rango permitido y devolveremos falso si no lo están. Además, podemos agregar más controles, como garantizar que el tamaño del lote no sea mayor a 10. Con la función onInit y la función checkInputs completadas, ahora podemos compilar el código y continuar con los siguientes pasos en el video.
La función está diseñada para realizar varios pasos. En primer lugar, recupera el tick actual y lo almacena en la variable global "CT". Luego, procede a obtener los valores del indicador utilizando la función "CopyBuffer". La función comprueba si hay errores y, si tiene éxito, almacena los valores en el búfer "Principal". Si hay un error, imprime un mensaje y sale de la función.El siguiente paso consiste en contar el número de posiciones abiertas. Esto se hace usando la función "CountOpenPositions", y el conteo se almacena en dos variables enteras, "CountBuy" y "CountSell". Si hay un error al contar las posiciones, se imprime un mensaje y se sale de la función.
Luego, la función verifica si hay una operación de compra o venta. Si no hay una posición de compra abierta (CountBuy es cero), verifica los valores del indicador para determinar si se debe abrir una operación de compra. Las condiciones para abrir una operación de compra son que el valor del indicador actual esté por debajo de un nivel inferior especificado y el valor del indicador anterior esté por encima del nivel inferior. Si se cumplen estas condiciones, se imprime un mensaje que indica la apertura de una posición de compra. De manera similar, la función verifica si hay una operación de venta si no hay una posición de venta abierta (CountSell es cero). Las condiciones para abrir una operación de venta son que el valor del indicador esté por encima de un nivel superior específico y que el valor del indicador anterior esté por debajo del nivel superior. Si se cumplen estas condiciones, se imprime un mensaje que indica la apertura de una posición de venta.
Después de implementar la lógica comercial, la función cierra todas las posiciones de venta si el parámetro de entrada "ClosedSignal" se establece en verdadero. Utiliza la función "ClosePositions" con el valor de parámetro de 2 para cerrar todas las posiciones de venta. Si hay un error al cerrar las posiciones, la función sale e imprime un mensaje. A continuación, la función calcula los valores de stop loss y take profit en función de los parámetros de entrada. Si el valor de stop loss de entrada es cero, el stop loss se establece en cero; de lo contrario, se calcula en función del precio actual del tick y el valor de stop loss de entrada. Se sigue el mismo proceso para calcular el valor de toma de ganancias.
Antes de abrir una posición, la función normaliza los precios de stop loss y take profit utilizando la función "NormalizePrice". Si hay un error en la normalización, la función sale. Finalmente, la función abre una posición utilizando el método "PositionOpen" del objeto comercial. La posición se abre según el tipo (compra o venta), el volumen, el precio, los valores de stop loss y take profit. También se incluye un comentario de pedido.
La función se compila para garantizar que no haya errores, y luego se puede probar en MetaTrader utilizando datos históricos para ver si las aperturas y cierres comerciales deseados ocurren de acuerdo con las condiciones especificadas. Después de abrir una posición, la función busca errores usando la función "GetLastError". Si hay un error, imprime un mensaje y sale.
Finalmente, la función actualiza las variables globales "LastTick" y "LastSignal" con el tick actual y el tipo de señal (compra o venta) respectivamente. Esto se hace para realizar un seguimiento del último tick y señal procesados para futuros cálculos.
Esta función recupera el tick actual, obtiene valores de indicadores, cuenta el número de posiciones abiertas, verifica oportunidades comerciales, abre posiciones en función de condiciones específicas, cierra posiciones de venta si es necesario, calcula los valores de stop loss y take profit, normaliza los precios, abre posiciones , maneja errores y actualiza variables globales.
Para usar esta función en un entorno MetaTrader 5, deberá integrarla en un asesor experto o script y personalizar los parámetros de entrada y los valores de los indicadores de acuerdo con su estrategia comercial. Además, es posible que deba implementar otras funciones para administrar posiciones, manejar errores y realizar otras operaciones comerciales.
Tenga en cuenta que la explicación proporcionada es una comprensión general basada en la información proporcionada, y la implementación real puede variar según la plataforma comercial específica y el lenguaje de programación utilizado.
EA estocástico para MetaTrader 5 | Parte 2
EA estocástico para MetaTrader 5 | Parte 2
En este video, Toby se presenta como el anfitrión y menciona que discutirán un filtro simple para mejorar las estrategias comerciales utilizando el indicador estocástico. Toby menciona que el filtro se puede aplicar no solo al indicador estocástico sino también a otros indicadores.
Toby explica que en la primera parte del tutorial de codificación, cubrieron la lógica central del EA (Asesor experto) y el indicador. En esta parte, planean agregar diferentes señales de entrada y un filtro para mejorar la estrategia. Antes de sumergirse en la codificación, Toby enfatiza la importancia de comprender el objetivo. Explican los componentes que quieren agregar al EA, incluido un segundo tipo de señal de entrada basada en salir de las zonas inferior y superior del indicador y la opción de invertir las señales.
Luego, Toby sugiere cambiar a Visual Studio Code, un editor que recomiendan para la codificación MQL5. Mencionan que el código en el que trabajarán es el EA creado en la primera parte. Después de compilar para asegurarse de que funciona correctamente, proceden con la codificación.
El primer paso es agregar una entrada para el modo de señal usando una enumeración (enumeración) para los diferentes modos. Crean la enumeración llamada "modo de señal" con opciones como "salida cruzada normal", "entrada cruzada normal", "salida cruzada invertida" y "entrada cruzada invertida". Toby explica el significado de cada opción y cómo afecta la estrategia comercial.
Después de agregar la enumeración, Toby la agrega como entrada en el código y asigna la opción predeterminada como "exit cross normal". También se aseguran de compilar el código para verificar si hay errores.
A continuación, Toby planea usar el modo de señal en la función OnTick() para buscar nuevas señales. Para simplificar el código y evitar sentencias if complejas, Toby decide escribir una función separada llamada "señal de verificación" para manejar la lógica de la señal. Explican que esta función devolverá un valor booleano que indica si se debe abrir una operación o no.
Toby crea la función de "señal de verificación", que toma dos parámetros: un parámetro booleano para especificar si está verificando una señal de compra o venta y un parámetro entero para el recuento de posiciones abiertas. Agregan un comentario que explica el propósito de la función y los parámetros. También agregan un cheque para devolver falso si una posición ya está abierta.
A continuación, Toby agrega código para verificar los cruces según el modo de señal seleccionado. Crean variables booleanas para cada opción de cruce, como "cruce de salida superior", "cruce de entrada superior", "cruce de salida inferior" y "cruce de entrada inferior". Explican la lógica detrás de cada condición de cruce, haciendo referencia a los valores de los búferes del indicador estocástico.
Después de agregar las comprobaciones cruzadas, Toby compila el código para asegurarse de que no haya errores. También agregan la declaración if faltante y corrigen los errores de compilación.
Con la función de "señal de verificación" y las comprobaciones cruzadas en su lugar, Toby vuelve a la función OnTick() y reemplaza las declaraciones if existentes para verificar las posiciones de compra y venta con llamadas a la función de "señal de verificación". Pasan los parámetros apropiados y cuentan las posiciones abiertas a la función y comprueban si devuelve verdadero antes de abrir una operación.
Después de volver a compilar el código, Toby cambia a MetaTrader para probar la lógica del EA. Seleccionan el EA, eligen el modo de solo precio de apertura y habilitan el modo visual para la prueba. Configuran los parámetros de entrada para cada modo de señal y ejecutan la prueba visual. Toby explica que es importante probar el EA a fondo para asegurarse de que se comporta como se espera.
Toby concluye que todos los modos de señal funcionan correctamente según los resultados de la prueba visual. Sugieren pasar a agregar un filtro en la siguiente parte del tutorial.
Actualmente, recuperamos los valores "uno" y "dos" para buscar una señal. Sin embargo, quiero modificar esto para que comencemos en el índice 0 con nuestro búfer. Además, debemos recuperar tres valores para la señal de verificación. Si nuestro filtro de verificación de barras claras está activo, es posible que necesitemos valores adicionales. Para implementar estos cambios, necesitamos modificar el código.
Primero, desplacemos hacia arriba hasta donde recuperamos los valores del indicador. En la función "desmarcar", donde tenemos la línea "obtener valores de indicador", necesitamos hacer algunos cambios. El primer parámetro representa el número de búfer del indicador. Solo nos interesa la línea principal, que está en el índice 0. Así que sigue igual. Sin embargo, la posición de inicio actualmente está establecida en el índice 1 y recuperamos dos valores. Queremos cambiar la posición de inicio al índice 0 y recuperar al menos tres valores. Entonces modificamos el código para comenzar en el índice 0 y recuperar tres valores: cero, uno y dos.
Si nuestro filtro de verificación de barras claras está activo, necesitamos recuperar valores de indicadores adicionales para verificar el filtro. Necesitamos recuperar "tres" más nuestro valor de barras claras de entrada. Por ejemplo, si el valor de las barras claras de entrada se establece en 5, necesitamos un total de ocho valores. Entonces modificamos el código en consecuencia para recuperar valores a partir del índice 0 hasta el número requerido de valores.
Después de realizar estos cambios, debemos almacenar los valores recuperados en el búfer llamado "Principal". Además, debemos verificar si la función tuvo éxito en la recuperación de los valores solicitados, que son tres más nuestro valor de barras claras de entrada. Modificamos el código para incluir este cheque.
Luego, necesitamos actualizar el código donde verificamos la señal. En lugar de acceder al búfer principal en el índice 0, ahora necesitamos acceder a él en los índices 1 y 2 para la verificación cruzada. Reemplazamos todas las instancias del índice 0 con 1 y el índice 1 con 2.
Ahora tenemos los valores correctos del indicador y podemos continuar con el bucle for. Debemos compilar el código para asegurarnos de que no haya errores.
En el ciclo for, queremos verificar nuestro filtro de barras claras que comienza en el índice 3. Esta es la posición después de la verificación de cruce de señal. Continuamos este bucle hasta que nuestro contador esté por debajo de tres más el valor de las barras claras. Por ejemplo, si el valor de las barras claras se establece en 5, el contador sería 8. Esto significa que verificamos hasta el índice 7, el último valor en nuestro bucle. El propósito de este bucle es asegurar que no haya cruces de la línea superior dentro de estas barras. Actualizamos el código para reflejar estos cambios.
Dentro del bucle for, primero comprobamos el nivel superior. Comparamos el valor en el búfer Main[i-1] con el nivel superior de entrada. Si es mayor y el valor en el búfer Main[i] es menor o igual que el nivel superior de entrada, tenemos un cruce. También verificamos la condición opuesta para un cruce en la otra dirección. Modificamos el código en consecuencia.
Después del ciclo for, agregamos otra instrucción if-else. Si nuestra entrada clear bars reverse es verdadera, devolvemos verdadero porque queremos un cruce cuando se invierte el filtro. De lo contrario, devolvemos false.
Finalmente, agregamos una declaración if-else similar para la verificación de nivel inferior. Copiamos la declaración if existente y hacemos los cambios necesarios para la verificación de nivel inferior.
Después de hacer estos cambios, volvemos a compilar el código para asegurarnos de que no haya errores. Ahora, podemos usar la función de verificación de barras claras en nuestra función OnTick.
En la función OnTick, agregamos la función de verificación de barras claras en la declaración if donde verificamos la señal.
Sigamos con el proceso de optimización. Hemos seleccionado el símbolo Euro/Dólar y el marco de tiempo a partir de 2019. Usaremos solo el precio de apertura y el algoritmo genérico rápido. Nuestro objetivo de optimización es encontrar los mejores parámetros para nuestro filtro de barras claras.
Antes de comenzar con la optimización, definamos los parámetros que queremos optimizar. En este caso, optimizaremos el período retrospectivo del filtro de barras claras, que determina el número de barras a considerar para el filtro. Probaremos valores que van de 5 a 20, incrementando en 5. Además, optimizaremos los umbrales de nivel superior e inferior para el filtro, probando valores de 50 a 150, incrementando en 25.
Ahora, ejecutemos la optimización y analicemos los resultados. Analizaremos el beneficio neto, las transacciones totales y el factor de beneficio para evaluar el rendimiento de cada combinación de parámetros. Con base en estas métricas, podemos identificar los mejores valores de parámetros que generan la mayor ganancia.
Después de ejecutar la optimización, podemos examinar los resultados e identificar los valores de los parámetros que se desempeñaron mejor. Podríamos encontrar que un período retrospectivo de 10, un umbral de nivel superior de 100 y un umbral de nivel inferior de 75 proporcionaron la ganancia neta y el factor de ganancia más altos.
Una vez que hayamos identificado los valores óptimos de los parámetros, podemos usarlos para probar nuestra estrategia en un conjunto de datos más grande o implementarla en una cuenta comercial real.
Recuerde que los resultados de la optimización se basan en datos históricos y es posible que no garanticen el rendimiento futuro. Es importante monitorear y evaluar continuamente el desempeño de la estrategia y ajustar los parámetros según sea necesario.
Con los parámetros optimizados, podemos refinar aún más nuestra estrategia y explorar otras posibilidades de mejora. Podemos considerar agregar filtros o condiciones adicionales para mejorar la efectividad de la estrategia.
En conclusión, el proceso de optimización nos ayuda a encontrar los mejores valores de parámetros para nuestro filtro de barras claras, mejorando el rendimiento de la estrategia y aumentando potencialmente la rentabilidad. Es una herramienta valiosa en el desarrollo y perfeccionamiento de las estrategias comerciales.