Estratégia PB SAR Backtest com stop loss elástico

Autora:ChaoZhang, Data: 2023-10-11 15:22:26
Tags:

Resumo

A estratégia baseia-se em indicadores de stop loss flexíveis, configura sinais de compra e venda, operações de posições longas e curtas. Faça mais quando o indicador apresenta sinais de compra; faça nada quando o indicador apresenta sinais de venda. A estratégia também combina um mecanismo de stop loss de rastreamento para controlar eficazmente o risco.

Princípios

A estratégia usa principalmente o indicador de interrupção elástico para identificar pontos de inflexão da tendência e executar operações de reversão. O indicador usa o indicador de intervalo real para identificar o preço do limite, e quando o preço excede o limite, considera uma ruptura anormal e determina a possibilidade de reversão da tendência. Especificamente, o indicador mantém duas variáveis no interior: o preço do limite (EP) e o preço do gatilho (TP).

Em uma tendência ascendente, quando o preço está acima do EP, é definido como uma ruptura anormal, quando o EP é atualizado como o preço mais alto e o TP como o preço mais baixo. Quando o preço está abaixo do TP, é definido como uma reversão da tendência, produzindo um sinal de venda. Em uma tendência descendente, o princípio é semelhante.

A estratégia combina um mecanismo de rastreamento de stop-loss, que, quando uma posição é aberta, rastreia o preço de stop-loss ideal em tempo real, controlando o risco enquanto garante lucro. Especificamente, após o excesso de trabalho, a linha de stop-loss segue o ponto de fechamento mais baixo; após o vazio, a linha de stop-loss segue o ponto de fechamento mais alto.

Vantagens

A estratégia tem as seguintes vantagens:

  1. A partir de agora, o índice pode ser usado para identificar pontos de reversão de tendências e não é fácil ser preso.

  2. O mecanismo de stop-loss rastreado pode bloquear os lucros e evitar a expansão dos prejuízos.

  3. Os parâmetros do indicador são simples e fáceis de implementar.

  4. O sinal de venda e venda pode ser configurado para facilitar a operação.

  5. Configure flexivelmente o ciclo de reavaliação para avaliar completamente o efeito da estratégia.

Risco

A estratégia também apresenta alguns riscos:

  1. Os indicadores estão atrasados e podem perder o ponto ideal para a reversão da tendência.

  2. A paralisação é muito radical e pode ser interrompida por um vaivém de preços de curto prazo.

  3. A seleção dos ciclos de reavaliação é inadequada e não permite uma avaliação completa dos efeitos da estratégia.

  4. O custo de transação deve ser considerado como um fator de lucro.

O que é o que você precisa saber sobre o que é um risco de perda de renda?

  1. A mudança de parâmetros do indicador diminui o atraso.

  2. Otimizar o algoritmo de stop loss para evitar ser enganado.

  3. Escolha o ciclo de reavaliação apropriado para garantir a confiabilidade.

  4. Otimizar o gerenciamento de posições e reduzir os custos de transação.

Optimização

A estratégia pode ser melhorada em:

  1. Em combinação com indicadores de tendência, evite que o negócio inverso seja bloqueado.

  2. Otimizar algoritmos de gestão de posições, como posições de proporção fixa, posições dinâmicas, etc.

  3. A partir de agora, o site pode ser usado para compartilhar informações sobre o que você está fazendo e como fazer isso.

  4. Otimizar os parâmetros para encontrar a melhor combinação de parâmetros.

  5. A estratégia de bloqueio é a de bloquear a tendência em tempo hábil.

  6. Otimizar a estratégia de stop loss para tornar o stop loss mais suave; experimentar algoritmos de stop loss como Chandelier Exit.

  7. Otimizar a variedade de transações, os períodos de tempo, etc. para melhorar a adaptabilidade da estratégia.

  8. A adição de algoritmos de aprendizagem de máquina torna as estratégias mais adaptáveis.

Resumo

A estratégia é simples e confiável em seu conjunto, usando indicadores de interrupção flexíveis para identificar pontos de reversão e equipados com mecanismos de controle de interrupção de rastreamento para controlar o risco, e pode ser usada como uma estratégia de reversão de curto prazo.

Resumo

Esta estratégia baseia-se no indicador Parabolic SAR para gerar sinais de compra e venda para posições longas e curtas.

Princípio

O núcleo desta estratégia é identificar pontos de reversão de tendência usando o indicador Parabolic SAR para negociação de contra-tendência. O indicador usa a faixa verdadeira para detectar preços extremos. Quando o preço excede o extremo, ele é considerado uma ruptura e um sinal de reversão de tendência potencial. Especificamente, o indicador mantém duas variáveis: o Preço Extremo (EP) e o Preço Trigger (TP). O EP representa o preço mais alto / mais baixo da tendência atual, enquanto o TP é derivado do EP.

Em uma tendência de alta, quando o preço é superior ao EP, é considerado uma quebra. O EP é então atualizado para o preço mais alto e o TP para o preço mais baixo. Quando o preço cai abaixo do TP, uma inversão de tendência é identificada e um sinal de venda é gerado. O mesmo princípio se aplica a uma tendência de queda.

A estratégia também incorpora um mecanismo de stop loss de trail. Após a abertura de uma posição, ele rastreará o preço de stop loss ideal em tempo real, bloqueando os lucros enquanto controla os riscos. Especificamente, após a entrada longa, o stop loss rastreia a baixa de fechamento; após a entrada curta, ele rastreia a alta de fechamento.

Vantagens

As principais vantagens desta estratégia são:

  1. Identifique os pontos de inversão da tendência com o indicador, evitando ficar preso nas tendências.

  2. O trailing stop loss bloqueia os lucros e impede perdas maiores.

  3. Parâmetros de indicadores simples, fáceis de implementar.

  4. Alertas de sinal de compra/venda configuráveis para maior conveniência.

  5. Configuração flexível do período de backtest para avaliação completa.

Riscos

Há também alguns riscos a considerar:

  1. O atraso do indicador pode não atingir os pontos de reversão ideais.

  2. As paradas agressivas podem ser interrompidas por flutuações de curto prazo.

  3. A escolha inadequada do período de backtest não pode avaliar plenamente a estratégia.

  4. Os custos de transacção podem prejudicar os lucros.

Algumas formas de lidar com os riscos são:

  1. Optimize os parâmetros para reduzir o atraso.

  2. Melhorar o algoritmo de stop loss para evitar ser parado desnecessariamente.

  3. Escolher períodos de ensaio posterior adequados para a fiabilidade.

  4. Otimizar o dimensionamento das posições para reduzir os custos de transacção.

Reforço

Algumas formas de otimizar ainda mais a estratégia:

  1. Incorporar indicadores de tendência, como o MA, para evitar ser preso em contratrends.

  2. Otimizar os algoritmos de dimensionamento de posição, por exemplo, fracionário fixo, dinâmico.

  3. Adicionar um filtro de volume para evitar falsos sinais de lacunas.

  4. Optimização de parâmetros para encontrar combinações ideais.

  5. Implementar estratégias de captação de lucros para bloquear os lucros nas tendências.

  6. Refinar algoritmos de stop loss para paradas mais suaves. Experimentar com Chandelier Exit etc.

  7. Otimizar entre produtos, prazos, etc. para melhorar a adaptabilidade.

  8. Incorporar aprendizagem de máquina para maior adaptabilidade.

Resumo

Em resumo, esta é uma estratégia simples e robusta usando o SAR Parabólico para identificar reversões e trailing stop loss para controlar o risco. Pode funcionar como uma estratégia de reversão média de curto prazo.


/*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")


Mais.