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.
Calcular los indicadores ADX, DMI y CCI.
Determina la dirección de la tendencia.
Entren en sus posiciones.
Posiciones de salida con stop loss.
ADX filtra las operaciones durante tendencias débiles.
DMI reduce los errores en la identificación de tendencias.
La entrada en vigor de la sobreextensión de la CCI mejora el calendario y reduce el riesgo.
La combinación de indicadores de impulso mejora la precisión.
Los límites de pérdida por operación.
Aumenta el umbral de ADX para asegurar una tendencia lo suficientemente fuerte.
DMI se queda atrás en la tendencia en una etapa temprana. Agregue otro análisis para identificar oportunidades.
Alta frecuencia de intercambio CCI. Ampliar el rango CCI para filtrar el ruido.
Considere una estrategia de mercado neutral cuando sea larga y corta, para cubrir el riesgo general de la posición.
Optimizar los parámetros ADX para equilibrar el filtro de ruido y la tendencia de captura.
Optimice los parámetros de DMI para equilibrar el retraso y la sensibilidad.
Optimizar los parámetros del CCI para equilibrar la frecuencia de las operaciones y detectar las reversiones.
Prueba de adición o modificación de indicadores para obtener mejores combinaciones, por ejemplo, MACD, KDJ.
Prueba en diferentes productos para encontrar el mejor ajuste.
Optimizar el tamaño de las posiciones para controlar el riesgo, manteniendo el seguimiento de tendencias.
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))))