Estrategia combinada de captura de tendencia de reversión y stop loss dinámico

El autor:¿ Qué pasa?, Fecha: 2024-02-05 09:54:13
Las etiquetas:

img

Resumen general

Esta estrategia combina una estrategia de captura de tendencias de reversión y una estrategia dinámica de stop loss para capturar tendencias de reversión y controlar los riesgos con paradas dinámicas.

Estrategia lógica

Estrategia de captura de la tendencia a la reversión

Esta estrategia se basa en los valores K y D del Oscilador Estocástico. Genera señales de compra cuando el precio cae durante dos días consecutivos mientras que K se eleva por encima de D. Genera señales de venta cuando el precio aumenta durante dos días mientras que K cae por debajo de D. Esto captura tendencias de inversión de precios.

Estrategia dinámica de suspensión de pérdidas

Esta estrategia establece un stop loss dinámico basado en la volatilidad del precio y el sesgo. Cálcula la fluctuación del máximo más alto y el mínimo más bajo recientemente y juzga si está en un canal superior o inferior basado en el sesgo, luego establece el precio de stop dinámico en consecuencia. Esto ajusta la posición de stop basado en la condición del mercado.

Las dos estrategias trabajan juntas para detectar señales de reversión y establecer paradas dinámicas para controlar los riesgos.

Análisis de ventajas

  • Puntos de reversión del precio de captura, buenos para la negociación de reversión
  • Las paradas dinámicas se ajustan al entorno del mercado
  • La confirmación de dos señales evita señales falsas
  • Control de riesgos y garantía de beneficios

Análisis de riesgos

  • Riesgo de fallo de la inversión.
  • Los parámetros incorrectos pueden afectar el rendimiento.
  • Riesgo de liquidez Algunos productos tienen poca liquidez para detener las pérdidas.

Los riesgos pueden controlarse mediante la optimización de parámetros, el estricto stop loss, la elección de productos con buena liquidez.

Direcciones de optimización

  • Optimizar los parámetros estocásticos para obtener la mejor combinación
  • Optimizar los parámetros de parada para la mejor posición de parada
  • Añadir filtros para evitar la apertura en los mercados de rango
  • Añadir el tamaño de la posición para limitar la pérdida máxima

Las optimizaciones integrales permiten que la estrategia capte las reversiones mientras controla los riesgos.

Resumen de las actividades

La estrategia combina la captura de tendencias de reversión y paradas dinámicas para una negociación estable a corto plazo.


/*backtest
start: 2024-01-05 00:00:00
end: 2024-02-04 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 07/12/2020
// This is combo strategies for get a cumulative signal. 
//
// First strategy
// This System was created from the Book "How I Tripled My Money In The 
// Futures Market" by Ulf Jensen, Page 183. This is reverse type of strategies.
// The strategy buys at market, if close price is higher than the previous close 
// during 2 days and the meaning of 9-days Stochastic Slow Oscillator is lower than 50. 
// The strategy sells at market, if close price is lower than the previous close price 
// during 2 days and the meaning of 9-days Stochastic Fast Oscillator is higher than 50.
//
// Second strategy
//  The Kase Dev Stops system finds the optimal statistical balance between letting profits run, 
//  while cutting losses.  Kase DevStop seeks an ideal stop level by accounting for volatility (risk),
//  the variance in volatility (the change in volatility from bar to bar), and volatility skew 
//  (the propensity for volatility to occasionally spike incorrectly).
//  Kase Dev Stops are set at points at which there is an increasing probability of reversal against 
//  the trend being statistically significant based on the log normal shape of the range curve.  
//  Setting stops will help you take as much risk as necessary to stay in a good position, but not more.
//
// You can change long to short in the Input Settings
// Please, use it only for learning or paper trading. Do not for real trading.
//
// WARNING:
// - For purpose educate only
// - This script to change bars colors.
////////////////////////////////////////////////////////////
Reversal123(Length, KSmoothing, DLength, Level) =>
    vFast = sma(stoch(close, high, low, Length), KSmoothing) 
    vSlow = sma(vFast, DLength)
    pos = 0.0
    pos := iff(close[2] < close[1] and close > close[1] and vFast < vSlow and vFast > Level, 1,
	         iff(close[2] > close[1] and close < close[1] and vFast > vSlow and vFast < Level, -1, nz(pos[1], 0))) 
	pos

KaseDevStops(Length, Level) =>
    pos = 0.0
    RWH = (high - low[Length]) / (atr(Length) * sqrt(Length))
    RWL = (high[Length] - low) / (atr(Length) * sqrt(Length))
    Pk = wma((RWH-RWL),3)
    AVTR = sma(highest(high,2) - lowest(low,2), 20)
    SD = stdev(highest(high,2) - lowest(low,2),20)
    Val4 = iff(Pk>0, highest(high-AVTR-3*SD,20), lowest(low+AVTR+3*SD,20))
    Val3 = iff(Pk>0, highest(high-AVTR-2*SD,20), lowest(low+AVTR+2*SD,20))
    Val2 = iff(Pk>0, highest(high-AVTR-SD,20), lowest(low+AVTR+SD,20))
    Val1 = iff(Pk>0, highest(high-AVTR,20), lowest(low+AVTR,20))
    ResPrice = iff(Level == 4, Val4,
                 iff(Level == 3, Val3,
                  iff(Level == 2, Val2,
                     iff(Level == 1, Val1, Val4))))
    pos := iff(close < ResPrice , -1, 1)
    pos

strategy(title="Combo Backtest 123 Reversal & Kase Dev Stops", shorttitle="Combo", overlay = true)
Length = input(14, minval=1)
KSmoothing = input(1, minval=1)
DLength = input(3, minval=1)
Level = input(50, minval=1)
//-------------------------
LengthKDS = input(30, minval=2, maxval = 100)
LevelKDS = input(title="Trade From Level", defval=4, options=[1, 2, 3, 4])
reverse = input(false, title="Trade reverse")
posReversal123 = Reversal123(Length, KSmoothing, DLength, Level)
posKaseDevStops = KaseDevStops(LengthKDS, LevelKDS)
pos = iff(posReversal123 == 1 and posKaseDevStops == 1 , 1,
	   iff(posReversal123 == -1 and posKaseDevStops == -1, -1, 0)) 
possig = iff(reverse and pos == 1, -1,
          iff(reverse and pos == -1 , 1, pos))	   
if (possig == 1) 
    strategy.entry("Long", strategy.long)
if (possig == -1)
    strategy.entry("Short", strategy.short)	 
if (possig == 0) 
    strategy.close_all()
barcolor(possig == -1 ? #b50404: possig == 1 ? #079605 : #0536b3 )

Más.