Indicador de impulso Estrategia corta larga

El autor:¿ Qué pasa?, fecha: 2023-11-02 16:34:48
Las etiquetas:

img

Resumen general

Esta estrategia utiliza indicadores de impulso que incluyen el índice direccional promedio (ADX), el índice de movimiento direccional (DMI) y el índice de canal de productos básicos (CCI) para determinar la dirección de la tendencia y seguir las tendencias.

Estrategia lógica

  1. Calcular los indicadores ADX, DMI y CCI.

    • Un ADX alto indica una tendencia fuerte.
    • DMI incluye DI + y DI-. DI + muestra la fuerza de la tendencia alcista mientras que DI- muestra la fuerza de la tendencia bajista. Si DI + es mayor que DI-, es una tendencia alcista, y viceversa.
    • El CCI evalúa los niveles de sobrecompra/sobreventa: por debajo de -100 se trata de sobreventa, mientras que por encima de 100 se trata de sobrecompra.
  2. Determina la dirección de la tendencia.

    • Cuando DI+ cruza por encima de DI-, se identifica una tendencia alcista.
    • Cuando el DI- se cruza por debajo del DI+, se identifica una tendencia a la baja.
  3. Entren en sus posiciones.

    • Cuando se forma una tendencia alcista, el ADX es alto y el CCI < -100, largo.
    • Cuando se forma una tendencia a la baja, el ADX es alto y el CCI > 100, se corta.
  4. Posiciones de salida con stop loss.

    • Cuando sea largo, salga cuando DI- cruce por debajo de DI+.
    • Cuando sea corto, salga cuando DI+ cruce por encima de DI-.

Análisis de ventajas

  1. ADX filtra las operaciones durante tendencias débiles.

  2. DMI reduce los errores en la identificación de tendencias.

  3. La entrada en vigor de la sobreextensión de la CCI mejora el calendario y reduce el riesgo.

  4. La combinación de indicadores de impulso mejora la precisión.

  5. Los límites de pérdida por operación.

Riesgos y cobertura

  1. Aumenta el umbral de ADX para asegurar una tendencia lo suficientemente fuerte.

  2. DMI se queda atrás en la tendencia en una etapa temprana. Agregue otro análisis para identificar oportunidades.

  3. Alta frecuencia de intercambio CCI. Ampliar el rango CCI para filtrar el ruido.

  4. Considere una estrategia de mercado neutral cuando sea larga y corta, para cubrir el riesgo general de la posición.

Direcciones de optimización

  1. Optimizar los parámetros ADX para equilibrar el filtro de ruido y la tendencia de captura.

  2. Optimice los parámetros de DMI para equilibrar el retraso y la sensibilidad.

  3. Optimizar los parámetros del CCI para equilibrar la frecuencia de las operaciones y detectar las reversiones.

  4. Prueba de adición o modificación de indicadores para obtener mejores combinaciones, por ejemplo, MACD, KDJ.

  5. Prueba en diferentes productos para encontrar el mejor ajuste.

  6. Optimizar el tamaño de las posiciones para controlar el riesgo, manteniendo el seguimiento de tendencias.

Conclusión

La estrategia utiliza lógicamente ADX para la tendencia, DMI para la dirección y CCI para las reversiones. Pero los parámetros necesitan optimización y dimensionamiento de posición para el control de riesgos. Si se ajusta y aplica correctamente a los productos de tendencia, puede ofrecer rendimientos constantes. Los operadores deben ajustarse dinámicamente a los mercados cambiantes.


/*backtest
start: 2023-10-02 00:00:00
end: 2023-11-01 00:00:00
period: 4h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("ADX Strategy", currency = "USD", initial_capital = 1000, overlay=true)
adxlen = input(9, title="ADX Smoothing")
dilen = input(14, title="DI Length")
ADX_Entry = input(25, title="ADX Entry")
dirmov(len) =>
	up = change(high)
	down = -change(low)
	truerange = rma(tr, len)
	plus = fixnan(100 * rma(up > down and up > 0 ? up : 0, len) / truerange)
	minus = fixnan(100 * rma(down > up and down > 0 ? down : 0, len) / truerange)
	[plus, minus]

adx(dilen, adxlen) => 
	[plus, minus] = dirmov(dilen)
	sum = plus + minus
	adx = 100 * rma(abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen)
	[adx, plus, minus]

[sig, up, down] = adx(dilen, adxlen)
cci_length = input(20, minval=1, title="CCI Length")
cci_ma = sma(close, cci_length)
cci = (close - cci_ma) / (0.015 * dev(close, cci_length))

stop_loss = syminfo.mintick * 100


open_longs = strategy.position_size > 0
open_shorts = strategy.position_size < 0

possible_bull = false
possible_bull := not open_longs ? (possible_bull[1] and not crossunder(up,down) ? true : false) : false
possible_bear = false
possible_bear := not open_shorts ? (possible_bear[1] and not crossunder(down,up) ? true : false) : false



bool bull_entry = crossover(up,down)

if(bull_entry and up < ADX_Entry and cci < 0)
	possible_bull := true
	bull_entry := false

if(possible_bull and up > ADX_Entry and cci > -100)
	bull_entry := true

bool bear_entry = crossover(down,up)

if(bear_entry and down < ADX_Entry and cci > 0)
	possible_bear := true
	bear_entry := false

if(possible_bear and down >= ADX_Entry and cci < 100)
	bear_entry := true

strategy.entry("Short", strategy.short, qty = 1,comment="Short", stop=high[1] - stop_loss, when = bear_entry)
strategy.entry("Long", strategy.long, qty = 1, comment="Long", stop=low[1] - stop_loss, when = bull_entry )	

strategy.close_all(when = (open_shorts and (crossover(up,down) or crossover(sig,down))) or (open_longs and ( crossover(down,up) or crossover(sig, up))))


Más.