
La estrategia utiliza indicadores de dinámica como el indicador de la dirección de la tendencia (ADX), el indicador de la tendencia (DMI) y el indicador de la trayectoria de la mercancía (CCI) para determinar la dirección de la tendencia y realizar un seguimiento de la tendencia. Cuando el ADX y el indicador de la tendencia confirman la formación de una tendencia, establezcan una posición en el momento en que el CCI sobrepasa.
Calcular los indicadores ADX, DMI y CCI.
Para juzgar la dirección de las tendencias.
Entrando en el campo.
La salida se detiene.
Utilice ADX para determinar si la tendencia es fuerte o débil, y evite las transacciones sin sentido cuando no hay una tendencia obvia.
El uso de DMI para determinar la dirección de la tendencia reduce la probabilidad de error de juicio.
La entrada en el CCI en el salto puede capturar el punto de inflexión de la tendencia a tiempo y reducir el riesgo de entrada.
El uso de una combinación de indicadores de movimiento puede mejorar la precisión del juicio.
Hay un mecanismo de suspensión de pérdidas que puede limitar cada pérdida.
Cuando el ADX retrocede, se producen varias transacciones de ansiedad que causan pérdidas. Se puede elevar adecuadamente el umbral de entrada del ADX para asegurar que la tendencia sea lo suficientemente evidente.
El indicador DMI está rezagado y puede haber perdido la oportunidad de una tendencia temprana. Se puede combinar con otros indicadores o análisis gráfico para determinar el momento de entrada.
El CCI puede generar transacciones frecuentes. Se puede relajar adecuadamente el umbral del CCI para filtrar parte del ruido.
Si se hace más de un shorting y se mantiene la posición, se puede considerar la adopción de una estrategia neutral en el mercado de valores, la formulación de reglas de amortización a corto plazo y la reducción del riesgo general de la posición.
Optimización de los parámetros ADX para encontrar el equilibrio óptimo entre filtrar el ruido y atrapar la tendencia en el tiempo.
Optimización de los parámetros de DMI, equilibrando la latencia y la sensibilidad.
Optimización de los parámetros de CCI, equilibrio de la frecuencia de las operaciones y capacidad de captura de inversiones.
Prueba de adición o modificación de otros indicadores en busca de una mejor combinación de efectos. Por ejemplo, MACD, KDJ, etc.
Las variedades de comercio son sometidas a pruebas para encontrar la mejor opción.
Optimizar las estrategias de gestión de posiciones y controlar el riesgo, a la vez que se mantiene la capacidad de seguir tendencias.
La estrategia utiliza el ADX para juzgar la tendencia, determinar la dirección del DMI y ubicar el punto de inflexión del CCI para realizar operaciones de seguimiento de tendencias, con una lógica más fuerte. Sin embargo, se debe optimizar para los parámetros y trabajar con la administración de posiciones para controlar el riesgo. Si los parámetros se ajustan al nivel adecuado y se aplican a variedades con una tendencia evidente, la estrategia espera obtener ganancias estables.
/*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))))