Cómo desarrollar una estrategia de trading rentable
MetaTrader 4
—
Sistemas comerciales
| 11 mayo 2016, 11:01
2 687
2
Introducción
El proceso de desarrollo de estrategias satisfactorias de trading con implementación de análisis técnicos se puede dividir en varias fases:
- Una varios indicadores técnicos a una ventana de un gráfico para el precio de instrumentos financieros, e identificar los patrones de las correlaciones del mercado y señales de los indicadores.
- Formule los datos obtenidos del paso anterior.
- Convierta la estrategia a un lenguaje relevante de programación para crear un sistema mecánico de trading.
- Inicie el sistema de trading a través de un simulador basado en datos del historial, e intentar adaptar sus parámetros de entrada (optimizar).
- Si el paso anterior no ha aumentado el balance, vuelva al paso 1.
- Inice el sistema que ha obtenido en las fases anteriores con cuentas demo para una prueba.
- Si el paso anterior no ofrece ningún beneficio de dinero virtaul, vuelva al paso 1.
- Utilice el sistema en trading real, ajuste ocasionalmente los parámetros de entrada para cambiar las condiciones del mercado.
Y ya está. El sistema que se ha creado se puede usar en trading automático, así como un asesor en trading virtual para indicar las señales más importantes que envíen los indicadores técnicos.
Veamos qué pasa si se intenta informatizar todo el proceso.
Veamos qué pasa si se intenta informatizar todo el proceso.
Este artículo analiza el uso de una red neuronal simple de una sola capa, para identificar los movimientos futuros del precio basándose en las lecturas del Oscilador de Aceleración/Deceleración (AC).
Red neuronal
¿Qué es una red neuronal o Perceptron? Es un algoritmo que utiliza un filtro lineal para añadir un objeto a una clase particular o, al contrario, para excluirlo de la misma clase de objeto. La ecuación es así:
w1 * a1 + w2 * a2 + ... wn * an > d,
donde:
wi - coeficiente de ponderaje con índice i,
ai - valor número de una señal con el índice del objeto,
d - valor límite que a menudo es igual a 0.
Si el lado izquierdo de la inecuación parece ser más alto que el valor límite, el objeto pertenece a una clase específica; si es más bajo, no se aplica esto. En caso de que la clasificación del objeto implique una separación en dos clases, una red neuronal de una capa es suficiente.
Puede parece que la inecuación que se ha utilizado en la red neuronal es, de algún modo, similar a un "conjuro chamánico" en cuanto a los factores de ponderaje. Pero este no es el caso, en realidad. El principio de una operación de red neuronal tiene un significado geométrico.
De hecho, un avión se describe geométricamente como una ecuación lineal. Por ejemplo, en un espacio tridimiensional, la ecuación del plano con las coordenadas X, Y y Z es así:
A * X + B * Y + C * Z + D = 0
Las coordinadas de todos los puntos colocados en un lado del plano en este espacio satisface la inecuación:
A * X + B * Y + C * Z + D > 0
Y las coordinadas de todos los puntos colocados en el otro lado del plano satisface la inecuación:
A * X + B * Y + C * Z + D < 0
Por lo tanto, si conocemos la ecuación de un plano y cualquier punto de la coordenada, se pueden dividir un conjunto de todos los puntos del espacio en dos conjuntos de puntos separados por este plano.
Los coeficientes de ponderaje en una inecuación de una red neuronal, son constantes que definen una cierta ecuación de un plano en un espacio multidimensional de señales de objetos, respectivamente. Mediante una inecuación, se puede determinar con exactitud si estas líneas de objetos se basan en uno u otro lado del plano específico. Para esto, basta con ubicar las coordenadas de los objetos y, sustituyéndolas en la ecuación del plano, compararlas con cero.
Definición del problema
Si dividimos los objetos en dos clases, como posiciones abiertas largas y posiciones cortas, y usamos el oscilador de los valores del indicador del análisis técnico como señales, sólo se necesitará encontrar una ecuación de plano y utilizarla para identificación. La definición del problema está clara.
Sin embargo, hay un problema con la red neuronal. Cojamos un espacio bidimensional de señales descritas por las coordenadas X y Y. Se utilizará para colocar objetos con puntos de coordenadas.
Sin embargo, hay un problema con la red neuronal. Cojamos un espacio bidimensional de señales descritas por las coordenadas X y Y. Se utilizará para colocar objetos con puntos de coordenadas.
La imagen e arriba muestra que si un conjunto de puntos en rojo no se cruza con un set de puntos de coordenadas en azul, ambos grupos se pueden separar utilizando líneas (una línea es un separador en espacios bidimensionales, y en un plano - en espacios con tres o más dimensiones). Por favor, tenga en cuenta que las encuaciones para estas líneas divisorias pueden variar. Otro ejemplo:
Se puede ver que los grupos de puntos se cruzan en el espacio y no es posible dibujar una línea divisoria clara entre ellos. La única solución viable sería dibujar una línea que separe los dos grupos de puntos, para que la mayoría de los objetos en rojo se queden en un lado, y los azules en el otro. Esta vez, estamos trabajando con un problema de optimización, es decir, la búsqueda de una ecuación que divida un plano o una línea, que sea capaz de una separación máxima entre dos clases de objetos, pero con la probabilidad de que se crea erróneamente que algunos puntos pertenecen a una clase a la que en realidad no pertenecen.
Hay otras maneras de implementar redes neuronales, como a través de filtros no lineales y redes con más de una capa. Los filtros no lineales permiten utilizar una orden más alta de división de superficies como una capa de separación límite entre objetos de diferentes clases. Las redes con varias capas implican el uso de varios filtros (de separación de planos o superficies) para identificar los objetos que pertenecen a tres clases o más.
Intentemos definir el problema que tendremos que solucionar. La información básica que debe conocer un trader para conseguir resultados de trading rentables, es la dirección de los cambios de precio. Si un precio sube, el trader debería abrir una posición larga. Si baja, el trader debería abrir una posición corta. Por lo tanto, ya hay dos clases de objetos. Concretamente, las direcciones de movimiento de los precios. Para tomar una decisión, tras el análisis técnico, los traders consultan un estudio de los indicadores técnicos y osciladores. También se analizará el oscilador llamado AC.
Como los osciladores técnicos son historigramas cuyos valores se obtienen de una línea horizontal, se necesitará una red neuronal con un filtro lineal, respectivamente. Se utilizarán los patrones como señales de un objeto, es decir, los valores del oscilador de cuatro puntos tomados en un periodo de siete pasos en el historial, empezando por el momento actual.
El valor del oscilador está marcado con un círculo en la imagen de arriba. Se identificarán como a1, a2, a3 y a4, y se pondrán en la ecuación de separación del plano para comparar los valores obtenidos con cero, y así averiguar en qué lado se mostrará el patrón.
Sólo queda coger la ecuación del plano, que separará los patrones que van antes de la subida del precio, de los que van antes de la bajada.
Para esto, se utilizará el algoritmo genético construido en MetaTrader 4 y que está destinado para acelerar el proceso de optimización. En otras palabras, se seleccionarán los valores de los coeficientes de ponderaje de un filtro lineal, de modo que permitirá obtener una ecuación de línea divisoria para el balance máximo, utilizando estrategias de optimización basadas en los datos del historial.
Para esto se necesitará, al menos, una fórmula de estrategia de trading, para poder implementar el algoritmo y convertirlo al código del Asesor experto para MetaTrader 4.
En teoría, un sistema de trading debería proporcionar señales tanto para el mercado de entrada como para el de salida. Sin embargo, las señales de salida son opcionales y se pueden evitar con las siguientes condiciones:
- Colocando órdenes de take profit y stop loss;
- Yendo en la dirección contraria una vez recibida la señal que indique un cambio de dirección en la tendencia del mercado.
- Es más probable que los precios suban.
- Es más probable que los precios bajen.
Para reducir el número de señales falsas de redes neuronales, se leerán y se tomarán decisiones basadas únicamente en barras anteriores y en los precios de apertura de éstas.
Solución del problema
Abajo puede encontrar el código fuente del Asesor experto que se implementa en esta estrategia de trading://+------------------------------------------------------------------+ //| ArtificialIntelligence.mq4 | //| Copyright й 2006, Yury V. Reshetov | //| http://reshetov.xnet.uz/ | //+------------------------------------------------------------------+ #property copyright "Copyright й 2006, Yury V. Reshetov ICQ:282715499 http://reshetov.xnet.uz/" #property link "http://reshetov.xnet.uz/" //---- input parameters extern int x1 = 120; extern int x2 = 172; extern int x3 = 39; extern int x4 = 172; // StopLoss level extern double sl = 50; extern double lots = 0.1; extern int MagicNumber = 888; static int prevtime = 0; static int spread = 3; //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { //---- return(0); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- return(0); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { if(Time[0] == prevtime) return(0); prevtime = Time[0]; //---- if(IsTradeAllowed()) { spread = MarketInfo(Symbol(), MODE_SPREAD); } else { prevtime = Time[1]; return(0); } int ticket = -1; // check for opened position int total = OrdersTotal(); for(int i = 0; i < total; i++) { OrderSelect(i, SELECT_BY_POS, MODE_TRADES); // check for symbol & magic number if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) { int prevticket = OrderTicket(); // long position is opened if(OrderType() == OP_BUY) { // check profit if(Bid > (OrderStopLoss() + (sl * 2 + spread) * Point)) { if(perceptron() < 0) { // reverse ticket = OrderSend(Symbol(), OP_SELL, lots * 2, Bid, 3, Ask + sl * Point, 0, "AI", MagicNumber, 0, Red); Sleep(30000); if(ticket < 0) { prevtime = Time[1]; } else { OrderCloseBy(ticket, prevticket, Blue); } } else { // trailing stop if(!OrderModify(OrderTicket(), OrderOpenPrice(), Bid - sl * Point, 0, 0, Blue)) { Sleep(30000); prevtime = Time[1]; } } } // short position is opened } else { // check profit if(Ask < (OrderStopLoss() - (sl * 2 + spread) * Point)) { if(perceptron() > 0) { // reverse ticket = OrderSend(Symbol(), OP_BUY, lots * 2, Ask, 3, Bid - sl * Point, 0, "AI", MagicNumber, 0, Blue); Sleep(30000); if(ticket < 0) { prevtime = Time[1]; } else { OrderCloseBy(ticket, prevticket, Blue); } } else { // trailing stop if(!OrderModify(OrderTicket(), OrderOpenPrice(), Ask + sl * Point, 0, 0, Blue)) { Sleep(30000); prevtime = Time[1]; } } } } // exit return(0); } } // check for long or short position possibility if(perceptron() > 0) { //long ticket = OrderSend(Symbol(), OP_BUY, lots, Ask, 3, Bid - sl * Point, 0, "AI", MagicNumber, 0, Blue); if(ticket < 0) { Sleep(30000); prevtime = Time[1]; } } else { // short ticket = OrderSend(Symbol(), OP_SELL, lots, Bid, 3, Ask + sl * Point, 0, "AI", MagicNumber, 0, Red); if(ticket < 0) { Sleep(30000); prevtime = Time[1]; } } //--- exit return(0); } //+------------------------------------------------------------------+ //| The PERCEPRRON - a perceiving and recognizing function | //+------------------------------------------------------------------+ double perceptron() { double w1 = x1 - 100.0; double w2 = x2 - 100.0; double w3 = x3 - 100.0; double w4 = x4 - 100.0; double a1 = iAC(Symbol(), 0, 0); double a2 = iAC(Symbol(), 0, 7); double a3 = iAC(Symbol(), 0, 14); double a4 = iAC(Symbol(), 0, 21); return (w1 * a1 + w2 * a2 + w3 * a3 + w4 * a4); } //+------------------------------------------------------------------+
Ahora sólo hay que selecionar los coeficientes de ponderaje de la ecuación lineal del plano de salida para una red neuronal. Iniciemos la estrategia pulsando Ctrl + R:
En la pestaña de Ajustes, seleccione un método rápido de modelo de emulación de mercado sólo para los precios de apertura (las señales en el AE se leen según las barras anteriores). Marque Recalcural y Optimizar, y haga clic en Propiedades del experto.
Pestaña de prueba:
Elija un depósito inicial de 3 000 dólares, la optimización y la prueba se llearán a cabo basándose en posiciones cortas. El índice principal de optimización se considerará como el balance máximo durante el periodo de prueba. Se debe incluir también un algoritmo genético para acelerar el proceso de optimización.
Pestaña de entradas:
Marque los paramétros de entrada seleccionados por un algoritmo genético: x1, x2, x3 y x4 para el ponderaje de los factores de la red neuronal; también tendrá que elegir el valor aceptablo sl - nivel stop loss. El número de lotes se tomará como 1 y como número mágico mantendrá el que esté por defecto.
Pestaña de optimización:
Para acelerar el proceso de optimización, la bajada máxima se establecerá al nivel del 35%. Para clarificar el nivel aceptable de una caída máxima, hay que, primero, comenzar el proceso de optimización sin restricciones. Sólo tras la obtención de los primeros resultados de optimización, se necesita coger su valor, redondearlo al alza y, tras parar el proceso, introducir los límites de trading. Cuando se reinicie, el proceso de optimización irá considerablemente más rápido.
Haca clic en OK para cerrar las pestañas de ajustes del Experto. Ahora puede comenzar el proceso de optimización pulsando el botón Iniciar. Se recomienda también deshabilitar la salida para los resultados inútiles:
Si un ordenador tiene una meoria RAM pequeña, se aconseja limpiar de vez en cuando los diarios durante el proceso de optimización.
En los ordenadores Pentium III, todo el proceso de optimización dura escasamente una hora. El tiempo depende del instrumento financiero.
Todo lo que queda por hacer es la prueba de los datos del historial. Para ello haga clic con el botón derecho en la primera línea y seleccione Establecer parámetros de entrada del menú emergente.
No hay duda de que los resultados de la prueba coincidirán con los datos emitidos por el optimizador.
Nos gustaría publicar aquí esos resultados. Sin embargo, cualquier persona que tenga alguna duda, puede reivindicar que la información podría adaptarse simplemente a los datos del historial. ¿Y cómo se comportaría la estrategia obtenida en caso de un cambio del mercado? ¿Cómo de importantes son en el futuro los patrones obtenidos en los últimos periodos? Por ejemplo, la participación en el campeonato de trading automático, en el que las reglas prohíben modificar los parámetros introducidos hasta que el campeonato no haya terminado.
Vamos a intentar hacer un experimento. Para ello, se formará la red neuronal en los datos del historial, como una prueba reprentativa, pero excluirá los datos de los últimos tres meses. Para esto, se utilizará un periodo de optimización y prueba según las fechas de las funciones integradas en el tester.
Empecemos el proceso de optimización. Se obtendrán los resultados para los parámetros de entrada: x1 = 146, x2 = 25, x3 = 154, x4 = 121, sl = 45.
Conclusión
¿Cómo deberían tratarse las conclusiones sobre las redes neuronales que sacan D. Katz y D. McCormick en su libro "La enciclopedia de las estrategias de trading"?En primer lugar, operar según el siguiente principio: confía, pero verifica. Las actividades de D. Katz y D. McCormick están construidas de forma que evitan la posibilidad de esta prueba. En otras palabras, es un acercamiento no científico que excluye la repoducción. Es comprensible cuando algunas de las personas están más metidas en el negocio de la publicidad que en trading. Su tarea es vender satisfactoriamente el manuscrito, sin tener mucho en cuenta su contenido. Para que tenga sentido, hay que comprender hacia dónde iban para crear todo ese papel escrito al estilo de "500 consejos útiles" intercalado con imágenes. Vamos a intentar averiguarlo.
- La definición del problema de D. Katz y D. McCormick era crear un indicador no existente o, para ser más precisos, un % estocástico de tiempo invertido que, de hecho, actúa como una máquina del tiempo y coge información de 10 barras más avanzadas, y basándose en ellas, proporciona las lecturas de 10 barras hacia atrás. Si yo tuviera este indicador, Bill Gates y George Soros no podían competir conmigo;
- El siguiente paso era coger algunos de los datos y utilizarlos en las capacidades telepáticas para obtener predicciones estocásticas. Ya han establecido la tarea de aproximación, es decir, saben los argumentos de la función para obtener su valor. La aproximación, de hecho, es la adaptación, que Katz y McCormick discuten tan directamente en su manuscrito.
- No importa mucho cómo se obtuvo la aproximación, sino que es más importante que las redes neuronales no son aptas para este fin. Sería mucho más fácil completar la misma tarea, por ejemplo, a través de un análisis espectral;
- Las redes neuronales actúan incluso peor con las tareas de interpolación y extrapolación, y si se cogen los datos de una prueba representativa, se aplican las expectativas, en lugar de la pertenencia a una cierta clase;
- Con una especie de aproximación estocástica telepática cuya realización incluye varios errores, Katz y McCormick fueron más allá y, basándose en las lecturas de estos dispositivos erróneos, crearon una "estrategia de trading" que también tenía que interpretar las lecturas de un dispositivo defectuoso, concretamente, si %K sobrepasa ciertos límites, es probable que los precios hayan alcanzado un valor máximo o mínimo. Después de que todo este "oropel" se atascara en un sistema de trading mecánico y, habiendo recibido las estadísticas y las conclusiones, los autores propusieron presentárselo a sus lectores.
Sin embargo, no fueron solamente Katz y McCormick quienes fracasaron en los experimentos relacionados con las redes neuronales. El primer proyecto de red neuronal, llamado "Perceptron", tampoco justificó las esperanzas que se tenían en él. El primer paso es el problemático, que es exactamente lo que le pasó a Frankenstein. Los últimos análisis objetivos sobre las capacidades y discapacidades de una red neuronal, fueron realizados por M. Minsky y S. Papert [1]. Por lo tanto, antes de comenzar con la búsqueda de una solución para ciertos problemas con las redes neuronales, intente no pasar dos veces por la misma línea:
- Para obtener una respuesta precisa a la pregunta de cuándo y cuánto, la definición del problema no debería contener proyecciones telepáticas futuras . La solución debería restringirse a la forma de identificación de la decisión, basada en las señales actuales en forma de separación en varias posibles situaciones exclusivas. Por ejemplo, si tiene una tarea relacionada con el tiempo, intente no averiguar cuándo va a empezar a llover exactamente, o cuál será la cantidad de lluvia en milímetros. Limite el pronóstico de una posible situación a un cambio hacia el tiempo soleado o lluvioso.
- Corte todo lo que no sea necesario con la "Navaja de Occam". Algunas de las personas que experimentan, creen que cuantas más capas tenga la red neuronal y más difícil sea la activación de sus funciones, mejores serán los resultados. De este modo, se puede dibujar de forma más exacta la línea que separa los objetos identificados basados en sus características. Nadie discutirá eso. Pero, ¿por qué? Después de todo, un acercamiento así es equivalente a la construcción de castillos de arena. Si el borde tiene una forma definida, que se mantuvo constante en tiempo e independiente de otras circunstancias, la complejidad para maximizar una mejora tendría un sentido. Pero la mayoría de los problemas solucionados con la asistencia de una red neuronal no se pueden aplicar a esta categoría. Los instrumentos financieros tampoco se mantienen firmes. Por lo tanto, la red neuronal más simple con un número bajo de entradas y una sola capa, puede ser más aceptable que una construcción más compleja con una eficiencia desechable.
Referencias
- Minsky, M. and Papert, S. (1969) PERCEPTRON; una introducción a la geometría computacional, MIT Press, Massachussetts
Traducción del ruso hecha por MetaQuotes Ltd.
Artículo original: https://www.mql5.com/ru/articles/1447
Archivos adjuntos |
ArtificialIntelligence.mq4
(6.04 KB)
Advertencia: todos los derechos de estos materiales pertenecen a MetaQuotes Ltd. Queda totalmente prohibido el copiado total o parcial.
Alertas de sonido en los indicadores
Cómo crear indicadores "de voz" para uso diario.
¿Qué es un Martingale?
Es una descripción corta de varias ilusiones que aparecen cuando se hace trading utilizando estrategias de apuesta martingale o utiliza mal los picos y los mecanismos por el estilo.
MetaTrader 4 trabajando con antivirus y cortafuegos
La mayoría de traders usan programas especiales para proteger sus PC. Por desgracia, estos programas no solo no protegen los ordenadores frente a las intrusiones, virus y troyanos, sino que también consumen una cantidad importante de recursos. Esto está relacionado con el tráfico de la red, en primer lugar, algo que está completamente controlado por algunos antivirus y cortafuegos inteligentes. La razón de escribir este artículo fue que los traders se quejaban de la lentitud del terminal de cliente de MetaTrader 4 cuando trabaja con Outpost Firewall. Hemos decidido hacer nuestra propia investigación usando Kaspersky Antivirus 6.0 y Outpost Firewall Pro 4.0.
Problemas del análisis técnico revisado
En este momento, el análisis técnico, junto con el análisis fundamental, es uno de los métodos más importantes para analizar el mercado de valores. Al ser uno de los métodos de predicción de las dinámicas de precios del mercado de valores, el análisis técnico tiene una gran cantidad de inconvenientes que arroja algunas dudas sobre su aplicación práctica.
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
Artículo publicado Cómo desarrollar una estrategia de trading rentable:
Autor: Yury Reshetov
Saludos a todos.
Señor Yury Reshetov me puede decir por favor ¿porqué en el indicador del Perceptron (AC) usted escribe "symbol()" en lugar de "NULL"?.
Su código.
Mi código pero sin Perceptron.
Saludos a todos.
Señor Yury Reshetov me puede decir por favor ¿porqué en el indicador del Perceptron (AC) usted escribe "symbol()" en lugar de "NULL"?.
Su código.
Mi código pero sin Perceptron.
Hola Junqui!
En la documentación puedes encontrar que en la función uedes colocar NULL si vas a calcular el par donde esta el indicador, la función Symbol() devuelve el par donde esta el indicador, lo unico que hace Yury es ser redundante. No tiene mayores implicaciones...
Espero te sirva mi comentario!!!
Paco Tavares