Дончианский канал со стратегией остановки потерь

Автор:Чао Чжан, Дата: 2023-12-07 16:53:10
Тэги:

img

Обзор

Это стратегия, основанная на индикаторе Donchian Channel, в сочетании с динамическим стоп-лосом, основанным на индикаторе ATR, чтобы зафиксировать прибыль.

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

Стратегия использует 20-периодный Дончианский канал, где средняя линия канала - это среднее значение самого высокого и самого низкого минимума. Она длинна, когда цена пересекает верхнюю линию канала, и коротка, когда цена пересекает нижнюю линию. Правило выхода заключается в том, когда цена касается динамической линии стоп-лосса, которая рассчитывается как самое низкое из последних 3 бар минус треть значения ATR для длинных позиций и самое высокое из последних 3 бар плюс одна треть значения ATR для коротких позиций.

Анализ преимуществ

Основными преимуществами этой стратегии являются:

  1. Donchian Channel эффективен в определении направлений рыночных тенденций и выявлении тенденций.
  2. Динамический стоп-лосс, основанный на ATR, блокирует прибыль при одновременном контроле рисков.
  3. Включение ATR-фактора в расчет стоп-лосса учитывает волатильность рынка, что делает стоп-лосс более разумным.
  4. Метод расчета стоп-лосса является стабильным и надежным, избегая слишком близких стопов и преждевременного остановки.

Анализ рисков

К основным рискам этой стратегии относятся:

  1. Дончианский канал имеет определенный эффект отставания, который может упустить краткосрочные возможности.
  2. Неправильное установление параметров ATR может привести к тому, что стоп-потеря будет слишком широкой или слишком близкой.
  3. Механизм определения тренда относительно прост, что может привести к увеличению количества ложных сигналов во время консолидации рынка.
  4. Отсутствие эффективного суждения о поддержке/сопротивлении, что приводит к неправильному сроку выхода на рынок.

Руководство по оптимизации

Некоторые направления оптимизации для этой стратегии:

  1. Добавьте другие индикаторы, чтобы избежать частой торговли, когда нет четкой тенденции.
  2. Добавьте суждение о поддержке / сопротивлении для оптимизации времени входа.
  3. Испытать другие динамические методы расчета стоп-лосса для дальнейшей оптимизации стратегии стоп-лосса.
  4. Испытать влияние различных параметров периода Дончианского канала на эффективность стратегии.
  5. Добавьте фильтры на громкость или увеличения, чтобы уменьшить ложные сигналы.

Заключение

В общем, это простая и практичная стратегия следования трендам. Она определяет направление тренда через Дончианский канал и блокирует прибыль с динамическим отслеживанием стоп-лосса, который может эффективно следовать трендам. Стратегия довольно практична в использовании, но может быть дополнительно оптимизирована различными способами для лучшей производительности в более сложных рыночных условиях.


/*backtest
start: 2023-11-29 00:00:00
end: 2023-12-06 00:00:00
period: 30m
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy(title = "dc",  overlay = true)
atrLength = input(title="ATR Length:", defval=20, minval=1)

testStartYear = input(2017, "Backtest Start Year")
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)

testEndYear = input(2018, "Backtest Start Year")
testEndMonth = input(12)
testEndDay = input(31, "Backtest Start Day")
testPeriodEnd = timestamp(testEndYear,testEndMonth,testEndDay,0,0)


testPeriod() =>
    true
    //time >= testPeriodStart  ? true : false

dcPeriod = input(20, "Period")

dcUpper = highest(close, dcPeriod)[1]
dcLower = lowest(close, dcPeriod)[1]
dcAverage = (dcUpper + dcLower) / 2
atrValue=atr(atrLength)


useTakeProfit   = na
useStopLoss     = na
useTrailStop    = na
useTrailOffset  = na
//@version=1
Buy_stop = lowest(low[1],3) - atr(20)[1] / 3
plot(Buy_stop, color=red, title="buy_stoploss")
Sell_stop = highest(high[1],3) + atr(20)[1] / 3
plot(Sell_stop, color=green, title="sell_stoploss")

plot(dcLower, style=line, linewidth=3, color=red, offset=1)
plot(dcUpper, style=line, linewidth=3, color=aqua, offset=1)

plot(dcAverage, color=black, style=line, linewidth=3, title="Mid-Line Average")

strategy.entry("simpleBuy", strategy.long, when=(close > dcAverage) and cross(close,dcAverage))
strategy.close("simpleBuy",when= ( close< Buy_stop))
    
strategy.entry("simpleSell", strategy.short,when=(close < dcAverage) and cross(close,dcAverage) )
strategy.close("simpleSell",when=( close > Sell_stop))
    
//strategy.exit("Exit simpleBuy", from_entry = "simpleBuy", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset)
//strategy.exit("Exit simpleSell", from_entry = "simpleSell", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset)



Больше