Parabolic Period y Bollinger Band Combinado Moving Stop Loss Strategy

El autor:¿ Qué pasa?, Fecha: 2024-02-02 11:05:57
Las etiquetas:

img

Resumen general

Este artículo presentará una estrategia comercial cuantitativa que combina el indicador de período parabólico y el indicador de banda de Bollinger para establecer una estrategia de stop loss móvil.

Principio de la estrategia

En primer lugar, esta estrategia utiliza el indicador parabólico para juzgar la tendencia actual del mercado. Cuando el precio de cierre de hoy cruza por encima de la línea parabólica del período de ayer, se considera que el mercado se ha invertido a alcista y puede ir largo; cuando el precio de cierre de hoy cruza por debajo de la línea de período, las perspectivas del mercado son bajistas y pueden ir cortas.

En segundo lugar, esta estrategia combina el indicador de la banda de Bollinger para establecer una posición de stop loss dinámica. El rieles superior de la banda de Bollinger se puede ver como una zona de sobrecompra, y el rieles inferior es una zona de sobreventa. Después de ir largo, si el precio vuelve a caer por debajo del rieles inferior de la banda de Bollinger, detenga la pérdida para cerrar la posición; después de ir corto, si el precio vuelve a subir por encima del rieles superior, detenga la pérdida para salir.

A través de los principios anteriores, esta estrategia se da cuenta de juzgar la dirección del mercado mientras se establece un mecanismo dinámico de stop loss para rastrear las ganancias.

Ventajas de la estrategia

En comparación con las estrategias tradicionales de stop loss que solo establecen una posición de stop loss fija, esta estrategia utiliza el indicador de banda de Bollinger como la línea de stop loss, para que la línea de stop loss pueda moverse con las fluctuaciones de precios. Esto le permite obtener más ganancias en movimientos relativamente grandes. Además, en comparación con el uso de la línea de período parabólico solo, esta estrategia agrega el indicador de banda de Bollinger para determinar las áreas de sobrecompra y sobreventa, lo que puede ser más preciso.

Riesgos y soluciones

El principal riesgo de esta estrategia es que la tendencia del indicador parabólico no es fuerte. En los mercados oscilantes, los precios pueden cruzar varias veces las líneas de período parabólicas, causando operaciones rentables frecuentes pero pequeñas para la estrategia. En este punto, las tarifas de transacción y los costos de deslizamiento pueden representar una gran proporción y reducir la rentabilidad de la estrategia.

Para hacer frente a los riesgos anteriores, los parámetros se pueden ajustar para aumentar el grado de cambio en la línea del período parabólico para reducir la probabilidad de error de juicio; o considerar la combinación de otros indicadores para filtrar el momento de entrada.

Optimización de la estrategia

Esta estrategia puede optimizarse en los siguientes aspectos:

  1. Optimizar los parámetros del indicador parabólico para ajustar la tasa de cambio del indicador para reducir la probabilidad de error de juicio

  2. Aumentar el filtrado de otros indicadores técnicos, como la adición de MACD, KD para determinar el tipo de mercado, evitar el arbitraje en el mercado oscilante

  3. Optimizar los parámetros de la banda de Bollinger para ajustar los parámetros de ancho de banda para hacer que las bandas de Bollinger se mantengan más cerca de los cambios de precios

  4. Aumentar los indicadores de volumen, como el volumen de operaciones, posiciones para ayudar a juzgar y evitar falsos breakouts

  5. Combinar los fundamentos de las acciones para evitar problemas con las ganancias de las acciones estrategia de tenencia

Resumen de las actividades

Esta estrategia combina juzgar la dirección y la fuerza de la tendencia del mercado con el indicador parabólico, y luego utiliza los carriles superiores e inferiores de las bandas de Bollinger como la posición de stop loss móvil para establecer una estrategia de stop loss, logrando una combinación de seguimiento de tendencia y control de riesgos.


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

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © maxencetajet

//@version=5
strategy("HA_RSI", overlay=true, initial_capital=1000, default_qty_type=strategy.fixed, default_qty_value=0.5, slippage=25)

closeHA = request.security(ticker.heikinashi(syminfo.tickerid), timeframe.period, close)

useDateFilter = input.bool(true, title="Filter Date Range of Backtest",
     group="Backtest Time Period")
backtestStartDate = input(timestamp("5 June 2022"), 
     title="Start Date", group="Backtest Time Period",
     tooltip="This start date is in the time zone of the exchange " + 
     "where the chart's instrument trades. It doesn't use the time " + 
     "zone of the chart or of your computer.")
backtestEndDate = input(timestamp("5 July 2022"),
     title="End Date", group="Backtest Time Period",
     tooltip="This end date is in the time zone of the exchange " + 
     "where the chart's instrument trades. It doesn't use the time " + 
     "zone of the chart or of your computer.")

inTradeWindow = true

swingHighV = input.int(10, title="Swing High", group="number of past candles")
swingLowV = input.int(10, title="Swing Low", group="number of past candles")

emaV = input.int(200, title="Ema Period", group="EMA")

rsiV = input.int(14, title="RSI Period", group="RSI")

start = input(0.02, group="Parabolic SAR")
increment = input(0.02, group="Parabolic SAR")
maximum = input(0.2, "Max Value", group="Parabolic SAR")

ema = ta.ema(closeHA, emaV)
rsi = ta.rsi(closeHA, rsiV)
SAR = ta.sar(start, increment, maximum)

myColor = SAR < low?color.green:color.red

longcondition = closeHA > ema and rsi > 50 and closeHA[1] > SAR and closeHA[1] < SAR[1] 
shortcondition = closeHA < ema and rsi < 50 and closeHA[1] < SAR and closeHA[1] > SAR[1]

float risk_long = na
float risk_short = na
float stopLoss = na
float entry_price = na
float takeProfit = na

risk_long := risk_long[1]
risk_short := risk_short[1]

swingHigh = ta.highest(closeHA, swingHighV)
swingLow = ta.lowest(closeHA, swingLowV)

if strategy.position_size == 0 and longcondition and inTradeWindow
    risk_long := (close - swingLow) / close
    strategy.entry("long", strategy.long, comment="Buy")
    
if strategy.position_size == 0 and shortcondition and inTradeWindow
    risk_short := (swingHigh - close) / close       
    strategy.entry("short", strategy.short, comment="Sell")
    
if strategy.position_size > 0

    stopLoss := strategy.position_avg_price * (1 - risk_long)
    entry_price := strategy.position_avg_price
    strategy.exit("long exit", "long", stop = stopLoss)
    
if strategy.position_size < 0 

    stopLoss := strategy.position_avg_price * (1 + risk_short)
    entry_price := strategy.position_avg_price
    strategy.exit("short exit", "short", stop = stopLoss)

if closeHA[1] < SAR and close > strategy.position_avg_price
    strategy.close("long", comment="Exit Long")
    
if closeHA[1] > SAR and close < strategy.position_avg_price
    strategy.close("short", comment="Exit Short")

p_ep = plot(entry_price, color=color.new(color.white, 0), linewidth=2, style=plot.style_linebr, title='entry price')
p_sl = plot(stopLoss, color=color.new(color.red, 0), linewidth=2, style=plot.style_linebr, title='stopLoss')
fill(p_sl, p_ep, color.new(color.red, transp=85))

plot(SAR, "ParabolicSAR", style=plot.style_circles, color=myColor, linewidth=1)
plot(ema, color=color.white, linewidth=2, title="EMA")

Más.