Estrategia de seguimiento de tendencias de doble señal

El autor:¿ Qué pasa?, Fecha: 2023-11-02 17:02:06
Las etiquetas:

img

Resumen general

Esta estrategia combina indicadores duales EMA y Awesome Oscillator para identificar y rastrear tendencias. EMA juzga rápidamente la dirección de la tendencia a corto plazo mientras que Awesome Oscillator filtra falsas rupturas y proporciona el tiempo de entrada.

Estrategia lógica

Esta estrategia utiliza principalmente dos indicadores técnicos, doble EMA y Awesome Oscillator, para filtrar las señales con la siguiente lógica:

  1. Calcule la EMA de 2 períodos y la EMA de 20 períodos. Cuando la EMA de 2 períodos rompe la EMA de 20 períodos hacia arriba, indica una tendencia alcista. Cuando la EMA de 2 períodos rompe la EMA de 20 períodos hacia abajo, indica una tendencia bajista.

  2. Calcula el Awesome Oscillator, que es el histograma MACD suavizado por EMA rápida menos EMA lenta. Cuando el histograma AO cambia de rojo a azul, es una señal de compra. Cuando cambia de azul a rojo, es una señal de venta.

  3. Solo cuando la EMA muestra una tendencia alcista y AO muestra una señal de compra al mismo tiempo, se genera una señal final de compra.

  4. A través de este mecanismo de filtrado de señales duales, se pueden reducir las fallas y rastrear las tendencias a medio plazo.

Análisis de ventajas

Las ventajas de esta estrategia son:

  1. El filtro de doble línea reduce las operaciones ruidosas causadas por errores.

  2. La sensibilidad de respuesta extremadamente rápida capta rápidamente las reversiones a corto plazo. La EMA de 2 períodos es muy sensible a las roturas y puede determinar rápidamente si las tendencias recientes han cambiado.

  3. Awesome Oscillator filtra aún más el MACD para identificar eficazmente las fallas falsas en las tendencias y evitar operaciones inversas innecesarias.

  4. La estrategia tiene una dirección clara para seguir las tendencias a medio plazo: la EMA determina la tendencia básica mientras que la AO filtra las señales para garantizar que las operaciones se realicen siguiendo las tendencias generales.

  5. Selección razonable de parámetros. La EMA de 2 períodos y 20 períodos captura los cambios de precios en diferentes períodos de tiempo. Los parámetros AO 5 y 34 están optimizados para identificar patrones a corto plazo.

Análisis de riesgos

También existen algunos riesgos:

  1. En los mercados de rango, la EMA y el AO pueden generar más señales falsas, causando operaciones cortas innecesarias.

  2. Los parámetros de AO se pueden optimizar para una respuesta más rápida.

  3. La EMA y el AO combinan características a corto y mediano plazo que requieren datos de calidad y potencia de cálculo.

  4. El comercio frecuente conduce a comisiones más altas y costos de deslizamiento.

  5. La estrategia no tiene en cuenta las tendencias a largo plazo y los niveles clave de soporte/resistencia.

Direcciones de optimización

La estrategia se puede optimizar a través de varios aspectos:

  1. Introducir indicadores de tendencia como las medias móviles y el ATR para ayudar a la EMA a determinar la tendencia general.

  2. Agregue detección de soporte / resistencia clave como retracements de Fibonacci, generando señales solo alrededor de los niveles clave para evitar malas posiciones de entrada.

  3. Optimice las combinaciones de parámetros EMA y AO para mejorar los efectos de combinación. Por ejemplo, use algoritmos genéticos para encontrar pares de parámetros óptimos.

  4. Añadir salidas de stop loss. Salida cuando el precio rompe el reciente Swing High / Low para controlar la pérdida de una sola operación.

  5. Prueba de retroceso de datos históricos para evaluar el rendimiento de la estrategia, comprobar si la rentabilidad estable cumple con las expectativas.

  6. El comercio de papel para ajustar gradualmente los parámetros y mejorar el rendimiento en vivo. Prueba la robustez de los parámetros para encontrar conjuntos de parámetros más estables.

Conclusión

La idea general de la estrategia es clara, combinando EMA para la tendencia general y AO para el filtrado de señales. Puede identificar y rastrear tendencias de manera efectiva, pero también tiene algunos riesgos y limitaciones para una mayor optimización y prueba para mejorar la estabilidad. La clave es elegir productos y parámetros adecuados combinados con principios y estilos comerciales adecuados. En general, esta estrategia tiene una lógica sólida y un valor práctico.


/*backtest
start: 2022-10-26 00:00:00
end: 2023-11-01 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 27/04/2022
// This is combo strategies for get a cumulative signal. 
//
// First strategy
// This indicator plots 2/20 exponential moving average. For the Mov 
// Avg X 2/20 Indicator, the EMA bar will be painted when the Alert criteria is met.
//
// Second strategy
//    This indicator plots the oscillator as a histogram where blue denotes 
//    periods suited for buying and red . for selling. If the current value 
//    of AO (Awesome Oscillator) is above previous, the period is considered 
//    suited for buying and the period is marked blue. If the AO value is not 
//    above previous, the period is considered suited for selling and the 
//    indicator marks it as red.
//
// WARNING:
// - For purpose educate only
// - This script to change bars colors.
////////////////////////////////////////////////////////////
EMA20(Length) =>
    pos = 0.0
    xPrice = close
    xXA = ta.ema(xPrice, Length)
    nHH = math.max(high, high[1])
    nLL = math.min(low, low[1])
    nXS = nLL > xXA or nHH < xXA ? nLL : nHH
    iff_1 = nXS < close[1] ? 1 : nz(pos[1], 0)
    pos := nXS > close[1] ? -1 : iff_1
    pos


AC(nLengthSlow,nLengthFast,nLengthMA,nLengthEMA,nLengthWMA,bShowWMA,bShowMA,bShowEMA) =>
    pos = 0.0
    xSMA1_hl2 = ta.sma(hl2, nLengthFast)
    xSMA2_hl2 = ta.sma(hl2, nLengthSlow)
    xSMA1_SMA2 = xSMA1_hl2 - xSMA2_hl2
    xSMA_hl2 = ta.sma(xSMA1_SMA2, nLengthFast)
    nRes =  xSMA1_SMA2 - xSMA_hl2
    xResWMA = ta.wma(nRes, nLengthWMA)
    xResMA = ta.sma(nRes, nLengthMA)
    xResEMA = ta.ema(nRes, nLengthEMA)
    xSignalSeries = bShowWMA ? xResWMA :
                     bShowMA ? xResMA : 
                      bShowEMA ? xResEMA : na
    pos :=  xSignalSeries[2] < 0 and xSignalSeries[1] > 0? 1:
    	     xSignalSeries[2] > 0 and xSignalSeries[1] < 0 ? -1 : nz(pos[1], 0)
    pos

strategy(title='Combo 2/20 EMA & Bill  Awesome Oscillator (AC)', shorttitle='Combo', overlay=true)
var I1 = '●═════ 2/20 EMA ═════●'
Length = input.int(14, minval=1, group=I1)
var I2 = '●═════  Awesome Oscillator (AC) ═════●'
nLengthSlow = input.int(34, minval=1, title="Length Slow", group=I2)
nLengthFast = input.int(5, minval=1, title="Length Fast", group=I2)
nLengthMA = input.int(15, minval=1, title="MA", group=I2)
nLengthEMA = input.int(15, minval=1, title="EMA", group=I2)
nLengthWMA = input.int(15, minval=1, title="WMA", group=I2)
bShowWMA = input.bool( defval=true, title="trading WMA", group=I2)
bShowMA = input.bool( defval=false, title="trading MA", group=I2)
bShowEMA = input.bool( defval=false, title="trading EMA", group=I2)
var misc = '●═════ MISC ═════●'
reverse = input.bool(false, title='Trade reverse', group=misc)
var timePeriodHeader = '●═════ Time Start ═════●'
d = input.int(1, title='From Day', minval=1, maxval=31, group=timePeriodHeader)
m = input.int(1, title='From Month', minval=1, maxval=12, group=timePeriodHeader)
y = input.int(2005, title='From Year', minval=0, group=timePeriodHeader)
StartTrade = time > timestamp(y, m, d, 00, 00) ? true : false
posEMA20 = EMA20(Length)
prePosAC = AC(nLengthSlow,nLengthFast,nLengthMA,nLengthEMA,nLengthWMA,bShowWMA,bShowMA,bShowEMA)
iff_1 = posEMA20 == -1 and prePosAC == -1 and StartTrade ? -1 : 0
pos = posEMA20 == 1 and prePosAC == 1 and StartTrade ? 1 : iff_1
iff_2 = reverse and pos == -1 ? 1 : pos
possig = reverse and pos == 1 ? -1 : iff_2
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 ? #b50404 : possig == 1 ? #079605 : #0536b3)

Más.