Esta estrategia combina indicadores de media móvil, de volumen de precios y de oscilación para formar tres filtros, con el objetivo de captar las tendencias a medio plazo y lograr buenos rendimientos durante los mercados de tendencia.
La estrategia consta de tres componentes principales:
Utilice la EMA de 20 días y la EMA de 60 días para construir un filtro de tendencia. Una señal de compra se genera cuando el MA a corto plazo cruza por encima del MA a largo plazo. Una señal de venta se genera cuando el MA a corto plazo cruza por debajo del MA a largo plazo.
Utilice el volumen sobre la facturación para calcular el indicador de VP, juzgando las direcciones del flujo de capital.
Utilice el ancho del canal de Donchian de 20 días para calcular el parámetro de bandas de Bollinger, formando bandas superiores e inferiores.
La combinación de los tres componentes construye una estrategia de seguimiento de tendencia. Genera señales de compra cuando el MA corto cruza por encima del MA largo, el VP está en tendencia alcista y el precio acaba de salir de la banda superior. Las señales de venta se generan cuando el MA corto cruza por debajo del MA largo, el VP está en tendencia bajista y el precio acaba de salir de la banda inferior.
La estrategia tiene las siguientes ventajas:
Los filtros de indicadores triples ayudan a evitar fallas.
Considerando la tendencia, el flujo de capital y la sobrecompra/sobreventa mejora la fiabilidad de la señal.
Parámetros optimizados adecuados para diferentes períodos y productos.
Recursos controlables y rendimientos constantes.
Lógica clara y ajuste de parámetros flexible.
También hay algunos riesgos:
Los riesgos de reversión de tendencia Los cambios de tendencia pueden causar una parada de pérdida.
VP retrasado en la emisión. VP retrasado en los cambios de precios y puede perder puntos de entrada o salida.
Difícil ajuste de parámetros, los parámetros necesitan ajustes para diferentes productos y plazos.
El control de descenso necesita mejoras, mejoras con paradas dinámicas o posicionamiento.
La estrategia puede mejorarse en los siguientes aspectos:
Añadir métodos de stop loss como el trailing stop para controlar más las reducciones.
Añadir un módulo de dimensionamiento de posiciones para ajustar dinámicamente los tamaños en función de la volatilidad.
Optimizar los parámetros para encontrar los mejores conjuntos para diferentes productos y períodos.
Aumentar los modelos de aprendizaje automático para mejorar la precisión de la señal.
Incorpore análisis de sentimientos y noticias para juzgar eventos repentinos.
La estrategia combina los indicadores MA, VP y Bollinger Band para tener un buen rendimiento en la captura de tendencias a mediano plazo.
/*backtest start: 2023-10-16 00:00:00 end: 2023-11-15 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=3 //////////////////////////////////////////////////////////// // Copyright by HPotter v1.0 29/04/2019 // This is combo strategies for get // a cumulative signal. Result signal will return 1 if two strategies // is long, -1 if all strategies is short and 0 if signals of strategies is not equal. // // First strategy // This System was created from the Book "How I Tripled My Money In The // Futures Market" by Ulf Jensen, Page 183. This is reverse type of strategies. // The strategy buys at market, if close price is higher than the previous close // during 2 days and the meaning of 9-days Stochastic Slow Oscillator is lower than 50. // The strategy sells at market, if close price is lower than the previous close price // during 2 days and the meaning of 9-days Stochastic Fast Oscillator is higher than 50. // // Secon strategy // The Average Directional Movement Index Rating (ADXR) measures the strength // of the Average Directional Movement Index (ADX). It's calculated by taking // the average of the current ADX and the ADX from one time period before // (time periods can vary, but the most typical period used is 14 days). // Like the ADX, the ADXR ranges from values of 0 to 100 and reflects strengthening // and weakening trends. However, because it represents an average of ADX, values // don't fluctuate as dramatically and some analysts believe the indicator helps // better display trends in volatile markets. // // WARNING: // - For purpose educate only // - This script to change bars colors. //////////////////////////////////////////////////////////// Reversal123(Length, KSmoothing, DLength, Level) => vFast = sma(stoch(close, high, low, Length), KSmoothing) vSlow = sma(vFast, DLength) pos = 0.0 pos := iff(close[2] < close[1] and close > close[1] and vFast < vSlow and vFast > Level, 1, iff(close[2] > close[1] and close < close[1] and vFast > vSlow and vFast < Level, -1, nz(pos[1], 0))) pos fADX(Len) => up = change(high) down = -change(low) trur = rma(tr, Len) plus = fixnan(100 * rma(up > down and up > 0 ? up : 0, Len) / trur) minus = fixnan(100 * rma(down > up and down > 0 ? down : 0, Len) / trur) sum = plus + minus 100 * rma(abs(plus - minus) / (sum == 0 ? 1 : sum), Len) ADXR(LengthADX, LengthADXR, Signal1, Signal2) => xADX = fADX(LengthADX) xADXR = (xADX + xADX[LengthADXR]) / 2 pos = 0.0 pos := iff(xADXR < Signal1, 1, iff(xADXR > Signal2, -1, nz(pos[1], 0))) pos strategy(title="Combo Backtest 123 Reversal and Average Directional Movement Index Rating", shorttitle="Combo", overlay = true) Length = input(14, minval=1) KSmoothing = input(1, minval=1) DLength = input(3, minval=1) Level = input(50, minval=1) LengthADX = input(title="Length ADX", defval=14) LengthADXR = input(title="Length ADXR", defval=14) Signal1 = input(13, step=0.01) Signal2 = input(45, step=0.01) reverse = input(false, title="Trade reverse") posReversal123 = Reversal123(Length, KSmoothing, DLength, Level) posADXR = ADXR(LengthADX, LengthADXR, Signal1, Signal2 ) pos = iff(posReversal123 == 1 and posADXR == 1 , 1, iff(posReversal123 == -1 and posADXR == -1, -1, 0)) possig = iff(reverse and pos == 1, -1, iff(reverse and pos == -1, 1, pos)) if (possig == 1) strategy.entry("Long", strategy.long) if (possig == -1) strategy.entry("Short", strategy.short) if (possig == 0) strategy.close_all() barcolor(possig == -1 ? red: possig == 1 ? green : blue )