La Magia de la Filtración
Introducción
La mayoría de los desarrolladores de sistemas de trading automáticos (ATS), de una u otra manera, usa algún tipo de filtrado de señales. Aunque no es la única manera de mejorar las características del sistema, se considera más eficaz. Los principiante "Grial-Constructores" caen a menudo a la magia de los filtros. Es muy sencillo tomar alguna estrategia de trading, colgar una docena de filtros sobre ella, y aquí tenemos,-un asesor experto rentable.
Sin embargo, hay quienes se oponen a la utilización de filtros. Los filtros (a veces 2 - 3 veces) reducen significativamente el número de oeraciones, y no hay garantía de que en el futuro vayan a ser tan eficaces como en el pasado. Ciertamente, también hay algunas otras razones.
Así que tomemos una mirada más y consideremos que todo esto paso en un momento.
La hipótesis de la falta de sentido de la filtración
Si el EA es improductivo ("escurridor"), es poco probable que ayude a algún tipo de filtración - la magia de la filtración es impotente aquí.
Por lo tanto, en este artículo, estos asesores expertos no se considerarán. Aunque debemos saber que hay estudios de filtros frecuencia cuántica, capacwes de convertir a prácticamente cualquier "escurridor" en un pseudo-Grial.
Hipótesis de los peligros de la filtración
Si el asesor experto por sus características se aproxima a un sistema ideal de Trading automatizado, entonces el filtrado sólo lo empeorará.
Debemos aclarar qué se entiende por un sistema de trading automatizado ideal. Se entiende por esto, una estrategia de trading, que genera sólo transacciones rentables, es decir, no trae pérdidas. En tal sistema, el número de transacciones rentables = 0.
¿Qué es un filtro?
En su forma más simple, un filtro de señal de trading es una restricción lógica tal como: Si A no es menor que B (A> = B), entonces se omite la señal, y si es más pequeño (A<B)- no. Como resultado se elimina una parte de las señales. Los términos de la filtración son establecidos por el desarrollador de robots de trading. Con el fin de establecer algunos tipos de tendencias, tenemos que analizar la influencia de diversos factores en las características del ATS. Y hay una gran variedad de factores. Por lo tanto debemos recurrir a hacia fuera la intuición para elegir lo más pertinente y coherente.
Un ejemplo. Puede haber una correlación entre los resultados de trading del ATS y la presión atmosférica en la aldea de Kukushkino, es decir puedes crear un filtro apropiado y mejorar la rentabilidad del EA, que tendrá en cuenta el tiempo en esta pequeña ciudad rusa. Sin embargo, es poco probable que alguien agradezca un enfoque innovador de filtrado, a pesar de que podría aumentar la rentabilidad del sistema.
Clasificación de los filtros
Aunque existe una gran variedad de filtros utilizados en ATS, todavía pueden ser divididos en dos clases principales:
- bandpass filter (P-filter) - transmita una banda de señales;
- discrete filter (D-filter) - selectiva transmisión de señales por la máscara (plantilla).
¿Dónde empezar?
Vamos a considerar el mecanismo de filtrado para mirar un ejemplo. Vamos a usar el EA DC2008_revers (ver anexo archivo), que fue desarrollado especialmente para este artículo y explorar sus características (sin utilizar los filtros). Aquí está el informe obtenido durante la prueba.
Informe
Símbolo | EURUSD (Euro frente US Dollar) | ||||
Período de | 1 Minuto (M1) 2009.09.07 00:00 - 2010.01.26 23:59 (2009.09.07 - 2010.01.27) | ||||
Modelo | Todas los ticks (el método más preciso basado en todos los plazos disponibles) | ||||
Parámetros | Lotes = 0.1; Symb.magic = 9001; nORD.Buy = 5; nORD.Sell = 5; | ||||
Barras en el historial | 133967 | Modelado de ticks | 900848 | Calidad del Modelado | 25.00% |
Errores de tráfico no coincidentes | 0 | ||||
Depósito inicial | 10000.00 | ||||
Beneficio neto | 4408.91 | Beneficio bruto | 32827.16 | Pérdidas brutas | -28418.25 |
Profitability | 1.16 | Beneficio esperado | 1.34 | ||
Drawdown absoluto | 273.17 | Aspiración máxima | 3001.74 (20.36%) | Drawdown relativo | 20.36% (3001.74) |
Total transacciones | 3284 | Posiciones cortas (ganadas %) | 1699 (64.98%) | Posiciones largas (% ganadas) | 1585 (65.68%) |
Transacciones rentables (% del total) | 2145 (65.32%) | Trades con pédidas (% del total) | 1139 (34.68%) | ||
Más grande | Trades rentablse | 82.00 | trades con pérdidaso | -211.00 | |
Promedio | Trades rentablse | 15.30 | trades con pérdidaso | -24.95 | |
Número máximo | victorias consecutivas (ganancia) | 29 (679.00) | derrotas consecutivas (pérdida) | 16 (-290.34) | |
Máximo | ganancias consecutivas (victorias contabilizadas) | 679.00 (29) | pérdidas consecutivas (pérdidas contabilizadas) | -1011.00 (10) | |
Promedio | Ganacias consecutivas | 5 | pérdidas consecutivas | 3 |
Figura 1. Resultados de Backtesting del historial. EA Inicial sin filtros
Análisis del resultado:
- El asesor experto es provechoso y los trades ganadores conforman más del 60% - lo cual es bueno.
- Una aspiración máxima del 20% de los depósitos y más de $ 3000 con un tamaño de lote mínimo - es malo.
- Un número total de transacciones es suficiente para el uso de la filtrado (> 3000)).
Por supuesto, estas conclusiones son pertinentes sólo para el período dado actual del historial. No sabemos cómo el asesor experto negociará una ubicación diferente. Sin embargo, esto no nos puede impedir realizar cambios en sus características utilizando el filtrado.
Por lo tanto, para este asesor experto, podemos tratar de encontrar filtros que mejoren la rentabilidad y reducir el drawdown.
Filtro Bandpass (P-filter)
Este es uno de los filtros más común y simple, porque el resultado puede ser evaluado inmediatamente después de las pruebas y sin ningún procesamiento adicional. Considerar las opciones posibles para usar en el asesor experto probado. Como uno de los parámetros, vamos a utilizar la banda de salto y comparar el precio de la apertura de la barra en el precio de cierre en diferentes períodos de tiempo.
Período H4
//+---------------------------------------------------------------------------------+ // Señal de COMPRA //+---------------------------------------------------------------------------------+ if(true && High[0]<iLow(NULL,PERIOD_H1,1) && ORD.Buy<nORD.Buy //.........................................Filters................................... && iOpen(NULL,PERIOD_H4,1)<iClose(NULL,PERIOD_H4,1) ) { //---- Signal.Buy=true; } //+---------------------------------------------------------------------------------+ // Señal de VENTA //+---------------------------------------------------------------------------------+ if(true && Low[0]>iHigh(NULL,PERIOD_H1,1) && ORD.Sell<nORD.Sell //.........................................Filters................................... && iOpen(NULL,PERIOD_H4,1)>iClose(NULL,PERIOD_H4,1) ) { //---- Signal.Sell=true; }
Figura 2. Resultados de Backtesting del historial. Asesor experto P-filtro (período de H4)
Período H1
//+---------------------------------------------------------------------------------+ // Señal de COMPRA //+---------------------------------------------------------------------------------+ if(true && High[0]<iLow(NULL,PERIOD_H1,1) && ORD.Buy<nORD.Buy //.........................................Filters................................... && iOpen(NULL,PERIOD_H1,1)>iClose(NULL,PERIOD_H1,1) ) { //---- Signal.Buy=true; } //+---------------------------------------------------------------------------------+ // Señal de VENTA //+---------------------------------------------------------------------------------+ if(true && Low[0]>iHigh(NULL,PERIOD_H1,1) && ORD.Sell<nORD.Sell //.........................................Filters................................... && iOpen(NULL,PERIOD_H1,1)<iClose(NULL,PERIOD_H1,1) ) { //---- Signal.Sell=true; }
Figura 3 . Resultados de Backtesting del historial. Asesor experto con P-filtro (período H1)
Período M30
//+---------------------------------------------------------------------------------+ // Señales de COMPRA //+---------------------------------------------------------------------------------+ if(true && High[0]<iLow(NULL,PERIOD_H1,1) && ORD.Buy<nORD.Buy //.........................................Filters................................... && iOpen(NULL,PERIOD_M30,1)<iClose(NULL,PERIOD_M30,1) ) { //---- Signal.Buy=true; } //+---------------------------------------------------------------------------------+ // Señal de VENTA //+---------------------------------------------------------------------------------+ if(true && Low[0]>iHigh(NULL,PERIOD_H1,1) && ORD.Sell<nORD.Sell //.........................................Filters................................... && iOpen(NULL,PERIOD_M30,1)>iClose(NULL,PERIOD_M30,1) ) { //---- Signal.Sell=true; }
Figure 4. Resultados de Backtesting del historial. Expert Advisor with P-filter (M30 period)
Period M5
//+---------------------------------------------------------------------------------+ // Señal de COMPRA //+---------------------------------------------------------------------------------+ if(true && High[0]<iLow(NULL,PERIOD_H1,1) && ORD.Buy<nORD.Buy //.........................................Filters................................... && iOpen(NULL,PERIOD_M5,1)<iClose(NULL,PERIOD_M5,1) ) { //---- Signal.Buy=true; } //+---------------------------------------------------------------------------------+ // Señal de VENTA //+---------------------------------------------------------------------------------+ if(true && Low[0]>iHigh(NULL,PERIOD_H1,1) && ORD.Sell<nORD.Sell //.........................................Filters................................... && iOpen(NULL,PERIOD_M5,1)>iClose(NULL,PERIOD_M5,1) ) { //---- Signal.Sell=true; }
Fig.5 Programación de los cambios de balance. P-filtro para el período de M5
Para facilitar el análisis de los informes recibidos, se resume en la tabla siguiente.
Ningún filtro | PERIOD_H4 | PERIOD_H1 | PERIOD_M30 | PERIOD_M5 | |
---|---|---|---|---|---|
Depósito inicial | 10000.00 | 10000.00 | 10000.00 | 10000.00 | 10000.00 |
Beneficio neto | 4408.91 | 4036.33 | 4829.05 | 3852.90 | 4104.30 |
Beneficio bruto | 32827.16 | 19138.74 | 27676.50 | 18133.77 | 23717.68 |
Pérdidas brutas | -28418.25 | -15102.41 | -22847.45 | -14280.87 | -19613.38 |
Profitability | 1.16 | 1.27 | 1.21 | 1.27 | 1.21 |
Beneficio esperado | 1.34 | 2.92 | 2.20 | 3.59 | 2.02 |
Drawdown absoluto | 273.17 | 434.09 | 762.39 | 64.00 | 696.23 |
Aspiración máxima | 3001.74 (20.36%) | 2162.61 (17.48%) | 2707.56 (17.22%) | 2121.78 (16.38%) | 1608.30 (12.46%) |
Drawdown relativo | 20.36% (3001.74) | 17.48% (2162.61) | 17.22% (2707.56) | 16.38% (2121.78) | 12.46% (1608.30) |
Total transacciones | 3284 | 1383 | 2195 | 1073 | 2035 |
Posiciones cortas (ganadas %) | 1699 (64.98%) | 674 (54.01%) | 1119 (60.59%) | 547 (60.51%) | 1046 (63.48%) |
Posiciones largas (% ganadas) | 1585 (65.68%) | 709 (62.48%) | 1076 (64.96%) | 526 (64.64%) | 989 (66.63%) |
Trades beneficiosos (% del total) | 2145 (65.32%) | 807 (58.35%) | 1377 (62.73%) | 671 (62.53%) | 1323 (65.01%) |
Trades con pédidas (% del total) | 1139 (34.68%) | 576 (41.65%) | 818 (37.27%) | 402 (37.47%) | 712 (34.99%) |
Más grande | |||||
Trades rentablse | 82.00 | 201.00 | 157.00 | 204.00 | 97.00 |
trades con pérdidaso | -211.00 | -136.00 | -160.00 | -179.51 | -156.00 |
Promedio | |||||
Trades rentablse | 15.30 | 23.72 | 20.10 | 27.02 | 17.93 |
trades con pérdidaso | -24.95 | -26.22 | -27.93 | -35.52 | -27.55 |
Número máximo | |||||
victorias consecutivas (ganancia) | 29 (679.00) | 27 (817.98) | 36 (1184.32) | 36 (1637.38) | 44 (912.03) |
derrotas consecutivas (pérdida) | 16 (-290.34) | 12 (-636.34) | 13 (-367.07) | 14 (-371.51) | 15 (-498.51) |
Máximo | |||||
ganancias consecutivas (victorias contabilizadas) | 679.00 (29) | 884.08 (16) | 1184.32 (36) | 1637.38 (36) | 912.03 (44) |
pérdidas consecutivas (pérdidas contabilizadas) | -1011.00 (10) | -686.00 (10) | -758.00 (7) | -894.85 (10) | -589.00 (5) |
Promedio | |||||
victorias consecutivas | 5 | 5 | 5 | 5 | 4 |
pérdidas consecutivas | 3 | 3 | 3 | 3 | 2 |
Tabla 1. Gráfica de comparación de informes de prueba del filtro P
Análisis de resultados:
- Neto aumentado sólo en el P-filtro "PERIOD_H1" (4408.91 => 4829.05).
- El líder de ganancias esperadas fue el P-filtro "PERIOD_M30" (1.34 => 3.59).
- La aspiración máxima disminuyó en todos los filtros. El valor mínimo de reducción dio lugar en el filtro "PERIOD_M5" (3001.74 => 1608.30).
- El filtrado reduce el número total de transacciones de 1,5-3 veces.
CONCLUSIONES
- El filtro P puede mejorar las características del ATS.
- Para su posterior análisis, elegimos el filtro P "PERIOD_H1", que ha demostrado los mejores resultados de beneficio.
Filtro Discreto (D-filtro)
El Filtro entendible, discreto y más intuitivo y simple es el que comercio por la hora. Es razonable asumir que durante el día de trading con el EA es inestable en el trading. Durante ciertas horas resulta más rentable y otros pueden ser lo contrario y traer sólo pérdidas. Para ello, vamos a estudiar la influencia de este filtro en los resultados del trade. Previamente, una variable externa adicional debe incluirse en el código de expertos:
extern int Filter.Hour=0; // D-filter: trade por houra //---- extern double Lots=0.1; extern int Symb.magic=9001, nORD.Buy = 5, // órdenes de compra máximos nORD.Sell = 5; // órdenes de venta máximo
Y el filtro en sí mismo:
//+---------------------------------------------------------------------------------+ // Señal de COMPRA //+---------------------------------------------------------------------------------+ if(true && High[0]<iLow(NULL,PERIOD_H1,1) && ORD.Buy<nORD.Buy //.........................................Filters................................... && Hour()==Filter.Hour ) { //---- Signal.Buy=true; } //+---------------------------------------------------------------------------------+ // Señal de VENTA //+---------------------------------------------------------------------------------+ if(true && Low[0]>iHigh(NULL,PERIOD_H1,1) && ORD.Sell<nORD.Sell //.........................................Filters................................... && Hour()==Filter.Hour ) { //---- Signal.Sell=true; }
Por lo tanto, si la hora actual coincide con el valor discreto del D-filtro, entonces generamos (permitir) la señal para comprar o vender, por el contrario, no lo hacemos.
Ponemos en marcha el medidor en el modo optimizado (parámetros de entrada se indican en los gráficos). El depósito debe especificarse como un máximo para evitar la situación de "no hay suficiente dinero para abrir una posición" y no a perder parte de las transacciones.
Figura 6. Parámetros de entrada para la búsqueda de las características de D-filtro
Como resultado obtenemos la característica de respuesta del filtro: beneficio, número de transacciones y drawdown (eje Y) en función de la hora del día (eje X).
Figura 7. Características de respuesta del filtro. D-filtrado por hora
Así ha confirmado nuestra hipótesis de que el EA trae beneficios diferentes en momentos diferentes.
... Y así lo ha confirmado, pero ¿qué hacemos ahora con esto? Lo primero que viene a la mente es no permitir que el asesor experto comerciE durante las horas que trae sólo pérdidas. Esto parece lógico. Bueno, luegose modificará el filtro D, para que permita lo sólo durante las horas rentables. En otras palabras - creamos una máscara del filtro. Ahora podemos conectar el filtro D finalizado en el código y ver el informe de la prueba.
//+---------------------------------------------------------------------------------+ // Señal de COMPRA //+---------------------------------------------------------------------------------+ if(true && High[0]<iLow(NULL,PERIOD_H1,1) && ORD.Buy<nORD.Buy //.........................................Filters................................... && (Hour()==0 || Hour()==6 || Hour()==9 || Hour()==10 || Hour()==11 || Hour()==12 || Hour()==18 || Hour()==20 || Hour()==22 || Hour()==23 ) ) { //---- Signal.Buy=true; } //+---------------------------------------------------------------------------------+ // Señal de VENTA //+---------------------------------------------------------------------------------+ if(true && Low[0]>iHigh(NULL,PERIOD_H1,1) && ORD.Sell<nORD.Sell //.........................................Filters................................... && (Hour()==0 || Hour()==6 || Hour()==9 || Hour()==10 || Hour()==11 || Hour()==12 || Hour()==18 || Hour()==20 || Hour()==22 || Hour()==23 ) ) { //---- Signal.Sell=true; }
Símbolo | EURUSD (Euro frente US Dollar) | ||||
Período de | 1 Minuto (M1) 2009.09.07 00:00 - 2010.01.26 23:59 (2009.09.07 - 2010.01.27) | ||||
Modelo | Cada tick (el método más preciso basado en todos los plazos menos disponibles) | ||||
Parámetros | Filter.Hour = 0; Lots = 0.1; Symb.magic = 9001; nORD.Buy = 5; nORD.Sell = 5; | ||||
Barrass del historico | 133967 | Modelado de ticks | 900848 | Modelado de calidad | 25.00% |
Errores gráficos no coincidetes | 0 | ||||
Depósito inicial | 10000.00 | ||||
Beneficio neto | 6567.66 | Beneficio bruto | 24285.30 | Pérdidas brutas | -17717.64 |
Profitability | 1.37 | Beneficio esperado | 4.13 | ||
Drawdown absoluto | 711.86 | Aspiración máxima | 3016.21 (18.22%) | Drawdown relativo | 18.22% (3016.21) |
Total transacciones | 1590 | Posiciones cortas (ganadas %) | 832 (61.30%) | Posiciones largas (% ganadas) | 758 (63.85%) |
Trades beneficiosos (% del total) | 994 (62.52%) | Trades con pédidas (% del total) | 596 (37.48%) | ||
Más grande | Trades rentablse | 194.00 | trades con pérdidaso | -161.00 | |
Promedio | Trades rentablse | 24.43 | trades con pérdidaso | -29.73 | |
Número máximo | victorias consecutivas (ganancia) | 40 (1096.16) | derrotas consecutivas (pérdida) | 15 (-336.45) | |
Máximo | ganancias consecutivas (victorias contabilizadas) | 1289.08 (20) | pérdidas consecutivas (pérdidas contabilizadas) | -786.51 (8) | |
Promedio | victorias consecutivas | 5 | pérdidas consecutivas | 3 |
Figura 8. Gráfica del balance. D-filtro por hora
Análisis de resultados de filtrado:
- Reducción de DD - no lograda. No ha disminuido, pero ¿ligeramente aun había aumentado (3001.74 => 3016.21)?
- Aumentado en aproximadamente el 50% del ingreso neto (4408.91 => 6567.66). Esto es, pero el número de transacciones con una disminución de casi 2 veces (3284 => 1590).
- El beneficio esperado de D-filtro (4.13) es mayor que el mejor valor de todos los P-filtros (3.59) investigados.
- Disminuye el número de transacciones rentables (64,98% => 62,52%)., es decir, el filtro elimina no sólo lo improductivo, sino también un número de transacciones rentables.
CONCLUSIONES
- El filtrado discreto puede ser más eficaz que el filtrado P, pero requiere más ajuste fino y una selección de entrada óptimo.
Filtrado de señales usando dos o más filtros
No siempre es posible alcanzar la mejora considerable en el rendimiento del ATS, usando sólo un filtro. Es más común para configurar varios filtros en su lugar. Así nos enfrentamos con la cuestión de cómo combinar estos filtros.
A los efectos de este estudio, tomaremos los filtros anteriores, y para simplificar las cosas ellos etiquetan de la siguiente manera: Filtro Nº 1 (P-filtro "PERIOD_H1") y el filtro número 2 (filtro D). Inicialmente será combinarlos por simple adición. Para ello vamos a cambiar el código del asesor experto.
//+---------------------------------------------------------------------------------+ // Señal de COMPRA //+---------------------------------------------------------------------------------+ if(true && High[0]<iLow(NULL,PERIOD_H1,1) && ORD.Buy<nORD.Buy //.........................................Filters................................... //---- filtro Nº1 && iOpen(NULL,PERIOD_H1,1)>iClose(NULL,PERIOD_H1,1) //---- filtro Nº2 && (Hour()==0 || Hour()==6 || Hour()==9 || Hour()==10 || Hour()==11 || Hour()==12 || Hour()==18 || Hour()==20 || Hour()==22 || Hour()==23 ) ) { //---- Signal.Buy=true; } //+---------------------------------------------------------------------------------+ // Señal de VENTA //+---------------------------------------------------------------------------------+ if(true && Low[0]>iHigh(NULL,PERIOD_H1,1) && ORD.Sell<nORD.Sell //.........................................Filters................................... //---- filtro Nº1 && iOpen(NULL,PERIOD_H1,1)<iClose(NULL,PERIOD_H1,1) //---- filtro Nº2 && (Hour()==0 || Hour()==6 || Hour()==9 || Hour()==10 || Hour()==11 || Hour()==12 || Hour()==18 || Hour()==20 || Hour()==22 || Hour()==23 ) ) { //---- Signal.Sell=true; }
Luego probamos la combinación creada de filtros y como resultado obtenemos el siguiente informe.
Balance
Símbolo | EURUSD (Euro frente US Dollar) | ||||
Período de | 1 Minuto (M1) 2009.09.07 00:00 - 2010.01.26 23:59 (2009.09.07 - 2010.01.27) | ||||
Modelo | Todas los ticks (el método más preciso basado en todos los plazos disponibles) | ||||
Parámetros | Lotes = 0.1; Symb.magic = 9001; nORD.Buy = 5; nORD.Sell = 5; | ||||
Barrass del historico | 133967 | Modelado de ticks | 900848 | Modelado de calidad | 25.00% |
Errores gráficos no coincidetes | 0 | ||||
Depósito inicial | 10000.00 | ||||
Beneficio neto | 6221.18 | Beneficio bruto | 20762.67 | Pérdidas brutas | -14541.49 |
Profitability | 1.43 | Beneficio esperado | 5.47 | ||
Drawdown absoluto | 1095.86 | Aspiración máxima | 3332.67 (20.13%) | Drawdown relativo | 20.13% (3332.67) |
Total transacciones | 1138 | Posiciones cortas (ganadas %) | 584 (58.39%) | Posiciones largas (% ganadas) | 554 (61.19%) |
Trades beneficiosos (% del total) | 680 (59.75%) | Trades con pérdidas (% del total) | 458 (40.25%) | ||
Más grande | profitable trades | 201.00 | losing trades | -159.00 | |
Promedio | profitable trades | 30.53 | losing trades | -31.75 | |
Número máximo | victorias consecutivas (ganancia) | 28 (1240.15) | derrotas consecutivas (pérdida) | 16 (-600.17) | |
Máximo | ganancias consecutivas (victorias contabilizadas) | 1240.15 (28) | pérdidas consecutivas (pérdidas contabilizadas) | -883.85 (10) | |
Promedio | victorias consecutivas | 5 | pérdidas consecutivas | 3 |
Figura 9. Gráfico de los cambios de balance. Dos filtros: filtro P + D-filtro (adición simple)
Sin embargo, estos dos filtros se pueden conectar de otra manera. Asumir que está configurado el filtro número 1 mejor que el número 2. Así, tenemos que construir un filtro D nuevo. El código del asesor experto se verá de la siguiente forma. Lanzar el probador de un modo optimizado y obtener las características del filtro 2 (comercio por hora).
//+---------------------------------------------------------------------------------+ // Señal de COMPRA //+---------------------------------------------------------------------------------+ if(true && High[0]<iLow(NULL,PERIOD_H1,1) && ORD.Buy<nORD.Buy //.........................................Filters................................... //---- filtro Nº1 && iOpen(NULL,PERIOD_H1,1)>iClose(NULL,PERIOD_H1,1) //---- filtro Nº2 && Hour()==Filter.Hour ) { //---- Signal.Buy=true; } //+---------------------------------------------------------------------------------+ // Señal de VENTA //+---------------------------------------------------------------------------------+ if(true && Low[0]>iHigh(NULL,PERIOD_H1,1) && ORD.Sell<nORD.Sell //.........................................Filters................................... //---- filtro Nº1 && iOpen(NULL,PERIOD_H1,1)<iClose(NULL,PERIOD_H1,1) //---- filtro Nº2 && Hour()==Filter.Hour ) { //---- Signal.Sell=true; }
Figura 10. Los cambios en el beneficio según el tiempo de los dos filtros D. Análisis comparativo
De hecho, han cambiado las características de respuesta del filtro. Y que no es de extrañar teniendo en cuenta que al añadir el filtro número 1 al EA, hemos cambiado sus propiedades. En consecuencia, es necesario cambiar la máscara del número 2.
Figura 11. Características de la respuesta del filtro Nº 2. D-filtrado por la hora (optimizado)
Vista final del código de asesor experto.
//+---------------------------------------------------------------------------------+ // Señal de COMPRA //+---------------------------------------------------------------------------------+ if(true && High[0]<iLow(NULL,PERIOD_H1,1) && ORD.Buy<nORD.Buy //.........................................Filters................................... //---- filtro Nº1 && iOpen(NULL,PERIOD_H1,1)>iClose(NULL,PERIOD_H1,1) //---- filtro Nº2 && (Hour()==0 || Hour()==1 || Hour()==6 || Hour()==7 || Hour()==9 || Hour()==10 || Hour()==12 || Hour()==14 || Hour()==15 || Hour()==18 || Hour()==20 || Hour()==22 || Hour()==23 ) ) { //---- Signal.Buy=true; } //+---------------------------------------------------------------------------------+ // Señal de VENTA //+---------------------------------------------------------------------------------+ if(true && Low[0]>iHigh(NULL,PERIOD_H1,1) && ORD.Sell<nORD.Sell //.........................................Filters................................... //---- filtro Nº1 && iOpen(NULL,PERIOD_H1,1)<iClose(NULL,PERIOD_H1,1) //---- filtro Nº2 && (Hour()==0 || Hour()==1 || Hour()==6 || Hour()==7 || Hour()==9 || Hour()==10 || Hour()==12 || Hour()==14 || Hour()==15 || Hour()==18 || Hour()==20 || Hour()==22 || Hour()==23 ) ) { //---- Signal.Sell=true; }
Balance
Símbolo | EURUSD (Euro frente US Dollar) | ||||
Período de | 1 Minuto (M1) 2009.09.07 00:00 - 2010.01.26 23:59 (2009.09.07 - 2010.01.27) | ||||
Modelo | Todos los ticks (el método más preciso basado en todos los timeframes disponibles) | ||||
Parámetros | Lotes = 0.1; Symb.magic = 9001; nORD.Buy = 5; nORD.Sell = 5; | ||||
Barrass del historico | 133967 | Modelado de ticks | 900848 | Modelado de calidad | 25.00% |
Errores gráficos no coincidetes | 0 | ||||
Depósito inicial | 10000.00 | ||||
Beneficio neto | 5420.54 | Beneficio bruto | 22069.48 | Pérdidas brutas | -16648.94 |
Profitability | 1.33 | Beneficio esperado | 3.77 | ||
Drawdown absoluto | 826.86 | Aspiración máxima | 2141.24 (14.06%) | Drawdown relativo | 14.06% (2141.24) |
Total transacciones | 1439 | Posiciones cortas (ganadas %) | 758 (61.87%) | Posiciones largas (% ganadas) | 681 (64.46%) |
Trades beneficiosos (% del total) | 908 (63.10%) | Trades con pérdidas (% del total) | 531 (36.90%) | ||
Más grande | Trades rentablse | 157.00 | trades con pérdidaso | -154.00 | |
Promedio | Trades rentablse | 24.31 | trades con pérdidaso | -31.35 | |
Maximum Number of Defects | victorias consecutivas (ganancia) | 30 (772.70) | derrotas consecutivas (pérdida) | 16 (-562.17) | |
Máximo | ganancias consecutivas (victorias contabilizadas) | 1091.32 (22) | pérdidas consecutivas (pérdidas contabilizadas) | -926.15 (15) | |
Promedio | victorias consecutivas | 5 | pérdidas consecutivas | 3 |
Figura 12. Gráfico de los cambios de balance como resultado de la optimización de las características de los dos filtros
Para realizar el análisis de informes más fáciles, creamos la siguiente gráfica.
Ningún filtro | Además | Optimización | |
---|---|---|---|
Depósito inicial | 10000.00 | 10000.00 | 10000.00 |
Beneficio neto | 4408.91 | 6221.18 | 5420.54 |
Beneficio bruto | 32827.16 | 20762.67 | 22069.48 |
Pérdidas brutas | -28418.25 | -14541.49 | -16648.94 |
Profitability | 1.16 | 1.43 | 1.33 |
Beneficio esperado | 1.34 | 5.47 | 3.77 |
Drawdown absoluto | 273.17 | 1095.86 | 826.86 |
Aspiración máxima | 3001.74 (20.36%) | 3332.67 (20.13%) | 2141.24 (14.06%) |
Drawdown relativo | 20.36% (3001.74) | 20.13% (3332.67) | 14.06% (2141.24) |
Total transacciones | 3284 | 1138 | 1439 |
Posiciones cortas (ganadas %) | 1699 (64.98%) | 584 (58.39%) | 758 (61.87%) |
Posiciones largas (% ganadas) | 1585 (65.68%) | 554 (61.19%) | 681 (64.46%) |
Transacciones rentables (% del total) | 2145 (65.32%) | 680 (59.75%) | 908 (63.10%) |
Trades con pédidas (% del total) | 1139 (34.68%) | 458 (40.25%) | 531 (36.90%) |
Más grande | |||
Trades rentablse | 82.00 | 201.00 | 157.00 |
trades con pérdidaso | -211.00 | -159.00 | -154.00 |
Promedio | |||
Trades rentablse | 15.30 | 30.53 | 24.31 |
trades con pérdidaso | -24.95 | -31.75 | -31.35 |
Número máximo de | |||
victorias consecutivas (ganancia) | 29 (679.00) | 28 (1240.15) | 30 (772.70) |
derrotas consecutivas (pérdida) | 16 (-290.34) | 16 (-600.17) | 16 (-562.17) |
Máximo | |||
beneficio consecutivo (número de victorias) | 679.00 (29) | 1240.15 (28) | 1091.32 (22) |
pérdida consecutiva (número de pérdidas) | -1011.00 (10) | -883.85 (10) | -926.15 (15) |
Promedio | |||
Ganacias consecutivas | 5 | 5 | 5 |
pérdidas consecutivas | 3 | 3 | 3 |
Tab. 2 cuadro comparativo de las pruebas de informes de la combinación de dos filtros: P y D-filtro
Análisis de resultados:
- Si hacemos la comparación basándose en los criterios de ingresos, ganancias y beneficios esperados, los mejores resultados se obtuvieron cuando agregamos los dos filtros.
- Si nos centramos en la retirada, el ganador es la opción de optimización del filtro.
- En cualquier caso, el filtrado mejora las características del ATS.
Conclusión
- ¿Qué es el filtro mágico? La magia es en su simplicidad y la habilidad de cambiar las características de cualquier asesor experto.
- La tecnología de creación del filtro propuesta no está diseñada para copia simple. Sólo muestra cómo unos P-filtros y filtros D pueden ser desarrollados por un asesor experto en particular. Un filtro, que es conveniente para un asesor experto, puede obstaculizar el otro.
- Y recuerda, un ATS ideal no necesita un filtro! ... Sueñas con crear un sistema de este tipo ¿no?
- Sé que este código de los EA y los filtros no es optimizado y sin duda no es lo ideal. Pero para los propósitos de este artículo hemos seleccionado este estilo particular de programación. Esto fue hecho para que cualquier "tonto" fuera capaz de repetir el proceso anterior y crear sus propios filtros únicos.
- ¡ATENCIÓN! No utilizar en el comercio real el EA considerado en este artículo.
Traducción del ruso hecha por MetaQuotes Ltd.
Artículo original: https://www.mql5.com/ru/articles/1577
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Usted acepta la política del sitio web y las condiciones de uso