Estrategia de trading cuantitativo basada en indicadores de volatilidad de precios y doble EMA


Fecha de creación: 2023-12-18 11:26:49 Última modificación: 2023-12-18 11:26:49
Copiar: 0 Número de Visitas: 649
1
Seguir
1621
Seguidores

Estrategia de trading cuantitativo basada en indicadores de volatilidad de precios y doble EMA

Descripción general

Esta estrategia se llama estrategia de combinación de indicadores de línea promedio de fluctuación y fluctuación de precios. Combina un promedio móvil de doble exponencial (DEMA) y un indicador de fluctuación de precios para generar una señal de negociación integral.

Principio de estrategia

La estrategia tiene dos partes:

  1. El indicador DEMA, que calcula los promedios móviles del índice de 20 días y 2 días, genera una señal de negociación cuando el precio rompe la línea de 2 días desde arriba o la línea de 20 días desde abajo.

  2. El indicador refleja la amplitud de la fluctuación de los precios en un ciclo. Aquí se calcula el promedio simple móvil de 16 días de los indicadores de fluctuación de las últimas 20 líneas K, que generan una señal de negociación cuando la fluctuación de la línea K actual es superior o inferior a ese promedio.

La combinación de los dos grupos de señales, si el DEMA y el indicador de fluctuación emiten una señal al mismo tiempo, genera una orden de negociación final de múltiples o blancos.

Análisis de las ventajas

La estrategia tiene las siguientes ventajas:

  1. La combinación de varios indicadores puede reducir las señales falsas y aumentar la fiabilidad de la señal.

  2. La línea de 20 días es eficaz para identificar tendencias medianas y largas, la línea de 2 días es capaz de capturar fluctuaciones a corto plazo, y su uso combinado puede responder a diferentes condiciones de mercado.

  3. Los indicadores de volatilidad reflejan eficazmente la volatilidad del mercado y las oportunidades de negociación.

  4. Se pueden ajustar los parámetros para adaptarse a los mercados de diferentes variedades y ciclos.

Análisis de riesgos

La estrategia también tiene sus riesgos:

  1. En mercados de tendencia con baja volatilidad, los indicadores de volatilidad pueden generar señales erróneas. Se puede filtrar en combinación con otros indicadores de liquidez.

  2. En el caso de un movimiento rápido y unilateral, el doble EMA puede generar un retraso. Se pueden reducir los parámetros adecuadamente, o combinar con otros indicadores.

  3. La combinación de múltiples indicadores aumenta la complejidad de la estrategia y el riesgo de optimización excesiva. Se requiere una revisión exhaustiva y pruebas de estabilidad de parámetros.

Dirección de optimización

La estrategia también puede ser optimizada en los siguientes aspectos:

  1. El aumento de los mecanismos de suspensión de pérdidas permite un control efectivo de cada pérdida.

  2. Optimización de los parámetros según las diferentes variedades y ciclos para una mayor adaptabilidad.

  3. Aumentar la fluidez y la volatilidad de los indicadores combinados para mejorar la calidad de la señal.

  4. Se añade un algoritmo de aprendizaje automático para ajustar los parámetros dinámicos y los pesos.

Resumir

Esta estrategia, combinada con dos EMA y un indicador de volatilidad, puede obtener un buen rendimiento comercial tanto en mercados de tendencia como en turbulencias. Al mismo tiempo, existe un cierto riesgo que requiere una mayor optimización y mejora. Pero en general, la estrategia es clara y tiene un valor operativo real.

Código Fuente de la Estrategia
/*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)