Estrategia de seguimiento de tendencias basada en el indicador estocástico y el indicador CCI


Fecha de creación: 2023-11-22 16:23:31 Última modificación: 2023-11-22 16:23:31
Copiar: 1 Número de Visitas: 844
1
Seguir
1617
Seguidores

Estrategia de seguimiento de tendencias basada en el indicador estocástico y el indicador CCI

Descripción general

La estrategia combina el indicador estocástico y el indicador CCI para identificar la dirección de la tendencia, y utiliza el indicador de la tasa de cambio para filtrar la tendencia de la oscilación y lograr el seguimiento de la tendencia. La estrategia utiliza una entrada de ruptura y una salida de pérdida.

Principio de estrategia

  1. Indicadores estocásticos para juzgar la forma holística
    Cuando el indicador estocástico se cruza en su bar más reciente para comprar una señal y cuando se cruza en su bar más reciente para vender una señal
  2. Indicadores del CCI para determinar la dirección de las tendencias
    CCI mayor a 0 para el mercado de capas y menor a 0 para el mercado de capas
  3. El índice Rate of Change filtra las tendencias de las oscilaciones
    Configuración de los parámetros de la tasa de cambio para determinar si el precio está en una tendencia activa
  4. Reglas de entrada y salida
    Señales de compra: Stochastic en la barra más reciente y el CCI es mayor que 0 y la tendencia de precios es activa
    Señales de venta: Stochastic por debajo de la barra más reciente y CCI menor a 0 y la tendencia de precios activa
    Cesación de pérdidas exit: Cesación de pérdidas de línea larga 3% y línea corta 3%

Análisis de las ventajas

  1. Combinado con el indicador estocástico y el indicador CCI para determinar la dirección de la tendencia, tiene una mayor precisión
  2. El indicador de la tasa de cambio es eficaz para eliminar la tendencia de la oscilación y evitar el comercio ineficaz.
  3. El comercio bidireccional multi-espacio capta diferentes tipos de tendencias
  4. La brecha de entrada para seguir la tendencia y aprovechar las oportunidades de tendencia
  5. Estricta suspensión de pérdidas para evitar grandes pérdidas y controlar el riesgo de manera efectiva

Análisis de riesgos

  1. La configuración incorrecta de los parámetros de la política puede conducir a ser demasiado conservadora o radical
  2. Los indicadores son limitados y pueden fallar en situaciones extremas
  3. La entrada por la brecha se salta la tendencia inicial, y parte de las ganancias se cortan
  4. El stop loss es demasiado pequeño y fácil de romper, y el control de riesgo es demasiado grande.

Dirección de optimización

  1. Optimización de parámetros: mejora la configuración de los parámetros para encontrar la combinación óptima de parámetros
  2. Múltiples indicadores para mejorar la eficacia de las decisiones
  3. Detención activa. Configuración de la detención de seguimiento o la detención de paso de tiempo, para reducir la probabilidad de que la detención sea superada.
  4. Evaluación de riesgos: inclusión de restricciones en los indicadores de riesgo, como la retirada máxima, y control total de la brecha de riesgo

Resumir

La estrategia integra Stochastic, CCI y Rate of Change, tres indicadores para determinar la dirección de la tendencia, para aprovechar las oportunidades de tendencia de una manera que rompa el seguimiento. La ventaja de la estrategia reside en que los indicadores se combinan para juzgar con precisión y filtrar eficazmente el comportamiento de la oscilación, a través de un estricto control del riesgo de pérdidas. El siguiente paso puede ser mejorado en términos de optimización de parámetros, combinación de varios indicadores y estrategias de pérdidas, para que la estrategia sea más estable y flexible.

Código Fuente de la Estrategia
/*backtest
start: 2022-11-15 00:00:00
end: 2023-11-21 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Stochastic CCI BF 🚀", overlay=false, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.075)

/////////////// Time Frame ///////////////
testStartYear = input(2017, "Backtest Start Year") 
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay, 0, 0)

testStopYear = input(2019, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(31, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay, 0, 0)

testPeriod() => true

///////////// CCI ///////////// 
src = close
ccilength = input(13, minval=1, title="CCI Length")
c=cci(src, ccilength)

///////////// Stochastic ///////////// 
len = input(19, minval=1, title="RSI Length")
lenema = input(12, minval=1, title="RSI-EMA Length")
up = rma(max(change(src), 0), len)
down = rma(-min(change(src), 0), len)
rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down))
out = ema(rsi, lenema)

///////////// Rate Of Change ///////////// 
source = close
roclength = input(30, minval=1)
pcntChange = input(7.0, minval=1)
roc = 100 * (source - source[roclength]) / source[roclength]
emaroc = ema(roc, roclength / 2)
isMoving() => emaroc > (pcntChange / 2) or emaroc < (0 - (pcntChange / 2))

/////////////// Strategy ///////////////
long = out > out[1] and isMoving() and c > 0
short = out < out[1] and isMoving() and c < 0

last_long = 0.0
last_short = 0.0
last_long := long ? time : nz(last_long[1])
last_short := short ? time : nz(last_short[1])

long_signal = crossover(last_long, last_short)
short_signal = crossover(last_short, last_long)

last_open_long_signal = 0.0
last_open_short_signal = 0.0
last_open_long_signal := long_signal ? open : nz(last_open_long_signal[1])
last_open_short_signal := short_signal ? open : nz(last_open_short_signal[1])

last_long_signal = 0.0
last_short_signal = 0.0
last_long_signal := long_signal ? time : nz(last_long_signal[1])
last_short_signal := short_signal ? time : nz(last_short_signal[1])

in_long_signal = last_long_signal > last_short_signal
in_short_signal = last_short_signal > last_long_signal

last_high = 0.0
last_low = 0.0
last_high := not in_long_signal ? na : in_long_signal and (na(last_high[1]) or high > nz(last_high[1])) ? high : nz(last_high[1])
last_low := not in_short_signal ? na : in_short_signal and (na(last_low[1]) or low < nz(last_low[1])) ? low : nz(last_low[1])

sl_inp = input(3.0, title='Stop Loss %') / 100 

since_longEntry = barssince(last_open_long_signal != last_open_long_signal[1]) 
since_shortEntry = barssince(last_open_short_signal != last_open_short_signal[1]) 

slLong = in_long_signal ? strategy.position_avg_price * (1 - sl_inp) : na
slShort = strategy.position_avg_price * (1 + sl_inp)
long_sl = in_long_signal ? slLong : na
short_sl = in_short_signal ? slShort : na

/////////////// Execution ///////////////
if testPeriod()
    strategy.entry("L",  strategy.long, when=long_signal)
    strategy.entry("S", strategy.short, when=short_signal)
    strategy.exit("L Ex", "L", stop=long_sl, when=since_longEntry > 0)
    strategy.exit("S Ex", "S", stop=short_sl, when=since_shortEntry > 0)

/////////////// Plotting /////////////// 
bgcolor(long_signal ? color.lime : short_signal ? color.red : na, transp=30)
bgcolor(not isMoving() ? color.white : long ? color.lime : short ? color.red : na, transp=80)
plot(out, color = out > out[1] ? color.lime:color.red, linewidth = 2, title="Stoch")
plot(c, color = c > 0 ? color.lime:color.red, linewidth = 2, title="CCI")