Contrarian Donchian Channel Touch Entry Strategy com pausa de perda pós-stop e perda de stop de tração

Autora:ChaoZhang, Data: 2024-01-24 15:07:18
Tags:

img

Resumo

A Contrarian Donchian Channel Touch Entry Strategy é uma estratégia quantitativa de negociação baseada no indicador Donchian Channel.

A estratégia entra em posições longas / curtas quando o preço toca a faixa superior / inferior do canal de Donchian. Os níveis de stop loss e take profit são definidos para cada negociação. Após um stop loss, haveria uma pausa por um número de barras antes de tomar um novo comércio na mesma direção.

Estratégia lógica

A estratégia utiliza o canal de Donchian de 20 períodos, composto por banda superior, banda inferior e linha média.

Lógico de entrada

Vá longo quando o preço tocar a faixa inferior; vá curto quando o preço tocar a faixa superior.

É necessária uma pausa (por exemplo, 3 barras) após uma parada de perda anterior na mesma direção para evitar a perseguição de tendências.

Pare de Perder e Aproveite

Para cada operação, fixar uma percentagem fixa de stop loss (por exemplo, 22%) e um take profit dinâmico calculado com base na relação risco/recompensa (por exemplo, 2)

Perda de paragem de atraso

Usar um stop loss final durante as negociações:

Para as transações longas, se o preço cruzar acima da linha média, ajuste o stop loss para o ponto médio do preço de entrada e da linha média.

Por outro lado, para posições curtas que cruzam abaixo da linha média.

Vantagens

  1. Apanhe os movimentos de tendência usando as fugas do canal Donchian.

  2. A entrada contrária do toque alinha-se com a negociação contra a ideia de tendência.

  3. Gestão eficaz do risco com pausa de stop loss e trailing stop.

  4. Regras claras e fáceis de aplicar.

Riscos

  1. Fusões nos mercados laterais para um sistema de tendência.

  2. O stop loss fixo pode ser propenso a ser parado prematuramente.

  3. Um ajuste de parada de atraso agressivo pode acabar com negócios lucrativos muito cedo.

  4. A otimização dos parâmetros é crucial.

Oportunidades de melhoria

  1. Otimizar o período de observação do canal de Donchian para melhores parâmetros.

  2. Incorporar regras de dimensionamento da posição, por exemplo, reiniciar periodicamente a contagem de pausas.

  3. Adicionar filtros usando outros indicadores para evitar falsas rupturas.

  4. Experimento com stop loss dinâmico.

Resumo

A Contrarian Donchian Channel Touch Entry Strategy integra a identificação de tendências, gerenciamento de riscos e muito mais.


/*backtest
start: 2023-01-17 00:00:00
end: 2024-01-23 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Contrarian Donchian Channel Strategy - Touch Entry with Post-SL Pause and Trailing Stop", overlay=true, default_qty_value=0.01, default_qty_type=strategy.percent_of_equity)

// Inputs
length = input(20, minval=1, title="Donchian Channel Length")
riskRewardRatio = input(2, title="Risk/Reward Ratio")
stopLossPercent = input(0.22, title="Stop Loss (%)") / 100
pauseCandles = input(3, minval=1, title="Pause After SL (Candles)")

// Donchian Channel Calculation
upper = highest(high, length)
lower = lowest(low, length)
centerline = (upper + lower) / 2  // Calculating the Centerline

// Plotting Donchian Channel and Centerline
plot(upper, color=color.red, title="Upper Band")
plot(lower, color=color.green, title="Lower Band")
plot(centerline, color=color.blue, title="Centerline")

// Tracking Stop Loss Hits and Pause
var longSLHitBar = 0
var shortSLHitBar = 0
var int lastTradeDirection = 0 // 1 for long, -1 for short, 0 for none

// Update SL Hit Bars
if (strategy.position_size[1] > 0 and strategy.position_size == 0)
    if (close[1] < strategy.position_avg_price[1])
        longSLHitBar := bar_index
        lastTradeDirection := 1

if (strategy.position_size[1] < 0 and strategy.position_size == 0)
    if (close[1] > strategy.position_avg_price[1])
        shortSLHitBar := bar_index
        lastTradeDirection := -1

// Entry Conditions - Trigger on touch
longCondition = (low <= lower) and (bar_index - longSLHitBar > pauseCandles or lastTradeDirection != 1)
shortCondition = (high >= upper) and (bar_index - shortSLHitBar > pauseCandles or lastTradeDirection != -1)

// Trade Execution
if (longCondition)
    strategy.entry("Long", strategy.long)
if (shortCondition)
    strategy.entry("Short", strategy.short)

// Initial Stop Loss and Take Profit Calculation
stopLoss = strategy.position_avg_price * (1 - stopLossPercent)
takeProfit = strategy.position_avg_price * (1 + stopLossPercent * riskRewardRatio)

// Trailing Stop Loss Logic
var float trailingStopLong = na
var float trailingStopShort = na

// Update Trailing Stop for Long Position
if (strategy.position_size > 0)
    if (close > centerline)
        trailingStopLong := (strategy.position_avg_price + centerline) / 2
    stopLoss := na(trailingStopLong) ? stopLoss : max(trailingStopLong, stopLoss)

// Update Trailing Stop for Short Position
if (strategy.position_size < 0)
    if (close < centerline)
        trailingStopShort := (strategy.position_avg_price + centerline) / 2
    stopLoss := na(trailingStopShort) ? stopLoss : min(trailingStopShort, stopLoss)

// Setting Stop Loss and Take Profit for each trade
strategy.exit("SL_TP_Long", "Long", stop=stopLoss, limit=takeProfit)
strategy.exit("SL_TP_Short", "Short", stop=stopLoss, limit=takeProfit)


Mais.