![Construcción automática de las líneas de apoyo y resistencia](https://c.mql5.com/i/articles/overlay.png)
Construcción automática de las líneas de apoyo y resistencia
Introducción
En este artículo vamos a analizar la construcción automática de las líneas de apoyo y resistencia El análisis técnico de los instrumentos de divisa supone una parte importante del trading en los mercados financieros. Por eso, la construcción automática de estas líneas facilitará el trabajo a los analistas financieros y los tráders, dándoles la posibilidad de incrementar la velocidad del análisis técnico. Además, usando como base el indicador analizado, podremos crear asesores automáticos.
Buscando todos los máximos y mínimos locales
Las líneas de apoyo y resistencia se construyen con la ayuda de los máximos y mínimos locales de los gráficos de precio. Para definir estos extremos, utilizaremos el indicador ZigZag, conocido por todos. En los parámetros de entrada podemos indicar las propiedades necesarias para las líneas de apoyo y resistencia.
La dimensión de las líneas se puede modificar con la ayuda de los parámetros del indicador ZigZag, pero también es posible utilizar los mismos parámetros en diferentes marcos temporales. Esto nos dará la posibilidad de obtener los extremos que necesitamos, para construir después las líneas de apoyo y resistencia basándonos en ellos.
En las figuras de más abajo se muestra cómo cambia el carácter de los picos al modificar el marco temporal. En la primera figura se muestra un gráfico de 30 minutos, y después, uno de 4 horas.
Seleccionado los extremos adecuados para la construcción de los niveles
Vamos a construir solo las líneas de apoyo y resistencia que pasan cerca del precio actual: esto significa que serán actuales para nosotros en lo referente al análisis técnico en este momento concreto. Asimismo, para que las líneas tengan una inclinación convergente hacia el precio, utilizaremos aquellos extremos que sean iguales o superiores al anterior para las líneas de resistencia, en el caso de tendencia descendente; o iguales o inferiores al anterior en caso de tendencia ascendente. En la primera figura pueden ser los puntos 1-2-3-4-5-7, y en la segunda, 1-2-3-6-7-8.
Ya hemos decidido los criterios de selección de los extremos. Ahora vamos a analizar la implementación en forma de código. Vamos a mostrarlo aquí solo de forma parcial, para aclarar los momentos principales.
//+------------------------------------------------------------------+ struct trade_points // Definimos la estructura para los extremos { double price; // Precio int pos; // Ubicación, número de barra bool hpoint; // En caso positivo, es un máximo bool lpoint; // En caso positivo, es un mínimo };
En la función OnInit() creamos el manejador del indicador ZigZag:
int OnInit() { ZZ_handle=iCustom(_Symbol,_Period,"ZigZag",ExtDepth,ExtDeviation,ExtBackstep); return(INIT_SUCCEEDED); }
A continuación, iteramos por turnos todos los extremos del indicador Zigzag, introducimos la información sobre ellos en la matriz:
double max=close[1]; double min=close[1]; int z=0; for(shift=0;shift<rates_total && !IsStopped();shift++) { CopyBuffer(ZZ_handle,0,shift,1,ZigzagBuffer); if(ZigzagBuffer[0]>0) { if(ZigzagBuffer[0]>=max && ZigzagBuffer[0]==high[shift]) { ArrayResize(mass,z+1); max=ZigzagBuffer[0]; mass[z].price=ZigzagBuffer[0]; mass[z].pos=shift; mass[z].hpoint=true; mass[z].lpoint=false; z++; } if(ZigzagBuffer[0]<=min && ZigzagBuffer[0]==low[shift]) { ArrayResize(mass,z+1); min=ZigzagBuffer[0]; mass[z].price=ZigzagBuffer[0]; mass[z].pos=shift; mass[z].lpoint=true; mass[z].hpoint=false; z++; } } }
Definiendo los criterios de construcción de las líneas de tendencia
Ahora, tras formar la matriz con los picos, podemos construir las líneas necesarias de apoyo y resistencia. La definición de los crieterios básicos de construcción de las líneas se aclara en la figura de abajo.
Comenzando por el punto 1, podemos construir las líneas con cualquiera de los puntos siguientes. Pero no todas las líneas se pueden considerar líneas de apoyo y resistencia. También pueden no resultar actuales en este momento o innecesarias para el gráfico. Para nosotros, resulta más cómodo que en el gráfico no haya demasiadas construcciones, por eso iteraremos y filtraremos las líneas sobrantes.
Vamos a considerar que el punto inicial de la línea es A, el segundo pico es B, y el punto que se encuentra junto a la última barra, С.
Los criterios pueden ser muchos, distintos en cada situación. Vamos a analizar aquí solo los básicos. En lo sucesivo, quien así lo desee, podrá perfeccionar este indicador a su gusto. Bien, los criterios básicos son:
- La relación de las distancias AB y BC
- El número de cruces entre el precio y el segmento AB
- El número de cruces entre el precio y el segmento BC
- La distancia desde C hasta el precio actual
- La longitud máxima y mínima de la línea
- La inclinación de la línea
- La búsqueda del precio por encima o debajo de la línea de resistencia
Vamos a analizar los criterios enumerados con más detalle, para entender mejor el ajuste de los parámetros de entrada.
- Para respetar las proporciones permisibles, podemos usar los coeficientes de Fibonacci y aplicar una relación mínima permisible no inferior a 0,25 o 0,382. De acuerdo con este criterio, la relación de las longitudes deberá corresponderse con la condición AB/BC>=02.25 (0.382) y BC/AC>=02.25 (0.382). Para que sea más cómodo, el valor de este parámetro se indicará en los ajustes de entrada.
- Según el número de cruces del precio con el segmento de la línea AB, también hay que filtrar escrupulosamente todas las líneas disponibles. Dicha comprobación se puede realizar de muchas formas. Podemos tener en cuenta solo las barras cerradas tras romper esta línea, o podemos tener en cuenta la ruptura según los precios High o Low. El segundo criterio de esta comprobación es el número de barras que han cruzado este segmento de la línea. Estos parámetros también se han sacado a los ajustes de entrada.
- Según el número de rupturas, su carácter y la ubicación del precio actual con respecto al segmento BC, podemos evaluar la importancia de la línea. Todos los criterios enumerados se pueden utilizar tanto para formar las líneas, como para formar las estrategias comerciales al crear asesores automáticos. En este indicador representaremos solo las líneas que aún no han cruzado el segmento dado.
- La distacia desde el precio actual hasta la línea se puede filtrar, en primer lugar, en función de si es actual para nosotros esta línea. Por ejemplo, podemos construir solo las líneas cuya distancia hasta ellas no sea superior a 50 — 100 puntos.
- La longitud mínima de la línea, en nuestro caso, se define con los parámtros de entrada del indicador ZigZag, pero, de ser necesario, este parámetro también se puede controlar. En el indicador se comprobarán las longitudes finales de los segmentos AB y BC.
- Puesto que las líneas de apoyo son más significativas, - las posiciones se abren en función de ellas - el indicador construirá para la tendencia ascendente líneas con inclinación cero o positiva, y para la descendente, con inclinación cero o negativa.
- Podemos usar las líneas de dos formas. La primera consiste en tener en cuenta la no ruptura de la línea y comerciar en la dirección de la tendencia. La segunda consiste en utilizar solo la ruptura de las líneas de tendencia para la apertura de transacciones en la dirección opuesta. Ambos tipos de línea son importantes, por eso ambos se representarán en el indicador.
Más abajo se muestra la parte del código donde se forman las líneas de resistencia de las tendencias descendentes.
// Determinando la correspondencia de nuestras líneas con los criterios; posteriormente se rellena la matriz para la tendencia descendente. for(j=z-1; j>=0; j--) { if(mass[j].hpoint) for(i=j-1; i>=0; i--) { if(mass[i].hpoint) if(i<j) { a=mass[j].pos; b=mass[i].pos; double ratio=double((a-b)*100/a); // Determinamos la correspondencia de la longitud del segmento AB con la longitud total AC if(ratio>fibo && ratio<(100-fibo)) // Comprobamos si se cumple el criterio №1, la correspondencia de los segmentos AB y BC if(b>Min_dist &&(a-b)>Min_dist) // Comprobamos si se cumple el criterio №5, la longitud mínima de los segmentos AB y BC { ax=mass[j].price; bx=mass[i].price; coef=(ax-bx)/(a-b); price=close[1]; deviation=(ax+coef*bx)-price; cross_bc=0; cross_ab=0; if(MathAbs(deviation)<tolerance*_Point) // Comprobamos si se cumple el criterio №4 (Distancia desde el punto C hasta el precio de cierre de la barra anterior) { // Número de cruces desde el punto A hasta el punto B for(int n=a; n>b; n--) if((close[n]-(ax+coef*(b-n)))>0) cross_ab++; // Número de cruces desde el punto B hasta el final for(int n=b-1; n>=0; n--) if(close[n]>(bx+coef*(b-n)) && close[n+1]<(bx+coef*(b-n+1))) cross_bc++; if(cross_bc<=Intersection_bc && cross_bc<=Intersection_ab)// Comprobamos si se cumplen los criterios №2 y №3 { // Rellanando la matriz para la tendencia descendente ArrayResize(DownTrend,y+1); DownTrend[y].a=a; DownTrend[y].b=b; DownTrend[y].ax=ax; DownTrend[y].bx=bx; DownTrend[y].dst=MathAbs(deviation); DownTrend[y].coef=coef; y++; } } } } } } // Según la matriz obtenida de líneas descendentes, representamos estas en el gráfico for(j=0; j<ArraySize(DownTrend); j++) { a=DownTrend[j].a; b=DownTrend[j].b; ax=DownTrend[j].ax; bx=DownTrend[j].bx; coef=DownTrend[j].coef; if(a>0 && b>0 && MathAbs(a-b)>0) { if(a>0 && b>0 && MathAbs(a-b)>0) { //--- creamos la línea de tendencia TrendCreate(0,"DownTrend "+string(j),0,time[a],ax,time[b],bx,DColor,DStyle,DWidth,DBack,DSelection,DRayLeft,DRayRight,DHidden,DZOrder); ChartRedraw(); } }
Ejemplos de construcción del indicador:
Uso de las líneas de apoyo y resistencia en el comercio
El principio comercial básico que usa los niveles de apoyo y resistencia consiste en comprar cerca de la línea de apoyo durante la tendencia ascendente (y vender durante la tendencia descendente) o en el mercado plano. También se usan ciertos modelos gráficos (patrones).
Esta estrategia comercial permite usar los movimientos de la tendencia incluso cuando el instrumento financiero se encuentra en mercado plano, o cuando el precio forma alguna figura. La tendencia ayuda a definir la dirección en la que debemos abrir la transacción. Por ejemplo, si la tendencia actual es descendente, pero luego pasa a mercado plano, entonces será preferible abrir transacciones de venta cerca de la línea de resistencia, y no comprar en el nivel de apoyo. La presencia de una tendencia descendente indica que las transacciones de venta tienen más oportunidades de éxito que las transacciones de compra. Si la tendencia es ascendente, y después de ella se forma un triángulo, entonces será mejor abrir transacciones de compra junto a la línea de apoyo de este triángulo.
La apertura de transacciones según la tendencia cerca de las líneas de apoyo y resistencia puede traer beneficios, sin embargo, el precio rompe con frecuencia estos niveles. Por eso, debemos esperar la confirmación de este nivel sea significativo según un instrumento financiero concreto. Antes de comprar o vender en una línea, es necesario esperar la consolidaión del precio junto a ella. Como opción, podemos esperar el retroceso del precio con respecto al nivel y abrir una transacción solo después de ello.
Al abrir transacciones de compra a partir de la línea de apoyo, se recomienda esperar la consolidación del precio tras ella, y solo después de esto abrir una orden de compra, cuando el precio rompre hacia arriba el high de esta zona de consolidación. Esto nos dará la posibilidad de asegurarnos de que el nivel realmente influye en el precio, y también de que el precio comienza a moverse en la dirección necesaria (va hacia arriba) a partir de este nivel. Dicho factor es precisamente lo que necesitamos para la compra. Una situación análoga se desarrolla al abrir transacciones de venta a partir de la línea de resistencia: es necesario esperar la aparición de la consolidación junto a la zona de resistencia, y solo después abrir la transacción, cuando el precio desciende por debajo del precio Low de esta zona de consolidación.
Al abrir una transacción, es necesario pronosticar sus condiciones de cierre. Cuando abrimos una transacción de compra a partir de la línea de apoyo, es deseable cerrar la transacción antes de que el precio alcance una línea de resistencia fuerte. Una situación análoga se desarrolla al abrir una transacción de venta. También podemos cerrar la transacción en niveles de apoyo y resistencia secundarios. Al comprar en la línea de apoyo es necesario vender en el nivel de resistencia en el canal de tendencia ascendente. Pero podemos igualmente intentar obtener un beneficio mayor si dejamos al precio romper el nivel. Por ejemplo, al comprar a partir de un nivel de apoyo en el triángulo (con una tendencia general ascendente), podemos mantener la posición mientras que el precio no rompa el triángulo y no continúe el movimiento hacia arriba. Después de ello, podemos salir de la transacción en la siguiente línea de resistencia.
Asesor basado en un indicador
Más abajo mostramos un asesor que tiene las siguientes funciones:
- StopLoss y TakeProfit
- Número máximo de órdenes Buy/Sell
- Trailing Stop
- Función de ausencia de pérdidas
- Cierre de transacciones opuestas según las señales del indicador
- 4 filtros HTF (MACD, RSI, WPR, MA) con posibilidad de elección
El asesor trabaja directamente con las líneas de tendencia creadas con el indicador, por eso, para que funcione en tiempo real, tenemos que añadir el indicador al gráfico con el asesor instalado. Los ajustes relacionados con el indicador se deben instalar en el propio indicador. En el asesor también hay ajustes de indicador, pero se usan solo para la simulación. Para que podamos poner a prueba el asesor, en el código se ha creado un manejador del indicador, que se define al inicializar el asesor.
Se han previsto 3 modos de trabajo con el asesor:
- from level — comercio usando el rebote del precio con respecto a la línea de tendencia. La transacción se abre si el precio máximo o mínimo de la barra ha cruzado el nivel, el precio de cierre no ha roto la línea de tendencia actual, y también el precio de la barra siguiente se ha cerrado sin romper la línea. Tiene lugar la comprobación de la ruptura por parte del precio de la línea tras el contacto.
- level breakdown — comercio con la ruptura por parte del precio de la línea de tendencia. La transacción se abre si el precio máximo o mínimo de la barra ha cruzado el nivel, el precio de cierre no ha roto la línea de tendencia actual, y la vela de la barra siguiente se ha cerrado sin romper la línea de tendencia.
- all — se usan los dos modos descritos más arriba.
Más abajo se muestra la función en el código, donde se forman las señales de compra y venta:
//+------------------------------------------------------------------+ int signal() { int res=0; int macd=0; int rsi=0; int wpr=0; int ma=0; if(Use_macd==true)macd=macdS(); if(Use_rsi==true)rsi=rsiS(); if(Use_wpr==true)wpr=wprS(); if(Use_ma==true)ma=maS(); CopyOpen(NULL,0,1,3,O); CopyHigh(NULL,0,1,3,H); CopyLow(NULL,0,1,3,L); CopyClose(NULL,0,1,3,C); Signals=0; for(int i=0;i<ObjectsTotal(0,0,OBJ_TREND);i++) { string sName=ObjectName(0,i,0,OBJ_TREND); if(StringFind(sName,"UpTrend")==0 || StringFind(sName,"DownTrend")==0) { ax=ObjectGetDouble(0,sName,OBJPROP_PRICE,0); bx=ObjectGetDouble(0,sName,OBJPROP_PRICE,1); p1=(int)ObjectGetInteger(0,sName,OBJPROP_TIME,0); p2=(int)ObjectGetInteger(0,sName,OBJPROP_TIME,1); a=iBarShift(p1); b=iBarShift(p2); kkk=(bx-ax)/(a-b); lvl=bx+kkk*b; plvl=bx+kkk*(b-1); if(mode==0 || mode==2) { if(StringFind(sName,"UpTrend")==0 && L[1]<=plvl && C[1]>plvl && C[0]>lvl)Signals=1; if(StringFind(sName,"DownTrend")==0 && H[1]>=plvl && C[1]<plvl && C[0]<lvl)Signals=2; } if(mode==1 || mode==2) { if(StringFind(sName,"UpTrend")==0 && L[1]<=plvl && C[1]>plvl && C[0]<lvl)Signals=2; if(StringFind(sName,"DownTrend")==0 && H[1]>=plvl && C[1]<plvl && C[0]>lvl)Signals=1; } } } if(Signals==1 &&(macd==1 || Use_macd==false) && (rsi==1 || Use_rsi==false) && (wpr==1 || Use_wpr==false) && (ma==1 || Use_ma==false))res=1; if(Signals==2 &&(macd==2 || Use_macd==false) && (rsi==2 || Use_rsi==false) && (wpr==2 || Use_wpr==false) && (ma==2 || Use_ma==false))res=2; return(res); } //+------------------------------------------------------------------+
Al realizar la simulación hemos conseguido determinar que la rentabilidad del comercio con retroceso con respecto a la línea es menor que en el comercio con ruptura de niveles.
Más abajo se muestran los gráficos de simulación de los tres modos con los siguientes parámetros de entrada:
input string s="-------------------------------------------"; // Main settings input int Magic=12345; input double LotSize=0.1; input int Slippage=30; //Slippage, points input int StopLoss=0; //StopLoss, points input int TakeProfit=0; //TakeProfit, points input int TrailingStart=0; //Trailing Start, points input int TrailingStop= 0; //Trailing Stop, points input int TrailingStep= 0; //Trailing Step, points input int SL_prof=0; //Start BE, points input int SL_lev=0; //BE level, points input int Buy_max=1; //Max Buy orders input int Sell_max=1; //Max Sell orders input bool Sig_close=true; //Close counter transactions input tip mode=0; input string s0="-------------------------------------------"; // Indicators settings input int _ExtDepth=12; input int _ExtDeviation=5; input int _ExtBackstep=3; input int _Min_dist=0; // Minimum distance input int _fibo=30; // Fibo ratio input int _tolerance=200; // Tolerance input int _Intersection_ab=1; // The allowed number of intersections from point a to point b input int _Intersection_bc=1; // The allowed number of intersections from point b to point c input string s1="-------------------------------------------"; // MACD settings input ENUM_TIMEFRAMES macd_tf=PERIOD_CURRENT; // period input int fast_ema_period=12; // period of fast ma input int slow_ema_period=26; // period of slow ma input int signal_period=9; // period of averaging of difference input ENUM_APPLIED_PRICE applied_price=PRICE_CLOSE; // type of price input string s2="-------------------------------------------"; // RSI settings input ENUM_TIMEFRAMES rsi_tf=PERIOD_CURRENT; // period input int rsi_period=14; // period input ENUM_APPLIED_PRICE rsi_applied_price=PRICE_CLOSE; // type of price input double rsi_max_s=100; // max price for Sell input double rsi_min_s=70; // min price for Sell input double rsi_max_b=30; // max price for Buy input double rsi_min_b=0; // min price for Buy input string s3="-------------------------------------------"; // WPR settings input ENUM_TIMEFRAMES wpr_tf=PERIOD_CURRENT; // period input int calc_period=14; // period input double wpr_max_s=0; // max price for Sell input double wpr_min_s=-20; // min price for Sell input double wpr_max_b=-80; // max price for Buy input double wpr_min_b=-100; // min price for Buy input string s4="-------------------------------------------"; // MA settings input ENUM_TIMEFRAMES ma_tf=PERIOD_CURRENT; // period input int ma_period=10; // period of MA input int ma_shift=0; // shift input ENUM_MA_METHOD ma_method=MODE_SMA; // type of smoothing input ENUM_APPLIED_PRICE ma_applied_price=PRICE_CLOSE; // type of price input bool Use_macd=true; // Use MACD as a filter input bool Use_rsi=false; // Use RSI as a filter input bool Use_wpr=false; // Use WPR as a filter input bool Use_ma=false; // Use MA as a filter input int sbar=1; // Signal bar 0-current, 1-close
Al realizar la simulación, solo se abrió una transacción con un volumen de 0.1 lote en una de las direcciones. En el caso de darse una señal opuesta, se cerraba la transacción actual y se abría una opuesta a la misma. También se aplicó un filtro según el indicador MACD, con el cual las transacciones de compra se abrían con valores de indicador inferiores a cero, y las transacciones de venta se abrían con valores por encima de cero. La simulación se ha realizado en el intervalo temporal de 1 hora de EURUSD en los años 2015-2017.
Modo from level:
Modo level breakdown:
Más abajo se muestran los resultados de la simualación con los ajustes por defecto en varias parejas de divisas.
Aquí podemos ver que solo se muestran buenos resultados en EURUSD y USDCHF. En primer lugar, esto se relaciona con que no todas las líneas se deben tener en cuenta al comerciar. Asimismo, hay que tener en cuenta los otros factores enumerados al inicio del artículo.
Además, hay que recordar la influencia del análisis fundamental, puesto que el paso de las líneas de apoyo/resistencia con frecuencia tiene lugar tras la salida de noticias importantes.
Por eso, al asesor se le puede añadir un filtro de noticias para poner a prueba el funcionamiento solo en los momentos de salida de noticias, y también prohibiendo por completo la salida de estas. Como alternativa, este asesor se puede usar en los gráficos RENKO.
Optimización
Los primeros siete parámetros, a nuestro juicio, se han establecido inicialmente en el asesor de forma óptima, y no hemos procedido a su posterior optimización. Los parámetros del indicado Zig-Zag se han establecido por defecto, y no nos vienen del todo bien. Al optimizar, hemos conseguido establecer que los siguientes parámetros son los más convenientes para todas las divisas simuladas anteriormente:
- _ExtDepth=24;
- _ExtDeviation=55;
- _ExtBackstep=9;
Para la apertura de transacciones, durante la optimización se ha determinado cuál de los modos de funcionamiento es más conveniente para un instrumento financiero concreto, y también cuánto influye en el resultado el uso del filtro. Como filtro se ha usado solo el indicador MACD. Pero podemos probar a trabajar también con otros indicadores en diferentes marcos temporales.
Para cerrar una transacción con beneficios o con pérdidas se ha usado la función de cierre con la señal opuesta. Para fijar el beneficio y obtener el resultado máximo, se han usado las funciones de ausencia de pérdidas y establecimiento de take-profit. Los parámetros óptimos para cada divisa según estas funciones se han definido en el proceso de simulación.
No se ha utilizado el stop-loss para fijar la ausencia de pérdidas, las transacciones con pérdidas se han cerrado solo mediante la señal opuesta.
El proceso de optimización se representa en el recuadro. La simulación se ha realizado con un tamaño de lote de 0.1 en el año 2017. Asimismo, se ha aumentado el número de transacciones abiertas de compra y venta hasta 10, el resto de parámetros han sido ajustados por defecto.
Símbolo | Modo |
Filtro MACD | TakeProfit |
Start BE |
Beneficio |
Profit Factor: | Recovery Factor: |
Max DD,% |
Total Trades: | Profit Trades,% |
---|---|---|---|---|---|---|---|---|---|---|
EURUSD |
level breakdown |
false |
0 |
25 |
117.20 |
1.88 |
1.65 |
0.69 |
79 |
73.42 |
USDCHF |
level breakdown | false | 20 |
10 |
135.24 |
1.31 |
1.12 |
1.03 |
482 |
72.41 |
GBPCHF |
from level |
true |
20 |
10 |
91.56 |
1.39 |
0.51 |
1.58 |
246 |
91.06 |
AUDUSD |
level breakdown | false | 20 |
10 |
139.20 |
1.39 |
1.66 |
0.79 |
485 |
71.96 |
AUDCAD |
level breakdown | true | 25 |
5 |
117.51 |
1.94 |
1.06 |
0.57 |
246 |
84.96 |
EURJPY |
level breakdown | false | 20 |
5 |
128.90 |
1.60 |
0.98 |
1.26 |
341 |
78.89 |
GBPUSD |
from level | false | 100 |
0 |
102.1 |
1.20 |
1.32 |
0.58 |
274 |
52.92 |
USDJPY |
from level | false | 30 |
0 |
147.75 |
1.56 |
0.79 |
1.73 |
348 |
79.89 |
EURGBP |
from level | true | 20 |
5 |
124.45 |
1.39 |
1.14 |
1.03 |
341 |
78.01 |
EURCHF |
from level | true | 20 |
5 |
141.08 |
2.07 |
1.88 |
0.68 |
367 |
63.22 |
USDCAD |
level breakdown | false |
100 |
25 |
142.57 |
1.46 |
0.45 |
1.22 |
248 |
78.87 |
NZDUSD |
from level | false | 0 |
25 |
270.50 |
1.37 |
1.04 |
2.37 |
616 |
62.11 |
GBPJPY |
level breakdown | true | 150 |
20 |
163.62 |
2.56 |
1.10 |
1.41 |
103 |
68.25 |
Conclusión
En el artículo se muestra el principio esencial de construcción de las líneas de apoyo y resistencia. Sobre su base se ha creado un asesor comercial y se han otimizado los parámetros de entrada de 13 instrumentos financieros. Para obtener el resultado máximo según un instrumento financiero concreto, es necesario seleccionar de forma individual sus parámetros óptimos. Para seleccionar estos, automatizar el comercio y comprobar el funcionamiento según las líneas de apoyo y resistencia, se ha creado un asesor que tiene una serie de funciones esenciales y 4 filtros HTF. En lo sucesivo, el indicador y el asesor podrán ser ampliados y modernizados, dependiendo de las necesidades concretas.
Según las conclusiones del trabajo, se ha establecido que en ciertas divisas el comercio con retroceso es menos rentable que el comercio con ruptura. Esto indica que el carácter del movimiento de los distintos instrumentos financieros es diferente, y que cada uno de ellos necesita un enfoque individual.
Traducción del ruso hecha por MetaQuotes Ltd.
Artículo original: https://www.mql5.com/ru/articles/3215
![LifeHack para tráders: cocinamos ForEach usando #define](https://c.mql5.com/2/31/ForEachwdefine.png)
![Patrón de ruptura del canal](https://c.mql5.com/2/30/breakthow_channel.png)
![Neuroredes profundas (Parte V). Optimización bayesiana de los hiperparámetros de las DNN](https://c.mql5.com/2/48/Deep_Neural_Networks_05.png)
![Gestión de capital según Vince. Implementación como módulo de Wizard MQL5](https://c.mql5.com/2/30/MQL5-avatar-capital-001.png)
![MQL5 - Lenguaje de estrategias comerciales para el terminal de cliente MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- 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