Estrategia de negociación cuantitativa basada en la doble EMA e índice de volatilidad de precios

El autor:¿ Qué pasa?, Fecha: 2023-12-18 11:26:49
Las etiquetas:

img

Resumen general

Esta estrategia se llama Indicador de promedio móvil y estrategia de combinación de volatilidad de precios. Combina la media móvil exponencial doble (DEMA) y el índice de volatilidad de precios para generar una señal comercial integral.

Principio

La estrategia consta de dos partes:

  1. Indicador DEMA. Este indicador calcula las medias móviles exponenciales de 20 días y 2 días. Genera señales comerciales cuando el precio rompe la línea de 2 días desde arriba o rompe la línea de 20 días desde abajo.

  2. (Precio más alto - Precio más bajo) / Índice de volatilidad del precio de cierre. Este índice refleja el rango de fluctuación de los precios dentro de un período. Aquí calculamos el promedio móvil simple de 16 días del índice de volatilidad durante los últimos 20 bares. Cuando la volatilidad del bar actual es mayor o menor que este valor promedio, genera señales comerciales.

Las señales de las dos partes se combinan. Si DEMA e índice de volatilidad dan señales al mismo tiempo, se generarán las órdenes de negociación largas o cortas finales.

Análisis de ventajas

La estrategia tiene las siguientes ventajas:

  1. La combinación de múltiples indicadores puede reducir las señales falsas y mejorar la fiabilidad de la señal.

  2. La línea de 20 días puede identificar eficazmente las tendencias a medio y largo plazo, y la línea de 2 días puede capturar las fluctuaciones a corto plazo, lo que hace que la combinación sea adaptable a diferentes entornos de mercado.

  3. El índice de volatilidad puede reflejar eficazmente la volatilidad del mercado y las oportunidades comerciales.

  4. Al ajustar los parámetros, puede adaptarse a diferentes productos y mercados de ciclos.

Análisis de riesgos

La estrategia también tiene algunos riesgos:

  1. En las tendencias de baja volatilidad, el índice de volatilidad puede generar señales erróneas.

  2. En los mercados rápidos de un solo sentido, las EMA dobles pueden retrasarse.

  3. El aumento de la complejidad de los múltiples indicadores también aumenta el riesgo de sobre-optimización.

Direcciones de optimización

La estrategia también puede optimizarse en los siguientes aspectos:

  1. La adición de mecanismos de stop loss puede controlar eficazmente la pérdida por orden.

  2. Optimizar los parámetros para diferentes productos y ciclos para mejorar la adaptabilidad.

  3. Aumentar los indicadores de liquidez y volatilidad para mejorar la calidad de las señales.

  4. Añadir algoritmos de aprendizaje automático para lograr parámetros dinámicos y ajuste de peso.

Conclusión

Al combinar dos EMA e índices de volatilidad, esta estrategia puede lograr un buen rendimiento comercial tanto en mercados de tendencia como volátiles. También hay ciertos riesgos que requieren una mayor optimización y mejora.


/*backtest
start: 2023-11-17 00:00:00
end: 2023-12-17 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 12/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 histogram displays (high-low)/close
//  Can be applied to any time frame.
//
//
// 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


HLCH(input_barsback,input_percentorprice,input_smalength) =>
    pos = 0.0
    xPrice = (high-low)/close
    xPriceHL = (high-low)
    xPrice1 = input_percentorprice ? xPrice * 100: xPriceHL
    xPrice1SMA = ta.sma(math.abs(xPrice1), input_smalength)
    pos := xPrice1SMA[input_barsback] > math.abs(xPrice1) ? 1 :
    	     xPrice1SMA[input_barsback] < math.abs(xPrice1) ? -1 : nz(pos[1], 0)
    pos

strategy(title='Combo 2/20 EMA & (H-L)/C Histogram', shorttitle='Combo', overlay=true)
var I1 = '●═════ 2/20 EMA ═════●'
Length = input.int(14, minval=1, group=I1)
var I2 = '●═════ (H-L)/C Histogram  ═════●'
input_barsback = input(20, title="Look Back", group=I2)
input_percentorprice = input(false, title="% change", group=I2)
input_smalength = input(16, title="SMA Length", 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)
prePosHLCH = HLCH(input_barsback,input_percentorprice,input_smalength)
iff_1 = posEMA20 == -1 and prePosHLCH == -1 and StartTrade ? -1 : 0
pos = posEMA20 == 1 and prePosHLCH == 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.