Estrategia de seguimiento de stop loss con apertura máxima y mínima


Fecha de creación: 2024-02-18 14:30:08 Última modificación: 2024-02-18 14:30:08
Copiar: 7 Número de Visitas: 599
1
Seguir
1617
Seguidores

Estrategia de seguimiento de stop loss con apertura máxima y mínima

Descripción general

Esta estrategia se basa en el diseño de entradas de datos altos y bajos en la línea K para buscar un punto de inflexión de la tendencia. Las entradas luego establecen una línea de parada en función del indicador ATR y rastrean las paradas.

Principio de estrategia

Las entradas de esta estrategia provienen de los puntos altos y bajos de la apertura. Cuando el precio de apertura de una línea K es igual al precio mínimo, genera una señal de compra, y cuando el precio de apertura es igual al precio máximo, genera una señal de venta, lo que indica que puede haber una oportunidad de reversión de la tendencia.

Las entradas se calculan después de la parada de seguimiento dinámico de acuerdo con el indicador ATR. La línea de parada de compra es el precio más bajo dentro de la línea N más reciente de la raíz K menos 1 por ATR; La línea de parada de venta es el precio más alto dentro de la línea N más reciente de la raíz K más 1 por ATR. La línea de parada se actualiza dinámicamente, el precio de seguimiento funciona.

El beneficio objetivo se calcula de acuerdo con la proporción de riesgo de retorno establecida. El precio objetivo de compra es el precio de entrada más el porcentaje de riesgo de retorno de la diferencia entre el precio de entrada y el precio de parada; el precio objetivo de venta es el precio de entrada menos el porcentaje de riesgo de retorno de la diferencia entre el precio de parada y el precio de entrada.

Cuando el precio toque el precio de stop loss o el precio objetivo, se emite una orden de salida.

Análisis de las ventajas

La estrategia tiene las siguientes ventajas:

  1. Las señales de entrada son simples y claras, fáciles de juzgar, y evitan múltiples vibraciones.

  2. El ATR dinámico detiene el pérdida, maximiza el bloqueo de ganancias y evita la búsqueda de altos y bajos.

  3. Control de la rentabilidad de los riesgos, evitando la retención de ganancias y las operaciones de línea demasiado corta.

  4. Aplicable a diferentes variedades y fácil de optimizar.

Análisis de riesgos

La estrategia también tiene ciertos riesgos:

  1. La señal de entrada puede estar un poco atrasada y perderse la posición óptima.

  2. Si el precio de parada es demasiado bajo o demasiado cercano, puede ser ajustado o perder beneficios.

  3. El módulo no determina tendencias y es susceptible de ser usado en situaciones de crisis.

  4. No se puede manejar la construcción de un depósito de noche.

La dirección de optimización correspondiente:

  1. En combinación con otros indicadores para evaluar la tendencia, evitar el arbitraje de la situación de la oscilación.

  2. Ajuste los parámetros de ATR o agregue un control de fluctuación para optimizar la línea de parada.

  3. agregar un módulo de evaluación de tendencias o filtrado para reducir el error de la señal de entradas.

  4. Se añade un módulo de tratamiento nocturno para el almacenamiento nocturno de una variedad específica.

Resumir

En general, esta estrategia es más simple y directa, las señales de entradas son claras, la estrategia de deterioro es razonable y el control del riesgo está en su lugar. Pero también hay ciertos problemas de limitación, como falta de juicio de tendencia, retraso de la señal, etc. Estos problemas también proporcionan orientación para la optimización futura. Al combinar más indicadores de juicio y módulos de control de riesgo, la estrategia puede aumentar aún más su eficacia y volverse más generalizada.

Código Fuente de la Estrategia
/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
// Open-High-Low strategy

strategy('Strategy: OLH', shorttitle="OLH", overlay=true )

// Inputs
slAtrLen = input.int(defval=14, title="ATR Period for placing SL", group="StopLoss settings")
showSLLines = input.bool(defval=false, title="Show SL lines in chart", tooltip="Show SL lines also as dotted lines in chart. Note: chart may look untidy.", group="Stolploss settings")
// Trade related
rrRatio = input.float(title='Risk:Reward', step=0.1, defval=2.0, group="Trade settings")
endOfDay = input.int(defval=1500, title="Close all trades, default is 3:00 PM, 1500 hours (integer)", group="Trade settings")
mktAlwaysOn = input.bool(defval=true, title="Markets that never closed (Crypto, Forex, Commodity)", tooltip="Some markers never closes. For those cases, make this checked.", group="Trade settings")
lotSize = input.int(title='Lot Size', step=1, defval=1, group="Trade settings")


// Utils
green(open, close) => close > open ? true : false
red(open, close) => close < open ? true : false
body(open, close) => math.abs(open - close)
lowerwick = green(open, close) ? open - low : close - low
upperwick = green(open, close) ? high - close : high - open
crange = high - low
crangep = high[1] - low[1] // previous candle's candle-range
bullish = close > open ? true : false
bearish = close < open ? true : false


// Trade signals
longCond = barstate.isconfirmed and (open == low)
shortCond = barstate.isconfirmed and (open == high)

// For SL calculation
atr = ta.atr(slAtrLen)
highestHigh = ta.highest(high, 7)
lowestLow = ta.lowest(low, 7)
longStop = showSLLines ? lowestLow - (atr * 1) : na
shortStop = showSLLines ? highestHigh + (atr * 1) : na
plot(longStop, title="Buy SL", color=color.green, style=plot.style_cross)
plot(shortStop, title="Sell SL", color=color.red, style=plot.style_cross)

// Trade execute
h = hour(time('1'), syminfo.timezone)
m = minute(time('1'), syminfo.timezone)
hourVal = h * 100 + m
totalTrades = strategy.opentrades + strategy.closedtrades
if (mktAlwaysOn or (hourVal < endOfDay))
    // Entry
    var float sl = na
    var float target = na
    if (longCond)
        strategy.entry("enter long", strategy.long, lotSize, limit=na, stop=na, comment="Enter Long")
        sl := longStop
        target := close + ((close - longStop) * rrRatio)
        alert('Buy:' + syminfo.ticker + ' ,SL:' + str.tostring(math.floor(sl)) + ', Target:' + str.tostring(target), alert.freq_once_per_bar)
    if (shortCond)
        strategy.entry("enter short", strategy.short, lotSize, limit=na, stop=na, comment="Enter Short")
        sl := shortStop
        target := close - ((shortStop - close) * rrRatio)
        alert('Sell:' + syminfo.ticker + ' ,SL:' + str.tostring(math.floor(sl)) + ', Target:' + str.tostring(target), alert.freq_once_per_bar)

    // Exit: target or SL
    if ((close >= target) or (close <= sl))
        strategy.close("enter long", comment=close < sl ? "Long SL hit" : "Long target hit")
    if ((close <= target) or (close >= sl))
        strategy.close("enter short", comment=close > sl ? "Short SL hit" : "Short target hit")
else if (not mktAlwaysOn)
    // Close all open position at the end if Day
    strategy.close_all(comment = "Close all entries at end of day.")