Estratégia dinâmica de suspensão de perdas

Autora:ChaoZhang, Data: 2023-12-21 15:58:54
Tags:

img

Resumo

Esta estratégia determina a direção da tendência com base em velas diárias e usa os novos pontos altos ou baixos formados por velas de 15 minutos como preço de stop loss ou preço de stop loss, de modo a ajustar dinamicamente o stop loss e bloquear mais lucros.

Estratégia lógica

  1. Comparar o preço de fechamento de velas diárias com o preço mais alto e mais baixo do velas diárias anteriores para determinar a direção da tendência. Se o preço de fechamento for superior ao preço mais alto do dia anterior, ele é definido como uma tendência de alta. Se o preço de fechamento for menor que o preço mais baixo do dia anterior, ele é definido como uma tendência de queda.

  2. Quando em uma tendência de alta, vá longo quando o preço de fechamento do candelabro de 15 minutos for maior do que o preço mais alto do candelabro de 15 minutos anterior.

  3. Defina o preço mais baixo do candelabro de 15 minutos anterior como o preço de stop loss após a compra.

  4. Quando o candelabro de 15 minutos fizer uma nova alta ou baixa novamente, ajuste o preço de stop loss de acordo. Ajuste para a nova baixa depois de ir longo. Ajuste para a nova alta depois de ir curto. Isso realiza uma parada de perda dinâmica.

Análise das vantagens

A maior vantagem desta estratégia é que ela pode ajustar dinamicamente o preço do stop loss, garantindo o controle de risco, maximizando a captação de lucro e reduzindo a probabilidade de o stop loss ser atingido.

As vantagens incluem especificamente:

  1. Os julgamentos baseados na operação de tendência podem determinar as tendências do mercado em tempo útil e escolher a direção correta da negociação.

  2. A negociação de um prazo de 15 minutos permite entradas e saídas frequentes para capturar mais oportunidades.

  3. O ajustamento dinâmico do stop loss com base em novos máximos ou mínimos reduz os riscos de que o stop loss seja atingido.

  4. O posicionamento razoável de stop loss evita em grande parte perdas desnecessárias.

Análise de riscos

O principal risco desta estratégia provém de erros no julgamento das tendências.

  1. O julgamento incorreto da tendência diária pode levar a uma direção comercial errada.

  2. Os preços podem flutuar violentamente a curto prazo, aumentando a probabilidade de um stop loss de 15 minutos ser atingido.

  3. A identificação inadequada dos pontos de inversão da tendência pode conduzir a perdas.

Soluções correspondentes:

  1. Adicionar indicadores de outros prazos para julgamentos abrangentes para evitar a dependência de apenas um período.

  2. Avaliação da volatilidade do mercado e flexibilização adequada do intervalo de stop loss durante a alta volatilidade.

  3. Adicionar um mecanismo de identificação do ponto de inversão da tendência para fechar posições em tempo útil antes das inversões.

Orientações de otimização

Ainda há espaço para uma maior otimização:

  1. Adicionar outros indicadores de prazos para otimizar a captura de tendências.

  2. Teste diferentes configurações de taxa de stop loss para encontrar parâmetros ideais.

  3. Adicionar indicadores de volume para evitar erros decorrentes da divergência de volume.

  4. Adicionar mecanismos de inversão de tendência para otimizar pontos de saída.

  5. Avaliação do alargamento dos intervalos de preços de trailing stop para reduzir ainda mais os riscos de que seja atingido um stop loss.

Resumo

O desempenho geral desta estratégia é bom. A lógica é clara e fácil de entender. Tem vantagens como ajuste dinâmico de stop loss, negociação frequente e negociação de acordo com as tendências. Pode controlar efetivamente os riscos e bloquear os lucros, e vale a pena mais testes e otimização. Mas ainda há espaço para melhoria. Recomenda-se melhorar aspectos como julgamento abrangente de vários ângulos, otimização de parâmetros, adição de mecanismos de identificação de reversão de tendência, etc., para fortalecer ainda mais a estabilidade e lucratividade da estratégia.


/*backtest
start: 2023-12-13 00:00:00
end: 2023-12-15 02:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Anand's Strategy", overlay=true)

// Get the high and low of the previous day's candle
prev_high = request.security(syminfo.tickerid, "D", high[2])
prev_low = request.security(syminfo.tickerid, "D", low[2])

// var float prev_high = na
// var float prev_low = na

prev_close = request.security(syminfo.tickerid, "D", close[1])


getDayIndexedHighLow(_bar) =>
    _indexed_high = request.security(syminfo.tickerid, "D", high[_bar])
    _indexed_low = request.security(syminfo.tickerid, "D", low[_bar])
    [_indexed_high, _indexed_low]

var index = 2

while index >= 0
    [indexed_high_D, indexed_low_D] =  getDayIndexedHighLow(index)
  
    if prev_close > indexed_high_D or prev_close < indexed_low_D
        prev_high := indexed_high_D
        prev_low := indexed_low_D
        break
    // Decrease the index to move to the previous 15-minute candle
    index := index - 1


// Determine the trade direction based on the candle criterion
trade_direction = prev_close > prev_high ? 1 : (prev_close < prev_low ? -1 : 0)

// Get the current close from 15-minute timeframe
current_close = request.security(syminfo.tickerid, "15", close[1])
prev_high_15m = request.security(syminfo.tickerid, "15", high[2])
prev_low_15m = request.security(syminfo.tickerid, "15", low[2])

// var float prev_high_15m = na
// var float prev_low_15m = na

getIndexedHighLow(_bar) =>
    _indexed_high = request.security(syminfo.tickerid, "15", high[_bar])
    _indexed_low = request.security(syminfo.tickerid, "15", low[_bar])
    [_indexed_high, _indexed_low]


// Loop through previous 15-minute candles until the condition is met
var  i = 2

while i >= 2
    [indexed_high_15m, indexed_low_15m] =  getIndexedHighLow(i)
  
    if current_close > indexed_high_15m or current_close < indexed_low_15m
        prev_high_15m := indexed_high_15m
        prev_low_15m := indexed_low_15m
        break
    // Decrease the index to move to the previous 15-minute candle
    i := i - 1



buy_condition = trade_direction == 1 and current_close > prev_high_15m
stop_loss_buy = prev_low_15m

// Sell Trade Criteria in Negative Trend
sell_condition = trade_direction == -1 and current_close < prev_low_15m
stop_loss_sell = prev_high_15m


// Trailing Stop Loss for Buy Trade
// Custom Trailing Stop Function for Buy Trade
var float trail_stop_buy = na
trailing_buy_condition = buy_condition and current_close > trail_stop_buy
if trailing_buy_condition
    trail_stop_buy := current_close

// Custom Trailing Stop Function for Sell Trade
var float trail_stop_sell = na
trailing_sell_condition = sell_condition and current_close < trail_stop_sell
if trailing_sell_condition
    trail_stop_sell := current_close

// Take Buy Trade with Stop Loss
if (buy_condition)
    strategy.entry("Buy", strategy.long)
    strategy.exit("Buy Stop Loss", "Buy", stop=stop_loss_buy)

// Take Sell Trade with Stop Loss
if (sell_condition)
    strategy.entry("Sell", strategy.short)
    strategy.exit("Sell Stop Loss", "Sell", stop=stop_loss_sell)

// Set the background color based on the trade direction
bgcolor(trade_direction == 1 ? color.new(color.green, 90) : trade_direction == -1 ? color.new(color.red, 90) : na)

Mais.