Контрарианская стратегия доступа к каналу Дончиана с паузой после остановки потери и остановкой после остановки потери

Автор:Чао Чжан, Дата: 2024-01-24 15:07:18
Тэги:

img

Обзор

Контрарианская стратегия доступа к каналу Дончиана (англ. Contrarian Donchian Channel Touch Entry Strategy) - это количественная стратегия торговли, основанная на индикаторе Дончиана.

Стратегия вступает в длинные/короткие позиции, когда цена касается верхней/нижней полосы Дончианского канала. Для каждой сделки устанавливаются уровни остановки потери и получения прибыли.

Логика стратегии

Стратегия использует 20-периодный Дончианский канал, состоящий из верхней полосы, нижней полосы и средней линии.

Логика входа

Идите длинный, когда цена касается нижней полосы; идти короткий, когда цена касается верхней полосы.

После предыдущей остановки потерь в том же направлении требуется пауза (например, 3 бары), чтобы избежать преследования тенденций.

Перестаньте терять и получайте прибыль

Для каждой сделки устанавливается фиксированный процент стоп-лосса (например, 22%) и динамическая прибыль, рассчитанная на основе соотношения риск-прибыль (например, 2)

Отслеживание остановки потери

Используйте стоп-лосс во время торгов:

Для длинных сделок, если цена пересекает среднюю линию, скорректировать стоп-лосс до середины цены входа и средней линии.

И наоборот, для коротких позиций, пересекающих среднюю линию.

Преимущества

  1. Поймать трендовые ходы с помощью прорывов Дончианского канала.

  2. Контрарианный контактный вход соответствует торговле против идеи тренда.

  3. Эффективное управление рисками с приостановкой стоп-лосса и последующей остановкой.

  4. Ясные и легко применяемые правила.

Риски

  1. Удары на боковых рынках для следующей за трендом системы.

  2. Фиксированный стоп-лосс может быть предрасположен к преждевременному остановке.

  3. Чрезмерно агрессивная корректировка остановки может вывести из строя прибыльные сделки слишком рано.

  4. Оптимизация параметров очень важна.

Возможности для расширения

  1. Оптимизируйте период просмотра Дончианского канала для лучших параметров.

  2. Включать правила размещения позиций, например, периодически пересчитывать паузы.

  3. Добавьте фильтры с использованием других индикаторов, чтобы избежать ложных прорывов.

  4. Эксперимент с динамической остановкой потери.

Резюме

Стратегия Contrarian Donchian Channel Touch Entry интегрирует идентификацию трендов, управление рисками и многое другое.


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


Больше