Reglas de negociación caóticas Estrategia Stop Loss

El autor:¿ Qué pasa?, fecha: 2023-11-07 16:44:31
Las etiquetas:

img

Resumen general

La idea central de esta estrategia es agregar algunas reglas clave de gestión de operaciones sobre la base de la estrategia RSI, incluyendo stop loss, take profit, trailing stop loss y leverage tracking stop loss. Esto permite a la estrategia lograr mayores rendimientos durante los mercados de tendencia y minimizar las pérdidas durante los mercados de rango en backtest.

Estrategia lógica

La estrategia primero calcula el indicador RSI. Se va largo cuando el RSI está por debajo del nivel de sobreventa y se va corto cuando el RSI está por encima del nivel de sobrecompra.

Si el precio cae por debajo del punto de stop loss menos el rango de stop loss, la posición se cierra con stop loss.

Si el precio se eleva por encima del punto de stop loss más el rango de stop loss, la posición se cierra mediante stop loss.

Al mismo tiempo, se establecen distancias fijas de take profit y stop loss. Si el precio alcanza la distancia de take profit, se toma el beneficio para cerrar la posición. Si alcanza la distancia de stop loss, se cierra la posición mediante stop loss.

Además, se establece una línea de stop loss de seguimiento del apalancamiento en función del apalancamiento.

Al seguir el precio más alto durante las tendencias alcistas y el precio más bajo durante las tendencias bajistas, combinado con distancias fijas de toma de ganancias y stop loss, se pueden lograr mayores rendimientos en los mercados de tendencia.

Análisis de ventajas

La mayor ventaja de esta estrategia es la introducción de múltiples reglas de gestión de operaciones que controlan mejor los riesgos al tiempo que aprovechan las fortalezas de la estrategia RSI.

En concreto, las ventajas son:

  1. El stop loss de seguimiento puede seguir continuamente la tendencia para obtener mayores ganancias durante los mercados de tendencia.

  2. Las ganancias fijas y el stop loss bloquean algunas ganancias y evitan que las ganancias completas se eliminen cuando la tendencia se invierte.

  3. El seguimiento del apalancamiento para evitar pérdidas ayuda a evitar la expansión de las pérdidas y controla el riesgo.

  4. La combinación de varios métodos de stop loss puede ejercer sus fortalezas en diferentes entornos de mercado, mejorando la estabilidad general de la estrategia.

  5. El ajuste flexible de los parámetros de la estrategia se adapta a diferentes instrumentos de negociación y entornos de mercado.

  6. La lógica fácil de entender facilita la verificación, optimización y aplicación.

Análisis de riesgos

Los principales riesgos de esta estrategia provienen de:

  1. La estrategia de RSI en sí tiene algunos riesgos, lo que puede desencadenar el stop loss.

  2. La oscilación alrededor de los puntos de stop loss puede desencadenar con frecuencia una stop loss.

  3. La distancia de toma de ganancias no puede bloquear completamente las ganancias durante los mercados de tendencia.

  4. La distancia de stop loss fija puede ser demasiado pequeña para evitar completamente las pérdidas.

  5. El apalancamiento excesivo conduce a que la pérdida de parada esté demasiado cerca del precio de entrada.

  6. Es posible que el período de prueba posterior no represente plenamente las condiciones futuras del mercado.

Los riesgos anteriores pueden mitigarse mediante el ajuste de parámetros, la optimización de los mecanismos de stop loss, el control de riesgos, etc. Pero ninguna estrategia puede evitar completamente los riesgos del mercado.

Direcciones de optimización

La estrategia se puede optimizar aún más en los siguientes aspectos:

  1. Optimizar los parámetros del RSI para reducir las operaciones de la sierra y probar los parámetros óptimos para diferentes mercados.

  2. Pruebe otros indicadores como KD, MACD combinado con RSI para filtrar entradas.

  3. Utilice el aprendizaje automático para optimizar dinámicamente los parámetros de stop loss y take profit.

  4. Prueba mecanismos de stop loss más complejos como los stop loss oscilantes, los stop loss promedio, los stop loss dinámicos, etc.

  5. Optimizar el establecimiento del apalancamiento y estudiar los efectos en el control de beneficios y riesgos.

  6. Ajuste automático de parámetros basados en cambios en el régimen del mercado, como el impulso α-Dual.

  7. Incorporar otros factores para determinar la persistencia de la tendencia, por ejemplo, la energía de volumen.

  8. Utilice modelos de aprendizaje profundo para desarrollar formas de stop loss más robustas e interpretables.

  9. Prueba de datos de diferentes instrumentos y períodos de tiempo para evaluar la solidez de la estrategia.

Conclusión

Esta estrategia complementa la estrategia RSI con varios métodos de stop loss, dando pleno juego a los efectos duales de la stop loss en la obtención de beneficios de las tendencias y el control de riesgos. Todavía hay un gran espacio para la optimización. Las ideas pueden ampliarse a más estrategias e instrumentos comerciales. Las estrategias de stop loss valen la pena una investigación en profundidad y pueden convertirse en una parte muy importante de los sistemas de negociación mecánica después de la optimización y verificación continuas.


/*backtest
start: 2022-11-06 00:00:00
end: 2023-11-06 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy("Adding some essential components to a prebuilt RSI strategy", overlay=true)

/////////////// Component Code Start ///////////////
testStartYear = input(2011, "Backtest Start Year") 
testStartMonth = input(8, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)

testStopYear = input(2016, "Backtest Stop Year")
testStopMonth = input(9, "Backtest Stop Month")
testStopDay = input(29, "Backtest Stop Day")
// testStopDay = testStartDay + 1
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0)

// A switch to control background coloring of the test period
testPeriodBackground = input(title="Color Background?", type=bool, defval=true)
testPeriodBackgroundColor = testPeriodBackground and (time >= testPeriodStart) and (time <= testPeriodStop) ? #00FF00 : na
bgcolor(testPeriodBackgroundColor, transp=97)

testPeriod() => true
/////////////// Component Code Stop ///////////////

///////////// RSI component /////////////
length = input( 14 )
overSold = input( 30 )
overBought = input( 70 )
price = close

vrsi = rsi(price, length)
notna = not na(vrsi)

/////////////// STRATEGY ///////////////
ts = input(99999, "Trailing Stop") / 100
tp = input(99999, "Take Profit") / 100
sl = input(99999, "Stop Loss") / 100

long = notna and crossover(vrsi, overSold)
short = notna and crossunder(vrsi, overBought)

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 = 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 = 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 = 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])

long_ts = not na(last_high) and high <= (last_high - ts) //and high >= last_open_long_signal
short_ts = not na(last_low) and low >= (last_low + ts) //and low <= last_open_short_signal

long_tp = high >= (last_open_long_signal + tp)
short_tp = low <= (last_open_short_signal - tp)

long_sl = low <= (last_open_long_signal - sl)
short_sl = high >= (last_open_short_signal + sl)

leverage = input(200, "Leverage")
long_call = last_open_long_signal - (0.8 + 0.2 * (1/leverage)) / leverage * last_open_long_signal
short_call = last_open_short_signal + (0.78 + 0.2 * (1/leverage)) / leverage * last_open_short_signal
long_call_signal = low <= long_call
short_call_signal = high >= short_call

if testPeriod()
    strategy.entry("Long", strategy.long, when=long_signal)
    strategy.entry("Short", strategy.short, when=short_signal)

    // plot(long_call, color=red)
    // plot(short_call, color=green)
    strategy.close("Long", when=long_call_signal)
    strategy.close("Short", when=short_call_signal)
    strategy.close("Long", when=long_tp)
    strategy.close("Short", when=short_tp)
    strategy.close("Long", when=long_sl)
    strategy.close("Short", when=short_sl)
    strategy.close("Long", when=long_ts)
    strategy.close("Short", when=short_ts)

Más.