Estrategia de prueba posterior de PB SAR con stop loss elástico

El autor:¿ Qué pasa?, Fecha: 2023-10-11 15:22:26
Las etiquetas:

Resumen

La estrategia se basa en indicadores de suspensión de pérdidas flexibles, establece señales de compra y venta, realiza operaciones largas y cortas. Cuando el indicador aparece con señales de compra, haga más; cuando aparece con señales de venta, haga nada. La estrategia también combina un mecanismo de seguimiento de pérdidas para controlar el riesgo de manera efectiva.

El principio

La estrategia utiliza principalmente el indicador de suspensión elástica para identificar los puntos de inflexión de la tendencia y realizar operaciones de reversión. El indicador utiliza el indicador de rango real dentro del indicador para identificar el precio del límite, y cuando el precio excede el límite, se considera una ruptura anormal y se determina la posibilidad de un cambio de tendencia. En concreto, el indicador mantiene dos variables dentro del indicador: el precio del límite (EP) y el precio del disparo (TP).

En una tendencia alcista, cuando el precio es superior al EP, se determina como un aborto, en este caso, el EP se actualiza como el precio más alto y el TP como el precio más bajo. Cuando el precio es inferior al TP, se determina la reversión de la tendencia y se genera una señal de venta. En una tendencia bajista, el principio es similar.

La estrategia se combina con un mecanismo de seguimiento de stop loss, que cuando se abre una posición, sigue el precio óptimo de stop loss en tiempo real, controlando el riesgo al mismo tiempo que garantiza una ganancia. En concreto, después de hacer mucho, la línea de stop loss sigue los puntos bajos de cierre; después de hacer nada, la línea de stop loss sigue los puntos altos de cierre.

Las ventajas

La estrategia tiene las siguientes ventajas:

  1. Los indicadores son utilizados para identificar los puntos de inflexión de las tendencias y no son fácilmente atrapados.

  2. El mecanismo de seguimiento de pérdidas puede bloquear las ganancias y evitar la expansión de las pérdidas.

  3. Los parámetros del indicador son simples y fáciles de implementar.

  4. Se puede configurar una señal de compra y venta, fácil de usar.

  5. Configurar flexiblemente los ciclos de revisión para evaluar completamente el efecto de la estrategia.

El riesgo

La estrategia también tiene algunos riesgos:

  1. Los indicadores están rezagados y pueden perder el punto óptimo para invertir la tendencia.

  2. Los precios de los productos de la industria se han reducido considerablemente en los últimos años, y los precios de los productos de la industria han disminuido considerablemente.

  3. La selección de ciclos de repetición es incorrecta y no permite evaluar completamente el efecto de la estrategia.

  4. El impacto de los costos de transacción en las ganancias debería ser considerado.

Los riesgos que se enfrentan pueden ser optimizados en los siguientes aspectos:

  1. Los parámetros de los indicadores se han ajustado para reducir el retraso.

  2. Optimiza los algoritmos de stop loss para evitar ser engañado.

  3. Seleccione el ciclo de reevaluación adecuado para garantizar la fiabilidad.

  4. Optimiza la gestión de posiciones y reduce los costos de transacción.

Dirección de optimización

La estrategia puede ser optimizada aún más en los siguientes aspectos:

  1. Se puede combinar con indicadores de tendencia para evitar que las transacciones invertidas sean cubiertas. Se pueden combinar indicadores como MA para determinar la tendencia general.

  2. Optimiza los algoritmos de gestión de posiciones, como posiciones de proporción fija, posiciones dinámicas, etc.

  3. En la actualidad, la mayoría de las transacciones están en línea con el mercado de divisas.

  4. Para obtener la mejor combinación de parámetros, optimiza los parámetros.

  5. En la actualidad, la mayoría de los usuarios de Twitter están usando una estrategia de bloqueo para detener el bloqueo en tiempo y forma durante la tendencia.

  6. Optimiza la estrategia de stop loss para que sea más suave. Puedes probar algoritmos de stop loss como Chandelier Exit.

  7. Optimiza la variedad de transacciones, el período de tiempo, etc., y mejora la adaptabilidad de la estrategia.

  8. La incorporación de algoritmos de aprendizaje automático hace que las estrategias sean más adaptables.

Resumen

La estrategia en su conjunto es más simple y fiable, se utiliza para identificar puntos de inversión con indicadores de parálisis flexibles, y se puede utilizar como una estrategia de reversión de corto plazo para controlar el riesgo mediante un mecanismo de parálisis de seguimiento. Sin embargo, se deben tener en cuenta problemas como el retraso del indicador, el parálisis demasiado radical, etc. Se espera obtener mejores resultados estratégicos con una optimización adicional.

Resumen general

Esta estrategia se basa en el indicador Parabolic SAR para generar señales de compra y venta para posiciones largas y cortas.

Principio

El núcleo de esta estrategia es identificar puntos de inversión de tendencia utilizando el indicador SAR para contratrender. El indicador utiliza el rango verdadero para detectar precios extremos. Cuando el precio excede el extremo, se considera una ruptura y una señal de una posible inversión de tendencia. Específicamente, el indicador mantiene dos variables: el precio extremo (EP) y el precio de activación (TP). El EP representa el precio más alto / más bajo de la tendencia actual, mientras que el TP se deriva del EP.

En una tendencia alcista, cuando el precio es superior al EP, se considera una ruptura. El EP se actualiza entonces al precio más alto y el TP al precio más bajo. Cuando el precio cae por debajo del TP, se identifica una inversión de tendencia y se genera una señal de venta. El mismo principio se aplica a una tendencia bajista.

La estrategia también incorpora un mecanismo de stop loss trasero. Después de abrir una posición, rastreará el precio óptimo de stop loss en tiempo real, bloqueando las ganancias mientras controla los riesgos.

Ventajas

Las principales ventajas de esta estrategia son las siguientes:

  1. Identifique los puntos de inversión de tendencia con el indicador, evitando quedar atrapado en las tendencias.

  2. El seguimiento del stop loss bloquea las ganancias y evita pérdidas más amplias.

  3. Parámetros de indicadores simples, fáciles de implementar.

  4. Alertas de señales de compra/venta configurables para mayor comodidad.

  5. Configuración flexible del período de prueba posterior para una evaluación exhaustiva.

Los riesgos

También hay algunos riesgos a tener en cuenta:

  1. El retraso del indicador puede no alcanzar los puntos óptimos de inversión.

  2. Las paradas agresivas pueden ser detenidas por fluctuaciones a corto plazo.

  3. La selección incorrecta del período de backtest no puede evaluar plenamente la estrategia.

  4. Los costes de transacción pueden afectar a los beneficios.

Algunas formas de abordar los riesgos son:

  1. Optimice los parámetros para reducir el retraso.

  2. Mejorar el algoritmo de stop loss para evitar ser detenido innecesariamente.

  3. Seleccionar los períodos de prueba posterior adecuados para la fiabilidad.

  4. Optimizar el tamaño de las posiciones para reducir los costes de transacción.

Mejoramiento

Algunas maneras de optimizar aún más la estrategia:

  1. Incorporar indicadores de tendencia como MA para evitar quedar atrapados en contratrends.

  2. Optimizar los algoritmos de dimensionamiento de la posición, por ejemplo, la fracción fija, dinámica.

  3. Añadir un filtro de volumen para evitar señales falsas de los huecos.

  4. Optimización de parámetros para encontrar combinaciones óptimas.

  5. Implementar estrategias de toma de ganancias para fijar las ganancias en las tendencias.

  6. Refinar los algoritmos de stop loss para paradas más suaves. Experimentar con Chandelier Exit etc.

  7. Optimizar en todos los productos, marcos de tiempo, etc. para mejorar la adaptabilidad.

  8. Incorporar aprendizaje automático para una mayor adaptabilidad.

Resumen de las actividades

En resumen, esta es una estrategia simple y robusta que utiliza el SAR parabólico para identificar reversiones y dejar atrás la pérdida para controlar el riesgo. Puede funcionar como una estrategia de reversión media a corto plazo.


/*backtest
start: 2023-09-10 00:00:00
end: 2023-10-10 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("PB SAR BackTest - Colorbar", overlay=false)

// Full credit to Sawcruhteez, Lucid Investment Strategies LLC, Casey Bowman and Peter Brandt.
// This is a strategy version of the Peterbolic SAR indicator created by the above-mentioned parties.
// Original version of the indicator: https://www.tradingview.com/script/6nYrH3Vm-Peterbolic-SAR/

// SAR #1
// Lucid Sar
// Branded under the name "Lucid SAR"
// as agreed to with Lucid Investment Strategies LLC on July 9, 2019
// https://lucidinvestmentstrategies.com/
// see branch "lucid"

// SAR #2
// Peterbolic Sar
// Using the name "Peterbolic SAR"
// as agreed to by Peter Brandt on October 2, 2019
// - https://twitter.com/PeterLBrandt/status/1179365590668075008
// in response to request from Sawcruhteez
// - https://twitter.com/Sawcruhteez/status/1179213105705836544
// Sawcruhteez gives credit to @CrazyGabey for coming up with the name
// - https://twitter.com/Sawcruhteez/status/1179213196583940097
// see branch "peterbolic"

// SAR #3
// Sawcruhteez Sar
// Branded under the name "Sawcruhteez SAR"
// as agreed to with Sawcruhteez on September 11, 2019
// see branch "sawcruhteez"

// Open Source on github
// https://github.com/casey-bowman/sar/blob/peterbolic/peterbolic.pine

// Created by Casey Bowman on July 4, 2019

// MIT License

// Copyright (c) 2019 Casey Bowman

// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:

// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.

// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.



TSR() =>

    // start with uptrend
    var uptrend = true
    var EP = high       // extreme price - high or low depending on trend
    var SP = low        // setup price
    var TP = float(na)  // trigger price


    var setup   = low
    var trigger = float(na)

    if barstate.isnew
        setup := low
        trigger = float(na)

    extreme_candle = false
    first_extreme_candle = false
    setup_candle = false
    trigger_candle = false

    waiting_for_setup = false
    waiting_for_trigger = false

    var since_extreme = 0
    var since_setup = 0

    waiting_for_setup   := not extreme_candle and not na(SP)
    waiting_for_trigger := not na(TP)

    if not barstate.isfirst
        if barstate.isnew and extreme_candle[1]
            trigger := float(na)
        if barstate.isnew and setup_candle[1]
            setup := float(na)
        if barstate.isnew and waiting_for_trigger
            since_setup := since_setup + 1
            trigger := TP
        if barstate.isnew and waiting_for_setup
            since_extreme := since_extreme + 1
            setup := SP
        if uptrend

            if extreme_candle
                EP := high
                SP := low
            else
                if high > EP
                    extreme_candle := true
                    EP := high
                    SP := low
                    since_extreme := 0
                    since_setup   := 0
                else
                    if waiting_for_setup
                        if barstate.isconfirmed
                            if close < SP
                                setup_candle := true
                                SP := float(na)
                                TP := low
            if waiting_for_trigger
                if low < TP
                    trigger_candle := true
                    extreme_candle := true
                    EP := low
                    SP := high
                    TP := float(na)
                    uptrend := false
                    since_extreme := 0
                    since_setup := 0
                else
                    if barstate.isconfirmed and extreme_candle
                        TP := float(na)
                        trigger := float(na)

        else
            if extreme_candle
                EP := low
                SP := high
            else
                if low <  EP
                    extreme_candle := true
                    EP := low
                    SP := high
                    since_extreme := 0
                    since_setup   := 0
                else
                    if waiting_for_setup
                        if barstate.isconfirmed
                            if close > SP
                                setup_candle := true
                                SP := float(na)
                                TP := high
            if waiting_for_trigger
                if high > TP
                    trigger_candle := true
                    extreme_candle := true
                    EP := high
                    SP := low
                    TP := float(na)
                    uptrend := true
                    since_extreme := 0
                    since_setup := 0
                else
                    if barstate.isconfirmed and extreme_candle
                        TP := float(na)
                        trigger := float(na)


    [trigger_candle, trigger, since_setup, setup_candle, setup, since_extreme, extreme_candle, uptrend]


[TC, T, SS, SC, S, SE, EC, up] = TSR()

// Make input options that configure backtest date range
StartMonth = input(title="Start Month", type=input.integer,
     defval=1, minval=1, maxval=12)
StartDate = input(title="Start Date", type=input.integer,
     defval=1, minval=1, maxval=31)
StartYear = input(title="Start Year", type=input.integer,
     defval=(2019), minval=1800, maxval=2100)

EndMonth = input(title="End Month", type=input.integer,
     defval=1, minval=1, maxval=12)
EndDate = input(title="End Date", type=input.integer,
     defval=1, minval=1, maxval=31)
EndYear = input(title="End Year", type=input.integer,
     defval=(2020), minval=1800, maxval=2100)
     
// Look if the close time of the current bar falls inside the date range
inDateRange = true

buytrigger = (TC and up)
selltrigger = (TC and not up)
buysetup = (SC and not up)
sellsetup = (SC and up)

IntBuy = buytrigger ? 1 : 0
IntSB = buysetup ? 0.5 : 0

IntSell= selltrigger ? -1 : 0
IntSS = sellsetup ? -0.5 : 0

bgcolor = buytrigger ? color.green : selltrigger ? color.red : buysetup ? color.yellow : sellsetup ? color.orange : color.black
trans = buytrigger ? 20 : selltrigger ? 20 : 100

bgcolor(bgcolor, 30)

NUM = IntBuy + IntSB + IntSell + IntSS
linecolor = color.orange
plot(NUM, color=linecolor, linewidth=2)

alertcondition(NUM > 0.5, title="Buy Signal", message="Buy Alert")
alertcondition(NUM < -0.5, title="Sell Signal", message="Sell Alert")

alertcondition(NUM == 0.5, title="Buy Setup", message="Buy Setup")
alertcondition(NUM == -0.5, title="Sell Setup", message="Sell Setup")

//Switch on for strategy moves

if(inDateRange and buytrigger)
    strategy.exit("SHORT", "SHORT_SL", comment="Short_Exit")
    strategy.entry("LONG", strategy.long, comment="")
if(inDateRange and selltrigger)
    strategy.exit("LONG", "LONG_SL", comment="Long_Exit")
    strategy.entry("SHORT", strategy.short, comment="")
if (not inDateRange)
    strategy.close_all()

// plotshape(SC and not up, color = color.yellow, style = shape.triangleup, location = location.belowbar, size = size.auto, transp = 0, title = "Setup to Buy")
// plotshape(TC and up, color = color.green, style = shape.triangleup, location = location.belowbar, size = size.auto, title = "Trigger to Buy")
// plotshape(SC and up, color = color.yellow, style = shape.triangledown, location = location.abovebar, size = size.auto, transp = 0, title = "Setup to Sell")
// plotshape(TC and not up, color = color.red, style = shape.triangledown, location = location.abovebar, size = size.auto, title = "Trigger to Sell")


Más.